You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

192 lines
7.7 KiB

(function(window, converse) {
var _converse;
converse.plugins.add("tiki", {
"dependencies": [
'converse-muc-views',
'converse-controlbox',
'converse-chatview',
'converse-bookmarks',
],
"initialize": function () {
_converse = this._converse;
var error = console && console.error
? console.error.bind(console)
: function (msg) { return feedback(msg, "error", false); };
var tr = window.tr
? tr
: function(str) { return str; };
if (_converse.settings.authentication === "anonymous") {
_converse.promises.initialized.then(function() {
delete _converse.connection.mechanisms.ANONYMOUS.priority;
_converse.connection.mechanisms.ANONYMOUS.priority = 50;
})
}
/**
* This missing method causing errors
*/
converse.env.Strophe.Connection.prototype.setProtocol = function() {
const proto = this.options.protocol || "";
if (this.options.worker) {
this._proto = new Strophe.WorkerWebsocket(this);
} else if (this.service.indexOf("ws:") === 0 || this.service.indexOf("wss:") === 0 || proto.indexOf("ws") === 0) {
this._proto = new Strophe.Websocket(this);
} else {
this._proto = new Strophe.Bosh(this);
}
};
_converse.api.listen.on("noResumeableSession", function (xhr) {
error(tr("XMPP Module error") + ": " + xhr.statusText);
$("#conversejs").fadeOut("fast");
});
},
"overrides":{
"Bookmarks": {
"openBookmarkedRoom": async function (bookmark) {
if (bookmark.get('autojoin')) {
const groupchat = await _converse.api.rooms.create(bookmark.get('jid'), bookmark.get('nick'));
if (!(groupchat.get('hidden') || groupchat.get('minimized'))) {
groupchat.trigger('show');
}
}
return bookmark;
},
},
"ChatRoomView": {
"initialize": function () {
this.model.set('minimized', this.is_chatroom === true);
this.__super__.initialize.apply(this, arguments);
},
"createOccupantsView": function() {
var show_occupants = _converse.user_settings.show_occupants_by_default;
if (show_occupants === undefined || show_occupants === null) {
show_occupants = window.innerWidth > 576;
}
this.model.occupants.chatroomview = this;
this.occupantsview = new _converse.ChatRoomOccupantsView({
'model': this.model.occupants
});
this.model.save({
'hidden_occupants': ! show_occupants
});
const container_el = this.el.querySelector('.chatroom-body');
container_el.insertAdjacentElement('beforeend', this.occupantsview.el);
return this;
},
},
"ChatBoxes": {
"chatBoxMayBeShown": function(chatbox) {
if (chatbox.get('id') === 'controlbox') {
return _converse.show_controlbox_by_default === true
&& window.innerWidth >= 1024
&& window.innerHeight >= 768;
}
return this.__super__.chatBoxMayBeShown(chatbox);
}
},
"ChatBoxView":{
"renderMessageForm": function() {
this.__super__.renderMessageForm();
var form_container = this.el.querySelector('.message-form-container');
var nick_reset_box = this.el.querySelector('.tiki-reset-box');
var object = window.sessionStorage.getItem(_converse.jid);
if (object) {
object = JSON.parse(object);
}
var nickSet = object ? object.nickSet : null;
if (form_container && _converse.authentication === "anonymous" && !nickSet && !nick_reset_box) {
form_container.classList.add('hidden');
this.renderNickResetBox(form_container.parentElement);
return this;
}
return this;
},
"onNickReset": function(evt, nick) {
if(!(typeof nick === "string" || (nick instanceof String))) {
return;
}
nick = nick.trim().replace(/\s+/g, ' ');
if (!nick.length) {
return;
}
var object = window.sessionStorage.getItem(_converse.jid);
object = object || {};
object.nickSet = nick;
try {
this.parseMessageForCommands('/nick ' + nick);
window.sessionStorage.setItem(_converse.jid, JSON.stringify(object));
} catch(e) {
console.error("Can't change nickname:", e);
}
var message_box = this.el.querySelector('.message-form-container.hidden')
var nick_reset_box = this.el.querySelector('.tiki-reset-box');
nick_reset_box.classList.add('hidden');
message_box.classList.remove('hidden');
},
"renderNickResetBox": function (container) {
var resetBox = document.createElement('div');
resetBox.classList.add('tiki-reset-box', 'form-row', 'px-1', 'py-1', 'bg-secondary');
var col = document.createElement('div');
col.classList.add('col');
resetBox.appendChild(col);
var input = document.createElement('input');
input.type="text";
input.placeholder="Type a nick";
input.classList.add('form-control');
col.appendChild(input);
col = document.createElement('div');
col.classList.add('col', 'btn-group');
resetBox.appendChild(col);
var button = document.createElement('button');
button.innerText = 'Join';
button.classList.add('btn', 'btn-info');
col.appendChild(button);
var onNickReset = this.onNickReset.bind(this);
button.addEventListener("click", function (evt) {
return onNickReset(evt, input.value);
});
input.addEventListener("keydown", function(evt){
return evt.keyCode === 13 && onNickReset(evt, input.value);
});
button = document.createElement('a');
button.href = 'tiki-register.php';
button.innerText = 'Register';
button.classList.add('btn', 'btn-success', 'text-white');
col.appendChild(button);
container.appendChild(resetBox);
return this;
},
}
}
});
})(window, window.converse);