Skip to content

Commit 883f927

Browse files
committed
Implementation of plugin chaining.
- Process modifiers now passes the activity and a message that can be modified as modifiers are applied to.
1 parent ff6530a commit 883f927

14 files changed

+73
-75
lines changed

app/assets/javascripts/backbone/kandan.js.coffee

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ window.Kandan =
2424
registerPlugins: ->
2525
plugins = [
2626
"UserList"
27+
,"Pastie"
2728
,"Mentions"
2829
,"Notifications"
2930
,"MusicPlayer"
3031
,"YouTubeEmbed"
3132
,"VimeoEmbed"
3233
,"ImageEmbed"
3334
,"LinkEmbed"
34-
,"Pastie"
3535
,"Attachments"
3636
,"MeAnnounce"
3737
,"Emoticons"

app/assets/javascripts/backbone/modifiers.js.coffee

+6-5
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ class Kandan.Modifiers
77
@all: ()->
88
@modifiers
99

10-
@process: (message, state)->
10+
@process: (activity)->
11+
message = activity.content
1112
for modifier in @modifiers
12-
if message.content.match(modifier.regex)!=null
13-
modified_object = modifier.callback(message, state)
14-
return modified_object if modified_object != false
15-
false
13+
if message.match(modifier.regex) != null
14+
message = modifier.callback(message, activity)
15+
16+
return message

app/assets/javascripts/backbone/plugins/emoticons.js.coffee

+4-4
Original file line numberDiff line numberDiff line change
@@ -906,13 +906,13 @@ class Kandan.Plugins.Emoticons
906906
}
907907

908908
@init: ()->
909-
Kandan.Modifiers.register @options.regex, (message, state) =>
910-
matches = message.content.match(@options.regex)
909+
Kandan.Modifiers.register @options.regex, (message, activity) =>
910+
matches = message.match(@options.regex)
911911
for match in _.unique(matches)
912912
match = match.trim();
913913
emoticon = @emoticons[match]
914914

915915
if emoticon
916-
message.content = message.content.replace(match, @options.template(emoticon))
916+
message = message.replace(match, @options.template(emoticon))
917917

918-
return Kandan.Helpers.Activities.buildFromMessageTemplate(message)
918+
return message

app/assets/javascripts/backbone/plugins/hex_color_embed.js.coffee

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ class Kandan.Plugins.HexColorEmbed
55
template: _.template '''<span class="color-preview" style="background-color:<%= hex %>;"/>'''
66

77
@init: ()->
8-
Kandan.Modifiers.register @options.regex, (message, state) =>
9-
for hex in message.content.match(@options.regex)
8+
Kandan.Modifiers.register @options.regex, (message, activity) =>
9+
for hex in message.match(@options.regex)
1010
replacement = @options.template({hex: hex}) + hex
11-
message.content = message.content.replace(hex, replacement)
11+
message = message.replace(hex, replacement)
1212

13-
return Kandan.Helpers.Activities.buildFromMessageTemplate(message)
13+
return message

app/assets/javascripts/backbone/plugins/image_embed.js.coffee

+5-5
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@ class Kandan.Plugins.ImageEmbed
1313

1414

1515
@init: ()->
16-
Kandan.Modifiers.register @options.regex, (message, state) =>
17-
url = message.content.match(@options.regex)[0]
16+
Kandan.Modifiers.register @options.regex, (message, activity) =>
17+
url = message.match(@options.regex)[0]
1818
fileName = url.split("/").pop()
19-
comment = $.trim(message.content.split(url).join(""))
19+
comment = $.trim(message.split(url).join(""))
2020
subtitle = null
2121
subtitle = comment if comment.length > 0
2222
subtitle ||= fileName
2323

24-
message.content = @options.template({
24+
message = @options.template({
2525
imageUrl: url,
2626
subtitle: subtitle
2727
})
2828

29-
return Kandan.Helpers.Activities.buildFromMessageTemplate(message)
29+
return message
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
class Kandan.Plugins.LinkEmbed
22

33
@options:
4-
regex: /(http?\S*)/g
4+
regex: /(^| )(http?\S*)/g
55

66
@init: ()->
7-
Kandan.Modifiers.register @options.regex, (message, state)=>
8-
message.content = message.content
9-
.replace(@options.regex, '<a target="_blank" href="$1">$1</a>')
10-
return Kandan.Helpers.Activities.buildFromMessageTemplate(message)
7+
Kandan.Modifiers.register @options.regex, (message, activity)=>
8+
message = message.replace(@options.regex, '<a target="_blank" href="$2">$2</a>')
9+
return message

app/assets/javascripts/backbone/plugins/me_announce.js.coffee

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ class Kandan.Plugins.MeAnnounce
44
regex: /^&#x2F;me /
55

66
@init: ()->
7-
Kandan.Modifiers.register @options.regex, (message, state) =>
8-
actor = message.user.username || message.user.email
9-
message.content = message.content.replace @options.regex, "#{actor} "
10-
return Kandan.Helpers.Activities.buildFromBaseTemplate(message)
7+
Kandan.Modifiers.register @options.regex, (message, activity) =>
8+
actor = activity.user.username || activity.user.email
9+
message = message.replace @options.regex, "#{actor} "
10+
return message

app/assets/javascripts/backbone/plugins/mentions.coffee

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ class Kandan.Plugins.Mentions
1010
Kandan.Data.ActiveUsers.registerCallback "change", (data)=>
1111
@initUsersMentions(data.extra.active_users)
1212

13-
Kandan.Modifiers.register @options.regex, (message, state) =>
14-
for mention in message.content.match(@options.regex)
13+
Kandan.Modifiers.register @options.regex, (message, activity) =>
14+
for mention in message.match(@options.regex)
1515
replacement = @options.template({mention: mention})
16-
message.content = message.content.replace(mention, replacement)
16+
message = message.replace(mention, replacement)
1717

18-
return Kandan.Helpers.Activities.buildFromMessageTemplate(message)
18+
return message
1919

2020
@initUsersMentions: (activeUsers)->
2121
users = _.map activeUsers, (user)->

app/assets/javascripts/backbone/plugins/music_player.js.coffee

+13-13
Original file line numberDiff line numberDiff line change
@@ -63,37 +63,37 @@ class Kandan.Plugins.MusicPlayer
6363

6464

6565
@registerPlayModifier: ()->
66-
Kandan.Modifiers.register @playRegex, (message, state) =>
67-
url = $.trim(message.content.substr(message.content.indexOf(" ") + 1));
68-
if true and Kandan.Data.Channels.activeChannelId()? # and state == Kandan.Helpers.Activities.ACTIVE_STATE commented out because state == undefined for some reason
66+
Kandan.Modifiers.register @playRegex, (message, activity) =>
67+
url = $.trim(message.substr(message.indexOf(" ") + 1));
68+
if true and Kandan.Data.Channels.activeChannelId()?
6969
rawInput = Kandan.Helpers.Utils.unescape(url)
7070
soundUrl = null
7171
soundUrl = @localSounds(rawInput)
7272
soundUrl ?= rawInput
7373

74-
@playUrl(message.channel_id, soundUrl)
74+
@playUrl(activity.channel_id, soundUrl)
7575
else
7676
console.log "Not playing stale song"
7777

7878
message.content = @playTemplate({url: url})
7979
return Kandan.Helpers.Activities.buildFromBaseTemplate message
8080

8181
@registerStopModifier: ()->
82-
Kandan.Modifiers.register @stopRegex, (message, state) =>
83-
url = $.trim(message.content.substr(message.content.indexOf(" ") + 1));
82+
Kandan.Modifiers.register @stopRegex, (message, activity) =>
83+
url = $.trim(message.substr(message.indexOf(" ") + 1));
8484
if true and Kandan.Data.Channels.activeChannelId()?
85-
@stopSound(message.channel_id)
85+
@stopSound(activity.channel_id)
8686

87-
message.content = @stopTemplate()
88-
return Kandan.Helpers.Activities.buildFromBaseTemplate message
87+
message = @stopTemplate()
88+
return message
8989

9090
@registerResumeModifier: ()->
91-
Kandan.Modifiers.register @resumeRegex, (message, state) =>
91+
Kandan.Modifiers.register @resumeRegex, (message, activity) =>
9292
if true and Kandan.Data.Channels.activeChannelId()?
93-
@play(message.channel_id)
93+
@play(activity.channel_id)
9494

95-
message.content = @resumeTemplate()
96-
return Kandan.Helpers.Activities.buildFromBaseTemplate message
95+
message = @resumeTemplate()
96+
return message
9797

9898

9999
# TODO display error about song not being added by creating an activity locally

app/assets/javascripts/backbone/plugins/pastie.js.coffee

+4-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ class Kandan.Plugins.Pastie
2121

2222

2323
@init: ->
24-
Kandan.Modifiers.register @options.regex, (message, state) =>
25-
url = "/channels/#{message.channel_id}/activities/#{message.id}"
26-
message.content = @options.template({preview: @truncate(message.content), messageLink: url})
27-
return Kandan.Helpers.Activities.buildFromMessageTemplate(message)
24+
Kandan.Modifiers.register @options.regex, (message, activity) =>
25+
url = "/channels/#{activity.channel_id}/activities/#{activity.id}"
26+
message = @options.template({preview: @truncate(message), messageLink: url})
27+
return message

app/assets/javascripts/backbone/plugins/rgb_color_embed.js.coffee

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ class Kandan.Plugins.RgbColorEmbed
55
template: _.template '''<span class="color-preview" style="background-color:<%= rgb %>;"/>'''
66

77
@init: ()->
8-
Kandan.Modifiers.register @options.regex, (message, state) =>
9-
for rgb in message.content.match(@options.regex)
8+
Kandan.Modifiers.register @options.regex, (message, activity) =>
9+
for rgb in message.match(@options.regex)
1010
replacement = @options.template({rgb: rgb}) + rgb
11-
message.content = message.content.replace(rgb, replacement)
11+
message = message.replace(rgb, replacement)
1212

13-
return Kandan.Helpers.Activities.buildFromMessageTemplate(message)
13+
return message
1414

app/assets/javascripts/backbone/plugins/vimeo_embed.js.coffee

+8-8
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,25 @@ class Kandan.Plugins.VimeoEmbed
1212

1313

1414
@init: ()->
15-
Kandan.Modifiers.register @options.regex, (message, state) =>
15+
Kandan.Modifiers.register @options.regex, (message, activity) =>
1616
comment = null
1717

1818
# No spaces in message content indicates just a link
19-
if message.content.indexOf(" ") == -1
20-
videoUrl = message.content
19+
if message.indexOf(" ") == -1
20+
videoUrl = message
2121
else
2222
# Spaces indicate a subtitle
23-
comment = $.trim(message.content.substr(message.content.indexOf(" ") + 1));
24-
videoUrl = message.content.split(" ")[0]
23+
comment = $.trim(message.substr(message.indexOf(" ") + 1));
24+
videoUrl = message.split(" ")[0]
2525

26-
videoId = message.content.match(@options.regex)[2]
26+
videoId = message.match(@options.regex)[2]
2727

2828
subtitle = null
2929
subtitle = "Vimeo: #{comment}" if comment? and comment.length > 0
3030
subtitle ||= videoUrl
3131

32-
message.content = @options.template({
32+
message = @options.template({
3333
videoId: videoId,
3434
subtitle: subtitle
3535
})
36-
return Kandan.Helpers.Activities.buildFromMessageTemplate(message)
36+
return message
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class Kandan.Plugins.YouTubeEmbed
22

33
@options:
4-
regex: /^http(s)?.+www.youtube.com.+watch/i
4+
regex: /http(s)?.+www.youtube.com.+watch/i
55
idRegex: /\Wv=([\w|\-]*)/
66

77
template: _.template '''
@@ -16,24 +16,24 @@ class Kandan.Plugins.YouTubeEmbed
1616

1717

1818
@init: ()->
19-
Kandan.Modifiers.register @options.regex, (message, state) =>
19+
Kandan.Modifiers.register @options.regex, (message, activity) =>
2020
comment = null
2121

2222
# No spaces in message content indicates just a link
23-
if message.content.indexOf(" ") == -1
24-
videoUrl = message.content
23+
if message.indexOf(" ") == -1
24+
videoUrl = message
2525
else
2626
# Spaces indicate a subtitle
27-
comment = $.trim(message.content.substr(message.content.indexOf(" ") + 1));
27+
comment = $.trim(message.substr(message.indexOf(" ") + 1));
2828

29-
videoId = message.content.match(@options.idRegex)[1]
29+
videoId = message.match(@options.idRegex)[1]
3030

3131
subtitle = null
32-
subtitle = "Youtube: #{comment}" if comment? and comment.length > 0
32+
subtitle = "#{comment}" if comment? and comment.length > 0
3333
subtitle ||= videoUrl
3434

35-
message.content = @options.template({
35+
message = @options.template({
3636
videoId: videoId,
3737
subtitle: subtitle
3838
})
39-
return Kandan.Helpers.Activities.buildFromMessageTemplate(message)
39+
return message

app/assets/javascripts/backbone/views/show_activity.js.coffee

+3-5
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,9 @@ class Kandan.Views.ShowActivity extends Backbone.View
1010
if activity.action != "message"
1111
@compiledTemplate = JST['user_notification']({activity: activity})
1212
else
13-
modifiedMessage = Kandan.Modifiers.process(activity, @options.state)
14-
if modifiedMessage != false
15-
@compiledTemplate = modifiedMessage
16-
else
17-
@compiledTemplate = Kandan.Helpers.Activities.buildFromMessageTemplate activity
13+
activity.content = Kandan.Modifiers.process(activity)
14+
15+
@compiledTemplate = Kandan.Helpers.Activities.buildFromMessageTemplate activity
1816

1917
$(@el).data("activity-id", activity.id)
2018
if activity.action == "message"

0 commit comments

Comments
 (0)