diff options
author | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-10-20 13:23:13 +0200 |
---|---|---|
committer | Bernhard Posselt <dev@bernhard-posselt.com> | 2014-10-20 13:23:13 +0200 |
commit | 569406f2d3320ee870160bbcd3a1ad8df5346ea5 (patch) | |
tree | 8e58b336f4a84200f180453a16292b053aee0ec6 /js/gui/KeyboardShortcuts.js | |
parent | 7683efc12dd5fcd3b0c1f9e4f93e2e569b536571 (diff) |
add shortcut for jumping to next/previous folder
Diffstat (limited to 'js/gui/KeyboardShortcuts.js')
-rw-r--r-- | js/gui/KeyboardShortcuts.js | 71 |
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); + } } |