#include ts_20_ui.js #include ts_chat.js #include cookies.js #include ts_10_user.js #include ts_utils.js #include title.js #include strings.js #include utility.js var UI = (function () { function UI() {} UI.RenderLanguage = function () { document.getElementById("sendmsg").value = AmiStrings.getMenuString('send'); try { document.getElementById("namelabel").innerHTML = AmiStrings.getMenuString('username'); } catch (e) {} try { document.getElementById("msglabel").innerHTML = AmiStrings.getMenuString('message'); } catch (e) {} var rows = document.getElementById("settingsList").getElementsByTagName("table")[0].getElementsByTagName("tr"); for (var i = 0; i < rows.length; i++) { if (rows[i].getAttribute("name").substr(0, 2) == ";;") { var code = rows[i].getAttribute("name").substr(2); rows[i].cells[0].innerHTML = AmiStrings.getMenuString('persist', [AmiStrings.getBBCodeString(code)]); } else if (rows[i].getAttribute("name").substr(0, 2) == "||") { var code = rows[i].getAttribute("name").substr(2); rows[i].cells[0].innerHTML = AmiStrings.getMenuString('enable', [AmiStrings.getBBCodeString(code)]); } else { if(AmiStrings.hasSettingsString(rows[i].getAttribute('name'))) rows[i].cells[0].innerHTML = AmiStrings.getSettingsString(rows[i].getAttribute('name')) + ":"; } } var btns = document.getElementById("bbCodeContainer").getElementsByTagName("input"); for (var i = 0; i < btns.length; i++) { if (btns[i].getAttribute("name") != ";;") btns[i].value = AmiStrings.hasBBCodeString(btns[i].name) ? AmiStrings.getBBCodeString(btns[i].name) : btns[i].name; } if (UserContext.self != undefined) UI.RedrawUserList(); }; UI.GenerateContextMenu = function (u) { var ret = document.createElement("ul"); ret.id = "sock_menu_" + u.id; ret.className = "userMenu"; if (UserContext.self.id !== u.id) ret.classList.add('hidden'); UI.contextMenuFields.forEach(function (elt, i, arr) { if ((UserContext.self.id === u.id && elt["self"]) || (elt["others"] && UserContext.self.id !== u.id)) { if ((UserContext.self.canModerate() && elt["modonly"]) || !elt["modonly"]) { if (AmiStrings.hasMenuString(elt.langid)) { var li = document.createElement("li"); var link = document.createElement("a"); link.href = "javascript:void(0);"; link.innerHTML = AmiStrings.getMenuString(elt.langid); switch (elt["action"]) { default: case 0: var msg = Utils.replaceAll(Utils.replaceAll(elt["value"], "{0}", "{ {0} }"), "{1}", "{ {1} }"); link.onclick = function (e) { ami.chat.inputBox.setValue(Utils.replaceAll(Utils.replaceAll(msg, "{ {0} }", UserContext.self.username), "{ {1} }", u.username) + " "); ami.chat.inputBox.focus(); }; break; case 1: var msg = Utils.replaceAll(Utils.replaceAll(elt["value"], "{0}", "{ {0} }"), "{1}", "{ {1} }"); link.onclick = function (e) { ami.sockChat.sendMessage(Utils.replaceAll(Utils.replaceAll(msg, "{ {0} }", UserContext.self.username), "{ {1} }", u.username)); }; break; } li.appendChild(link); ret.appendChild(li); } } } }); return ret; }; UI.AddMessage = function (msgid, date, u, msg, strobe, playsound, flags) { if(strobe === undefined) strobe = true; if(playsound === undefined) playsound = true; if(flags === undefined) flags = '10010'; if(date === null || date === undefined) date = new Date; else if(typeof date === 'number') date = new Date(date * 1000); var msgInfo = { id: msgid, sender: u, created: date, nameBold: flags[0] !== '0', nameItalics: flags[1] !== '0', nameUnderline: flags[2] !== '0', showColon: flags[3] !== '0', isPM: flags[4] !== '0', canDelete: 'self' in UserContext && !isNaN(parseInt(msgid)) && !u.isBot() && UserContext.self.canModerate() && (UserContext.self.id === u.id || UserContext.self.getRank() > u.getRank()), }; var botInfo = null, outmsg = msg; if(u.isBot()) { botInfo = AmiStrings.parseBotMessage(msg); outmsg = botInfo.html; } if(playsound && ami.settings.get('runJokeTriggers')) try { var trigger = ami.textTriggers.getTrigger(msg); if(trigger.isSoundType()) { ami.sound.playLibrarySound( trigger.getRandomSoundName(), trigger.getVolume(), trigger.getRate() ); playsound = false; } } catch(ex) {} if(playsound) { if(botInfo) ami.sound.playEventSound([botInfo.type, botInfo.isError ? 'error' : 'server']); else if(UserContext.self.id === u.id) ami.sound.playEventSound('outgoing'); else if(msgInfo.isPM) ami.sound.playEventSound(['incoming-priv', 'incoming']); else ami.sound.playEventSound('incoming'); } var mention = 'self' in UserContext && (outmsg.toLowerCase()).indexOf(UserContext.self.username.toLowerCase()) >= 0; if(msgInfo.isPM && UserContext.self.id === u.id) { var p = outmsg.split(' '); msgInfo.pmTargetName = p[0]; outmsg = p.slice(1).join(' '); } if(strobe && ami.pageIsHidden() && (msgInfo.isPM || mention)) { var strip = outmsg.replace(new RegExp("\\[.*?\\]", "g"), "").replace(new RegExp("\\<.*?\\>", "g"), ""); ami.notifications.display({ title: u.username + ' mentioned you!', text: strip, icon: u.getAvatarUrl(), }); } if(ami.settings.get('bbParse')) for(var i = 0; i < UI.bbcode.length; i++) { if(!UI.bbcode[i]["arg"]) { var at = 0; while((at = outmsg.indexOf("[" + UI.bbcode[i]['tag'] + "]", at)) != -1) { var end; if ((end = outmsg.indexOf("[/" + UI.bbcode[i]['tag'] + "]", at)) != -1) { var inner = Utils.StripCharacters(outmsg.substring(at + ("[" + UI.bbcode[i]['tag'] + "]").length, end), UI.bbcode[i]["rmin"] == undefined ? "" : UI.bbcode[i]["rmin"]); var replace = Utils.replaceAll(UI.bbcode[i]['swap'], "{0}", inner); if (UI.bbcode[i].enableSetting && !ami.settings.get(UI.bbcode[i].enableSetting)) replace = inner; outmsg = outmsg.substring(0, at) + replace + outmsg.substring(end + ("[/" + UI.bbcode[i]['tag'] + "]").length); at += replace.length; } else break; } } else { var at = 0; while((at = outmsg.indexOf("[" + UI.bbcode[i]['tag'] + "=", at)) != -1) { var start, end; if ((start = outmsg.indexOf("]", at)) != -1) { if ((end = outmsg.indexOf("[/" + UI.bbcode[i]['tag'] + "]", start)) != -1) { var arg = Utils.StripCharacters(outmsg.substring(at + ("[" + UI.bbcode[i]['tag'] + "=").length, start), "[]" + (UI.bbcode[i]["rmarg"] == undefined ? "" : UI.bbcode[i]["rmarg"])); var inner = Utils.StripCharacters(outmsg.substring(start + 1, end), UI.bbcode[i]["rmin"] == undefined ? "" : UI.bbcode[i]["rmin"]); var replace = Utils.replaceAll(Utils.replaceAll(UI.bbcode[i]['swap'], "{1}", inner), "{0}", arg); if (UI.bbcode[i].enableSetting && !ami.settings.get(UI.bbcode[i].enableSetting)) replace = inner; outmsg = outmsg.substring(0, at) + replace + outmsg.substring(end + ("[/" + UI.bbcode[i]['tag'] + "]").length); at += replace.length; } else break; } else break; } } } if(ami.settings.get('parseLinks')) { var tmp = outmsg.split(' '); for(var i = 0; i < tmp.length; i++) { if(tmp[i].indexOf("<") != -1 && tmp[i].indexOf(">") == -1) { tmp[i + 1] = tmp[i] + " " + tmp[i + 1]; tmp[i] = ""; continue; } var text = tmp[i].replace(/(<([^>]+)>)/ig, ""); if(text.substr(0, 7) == "http://" || text.substr(0, 8) == "https://") tmp[i] = "" + text + ""; } outmsg = tmp.join(" "); } if(ami.settings.get('parseEmoticons')) ami.emoticons.forEach(u.getRank(), function(emote) { var args = []; for(var i in emote.strings) args.push(Utils.SanitizeRegex(Utils.Sanitize(':' + emote.strings[i] + ':'))); outmsg = outmsg.replace(new RegExp("(" + args.join("|") + ")(?![^\\<]*\\>)", "g"), ''); }); msgInfo.bodyRaw = outmsg; var msgElem = ami.chat.messageList.add(msgInfo); if(ami.settings.get('bbAutoEmbedV1')) { var buttons = msgElem.getElementsByClassName('js-embed-btn'); while(buttons.length > 0) buttons[0].click(); } if(ami.settings.get('msgAutoScroll')) ami.chat.messageList.scrollToBottom(); if(strobe && ami.pageIsHidden()) { var title = ' ' + (botInfo ? botInfo.string : u.username); ami.windowTitle.flashTitle(['[ @]' + title, '[@ ]' + title]); } }; UI.ToggleUserMenu = function (id) { var menu = document.getElementById("sock_menu_" + id); menu.classList[menu.classList.contains('hidden') ? 'remove' : 'add']('hidden'); }; UI.AddUser = function (u, addToContext) { if (addToContext === void 0) { addToContext = true; } if (u.visible) { var msgDiv = document.createElement("div"); msgDiv.className = (this.rowEven[1]) ? "rowEven" : "rowOdd"; msgDiv.id = "sock_user_" + u.id; msgDiv.innerHTML = "" + u.username + ""; msgDiv.appendChild(UI.GenerateContextMenu(u)); $i('userList').getElementsByClassName('body')[0].appendChild(msgDiv); this.rowEven[1] = !this.rowEven[1]; } if (addToContext) { UserContext.users[u.id] = u; } }; UI.ModifyUser = function (u) { var tmp = document.getElementById("sock_user_" + u.id).getElementsByTagName("a")[0]; tmp.style.color = u.color; tmp.innerHTML = u.username; }; UI.MakeChannelDisplayName = function(name, ispwd, istemp) { var displayName = ''; if(ispwd) displayName += '*'; if(istemp) displayName += '['; displayName += name; if(istemp) displayName += ']'; return displayName; }; UI.SwitchChannel = function(name) { var channels = $c('js-sidebar-channel'); for(var i = 0; i < channels.length; ++i) { var channel = channels[i]; if(channel.style.fontWeight === 'bold') channel.style.fontWeight = null; } $i('sock_chan_' + name).style.fontWeight = 'bold'; }; UI.AddChannel = function (name, ispwd, istemp, iscurr) { var displayName = UI.MakeChannelDisplayName(name, ispwd, istemp); var html = $e({ attrs: { classList: ['js-sidebar-channel', this.rowEven[2] ? "rowEven" : "rowOdd"], id: 'sock_chan_' + name, }, child: { tag: 'a', child: displayName, attrs: { style: { display: 'block' }, href: 'javascript:void(0);', onclick: function() { var cmd = '/join ' + name; if(ispwd && !UserContext.self.canModerate()) cmd += ' ' + prompt(AmiStrings.getMenuString('chanpwd', [name])); ami.sockChat.sendMessage(cmd); }, }, } }); if(iscurr) html.style.fontWeight = 'bold'; $i('chanList').getElementsByClassName('body')[0].appendChild(html); this.rowEven[2] = !this.rowEven[2]; }; UI.ModifyChannel = function (oldname, newname, ispwd, istemp) { var displayName = UI.MakeChannelDisplayName(newname, ispwd, istemp); $i('sock_chat_' + oldname).children[0].textContent = displayName; }; UI.RemoveChannel = function (name) { $ri('sock_chat_' + oldname); }; UI.RemoveUser = function (id) { delete UserContext.users[id]; this.RedrawUserList(); }; UI.RedrawChannelList = function() { $i('chanList').getElementsByClassName('top')[0].innerHTML = AmiStrings.getMenuString('chans'); $i('chanList').getElementsByClassName('body')[0].innerHTML = ''; this.rowEven[2] = false; }; UI.RedrawUserList = function () { $i('userList').getElementsByClassName('top')[0].innerHTML = AmiStrings.getMenuString('online'); $i('userList').getElementsByClassName('body')[0].innerHTML = ''; this.rowEven[1] = false; if(UserContext.self !== undefined) this.AddUser(UserContext.self, false); for (var key in UserContext.users) { if (UserContext.users[key].visible) this.AddUser(UserContext.users[key], false); } }; UI.rowEven = [true, false, false]; UI.ChatBot = new User('-1', 'Misaka-' + (Math.ceil(20000 * Math.random()) + 1).toString(), 'inherit', ''); UI.contextMenuFields = []; UI.bbcode = []; return UI; })();