summaryrefslogtreecommitdiffstats
path: root/js/gui
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2014-10-20 13:23:13 +0200
committerBernhard Posselt <dev@bernhard-posselt.com>2014-10-20 13:23:13 +0200
commit569406f2d3320ee870160bbcd3a1ad8df5346ea5 (patch)
tree8e58b336f4a84200f180453a16292b053aee0ec6 /js/gui
parent7683efc12dd5fcd3b0c1f9e4f93e2e569b536571 (diff)
add shortcut for jumping to next/previous folder
Diffstat (limited to 'js/gui')
-rw-r--r--js/gui/KeyboardShortcuts.js71
1 files changed, 71 insertions, 0 deletions
diff --git a/js/gui/KeyboardShortcuts.js b/js/gui/KeyboardShortcuts.js
index eed59a16d..6079c1dd5 100644
--- a/js/gui/KeyboardShortcuts.js
+++ b/js/gui/KeyboardShortcuts.js
@@ -72,6 +72,65 @@
}
};
+ var getParentFolder = function (current) {
+ return current.parent().parent('.folder');
+ };
+
+ var selectFirstOrLastFolder = function (navigationArea, isLast) {
+ var folders = navigationArea.find('.folder:visible');
+
+ var index;
+ if (isLast) {
+ index = folders.length - 1;
+ } else {
+ index = 0;
+ }
+
+ if (folders.length > 0) {
+ $(folders[index]).children('a').trigger('click');
+ }
+ };
+
+ var previousFolder = function (navigationArea) {
+ var current = navigationArea.find('.active');
+
+ // cases: folder active, subfeed active, feed active, none active
+ if (current.hasClass('folder')) {
+ current.prevAll('.folder:visible').first()
+ .children('a').trigger('click');
+ } else if (current.hasClass('feed')) {
+ var parentFolder = getParentFolder(current);
+ if (parentFolder.length > 0) {
+ // first go to previous folder should select the parent folder
+ parentFolder.children('a').trigger('click');
+ } else {
+ selectFirstOrLastFolder(navigationArea, true);
+ }
+ } else {
+ selectFirstOrLastFolder(navigationArea, true);
+ }
+ };
+
+ var nextFolder = function (navigationArea) {
+ var current = navigationArea.find('.active');
+
+ // cases: folder active, subfeed active, feed active, none active
+ if (current.hasClass('folder')) {
+ current.nextAll('.folder:visible').first()
+ .children('a').trigger('click');
+ } else if (current.hasClass('feed')) {
+ var parentFolder = getParentFolder(current);
+ if (parentFolder.length > 0) {
+ parentFolder.nextAll('.folder:visible').first()
+ .children('a').trigger('click');
+ } else {
+ selectFirstOrLastFolder(navigationArea);
+ }
+ } else {
+ selectFirstOrLastFolder(navigationArea);
+ }
+ };
+
var previousFeed = function (navigationArea) {
var current = navigationArea.find('.active');
var elements = navigationArea.find('.subscriptions-feed:visible,' +
@@ -301,6 +360,18 @@
event.preventDefault();
previousFeed(navigationArea);
+ // c
+ } else if ([67].indexOf(keyCode) >= 0) {
+
+ event.preventDefault();
+ previousFolder(navigationArea);
+
+ // v
+ } else if ([86].indexOf(keyCode) >= 0) {
+
+ event.preventDefault();
+ nextFolder(navigationArea);
+
}
}