|
|
@@ -1,86 +1,38 @@
|
|
|
-function SlackTeam(teamData){this.id=teamData["id"];this.name=teamData["name"];this.domain=teamData["domain"];this.callApp=teamData["prefs"]["calling_app_id"];this.callAppName=teamData["prefs"]["calling_app_name"];this.fileUploadPermission=teamData["prefs"]["disable_file_uploads"];this.fileEditPermission=teamData["prefs"]["disable_file_editing"];this.fileDeletePermission=teamData["prefs"]["disable_file_deleting"];this.icons={image_34:teamData["icon"]["image_34"],image_44:teamData["icon"]["image_44"],
|
|
|
-image_68:teamData["icon"]["image_68"],image_88:teamData["icon"]["image_88"],image_102:teamData["icon"]["image_102"],image_132:teamData["icon"]["image_132"],image_230:teamData["icon"]["image_230"],image_default:teamData["icon"]["image_default"]}}
|
|
|
-function SlackChan(chanData,slackData){this.id=chanData["id"];this.name=chanData["name"];this.created=chanData["created"];this.creator=slackData.getMember(chanData["creator"]);this.archived=chanData["is_archived"];this.isMember=chanData["is_member"];this.lastRead=parseFloat(chanData["last_read"]);this.members={};if(chanData["members"])for(var i=0,nbMembers=chanData["members"].length;i<nbMembers;i++){var member=slackData.getMember(chanData["members"][i]);this.members[member.id]=member;member.channels[this.id]=
|
|
|
-this}this.topic;this.topicTs;this.topicCreator;this.purpose;this.purposeTs;this.purposeCreator;if(chanData["topic"]){this.topic=chanData["topic"]["value"];this.topicCreator=slackData.getMember(chanData["topic"]["creator"]);this.topicTs=chanData["topic"]["last_set"]}if(chanData["purpose"]){this.purpose=chanData["purpose"]["value"];this.purposeCreator=slackData.getMember(chanData["purpose"]["creator"]);this.purposeTs=chanData["purpose"]["last_set"]}}
|
|
|
-function SlackGroup(slack,groupData){var memberNames=[];this.id=groupData["id"];this.members={};for(var i=0,nbMembers=groupData["members"].length;i<nbMembers;i++){var member=slack.getMember(groupData["members"][i]);this.members[groupData["members"][i]]=member;member.channels[this.id]=this;memberNames.push(member.name)}this.name=memberNames.join(", ");this.created=groupData["created"];this.creator=slack.getMember(groupData["creator"]);this.archived=groupData["is_archived"];this.lastRead=parseFloat(groupData["last_read"]);
|
|
|
-this.topic;this.topicTs;this.topicCreator;this.purpose;this.purposeTs;this.purposeCreator;if(groupData["topic"]){this.topic=groupData["topic"]["value"];this.topicCreator=slack.getMember(groupData["topic"]["creator"]);this.topicTs=groupData["topic"]["last_set"]}if(groupData["purpose"]){this.purpose=groupData["purpose"]["value"];this.purposeCreator=slack.getMember(groupData["purpose"]["creator"]);this.purposeTs=groupData["purpose"]["last_set"]}}
|
|
|
-function SlackIms(user,imsData){this.id=imsData["id"];this.created=imsData["created"];this.user=user;this.lastRead=parseFloat(imsData["last_read"])}
|
|
|
-function SlackUser(userData){this.id=userData["id"];this.name=userData["name"];this.deleted=userData["deleted"];this.status=userData["status"];this.realName=userData["real_name"]||userData["profile"]["real_name"];this.presence=userData["presence"]!=="away";this.icons={image_24:userData["profile"]["image_24"],image_32:userData["profile"]["image_32"],image_48:userData["profile"]["image_48"],image_72:userData["profile"]["image_72"],image_192:userData["profile"]["image_192"],image_512:userData["profile"]["image_512"]};
|
|
|
-this.email=userData["profile"]["email"];this.firstName=userData["profile"]["first_name"];this.lastName=userData["profile"]["last_name"];this.channels={};this.ims=null}function SlackBot(botData){this.id=botData["id"];this.deleted=botData["deleted"];this.name=botData["name"];this.appId=botData["app_id"];this.icons={image_36:botData["icons"]["image_36"],image_48:botData["icons"]["image_48"],image_72:botData["icons"]["image_72"]};this.channels={};this.ims=null}
|
|
|
-function SlackData(slack){this.team=null;this.channels={};this.groups={};this.ims={};this.users={};this.self=null;this.bots={};this.emojis={};this.slack=slack;this.staticV=0;this.liveV=0}
|
|
|
-SlackTeam.prototype.toStatic=function(){return{"id":this.id,"name":this.name,"domain":this.domain,"prefs":{"calling_app_id":this.callApp,"calling_app_name":this.callAppName,"disable_file_uploads":this.fileUploadPermission,"disable_file_editing":this.fileEditPermission,"disable_file_deleting":this.fileDeletePermission},"icon":this.icons}};
|
|
|
-SlackChan.prototype.toStatic=function(){var res={"id":this.id,"name":this.name,"created":this.created,"creator":this.creator.id,"is_archived":this.archived,"is_member":this.isMember,"last_read":this.lastRead};if(this.isMember){res["members"]=this.members?Object.keys(this.members):[];res["topic"]={"value":this.topic,"creator":this.topicCreator?this.topicCreator.id:null,"last_set":this.topicTs};res["purpose"]={"value":this.purpose,"creator":this.purposeCreator?this.purposeCreator.id:null,"last_set":this.purposeTs}}return res};
|
|
|
-SlackUser.prototype.toStatic=function(){return{"id":this.id,"name":this.name,"deleted":this.deleted,"status":this.status,"real_name":this.realName,"profile":{"email":this.email,"first_name":this.firstName,"last_name":this.lastName,"image_24":this.icons.image_24,"image_32":this.icons.image_32,"image_48":this.icons.image_48,"image_72":this.icons.image_72,"image_192":this.icons.image_192,"image_512":this.icons.image_512}}};
|
|
|
-SlackGroup.prototype.toStatic=function(){var res={"id":this.id,"members":[],"created":this.created,"creator":this.creator.id,"is_archived":this.archived,"last_read":this.lastRead};for(var mId in this.members)res["members"].push(mId);if(this.topic)res["topic"]={"value":this.topic,"creator":this.topicCreator.id,"last_set":this.topicTs};if(this.purpose)res["purpose"]={"value":this.purpose,"creator":this.purposeCreator.id,"last_set":this.purposeTs};return res};
|
|
|
-SlackIms.prototype.toStatic=function(){return{"id":this.id,"created":this.created,"user":this.user.id,"last_read":this.lastRead}};SlackBot.prototype.toStatic=function(){return{"id":this.id,"deleted":this.deleted,"name":this.name,"app_id":this.appId,"icons":{"image_36":this.icons.image_36,"image_48":this.icons.image_48,"image_72":this.icons.image_72}}};
|
|
|
-SlackData.prototype.updateStatic=function(data){for(var i=0,nbBots=data["bots"].length;i<nbBots;i++)this.bots[data["bots"][i].id]=new SlackBot(data["bots"][i]);for(var i=0,nbUsers=data["users"].length;i<nbUsers;i++)this.users[data["users"][i].id]=new SlackUser(data["users"][i]);for(var i=0,nbIms=data["ims"].length;i<nbIms;i++){var user=this.getMember(data["ims"][i]["user"]);if(user){user.ims=new SlackIms(user,data["ims"][i]);this.ims[user.ims.id]=user.ims}}for(var i=0,nbChan=data["channels"].length;i<
|
|
|
-nbChan;i++)this.channels[data["channels"][i].id]=new SlackChan(data["channels"][i],this);for(var i=0,nbGroups=data["groups"].length;i<nbGroups;i++)this.groups[data["groups"][i]["id"]]=new SlackGroup(this,data["groups"][i]);this.emojis=data["emojis"];this.team=new SlackTeam(data["team"]);this.staticV=parseFloat(data["latest_event_ts"]);this.self=this.getMember(data["self"]["id"]);if(!this.slack)return};
|
|
|
-SlackData.prototype.getBotsByAppId=function(appId){var bots=[];for(var botId in this.bots)if(this.bots[botId].appId===appId)bots.push(this.bots[botId]);return bots};SlackData.prototype.getMember=function(mId){return this.users[mId]||this.bots[mId]||null};SlackData.prototype.getChannel=function(chanId){return this.channels[chanId]||this.ims[chanId]||this.groups[chanId]||null};
|
|
|
-SlackData.prototype.buildStatic=function(){var res={"team":this.team.toStatic(),"channels":[],"groups":[],"ims":[],"users":[],"bots":[],"self":{"id":this.self.id},"emojis":this.emojis};for(var chanId in this.channels)res["channels"].push(this.channels[chanId].toStatic());for(var userId in this.users){res["users"].push(this.users[userId].toStatic());res["ims"].push(this.users[userId].ims.toStatic())}for(var botId in this.bots)res["bots"].push(this.bots[botId].toStatic());for(var groupId in this.groups)res["groups"].push(this.groups[groupId].toStatic());
|
|
|
-return res};SlackData.prototype.onMessage=function(msg){return false};SlackData.prototype.getUpdates=function(knownVersion){return this.staticV>knownVersion?this.buildStatic():undefined};(function(){if(typeof module!=="undefined")module.exports.SlackData=SlackData})();function SlackMessage(e,ts){this.userId=e["user"];this.id=e["ts"];this.ts=ts||parseFloat(e["ts"]);this.type=e["type"];this.subtype=e["subtype"];this.raw=e;this.starred=!!e["is_starred"];this.pinned=false;this.reactions={};var _this=this;e["reactions"]&&e["reactions"].forEach(function(r){_this.reactions[r["name"]]=[];r["users"].forEach(function(userId){_this.reactions[r["name"]].push(userId)})})}
|
|
|
-function SlackHistory(room,keepMessages,evts){this.id=typeof room==="string"?room:room.id;this.messages=[];this.v=0;this.keepMessages=keepMessages;if(evts)this.pushAll(evts)}SlackMessage.prototype.toStatic=function(){return this.raw};SlackMessage.prototype.addReaction=function(reaction,userId){if(!this.reactions[reaction])this.reactions[reaction]=[];this.reactions[reaction].push(userId)};
|
|
|
-SlackMessage.prototype.removeReaction=function(reaction,userId){if(this.reactions[reaction])if(this.reactions[reaction].length===1)delete this.reactions[reaction];else this.reactions[reaction]=this.reactions[reaction].filter(function(i){return i!==userId})};SlackMessage.prototype.hasReactionForUser=function(reaction,userId){if(this.reactions[reaction])return this.reactions[reaction].indexOf(userId)!==-1;return false};
|
|
|
-SlackHistory.prototype.pushAll=function(evts){var result=0;evts.forEach(function(e){result=Math.max(this.push(e),result)}.bind(this));this.resort();return result};
|
|
|
-SlackHistory.prototype.push=function(ev){var ts=parseFloat(ev["ts"]);for(var i=0,nbMsg=this.messages.length;i<nbMsg;i++)if(this.messages[i].ts===ts)return ts;this.messages.push(new SlackMessage(ev,ts));while(this.messages.length>this.keepMessages)this.messages.shift();if(ev["type"]==="reaction_added")this.addReaction(ev["reaction"],ev["user"],parseFloat(ev["item"]["ts"]));else if(ev["type"]==="reaction_removed")this.removeReaction(ev["reaction"],ev["user"],parseFloat(ev["item"]["ts"]));return ts};
|
|
|
-SlackHistory.prototype.addReaction=function(reaction,userId,ts){var msg=this.getMessage(ts);if(msg)msg.addReaction(reaction,userId)};SlackHistory.prototype.removeReaction=function(reaction,userId,ts){var msg=this.getMessage(ts);if(msg)msg.removeReaction(reaction,userId)};SlackHistory.prototype.getMessage=function(ts){for(var i=0,nbMessages=this.messages.length;i<nbMessages&&ts>=this.messages[i].ts;i++)if(this.messages[i].ts===ts)return this.messages[i];return null};
|
|
|
-SlackHistory.prototype.getMessageById=function(id){for(var i=0,nbMessages=this.messages.length;i<nbMessages;i++)if(this.messages[i].id==id)return this.messages[i];return null};SlackHistory.prototype.toStatic=function(knownVersion){var result=[];for(var i=this.messages.length-1;i>=0&&this.messages[i].ts>knownVersion;i--)result.push(this.messages[i].toStatic());return result};SlackHistory.prototype.resort=function(){this.messages.sort(function(a,b){return a.ts-b.ts})};
|
|
|
-(function(){if(typeof module!=="undefined")module.exports.SlackHistory=SlackHistory})();var lang={},locale;function initLang(lg){if(!lg){for(var i=0,nbLang=navigator.languages.length;i<nbLang;i++)if(lang.hasOwnProperty(navigator.languages[i])){lg=navigator.languages[i];break}if(!lg)lg="en"}locale=lang[lg];console.log("Loading language pack: "+lg);if(locale.dom)for(var i in locale.dom)document.getElementById(i).textContent=locale.dom[i]};lang["fr"]={unknownMember:"Utilisateur inconnu",unknownChannel:"Channel inconnu",newMessage:"Nouveau message",netErrorShort:"Reseau",dom:{"fileUploadCancel":"Annuler","neterror":"Impossible de se connecter au chat !"}};lang["en"]={unknownMember:"Unknown member",unknownChannel:"Unknown channel",newMessage:"New message",netErrorShort:"Network",dom:{"fileUploadCancel":"Cancel","neterror":"Cannot connect to chat !"}};var R={id:{chanList:"chanList",chatList:"chatList",currentRoom:{title:"currentRoomTitle",content:"chatWindow"},message:{form:"msgForm",input:"msgInput",replyTo:"replyToContainer",file:{bt:"attachFile",formContainer:"fileUploadContainer",fileInput:"fileUploadInput",form:"fileUploadForm",error:"fileUploadError",cancel:"fileUploadCancel"}},favicon:"linkFavicon"},klass:{selected:"selected",hidden:"hidden",noRoomSelected:"no-room-selected",noNetwork:"no-network",unread:"unread",unreadHi:"unreadHi",replyingTo:"replyingTo",
|
|
|
-emoji:{emoji:"emoji",small:"emoji-small",medium:"emoji-medium",custom:"emoji-custom"},chatList:{entry:"slack-context-room",typeChannel:"slack-channel",typeGroup:"slack-group",typeDirect:"slack-ims"},msg:{item:"slackmsg-item",meMessage:"slackmsg-me_message",ts:"slackmsg-ts",author:"slackmsg-author",authorname:"slackmsg-author-name",authorAvatar:"slackmsg-author-img",msg:"slackmsg-msg",hover:{container:"slackmsg-hover",reply:"slackmsg-hover-reply"},replyTo:{close:"replyto-close"},link:"slackmsg-link",
|
|
|
-linkuser:"slackmsg-link-user",linkchan:"slackmsg-link-chan",attachment:{container:"slackmsg-attachment",list:"slackmsg-attachments",pretext:"slackmsg-attachment-pretext",title:"slackmsg-attachment-title",text:"slackmsg-attachment-text",thumbImg:"slackmsg-attachment-thumb",img:"slackmsg-attachment-img",footer:"slackmsg-attachment-footer",footerText:"slackmsg-attachment-footer-text",footerIcon:"slackmsg-attachment-footer-icon"},reactions:{container:"slackmsg-reactions",item:"slackmsg-reaction-item"},
|
|
|
-style:{bold:"slackmsg-style-bold",code:"slackmsg-style-code",italic:"slackmsg-style-italic",strike:"slackmsg-style-strike",quote:"slackmsg-style-quote"}}}};var REPLYING_TO=null,NOTIFICATION_COOLDOWN=30*1E3,NOTIFICATION_DELAY=5*1E3,lastNotificationSpawn=0;
|
|
|
-function createChanListItem(chan){var dom=document.createElement("li"),link=document.createElement("a");dom.id=chan.id;link.href="#"+chan.id;if(chan.id[0]==="D")dom.className=R.klass.chatList.entry+" "+R.klass.chatList.typeDirect;else if(chan.id[0]==="G")dom.className=R.klass.chatList.entry+" "+R.klass.chatList.typeGroup;else if(chan.id[0]==="C")dom.className=R.klass.chatList.entry+" "+R.klass.chatList.typeChannel;link.textContent=chan.name;dom.appendChild(link);return dom}
|
|
|
-function createImsListItem(ims){var dom=document.createElement("li"),link=document.createElement("a");dom.id=ims.id;link.href="#"+ims.id;dom.className=R.klass.chatList.entry;link.textContent=ims.user.name;dom.appendChild(link);return dom}
|
|
|
-function onContextUpdated(){var chanListFram=document.createDocumentFragment(),sortedChans=SLACK.context.self?Object.keys(SLACK.context.self.channels):[];sortedChans.sort(function(a,b){if(a[0]!==b[0])return a[0]-b[0];return(SLACK.context.channels[a]||SLACK.context.groups[a]).name.localeCompare((SLACK.context.channels[b]||SLACK.context.groups[b]).name)});sortedChans.forEach(function(chanId){var chan=SLACK.context.channels[chanId]||SLACK.context.groups[chanId],chanListItem=createChanListItem(chan);
|
|
|
-if(chanListItem)chanListFram.appendChild(chanListItem)});var sortedUsers=SLACK.context.users?Object.keys(SLACK.context.users):[];sortedUsers.sort(function(a,b){return SLACK.context.users[a].name.localeCompare(SLACK.context.users[b].name)});sortedUsers.forEach(function(userId){var ims=SLACK.context.users[userId].ims,imsListItem=createImsListItem(ims);if(imsListItem)chanListFram.appendChild(imsListItem)});document.getElementById(R.id.chanList).textContent="";document.getElementById(R.id.chanList).appendChild(chanListFram);
|
|
|
-setRoomFromHashBang();updateTitle()}function onNetworkStateUpdated(isNetworkWorking){isNetworkWorking?document.body.classList.remove(R.klass.noNetwork):document.body.classList.add(R.klass.noNetwork);updateTitle()}
|
|
|
-function onRoomSelected(){var name=SELECTED_ROOM.name||(SELECTED_ROOM.user?SELECTED_ROOM.user.name:undefined);if(!name){var members=[];for(var i in SELECTED_ROOM.members)members.push(SELECTED_ROOM.members[i].name);name=members.join(", ")}var roomLi=document.getElementById(SELECTED_ROOM.id);document.getElementById(R.id.currentRoom.title).textContent=name;onRoomUpdated();focusInput();document.getElementById(R.id.message.file.formContainer).classList.add(R.klass.hidden);markRoomAsRead(SELECTED_ROOM);
|
|
|
-if(REPLYING_TO){REPLYING_TO=null;onReplyingToUpdated()}}
|
|
|
-function onReplyingToUpdated(){if(REPLYING_TO){document.body.classList.add(R.klass.replyingTo);var domParent=document.getElementById(R.id.message.replyTo),closeLink=document.createElement("a");closeLink.addEventListener("click",function(){REPLYING_TO=null;onReplyingToUpdated()});closeLink.className=R.klass.msg.replyTo.close;closeLink.textContent="x";domParent.textContent="";domParent.appendChild(closeLink);domParent.appendChild(createMessageDom("reply_"+SELECTED_ROOM.id,REPLYING_TO,true))}else document.body.classList.remove(R.klass.replyingTo)}
|
|
|
-function createReactionDom(chanId,msgId,reaction,users){var emojiDom=makeEmojiDom(reaction);if(emojiDom){var dom=document.createElement("li"),a=document.createElement("a"),emojiContainer=document.createElement("span"),userList=document.createElement("span"),userNames=[];for(var i=0,nbUser=users.length;i<nbUser;i++){var user=SLACK.context.getMember(users[i]);if(user)userNames.push(user.name)}userNames.sort();userList.textContent=userNames.join(", ");emojiContainer.appendChild(emojiDom);emojiContainer.className=
|
|
|
-R.klass.emoji.small;a.href="javascript:toggleReaction('"+chanId+"', '"+msgId+"', '"+reaction+"')";a.appendChild(emojiContainer);a.appendChild(userList);dom.className=R.klass.msg.reactions.item;dom.appendChild(a);return dom}return null}
|
|
|
-window["toggleReaction"]=function(chanId,msgId,reaction){var hist=SLACK.history[chanId];if(!hist)return;var msg=hist.getMessageById(msgId);if(msg)if(msg.hasReactionForUser(reaction,SLACK.context.self.id))removeReaction(chanId,msgId,reaction);else addReaction(chanId,msgId,reaction)};
|
|
|
-function doCreateMessageDom(channelId,msg,skipAttachment){var dom=document.createElement("div"),ts=document.createElement("div"),text=document.createElement("div"),author=document.createElement("div"),authorImg=document.createElement("img"),authorName=document.createElement("span"),hover=document.createElement("ul"),hoverReply=document.createElement("li"),attachments=document.createElement("ul"),reactions=document.createElement("ul"),sender=msg.raw["user"]?SLACK.context.users[msg.raw["user"]]:SLACK.context.bots[msg.raw["bot_id"]];
|
|
|
-dom.id=channelId+"_"+msg.ts;dom.className=R.klass.msg.item;ts.className=R.klass.msg.ts;text.className=R.klass.msg.msg;author.className=R.klass.msg.author;authorImg.className=R.klass.msg.authorAvatar;authorName.className=R.klass.msg.authorname;hover.className=R.klass.msg.hover.container;hoverReply.className=R.klass.msg.hover.reply;ts.innerHTML=formatDate(msg.ts);text.innerHTML=formatSlackText(msg.raw["text"]||"");authorName.textContent=sender?sender.name:msg.raw["username"]||"?";if(!sender&&!msg.raw["username"])text.textContent=
|
|
|
-msg.raw["subtype"]||JSON.stringify(msg.raw);authorImg.src=sender?sender.icons.image_48:"";author.appendChild(authorImg);author.appendChild(authorName);hover.appendChild(hoverReply);dom.appendChild(author);dom.appendChild(text);dom.appendChild(ts);dom.appendChild(attachments);dom.appendChild(reactions);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)}if(msg.raw["attachments"])msg.raw["attachments"].forEach(function(attachment){var domAttachment=createAttachmentDom(channelId,msg,attachment);if(domAttachment)attachments.appendChild(domAttachment)})}dom.appendChild(hover);return dom}function formatDate(ts){if(typeof ts!=="string")ts=parseFloat(ts);return(new Date(ts*1E3)).toLocaleTimeString()}
|
|
|
-function tryGetCustomEmoji(emoji){var loop={};while(!loop[emoji]){var emojisrc=SLACK.context.emojis[emoji];if(emojisrc)if(emojisrc.substr(0,6)=="alias:"){loop[emoji]=true;emoji=emojisrc.substr(6)}else{var dom=document.createElement("span");dom.className=R.klass.emoji.custom+" "+R.klass.emoji.emoji;dom.style.backgroundImage="url('"+emojisrc+"')";return dom}return emoji}return emoji}
|
|
|
-function makeEmojiDom(emojiCode){var emoji=tryGetCustomEmoji(emojiCode);if(typeof emoji==="string"&&"makeEmoji"in window)emoji=window["makeEmoji"](emoji);return typeof emoji==="string"?null:emoji}
|
|
|
-function formatEmojis(inputString){return inputString.replace(/:(\w+):/g,function(returnFailed,emoji){var emojiDom=makeEmojiDom(emoji);if(emojiDom){var domParent=document.createElement("span");domParent.className=R.klass.emoji.small;domParent.appendChild(emojiDom);return domParent.outerHTML}return returnFailed})}
|
|
|
-function formatSlackText(fullText){var msgContents=fullText.split(/\r?\n/g);for(var msgContentIndex=0,nbMsgContents=msgContents.length;msgContentIndex<nbMsgContents;msgContentIndex++){var msgContent=msgContents[msgContentIndex],_msgContent="",currentMods={},quote=false,i=0;msgContent=msgContent.replace(new RegExp("<([@#]?)([^>]*)>","g"),function(matched,type,entity){var sub=entity.split("|");if(type==="@"){if(!sub[1]){var user=SLACK.context.getMember(sub[0]);sub[1]=user?"@"+user.name:locale.unknownMember}else if("@"!==
|
|
|
-sub[1][0])sub[1]="@"+sub[1];sub[0]="#"+sub[0];sub[2]=R.klass.msg.link+" "+R.klass.msg.linkuser}else if(type==="#"){if(!sub[1]){var chan=SLACK.context.getChannel(sub[0]);sub[1]=chan?"#"+chan.name:locale.unknownChannel}else if("#"!==sub[1][0])sub[1]="#"+sub[1];sub[0]="#"+sub[0];sub[2]=R.klass.msg.link+" "+R.klass.msg.linkchan}else if(sub[0].indexOf("://")!==-1){if(!sub[1])sub[1]=sub[0];sub[2]=R.klass.msg.link}else return matched;return'<a href="'+sub[0]+'" class="'+sub[2]+'"'+(!type?' target="_blank"':
|
|
|
-"")+">"+sub[1]+"</a>"});msgContent=formatEmojis(msgContent);var msgLength=msgContent.length;var checkEnd=function(str,pos,c){while(str[pos]){if(str[pos]!=" "&&str[pos]!=c&&str[pos+1]==c)return true;pos++}return false},appendMod=function(mods){if(!Object.keys(currentMods).length)return"";return'<span class="'+Object.keys(mods).join(" ")+'">'};while(i<msgLength&&(msgContent[i]===" "||msgContent[i]==="\t"))i++;if(msgContent.substr(i,4)===">"){quote=true;i+=4}for(;i<msgLength;i++){var c=msgContent[i];
|
|
|
-if(c==="<"){do _msgContent+=msgContent[i++];while(msgContent[i-1]!==">");i--;continue}if(!currentMods[R.klass.msg.style.bold]&&c==="*"&&msgContent[i+1]&&checkEnd(msgContent,i,c)){if(Object.keys(currentMods).length)_msgContent+="</span>";currentMods[R.klass.msg.style.bold]=true;_msgContent+=appendMod(currentMods)}else if(!currentMods[R.klass.msg.style.strike]&&c==="~"&&msgContent[i+1]&&checkEnd(msgContent,i,c)){if(Object.keys(currentMods).length)_msgContent+="</span>";currentMods[R.klass.msg.style.strike]=
|
|
|
-true;_msgContent+=appendMod(currentMods)}else if(!currentMods[R.klass.msg.style.code]&&c==="`"&&msgContent[i+1]&&checkEnd(msgContent,i,c)){if(Object.keys(currentMods).length)_msgContent+="</span>";currentMods[R.klass.msg.style.code]=true;_msgContent+=appendMod(currentMods)}else if(!currentMods[R.klass.msg.style.italic]&&c==="_"&&msgContent[i+1]&&checkEnd(msgContent,i,c)){if(Object.keys(currentMods).length)_msgContent+="</span>";currentMods[R.klass.msg.style.italic]=true;_msgContent+=appendMod(currentMods)}else{var finalFound=
|
|
|
-false;_msgContent+=c;do{if(currentMods[R.klass.msg.style.bold]&&c!=="*"&&msgContent[i+1]==="*"){delete currentMods[R.klass.msg.style.bold];finalFound=true}else if(currentMods[R.klass.msg.style.strike]&&c!=="~"&&msgContent[i+1]==="~"){delete currentMods[R.klass.msg.style.strike];finalFound=true}else if(currentMods[R.klass.msg.style.code]&&c!=="`"&&msgContent[i+1]==="`"){delete currentMods[R.klass.msg.style.code];finalFound=true}else if(currentMods[R.klass.msg.style.italic]&&c!=="_"&&msgContent[i+1]===
|
|
|
-"_"){delete currentMods[R.klass.msg.style.italic];finalFound=true}else break;c=msgContent[++i]}while(i<msgLength);if(finalFound)_msgContent+="</span>"+appendMod(currentMods)}}if(currentMods)_msgContent+="</span>";if(quote)msgContents[msgContentIndex]='<span class="'+R.klass.msg.style.quote+'">'+_msgContent+"</span>";else msgContents[msgContentIndex]=_msgContent}return msgContents.join("<br/>")}
|
|
|
-function createAttachmentDom(channelId,msg,attachment){var rootDom=document.createElement("li"),attachmentBlock=document.createElement("div"),pretext=document.createElement("div"),titleBlock=document.createElement("a"),authorBlock=document.createElement("div"),authorImg=document.createElement("img"),authorName=document.createElement("a"),textBlock=document.createElement("div"),textDom=document.createElement("div"),thumbImgDom=document.createElement("img"),imgDom=document.createElement("img"),footerBlock=
|
|
|
-document.createElement("div"),footerIcon=document.createElement("img"),footerText=document.createElement("span"),footerTs=document.createElement("span");rootDom.className=R.klass.msg.attachment.container;var color="#e3e4e6";if(attachment["color"])if(attachment["color"][0]==="#")color=attachment["color"][0];else if(attachment["color"]==="good")color="#2fa44f";else if(attachment["color"]==="warning")color="#de9e31";else if(attachment["color"]==="danger")color="#d50200";attachmentBlock.style.borderColor=
|
|
|
-color;pretext.className=R.klass.msg.attachment.pretext;if(attachment["pretext"])pretext.innerHTML=formatSlackText(attachment["pretext"]);else pretext.classList.add(R.klass.hidden);titleBlock.target="_blank";if(attachment["title"]){titleBlock.innerHTML=formatSlackText(attachment["title"]);if(attachment["title_link"])titleBlock.href=attachment["title_link"];titleBlock.className=R.klass.msg.attachment.title}else titleBlock.className=R.klass.hidden+" "+R.klass.msg.attachment.title;authorName.target="_blank";
|
|
|
-authorBlock.className=R.klass.msg.author;if(attachment["author_name"]){authorName.innerHTML=formatSlackText(attachment["author_name"]);authorName.href=attachment["author_link"]||"";authorName.className=R.klass.msg.authorname;authorImg.className=R.klass.msg.authorAvatar;if(attachment["author_icon"])authorImg.src=attachment["author_icon"];else authorImg.classList.add(R.klass.hidden)}else authorBlock.classList.add(R.klass.hidden);textDom.innerHTML=formatSlackText(attachment["text"]||"");textDom.klassName=
|
|
|
-R.klass.msg.attachment.text;thumbImgDom.className=R.klass.msg.attachment.thumbImg;if(attachment["thumb_url"])thumbImgDom.src=attachment["thumb_url"];else thumbImgDom.classList.add(R.klass.hidden);imgDom.className=R.klass.msg.attachment.img;if(attachment["image_url"])imgDom.src=attachment["image_url"];else imgDom.classList.add(R.klass.hidden);footerBlock.className=R.klass.msg.attachment.footer;footerText.className=R.klass.msg.attachment.footerText;footerIcon.className=R.klass.msg.attachment.footerIcon;
|
|
|
-if(attachment["footer"]){footerText.innerHTML=formatSlackText(attachment["footer"]);if(attachment["footer_icon"])footerIcon.src=attachment["footer_icon"];else footerIcon.classList.add(R.klass.hidden)}else{footerIcon.classList.add(R.klass.hidden);footerText.classList.add(R.klass.hidden)}footerTs.className=R.klass.msg.ts;if(attachment["ts"])footerTs.innerHTML=formatDate(attachment["ts"]);else footerTs.classList.add(R.klass.hidden);authorBlock.appendChild(authorImg);authorBlock.appendChild(authorName);
|
|
|
-textBlock.appendChild(textDom);textBlock.appendChild(thumbImgDom);footerBlock.appendChild(footerIcon);footerBlock.appendChild(footerText);footerBlock.appendChild(footerTs);attachmentBlock.appendChild(titleBlock);attachmentBlock.appendChild(authorBlock);attachmentBlock.appendChild(textBlock);attachmentBlock.appendChild(imgDom);attachmentBlock.appendChild(footerBlock);rootDom.appendChild(pretext);rootDom.appendChild(attachmentBlock);return rootDom}
|
|
|
-function doCreateMeMessageDom(channelId,msg,skipAttachment){var dom=doCreateMessageDom(channelId,msg,skipAttachment);dom.classList.add(R.klass.msg.meMessage);return dom}function createMessageDom(channelId,msg,skipAttachment){if(msg.subtype==="me_message")return doCreateMeMessageDom(channelId,msg,skipAttachment);return doCreateMessageDom(channelId,msg,skipAttachment)}
|
|
|
-function setFavicon(unreadhi,unread){if(!unreadhi&&!unread)document.getElementById(R.id.favicon).href="favicon_ok.png";else document.getElementById(R.id.favicon).href="favicon.png?h="+unreadhi+"&m="+unread}function setNetErrorFavicon(){document.getElementById(R.id.favicon).href="favicon_err.png"}
|
|
|
-function updateTitle(){var hasUnread=0,hasHl=0,title="";if(NEXT_RETRY){title="!"+locale.netErrorShort+" - ";setNetErrorFavicon()}else{for(var i in UNREAD_CHANS)if(UNREAD_CHANS.hasOwnProperty(i)){hasUnread+=UNREAD_CHANS[i].unread;hasHl+=UNREAD_CHANS[i].hl}if(hasHl)title="(!"+hasHl+") - ";else if(hasUnread)title="("+hasUnread+") - ";setFavicon(hasHl,hasUnread)}title+=SLACK.context.team.name;document.title=title}
|
|
|
-function spawnNotification(){if(!("Notification"in window));else if(Notification.permission==="granted"){var now=Date.now();if(lastNotificationSpawn+NOTIFICATION_COOLDOWN<now){var n=new Notification(locale.newMessage);lastNotificationSpawn=now;setTimeout(function(){n.close()},NOTIFICATION_DELAY)}}else if(Notification.permission!=="denied")Notification.requestPermission()}
|
|
|
-function onRoomUpdated(){var chatFrag=document.createDocumentFragment(),currentRoomId=SELECTED_ROOM.id;document.getElementById(R.id.currentRoom.content).textContent="";if(SLACK.history[currentRoomId])SLACK.history[currentRoomId].messages.forEach(function(msg){if(msg.type==="message"){var dom=createMessageDom(currentRoomId,msg);chatFrag.appendChild(dom)}});var content=document.getElementById(R.id.currentRoom.content);content.appendChild(chatFrag);content.scrollTop=content.scrollHeight-content.clientHeight}
|
|
|
-function chatClickDelegate(e){var target=e.target,getMessageId=function(e,target){target=target||e.target;while(target!==e.currentTarget&&target){if(target.classList.contains(R.klass.msg.item))return target.id;target=target.parentElement}};while(target!==e.currentTarget&&target){if(target.classList.contains(R.klass.msg.hover.container))return;else if(target.classList.contains(R.klass.msg.hover.reply)){var messageId=getMessageId(e,target);if(messageId){messageId=parseFloat(messageId.split("_")[1]);
|
|
|
-var history=SLACK.history[SELECTED_ROOM.id].messages;for(var i=0,histLen=history.length;i<histLen&&history[i].ts<=messageId;i++)if(history[i].ts===messageId){if(REPLYING_TO!==history[i]){REPLYING_TO=history[i];onReplyingToUpdated()}return}}return}target=target.parentElement}}function focusInput(){document.getElementById(R.id.message.input).focus()}
|
|
|
-function setRoomFromHashBang(){var hashId=document.location.hash.substr(1),room=SLACK.context.getChannel(hashId),user=SLACK.context.getMember(hashId);if(room&&room!==SELECTED_ROOM)selectRoom(room);else if(user&&user.ims)selectRoom(user.ims)}
|
|
|
-document.addEventListener("DOMContentLoaded",function(){initLang();document.getElementById(R.id.currentRoom.content).addEventListener("click",chatClickDelegate);window.addEventListener("hashchange",function(e){if(document.location.hash&&document.location.hash[0]==="#")setRoomFromHashBang()});document.getElementById(R.id.message.file.cancel).addEventListener("click",function(e){e.preventDefault();document.getElementById(R.id.message.file.error).classList.add(R.klass.hidden);document.getElementById(R.id.message.file.formContainer).classList.add(R.klass.hidden);
|
|
|
-document.getElementById(R.id.message.file.fileInput).value="";return false});document.getElementById(R.id.message.file.form).addEventListener("submit",function(e){e.preventDefault();var fileInput=document.getElementById(R.id.message.file.fileInput),filename=fileInput.value;if(filename){filename=filename.substr(filename.lastIndexOf("\\")+1);uploadFile(SELECTED_ROOM,filename,fileInput.files[0],function(errorMsg){var error=document.getElementById(R.id.message.file.error);if(errorMsg){error.textContent=
|
|
|
-errorMsg;error.classList.remove(R.klass.hidden)}else{error.classList.add(R.klass.hidden);document.getElementById(R.id.message.file.fileInput).value="";document.getElementById(R.id.message.file.formContainer).classList.add(R.klass.hidden)}})}return false});document.getElementById(R.id.message.file.bt).addEventListener("click",function(e){e.preventDefault();if(SELECTED_ROOM)document.getElementById(R.id.message.file.formContainer).classList.remove(R.klass.hidden);return false});document.getElementById(R.id.message.form).addEventListener("submit",
|
|
|
-function(e){e.preventDefault();var input=document.getElementById(R.id.message.input);if(SELECTED_ROOM&&input.value){sendMsg(SELECTED_ROOM,input.value,REPLYING_TO);input.value="";if(REPLYING_TO){REPLYING_TO=null;onReplyingToUpdated()}}focusInput();return false});window.addEventListener("blur",function(){window.hasFocus=false});window.addEventListener("focus",function(){window.hasFocus=true;lastNotificationSpawn=0;if(SELECTED_ROOM)markRoomAsRead(SELECTED_ROOM);focusInput()});window.hasFocus=true;startPolling()});var EMOJI_BAR=function(){var dom=document.createElement("div"),unicodeEmojis=document.createElement("ul"),customEmojis=document.createElement("ul"),emojiCache={unicode:{},custom:{}},isSupported=function(){return"searchEmojis"in window};wrapEmojiLi=function(emojiDom){var dom=document.createElement("li");dom.appendChild(emojiDom);return{visible:false,dom:dom}},makeUnicodeEmojiLi=function(emoji){domEmoji=window["makeEmoji"](emoji);domParent=document.createElement("span");domParent.appendChild(domEmoji);
|
|
|
-domParent.className=R.klass.emoji.medium;return wrapEmojiLi(domParent)},search=function(queryString){var emojiCount=0,toRemove=[];if(isSupported()){var emojis=window["searchEmojis"](queryString);for(var i in emojiCache.unicode)if(emojiCache.unicode[i].visible&&!emojis[i]){emojiCache.unicode[i].visible=false;unicodeEmojis.removeChild(emojiCache.unicode[i].dom)}for(var i in emojis){var e=emojiCache.unicode[i];if(!e)e=emojiCache.unicode[i]=makeUnicodeEmojiLi(emojis[i]);if(!e.visible){e.visible=true;
|
|
|
-unicodeEmojis.appendChild(e.dom)}emojiCount++}}return emojiCount},spawn=function(domParent){if(isSupported()){domParent.appendChild(dom);search("");return true}return false},close=function(){if(dom.parentElement){dom.parentElement.removeChild(dom);return true}return false};dom.appendChild(unicodeEmojis);dom.appendChild(customEmojis);return{isSupported:isSupported,spawn:spawn,search:search,close:close}}();EMOJI_BAR.spawn(document.body);var SLACK,UNREAD_CHANS={};function SlackWrapper(){this.lastServerVersion=0;this.context=new SlackData(null);this.history={}}
|
|
|
-SlackWrapper.prototype.update=function(data){if(data["v"])this.lastServerVersion=data["v"];if(data["static"]){this.context.updateStatic(data["static"]);onContextUpdated()}if(data["live"]){for(var i in data["live"]){var history=this.history[i];if(!history)this.history[i]=new SlackHistory(i,250,data["live"][i]);else history.pushAll(data["live"][i])}for(var roomId in data["live"]){onMsgReceived(this.context.getChannel(roomId),data["live"][roomId]);if(SELECTED_ROOM&&data["live"][SELECTED_ROOM.id])onRoomUpdated()}}};
|
|
|
-function onMsgReceived(chan,msg){if(chan&&(chan!==SELECTED_ROOM||!window.hasFocus)){var selfReg=new RegExp("<@"+SLACK.context.self.id),highligted=false,newHighlited=false;if(!UNREAD_CHANS[chan.id])UNREAD_CHANS[chan.id]={hl:0,unread:0};msg.forEach(function(i){if(i.type==="message"&&i.text)if(chan.id[0]==="D"||i.text.match(selfReg)){newHighlited|=!UNREAD_CHANS[chan.id].hl;UNREAD_CHANS[chan.id].hl++;highligted=true}else UNREAD_CHANS[chan.id].unread++});updateTitle();document.getElementById(chan.id).classList.add(R.klass.unread);
|
|
|
-if(highligted)document.getElementById(chan.id).classList.add(R.klass.unreadHi);if(newHighlited&&!window.hasFocus)spawnNotification()}}function markRoomAsRead(room){if(UNREAD_CHANS[room.id]){UNREAD_CHANS[room.id]={hl:0,unread:0};updateTitle()}var roomLi=document.getElementById(room.id);roomLi.classList.remove(R.klass.unread);roomLi.classList.remove(R.klass.unreadHi)}SLACK=new SlackWrapper;var NEXT_RETRY=0,SELECTED_ROOM=null;function fetchHistory(room,cb){var xhr=new XMLHttpRequest;xhr.open("GET","api/hist?room="+room.id,true);xhr.send(null)}
|
|
|
-function poll(callback){var xhr=new XMLHttpRequest;xhr.timeout=1E3*60*1;xhr.onreadystatechange=function(e){if(xhr.readyState===4){if(xhr.status===0){if(NEXT_RETRY){NEXT_RETRY=0;onNetworkStateUpdated(true)}poll(callback);return}var resp=null,success=Math.floor(xhr.status/100)===2;if(success){if(NEXT_RETRY){NEXT_RETRY=0;onNetworkStateUpdated(true)}resp=xhr.response;try{resp=JSON.parse((resp))}catch(e){resp=null}}else if(NEXT_RETRY){NEXT_RETRY+=Math.floor((NEXT_RETRY||5)/2);NEXT_RETRY=Math.min(60,NEXT_RETRY)}else{NEXT_RETRY=
|
|
|
-5;onNetworkStateUpdated(false)}callback(success,resp)}};xhr.open("GET","api?v="+SLACK.lastServerVersion,true);xhr.send(null)}function onPollResponse(success,response){if(success){if(response)SLACK.update(response);startPolling()}else setTimeout(startPolling,NEXT_RETRY*1E3)}function startPolling(){poll(onPollResponse)}
|
|
|
-function selectRoom(room){if(SELECTED_ROOM)unselectRoom();document.getElementById(room.id).classList.add(R.klass.selected);document.body.classList.remove(R.klass.noRoomSelected);SELECTED_ROOM=room;onRoomSelected();if(SELECTED_ROOM.lastRead&&!SLACK.history[SELECTED_ROOM.id])fetchHistory(SELECTED_ROOM,function(success){})}function unselectRoom(){document.getElementById(SELECTED_ROOM.id).classList.remove(R.klass.selected)}
|
|
|
-function uploadFile(chan,filename,file,callback){var fileReader=new FileReader,formData=new FormData,xhr=new XMLHttpRequest;formData.append("file",file);formData.append("filename",filename);xhr.onreadystatechange=function(){if(xhr.readyState===4)if(xhr.status===204)callback(null);else callback(xhr.statusText)};xhr.open("POST","api/file?room="+chan.id);xhr.send(formData)}
|
|
|
-function sendMsg(chan,msg,replyTo){var xhr=new XMLHttpRequest;var url="api/msg?room="+chan.id+"&text="+encodeURIComponent(msg);if(replyTo){var sender=SLACK.context.getMember(replyTo.userId),footer="Message";if(chan.id[0]==="C")footer="Channel message";else if(chan.id[0]==="D")footer="Direct message";else if(chan.id[0]==="G")footer="Group message";var attachment={"fallback":replyTo.raw["text"]||"","author_name":"<@"+sender.id+"|"+sender.name+">","author_icon":sender.icons.image_48,"text":replyTo.raw["text"]||
|
|
|
-"","footer":footer,"ts":replyTo.ts};url+="&attachments="+encodeURIComponent(JSON.stringify([attachment]))}xhr.open("POST",url,true);xhr.send(null)}function addReaction(channelId,msgId,reaction){var xhr=new XMLHttpRequest;var url="api/reaction?room="+channelId+"&msg="+msgId+"&reaction="+encodeURIComponent(reaction);xhr.open("POST",url,true);xhr.send(null)}
|
|
|
-function removeReaction(channelId,msgId,reaction){var xhr=new XMLHttpRequest;var url="api/reaction?room="+channelId+"&msg="+msgId+"&reaction="+encodeURIComponent(reaction);xhr.open("DELETE",url,true);xhr.send(null)};
|
|
|
+function k(a){this.id=a.id;this.name=a.name}function aa(a,b){this.id=a.id;this.name=a.name;this.b=parseFloat(a.last_read);this.a={};if(a.members)for(var d=0,c=a.members.length;d<c;d++){var f=m(b,a.members[d]);this.a[f.id]=f;f.f[this.id]=this}}function ba(a,b){var d=[];this.id=b.id;this.a={};for(var c=0,f=b.members.length;c<f;c++){var e=m(a,b.members[c]);this.a[b.members[c]]=e;e.f[this.id]=this;d.push(e.name)}this.name=d.join(", ");this.b=parseFloat(b.last_read)}
|
|
|
+function ca(a,b){this.id=b.id;this.c=a;this.b=parseFloat(b.last_read)}function da(a){this.id=a.id;this.name=a.name;this.status=a.status;this.b={I:a.profile.image_24,J:a.profile.image_32,l:a.profile.image_48,D:a.profile.image_72,H:a.profile.image_192,L:a.profile.image_512};this.f={};this.a=null}function ea(a){this.id=a.id;this.name=a.name;this.b={K:a.icons.image_36,l:a.icons.image_48,D:a.icons.image_72};this.f={};this.a=null}
|
|
|
+function t(){this.s=null;this.f={};this.c={};this.i={};this.a={};this.b=null;this.h={};this.o={}}function m(a,b){return a.a[b]||a.h[b]||null}function u(a,b){return a.f[b]||a.i[b]||a.c[b]||null}"undefined"!==typeof module&&(module.C.F=t);function fa(a,b){this.i=a.user;this.id=a.ts;this.c=b||parseFloat(a.ts);this.type=a.type;this.h=a.subtype;this.b=a;this.a={};var d=this;a.reactions&&a.reactions.forEach(function(a){d.a[a.name]=[];a.users.forEach(function(b){d.a[a.name].push(b)})})}function v(a,b,d){this.id="string"===typeof a?a:a.id;this.a=[];this.b=b;d&&x(this,d)}function ga(a,b,d){a.a[b]&&(1===a.a[b].length?delete a.a[b]:a.a[b]=a.a[b].filter(function(a){return a!==d}))}
|
|
|
+function x(a,b){var d=0;b.forEach(function(a){d=Math.max(this.push(a),d)}.bind(a));ha(a)}v.prototype.push=function(a){for(var b=parseFloat(a.ts),d=0,c=this.a.length;d<c;d++)if(this.a[d].c===b)return b;for(this.a.push(new fa(a,b));this.a.length>this.b;)this.a.shift();if("reaction_added"===a.type){if(d=y(this,parseFloat(a.item.ts)))c=a.reaction,a=a.user,d.a[c]||(d.a[c]=[]),d.a[c].push(a)}else"reaction_removed"===a.type&&(d=y(this,parseFloat(a.item.ts)))&&ga(d,a.reaction,a.user);return b};
|
|
|
+function y(a,b){for(var d=0,c=a.a.length;d<c&&b>=a.a[d].c;d++)if(a.a[d].c===b)return a.a[d];return null}function ha(a){a.a.sort(function(a,d){return a.c-d.c})}"undefined"!==typeof module&&(module.C.G=v);var A={},C;function ia(){var a;if(!a){for(var b=0,d=navigator.languages.length;b<d;b++)if(A.hasOwnProperty(navigator.languages[b])){a=navigator.languages[b];break}a||(a="en")}C=A[a];console.log("Loading language pack: "+a);if(C.g)for(b in C.g)document.getElementById(b).textContent=C.g[b]};A.fr={B:"Utilisateur inconnu",A:"Channel inconnu",w:"Nouveau message",u:"Reseau",g:{fileUploadCancel:"Annuler",neterror:"Impossible de se connecter au chat !"}};A.en={B:"Unknown member",A:"Unknown channel",w:"New message",u:"Network",g:{fileUploadCancel:"Cancel",neterror:"Cannot connect to chat !"}};var D=null,E=0;
|
|
|
+function ja(){var a=document.createDocumentFragment(),b=G.a.b?Object.keys(G.a.b.f):[];b.sort(function(a,b){return a[0]!==b[0]?a[0]-b[0]:(G.a.f[a]||G.a.c[a]).name.localeCompare((G.a.f[b]||G.a.c[b]).name)});b.forEach(function(b){b=G.a.f[b]||G.a.c[b];var c=document.createElement("li"),d=document.createElement("a");c.id=b.id;d.href="#"+b.id;"D"===b.id[0]?c.className="slack-context-room slack-ims":"G"===b.id[0]?c.className="slack-context-room slack-group":"C"===b.id[0]&&(c.className="slack-context-room slack-channel");d.textContent=
|
|
|
+b.name;c.appendChild(d);c&&a.appendChild(c)});b=G.a.a?Object.keys(G.a.a):[];b.sort(function(a,b){return G.a.a[a].name.localeCompare(G.a.a[b].name)});b.forEach(function(b){b=G.a.a[b].a;var c=document.createElement("li"),d=document.createElement("a");c.id=b.id;d.href="#"+b.id;c.className="slack-context-room";d.textContent=b.c.name;c.appendChild(d);c&&a.appendChild(c)});document.getElementById("chanList").textContent="";document.getElementById("chanList").appendChild(a);H();I()}
|
|
|
+function J(a){a?document.body.classList.remove("no-network"):document.body.classList.add("no-network");I()}function L(){if(D){document.body.classList.add("replyingTo");var a=document.getElementById("replyToContainer"),b=document.createElement("a");b.addEventListener("click",function(){D=null;L()});b.className="replyto-close";b.textContent="x";a.textContent="";a.appendChild(b);a.appendChild(M("reply_"+N.id,D,!0))}else document.body.classList.remove("replyingTo")}
|
|
|
+function ka(a,b,d,c){var f=O(d);if(f){for(var e=document.createElement("li"),h=document.createElement("a"),g=document.createElement("span"),p=document.createElement("span"),q=[],r=0,l=c.length;r<l;r++){var n=m(G.a,c[r]);n&&q.push(n.name)}q.sort();p.textContent=q.join(", ");g.appendChild(f);g.className="emoji-small";h.href="javascript:toggleReaction('"+a+"', '"+b+"', '"+d+"')";h.appendChild(g);h.appendChild(p);e.className="slackmsg-reaction-item";e.appendChild(h);return e}return null}
|
|
|
+window.toggleReaction=function(a,b,d){var c=G.b[a];if(c){a:{for(var f=0,e=c.a.length;f<e;f++)if(c.a[f].id==b){c=c.a[f];break a}c=null}c&&(f=G.a.b.id,c.a[d]&&-1!==c.a[d].indexOf(f)?(c=new XMLHttpRequest,c.open("DELETE","api/reaction?room="+a+"&msg="+b+"&reaction="+encodeURIComponent(d),!0)):(c=new XMLHttpRequest,c.open("POST","api/reaction?room="+a+"&msg="+b+"&reaction="+encodeURIComponent(d),!0)),c.send(null))}};
|
|
|
+function P(a,b,d){var c=document.createElement("div"),f=document.createElement("div"),e=document.createElement("div"),h=document.createElement("div"),g=document.createElement("img"),p=document.createElement("span"),q=document.createElement("ul"),r=document.createElement("li"),l=document.createElement("ul"),n=document.createElement("ul"),w=b.b.user?G.a.a[b.b.user]:G.a.h[b.b.bot_id];c.id=a+"_"+b.c;c.className="slackmsg-item";f.className="slackmsg-ts";e.className="slackmsg-msg";h.className="slackmsg-author";
|
|
|
+g.className="slackmsg-author-img";p.className="slackmsg-author-name";q.className="slackmsg-hover";r.className="slackmsg-hover-reply";f.innerHTML=Q(b.c);e.innerHTML=R(b.b.text||"");p.textContent=w?w.name:b.b.username||"?";w||b.b.username||(e.textContent=b.b.subtype||JSON.stringify(b.b));g.src=w?w.b.l:"";h.appendChild(g);h.appendChild(p);q.appendChild(r);c.appendChild(h);c.appendChild(e);c.appendChild(f);c.appendChild(l);c.appendChild(n);l.className="slackmsg-attachments";n.className="slackmsg-reactions";
|
|
|
+if(!0!==d){if(b.a)for(var z in b.a)(d=ka(a,b.id,z,b.a[z]))&&n.appendChild(d);b.b.attachments&&b.b.attachments.forEach(function(a){var b=document.createElement("li"),c=document.createElement("div"),d=document.createElement("div"),e=document.createElement("a"),f=document.createElement("div"),g=document.createElement("img"),h=document.createElement("a"),K=document.createElement("div"),p=document.createElement("div"),q=document.createElement("img"),w=document.createElement("img"),n=document.createElement("div"),
|
|
|
+r=document.createElement("img"),z=document.createElement("span"),F=document.createElement("span");b.className="slackmsg-attachment";var B="#e3e4e6";a.color&&("#"===a.color[0]?B=a.color[0]:"good"===a.color?B="#2fa44f":"warning"===a.color?B="#de9e31":"danger"===a.color&&(B="#d50200"));c.style.borderColor=B;d.className="slackmsg-attachment-pretext";a.pretext?d.innerHTML=R(a.pretext):d.classList.add("hidden");e.target="_blank";a.title?(e.innerHTML=R(a.title),a.title_link&&(e.href=a.title_link),e.className=
|
|
|
+"slackmsg-attachment-title"):e.className="hidden slackmsg-attachment-title";h.target="_blank";f.className="slackmsg-author";a.author_name?(h.innerHTML=R(a.author_name),h.href=a.author_link||"",h.className="slackmsg-author-name",g.className="slackmsg-author-img",a.author_icon?g.src=a.author_icon:g.classList.add("hidden")):f.classList.add("hidden");p.innerHTML=R(a.text||"");p.a="slackmsg-attachment-text";q.className="slackmsg-attachment-thumb";a.thumb_url?q.src=a.thumb_url:q.classList.add("hidden");
|
|
|
+w.className="slackmsg-attachment-img";a.image_url?w.src=a.image_url:w.classList.add("hidden");n.className="slackmsg-attachment-footer";z.className="slackmsg-attachment-footer-text";r.className="slackmsg-attachment-footer-icon";a.footer?(z.innerHTML=R(a.footer),a.footer_icon?r.src=a.footer_icon:r.classList.add("hidden")):(r.classList.add("hidden"),z.classList.add("hidden"));F.className="slackmsg-ts";a.ts?F.innerHTML=Q(a.ts):F.classList.add("hidden");f.appendChild(g);f.appendChild(h);K.appendChild(p);
|
|
|
+K.appendChild(q);n.appendChild(r);n.appendChild(z);n.appendChild(F);c.appendChild(e);c.appendChild(f);c.appendChild(K);c.appendChild(w);c.appendChild(n);b.appendChild(d);b.appendChild(c);b&&l.appendChild(b)})}c.appendChild(q);return c}function Q(a){"string"!==typeof a&&(a=parseFloat(a));return(new Date(1E3*a)).toLocaleTimeString()}
|
|
|
+function O(a){a:{for(var b=a,d={};!d[b];){if(a=G.a.o[b])if("alias:"==a.substr(0,6))d[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 la(a){return a.replace(/:(\w+):/g,function(a,d){var b=O(d);if(b){var f=document.createElement("span");f.className="emoji-small";f.appendChild(b);return f.outerHTML}return a})}
|
|
|
+function R(a){a=a.split(/\r?\n/g);for(var b=0,d=a.length;b<d;b++){for(var c=a[b],f="",e={},h=!1,g=0,c=c.replace(RegExp("<([@#]?)([^>]*)>","g"),function(a,b,c){c=c.split("|");if("@"===b)c[1]?"@"!==c[1][0]&&(c[1]="@"+c[1]):(a=m(G.a,c[0]),c[1]=a?"@"+a.name:C.B),c[0]="#"+c[0],c[2]="slackmsg-link slackmsg-link-user";else if("#"===b)c[1]?"#"!==c[1][0]&&(c[1]="#"+c[1]):(a=u(G.a,c[0]),c[1]=a?"#"+a.name:C.A),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>"}),c=la(c),p=c.length,q=function(a,b,c){for(;a[b];){if(" "!=a[b]&&a[b]!=c&&a[b+1]==c)return!0;b++}return!1},r=function(a){return Object.keys(e).length?'<span class="'+Object.keys(a).join(" ")+'">':""};g<p&&(" "===c[g]||"\t"===c[g]);)g++;">"===c.substr(g,4)&&(h=!0,g+=4);for(;g<p;g++){var l=c[g];if("<"===l){do f+=c[g++];while(">"!==c[g-1]);g--}else if(!e["slackmsg-style-bold"]&&
|
|
|
+"*"===l&&c[g+1]&&q(c,g,l))Object.keys(e).length&&(f+="</span>"),e["slackmsg-style-bold"]=!0,f+=r(e);else if(!e["slackmsg-style-strike"]&&"~"===l&&c[g+1]&&q(c,g,l))Object.keys(e).length&&(f+="</span>"),e["slackmsg-style-strike"]=!0,f+=r(e);else if(!e["slackmsg-style-code"]&&"`"===l&&c[g+1]&&q(c,g,l))Object.keys(e).length&&(f+="</span>"),e["slackmsg-style-code"]=!0,f+=r(e);else if(!e["slackmsg-style-italic"]&&"_"===l&&c[g+1]&&q(c,g,l))Object.keys(e).length&&(f+="</span>"),e["slackmsg-style-italic"]=
|
|
|
+!0,f+=r(e);else{var n=!1,f=f+l;do{if(e["slackmsg-style-bold"]&&"*"!==l&&"*"===c[g+1])delete e["slackmsg-style-bold"],n=!0;else if(e["slackmsg-style-strike"]&&"~"!==l&&"~"===c[g+1])delete e["slackmsg-style-strike"],n=!0;else if(e["slackmsg-style-code"]&&"`"!==l&&"`"===c[g+1])delete e["slackmsg-style-code"],n=!0;else if(e["slackmsg-style-italic"]&&"_"!==l&&"_"===c[g+1])delete e["slackmsg-style-italic"],n=!0;else break;l=c[++g]}while(g<p);n&&(f+="</span>"+r(e))}}e&&(f+="</span>");a[b]=h?'<span class="slackmsg-style-quote">'+
|
|
|
+f+"</span>":f}return a.join("<br/>")}function M(a,b,d){"me_message"===b.h?(a=P(a,b,d),a.classList.add("slackmsg-me_message")):a=P(a,b,d);return a}function I(){var a=0,b=0,d="";if(S)d="!"+C.u+" - ",document.getElementById("linkFavicon").href="favicon_err.png";else{for(var c in T)T.hasOwnProperty(c)&&(a+=T[c].m,b+=T[c].j);b?d="(!"+b+") - ":a&&(d="("+a+") - ");document.getElementById("linkFavicon").href=b||a?"favicon.png?h="+b+"&m="+a:"favicon_ok.png"}d+=G.a.s.name;document.title=d}
|
|
|
+function ma(){if("Notification"in window)if("granted"===Notification.permission){var a=Date.now();if(E+3E4<a){var b=new Notification(C.w);E=a;setTimeout(function(){b.close()},5E3)}}else"denied"!==Notification.permission&&Notification.requestPermission()}
|
|
|
+function U(){var a=document.createDocumentFragment(),b=N.id;document.getElementById("chatWindow").textContent="";G.b[b]&&G.b[b].a.forEach(function(c){"message"===c.type&&(c=M(b,c),a.appendChild(c))});var d=document.getElementById("chatWindow");d.appendChild(a);d.scrollTop=d.scrollHeight-d.clientHeight}
|
|
|
+function na(a){for(var b=a.target;b!==a.currentTarget&&b&&!b.classList.contains("slackmsg-hover");){if(b.classList.contains("slackmsg-hover-reply")){a:{for(b=b||a.target;b!==a.currentTarget&&b;){if(b.classList.contains("slackmsg-item")){a=b.id;break a}b=b.parentElement}a=void 0}if(a){a=parseFloat(a.split("_")[1]);for(var b=G.b[N.id].a,d=0,c=b.length;d<c&&b[d].c<=a;d++)if(b[d].c===a){D!==b[d]&&(D=b[d],L());break}}break}b=b.parentElement}}function V(){document.getElementById("msgInput").focus()}
|
|
|
+function H(){var a=document.location.hash.substr(1),b=u(G.a,a),a=m(G.a,a);b&&b!==N?W(b):a&&a.a&&W(a.a)}
|
|
|
+document.addEventListener("DOMContentLoaded",function(){ia();document.getElementById("chatWindow").addEventListener("click",na);window.addEventListener("hashchange",function(){document.location.hash&&"#"===document.location.hash[0]&&H()});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),oa(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();N&&document.getElementById("fileUploadContainer").classList.remove("hidden");return!1});document.getElementById("msgForm").addEventListener("submit",function(a){a.preventDefault();a=document.getElementById("msgInput");if(N&&a.value){var b=N,d=D,c=new XMLHttpRequest,f="api/msg?room="+b.id+"&text="+encodeURIComponent(a.value);if(d){var e=m(G.a,d.i),h="Message";"C"===b.id[0]?h="Channel message":"D"===b.id[0]?
|
|
|
+h="Direct message":"G"===b.id[0]&&(h="Group message");f+="&attachments="+encodeURIComponent(JSON.stringify([{fallback:d.b.text||"",author_name:"<@"+e.id+"|"+e.name+">",author_icon:e.b.l,text:d.b.text||"",footer:h,ts:d.c}]))}c.open("POST",f,!0);c.send(null);a.value="";D&&(D=null,L())}V();return!1});window.addEventListener("blur",function(){window.hasFocus=!1});window.addEventListener("focus",function(){window.hasFocus=!0;E=0;N&&X();V()});window.hasFocus=!0;Y()});(function(){function a(a){var d=0;if(b()){a=window.searchEmojis(a);for(var f in e)e[f].visible&&!a[f]&&(e[f].visible=!1,c.removeChild(e[f].g));for(f in a){var h=e[f];if(!h){var h=e,r=f,l=window.makeEmoji(a[f]),n=document.createElement("span");n.appendChild(l);n.className="emoji-medium";l=document.createElement("li");l.appendChild(n);h=h[r]={visible:!1,g:l}}h.visible||(h.visible=!0,c.appendChild(h.g));d++}}return d}function b(){return"searchEmojis"in window}var d=document.createElement("div"),c=document.createElement("ul"),
|
|
|
+f=document.createElement("ul"),e={};d.appendChild(c);d.appendChild(f);return{isSupported:b,M:function(c){return b()?(c.appendChild(d),a(""),!0):!1},search:a,close:function(){return d.parentElement?(d.parentElement.removeChild(d),!0):!1}}})();var G,T={};function pa(a,b){if(a&&(a!==N||!window.hasFocus)){var d=new RegExp("<@"+G.a.b.id),c=!1,f=!1;T[a.id]||(T[a.id]={j:0,m:0});b.forEach(function(b){"message"===b.type&&b.text&&("D"===a.id[0]||b.text.match(d)?(f|=!T[a.id].j,T[a.id].j++,c=!0):T[a.id].m++)});I();document.getElementById(a.id).classList.add("unread");c&&document.getElementById(a.id).classList.add("unreadHi");f&&!window.hasFocus&&ma()}}
|
|
|
+function X(){var a=N;T[a.id]&&(T[a.id]={j:0,m:0},I());a=document.getElementById(a.id);a.classList.remove("unread");a.classList.remove("unreadHi")}G=new function(){this.c=0;this.a=new t;this.b={}};var S=0,N=null;function Z(a){var b=new XMLHttpRequest;b.timeout=6E4;b.onreadystatechange=function(){if(4===b.readyState)if(b.status){var d=null,c=2===Math.floor(b.status/100);if(c){S&&(S=0,J(!0));d=b.response;try{d=JSON.parse(d)}catch(f){d=null}}else S?(S+=Math.floor((S||5)/2),S=Math.min(60,S)):(S=5,J(!1));a(c,d)}else S&&(S=0,J(!0)),Z(a)};b.open("GET","api?v="+G.c,!0);b.send(null)}
|
|
|
+function qa(a,b){if(a){if(b){var d=G;b.v&&(d.c=b.v);if(b["static"]){for(var c=d.a,f=b["static"],e=0,h=f.bots.length;e<h;e++)c.h[f.bots[e].id]=new ea(f.bots[e]);e=0;for(h=f.users.length;e<h;e++)c.a[f.users[e].id]=new da(f.users[e]);e=0;for(h=f.ims.length;e<h;e++){var g=m(c,f.ims[e].user);g&&(g.a=new ca(g,f.ims[e]),c.i[g.a.id]=g.a)}e=0;for(h=f.channels.length;e<h;e++)c.f[f.channels[e].id]=new aa(f.channels[e],c);e=0;for(h=f.groups.length;e<h;e++)c.c[f.groups[e].id]=new ba(c,f.groups[e]);c.o=f.emojis;
|
|
|
+c.s=new k(f.team);c.b=m(c,f.self.id);ja()}if(b.live){for(var p in b.live)(c=d.b[p])?x(c,b.live[p]):d.b[p]=new v(p,250,b.live[p]);for(var q in b.live)pa(u(d.a,q),b.live[q]),N&&b.live[N.id]&&U()}}Y()}else setTimeout(Y,1E3*S)}function Y(){Z(qa)}
|
|
|
+function W(a){N&&document.getElementById(N.id).classList.remove("selected");document.getElementById(a.id).classList.add("selected");document.body.classList.remove("no-room-selected");N=a;a=N.name||(N.c?N.c.name:void 0);if(!a){a=[];for(var b in N.a)a.push(N.a[b].name);a=a.join(", ")}document.getElementById("currentRoomTitle").textContent=a;U();V();document.getElementById("fileUploadContainer").classList.add("hidden");X();D&&(D=null,L());N.b&&!G.b[N.id]&&(b=new XMLHttpRequest,b.open("GET","api/hist?room="+
|
|
|
+N.id,!0),b.send(null))}function oa(a,b,d){var c=N;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?d(null):d(e.statusText))};e.open("POST","api/file?room="+c.id);e.send(f)};
|