b933b434 |
Xmpp.Views.Chat ||= {}
class Xmpp.Views.Chat.WindowView extends Backbone.View
template: JST["backbone/templates/chat/window"]
el: $('#conversation-js') |
f7a4c553 |
inputSelector: 'input[type=text]' |
b933b434 |
|
10f4c7d2 |
maxHistoryLength: 20
|
424fd46f |
events:
'submit #msg-writer': (e) -> @sendMessage(e)
|
b933b434 |
initialize: () ->
_.bindAll(this)
@tab = @attributes['tab'] |
00f00dbe |
@historyStack = [] |
b933b434 |
render: -> |
bea5bc45 |
historyStackHtml = _.map(@historyStack, (view) ->
view.render().el.outerHTML
)
$(@el).html(@template(showWriter: true, history: historyStackHtml)) |
b933b434 |
@show()
return this
hide: ->
$(@el).addClass('hidden') |
00f00dbe |
@undelegateEvents() |
b933b434 |
this
show: ->
$(@el).removeClass('hidden') |
00f00dbe |
@delegateEvents() |
f7a4c553 |
$(@el).find(@inputSelector).focus() |
b933b434 |
this
remove: ->
@undelegateEvents()
$(@el).empty() |
00f00dbe |
@stopListening()
_.each(@historyStack, (item)->
item.remove()
)
return this |
424fd46f |
sendMessage: (e) ->
e.preventDefault()
$this = $(e.currentTarget) |
f7a4c553 |
input = $this.find(@inputSelector) |
b1c6b359 |
message = input.val() |
f7a4c553 |
input.val('').focus() |
424fd46f |
|
b1c6b359 |
if (message.trim())
chatId = @tab.getChatId() |
a7decc88 |
attendant = if not chatId then @tab.getAttendant().getPreferredResource() else null |
b1c6b359 |
App.Models.me.sendMessage(message, chatId, attendant |
00f00dbe |
, (message) => |
b7e1dd20 |
@sendSuccess(App.Models.me, message) |
b1c6b359 |
, (message) => |
00f00dbe |
@sendFail(message))
sendSuccess: (me, msg) ->
@appendMessage(me, new Date(), msg)
sendFail: ->
@appendEvent(I18n.t('chat.window.sendFailed'), false)
appendEvent: (msg, logMe) ->
App.debug ['append event', msg]
# @log(eventView) if logMe == true
appendMessage: (user, date, msg) -> |
14a337d8 |
messageView = new Xmpp.Views.Chat.MessageView(user: user, date: date, message: msg, fromMe: user.get('jid') == App.Models.me.get('jid')) |
3a34499e |
$(@el).find('.messages').append(messageView.render().el) |
bea5bc45 |
@log(messageView) |
14a337d8 |
Backbone.Events.trigger('resizeWorkspace') |
bea5bc45 |
log: (view) ->
if (@historyStack.length + 1 >= @maxHistoryLength)
@historyStack = @historyStack.slice(@historyStack.length - @maxHistoryLength + 1)
@historyStack.push(view) |