summaryrefslogtreecommitdiffstats
path: root/js/gui
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2014-09-11 23:44:08 +0200
committerBernhard Posselt <dev@bernhard-posselt.com>2014-09-11 23:44:08 +0200
commit145912a4fe519b79c192187829f6dbc6f25f4954 (patch)
tree8d02a5c19eff11834b7e5bcb29df29c22c93f416 /js/gui
parent5c63092dd76d23d674576ab1bea4add68acd5f67 (diff)
Compact view: Expand item when jumping to it with a keyboard shortcut, fix #437
Diffstat (limited to 'js/gui')
-rw-r--r--js/gui/KeyboardShortcuts.js113
1 files changed, 71 insertions, 42 deletions
diff --git a/js/gui/KeyboardShortcuts.js b/js/gui/KeyboardShortcuts.js
index 345465857..79d4819b7 100644
--- a/js/gui/KeyboardShortcuts.js
+++ b/js/gui/KeyboardShortcuts.js
@@ -34,31 +34,89 @@
);
};
- var scrollToItem = function (item, scrollArea) {
+ var onActiveItem = function (scrollArea, callback) {
+ var items = scrollArea.find('.item');
+
+ items.each(function (index, item) {
+ item = $(item);
+
+ // 130px of the item should be visible
+ if ((item.height() + item.position().top) > 30) {
+ callback(item);
+
+ return false;
+ }
+ });
+
+ };
+
+ var toggleUnread = function (scrollArea) {
+ onActiveItem(scrollArea, function (item) {
+ item.find('.toggle-keep-unread').trigger('click');
+ });
+ };
+
+ var toggleStar = function (scrollArea) {
+ onActiveItem(scrollArea, function (item) {
+ item.find('.star').trigger('click');
+ });
+ };
+
+ var expandItem = function (scrollArea) {
+ onActiveItem(scrollArea, function (item) {
+ item.find('.utils').trigger('click');
+ });
+ };
+
+ var openLink = function (scrollArea) {
+ onActiveItem(scrollArea, function (item) {
+ item.trigger('click'); // mark read
+ window.open(item.find('.external').attr('href'), '_blank');
+ });
+ };
+
+ var scrollToItem = function (scrollArea, item, isCompactMode) {
+ // if you go to the next article in compact view, it should
+ // expand the current one
scrollArea.scrollTop(
item.offset().top - scrollArea.offset().top + scrollArea.scrollTop()
);
+
+ if (isCompactMode) {
+ onActiveItem(scrollArea, function (item) {
+ if (!item.hasClass('open')) {
+ item.find('.utils').trigger('click');
+ }
+ });
+ }
};
- var scrollToNextItem = function (scrollArea) {
+ var scrollToNextItem = function (scrollArea, isCompactMode) {
var items = scrollArea.find('.item');
+ var jumped = false;
items.each(function (index, item) {
item = $(item);
if (item.position().top > 1) {
- scrollToItem(scrollArea, item);
+ scrollToItem(scrollArea, item, isCompactMode);
+
+ jumped = true;
+
return false;
}
});
// in case this is the last item it should still scroll below the top
- scrollArea.scrollTop(scrollArea.prop('scrollHeight'));
+ if (!jumped) {
+ scrollArea.scrollTop(scrollArea.prop('scrollHeight'));
+ }
};
- var scrollToPreviousItem = function (scrollArea) {
+ var scrollToPreviousItem = function (scrollArea, isCompactMode) {
var items = scrollArea.find('.item');
+ var jumped = false;
items.each(function (index, item) {
item = $(item);
@@ -68,69 +126,40 @@
// if there are no items before the current one
if (previous.length > 0) {
- scrollToItem(scrollArea, previous);
+ scrollToItem(scrollArea, previous, isCompactMode);
}
+ jumped = true;
+
return false;
}
});
// if there was no jump jump to the last element
- if (items.length > 0) {
+ if (!jumped && items.length > 0) {
scrollToItem(scrollArea, items.last());
}
- };
- var getActiveItem = function (scrollArea) {
- var items = scrollArea.find('.item');
-
- items.each(function (index, item) {
- item = $(item);
-
- // 130px of the item should be visible
- if ((item.height() + item.position().top) > 30) {
- return item;
- }
- });
- };
-
- var toggleUnread = function (scrollArea) {
- var item = getActiveItem(scrollArea);
- item.find('.keep-unread').trigger('click');
- };
-
- var toggleStar = function (scrollArea) {
- var item = getActiveItem(scrollArea);
- item.find('.star').trigger('click');
};
- var expandItem = function (scrollArea) {
- var item = getActiveItem(scrollArea);
- item.find('.title').trigger('click');
- };
-
- var openLink = function (scrollArea) {
- var item = getActiveItem(scrollArea).find('.title a');
- item.trigger('click'); // mark read
- window.open(item.attr('href'), '_blank');
- };
$(document).keyup(function (event) {
if (noInputFocused($(':focus')) && noModifierKey(event)) {
var keyCode = event.keyCode;
var scrollArea = $('#app-content');
+ var isCompactMode = $('#app-content-wrapper > .compact').length > 0;
// j, n, right arrow
- if ([74, 78, 33].indexOf(keyCode) >= 0) {
+ if ([74, 78, 39].indexOf(keyCode) >= 0) {
event.preventDefault();
- scrollToNextItem(scrollArea);
+ scrollToNextItem(scrollArea, isCompactMode);
// k, p, left arrow
} else if ([75, 80, 37].indexOf(keyCode) >= 0) {
event.preventDefault();
- scrollToPreviousItem(scrollArea);
+ scrollToPreviousItem(scrollArea, isCompactMode);
// u
} else if ([85].indexOf(keyCode) >= 0) {