diff --git a/changelog.html b/changelog.html index 3a13d18c..0d37de05 100644 --- a/changelog.html +++ b/changelog.html @@ -1,6 +1,31 @@ +
3.5.355
+ + +
3.5.354
+ + +
3.5.353
+ + +
3.5.352
+ +
3.5.351
diff --git a/dark.css b/dark.css index ac5e637b..644c6f88 100644 --- a/dark.css +++ b/dark.css @@ -855,19 +855,23 @@ body.ffz-dark:not([data-page="teams#show"]), /* Dashboard */ +.ffz-dark .card-carousel__button, .ffz-dark .carousel__button { background-color: #101010; } +.ffz-dark .card-carousel__arrow:before, .ffz-dark .carousel__arrow:before { border-color: #a68ed2; } +.ffz-dark .card-carousel__button:hover .card-carousel__arrow:before .ffz-dark .carousel__button:hover .carousel__arrow:before { border-color: #fff; } .ffz-dark .brick.brick--theme-grey, +.ffz-dark .card-carousel__button:hover .ffz-dark .carousel__button:hover { background-color: #191919; } @@ -1110,6 +1114,7 @@ body.ffz-dark:not([data-page="teams#show"]), /* Playlist */ +.ffz-dark .cn-chat-replay-header, .ffz-dark .ember-chat .chat-header { box-shadow: inset 0 -1px 0 0 rgba(255,255,255,0.2); } @@ -1128,16 +1133,16 @@ body.ffz-dark:not([data-page="teams#show"]), /* VoDs */ .ffz-dark .app-main .chatReplay .notice-wrapper .svg-logo_glitch { - fill: #242424 !important; + fill: #242424 !important; } .ffz-dark .app-main .chatReplay .noticeWrap, .ffz-dark .app-main .chatReplay .notice-wrapper { - background-color: #191919; + background-color: #191919; } .ffz-dark .chatReplay .loading-spinner-container { - background: rgba(25,25,25,0.65); + background: rgba(25,25,25,0.65); } diff --git a/src/commands.js b/src/commands.js index 68fc49b3..c0b2092e 100644 --- a/src/commands.js +++ b/src/commands.js @@ -173,6 +173,9 @@ FFZ.ffz_commands.reload = function(room, args) { var f = this, promises = []; + // Feature Friday. There's no feedback possible so don't use a promise. + this.check_ff(); + // Badge Information promises.push(new Promise(function(done, fail) { f.load_badges(function(success, badge_count, badge_total, badge_data) { diff --git a/src/ember/chat-input.js b/src/ember/chat-input.js index d1504557..a285745b 100644 --- a/src/ember/chat-input.js +++ b/src/ember/chat-input.js @@ -17,6 +17,10 @@ var FFZ = window.FrankerFaceZ, label: '/timeout <user> [duration=600] [reason]', info: 'Temporarily Ban User' }, + untimeout: { + label: '/untimeout <user>', + info: 'Unban Temporarily-Banned User' + }, clear: {info: 'Clear Chat for All Users'}, slow: { diff --git a/src/ember/layout.js b/src/ember/layout.js index 56676159..d8d8ab9a 100644 --- a/src/ember/layout.js +++ b/src/ember/layout.js @@ -254,11 +254,11 @@ FFZ.prototype.setup_layout = function() { var size = this.get('fullSizePlayerDimensions'); return ''); - ffzUnfreeze: function(from_stuck) { - this.ffz_frozen = false; - this._ffz_last_move = 0; - this.ffzUnwarnPaused(); + }.property('badgeSet', 'ffzBadgeSet'), - if ( ! from_stuck && this.get('stuckToBottom') ) - this._scrollToBottom(); - }, + ffzFreezeUpdateBuffer: function(val) { + if ( val === undefined ) + val = this.get('stuckToBottom'); - ffzPulse: function() { - if ( this.ffz_frozen ) { - var elapsed = Date.now() - this._ffz_last_move; - if ( elapsed > 750 ) - this.ffzUnfreeze(); - } - }, - - ffzMouseOut: function(event) { - this._ffz_outside = true; - var e = this; - setTimeout(function() { - if ( e._ffz_outside ) - e.ffzUnfreeze(); - }, 25); - }, - - ffzMouseMove: function(event) { - this._ffz_last_move = Date.now(); - this._ffz_outside = false; - - if ( event.screenX === this._ffz_last_screenx && event.screenY === this._ffz_last_screeny ) - return; - - this._ffz_last_screenx = event.screenX; - this._ffz_last_screeny = event.screenY; - - if ( this.ffz_frozen ) - return; - - this.ffz_frozen = true; - if ( this.get('stuckToBottom') ) { - VODService && VODService.set("messageBufferSize", f.settings.scrollback_length + 150); - this.ffzWarnPaused(); - } - }, - - _scrollToBottom: _.throttle(function() { - var e = this, - scroller = e.get('chatMessagesScroller'); - - if ( ! scroller || ! scroller.length ) - return; - - Ember.run.next(function() { - (window.requestAnimationFrame||setTimeout)(function() { - if ( e.ffz_frozen ) - return; - - scroller[0].scrollTop = scroller[0].scrollHeight; - e._setStuckToBottom(true); - }) - }) - }, 300), - - _setStuckToBottom: function(val) { - this.set("stuckToBottom", val); VODService && VODService.set("messageBufferSize", f.settings.scrollback_length + (val ? 0 : 150)); - if ( ! val ) - this.ffUnfreeze(true); - }, - - ffzWarnPaused: function() { - var el = this.get('element'), - warning = el && el.querySelector('.chat-interface .more-messages-indicator.ffz-freeze-indicator'); - - if ( ! el ) - return; - - if ( ! warning ) { - warning = document.createElement('div'); - warning.className = 'more-messages-indicator ffz-freeze-indicator'; - warning.innerHTML = '(Chat Paused Due to Mouse Movement)'; - - var cont = el.querySelector('.chat-interface'); - if ( ! cont ) - return; - cont.insertBefore(warning, cont.childNodes[0]) - } - - warning.classList.remove('hidden'); - }, - - ffzUnwarnPaused: function() { - var el = this.get('element'), - warning = el && el.querySelector('.chat-interface .more-messages-indicator.ffz-freeze-indicator'); - - if ( warning ) - warning.classList.add('hidden'); } - }); + + }, FFZ.HoverPause)); } \ No newline at end of file diff --git a/src/ext/betterttv.js b/src/ext/betterttv.js index 81b1e228..1e83cbb2 100644 --- a/src/ext/betterttv.js +++ b/src/ext/betterttv.js @@ -73,8 +73,8 @@ FFZ.prototype.setup_bttv = function(delay) { if ( this._roomv ) { // Disable Chat Pause - if ( this.settings.chat_hover_pause ) - this._roomv.ffzDisableFreeze(); + this._roomv.ffzDisableFreeze(); + this._roomv.ffzRemoveKeyHook(); // And hide the status if ( this.settings.room_status ) diff --git a/src/main.js b/src/main.js index 2ea3c83b..4870dcbf 100644 --- a/src/main.js +++ b/src/main.js @@ -61,7 +61,7 @@ FFZ.channel_metadata = {}; // Version var VER = FFZ.version_info = { - major: 3, minor: 5, revision: 351, + major: 3, minor: 5, revision: 355, toString: function() { return [VER.major, VER.minor, VER.revision].join(".") + (VER.extra || ""); } diff --git a/src/tokenize.js b/src/tokenize.js index cb349e4a..1856e5cc 100644 --- a/src/tokenize.js +++ b/src/tokenize.js @@ -937,7 +937,7 @@ FFZ.prototype.render_token = function(render_links, warn_links, render_bits, tok //return `${utils.quote_attr(token.altText)}`; var f = this, prefix = '', suffix = ''; if ( token.modifiers && token.modifiers.length ) { - prefix = ''; + prefix = ''; suffix = _.map(token.modifiers, function(t) { return '' + f.render_token(render_links, warn_links, render_bits, t) + ''; }).join('') + ''; diff --git a/src/utils.js b/src/utils.js index d4f5c237..249cc867 100644 --- a/src/utils.js +++ b/src/utils.js @@ -989,7 +989,7 @@ module.exports = FFZ.utils = { m_top = margins[0 % l], m_bottom = margins[2 % l]; - output += '.modified-emoticon span img[data-ffz-emote="' + emote.id + '"] {' + + output += '.modified-emoticon span .emoticon[data-ffz-emote="' + emote.id + '"] {' + 'padding:' + m_top + 'px ' + m_right + 'px ' + m_bottom + 'px ' + m_left + 'px;' + (emote.shrink_to_fit ? 'max-width: calc(100% - ' + (40 - m_left - m_right - (emote.extra_width || 0)) + 'px);' : '') + 'margin: 0 !important' + @@ -997,9 +997,9 @@ module.exports = FFZ.utils = { } return output + - '.activity-body img[data-ffz-emote="' + emote.id + '"],' + - '.chat-line img[data-ffz-emote="' + emote.id + '"] {' + - (emote.margins && (! emote.modifier || emote.modifier_offset) ? 'margin:' + emote.margins + ' !important;' : '') + + (emote.modifier && emote.margins ? '.ffz-bttv .emoticon[data-ffz-emote="' + emote.id + '"] { margin: ' + emote.margins + ' !important;}' : '') + + '.emoticon[data-ffz-emote="' + emote.id + '"] {' + + ((emote.margins && ! emote.modifier) ? 'margin:' + emote.margins + ' !important;' : '') + (emote.css || '') + '}\n'; }, diff --git a/style.css b/style.css index 3a76f8e6..78bc84fc 100644 --- a/style.css +++ b/style.css @@ -1045,8 +1045,10 @@ body.ffz-bttv-dark .ffz-ui-popup ul.menu svg path { fill: #d3d3d3; } /* BTTV Menu Fixes */ +.emote-menu .header-info img { max-width: 18px; max-height: 18px } + .bttv-incompatibility { - padding-top: 8px !important; + padding-top: 8px !important; } body.ffz-bttv-dark .ffz-ui-popup .emoticon-grid .heading, @@ -1135,12 +1137,15 @@ body.ffz-bttv-dark .ffz-ui-popup .ffz-ui-menu-page { border-bottom: none } .chatReplay .chat-messages .chat-line .mod-icons { position: absolute; z-index: 10; - left: 0; top: 2px; bottom: 2px; - padding: 4px 5px 4px 4px; + left: 0; top: 0; bottom: 0; + padding: 3px 5px 4px 4px; background: rgba(255,255,255,0.8); transition: margin-left .08s linear; } +.chatReplay .show-mod-icons .chat-line .mod-icons { transition: none } +.chatReplay .chat-messages .chat-line:hover { overflow: visible } + .chatReplay .chat-messages .chat-line:hover .mod-icons { margin-left: 0; } @@ -1312,7 +1317,7 @@ img.channel_background[src="null"] { display: none; } margin-left: 50px; height: 18px; line-height: 18px; - pointer-events: none; + pointer-events: none; } .ffz-moderation-card .info .stat { @@ -2036,11 +2041,11 @@ body.ffz-minimal-chat-input .ember-chat .chat-interface .textarea-contain textar .ember-chat .chat-interface .more-messages-indicator.ffz-freeze-indicator { opacity: 1; cursor: default; - pointer-events: none; + pointer-events: none; } .chat-container:not(.chatReplay) .chat-interface .more-messages-indicator.ffz-freeze-indicator { - top: 0; + top: 0; } /* Chat History */ @@ -3559,6 +3564,8 @@ body.ffz-bttv #ffz-feed-tabs .tabs { margin-bottom: 0 } padding-top: 80px; } +.cn-hosting .ffz.card__layout .card__title { color: #9c9c9c } + .cn-hosting .ffz.card__layout .card__title, .ffz-channel-title-top .cn-metabar__more, .app-main.theatre .cn-metabar__more { @@ -3750,11 +3757,21 @@ body:not(.ffz-channel-bar-bottom).ffz-small-player.ffz-minimal-channel-bar #play /* Modifier Emotes */ -.modified-emoticon { - position: relative; +.emoticon-grid span.emoticon:not([data-ffz-emote="59829"]) { + padding-top: 0; + margin: 0 !important } -.modified-emoticon > .emoticon { margin: 0 } +.modified-emoticon ~ .emoticon { position: relative; z-index: 1} + +.modified-emoticon { + position: relative; + z-index: 0; +} + +.modified-emoticon[data-ffz-emote="59829"] span { right: 128px } + +.modified-emoticon > img.emoticon { margin: 0 !important } .modified-emoticon span { position: absolute;