diff --git a/changelog.html b/changelog.html
index 3a13d18c..0d37de05 100644
--- a/changelog.html
+++ b/changelog.html
@@ -1,6 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
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 `
`;
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;