Skip to content

Commit ddff006

Browse files
Issue #4737 - adds to a keypress framework, and adds Enter/Escape handling to .prompt
1 parent afd0efe commit ddff006

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

js/angular/service/popup.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,6 +391,16 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
391391
//DEPRECATED: notify the promise with an object with a close method
392392
popup.responseDeferred.notify({ close: popup.responseDeferred.close });
393393

394+
// if any keypress handlers were requested, go ahead and assign them now
395+
// options.keyPressHandlers is the user-generated assoc: keycode => function()
396+
// popup.keyPressHandlers is a list of event-listener handles returned by addEventListener()
397+
// and is used to unbind these event listeners when the popup is closing ("then" block below)
398+
popup.element[0].keyPressHandlers = options.keyPressHandlers || {};
399+
popup.keylistener = popup.element[0].addEventListener('keypress', function (keyEvent) {
400+
var userfunc = this.keyPressHandlers[keyEvent.keyCode];
401+
if (userfunc) userfunc(popup);
402+
});
403+
394404
doShow();
395405

396406
return popup.responseDeferred.promise;
@@ -405,6 +415,8 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
405415
popupStack.splice(index, 1);
406416
}
407417

418+
popup.element[0].removeEventListener('keypress', popup.keylistener);
419+
408420
popup.remove();
409421

410422
if (popupStack.length > 0) {
@@ -470,11 +482,28 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
470482
scope.data.response = opts.defaultText ? opts.defaultText : '';
471483
scope.data.placeholder = opts.inputPlaceholder ? opts.inputPlaceholder : '';
472484
scope.data.maxlength = opts.maxLength ? parseInt(opts.maxLength) : '';
485+
473486
var text = '';
474487
if (opts.template && /<[a-z][\s\S]*>/i.test(opts.template) === false) {
475488
text = '<span>' + opts.template + '</span>';
476489
delete opts.template;
477490
}
491+
492+
var keyPressHandlers = {
493+
"13": function (popup) { // 13 = Enter = OK
494+
var button = popup.scope.buttons[1];
495+
var tapper = popup.scope.$buttonTapped;
496+
var fclick = new MouseEvent('click', { 'view':window, 'bubbles':true, 'cancelable':true });
497+
tapper(button,fclick);
498+
},
499+
"27": function (popup) { // 27 = Esc = Cancel
500+
var button = popup.scope.buttons[0];
501+
var tapper = popup.scope.$buttonTapped;
502+
var fclick = new MouseEvent('click', { 'view':window, 'bubbles':true, 'cancelable':true });
503+
tapper(button,fclick);
504+
}
505+
};
506+
478507
return showPopup(extend({
479508
template: text + '<input ng-model="data.response" '
480509
+ 'type="{{ data.fieldtype }}"'

0 commit comments

Comments
 (0)