|
@@ -3,21 +3,6 @@
|
|
|
// XXX There is no reason to define these shortcuts globally, they should be
|
|
|
// attached to a template (most of them will go in the `board` template).
|
|
|
|
|
|
-// Pressing `Escape` should close the last opened “element” and only the last
|
|
|
-// one -- curently we handle popups and the card detailed view of the sidebar.
|
|
|
-Mousetrap.bind('esc', function() {
|
|
|
- if (currentlyOpenedForm.get() !== null) {
|
|
|
- currentlyOpenedForm.get().close();
|
|
|
-
|
|
|
- } else if (Popup.isOpen()) {
|
|
|
- Popup.back();
|
|
|
-
|
|
|
- // XXX We should have a higher level API
|
|
|
- } else if (Session.get('currentCard')) {
|
|
|
- Utils.goBoardId(Session.get('currentBoard'));
|
|
|
- }
|
|
|
-});
|
|
|
-
|
|
|
Mousetrap.bind('w', function() {
|
|
|
Sidebar.toogle();
|
|
|
});
|
|
@@ -48,3 +33,46 @@ Mousetrap.bind(['down', 'up'], function(evt, key) {
|
|
|
Utils.goCardId(nextCardId);
|
|
|
}
|
|
|
});
|
|
|
+
|
|
|
+// Pressing `Escape` should close the last opened “element” and only the last
|
|
|
+// one. Components can register themself using a priority number (smaller is
|
|
|
+// closed first), a condition, and an action.This is used by Popup or
|
|
|
+// inlinedForm for instance. When we press escape we execute the action which
|
|
|
+// condition is valid with the highest priority.
|
|
|
+EscapeActions = {
|
|
|
+ _actions: [],
|
|
|
+
|
|
|
+ register: function(priority, condition, action) {
|
|
|
+ // XXX Rewrite this with ES6: .push({ priority, condition, action })
|
|
|
+ this._actions.push({
|
|
|
+ priority: priority,
|
|
|
+ condition: condition,
|
|
|
+ action: action
|
|
|
+ });
|
|
|
+ // XXX Rewrite this with ES6: => function
|
|
|
+ this._actions = _.sortBy(this._actions, function(a) { return a.priority; });
|
|
|
+ },
|
|
|
+
|
|
|
+ executeLowest: function() {
|
|
|
+ var topActiveAction = _.find(this._actions, function(a) {
|
|
|
+ return !! a.condition();
|
|
|
+ });
|
|
|
+ return topActiveAction && topActiveAction.action();
|
|
|
+ },
|
|
|
+
|
|
|
+ executeLowerThan: function(maxPriority) {
|
|
|
+ maxPriority = maxPriority || Infinity;
|
|
|
+ var currentAction;
|
|
|
+ for (var i = 0; i < this._actions.length; i++) {
|
|
|
+ currentAction = this._actions[i];
|
|
|
+ if (currentAction.priority > maxPriority)
|
|
|
+ return;
|
|
|
+ if (!! currentAction.condition())
|
|
|
+ currentAction.action();
|
|
|
+ }
|
|
|
+ }
|
|
|
+};
|
|
|
+
|
|
|
+Mousetrap.bind('esc', function() {
|
|
|
+ EscapeActions.executeLowest();
|
|
|
+});
|