use javascript advanced optimizations, improve make-js script

Major benefit, beside a smaller file size, is the possibility to remove debug informations from the minified javascript.

make-js script:
- take care of any warnings and errors
- raise warning level to verbose

js/*
- switch to Array-Access Property Notation for external data (prevents renaming by the closure compiler)
This commit is contained in:
Mathias Kresin 2015-01-27 19:01:21 +01:00
parent 8241177556
commit e0fd734c64
4 changed files with 51 additions and 45 deletions

37
assets/js/all.min.js vendored
View File

@ -1,21 +1,16 @@
var Miniflux={};Miniflux.App=function(){return{Run:function(){Miniflux.Event.ListenKeyboardEvents();Miniflux.Event.ListenMouseEvents()}}}(); var g=function(){var e=[];return{i:function(d,a){var b=d.querySelector("span.items-count");if(b){var c=d.getAttribute("data-feed-id"),e=d.querySelector("h2:first-of-type");e.className="loading-icon";var l=new XMLHttpRequest;l.onload=function(){e.className="";d.removeAttribute("data-feed-error");var c=d.querySelector(".feed-last-checked");c&&(c.innerHTML=c.getAttribute("data-after-update"));c=JSON.parse(this.responseText);c.result?b.innerHTML=c.items_count.items_unread+"/"+c.items_count.items_total:
Miniflux.Feed=function(){var e=[];return{Update:function(d,a){var b=d.querySelector("span.items-count");if(b){var c=d.getAttribute("data-feed-id"),e=d.querySelector("h2:first-of-type");e.className="loading-icon";var h=new XMLHttpRequest;h.onload=function(){e.className="";d.removeAttribute("data-feed-error");var c=d.querySelector(".feed-last-checked");c&&(c.innerHTML=c.getAttribute("data-after-update"));c=JSON.parse(this.responseText);c.result?b.innerHTML=c.items_count.items_unread+"/"+c.items_count.items_total: d.setAttribute("data-feed-error","1");a&&a(c)};l.open("POST","?action=refresh-feed&feed_id="+c,!0);l.send()}},j:function(){var d=Array.prototype.slice.call(document.querySelectorAll("article:not([data-feed-disabled])")),a=setInterval(function(){for(;0<d.length&&5>e.length;){var b=d.shift();e.push(parseInt(b.getAttribute("data-feed-id"),10));g.i(b,function(b){b=e.indexOf(b.feed_id);0<=b&&e.splice(b,1);0===d.length&&0===e.length&&(clearInterval(a),window.location.href="?action=unread")})}},100)}}}(),
d.setAttribute("data-feed-error","1");a&&a(c)};h.open("POST","?action=refresh-feed&feed_id="+c,!0);h.send()}},UpdateAll:function(){var d=Array.prototype.slice.call(document.querySelectorAll("article:not([data-feed-disabled])")),a=setInterval(function(){for(;0<d.length&&5>e.length;){var b=d.shift();e.push(parseInt(b.getAttribute("data-feed-id")));Miniflux.Feed.Update(b,function(b){b=e.indexOf(b.feed_id);0<=b&&e.splice(b,1);0===d.length&&0===e.length&&(clearInterval(a),window.location.href="?action=unread")})}}, q=function(){function e(a){return item_id=a.getAttribute("data-item-id")}function d(a){if(a&&a.hasAttribute("data-reverse-label")){var b=a.innerHTML;a.innerHTML=a.getAttribute("data-reverse-label");a.setAttribute("data-reverse-label",b)}}function a(a){"mouse"!==k.b&&m.c();a.parentNode.removeChild(a);p--}function b(){0===p&&window.location.reload();var a=document.getElementById("page-counter");a.textContent=p||"";document.getElementById("nav-counter").textContent=l||"";switch(document.querySelector("section.page").getAttribute("data-item-page")){case "unread":document.title=
100)}}}(); "Miniflux ("+l+")";break;case "feed-items":document.title="("+p+") "+a.parentNode.firstChild.nodeValue;break;default:document.title=a.parentNode.firstChild.nodeValue+" ("+p+")"}}function c(h){var f=e(h),c=new XMLHttpRequest;c.onload=function(){if(m.a()){if(h.getAttribute("data-hide"))a(h);else{h.setAttribute("data-item-status","read");var c=h.querySelector("a.mark");d(c);(c=h.querySelector("a.mark"))&&c.setAttribute("data-action","mark-unread")}l--;b()}};c.open("POST","?action=mark-item-read&id="+
Miniflux.Item=function(){function e(a){return item_id=a.getAttribute("data-item-id")}function d(a){if(a&&a.hasAttribute("data-reverse-label")){var b=a.innerHTML;a.innerHTML=a.getAttribute("data-reverse-label");a.setAttribute("data-reverse-label",b)}}function a(a){"mouse"!==Miniflux.Event.lastEventType&&Miniflux.Nav.SelectNextItem();a.parentNode.removeChild(a);l--}function b(){0===l&&window.location.reload();var a=document.getElementById("page-counter");a.textContent=l||"";document.getElementById("nav-counter").textContent=h|| f,!0);c.send()}function t(h){var c=e(h),n=new XMLHttpRequest;n.onload=function(){if(m.a()){if(h.getAttribute("data-hide"))a(h);else{h.setAttribute("data-item-status","unread");var c=h.querySelector("a.mark");d(c);(c=h.querySelector("a.mark"))&&c.setAttribute("data-action","mark-read")}l++;b()}};n.open("POST","?action=mark-item-unread&id="+c,!0);n.send()}var l=function(){var a=document.getElementById("nav-counter");if(a)return counter=parseInt(a.textContent,10)||0}(),p=function(){var a=document.getElementById("page-counter");
"";switch(document.querySelector("section.page").getAttribute("data-item-page")){case "unread":document.title="Miniflux ("+h+")";break;case "feed-items":document.title="("+l+") "+a.parentNode.firstChild.nodeValue;break;default:document.title=a.parentNode.firstChild.nodeValue+" ("+l+")"}}function c(g){var f=e(g),c=new XMLHttpRequest;c.onload=function(){if(Miniflux.Nav.IsListing()){if(g.getAttribute("data-hide"))a(g);else{g.setAttribute("data-item-status","read");var c=g.querySelector("a.mark");d(c); if(a)return counter=parseInt(a.textContent,10)||0}();return{m:c,o:t,n:function(c){var f=e(c),d=new XMLHttpRequest;d.onload=function(){m.a()&&(a(c),"unread"===c.getAttribute("data-item-status")&&l--,b())};d.open("POST","?action=mark-item-removed&id="+f,!0);d.send()},h:function(c){var f=e(c),n="1"===c.getAttribute("data-item-bookmark")?"0":"1",r=new XMLHttpRequest;r.onload=function(){var f=document.querySelector("section.page");if(m.a()&&"bookmarks"===f.getAttribute("data-item-page"))a(c),b();else if(c.setAttribute("data-item-bookmark",
(c=g.querySelector("a.mark"))&&c.setAttribute("data-action","mark-unread")}h--;b()}};c.open("POST","?action=mark-item-read&id="+f,!0);c.send()}function n(g){var c=e(g),k=new XMLHttpRequest;k.onload=function(){if(Miniflux.Nav.IsListing()){if(g.getAttribute("data-hide"))a(g);else{g.setAttribute("data-item-status","unread");var c=g.querySelector("a.mark");d(c);(c=g.querySelector("a.mark"))&&c.setAttribute("data-action","mark-read")}h++;b()}};k.open("POST","?action=mark-item-unread&id="+c,!0);k.send()} n),m.a())f=c.querySelector("a.bookmark"),d(f);else if((f=c.querySelector("a.bookmark-icon"))&&f.hasAttribute("data-reverse-title")){var e=f.getAttribute("title");f.setAttribute("title",f.getAttribute("data-reverse-title"));f.setAttribute("data-reverse-title",e)}};r.open("POST","?action=bookmark&id="+f+"&value="+n,!0);r.send()},t:function(a){var b=a.getAttribute("data-item-status");"read"===b?t(a):"unread"===b&&c(a)},r:function(a){(a=a.querySelector("a.show"))&&a.click()},f:function(a){var b=a.querySelector("a.original");
var h=function(){var a=document.getElementById("nav-counter");if(a)return counter=parseInt(a.textContent,10)||0}(),l=function(){var a=document.getElementById("page-counter");if(a)return counter=parseInt(a.textContent,10)||0}();return{MarkAsRead:c,MarkAsUnread:n,MarkAsRemoved:function(c){var f=e(c),d=new XMLHttpRequest;d.onload=function(){Miniflux.Nav.IsListing()&&(a(c),"unread"===c.getAttribute("data-item-status")&&h--,b())};d.open("POST","?action=mark-item-removed&id="+f,!0);d.send()},SwitchBookmark:function(c){var f= b&&("unread"===a.getAttribute("data-item-status")&&c(a),b.removeAttribute("data-action"),"mouse"!==k.b&&b.click())},d:function(a){var b=document.getElementById("download-item");if(b){b.innerHTML=" "+b.getAttribute("data-before-message");b.className="loading-icon";var c=new XMLHttpRequest;c.onload=function(){var a=JSON.parse(c.responseText);b.className="";if(a.result){var d=document.getElementById("item-content");d&&(d.innerHTML=a.content);b.innerHTML=b.getAttribute("data-after-message")}else b.innerHTML=
e(c),k="1"===c.getAttribute("data-item-bookmark")?"0":"1",m=new XMLHttpRequest;m.onload=function(){var f=document.querySelector("section.page");if(Miniflux.Nav.IsListing()&&"bookmarks"===f.getAttribute("data-item-page"))a(c),b();else if(c.setAttribute("data-item-bookmark",k),Miniflux.Nav.IsListing())f=c.querySelector("a.bookmark"),d(f);else if((f=c.querySelector("a.bookmark-icon"))&&f.hasAttribute("data-reverse-title")){var e=f.getAttribute("title");f.setAttribute("title",f.getAttribute("data-reverse-title")); b.getAttribute("data-failure-message")};a=e(a);c.open("POST","?action=download-item&id="+a,!0);c.send()}},e:function(a){for(var b=document.getElementsByTagName("article"),c=[],d=0,l=b.length;d<l;d++)c.push(e(b[d]));b=new XMLHttpRequest;b.onload=function(){window.location.href=a};b.open("POST","?action=mark-items-as-read",!0);b.send(JSON.stringify(c))},u:function(){for(var a=["#current-item h1","#item-content","#listing #current-item h2","#listing #current-item .preview"],b=0;b<a.length;b++){var c=
f.setAttribute("data-reverse-title",e)}};m.open("POST","?action=bookmark&id="+f+"&value="+k,!0);m.send()},SwitchStatus:function(a){var b=a.getAttribute("data-item-status");"read"===b?n(a):"unread"===b&&c(a)},Show:function(a){(a=a.querySelector("a.show"))&&a.click()},OpenOriginal:function(a){var b=a.querySelector("a.original");b&&("unread"===a.getAttribute("data-item-status")&&c(a),b.removeAttribute("data-action"),"mouse"!==Miniflux.Event.lastEventType&&b.click())},DownloadContent:function(a){var b= document.querySelector(a[b]);c&&(c.dir=""==c.dir?"rtl":"")}}}}(),k=function(){function e(a){if(63!==a.keyCode&&63!==a.which&&(a.ctrlKey||a.shiftKey||a.altKey||a.metaKey))return!0;a=a.target||a.srcElement;return"INPUT"===a.tagName||"TEXTAREA"===a.tagName?!0:!1}var d=[];return{b:"",l:function(){document.onclick=function(a){var b=a.target.getAttribute("data-action");b&&"original-link"!==b&&a.preventDefault()};document.onmouseup=function(a){if(2!==a.button)if("INPUT"===a.target.nodeName&&"auto-select"===
document.getElementById("download-item");if(b){b.innerHTML=" "+b.getAttribute("data-before-message");b.className="loading-icon";var c=new XMLHttpRequest;c.onload=function(){var a=JSON.parse(c.responseText);b.className="";if(a.result){var d=document.getElementById("item-content");d&&(d.innerHTML=a.content);b.innerHTML=b.getAttribute("data-after-message")}else b.innerHTML=b.getAttribute("data-failure-message")};a=e(a);c.open("POST","?action=download-item&id="+a,!0);c.send()}},MarkListingAsRead:function(a){for(var b= a.target.className)a.target.select();else{var b=a.target.getAttribute("data-action");if(b){k.b="mouse";var c;a:{for(element=a.target;element&&element.parentNode;)if(element=element.parentNode,element.tagName&&"article"===element.tagName.toLowerCase()){c=element;break a}c=void 0}switch(b){case "refresh-all":g.j();break;case "refresh-feed":c&&g.i(c);break;case "mark-read":c&&q.m(c);break;case "mark-unread":c&&q.o(c);break;case "mark-removed":c&&q.n(c);break;case "bookmark":c&&q.h(c);break;case "download-item":c&&
document.getElementsByTagName("article"),c=[],d=0,h=b.length;d<h;d++)c.push(e(b[d]));b=new XMLHttpRequest;b.onload=function(){window.location.href=a};b.open("POST","?action=mark-items-as-read",!0);b.send(JSON.stringify(c))},ToggleRTLMode:function(){for(var a=["#current-item h1","#item-content","#listing #current-item h2","#listing #current-item .preview"],b=0;b<a.length;b++){var c=document.querySelector(a[b]);c&&(c.dir=""==c.dir?"rtl":"")}}}}(); q.d(c);break;case "original-link":c&&q.f(c);break;case "mark-all-read":q.e("?action=unread");break;case "mark-feed-read":q.e("?action=feed-items&feed_id="+a.target.getAttribute("data-feed-id"))}}}}},k:function(){document.onkeypress=function(a){if(!e(a))if(k.b="keyboard",d.push(a.keyCode||a.which),103===d[0])switch(d[1]){case void 0:break;case 117:window.location.href="?action=unread";d=[];break;case 98:window.location.href="?action=bookmarks";d=[];break;case 104:window.location.href="?action=history";
Miniflux.Event=function(){function e(a){if(63!==a.keyCode&&63!==a.which&&(a.ctrlKey||a.shiftKey||a.altKey||a.metaKey))return!0;a=a.target||a.srcElement;return"INPUT"===a.tagName||"TEXTAREA"===a.tagName?!0:!1}var d=[];return{lastEventType:"",ListenMouseEvents:function(){document.onclick=function(a){var b=a.target.getAttribute("data-action");b&&"original-link"!==b&&a.preventDefault()};document.onmouseup=function(a){if(2!==a.button)if("INPUT"===a.target.nodeName&&"auto-select"===a.target.className)a.target.select(); d=[];break;case 115:window.location.href="?action=feeds";d=[];break;case 112:window.location.href="?action=config";d=[];break;default:d=[]}else{d=[];var b=document.getElementById("current-item");switch(a.keyCode||a.which){case 100:b&&q.d(b);break;case 112:case 107:m.g();break;case 110:case 106:m.c();break;case 118:b&&q.f(b);break;case 111:b&&q.r(b);break;case 109:b&&q.t(b);break;case 102:b&&q.h(b);break;case 104:m.q();break;case 108:m.p();break;case 114:g.j();break;case 63:m.s();break;case 122:q.u()}}};
else{var b=a.target.getAttribute("data-action");if(b){Miniflux.Event.lastEventType="mouse";var c;a:{for(element=a.target;element&&element.parentNode;)if(element=element.parentNode,element.tagName&&"article"===element.tagName.toLowerCase()){c=element;break a}c=void 0}switch(b){case "refresh-all":Miniflux.Feed.UpdateAll();break;case "refresh-feed":c&&Miniflux.Feed.Update(c);break;case "mark-read":c&&Miniflux.Item.MarkAsRead(c);break;case "mark-unread":c&&Miniflux.Item.MarkAsUnread(c);break;case "mark-removed":c&& document.onkeydown=function(a){if(!e(a))switch(k.b="keyboard",a.keyCode||a.which){case 37:m.g();break;case 39:m.c()}}}}}(),m=function(){function e(a){var b=pageYOffset+document.documentElement.clientHeight;(0>b-(a.offsetTop+a.offsetHeight)||b-a.offsetTop>document.documentElement.clientHeight)&&window.scrollTo(0,a.offsetTop-10)}function d(){return document.getElementById("listing")?!0:!1}return{p:function(){var a=document.getElementById("next-page");a&&a.click()},q:function(){var a=document.getElementById("previous-page");
Miniflux.Item.MarkAsRemoved(c);break;case "bookmark":c&&Miniflux.Item.SwitchBookmark(c);break;case "download-item":c&&Miniflux.Item.DownloadContent(c);break;case "original-link":c&&Miniflux.Item.OpenOriginal(c);break;case "mark-all-read":Miniflux.Item.MarkListingAsRead("?action=unread");break;case "mark-feed-read":Miniflux.Item.MarkListingAsRead("?action=feed-items&feed_id="+a.target.getAttribute("data-feed-id"))}}}}},ListenKeyboardEvents:function(){document.onkeypress=function(a){if(!e(a))if(Miniflux.Event.lastEventType= a&&a.click()},c:function(){var a=document.getElementById("next-item");if(a)a.click();else if(d())if(a=document.getElementsByTagName("article"),document.getElementById("current-item"))for(var b=0,c=a.length;b<c;b++){if("current-item"===a[b].id){b+1<c&&(a[b].id="item-"+a[b].getAttribute("data-item-id"),a[b+1].id="current-item",e(a[b+1]));break}}else a[0].id="current-item",e(a[0])},g:function(){var a=document.getElementById("previous-item");if(a)a.click();else if(d())if(a=document.getElementsByTagName("article"),
"keyboard",d.push(a.keyCode||a.which),103===d[0])switch(d[1]){case void 0:break;case 117:window.location.href="?action=unread";d=[];break;case 98:window.location.href="?action=bookmarks";d=[];break;case 104:window.location.href="?action=history";d=[];break;case 115:window.location.href="?action=feeds";d=[];break;case 112:window.location.href="?action=config";d=[];break;default:d=[]}else{d=[];var b=document.getElementById("current-item");switch(a.keyCode||a.which){case 100:b&&Miniflux.Item.DownloadContent(b); document.getElementById("current-item"))for(var b=a.length-1;0<=b;b--){if("current-item"===a[b].id){0<=b-1&&(a[b].id="item-"+a[b].getAttribute("data-item-id"),a[b-1].id="current-item",e(a[b-1]));break}}else a[a.length-1].id="current-item",e(a[a.length-1])},s:function(){open("?action=show-help","Help","width=320,height=450,location=no,scrollbars=no,status=no,toolbar=no")},a:d}}();k.k();k.l();
break;case 112:case 107:Miniflux.Nav.SelectPreviousItem();break;case 110:case 106:Miniflux.Nav.SelectNextItem();break;case 118:b&&Miniflux.Item.OpenOriginal(b);break;case 111:b&&Miniflux.Item.Show(b);break;case 109:b&&Miniflux.Item.SwitchStatus(b);break;case 102:b&&Miniflux.Item.SwitchBookmark(b);break;case 104:Miniflux.Nav.OpenPreviousPage();break;case 108:Miniflux.Nav.OpenNextPage();break;case 114:Miniflux.Feed.UpdateAll();break;case 63:Miniflux.Nav.ShowHelp();break;case 122:Miniflux.Item.ToggleRTLMode()}}};
document.onkeydown=function(a){if(!e(a))switch(Miniflux.Event.lastEventType="keyboard",a.keyCode||a.which){case 37:Miniflux.Nav.SelectPreviousItem();break;case 39:Miniflux.Nav.SelectNextItem()}}}}}();
Miniflux.Nav=function(){function e(a){var b=pageYOffset+document.documentElement.clientHeight;(0>b-(a.offsetTop+a.offsetHeight)||b-a.offsetTop>document.documentElement.clientHeight)&&window.scrollTo(0,a.offsetTop-10)}function d(){return document.getElementById("listing")?!0:!1}return{OpenNextPage:function(){var a=document.getElementById("next-page");a&&a.click()},OpenPreviousPage:function(){var a=document.getElementById("previous-page");a&&a.click()},SelectNextItem:function(){var a=document.getElementById("next-item");
if(a)a.click();else if(d())if(a=document.getElementsByTagName("article"),document.getElementById("current-item"))for(var b=0,c=a.length;b<c;b++){if("current-item"===a[b].id){b+1<c&&(a[b].id="item-"+a[b].getAttribute("data-item-id"),a[b+1].id="current-item",e(a[b+1]));break}}else a[0].id="current-item",e(a[0])},SelectPreviousItem:function(){var a=document.getElementById("previous-item");if(a)a.click();else if(d())if(a=document.getElementsByTagName("article"),document.getElementById("current-item"))for(var b=
a.length-1;0<=b;b--){if("current-item"===a[b].id){0<=b-1&&(a[b].id="item-"+a[b].getAttribute("data-item-id"),a[b-1].id="current-item",e(a[b-1]));break}}else a[a.length-1].id="current-item",e(a[a.length-1])},ShowHelp:function(){open("?action=show-help","Help","width=320,height=450,location=no,scrollbars=no,status=no,toolbar=no")},IsListing:d}}();Miniflux.App.Run();

View File

@ -28,8 +28,8 @@ Miniflux.Feed = (function() {
if (lastChecked) lastChecked.innerHTML = lastChecked.getAttribute("data-after-update"); if (lastChecked) lastChecked.innerHTML = lastChecked.getAttribute("data-after-update");
var response = JSON.parse(this.responseText); var response = JSON.parse(this.responseText);
if (response.result) { if (response['result']) {
itemsCounter.innerHTML = response.items_count["items_unread"] + "/" + response.items_count['items_total']; itemsCounter.innerHTML = response['items_count']['items_unread'] + "/" + response['items_count']['items_total'];
} else { } else {
feed.setAttribute("data-feed-error", "1"); feed.setAttribute("data-feed-error", "1");
} }
@ -46,10 +46,10 @@ Miniflux.Feed = (function() {
var interval = setInterval(function() { var interval = setInterval(function() {
while (feeds.length > 0 && queue.length < queue_length) { while (feeds.length > 0 && queue.length < queue_length) {
var feed = feeds.shift(); var feed = feeds.shift();
queue.push(parseInt(feed.getAttribute('data-feed-id'))); queue.push(parseInt(feed.getAttribute('data-feed-id'), 10));
Miniflux.Feed.Update(feed, function(response) { Miniflux.Feed.Update(feed, function(response) {
var index = queue.indexOf(response.feed_id); var index = queue.indexOf(response['feed_id']);
if (index >= 0) queue.splice(index, 1); if (index >= 0) queue.splice(index, 1);
if (feeds.length === 0 && queue.length === 0) { if (feeds.length === 0 && queue.length === 0) {

View File

@ -236,9 +236,9 @@ Miniflux.Item = (function() {
var response = JSON.parse(request.responseText); var response = JSON.parse(request.responseText);
container.className = ""; container.className = "";
if (response.result) { if (response['result']) {
var content = document.getElementById("item-content"); var content = document.getElementById("item-content");
if (content) content.innerHTML = response.content; if (content) content.innerHTML = response['content'];
container.innerHTML = container.getAttribute("data-after-message"); container.innerHTML = container.getAttribute("data-after-message");
} }

View File

@ -9,11 +9,22 @@ rm -f $out 2>/dev/null
cat assets/js/app.js assets/js/feed.js assets/js/item.js assets/js/event.js assets/js/nav.js > $in cat assets/js/app.js assets/js/feed.js assets/js/item.js assets/js/event.js assets/js/nav.js > $in
echo "Miniflux.App.Run();" >> $in echo "Miniflux.App.Run();" >> $in
curl -s \ output=$(curl -s \
-d compilation_level=SIMPLE_OPTIMIZATIONS \ -d compilation_level=ADVANCED_OPTIMIZATIONS \
-d output_format=text \ -d output_format=text \
-d output_info=compiled_code \ -d output_info=warnings \
--data-urlencode "js_code@${in}" \ -d output_info=errors \
https://closure-compiler.appspot.com/compile > $out -d warning_level=verbose \
-d output_file_name=all.min.js \
--data-urlencode "js_code@${in}" \
https://closure-compiler.appspot.com/compile)
if [ $(echo "$output" | wc -l) -gt 1 ]; then
echo -e "NOTHING DONE. There are issues:\n"
echo "$output"
exit 1
fi
curl -s "https://closure-compiler.appspot.com/$output" -o "$out";
rm -f $in rm -f $in