kaiwa/clientapp/views/main.js

83 lines
2.3 KiB
JavaScript

/*global $, app, me, client*/
"use strict";
var HumanView = require('human-view');
var templates = require('../templates');
var ContactListItem = require('../views/contactListItem');
var MUCListItem = require('../views/mucListItem');
var CallView = require('../views/call');
module.exports = HumanView.extend({
template: templates.body,
initialize: function () {
this.listenTo(app.state, 'change:title', this.handleTitle);
app.desktop.updateBadge('');
},
events: {
'click a[href]': 'handleLinkClick',
'click a.embed img': 'handleEmbedClick',
'click .reconnect': 'handleReconnect',
'click .logout': 'handleLogout',
'blur #me .status': 'handleStatusChange'
},
classBindings: {
connected: '#connectionOverlay',
hasActiveCall: '#wrapper'
},
render: function () {
$('head').append(templates.head());
$('body').removeClass('aux');
this.renderAndBind();
this.renderCollection(me.contacts, ContactListItem, this.$('#roster nav'));
this.renderCollection(me.mucs, MUCListItem, this.$('#bookmarks nav'));
this.registerBindings(me, {
textBindings: {
displayName: '#me .name',
status: '#me .status'
},
srcBindings: {
avatar: '#me .avatar'
}
});
return this;
},
handleReconnect: function (e) {
client.connect();
},
handleLinkClick: function (e) {
var t = $(e.target);
var aEl = t.is('a') ? t[0] : t.closest('a')[0];
var local = window.location.host === aEl.host;
var path = aEl.pathname.slice(1);
if (local) {
e.preventDefault();
app.navigate(path);
return false;
}
},
handleEmbedClick: function (e) {
if (e.shiftKey) {
e.preventDefault();
$(e.target).hide();
}
},
handleTitle: function (e) {
document.title = app.state.title;
app.desktop.updateBadge(app.state.badge);
},
handleStatusChange: function (e) {
var text = e.target.textContent;
me.status = text;
client.sendPresence({
status: text,
caps: client.disco.caps
});
},
handleLogout: function (e) {
app.navigate('/logout');
}
});