diff --git a/src/ember/conversations.js b/src/ember/conversations.js index 06bee1d0..6490dbe9 100644 --- a/src/ember/conversations.js +++ b/src/ember/conversations.js @@ -142,18 +142,22 @@ FFZ.prototype._modify_conversation_line = function(component) { return this._super(e); }, - render: function(e) { - var user = this.get('message.from.username'), + didUpdate: function() { this.ffzRender() }, + didInsertElement: function() { this.ffzRender() }, + + ffzRender: function() { + var el = this.get('element'), + e = [], + + user = this.get('message.from.username'), raw_color = this.get('message.from.color'), colors = raw_color && f._handle_color(raw_color), is_dark = (Layout && Layout.get('isTheatreMode')) || f.settings.dark_twitch, myself = f.get_user(), - from_me = myself && myself.login === user; + from_me = myself && myself.login === user, - e.push('
'); - - var alias = f.aliases[user], + alias = f.aliases[user], name = this.get('message.from.displayName') || (user && user.capitalize()) || "unknown user", style = colors && 'color:' + (is_dark ? colors[1] : colors[0]), colored = style ? ' has-color' : ''; @@ -173,6 +177,7 @@ FFZ.prototype._modify_conversation_line = function(component) { e.push(''); e.push(f.render_tokens(this.get('tokenizedMessage'), true, f.settings.filter_whispered_links && !from_me)); e.push(''); + el.innerHTML = e.join(''); } }); } \ No newline at end of file diff --git a/src/ember/line.js b/src/ember/line.js index 95e3590a..6d86543e 100644 --- a/src/ember/line.js +++ b/src/ember/line.js @@ -937,6 +937,19 @@ FFZ.prototype._modify_vod_line = function(component) { this.$(".deleted").replaceWith(this.buildMessageHTML()); }),*/ + tokenizedMessage: function() { + try { + return f.tokenize_vod_line(this.get('msgObject'), !(this.get('enableLinkification') || this.get('isModeratorOrHigher'))); + } catch(err) { + f.error("vod-chat-line tokenizedMessage: " + err); + return this._super(); + } + }.property("msgObject.message", "currentUserNick", "msgObject.from", "msgObject.tags.emotes"), + + buildHorizontalLineHTML: function() { + return '
' + this.get('msgObject.timestamp') + '
'; + }, + buildModIconsHTML: function() { if ( ! this.get("isViewerModeratorOrHigher") || this.get("isModeratorOrHigher") ) return ""; @@ -951,16 +964,23 @@ FFZ.prototype._modify_vod_line = function(component) { return '<message deleted>'; }, - render: function(e) { + didUpdate: function() { this.ffzRender() }, + didInsertElement: function() { this.ffzRender() }, + + ffzRender: function() { + var el = this.get('element'), output; + if ( this.get('msgObject.isHorizontalLine') ) - e.push(this.buildHorizontalLineHTML()); + output = this.buildHorizontalLineHTML(); else { - e.push(this.buildSenderHTML()); - if ( this.get("msgObject.deleted") ) - e.push(this.buildDeletedMessageHTML()) + output = this.buildSenderHTML(); + if ( this.get('msgObject.deleted') ) + output += this.buildDeletedMessageHTML() else - e.push(this.buildMessageHTML()); + output += this.buildMessageHTML(); } + + el.innerHTML = output; }, click: function(e) { @@ -968,12 +988,6 @@ FFZ.prototype._modify_vod_line = function(component) { e.preventDefault(); this.sendAction("timeoutUser", this.get("msgObject.id")); } - }, - - didInsertElement: function() { - this._super(); - if ( this.get("msgObject.ffz_has_mention") ) - this.get("element").classList.add("ffz-mentioned"); } }); } diff --git a/src/main.js b/src/main.js index 2611e658..d5281e24 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: 138, + major: 3, minor: 5, revision: 139, toString: function() { return [VER.major, VER.minor, VER.revision].join(".") + (VER.extra || ""); } diff --git a/src/tokenize.js b/src/tokenize.js index e9960b79..23567312 100644 --- a/src/tokenize.js +++ b/src/tokenize.js @@ -417,16 +417,66 @@ FFZ.prototype.tokenize_conversation_line = function(message, prevent_notificatio return tokens; } + +FFZ.prototype.tokenize_vod_line = function(msgObject, delete_links) { + var cached = msgObject.get('cachedTokens'); + if ( cached ) + return cached; + + var msg = msgObject.get('message'), + room_id = msgObject.get('room'), + from_user = msgObject.get('from'), + user = this.get_user(), + from_me = user && from_user === user.login, + emotes = msgObject.get('tags.emotes'), + tokens = [msg]; + + if ( helpers && helpers.linkifyMessage ) + tokens = helpers.linkifyMessage(tokens, delete_links); + + if ( user && user.login && helpers && helpers.mentionizeMessage ) + tokens = helpers.mentionizeMessage(tokens, user.login, from_me); + + if ( helpers && helpers.emoticonizeMessage && emotes ) + tokens = helpers.emoticonizeMessage(tokens, emotes); + + // FrankerFaceZ Extras + tokens = this._remove_banned(tokens); + tokens = this.tokenize_emotes(from_user, room_id, tokens, from_me); + + if ( this.settings.parse_emoji ) + tokens = this.tokenize_emoji(tokens); + + var display = msgObject.get('tags.display-name'); + if ( display && display.length ) + FFZ.capitalization[from_user] = [display.trim(), Date.now()]; + + if ( ! from_me ) { + tokens = this.tokenize_mentions(tokens); + for(var i=0; i < tokens.length; i++) { + var token = tokens[i]; + if ( token.type === 'mention' && ! token.isOwnMessage ) { + msgObject.set('ffz_has_mention', true); + break; + } + } + } + + msgObject.set('cachedTokens', tokens); + return tokens; +} + + FFZ.prototype.tokenize_chat_line = function(msgObject, prevent_notification, delete_links) { if ( msgObject.cachedTokens ) return msgObject.cachedTokens; - var msg = msgObject.get && (msgObject.get('message') || msgObject.get('body')) || msgObject.message, - room_id = msgObject.get && msgObject.get('room') || msgObject.room, - from_user = msgObject.get && msgObject.get('from') || msgObject.from, + var msg = msgObject.message, + room_id = msgObject.room, + from_user = msgObject.from, user = this.get_user(), from_me = user && from_user === user.login, - emotes = msgObject.get && msgObject.get('tags.emotes') || msgObject.tags && msgObject.tags.emotes, + emotes = msgObject.tags && msgObject.tags.emotes, tokens = [msg]; // Standard tokenization @@ -474,7 +524,7 @@ FFZ.prototype.tokenize_chat_line = function(msgObject, prevent_notification, del continue; // We have a mention! - msgObject.ffz_has_mention = true; + msgObject.ffz_has_mention = true; // If we have chat tabs/rows, update the status. if ( room_id && ! this.has_bttv && this._chatv ) {