diff --git a/src/ember/chat-input.js b/src/ember/chat-input.js index 5cc3f236..fca60103 100644 --- a/src/ember/chat-input.js +++ b/src/ember/chat-input.js @@ -116,6 +116,18 @@ FFZ.settings_info.input_complete_emotes = { } +FFZ.settings_info.input_complete_name_at = { + type: "boolean", + value: true, + + category: "Chat Input", + no_bttv: true, + + name: "Tab-Complete Usernames with At Sign", + help: "When enabled, tab-completed usernames will have an @ sign before them if you typed one. This is default Twitch behavior, but unnecessary." +} + + FFZ.settings_info.input_complete_without_prefix = { type: "boolean", value: true, @@ -160,12 +172,17 @@ FFZ.prototype.setup_chat_input = function() { this._modify_chat_input(Input); + try { Input.create().destroy() + } catch(err) { } + var views = utils.ember_views(); for(var key in views) { var v = views[key]; if ( v instanceof Input ) { this.log("Manually modifying Chat Input component.", v); - this._modify_chat_input(v); + if ( ! v.ffzInit ) + this._modify_chat_input(v); + v.ffzInit(); } } @@ -439,8 +456,9 @@ FFZ.prototype._modify_chat_input = function(component) { ind = this.get('ffz_partial_word_start'), text = this.get('textareaValue'), - content = (item.command_content && text.charAt(0) === '/' ? - item.command_content : item.content) || item.label, + content = ((f.settings.input_complete_name_at && item.type === 'user' && this.get('ffz_partial_word').charAt(0) === '@') ? '@' : '') + + ((item.command_content && text.charAt(0) === '/' ? + item.command_content : item.content) || item.label), trail = text.substr(ind + this.get('ffz_partial_word').length), prefix = text.substr(0, ind) + content + (trail ? '' : ' '); @@ -931,10 +949,10 @@ FFZ.prototype._modify_chat_input = function(component) { } } }); - - break; } + break; + case KEYCODES.ENTER: if ( e.shiftKey || e.shiftLeft ) diff --git a/src/ember/chatview.js b/src/ember/chatview.js index b51deb3c..80833f0d 100644 --- a/src/ember/chatview.js +++ b/src/ember/chatview.js @@ -456,6 +456,7 @@ FFZ.prototype.setup_chatview = function() { Chat.create().destroy(); } catch(err) { } + // Modify all existing Chat views. var views = utils.ember_views(); for(var key in views) { diff --git a/src/ember/conversations.js b/src/ember/conversations.js index 6490dbe9..9ff4031c 100644 --- a/src/ember/conversations.js +++ b/src/ember/conversations.js @@ -56,14 +56,20 @@ FFZ.prototype.setup_conversations = function() { this.log("Hooking the Ember Conversation Window component."); var ConvWindow = utils.ember_resolve('component:conversation-window'); - if ( ConvWindow ) + if ( ConvWindow ) { this._modify_conversation_window(ConvWindow); + try { ConvWindow.create().destroy() } + catch(err) { } + } this.log("Hooking the Ember Conversation Line component."); var ConvLine = utils.ember_resolve('component:conversation-line'); - if ( ConvLine ) + if ( ConvLine ) { this._modify_conversation_line(ConvLine); + try { ConvLine.create().destroy() } + catch(err) { } + } // TODO: Make this better later. jQuery('.conversations-list').find('.html-tooltip').tipsy({live: true, html: true, gravity: utils.tooltip_placement(2*constants.TOOLTIP_DISTANCE, 'n')}); diff --git a/src/ext/betterttv.js b/src/ext/betterttv.js index 1051464a..9a389ade 100644 --- a/src/ext/betterttv.js +++ b/src/ext/betterttv.js @@ -256,7 +256,7 @@ FFZ.prototype.setup_bttv = function(delay) { if ( emote_set && emote_set.emoticons ) for(var emote_id in emote_set.emoticons) { emote = emote_set.emoticons[emote_id]; - if ( ! emotes[emote.name] ) + if ( ! emotes.hasOwnProperty(emote.name) ) emotes[emote.name] = emote; } } @@ -274,9 +274,8 @@ FFZ.prototype.setup_bttv = function(delay) { for(var x=0,y=segments.length; x < y; x++) { segment = segments[x]; - emote = emotes[segment]; - - if ( emote ) { + if ( emotes.hasOwnProperty(segment) ) { + emote = emotes[segment]; if ( text.length ) { var toks = parse_emoji(text.join(' ') + ' '); for(var q=0; q < toks.length; q++) diff --git a/src/main.js b/src/main.js index cb259dd7..804861e6 100644 --- a/src/main.js +++ b/src/main.js @@ -35,7 +35,7 @@ FFZ.msg_commands = {}; // Version var VER = FFZ.version_info = { - major: 3, minor: 5, revision: 145, + major: 3, minor: 5, revision: 148, toString: function() { return [VER.major, VER.minor, VER.revision].join(".") + (VER.extra || ""); } diff --git a/src/tokenize.js b/src/tokenize.js index 23567312..e2e83134 100644 --- a/src/tokenize.js +++ b/src/tokenize.js @@ -756,7 +756,7 @@ FFZ.prototype.tokenize_emotes = function(user, room, tokens, do_report) { if ( emote_set && emote_set.emoticons ) for(var emote_id in emote_set.emoticons) { emote = emote_set.emoticons[emote_id]; - if ( ! emotes[emote.name] ) + if ( ! emotes.hasOwnProperty(emote.name) ) emotes[emote.name] = emote; } } @@ -783,9 +783,9 @@ FFZ.prototype.tokenize_emotes = function(user, room, tokens, do_report) { for(var x=0,y=segments.length; x < y; x++) { segment = segments[x]; - emote = emotes[segment]; + if ( emotes.hasOwnProperty(segment) ) { + emote = emotes[segment]; - if ( emote ) { if ( text.length ) { // We have pending text. Join it together, with an extra space // on the end for good measure.