diff --git a/pom.xml b/pom.xml
index 04944154..3d65d5e0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -249,6 +249,11 @@
spin-js
1.2.7
+
+ org.webjars
+ mousetrap
+ 1.3
+
diff --git a/src/main/java/com/commafeed/frontend/pages/HomePage.java b/src/main/java/com/commafeed/frontend/pages/HomePage.java
index 7ff3ae36..d78b0f90 100644
--- a/src/main/java/com/commafeed/frontend/pages/HomePage.java
+++ b/src/main/java/com/commafeed/frontend/pages/HomePage.java
@@ -12,6 +12,7 @@ import com.commafeed.frontend.references.angular.AngularSanitizeReference;
import com.commafeed.frontend.references.angularui.AngularUIReference;
import com.commafeed.frontend.references.angularuibootstrap.AngularUIBootstrapReference;
import com.commafeed.frontend.references.csstreeview.CssTreeViewReference;
+import com.commafeed.frontend.references.mousetrap.MouseTrapReference;
import com.commafeed.frontend.references.nginfinitescroll.NGInfiniteScrollReference;
import com.commafeed.frontend.references.ngupload.NGUploadReference;
import com.commafeed.frontend.references.select2.Select2Reference;
@@ -33,6 +34,7 @@ public class HomePage extends BasePage {
NGInfiniteScrollReference.renderHead(response);
Select2Reference.renderHead(response);
SpinJSReference.renderHead(response);
+ MouseTrapReference.renderHead(response);
CssTreeViewReference.renderHead(response);
diff --git a/src/main/java/com/commafeed/frontend/references/mousetrap/MouseTrapReference.java b/src/main/java/com/commafeed/frontend/references/mousetrap/MouseTrapReference.java
new file mode 100644
index 00000000..9c154a55
--- /dev/null
+++ b/src/main/java/com/commafeed/frontend/references/mousetrap/MouseTrapReference.java
@@ -0,0 +1,20 @@
+package com.commafeed.frontend.references.mousetrap;
+
+import org.apache.wicket.markup.head.IHeaderResponse;
+import org.apache.wicket.markup.head.JavaScriptHeaderItem;
+
+import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;
+
+public class MouseTrapReference extends WebjarsJavaScriptResourceReference {
+ private static final long serialVersionUID = 1L;
+
+ public static final MouseTrapReference INSTANCE = new MouseTrapReference();
+
+ private MouseTrapReference() {
+ super("/mousetrap/current/mousetrap.js");
+ }
+
+ public static void renderHead(final IHeaderResponse response) {
+ response.render(JavaScriptHeaderItem.forReference(INSTANCE));
+ }
+}
\ No newline at end of file
diff --git a/src/main/webapp/js/controllers.js b/src/main/webapp/js/controllers.js
index 9c0768bc..06592ef0 100644
--- a/src/main/webapp/js/controllers.js
+++ b/src/main/webapp/js/controllers.js
@@ -154,10 +154,16 @@ module.controller('FeedListCtrl', function($scope, $routeParams, $http, $route,
$scope.isOpen = false;
$scope.entryClicked = function(entry, event) {
- $scope.mark(entry, true);
- if (!event.ctrlKey && event.which != 2) {
- event.preventDefault();
- event.stopPropagation();
+ if (!entry.read) {
+ $scope.mark(entry, true);
+ }
+ if (!event || (!event.ctrlKey && event.which != 2)) {
+ if (event) {
+ event.preventDefault();
+ event.stopPropagation();
+ }
+ console.log($scope.current)
+ console.log(entry)
if ($scope.current != entry) {
$scope.isOpen = true;
} else {
@@ -166,4 +172,50 @@ module.controller('FeedListCtrl', function($scope, $routeParams, $http, $route,
$scope.current = entry;
}
}
-});
+
+ var openNextEntry = function() {
+ var entry = null;
+ if ($scope.current) {
+ var index;
+ for ( var i = 0; i < $scope.entries.length; i++) {
+ if ($scope.current == $scope.entries[i]) {
+ index = i;
+ break;
+ }
+ }
+ index = index + 1;
+ if (index < $scope.entries.length) {
+ entry = $scope.entries[index];
+ }
+ } else if ($scope.entries.length > 0) {
+ entry = $scope.entries[0];
+ }
+ if (entry) {
+ $scope.entryClicked(entry);
+ }
+ };
+
+ var openPreviousEntry = function() {
+ var entry = null;
+ if ($scope.current) {
+ var index;
+ for ( var i = 0; i < $scope.entries.length; i++) {
+ if ($scope.current == $scope.entries[i]) {
+ index = i;
+ break;
+ }
+ }
+ index = index - 1;
+ if (index >= 0) {
+ entry = $scope.entries[index];
+ }
+ }
+ if (entry) {
+ $scope.entryClicked(entry);
+ }
+ };
+
+ Mousetrap.bind('space', openNextEntry);
+ Mousetrap.bind('j', openNextEntry);
+ Mousetrap.bind('k', openPreviousEntry);
+});
\ No newline at end of file