Browse Source

[add][Refs #27] Favicon on error / success

B Thibault 8 years ago
parent
commit
ec460e9031
7 changed files with 27 additions and 3 deletions
  1. 1 0
      cli/resources.js
  2. 18 0
      cli/ui.js
  3. BIN
      srv/public/favicon_err.png
  4. 0 0
      srv/public/favicon_ok.png
  5. 1 1
      srv/public/index.html
  6. 2 2
      srv/public/slack.min.js
  7. 5 0
      srv/src/httpServ.js

+ 1 - 0
cli/resources.js

@@ -20,6 +20,7 @@ var R = {
             }
 
         }
+        ,favicon: "linkFavicon"
     }
     ,klass: {
         selected: "selected"

+ 18 - 0
cli/ui.js

@@ -556,6 +556,21 @@ function createMessageDom(channelId, msg, skipAttachment) {
     return doCreateMessageDom(channelId, msg, skipAttachment);
 }
 
+/**
+ * @param {number} unreadhi
+ * @param {number} unread
+**/
+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
@@ -563,6 +578,8 @@ function updateTitle() {
 
     if (NEXT_RETRY) {
         title = '!' +locale.netErrorShort +' - ';
+        setNetErrorFavicon();
+
     } else {
         for (var i in UNREAD_CHANS) {
             if (UNREAD_CHANS.hasOwnProperty(i)) {
@@ -574,6 +591,7 @@ function updateTitle() {
             title = "(!" +hasHl +") - ";
         else if (hasUnread)
             title = "(" +hasUnread +") - ";
+        setFavicon(hasHl, hasUnread);
     }
     title += SLACK.context.team.name;
     document.title = title;

BIN
srv/public/favicon_err.png


+ 0 - 0
srv/public/favicon.png → srv/public/favicon_ok.png


+ 1 - 1
srv/public/index.html

@@ -2,7 +2,7 @@
     <head>
         <link href="style.css" rel="stylesheet"/>
         <link href="emojione.sprites.css" rel="stylesheet"/>
-        <link href="favicon.png" type="image/png" rel="icon" />
+        <link href="favicon_err.png" type="image/png" rel="icon" id="linkFavicon" />
     </head>
     <body>
         <aside class="slack-context">

+ 2 - 2
srv/public/slack.min.js

@@ -1,7 +1,7 @@
 function h(a){this.id=a.id;this.name=a.name}function l(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=t(b,a.members[d]);this.a[f.id]=f;f.f[this.id]=this}}function u(a,b){var d=[];this.id=b.id;this.a={};for(var c=0,f=b.members.length;c<f;c++){var e=t(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 aa(a,b){this.id=b.id;this.c=a;this.b=parseFloat(b.last_read)}function ba(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,j: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 ca(a){this.id=a.id;this.name=a.name;this.b={K:a.icons.image_36,j:a.icons.image_48,D:a.icons.image_72};this.f={};this.a=null}
 function v(){this.s=null;this.f={};this.b={};this.m={};this.a={};this.c=null;this.g={};this.o={}}function t(a,b){return a.a[b]||a.g[b]||null}function w(a,b){return a.f[b]||a.m[b]||a.b[b]||null}"undefined"!==typeof module&&(module.C.F=v);function da(a){this.g=a.user;this.b=parseFloat(a.ts);this.type=a.type;this.c=a.subtype;this.a=a}function x(a,b,d){this.id="string"===typeof a?a:a.id;this.a=[];this.b=b;d&&y(this,d)}function y(a,b){var d=0;b.forEach(function(a){d=Math.max(this.push(a),d)}.bind(a));ea(a)}x.prototype.push=function(a){for(var b=parseFloat(a.ts),d=0,c=this.a.length;d<c;d++)if(this.a[d].b===b)return b;for(this.a.push(new da(a));this.a.length>this.b;)this.a.shift();return b};
-function ea(a){a.a.sort(function(a,d){return a.b-d.b})}"undefined"!==typeof module&&(module.C.G=x);var B={},C;function fa(){var a;if(!a){for(var b=0,d=navigator.languages.length;b<d;b++)if(B.hasOwnProperty(navigator.languages[b])){a=navigator.languages[b];break}a||(a="en")}C=B[a];console.log("Loading language pack: "+a);if(C.h)for(b in C.h)document.getElementById(b).textContent=C.h[b]};B.fr={B:"Utilisateur inconnu",A:"Channel inconnu",w:"Nouveau message",u:"Reseau",h:{fileUploadCancel:"Annuler",neterror:"Impossible de se connected au chat !"}};B.en={B:"Unknown member",A:"Unknown channel",w:"New message",u:"Network",h:{fileUploadCancel:"Cancel",neterror:"Cannot connect to chat !"}};var F=null,G=0;
+function ea(a){a.a.sort(function(a,d){return a.b-d.b})}"undefined"!==typeof module&&(module.C.G=x);var B={},C;function fa(){var a;if(!a){for(var b=0,d=navigator.languages.length;b<d;b++)if(B.hasOwnProperty(navigator.languages[b])){a=navigator.languages[b];break}a||(a="en")}C=B[a];console.log("Loading language pack: "+a);if(C.h)for(b in C.h)document.getElementById(b).textContent=C.h[b]};B.fr={B:"Utilisateur inconnu",A:"Channel inconnu",w:"Nouveau message",u:"Reseau",h:{fileUploadCancel:"Annuler",neterror:"Impossible de se connecter au chat !"}};B.en={B:"Unknown member",A:"Unknown channel",w:"New message",u:"Network",h:{fileUploadCancel:"Cancel",neterror:"Cannot connect to chat !"}};var F=null,G=0;
 function ga(){var a=document.createDocumentFragment(),b=H.a.c?Object.keys(H.a.c.f):[];b.sort(function(a,b){return a[0]!==b[0]?a[0]-b[0]:(H.a.f[a]||H.a.b[a]).name.localeCompare((H.a.f[b]||H.a.b[b]).name)});b.forEach(function(b){b=H.a.f[b]||H.a.b[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=H.a.a?Object.keys(H.a.a):[];b.sort(function(a,b){return H.a.a[a].name.localeCompare(H.a.a[b].name)});b.forEach(function(b){b=H.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);I()}
 function J(a){a?document.body.classList.remove("no-network"):document.body.classList.add("no-network");L()}function M(){if(F){document.body.classList.add("replyingTo");var a=document.getElementById("replyToContainer"),b=document.createElement("a");b.addEventListener("click",function(){F=null;M()});b.className="replyto-close";b.textContent="x";a.textContent="";a.appendChild(b);a.appendChild(N("reply_"+O.id,F,!0))}else document.body.classList.remove("replyingTo")}
@@ -17,7 +17,7 @@ function R(a){a=a.split(/\r?\n/g);for(var b=0,d=a.length;b<d;b++){for(var c=a[b]
 c[0]),c[2]="slackmsg-link";else return a;return'<a href="'+c[0]+'" class="'+c[2]+'"'+(b?"":' target="_blank"')+">"+c[1]+"</a>"}),c=ha(c),n=c.length,p=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<n&&(" "===c[g]||"\t"===c[g]);)g++;"&gt;"===c.substr(g,4)&&(k=!0,g+=4);for(;g<n;g++){var m=c[g];if("<"===m){do f+=c[g++];while(">"!==c[g-1]);g--}else if(!e["slackmsg-style-bold"]&&
 "*"===m&&c[g+1]&&p(c,g,m))Object.keys(e).length&&(f+="</span>"),e["slackmsg-style-bold"]=!0,f+=r(e);else if(!e["slackmsg-style-strike"]&&"~"===m&&c[g+1]&&p(c,g,m))Object.keys(e).length&&(f+="</span>"),e["slackmsg-style-strike"]=!0,f+=r(e);else if(!e["slackmsg-style-code"]&&"`"===m&&c[g+1]&&p(c,g,m))Object.keys(e).length&&(f+="</span>"),e["slackmsg-style-code"]=!0,f+=r(e);else if(!e["slackmsg-style-italic"]&&"_"===m&&c[g+1]&&p(c,g,m))Object.keys(e).length&&(f+="</span>"),e["slackmsg-style-italic"]=
 !0,f+=r(e);else{var q=!1,f=f+m;do{if(e["slackmsg-style-bold"]&&"*"!==m&&"*"===c[g+1])delete e["slackmsg-style-bold"],q=!0;else if(e["slackmsg-style-strike"]&&"~"!==m&&"~"===c[g+1])delete e["slackmsg-style-strike"],q=!0;else if(e["slackmsg-style-code"]&&"`"!==m&&"`"===c[g+1])delete e["slackmsg-style-code"],q=!0;else if(e["slackmsg-style-italic"]&&"_"!==m&&"_"===c[g+1])delete e["slackmsg-style-italic"],q=!0;else break;m=c[++g]}while(g<n);q&&(f+="</span>"+r(e))}}e&&(f+="</span>");a[b]=k?'<span class="slackmsg-style-quote">'+
-f+"</span>":f}return a.join("<br/>")}function N(a,b,d){"me_message"===b.c?(a=P(a,b,d),a.classList.add("slackmsg-me_message")):a=P(a,b,d);return a}function L(){var a=0,b=0,d="";if(S)d="!"+C.u+" - ";else{for(var c in T)T.hasOwnProperty(c)&&(a+=T[c].l,b+=T[c].i);b?d="(!"+b+") - ":a&&(d="("+a+") - ")}d+=H.a.s.name;document.title=d}
+f+"</span>":f}return a.join("<br/>")}function N(a,b,d){"me_message"===b.c?(a=P(a,b,d),a.classList.add("slackmsg-me_message")):a=P(a,b,d);return a}function L(){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].l,b+=T[c].i);b?d="(!"+b+") - ":a&&(d="("+a+") - ");document.getElementById("linkFavicon").href=b||a?"favicon.png?h="+b+"&m="+a:"favicon_ok.png"}d+=H.a.s.name;document.title=d}
 function ia(){if("Notification"in window)if("granted"===Notification.permission){var a=Date.now();if(G+3E4<a){var b=new Notification(C.w);G=a;setTimeout(function(){b.close()},5E3)}}else"denied"!==Notification.permission&&Notification.requestPermission()}
 function U(){var a=document.createDocumentFragment(),b=O.id;document.getElementById("chatWindow").textContent="";H.b[b]&&H.b[b].a.forEach(function(c){"message"===c.type&&(c=N(b,c),a.appendChild(c))});var d=document.getElementById("chatWindow");d.appendChild(a);d.scrollTop=d.scrollHeight-d.clientHeight}
 function ja(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=H.b[O.id].a,d=0,c=b.length;d<c&&b[d].b<=a;d++)if(b[d].b===a){F!==b[d]&&(F=b[d],M());break}}break}b=b.parentElement}}function V(){document.getElementById("msgInput").focus()}

+ 5 - 0
srv/src/httpServ.js

@@ -103,6 +103,11 @@ Server.prototype.onRequest = function(req, res) {
         req.urlObj.getReadStream().pipe(res, { end: true });
         sessionManager.saveSession(req.session);
         return; // async pipe will close when finished
+    } else if (req.urlObj.match(["favicon.png"])) {
+        // TODO
+        res.writeHeader("200");
+        require('fs').createReadStream("public/favicon_ok.png").pipe(res, { end: true });
+        sessionManager.saveSession(req.session);
     } else {
         // Api / dynamic content
         var apiSuccess = false;