|
@@ -9,7 +9,8 @@ EscapeActions = {
|
|
// Executed in order
|
|
// Executed in order
|
|
hierarchy: [
|
|
hierarchy: [
|
|
'textcomplete',
|
|
'textcomplete',
|
|
- 'popup',
|
|
|
|
|
|
+ 'popup-back',
|
|
|
|
+ 'popup-close',
|
|
'inlinedForm',
|
|
'inlinedForm',
|
|
'detailsPane',
|
|
'detailsPane',
|
|
'multiselection',
|
|
'multiselection',
|
|
@@ -30,7 +31,8 @@ EscapeActions = {
|
|
priority: priority,
|
|
priority: priority,
|
|
condition: condition,
|
|
condition: condition,
|
|
action: action,
|
|
action: action,
|
|
- noClickEscapeOn: options.noClickEscapeOn
|
|
|
|
|
|
+ noClickEscapeOn: options.noClickEscapeOn,
|
|
|
|
+ enabledOnClick: !! options.enabledOnClick
|
|
});
|
|
});
|
|
// XXX Rewrite this with ES6: => function
|
|
// XXX Rewrite this with ES6: => function
|
|
this._actions = _.sortBy(this._actions, function(a) { return a.priority; });
|
|
this._actions = _.sortBy(this._actions, function(a) { return a.priority; });
|
|
@@ -55,11 +57,12 @@ EscapeActions = {
|
|
});
|
|
});
|
|
},
|
|
},
|
|
|
|
|
|
- clickExecute: function(evt, maxLabel) {
|
|
|
|
|
|
+ clickExecute: function(target, maxLabel) {
|
|
return this._execute({
|
|
return this._execute({
|
|
maxLabel: maxLabel,
|
|
maxLabel: maxLabel,
|
|
multipleActions: false,
|
|
multipleActions: false,
|
|
- evt: evt
|
|
|
|
|
|
+ isClick: true,
|
|
|
|
+ clickTarget: target
|
|
});
|
|
});
|
|
},
|
|
},
|
|
|
|
|
|
@@ -72,8 +75,9 @@ EscapeActions = {
|
|
|
|
|
|
_execute: function(options) {
|
|
_execute: function(options) {
|
|
var maxLabel = options.maxLabel;
|
|
var maxLabel = options.maxLabel;
|
|
- var evt = options.evt || {};
|
|
|
|
var multipleActions = options.multipleActions;
|
|
var multipleActions = options.multipleActions;
|
|
|
|
+ var isClick = !! options.isClick;
|
|
|
|
+ var clickTarget = options.clickTarget;
|
|
|
|
|
|
var maxPriority, currentAction;
|
|
var maxPriority, currentAction;
|
|
var executedAtLeastOne = false;
|
|
var executedAtLeastOne = false;
|
|
@@ -87,11 +91,12 @@ EscapeActions = {
|
|
if (currentAction.priority > maxPriority)
|
|
if (currentAction.priority > maxPriority)
|
|
return executedAtLeastOne;
|
|
return executedAtLeastOne;
|
|
|
|
|
|
- if (evt.type === 'click' && this._stopClick(currentAction, evt.target))
|
|
|
|
|
|
+ if (isClick && this._stopClick(currentAction, clickTarget))
|
|
return executedAtLeastOne;
|
|
return executedAtLeastOne;
|
|
|
|
|
|
- if (currentAction.condition()) {
|
|
|
|
- currentAction.action(evt);
|
|
|
|
|
|
+ var isEnabled = currentAction.enabledOnClick || ! isClick;
|
|
|
|
+ if (isEnabled && currentAction.condition()) {
|
|
|
|
+ currentAction.action();
|
|
executedAtLeastOne = true;
|
|
executedAtLeastOne = true;
|
|
if (! multipleActions)
|
|
if (! multipleActions)
|
|
return executedAtLeastOne;
|
|
return executedAtLeastOne;
|
|
@@ -153,6 +158,6 @@ Mousetrap.bindGlobal('esc', function() {
|
|
$(document).on('click', function(evt) {
|
|
$(document).on('click', function(evt) {
|
|
if (evt.which === 1 &&
|
|
if (evt.which === 1 &&
|
|
$(evt.target).closest('a,button,.is-editable').length === 0) {
|
|
$(evt.target).closest('a,button,.is-editable').length === 0) {
|
|
- EscapeActions.clickExecute(evt, 'multiselection');
|
|
|
|
|
|
+ EscapeActions.clickExecute(evt.target, 'multiselection');
|
|
}
|
|
}
|
|
});
|
|
});
|