Selaa lähdekoodia

[add][Closes #29][Refs #9] Add button styles, add confirm dialogs on button having confirm field

B Thibault 8 vuotta sitten
vanhempi
commit
326e4706b4
9 muutettua tiedostoa jossa 310 lisäystä ja 92 poistoa
  1. 1 0
      Makefile
  2. 156 0
      cli/confirmDialog.js
  3. 30 15
      cli/dom.js
  4. 3 0
      cli/lang/en.js
  5. 3 0
      cli/lang/fr.js
  6. 11 0
      cli/resources.js
  7. 16 3
      cli/ui.js
  8. 76 73
      srv/public/slack.min.js
  9. 14 1
      srv/public/style.css

+ 1 - 0
Makefile

@@ -8,6 +8,7 @@ SRC=		srv/src/context.js		\
 			cli/lang/fr.js			\
 			cli/lang/en.js			\
 			\
+			cli/confirmDialog.js	\
 			cli/resources.js		\
 			cli/ui.js				\
 			cli/dom.js				\

+ 156 - 0
cli/confirmDialog.js

@@ -0,0 +1,156 @@
+
+/**
+ * @constructor
+ * @param {string} title
+ * @param {string|Element} content
+**/
+function ConfirmDialog(title, content) {
+    /** @const @type {string} */
+    this.title = title;
+
+    /** @const @type {string|Element} */
+    this.content = content;
+
+    /** @const @type {Element} */
+    this.dom = this.createDom();
+
+    /** @const @type {Element} */
+    this.domOverlay = this.createDomOverlay();
+
+    /** @type {Array.<function()>} */
+    this.confirmHandlers = [];
+
+    /** @type {Array.<function()>} */
+    this.dissmissHandler = [];
+}
+
+/**
+ * @return {Element}
+**/
+ConfirmDialog.prototype.createDom = function() {
+    var 
+        dom = document.createElement("div")
+        ,domTitle = document.createElement("header")
+        ,titleLabel = document.createElement("span")
+        ,closeButton = document.createElement("span")
+        ,domBody = document.createElement("div")
+        ,domButtons = document.createElement("footer");
+    var _this = this;
+
+    dom.confirmButton = document.createElement("span");
+    dom.dissmissButton = document.createElement("span");
+
+    titleLabel.textContent = this.title;
+    if (typeof this.content == "string")
+        domBody.innerHTML = this.content;
+    else
+        domBody.appendChild(this.content);
+
+    domTitle.className = R.klass.dialog.title;
+    titleLabel.className = R.klass.dialog.titleLabel;
+    closeButton.className = R.klass.dialog.closeButton;
+    closeButton.textContent = 'x';
+    domTitle.appendChild(titleLabel);
+    domTitle.appendChild(closeButton);
+    dom.appendChild(domTitle);
+
+    domBody.className = R.klass.dialog.body;
+    dom.appendChild(domBody);
+
+    dom.dissmissButton.className = R.klass.button;
+    dom.dissmissButton.textContent = locale.dissmiss;
+
+    dom.dissmissButton.addEventListener("click", function() {
+        _this.buttonClicked(false);
+    });
+    closeButton.addEventListener("click", function() {
+        _this.buttonClicked(false);
+    });
+    dom.confirmButton.addEventListener("click", function() {
+        _this.buttonClicked(true);
+    });
+    domButtons.appendChild(dom.dissmissButton);
+
+    dom.confirmButton.className = R.klass.button;
+    dom.confirmButton.textContent = locale.ok;
+    domButtons.appendChild(dom.confirmButton);
+    domButtons.className = R.klass.buttonContainer +' ' +R.klass.dialog.buttonBar;
+
+    dom.appendChild(domButtons);
+    dom.className = R.klass.dialog.container;
+
+    return dom;
+};
+
+/**
+ * @param {boolean} confirmed
+**/
+ConfirmDialog.prototype.buttonClicked = function(confirmed) {
+    (confirmed ? this.confirmHandlers : this.dissmissHandler).forEach(function(handler) {
+        handler();
+    });
+    this.close();
+};
+
+/**
+ * @return {Element}
+**/
+ConfirmDialog.prototype.createDomOverlay = function() {
+    var dom = document.createElement("div");
+
+    dom.className = R.klass.dialog.overlay;
+    dom.addEventListener("click", (function() {
+        this.buttonClicked(false);
+    }).bind(this));
+    return dom;
+};
+
+/**
+ * @param {string} confirmText
+ * @param {string} dissmissText
+ * @return {ConfirmDialog}
+**/
+ConfirmDialog.prototype.setButtonText = function(confirmText, dissmissText) {
+    this.dom.confirmButton.textContent = confirmText;
+    this.dom.dissmissButton.textContent = dissmissText;
+    return this;
+};
+
+/**
+ * @param {Element=} domParent
+ * @return {ConfirmDialog}
+**/
+ConfirmDialog.prototype.spawn = function(domParent) {
+    domParent = domParent || document.body;
+    domParent.appendChild(this.domOverlay);
+    domParent.appendChild(this.dom);
+    return this;
+};
+
+/**
+ * @return {ConfirmDialog}
+**/
+ConfirmDialog.prototype.close = function() {
+    this.dom.remove();
+    this.domOverlay.remove();
+    return this;
+};
+
+/**
+ * @param {function()} handler
+ * @return {ConfirmDialog}
+**/
+ConfirmDialog.prototype.onConfirm = function(handler) {
+    this.confirmHandlers.push(handler);
+    return this;
+};
+
+/**
+ * @param {function()} handler
+ * @return {ConfirmDialog}
+**/
+ConfirmDialog.prototype.onDissmiss = function(handler) {
+    this.dissmissHandler.push(handler);
+    return this;
+};
+

+ 30 - 15
cli/dom.js

@@ -286,6 +286,27 @@ function createMessageGroupDom(user, userName) {
     return dom;
 }
 
+/**
+ * @param {string=} colorText
+ * @return {string}
+**/
+function getColor(colorText) {
+    /** @const @type {Object.<string, string>} */
+    var colorMap = {
+        "good": "#2fa44f"
+        ,"warning": "#de9e31"
+        ,"danger": "#d50200"
+    };
+    if (colorText) {
+        if (colorText[0] === '#')
+            return colorText;
+        else if (colorMap[colorText])
+            return colorMap[colorText];
+    }
+    return "#e3e4e6";
+}
+
+
 /**
  * @param {string} channelId
  * @param {Message} msg
@@ -315,18 +336,7 @@ function createAttachmentDom(channelId, msg, attachment, attachmentIndex) {
 
     rootDom.className = R.klass.msg.attachment.container;
     //Color
-    var color = "#e3e4e6";
-    if (attachment["color"]) {
-        if (attachment["color"][0] === '#')
-            color = attachment["color"][0];
-        else if (attachment["color"] === "good")
-            color = "#2fa44f";
-        else if (attachment["color"] === "warning")
-            color = "#de9e31";
-        else if (attachment["color"] === "danger")
-            color = "#d50200";
-    }
-    attachmentBlock.style.borderColor = color;
+    attachmentBlock.style.borderColor = getColor(attachment["color"] || "");
     attachmentBlock.className = R.klass.msg.attachment.block;
 
     //Pretext
@@ -442,8 +452,9 @@ function createAttachmentDom(channelId, msg, attachment, attachmentIndex) {
 
     if (attachment["actions"] && attachment["actions"].length) {
         var buttons;
+
         buttons = document.createElement("ul");
-        buttons.className = R.klass.msg.attachment.actions;
+        buttons.className = R.klass.msg.attachment.actions +' ' +R.klass.buttonContainer;
         attachmentBlock.appendChild(buttons);
 
         for (var i =0, nbAttachments = attachment["actions"].length; i < nbAttachments; i++) {
@@ -496,12 +507,16 @@ function createFieldDom(title, text, isShort) {
  * @return {Element}
 **/
 function createActionButtonDom(attachmentIndex, actionIndex, action) {
-    var li = document.createElement("li");
+    var li = document.createElement("li")
+        ,color = getColor(action["style"]);
 
     li.textContent = action["text"];
+    if (color !== getColor())
+        li.style.color = color;
+    li.style.borderColor = color;
     li.dataset.attachmentIndex = attachmentIndex;
     li.dataset.actionIndex = actionIndex;
-    li.className = R.klass.msg.attachment.actionItem;
+    li.className = R.klass.msg.attachment.actionItem +' ' +R.klass.button;
     return li;
 }
 

+ 3 - 0
cli/lang/en.js

@@ -10,6 +10,9 @@ lang["en"] = {
     ,channels: "Channels"
     ,privateMessageRoom: "Direct messages"
 
+    ,ok: "Ok"
+    ,dissmiss: "Cancel"
+
     ,formatDate: function(ts) {
         if (typeof(ts) !== "string")
             ts = parseFloat(ts);

+ 3 - 0
cli/lang/fr.js

@@ -10,6 +10,9 @@ lang["fr"] = {
     ,channels: "Discutions"
     ,privateMessageRoom: "Discutions privées"
 
+    ,ok: "Ok"
+    ,dissmiss: "Annuler"
+
     ,formatDate: function(ts) {
         if (typeof(ts) !== "string")
             ts = parseFloat(ts);

+ 11 - 0
cli/resources.js

@@ -29,6 +29,8 @@ var R = {
     ,klass: {
         selected: "selected"
         ,hidden: "hidden"
+        ,button: "button"
+        ,buttonContainer: "button-container"
         ,noRoomSelected: "no-room-selected"
         ,noNetwork: "no-network"
         ,unread: "unread"
@@ -147,6 +149,15 @@ var R = {
                 ,quote: "slackmsg-style-quote"
             }
         }
+        ,dialog: {
+            container: "dialog"
+            ,overlay: "dialog-overlay"
+            ,title: "dialog-title"
+            ,titleLabel: "dialog-title-label"
+            ,closeButton: "dialog-title-close"
+            ,body: "dialog-body"
+            ,buttonBar: "dialog-footer"
+        }
     }
 };
 

+ 16 - 3
cli/ui.js

@@ -593,9 +593,7 @@ function chatClickDelegate(e) {
                 var msg = SLACK.history[SELECTED_ROOM.id].getMessage(messageId);
 
                 if (msg && msg.attachments[attachmentIndex] && msg.attachments[attachmentIndex].actions && msg.attachments[attachmentIndex].actions[actionIndex]) {
-                    var payload = getActionPayload(SELECTED_ROOM.id, msg, msg.attachments[attachmentIndex], msg.attachments[attachmentIndex].actions[actionIndex]);
-
-                    sendCommand(payload, msg.userId);
+                    confirmAction(SELECTED_ROOM.id, msg, msg.attachments[attachmentIndex], msg.attachments[attachmentIndex].actions[actionIndex]);
                 }
             }
         } else if (target.parentElement && target.parentElement.classList.contains(R.klass.msg.hover.container)) {
@@ -645,6 +643,21 @@ function chatClickDelegate(e) {
         target = target.parentElement;
     }
 }
+function confirmAction(roomId, msg, attachmentObject, actionObject) {
+    var confirmed = function() {
+        var payload = getActionPayload(roomId, msg, attachmentObject, actionObject);
+
+        sendCommand(payload, msg.userId);
+    };
+    if (actionObject["confirm"]) {
+        (new ConfirmDialog(actionObject["confirm"]["title"], actionObject["confirm"]["text"]))
+            .setButtonText(actionObject["confirm"]["ok_text"], actionObject["confirm"]["dismiss_text"])
+            .onConfirm(confirmed)
+            .spawn();
+    } else {
+        confirmed();
+    }
+}
 
 function focusInput() {
     document.getElementById(R.id.message.input).focus();

+ 76 - 73
srv/public/slack.min.js

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

+ 14 - 1
srv/public/style.css

@@ -10,6 +10,9 @@
 
 body { display: flex; margin: 0; padding: 0; font-family: Lato, sans-serif; height: 100%; }
 
+.button { border: 1px solid black; border-radius: 3px; background: rgb(250, 251, 253); cursor: pointer; font: 13.3333px Arial; margin: 0 8px 8px 0; padding: 4px 8px; text-align: center; }
+.button-container { margin: 8px 0; padding: 0; }
+
 .slack-context { display: inline-block; max-height: 100%; width: 250px; overflow-x: hidden; overflow-y: auto; background-color: #4D394B; background-position: bottom; background-repeat: no-repeat; overflow: auto; }
 .slack-chat-container { display: flex; flex-direction: column; flex: 1; overflow: hidden; padding: 0; }
 
@@ -36,7 +39,6 @@ body { display: flex; margin: 0; padding: 0; font-family: Lato, sans-serif; heig
 
 .hidden { display: none; }
 .error { display: none; position: fixed; top: 0; left: 0; right: 0; height: 2em; line-height: 2em; background: #ffa2a2; padding: 0.5em 1em; }
-.button { border: 1px solid black; background: white; cursor: pointer; font: 13.3333px Arial; margin: 0; padding: 1px 6px; }
 .no-network .error { display: inline-block; }
 .slack-chat-content { flex: 1; overflow: auto; }
 .slack-chat-title { display: inline-block; padding: 14px 10px; font-size: 1.75em; font-style: italic; }
@@ -122,6 +124,9 @@ body { display: flex; margin: 0; padding: 0; font-family: Lato, sans-serif; heig
 .slackmsg-attachment-fields .field-long { width: 100%; }
 .slackmsg-attachment-fields .field-title { font-weight: bold; }
 
+.slackmsg-attachment-actions { list-style: none; color: #444547; }
+.slackmsg-attachment-actions-item { display: inline-block; }
+
 .slack-command-list:empty { display: none; }
 .slack-command-list { list-style: none; margin: 10px 10px 0 10px; padding: 0; background: #4D394B; color: #AB9BA9; max-height: 10em; overflow-x: hidden; overflow-y: auto;}
 .slack-command-item { display: flex; margin: 2px 0; }
@@ -157,6 +162,14 @@ body { display: flex; margin: 0; padding: 0; font-family: Lato, sans-serif; heig
 .emojibar-search { width: 300px; margin: 5px auto; }
 .emojibar-overlay { position: fixed; top: 0; bottom: 0; left: 0; right: 0;  background: rgba(0, 0, 0, 0.2); }
 
+.dialog-overlay { position: fixed; top: 0; bottom: 0; left: 0; right: 0;  background: rgba(0, 0, 0, 0.2); }
+.dialog { position: fixed; display: inline-block; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: 1000; background: #ddd; text-align: left; border-radius: 3px; }
+.dialog-title { padding: 0 0 0 16px; position: relative; background-color: #4D394B; font-weight: bold; color: white; }
+.dialog-title-label { display: inline-block; margin: 8px 0; }
+.dialog-title-close { display: inline-block; position: absolute; top: 0; bottom: 0; right: 8px; height: 19px; width: 19px; margin: auto; background: rgb(250, 251, 253); border-radius: 3px; cursor: pointer; color: #000103; text-align: center; line-height: 15px; }
+.dialog-body { padding: 16px; }
+.dialog-footer { text-align: right; padding: 0 16px 16px 0; }
+
 .typing-container { position: relative; }
 .typing-container > * { position: relative; bottom: 1px; font-size: 18px; animation-name: upAndDown; animation-duration: 3s; animation-iteration-count: infinite; }
 .typing-container .typing-dot1 { animation-delay: 0; }