Skip to content

Commit

Permalink
Implementation of plugin chaining.
Browse files Browse the repository at this point in the history
- Process modifiers now passes the activity and a message that can be modified as modifiers are applied to.
  • Loading branch information
gabceb committed Mar 15, 2013
1 parent ff6530a commit 883f927
Show file tree
Hide file tree
Showing 14 changed files with 73 additions and 75 deletions.
2 changes: 1 addition & 1 deletion app/assets/javascripts/backbone/kandan.js.coffee
Expand Up @@ -24,14 +24,14 @@ window.Kandan =
registerPlugins: ->
plugins = [
"UserList"
,"Pastie"
,"Mentions"
,"Notifications"
,"MusicPlayer"
,"YouTubeEmbed"
,"VimeoEmbed"
,"ImageEmbed"
,"LinkEmbed"
,"Pastie"
,"Attachments"
,"MeAnnounce"
,"Emoticons"
Expand Down
11 changes: 6 additions & 5 deletions app/assets/javascripts/backbone/modifiers.js.coffee
Expand Up @@ -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
if message.match(modifier.regex) != null
message = modifier.callback(message, activity)

return message
8 changes: 4 additions & 4 deletions app/assets/javascripts/backbone/plugins/emoticons.js.coffee
Expand Up @@ -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
Expand Up @@ -5,9 +5,9 @@ class Kandan.Plugins.HexColorEmbed
template: _.template '''<span class="color-preview" style="background-color:<%= hex %>;"/>'''

@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
10 changes: 5 additions & 5 deletions app/assets/javascripts/backbone/plugins/image_embed.js.coffee
Expand Up @@ -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
9 changes: 4 additions & 5 deletions 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, '<a target="_blank" href="$1">$1</a>')
return Kandan.Helpers.Activities.buildFromMessageTemplate(message)
Kandan.Modifiers.register @options.regex, (message, activity)=>
message = message.replace(@options.regex, '<a target="_blank" href="$2">$2</a>')
return message
8 changes: 4 additions & 4 deletions app/assets/javascripts/backbone/plugins/me_announce.js.coffee
Expand Up @@ -4,7 +4,7 @@ class Kandan.Plugins.MeAnnounce
regex: /^&#x2F;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
8 changes: 4 additions & 4 deletions app/assets/javascripts/backbone/plugins/mentions.coffee
Expand Up @@ -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)->
Expand Down
26 changes: 13 additions & 13 deletions app/assets/javascripts/backbone/plugins/music_player.js.coffee
Expand Up @@ -63,37 +63,37 @@ 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"

message.content = @playTemplate({url: url})
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
Expand Down
8 changes: 4 additions & 4 deletions app/assets/javascripts/backbone/plugins/pastie.js.coffee
Expand Up @@ -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
Expand Up @@ -5,10 +5,10 @@ class Kandan.Plugins.RgbColorEmbed
template: _.template '''<span class="color-preview" style="background-color:<%= rgb %>;"/>'''

@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

16 changes: 8 additions & 8 deletions app/assets/javascripts/backbone/plugins/vimeo_embed.js.coffee
Expand Up @@ -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
18 changes: 9 additions & 9 deletions 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 '''
Expand All @@ -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
8 changes: 3 additions & 5 deletions app/assets/javascripts/backbone/views/show_activity.js.coffee
Expand Up @@ -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"
Expand Down

0 comments on commit 883f927

Please sign in to comment.