浏览代码

[add][Closes #38] List available slash commands when starting typing

B Thibault 8 年之前
父节点
当前提交
0b5bb9e356
共有 5 个文件被更改,包括 117 次插入54 次删除
  1. 7 0
      cli/resources.js
  2. 47 1
      cli/ui.js
  3. 1 0
      srv/public/index.html
  4. 55 53
      srv/public/slack.min.js
  5. 7 0
      srv/public/style.css

+ 7 - 0
cli/resources.js

@@ -10,6 +10,7 @@ var R = {
         ,typing: "whoistyping"
         ,message: {
             form: "msgForm"
+            ,slashComplete: "slashList"
             ,input: "msgInput"
             ,replyTo: "replyToContainer"
             ,file: {
@@ -46,6 +47,12 @@ var R = {
             ,medium: "emoji-medium"
             ,custom: "emoji-custom"
         }
+        ,commands: {
+            item: "slack-command-item"
+            ,name: "slack-command-name"
+            ,usage: "slack-command-usage"
+            ,desc: "slack-command-desc"
+        }
         ,emojibar: {
             container: "emojibar"
             ,emojis: "emojibar-emojis"

+ 47 - 1
cli/ui.js

@@ -971,6 +971,31 @@ function setRoomFromHashBang() {
         selectRoom(user.ims);
 }
 
+/**
+ * @param {SlackCommand} cmd
+ * @return {Element}
+**/
+function createSlashAutocompleteDom(cmd) {
+    var li = document.createElement("li")
+        ,name = document.createElement("span")
+        ,usage = document.createElement("span")
+        ,desc = document.createElement("span");
+
+    name.textContent = cmd.name;
+    usage.textContent = cmd.usage;
+    desc.textContent = cmd.desc;
+
+    li.appendChild(name);
+    li.appendChild(usage);
+    li.appendChild(desc);
+
+    li.className = R.klass.commands.item;
+    name.className = R.klass.commands.name;
+    usage.className = R.klass.commands.usage;
+    desc.className = R.klass.commands.desc;
+    return li;
+}
+
 document.addEventListener('DOMContentLoaded', function() {
     initLang();
     document.getElementById(R.id.currentRoom.content).addEventListener("click", chatClickDelegate);
@@ -1028,6 +1053,7 @@ document.addEventListener('DOMContentLoaded', function() {
                     EDITING = null;
                     onReplyingToUpdated();
                 }
+                document.getElementById(R.id.message.slashComplete).textContent = '';
             }
         }
         focusInput();
@@ -1045,13 +1071,33 @@ document.addEventListener('DOMContentLoaded', function() {
     });
 
     var lastKeyDown = 0;
-    document.getElementById(R.id.message.input).addEventListener('keypress', function() {
+    document.getElementById(R.id.message.input).addEventListener('input', function() {
         if (SELECTED_ROOM) {
             var now = Date.now();
             if (lastKeyDown + 3000 < now) {
                 sendTyping(SELECTED_ROOM);
                 lastKeyDown = now;
             }
+            var commands = []
+                ,input = this.value;
+            if (this.value[0] === '/') {
+                var endCmd = input.indexOf(' ');
+                endCmd = endCmd === -1 ? input.length: endCmd;
+                var inputCmd = input.substr(0, endCmd);
+                for (var i in SLACK.context.commands.data) {
+                    var currentCmd = SLACK.context.commands.data[i]
+                    if (currentCmd.name.substr(0, endCmd) === inputCmd)
+                        commands.push(currentCmd);
+                }
+            }
+            if (commands.length > 5) commands = []; // Do not display to mush at once
+            commands.sort(function(a, b) { return a.name.localeCompare(b.name); });
+            var slashDom = document.getElementById(R.id.message.slashComplete)
+                ,slashFrag = document.createDocumentFragment();
+            slashDom.textContent = '';
+            for (var i =0, nbCmd = commands.length; i < nbCmd; i++)
+                slashFrag.appendChild(createSlashAutocompleteDom(commands[i]));
+            slashDom.appendChild(slashFrag);
         }
     });
 

+ 1 - 0
srv/public/index.html

@@ -19,6 +19,7 @@
             <div class="slack-chat-content" id="chatWindow"></div>
             <div class="slack-chat-whoistyping" id="whoistyping"></div>
             <div id="replyToContainer" class="replyto-container"></div>
+            <ul id="slashList" class="slack-command-list"></ul>
             <div class="slack-chat-control">
                 <form id="msgForm" class="msgform">
                     <input type="text" id="msgInput" class="msgform-input" autocomplete="off" />

+ 55 - 53
srv/public/slack.min.js

@@ -1,66 +1,68 @@
 function aa(a){this.id=a;this.a={W:"",Y:"",$:"",aa:"",P:"",R:"",T:"",ba:""};this.version=0}function ba(a){this.id=a;this.a={};this.version=0}function ca(a){this.id=a;this.a={};this.version=0}function da(a,b){this.id=a;this.c=b;this.version=0}function ea(a){this.id=a;this.a={U:"",V:"",o:"",B:"",S:"",Z:""};this.f={};this.c=this.b=null;this.version=0}function fa(){this.b={};this.a=[]}
-function ga(a,b,c){a.b=JSON.parse(b.emoji_use);b.highlight_words?a.a=(b.highlight_words||"").split(",").filter(function(a){return""!==a.trim()}):b.highlights&&(a.a=b.highlights);a.version=Math.max(a.version,c)}function ha(a){this.id=a;this.a={X:"",o:"",B:""};this.c=this.b=null;this.version=0;this.g=!1}function ia(a){this.name=a.name;this.type=a.type;this.usage=a.usage}
-function n(){this.h=null;this.A={};this.D={};this.G={};this.b={};this.a=null;this.C={};this.f={version:0,data:{}};this.g={version:0,data:{}};this.c={};this.J=0}function q(a,b){return a.b[b]||a.C[b]||null}function z(a,b){return a.A[b]||a.G[b]||a.D[b]||null}"undefined"!==typeof module&&(module.O.ca=n);function ja(a,b){this.j=a.user||a.bot_id;this.g=a.username;this.id=a.ts;this.b=parseFloat(a.ts);this.text=a.text||"";this.f=a.attachments||[];this.l=!!a.edited;this.c=a.removed||!1;this.h="me_message"===a.subtype||a.isMeMessage;this.a={};this.version=b;var c=this;a.reactions&&a.reactions.forEach(function(a){c.a[a.name]=[];a.users.forEach(function(b){c.a[a.name].push(b)})})}
-function ka(a,b,c){b?(a.text=b.text||"",b.attachments&&(a.f=b.attachments),a.l=!!b.edited,a.c=!!b.removed,b.reactions&&(a.a={},b.reactions.forEach(function(b){a.a[b.name]=[];b.users.forEach(function(c){a.a[b.name].push(c)})}))):a.c=!0;a.version=c}function A(a,b,c,e){this.id="string"===typeof a?a:a.id;this.a=[];this.b=b;c&&C(this,c,e)}
-function la(a,b,c,e){var g=!1;a.a[b]&&(1===a.a[b].length&&a.a[b][0]===c?(delete a.a[b],g=!0):a.a[b]=a.a[b].filter(function(a){return a!==c?!1:g=!0}));g&&(a.version=e)}function C(a,b,c){var e=0;b.forEach(function(a){e=Math.max(this.push(a,c),e)}.bind(a));ma(a)}
-A.prototype.push=function(a,b){if(a.type&&"message"!==a.type)if("reaction_added"===a.type){var c=D(this,a.item.ts);if(c){var e=a.reaction,g=a.user;c.a[e]||(c.a[e]=[]);c.a[e].push(g);c.version=b}}else if("reaction_removed"===a.type)(c=D(this,a.item.ts))&&la(c,a.reaction,a.user,b);else return 0;else{c=!1;e=a.ts;g=a;"message_changed"===a.subtype&&a.previous_message?(e=a.previous_message.ts,g=a.message):"message_deleted"===a.subtype&&a.previous_message&&(e=a.previous_message.ts,g=null);for(var d=0,p=
-this.a.length;d<p;d++)if(this.a[d].id===e){ka(this.a[d],g,b);c=!0;break}c||this.a.push(new ja(a,b))}for(;this.a.length>this.b;)this.a.shift();return b};function na(a){for(var b=E.b[F.id],c=0,e=b.a.length;c<e&&a>=b.a[c].b;c++)if(b.a[c].b===a)return b.a[c];return null}function D(a,b){for(var c=0,e=a.a.length;c<e;c++)if(a.a[c].id==b)return a.a[c];return null}function ma(a){a.a.sort(function(a,c){return a.b-c.b})}"undefined"!==typeof module&&(module.O.da=A);var G={},H;function oa(){var a;if(!a){for(var b=0,c=navigator.languages.length;b<c;b++)if(G.hasOwnProperty(navigator.languages[b])){a=navigator.languages[b];break}a||(a="en")}H=G[a];console.log("Loading language pack: "+a);if(H.i)for(b in H.i)document.getElementById(b).textContent=H.i[b]};G.fr={N:"Utilisateur inconnu",M:"Channel inconnu",I:"Nouveau message",H:"Reseau",l:"edit&eacute;",F:function(a){return 1===a.length?a[0]+" est en train d'\u00e9crire":a.join(", ")+" sont en train d'\u00e9crire"},w:function(a){"string"!==typeof a&&(a=parseFloat(a));var b=new Date,c=new Date;a=new Date(1E3*a);b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0);c.setTime(b.getTime());c.setDate(c.getDate()-1);return a.getTime()>b.getTime()?a.toLocaleTimeString():a.getTime()>c.getTime()?
+function ga(a,b,c){a.b=JSON.parse(b.emoji_use);b.highlight_words?a.a=(b.highlight_words||"").split(",").filter(function(a){return""!==a.trim()}):b.highlights&&(a.a=b.highlights);a.version=Math.max(a.version,c)}function ha(a){this.id=a;this.a={X:"",o:"",B:""};this.c=this.b=null;this.version=0;this.g=!1}function ia(a){this.a=a.desc;this.name=a.name;this.type=a.type;this.usage=a.usage}
+function n(){this.h=null;this.A={};this.D={};this.G={};this.b={};this.a=null;this.C={};this.g={version:0,data:{}};this.f={version:0,data:{}};this.c={};this.J=0}function q(a,b){return a.b[b]||a.C[b]||null}function z(a,b){return a.A[b]||a.G[b]||a.D[b]||null}"undefined"!==typeof module&&(module.O.ca=n);function ja(a,b){this.j=a.user||a.bot_id;this.g=a.username;this.id=a.ts;this.b=parseFloat(a.ts);this.text=a.text||"";this.f=a.attachments||[];this.l=!!a.edited;this.c=a.removed||!1;this.h="me_message"===a.subtype||a.isMeMessage;this.a={};this.version=b;var c=this;a.reactions&&a.reactions.forEach(function(a){c.a[a.name]=[];a.users.forEach(function(b){c.a[a.name].push(b)})})}
+function ka(a,b,c){b?(a.text=b.text||"",b.attachments&&(a.f=b.attachments),a.l=!!b.edited,a.c=!!b.removed,b.reactions&&(a.a={},b.reactions.forEach(function(b){a.a[b.name]=[];b.users.forEach(function(c){a.a[b.name].push(c)})}))):a.c=!0;a.version=c}function A(a,b,c,d){this.id="string"===typeof a?a:a.id;this.a=[];this.b=b;c&&C(this,c,d)}
+function la(a,b,c,d){var g=!1;a.a[b]&&(1===a.a[b].length&&a.a[b][0]===c?(delete a.a[b],g=!0):a.a[b]=a.a[b].filter(function(a){return a!==c?!1:g=!0}));g&&(a.version=d)}function C(a,b,c){var d=0;b.forEach(function(a){d=Math.max(this.push(a,c),d)}.bind(a));ma(a)}
+A.prototype.push=function(a,b){if(a.type&&"message"!==a.type)if("reaction_added"===a.type){var c=D(this,a.item.ts);if(c){var d=a.reaction,g=a.user;c.a[d]||(c.a[d]=[]);c.a[d].push(g);c.version=b}}else if("reaction_removed"===a.type)(c=D(this,a.item.ts))&&la(c,a.reaction,a.user,b);else return 0;else{c=!1;d=a.ts;g=a;"message_changed"===a.subtype&&a.previous_message?(d=a.previous_message.ts,g=a.message):"message_deleted"===a.subtype&&a.previous_message&&(d=a.previous_message.ts,g=null);for(var e=0,p=
+this.a.length;e<p;e++)if(this.a[e].id===d){ka(this.a[e],g,b);c=!0;break}c||this.a.push(new ja(a,b))}for(;this.a.length>this.b;)this.a.shift();return b};function na(a){for(var b=E.b[F.id],c=0,d=b.a.length;c<d&&a>=b.a[c].b;c++)if(b.a[c].b===a)return b.a[c];return null}function D(a,b){for(var c=0,d=a.a.length;c<d;c++)if(a.a[c].id==b)return a.a[c];return null}function ma(a){a.a.sort(function(a,c){return a.b-c.b})}"undefined"!==typeof module&&(module.O.da=A);var G={},H;function oa(){var a;if(!a){for(var b=0,c=navigator.languages.length;b<c;b++)if(G.hasOwnProperty(navigator.languages[b])){a=navigator.languages[b];break}a||(a="en")}H=G[a];console.log("Loading language pack: "+a);if(H.i)for(b in H.i)document.getElementById(b).textContent=H.i[b]};G.fr={N:"Utilisateur inconnu",M:"Channel inconnu",I:"Nouveau message",H:"Reseau",l:"edit&eacute;",F:function(a){return 1===a.length?a[0]+" est en train d'\u00e9crire":a.join(", ")+" sont en train d'\u00e9crire"},w:function(a){"string"!==typeof a&&(a=parseFloat(a));var b=new Date,c=new Date;a=new Date(1E3*a);b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0);c.setTime(b.getTime());c.setDate(c.getDate()-1);return a.getTime()>b.getTime()?a.toLocaleTimeString():a.getTime()>c.getTime()?
 "hier, "+a.toLocaleTimeString():a.toLocaleString()},i:{fileUploadCancel:"Annuler",neterror:"Impossible de se connecter au chat !"}};G.en={N:"Unknown member",M:"Unknown channel",I:"New message",H:"Network",l:"edited",F:function(a){return 1===a.length?a[0]+" is typing":a.join(", ")+" are typing"},w:function(a){"string"!==typeof a&&(a=parseFloat(a));var b=new Date,c=new Date;a=new Date(1E3*a);b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0);c.setTime(b.getTime());c.setDate(c.getDate()-1);return a.getTime()>b.getTime()?a.toLocaleTimeString():a.getTime()>c.getTime()?"yesterday, "+a.toLocaleTimeString():a.toLocaleString()},
-i:{fileUploadCancel:"Cancel",neterror:"Cannot connect to chat !"}};var I=null,J=null,K=0;function L(){var a=document.createElement("span"),b=document.createElement("span"),c=document.createElement("span"),e=document.createElement("span");a.className="typing-container";b.className="typing-dot1";c.className="typing-dot2";e.className="typing-dot3";b.textContent=c.textContent=e.textContent=".";a.appendChild(b);a.appendChild(c);a.appendChild(e);return a}
+i:{fileUploadCancel:"Cancel",neterror:"Cannot connect to chat !"}};var I=null,J=null,K=0;function L(){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}
 function pa(){var a=document.createDocumentFragment(),b=E.a.a?Object.keys(E.a.a.f):[];b.sort(function(a,b){return a[0]!==b[0]?a[0]-b[0]:z(E.a,a).name.localeCompare(z(E.a,b).name)});b.forEach(function(b){b=z(E.a,b);if(!b.b){var c=document.createElement("li"),g=document.createElement("a");c.id=b.id;g.href="#"+b.id;"D"===b.id[0]?c.className="slack-context-room slack-ims":"G"===b.id[0]?c.className="slack-context-room slack-group":"C"===b.id[0]&&(c.className="slack-context-room slack-channel");F===b&&
 c.classList.add("selected");g.textContent=b.name;c.appendChild(L());c.appendChild(g);M[b.id]&&(M[b.id].m&&c.classList.add("unreadHi"),M[b.id].u&&c.classList.add("unread"));c&&a.appendChild(c)}});b=E.a.b?Object.keys(E.a.b):[];b.sort(function(a,b){return E.a.b[a].name.localeCompare(E.a.b[b].name)});b.forEach(function(b){b=q(E.a,b);if(!b.h){b=b.b;var c=document.createElement("li"),g=document.createElement("a");c.id=b.id;g.href="#"+b.id;c.className="slack-context-room slack-ims";g.textContent=b.c.name;
 c.appendChild(L());c.appendChild(g);b.c.g||c.classList.add("away");F===b&&c.classList.add("selected");M[b.id]&&(M[b.id].m&&c.classList.add("unreadHi"),M[b.id].u&&c.classList.add("unread"));c&&a.appendChild(c)}});document.getElementById("chanList").textContent="";document.getElementById("chanList").appendChild(a);N();O();qa(function(a){document.getElementById("slackCtx").style.backgroundImage="url("+a+")"})}
-function P(){var a=E.a.c,b;for(b in E.a.a.f)if(!E.a.a.f[b].b){var c=document.getElementById(b);a[b]?c.classList.add("slack-context-typing"):c.classList.remove("slack-context-typing")}for(var e in E.a.b)(b=E.a.b[e].b)&&!b.b&&(c=document.getElementById(b.id),a[b.id]?c.classList.add("slack-context-typing"):c.classList.remove("slack-context-typing"));if(F&&a[F.id]){c=[];e=!1;for(var g in a[F.id])(a=q(E.a,g))?c.push(a.name):e=!0;e&&(E.c=0);document.getElementById("whoistyping").textContent=H.F(c)}else document.getElementById("whoistyping").textContent=
+function P(){var a=E.a.c,b;for(b in E.a.a.f)if(!E.a.a.f[b].b){var c=document.getElementById(b);a[b]?c.classList.add("slack-context-typing"):c.classList.remove("slack-context-typing")}for(var d in E.a.b)(b=E.a.b[d].b)&&!b.b&&(c=document.getElementById(b.id),a[b.id]?c.classList.add("slack-context-typing"):c.classList.remove("slack-context-typing"));if(F&&a[F.id]){c=[];d=!1;for(var g in a[F.id])(a=q(E.a,g))?c.push(a.name):d=!0;d&&(E.c=0);document.getElementById("whoistyping").textContent=H.F(c)}else document.getElementById("whoistyping").textContent=
 ""}function Q(a){a?document.body.classList.remove("no-network"):document.body.classList.add("no-network");O()}
 function R(){if(I){document.body.classList.add("replyingTo");var a=document.getElementById("replyToContainer"),b=document.createElement("a");b.addEventListener("click",function(){I=null;R()});b.className="replyto-close";b.textContent="x";a.textContent="";a.appendChild(b);a.appendChild(S("reply_"+F.id,I,!0))}else document.body.classList.remove("replyingTo"),document.getElementById("replyToContainer").textContent="";T()}
 function U(){if(J){document.body.classList.add("replyingTo");var a=document.getElementById("replyToContainer"),b=document.createElement("a");b.addEventListener("click",function(){J=null;U()});b.className="replyto-close";b.textContent="x";a.textContent="";a.appendChild(b);a.appendChild(S("edit_"+F.id,J,!0));document.getElementById("msgInput").value=J.text}else document.body.classList.remove("replyingTo"),document.getElementById("replyToContainer").textContent="";T()}
-function ra(a,b,c,e){var g=V(c);if(g){for(var d=document.createElement("li"),p=document.createElement("a"),h=document.createElement("span"),l=document.createElement("span"),k=[],f=0,m=e.length;f<m;f++){var u=q(E.a,e[f]);u&&k.push(u.name)}k.sort();l.textContent=k.join(", ");h.appendChild(g);h.className="emoji-small";p.href="javascript:toggleReaction('"+a+"', '"+b+"', '"+c+"')";p.appendChild(h);p.appendChild(l);d.className="slackmsg-reaction-item";d.appendChild(p);return d}return null}
-window.toggleReaction=function(a,b,c){var e=E.b[a];if(e&&(e=D(e,b))){var g=E.a.a.id;e.a[c]&&-1!==e.a[c].indexOf(g)?(e=new XMLHttpRequest,e.open("DELETE","api/reaction?room="+a+"&msg="+b+"&reaction="+encodeURIComponent(c),!0),e.send(null)):W(a,b,c)}};
-function sa(a,b,c){var e=document.createElement("div"),g=document.createElement("div"),d=document.createElement("div"),p=document.createElement("div"),h=document.createElement("img"),l=document.createElement("span"),k=document.createElement("ul"),f=document.createElement("li"),m=document.createElement("ul"),u=document.createElement("ul"),r=q(E.a,b.j);e.id=a+"_"+b.b;e.className="slackmsg-item";d.className="slackmsg-ts";p.className="slackmsg-msg";h.className="slackmsg-author-img";l.className="slackmsg-author-name";
-k.className="slackmsg-hover";f.className="slackmsg-hover-reply";d.innerHTML=H.w(b.b);p.innerHTML=X(b.text);l.textContent=r?r.name:b.g||"?";h.src=r?r.a.o:"";k.appendChild(f);if("makeEmoji"in window){var v=document.createElement("li"),y=window.makeEmoji("arrow_heading_down"),B=window.makeEmoji("smile"),x=window.makeEmoji("pencil2"),r=window.makeEmoji("x");v.className="slackmsg-hover-reaction";B?(v.classList.add("emoji-small"),v.appendChild(B)):v.style.backgroundImage='url("smile.svg")';y?(f.classList.add("emoji-small"),
+function ra(a,b,c,d){var g=V(c);if(g){for(var e=document.createElement("li"),p=document.createElement("a"),h=document.createElement("span"),l=document.createElement("span"),k=[],f=0,m=d.length;f<m;f++){var u=q(E.a,d[f]);u&&k.push(u.name)}k.sort();l.textContent=k.join(", ");h.appendChild(g);h.className="emoji-small";p.href="javascript:toggleReaction('"+a+"', '"+b+"', '"+c+"')";p.appendChild(h);p.appendChild(l);e.className="slackmsg-reaction-item";e.appendChild(p);return e}return null}
+window.toggleReaction=function(a,b,c){var d=E.b[a];if(d&&(d=D(d,b))){var g=E.a.a.id;d.a[c]&&-1!==d.a[c].indexOf(g)?(d=new XMLHttpRequest,d.open("DELETE","api/reaction?room="+a+"&msg="+b+"&reaction="+encodeURIComponent(c),!0),d.send(null)):W(a,b,c)}};
+function sa(a,b,c){var d=document.createElement("div"),g=document.createElement("div"),e=document.createElement("div"),p=document.createElement("div"),h=document.createElement("img"),l=document.createElement("span"),k=document.createElement("ul"),f=document.createElement("li"),m=document.createElement("ul"),u=document.createElement("ul"),r=q(E.a,b.j);d.id=a+"_"+b.b;d.className="slackmsg-item";e.className="slackmsg-ts";p.className="slackmsg-msg";h.className="slackmsg-author-img";l.className="slackmsg-author-name";
+k.className="slackmsg-hover";f.className="slackmsg-hover-reply";e.innerHTML=H.w(b.b);p.innerHTML=X(b.text);l.textContent=r?r.name:b.g||"?";h.src=r?r.a.o:"";k.appendChild(f);if("makeEmoji"in window){var v=document.createElement("li"),y=window.makeEmoji("arrow_heading_down"),B=window.makeEmoji("smile"),x=window.makeEmoji("pencil2"),r=window.makeEmoji("x");v.className="slackmsg-hover-reaction";B?(v.classList.add("emoji-small"),v.appendChild(B)):v.style.backgroundImage='url("smile.svg")';y?(f.classList.add("emoji-small"),
 f.appendChild(y)):f.style.backgroundImage='url("repl.svg")';k.appendChild(v);b.j===E.a.a.id&&(f=document.createElement("li"),f.className="slackmsg-hover-edit",x?f.classList.add("emoji-small"):f.style.backgroundImage='url("edit.svg")',f.appendChild(x),k.appendChild(f),f=document.createElement("li"),f.className="slackmsg-hover-remove",r?f.classList.add("emoji-small"):f.style.backgroundImage='url("remove.svg")',f.appendChild(r),k.appendChild(f))}else f.style.backgroundImage='url("repl.svg")',b.j===E.a.a.id&&
-(f=document.createElement("li"),f.className="slackmsg-hover-edit",f.style.backgroundImage='url("edit.svg")',k.appendChild(f),f=document.createElement("li"),f.className="slackmsg-hover-remove",f.style.backgroundImage='url("remove.svg")',k.appendChild(f));e.appendChild(h);g.appendChild(l);g.appendChild(p);g.appendChild(d);g.appendChild(m);b.l&&(d=document.createElement("div"),d.textContent=H.l,d.className="slackmsg-edited",g.appendChild(d));g.appendChild(u);g.className="slackmsg-content";m.className=
-"slackmsg-attachments";u.className="slackmsg-reactions";if(!0!==c){if(b.a)for(var w in b.a)(c=ra(a,b.id,w,b.a[w]))&&u.appendChild(c);b.f.forEach(function(a){var b=document.createElement("li"),c=document.createElement("div"),e=document.createElement("div"),d=document.createElement("a"),g=document.createElement("div"),f=document.createElement("img"),h=document.createElement("a"),k=document.createElement("div"),y=document.createElement("div"),l=document.createElement("img"),t=document.createElement("img"),
-p=document.createElement("div"),r=document.createElement("img"),B=document.createElement("span"),x=document.createElement("span");b.className="slackmsg-attachment";var w="#e3e4e6";a.color&&("#"===a.color[0]?w=a.color[0]:"good"===a.color?w="#2fa44f":"warning"===a.color?w="#de9e31":"danger"===a.color&&(w="#d50200"));c.style.borderColor=w;e.className="slackmsg-attachment-pretext";a.pretext?e.innerHTML=X(a.pretext):e.classList.add("hidden");d.target="_blank";a.title?(d.innerHTML=X(a.title),a.title_link&&
-(d.href=a.title_link),d.className="slackmsg-attachment-title"):d.className="hidden slackmsg-attachment-title";h.target="_blank";g.className="slackmsg-author";a.author_name?(h.innerHTML=X(a.author_name),h.href=a.author_link||"",h.className="slackmsg-author-name",f.className="slackmsg-author-img",a.author_icon?f.src=a.author_icon:f.classList.add("hidden")):g.classList.add("hidden");y.innerHTML=X(a.text||"");y.a="slackmsg-attachment-text";l.className="slackmsg-attachment-thumb";a.thumb_url?l.src=a.thumb_url:
-l.classList.add("hidden");t.className="slackmsg-attachment-img";a.image_url?t.src=a.image_url:t.classList.add("hidden");p.className="slackmsg-attachment-footer";B.className="slackmsg-attachment-footer-text";r.className="slackmsg-attachment-footer-icon";a.footer?(B.innerHTML=X(a.footer),a.footer_icon?r.src=a.footer_icon:r.classList.add("hidden")):(r.classList.add("hidden"),B.classList.add("hidden"));x.className="slackmsg-ts";a.ts?x.innerHTML=H.w(a.ts):x.classList.add("hidden");g.appendChild(f);g.appendChild(h);
-k.appendChild(y);k.appendChild(l);p.appendChild(r);p.appendChild(B);p.appendChild(x);c.appendChild(d);c.appendChild(g);c.appendChild(k);c.appendChild(t);c.appendChild(p);b.appendChild(e);b.appendChild(c);b&&m.appendChild(b)})}e.appendChild(g);e.appendChild(k);return e}
-function V(a){a:{for(var b=a,c={};!c[b];){if(a=E.a.f[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 ta(a){return a.replace(/:([^ \t:]+):/g,function(b,c){var e=V(c);if(e){var g=document.createElement("span");g.className=b===a?"emoji-medium":"emoji-small";g.appendChild(e);return g.outerHTML}return b})}
-function X(a){a=a.split(/\r?\n/g);for(var b=0,c=a.length;b<c;b++){for(var e=a[b].trim(),g="",d={},p=!1,h=0,e=e.replace(RegExp("<([@#]?)([^>]*)>","g"),function(a,b,c){c=c.split("|");if("@"===b)c[1]?"@"!==c[1][0]&&(c[1]="@"+c[1]):(a=q(E.a,c[0]),c[1]=a?"@"+a.name:H.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=z(E.a,c[0]),c[1]=a?"#"+a.name:H.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>"}),e=ta(e),l=e.length,k=function(a,b,c){for(;a[b];){var e=a[b];if(("A"<=e&&"Z">=e||"a"<=e&&"z">=e||"0"<=e&&"9">=e||-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(e))&&
-a[b]!=c&&a[b+1]==c)return!0;b++}return!1},f=function(a){return Object.keys(d).length?'<span class="'+Object.keys(a).join(" ")+'">':""};h<l&&(" "===e[h]||"\t"===e[h]);)h++;"&gt;"===e.substr(h,4)&&(p=!0,h+=4);for(;h<l;h++){var m=e[h];if("<"===m){do g+=e[h++];while(">"!==e[h-1]);h--}else if(!d["slackmsg-style-bold"]&&"*"===m&&e[h+1]&&k(e,h,m))Object.keys(d).length&&(g+="</span>"),d["slackmsg-style-bold"]=!0,g+=f(d);else if(!d["slackmsg-style-strike"]&&"~"===m&&e[h+1]&&k(e,h,m))Object.keys(d).length&&
-(g+="</span>"),d["slackmsg-style-strike"]=!0,g+=f(d);else if(!d["slackmsg-style-code"]&&"`"===m&&e[h+1]&&k(e,h,m))Object.keys(d).length&&(g+="</span>"),d["slackmsg-style-code"]=!0,g+=f(d);else if(!d["slackmsg-style-italic"]&&"_"===m&&e[h+1]&&k(e,h,m))Object.keys(d).length&&(g+="</span>"),d["slackmsg-style-italic"]=!0,g+=f(d);else{var u=!1,g=g+m;do{if(d["slackmsg-style-bold"]&&"*"!==m&&"*"===e[h+1])delete d["slackmsg-style-bold"],u=!0;else if(d["slackmsg-style-strike"]&&"~"!==m&&"~"===e[h+1])delete d["slackmsg-style-strike"],
-u=!0;else if(d["slackmsg-style-code"]&&"`"!==m&&"`"===e[h+1])delete d["slackmsg-style-code"],u=!0;else if(d["slackmsg-style-italic"]&&"_"!==m&&"_"===e[h+1])delete d["slackmsg-style-italic"],u=!0;else break;m=e[++h]}while(h<l);u&&(g+="</span>"+f(d))}}d&&(g+="</span>");a[b]=p?'<span class="slackmsg-style-quote">'+g+"</span>":g}return a.join("<br/>")}function S(a,b,c){b.h?(a=sa(a,b,c),a.classList.add("slackmsg-me_message")):a=sa(a,b,c);b.l&&a.classList.add("slackmsg-edited");return a}
-function O(){var a=0,b=0,c="";if(Y)c="!"+H.H+" - ",document.getElementById("linkFavicon").href="favicon_err.png";else{for(var e in M)M.hasOwnProperty(e)&&(a+=M[e].u,b+=M[e].m);b?c="(!"+b+") - ":a&&(c="("+a+") - ");document.getElementById("linkFavicon").href=b||a?"favicon.png?h="+b+"&m="+a:"favicon_ok.png"}c+=E.a.h.name;document.title=c}
+(f=document.createElement("li"),f.className="slackmsg-hover-edit",f.style.backgroundImage='url("edit.svg")',k.appendChild(f),f=document.createElement("li"),f.className="slackmsg-hover-remove",f.style.backgroundImage='url("remove.svg")',k.appendChild(f));d.appendChild(h);g.appendChild(l);g.appendChild(p);g.appendChild(e);g.appendChild(m);b.l&&(e=document.createElement("div"),e.textContent=H.l,e.className="slackmsg-edited",g.appendChild(e));g.appendChild(u);g.className="slackmsg-content";m.className=
+"slackmsg-attachments";u.className="slackmsg-reactions";if(!0!==c){if(b.a)for(var w in b.a)(c=ra(a,b.id,w,b.a[w]))&&u.appendChild(c);b.f.forEach(function(a){var b=document.createElement("li"),c=document.createElement("div"),d=document.createElement("div"),e=document.createElement("a"),g=document.createElement("div"),h=document.createElement("img"),f=document.createElement("a"),k=document.createElement("div"),y=document.createElement("div"),l=document.createElement("img"),p=document.createElement("img"),
+t=document.createElement("div"),r=document.createElement("img"),B=document.createElement("span"),x=document.createElement("span");b.className="slackmsg-attachment";var w="#e3e4e6";a.color&&("#"===a.color[0]?w=a.color[0]:"good"===a.color?w="#2fa44f":"warning"===a.color?w="#de9e31":"danger"===a.color&&(w="#d50200"));c.style.borderColor=w;d.className="slackmsg-attachment-pretext";a.pretext?d.innerHTML=X(a.pretext):d.classList.add("hidden");e.target="_blank";a.title?(e.innerHTML=X(a.title),a.title_link&&
+(e.href=a.title_link),e.className="slackmsg-attachment-title"):e.className="hidden slackmsg-attachment-title";f.target="_blank";g.className="slackmsg-author";a.author_name?(f.innerHTML=X(a.author_name),f.href=a.author_link||"",f.className="slackmsg-author-name",h.className="slackmsg-author-img",a.author_icon?h.src=a.author_icon:h.classList.add("hidden")):g.classList.add("hidden");y.innerHTML=X(a.text||"");y.a="slackmsg-attachment-text";l.className="slackmsg-attachment-thumb";a.thumb_url?l.src=a.thumb_url:
+l.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";B.className="slackmsg-attachment-footer-text";r.className="slackmsg-attachment-footer-icon";a.footer?(B.innerHTML=X(a.footer),a.footer_icon?r.src=a.footer_icon:r.classList.add("hidden")):(r.classList.add("hidden"),B.classList.add("hidden"));x.className="slackmsg-ts";a.ts?x.innerHTML=H.w(a.ts):x.classList.add("hidden");g.appendChild(h);g.appendChild(f);
+k.appendChild(y);k.appendChild(l);t.appendChild(r);t.appendChild(B);t.appendChild(x);c.appendChild(e);c.appendChild(g);c.appendChild(k);c.appendChild(p);c.appendChild(t);b.appendChild(d);b.appendChild(c);b&&m.appendChild(b)})}d.appendChild(g);d.appendChild(k);return d}
+function V(a){a:{for(var b=a,c={};!c[b];){if(a=E.a.g[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 ta(a){return a.replace(/:([^ \t:]+):/g,function(b,c){var d=V(c);if(d){var g=document.createElement("span");g.className=b===a?"emoji-medium":"emoji-small";g.appendChild(d);return g.outerHTML}return b})}
+function X(a){a=a.split(/\r?\n/g);for(var b=0,c=a.length;b<c;b++){for(var d=a[b].trim(),g="",e={},p=!1,h=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=q(E.a,c[0]),c[1]=a?"@"+a.name:H.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=z(E.a,c[0]),c[1]=a?"#"+a.name:H.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),l=d.length,k=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},f=function(a){return Object.keys(e).length?'<span class="'+Object.keys(a).join(" ")+'">':""};h<l&&(" "===d[h]||"\t"===d[h]);)h++;"&gt;"===d.substr(h,4)&&(p=!0,h+=4);for(;h<l;h++){var m=d[h];if("<"===m){do g+=d[h++];while(">"!==d[h-1]);h--}else if(!e["slackmsg-style-bold"]&&"*"===m&&d[h+1]&&k(d,h,m))Object.keys(e).length&&(g+="</span>"),e["slackmsg-style-bold"]=!0,g+=f(e);else if(!e["slackmsg-style-strike"]&&"~"===m&&d[h+1]&&k(d,h,m))Object.keys(e).length&&
+(g+="</span>"),e["slackmsg-style-strike"]=!0,g+=f(e);else if(!e["slackmsg-style-code"]&&"`"===m&&d[h+1]&&k(d,h,m))Object.keys(e).length&&(g+="</span>"),e["slackmsg-style-code"]=!0,g+=f(e);else if(!e["slackmsg-style-italic"]&&"_"===m&&d[h+1]&&k(d,h,m))Object.keys(e).length&&(g+="</span>"),e["slackmsg-style-italic"]=!0,g+=f(e);else{var u=!1,g=g+m;do{if(e["slackmsg-style-bold"]&&"*"!==m&&"*"===d[h+1])delete e["slackmsg-style-bold"],u=!0;else if(e["slackmsg-style-strike"]&&"~"!==m&&"~"===d[h+1])delete e["slackmsg-style-strike"],
+u=!0;else if(e["slackmsg-style-code"]&&"`"!==m&&"`"===d[h+1])delete e["slackmsg-style-code"],u=!0;else if(e["slackmsg-style-italic"]&&"_"!==m&&"_"===d[h+1])delete e["slackmsg-style-italic"],u=!0;else break;m=d[++h]}while(h<l);u&&(g+="</span>"+f(e))}}e&&(g+="</span>");a[b]=p?'<span class="slackmsg-style-quote">'+g+"</span>":g}return a.join("<br/>")}function S(a,b,c){b.h?(a=sa(a,b,c),a.classList.add("slackmsg-me_message")):a=sa(a,b,c);b.l&&a.classList.add("slackmsg-edited");return a}
+function O(){var a=0,b=0,c="";if(Y)c="!"+H.H+" - ",document.getElementById("linkFavicon").href="favicon_err.png";else{for(var d in M)M.hasOwnProperty(d)&&(a+=M[d].u,b+=M[d].m);b?c="(!"+b+") - ":a&&(c="("+a+") - ");document.getElementById("linkFavicon").href=b||a?"favicon.png?h="+b+"&m="+a:"favicon_ok.png"}c+=E.a.h.name;document.title=c}
 function ua(){if("Notification"in window)if("granted"===Notification.permission){var a=Date.now();if(K+3E4<a){var b=new Notification(H.I);K=a;setTimeout(function(){b.close()},5E3)}}else"denied"!==Notification.permission&&Notification.requestPermission()}
-function va(){var a=document.createDocumentFragment(),b=F.id,c=null,e=0,g=null;E.b[b]&&E.b[b].a.forEach(function(d){if(!d.c){var h=S(b,d);c&&c.j===d.j&&d.j?(h.classList.add("slackmsg-same-author"),30>Math.abs(e-d.b)?g.classList.add("slackmsg-same-ts"):e=d.b):e=d.b;c=d;g=h;a.appendChild(h)}});var d=document.getElementById("chatWindow");d.textContent="";d.appendChild(a);d.scrollTop=d.scrollHeight-d.clientHeight}
-function wa(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.parentElement.classList.contains("slackmsg-hover")){if(a=b(a,c)){a=parseFloat(a.split("_")[1]);var e=na(a);e&&c.classList.contains("slackmsg-hover-reply")?(J&&(J=null,U()),I!==e&&(I=e,R())):e&&c.classList.contains("slackmsg-hover-reaction")?xa.L(document.body,
-function(a){a&&W(F.id,e.id,a)}):e&&c.classList.contains("slackmsg-hover-edit")?(I&&(I=null,R()),J!==e&&(J=e,U())):e&&c.classList.contains("slackmsg-hover-remove")&&(I&&(I=null,R()),J&&(J=null,U()),ya(e))}break}c=c.parentElement}}function T(){document.getElementById("msgInput").focus()}function N(){var a=document.location.hash.substr(1),b=z(E.a,a),a=q(E.a,a);b&&b!==F?za(b):a&&a.b&&za(a.b)}
+function va(){var a=document.createDocumentFragment(),b=F.id,c=null,d=0,g=null;E.b[b]&&E.b[b].a.forEach(function(e){if(!e.c){var h=S(b,e);c&&c.j===e.j&&e.j?(h.classList.add("slackmsg-same-author"),30>Math.abs(d-e.b)?g.classList.add("slackmsg-same-ts"):d=e.b):d=e.b;c=e;g=h;a.appendChild(h)}});var e=document.getElementById("chatWindow");e.textContent="";e.appendChild(a);e.scrollTop=e.scrollHeight-e.clientHeight}
+function wa(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.parentElement.classList.contains("slackmsg-hover")){if(a=b(a,c)){a=parseFloat(a.split("_")[1]);var d=na(a);d&&c.classList.contains("slackmsg-hover-reply")?(J&&(J=null,U()),I!==d&&(I=d,R())):d&&c.classList.contains("slackmsg-hover-reaction")?xa.L(document.body,
+function(a){a&&W(F.id,d.id,a)}):d&&c.classList.contains("slackmsg-hover-edit")?(I&&(I=null,R()),J!==d&&(J=d,U())):d&&c.classList.contains("slackmsg-hover-remove")&&(I&&(I=null,R()),J&&(J=null,U()),ya(d))}break}c=c.parentElement}}function T(){document.getElementById("msgInput").focus()}function N(){var a=document.location.hash.substr(1),b=z(E.a,a),a=q(E.a,a);b&&b!==F?za(b):a&&a.b&&za(a.b)}
+function Aa(a){var b=document.createElement("li"),c=document.createElement("span"),d=document.createElement("span"),g=document.createElement("span");c.textContent=a.name;d.textContent=a.usage;g.textContent=a.a;b.appendChild(c);b.appendChild(d);b.appendChild(g);b.className="slack-command-item";c.className="slack-command-name";d.className="slack-command-usage";g.className="slack-command-desc";return b}
 document.addEventListener("DOMContentLoaded",function(){oa();document.getElementById("chatWindow").addEventListener("click",wa);window.addEventListener("hashchange",function(){document.location.hash&&"#"===document.location.hash[0]&&N()});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),Aa(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();F&&document.getElementById("fileUploadContainer").classList.remove("hidden");return!1});document.getElementById("msgForm").addEventListener("submit",function(a){a.preventDefault();a=document.getElementById("msgInput");F&&a.value&&Ba(a.value)&&(a.value="",I&&(I=null,R()),J&&(J=null,R()));T();return!1});window.addEventListener("blur",function(){window.hasFocus=!1});window.addEventListener("focus",function(){window.hasFocus=
-!0;K=0;F&&Ca();T()});var a=0;document.getElementById("msgInput").addEventListener("keypress",function(){if(F){var b=Date.now();if(a+3E3<b){var c=new XMLHttpRequest;c.open("POST","api/typing?room="+F.id,!0);c.send(null);a=b}}});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(){xa.L(document.body,function(a){a&&(document.getElementById("msgInput").value+=":"+a+":");T()})})}else a.classList.add("hidden")})();Z()});var xa=function(){function a(a,b){for(var c=a.target;c!==l&&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;t&&t(null);return!0}function c(){return l.parentElement?(l.parentElement.removeChild(k),l.parentElement.removeChild(l),!0):!1}function e(a){var b=0,c;a=void 0===a?r.value:a;if(h()){var e=window.searchEmojis(a);c=g(e);for(var f in v)v[f].visible&&(v[f].visible=!1,m.removeChild(v[f].i));
-f=0;for(var k=c.length;f<k;f++){var l=c[f].name,t=v[l];if(!t){var t=v,p=l,w=l,l=window.makeEmoji(e[l]),x=document.createElement("span");x.appendChild(l);x.className="emoji-medium";l=d(w,x);t=t[p]=l}t.visible||(t.visible=!0,m.appendChild(t.i));b++}}for(f in y)y[f].visible&&(y[f].visible=!1,u.removeChild(y[f].i));c=g(E.a.f);f=0;for(k=c.length;f<k;f++)l=c[f].name,""!==a&&l.substr(0,a.length)!==a||"alias:"===E.a.f[l].substr(0,6)||(t=y[l],t||(e=y,p=t=l,l=E.a.f[l],w=document.createElement("span"),x=document.createElement("span"),
-w.className="emoji emoji-custom",w.style.backgroundImage='url("'+l+'")',x.appendChild(w),x.className="emoji-medium",l=d(p,x),t=e[t]=l),t.visible||(t.visible=!0,u.appendChild(t.i)),b++);return b}function g(a){var b=E.a.a.c.b,c=[],e;for(e in a)c.push({name:e,K:0,count:b[e]||0});return c=c.sort(function(a,b){var c=b.count-a.count;return c?c:a.K-b.K})}function d(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 p(a){var b=
+"";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),Ba(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();F&&document.getElementById("fileUploadContainer").classList.remove("hidden");return!1});document.getElementById("msgForm").addEventListener("submit",function(a){a.preventDefault();a=document.getElementById("msgInput");F&&a.value&&Ca(a.value)&&(a.value="",I&&(I=null,R()),J&&(J=null,R()),document.getElementById("slashList").textContent="");T();return!1});window.addEventListener("blur",function(){window.hasFocus=
+!1});window.addEventListener("focus",function(){window.hasFocus=!0;K=0;F&&Da();T()});var a=0;document.getElementById("msgInput").addEventListener("input",function(){if(F){var b=Date.now();a+3E3<b&&(Ea(),a=b);var b=[],c=this.value;if("/"===this.value[0]){var d=c.indexOf(" "),d=-1===d?c.length:d,c=c.substr(0,d),g;for(g in E.a.f.data){var e=E.a.f.data[g];e.name.substr(0,d)===c&&b.push(e)}}5<b.length&&(b=[]);b.sort(function(a,b){return a.name.localeCompare(b.name)});d=document.getElementById("slashList");
+c=document.createDocumentFragment();d.textContent="";g=0;for(e=b.length;g<e;g++)c.appendChild(Aa(b[g]));d.appendChild(c)}});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(){xa.L(document.body,function(a){a&&(document.getElementById("msgInput").value+=":"+a+":");T()})})}else a.classList.add("hidden")})();Z()});var xa=function(){function a(a,b){for(var c=a.target;c!==l&&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;t&&t(null);return!0}function c(){return l.parentElement?(l.parentElement.removeChild(k),l.parentElement.removeChild(l),!0):!1}function d(a){var b=0,c;a=void 0===a?r.value:a;if(h()){var d=window.searchEmojis(a);c=g(d);for(var f in v)v[f].visible&&(v[f].visible=!1,m.removeChild(v[f].i));
+f=0;for(var k=c.length;f<k;f++){var l=c[f].name,t=v[l];if(!t){var t=v,p=l,w=l,l=window.makeEmoji(d[l]),x=document.createElement("span");x.appendChild(l);x.className="emoji-medium";l=e(w,x);t=t[p]=l}t.visible||(t.visible=!0,m.appendChild(t.i));b++}}for(f in y)y[f].visible&&(y[f].visible=!1,u.removeChild(y[f].i));c=g(E.a.g);f=0;for(k=c.length;f<k;f++)l=c[f].name,""!==a&&l.substr(0,a.length)!==a||"alias:"===E.a.g[l].substr(0,6)||(t=y[l],t||(d=y,p=t=l,l=E.a.g[l],w=document.createElement("span"),x=document.createElement("span"),
+w.className="emoji emoji-custom",w.style.backgroundImage='url("'+l+'")',x.appendChild(w),x.className="emoji-medium",l=e(p,x),t=d[t]=l),t.visible||(t.visible=!0,u.appendChild(t.i)),b++);return b}function g(a){var b=E.a.a.c.b,c=[],d;for(d in a)c.push({name:d,K:0,count:b[d]||0});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 p(a){var b=
 document.createElement("img"),c=document.createElement("div");b.src=a;c.appendChild(b);c.className="emojibar-header";return c}function h(){return"searchEmojis"in window}var l=document.createElement("div"),k=document.createElement("div"),f=document.createElement("div"),m=document.createElement("ul"),u=document.createElement("ul"),r=document.createElement("input"),v={},y={},B=document.createElement("div"),x=document.createElement("span"),w=document.createElement("span"),t;k.addEventListener("click",
 function(a){var c=l.getBoundingClientRect();(a.screenY<c.top||a.screenY>c.bottom||a.screenX<c.left||a.screenX>c.right)&&b()});k.className="emojibar-overlay";l.className="emojibar";f.className="emojibar-emojis";B.className="emojibar-detail";x.className="emojibar-detail-img";w.className="emojibar-detail-name";m.className=u.className="emojibar-list";r.className="emojibar-search";B.appendChild(x);B.appendChild(w);f.appendChild(p(window.emojiProviderHeader));f.appendChild(m);f.appendChild(p("emojicustom.png"));
-f.appendChild(u);l.appendChild(f);l.appendChild(B);l.appendChild(r);r.addEventListener("keyup",function(){e()});l.addEventListener("mousemove",function(b){a(b,function(a){var b=a?v[a]||y[a]:null;b?(x.innerHTML=b.i.outerHTML,w.textContent=":"+a+":"):(x.textContent="",w.textContent="")})});l.addEventListener("click",function(b){a(b,function(a){a&&c()&&t&&t(a)})});return{isSupported:h,L:function(a,b){return h()?(t=b,a.appendChild(k),a.appendChild(l),r.value="",e(),r.focus(),!0):!1},search:e,close:b}}();var E,M={};setInterval(function(){var a=E.a,b=Date.now(),c=!1,e;for(e in a.c){var g=!0,d;for(d in a.c[e])a.c[e][d]+3E3<b?(delete a.c[e][d],c=!0):g=!1;g&&(delete a.c[e],c=!0)}c&&P()},1E3);
-function Da(a,b){if(a!==F||!window.hasFocus){var c=new RegExp("<@"+E.a.a.id),e=!1,g=!1;M[a.id]||(M[a.id]={m:0,u:0});b.forEach(function(b){var d;if(!(d="D"===a.id[0]||b.text.match(c)))a:{b=b.text;d=E.a.a.c.a;for(var h=0,l=d.length;h<l;h++)if(-1!==b.indexOf(d[h])){console.log("Found highlight "+d[h]+" in "+b);d=!0;break a}d=!1}d?(g|=!M[a.id].m,M[a.id].m++,e=!0):M[a.id].u++});O();document.getElementById(a.id).classList.add("unread");e&&document.getElementById(a.id).classList.add("unreadHi");g&&!window.hasFocus&&
-ua()}}function Ca(){var a=F;M[a.id]&&(M[a.id]={m:0,u:0},O());a=document.getElementById(a.id);a.classList.remove("unread");a.classList.remove("unreadHi")}E=new function(){this.c=0;this.a=new n;this.b={}};var qa=function(){function a(a,b){b.sort(function(){return Math.random()-.5});for(var c=0,e=20;e<l-40;e+=f)for(var g=0;g+f<=k;g+=f)d(a,b[c],e,g),c++,c===b.length&&(b.sort(function(a,b){return a.s?b.s?Math.random()-.5:-1:1}),c=0)}function b(a,e){for(var d=0,f=a.length;d<f;d++)if(void 0===a[d].s){c(a[d].src,function(c){a[d].s=c;b(a,e)});return}var g=[];a.forEach(function(a){a.s&&g.push(a.s)});e(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=r;c=c.getContext("2d");c.drawImage(a,0,0,r,r);for(var c=c.getImageData(0,0,r,r),e=0,d=0;d<c.width*c.height*4;d+=4)c.data[d]=c.data[d+1]=c.data[d+2]=(c.data[d]+c.data[d+1]+c.data[d+2])/3,c.data[d+3]=50,e+=c.data[d];if(50>e/(c.height*c.width))for(d=0;d<c.width*c.height*4;d+=4)c.data[d]=c.data[d+1]=c.data[d+2]=255-c.data[d];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 e(){var a=h.createLinearGradient(0,0,0,k);a.addColorStop(0,"#4D394B");a.addColorStop(1,"#201820");h.fillStyle=a;h.fillRect(0,0,l,k);return h.getImageData(0,0,l,k)}function g(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 d(a,b,c,d){var e=Math.floor(d);a=[a.data[e*l*4+0],a.data[e*l*4+1],a.data[e*l*4+2]];h.fillStyle=
-"#"+(1.1*a[0]<<16|1.1*a[1]<<8|1.1*a[2]).toString(16);h.beginPath();h.moveTo(c+f/2,d+m);h.lineTo(c-m+f,d+f/2);h.lineTo(c+f/2,d-m+f);h.lineTo(c+m,d+f/2);h.closePath();h.fill();h.putImageData(g(h.getImageData(c+m,d+m,u,u),b),c+m,d+m)}var p=document.createElement("canvas"),h=p.getContext("2d"),l=p.width=250,k=p.height=290,f=(l-40)/3,m=.1*f,u=Math.floor(f-2*m),r=.5*u,v;return function(c){if(v)c(v);else{var d=e(),f=[],g;for(g in E.a.b)E.a.b[g].h||f.push({src:"api/avatar?user="+g});b(f,function(b){a(d,b);
-v=p.toDataURL();c(v)})}}}();var Y=0,F=null;function Ea(a){var b=new XMLHttpRequest;b.timeout=6E4;b.onreadystatechange=function(){if(4===b.readyState)if(b.status){var c=null,e=2===Math.floor(b.status/100);if(e){Y&&(Y=0,Q(!0));c=b.response;try{c=JSON.parse(c)}catch(g){c=null}}else Y?(Y+=Math.floor((Y||5)/2),Y=Math.min(60,Y)):(Y=5,Q(!1));a(e,c)}else Y&&(Y=0,Q(!0)),Ea(a)};b.open("GET","api?v="+E.c,!0);b.send(null)}
-function Fa(a,b){if(a){if(b){var c=E,e=Date.now();b.v&&(c.c=b.v);if(b["static"]){var g=c.a,d=b["static"],p=Date.now();if(d.bots)for(var h=0,l=d.bots.length;h<l;h++){var k=g.C[d.bots[h].id];k||(k=g.C[d.bots[h].id]=new ha(d.bots[h].id));var f=d.bots[h],m=p;void 0!==f.deleted&&(k.h=f.deleted);void 0!==f.name&&(k.name=f.name);f.icons&&(k.a.X=f.icons.image_36,k.a.o=f.icons.image_48,k.a.B=f.icons.image_72);void 0!==f.presence&&(k.g="away"!==f.presence);void 0!==f.isPresent&&(k.g=f.isPresent);k.version=
-Math.max(k.version,m)}if(d.users)for(h=0,l=d.users.length;h<l;h++)(k=g.b[d.users[h].id])||(k=g.b[d.users[h].id]=new ea(d.users[h].id)),f=d.users[h],m=p,void 0!==f.name&&(k.name=f.name),void 0!==f.deleted&&(k.h=f.deleted),void 0!==f.status&&(k.status=f.status),void 0!==f.presence&&(k.g="away"!==f.presence),void 0!==f.isPresent&&(k.g=f.isPresent),f.profile&&(k.a.U=f.profile.image_24,k.a.V=f.profile.image_32,k.a.o=f.profile.image_48,k.a.B=f.profile.image_72,k.a.S=f.profile.image_192,k.a.Z=f.profile.image_512),
-k.version=Math.max(k.version,m);if(d.ims)for(h=0,l=d.ims.length;h<l;h++)if(f=q(g,d.ims[h].user))f.b||(g.G[d.ims[h].id]=f.b=new da(d.ims[h].id,f)),k=f.b,m=p,k.f=parseFloat(d.ims[h].last_read),k.b=f.h,k.version=Math.max(k.version,m);if(d.channels)for(h=0,l=d.channels.length;h<l;h++){(k=g.A[d.channels[h].id])||(k=g.A[d.channels[h].id]=new ba(d.channels[h].id));var f=d.channels[h],m=g,u=p;void 0!==f.name&&(k.name=f.name);void 0!==f.is_archived&&(k.b=f.is_archived);void 0!==f.last_read&&(k.f=parseFloat(f.last_read));
-if(f.members&&(k.a={},f.members))for(var r=0,v=f.members.length;r<v;r++){var y=q(m,f.members[r]);k.a[y.id]=y;y.f[k.id]=k}k.version=Math.max(k.version,u)}h=0;for(l=d.groups.length;h<l;h++){(k=g.D[d.groups[h].id])||(k=g.D[d.groups[h].id]=new ca(d.groups[h].id));f=g;m=d.groups[h];u=p;r=[];if(m.members){k.a={};v=0;for(y=m.members.length;v<y;v++){var B=q(f,m.members[v]);k.a[m.members[v]]=B;B.f[k.id]=k;r.push(B.name)}k.name=r.join(", ")}void 0!==m.is_archived&&(k.b=m.is_archived||!1===m.is_open);void 0!==
-m.last_read&&(k.f=parseFloat(m.last_read));k.version=Math.max(k.version,u)}d.emojis&&(g.f.data=d.emojis,g.f.version=p);if(void 0!==d.commands){g.g.data={};for(h in d.commands)g.g.data[h]=new ia(d.commands[h]);g.g.version=p}d.team&&(g.h||(g.h=new aa(d.team.id)),l=g.h,k=d.team,void 0!==k.name&&(l.name=k.name),k.icon&&(l.a.W=k.icon.image_34,l.a.Y=k.icon.image_44,l.a.$=k.icon.image_68,l.a.aa=k.icon.image_88,l.a.P=k.icon.image_102,l.a.R=k.icon.image_132,l.a.T=k.icon.image_230,l.a.ba=k.icon.image_default),
-l.version=Math.max(l.version,p));g.J=Math.max(g.J,p);d.self&&(g.a=q(g,d.self.id),g.a.c||(g.a.c=new fa),ga(g.a.c,d.self.prefs,p));if(void 0!==d.typing)for(h in g.c=d.typing,g.c)for(var x in g.c[h])g.c[h][x]=p;pa();b["static"].typing&&P()}if(b.live){for(var w in b.live)(g=c.b[w])?C(g,b.live[w],e):c.b[w]=new A(w,250,b.live[w],e);for(var t in b.live)(e=z(c.a,t))&&!e.b&&(Da(e,b.live[t]),F&&b.live[F.id]&&va())}}Z()}else setTimeout(Z,1E3*Y)}function Z(){Ea(Fa)}
-function za(a){F&&document.getElementById(F.id).classList.remove("selected");document.getElementById(a.id).classList.add("selected");document.body.classList.remove("no-room-selected");F=a;a=F.name||(F.c?F.c.name:void 0);if(!a){a=[];for(var b in F.a)a.push(F.a[b].name);a=a.join(", ")}document.getElementById("currentRoomTitle").textContent=a;va();T();document.getElementById("fileUploadContainer").classList.add("hidden");Ca();I&&(I=null,R());J&&(J=null,R());F.f&&!E.b[F.id]&&(b=new XMLHttpRequest,b.open("GET",
-"api/hist?room="+F.id,!0),b.send(null))}function Aa(a,b,c){var e=F;new FileReader;var g=new FormData,d=new XMLHttpRequest;g.append("file",b);g.append("filename",a);d.onreadystatechange=function(){4===d.readyState&&(204===d.status?c(null):c(d.statusText))};d.open("POST","api/file?room="+e.id);d.send(g)}
-function Ba(a){if(J){var b=new XMLHttpRequest;b.open("PUT","api/msg?room="+F.id+"&ts="+J.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=E.a.g.data[a.substr(0,-1===c?void 0:c)])?(c=new XMLHttpRequest,c.open("POST","api/cmd?room="+F.id+"&cmd="+encodeURIComponent(a.name.substr(1))+"&args="+encodeURIComponent(b.trim()),!0),c.send(null),!0):!1}var b=F,c=I,e=new XMLHttpRequest;a="api/msg?room="+b.id+"&text="+encodeURIComponent(a);
-if(c){var g=q(E.a,c.j),d="Message";"C"===b.id[0]?d="Channel message":"D"===b.id[0]?d="Direct message":"G"===b.id[0]&&(d="Group message");a+="&attachments="+encodeURIComponent(JSON.stringify([{fallback:c.text,author_name:"<@"+g.id+"|"+g.name+">",author_icon:g.a.o,text:c.text,footer:d,ts:c.b}]))}e.open("POST",a,!0);e.send(null);return!0}function ya(a){var b=new XMLHttpRequest;b.open("DELETE","api/msg?room="+F.id+"&ts="+a.id,!0);b.send(null)}
-function W(a,b,c){var e=new XMLHttpRequest;e.open("POST","api/reaction?room="+a+"&msg="+b+"&reaction="+encodeURIComponent(c),!0);e.send(null)};
+f.appendChild(u);l.appendChild(f);l.appendChild(B);l.appendChild(r);r.addEventListener("keyup",function(){d()});l.addEventListener("mousemove",function(b){a(b,function(a){var b=a?v[a]||y[a]:null;b?(x.innerHTML=b.i.outerHTML,w.textContent=":"+a+":"):(x.textContent="",w.textContent="")})});l.addEventListener("click",function(b){a(b,function(a){a&&c()&&t&&t(a)})});return{isSupported:h,L:function(a,b){return h()?(t=b,a.appendChild(k),a.appendChild(l),r.value="",d(),r.focus(),!0):!1},search:d,close:b}}();var E,M={};setInterval(function(){var a=E.a,b=Date.now(),c=!1,d;for(d in a.c){var g=!0,e;for(e in a.c[d])a.c[d][e]+3E3<b?(delete a.c[d][e],c=!0):g=!1;g&&(delete a.c[d],c=!0)}c&&P()},1E3);
+function Fa(a,b){if(a!==F||!window.hasFocus){var c=new RegExp("<@"+E.a.a.id),d=!1,g=!1;M[a.id]||(M[a.id]={m:0,u:0});b.forEach(function(b){var e;if(!(e="D"===a.id[0]||b.text.match(c)))a:{b=b.text;e=E.a.a.c.a;for(var h=0,l=e.length;h<l;h++)if(-1!==b.indexOf(e[h])){console.log("Found highlight "+e[h]+" in "+b);e=!0;break a}e=!1}e?(g|=!M[a.id].m,M[a.id].m++,d=!0):M[a.id].u++});O();document.getElementById(a.id).classList.add("unread");d&&document.getElementById(a.id).classList.add("unreadHi");g&&!window.hasFocus&&
+ua()}}function Da(){var a=F;M[a.id]&&(M[a.id]={m:0,u:0},O());a=document.getElementById(a.id);a.classList.remove("unread");a.classList.remove("unreadHi")}E=new function(){this.c=0;this.a=new n;this.b={}};var qa=function(){function a(a,b){b.sort(function(){return Math.random()-.5});for(var c=0,d=20;d<l-40;d+=f)for(var g=0;g+f<=k;g+=f)e(a,b[c],d,g),c++,c===b.length&&(b.sort(function(a,b){return a.s?b.s?Math.random()-.5:-1:1}),c=0)}function b(a,d){for(var e=0,g=a.length;e<g;e++)if(void 0===a[e].s){c(a[e].src,function(c){a[e].s=c;b(a,d)});return}var f=[];a.forEach(function(a){a.s&&f.push(a.s)});d(f)}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=r;c=c.getContext("2d");c.drawImage(a,0,0,r,r);for(var c=c.getImageData(0,0,r,r),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=h.createLinearGradient(0,0,0,k);a.addColorStop(0,"#4D394B");a.addColorStop(1,"#201820");h.fillStyle=a;h.fillRect(0,0,l,k);return h.getImageData(0,0,l,k)}function g(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 g=b.data[4*(d*b.width+e)]/255,f=4*((d+c)*a.width+e+c);a.data[f]*=g;a.data[f+1]*=g;a.data[f+2]*=g}return a}function e(a,b,c,d){var e=Math.floor(d);a=[a.data[e*l*4+0],a.data[e*l*4+1],a.data[e*l*4+2]];h.fillStyle=
+"#"+(1.1*a[0]<<16|1.1*a[1]<<8|1.1*a[2]).toString(16);h.beginPath();h.moveTo(c+f/2,d+m);h.lineTo(c-m+f,d+f/2);h.lineTo(c+f/2,d-m+f);h.lineTo(c+m,d+f/2);h.closePath();h.fill();h.putImageData(g(h.getImageData(c+m,d+m,u,u),b),c+m,d+m)}var p=document.createElement("canvas"),h=p.getContext("2d"),l=p.width=250,k=p.height=290,f=(l-40)/3,m=.1*f,u=Math.floor(f-2*m),r=.5*u,v;return function(c){if(v)c(v);else{var e=d(),g=[],f;for(f in E.a.b)E.a.b[f].h||g.push({src:"api/avatar?user="+f});b(g,function(b){a(e,b);
+v=p.toDataURL();c(v)})}}}();var Y=0,F=null;function Ga(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){Y&&(Y=0,Q(!0));c=b.response;try{c=JSON.parse(c)}catch(g){c=null}}else Y?(Y+=Math.floor((Y||5)/2),Y=Math.min(60,Y)):(Y=5,Q(!1));a(d,c)}else Y&&(Y=0,Q(!0)),Ga(a)};b.open("GET","api?v="+E.c,!0);b.send(null)}function Ea(){var a=new XMLHttpRequest;a.open("POST","api/typing?room="+F.id,!0);a.send(null)}
+function Ha(a,b){if(a){if(b){var c=E,d=Date.now();b.v&&(c.c=b.v);if(b["static"]){var g=c.a,e=b["static"],p=Date.now();if(e.bots)for(var h=0,l=e.bots.length;h<l;h++){var k=g.C[e.bots[h].id];k||(k=g.C[e.bots[h].id]=new ha(e.bots[h].id));var f=e.bots[h],m=p;void 0!==f.deleted&&(k.h=f.deleted);void 0!==f.name&&(k.name=f.name);f.icons&&(k.a.X=f.icons.image_36,k.a.o=f.icons.image_48,k.a.B=f.icons.image_72);void 0!==f.presence&&(k.g="away"!==f.presence);void 0!==f.isPresent&&(k.g=f.isPresent);k.version=
+Math.max(k.version,m)}if(e.users)for(h=0,l=e.users.length;h<l;h++)(k=g.b[e.users[h].id])||(k=g.b[e.users[h].id]=new ea(e.users[h].id)),f=e.users[h],m=p,void 0!==f.name&&(k.name=f.name),void 0!==f.deleted&&(k.h=f.deleted),void 0!==f.status&&(k.status=f.status),void 0!==f.presence&&(k.g="away"!==f.presence),void 0!==f.isPresent&&(k.g=f.isPresent),f.profile&&(k.a.U=f.profile.image_24,k.a.V=f.profile.image_32,k.a.o=f.profile.image_48,k.a.B=f.profile.image_72,k.a.S=f.profile.image_192,k.a.Z=f.profile.image_512),
+k.version=Math.max(k.version,m);if(e.ims)for(h=0,l=e.ims.length;h<l;h++)if(f=q(g,e.ims[h].user))f.b||(g.G[e.ims[h].id]=f.b=new da(e.ims[h].id,f)),k=f.b,m=p,k.f=parseFloat(e.ims[h].last_read),k.b=f.h,k.version=Math.max(k.version,m);if(e.channels)for(h=0,l=e.channels.length;h<l;h++){(k=g.A[e.channels[h].id])||(k=g.A[e.channels[h].id]=new ba(e.channels[h].id));var f=e.channels[h],m=g,u=p;void 0!==f.name&&(k.name=f.name);void 0!==f.is_archived&&(k.b=f.is_archived);void 0!==f.last_read&&(k.f=parseFloat(f.last_read));
+if(f.members&&(k.a={},f.members))for(var r=0,v=f.members.length;r<v;r++){var y=q(m,f.members[r]);k.a[y.id]=y;y.f[k.id]=k}k.version=Math.max(k.version,u)}h=0;for(l=e.groups.length;h<l;h++){(k=g.D[e.groups[h].id])||(k=g.D[e.groups[h].id]=new ca(e.groups[h].id));f=g;m=e.groups[h];u=p;r=[];if(m.members){k.a={};v=0;for(y=m.members.length;v<y;v++){var B=q(f,m.members[v]);k.a[m.members[v]]=B;B.f[k.id]=k;r.push(B.name)}k.name=r.join(", ")}void 0!==m.is_archived&&(k.b=m.is_archived||!1===m.is_open);void 0!==
+m.last_read&&(k.f=parseFloat(m.last_read));k.version=Math.max(k.version,u)}e.emojis&&(g.g.data=e.emojis,g.g.version=p);if(void 0!==e.commands){g.f.data={};for(h in e.commands)g.f.data[h]=new ia(e.commands[h]);g.f.version=p}e.team&&(g.h||(g.h=new aa(e.team.id)),l=g.h,k=e.team,void 0!==k.name&&(l.name=k.name),k.icon&&(l.a.W=k.icon.image_34,l.a.Y=k.icon.image_44,l.a.$=k.icon.image_68,l.a.aa=k.icon.image_88,l.a.P=k.icon.image_102,l.a.R=k.icon.image_132,l.a.T=k.icon.image_230,l.a.ba=k.icon.image_default),
+l.version=Math.max(l.version,p));g.J=Math.max(g.J,p);e.self&&(g.a=q(g,e.self.id),g.a.c||(g.a.c=new fa),ga(g.a.c,e.self.prefs,p));if(void 0!==e.typing)for(h in g.c=e.typing,g.c)for(var x in g.c[h])g.c[h][x]=p;pa();b["static"].typing&&P()}if(b.live){for(var w in b.live)(g=c.b[w])?C(g,b.live[w],d):c.b[w]=new A(w,250,b.live[w],d);for(var t in b.live)(d=z(c.a,t))&&!d.b&&(Fa(d,b.live[t]),F&&b.live[F.id]&&va())}}Z()}else setTimeout(Z,1E3*Y)}function Z(){Ga(Ha)}
+function za(a){F&&document.getElementById(F.id).classList.remove("selected");document.getElementById(a.id).classList.add("selected");document.body.classList.remove("no-room-selected");F=a;a=F.name||(F.c?F.c.name:void 0);if(!a){a=[];for(var b in F.a)a.push(F.a[b].name);a=a.join(", ")}document.getElementById("currentRoomTitle").textContent=a;va();T();document.getElementById("fileUploadContainer").classList.add("hidden");Da();I&&(I=null,R());J&&(J=null,R());F.f&&!E.b[F.id]&&(b=new XMLHttpRequest,b.open("GET",
+"api/hist?room="+F.id,!0),b.send(null))}function Ba(a,b,c){var d=F;new FileReader;var g=new FormData,e=new XMLHttpRequest;g.append("file",b);g.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(g)}
+function Ca(a){if(J){var b=new XMLHttpRequest;b.open("PUT","api/msg?room="+F.id+"&ts="+J.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=E.a.f.data[a.substr(0,-1===c?void 0:c)])?(c=new XMLHttpRequest,c.open("POST","api/cmd?room="+F.id+"&cmd="+encodeURIComponent(a.name.substr(1))+"&args="+encodeURIComponent(b.trim()),!0),c.send(null),!0):!1}var b=F,c=I,d=new XMLHttpRequest;a="api/msg?room="+b.id+"&text="+encodeURIComponent(a);
+if(c){var g=q(E.a,c.j),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.text,author_name:"<@"+g.id+"|"+g.name+">",author_icon:g.a.o,text:c.text,footer:e,ts:c.b}]))}d.open("POST",a,!0);d.send(null);return!0}function ya(a){var b=new XMLHttpRequest;b.open("DELETE","api/msg?room="+F.id+"&ts="+a.id,!0);b.send(null)}
+function W(a,b,c){var d=new XMLHttpRequest;d.open("POST","api/reaction?room="+a+"&msg="+b+"&reaction="+encodeURIComponent(c),!0);d.send(null)};

+ 7 - 0
srv/public/style.css

@@ -75,6 +75,13 @@ body { display: flex; margin: 0; padding: 0; font-family: Lato, sans-serif; }
 .slackmsg-attachment .slackmsg-author-img { max-height: 18px; max-width: 18px; vertical-align: middle; margin-right: 5px; }
 .slackmsg-attachment-img { max-height: 200px; max-width: 400px; }
 
+.slack-command-list { list-style: none; margin: 10px 10px 0 10px; padding: 0; background: #4D394B; color: #AB9BA9; }
+.slack-command-item { display: flex; margin: 2px 0; }
+.slack-command-item > * { padding: 0 5px; }
+.slack-command-name { font-weight: bold; }
+.slack-command-usage { color: white; }
+.slack-command-desc { flex: 1; font-style: italic; text-align: right; }
+
 .attach-file-icon { height: 1.5em; vertical-align: bottom; }
 .msgform { display: flex; margin: 0 10px; }
 .msgform-input { flex: 1; }