diff --git a/changelog.html b/changelog.html index e9b2a241..0ea176a7 100644 --- a/changelog.html +++ b/changelog.html @@ -1,3 +1,23 @@ +
system-msg
tags that contain template strings or other nonsense that Twitch, for some reason, isn't just putting in the message itself and is making the client reconstruct from tags.game
game
' + + Intl.tHtml('gameCommerce.purchaseNotifications.message', { + userName: tags['login'], + purchaseTitle: tags['msg-param-title'] + }).string + + '
@
) open the user\'s moderation card when clicked.',
@@ -819,7 +819,7 @@ FFZ.prototype.tokenize_chat_line = function(msgObject, prevent_notification, del
continue;
// If we have chat tabs/rows, update the status.
- if ( room_id && ! this.has_bttv && this._chatv ) {
+ if ( room_id && ! this.has_bttv_6 && this._chatv ) {
var room = this.rooms[room_id] && this.rooms[room_id].room;
if ( room._ffz_tab && ! room._ffz_tab.classList.contains('active') ) {
room._ffz_tab.classList.add('tab-mentioned');
diff --git a/src/ui/about_page.js b/src/ui/about_page.js
index e0281905..ab6e5fe7 100644
--- a/src/ui/about_page.js
+++ b/src/ui/about_page.js
@@ -81,7 +81,7 @@ FFZ.debugging_blocks = {
];
if ( this.has_bttv )
- output.push(['BetterTTV', BetterTTV.info.version + 'r' + BetterTTV.info.release]);
+ output.push(['BetterTTV', this.has_bttv_7 ? BetterTTV.version : (BetterTTV.info.version + 'r' + BetterTTV.info.release)]);
if ( Object.keys(this._apis).length ) {
output.push(null);
diff --git a/src/ui/dark.js b/src/ui/dark.js
index 62c77c20..48d9774a 100644
--- a/src/ui/dark.js
+++ b/src/ui/dark.js
@@ -65,8 +65,6 @@ FFZ.basic_settings.high_contrast = {
type: "boolean",
category: "Chat",
- no_bttv: true,
-
name: "High Contrast",
help: "Display chat using white and black for maximum contrast. This is suitable for capturing and chroma keying chat to display on stream.",
@@ -83,7 +81,7 @@ FFZ.basic_settings.keywords = {
type: "button",
category: "Chat",
- no_bttv: true,
+ no_bttv: 6,
name: "Highlight Keywords",
help: "Set additional keywords that will be highlighted in chat.",
@@ -97,7 +95,7 @@ FFZ.basic_settings.banned_words = {
type: "button",
category: "Chat",
- no_bttv: true,
+ no_bttv: 6,
name: "Banned Keywords",
help: "Set a list of words that will be removed from chat messages, locally.",
diff --git a/src/ui/menu.js b/src/ui/menu.js
index e1450d32..c3b0ad33 100644
--- a/src/ui/menu.js
+++ b/src/ui/menu.js
@@ -769,7 +769,7 @@ FFZ.prototype._add_emote = function(view, emote, favorites_set, favorites_key, e
var input_el, text, room;
- if ( this.has_bttv ) {
+ if ( this.has_bttv_6 ) {
input_el = view.get('element').querySelector('textarea');
text = input_el.value;
diff --git a/src/ui/menu_button.js b/src/ui/menu_button.js
index 02aaa5f5..581ce0c5 100644
--- a/src/ui/menu_button.js
+++ b/src/ui/menu_button.js
@@ -28,7 +28,7 @@ FFZ.prototype.update_ui_link = function(link) {
room = this.rooms[room_id],
has_emotes = false,
- blue = (this.has_bttv ? BetterTTV.settings.get('showBlueButtons') : false),
+ blue = (this.has_bttv_6 ? BetterTTV.settings.get('showBlueButtons') : false),
live = (this.feature_friday && this.feature_friday.live);
diff --git a/src/utils.js b/src/utils.js
index 5a4c8b68..c98c07ce 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -1068,11 +1068,15 @@ module.exports = FFZ.utils = {
find_common_prefix: function(list, lower_only) {
+ if ( ! list || ! list.length )
+ return 0;
+
var p = 0,
l = list.length,
- w = lower_only ? list[0].toLowerCase() : list[0];
+ w = lower_only ? list[0].toLowerCase() : list[0],
+ wl = w.length;
- while(true) {
+ while (p < wl) {
var c = w[p];
for(var i=0; i < l; ++i)
if ( list[i][p] !== c)
@@ -1080,6 +1084,8 @@ module.exports = FFZ.utils = {
++p;
}
+
+ return wl;
},
diff --git a/style.css b/style.css
index 4fbe03b8..23fdc3e0 100644
--- a/style.css
+++ b/style.css
@@ -1284,6 +1284,7 @@ body:not(.ffz-bttv) .dropmenu.share { margin-bottom: 0; }
.ffz-moderation-card {
border: 2px solid #cbcbcb;
width: 340px;
+ line-height: inherit !important;
}
.moderation-card__close-button {
@@ -1311,6 +1312,7 @@ body:not(.ffz-bttv) .dropmenu.share { margin-bottom: 0; }
line-height: 18px;
z-index: 4;
pointer-events: none;
+ margin-left: 0 !important;
}
.ffz-moderation-card .info .stat {
@@ -1418,10 +1420,12 @@ body:not(.ffz-hide-friends) .ffz-moderation-card .follow-button {
.ffz-dark .ffz-following-row,
.theatre .ffz-following-row,
+.ffz-bttv-dark .moderation-card .moderation-card__actions,
.ffz-dark .moderation-card .moderation-card__actions,
.theatre .moderation-card .moderation-card__actions,
.dark .moderation-card .moderation-card__actions,
+.ffz-bttv-dark .ffz-moderation-card ul.menu,
.ffz-dark .ffz-moderation-card ul.menu,
.theatre .ffz-moderation-card ul.menu,
.dark .ffz-moderation-card ul.menu {
@@ -1445,12 +1449,14 @@ body:not(.ffz-hide-friends) .ffz-moderation-card .follow-button {
border-bottom-color: #7d5bbe;
}
+.ffz-bttv-dark .ffz-moderation-card ul.menu li,
.ffz-dark .ffz-moderation-card ul.menu li,
.theatre .ffz-moderation-card ul.menu li,
.dark .ffz-moderation-card ul.menu li {
color: #999;
}
+.ffz-bttv-dark .ffz-moderation-card ul.menu li:hover,
.ffz-dark .ffz-moderation-card ul.menu li:hover,
.theatre .ffz-moderation-card ul.menu li:hover,
.dark .ffz-moderation-card ul.menu li:hover {
@@ -1467,21 +1473,25 @@ body:not(.ffz-hide-friends) .ffz-moderation-card .follow-button {
/* dark moderation card */
+.ffz-bttv-dark .ffz-moderation-card,
.dark .ffz-moderation-card,
.theatre .ffz-moderation-card {
border-color: #1b1b20;
}
+.ffz-bttv-dark .ffz-moderation-card:focus,
.dark .ffz-moderation-card:focus,
.theatre .ffz-moderation-card:focus {
border-color: #cbcbcb;
}
+.ffz-bttv-dark .ffz-moderation-card .moderation-card__actions,
.dark .ffz-moderation-card .moderation-card__actions,
.theatre .ffz-moderation-card .moderation-card__actions {
background-color: #232329;
}
+.ffz-bttv-dark.ffz-no-blue .moderation-card .moderation-card__actions,
.ffz-no-blue .cn-hosting,
.ffz-no-blue .dark .ember-chat .moderation-card .moderation-card__actions,
.ffz-no-blue .theatre .ember-chat .moderation-card .moderation-card__actions {
@@ -1788,7 +1798,10 @@ a.unsafe-link {
float: left;
}
+.ffz-bttv-dark .ffz-room-row,
.ffz-dark .ffz-room-row { color: #a68ed2; }
+
+.ffz-bttv-dark .ffz-room-row svg path,
.ffz-dark .ffz-room-row svg path { fill: #a68ed2; }
.ffz-room-row { color: #6441a5; }
@@ -1963,19 +1976,24 @@ th.ffz-row-switch {
/* Dark Group Tabs */
+.ffz-bttv-dark #ffz-group-tabs,
.app-main.theatre #ffz-group-tabs,
.chat-container.dark #ffz-group-tabs,
.ember-chat-container.dark #ffz-group-tabs {
box-shadow: inset 0 -1px 0 0 #32323e;
}
+.ffz-bttv-dark .ffz-chat-tab,
.app-main.theatre .ffz-chat-tab,
.chat-container.dark .ffz-chat-tab,
.ember-chat-container.dark .ffz-chat-tab {
color: #B9A3E3;
}
+.ffz-bttv-dark .ffz-room-row td > span:not(.intl-login),
.ffz-dark .ffz-room-row td > span:not(.intl-login),
+
+.ffz-bttv-dark .ffz-chat-tab span,
.app-main.theatre .ffz-chat-tab span,
.chat-container.dark .ffz-chat-tab span,
.ember-chat-container.dark .ffz-chat-tab span {
@@ -1983,6 +2001,7 @@ th.ffz-row-switch {
color: #fff;
}
+.ffz-bttv-dark .ffz-chat-tab svg path,
.app-main.theatre .ffz-chat-tab svg path,
.chat-container.dark .ffz-chat-tab svg path,
.ember-chat-container.dark .ffz-chat-tab svg path {
@@ -2214,6 +2233,7 @@ body.ffz-minimal-chat-input .ember-chat .chat-interface .textarea-contain textar
color: #fff !important;
}
+.ffz-bttv-dark .moderation-card .back-button,
.theatre .moderation-card .back-button,
.dark .moderation-card .back-button {
background-color: #232329;