Browse Source

[add] closure-compiled emojione 2.3
[add] do not recompute element dom when not updated
[tmp] WIP

B Thibault 8 năm trước cách đây
mục cha
commit
424582378d

+ 1 - 0
.gitignore

@@ -1,6 +1,7 @@
 *.swp
 *.bak
 cli/closure-compiler-v*.jar
+cli/emoji/emojione/data.js
 /srv/config.js
 
 # cache

+ 26 - 4
Makefile

@@ -17,13 +17,19 @@ SRC=		srv/src/context.js		\
 			cli/data.js				\
 			cli/contextBackground.js\
 			cli/workflow.js			\
+			cli/uiMessage.js		\
 			cli/utils.js
 
 OUTPUT=		srv/public/slack.min.js
 
+SRC_EMOJIONE=	cli/emoji/emojione/data.js		\
+				cli/emoji/emojione/emojione.js
+
+OUTPUT_EMOJIONE= srv/public/emojione.sprites.js
+
 CLOSURE=	cli/closure-compiler-v20170218.jar
 
-all:	core
+all:	core emojione
 
 core:
 	java -jar ${CLOSURE} --compilation_level ADVANCED --language_in=ECMASCRIPT5_STRICT --warning_level=VERBOSE --js_output_file ${OUTPUT} ${SRC}
@@ -31,12 +37,28 @@ core:
 core-debug:
 	java -jar ${CLOSURE} --compilation_level WHITESPACE_ONLY --language_in=ECMASCRIPT5_STRICT --js_output_file ${OUTPUT} ${SRC}
 
+core-clean:
+	$(RM) $(OUTPUT)
+
 $OUTPUT: all
 
-clean:	core-clean
+cli/emoji/emojione/data.js:
+	node cli/emoji/emojione/_makeemojiData.js > cli/emoji/emojione/data.js
 
-core-clean:
-	$(RM) $(OUTPUT)
+emojione: cli/emoji/emojione/data.js
+	echo "(function(){" > ${OUTPUT_EMOJIONE}
+	java -jar ${CLOSURE} --compilation_level ADVANCED --language_in=ECMASCRIPT5_STRICT --warning_level=VERBOSE ${SRC_EMOJIONE} >> ${OUTPUT_EMOJIONE}
+	echo "})();" >> ${OUTPUT_EMOJIONE}
+
+emojione-debug: cli/emoji/emojione/data.js
+	echo "(function(){" > ${OUTPUT_EMOJIONE}
+	java -jar ${CLOSURE} --compilation_level WHITESPACE_ONLY --language_in=ECMASCRIPT5_STRICT ${SRC_EMOJIONE} >> ${OUTPUT_EMOJIONE}
+	echo "})();" >> ${OUTPUT_EMOJIONE}
+
+emojione-clean:
+	$(RM) $(OUTPUT_EMOJIONE) cli/emoji/emojione/data.js
+
+clean:	core-clean emojione-clean
 
 re:	clean all
 

+ 2 - 2
cli/data.js

@@ -22,7 +22,7 @@ function SlackWrapper() {
     /** @type {ChatContext} */
     this.context = new ChatContext();
 
-    /** @type {!Object.<string, RoomHistory>} **/
+    /** @type {!Object.<string, UiRoomHistory>} **/
     this.history = {};
 }
 
@@ -45,7 +45,7 @@ SlackWrapper.prototype.update = function(data) {
         for (var i in data["live"]) {
             var history = this.history[i];
             if (!history)
-                history = this.history[i] = new RoomHistory(i, 250, data["live"][i], now);
+                history = this.history[i] = new UiRoomHistory(i, 250, data["live"][i], now);
             else
                 history.pushAll(data["live"][i], now);
         }

+ 29 - 49
cli/dom.js

@@ -130,33 +130,31 @@ function createReactionDom(chanId, msgId, reaction, users) {
 }
 
 /**
- * @param {string} channelId
- * @param {Message} msg
+ * @param {UiMessage|UiMeMessage|UiNoticeMessage} msg
  * @param {boolean=} skipAttachment
  * @return {Element}
 **/
-function doCreateMessageDom(channelId, msg, skipAttachment) {
+function doCreateMessageDom(msg, skipAttachment) {
+    var channelId = msg.channelId;
     var dom = document.createElement("div")
         ,msgBlock = document.createElement("div")
-        ,ts = document.createElement("div")
-        ,text = document.createElement("div")
-        ,authorName = document.createElement("span")
         ,hover = document.createElement("ul")
         ,hoverReply = document.createElement("li")
-        ,attachments = document.createElement("ul")
-        ,reactions = document.createElement("ul")
-        ,sender = SLACK.context.users[msg.userId];
 
-    dom.id = channelId +"_" +msg.ts;
+    dom.attachments = document.createElement("ul");
+    dom.reactions = document.createElement("ul");
+    dom.ts = document.createElement("div");
+    dom.textDom = document.createElement("div");
+    dom.authorName = document.createElement("span");
+
+    dom.id = channelId +"_" +msg.id;
     dom.className = R.klass.msg.item;
-    ts.className = R.klass.msg.ts;
-    text.className = R.klass.msg.msg;
-    authorName.className = R.klass.msg.authorname;
+    dom.ts.className = R.klass.msg.ts;
+    dom.textDom.className = R.klass.msg.msg;
+    dom.authorName.className = R.klass.msg.authorname;
     hover.className = R.klass.msg.hover.container;
     hoverReply.className = R.klass.msg.hover.reply;
-    ts.innerHTML = locale.formatDate(msg.ts);
-    text.innerHTML = formatText(msg.text);
-    authorName.textContent = sender ? sender.name : (msg.username || "?");
+
     hover.appendChild(hoverReply);
     if ('makeEmoji' in window) {
         var hoverReaction = document.createElement("li")
@@ -216,40 +214,20 @@ function doCreateMessageDom(channelId, msg, skipAttachment) {
             hover.appendChild(hoverRemove);
         }
     }
-    if (msg instanceof NoticeMessage) {
-        var onlyVisible = document.createElement("span");
-        onlyVisible.className = R.klass.msg.notice;
-        onlyVisible.textContent = locale.onlyVisible;
-        msgBlock.appendChild(onlyVisible);
-    }
-    msgBlock.appendChild(authorName);
-    msgBlock.appendChild(text);
-    msgBlock.appendChild(ts);
-    msgBlock.appendChild(attachments);
-    if (msg.edited) {
-        var edited = document.createElement("div");
-        edited.innerHTML = locale.edited;
-        edited.className = R.klass.msg.edited;
-        msgBlock.appendChild(edited);
-    }
-    msgBlock.appendChild(reactions);
+    msgBlock.appendChild(dom.authorName);
+    msgBlock.appendChild(dom.textDom);
+    msgBlock.appendChild(dom.ts);
+    msgBlock.appendChild(dom.attachments);
+
+    var edited = document.createElement("div");
+    edited.innerHTML = locale.edited;
+    edited.className = R.klass.msg.edited;
+    msgBlock.appendChild(edited);
+
+    msgBlock.appendChild(dom.reactions);
     msgBlock.className = R.klass.msg.content;
-    attachments.className = R.klass.msg.attachment.list;
-    reactions.className = R.klass.msg.reactions.container;
-    if (skipAttachment !== true) {
-        if (msg.reactions) for (var reaction in msg.reactions) {
-            var reac = createReactionDom(channelId, msg.id, reaction, msg.reactions[reaction]);
-            reac && reactions.appendChild(reac);
-        }
-        for (var i =0, nbAttachments = msg.attachments.length; i < nbAttachments; i++) {
-            var attachment = msg.attachments[i];
-            if (attachment) {
-                var domAttachment = createAttachmentDom(channelId, msg, attachment, i);
-                if (domAttachment)
-                    attachments.appendChild(domAttachment);
-            }
-        }
-    }
+    dom.attachments.className = R.klass.msg.attachment.list;
+    dom.reactions.className = R.klass.msg.reactions.container;
     dom.appendChild(msgBlock);
     dom.appendChild(hover);
     return dom;
@@ -436,6 +414,7 @@ function createAttachmentDom(channelId, msg, attachment, attachmentIndex) {
     attachmentBlock.appendChild(textBlock);
     attachmentBlock.appendChild(imgDom);
 
+    // Fields
     if (attachment["fields"] && attachment["fields"].length) {
         var fieldsContainer = document.createElement("ul");
 
@@ -450,6 +429,7 @@ function createAttachmentDom(channelId, msg, attachment, attachmentIndex) {
         });
     }
 
+    // Buttons
     if (attachment["actions"] && attachment["actions"].length) {
         var buttons;
 

+ 33 - 0
cli/emoji/emojione/_makeemojiData.js

@@ -0,0 +1,33 @@
+
+const fs = require('fs');
+
+var inputData = JSON.parse(fs.readFileSync(__dirname +"/emoji.json").toString("UTF-8"));
+var result = [];
+
+function unDot(str) {
+    if (str[0] === ':' && str[str.length -1] === ':')
+        return str.substr(1, str.length -2);
+    return str;
+}
+
+for (var i in inputData) {
+    var item = {
+        names: [],
+        keywords: inputData[i].keywords,
+        unicode: inputData[i].unicode
+    },
+    shortName = unDot(inputData[i].shortname);
+
+    inputData[i].aliases.forEach(function(name) {
+        item.names.push(unDot(name));
+    });
+    if (shortName.substr(0, 4) === 'flag') {
+        item.names.unshift(shortName);
+    } else {
+        item.names.push(shortName);
+    }
+    result.push(item);
+}
+
+console.log("var emojis=" +JSON.stringify(result));
+

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 0
cli/emoji/emojione/emoji.json


+ 47 - 0
cli/emoji/emojione/emojione.js

@@ -0,0 +1,47 @@
+window['makeEmoji'] = function(name) {
+    var emoji;
+
+    if (typeof(name) === "string") {
+        for (var i =0, nbEmojis = emojis.length; i < nbEmojis && !emoji; i++) {
+            var emojiNames = emojis[i]["names"];
+
+            for (var j=0, nbEmojiName = emojiNames.length ;j < nbEmojiName && !emoji; j++)
+                if (emojiNames[j] === name)
+                    emoji = emojis[i];
+        }
+    } else {
+        emoji = name;
+    }
+    if(emoji) {
+        var dom = document.createElement("span");
+        dom.className="emoji emojione emojione-" +emoji["unicode"];
+        return dom;
+    }
+    return null;
+};
+
+window['emojiProviderHeader']="emojione.logo.svg";
+
+window['searchEmojis'] = function(queryString) {
+    var result = {}
+        ,queryLength = queryString.length;
+
+    lp: for (var emojiIndex =0, nbEmojis = emojis.length; emojiIndex < nbEmojis; emojiIndex++) {
+        var currentEmoji = emojis[emojiIndex];
+
+        for (var nameIndex =0, nbNames = currentEmoji["names"].length; nameIndex < nbNames; nameIndex++) {
+            if(currentEmoji["names"][nameIndex].substr(0, queryLength) === queryString) {
+                result[currentEmoji["names"][0]] = currentEmoji;
+                continue lp;
+            }
+        }
+        for (var keywordIndex =0, nbKeywords = currentEmoji["keywords"].length; keywordIndex < nbKeywords; keywordIndex++) {
+            if(currentEmoji["keywords"][keywordIndex].substr(0, queryLength) === queryString) {
+                result[currentEmoji["names"][0]] = currentEmoji;
+                break;
+            }
+        }
+    }
+    return result;
+};
+

+ 7 - 32
cli/ui.js

@@ -178,7 +178,7 @@ function onReplyingToUpdated() {
         closeLink.textContent = 'x';
         domParent.textContent = "";
         domParent.appendChild(closeLink);
-        domParent.appendChild(createMessageDom("reply_" +SELECTED_ROOM.id, REPLYING_TO, true));
+        domParent.appendChild(REPLYING_TO.duplicateDom());
         focusInput();
     } else {
         document.body.classList.remove(R.klass.replyingTo);
@@ -200,7 +200,7 @@ function onEditingUpdated() {
         closeLink.textContent = 'x';
         domParent.textContent = "";
         domParent.appendChild(closeLink);
-        domParent.appendChild(createMessageDom("edit_" +SELECTED_ROOM.id, EDITING, true));
+        domParent.appendChild(EDITING.duplicateDom());
         document.getElementById(R.id.message.input).value = EDITING.text;
         focusInput();
     } else {
@@ -263,35 +263,6 @@ function makeEmojiDom(emojiCode) {
     return typeof emoji === "string" ? null : emoji;
 }
 
-/**
- * @param {string} channelId
- * @param {Message} msg
- * @param {boolean=} skipAttachment
- * @return {Element}
-**/
-function doCreateMeMessageDom(channelId, msg, skipAttachment) {
-    var dom = doCreateMessageDom(channelId, msg, skipAttachment);
-    dom.classList.add(R.klass.msg.meMessage);
-    return dom;
-}
-
-/**
- * @param {string} channelId
- * @param {Message} msg
- * @param {boolean=} skipAttachment
- * @return {Element}
-**/
-function createMessageDom(channelId, msg, skipAttachment) {
-    var dom = (msg instanceof MeMessage) ?
-        doCreateMeMessageDom(channelId, msg, skipAttachment):
-        doCreateMessageDom(channelId, msg, skipAttachment);
-    if (msg.edited)
-        dom.classList.add(R.klass.msg.edited);
-    if (msg instanceof NoticeMessage)
-        dom.classList.add(R.klass.msg.notice);
-    return dom;
-}
-
 /**
  * @param {number} unreadhi
  * @param {number} unread
@@ -364,7 +335,7 @@ function onRoomUpdated() {
     if (SLACK.history[currentRoomId])
         SLACK.history[currentRoomId].messages.forEach(function(msg) {
             if (!msg.removed) {
-                var dom = createMessageDom(currentRoomId, msg)
+                var dom = msg.getDom()
                     ,newGroupDom = false;
                 if (prevMsg && prevMsg.userId === msg.userId && msg.userId) {
                     if (Math.abs(firstTsCombo -msg.ts) < 30 && !(msg instanceof MeMessage))
@@ -377,6 +348,8 @@ function onRoomUpdated() {
                 }
                 if ((!prevMsg || prevMsg.ts <= SELECTED_ROOM.lastRead) && msg.ts > SELECTED_ROOM.lastRead)
                     dom.classList.add(R.klass.msg.firstUnread);
+                else
+                    dom.classList.remove(R.klass.msg.firstUnread);
                 if (msg instanceof MeMessage) {
                     prevMsg = null;
                     prevMsgDom = null;
@@ -394,6 +367,8 @@ function onRoomUpdated() {
                     prevMsgDom = dom;
                     currentMsgGroupDom.content.appendChild(dom);
                 }
+            } else {
+                msg.removeDom();
             }
         });
     var content = document.getElementById(R.id.currentRoom.content);

+ 312 - 0
cli/uiMessage.js

@@ -0,0 +1,312 @@
+
+/**
+ * @constructor
+ * @extends {RoomHistory}
+ * @param {Room|string} room or roomId
+ * @param {number} keepMessages number of messages to keep in memory
+ * @param {Array|undefined} evts
+ * @param {number|undefined} now
+**/
+function UiRoomHistory(room, keepMessages, evts, now) {
+    RoomHistory.call(this, room, keepMessages, evts, now);
+}
+UiRoomHistory.prototype = Object.create(RoomHistory.prototype);
+UiRoomHistory.prototype.constructor = UiRoomHistory;
+
+UiRoomHistory.prototype.messageFactory = function(ev, ts) {
+    if (ev["isMeMessage"] === true)
+        return new UiMeMessage(this.id, ev, ts);
+    if (ev["isNotice"] === true)
+        return new UiNoticeMessage(this.id, ev, ts);
+    return new UiMessage(this.id, ev, ts);
+}
+
+/** @interface */
+function IUiMessage() {};
+
+/**
+ * @return {Element}
+**/
+IUiMessage.prototype.getDom = function() {};
+
+/**
+ * @return {IUiMessage}
+**/
+IUiMessage.prototype.removeDom = function() {};
+
+/**
+ * @return {IUiMessage}
+**/
+IUiMessage.prototype.invalidate = function() {};
+
+/**
+ * @return {IUiMessage}
+**/
+IUiMessage.prototype.createDom = function() {};
+
+/**
+ * @return {IUiMessage}
+**/
+IUiMessage.prototype.updateDom = function() {};
+
+/**
+ * @return {Element}
+**/
+IUiMessage.prototype.duplicateDom = function() {};
+
+/** @const */
+var AbstractUiMessage = (function() {
+    var updateReactions = function(_this, channelId) {
+        var reactionFrag = document.createDocumentFragment();
+
+        if (_this.reactions) {
+            for (var reaction in _this.reactions) {
+                var reac = createReactionDom(channelId, _this.id, reaction, _this.reactions[reaction]);
+                if (reac)
+                    reactionFrag.appendChild(reac);
+            }
+        }
+        _this.dom.reactions.textContent = '';
+        _this.dom.reactions.appendChild(reactionFrag);
+    },
+
+    updateAttachments = function(_this, channelId) {
+        var attachmentFrag = document.createDocumentFragment();
+
+        for (var i =0, nbAttachments = _this.attachments.length; i < nbAttachments; i++) {
+            var attachment = _this.attachments[i];
+            if (attachment) {
+                var domAttachment = createAttachmentDom(channelId, _this, attachment, i);
+                if (domAttachment)
+                    attachmentFrag.appendChild(domAttachment);
+            }
+        }
+        _this.dom.attachments.textContent = '';
+        _this.dom.attachments.appendChild(attachmentFrag);
+    },
+
+    updateCommon = function(_this, sender) {
+        _this.dom.ts.innerHTML = locale.formatDate(_this.ts);
+        _this.dom.textDom.innerHTML = formatText(_this.text);
+        _this.dom.authorName.textContent = sender ? sender.name : (_this.username || "?");
+    };
+
+    return {
+        /** @type {Element|null} *
+        dom: null,
+
+        /** @type {boolean} *
+        uiNeedRefresh: true,
+        */
+
+        /** @param {IUiMessage} _this */
+        invalidate: function(_this) {
+            _this.uiNeedRefresh = true;
+            return _this;
+        },
+
+        /** @param {UiMessage|UiMeMessage|UiNoticeMessage} _this */
+        removeDom: function(_this) {
+            if (_this.dom && _this.dom.parentElement) {
+                _this.dom.remove();
+                delete(_this.dom);
+            }
+            return _this;
+        },
+
+        /** @param {UiMessage|UiMeMessage|UiNoticeMessage} _this */
+        getDom: function(_this) {
+            if (!_this.dom) {
+                _this.createDom().updateDom();
+
+            } else if (_this.uiNeedRefresh) {
+                _this.uiNeedRefresh = false;
+                _this.updateDom();
+            }
+            return _this.dom;
+        },
+
+        /** @param {UiMessage|UiMeMessage|UiNoticeMessage} _this */
+        updateDom: function(_this) {
+            var sender = SLACK.context.users[_this.userId];
+
+            updateCommon(_this, sender);
+            updateAttachments(_this, _this.channelId);
+            updateReactions(_this, _this.channelId);
+            if (_this.edited)
+                _this.dom.classList.add(R.klass.msg.edited);
+            return _this;
+        },
+
+        duplicateDom: function(_this) {
+            return _this.dom.cloneNode(true);
+        }
+    };
+})();
+
+/**
+ * @constructor
+ * @implements {IUiMessage}
+ * @extends {MeMessage}
+ * @param {*} ev
+ * @param {number} ts
+**/
+function UiMeMessage(channelId, ev, ts) {
+    // Extends AbstractUiMessage and MeMessage
+    MeMessage.call(this, ev, ts);
+
+    /** @type {string} @const */
+    this.channelId = channelId;
+    this.dom = AbstractUiMessage.dom;
+    this.uiNeedRefresh = AbstractUiMessage.uiNeedRefresh;
+}
+UiMeMessage.prototype = Object.create(MeMessage.prototype);
+UiMeMessage.prototype.constructor = UiMeMessage;
+
+UiMeMessage.prototype.invalidate = function() {
+    return AbstractUiMessage.invalidate(this);
+};
+
+UiMeMessage.prototype.removeDom = function() {
+    return AbstractUiMessage.removeDom(this);
+};
+
+UiMeMessage.prototype.getDom = function() {
+    return AbstractUiMessage.getDom(this);
+};
+
+UiMeMessage.prototype.createDom = function() {
+    this.dom = doCreateMessageDom(this, false);
+    this.dom.classList.add(R.klass.msg.meMessage);
+    return this;
+};
+
+UiMeMessage.prototype.duplicateDom = function() {
+    return AbstractUiMessage.duplicateDom(this);
+};
+
+UiMeMessage.prototype.updateDom = function() {
+    AbstractUiMessage.updateDom(this);
+    return this;
+};
+
+UiMeMessage.prototype.update = function(ev, ts) {
+    MeMessage.prototype.update.call(this, ev, ts);
+    this.invalidate();
+};
+
+/**
+ * @constructor
+ * @implements {IUiMessage}
+ * @extends {Message}
+ * @param {*} ev
+ * @param {number} ts
+**/
+function UiMessage(channelId, ev, ts) {
+    // Extends AbstractUiMessage and Message
+    Message.call(this, ev, ts);
+
+    /** @type {string} @const */
+    this.channelId = channelId;
+    /** @type {Element} */
+    this.dom = AbstractUiMessage.dom;
+    /** @type {boolean} */
+    this.uiNeedRefresh = AbstractUiMessage.uiNeedRefresh;
+}
+UiMessage.prototype = Object.create(Message.prototype);
+UiMessage.prototype.constructor = UiMessage;
+
+UiMessage.prototype.invalidate = function() {
+    return AbstractUiMessage.invalidate(this);
+};
+
+UiMessage.prototype.removeDom = function() {
+    return AbstractUiMessage.removeDom(this);
+};
+
+UiMessage.prototype.getDom = function() {
+    return AbstractUiMessage.getDom(this);
+};
+
+UiMessage.prototype.createDom = function() {
+    this.dom = doCreateMessageDom(this, false);
+    return this;
+};
+
+UiMessage.prototype.duplicateDom = function() {
+    return AbstractUiMessage.duplicateDom(this);
+};
+
+UiMessage.prototype.updateDom = function() {
+    AbstractUiMessage.updateDom(this);
+    return this;
+};
+
+UiMessage.prototype.update = function(ev, ts) {
+    Message.prototype.update.call(this, ev, ts);
+    this.invalidate();
+};
+
+/**
+ * @constructor
+ * @implements {IUiMessage}
+ * @extends {NoticeMessage}
+ * @param {*} ev
+ * @param {number} ts
+**/
+function UiNoticeMessage(channelId, ev, ts) {
+    // Extends AbstractUiMessage and NoticeMessage
+    NoticeMessage.call(this, ev, ts);
+
+    /** @type {string} @const */
+    this.channelId = channelId;
+    this.dom = AbstractUiMessage.dom;
+    /** @type {Element} */
+    this.domWrapper = null;
+    this.uiNeedRefresh = AbstractUiMessage.uiNeedRefresh;
+}
+UiNoticeMessage.prototype = Object.create(NoticeMessage.prototype);
+UiNoticeMessage.prototype.constructor = UiNoticeMessage;
+
+UiNoticeMessage.prototype.invalidate = function() {
+    return AbstractUiMessage.invalidate(this);
+};
+
+UiNoticeMessage.prototype.removeDom = function() {
+    if (this.domWrapper && this.domWrapper.parentElement) {
+        this.domWrapper.remove();
+        delete(this.domWrapper);
+    }
+    if (this.dom)
+        delete(this.dom);
+    return this;
+};
+
+UiNoticeMessage.prototype.getDom = function() {
+    AbstractUiMessage.getDom(this);
+    return this.domWrapper;
+};
+
+UiNoticeMessage.prototype.duplicateDom = function() {
+    return this.domWrapper.cloneNode(true);
+};
+
+UiNoticeMessage.prototype.createDom = function() {
+    this.dom = doCreateMessageDom(this, false);
+    this.domWrapper = document.createElement("span");
+    this.dom.classList.add(R.klass.msg.notice);
+    this.domWrapper.className = R.klass.msg.notice;
+    this.domWrapper.textContent = locale.onlyVisible;
+    return this;
+};
+
+UiNoticeMessage.prototype.updateDom = function() {
+    AbstractUiMessage.updateDom(this);
+    return this;
+};
+
+UiNoticeMessage.prototype.update = function(ev, ts) {
+    NoticeMessage.prototype.update.call(this, ev, ts);
+    this.invalidate();
+};
+

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 0 - 4
srv/public/emojione.sprites.js


+ 82 - 78
srv/public/slack.min.js

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

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác