keyboard shortcuts

This commit is contained in:
Athou
2013-03-28 23:18:19 +01:00
parent 5383332182
commit 24e5f718cd
4 changed files with 84 additions and 5 deletions

View File

@@ -249,6 +249,11 @@
<artifactId>spin-js</artifactId>
<version>1.2.7</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>mousetrap</artifactId>
<version>1.3</version>
</dependency>
</dependencies>
<profiles>

View File

@@ -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);

View File

@@ -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));
}
}

View File

@@ -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);
});