Forráskód Böngészése

[add][Refs #4] set a class on a room list item when a user is typing in this room and remove it afterwards

B Thibault 8 éve
szülő
commit
143aff8da6
5 módosított fájl, 126 hozzáadás és 68 törlés
  1. 8 1
      cli/data.js
  2. 1 0
      cli/resources.js
  3. 23 0
      cli/ui.js
  4. 62 61
      srv/public/slack.min.js
  5. 32 6
      srv/src/slackData.js

+ 8 - 1
cli/data.js

@@ -31,8 +31,10 @@ SlackWrapper.prototype.update = function(data) {
     if (data["v"])
         this.lastServerVersion = data["v"];
     if (data["static"]) {
-        this.context.updateStatic(data["static"], 0);
+        this.context.updateStatic(data["static"], Date.now());
         onContextUpdated();
+        if (data["static"]["typing"])
+            onTypingUpdated();
     }
     if (data["live"]) {
         for (var i in data["live"]) {
@@ -55,6 +57,11 @@ SlackWrapper.prototype.update = function(data) {
     }
 };
 
+setInterval(function() {
+    if (SLACK.context.cleanTyping(Date.now()))
+        onTypingUpdated();
+}, 1000);
+
 /**
  * @param {string} text
  * @return {boolean}

+ 1 - 0
cli/resources.js

@@ -59,6 +59,7 @@ var R = {
             ,typeChannel: "slack-channel"
             ,typeGroup: "slack-group"
             ,typeDirect: "slack-ims"
+            ,typing: "slack-context-typing"
         }
         ,msg: {
             item: "slackmsg-item"

+ 23 - 0
cli/ui.js

@@ -116,6 +116,29 @@ function onContextUpdated() {
     });
 }
 
+function onTypingUpdated() {
+    var typing = SLACK.context.typing;
+    for (var chanId in SLACK.context.self.channels) {
+        if (!SLACK.context.self.channels[chanId].archived) {
+            var dom = document.getElementById(chanId);
+            if (typing[chanId])
+                dom.classList.add(R.klass.chatList.typing);
+            else
+                dom.classList.remove(R.klass.chatList.typing);
+        }
+    }
+    for (var userId in SLACK.context.users) {
+        var ims = SLACK.context.users[userId].ims;
+        if (ims && !ims.archived) {
+            var dom = document.getElementById(ims.id);
+            if (typing[ims.id])
+                dom.classList.add(R.klass.chatList.typing);
+            else
+                dom.classList.remove(R.klass.chatList.typing);
+        }
+    }
+}
+
 function onNetworkStateUpdated(isNetworkWorking) {
     isNetworkWorking ? document.body.classList.remove(R.klass.noNetwork) : document.body.classList.add(R.klass.noNetwork);
     updateTitle();

+ 62 - 61
srv/public/slack.min.js

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

+ 32 - 6
srv/src/slackData.js

@@ -579,9 +579,6 @@ SlackData.prototype.updateStatic = function(data, t) {
             groupObj = this.groups[data["groups"][i]["id"]] = new SlackGroup(data["groups"][i]["id"]);
         groupObj.update(this, data["groups"][i], t);
     }
-    if (data["typing"] !== undefined) {
-        console.log(data["typing"]);
-    }
     if (data["emojis"]) this.emojis = data["emojis"];
     if (!this.team) this.team = new SlackTeam(data["team"]["id"]);
     this.team.update(data["team"], t);
@@ -591,6 +588,12 @@ SlackData.prototype.updateStatic = function(data, t) {
         if (!this.self.prefs) this.self.prefs = new SelfPreferences();
         this.self.prefs.update(data["self"]["prefs"], t);
     }
+    if (data["typing"] !== undefined) {
+        this.typing = data["typing"];
+        for (var i in this.typing)
+            for (var j in this.typing[i])
+                this.typing[i][j] = t;
+    }
 };
 
 SelfPreferences.prototype.toStatic = function(t) {
@@ -645,7 +648,7 @@ SlackData.prototype.buildStatic = function(t) {
             ,"prefs": this.self.prefs.toStatic(t)
         }
         ,"emojis": this.emojis
-        ,"typing": {}
+        ,"typing": undefined
     };
     for (var chanId in this.channels) {
         var chan = this.channels[chanId].toStatic(t);
@@ -676,19 +679,42 @@ SlackData.prototype.buildStatic = function(t) {
         for (var typingUser in this.typing[typingChan]) {
             if (this.typing[typingChan][typingUser] +3000 >= this.staticV) {
                 if (!tChan) tChan = {};
-                tChan[typingUser] = this.typing[typingChan][typingUser];
+                tChan[typingUser] = 1;
             } else {
                 delete this.typing[typingChan][typingUser];
             }
         }
-        if (tChan)
+        if (tChan) {
+            if (res["typing"] === undefined)
+                res["typing"] = {};
             res["typing"][typingChan] = tChan;
+        }
         else
             delete this.typing[typingChan];
     }
     return res;
 };
 
+SlackData.prototype.cleanTyping = function(t) {
+    var updated = false;
+    for (var typingChan in this.typing) {
+        var chanEmpty = true;
+        for (var typingUser in this.typing[typingChan]) {
+            if (this.typing[typingChan][typingUser] +3000 < t) {
+                delete this.typing[typingChan][typingUser];
+                updated = true;
+            } else {
+                chanEmpty = false;
+            }
+        }
+        if (chanEmpty) {
+            delete this.typing[typingChan];
+            updated = true;
+        }
+    }
+    return updated;
+}
+
 /**
  * @param {*} msg
  * @param {number} t