Skip to content

Instantly share code, notes, and snippets.

@eugeneius
Created July 7, 2013 01:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eugeneius/5941855 to your computer and use it in GitHub Desktop.
Save eugeneius/5941855 to your computer and use it in GitHub Desktop.
The JavaScript key event handler from http://theoldreader.com/, beautified by http://jsbeautifier.org/. I'm using this to illustrate the problem with keyboard shortcuts described here: http://theoldreader.uservoice.com/forums/187017-feature-requests/suggestions/3743414-keyboard-navigation-doesn-t-work-as-i-d-expect
trigger: function (e, t) {
var n, r, i, s, o;
t == null && (t = {}), Reader.Debug.log("[Shortcuts] trigger " + e);
if ($(window).width() < 768 && ["j", "k"].indexOf(e) === -1) return !0;
n = Reader.Contents.container, o = n.hasClass("slide") ? Reader.Contents.offset : n.scrollTop();
switch (e) {
case "space":
return s = n.height() - o, i = n.scrollTop() + s, r = !1, $(".post").each(function (e, t) {
var u, a;
if (r) return;
u = $(t).offset().top - o;
if (u > 1 && u < s) {
i = n.scrollTop() + u, r = !0, a = $(t).find("[data-list-toggle]");
if (a.length > 0) return a.trigger("click"), i = n.scrollTop() + $(t).offset().top - o
}
}), Reader.Contents.scrollto({
scrollTop: i
}, 200), !1;
case "shift-space":
return s = -(n.height() - o), i = n.scrollTop() + s, r = !1, $(".post").each(function (e, t) {
var u, a, f;
if (r) return;
u = $(t).offset().top - o;
if (u < 0 && u > s) return i = n.scrollTop() + u;
if (u > 1) return r = !0;
a = $(t).prev(), f = a.find("[data-list-toggle]");
if (f.length > 0) return f.trigger("click"), i = n.scrollTop() + a.offset().top - o
}), Reader.Contents.scrollto({
scrollTop: i
}, 200), !1;
case "shift-a":
Reader.Contents.node.find(".read").trigger("click");
break;
case "j":
case "n":
return r = !1, i = n.scrollTop(), $(".post").each(function (t, s) {
var u, a;
if (r) return;
u = $(s).offset().top - o;
if (u > 1) {
i = n.scrollTop() + u, r = !0, a = $(s).find("[data-list-toggle]");
if (a.length > 0) return e === "j" && a.parent().find(".list-post").is(":hidden") ? (a.trigger("click"), i = null) : i = n.scrollTop() + $(s).offset().top - o
}
}), i && Reader.Contents.scrollto({
scrollTop: i
}, 200), !1;
case "k":
case "p":
return r = !1, i = n.scrollTop(), $(".post").each(function (t, s) {
var u, a, f;
if (r) return;
u = $(s).offset().top - o;
if (u < 0) return i = n.scrollTop() + u;
r = !0, a = $(s).prev(), f = a.find("[data-list-toggle]");
if (f.length > 0) return e === "k" && f.parent().find(".list-post").is(":hidden") ? (f.trigger("click"), i = null) : i = n.scrollTop() + a.offset().top - o
}), i && Reader.Contents.scrollto({
scrollTop: i
}, 200), !1;
case "o":
case "v":
case "b":
case "x":
case "m":
case "s":
case "l":
case "f":
case "c":
return r = !1, $(".post").each(function (t, n) {
var i, s;
if (r) return;
s = $(n).offset().top + $(n).outerHeight() - o;
if (s >= 0) {
switch (e) {
case "o":
case "v":
window.open($(this).find("h3 a").attr("href"));
break;
case "b":
i = document.createEvent("MouseEvents"), i.initMouseEvent("click", !0, !0, window, 0, 0, 0, 0, 0, !0, !1, !1, !0, 0, null), $(this).find("h3 a")[0].dispatchEvent(i);
break;
case "x":
$(this).find("[data-list-toggle]").trigger("click");
break;
case "m":
$(this).find(".btn-read").trigger("click");
break;
case "s":
$(this).find(".btn-share").trigger("click");
break;
case "l":
$(this).find(".btn-like").trigger("click");
break;
case "f":
$(this).find(".btn-pocket").trigger("click");
break;
case "c":
$(this).find(".comments .new .btn").trigger("click"), Reader.Contents.scrollto({
scrollTop: Reader.Contents.container.scrollTop() - Reader.Contents.offset + $(n).find(".comments").offset().top
}, 200)
}
return r = !0
}
}), !1
}
return !0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment