Parcourir la source

[refactor] split functions

B Thibault il y a 8 ans
Parent
commit
ef5d97bf08
4 fichiers modifiés avec 207 ajouts et 207 suppressions
  1. 1 0
      Makefile
  2. 163 0
      cli/msgFormatter.js
  3. 0 163
      cli/ui.js
  4. 43 44
      srv/public/slack.min.js

+ 1 - 0
Makefile

@@ -10,6 +10,7 @@ SRC=		srv/src/context.js		\
 			\
 			cli/confirmDialog.js	\
 			cli/resources.js		\
+			cli/msgFormatter.js		\
 			cli/ui.js				\
 			cli/dom.js				\
 			cli/emojiBar.js			\

+ 163 - 0
cli/msgFormatter.js

@@ -0,0 +1,163 @@
+/**
+ * replace all :emoji: codes with corresponding image
+ * @param {string} inputString
+ * @return {string}
+**/
+function formatEmojis(inputString) {
+    return inputString.replace(/:([^ \t:]+):/g, function(returnFailed, emoji) {
+        var emojiDom = makeEmojiDom(emoji);
+        if (emojiDom) {
+            var domParent = document.createElement("span");
+            domParent.className = returnFailed === inputString ? R.klass.emoji.medium : R.klass.emoji.small;
+            domParent.appendChild(emojiDom);
+            return domParent.outerHTML;
+        }
+        return returnFailed;
+    });
+}
+
+/**
+ * @param {string} fullText
+ * @return {string}
+**/
+function formatText(fullText) {
+    if (!fullText || fullText == "")
+        return "";
+    var msgContents = fullText.split(/\r?\n/g);
+
+    for (var msgContentIndex=0, nbMsgContents = msgContents.length; msgContentIndex < nbMsgContents; msgContentIndex++) {
+        var msgContent = msgContents[msgContentIndex].trim()
+            ,_msgContent = ""
+            ,currentMods = {}
+            ,quote = false
+            ,i =0
+
+        msgContent = msgContent.replace(new RegExp('<([@#]?)([^>]*)>', 'g'),
+            function(matched, type, entity) {
+                var sub = entity.split('|');
+
+                if (type === '@') {
+                    if (!sub[1]) {
+                        var user = SLACK.context.users[sub[0]];
+                        sub[1] = user ? ('@' +user.name) : locale.unknownMember;
+                    } else if ('@' !== sub[1][0]) {
+                        sub[1] = '@' +sub[1];
+                    }
+                    sub[0] = '#' +sub[0];
+                    sub[2] = R.klass.msg.link +' ' +R.klass.msg.linkuser;
+                } else if (type === '#') {
+                    if (!sub[1]) {
+                        var chan = SLACK.context.channels[sub[0]];
+                        sub[1] = chan ? ('#' +chan.name) : locale.unknownChannel;
+                    } else if ('#' !== sub[1][0]) {
+                        sub[1] = '#' +sub[1];
+                    }
+                    sub[0] = '#' +sub[0];
+                    sub[2] = R.klass.msg.link +' ' +R.klass.msg.linkchan;
+                } else if (sub[0].indexOf("://") !== -1) {
+                    if (!sub[1])
+                        sub[1] = sub[0];
+                    sub[2] = R.klass.msg.link;
+                } else {
+                    return matched;
+                }
+                return '<a href="' +sub[0] +'" class="' +sub[2] +'"' +(!type ? ' target="_blank"' : '') +'>' +sub[1] +'</a>';
+            });
+        msgContent = formatEmojis(msgContent);
+        var msgLength = msgContent.length;
+        var isAlphadec = function(c) {
+            return ((c >= 'A' && c <= 'Z') ||
+                (c >= 'a' && c <= 'z') ||
+                (c >= '0' && c <= '9') ||
+                "àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇߨøÅ寿œ".indexOf(c) !== -1);
+        }
+        ,checkEnd = function(str, pos, c) {
+            while (str[pos]) {
+                if (isAlphadec(str[pos]) && str[pos] != c && str[pos +1] == c) {
+                    return true;
+                }
+                pos++;
+            }
+            return false;
+        } ,appendMod = function(mods) {
+            if (!Object.keys(currentMods).length)
+                return "";
+            return '<span class="' +Object.keys(mods).join(' ') +'">';
+        };
+
+        // Skip trailing
+        while (i < msgLength && (msgContent[i] === ' ' || msgContent[i] === '\t'))
+            i++;
+        if (msgContent.substr(i, 4) === '&gt;') {
+            quote = true;
+            i += 4;
+        }
+        for (; i < msgLength; i++) {
+            var c = msgContent[i];
+
+            if (c === '<') {
+                do {
+                    _msgContent += msgContent[i++];
+                } while (msgContent[i -1] !== '>');
+                i--;
+                continue;
+            }
+            if (!(currentMods[R.klass.msg.style.bold]) && c === '*' && msgContent[i +1] && checkEnd(msgContent, i, c)) {
+                if (Object.keys(currentMods).length)
+                    _msgContent += '</span>';
+                currentMods[R.klass.msg.style.bold] = true;
+                _msgContent += appendMod(currentMods);
+            } else if (!(currentMods[R.klass.msg.style.strike]) && c === '~' && msgContent[i +1] && checkEnd(msgContent, i, c)) {
+                if (Object.keys(currentMods).length)
+                    _msgContent += '</span>';
+                currentMods[R.klass.msg.style.strike] = true;
+                _msgContent += appendMod(currentMods);
+            } else if (!(currentMods[R.klass.msg.style.code]) && c === '`' && msgContent[i +1] && checkEnd(msgContent, i, c)) {
+                if (Object.keys(currentMods).length)
+                    _msgContent += '</span>';
+                currentMods[R.klass.msg.style.code] = true;
+                _msgContent += appendMod(currentMods);
+            } else if (!(currentMods[R.klass.msg.style.italic]) && c === '_' && msgContent[i +1] && checkEnd(msgContent, i, c)) {
+                if (Object.keys(currentMods).length)
+                    _msgContent += '</span>';
+                currentMods[R.klass.msg.style.italic] = true;
+                _msgContent += appendMod(currentMods);
+            } else {
+                var finalFound = false;
+                _msgContent += c;
+
+                do {
+                    if ((currentMods[R.klass.msg.style.bold]) && c !== '*' && msgContent[i +1] === '*') {
+                        delete currentMods[R.klass.msg.style.bold];
+                        finalFound = true;
+                    } else if ((currentMods[R.klass.msg.style.strike]) && c !== '~' && msgContent[i +1] === '~') {
+                        delete currentMods[R.klass.msg.style.strike];
+                        finalFound = true;
+                    } else if ((currentMods[R.klass.msg.style.code]) && c !== '`' && msgContent[i +1] === '`') {
+                        delete currentMods[R.klass.msg.style.code];
+                        finalFound = true;
+                    } else if ((currentMods[R.klass.msg.style.italic]) && c !== '_' && msgContent[i +1] === '_') {
+                        delete currentMods[R.klass.msg.style.italic];
+                        finalFound = true;
+                    } else {
+                        break;
+                    }
+                    c = msgContent[++i];
+                } while (i < msgLength);
+                if (finalFound)
+                    _msgContent += '</span>' +appendMod(currentMods);
+            }
+        }
+        if (!isObjectEmpty(currentMods)) {
+            // Should not append
+            console.warn("formatter warning");
+            _msgContent += '</span>';
+        }
+        if (quote)
+            msgContents[msgContentIndex] = '<span class="' +R.klass.msg.style.quote +'">' +_msgContent +'</span>';
+        else
+            msgContents[msgContentIndex] = _msgContent;
+    }
+    return msgContents.length === 0 ? "" : msgContents.join('<br/>');
+}
+

+ 0 - 163
cli/ui.js

@@ -263,169 +263,6 @@ function makeEmojiDom(emojiCode) {
     return typeof emoji === "string" ? null : emoji;
 }
 
-/**
- * replace all :emoji: codes with corresponding image
- * @param {string} inputString
- * @return {string}
-**/
-function formatEmojis(inputString) {
-    return inputString.replace(/:([^ \t:]+):/g, function(returnFailed, emoji) {
-        var emojiDom = makeEmojiDom(emoji);
-        if (emojiDom) {
-            var domParent = document.createElement("span");
-            domParent.className = returnFailed === inputString ? R.klass.emoji.medium : R.klass.emoji.small;
-            domParent.appendChild(emojiDom);
-            return domParent.outerHTML;
-        }
-        return returnFailed;
-    });
-}
-
-/**
- * @param {string} fullText
- * @return {string}
-**/
-function formatText(fullText) {
-    if (!fullText || fullText == "")
-        return "";
-    var msgContents = fullText.split(/\r?\n/g);
-
-    for (var msgContentIndex=0, nbMsgContents = msgContents.length; msgContentIndex < nbMsgContents; msgContentIndex++) {
-        var msgContent = msgContents[msgContentIndex].trim()
-            ,_msgContent = ""
-            ,currentMods = {}
-            ,quote = false
-            ,i =0
-
-        msgContent = msgContent.replace(new RegExp('<([@#]?)([^>]*)>', 'g'),
-            function(matched, type, entity) {
-                var sub = entity.split('|');
-
-                if (type === '@') {
-                    if (!sub[1]) {
-                        var user = SLACK.context.users[sub[0]];
-                        sub[1] = user ? ('@' +user.name) : locale.unknownMember;
-                    } else if ('@' !== sub[1][0]) {
-                        sub[1] = '@' +sub[1];
-                    }
-                    sub[0] = '#' +sub[0];
-                    sub[2] = R.klass.msg.link +' ' +R.klass.msg.linkuser;
-                } else if (type === '#') {
-                    if (!sub[1]) {
-                        var chan = SLACK.context.channels[sub[0]];
-                        sub[1] = chan ? ('#' +chan.name) : locale.unknownChannel;
-                    } else if ('#' !== sub[1][0]) {
-                        sub[1] = '#' +sub[1];
-                    }
-                    sub[0] = '#' +sub[0];
-                    sub[2] = R.klass.msg.link +' ' +R.klass.msg.linkchan;
-                } else if (sub[0].indexOf("://") !== -1) {
-                    if (!sub[1])
-                        sub[1] = sub[0];
-                    sub[2] = R.klass.msg.link;
-                } else {
-                    return matched;
-                }
-                return '<a href="' +sub[0] +'" class="' +sub[2] +'"' +(!type ? ' target="_blank"' : '') +'>' +sub[1] +'</a>';
-            });
-        msgContent = formatEmojis(msgContent);
-        var msgLength = msgContent.length;
-        var isAlphadec = function(c) {
-            return ((c >= 'A' && c <= 'Z') ||
-                (c >= 'a' && c <= 'z') ||
-                (c >= '0' && c <= '9') ||
-                "àèìòùÀÈÌÒÙáéíóúýÁÉÍÓÚÝâêîôûÂÊÎÔÛãñõÃÑÕäëïöüÿÄËÏÖÜŸçÇߨøÅ寿œ".indexOf(c) !== -1);
-        }
-        ,checkEnd = function(str, pos, c) {
-            while (str[pos]) {
-                if (isAlphadec(str[pos]) && str[pos] != c && str[pos +1] == c) {
-                    return true;
-                }
-                pos++;
-            }
-            return false;
-        } ,appendMod = function(mods) {
-            if (!Object.keys(currentMods).length)
-                return "";
-            return '<span class="' +Object.keys(mods).join(' ') +'">';
-        };
-
-        // Skip trailing
-        while (i < msgLength && (msgContent[i] === ' ' || msgContent[i] === '\t'))
-            i++;
-        if (msgContent.substr(i, 4) === '&gt;') {
-            quote = true;
-            i += 4;
-        }
-        for (; i < msgLength; i++) {
-            var c = msgContent[i];
-
-            if (c === '<') {
-                do {
-                    _msgContent += msgContent[i++];
-                } while (msgContent[i -1] !== '>');
-                i--;
-                continue;
-            }
-            if (!(currentMods[R.klass.msg.style.bold]) && c === '*' && msgContent[i +1] && checkEnd(msgContent, i, c)) {
-                if (Object.keys(currentMods).length)
-                    _msgContent += '</span>';
-                currentMods[R.klass.msg.style.bold] = true;
-                _msgContent += appendMod(currentMods);
-            } else if (!(currentMods[R.klass.msg.style.strike]) && c === '~' && msgContent[i +1] && checkEnd(msgContent, i, c)) {
-                if (Object.keys(currentMods).length)
-                    _msgContent += '</span>';
-                currentMods[R.klass.msg.style.strike] = true;
-                _msgContent += appendMod(currentMods);
-            } else if (!(currentMods[R.klass.msg.style.code]) && c === '`' && msgContent[i +1] && checkEnd(msgContent, i, c)) {
-                if (Object.keys(currentMods).length)
-                    _msgContent += '</span>';
-                currentMods[R.klass.msg.style.code] = true;
-                _msgContent += appendMod(currentMods);
-            } else if (!(currentMods[R.klass.msg.style.italic]) && c === '_' && msgContent[i +1] && checkEnd(msgContent, i, c)) {
-                if (Object.keys(currentMods).length)
-                    _msgContent += '</span>';
-                currentMods[R.klass.msg.style.italic] = true;
-                _msgContent += appendMod(currentMods);
-            } else {
-                var finalFound = false;
-                _msgContent += c;
-
-                do {
-                    if ((currentMods[R.klass.msg.style.bold]) && c !== '*' && msgContent[i +1] === '*') {
-                        delete currentMods[R.klass.msg.style.bold];
-                        finalFound = true;
-                    } else if ((currentMods[R.klass.msg.style.strike]) && c !== '~' && msgContent[i +1] === '~') {
-                        delete currentMods[R.klass.msg.style.strike];
-                        finalFound = true;
-                    } else if ((currentMods[R.klass.msg.style.code]) && c !== '`' && msgContent[i +1] === '`') {
-                        delete currentMods[R.klass.msg.style.code];
-                        finalFound = true;
-                    } else if ((currentMods[R.klass.msg.style.italic]) && c !== '_' && msgContent[i +1] === '_') {
-                        delete currentMods[R.klass.msg.style.italic];
-                        finalFound = true;
-                    } else {
-                        break;
-                    }
-                    c = msgContent[++i];
-                } while (i < msgLength);
-                if (finalFound)
-                    _msgContent += '</span>' +appendMod(currentMods);
-            }
-        }
-        if (!isObjectEmpty(currentMods)) {
-            // Should not append
-            console.warn("formatter warning");
-            _msgContent += '</span>';
-        }
-        if (quote)
-            msgContents[msgContentIndex] = '<span class="' +R.klass.msg.style.quote +'">' +_msgContent +'</span>';
-        else
-            msgContents[msgContentIndex] = _msgContent;
-    }
-    return msgContents.length === 0 ? "" : msgContents.join('<br/>');
-}
-
 /**
  * @param {string} channelId
  * @param {Message} msg

+ 43 - 44
srv/public/slack.min.js

@@ -10,70 +10,69 @@ a.toLocaleTimeString():a.toLocaleString()},i:{fileUploadCancel:"Annuler",neterro
 a.toLocaleString()},i:{fileUploadCancel:"Cancel",neterror:"Cannot connect to chat !"}};function L(a,b){this.c=a;this.content=b;this.i=ha(this);this.b=ia(this);this.a=[];this.g=[]}
 function ha(a){var b=document.createElement("div"),c=document.createElement("header"),d=document.createElement("span"),f=document.createElement("span"),e=document.createElement("div"),h=document.createElement("footer");b.a=document.createElement("span");b.b=document.createElement("span");d.textContent=a.c;"string"==typeof a.content?e.innerHTML=a.content:e.appendChild(a.content);c.className=ja;d.className=ka;f.className=la;f.textContent="x";c.appendChild(d);c.appendChild(f);b.appendChild(c);e.className=
 ma;b.appendChild(e);b.b.className=M;b.b.textContent=K.G;b.b.addEventListener("click",function(){N(a,!1)});f.addEventListener("click",function(){N(a,!1)});b.a.addEventListener("click",function(){N(a,!0)});h.appendChild(b.b);b.a.className=M;b.a.textContent=K.ok;h.appendChild(b.a);h.className=na+" "+oa;b.appendChild(h);b.className=pa;return b}function N(a,b){(b?a.a:a.g).forEach(function(a){a()});a.close()}
-function ia(a){var b=document.createElement("div");b.className=qa;b.addEventListener("click",function(){N(this,!1)}.bind(a));return b}function ra(a,b,c){a.i.a.textContent=b;a.i.b.textContent=c;return a}L.prototype.D=function(a){a=a||document.body;a.appendChild(this.b);a.appendChild(this.i);return this};L.prototype.close=function(){this.i.remove();this.b.remove();return this};function sa(a,b){a.a.push(b);return a};var M="button",na="button-container",pa="dialog",qa="dialog-overlay",ja="dialog-title",ka="dialog-title-label",la="dialog-title-close",ma="dialog-body",oa="dialog-footer";var O=[],P=0;
-function ta(){var a=document.createDocumentFragment(),b=Object.keys(F.a.f||{}),c=[],d=[],f=[],e=[];b.sort(function(a,b){return a[0]!==b[0]?a[0]-b[0]:F.a.f[a].name.localeCompare(F.a.f[b].name)});b.forEach(function(a){a=F.a.f[a];if(!a.h&&!1!==a.s)if(a instanceof x){if(!a.c.g){var b;b=document.createElement("li");var h=document.createElement("a");b.id="room_"+a.id;h.href="#"+a.id;b.className="slack-context-room slack-ims";h.textContent=a.c.name;b.appendChild(Q());b.appendChild(h);a.c.c||b.classList.add("away");
-G===a&&b.classList.add("selected");a.a>a.b&&(b.classList.add("unread"),0<=R.indexOf(a)&&b.classList.add("unreadHi"));b&&(a.o?c.push(b):e.push(b))}}else b=document.createElement("li"),h=document.createElement("a"),b.id="room_"+a.id,h.href="#"+a.id,a.l?(b.className="slack-context-room slack-group",b.dataset.count=Object.keys(a.g||{}).length):b.className="slack-context-room slack-channel",G===a&&b.classList.add("selected"),h.textContent=a.name,b.appendChild(Q()),b.appendChild(h),a.a>a.b&&(b.classList.add("unread"),
-0<=R.indexOf(a)&&b.classList.add("unreadHi")),b&&(a.o?c.push(b):a.l?f.push(b):d.push(b))});c.length&&a.appendChild(ua(K.o));c.forEach(function(b){a.appendChild(b)});d.length&&a.appendChild(ua(K.f));d.forEach(function(b){a.appendChild(b)});f.forEach(function(b){a.appendChild(b)});e.length&&a.appendChild(ua(K.L));e.forEach(function(b){a.appendChild(b)});document.getElementById("chanList").textContent="";document.getElementById("chanList").appendChild(a);va();S();wa(function(a){document.getElementById("slackCtx").style.backgroundImage=
-"url("+a+")"})}function xa(){var a=F.a.c,b;for(b in F.a.b.f)if(!F.a.b.f[b].h){var c=document.getElementById("room_"+b);a[b]?c.classList.add("slack-context-typing"):c.classList.remove("slack-context-typing")}for(var d in F.a.a)(b=F.a.a[d].h)&&!b.h&&(c=document.getElementById("room_"+b.id))&&(a[b.id]?c.classList.add("slack-context-typing"):c.classList.remove("slack-context-typing"));ya()}
-function ya(){var a=F.a.c;document.getElementById("whoistyping").textContent="";if(G&&a[G.id]){var b=document.createDocumentFragment(),c=!1,d;for(d in a[G.id])(a=F.a.a[d])?b.appendChild(za(a)):c=!0;c&&(F.c=0);document.getElementById("whoistyping").appendChild(b)}}function Aa(a){a?document.body.classList.remove("no-network"):document.body.classList.add("no-network");S()}
-function Ba(){var a=G.name||(G.c?G.c.name:void 0);if(!a){var b=[];G.g.forEach(function(a){b.push(a.name)});a=b.join(", ")}document.getElementById("currentRoomTitle").textContent=a;Ca();T();document.getElementById("fileUploadContainer").classList.add("hidden");Da();U&&(U=null,V());W&&(W=null,V());ya()}
-function V(){if(U){document.body.classList.add("replyingTo");var a=document.getElementById("replyToContainer"),b=document.createElement("a");b.addEventListener("click",function(){U=null;V()});b.className="replyto-close";b.textContent="x";a.textContent="";a.appendChild(b);a.appendChild(Ea("reply_"+G.id,U,!0))}else document.body.classList.remove("replyingTo"),document.getElementById("replyToContainer").textContent="";T()}
-function X(){if(W){document.body.classList.add("replyingTo");var a=document.getElementById("replyToContainer"),b=document.createElement("a");b.addEventListener("click",function(){W=null;X()});b.className="replyto-close";b.textContent="x";a.textContent="";a.appendChild(b);a.appendChild(Ea("edit_"+G.id,W,!0));document.getElementById("msgInput").value=W.b}else document.body.classList.remove("replyingTo"),document.getElementById("replyToContainer").textContent="";T()}
-window.toggleReaction=function(a,b,c){var d=F.b[a];if(d){a:{for(var f=0,e=d.a.length;f<e;f++)if(d.a[f].id==b){d=d.a[f];break a}d=null}d&&(f=F.a.b.id,d.c[c]&&-1!==d.c[c].indexOf(f)?(d=new XMLHttpRequest,d.open("DELETE","api/reaction?room="+a+"&msg="+b+"&reaction="+encodeURIComponent(c),!0),d.send(null)):Fa(a,b,c))}};
-function Ga(a){a:{for(var b=a,c={};!c[b];){if(a=F.a.h.data[b])if("alias:"==a.substr(0,6))c[b]=!0,b=a.substr(6);else{b=document.createElement("span");b.className="emoji-custom emoji";b.style.backgroundImage="url('"+a+"')";a=b;break a}break}a=b}"string"===typeof a&&"makeEmoji"in window&&(a=window.makeEmoji(a));return"string"===typeof a?null:a}
-function Ha(a){return a.replace(/:([^ \t:]+):/g,function(b,c){var d=Ga(c);if(d){var f=document.createElement("span");f.className=b===a?"emoji-medium":"emoji-small";f.appendChild(d);return f.outerHTML}return b})}
-function Y(a){if(!a||""==a)return"";a=a.split(/\r?\n/g);for(var b=0,c=a.length;b<c;b++){for(var d=a[b].trim(),f="",e={},h=!1,g=0,d=d.replace(RegExp("<([@#]?)([^>]*)>","g"),function(a,b,c){c=c.split("|");if("@"===b)c[1]?"@"!==c[1][0]&&(c[1]="@"+c[1]):(a=F.a.a[c[0]],c[1]=a?"@"+a.name:K.N),c[0]="#"+c[0],c[2]="slackmsg-link slackmsg-link-user";else if("#"===b)c[1]?"#"!==c[1][0]&&(c[1]="#"+c[1]):(a=F.a.f[c[0]],c[1]=a?"#"+a.name:K.M),c[0]="#"+c[0],c[2]="slackmsg-link slackmsg-link-chan";else if(-1!==c[0].indexOf("://"))c[1]||
-(c[1]=c[0]),c[2]="slackmsg-link";else return a;return'<a href="'+c[0]+'" class="'+c[2]+'"'+(b?"":' target="_blank"')+">"+c[1]+"</a>"}),d=Ha(d),k=d.length,l=function(a,b,c){for(;a[b];){var d=a[b];if(("A"<=d&&"Z">=d||"a"<=d&&"z">=d||"0"<=d&&"9">=d||-1!=="\u00e0\u00e8\u00ec\u00f2\u00f9\u00c0\u00c8\u00cc\u00d2\u00d9\u00e1\u00e9\u00ed\u00f3\u00fa\u00fd\u00c1\u00c9\u00cd\u00d3\u00da\u00dd\u00e2\u00ea\u00ee\u00f4\u00fb\u00c2\u00ca\u00ce\u00d4\u00db\u00e3\u00f1\u00f5\u00c3\u00d1\u00d5\u00e4\u00eb\u00ef\u00f6\u00fc\u00ff\u00c4\u00cb\u00cf\u00d6\u00dc\u0178\u00e7\u00c7\u00df\u00d8\u00f8\u00c5\u00e5\u00c6\u00e6\u0153".indexOf(d))&&
+function ia(a){var b=document.createElement("div");b.className=qa;b.addEventListener("click",function(){N(this,!1)}.bind(a));return b}function ra(a,b,c){a.i.a.textContent=b;a.i.b.textContent=c;return a}L.prototype.D=function(a){a=a||document.body;a.appendChild(this.b);a.appendChild(this.i);return this};L.prototype.close=function(){this.i.remove();this.b.remove();return this};function sa(a,b){a.a.push(b);return a};var M="button",na="button-container",pa="dialog",qa="dialog-overlay",ja="dialog-title",ka="dialog-title-label",la="dialog-title-close",ma="dialog-body",oa="dialog-footer";function ta(a){return a.replace(/:([^ \t:]+):/g,function(b,c){var d=ua(c);if(d){var f=document.createElement("span");f.className=b===a?"emoji-medium":"emoji-small";f.appendChild(d);return f.outerHTML}return b})}
+function O(a){if(!a||""==a)return"";a=a.split(/\r?\n/g);for(var b=0,c=a.length;b<c;b++){for(var d=a[b].trim(),f="",e={},h=!1,g=0,d=d.replace(RegExp("<([@#]?)([^>]*)>","g"),function(a,b,c){c=c.split("|");if("@"===b)c[1]?"@"!==c[1][0]&&(c[1]="@"+c[1]):(a=F.a.a[c[0]],c[1]=a?"@"+a.name:K.N),c[0]="#"+c[0],c[2]="slackmsg-link slackmsg-link-user";else if("#"===b)c[1]?"#"!==c[1][0]&&(c[1]="#"+c[1]):(a=F.a.f[c[0]],c[1]=a?"#"+a.name:K.M),c[0]="#"+c[0],c[2]="slackmsg-link slackmsg-link-chan";else if(-1!==c[0].indexOf("://"))c[1]||
+(c[1]=c[0]),c[2]="slackmsg-link";else return a;return'<a href="'+c[0]+'" class="'+c[2]+'"'+(b?"":' target="_blank"')+">"+c[1]+"</a>"}),d=ta(d),k=d.length,l=function(a,b,c){for(;a[b];){var d=a[b];if(("A"<=d&&"Z">=d||"a"<=d&&"z">=d||"0"<=d&&"9">=d||-1!=="\u00e0\u00e8\u00ec\u00f2\u00f9\u00c0\u00c8\u00cc\u00d2\u00d9\u00e1\u00e9\u00ed\u00f3\u00fa\u00fd\u00c1\u00c9\u00cd\u00d3\u00da\u00dd\u00e2\u00ea\u00ee\u00f4\u00fb\u00c2\u00ca\u00ce\u00d4\u00db\u00e3\u00f1\u00f5\u00c3\u00d1\u00d5\u00e4\u00eb\u00ef\u00f6\u00fc\u00ff\u00c4\u00cb\u00cf\u00d6\u00dc\u0178\u00e7\u00c7\u00df\u00d8\u00f8\u00c5\u00e5\u00c6\u00e6\u0153".indexOf(d))&&
 a[b]!=c&&a[b+1]==c)return!0;b++}return!1},q=function(a){return Object.keys(e).length?'<span class="'+Object.keys(a).join(" ")+'">':""};g<k&&(" "===d[g]||"\t"===d[g]);)g++;"&gt;"===d.substr(g,4)&&(h=!0,g+=4);for(;g<k;g++){var m=d[g];if("<"===m){do f+=d[g++];while(">"!==d[g-1]);g--}else if(!e["slackmsg-style-bold"]&&"*"===m&&d[g+1]&&l(d,g,m))Object.keys(e).length&&(f+="</span>"),e["slackmsg-style-bold"]=!0,f+=q(e);else if(!e["slackmsg-style-strike"]&&"~"===m&&d[g+1]&&l(d,g,m))Object.keys(e).length&&
 (f+="</span>"),e["slackmsg-style-strike"]=!0,f+=q(e);else if(!e["slackmsg-style-code"]&&"`"===m&&d[g+1]&&l(d,g,m))Object.keys(e).length&&(f+="</span>"),e["slackmsg-style-code"]=!0,f+=q(e);else if(!e["slackmsg-style-italic"]&&"_"===m&&d[g+1]&&l(d,g,m))Object.keys(e).length&&(f+="</span>"),e["slackmsg-style-italic"]=!0,f+=q(e);else{var p=!1,f=f+m;do{if(e["slackmsg-style-bold"]&&"*"!==m&&"*"===d[g+1])delete e["slackmsg-style-bold"],p=!0;else if(e["slackmsg-style-strike"]&&"~"!==m&&"~"===d[g+1])delete e["slackmsg-style-strike"],
-p=!0;else if(e["slackmsg-style-code"]&&"`"!==m&&"`"===d[g+1])delete e["slackmsg-style-code"],p=!0;else if(e["slackmsg-style-italic"]&&"_"!==m&&"_"===d[g+1])delete e["slackmsg-style-italic"],p=!0;else break;m=d[++g]}while(g<k);p&&(f+="</span>"+q(e))}}Ia(e)||(console.warn("formatter warning"),f+="</span>");a[b]=h?'<span class="slackmsg-style-quote">'+f+"</span>":f}return a.length?a.join("<br/>"):""}
-function Ea(a,b,c){b instanceof C?(a=Ja(a,b,c),a.classList.add("slackmsg-me_message")):a=Ja(a,b,c);b.u&&a.classList.add("slackmsg-edited");b instanceof D&&a.classList.add("slackmsg-notice");return a}function Ka(a,b){document.getElementById("linkFavicon").href=a||b?"favicon.png?h="+a+"&m="+b:"favicon_ok.png"}
-function S(){var a=R.length,b="";if(Z)b="!"+K.H+" - ",document.getElementById("linkFavicon").href="favicon_err.png";else if(a)b="(!"+a+") - ",Ka(a,a);else{var a=0,c;for(c in F.a.f){var d=F.a.f[c];d.a>d.b&&a++}a&&(b="("+a+") - ");Ka(0,a)}F.a.l&&(b+=F.a.l.name);document.title=b}
-function La(){if("Notification"in window)if("granted"===Notification.permission){var a=Date.now();if(P+3E4<a){var b=new Notification(K.I);P=a;setTimeout(function(){b.close()},5E3)}}else"denied"!==Notification.permission&&Notification.requestPermission()}
-function Ca(){var a=document.createDocumentFragment(),b=G.id,c=null,d=0,f=null,e;O=[];F.b[b]&&F.b[b].a.forEach(function(g){if(!g.g){var h=Ea(b,g),l=!1;c&&c.m===g.m&&g.m?30>Math.abs(d-g.j)&&!(g instanceof C)?f.classList.add("slackmsg-same-ts"):d=g.j:(d=g.j,l=!0);(!c||c.j<=G.b)&&g.j>G.b&&h.classList.add("slackmsg-first-unread");if(g instanceof C)f=c=null,d=0,a.appendChild(h),e=null;else{if(l||!e){var l=F.a.a[g.m],q=g.h,m=document.createElement("div"),p=document.createElement("div"),t=document.createElement("span");
-m.A=document.createElement("img");m.A.className="slackmsg-author-img";t.className="slackmsg-author-name";l?(t.textContent=l.name,m.A.src=l.b.small):(t.textContent=q||"?",m.A.src="");p.appendChild(m.A);p.appendChild(t);p.className="slackmsg-author";m.className="slackmsg-authorGroup";m.appendChild(p);m.content=document.createElement("div");m.content.className="slackmsg-author-messages";m.appendChild(m.content);e=m;O.push(e);a.appendChild(e)}c=g;f=h;e.content.appendChild(h)}}});var h=document.getElementById("chatWindow");
-h.textContent="";h.appendChild(a);h.scrollTop=h.scrollHeight-h.clientHeight;window.hasFocus&&Da()}
+p=!0;else if(e["slackmsg-style-code"]&&"`"!==m&&"`"===d[g+1])delete e["slackmsg-style-code"],p=!0;else if(e["slackmsg-style-italic"]&&"_"!==m&&"_"===d[g+1])delete e["slackmsg-style-italic"],p=!0;else break;m=d[++g]}while(g<k);p&&(f+="</span>"+q(e))}}va(e)||(console.warn("formatter warning"),f+="</span>");a[b]=h?'<span class="slackmsg-style-quote">'+f+"</span>":f}return a.length?a.join("<br/>"):""};var P=[],Q=0;
+function wa(){var a=document.createDocumentFragment(),b=Object.keys(F.a.f||{}),c=[],d=[],f=[],e=[];b.sort(function(a,b){return a[0]!==b[0]?a[0]-b[0]:F.a.f[a].name.localeCompare(F.a.f[b].name)});b.forEach(function(a){a=F.a.f[a];if(!a.h&&!1!==a.s)if(a instanceof x){if(!a.c.g){var b;b=document.createElement("li");var h=document.createElement("a");b.id="room_"+a.id;h.href="#"+a.id;b.className="slack-context-room slack-ims";h.textContent=a.c.name;b.appendChild(R());b.appendChild(h);a.c.c||b.classList.add("away");
+G===a&&b.classList.add("selected");a.a>a.b&&(b.classList.add("unread"),0<=S.indexOf(a)&&b.classList.add("unreadHi"));b&&(a.o?c.push(b):e.push(b))}}else b=document.createElement("li"),h=document.createElement("a"),b.id="room_"+a.id,h.href="#"+a.id,a.l?(b.className="slack-context-room slack-group",b.dataset.count=Object.keys(a.g||{}).length):b.className="slack-context-room slack-channel",G===a&&b.classList.add("selected"),h.textContent=a.name,b.appendChild(R()),b.appendChild(h),a.a>a.b&&(b.classList.add("unread"),
+0<=S.indexOf(a)&&b.classList.add("unreadHi")),b&&(a.o?c.push(b):a.l?f.push(b):d.push(b))});c.length&&a.appendChild(xa(K.o));c.forEach(function(b){a.appendChild(b)});d.length&&a.appendChild(xa(K.f));d.forEach(function(b){a.appendChild(b)});f.forEach(function(b){a.appendChild(b)});e.length&&a.appendChild(xa(K.L));e.forEach(function(b){a.appendChild(b)});document.getElementById("chanList").textContent="";document.getElementById("chanList").appendChild(a);ya();T();za(function(a){document.getElementById("slackCtx").style.backgroundImage=
+"url("+a+")"})}function Aa(){var a=F.a.c,b;for(b in F.a.b.f)if(!F.a.b.f[b].h){var c=document.getElementById("room_"+b);a[b]?c.classList.add("slack-context-typing"):c.classList.remove("slack-context-typing")}for(var d in F.a.a)(b=F.a.a[d].h)&&!b.h&&(c=document.getElementById("room_"+b.id))&&(a[b.id]?c.classList.add("slack-context-typing"):c.classList.remove("slack-context-typing"));Ba()}
+function Ba(){var a=F.a.c;document.getElementById("whoistyping").textContent="";if(G&&a[G.id]){var b=document.createDocumentFragment(),c=!1,d;for(d in a[G.id])(a=F.a.a[d])?b.appendChild(Ca(a)):c=!0;c&&(F.c=0);document.getElementById("whoistyping").appendChild(b)}}function Da(a){a?document.body.classList.remove("no-network"):document.body.classList.add("no-network");T()}
+function Ea(){var a=G.name||(G.c?G.c.name:void 0);if(!a){var b=[];G.g.forEach(function(a){b.push(a.name)});a=b.join(", ")}document.getElementById("currentRoomTitle").textContent=a;Fa();U();document.getElementById("fileUploadContainer").classList.add("hidden");Ga();V&&(V=null,W());X&&(X=null,W());Ba()}
+function W(){if(V){document.body.classList.add("replyingTo");var a=document.getElementById("replyToContainer"),b=document.createElement("a");b.addEventListener("click",function(){V=null;W()});b.className="replyto-close";b.textContent="x";a.textContent="";a.appendChild(b);a.appendChild(Ha("reply_"+G.id,V,!0))}else document.body.classList.remove("replyingTo"),document.getElementById("replyToContainer").textContent="";U()}
+function Y(){if(X){document.body.classList.add("replyingTo");var a=document.getElementById("replyToContainer"),b=document.createElement("a");b.addEventListener("click",function(){X=null;Y()});b.className="replyto-close";b.textContent="x";a.textContent="";a.appendChild(b);a.appendChild(Ha("edit_"+G.id,X,!0));document.getElementById("msgInput").value=X.b}else document.body.classList.remove("replyingTo"),document.getElementById("replyToContainer").textContent="";U()}
+window.toggleReaction=function(a,b,c){var d=F.b[a];if(d){a:{for(var f=0,e=d.a.length;f<e;f++)if(d.a[f].id==b){d=d.a[f];break a}d=null}d&&(f=F.a.b.id,d.c[c]&&-1!==d.c[c].indexOf(f)?(d=new XMLHttpRequest,d.open("DELETE","api/reaction?room="+a+"&msg="+b+"&reaction="+encodeURIComponent(c),!0),d.send(null)):Ia(a,b,c))}};
+function ua(a){a:{for(var b=a,c={};!c[b];){if(a=F.a.h.data[b])if("alias:"==a.substr(0,6))c[b]=!0,b=a.substr(6);else{b=document.createElement("span");b.className="emoji-custom emoji";b.style.backgroundImage="url('"+a+"')";a=b;break a}break}a=b}"string"===typeof a&&"makeEmoji"in window&&(a=window.makeEmoji(a));return"string"===typeof a?null:a}
+function Ha(a,b,c){b instanceof C?(a=Ja(a,b,c),a.classList.add("slackmsg-me_message")):a=Ja(a,b,c);b.u&&a.classList.add("slackmsg-edited");b instanceof D&&a.classList.add("slackmsg-notice");return a}function Ka(a,b){document.getElementById("linkFavicon").href=a||b?"favicon.png?h="+a+"&m="+b:"favicon_ok.png"}
+function T(){var a=S.length,b="";if(Z)b="!"+K.H+" - ",document.getElementById("linkFavicon").href="favicon_err.png";else if(a)b="(!"+a+") - ",Ka(a,a);else{var a=0,c;for(c in F.a.f){var d=F.a.f[c];d.a>d.b&&a++}a&&(b="("+a+") - ");Ka(0,a)}F.a.l&&(b+=F.a.l.name);document.title=b}
+function La(){if("Notification"in window)if("granted"===Notification.permission){var a=Date.now();if(Q+3E4<a){var b=new Notification(K.I);Q=a;setTimeout(function(){b.close()},5E3)}}else"denied"!==Notification.permission&&Notification.requestPermission()}
+function Fa(){var a=document.createDocumentFragment(),b=G.id,c=null,d=0,f=null,e;P=[];F.b[b]&&F.b[b].a.forEach(function(g){if(!g.g){var h=Ha(b,g),l=!1;c&&c.m===g.m&&g.m?30>Math.abs(d-g.j)&&!(g instanceof C)?f.classList.add("slackmsg-same-ts"):d=g.j:(d=g.j,l=!0);(!c||c.j<=G.b)&&g.j>G.b&&h.classList.add("slackmsg-first-unread");if(g instanceof C)f=c=null,d=0,a.appendChild(h),e=null;else{if(l||!e){var l=F.a.a[g.m],q=g.h,m=document.createElement("div"),p=document.createElement("div"),t=document.createElement("span");
+m.A=document.createElement("img");m.A.className="slackmsg-author-img";t.className="slackmsg-author-name";l?(t.textContent=l.name,m.A.src=l.b.small):(t.textContent=q||"?",m.A.src="");p.appendChild(m.A);p.appendChild(t);p.className="slackmsg-author";m.className="slackmsg-authorGroup";m.appendChild(p);m.content=document.createElement("div");m.content.className="slackmsg-author-messages";m.appendChild(m.content);e=m;P.push(e);a.appendChild(e)}c=g;f=h;e.content.appendChild(h)}}});var h=document.getElementById("chatWindow");
+h.textContent="";h.appendChild(a);h.scrollTop=h.scrollHeight-h.clientHeight;window.hasFocus&&Ga()}
 function Ma(a){function b(a,b){for(b=b||a.target;b!==a.currentTarget&&b;){if(b.classList.contains("slackmsg-item"))return b.id;b=b.parentElement}}for(var c=a.target;c!==a.currentTarget&&c&&!c.classList.contains("slackmsg-hover");){if(c.parentElement&&c.classList.contains("slackmsg-attachment-actions-item")){var d=b(a,c),f=c.dataset.P,e=c.dataset.O;if(d&&void 0!==f&&void 0!==e){var d=parseFloat(d.split("_")[1]),h=fa(d);h&&h.a[f]&&h.a[f].actions&&h.a[f].actions[e]&&Na(h,h.a[f],h.a[f].actions[e])}}else if(c.parentElement&&
-c.parentElement.classList.contains("slackmsg-hover")){if(d=b(a,c))d=parseFloat(d.split("_")[1]),(h=fa(d))&&c.classList.contains("slackmsg-hover-reply")?(W&&(W=null,X()),U!==h&&(U=h,V())):h&&c.classList.contains("slackmsg-hover-reaction")?Oa.D(document.body,function(a){a&&Fa(G.id,h.id,a)}):h&&c.classList.contains("slackmsg-hover-edit")?(U&&(U=null,V()),W!==h&&(W=h,X())):h&&c.classList.contains("slackmsg-hover-remove")&&(U&&(U=null,V()),W&&(W=null,X()),Pa(h));break}c=c.parentElement}}
-function Na(a,b,c){function d(){var d=JSON.stringify({actions:[c],attachment_id:b.id,callback_id:b.callback_id,channel_id:f,is_ephemeral:a instanceof D,message_ts:a.id}),h=a.m,g=new FormData,k=new XMLHttpRequest;g.append("payload",d);g.append("service_id",h);k.open("POST","api/attachmentAction");k.send(g)}var f=G.id;c.confirm?sa(ra(new L(c.confirm.title,c.confirm.text),c.confirm.ok_text,c.confirm.dismiss_text),d).D():d()}function T(){document.getElementById("msgInput").focus()}
-function va(){var a=document.location.hash.substr(1),b=F.a.f[a];b&&b!==G?Qa(b):(a=F.a.a[a])&&a.l&&Qa(a.l)}function Ra(){var a=document.getElementById("chatWindow").getBoundingClientRect().top;O.forEach(function(b){var c=b.A,d=c.clientHeight;b=b.getBoundingClientRect();c.style.top=Math.max(0,Math.min(a-b.top,b.height-d-d/2))+"px"})}
-document.addEventListener("DOMContentLoaded",function(){ga();document.getElementById("chatWindow").addEventListener("click",Ma);window.addEventListener("hashchange",function(){document.location.hash&&"#"===document.location.hash[0]&&va()});document.getElementById("fileUploadCancel").addEventListener("click",function(a){a.preventDefault();document.getElementById("fileUploadError").classList.add("hidden");document.getElementById("fileUploadContainer").classList.add("hidden");document.getElementById("fileUploadInput").value=
+c.parentElement.classList.contains("slackmsg-hover")){if(d=b(a,c))d=parseFloat(d.split("_")[1]),(h=fa(d))&&c.classList.contains("slackmsg-hover-reply")?(X&&(X=null,Y()),V!==h&&(V=h,W())):h&&c.classList.contains("slackmsg-hover-reaction")?Oa.D(document.body,function(a){a&&Ia(G.id,h.id,a)}):h&&c.classList.contains("slackmsg-hover-edit")?(V&&(V=null,W()),X!==h&&(X=h,Y())):h&&c.classList.contains("slackmsg-hover-remove")&&(V&&(V=null,W()),X&&(X=null,Y()),Pa(h));break}c=c.parentElement}}
+function Na(a,b,c){function d(){var d=JSON.stringify({actions:[c],attachment_id:b.id,callback_id:b.callback_id,channel_id:f,is_ephemeral:a instanceof D,message_ts:a.id}),h=a.m,g=new FormData,k=new XMLHttpRequest;g.append("payload",d);g.append("service_id",h);k.open("POST","api/attachmentAction");k.send(g)}var f=G.id;c.confirm?sa(ra(new L(c.confirm.title,c.confirm.text),c.confirm.ok_text,c.confirm.dismiss_text),d).D():d()}function U(){document.getElementById("msgInput").focus()}
+function ya(){var a=document.location.hash.substr(1),b=F.a.f[a];b&&b!==G?Qa(b):(a=F.a.a[a])&&a.l&&Qa(a.l)}function Ra(){var a=document.getElementById("chatWindow").getBoundingClientRect().top;P.forEach(function(b){var c=b.A,d=c.clientHeight;b=b.getBoundingClientRect();c.style.top=Math.max(0,Math.min(a-b.top,b.height-d-d/2))+"px"})}
+document.addEventListener("DOMContentLoaded",function(){ga();document.getElementById("chatWindow").addEventListener("click",Ma);window.addEventListener("hashchange",function(){document.location.hash&&"#"===document.location.hash[0]&&ya()});document.getElementById("fileUploadCancel").addEventListener("click",function(a){a.preventDefault();document.getElementById("fileUploadError").classList.add("hidden");document.getElementById("fileUploadContainer").classList.add("hidden");document.getElementById("fileUploadInput").value=
 "";return!1});document.getElementById("fileUploadForm").addEventListener("submit",function(a){a.preventDefault();a=document.getElementById("fileUploadInput");var b=a.value;b&&(b=b.substr(b.lastIndexOf("\\")+1),Sa(b,a.files[0],function(a){var b=document.getElementById("fileUploadError");a?(b.textContent=a,b.classList.remove("hidden")):(b.classList.add("hidden"),document.getElementById("fileUploadInput").value="",document.getElementById("fileUploadContainer").classList.add("hidden"))}));return!1});
-document.getElementById("attachFile").addEventListener("click",function(a){a.preventDefault();G&&document.getElementById("fileUploadContainer").classList.remove("hidden");return!1});document.getElementById("msgForm").addEventListener("submit",function(a){a.preventDefault();a=document.getElementById("msgInput");G&&a.value&&Ta(a.value)&&(a.value="",U&&(U=null,V()),W&&(W=null,V()),document.getElementById("slashList").textContent="");T();return!1});window.addEventListener("blur",function(){window.hasFocus=
-!1});window.addEventListener("focus",function(){window.hasFocus=!0;P=0;G&&Da();T()});document.getElementById("chatWindow").addEventListener("scroll",Ra);var a=0;document.getElementById("msgInput").addEventListener("input",function(){if(G){var b=Date.now();a+3E3<b&&(F.a.b.c||G instanceof x)&&(Ua(),a=b);var b=[],c=this.value;if("/"===this.value[0]){var d=c.indexOf(" "),f=-1!==d,d=-1===d?c.length:d,c=c.substr(0,d),e;for(e in F.a.g.data){var h=F.a.g.data[e];(!f&&h.name.substr(0,d)===c||f&&h.name===c)&&
+document.getElementById("attachFile").addEventListener("click",function(a){a.preventDefault();G&&document.getElementById("fileUploadContainer").classList.remove("hidden");return!1});document.getElementById("msgForm").addEventListener("submit",function(a){a.preventDefault();a=document.getElementById("msgInput");G&&a.value&&Ta(a.value)&&(a.value="",V&&(V=null,W()),X&&(X=null,W()),document.getElementById("slashList").textContent="");U();return!1});window.addEventListener("blur",function(){window.hasFocus=
+!1});window.addEventListener("focus",function(){window.hasFocus=!0;Q=0;G&&Ga();U()});document.getElementById("chatWindow").addEventListener("scroll",Ra);var a=0;document.getElementById("msgInput").addEventListener("input",function(){if(G){var b=Date.now();a+3E3<b&&(F.a.b.c||G instanceof x)&&(Ua(),a=b);var b=[],c=this.value;if("/"===this.value[0]){var d=c.indexOf(" "),f=-1!==d,d=-1===d?c.length:d,c=c.substr(0,d),e;for(e in F.a.g.data){var h=F.a.g.data[e];(!f&&h.name.substr(0,d)===c||f&&h.name===c)&&
 b.push(h)}}b.sort(function(a,b){return a.B.localeCompare(b.B)||a.name.localeCompare(b.name)});var d=document.getElementById("slashList"),f=document.createDocumentFragment(),g;d.textContent="";e=0;for(c=b.length;e<c;e++)h=b[e],g!==h.B&&(g=h.B,f.appendChild(Va(h.B))),f.appendChild(Wa(h));d.appendChild(f)}});window.hasFocus=!0;(function(){var a=document.getElementById("emojiButton");if("makeEmoji"in window){var c=window.makeEmoji("smile");c?a.innerHTML="<span class='emoji-small'>"+c.outerHTML+"</span>":
-a.style.backgroundImage='url("smile.svg")';(c=window.makeEmoji("paperclip"))?document.getElementById("attachFile").innerHTML="<span class='emoji-small'>"+c.outerHTML+"</span>":document.getElementById("attachFile").style.backgroundImage='url("public/paperclip.svg")';a.addEventListener("click",function(){Oa.D(document.body,function(a){a&&(document.getElementById("msgInput").value+=":"+a+":");T()})})}else a.classList.add("hidden")})();Xa()});function Q(){var a=document.createElement("span"),b=document.createElement("span"),c=document.createElement("span"),d=document.createElement("span");a.className="typing-container";b.className="typing-dot1";c.className="typing-dot2";d.className="typing-dot3";b.textContent=c.textContent=d.textContent=".";a.appendChild(b);a.appendChild(c);a.appendChild(d);return a}var ua=function(){var a={};return function(b){var c=a[b];c||(c=a[b]=document.createElement("header"),c.textContent=b);return c}}();
+a.style.backgroundImage='url("smile.svg")';(c=window.makeEmoji("paperclip"))?document.getElementById("attachFile").innerHTML="<span class='emoji-small'>"+c.outerHTML+"</span>":document.getElementById("attachFile").style.backgroundImage='url("public/paperclip.svg")';a.addEventListener("click",function(){Oa.D(document.body,function(a){a&&(document.getElementById("msgInput").value+=":"+a+":");U()})})}else a.classList.add("hidden")})();Xa()});function R(){var a=document.createElement("span"),b=document.createElement("span"),c=document.createElement("span"),d=document.createElement("span");a.className="typing-container";b.className="typing-dot1";c.className="typing-dot2";d.className="typing-dot3";b.textContent=c.textContent=d.textContent=".";a.appendChild(b);a.appendChild(c);a.appendChild(d);return a}var xa=function(){var a={};return function(b){var c=a[b];c||(c=a[b]=document.createElement("header"),c.textContent=b);return c}}();
 function Ja(a,b,c){var d=document.createElement("div"),f=document.createElement("div"),e=document.createElement("div"),h=document.createElement("div"),g=document.createElement("span"),k=document.createElement("ul"),l=document.createElement("li"),q=document.createElement("ul"),m=document.createElement("ul"),p=F.a.a[b.m];d.id=a+"_"+b.j;d.className="slackmsg-item";e.className="slackmsg-ts";h.className="slackmsg-msg";g.className="slackmsg-author-name";k.className="slackmsg-hover";l.className="slackmsg-hover-reply";
-e.innerHTML=K.F(b.j);h.innerHTML=Y(b.b);g.textContent=p?p.name:b.h||"?";k.appendChild(l);if("makeEmoji"in window){var t=document.createElement("li"),u=window.makeEmoji("arrow_heading_down"),v=window.makeEmoji("smile"),z=window.makeEmoji("pencil2"),p=window.makeEmoji("x");t.className="slackmsg-hover-reaction";v?(t.classList.add("emoji-small"),t.appendChild(v)):t.style.backgroundImage='url("smile.svg")';u?(l.classList.add("emoji-small"),l.appendChild(u)):l.style.backgroundImage='url("repl.svg")';k.appendChild(t);
+e.innerHTML=K.F(b.j);h.innerHTML=O(b.b);g.textContent=p?p.name:b.h||"?";k.appendChild(l);if("makeEmoji"in window){var t=document.createElement("li"),u=window.makeEmoji("arrow_heading_down"),v=window.makeEmoji("smile"),z=window.makeEmoji("pencil2"),p=window.makeEmoji("x");t.className="slackmsg-hover-reaction";v?(t.classList.add("emoji-small"),t.appendChild(v)):t.style.backgroundImage='url("smile.svg")';u?(l.classList.add("emoji-small"),l.appendChild(u)):l.style.backgroundImage='url("repl.svg")';k.appendChild(t);
 b.m===F.a.b.id&&(l=document.createElement("li"),l.className="slackmsg-hover-edit",z?l.classList.add("emoji-small"):l.style.backgroundImage='url("edit.svg")',l.appendChild(z),k.appendChild(l),l=document.createElement("li"),l.className="slackmsg-hover-remove",p?l.classList.add("emoji-small"):l.style.backgroundImage='url("remove.svg")',l.appendChild(p),k.appendChild(l))}else l.style.backgroundImage='url("repl.svg")',b.m===F.a.b.id&&(l=document.createElement("li"),l.className="slackmsg-hover-edit",l.style.backgroundImage=
 'url("edit.svg")',k.appendChild(l),l=document.createElement("li"),l.className="slackmsg-hover-remove",l.style.backgroundImage='url("remove.svg")',k.appendChild(l));b instanceof D&&(p=document.createElement("span"),p.className="slackmsg-notice",p.textContent=K.J,f.appendChild(p));f.appendChild(g);f.appendChild(h);f.appendChild(e);f.appendChild(q);b.u&&(e=document.createElement("div"),e.innerHTML=K.u,e.className="slackmsg-edited",f.appendChild(e));f.appendChild(m);f.className="slackmsg-content";q.className=
-"slackmsg-attachments";m.className="slackmsg-reactions";if(!0!==c){if(b.c)for(var A in b.c){c=a;e=b.id;h=A;g=b.c[A];if(p=Ga(h)){for(var l=document.createElement("li"),z=document.createElement("a"),t=document.createElement("span"),u=document.createElement("span"),v=[],J=0,B=g.length;J<B;J++){var w=F.a.a[g[J]];w&&v.push(w.name)}v.sort();u.textContent=v.join(", ");t.appendChild(p);t.className="emoji-small";z.href="javascript:toggleReaction('"+c+"', '"+e+"', '"+h+"')";z.appendChild(t);z.appendChild(u);
+"slackmsg-attachments";m.className="slackmsg-reactions";if(!0!==c){if(b.c)for(var A in b.c){c=a;e=b.id;h=A;g=b.c[A];if(p=ua(h)){for(var l=document.createElement("li"),z=document.createElement("a"),t=document.createElement("span"),u=document.createElement("span"),v=[],J=0,B=g.length;J<B;J++){var w=F.a.a[g[J]];w&&v.push(w.name)}v.sort();u.textContent=v.join(", ");t.appendChild(p);t.className="emoji-small";z.href="javascript:toggleReaction('"+c+"', '"+e+"', '"+h+"')";z.appendChild(t);z.appendChild(u);
 l.className="slackmsg-reaction-item";l.appendChild(z);c=l}else console.warn("Reaction id not found: "+h),c=null;c&&m.appendChild(c)}a=0;for(m=b.a.length;a<m;a++)(A=b.a[a])&&(A=Ya(A,a))&&q.appendChild(A)}d.appendChild(f);d.appendChild(k);return d}function Za(a){var b={good:"#2fa44f",warning:"#de9e31",danger:"#d50200"};if(a){if("#"===a[0])return a;if(b[a])return b[a]}return"#e3e4e6"}
 function Ya(a,b){var c=document.createElement("li"),d=document.createElement("div"),f=document.createElement("div"),e=document.createElement("a"),h=document.createElement("div"),g=document.createElement("img"),k=document.createElement("a"),l=document.createElement("div"),q=document.createElement("div"),m=document.createElement("div"),p=document.createElement("img"),t=document.createElement("div");c.className="slackmsg-attachment";d.style.borderColor=Za(a.color||"");d.className="slackmsg-attachment-block";
-f.className="slackmsg-attachment-pretext";a.pretext?f.innerHTML=Y(a.pretext):f.classList.add("hidden");e.target="_blank";a.title?(e.innerHTML=Y(a.title),a.title_link&&(e.href=a.title_link),e.className="slackmsg-attachment-title"):e.className="hidden slackmsg-attachment-title";k.target="_blank";h.className="slackmsg-author";a.author_name&&(k.innerHTML=Y(a.author_name),k.href=a.author_link||"",k.className="slackmsg-author-name",g.className="slackmsg-author-img",a.author_icon&&(g.src=a.author_icon,h.appendChild(g)),
-h.appendChild(k));l.className="slackmsg-attachment-content";g=Y(a.text||"");q.className="slackmsg-attachment-text";g&&""!=g?q.innerHTML=g:q.classList.add("hidden");m.className="slackmsg-attachment-thumb";a.thumb_url?(g=document.createElement("img"),g.src=a.thumb_url,m.appendChild(g),d.classList.add("has-thumb"),a.video_html&&(m.dataset.video=a.video_html)):m.classList.add("hidden");p.className="slackmsg-attachment-img";a.image_url?p.src=a.image_url:p.classList.add("hidden");t.className="slackmsg-attachment-footer";
-a.footer&&(g=document.createElement("span"),g.className="slackmsg-attachment-footer-text",g.innerHTML=Y(a.footer),a.footer_icon&&(k=document.createElement("img"),k.src=a.footer_icon,k.className="slackmsg-attachment-footer-icon",t.appendChild(k)),t.appendChild(g));a.ts&&(g=document.createElement("span"),g.className="slackmsg-ts",g.innerHTML=K.F(a.ts),t.appendChild(g));l.appendChild(q);l.appendChild(m);d.appendChild(e);d.appendChild(h);d.appendChild(l);d.appendChild(p);if(a.fields&&a.fields.length){var u=
-document.createElement("ul");d.appendChild(u);u.className="slackmsg-attachment-fields";a.fields.forEach(function(a){var b=a.title||"",c=a.value||"";a=!!a["short"];var d=document.createElement("li"),e=document.createElement("div"),f=document.createElement("div");d.className="field";a||d.classList.add("field-long");e.className="field-title";e.textContent=b;f.className="field-text";f.innerHTML=Y(c);d.appendChild(e);d.appendChild(f);d&&u.appendChild(d)})}if(a.actions&&a.actions.length)for(e=document.createElement("ul"),
+f.className="slackmsg-attachment-pretext";a.pretext?f.innerHTML=O(a.pretext):f.classList.add("hidden");e.target="_blank";a.title?(e.innerHTML=O(a.title),a.title_link&&(e.href=a.title_link),e.className="slackmsg-attachment-title"):e.className="hidden slackmsg-attachment-title";k.target="_blank";h.className="slackmsg-author";a.author_name&&(k.innerHTML=O(a.author_name),k.href=a.author_link||"",k.className="slackmsg-author-name",g.className="slackmsg-author-img",a.author_icon&&(g.src=a.author_icon,h.appendChild(g)),
+h.appendChild(k));l.className="slackmsg-attachment-content";g=O(a.text||"");q.className="slackmsg-attachment-text";g&&""!=g?q.innerHTML=g:q.classList.add("hidden");m.className="slackmsg-attachment-thumb";a.thumb_url?(g=document.createElement("img"),g.src=a.thumb_url,m.appendChild(g),d.classList.add("has-thumb"),a.video_html&&(m.dataset.video=a.video_html)):m.classList.add("hidden");p.className="slackmsg-attachment-img";a.image_url?p.src=a.image_url:p.classList.add("hidden");t.className="slackmsg-attachment-footer";
+a.footer&&(g=document.createElement("span"),g.className="slackmsg-attachment-footer-text",g.innerHTML=O(a.footer),a.footer_icon&&(k=document.createElement("img"),k.src=a.footer_icon,k.className="slackmsg-attachment-footer-icon",t.appendChild(k)),t.appendChild(g));a.ts&&(g=document.createElement("span"),g.className="slackmsg-ts",g.innerHTML=K.F(a.ts),t.appendChild(g));l.appendChild(q);l.appendChild(m);d.appendChild(e);d.appendChild(h);d.appendChild(l);d.appendChild(p);if(a.fields&&a.fields.length){var u=
+document.createElement("ul");d.appendChild(u);u.className="slackmsg-attachment-fields";a.fields.forEach(function(a){var b=a.title||"",c=a.value||"";a=!!a["short"];var d=document.createElement("li"),e=document.createElement("div"),f=document.createElement("div");d.className="field";a||d.classList.add("field-long");e.className="field-title";e.textContent=b;f.className="field-text";f.innerHTML=O(c);d.appendChild(e);d.appendChild(f);d&&u.appendChild(d)})}if(a.actions&&a.actions.length)for(e=document.createElement("ul"),
 e.className="slackmsg-attachment-actions "+na,d.appendChild(e),h=0,l=a.actions.length;h<l;h++)(q=a.actions[h])&&(q=$a(b,h,q))&&e.appendChild(q);d.appendChild(t);c.appendChild(f);c.appendChild(d);return c}function $a(a,b,c){var d=document.createElement("li"),f=Za(c.style);d.textContent=c.text;f!==Za()&&(d.style.color=f);d.style.borderColor=f;d.dataset.P=a;d.dataset.O=b;d.className="slackmsg-attachment-actions-item "+M;return d}
-function za(a){var b=document.createElement("li"),c=document.createElement("span");c.textContent=a.name;b.appendChild(Q());b.appendChild(c);return b}function Va(a){var b=document.createElement("lh");b.textContent=a;b.className="slack-command-header";return b}
+function Ca(a){var b=document.createElement("li"),c=document.createElement("span");c.textContent=a.name;b.appendChild(R());b.appendChild(c);return b}function Va(a){var b=document.createElement("lh");b.textContent=a;b.className="slack-command-header";return b}
 function Wa(a){var b=document.createElement("li"),c=document.createElement("span"),d=document.createElement("span"),f=document.createElement("span");c.textContent=a.name;d.textContent=a.usage;f.textContent=a.a;b.appendChild(c);b.appendChild(d);b.appendChild(f);b.className="slack-command-item";c.className="slack-command-name";d.className="slack-command-usage";f.className="slack-command-desc";return b};var Oa=function(){function a(a,b){for(var c=a.target;c!==k&&c&&"LI"!==c.nodeName;)c=c.parentElement;c&&"LI"===c.nodeName&&c.id&&"emojibar-"===c.id.substr(0,9)?b(c.id.substr(9)):b(null)}function b(){if(!c())return!1;B&&B(null);return!0}function c(){return k.parentElement?(k.parentElement.removeChild(l),k.parentElement.removeChild(k),!0):!1}function d(a){var b=0,c;a=void 0===a?t.value:a;if(g()){var d=window.searchEmojis(a);c=f(d);for(var h in u)u[h].visible&&(u[h].visible=!1,m.removeChild(u[h].i));
 h=0;for(var l=c.length;h<l;h++){var k=c[h].name,w=u[k];if(!w){var w=u,A=k,q=k,k=window.makeEmoji(d[k]),B=document.createElement("span");B.appendChild(k);B.className="emoji-medium";k=e(q,B);w=w[A]=k}w.visible||(w.visible=!0,m.appendChild(w.i));b++}}for(h in v)v[h].visible&&(v[h].visible=!1,p.removeChild(v[h].i));c=f(F.a.h.data);h=0;for(l=c.length;h<l;h++)k=c[h].name,""!==a&&k.substr(0,a.length)!==a||"alias:"===F.a.h.data[k].substr(0,6)||(w=v[k],w||(d=v,A=w=k,k=F.a.h.data[k],q=document.createElement("span"),
 B=document.createElement("span"),q.className="emoji emoji-custom",q.style.backgroundImage='url("'+k+'")',B.appendChild(q),B.className="emoji-medium",k=e(A,B),w=d[w]=k),w.visible||(w.visible=!0,p.appendChild(w.i)),b++);return b}function f(a){var b=F.a.b.a.b,c=[],d;for(d in a){var e={name:d,K:0,count:0};a[d].names&&a[d].names.forEach(function(a){e.count+=b[a]||0});c.push(e)}return c=c.sort(function(a,b){var c=b.count-a.count;return c?c:a.K-b.K})}function e(a,b){var c=document.createElement("li");c.appendChild(b);
 c.className="emojibar-list-item";c.id="emojibar-"+a;return{visible:!1,i:c}}function h(a){var b=document.createElement("img"),c=document.createElement("div");b.src=a;c.appendChild(b);c.className="emojibar-header";return c}function g(){return"searchEmojis"in window}var k=document.createElement("div"),l=document.createElement("div"),q=document.createElement("div"),m=document.createElement("ul"),p=document.createElement("ul"),t=document.createElement("input"),u={},v={},z=document.createElement("div"),
 A=document.createElement("span"),J=document.createElement("span"),B;l.addEventListener("click",function(a){var c=k.getBoundingClientRect();(a.screenY<c.top||a.screenY>c.bottom||a.screenX<c.left||a.screenX>c.right)&&b()});l.className="emojibar-overlay";k.className="emojibar";q.className="emojibar-emojis";z.className="emojibar-detail";A.className="emojibar-detail-img";J.className="emojibar-detail-name";m.className=p.className="emojibar-list";t.className="emojibar-search";z.appendChild(A);z.appendChild(J);
 q.appendChild(h(window.emojiProviderHeader));q.appendChild(m);q.appendChild(h("emojicustom.png"));q.appendChild(p);k.appendChild(q);k.appendChild(z);k.appendChild(t);t.addEventListener("keyup",function(){d()});k.addEventListener("mousemove",function(b){a(b,function(a){var b=a?u[a]||v[a]:null;b?(A.innerHTML=b.i.outerHTML,J.textContent=":"+a+":"):(A.textContent="",J.textContent="")})});k.addEventListener("click",function(b){a(b,function(a){a&&c()&&B&&B(a)})});return{isSupported:g,D:function(a,b){return g()?
-(B=b,a.appendChild(l),a.appendChild(k),t.value="",d(),t.focus(),!0):!1},search:d,close:b}}();var F,R=[];function ab(){this.c=0;this.a=new ca;this.b={}}
+(B=b,a.appendChild(l),a.appendChild(k),t.value="",d(),t.focus(),!0):!1},search:d,close:b}}();var F,S=[];function ab(){this.c=0;this.a=new ca;this.b={}}
 ab.prototype.update=function(a){var b=Date.now();a.v&&(this.c=a.v);if(a["static"]){var c=this.a,d=a["static"],f=Date.now();if(d.users)for(var e=0,h=d.users.length;e<h;e++){var g=c.a[d.users[e].id];g||(g=c.a[d.users[e].id]=new H(d.users[e].id));g.update(d.users[e],f)}if(d.channels)for(e=0,h=d.channels.length;e<h;e++){g=c.f[d.channels[e].id];if(!g){var g=c.f,k=d.channels[e].id,l;l=d.channels[e];l=l.pv?new x(l.id,c.a[l.user]):new r(l.id);g=g[k]=l}g.update(d.channels[e],c,f)}d.emojis&&(c.h.data=d.emojis,
-c.h.version=f);if(void 0!==d.commands){c.g.data={};for(e in d.commands)c.g.data[e]=new aa(d.commands[e]);c.g.version=f}d.team&&(c.l||(c.l=new n(d.team.id)),c.l.update(d.team,f));c.s=Math.max(c.s,f);d.self&&(c.b=c.a[d.self.id]||null,c.b?(c.b.a||(c.b.a=new ba),c.b.a.update(d.self.prefs,f)):c.s=0);if(void 0!==d.typing)for(e in c.c={},d.typing){c.c[e]={};for(var q in d.typing[e])c.c[e][q]=f}}for(var m in this.a.f){var p=this.a.f[m];p.a===p.b&&(c=R.indexOf(p),-1!==c&&R.splice(c,1))}if(a.live){for(p in a.live)(m=
-this.b[p])?da(m,a.live[p],b):this.b[p]=new E(p,250,a.live[p],b);for(var t in a.live)(b=this.a.f[t])?(this.b[t].a.length&&(p=this.b[t],b.a=Math.max(b.a,p.a[p.a.length-1].j)),b.h||(bb(b,a.live[t]),G&&a.live[G.id]&&Ca())):F.c=0}a["static"]&&(ta(),a["static"].typing&&xa())};setInterval(function(){var a=F.a,b=Date.now(),c=!1,d;for(d in a.c){var f=!0,e;for(e in a.c[d])a.c[d][e]+3E3<b?(delete a.c[d][e],c=!0):f=!1;f&&(delete a.c[d],c=!0)}c&&xa()},1E3);
-function bb(a,b){if(a!==G||!window.hasFocus){var c=new RegExp("<@"+F.a.b.id),d=!1,f=!1,e=!1,h=!1;b.forEach(function(b){if(!(parseFloat(b.ts)<=a.b)){f=!0;var g;if(!(g=a instanceof x||b.b.match(c)))a:{g=F.a.b.a.a;for(var k=0,m=g.length;k<m;k++)if(-1!==b.b.indexOf(g[k])){g=!0;break a}g=!1}g&&(-1===R.indexOf(a)&&(e=!0,R.push(a)),d=!0);F.a.c[a.id]&&F.a.c[a.id][b.m]&&(F.a.c[a.id][b.m]=0,h=!0)}});if(f){S();var g=document.getElementById("room_"+a.id);g&&(g.classList.add("unread"),d&&g.classList.add("unreadHi"));
-e&&!window.hasFocus&&La()}}h&&xa()}function Da(){var a=G,b=R.indexOf(a);if(a.a>a.b){var c=new XMLHttpRequest;c.open("POST","api/markread?room="+a.id+"&ts="+a.a,!0);c.send(null);a.b=a.a}0<=b&&(R.splice(b,1),S());a=document.getElementById("room_"+a.id);a.classList.remove("unread");a.classList.remove("unreadHi")}F=new ab;var wa=function(){function a(a,b){b.sort(function(){return Math.random()-.5});for(var c=0,d=20;d<k-40;d+=q)for(var f=0;f+q<=l;f+=q)e(a,b[c],d,f),c++,c===b.length&&(b.sort(function(a,b){return a.C?b.C?Math.random()-.5:-1:1}),c=0)}function b(a,d){for(var e=0,f=a.length;e<f;e++)if(void 0===a[e].C){c(a[e].src,function(c){a[e].C=c;b(a,d)});return}var g=[];a.forEach(function(a){a.C&&g.push(a.C)});d(g)}function c(a,b){var c=new XMLHttpRequest;c.responseType="blob";c.onreadystatechange=function(){if(4===
+c.h.version=f);if(void 0!==d.commands){c.g.data={};for(e in d.commands)c.g.data[e]=new aa(d.commands[e]);c.g.version=f}d.team&&(c.l||(c.l=new n(d.team.id)),c.l.update(d.team,f));c.s=Math.max(c.s,f);d.self&&(c.b=c.a[d.self.id]||null,c.b?(c.b.a||(c.b.a=new ba),c.b.a.update(d.self.prefs,f)):c.s=0);if(void 0!==d.typing)for(e in c.c={},d.typing){c.c[e]={};for(var q in d.typing[e])c.c[e][q]=f}}for(var m in this.a.f){var p=this.a.f[m];p.a===p.b&&(c=S.indexOf(p),-1!==c&&S.splice(c,1))}if(a.live){for(p in a.live)(m=
+this.b[p])?da(m,a.live[p],b):this.b[p]=new E(p,250,a.live[p],b);for(var t in a.live)(b=this.a.f[t])?(this.b[t].a.length&&(p=this.b[t],b.a=Math.max(b.a,p.a[p.a.length-1].j)),b.h||(bb(b,a.live[t]),G&&a.live[G.id]&&Fa())):F.c=0}a["static"]&&(wa(),a["static"].typing&&Aa())};setInterval(function(){var a=F.a,b=Date.now(),c=!1,d;for(d in a.c){var f=!0,e;for(e in a.c[d])a.c[d][e]+3E3<b?(delete a.c[d][e],c=!0):f=!1;f&&(delete a.c[d],c=!0)}c&&Aa()},1E3);
+function bb(a,b){if(a!==G||!window.hasFocus){var c=new RegExp("<@"+F.a.b.id),d=!1,f=!1,e=!1,h=!1;b.forEach(function(b){if(!(parseFloat(b.ts)<=a.b)){f=!0;var g;if(!(g=a instanceof x||b.b.match(c)))a:{g=F.a.b.a.a;for(var k=0,m=g.length;k<m;k++)if(-1!==b.b.indexOf(g[k])){g=!0;break a}g=!1}g&&(-1===S.indexOf(a)&&(e=!0,S.push(a)),d=!0);F.a.c[a.id]&&F.a.c[a.id][b.m]&&(F.a.c[a.id][b.m]=0,h=!0)}});if(f){T();var g=document.getElementById("room_"+a.id);g&&(g.classList.add("unread"),d&&g.classList.add("unreadHi"));
+e&&!window.hasFocus&&La()}}h&&Aa()}function Ga(){var a=G,b=S.indexOf(a);if(a.a>a.b){var c=new XMLHttpRequest;c.open("POST","api/markread?room="+a.id+"&ts="+a.a,!0);c.send(null);a.b=a.a}0<=b&&(S.splice(b,1),T());a=document.getElementById("room_"+a.id);a.classList.remove("unread");a.classList.remove("unreadHi")}F=new ab;var za=function(){function a(a,b){b.sort(function(){return Math.random()-.5});for(var c=0,d=20;d<k-40;d+=q)for(var f=0;f+q<=l;f+=q)e(a,b[c],d,f),c++,c===b.length&&(b.sort(function(a,b){return a.C?b.C?Math.random()-.5:-1:1}),c=0)}function b(a,d){for(var e=0,f=a.length;e<f;e++)if(void 0===a[e].C){c(a[e].src,function(c){a[e].C=c;b(a,d)});return}var g=[];a.forEach(function(a){a.C&&g.push(a.C)});d(g)}function c(a,b){var c=new XMLHttpRequest;c.responseType="blob";c.onreadystatechange=function(){if(4===
 c.readyState)if(c.response){var a=new Image;a.onload=function(){var c=document.createElement("canvas");c.height=c.width=t;c=c.getContext("2d");c.drawImage(a,0,0,t,t);for(var c=c.getImageData(0,0,t,t),d=0,e=0;e<c.width*c.height*4;e+=4)c.data[e]=c.data[e+1]=c.data[e+2]=(c.data[e]+c.data[e+1]+c.data[e+2])/3,c.data[e+3]=50,d+=c.data[e];if(50>d/(c.height*c.width))for(e=0;e<c.width*c.height*4;e+=4)c.data[e]=c.data[e+1]=c.data[e+2]=255-c.data[e];b(c)};a.onerror=function(){b(null)};a.src=window.URL.createObjectURL(c.response)}else b(null)};
 c.open("GET",a,!0);c.send(null)}function d(){var a=g.createLinearGradient(0,0,0,l);a.addColorStop(0,"#4D394B");a.addColorStop(1,"#201820");g.fillStyle=a;g.fillRect(0,0,k,l);return g.getImageData(0,0,k,l)}function f(a,b){for(var c=(a.height-b.height)/2,d=0;d<b.height;d++)for(var e=0;e<b.width;e++){var f=b.data[4*(d*b.width+e)]/255,g=4*((d+c)*a.width+e+c);a.data[g]*=f;a.data[g+1]*=f;a.data[g+2]*=f}return a}function e(a,b,c,d){var e=Math.floor(d);a=[a.data[e*k*4+0],a.data[e*k*4+1],a.data[e*k*4+2]];g.fillStyle=
 "#"+(1.1*a[0]<<16|1.1*a[1]<<8|1.1*a[2]).toString(16);g.beginPath();g.moveTo(c+q/2,d+m);g.lineTo(c-m+q,d+q/2);g.lineTo(c+q/2,d-m+q);g.lineTo(c+m,d+q/2);g.closePath();g.fill();g.putImageData(f(g.getImageData(c+m,d+m,p,p),b),c+m,d+m)}var h=document.createElement("canvas"),g=h.getContext("2d"),k=h.width=250,l=h.height=290,q=(k-40)/3,m=.1*q,p=Math.floor(q-2*m),t=.5*p,u,v=[],z=!1;return function(c){if(u)c(u);else if(z)v.push(c);else{var e=d(),f=[];z=!0;v.push(c);for(var g in F.a.a)F.a.a[g].g||F.a.a[g].s||
-f.push({src:"api/avatar?user="+g});b(f,function(b){a(e,b);u=h.toDataURL();v.forEach(function(a){a(u)})})}}}();var Z=0,G=null,U=null,W=null;function cb(a){var b=new XMLHttpRequest;b.timeout=6E4;b.onreadystatechange=function(){if(4===b.readyState)if(b.status){var c=null,d=2===Math.floor(b.status/100);if(d){Z&&(Z=0,Aa(!0));c=b.response;try{c=JSON.parse(c)}catch(f){c=null}}else Z?(Z+=Math.floor((Z||5)/2),Z=Math.min(60,Z)):(Z=5,Aa(!1));a(d,c)}else Z&&(Z=0,Aa(!0)),cb(a)};b.open("GET","api?v="+F.c,!0);b.send(null)}function Ua(){var a=new XMLHttpRequest;a.open("POST","api/typing?room="+G.id,!0);a.send(null)}
-function db(a,b){a?(b&&F.update(b),Xa()):setTimeout(Xa,1E3*Z)}function Xa(){cb(db)}function Qa(a){G&&document.getElementById("room_"+G.id).classList.remove("selected");document.getElementById("room_"+a.id).classList.add("selected");document.body.classList.remove("no-room-selected");G=a;Ba();G.a&&!F.b[G.id]&&(a=new XMLHttpRequest,a.open("GET","api/hist?room="+G.id,!0),a.send(null))}
+f.push({src:"api/avatar?user="+g});b(f,function(b){a(e,b);u=h.toDataURL();v.forEach(function(a){a(u)})})}}}();var Z=0,G=null,V=null,X=null;function cb(a){var b=new XMLHttpRequest;b.timeout=6E4;b.onreadystatechange=function(){if(4===b.readyState)if(b.status){var c=null,d=2===Math.floor(b.status/100);if(d){Z&&(Z=0,Da(!0));c=b.response;try{c=JSON.parse(c)}catch(f){c=null}}else Z?(Z+=Math.floor((Z||5)/2),Z=Math.min(60,Z)):(Z=5,Da(!1));a(d,c)}else Z&&(Z=0,Da(!0)),cb(a)};b.open("GET","api?v="+F.c,!0);b.send(null)}function Ua(){var a=new XMLHttpRequest;a.open("POST","api/typing?room="+G.id,!0);a.send(null)}
+function db(a,b){a?(b&&F.update(b),Xa()):setTimeout(Xa,1E3*Z)}function Xa(){cb(db)}function Qa(a){G&&document.getElementById("room_"+G.id).classList.remove("selected");document.getElementById("room_"+a.id).classList.add("selected");document.body.classList.remove("no-room-selected");G=a;Ea();G.a&&!F.b[G.id]&&(a=new XMLHttpRequest,a.open("GET","api/hist?room="+G.id,!0),a.send(null))}
 function Sa(a,b,c){var d=G;new FileReader;var f=new FormData,e=new XMLHttpRequest;f.append("file",b);f.append("filename",a);e.onreadystatechange=function(){4===e.readyState&&(204===e.status?c(null):c(e.statusText))};e.open("POST","api/file?room="+d.id);e.send(f)}
-function Ta(a){if(W){var b=new XMLHttpRequest;b.open("PUT","api/msg?room="+G.id+"&ts="+W.id+"&text="+encodeURIComponent(a),!0);b.send(null);return!0}if("/"===a[0]){var c=a.indexOf(" "),b=-1===c?"":a.substr(c);return(a=F.a.g.data[a.substr(0,-1===c?void 0:c)])?(c=new XMLHttpRequest,c.open("POST","api/cmd?room="+G.id+"&cmd="+encodeURIComponent(a.name.substr(1))+"&args="+encodeURIComponent(b.trim()),!0),c.send(null),!0):!1}var b=G,c=U,d=new XMLHttpRequest;a="api/msg?room="+b.id+"&text="+encodeURIComponent(a);
+function Ta(a){if(X){var b=new XMLHttpRequest;b.open("PUT","api/msg?room="+G.id+"&ts="+X.id+"&text="+encodeURIComponent(a),!0);b.send(null);return!0}if("/"===a[0]){var c=a.indexOf(" "),b=-1===c?"":a.substr(c);return(a=F.a.g.data[a.substr(0,-1===c?void 0:c)])?(c=new XMLHttpRequest,c.open("POST","api/cmd?room="+G.id+"&cmd="+encodeURIComponent(a.name.substr(1))+"&args="+encodeURIComponent(b.trim()),!0),c.send(null),!0):!1}var b=G,c=V,d=new XMLHttpRequest;a="api/msg?room="+b.id+"&text="+encodeURIComponent(a);
 if(c){var f=F.a.a[c.m],e="Message";"C"===b.id[0]?e="Channel message":"D"===b.id[0]?e="Direct message":"G"===b.id[0]&&(e="Group message");a+="&attachments="+encodeURIComponent(JSON.stringify([{fallback:c.b,author_name:"<@"+f.id+"|"+f.name+">",author_icon:f.b.small,text:c.b,footer:e,ts:c.j}]))}d.open("POST",a,!0);d.send(null);return!0}function Pa(a){var b=new XMLHttpRequest;b.open("DELETE","api/msg?room="+G.id+"&ts="+a.id,!0);b.send(null)}
-function Fa(a,b,c){var d=new XMLHttpRequest;d.open("POST","api/reaction?room="+a+"&msg="+b+"&reaction="+encodeURIComponent(c),!0);d.send(null)};function Ia(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0};
+function Ia(a,b,c){var d=new XMLHttpRequest;d.open("POST","api/reaction?room="+a+"&msg="+b+"&reaction="+encodeURIComponent(c),!0);d.send(null)};function va(a){for(var b in a)if(a.hasOwnProperty(b))return!1;return!0};