From 883f927a572ede564d192f538b0e68f5c6112037 Mon Sep 17 00:00:00 2001 From: Gabriel Cebrian Date: Fri, 15 Mar 2013 15:15:50 -0700 Subject: [PATCH] Implementation of plugin chaining. - Process modifiers now passes the activity and a message that can be modified as modifiers are applied to. --- .../javascripts/backbone/kandan.js.coffee | 2 +- .../javascripts/backbone/modifiers.js.coffee | 11 ++++---- .../backbone/plugins/emoticons.js.coffee | 8 +++--- .../plugins/hex_color_embed.js.coffee | 8 +++--- .../backbone/plugins/image_embed.js.coffee | 10 +++---- .../backbone/plugins/link_embed.js.coffee | 9 +++---- .../backbone/plugins/me_announce.js.coffee | 8 +++--- .../backbone/plugins/mentions.coffee | 8 +++--- .../backbone/plugins/music_player.js.coffee | 26 +++++++++---------- .../backbone/plugins/pastie.js.coffee | 8 +++--- .../plugins/rgb_color_embed.js.coffee | 8 +++--- .../backbone/plugins/vimeo_embed.js.coffee | 16 ++++++------ .../backbone/plugins/youtube_embed.js.coffee | 18 ++++++------- .../backbone/views/show_activity.js.coffee | 8 +++--- 14 files changed, 73 insertions(+), 75 deletions(-) diff --git a/app/assets/javascripts/backbone/kandan.js.coffee b/app/assets/javascripts/backbone/kandan.js.coffee index 624e1547..0c4f38f4 100644 --- a/app/assets/javascripts/backbone/kandan.js.coffee +++ b/app/assets/javascripts/backbone/kandan.js.coffee @@ -24,6 +24,7 @@ window.Kandan = registerPlugins: -> plugins = [ "UserList" + ,"Pastie" ,"Mentions" ,"Notifications" ,"MusicPlayer" @@ -31,7 +32,6 @@ window.Kandan = ,"VimeoEmbed" ,"ImageEmbed" ,"LinkEmbed" - ,"Pastie" ,"Attachments" ,"MeAnnounce" ,"Emoticons" diff --git a/app/assets/javascripts/backbone/modifiers.js.coffee b/app/assets/javascripts/backbone/modifiers.js.coffee index 5c28e362..efc2835f 100644 --- a/app/assets/javascripts/backbone/modifiers.js.coffee +++ b/app/assets/javascripts/backbone/modifiers.js.coffee @@ -7,9 +7,10 @@ class Kandan.Modifiers @all: ()-> @modifiers - @process: (message, state)-> + @process: (activity)-> + message = activity.content for modifier in @modifiers - if message.content.match(modifier.regex)!=null - modified_object = modifier.callback(message, state) - return modified_object if modified_object != false - false \ No newline at end of file + if message.match(modifier.regex) != null + message = modifier.callback(message, activity) + + return message \ No newline at end of file diff --git a/app/assets/javascripts/backbone/plugins/emoticons.js.coffee b/app/assets/javascripts/backbone/plugins/emoticons.js.coffee index 8c9c872b..d950986e 100644 --- a/app/assets/javascripts/backbone/plugins/emoticons.js.coffee +++ b/app/assets/javascripts/backbone/plugins/emoticons.js.coffee @@ -906,13 +906,13 @@ class Kandan.Plugins.Emoticons } @init: ()-> - Kandan.Modifiers.register @options.regex, (message, state) => - matches = message.content.match(@options.regex) + Kandan.Modifiers.register @options.regex, (message, activity) => + matches = message.match(@options.regex) for match in _.unique(matches) match = match.trim(); emoticon = @emoticons[match] if emoticon - message.content = message.content.replace(match, @options.template(emoticon)) + message = message.replace(match, @options.template(emoticon)) - return Kandan.Helpers.Activities.buildFromMessageTemplate(message) + return message diff --git a/app/assets/javascripts/backbone/plugins/hex_color_embed.js.coffee b/app/assets/javascripts/backbone/plugins/hex_color_embed.js.coffee index fb57119f..95fd535e 100644 --- a/app/assets/javascripts/backbone/plugins/hex_color_embed.js.coffee +++ b/app/assets/javascripts/backbone/plugins/hex_color_embed.js.coffee @@ -5,9 +5,9 @@ class Kandan.Plugins.HexColorEmbed template: _.template '''''' @init: ()-> - Kandan.Modifiers.register @options.regex, (message, state) => - for hex in message.content.match(@options.regex) + Kandan.Modifiers.register @options.regex, (message, activity) => + for hex in message.match(@options.regex) replacement = @options.template({hex: hex}) + hex - message.content = message.content.replace(hex, replacement) + message = message.replace(hex, replacement) - return Kandan.Helpers.Activities.buildFromMessageTemplate(message) + return message diff --git a/app/assets/javascripts/backbone/plugins/image_embed.js.coffee b/app/assets/javascripts/backbone/plugins/image_embed.js.coffee index 673e3409..9badb725 100644 --- a/app/assets/javascripts/backbone/plugins/image_embed.js.coffee +++ b/app/assets/javascripts/backbone/plugins/image_embed.js.coffee @@ -13,17 +13,17 @@ class Kandan.Plugins.ImageEmbed @init: ()-> - Kandan.Modifiers.register @options.regex, (message, state) => - url = message.content.match(@options.regex)[0] + Kandan.Modifiers.register @options.regex, (message, activity) => + url = message.match(@options.regex)[0] fileName = url.split("/").pop() - comment = $.trim(message.content.split(url).join("")) + comment = $.trim(message.split(url).join("")) subtitle = null subtitle = comment if comment.length > 0 subtitle ||= fileName - message.content = @options.template({ + message = @options.template({ imageUrl: url, subtitle: subtitle }) - return Kandan.Helpers.Activities.buildFromMessageTemplate(message) + return message diff --git a/app/assets/javascripts/backbone/plugins/link_embed.js.coffee b/app/assets/javascripts/backbone/plugins/link_embed.js.coffee index e1cb84f2..f2ce58f4 100644 --- a/app/assets/javascripts/backbone/plugins/link_embed.js.coffee +++ b/app/assets/javascripts/backbone/plugins/link_embed.js.coffee @@ -1,10 +1,9 @@ class Kandan.Plugins.LinkEmbed @options: - regex: /(http?\S*)/g + regex: /(^| )(http?\S*)/g @init: ()-> - Kandan.Modifiers.register @options.regex, (message, state)=> - message.content = message.content - .replace(@options.regex, '$1') - return Kandan.Helpers.Activities.buildFromMessageTemplate(message) + Kandan.Modifiers.register @options.regex, (message, activity)=> + message = message.replace(@options.regex, '$2') + return message diff --git a/app/assets/javascripts/backbone/plugins/me_announce.js.coffee b/app/assets/javascripts/backbone/plugins/me_announce.js.coffee index 71b7ae4c..b907fb59 100644 --- a/app/assets/javascripts/backbone/plugins/me_announce.js.coffee +++ b/app/assets/javascripts/backbone/plugins/me_announce.js.coffee @@ -4,7 +4,7 @@ class Kandan.Plugins.MeAnnounce regex: /^/me / @init: ()-> - Kandan.Modifiers.register @options.regex, (message, state) => - actor = message.user.username || message.user.email - message.content = message.content.replace @options.regex, "#{actor} " - return Kandan.Helpers.Activities.buildFromBaseTemplate(message) + Kandan.Modifiers.register @options.regex, (message, activity) => + actor = activity.user.username || activity.user.email + message = message.replace @options.regex, "#{actor} " + return message diff --git a/app/assets/javascripts/backbone/plugins/mentions.coffee b/app/assets/javascripts/backbone/plugins/mentions.coffee index 1280e8c1..df01920d 100644 --- a/app/assets/javascripts/backbone/plugins/mentions.coffee +++ b/app/assets/javascripts/backbone/plugins/mentions.coffee @@ -10,12 +10,12 @@ class Kandan.Plugins.Mentions Kandan.Data.ActiveUsers.registerCallback "change", (data)=> @initUsersMentions(data.extra.active_users) - Kandan.Modifiers.register @options.regex, (message, state) => - for mention in message.content.match(@options.regex) + Kandan.Modifiers.register @options.regex, (message, activity) => + for mention in message.match(@options.regex) replacement = @options.template({mention: mention}) - message.content = message.content.replace(mention, replacement) + message = message.replace(mention, replacement) - return Kandan.Helpers.Activities.buildFromMessageTemplate(message) + return message @initUsersMentions: (activeUsers)-> users = _.map activeUsers, (user)-> diff --git a/app/assets/javascripts/backbone/plugins/music_player.js.coffee b/app/assets/javascripts/backbone/plugins/music_player.js.coffee index 5f503186..1b7a3058 100644 --- a/app/assets/javascripts/backbone/plugins/music_player.js.coffee +++ b/app/assets/javascripts/backbone/plugins/music_player.js.coffee @@ -63,15 +63,15 @@ class Kandan.Plugins.MusicPlayer @registerPlayModifier: ()-> - Kandan.Modifiers.register @playRegex, (message, state) => - url = $.trim(message.content.substr(message.content.indexOf(" ") + 1)); - if true and Kandan.Data.Channels.activeChannelId()? # and state == Kandan.Helpers.Activities.ACTIVE_STATE commented out because state == undefined for some reason + Kandan.Modifiers.register @playRegex, (message, activity) => + url = $.trim(message.substr(message.indexOf(" ") + 1)); + if true and Kandan.Data.Channels.activeChannelId()? rawInput = Kandan.Helpers.Utils.unescape(url) soundUrl = null soundUrl = @localSounds(rawInput) soundUrl ?= rawInput - @playUrl(message.channel_id, soundUrl) + @playUrl(activity.channel_id, soundUrl) else console.log "Not playing stale song" @@ -79,21 +79,21 @@ class Kandan.Plugins.MusicPlayer return Kandan.Helpers.Activities.buildFromBaseTemplate message @registerStopModifier: ()-> - Kandan.Modifiers.register @stopRegex, (message, state) => - url = $.trim(message.content.substr(message.content.indexOf(" ") + 1)); + Kandan.Modifiers.register @stopRegex, (message, activity) => + url = $.trim(message.substr(message.indexOf(" ") + 1)); if true and Kandan.Data.Channels.activeChannelId()? - @stopSound(message.channel_id) + @stopSound(activity.channel_id) - message.content = @stopTemplate() - return Kandan.Helpers.Activities.buildFromBaseTemplate message + message = @stopTemplate() + return message @registerResumeModifier: ()-> - Kandan.Modifiers.register @resumeRegex, (message, state) => + Kandan.Modifiers.register @resumeRegex, (message, activity) => if true and Kandan.Data.Channels.activeChannelId()? - @play(message.channel_id) + @play(activity.channel_id) - message.content = @resumeTemplate() - return Kandan.Helpers.Activities.buildFromBaseTemplate message + message = @resumeTemplate() + return message # TODO display error about song not being added by creating an activity locally diff --git a/app/assets/javascripts/backbone/plugins/pastie.js.coffee b/app/assets/javascripts/backbone/plugins/pastie.js.coffee index 2e4cdaa8..42884587 100644 --- a/app/assets/javascripts/backbone/plugins/pastie.js.coffee +++ b/app/assets/javascripts/backbone/plugins/pastie.js.coffee @@ -21,7 +21,7 @@ class Kandan.Plugins.Pastie @init: -> - Kandan.Modifiers.register @options.regex, (message, state) => - url = "/channels/#{message.channel_id}/activities/#{message.id}" - message.content = @options.template({preview: @truncate(message.content), messageLink: url}) - return Kandan.Helpers.Activities.buildFromMessageTemplate(message) + Kandan.Modifiers.register @options.regex, (message, activity) => + url = "/channels/#{activity.channel_id}/activities/#{activity.id}" + message = @options.template({preview: @truncate(message), messageLink: url}) + return message diff --git a/app/assets/javascripts/backbone/plugins/rgb_color_embed.js.coffee b/app/assets/javascripts/backbone/plugins/rgb_color_embed.js.coffee index 67629ddd..702102ee 100644 --- a/app/assets/javascripts/backbone/plugins/rgb_color_embed.js.coffee +++ b/app/assets/javascripts/backbone/plugins/rgb_color_embed.js.coffee @@ -5,10 +5,10 @@ class Kandan.Plugins.RgbColorEmbed template: _.template '''''' @init: ()-> - Kandan.Modifiers.register @options.regex, (message, state) => - for rgb in message.content.match(@options.regex) + Kandan.Modifiers.register @options.regex, (message, activity) => + for rgb in message.match(@options.regex) replacement = @options.template({rgb: rgb}) + rgb - message.content = message.content.replace(rgb, replacement) + message = message.replace(rgb, replacement) - return Kandan.Helpers.Activities.buildFromMessageTemplate(message) + return message diff --git a/app/assets/javascripts/backbone/plugins/vimeo_embed.js.coffee b/app/assets/javascripts/backbone/plugins/vimeo_embed.js.coffee index 587b87a5..a495a295 100644 --- a/app/assets/javascripts/backbone/plugins/vimeo_embed.js.coffee +++ b/app/assets/javascripts/backbone/plugins/vimeo_embed.js.coffee @@ -12,25 +12,25 @@ class Kandan.Plugins.VimeoEmbed @init: ()-> - Kandan.Modifiers.register @options.regex, (message, state) => + Kandan.Modifiers.register @options.regex, (message, activity) => comment = null # No spaces in message content indicates just a link - if message.content.indexOf(" ") == -1 - videoUrl = message.content + if message.indexOf(" ") == -1 + videoUrl = message else # Spaces indicate a subtitle - comment = $.trim(message.content.substr(message.content.indexOf(" ") + 1)); - videoUrl = message.content.split(" ")[0] + comment = $.trim(message.substr(message.indexOf(" ") + 1)); + videoUrl = message.split(" ")[0] - videoId = message.content.match(@options.regex)[2] + videoId = message.match(@options.regex)[2] subtitle = null subtitle = "Vimeo: #{comment}" if comment? and comment.length > 0 subtitle ||= videoUrl - message.content = @options.template({ + message = @options.template({ videoId: videoId, subtitle: subtitle }) - return Kandan.Helpers.Activities.buildFromMessageTemplate(message) + return message diff --git a/app/assets/javascripts/backbone/plugins/youtube_embed.js.coffee b/app/assets/javascripts/backbone/plugins/youtube_embed.js.coffee index b1418eeb..579011e9 100644 --- a/app/assets/javascripts/backbone/plugins/youtube_embed.js.coffee +++ b/app/assets/javascripts/backbone/plugins/youtube_embed.js.coffee @@ -1,7 +1,7 @@ class Kandan.Plugins.YouTubeEmbed @options: - regex: /^http(s)?.+www.youtube.com.+watch/i + regex: /http(s)?.+www.youtube.com.+watch/i idRegex: /\Wv=([\w|\-]*)/ template: _.template ''' @@ -16,24 +16,24 @@ class Kandan.Plugins.YouTubeEmbed @init: ()-> - Kandan.Modifiers.register @options.regex, (message, state) => + Kandan.Modifiers.register @options.regex, (message, activity) => comment = null # No spaces in message content indicates just a link - if message.content.indexOf(" ") == -1 - videoUrl = message.content + if message.indexOf(" ") == -1 + videoUrl = message else # Spaces indicate a subtitle - comment = $.trim(message.content.substr(message.content.indexOf(" ") + 1)); + comment = $.trim(message.substr(message.indexOf(" ") + 1)); - videoId = message.content.match(@options.idRegex)[1] + videoId = message.match(@options.idRegex)[1] subtitle = null - subtitle = "Youtube: #{comment}" if comment? and comment.length > 0 + subtitle = "#{comment}" if comment? and comment.length > 0 subtitle ||= videoUrl - message.content = @options.template({ + message = @options.template({ videoId: videoId, subtitle: subtitle }) - return Kandan.Helpers.Activities.buildFromMessageTemplate(message) + return message diff --git a/app/assets/javascripts/backbone/views/show_activity.js.coffee b/app/assets/javascripts/backbone/views/show_activity.js.coffee index 27e273c2..1c85b0e5 100644 --- a/app/assets/javascripts/backbone/views/show_activity.js.coffee +++ b/app/assets/javascripts/backbone/views/show_activity.js.coffee @@ -10,11 +10,9 @@ class Kandan.Views.ShowActivity extends Backbone.View if activity.action != "message" @compiledTemplate = JST['user_notification']({activity: activity}) else - modifiedMessage = Kandan.Modifiers.process(activity, @options.state) - if modifiedMessage != false - @compiledTemplate = modifiedMessage - else - @compiledTemplate = Kandan.Helpers.Activities.buildFromMessageTemplate activity + activity.content = Kandan.Modifiers.process(activity) + + @compiledTemplate = Kandan.Helpers.Activities.buildFromMessageTemplate activity $(@el).data("activity-id", activity.id) if activity.action == "message"