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

3.5.463. Fix tab completion issues. Fix rendering of system-msgs that require special rendering. Fix compatibility with BetterTTV v7. This includes a lot of tiny changes because many features are only incompatible with BTTV v6.

This commit is contained in:
SirStendec 2017-04-10 15:03:05 -04:00
parent c3e5aa4fcf
commit 996ab7031e
26 changed files with 319 additions and 129 deletions

View file

@ -1,3 +1,23 @@
<div class="list-header">3.5.463 <time datetime="2017-04-10">(2017-04-10)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Added: Improved compatibility with BetterTTV v7 (aka the beta)</li>
</ul>
<div class="list-header">3.5.462 <time datetime="2017-04-08">(2017-04-08)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Rendering of <code>system-msg</code> 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.</li>
</ul>
<div class="list-header">3.5.461 <time datetime="2017-04-08">(2017-04-08)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Potential infinite loop in new prefix detection code.</li>
</ul>
<div class="list-header">3.5.460 <time datetime="2017-04-07">(2017-04-07)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Tab completion breaking when encountering an empty emote set.</li>
</ul>
<div class="list-header">3.5.459 <time datetime="2017-04-07">(2017-04-07)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Changed: Improved prefix detection for tab-completion of sub emotes.</li>
@ -33,28 +53,5 @@
<li>Fixed: Dashboard columns not being scrollable.</li>
</ul>
<div class="list-header">3.5.453 <time datetime="2017-04-04">(2017-04-04)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Favoriting emotes from your Twitch Inventory.</li>
</ul>
<div class="list-header">3.5.452 <time datetime="2017-04-04">(2017-04-04)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Changed: Consolidate emote sets from your Twitch Inventory in the My Emoticons menu to avoid having many individual 1-emote sections.</li>
<li>Changed: Darken the Inventory page.</li>
</ul>
<div class="list-header">3.5.451 <time datetime="2017-04-04">(2017-04-04)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Changed: Allow you to hide all game-related badges by hiding <code>game</code></li>
<li>Removed: Books</li>
</ul>
<div class="list-header">3.5.450 <time datetime="2017-04-04">(2017-04-04)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Added: Option to hide the Commerce Bar on channel pages.</li>
<li>Fixed: Darken game detail pages.</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

@ -1,3 +1,26 @@
<div class="list-header">3.5.453 <time datetime="2017-04-04">(2017-04-04)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Favoriting emotes from your Twitch Inventory.</li>
</ul>
<div class="list-header">3.5.452 <time datetime="2017-04-04">(2017-04-04)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Changed: Consolidate emote sets from your Twitch Inventory in the My Emoticons menu to avoid having many individual 1-emote sections.</li>
<li>Changed: Darken the Inventory page.</li>
</ul>
<div class="list-header">3.5.451 <time datetime="2017-04-04">(2017-04-04)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Changed: Allow you to hide all game-related badges by hiding <code>game</code></li>
<li>Removed: Books</li>
</ul>
<div class="list-header">3.5.450 <time datetime="2017-04-04">(2017-04-04)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Added: Option to hide the Commerce Bar on channel pages.</li>
<li>Fixed: Darken game detail pages.</li>
</ul>
<div class="list-header">3.5.449 <time datetime="2017-04-04">(2017-04-04)</time></div>
<ul class="chat-menu-content menu-side-padding">
<li>Fixed: Bug with the emoticon menu for channels without FFZ emotes.</li>

View file

@ -105,7 +105,7 @@ FFZ.settings_info.hidden_badges = {
help: "Any badges added to this list will not be displayed in chat.",
on_update: function(val) {
if ( this.has_bttv )
if ( this.has_bttv_6 )
return;
var controller = utils.ember_lookup('controller:chat'),
@ -159,7 +159,7 @@ FFZ.settings_info.hidden_badges = {
values.push([hide_key, f.render_badges(render_badge)]);
}
if ( this.has_bttv && window.BetterTTV ) {
if ( this.has_bttv_6 && window.BetterTTV ) {
try {
for(var badge_id in BetterTTV.chat.store.__badgeTypes)
values.push(['bttv-' + badge_id, null]);
@ -255,7 +255,7 @@ FFZ.settings_info.transparent_badges = {
value: 0,
category: "Chat Appearance",
no_bttv: true,
no_bttv: 6,
name: "Badge Style",
help: "Make badges appear rounded, completely circular, or transparent with no background at all.",
@ -263,7 +263,7 @@ FFZ.settings_info.transparent_badges = {
process_value: utils.process_int(0, 0, 5),
on_update: function(val) {
if ( this.has_bttv )
if ( this.has_bttv_6 )
return;
this.toggle_style('badges-rounded', val === 1);
@ -302,7 +302,7 @@ if ( constants.IS_WEBKIT )
FFZ.prototype.setup_badges = function() {
this.log("Preparing badge system.");
if ( ! this.has_bttv ) {
if ( ! this.has_bttv_6 ) {
var val = this.settings.transparent_badges;
this.toggle_style('badges-rounded', val === 1);
this.toggle_style('badges-circular', val === 2 || val === 3 || val === 4);
@ -312,7 +312,9 @@ FFZ.prototype.setup_badges = function() {
utils.toggle_cls('ffz-transparent-badges')(val >= 5);
utils.toggle_cls('ffz-no-loyalty')(!this.settings.loyalty_badges);
}
if ( ! this.has_bttv ) {
this.toggle_style('badges-sub-notice', ! this.settings.sub_notice_badges);
this.toggle_style('badges-sub-notice-on', this.settings.sub_notice_badges);
}

View file

@ -36,7 +36,7 @@ FFZ.settings_info.command_aliases = {
value: [],
category: "Chat Moderation",
no_bttv: true,
no_bttv: 6,
name: "Command Aliases",
help: "Define custom commands for chat that are shortcuts for other commands or messages to send in chat.",

View file

@ -19,7 +19,7 @@ FFZ.settings_info.collect_bits = {
process_value: utils.process_int(0),
category: "Chat Appearance",
no_bttv: true,
no_bttv: 6,
name: "Bits Stacking",
help: "Collect all the bits emoticons in a message into a single one at the start of the message."
@ -31,7 +31,7 @@ FFZ.settings_info.bits_animated = {
value: true,
category: "Chat Appearance",
no_bttv: true,
no_bttv: 6,
name: "Bits Animation",
help: "Display bits with animation.",
@ -50,7 +50,7 @@ FFZ.settings_info.bits_tags_container = {
value: true,
category: "Chat Appearance",
no_bttv: true,
no_bttv: 6,
name: "Bits Tag Display",
help: "Display competitive bits tags at the top of chats that have it enabled.",

View file

@ -565,7 +565,7 @@ FFZ.settings_info.stream_uptime = {
FFZ.settings_info.stream_title = {
type: "boolean",
value: true,
no_bttv: true,
no_bttv: 6,
no_mobile: true,
category: "Channel Metadata",

View file

@ -373,10 +373,13 @@ FFZ.prototype.modify_chat_input = function(component) {
if ( ! t || ! t.length )
f.error("Cannot find textarea in Twitch Chat Input.");
t.off("keydown");
t.off("keyup");
t.on("keypress", this._ffzKeyPress.bind(this));
t.on("keydown", this._ffzKeyDown.bind(this));
if ( ! this.has_bttv ) {
t.off("keydown");
t.off("keyup");
t.on("keypress", this._ffzKeyPress.bind(this));
t.on("keydown", this._ffzKeyDown.bind(this));
}
t.on("paste", this._ffzPaste.bind(this));
t.attr('rows', 1);
@ -825,9 +828,6 @@ FFZ.prototype.modify_chat_input = function(component) {
prefix_length = f.settings.input_complete_without_prefix && is_sub_set ? utils.find_common_prefix(_.pluck(emote_set, 'code'), true) : 0;
sort_factor = is_sub_set ? 1 : 9;
if ( is_sub_set )
f.log("Sub Set: " + set_name + " -- Common Prefix: " + prefix_length + " [" + emote_set[0].code.substr(0, prefix_length) + "]", emote_set);
for(var i = 0; i < emote_set.length; i++) {
emote = emote_set[i];
if ( used_ids.indexOf(emote.id) !== -1 )

View file

@ -23,7 +23,7 @@ FFZ.basic_settings.delayed_chat = {
},
category: "Chat",
no_bttv: true,
no_bttv: 6,
name: "Delay and Filter Chat",
help: "Delay the appearance of chat messages to allow time for moderation and completely hide removed messages.",
@ -109,7 +109,7 @@ FFZ.settings_info.chat_batching = {
value: 0,
category: "Chat Appearance",
no_bttv: true,
no_bttv: 6,
name: "Chat Message Batching",
help: "Display chat messages in batches to improve performance in <em>extremely</em> fast chats.",
@ -141,7 +141,7 @@ FFZ.settings_info.chat_delay = {
value: -1,
category: "Chat Appearance",
no_bttv: true,
no_bttv: 6,
name: "Artificial Chat Delay",
help: "Delay the appearance of chat messages to allow for moderation before you see them.",
@ -173,7 +173,7 @@ FFZ.settings_info.remove_filtered = {
process_value: utils.process_int(0),
category: "Chat Filtering",
no_bttv: true,
no_bttv: 6,
name: "Remove Messages with Banned Words",
help: "Mark messages with banned words as deleted or outright remove them from chat.",
@ -184,14 +184,14 @@ FFZ.settings_info.remove_deleted = {
type: "boolean",
value: false,
no_bttv: true,
no_bttv: 6,
category: "Chat Filtering",
name: "Remove Deleted Messages",
help: "Remove deleted messages from chat entirely rather than leaving behind a clickable &lt;deleted message&gt;.",
on_update: function(val) {
if ( this.has_bttv || ! this.rooms || ! val )
if ( this.has_bttv_6 || ! this.rooms || ! val )
return;
for(var room_id in this.rooms) {
@ -219,7 +219,7 @@ FFZ.settings_info.remove_bot_ban_notices = {
type: "boolean",
value: false,
no_bttv: true,
no_bttv: 6,
category: "Chat Filtering",
name: "Remove Bot Ban Notices",
@ -231,14 +231,14 @@ FFZ.settings_info.prevent_clear = {
type: "boolean",
value: false,
no_bttv: true,
no_bttv: 6,
category: "Chat Filtering",
name: "Show Deleted Messages",
help: "Fade deleted messages instead of replacing them, and prevent chat from being cleared.",
on_update: function(val) {
if ( this.has_bttv || ! this.rooms )
if ( this.has_bttv_6 || ! this.rooms )
return;
for(var room_id in this.rooms) {
@ -281,14 +281,14 @@ FFZ.settings_info.group_tabs = {
process_value: utils.process_int(0, 0, 3),
no_bttv: true,
no_bttv: 6,
category: "Chat Appearance",
name: "Chat Room Tabs",
help: "Display tabs for chat rooms with recent activity at the top of the chat window for more convenient chatting.",
on_update: function(val) {
if ( this.has_bttv || ! this._chatv )
if ( this.has_bttv_6 || ! this._chatv )
return;
if ( val )
@ -321,7 +321,7 @@ FFZ.settings_info.visible_rooms = {
FFZ.prototype.refresh_chat = function() {
var parents, lines = jQuery('ul.chat-lines');
if ( this.has_bttv || ! lines || ! lines.length )
if ( this.has_bttv_6 || ! lines || ! lines.length )
return;
parents = lines.parents('.chatReplay');
@ -358,7 +358,7 @@ FFZ.prototype.setup_chatview = function() {
},
ffzUpdateChannels: function() {
if ( ! f._chatv || f.has_bttv )
if ( ! f._chatv || f.has_bttv_6 )
return;
f._chatv.ffzRebuildMenu();
@ -395,7 +395,7 @@ FFZ.prototype.setup_chatview = function() {
}.observes("currentChannelRoom"),
ffzUpdateInvites: function() {
if ( ! f._chatv || f.has_bttv )
if ( ! f._chatv || f.has_bttv_6 )
return;
f._chatv.ffzUpdateMenuUnread();
@ -407,7 +407,7 @@ FFZ.prototype.setup_chatview = function() {
}.observes('currentRoom'),
notificationsCount: function() {
if ( ! f._chatv || f.has_bttv )
if ( ! f._chatv || f.has_bttv_6 )
return this._super();
var total = this.get('invitedPrivateGroupRooms.length') || 0;
@ -450,7 +450,7 @@ FFZ.prototype.setup_chatview = function() {
}.observes("privateGroupRooms.@each"),
removeCurrentChannelRoom: function() {
if ( f.has_bttv )
if ( f.has_bttv_6 )
return this._super();
var room = this.get("currentChannelRoom"),
@ -573,7 +573,7 @@ FFZ.prototype.modify_chat_room_manager = function(component) {
this.$('.textarea-contain').append(f.build_ui_link(this));
if ( ! f.has_bttv ) {
if ( ! f.has_bttv_6 ) {
if ( f.settings.group_tabs )
this.ffzEnableTabs();
@ -738,7 +738,7 @@ FFZ.prototype.modify_chat_room_manager = function(component) {
updated = false;
if ( f.has_bttv )
if ( f.has_bttv_6 )
return;
if ( target ) {
@ -1071,7 +1071,7 @@ FFZ.prototype.modify_chat_room_manager = function(component) {
// Group Tabs
ffzEnableTabs: function() {
if ( f.has_bttv || ! f.settings.group_tabs || this._ffz_tabs )
if ( f.has_bttv_6 || ! f.settings.group_tabs || this._ffz_tabs )
return;
// Hide the existing chat UI.
@ -1110,7 +1110,7 @@ FFZ.prototype.modify_chat_room_manager = function(component) {
tabs.innerHTML = "";
if ( f.has_bttv || ! f.settings.group_tabs )
if ( f.has_bttv_6 || ! f.settings.group_tabs )
return;
var link = utils.createElement('a', 'button button--icon-only'),
@ -1285,7 +1285,7 @@ FFZ.prototype.connect_extra_chat = function() {
}
// We don't join extra rooms with BTTV.
if ( this.has_bttv )
if ( this.has_bttv_6 )
return;
for(var i=0; i < this.settings.pinned_rooms.length; i++)
@ -1345,7 +1345,7 @@ FFZ.prototype._join_room = function(room_id, no_rebuild) {
// Rebuild the chat UI.
if ( ! no_rebuild && ! this.has_bttv && this._chatv ) {
if ( ! no_rebuild && ! this.has_bttv_6 && this._chatv ) {
if ( this.settings.group_tabs )
this._chatv.ffzRebuildTabs();
@ -1383,7 +1383,7 @@ FFZ.prototype._leave_room = function(room_id, no_rebuild) {
// Rebuild the chat UI.
if ( ! no_rebuild && ! this.has_bttv && this._chatv ) {
if ( ! no_rebuild && ! this.has_bttv_6 && this._chatv ) {
if ( this.settings.group_tabs )
this._chatv.ffzRebuildTabs();
@ -1399,7 +1399,7 @@ FFZ.prototype._leave_room = function(room_id, no_rebuild) {
// ----------------------
FFZ.chat_commands.join = function(room, args) {
if ( this.has_bttv )
if ( this.has_bttv_6 )
return "Pinned Rooms are not available with BetterTTV installed.";
if ( ! args || ! args.length || args.length > 1 )
@ -1415,13 +1415,13 @@ FFZ.chat_commands.join = function(room, args) {
return "You have already joined " + room_id + ". Please use \"/part " + room_id + "\" to leave it.";
}
FFZ.chat_commands.join.no_bttv = true;
FFZ.chat_commands.join.no_bttv = 6;
FFZ.chat_commands.join.label = '/join &lt;channel&gt;';
FFZ.chat_commands.join.info = 'Add Channel to Pinned Rooms';
FFZ.chat_commands.part = function(room, args) {
if ( this.has_bttv )
if ( this.has_bttv_6 )
return "Pinned Rooms are not available with BetterTTV installed.";
if ( ! args || ! args.length || args.length > 1 )
@ -1439,6 +1439,6 @@ FFZ.chat_commands.part = function(room, args) {
return "You are not in " + room_id + ".";
}
FFZ.chat_commands.part.no_bttv = true;
FFZ.chat_commands.part.no_bttv = 6;
FFZ.chat_commands.part.label = '/part &lt;channel&gt;';
FFZ.chat_commands.part.info = 'Remove Channel from Pinned Rooms';

View file

@ -38,14 +38,14 @@ FFZ.settings_info.top_conversations = {
FFZ.settings_info.hide_whispers_in_embedded_chat = {
type: "boolean",
value: false,
no_bttv: true,
no_bttv: 6,
category: "Whispers",
name: "Hide Whispers in Embedded Chat",
help: "Do not display whispers on the dashboard, in pop-out chat, or in chat embedded into other websites.",
on_update: function(val) {
if ( ! val || this.has_bttv )
if ( ! val || this.has_bttv_6 )
return;
for(var room_id in this.rooms) {
@ -117,7 +117,7 @@ FFZ.prototype.modify_conversation_menu = function(component) {
el = this.get('element'),
sections = el && el.querySelectorAll('.options-section');
if ( ! user || ! user.length || f.has_bttv )
if ( ! user || ! user.length || f.has_bttv_6 )
return;
if ( sections && sections.length )

View file

@ -37,7 +37,7 @@ FFZ.settings_info.username_display = {
},
category: "Chat Appearance",
no_bttv: true,
no_bttv: 6,
name: "Username Display",
help: "How a user's name should be rendered when their display name differs from the username.",
@ -83,8 +83,6 @@ FFZ.settings_info.replace_bad_emotes = {
value: true,
category: "Chat Appearance",
warn_bttv: "Only affects Whispers when BetterTTV is enabled.",
name: "Fix Low Quality Twitch Global Emoticons",
help: "Replace emoticons such as DansGame and RedCoat with cleaned up versions that don't have pixels around the edges or white backgrounds for nicer display on dark chat."
};
@ -95,7 +93,7 @@ FFZ.settings_info.parse_links = {
value: true,
category: "Chat Appearance",
no_bttv: true,
no_bttv: 6,
name: "Make Links Clickable",
help: "Display links as real, clickable hyperlinks rather than just text."
@ -107,7 +105,7 @@ FFZ.settings_info.parse_emoticons = {
value: true,
category: "Chat Appearance",
no_bttv: true,
no_bttv: 6,
name: "Display Emoticons",
help: "Display emoticons in chat messages rather than just text."
@ -138,7 +136,7 @@ FFZ.settings_info.scrollback_length = {
value: 150,
category: "Chat Appearance",
no_bttv: true,
no_bttv: 6,
name: "Scrollback Length",
help: "Set the maximum number of lines to keep in chat.",
@ -179,7 +177,7 @@ FFZ.settings_info.hosted_sub_notices = {
value: true,
category: "Chat Filtering",
no_bttv: true,
no_bttv: 6,
name: "Show Hosted Channel Subscriber Notices",
help: "Display (or more specifically <i>hides</i> when disabled) notices in chat when someone subscribes to the hosted channel."
@ -188,11 +186,9 @@ FFZ.settings_info.hosted_sub_notices = {
FFZ.settings_info.filter_whispered_links = {
type: "boolean",
value: true,
value: 6,
category: "Chat Filtering",
warn_bttv: "Only affects Whispers when BetterTTV is enabled.",
name: "Auto-Hide Potentially Dangerous Whispered Links",
help: "Removes whispered links and displays a placeholder, with a warning that the link has not been approved by moderation or staff. Links remain accessible with an additional click."
};
@ -204,8 +200,6 @@ FFZ.settings_info.banned_words = {
category: "Chat Filtering",
warn_bttv: "Only affects Whispers when BetterTTV is enabled.",
name: "Banned Words",
help: "Set a list of words that will be locally removed from chat messages.",
@ -244,8 +238,6 @@ FFZ.settings_info.keywords = {
category: "Chat Filtering",
warn_bttv: "Only affects Whispers when BetterTTV is enabled.",
name: "Highlight Keywords",
help: "Set additional keywords that will be highlighted in chat.",
@ -284,7 +276,6 @@ FFZ.settings_info.clickable_emoticons = {
value: false,
category: "Chat Tooltips",
warn_bttv: "Only affects Whispers when BetterTTV is enabled.",
no_mobile: true,
name: "Emoticon Information Pages",
@ -297,7 +288,7 @@ FFZ.settings_info.link_info = {
value: true,
category: "Chat Tooltips",
no_bttv: true,
no_bttv: 6,
name: "Link Information <span>Beta</span>",
help: "Check links against known bad websites, unshorten URLs, and show YouTube info."
@ -309,7 +300,7 @@ FFZ.settings_info.link_image_hover = {
value: false,
category: "Chat Tooltips",
no_bttv: true,
no_bttv: 6,
no_mobile: true,
name: "Image Preview",
@ -337,7 +328,7 @@ FFZ.settings_info.image_hover_all_domains = {
value: false,
category: "Chat Tooltips",
no_bttv: true,
no_bttv: 6,
no_mobile: true,
name: "Image Preview - All Domains",
@ -407,7 +398,7 @@ FFZ.settings_info.old_sub_notices = {
value: false,
category: "Chat Appearance",
no_bttv: true,
no_bttv: 6,
name: "Old-Style Subscriber Notices",
help: "Display the old style subscriber notices, with the message on a separate line."
@ -933,15 +924,43 @@ FFZ.prototype._modify_chat_line = function(component, is_vod) {
style = colors ? 'color:' + (is_dark ? colors[1] : colors[0]) : '',
colored = colors ? ' has-color' + (is_replay ? ' replay-color' : '') : '',
results = f.format_display_name(raw_display, username);
results = f.format_display_name(raw_display, username),
tag = f.settings.disable_bttv_mod_cards ? 'fspan' : 'span';
return '<span class="' + (is_recipient ? 'to' : 'from') + (alias ? ' ffz-alias' : '') + (results[1] ? ' html-tooltip' : '') + colored + '" style="' + style + (colors ? '" data-color="' + raw_color : '') + (results[1] ? '" title="' + utils.quote_attr(results[1]) : '') + '">' + results[0] + '</span>';
return '<' + tag + ' class="' + (is_recipient ? 'to' : 'from') + (alias ? ' ffz-alias' : '') + (results[1] ? ' html-tooltip' : '') + colored + '" style="' + style + (colors ? '" data-color="' + raw_color : '') + (results[1] ? '" title="' + utils.quote_attr(results[1]) : '') + '">' + results[0] + '</' + tag + '>';
},
buildSystemMessageHTML: function() {
return this.get('hasSystemMsg') ?
'<div class="system-msg">' + utils.sanitize(this.get('systemMsg')) + '</div>' :
'';
if ( ! this.get('hasSystemMsg') )
return '';
var tags = this.get('msgObject.tags') || {},
msg_type = tags['msg-id'],
out = '';
if ( msg_type === 'bits-hashtag' )
out = f.render_token(true,false,true, {type: "bits", prefix: "Cheer", amount: parseInt(tags['msg-param-total'])}) +
utils.sanitize(tags['system-msg'] || '')
.replace('{hashtag}', '<strong>#' + utils.sanitize(tags['msg-param-hashtag']) + '</strong>')
.replace('{link}', '<a target="_blank" href="' + utils.quote_san(tags['msg-param-link']) + '">' + utils.sanitize(tags['msg-param-linkname']) + '</a>')
else if ( msg_type === 'purchase' ) {
var Intl = utils.ember_lookup('service:intl');
out = Intl && ('<p class="purchase-message-title pd-t-0 float-left">' +
Intl.tHtml('gameCommerce.purchaseNotifications.message', {
userName: tags['login'],
purchaseTitle: tags['msg-param-title']
}).string +
'</p><div><img class="purchase-notif__box-art float-right mg-t-0 mg-1-1" src="' +
utils.quote_san(tags['msg-param-imageURL']) +
'"></div>');
}
else
out = utils.sanitize(this.get('systemMsg'));
return out ? '<div class="system-msg">' + out + '</div>' : '';
},
buildBadgesHTML: function() {

View file

@ -34,6 +34,32 @@ try {
// Settings
// ----------------
FFZ.settings_info.disable_bttv_mod_cards = {
type: "boolean",
value: false,
require_bttv: 7,
category: "Chat Moderation",
name: "Disable BTTV Mod Cards",
help: "This disables mod cards from BetterTTV, forcing FFZ mod cards to show instead.",
on_update: function(val) {
var CL = utils.ember_resolve('component:chat/chat-line'),
views = CL ? utils.ember_views() : [];
for(var vid in views) {
var view = views[vid];
if ( view instanceof CL && view.buildFromHTML ) {
view.$('.from').replaceWith(view.buildFromHTML());
if ( view.get('msgObject.to') )
view.$('.to').replaceWith(view.buildFromHTML(true));
}
}
}
};
FFZ.basic_settings.enhanced_moderation_cards = {
type: "boolean",
@ -60,7 +86,7 @@ FFZ.basic_settings.enhanced_moderation_cards = {
FFZ.basic_settings.chat_hover_pause = {
type: "boolean",
no_bttv: true,
no_bttv: 6,
category: "Chat",
name: "Pause Chat Scrolling on Mouse Hover",
@ -121,7 +147,7 @@ FFZ.settings_info.chat_mod_icon_visibility = {
process_value: utils.process_int(0),
no_bttv: true,
no_bttv: 6,
category: "Chat Moderation",
name: "Display In-Line Mod Icons",
@ -154,7 +180,7 @@ FFZ.settings_info.chat_hover_pause = {
value: 0,
process_value: utils.process_int(0, 0, 1),
no_bttv: true,
no_bttv: 6,
category: "Chat Moderation",
name: "Pause Chat Scrolling",
@ -182,7 +208,7 @@ FFZ.settings_info.short_commands = {
type: "boolean",
value: true,
no_bttv: true,
no_bttv: 6,
category: "Chat Moderation",
name: "Short Moderation Commands",
@ -225,7 +251,7 @@ FFZ.settings_info.timeout_notices = {
value: 1,
process_value: utils.process_int(1),
no_bttv: true,
no_bttv: 6,
category: "Chat Moderation",
name: "Display Timeout / Ban Notices",
@ -276,7 +302,7 @@ FFZ.settings_info.mod_button_context = {
value: 3,
process_value: utils.process_int(3),
no_bttv: true,
no_bttv: 6,
category: "Chat Moderation",
name: "Mod Icon Context Menus",
@ -296,7 +322,7 @@ FFZ.settings_info.mod_card_reasons = {
],
category: "Chat Moderation",
no_bttv: true,
no_bttv: 6,
name: "Ban / Timeout Reasons",
help: "Change the available options in the chat ban reasons list shown in moderation cards and when right-clicking an in-line ban or timeout button.",
@ -339,7 +365,7 @@ FFZ.settings_info.mod_buttons = {
// integer = Timeout (that amount of time)
value: [['', false, false], ['',600, false]], //, ['', 1, false]],
no_bttv: true,
no_bttv: 6,
category: "Chat Moderation",
name: "Custom In-Line Moderation Icons",
@ -910,7 +936,7 @@ FFZ.prototype.modify_moderation_card = function(component) {
},
ffz_init: function() {
if ( f.has_bttv )
if ( f.has_bttv_6 )
return;
f._mod_card = this;

View file

@ -663,13 +663,15 @@ FFZ.prototype.modify_room_component = function(component) {
ffz_init: function() {
f._roomv = this;
if ( ! f.has_bttv ) {
if ( ! f.has_bttv_6 ) {
this.ffzFixStickyBottom();
this.ffzAddKeyHook();
if ( f.settings.chat_hover_pause )
this.ffzEnableFreeze();
}
if ( ! f.has_bttv ) {
if ( f.settings.room_status )
this.ffzUpdateStatus();
}
@ -810,7 +812,7 @@ FFZ.ffz_commands = {};
FFZ.prototype.room_message = function(room, text) {
if ( this.has_bttv ) {
if ( this.has_bttv_6 ) {
var lines = text.split("\n");
for(var i=0; i < lines.length; i++)
BetterTTV.chat.handlers.onPrivmsg(room.id, {style: 'admin', date: new Date(), from: 'jtv', message: lines[i]});
@ -1329,7 +1331,7 @@ FFZ.prototype._modify_room = function(room) {
addFriendsWatchingMessage: function(msg) {
this.addMessage({
style: 'admin' + (f.has_bttv ? '' : ' friend-watching'),
style: 'admin' + (f.has_bttv_6 ? '' : ' friend-watching'),
message: msg,
tags: {
emotes: tmimotes && tmimotes(this.get('userEmotes').tryParseEmotes(msg))
@ -1386,7 +1388,7 @@ FFZ.prototype._modify_room = function(room) {
//f.log("Login Moderation for " + this.get('id') + ' [' + room_id + ']', event);
// In case we get unexpected input, do the other thing.
if ( f.has_bttv || ["ban", "unban", "timeout", "untimeout"].indexOf(event.moderation_action) === -1 )
if ( f.has_bttv_6 || ["ban", "unban", "timeout", "untimeout"].indexOf(event.moderation_action) === -1 )
return this._super(event);
var msg_id,

View file

@ -83,7 +83,7 @@ FFZ.prototype.modify_vod_chat_display = function(component) {
Room && Room.findOne(room_id);
}
if ( ! f.has_bttv ) {
if ( ! f.has_bttv_6 ) {
this.ffzFixStickyBottom();
this.ffzAddKeyHook();

View file

@ -11,7 +11,10 @@ var FFZ = window.FrankerFaceZ,
// --------------------
FFZ.prototype.find_bttv = function(increment, delay) {
this.has_bttv = false;
this.has_bttv = this.has_bttv_6 = this.has_bttv_7 = false;
if ( window.BetterTTV && BetterTTV.version && BetterTTV.version.indexOf('7.') === 0 )
return this.setup_bttv_7(delay||0);
if ( window.BTTVLOADED )
return this.setup_bttv(delay||0);
@ -23,9 +26,94 @@ FFZ.prototype.find_bttv = function(increment, delay) {
}
FFZ.prototype.setup_bttv_7 = function(delay) {
this.log("BetterTTV v7 was detected after " + delay + "ms. Hooking.");
this.has_bttv = 7;
this.has_bttv_6 = false;
this.has_bttv_7 = true;
var settings = BetterTTV.settings,
cl = document.body.classList;
// Disable FFZ Dark if it's enabled.
cl.remove("ffz-dark");
if ( this._dark_style ) {
this._dark_style.parentElement.removeChild(this._dark_style);
this._dark_style = undefined;
}
// Disable other styling.
if ( this._layout_style ) {
this._layout_style.parentElement.removeChild(this._layout_style);
this._layout_style = undefined;
}
if ( this._chat_style ) {
utils.update_css(this._chat_style, 'chat_font_size', '');
utils.update_css(this._chat_style, 'chat_ts_font_size', '');
}
this.toggle_style('chat-padding');
this.toggle_style('chat-background');
this.toggle_style('chat-separator');
this.toggle_style('chat-separator-3d');
this.toggle_style('chat-separator-3d-inset');
this.toggle_style('chat-separator-wide');
this.toggle_style('chat-colors-gray');
/*this.toggle_style('badges-rounded');
this.toggle_style('badges-circular');
this.toggle_style('badges-blank');
this.toggle_style('badges-circular-small');
this.toggle_style('badges-transparent');*/
this.toggle_style('badges-sub-notice');
this.toggle_style('badges-sub-notice-on');
//cl.remove('ffz-transparent-badges');
cl.remove("ffz-sidebar-swap");
cl.remove("ffz-portrait");
cl.remove("ffz-minimal-channel-title");
cl.remove("ffz-flip-dashboard");
cl.remove('ffz-minimal-channel-bar');
cl.remove('ffz-channel-bar-bottom');
cl.remove('ffz-channel-title-top');
cl.remove('ffz-sidebar-minimize');
cl.remove('ffz-alias-italics');
// Update the layout service.
var Layout = utils.ember_lookup('service:layout');
if ( Layout ) {
Layout.set('ffzMinimizeNavigation', false);
Layout.set('rawPortraitMode', 0);
}
// Remove Following Count
if ( this.settings.following_count ) {
this._schedule_following_count();
this._draw_following_count();
this._draw_following_channels();
}
// Hook into BTTV's dark mode.
cl.add('ffz-bttv');
cl.toggle('ffz-bttv-dark', settings.get('darkenedMode'));
settings.on('changed.darkenedMode', function(val) {
cl.toggle('ffz-bttv-dark', val);
});
this.update_ui_link();
this.api_trigger('bttv-initialized', 7);
}
FFZ.prototype.setup_bttv = function(delay) {
this.log("BetterTTV was detected after " + delay + "ms. Hooking.");
this.has_bttv = true;
this.has_bttv_6 = true;
this.has_bttv_7 = false;
// Disable Dark if it's enabled.
document.body.classList.remove("ffz-dark");
@ -112,6 +200,7 @@ FFZ.prototype.setup_bttv = function(delay) {
cl.remove('ffz-channel-bar-bottom');
cl.remove('ffz-channel-title-top');
cl.remove('ffz-sidebar-minimize');
cl.remove('ffz-alias-italics');
// Update the layout service.
var Layout = utils.ember_lookup('service:layout');

View file

@ -30,7 +30,7 @@ FFZ.prototype.setup_emote_menu = function(delay) {
// --------------------
FFZ.prototype._emote_menu_enumerator = function() {
if ( this.has_bttv )
if ( this.has_bttv_6 )
return [];
var twitch_user = this.get_user(),

View file

@ -68,7 +68,7 @@ FFZ.prototype._feature_friday_ui = function(room_id, parent, view) {
btn.className = 'button primary';
btn.classList.toggle('live', ff.live);
btn.classList.toggle('blue', this.has_bttv && BetterTTV.settings.get('showBlueButtons'));
btn.classList.toggle('blue', this.has_bttv_6 && BetterTTV.settings.get('showBlueButtons'));
btn.href = "//www.twitch.tv/" + ff.channel;
btn.title = message;

View file

@ -61,7 +61,7 @@ FFZ.channel_metadata = {};
// Version
var VER = FFZ.version_info = {
major: 3, minor: 5, revision: 459,
major: 3, minor: 5, revision: 463,
toString: function() {
return [VER.major, VER.minor, VER.revision].join(".") + (VER.extra || "");
}
@ -295,7 +295,7 @@ require('./ui/tooltips');
require('./ui/notifications');
//require('./ui/viewer_count');
require('./ui/sub_count');
require('./ui/dash_stats');
//require('./ui/dash_stats');
require('./ui/dash_feed');
require('./ui/menu_button');
@ -494,7 +494,7 @@ FFZ.prototype.init_dashboard = function(delay) {
this.setup_notifications();
this.setup_following_count(false);
this.setup_menu();
this.setup_dash_stats();
//this.setup_dash_stats();
this.setup_dash_feed();
this.finalize_ember_wrapper();

View file

@ -409,9 +409,15 @@ var is_android = navigator.userAgent.indexOf('Android') !== -1,
el.className = 'ffz-setting clearfix';
if ( this.has_bttv && info.no_bttv ) {
if ( (info.no_bttv === 6 && this.has_bttv_6) ||
(info.no_bttv === 7 && this.has_bttv_7) ||
(info.no_bttv === true && this.has_bttv) ) {
bttv_skipped.push([info.name, info.help]);
continue;
} else if ( (info.require_bttv === 6 && ! this.has_bttv_6) ||
(info.require_bttv === 7 && ! this.has_bttv_7) ||
(info.require_bttv === true && ! this.has_bttv) ) {
continue;
} else {
if ( show_pin ) {
var faved = this.settings.favorite_settings.indexOf(key) !== -1;

View file

@ -6,11 +6,13 @@
background-color: rgba(0,127,255, 0.4);
}
.ffz-bttv-dark .chat-lines .chat-line[data-sender="{user_id}"],
.theatre .chat-lines .chat-line[data-sender="{user_id}"],
.dark .chat-lines .chat-line[data-sender="{user_id}"] {
background-color: rgba(0,63,127, 0.2);
}
.ffz-bttv-dark .chat-lines .chat-line[data-sender="{user_id}"]:nth-child(2n+0),
.theatre .chat-lines .chat-line[data-sender="{user_id}"]:nth-child(2n+0),
.dark .chat-lines .chat-line[data-sender="{user_id}"]:nth-child(2n+0) {
background-color: rgba(0,63,127, 0.4);

View file

@ -132,7 +132,7 @@ FFZ.settings_info.twenty_four_timestamps = {
},
category: "Chat Appearance",
no_bttv: true,
no_bttv: 6,
name: "Timestamp Format",
help: "Display timestamps in chat in the 24 hour format rather than 12 hour.",
@ -156,7 +156,7 @@ FFZ.settings_info.timestamp_seconds = {
value: false,
category: "Chat Appearance",
no_bttv: true,
no_bttv: 6,
name: "Timestamp Seconds",
help: "Display seconds in chat timestamps."
@ -168,7 +168,7 @@ FFZ.settings_info.show_deleted_links = {
value: false,
category: "Chat Moderation",
no_bttv: true,
no_bttv: 6,
name: "Show Deleted Links",
help: "Do not delete links based on room settings or link length."
@ -180,7 +180,7 @@ FFZ.settings_info.clickable_mentions = {
value: true,
category: 'Chat Moderation',
no_bttv: true,
no_bttv: 6,
name: 'Clickable Mentions',
help: 'Make mentions in chat starting with an at sign (<code>@</code>) 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');

View file

@ -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);

View file

@ -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.",

View file

@ -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;

View file

@ -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);

View file

@ -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;
},

View file

@ -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;