From 0c3d8c787f16a6eb488fbf7fe459b5815575d012 Mon Sep 17 00:00:00 2001 From: Mathias Kresin Date: Sat, 7 Mar 2015 18:23:36 +0100 Subject: [PATCH] use keyboardevent.key if implemented Beside other stuff the main reason for this change is the circumstance that Firefox triggers the "Toggle RTL mode" shortcut if the user press F11 to switch Firefox into the fullscreen mode. Each browser sends keycodes that are used by different other keys on the keyboard for the function keys. Firefox is the only browser which sends the onkeypress event for the function keys. The used keyboard event properties event.keyCode and event.which are already marked as deprecated and has been removed from the Web standards. The "DOM Level 3 Events" standard specifies event.key as their successor. Right now event.key is only available for Firefox 29+ and Internet Explorer 9+. Webkit based browser have support for the former specified event.keyIdentifier. The implementation of event.keyIdentifier isn't the same across different webkit based browsers and buggy: - the value for the z key is F11 (Chrome - Windows, Linux) - the value for the F11 key is F11 as well on (Chrome - Windows, Linux) - the value for latin keys is always the value of the capital letter (Chrome) - the value for cyrillic keys depends on the shift modifier (Chrome) - the value for the keypress event is always an empty string (Safari - Mac OS) - the value for the keydown event matches the keyboard layout dependent character (Safari - Mac OS) - the value for the keydown event does NOT matches the keyboard layout dependent character (Chrome - Windows, Linux) Instead of workaround the problems, the event.which is used for every browser that doesn't support event.key. --- assets/js/all.min.js | 35 ++++++++++----------- assets/js/event.js | 73 +++++++++++++++++++++++++++++--------------- 2 files changed, 66 insertions(+), 42 deletions(-) diff --git a/assets/js/all.min.js b/assets/js/all.min.js index b1d4c67..2945eb2 100644 --- a/assets/js/all.min.js +++ b/assets/js/all.min.js @@ -1,19 +1,20 @@ -var l=function(){var e=[];return{h: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 p=new XMLHttpRequest;p.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):h.a()};p.open("POST","?action=refresh-feed&feed_id="+c,!0);p.send()}},i:function(){var d=Array.prototype.slice.call(document.querySelectorAll("article:not([data-feed-disabled])")),a=setInterval(function(){for(;0e.length;){var b=d.shift();e.push(parseInt(b.getAttribute("data-feed-id"),10));l.h(b,function(b){b=e.indexOf(b.feed_id);0<=b&&e.splice(b,1);0===d.length&&0===e.length&&(clearInterval(a),h.a())})}},100)}}}(),h=function(){function e(f){var a= -document.createEvent("MouseEvents");a.initEvent("mousedown",!0,!0);f.dispatchEvent(a);a=document.createEvent("MouseEvents");a.initEvent("mouseup",!0,!0);f.dispatchEvent(a);f.click()}function d(a){return item_id=a.getAttribute("data-item-id")}function a(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 b(a){"mouse"!==n.c&&u.d();a.parentNode.removeChild(a);q--}function c(){-1d.length;){var b=c.shift();d.push(parseInt(b.getAttribute("data-feed-id"),10));l.h(b,function(b){b=d.indexOf(b.feed_id);0<=b&&d.splice(b,1);0===c.length&&0===d.length&&(clearInterval(a),h.a())})}},100)}}}(),h=function(){function d(f){var a= +document.createEvent("MouseEvents");a.initEvent("mousedown",!0,!0);f.dispatchEvent(a);a=document.createEvent("MouseEvents");a.initEvent("mouseup",!0,!0);f.dispatchEvent(a);f.click()}function c(a){return item_id=a.getAttribute("data-item-id")}function a(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 b(a){"mouse"!==n.c&&u.d();a.parentNode.removeChild(a);q--}function e(){-1t[e])t[e]=f.time,"unread"===f.status&&(b=!0)}document.hidden|| -d.nbUnread===m&&!r?document.hidden&&!a&&b&&(r=!0,document.title="\u21bb "+document.title):(r=!1,m=d.nbUnread,c())};a.open("POST","?action=latest-feeds-items",!0);a.send()}}}}(),n=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{c:"",l:function(){document.onclick=function(a){a.target.hasAttribute("data-action")&&"original"!==a.target.className&& +"Miniflux ("+m+")";break;case "feed-items":document.title="("+q+") "+pageHeading;break;default:document.title=a?pageHeading+" ("+q+")":pageHeading}}function v(f){var g=c(f),k=new XMLHttpRequest;k.onload=function(){if(u.b()){if(f.getAttribute("data-hide"))b(f);else{f.setAttribute("data-item-status","read");var g=f.querySelector("a.mark");a(g);(g=f.querySelector("a.mark"))&&g.setAttribute("data-action","mark-unread")}m--;e()}};k.open("POST","?action=mark-item-read&id="+g,!0);k.send()}function p(f){var g= +c(f),k=new XMLHttpRequest;k.onload=function(){if(u.b()){if(f.getAttribute("data-hide"))b(f);else{f.setAttribute("data-item-status","unread");var g=f.querySelector("a.mark");a(g);(g=f.querySelector("a.mark"))&&g.setAttribute("data-action","mark-read")}m++;e()}};k.open("POST","?action=mark-item-unread&id="+g,!0);k.send()}var t=[],r=!1,m=function(){var a=document.getElementById("nav-counter");if(a)return counter=parseInt(a.textContent,10)||0}(),q=function(){var a=document.getElementById("page-counter"); +if(a)return counter=parseInt(a.textContent,10)||0}();return{n:function(a){"read"!==a.getAttribute("data-item-status")&&v(a)},p:p,o:function(a){var g=c(a),k=new XMLHttpRequest;k.onload=function(){u.b()&&(b(a),"unread"===a.getAttribute("data-item-status")&&m--,e())};k.open("POST","?action=mark-item-removed&id="+g,!0);k.send()},g:function(f){var g=c(f),k="1"===f.getAttribute("data-item-bookmark")?"0":"1",d=new XMLHttpRequest;d.onload=function(){var g=document.querySelector("section.page");if(u.b()&& +"bookmarks"===g.getAttribute("data-item-page"))b(f),e();else if(f.setAttribute("data-item-bookmark",k),u.b())g=f.querySelector("a.bookmark"),a(g);else if((g=f.querySelector("a.bookmark-icon"))&&g.hasAttribute("data-reverse-title")){var c=g.getAttribute("title");g.setAttribute("title",g.getAttribute("data-reverse-title"));g.setAttribute("data-reverse-title",c)}};d.open("POST","?action=bookmark&id="+g+"&value="+k,!0);d.send()},B:function(a){var b=a.getAttribute("data-item-status");"read"===b?p(a):"unread"=== +b&&v(a)},w:function(a){(a=a.querySelector("a.show"))&&d(a)},t:function(a){(a=a.querySelector("a.original"))&&d(a)},e:function(a){var b=document.getElementById("download-item");if(b){b.innerHTML=" "+b.getAttribute("data-before-message");b.className="loading-icon";var e=new XMLHttpRequest;e.onload=function(){var a=JSON.parse(e.responseText);b.className="";if(a.result){var c=document.getElementById("item-content");c&&(c.innerHTML=a.content);b.innerHTML=b.getAttribute("data-after-message")}else b.innerHTML= +b.getAttribute("data-failure-message")};a=c(a);e.open("POST","?action=download-item&id="+a,!0);e.send()}},r:function(a){for(var b=document.getElementsByTagName("article"),e=[],d=0,m=b.length;dt[d])t[d]=f.time,"unread"===f.status&&(b=!0)}document.hidden|| +c.nbUnread===m&&!r?document.hidden&&!a&&b&&(r=!0,document.title="\u21bb "+document.title):(r=!1,m=c.nbUnread,e())};a.open("POST","?action=latest-feeds-items",!0);a.send()}}}}(),n=function(){function d(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 c=[];return{c:"",l:function(){document.onclick=function(a){a.target.hasAttribute("data-action")&&"original"!==a.target.className&& a.preventDefault()};document.onmouseup=function(a){if(2!==a.button)if("INPUT"===a.target.nodeName&&"auto-select"===a.target.className)a.target.select();else{var b=a.target.getAttribute("data-action");if(b){n.c="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":l.i();break;case "refresh-feed":c&&l.h(c);break;case "mark-read":c&&h.n(c);break; -case "mark-unread":c&&h.p(c);break;case "mark-removed":c&&h.o(c);break;case "bookmark":c&&h.g(c);break;case "download-item":c&&h.e(c);break;case "mark-all-read":h.r("?action=unread");break;case "mark-feed-read":h.q(a.target.getAttribute("data-feed-id"))}}}}},k:function(){document.onkeypress=function(a){if(!e(a))if(n.c="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&&h.e(b);break;case 112:case 107:u.f();break;case 110:case 106:u.d();break;case 118:b&&h.t(b);break;case 111:b&&h.w(b);break;case 109:b&&h.B(b);break;case 102:b&&h.g(b);break;case 104:u.u();break;case 108:u.s(); -break;case 114:l.i();break;case 63:u.A();break;case 122:h.C()}}};document.onkeydown=function(a){if(!e(a))switch(n.c="keyboard",a.keyCode||a.which){case 37:u.f();break;case 39:u.d()}}},m:function(){document.addEventListener("visibilitychange",function(){!document.hidden&&h.D()&&h.a()})}}}(),u=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{s:function(){var a=document.getElementById("next-page");a&&a.click()},u:function(){var a=document.getElementById("previous-page");a&&a.click()},d: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;bb-(a.offsetTop+a.offsetHeight)||b-a.offsetTop>document.documentElement.clientHeight)&&window.scrollTo(0,a.offsetTop-10)}function c(){return document.getElementById("listing")?!0:!1}return{s:function(){var a=document.getElementById("next-page");a&&a.click()},u:function(){var a=document.getElementById("previous-page");a&&a.click()},d:function(){var a=document.getElementById("next-item");if(a)a.click();else if(c())if(a= +document.getElementsByTagName("article"),document.getElementById("current-item"))for(var b=0,e=a.length;b