Skip to content

Commit

Permalink
Channel creation and minor fixes
Browse files Browse the repository at this point in the history
Signed-off-by: Akash Manohar J <akash@akash.im>
  • Loading branch information
HashNuke committed Mar 20, 2012
1 parent d5e2f4d commit d14f9eb
Show file tree
Hide file tree
Showing 15 changed files with 89 additions and 28 deletions.
21 changes: 17 additions & 4 deletions app/assets/javascripts/backbone/helpers/channels.js.coffee
Expand Up @@ -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
Expand All @@ -23,13 +23,28 @@ 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})
return activity_view


@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
Expand All @@ -44,22 +59,20 @@ 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)


@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'))
13 changes: 13 additions & 0 deletions 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 }"
7 changes: 4 additions & 3 deletions app/assets/javascripts/backbone/kandan.js.coffee
Expand Up @@ -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")
Expand All @@ -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)
Expand Down
11 changes: 6 additions & 5 deletions app/assets/javascripts/backbone/models/channel.js.coffee
Expand Up @@ -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
2 changes: 0 additions & 2 deletions app/assets/javascripts/backbone/plugins/attachments.js.coffee
Expand Up @@ -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(),
Expand All @@ -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)


Expand Down
2 changes: 1 addition & 1 deletion app/assets/javascripts/backbone/views/chatbox.js.coffee
Expand Up @@ -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(),
Expand All @@ -22,7 +23,6 @@ class Kandan.Views.Chatbox extends Backbone.View
console.log "posted! enjoy your day"
})


render: ()->
$(@el).html(@template())
@
27 changes: 27 additions & 0 deletions app/assets/javascripts/backbone/views/create_channel.js.coffee
@@ -0,0 +1,27 @@
class Kandan.Views.CreateChannel extends Backbone.View

template: _.template '''
<input class="new_channel" type="text"/>
<button>create</button>
'''

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'))
})
15 changes: 9 additions & 6 deletions app/assets/javascripts/backbone/views/list_activities.js.coffee
Expand Up @@ -9,17 +9,20 @@ class Kandan.Views.ListActivities extends Backbone.View
render: ()->
@channel = @options.channel
$activities_list = $("<div class='channel-activities'></div>").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 = $("<div class='pagination'>previous messages</div>")
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'))
Expand Down
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion app/assets/templates/activity_base.jst.eco
@@ -1 +1 @@
<%- @activity.content %>
<%= activity.created_at %>: <%- @activity.content %>
2 changes: 1 addition & 1 deletion app/assets/templates/message.jst.eco
@@ -1 +1 @@
<%= @activity.user.first_name %>: <%- @activity.content %>
<%= @activity.user.first_name %> (<%= @activity.created_at %>): <%- @activity.content %>
2 changes: 1 addition & 1 deletion app/assets/templates/user_notification.jst.eco
@@ -1 +1 @@
<%= @activity.user.first_name %> <%= @activity.action %>ed <%= @activity.content %>
<%= @activity.created_at %>: <%= @activity.user.first_name %> <%= @activity.action %>ed <%= @activity.content %>
5 changes: 4 additions & 1 deletion app/models/activity_observer.rb
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions app/models/attachment.rb
Expand Up @@ -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",
Expand Down
2 changes: 2 additions & 0 deletions app/views/main/index.html.erb
Expand Up @@ -4,5 +4,7 @@
})
<%- end %>

<div class="create_channel"></div>

<div class="container"></div>
<div class="sidebar"></div>

0 comments on commit d14f9eb

Please sign in to comment.