1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-06-27 21:05:53 +00:00

3.5.373. Fix global emotes bug. Fix API stupidity with not passing all attributes of emotes/emote sets/badges. Add badge click_action function. Add support for target-msg-id CLEARMESSAGE tag. Add alternate mode tab-completion handling. Also older changes because I'm bad at commiting. Closes #55

This commit is contained in:
SirStendec 2016-11-19 01:59:03 -05:00
parent 791fcab2d2
commit cc5aec5591
12 changed files with 203 additions and 142 deletions

View file

@ -1,3 +1,23 @@
<div class="list-header">3.5.373 <time datetime="2016-11-19">(2016-11-19)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Added: Support for <code>target-msg-id</code> when users are banned.</li>
<li>Added: Setting for alternate input handling when doing tab-completion. Hopefully I didn't break tab-completion.</li>
<li>Fixed: Bug causing global emotes to not load.</li>
<li>API Fixed: Pass all attributes through when registering badges and emote sets.</li>
</ul>
<div class="list-header">3.5.372 <time datetime="2016-11-16">(2016-11-16)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Changed: Chat Font Family and Font Size now appear to Pinned Cheers.</li>
<li>Fixed: Pinned Cheers had too much padding and the Expand Pinned Cheers option wasn't functioning perfectly.</li>
<li>Fixed: Dark CSS tweaks. (Notably, had to completely re-do the search slideout again...)</li>
</ul>
<div class="list-header">3.5.371 <time datetime="2016-11-14">(2016-11-14)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Properly darken new clips UI.</li>
</ul>
<div class="list-header">3.5.370 <time datetime="2016-11-13">(2016-11-13)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Added: Temporary setting to remove messages with banned words from chat to hold people over until I finish proper chat filtering.</li>
@ -47,26 +67,5 @@
<li>Changed: Dark mode CSS tweaks.</li>
</ul>
<div class="list-header">3.5.362 <time datetime="2016-11-03">(2016-11-03)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Twitch changed how the player is sized, particularly in theater mode. This broke positioning of the player in several configurations.</li>
<li>Fixed: Issue that could cause Subscriber badges to render invisibly.</li>
<li>Fixed: Elements of the Twitch Feed have been renamed. (It used to be Channel Feed.)</li>
<li>Changed: Dark theme CSS tweaks.</li>
</ul>
<div class="list-header">3.5.361 <time datetime="2016-11-02">(2016-11-02)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Twitch renamed VOD chat components internally so no FFZ features were working for it.</li>
<li>Fixed: VOD chat would become light again after toggling theater mode on and then off again.</li>
</ul>
<div class="list-header">3.5.360 <time datetime="2016-10-28">(2016-10-28)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Changed: Move the Twitch emotes data file so CloudFlare will actually cache it. Woo Page Rules</li>
<li>Changed: Minor CSS tweaks.</li>
<li>Fixed: Report menu for Hosts was not positioned well.</li>
</ul>
<div class="list-header" id="ffz-old-news-button"><a href="#">View Older</a></div>
<div id="ffz-old-news"></div>

View file

@ -381,6 +381,8 @@ body.ffz-dark:not([data-page="teams#show"]),
color: #fff;
}
.ffz-dark .button--hollow { box-shadow: inset 0 0 0 1px #4b367c }
.ffz-dark .panel-formatting .panel h3 {
color: inherit;
}
@ -1443,49 +1445,51 @@ body.ffz-dark:not([data-page="teams#show"]),
/* Search Panel */
.ffz-dark[data-current-path="user.channel.index.index"] .searchPanel { background-color: rgba(16,16,16,0.9) }
.ffz-dark[data-current-path="user.channel.index.index"] .search-panel { background-color: rgba(16,16,16,0.9) }
.ffz-dark .searchPanel {
.ffz-dark .search-panel {
background-color: #101010;
color: #C3C3C3;
}
.ffz-dark .searchPanel--fly:before,
.ffz-dark .searchPanel--fly:after {
.ffz-dark .search-panel--fly:before,
.ffz-dark .search-panel--fly:after {
border-bottom-color: #404040;
}
.ffz-dark .titleBar {
.ffz-dark .search-panel__title-bar {
background-color: #090909;
}
.ffz-dark .searchPanel,
.ffz-dark .titleBar,
.ffz-dark .titleBar__back {
.ffz-dark .search-panel,
.ffz-dark .search-panel__title-bar,
.ffz-dark .search-panel__title-back {
border-color: rgba(255,255,255,0.2)
}
.ffz-dark .titleBar__title { color: #999 }
.ffz-dark .search-panel__title { color: #999 }
.ffz-dark .titleBar__back:hover,
.ffz-dark .resultView__titlesep.isActive { background-color: #222 }
.ffz-dark .searchPanel .card__body--overlay .card__title {
text-shadow: 1px 1px #000, -1px 1px #000, -1px -1px #000, 1px -1px #000;
}
.ffz-dark .search-panel__title-back:hover,
.ffz-dark .search-result-view__block.isActive { background-color: #222 }
.ffz-dark .search-result-view__titlesep:hover,
.ffz-dark .card__title a:hover,
.ffz-dark .card__info a:hover {
color: #ccd;
}
.ffz-dark .resultView__item .card__info span,
.ffz-dark .resultView__item .card__title,
.ffz-dark .resultView__titlesep.isActive .resultView__titleMore { color: #a68ed2 }
.ffz-dark .resultView__titlesep {
.ffz-dark .search-result-view__block .card__info span,
.ffz-dark .search-result-view__block .card__title,
.ffz-dark .search-result-view__title-more { color: #a68ed2 !important }
.ffz-dark .search-result-view__titlesep {
background-color: #090909;
}
.ffz-dark .search-result-view__block .card__layout:hover .card__info span,
.ffz-dark .search-result-view__block .card__layout:hover .card__title {
color: #fff !important
}
/* Channel Redesign */

View file

@ -1,3 +1,24 @@
<div class="list-header">3.5.362 <time datetime="2016-11-03">(2016-11-03)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Twitch changed how the player is sized, particularly in theater mode. This broke positioning of the player in several configurations.</li>
<li>Fixed: Issue that could cause Subscriber badges to render invisibly.</li>
<li>Fixed: Elements of the Twitch Feed have been renamed. (It used to be Channel Feed.)</li>
<li>Changed: Dark theme CSS tweaks.</li>
</ul>
<div class="list-header">3.5.361 <time datetime="2016-11-02">(2016-11-02)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Twitch renamed VOD chat components internally so no FFZ features were working for it.</li>
<li>Fixed: VOD chat would become light again after toggling theater mode on and then off again.</li>
</ul>
<div class="list-header">3.5.360 <time datetime="2016-10-28">(2016-10-28)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Changed: Move the Twitch emotes data file so CloudFlare will actually cache it. Woo Page Rules</li>
<li>Changed: Minor CSS tweaks.</li>
<li>Fixed: Report menu for Hosts was not positioned well.</li>
</ul>
<div class="list-header">3.5.359 <time datetime="2016-10-28">(2016-10-28)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Presence was not getting set to Invisible properly.</li>

View file

@ -389,12 +389,15 @@ FFZ.prototype.get_badges = function(user, room_id, badges, msg) {
}
FFZ.prototype._get_badge_object = function(badge, full_badge) {
var id = badge.id || full_badge.id;
return {
klass: 'ffz-badge-' + (badge.id || full_badge.id),
id: id,
klass: 'ffz-badge-' + id,
title: badge.title || full_badge.title || ('Unknown FFZ Badge\nID: ' + (badge.id | full_badge.id)),
image: badge.image,
full_image: full_badge.image,
color: badge.color,
click_action: badge.click_action || full_badge.click_action,
click_url: badge.click_url || full_badge.click_url,
no_invert: badge.no_invert || full_badge.no_invert,
no_color: badge.no_color || full_badge.no_color,
@ -530,6 +533,9 @@ FFZ.prototype.render_badges = function(badges) {
if ( badge.click_url )
klass += ' click_url';
if ( badge.click_action )
klass += ' click_action';
if ( badge.no_invert )
klass += ' no-invert';
@ -542,7 +548,7 @@ FFZ.prototype.render_badges = function(badges) {
if ( badge.transparent )
klass += ' transparent';
out.push('<div class="badge html-tooltip ' + utils.quote_attr(klass) + '"' + (badge.click_url ? ' data-url="' + utils.quote_attr(badge.click_url) + '"' : '') + (css ? ' style="' + utils.quote_attr(css) + '"' : '') + ' title="' + utils.quote_attr(badge.title) + '"></div>');
out.push('<div class="badge html-tooltip ' + utils.quote_attr(klass) + '"' + (badge.click_url ? ' data-badge-id="' + badge.id + '" data-url="' + utils.quote_attr(badge.click_url) + '"' : '') + (css ? ' style="' + utils.quote_attr(css) + '"' : '') + ' title="' + utils.quote_attr(badge.title) + '"></div>');
}
return out.join("");

View file

@ -204,6 +204,18 @@ FFZ.settings_info.input_complete_emotes = {
}
FFZ.settings_info.input_complete_keys = {
type: "boolean",
value: false,
category: "Chat Input",
no_bttv: true,
name: "Tab-Complete Alternate Input",
help: "When this is enabled, Tab and Shift-Tab will cycle through possible values and Space will insert the value."
}
FFZ.settings_info.input_complete_commands = {
type: "boolean",
value: true,
@ -619,7 +631,7 @@ FFZ.prototype.modify_chat_input = function(component) {
}.observes('suggestions'),
ffzCompleteSuggestion: function(item) {
ffzCompleteSuggestion: function(item, add_space) {
if ( ! item ) {
var suggestions = this.get('ffz_sorted_suggestions'),
current = this.get('ffz_current_suggestion');
@ -628,8 +640,6 @@ FFZ.prototype.modify_chat_input = function(component) {
}
this.ffzHideSuggestions();
if ( ! item )
return;
var t = this,
ind = this.get('ffz_partial_word_start'),
@ -638,18 +648,30 @@ FFZ.prototype.modify_chat_input = function(component) {
first_char = text.charAt(0),
is_cmd = first_char === '/' || first_char === '.',
content = ((f.settings.input_complete_name_at && ! is_cmd && item.type === 'user' && this.get('ffz_partial_word').charAt(0) === '@') ? '@' : '') +
((item.command_content && is_cmd ?
item.command_content : item.content) || item.label),
trail, prefix;
trail = text.substr(ind + this.get('ffz_partial_word').length),
prefix = text.substr(0, ind) + content + (trail ? '' : ' ');
if ( item ) {
var content = ((f.settings.input_complete_name_at && ! is_cmd && item.type === 'user' && this.get('ffz_partial_word').charAt(0) === '@') ? '@' : '') +
((item.command_content && is_cmd ?
item.command_content : item.content) || item.label);
prefix = text.substr(0, ind) + content;
trail = text.substr(ind + this.get('ffz_partial_word').length);
} else {
var area = this.get('chatTextArea'),
ind = selection_start(area);
prefix = text.substr(0, ind);
trail = text.substr(ind);
}
prefix += !add_space && trail ? '' : ' ';
this.set('textareaValue', prefix + trail);
this.set('ffz_partial_word', '');
this.set('ffz_partial_word_start', -1);
this.trackSuggestionsCompleted();
if ( item )
this.trackSuggestionsCompleted();
Ember.run.next(function() {
var area = t.get('chatTextArea');
move_selection(area, prefix.length);
@ -821,7 +843,7 @@ FFZ.prototype.modify_chat_input = function(component) {
// It's a sub emote, so try splitting off the end of the code.
// It's a bit weird, but people might like it. Also, make sure
// we aren't just grabbing an initial capital.
var unprefixed = code.substr(1).match(/[A-Z](?:.+)?$/);
var unprefixed = code.substr(1).match(/[A-Z0-9](?:.+)?$/);
unprefixed = unprefixed ? unprefixed[0] : null;
if ( unprefixed )
emotes.push({
@ -1283,21 +1305,38 @@ FFZ.prototype.modify_chat_input = function(component) {
if ( text.length === 0 )
break;
if ( text.charAt(0) !== '/' ) {
var parts = text.split(' ');
if ( parts[parts.length - 1].length === 0 )
if ( text.charAt(0) !== '/' || f.settings.input_complete_name_require_at ) {
var ind = selection_start(this.get('chatTextArea')),
part = text.substr(ind > 0 ? ind - 1 : 0),
match = /^[^ ]+/.exec(part);
if ( ! match || match[0].length === 0 )
break;
}
// If suggestions aren't visible... show them. And set that we
// triggered the suggestions with tab.
if ( ! this.get('ffz_suggestions_visible') ) {
f.log("Showing Suggestions from Tab");
this.ffzFetchNameSuggestions();
this.set('ffz_suggestions_visible', true);
this.ffzSetPartialWord();
this.trackSuggestions("Tab");
// If suggestions *are* visible, enter a suggestion.
// If suggestions are visible, tab through the possibilities.
} else if ( f.settings.input_complete_keys ) {
var suggestions = this.get('ffz_sorted_suggestions'),
current = this.get('ffz_current_suggestion') + ((e.shiftKey || e.shiftLeft) ? -1 : 1);
if ( current < 0 )
current = suggestions.length - 1;
else if ( current >= suggestions.length )
current = 0;
this.set('ffz_freeze_suggestions', -1);
this.set('ffz_current_suggestion', current);
// Otherwise, complete the suggestion.
} else
this.ffzCompleteSuggestion();
@ -1381,7 +1420,11 @@ FFZ.prototype.modify_chat_input = function(component) {
case KEYCODES.SPACE:
// First things first, if we're currently showing suggestions, get rid of them.
if ( this.get('ffz_suggestions_visible') )
this.ffzHideSuggestions();
if ( f.settings.input_complete_keys ) {
this.ffzCompleteSuggestion(null, true);
e.preventDefault();
} else
this.ffzHideSuggestions();
// After pressing space, if we're entering a command, do stuff!
// TODO: Better support for commands.

View file

@ -522,7 +522,7 @@ FFZ.settings_info.chat_font_family = {
var span = document.createElement('span');
span.style.fontFamily = val;
css = ".timestamp-line,.conversation-chat-line,.conversation-system-messages,.chat-history,.ember-chat .chat-messages {" + span.style.cssText + "}";
css = ".pinned-cheers .chat-line,.timestamp-line,.conversation-chat-line,.conversation-system-messages,.chat-history,.ember-chat .chat-messages {" + span.style.cssText + "}";
}
utils.update_css(this._chat_style, "chat_font_family", css);
@ -570,9 +570,9 @@ FFZ.settings_info.chat_font_size = {
else {
var lh = Math.max(20, Math.round((20/12)*val)),
pd = Math.floor((lh - 20) / 2);
css = ".timestamp-line,.conversation-chat-line,.conversation-system-messages,.chat-history .chat-line,.ember-chat .chat-messages .chat-line { font-size: " + val + "px !important; line-height: " + lh + "px !important; }";
css = ".pinned-cheers .chat-line,.timestamp-line,.conversation-chat-line,.conversation-system-messages,.chat-history .chat-line,.ember-chat .chat-messages .chat-line { font-size: " + val + "px !important; line-height: " + lh + "px !important; }";
if ( pd )
css += ".ember-chat .chat-messages .chat-line .mod-icons, .ember-chat .chat-messages .chat-line .badges { padding-top: " + pd + "px; }";
css += ".pinned-cheers .chat-line,.ember-chat .chat-messages .chat-line .mod-icons, .ember-chat .chat-messages .chat-line .badges { padding-top: " + pd + "px; }";
}
utils.update_css(this._chat_style, "chat_font_size", css);
@ -1199,7 +1199,12 @@ FFZ.prototype._modify_chat_subline = function(component) {
}
} else if ( cl.contains('badge') ) {
if ( cl.contains('click_url') )
if ( cl.contains('click_action') ) {
var badge = f.badges && f.badges[e.target.getAttribute('data-badge-id')];
if ( badge.click_action )
badge.click_action.call(f, this.get('msgObject'), e);
} else if ( cl.contains('click_url') )
window.open(e.target.getAttribute('data-url'), "_blank");
else if ( cl.contains('turbo') )

View file

@ -1470,7 +1470,7 @@ FFZ.prototype._modify_room = function(room) {
var duration = Infinity,
reason = undefined,
moderator = undefined,
msg_id = undefined,
msg_id = tags && tags['target-msg-id'],
current_user = f.get_user(),
is_me = current_user && current_user.login === user;
@ -1491,7 +1491,7 @@ FFZ.prototype._modify_room = function(room) {
moderator = tags['ban-moderator'];
// Is there a UUID on the end of the ban reason?
if ( reason ) {
if ( ! msg_id && reason ) {
var match = constants.UUID_TEST.exec(reason);
if ( match ) {
msg_id = match[1];

View file

@ -281,7 +281,7 @@ FFZ.prototype.load_global_sets = function(callback, tries) {
// Remove non-API sets from default and global sets.
for(var i=ds.length; i--; ) {
var set_id = ds[i];
if ( data.default_sets.indexOf(set_id) === -1 && (!f.feature_friday && f.feature_friday.set !== set_id) && (! f.emote_sets[set_id] || ! f.emote_sets[set_id].source_ext) )
if ( data.default_sets.indexOf(set_id) === -1 && (!f.feature_friday || f.feature_friday.set !== set_id) && (! f.emote_sets[set_id] || ! f.emote_sets[set_id].source_ext) )
ds.splice(i, 1);
}
@ -293,7 +293,7 @@ FFZ.prototype.load_global_sets = function(callback, tries) {
for(var i=gs.length; i--; ) {
var set_id = gs[i];
if ( ! sets[set_id] && (!f.feature_friday && f.feature_friday.set !== set_id) && (! f.emote_sets[set_id] || ! f.emote_sets[set_id].source_ext) )
if ( ! sets[set_id] && (!f.feature_friday || f.feature_friday.set !== set_id) && (! f.emote_sets[set_id] || ! f.emote_sets[set_id].source_ext) )
gs.splice(i, 1);
}

View file

@ -156,21 +156,19 @@ API.prototype._load_set = function(real_id, set_id, data) {
if ( this.emote_sets[set_id] && this.emote_sets[set_id].users )
users = this.emote_sets[set_id].users;
var emote_set = {
source: this.name,
source_ext: this.id,
source_id: set_id,
users: users,
count: 0,
emoticons: {},
_type: data._type || 0,
css: data.css || null,
hidden: data.hidden || false,
description: data.description || null,
icon: data.icon || this.icon || null,
id: real_id,
title: data.title || "Global Emoticons",
};
var emote_set = _.extend({
source: this.name,
icon: this.icon || null,
title: "Global Emoticons",
_type: 0
}, data, {
source_ext: this.id,
source_id: set_id,
id: real_id,
users: users,
count: 0,
emoticons: {},
});
this.emote_sets[set_id] = emote_set;
@ -184,53 +182,25 @@ API.prototype._load_set = function(real_id, set_id, data) {
for(var i=0; i < ems.length; i++) {
var emote = ems[i],
new_emote = {urls: {}},
id = emote.id || (this.name + '-' + set_id + '-' + i);
if ( ! emote.name )
continue;
new_emote.id = id;
new_emote.set_id = real_id;
new_emote.name = emote.name;
var new_emote = _.extend({}, emote, {
id: id,
set_id: real_id,
srcSet: emote.urls[1] + ' 1x'
});
new_emote.width = emote.width;
new_emote.height = emote.height;
new_emote.hidden = emote.hidden;
new_emote.owner = emote.owner;
new_emote.css = emote.css;
new_emote.margins = emote.margins;
new_emote.modifier = emote.modifier;
new_emote.extra_width = emote.extra_width;
new_emote.shrink_to_fit = emote.shrink_to_fit;
new_emote.srcSet = emote.urls[1] + ' 1x';
new_emote.urls[1] = emote.urls[1];
if ( emote.urls[2] ) {
new_emote.urls[2] = emote.urls[2];
if ( emote.urls[2] )
new_emote.srcSet += ', ' + emote.urls[2] + ' 2x';
}
if ( emote.urls[3] ) {
new_emote.urls[3] = emote.urls[3];
new_emote.srcSet += ', ' + emote.urls[3] + ' 3x';
}
if ( emote.urls[4] ) {
new_emote.urls[4] = emote.urls[4];
new_emote.srcSet += ', ' + emote.urls[4] + ' 4x';
}
if ( emote.regex )
new_emote.regex = emote.regex;
else if ( typeof emote.name !== "string" )
new_emote.regex = emote.name;
else if ( emote_set.require_spaces || emote.require_spaces )
new_emote.regex = new RegExp("(^| )(" + utils.escape_regex(emote.name) + ")(?= |$)", "g");
else
new_emote.regex = new RegExp("(^|\\W|\\b)(" + utils.escape_regex(emote.name) + ")(?=\\W|$)", "g");
if ( emote.urls[3] )
new_emote.srcSet += ', ' + emote.urls[3] + ' 3x';
if ( emote.urls[4] )
new_emote.srcSet += ', ' + emote.urls[4] + ' 4x';
new_emote.token = {
type: "emoticon",
@ -463,23 +433,14 @@ API.prototype.unregister_room_set = function(room_id, set_id) {
API.prototype.add_badge = function(badge_id, badge) {
var exact_id = this.id + '-' + badge_id,
real_badge = {
real_badge = _.extend({}, badge, {
id: exact_id,
source_ext: this.id,
source_id: badge_id,
alpha_image: badge.alpha_image,
color: badge.color || "transparent",
no_invert: badge.no_invert,
invert_invert: badge.invert_invert,
css: badge.css,
image: badge.image,
name: badge.name,
title: badge.title,
slot: badge.slot,
visible: badge.visible,
replaces: badge.replaces,
replaces_type: badge.replaces_type
};
source_id: badge_id
});
if ( ! real_badge.color )
real_badge.color = "transparent";
this.badges[badge_id] = real_badge;

View file

@ -53,6 +53,21 @@
}
// Clip Center?
.ce-clip-center:not(.ce-clip-center--editing) .ce-clip-center__pre-control {
background-color: @nav-bg-color;
border-color: fade(white, 10%);
}
.ce-filmstrip-fade--left {
background-image: linear-gradient(90deg, @bg-color 13%, fade(@bg-color, 0%) 70%)
}
.ce-filmstrip-fade--right {
background-image: linear-gradient(-90deg, @bg-color 13%, fade(@bg-color, 0%) 70%)
}
// Buttons
.button {

View file

@ -61,7 +61,7 @@ FFZ.channel_metadata = {};
// Version
var VER = FFZ.version_info = {
major: 3, minor: 5, revision: 370,
major: 3, minor: 5, revision: 373,
toString: function() {
return [VER.major, VER.minor, VER.revision].join(".") + (VER.extra || "");
}

View file

@ -1201,7 +1201,7 @@ body:not(.ffz-bttv) .dropmenu.share { margin-bottom: 0; }
/* Menu Scrollbar */
#ffz-metadata-popup .scroller::-webkit-scrollbar,
.searchPanel .collectionWrapper::-webkit-scrollbar,
.search-panel .collection-wrapper::-webkit-scrollbar,
.activity-react__all::-webkit-scrollbar,
.conversations-list .scroll-container::-webkit-scrollbar,
.chatters-container::-webkit-scrollbar,
@ -1219,7 +1219,7 @@ body:not(.ffz-bttv) .dropmenu.share { margin-bottom: 0; }
}
#ffz-metadata-popup .scroller::-webkit-scrollbar-thumb,
.searchPanel .collectionWrapper::-webkit-scrollbar-thumb,
.search-panel .collection-wrapper::-webkit-scrollbar-thumb,
.activity-react__all::-webkit-scrollbar-thumb,
.conversations-list .scroll-container::-webkit-scrollbar-thumb,
.chatters-container::-webkit-scrollbar-thumb,
@ -1240,7 +1240,7 @@ body:not(.ffz-bttv) .dropmenu.share { margin-bottom: 0; }
.ffz-dark #ffz-metadata-popup .scroller::-webkit-scrollbar-thumb,
.theatre #ffz-metadata-popup .scroller::-webkit-scrollbar-thumb,
.ffz-dark .searchPanel .collectionWrapper::-webkit-scrollbar-thumb,
.ffz-dark .search-panel .collection-wrapper::-webkit-scrollbar-thumb,
.ffz-dark .activity-react__all::-webkit-scrollbar-thumb,
.ffz-dark .conversations-list .scroll-container::-webkit-scrollbar-thumb,
.ffz-dark .ffz-scrollbar::-webkit-scrollbar-thumb,
@ -1249,7 +1249,7 @@ body:not(.ffz-bttv) .dropmenu.share { margin-bottom: 0; }
.ffz-dark .conversations-list .conversations-list-inner::-webkit-scrollbar-thumb,
.ffz-dark .conversation-input-bar .emoticon-selector-box .all-emotes::-webkit-scrollbar-thumb,
.theatre .searchPanel .collectionWrapper::-webkit-scrollbar-thumb,
.theatre .search-panel .collection-wrapper::-webkit-scrollbar-thumb,
.theatre .conversations-list .scroll-container::-webkit-scrollbar-thumb,
.theatre .chatters-container::-webkit-scrollbar-thumb,
.theatre .ffz-scrollbar::-webkit-scrollbar-thumb,
@ -2288,7 +2288,7 @@ body:not([data-current-path^="user."]) .ffz-sidebar-swap .ember-chat .chat-inter
left: 20px;
}
.ffz-sidebar-swap .searchPanel--slide {
.ffz-sidebar-swap .search-panel--slide {
left: auto;
right: 240px;
}
@ -3842,11 +3842,18 @@ body.ffz-sidebar-swap .app-main.theatre #main_col:not(.expandRight) #player[data
.pinned-cheer__hack-box,
.pinned-cheers__message .chat-line:before,
.ffz-pinned-cheer-expand .pinned-cheer__expando-arrow,
.pinned-cheers__message:before { display: none }
.pinned-cheers__message .chat-line { padding: 5px }
.pinned-cheers .mod-icons { display: inline !important }
.ffz-pinned-cheer-expand .pinned-cheers__message .chat-line,
.ffz-pinned-cheer-expand-hover .pinned-cheers__message .chat-line:hover { max-height: none }
.ffz-pinned-cheer-expand-hover .pinned-cheers__message .chat-line:not(:hover) { max-height: 4rem }
.ffz-pinned-cheer-expand-hover .pinned-cheers__message .chat-line:hover { max-height: none !important }
.ffz-pinned-cheer-expand-hover .pinned-cheers__message .chat-line:not(:hover) { max-height: 4rem !important }
.pinned-cheers--padding { padding: 0 !important }
.ffz-pinned-cheer-expand-hover .pinned-cheers__message:hover .pinned-cheer__expando-arrow { transform: none }
.ffz-pinned-cheer-expand-hover .pinned-cheers__message .pinned-cheer__expando-arrow {
transform: rotateX(180deg);
}