From eaace8424b290b4266478511d2af3bd2bd26fb01 Mon Sep 17 00:00:00 2001 From: Bernhard Posselt Date: Mon, 17 Nov 2014 21:44:18 +0100 Subject: fix #300 --- js/gui/KeyboardShortcuts.js | 57 ++++++++++++++++++++++++++++++--------------- 1 file changed, 38 insertions(+), 19 deletions(-) (limited to 'js/gui/KeyboardShortcuts.js') diff --git a/js/gui/KeyboardShortcuts.js b/js/gui/KeyboardShortcuts.js index 9269e3bd3..df02f2fd3 100644 --- a/js/gui/KeyboardShortcuts.js +++ b/js/gui/KeyboardShortcuts.js @@ -34,14 +34,25 @@ ); }; - /*var showShortcuts = function () { - $('*[data-apps-slide-toggle="#app-shortcuts"]').trigger('click'); - };*/ + var scrollToNavigationElement = function (elem, scrollArea) { + scrollArea.scrollTop( + elem.offset().top - scrollArea.offset().top + scrollArea.scrollTop() + ); + }; + + var scrollToActiveNavigationEntry = function (navigationArea) { + var element = navigationArea.find('.active'); + scrollToNavigationElement(element, navigationArea.children('ul')); + }; var reloadFeed = function (navigationArea) { navigationArea.find('.active > a:visible').trigger('click'); }; + var activateNavigationEntry = function (element, navigationArea) { + element.children('a:visible').trigger('click'); + scrollToNavigationElement(element, navigationArea.children('ul')); + }; var nextFeed = function (navigationArea) { var current = navigationArea.find('.active'); @@ -53,7 +64,7 @@ while (current.length > 0) { var subfeeds = current.find('.feed:visible'); if (subfeeds.length > 0) { - $(subfeeds[0]).children('a:visible').trigger('click'); + activateNavigationEntry($(subfeeds[0]), navigationArea); return; } current = current.next('.folder'); @@ -70,7 +81,7 @@ if (element === current[0]) { var next = elements[i+1]; - $(next).children('a:visible').trigger('click'); + activateNavigationEntry($(next), navigationArea); break; } } @@ -91,7 +102,7 @@ } if (folders.length > 0) { - $(folders[index]).children('a').trigger('click'); + activateNavigationEntry($(folders[index]), navigationArea); } }; @@ -100,13 +111,13 @@ // cases: folder active, subfeed active, feed active, none active if (current.hasClass('folder')) { - current.prevAll('.folder:visible').first() - .children('a').trigger('click'); + activateNavigationEntry(current.prevAll('.folder:visible').first(), + navigationArea); } 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'); + activateNavigationEntry(parentFolder, navigationArea); } else { selectFirstOrLastFolder(navigationArea, true); } @@ -120,13 +131,15 @@ // cases: folder active, subfeed active, feed active, none active if (current.hasClass('folder')) { - current.nextAll('.folder:visible').first() - .children('a').trigger('click'); + activateNavigationEntry(current.nextAll('.folder:visible').first(), + navigationArea); } else if (current.hasClass('feed')) { var parentFolder = getParentFolder(current); if (parentFolder.length > 0) { - parentFolder.nextAll('.folder:visible').first() - .children('a').trigger('click'); + activateNavigationEntry( + parentFolder.nextAll('.folder:visible').first(), + navigationArea + ); } else { selectFirstOrLastFolder(navigationArea); } @@ -148,8 +161,8 @@ while (previousFolder.length > 0) { var subfeeds = previousFolder.find('.feed:visible'); if (subfeeds.length > 0) { - $(subfeeds[subfeeds.length-1]) - .children('a:visible').trigger('click'); + activateNavigationEntry($(subfeeds[subfeeds.length-1]), + navigationArea); return; } previousFolder = previousFolder.prev('.folder'); @@ -159,8 +172,8 @@ var feeds = current.siblings('.feed'); if (feeds.length > 0) { - (feeds[feeds.length-1]) - .children('a:visible').trigger('click'); + activateNavigationEntry($(feeds[feeds.length-1]), + navigationArea); return; } @@ -168,7 +181,7 @@ // no feed found, go to starred var starred = $('.starred-feed:visible'); if (starred.length > 0) { - starred.children('a:visible').trigger('click'); + activateNavigationEntry(starred, navigationArea); } return; @@ -181,7 +194,7 @@ if (element === current[0]) { var previous = elements[i-1]; - $(previous).children('a:visible').trigger('click'); + activateNavigationEntry($(previous), navigationArea); break; } } @@ -370,6 +383,12 @@ event.preventDefault(); previousFolder(navigationArea); + // a + } else if ([65].indexOf(keyCode) >= 0) { + + event.preventDefault(); + scrollToActiveNavigationEntry(navigationArea); + // v } else if ([86].indexOf(keyCode) >= 0) { -- cgit v1.2.3