Browse Source

Fix TG-8 restore scroll position after new messages

isundil 6 years ago
parent
commit
705f6aac96
2 changed files with 14 additions and 17 deletions
  1. 4 7
      cli/ui.js
  2. 10 10
      srv/public/mimouchat.min.js

+ 4 - 7
cli/ui.js

@@ -322,6 +322,9 @@ function getCurrentScrollTopTs(container) {
     var currentScrollPx = container.scrollTop,
         msgId = null,
         idFound = false;
+    // pos at bottom or near to bottom
+    if (container.scrollHeight -container.scrollTop -container.clientHeight < 10)
+        return 0;
     idFound = MSG_GROUPS.some(function(group) {
         for (var i =0, len =group.content.children.length; i < len; ++i) {
             var item = group.content.children[i];
@@ -344,7 +347,7 @@ function scrollToTs(container, ts) {
     DATA.history[SELECTED_ROOM.id] && DATA.history[SELECTED_ROOM.id].messages.some(function(msg) {
         if (msg.ts >= ts) {
             var dom = msg.getDom();
-            container.scrollTop = dom.offsetTop +dom.parentElement.offsetTop +dom.parentElement.parentElement.offsetTop;
+            dom.scrollIntoView();
             return true;
         }
     });
@@ -496,15 +499,9 @@ function onRoomUpdated() {
         return result;
     });
     if (currentScrollTopTs)
-    {
-        console.log("scroll to", new Date(currentScrollTopTs));
         scrollToTs(chatFrag, currentScrollTopTs);
-    }
     else
-    {
-        console.log("scroll to bottom");
         chatFrag.scrollTop = chatFrag.scrollHeight -chatFrag.clientHeight;
-    }
 
     updateTitle();
     if (window.hasFocus)

+ 10 - 10
srv/public/mimouchat.min.js

@@ -22,8 +22,8 @@ a.toLocaleString()},fb:function(a){var b=new Date,c=new Date;a=new Date(a);b.set
 "settings-display-title":"Display","setting-menu-privacy":"Privacy","settings-privacy-title":"Privacy",settingCommit:"Apply","settings-serviceAddButton":"Add a service","settings-serviceListEmpty":"You don't have any service yet. Please add a service to continue.","settings-serviceAddConfirm":"Next","settings-displayEmojiProviderLbl":"Emoji provider","settings-displayDisplayAvatarLbl":"Display avatars","settings-displayColorfulNamesLbl":"Colorful names","settings-displayScrollAvatarsLbl":"Scroll avatars",
 "settings-displayAttachmentContentLbl":"Automaticcaly unwrap attachments ?","settings-displayAttachmentContent-never":"Never","settings-displayAttachmentContent-always":"Always","settings-displayAttachmentContent-notimg":"If they don't contain image"}};H.en.mb=function(a){return 0===a?"No pinned messages":a+(1===a?" pinned message":" pinned messages")};H.en.sb=function(a){return 0===a?"No users in this room":a+(1===a?" user":" users")};H.en.I=function(a){return"(edited "+H.en.U(a)+")"};
 H.en.Na=function(a,b){return"by "+a.getName()+" on "+H.en.U(b)};var Aa=function(){function a(a){this.text="";this.h=a}function b(b,c,d){this.aa=c;this.g=null;this.o=[];this.a=d||"";this.Ca="<"===this.a;this.La="*"===this.a;this.Ba="_"===this.a;this.Da="~"===this.a||"-"===this.a;this.j=">"===this.a||"&gt;"===this.a;this.w=":"===this.a;this.Oa="`"===this.a;this.Za="```"===this.a;this.Pa="\n"===this.a;this.Aa=void 0!==d&&-1!==p.G.indexOf(d);this.h=b;this.Ea=null;this.b=this.Pa||this.Aa?c+d.length-1:!1;this.Aa&&(this.g=new a(this),this.o.push(this.g),this.g.text=
-d)}function c(a){return/[A-Za-z0-9\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+]/.test(a)}function e(a){a=a||m;for(var c=0,d=a.o.length;c<d;c++){var l=a.o[c];if(l instanceof b)if(l.b){if(l=
-e(l))return l}else return l}return null}function d(a,c){a.h instanceof b&&(a.h.o.splice(a.h.o.indexOf(a)+(c?1:0)),a.h.g=a.h.o[a.h.o.length-1],d(a.h,!0))}function f(a){return a.replace("<","&lt;")}function g(a){return a}function k(a){return{link:a,text:a,hb:!1}}var h,m,p={G:[],$:g,ya:g,ra:k};b.prototype.Ra=function(){return this.La&&!!this.b||this.h instanceof b&&this.h.Ra()};b.prototype.Ua=function(){return this.Ba&&!!this.b||this.h instanceof b&&this.h.Ua()};b.prototype.Va=function(){return this.Da&&
+d)}function c(a){return/[A-Za-z0-9\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+]/.test(a)}function e(a){a=a||m;for(var c=0,d=a.o.length;c<d;c++){var f=a.o[c];if(f instanceof b)if(f.b){if(f=
+e(f))return f}else return f}return null}function d(a,c){a.h instanceof b&&(a.h.o.splice(a.h.o.indexOf(a)+(c?1:0)),a.h.g=a.h.o[a.h.o.length-1],d(a.h,!0))}function f(a){return a.replace("<","&lt;")}function g(a){return a}function k(a){return{link:a,text:a,hb:!1}}var h,m,p={G:[],$:g,ya:g,ra:k};b.prototype.Ra=function(){return this.La&&!!this.b||this.h instanceof b&&this.h.Ra()};b.prototype.Ua=function(){return this.Ba&&!!this.b||this.h instanceof b&&this.h.Ua()};b.prototype.Va=function(){return this.Da&&
 !!this.b||this.h instanceof b&&this.h.Va()};b.prototype.ga=function(){return this.w&&!!this.b||this.h instanceof b&&this.h.ga()};b.prototype.Ta=function(){return this.Aa&&!!this.b||this.h instanceof b&&this.h.Ta()};b.prototype.Sa=function(){return this.Oa&&!!this.b||this.h instanceof b&&this.h.Sa()};b.prototype.fa=function(){return this.Za&&!!this.b||this.h instanceof b&&this.h.fa()};b.prototype.Wa=function(){for(var a=0,c=this.o.length;a<c;a++)if(this.o[a]instanceof b&&(!this.o[a].b||this.o[a].Wa()))return!0;
 return!1};b.prototype.Xa=function(a){if("<"===this.a&&">"===h[a])return!0;var b=c(h[a-1]);if(!this.j&&h.substr(a,this.a.length)===this.a){if(!b&&(this.La||this.Ba||this.Da))return!1;if(this.g&&this.Wa())return this.g.$a();if(this.ub())return!0}return"\n"===h[a]&&this.j?!0:!1};b.prototype.ub=function(){for(var a=this;a;){for(var c=0,d=a.o.length;c<d;c++)if(a.o[c]instanceof b||a.o[c].text.length)return!0;a=a.Ea}return!1};b.prototype.$a=function(){var a=new b(this.h,this.aa,this.a);a.Ea=this;this.g&&
 this.g instanceof b&&(a.g=this.g.$a(),a.o=[a.g]);return a};b.prototype.vb=function(a){return this.w&&(" "===h[a]||"\t"===h[a])||(this.w||this.Ca||this.La||this.Ba||this.Da||this.Oa)&&"\n"===h[a]?!1:!0};b.prototype.wb=function(b){if(this.Oa||this.w||this.Za||this.Ca)return null;if(!this.g||this.g.b||this.g instanceof a){var d=c(h[b-1]),e=c(h[b+1]);if("```"===h.substr(b,3))return"```";var f=m.Ka();if(void 0===f||f){if("&gt;"===h.substr(b,4))return"&gt;";if(">"===h[b])return h[b]}if("`"===h[b]&&!d||
@@ -63,12 +63,12 @@ function Db(){if(R){document.body.classList.add("replyingTo");var a=document.get
 window.toggleReaction=function(a,b,c){var e,d,f;if(f=e=C.a[a]){a:{var g=0;for(f=e.i.length;g<f;g++)if(e.i[g].id==b){e=e.i[g];break a}e=null}f=g=e}f&&(d=E(C.context,a))&&(g.H[c]&&-1!==g.H[c].indexOf(d.self.id)?P("DELETE","api/reaction?room="+encodeURIComponent(a)+"&msg="+b+"&reaction="+encodeURIComponent(c)).a():Eb(a,b,c))};function Fb(a,b){document.getElementById("linkFavicon").href=a||b?"favicon.png?h="+a+"&m="+b:"favicon_ok.png"}
 function zb(){var a=V.length,b="";if(X)b="!"+K.kb+" - Mimouchat",document.getElementById("linkFavicon").href="favicon_err.png";else if(a)b="(!"+a+")",Fb(a,a);else{var c=0;ta(C.context,function(a){a.F>a.C&&c++});c&&(b="("+c+")");Fb(0,c)}!b.length&&D&&(b=D.name);b=b.length?b:"Mimouchat";document.title=b;Gb(b)}
 function Hb(){if("Notification"in window)if("granted"===Notification.permission){var a=Date.now();if(ob+3E4<a){var b=new Notification(K.Ja);ob=a;setTimeout(function(){b.close()},5E3)}}else"denied"!==Notification.permission&&Notification.requestPermission()}function Ib(a,b){return a&&Ca(b.f,a.f)&&!(b instanceof x)&&!a.Ib&&b.O===a.O}
-function Jb(a){var b=a.scrollTop,c=null;a=!1;if(a=T.some(function(a){for(var d=0,e=a.content.children.length;d<e;++d){var g=a.content.children[d];if(g.offsetTop+g.parentElement.offsetTop+g.parentElement.parentElement.offsetTop>b)return c=g.id,!0}}))if(a=oa(c))return a.f}function Kb(a,b){C.a[D.id]&&C.a[D.id].i.some(function(c){if(c.f>=b)return c=c.J(),a.scrollTop=c.offsetTop+c.parentElement.offsetTop+c.parentElement.parentElement.offsetTop,!0})}
+function Jb(a){var b=a.scrollTop,c=null,e=!1;if(10>a.scrollHeight-a.scrollTop-a.clientHeight)return 0;if(e=T.some(function(a){for(var d=0,e=a.content.children.length;d<e;++d){var k=a.content.children[d];if(k.offsetTop+k.parentElement.offsetTop+k.parentElement.parentElement.offsetTop>b)return c=k.id,!0}}))if(a=oa(c))return a.f}function Kb(a){C.a[D.id]&&C.a[D.id].i.some(function(b){if(b.f>=a)return b.J().scrollIntoView(),!0})}
 function Bb(){function a(){for(;T[d].content.children[f];)T[d].content.children[f].remove();T[d].i.splice(f);T[d].i.length?d++:(T[d].remove(),T[d]=null);e=null}function b(a,b){var c=a.J();if(e){var g=e.J();6E4>Math.abs(e.f-a.f)?g.classList.add("chatmsg-same-ts"):g.classList.remove("chatmsg-same-ts")}(!e||e.f<=D.C)&&a.f>D.C?c.classList.add("chatmsg-first-unread"):c.classList.remove("chatmsg-first-unread");b?T[d].content.replaceChild(b,c):f>=T[d].i.length?(T[d].content.appendChild(c),T[d].i.push(a.id)):
-(T[d].content.insertBefore(c,T[d].content.children[f]),T[d].i.splice(f,0,a.id));T[d].f=T[d].f?a.f:Math.min(T[d].f,a.f);++f;e=a}var c=document.getElementById("chatWindow"),e=null,d=0,f=0;D.D?document.getElementById("chatSystemContainer").classList.add("starred"):document.getElementById("chatSystemContainer").classList.remove("starred");var g=Jb(c);C.a[D.id]&&C.a[D.id].i.forEach(function(g){if(T[d]){if(Ib(T[d],g)){if(T[d].i[f]===g.id){var h=T[d].content.children[f];g.b?(h.remove(),T[d].i.splice(f,1)):
-g.T?b(g,h):++f}else g.b||b(g);return}if(g.b)return;if(g.f<T[d].f){for(;0<d&&g.f<T[d].f;)--d;for(;T[d];)T[d].remove(),T.splice(d,1)}else a();e=null;f=0}g.b||(T[d]&&!Ib(T[d],g)&&a(),T[d]||(T[d]=Lb(G(g.O),g.username,g instanceof x,g.f),T[d+1]?c.insertBefore(T[d],T[d+1]):c.appendChild(T[d]),f=0),b(g))});if(T[d]){for(;T[d].content.children[f];)T[d].content.children[f].remove();T[d].i.splice(f);T[d].i.length||--d;for(var k=d+1;T[k];k++)T[k].remove();T.splice(d+1)}for(var k=0,h=T.length;k<h;++k)T[k-1]&&
-Ca(T[k-1].f,T[k].f)?T[k].classList.remove("chatmsg-first-daily"):(T[k].classList.add("chatmsg-first-daily"),T[k].dataset.date=T[k].dataset.date||K.fb(T[k].f));U?(U.content.textContent="",U.i=[]):(U=Lb(Q.self,Q.self.getName(),!1,0),U.classList.add("pending"));Mb.forEach(function(a){a.channel===D.id&&(U.content.appendChild(a.c),U.i.push(a.id))});U.i.length?c.appendChild(U):U.remove();T=T.filter(function(a){var b=a&&a.i.length&&a.content.children.length;!b&&a&&a.remove();return b});g?(console.log("scroll to",
-new Date(g)),Kb(c,g)):(console.log("scroll to bottom"),c.scrollTop=c.scrollHeight-c.clientHeight);zb();window.hasFocus&&Cb()}
+(T[d].content.insertBefore(c,T[d].content.children[f]),T[d].i.splice(f,0,a.id));T[d].f=T[d].f?a.f:Math.min(T[d].f,a.f);++f;e=a}var c=document.getElementById("chatWindow"),e=null,d=0,f=0;D.D?document.getElementById("chatSystemContainer").classList.add("starred"):document.getElementById("chatSystemContainer").classList.remove("starred");var g=Jb(c);C.a[D.id]&&C.a[D.id].i.forEach(function(g){if(T[d]){if(Ib(T[d],g)){if(T[d].i[f]===g.id){var k=T[d].content.children[f];g.b?(k.remove(),T[d].i.splice(f,1)):
+g.T?b(g,k):++f}else g.b||b(g);return}if(g.b)return;if(g.f<T[d].f){for(;0<d&&g.f<T[d].f;)--d;for(;T[d];)T[d].remove(),T.splice(d,1)}else a();e=null;f=0}g.b||(T[d]&&!Ib(T[d],g)&&a(),T[d]||(T[d]=Lb(G(g.O),g.username,g instanceof x,g.f),T[d+1]?c.insertBefore(T[d],T[d+1]):c.appendChild(T[d]),f=0),b(g))});if(T[d]){for(;T[d].content.children[f];)T[d].content.children[f].remove();T[d].i.splice(f);T[d].i.length||--d;for(var k=d+1;T[k];k++)T[k].remove();T.splice(d+1)}for(var k=0,h=T.length;k<h;++k)T[k-1]&&
+Ca(T[k-1].f,T[k].f)?T[k].classList.remove("chatmsg-first-daily"):(T[k].classList.add("chatmsg-first-daily"),T[k].dataset.date=T[k].dataset.date||K.fb(T[k].f));U?(U.content.textContent="",U.i=[]):(U=Lb(Q.self,Q.self.getName(),!1,0),U.classList.add("pending"));Mb.forEach(function(a){a.channel===D.id&&(U.content.appendChild(a.c),U.i.push(a.id))});U.i.length?c.appendChild(U):U.remove();T=T.filter(function(a){var b=a&&a.i.length&&a.content.children.length;!b&&a&&a.remove();return b});g?Kb(g):c.scrollTop=
+c.scrollHeight-c.clientHeight;zb();window.hasFocus&&Cb()}
 function Nb(a,b){if(a.classList.contains("chatmsg-hover-reply"))R&&(R=null,Db()),S!==b&&(S=b,W());else if(a.classList.contains("chatmsg-hover-reaction")){var c=D.id,e=b.id;Ob.wa(document.body,Q,function(a){a&&Eb(c,e,a)})}else a.classList.contains("chatmsg-hover-edit")?(S&&(S=null,W()),R!==b&&(R=b,Db())):a.classList.contains("chatmsg-hover-star")?b.D?P("DELETE","api/starMsg?room="+encodeURIComponent(D.id)+"&msgId="+b.id).a():P("POST","api/starMsg?room="+encodeURIComponent(D.id)+"&msgId="+b.id).a():
 a.classList.contains("chatmsg-hover-pin")?b.pinned?Pb(D,b):P("POST","api/pinMsg?room="+encodeURIComponent(D.id)+"&msgId="+b.id).a():a.classList.contains("chatmsg-hover-remove")&&(S&&(S=null,W()),R&&(R=null,Db()),P("DELETE","api/msg?room="+encodeURIComponent(D.id)+"&ts="+b.id).a())}function ib(a,b,c){b={channel:a.id,text:b.trim(),Ia:c,c:Qb(b,c),f:Date.now(),id:"pending"+a.id+Date.now()};Mb.push(b);a===D&&Bb();return b}
 function Rb(a){function b(a,b){for(b=b||a.target;b!==a.currentTarget&&b;){if(b.id&&b.classList.contains("chatmsg-item"))return b.id;b=b.parentElement}}for(var c=a.target;c!==a.currentTarget&&c&&!c.classList.contains("chatmsg-hover");){var e;if(c.parentElement&&c.classList.contains("chatmsg-attachment-actions-item")){var d=c.dataset.attachmentIndex,f=c.dataset.actionIndex;if((e=b(a,c))&&void 0!==d&&void 0!==f){(a=oa(e))&&a.u[d]&&a.u[d].actions&&a.u[d].actions[f]&&Sb(a,a.u[d],a.u[d].actions[f]);break}}if(c.parentElement&&
@@ -105,8 +105,8 @@ v.src=b.image_url:v.classList.add("hidden");B.className="chatmsg-attachment-foot
 d.appendChild(v);if(b.fields&&b.fields.length){var z=document.createElement("ul");d.appendChild(z);z.className="chatmsg-attachment-fields";b.fields.forEach(function(b){var c=b.title||"",d=b.value||"";b=!!b["short"];var e=document.createElement("li"),f=document.createElement("div"),g=document.createElement("div");e.className="field";b||e.classList.add("field-long");f.className="field-title";f.textContent=c;g.className="field-text";g.innerHTML=a.B(d);e.appendChild(f);e.appendChild(g);e&&z.appendChild(e)})}if(b.actions&&
 b.actions.length)for(g=document.createElement("ul"),g.className="chatmsg-attachment-actions "+Wa,d.appendChild(g),k=0,p=b.actions.length;k<p;k++)(v=b.actions[k])&&(v=nc(c,k,v))&&g.appendChild(v);d.appendChild(B);e.appendChild(f);e.appendChild(d);return e}
 function nc(a,b,c){var e=document.createElement("li"),d=lc(c.style);e.textContent=c.text;d!==lc()&&(e.style.color=d);e.style.borderColor=d;e.dataset.attachmentIndex=a;e.dataset.actionIndex=b;e.className="chatmsg-attachment-actions-item "+Ua;return e}function xb(a){var b=document.createElement("li"),c=document.createElement("span");c.textContent=a.getName();b.appendChild(qb());b.appendChild(c);return b};var Ob=function(){function a(a,b){for(a=a.target;a!==m&&a&&"LI"!==a.nodeName;)a=a.parentElement;a&&"LI"===a.nodeName&&a.id&&"emojibar-"===a.id.substr(0,9)?b(a.id.substr(9)):b(null)}function b(){z={};l.textContent="";window.emojiProviderHeader&&(l.appendChild(k(window.emojiProviderHeader)),n.textContent="",l.appendChild(n));l.appendChild(k("emojicustom.png"));l.appendChild(v)}function c(){if(!e())return!1;t&&t(null);return!0}function e(){return m.parentElement?(m.parentElement.removeChild(p),m.parentElement.removeChild(m),
-!0):!1}function d(a){var b=0;a=void 0===a?B.value:a;if(h()){var c=0,d=window.searchEmojis(a),e=f(d,J?J.self.W.a:[]),k;for(p in z)z[p].visible&&(z[p].visible=!1,n.removeChild(z[p].c));var p=0;for(k=e.length;p<k;p++){var l=e[p].name,m=z[l];if(!m){var m=z,L=l;var t=l;var l=window.makeEmoji(d[l]),I=document.createElement("span");I.appendChild(l);I.className="emoji-medium";t=g(t,I);m=m[L]=t}m.visible||(m.visible=!0,n.appendChild(m.c));c++}b+=c}p=b;c=0;for(F in A)A[F].visible&&(A[F].visible=!1,v.removeChild(A[F].c));
-if(J){d=f(J.b.data,J?J.self.W.a:[]);var F=0;for(b=d.length;F<b;F++)L=d[F].name,""!==a&&L.substr(0,a.length)!==a||"alias:"===J.b.data[L].substr(0,6)||(e=A[L],e||(e=A,m=k=L,L=J.b.data[L],t=document.createElement("span"),l=document.createElement("span"),t.className="emoji emoji-custom",t.style.backgroundImage='url("'+L+'")',t.textContent=":"+m+":",t.title=m,l.appendChild(t),l.className="emoji-medium",m=g(m,l),e=e[k]=m),e.visible||(e.visible=!0,v.appendChild(e.c)),c++);F=c}else F=0;return p+F}function f(a,
+!0):!1}function d(a){var b=0;a=void 0===a?B.value:a;if(h()){var c=0,d=window.searchEmojis(a),e=f(d,J?J.self.W.a:[]),k;for(p in z)z[p].visible&&(z[p].visible=!1,n.removeChild(z[p].c));var p=0;for(k=e.length;p<k;p++){var m=e[p].name,l=z[m];if(!l){var l=z,L=m;var t=m;var m=window.makeEmoji(d[m]),I=document.createElement("span");I.appendChild(m);I.className="emoji-medium";t=g(t,I);l=l[L]=t}l.visible||(l.visible=!0,n.appendChild(l.c));c++}b+=c}p=b;c=0;for(F in A)A[F].visible&&(A[F].visible=!1,v.removeChild(A[F].c));
+if(J){d=f(J.b.data,J?J.self.W.a:[]);var F=0;for(b=d.length;F<b;F++)L=d[F].name,""!==a&&L.substr(0,a.length)!==a||"alias:"===J.b.data[L].substr(0,6)||(e=A[L],e||(e=A,l=k=L,L=J.b.data[L],t=document.createElement("span"),m=document.createElement("span"),t.className="emoji emoji-custom",t.style.backgroundImage='url("'+L+'")',t.textContent=":"+l+":",t.title=l,m.appendChild(t),m.className="emoji-medium",l=g(l,m),e=e[k]=l),e.visible||(e.visible=!0,v.appendChild(e.c)),c++);F=c}else F=0;return p+F}function f(a,
 b){var c=[],d;for(d in a){var e={name:d,ob:0,count:0};if(a[d].names)for(var f=0,g=a[d].names.length;f<g;f++)e.count+=b[a[d].names[f]]||0;c.push(e)}return c=c.sort(function(a,b){var c=b.count-a.count;return c?c:a.ob-b.ob})}function g(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 k(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"),l=document.createElement("div"),n=document.createElement("ul"),v=document.createElement("ul"),B=document.createElement("input"),z={},A={},M=document.createElement("div"),I=document.createElement("span"),F=document.createElement("span"),t,J;p.addEventListener("click",function(a){var b=m.getBoundingClientRect();(a.screenY<b.top||a.screenY>b.bottom||a.screenX<b.left||a.screenX>b.right)&&
 c()});p.className="emojibar-overlay";m.className="emojibar";l.className="emojibar-emojis";n.className=v.className="emojibar-list";B.className="emojibar-search";M.className="emojibar-detail";I.className="emojibar-detail-img";F.className="emojibar-detail-name";M.appendChild(I);M.appendChild(F);b();m.appendChild(l);m.appendChild(M);m.appendChild(B);B.addEventListener("keyup",function(){d()});m.addEventListener("mousemove",function(b){a(b,function(a){var b=a?z[a]||A[a]:null;b?(I.innerHTML=b.c.outerHTML,
@@ -114,7 +114,7 @@ F.textContent=":"+a+":"):(I.textContent="",F.textContent="")})});m.addEventListe
 pc.prototype.update=function(a){var b=Date.now();a.v&&(this.b=a.v);if(a["static"])for(h in a["static"]){var c=ra(this.context,h);c||(c=new oc,this.context.push(c));var e={};a["static"][h].channels&&a["static"][h].channels.forEach(function(a){a.pins&&(e[a.id]=a.pins,a.pins=void 0)});fa(c,a["static"][h],b);for(var d in e){var f=[],g=this.a[d];g||(g=this.a[d]=new Y(d,250,null,b));e[d].forEach(function(a){f.push(g.a(a,b))});c.m[d].b=f}}ta(this.context,function(a){a.F===a.C&&(a=V.indexOf(a),-1!==a&&V.splice(a,
 1))});if(a.live){for(h in a.live)(c=this.a[h])?la(c,a.live[h],b):c=this.a[h]=new Y(h,250,a.live[h],b);for(var k in a.live){var h=E(this.context,k);(c=h.m[k])?(this.a[k].i.length&&ha(c,na(this.a[k]).f,b),c.la||(qc(h,c,a.live[k]),D&&a.live[D.id]&&Bb())):C.b=0}}a["static"]&&pb();var m=!1;a.typing&&this.context.a.forEach(function(c){var d=m,e=a.typing,f=!1;if(c.A)for(var g in c.A)e&&!e[g]&&(delete c.A[g],f=!0);if(e)for(g in e)if(c.m[g]){c.A[g]||(c.A[g]={});for(var h in e[g])c.A[g][h]||(f=!0),c.A[g][h]=
 b}m=d|f},this);(a["static"]||m)&&vb();a.config&&(N=new rc(a.config),dc());if(Q&&D&&a["static"]&&a["static"][Q.a.id]&&a["static"][Q.a.id].channels&&a["static"][Q.a.id].channels)for(k=a["static"][Q.a.id].channels,h=0,c=k.length;h<c;h++)if(k[h].id===D.id){Bb();break}};setInterval(function(){var a=!1,b=Date.now();ua(function(c){var e=!1,d;for(d in c.A){var f=!0,g;for(g in c.A[d])c.A[d][g]+6500<b?(delete c.A[d][g],e=!0):f=!1;f&&(delete c.A[d],e=!0)}e&&(a=!0)});a&&vb()},1E3);
-function qc(a,b,c){var e;if(b!==D||!window.hasFocus){var d=(e=a.self?a.self.id:null)?new RegExp("<@"+e):null,f=!1,g=!1,k=!1;c.forEach(function(c){if(!(parseFloat(c.ts)<=b.C)&&c.user!==a.self.id){g=!0;var e;if(!(e=b instanceof r)&&(e=c.text)&&!(e=d&&c.text.match(d)))a:{e=a.self.W.G;for(var h=0,m=e.length;h<m;h++)if(-1!==c.text.indexOf(e[h])){e=!0;break a}e=!1}e&&(-1===V.indexOf(b)&&(k=!0,V.push(b)),f=!0)}});if(g){zb();var h=document.getElementById("room_"+b.id);h&&(h.classList.add("unread"),f&&h.classList.add("unreadHi"));
+function qc(a,b,c){var e;if(b!==D||!window.hasFocus){var d=(e=a.self?a.self.id:null)?new RegExp("<@"+e):null,f=!1,g=!1,k=!1;c.forEach(function(c){if(!(parseFloat(c.ts)<=b.C)&&c.user!==a.self.id){g=!0;var e;if(!(e=b instanceof r)&&(e=c.text)&&!(e=d&&c.text.match(d)))a:{e=a.self.W.G;for(var h=0,n=e.length;h<n;h++)if(-1!==c.text.indexOf(e[h])){e=!0;break a}e=!1}e&&(-1===V.indexOf(b)&&(k=!0,V.push(b)),f=!0)}});if(g){zb();var h=document.getElementById("room_"+b.id);h&&(h.classList.add("unread"),f&&h.classList.add("unreadHi"));
 k&&!window.hasFocus&&Hb()}}c.forEach(function(a){if(!e||e===a.O)for(var c=0,d=Mb.length;c<d;c++){var f=Mb[c];if(f.channel===b.id&&!!a.isMeMessage===f.Ia&&(a.pendingId===f.ta&&f.ta||!f.ta&&a.text.trim()===f.text)){Mb.splice(c,1);break}}})}
 function Cb(){var a=D,b=V.indexOf(a);if(a.F>a.C){var c=C.a[a.id];c&&(c=na(c))&&(P("POST","api/markread?room="+encodeURIComponent(a.id)+"&id="+c.id+"&ts="+c.f).a(),a.C=c.f)}0<=b&&(V.splice(b,1),zb());a=document.getElementById("room_"+a.id);a.classList.remove("unread");a.classList.remove("unreadHi")}function sc(){for(var a in C.a)tc(C.a[a]);D&&Bb()}C=new pc;var ub=function(){function a(a,c){c.sort(function(){return Math.random()-.5});for(var d=0,e=20;e<m-40;e+=l)for(var f=0;f+l<=p;f+=l)g(a,c[d],e,f),d++,d===c.length&&(c.sort(b),d=0)}function b(a,b){return a.V?b.V?Math.random()-.5:-1:1}function c(a,b){for(var d=0,f=a.length;d<f;d++)if(void 0===a[d].V){e(a[d].src,function(e){a[d].V=e;c(a,b)});return}var g=[];a.forEach(function(a){a.V&&g.push(a.V)});b(g)}function e(a,b){Ha(Ga(P(a),function(a,c,d){if(d){var e=new Image;e.onload=function(){var a=document.createElement("canvas");
 a.height=a.width=B;a=a.getContext("2d");a.drawImage(e,0,0,B,B);var a=a.getImageData(0,0,B,B),c=0,d;for(d=0;d<a.width*a.height*4;d+=4)a.data[d]=a.data[d+1]=a.data[d+2]=(a.data[d]+a.data[d+1]+a.data[d+2])/3,a.data[d+3]=50,c+=a.data[d];if(50>c/(a.height*a.width))for(d=0;d<a.width*a.height*4;d+=4)a.data[d]=a.data[d+1]=a.data[d+2]=255-a.data[d];b(a)};e.onerror=function(){b(null)};e.src=window.URL.createObjectURL(d)}else b(null)}),function(){b(null)}).j("blob").a()}function d(){var a=h.createLinearGradient(0,