(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);