Skip to content

Commit

Permalink
Adds improvements and plugins
Browse files Browse the repository at this point in the history
* Adds /me plugin
* Adds link plugin
* Changes the way activities are rendered
* Cleans up the broadcaster
* Fixes modifier
* Adds template helpers
* Adds base and message templates for activities

Caveats:

Inline formatting doesnt work with history [fixing it]

Signed-off-by: Akash Manohar J <akash@akash.im>
  • Loading branch information
HashNuke committed Mar 14, 2012
1 parent cbb4f4f commit 75afafb
Show file tree
Hide file tree
Showing 13 changed files with 89 additions and 21 deletions.
2 changes: 0 additions & 2 deletions app/assets/javascripts/backbone/broadcasters/faye.js.coffee
Expand Up @@ -13,9 +13,7 @@ class Kandan.Broadcasters.FayeBroadcaster
}
@faye_client.addExtension(auth_extension)
@faye_client.subscribe "/app/activities", (data)=>
console.log "activities", data
$(document).data('active_users', data.data.active_users)
console.log "sets active users", $(document).data('active_users')
Kandan.Helpers.Channels.add_activity({
user: data.data.user,
action: data.event.split("#")[1]
Expand Down
11 changes: 11 additions & 0 deletions app/assets/javascripts/backbone/helpers/activities.js.coffee
@@ -0,0 +1,11 @@
class Kandan.Helpers.Activities

# TODO document this
@ACTIVE_STATE: "ACTIVE"
@HISTORY_STATE: "HISTORY"

@build_from_base_template: (activity)->
JST['activity_base']({activity: activity})

@build_from_message_template: (activity)->
JST['message']({activity: activity})
26 changes: 16 additions & 10 deletions app/assets/javascripts/backbone/helpers/channels.js.coffee
Expand Up @@ -11,16 +11,22 @@ class Kandan.Helpers.Channels
.eq(@selected_tab())
.data('channel_id')

# TODO refactor this
@add_activity: (activity_attributes)->
@new_activity_view: (activity_attributes)->
activity = new Kandan.Models.Activity(activity_attributes)
activity_view = new Kandan.Views.ShowActivity({activity: activity})
if activity.get('channel_id')
@channel_el(activity.get('channel_id'))
.append(activity_view.render().el)
return activity_view

@add_activity: (activity_attributes, state)->
if activity_attributes.channel_id
@add_message(activity_attributes, state)
else
$channel_elements = $("#channels .ui-tabs-panel")
for el in $channel_elements
activity = new Kandan.Models.Activity(activity_attributes)
activity_view = new Kandan.Views.ShowActivity({activity: activity})
$(el).append(activity_view.render().el)
@add_notification(activity_attributes)

@add_message: (activity_attributes, state)->
@channel_el(activity_attributes.channel_id)
.append(@new_activity_view(activity_attributes).render().el)

@add_notification: (activity_attributes)->
$channel_elements = $("#channels .ui-tabs-panel")
for el in $channel_elements
$(el).append(@new_activity_view(activity_attributes).render().el)
11 changes: 10 additions & 1 deletion app/assets/javascripts/backbone/modifiers.js.coffee
Expand Up @@ -5,4 +5,13 @@ class Kandan.Modifiers
@modifiers.push({regex: regex, callback: callback})

@all: ()->
@modifiers
@modifiers

@process: (message, state)->
for modifier in @modifiers
console.log "pre message", message.content
if message.content.match(modifier.regex)!=null
modified_object = modifier.callback(message, state)
console.log "modified", modified_object
return modified_object if modified_object != false
false
10 changes: 10 additions & 0 deletions app/assets/javascripts/backbone/plugins/link.js.coffee
@@ -0,0 +1,10 @@
class Kandan.Plugins.Link

@regex: /http:\S*/g

@init: ()->
Kandan.Modifiers.register @regex, (message, state)=>
message.content = message.content.replace @regex, '<a target="_blank" href="$1">$1</a>'
return Kandan.Helpers.Activities.build_from_message_template(message)

Kandan.Plugins.register "Kandan.Plugins.Link"
10 changes: 10 additions & 0 deletions app/assets/javascripts/backbone/plugins/me_announce.js.coffee
@@ -0,0 +1,10 @@
class Kandan.Plugins.MeAnnounce

@regex: /^\/me /

@init: ()->
Kandan.Modifiers.register @regex, (message, state)=>
message.content = message.content.replace @regex, "#{message.user.first_name} "
return Kandan.Helpers.Activities.build_from_base_template(message)

Kandan.Plugins.register "Kandan.Plugins.MeAnnounce"
Expand Up @@ -4,7 +4,7 @@ class Kandan.Views.ListActivities extends Backbone.View

render: ()->
for activity in @options.channel.activities.models
activity_view = new Kandan.Views.ShowActivity({activity: activity})
activity_view = new Kandan.Views.ShowActivity({activity: activity, state: Kandan.Helpers.Activities.HISTORY_STATE})
$(@el).append(activity_view.render().el)
$(@el).attr('id', "channels-#{@options.channel.get('id')}")
$(@el).data('channel_id', @options.channel.get('id'))
Expand Down
15 changes: 11 additions & 4 deletions app/assets/javascripts/backbone/views/show_activity.js.coffee
Expand Up @@ -3,11 +3,18 @@ class Kandan.Views.ShowActivity extends Backbone.View
tagName: 'p'
className: 'activity'


render: ()->
if @options.activity.get('action')=="message"
@template = JST['activity']
activity = @options.activity.toJSON()
if activity.action != "message"
@compiled_template = JST['user_notification']({activity: activity})
else
@template = JST['user_notification']
modifier = Kandan.Modifiers.process(activity, @options.state)
if modifier != false
@compiled_template = modifier
else
@compiled_template = Kandan.Helpers.Activities.build_from_message_template activity


$(@el).html(@template({activity: @options.activity}))
$(@el).html(@compiled_template)
@
1 change: 1 addition & 0 deletions app/assets/templates/activity_base.jst.eco
@@ -0,0 +1 @@
<%= @activity.content %>
1 change: 1 addition & 0 deletions app/assets/templates/message.jst.eco
@@ -0,0 +1 @@
<%= @activity.user.first_name %>: <%= @activity.content %>
2 changes: 1 addition & 1 deletion app/assets/templates/user_notification.jst.eco
@@ -1 +1 @@
<%= @activity.get('user').first_name %> <%= @activity.get('action') %>
<%= @activity.user.first_name %> <%= @activity.action %>
9 changes: 7 additions & 2 deletions app/models/user.rb
Expand Up @@ -5,10 +5,15 @@ class User < ActiveRecord::Base

# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable, :token_authenticatable,
:recoverable, :rememberable, :trackable, :validatable
devise :devise_authenticatable, :token_authenticatable, :trackable

# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :ido_id, :first_name, :last_name, :locale

def bushido_extra_attributes(extra_attributes)
self.first_name = extra_attributes["first_name"].to_s
self.last_name = extra_attributes["last_name"].to_s
self.email = extra_attributes["email"]
end

end
10 changes: 10 additions & 0 deletions lib/tasks/bushido.rake
@@ -0,0 +1,10 @@
namespace :bushido do
task :install => :environment do
channel = Channel.new :name => "Lobby"
if channel.save
puts "Created the default channel"
else
puts "Error creating the default channel"
end
end
end

0 comments on commit 75afafb

Please sign in to comment.