1
0
Fork 0
mirror of https://github.com/FrankerFaceZ/FrankerFaceZ.git synced 2025-08-13 17:40:53 +00:00

3.5.339. Minimize Navigation. Room-specific badge CSS generation. More logviewer fixes. Don't tab-complete short commands. CSS tweaks.

This commit is contained in:
SirStendec 2016-10-18 14:06:20 -04:00
parent f04edf7f54
commit 3a3b30d4fd
12 changed files with 182 additions and 52 deletions

View file

@ -1,3 +1,18 @@
<div class="list-header">3.5.339 <time datetime="2016-10-18">(2016-10-18)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Changed: Generate proper CSS for room-specific badges to avoid having to use inline styles.</li>
<li>Changed: Make Minimize Navigation work for the expanded navigation bar as well.</li>
<li>Fixed: CSS tweaks.</li>
</ul>
<div class="list-header">3.5.338 <time datetime="2016-10-18">(2016-10-18)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Added: Minimize Navigation setting to slide the navigation bar out of view when it's not being used.</li>
<li>Changed: Do not tab-complete short commands. They're already one character, so it's pointless. Also don't automatically start to complete a username as the behavior can be annoying right now. Tab completion needs a lot of work.</li>
<li>Fixed: Subscription notices weren't being displayed properly in logviewer chat history.</li>
<li>Fixed: Layout tweaks.</li>
</ul>
<div class="list-header">3.5.337 <time datetime="2016-10-17">(2016-10-17)</time></div> <div class="list-header">3.5.337 <time datetime="2016-10-17">(2016-10-17)</time></div>
<ul class="chat-menu-content menu-side-padding"> <ul class="chat-menu-content menu-side-padding">
<li>Added: Show chatter count on the dashboard.</li> <li>Added: Show chatter count on the dashboard.</li>

View file

@ -1100,6 +1100,7 @@ body.ffz-dark:not([data-page="teams#show"]),
.ffz-dark .new-header-search input { .ffz-dark .new-header-search input {
color: #fff; color: #fff;
background-color: rgba(255,255,255,0.05);
box-shadow: rgba(255,255,255,0.2) 0 0 0 1px inset; box-shadow: rgba(255,255,255,0.2) 0 0 0 1px inset;
} }

View file

@ -3,8 +3,7 @@ var FFZ = window.FrankerFaceZ,
utils = require('./utils'), utils = require('./utils'),
SPECIAL_BADGES = ['staff', 'admin', 'global_mod'], SPECIAL_BADGES = ['staff', 'admin', 'global_mod'],
NOT_KNOWN = ['subscriber'], OTHER_KNOWN = ['turbo', 'bits', 'premium'],
OTHER_KNOWN = ['turbo', 'warcraft', 'bits', 'premium'],
CSS_BADGES = { CSS_BADGES = {
staff: { 1: { color: "#200f33", use_svg: true } }, staff: { 1: { color: "#200f33", use_svg: true } },
@ -466,7 +465,7 @@ FFZ.prototype.get_twitch_badges = function(badge_tag, room_id) {
had_last = true; had_last = true;
} }
var is_known = NOT_KNOWN.indexOf(badge) === -1 && (BADGE_POSITIONS.hasOwnProperty(badge) || OTHER_KNOWN.indexOf(badge) !== -1); var is_known = BADGE_POSITIONS.hasOwnProperty(badge) || OTHER_KNOWN.indexOf(badge) !== -1;
badges[last_id] = { badges[last_id] = {
klass: (BADGE_KLASSES[badge] || badge) + (is_known ? '' : ' unknown-badge') + ' version-' + version, klass: (BADGE_KLASSES[badge] || badge) + (is_known ? '' : ' unknown-badge') + ' version-' + version,

View file

@ -647,7 +647,7 @@ FFZ.prototype.modify_chat_input = function(component) {
move_selection(area, prefix.length); move_selection(area, prefix.length);
area.focus(); area.focus();
var text = t.get('textareaValue'), /*var text = t.get('textareaValue'),
ind = text.indexOf(' '), ind = text.indexOf(' '),
start = ind !== -1 && text.substr(0, ind); start = ind !== -1 && text.substr(0, ind);
@ -660,7 +660,7 @@ FFZ.prototype.modify_chat_input = function(component) {
t.set("ffz_suggestions_visible", true); t.set("ffz_suggestions_visible", true);
t.ffzSetPartialWord(); t.ffzSetPartialWord();
} }
} }*/
}); });
}, },
@ -686,7 +686,7 @@ FFZ.prototype.modify_chat_input = function(component) {
for(var cmd in FFZ.chat_commands) { for(var cmd in FFZ.chat_commands) {
var data = FFZ.chat_commands[cmd]; var data = FFZ.chat_commands[cmd];
if ( commands[cmd] ) if ( commands[cmd] || ! data || data.short )
continue; continue;
var enabled = data.hasOwnProperty('enabled') ? data.enabled : true; var enabled = data.hasOwnProperty('enabled') ? data.enabled : true;
@ -704,8 +704,7 @@ FFZ.prototype.modify_chat_input = function(component) {
commands[cmd] = { commands[cmd] = {
label: data.label, label: data.label,
info: data.info, info: data.info,
alias: false, alias: false
short: data.short
} }
} }
@ -850,7 +849,7 @@ FFZ.prototype.modify_chat_input = function(component) {
alternate_match: command_name.toLowerCase(), alternate_match: command_name.toLowerCase(),
content: data.content || cmd, content: data.content || cmd,
label: data.label || cmd, label: data.label || cmd,
info: data.alias ? 'Alias: ' + data.info : (data.short ? 'Short ' : '') + 'Command' + (data.info ? ': ' + data.info : '') info: data.alias ? 'Alias: ' + data.info : 'Command' + (data.info ? ': ' + data.info : '')
}); });
} }
} }
@ -1364,7 +1363,7 @@ FFZ.prototype.modify_chat_input = function(component) {
}); });
} }
} else if ( f.settings.input_complete_commands && (start.charAt(0) === '/' || start.charAt(0) === '.') ) { } /* else if ( f.settings.input_complete_commands && (start.charAt(0) === '/' || start.charAt(0) === '.') ) {
var commands = t.get('ffz_commands'), var commands = t.get('ffz_commands'),
cmd = commands[start.substr(1)]; cmd = commands[start.substr(1)];
@ -1373,7 +1372,7 @@ FFZ.prototype.modify_chat_input = function(component) {
t.set("ffz_suggestions_visible", true); t.set("ffz_suggestions_visible", true);
t.ffzSetPartialWord(); t.ffzSetPartialWord();
} }
} }*/
}); });
} }
}, },

View file

@ -124,7 +124,33 @@ FFZ.settings_info.right_column_width = {
Layout.set('rightColumnWidth', val); Layout.set('rightColumnWidth', val);
Ember.propertyDidChange(Layout, 'contentWidth'); Ember.propertyDidChange(Layout, 'contentWidth');
} }
}; };
FFZ.settings_info.minimize_navigation = {
type: "boolean",
value: false,
category: "Sidebar",
no_mobile: true,
no_bttv: true,
name: "Minimize Navigation",
help: "Slide the navigation bar mostly out of view when it's not being used.",
on_update: function(val) {
if ( this.has_bttv )
return;
var Layout = utils.ember_lookup('service:layout');
if ( ! Layout )
return;
utils.toggle_cls('ffz-sidebar-minimize')(val);
Layout.set('ffzMinimizeNavigation', val);
//Ember.propertyDidChange(Layout, 'contentWidth');
}
}
// -------------------- // --------------------
@ -135,7 +161,8 @@ FFZ.prototype.setup_layout = function() {
if ( this.has_bttv ) if ( this.has_bttv )
return; return;
document.body.classList.toggle("ffz-sidebar-swap", this.settings.swap_sidebars); utils.toggle_cls("ffz-sidebar-swap")(this.settings.swap_sidebars);
utils.toggle_cls('ffz-sidebar-minimize')(this.settings.minimize_navigation);
this.log("Creating layout style element."); this.log("Creating layout style element.");
var s = this._layout_style = document.createElement('style'); var s = this._layout_style = document.createElement('style');
@ -186,12 +213,12 @@ FFZ.prototype.setup_layout = function() {
}.property("ffzExtraHeight", "windowWidth", "rightColumnWidth", "fullSizePlayerDimensions", "windowHeight"), }.property("ffzExtraHeight", "windowWidth", "rightColumnWidth", "fullSizePlayerDimensions", "windowHeight"),
contentWidth: function() { contentWidth: function() {
var left_width = this.get("isLeftColumnClosed") ? 50 : 240, var left_width = this.get('ffzMinimizeNavigation') ? 10 : this.get("isLeftColumnClosed") ? 50 : 240,
right_width = ! f.has_bttv && this.get('portraitMode') ? 0 : this.get("isRightColumnClosed") ? 0 : this.get("rightColumnWidth"); right_width = ! f.has_bttv && this.get('portraitMode') ? 0 : this.get("isRightColumnClosed") ? 0 : this.get("rightColumnWidth");
return this.get("windowWidth") - left_width - right_width - 60; return this.get("windowWidth") - left_width - right_width - 60;
}.property("windowWidth", "portraitMode", "isRightColumnClosed", "isLeftColumnClosed", "rightColumnWidth"), }.property("windowWidth", 'ffzMinimizeNavigation', "portraitMode", "isRightColumnClosed", "isLeftColumnClosed", "rightColumnWidth"),
ffzExtraHeight: function() { ffzExtraHeight: function() {
return (f.settings.channel_bar_collapse ? 10 : 60) + 15 + return (f.settings.channel_bar_collapse ? 10 : 60) + 15 +
@ -223,7 +250,7 @@ FFZ.prototype.setup_layout = function() {
}.property("ffzExtraHeight", "contentWidth", "windowHeight", "portraitMode", "PLAYER_CONTROLS_HEIGHT"), }.property("ffzExtraHeight", "contentWidth", "windowHeight", "portraitMode", "PLAYER_CONTROLS_HEIGHT"),
fullSizePlayerStyle: function() { playerStyle: function() {
var size = this.get('fullSizePlayerDimensions'); var size = this.get('fullSizePlayerDimensions');
return '<style>' + return '<style>' +
@ -392,6 +419,7 @@ FFZ.prototype.setup_layout = function() {
// Force the layout to update. // Force the layout to update.
Layout.set('rightColumnWidth', this.settings.right_column_width); Layout.set('rightColumnWidth', this.settings.right_column_width);
Layout.set('rawPortraitMode', this.settings.portrait_mode); Layout.set('rawPortraitMode', this.settings.portrait_mode);
Layout.set('ffzMinimizeNavigation', this.settings.minimize_navigation);
// Force re-calculation of everything. // Force re-calculation of everything.
Ember.propertyDidChange(Layout, 'windowWidth'); Ember.propertyDidChange(Layout, 'windowWidth');

View file

@ -828,7 +828,10 @@ FFZ.prototype.modify_moderation_card = function(component) {
// Parse the message. Store the data. // Parse the message. Store the data.
var message = f.lv_parse_message(data); var message = f.lv_parse_message(data);
this._lv_logs.data.before.push(message); this._lv_logs.data.before.push(message);
this._lv_logs.data.user[message.is_ban ? 'timeouts' : 'messages'] += 1; if ( message.is_ban )
this._lv_logs.data.user.timeouts++;
else if ( ! message.is_admin && (! message.is_notice || message.message.indexOf('Message: ') !== -1) )
this._lv_logs.data.user.messages++;
// If we're viewing the chat history, update it. // If we're viewing the chat history, update it.
var el = this.get('element'), var el = this.get('element'),
@ -1434,10 +1437,11 @@ FFZ.prototype.modify_moderation_card = function(component) {
FFZ.prototype._build_mod_card_history = function(msg, modcard, show_from, ts_click, mod_icons) { FFZ.prototype._build_mod_card_history = function(msg, modcard, show_from, ts_click, mod_icons) {
var l_el = document.createElement('li'), var l_el = utils.createElement('li', 'message-line chat-line clearfix'),
out = [], out = [],
f = this; f = this,
is_notice = msg.style === 'admin' || msg.style === 'notification',
style = '', colored = ''; style = '', colored = '';
if ( helpers && helpers.getTime ) if ( helpers && helpers.getTime )
@ -1453,7 +1457,7 @@ FFZ.prototype._build_mod_card_history = function(msg, modcard, show_from, ts_cli
out.push('</span>'); out.push('</span>');
} }
if ( show_from ) { if ( show_from && ! is_notice ) {
// Badges // Badges
out.push('<span class="badges">'); out.push('<span class="badges">');
out.push(this.render_badges(this.get_line_badges(msg, false))); out.push(this.render_badges(this.get_line_badges(msg, false)));
@ -1484,7 +1488,7 @@ FFZ.prototype._build_mod_card_history = function(msg, modcard, show_from, ts_cli
+ results[0] + '</span>'); + results[0] + '</span>');
out.push(msg.style !== 'action' ? '<span class="colon">:</span> ' : ' '); out.push(msg.style !== 'action' ? '<span class="colon">:</span> ' : ' ');
} else if ( msg.style !== 'admin' ) } else if ( ! is_notice )
out.push('<span class="cp-hidden"> ' + results[0] + (msg.style === 'action' ? '' : ':') + ' </span>'); out.push('<span class="cp-hidden"> ' + results[0] + (msg.style === 'action' ? '' : ':') + ' </span>');
@ -1505,8 +1509,6 @@ FFZ.prototype._build_mod_card_history = function(msg, modcard, show_from, ts_cli
// Line attributes and classes. // Line attributes and classes.
l_el.className = 'message-line chat-line clearfix';
if ( msg.style ) if ( msg.style )
l_el.classList.add(msg.style); l_el.classList.add(msg.style);

View file

@ -862,6 +862,21 @@ FFZ.prototype.update_room_important = function(id, controller) {
}; };
FFZ.prototype._update_room_badge_css = function(room_id) {
var room = this.rooms[room_id],
badges = room && room.badges || {},
output = [];
for(var badge_id in badges) {
var versions = badges[badge_id] && badges[badge_id].versions || {};
for(var version in versions)
output.push(utils.room_badge_css(room_id, badge_id, version, versions[version]));
}
utils.update_css(this._badge_style, 'twitch-room-' + room_id, output.join(''));
}
FFZ.prototype.add_room = function(id, room) { FFZ.prototype.add_room = function(id, room) {
if ( this.rooms[id] ) if ( this.rooms[id] )
return this.log("Tried to add existing room: " + id); return this.log("Tried to add existing room: " + id);
@ -894,8 +909,10 @@ FFZ.prototype.add_room = function(id, room) {
// Store the badges for this room now if we have them. // Store the badges for this room now if we have them.
var bs = utils.ember_lookup('service:badges'); var bs = utils.ember_lookup('service:badges');
if ( bs && bs.badgeCollection && bs.badgeCollection.channel && bs.badgeCollection.channel.broadcasterName === id ) if ( bs && bs.badgeCollection && bs.badgeCollection.channel && bs.badgeCollection.channel.broadcasterName === id ) {
data.badges = bs.badgeCollection.channel; data.badges = bs.badgeCollection.channel;
this._update_room_badge_css(id);
}
// Look up if the room has moderation logs. // Look up if the room has moderation logs.
var f = this; var f = this;
@ -1068,6 +1085,7 @@ FFZ.prototype._modify_room = function(room) {
} }
}).then(utils.json).then(function(data) { }).then(utils.json).then(function(data) {
ffz_room.badges = data && data.badge_sets; ffz_room.badges = data && data.badge_sets;
f._update_room_badge_css(room_name);
}); });
}.observes('roomProperties._id'), }.observes('roomProperties._id'),

View file

@ -112,6 +112,14 @@ FFZ.prototype.setup_bttv = function(delay) {
cl.remove('ffz-minimal-channel-bar'); cl.remove('ffz-minimal-channel-bar');
cl.remove('ffz-channel-bar-bottom'); cl.remove('ffz-channel-bar-bottom');
cl.remove('ffz-channel-title-top'); cl.remove('ffz-channel-title-top');
cl.remove('ffz-sidebar-minimize');
// Update the layout service.
var Layout = utils.ember_lookup('service:layout');
if ( Layout ) {
Layout.set('ffzMinimizeNavigation', false);
Layout.set('rawPortraitMode', 0);
}
// Remove Following Count // Remove Following Count
if ( this.settings.following_count ) { if ( this.settings.following_count ) {

View file

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

View file

@ -103,9 +103,18 @@ FFZ.prototype.lv_parse_message = function(message) {
parsed.is_admin = parsed.tags['display-name'] === 'jtv'; parsed.is_admin = parsed.tags['display-name'] === 'jtv';
if ( parsed.is_admin ) { if ( parsed.is_admin ) {
parsed.style = 'admin'; parsed.style = 'admin';
parsed.tags['display-name'] = undefined; delete parsed.tags['display-name'];
} }
// Is this a notification?
parsed.is_notice = parsed.tags['display-name'] === 'twitchnotify';
if ( parsed.is_notice ) {
parsed.style = 'notification';
delete parsed.tags['display-name'];
}
// Is this a ban? // Is this a ban?
var match = parsed.is_admin && BAN_REGEX.exec(parsed.message); var match = parsed.is_admin && BAN_REGEX.exec(parsed.message);
if ( match ) { if ( match ) {

View file

@ -982,7 +982,18 @@ module.exports = FFZ.utils = {
return out; return out;
}, },
cdn_badge_css: function(badge_id, version, data) { room_badge_css: function(room_id, badge_id, version, data) {
var img_1x = data.image_url_1x,
img_2x = data.image_url_2x,
img_4x = data.image_url_4x;
return '.from-display-preview[data-room="' + room_id + '"] .badge.' + badge_id + '.version-' + version +
',.chat-line[data-room="' + room_id + '"] .badge.' + badge_id + '.version-' + version + '{' +
'background-image:url("' + img_1x + '");' +
'background-image:' + (constants.IS_WEBKIT ? '-webkit-' : '') + 'image-set(url("' + img_1x + '") 1x' + (img_2x ? ',url("' + img_2x + '") 2x' : '') + (img_4x ? ',url("' + img_4x + '") 4x' : '') + ')}';
},
cdn_badge_css: function(badge_id, version, data, room) {
var color = data.color, var color = data.color,
base_image = data.image || ("https://cdn.frankerfacez.com/badges/twitch/" + badge_id + (data.use_svg ? '.svg' : "/" + version + "/")), base_image = data.image || ("https://cdn.frankerfacez.com/badges/twitch/" + badge_id + (data.use_svg ? '.svg' : "/" + version + "/")),
is_svg = base_image.substr(-4) === '.svg', is_svg = base_image.substr(-4) === '.svg',
@ -990,11 +1001,11 @@ module.exports = FFZ.utils = {
image_2x = base_image + (is_svg ? '' : "2.png"), image_2x = base_image + (is_svg ? '' : "2.png"),
image_4x = base_image + (is_svg ? '' : "4.png"); image_4x = base_image + (is_svg ? '' : "4.png");
return '.badge.' + badge_id + '.version-' + version + (data.no_color ? '' : ':not(.colored)') + ' {' + return '.badge.' + badge_id + '.version-' + version + (room ? '[data-room="' + room + '"]' : '') + (data.no_color ? '' : ':not(.colored)') + ' {' +
'background: url("' + image_1x + '") ' + color + ';' + 'background: url("' + image_1x + '") ' + color + ';' +
(is_svg ? '}' : 'background-image: -webkit-image-set(url("' + image_1x + '") 1x, url("' + image_2x + '") 2x, url("' + image_4x + '") 4x);' + (is_svg ? '}' : 'background-image: -webkit-image-set(url("' + image_1x + '") 1x, url("' + image_2x + '") 2x, url("' + image_4x + '") 4x);' +
'background-image: image-set(url("' + image_1x + '") 1x, url("' + image_2x + '") 2x, url("' + image_4x + '") 4x); }') + 'background-image: image-set(url("' + image_1x + '") 1x, url("' + image_2x + '") 2x, url("' + image_4x + '") 4x); }') +
(data.no_color ? '' : '.badge.' + badge_id + '.version-' + version + '.colored {' + (data.no_color ? '' : '.badge.' + badge_id + '.version-' + version + (room ? '[data-room="' + room + '"]' : '') + '.colored {' +
'background: linear-gradient(' + color + ',' + color + ');' + 'background: linear-gradient(' + color + ',' + color + ');' +
(is_svg ? '-webkit-mask-size: 18px 18px;mask-size: 18px 18px;' : '') + (is_svg ? '-webkit-mask-size: 18px 18px;mask-size: 18px 18px;' : '') +
'-webkit-mask-image: url("' + image_1x + '");' + '-webkit-mask-image: url("' + image_1x + '");' +

View file

@ -2085,9 +2085,12 @@ body.ffz-minimal-chat-input .ember-chat .chat-interface .textarea-contain textar
margin-right: 0px; margin-right: 0px;
} }
.chat-history .chat-line.notification .from,
.chat-history .chat-line.notification .colon,
.chat-history .chat-line.admin .from, .chat-history .chat-line.admin .from,
.chat-history .chat-line.admin .colon { display: none } .chat-history .chat-line.admin .colon { display: none }
.chat-history .chat-line.notification .message,
.chat-history .chat-line.admin .message { color: #666; } .chat-history .chat-line.admin .message { color: #666; }
.chat-history .timestamp { .chat-history .timestamp {
@ -2261,11 +2264,11 @@ body:not([data-current-path^="user."]) .ffz-sidebar-swap .ember-chat .chat-inter
left: 20px; left: 20px;
} }
.ffz-sidebar-swap #main_col .cn-bar-fixed { .ffz-sidebar-swap .cn-bar-fixed {
right: 50px; right: 50px;
} }
.ffz-sidebar-swap #left_col.open ~ #main_col .cn-bar-fixed { .ffz-sidebar-swap:not(.ffz-sidebar-minimize) #left_col.open ~ #main_col .cn-bar-fixed {
right: 240px; right: 240px;
} }
@ -2361,6 +2364,15 @@ body:not([data-current-path^="user."]) .ffz-sidebar-swap .ember-chat .chat-inter
/* No Blue */ /* No Blue */
.ffz-no-blue .form--theme-dark .form__input {
background-color: rgba(255,255,255,0.05);
box-shadow: rgba(255,255,255,0.1) 0 0 0 1px inset;
}
.ffz-no-blue .form--theme-dark .form__input:focus {
box-shadow: rgba(255,255,255,0.3) 0 0 0 1px inset;
}
.ffz-no-blue .theatre .ember-chat .chat-interface .textarea-contain textarea { .ffz-no-blue .theatre .ember-chat .chat-interface .textarea-contain textarea {
background-color: rgba(255,255,255,0.05); background-color: rgba(255,255,255,0.05);
border-color: rgba(255,255,255,0.1); border-color: rgba(255,255,255,0.1);
@ -2370,6 +2382,15 @@ body:not([data-current-path^="user."]) .ffz-sidebar-swap .ember-chat .chat-inter
background-color: rgba(25,25,25,.5); background-color: rgba(25,25,25,.5);
} }
.ffz-no-blue .warp__item a:hover {
background-color: #2b2b2b;
}
.ffz-no-blue .warp__item--toggled > a {
background-color: #2b2b2b;
box-shadow: 3px 0 0 #a3a3a3 inset;
}
.ffz-no-blue .theatre .conversations-list-bottom-bar, .ffz-no-blue .theatre .conversations-list-bottom-bar,
.ffz-no-blue.ffz-dark .conversations-list-bottom-bar, .ffz-no-blue.ffz-dark .conversations-list-bottom-bar,
.ffz-no-blue .theatre .conversations-list, .ffz-no-blue .theatre .conversations-list,
@ -3639,6 +3660,13 @@ body:not(.ffz-channel-bar-bottom).ffz-small-player.ffz-minimal-channel-bar #play
/* Ban Notices */ /* Ban Notices */
.theatre .chat-history .chat-line.notification .message,
.dark .chat-history .chat-line.notification .message,
.force-dark .chat-history .chat-line.notification .message,
.theatre .chat-history .chat-line.admin .message,
.dark .chat-history .chat-line.admin .message,
.force-dark .chat-history .chat-line.admin .message,
.theatre .chat-messages .chat-line.admin .message, .theatre .chat-messages .chat-line.admin .message,
.dark .chat-messages .chat-line.admin .message, .dark .chat-messages .chat-line.admin .message,
.force-dark .chat-messages .chat-line.admin .message, .force-dark .chat-messages .chat-line.admin .message,
@ -3700,3 +3728,15 @@ body:not(.ffz-channel-bar-bottom).ffz-small-player.ffz-minimal-channel-bar #play
float: right; float: right;
margin: 7px 1rem 0 0; margin: 7px 1rem 0 0;
} }
/* Hidden Navigation */
.ffz-sidebar-minimize:not(.ffz-sidebar-swap) #left_col.closed:not(:hover) { left: -40px }
.ffz-sidebar-minimize:not(.ffz-sidebar-swap) #left_col.open:not(:hover) { left: -230px }
.ffz-sidebar-minimize:not(.ffz-sidebar-swap) #main_col { margin-left: 10px }
.ffz-sidebar-minimize:not(.ffz-sidebar-swap) #left_col ~ #main_col .cn-bar-fixed { left: 10px }
.ffz-sidebar-minimize.ffz-sidebar-swap #left_col.closed:not(:hover) { right: -40px }
.ffz-sidebar-minimize.ffz-sidebar-swap #left_col.open:not(:hover) { right: -230px }
.ffz-sidebar-minimize.ffz-sidebar-swap #main_col { margin-right: 10px }
.ffz-sidebar-minimize.ffz-sidebar-swap .cn-bar-fixed { right: 10px }