2013-09-16 14:16:47 -04:00
|
|
|
/*global $, app, me, client*/
|
2013-08-29 23:38:28 -04:00
|
|
|
"use strict";
|
|
|
|
|
2013-09-03 22:18:31 -04:00
|
|
|
var HumanView = require('human-view');
|
2013-08-29 23:38:28 -04:00
|
|
|
var templates = require('../templates');
|
|
|
|
var ContactListItem = require('../views/contactListItem');
|
2013-09-16 19:12:00 -04:00
|
|
|
var MUCListItem = require('../views/mucListItem');
|
2013-10-15 15:15:25 -04:00
|
|
|
var CallView = require('../views/call');
|
2013-08-29 23:38:28 -04:00
|
|
|
|
2015-02-09 08:56:02 -05:00
|
|
|
var ContactRequestItem = require('../views/contactRequest');
|
|
|
|
|
2013-08-29 23:38:28 -04:00
|
|
|
|
2013-09-03 22:18:31 -04:00
|
|
|
module.exports = HumanView.extend({
|
2013-08-29 23:38:28 -04:00
|
|
|
template: templates.body,
|
2013-09-27 12:47:54 -04:00
|
|
|
initialize: function () {
|
|
|
|
this.listenTo(app.state, 'change:title', this.handleTitle);
|
2013-10-14 17:02:05 -04:00
|
|
|
app.desktop.updateBadge('');
|
2014-01-23 14:11:56 -05:00
|
|
|
app.state.on('change:deviceID', function () {
|
|
|
|
console.log('DEVICE ID>>>', app.state.deviceID);
|
|
|
|
});
|
2013-09-27 12:47:54 -04:00
|
|
|
},
|
2013-09-03 18:25:14 -04:00
|
|
|
events: {
|
2013-09-16 14:16:47 -04:00
|
|
|
'click a[href]': 'handleLinkClick',
|
2014-01-02 03:52:26 -05:00
|
|
|
'click .embed': 'handleEmbedClick',
|
2013-12-20 06:39:06 -05:00
|
|
|
'click .reconnect': 'handleReconnect',
|
2013-12-31 20:20:32 -05:00
|
|
|
'click .logout': 'handleLogout',
|
2015-02-09 08:56:02 -05:00
|
|
|
'click .addContact': 'handleAddContact',
|
2014-11-17 18:40:08 -05:00
|
|
|
'keydown #addcontact': 'keyDownAddContact',
|
2015-02-09 08:56:02 -05:00
|
|
|
'click .joinMUC': 'handleJoinMUC',
|
2014-11-17 18:40:08 -05:00
|
|
|
'keydown #joinmuc': 'keyDownJoinMUC',
|
2014-11-17 18:44:39 -05:00
|
|
|
'blur #me .status': 'handleStatusChange',
|
|
|
|
'keydown .status': 'keyDownStatus'
|
2013-09-03 18:25:14 -04:00
|
|
|
},
|
2013-09-11 23:59:50 -04:00
|
|
|
classBindings: {
|
2013-10-15 19:21:22 -04:00
|
|
|
connected: '#connectionOverlay',
|
2014-01-07 01:01:17 -05:00
|
|
|
cacheStatus: '#updateBar',
|
2013-10-15 19:21:22 -04:00
|
|
|
hasActiveCall: '#wrapper'
|
2013-09-11 23:59:50 -04:00
|
|
|
},
|
2013-08-29 23:38:28 -04:00
|
|
|
render: function () {
|
|
|
|
$('head').append(templates.head());
|
2013-09-13 00:28:59 -04:00
|
|
|
$('body').removeClass('aux');
|
2013-08-29 23:38:28 -04:00
|
|
|
this.renderAndBind();
|
2013-09-16 05:19:07 -04:00
|
|
|
this.renderCollection(me.contacts, ContactListItem, this.$('#roster nav'));
|
2013-09-16 19:12:00 -04:00
|
|
|
this.renderCollection(me.mucs, MUCListItem, this.$('#bookmarks nav'));
|
2015-02-09 08:56:02 -05:00
|
|
|
this.renderCollection(me.contactRequests, ContactRequestItem, this.$('#contactrequests'));
|
2013-12-20 06:39:06 -05:00
|
|
|
|
|
|
|
this.registerBindings(me, {
|
|
|
|
textBindings: {
|
|
|
|
displayName: '#me .name',
|
|
|
|
status: '#me .status'
|
|
|
|
},
|
|
|
|
srcBindings: {
|
|
|
|
avatar: '#me .avatar'
|
|
|
|
}
|
|
|
|
});
|
2013-08-29 23:38:28 -04:00
|
|
|
return this;
|
2013-09-03 18:25:14 -04:00
|
|
|
},
|
2013-09-16 14:16:47 -04:00
|
|
|
handleReconnect: function (e) {
|
|
|
|
client.connect();
|
|
|
|
},
|
2013-09-03 18:25:14 -04:00
|
|
|
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;
|
|
|
|
}
|
2013-09-27 12:47:54 -04:00
|
|
|
},
|
2014-01-01 19:24:11 -05:00
|
|
|
handleEmbedClick: function (e) {
|
|
|
|
if (e.shiftKey) {
|
|
|
|
e.preventDefault();
|
2014-01-02 03:52:26 -05:00
|
|
|
$(e.currentTarget).toggleClass('collapsed');
|
2014-01-01 19:24:11 -05:00
|
|
|
}
|
|
|
|
},
|
2013-09-27 12:47:54 -04:00
|
|
|
handleTitle: function (e) {
|
|
|
|
document.title = app.state.title;
|
2013-10-14 17:02:05 -04:00
|
|
|
app.desktop.updateBadge(app.state.badge);
|
2013-12-20 06:39:06 -05:00
|
|
|
},
|
|
|
|
handleStatusChange: function (e) {
|
|
|
|
var text = e.target.textContent;
|
|
|
|
me.status = text;
|
|
|
|
client.sendPresence({
|
|
|
|
status: text,
|
|
|
|
caps: client.disco.caps
|
|
|
|
});
|
2013-12-31 20:20:32 -05:00
|
|
|
},
|
2014-11-17 18:44:39 -05:00
|
|
|
keyDownStatus: function (e) {
|
|
|
|
if (e.which === 13 && !e.shiftKey) {
|
|
|
|
e.target.blur();
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
},
|
2013-12-31 20:20:32 -05:00
|
|
|
handleLogout: function (e) {
|
|
|
|
app.navigate('/logout');
|
2015-02-09 08:56:02 -05:00
|
|
|
},
|
|
|
|
handleAddContact: function (e) {
|
|
|
|
e.preventDefault();
|
|
|
|
|
|
|
|
var contact = this.$('#addcontact').val();
|
|
|
|
if (contact.indexOf('@') == -1 && SERVER_CONFIG.domain)
|
|
|
|
contact += '@' + SERVER_CONFIG.domain;
|
|
|
|
if (contact) {
|
|
|
|
app.api.sendPresence({to: contact, type: 'subscribe'});
|
|
|
|
}
|
|
|
|
this.$('#addcontact').val('');
|
|
|
|
|
|
|
|
return false;
|
|
|
|
},
|
2014-11-17 18:40:08 -05:00
|
|
|
keyDownAddContact: function (e) {
|
|
|
|
if (e.which === 13 && !e.shiftKey) {
|
|
|
|
this.handleAddContact(e);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
},
|
2015-02-09 08:56:02 -05:00
|
|
|
handleJoinMUC: function (e) {
|
|
|
|
e.preventDefault();
|
|
|
|
|
|
|
|
var mucjid = this.$('#joinmuc').val();
|
|
|
|
this.$('#joinmuc').val('');
|
|
|
|
if (mucjid.indexOf('@') == -1 && SERVER_CONFIG.muc)
|
|
|
|
mucjid += '@' + SERVER_CONFIG.muc;
|
|
|
|
me.mucs.add({
|
|
|
|
id: mucjid,
|
|
|
|
name: mucjid,
|
|
|
|
jid: new client.JID(mucjid),
|
|
|
|
nick: me.nick,
|
|
|
|
autoJoin: true
|
|
|
|
});
|
|
|
|
me.mucs.save();
|
|
|
|
me.mucs.get(mucjid).join();
|
2014-11-17 18:40:08 -05:00
|
|
|
},
|
|
|
|
keyDownJoinMUC: function (e) {
|
|
|
|
if (e.which === 13 && !e.shiftKey) {
|
|
|
|
this.handleJoinMUC(e);
|
|
|
|
return false;
|
|
|
|
}
|
2013-08-29 23:38:28 -04:00
|
|
|
}
|
|
|
|
});
|