diff --git a/app/assets/javascripts/backbone/helpers/channels.js.coffee b/app/assets/javascripts/backbone/helpers/channels.js.coffee index 42f4ed03..b5637ad5 100644 --- a/app/assets/javascripts/backbone/helpers/channels.js.coffee +++ b/app/assets/javascripts/backbone/helpers/channels.js.coffee @@ -12,7 +12,7 @@ class Kandan.Helpers.Channels .data('channel_id') @selected_tab: ()-> - $('#channels').tabs('option', 'selected') + $('#channels').tabs('option', 'selected') @get_active_channel_id: ()-> if $(document).data('active_channel_id') == undefined @@ -23,6 +23,18 @@ class Kandan.Helpers.Channels return $(document).data('active_channel_id') + @channel_not_exists: (channel_id)-> + $("#channels-#{channel_id}").length == 0 + + @create_channel_area: (channel)-> + console.log channel + channel_area = "#channels-#{channel.id}" + $("#channels").tabs('add', channel_area, channel.name) + channel = new Kandan.Models.Channel(channel) + view = new Kandan.Views.ListActivities({channel: channel}) + $(channel_area).html $(view.render().el).html() + + @new_activity_view: (activity_attributes)-> activity = new Kandan.Models.Activity(activity_attributes) activity_view = new Kandan.Views.ShowActivity({activity: activity}) @@ -30,6 +42,9 @@ class Kandan.Helpers.Channels @add_activity: (activity_attributes, state)-> + if activity_attributes.channel!=undefined && @channel_not_exists(activity_attributes.channel_id) + @create_channel_area(activity_attributes.channel) + if activity_attributes.channel_id @add_message(activity_attributes, state) else @@ -44,6 +59,7 @@ class Kandan.Helpers.Channels @add_notification: (activity_attributes)-> $channel_elements = $(".channel-activities") + activity_attributes["created_at"] = new Date() for el in $channel_elements $(el).append(@new_activity_view(activity_attributes).render().el) @@ -51,15 +67,12 @@ class Kandan.Helpers.Channels @set_pagination_state: (channel_id, more_activities, oldest)-> @channel_pagination_el(channel_id).data('oldest', oldest) if more_activities == true - console.log "show pagination" @channel_pagination_el(channel_id).show() else - console.log "hide pagination" @channel_pagination_el(channel_id).hide() @set_pagination_data: (channel_id)-> $oldest_activity = @channel_activities_el(channel_id).find(".activity").first() if $oldest_activity.length != 0 - console.log "oldest activity id", $oldest_activity.data('activity_id') @channel_pagination_el(channel_id).data('oldest', $oldest_activity.data('activity_id')) diff --git a/app/assets/javascripts/backbone/helpers/utils.js.coffee b/app/assets/javascripts/backbone/helpers/utils.js.coffee new file mode 100644 index 00000000..a6135b26 --- /dev/null +++ b/app/assets/javascripts/backbone/helpers/utils.js.coffee @@ -0,0 +1,13 @@ +class Kandan.Helpers.Utils + + @time_to_string: (time) -> + return time if (typeof time != "object") + am = time.getHours() < 12 + hours = time.getHours() + ampm = "AM" if am == true + if am != true + ampm = "PM" + hours = hours - 12 if hours != 12 + minutes = time.getMinutes().toString() + minutes = "0#{minutes}" if minutes.length == 1 + return "#{ time.getFullYear() }-#{ time.getMonth() + 1 }-#{ time.getDate() } #{ hours }:#{ minutes }#{ ampm }" diff --git a/app/assets/javascripts/backbone/kandan.js.coffee b/app/assets/javascripts/backbone/kandan.js.coffee index 68ea41a0..8152fdf6 100644 --- a/app/assets/javascripts/backbone/kandan.js.coffee +++ b/app/assets/javascripts/backbone/kandan.js.coffee @@ -21,15 +21,15 @@ window.Kandan = channels.fetch({success: ()=> chat_area = new Kandan.Views.ChatArea({channels: channels}) - + create_channel = new Kandan.Views.CreateChannel() + $(".create_channel").html create_channel.render().el # TODO move broadcast subscription to a helper # TODO change this to use the broadcaster from the settings # TODO set as global to debug. remove later. # TODO use wildcard channel names window.broadcaster = new Kandan.Broadcasters.FayeBroadcaster() - for channel in channels.models - window.broadcaster.subscribe "/channels/#{channel.get('id')}" + window.broadcaster.subscribe "/channels/*" ##{channel.get('id')} $(document).bind 'changeData', (element, name, value)-> if(name=="active_users") @@ -45,6 +45,7 @@ window.Kandan = # NOTE init plugins so that modifiers are registered Kandan.Plugins.init_all() + $(".container").html(chat_area.render().el) chatbox = new Kandan.Views.Chatbox() $(".container").append(chatbox.render().el) diff --git a/app/assets/javascripts/backbone/models/channel.js.coffee b/app/assets/javascripts/backbone/models/channel.js.coffee index 2d83cc2b..22406afa 100644 --- a/app/assets/javascripts/backbone/models/channel.js.coffee +++ b/app/assets/javascripts/backbone/models/channel.js.coffee @@ -5,9 +5,10 @@ class Kandan.Models.Channel extends Backbone.Model # console.log @activities parse: (response)-> - activities = new Kandan.Collections.Activities([], {channel_id: response.id}) - activities.add(response.activities) - @activities = activities - @more_activities = response.more_activities - + @more_activities = false + if response.activities + activities = new Kandan.Collections.Activities([], {channel_id: response.id}) + activities.add(response.activities) + @activities = activities + @more_activities = response.more_activities response \ No newline at end of file diff --git a/app/assets/javascripts/backbone/plugins/attachments.js.coffee b/app/assets/javascripts/backbone/plugins/attachments.js.coffee index c1e75f53..372b334c 100644 --- a/app/assets/javascripts/backbone/plugins/attachments.js.coffee +++ b/app/assets/javascripts/backbone/plugins/attachments.js.coffee @@ -28,7 +28,6 @@ class Kandan.Plugins.Attachments # TODO this part is very bad for APIs! shoudnt be exposing a backbone collection in a plugin. @render: ($widget_el)-> - console.log "current channel", @channel_id() $upload_form = @template({ channel_id: @channel_id(), csrf_param: @csrf_param(), @@ -51,7 +50,6 @@ class Kandan.Plugins.Attachments @init: ()-> Kandan.Widgets.register @widget_name, @plugin_namespace Kandan.Data.Channels.register_callback "change", ()=> - console.log "channel changed" Kandan.Widgets.render(@widget_name) diff --git a/app/assets/javascripts/backbone/views/chatbox.js.coffee b/app/assets/javascripts/backbone/views/chatbox.js.coffee index ed4ef840..7c2721b6 100644 --- a/app/assets/javascripts/backbone/views/chatbox.js.coffee +++ b/app/assets/javascripts/backbone/views/chatbox.js.coffee @@ -11,6 +11,7 @@ class Kandan.Views.Chatbox extends Backbone.View if event.keyCode== 13 $chatbox = $(".chatbox") + console.log "post channel", Kandan.Helpers.Channels.get_active_channel_id() activity = new Kandan.Models.Activity({ 'content': $chatbox.val(), @@ -22,7 +23,6 @@ class Kandan.Views.Chatbox extends Backbone.View console.log "posted! enjoy your day" }) - render: ()-> $(@el).html(@template()) @ diff --git a/app/assets/javascripts/backbone/views/create_channel.js.coffee b/app/assets/javascripts/backbone/views/create_channel.js.coffee new file mode 100644 index 00000000..812c34c7 --- /dev/null +++ b/app/assets/javascripts/backbone/views/create_channel.js.coffee @@ -0,0 +1,27 @@ +class Kandan.Views.CreateChannel extends Backbone.View + + template: _.template ''' + + + ''' + + events: + "click button": "create_channel" + + render: ()-> + $(@el).html(@template()) + @ + + create_channel: (event)-> + # TODO check for valid values + channel_name = $(".new_channel").val() + channel = new Kandan.Models.Channel({name: channel_name}) + channel.save({}, { + success: (model)=> + channel_area = "#channels-#{model.get('id')}" + $("#channels").tabs('add', channel_area, model.get('name')) + view = new Kandan.Views.ListActivities({channel: model}) + + $(channel_area).html($(view.render().el).html()) + $(channel_area).data('channel_id', model.get('id')) + }) diff --git a/app/assets/javascripts/backbone/views/list_activities.js.coffee b/app/assets/javascripts/backbone/views/list_activities.js.coffee index aba6a459..ff2473f6 100644 --- a/app/assets/javascripts/backbone/views/list_activities.js.coffee +++ b/app/assets/javascripts/backbone/views/list_activities.js.coffee @@ -9,17 +9,20 @@ class Kandan.Views.ListActivities extends Backbone.View render: ()-> @channel = @options.channel $activities_list = $("
").attr('id', "channel-activities-#{@channel.get('id')}") - for activity in @channel.activities.models - activity_view = new Kandan.Views.ShowActivity({activity: activity, state: Kandan.Helpers.Activities.HISTORY_STATE}) - $activities_list.append(activity_view.render().el) + oldest = 0 + + if @channel.activities + console.log "channel has activities" + for activity in @channel.activities.models + activity_view = new Kandan.Views.ShowActivity({activity: activity, state: Kandan.Helpers.Activities.HISTORY_STATE}) + $activities_list.append(activity_view.render().el) + oldest = @channel.activities.toJSON()[0].id if @channel.activities.toJSON()[0] $pagination = $("") - oldest = 0 - oldest = @channel.activities.toJSON()[0].id if @channel.activities.toJSON()[0] $pagination.data('oldest', oldest) $(@el).append($pagination) - $(@el).find(".pagination").hide() if @channel.more_activities == false + $(@el).find(".pagination").hide() if @channel.more_activities != true $(@el).append($activities_list) $(@el).attr('id', "channels-#{@channel.get('id')}") $(@el).data('channel_id', @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 2e2dcb8f..9ab483c9 100644 --- a/app/assets/javascripts/backbone/views/show_activity.js.coffee +++ b/app/assets/javascripts/backbone/views/show_activity.js.coffee @@ -3,9 +3,9 @@ class Kandan.Views.ShowActivity extends Backbone.View tagName: 'p' className: 'activity' - render: ()-> activity = @options.activity.toJSON() + activity.created_at = Kandan.Helpers.Utils.time_to_string(new Date(activity.created_at)) if activity.action != "message" @compiled_template = JST['user_notification']({activity: activity}) else diff --git a/app/assets/templates/activity_base.jst.eco b/app/assets/templates/activity_base.jst.eco index 1c03e0ee..771d3d54 100644 --- a/app/assets/templates/activity_base.jst.eco +++ b/app/assets/templates/activity_base.jst.eco @@ -1 +1 @@ -<%- @activity.content %> \ No newline at end of file +<%= activity.created_at %>: <%- @activity.content %> \ No newline at end of file diff --git a/app/assets/templates/message.jst.eco b/app/assets/templates/message.jst.eco index 51fd296b..682b0a85 100644 --- a/app/assets/templates/message.jst.eco +++ b/app/assets/templates/message.jst.eco @@ -1 +1 @@ -<%= @activity.user.first_name %>: <%- @activity.content %> \ No newline at end of file +<%= @activity.user.first_name %> (<%= @activity.created_at %>): <%- @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 201836cc..126f0767 100644 --- a/app/assets/templates/user_notification.jst.eco +++ b/app/assets/templates/user_notification.jst.eco @@ -1 +1 @@ -<%= @activity.user.first_name %> <%= @activity.action %>ed <%= @activity.content %> \ No newline at end of file +<%= @activity.created_at %>: <%= @activity.user.first_name %> <%= @activity.action %>ed <%= @activity.content %> \ No newline at end of file diff --git a/app/models/activity_observer.rb b/app/models/activity_observer.rb index bdfcdacb..4ce00018 100644 --- a/app/models/activity_observer.rb +++ b/app/models/activity_observer.rb @@ -3,7 +3,10 @@ class ActivityObserver < ActiveRecord::Observer def after_save(activity) if activity.action == "message" || activity.action == "upload" faye_channel = "/channels/#{activity.channel.to_param}" - broadcast_data = activity.attributes.merge({:user => activity.user.attributes}) + broadcast_data = activity.attributes.merge({ + :user => activity.user.attributes, + :channel => activity.channel.attributes + }) Kandan::Config.broadcaster.broadcast(faye_channel, broadcast_data) end end diff --git a/app/models/attachment.rb b/app/models/attachment.rb index c16fbfa1..a1c33aaf 100644 --- a/app/models/attachment.rb +++ b/app/models/attachment.rb @@ -8,8 +8,8 @@ class Attachment < ActiveRecord::Base :storage => :s3, :s3_credentials => { :access_key_id => ENV['S3_ACCESS_KEY_ID'], - :secret_access_key => ENV['S3_SECRET_ACCESS_KEY'], - :session_token => ENV['STS_SESSION_TOKEN'] + :secret_access_key => ENV['S3_SECRET_ACCESS_KEY']#, + #:session_token => ENV['STS_SESSION_TOKEN'] }, :bucket => ENV['S3_BUCKET'], :url => "/:attachment/:id/:style/:basename.:extension", diff --git a/app/views/main/index.html.erb b/app/views/main/index.html.erb index 3007b96f..bb63552b 100644 --- a/app/views/main/index.html.erb +++ b/app/views/main/index.html.erb @@ -4,5 +4,7 @@ }) <%- end %> +
+