2017-11-17 13:32:03 +01:00
|
|
|
// Converse.js (A browser based XMPP chat client)
|
|
|
|
// http://conversejs.org
|
|
|
|
//
|
|
|
|
// Copyright (c) 2012-2017, Jan-Carel Brand <jc@opkode.com>
|
|
|
|
// Licensed under the Mozilla Public License (MPLv2)
|
|
|
|
//
|
|
|
|
/*global define */
|
|
|
|
|
|
|
|
(function (root, factory) {
|
2017-11-17 14:14:42 +01:00
|
|
|
define(["converse-core",
|
2017-11-17 13:32:03 +01:00
|
|
|
"tpl!change_status_message",
|
2018-02-15 15:50:55 +01:00
|
|
|
"tpl!profile_view",
|
2017-11-17 13:32:03 +01:00
|
|
|
"tpl!choose_status",
|
|
|
|
"tpl!status_option",
|
|
|
|
"converse-vcard"
|
|
|
|
], factory);
|
|
|
|
}(this, function (
|
|
|
|
converse,
|
|
|
|
tpl_change_status_message,
|
2018-02-15 15:50:55 +01:00
|
|
|
tpl_profile_view,
|
2017-11-17 13:32:03 +01:00
|
|
|
tpl_choose_status,
|
|
|
|
tpl_status_option
|
|
|
|
) {
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
const { Strophe, Backbone, Promise, utils, _, moment } = converse.env;
|
|
|
|
|
|
|
|
|
|
|
|
converse.plugins.add('converse-profile', {
|
|
|
|
|
|
|
|
initialize () {
|
|
|
|
/* The initialize function gets called as soon as the plugin is
|
|
|
|
* loaded by converse.js's plugin machinery.
|
|
|
|
*/
|
|
|
|
const { _converse } = this,
|
|
|
|
{ __ } = _converse;
|
|
|
|
|
2018-02-15 15:50:55 +01:00
|
|
|
|
|
|
|
_converse.XMPPStatusView = Backbone.VDOMView.extend({
|
|
|
|
tagName: "div",
|
2017-11-17 13:32:03 +01:00
|
|
|
events: {
|
|
|
|
"click a.choose-xmpp-status": "toggleOptions",
|
|
|
|
"click #fancy-xmpp-status-select a.change-xmpp-status-message": "renderStatusChangeForm",
|
|
|
|
"submit": "setStatusMessage",
|
2018-02-20 16:51:59 +01:00
|
|
|
"click .dropdown dd ul li a": "setStatus",
|
|
|
|
"click .logout": "logOut"
|
2017-11-17 13:32:03 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
initialize () {
|
2018-02-19 22:12:50 +01:00
|
|
|
this.model.on("change", this.render, this);
|
2017-11-17 13:32:03 +01:00
|
|
|
},
|
|
|
|
|
2018-02-15 15:50:55 +01:00
|
|
|
toHTML () {
|
2017-11-17 13:32:03 +01:00
|
|
|
const chat_status = this.model.get('status') || 'offline';
|
2018-02-15 15:50:55 +01:00
|
|
|
return tpl_profile_view(_.extend(this.model.toJSON(), {
|
|
|
|
'fullname': this.model.get('fullname') || _converse.bare_jid,
|
|
|
|
'status_message': this.model.get('status_message') ||
|
|
|
|
__("I am %1$s", this.getPrettyStatus(chat_status)),
|
|
|
|
'chat_status': chat_status,
|
|
|
|
'title_change_settings': __('Change settings'),
|
|
|
|
'title_change_status': __('Click to change your chat status'),
|
2018-02-20 15:57:01 +01:00
|
|
|
'title_log_out': __('Log out'),
|
2018-02-15 15:50:55 +01:00
|
|
|
'title_your_profile': __('Your profile')
|
|
|
|
}));
|
2017-11-17 13:32:03 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
toggleOptions (ev) {
|
|
|
|
ev.preventDefault();
|
|
|
|
utils.slideInAllElements(
|
2018-02-09 16:02:56 +01:00
|
|
|
_converse.root.querySelectorAll('#conversejs .contact-form-container')
|
2017-11-17 13:32:03 +01:00
|
|
|
);
|
2017-11-17 14:14:42 +01:00
|
|
|
utils.slideToggleElement(this.el.querySelector("#target dd ul"));
|
2017-11-17 13:32:03 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
renderStatusChangeForm (ev) {
|
|
|
|
ev.preventDefault();
|
2017-11-17 14:14:42 +01:00
|
|
|
const xmppstatus = this.el.querySelector('.xmpp-status');
|
|
|
|
xmppstatus.parentNode.classList.add('no-border');
|
|
|
|
xmppstatus.outerHTML = tpl_change_status_message({
|
|
|
|
'status_message': _converse.xmppstatus.get('status_message') || '',
|
2017-11-17 13:32:03 +01:00
|
|
|
'label_custom_status': __('Custom status'),
|
|
|
|
'label_save': __('Save')
|
|
|
|
});
|
2017-11-17 14:14:42 +01:00
|
|
|
this.el.querySelector('.custom-xmpp-status').focus();
|
2017-11-17 13:32:03 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
setStatusMessage (ev) {
|
|
|
|
ev.preventDefault();
|
2017-11-17 14:14:42 +01:00
|
|
|
this.model.setStatusMessage(ev.target.querySelector('input').value);
|
2017-11-17 13:32:03 +01:00
|
|
|
},
|
|
|
|
|
2018-02-20 16:51:59 +01:00
|
|
|
logOut (ev) {
|
2017-11-17 13:32:03 +01:00
|
|
|
ev.preventDefault();
|
2018-02-20 16:51:59 +01:00
|
|
|
const result = confirm(__("Are you sure you want to log out?"));
|
|
|
|
if (result === true) {
|
2017-11-17 13:32:03 +01:00
|
|
|
_converse.logOut();
|
|
|
|
}
|
2018-02-20 16:51:59 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
setStatus (ev) {
|
|
|
|
ev.preventDefault();
|
|
|
|
const value = ev.target.getAttribute('data-value');
|
|
|
|
this.model.setStatus(value);
|
2017-11-17 13:32:03 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
getPrettyStatus (stat) {
|
|
|
|
if (stat === 'chat') {
|
|
|
|
return __('online');
|
|
|
|
} else if (stat === 'dnd') {
|
|
|
|
return __('busy');
|
|
|
|
} else if (stat === 'xa') {
|
|
|
|
return __('away for long');
|
|
|
|
} else if (stat === 'away') {
|
|
|
|
return __('away');
|
|
|
|
} else if (stat === 'offline') {
|
|
|
|
return __('offline');
|
|
|
|
} else {
|
|
|
|
return __(stat) || __('online');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}));
|