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