summaryrefslogtreecommitdiffstats
path: root/js/gui
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2014-11-17 21:44:18 +0100
committerBernhard Posselt <dev@bernhard-posselt.com>2014-11-17 21:44:18 +0100
commiteaace8424b290b4266478511d2af3bd2bd26fb01 (patch)
treecfdd46bafa99453c51017cae5e4229c2344e2d48 /js/gui
parent0d64807f2ea267dd0bc4b5a01d1cf32bd815ae10 (diff)
fix #300
Diffstat (limited to 'js/gui')
-rw-r--r--js/gui/KeyboardShortcuts.js57
1 files changed, 38 insertions, 19 deletions
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) {