diff --git a/app/assets/javascripts/backbone/broadcasters/faye.js.coffee b/app/assets/javascripts/backbone/broadcasters/faye.js.coffee index 1807cdd4..0497fe33 100644 --- a/app/assets/javascripts/backbone/broadcasters/faye.js.coffee +++ b/app/assets/javascripts/backbone/broadcasters/faye.js.coffee @@ -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] diff --git a/app/assets/javascripts/backbone/helpers/activities.js.coffee b/app/assets/javascripts/backbone/helpers/activities.js.coffee new file mode 100644 index 00000000..b211b0d4 --- /dev/null +++ b/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}) \ No newline at end of file diff --git a/app/assets/javascripts/backbone/helpers/channels.js.coffee b/app/assets/javascripts/backbone/helpers/channels.js.coffee index 036ff4d7..6c699a8c 100644 --- a/app/assets/javascripts/backbone/helpers/channels.js.coffee +++ b/app/assets/javascripts/backbone/helpers/channels.js.coffee @@ -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) \ No newline at end of file + @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) \ No newline at end of file diff --git a/app/assets/javascripts/backbone/modifiers.js.coffee b/app/assets/javascripts/backbone/modifiers.js.coffee index 5c9eea18..8a6e9473 100644 --- a/app/assets/javascripts/backbone/modifiers.js.coffee +++ b/app/assets/javascripts/backbone/modifiers.js.coffee @@ -5,4 +5,13 @@ class Kandan.Modifiers @modifiers.push({regex: regex, callback: callback}) @all: ()-> - @modifiers \ No newline at end of file + @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 \ No newline at end of file diff --git a/app/assets/javascripts/backbone/plugins/link.js.coffee b/app/assets/javascripts/backbone/plugins/link.js.coffee new file mode 100644 index 00000000..ecc72386 --- /dev/null +++ b/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, '$1' + return Kandan.Helpers.Activities.build_from_message_template(message) + +Kandan.Plugins.register "Kandan.Plugins.Link" \ No newline at end of file diff --git a/app/assets/javascripts/backbone/plugins/me_announce.js.coffee b/app/assets/javascripts/backbone/plugins/me_announce.js.coffee new file mode 100644 index 00000000..405a8896 --- /dev/null +++ b/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" \ No newline at end of file diff --git a/app/assets/javascripts/backbone/views/list_activities.js.coffee b/app/assets/javascripts/backbone/views/list_activities.js.coffee index b41d31bd..5fe9e493 100644 --- a/app/assets/javascripts/backbone/views/list_activities.js.coffee +++ b/app/assets/javascripts/backbone/views/list_activities.js.coffee @@ -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')) diff --git a/app/assets/javascripts/backbone/views/show_activity.js.coffee b/app/assets/javascripts/backbone/views/show_activity.js.coffee index bd3bd85f..117bce2b 100644 --- a/app/assets/javascripts/backbone/views/show_activity.js.coffee +++ b/app/assets/javascripts/backbone/views/show_activity.js.coffee @@ -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) @ \ No newline at end of file diff --git a/app/assets/templates/activity_base.jst.eco b/app/assets/templates/activity_base.jst.eco new file mode 100644 index 00000000..e14fa0bc --- /dev/null +++ b/app/assets/templates/activity_base.jst.eco @@ -0,0 +1 @@ +<%= @activity.content %> \ No newline at end of file diff --git a/app/assets/templates/message.jst.eco b/app/assets/templates/message.jst.eco new file mode 100644 index 00000000..6d90c9fd --- /dev/null +++ b/app/assets/templates/message.jst.eco @@ -0,0 +1 @@ +<%= @activity.user.first_name %>: <%= @activity.content %> \ No newline at end of file diff --git a/app/assets/templates/user_notification.jst.eco b/app/assets/templates/user_notification.jst.eco index 2e13a00f..69e3a9eb 100644 --- a/app/assets/templates/user_notification.jst.eco +++ b/app/assets/templates/user_notification.jst.eco @@ -1 +1 @@ -<%= @activity.get('user').first_name %> <%= @activity.get('action') %> \ No newline at end of file +<%= @activity.user.first_name %> <%= @activity.action %> \ No newline at end of file diff --git a/app/models/user.rb b/app/models/user.rb index 29f68692..6ef55625 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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 diff --git a/lib/tasks/bushido.rake b/lib/tasks/bushido.rake new file mode 100644 index 00000000..4a5bca16 --- /dev/null +++ b/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