@@ -391,6 +391,16 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
391
391
//DEPRECATED: notify the promise with an object with a close method
392
392
popup . responseDeferred . notify ( { close : popup . responseDeferred . close } ) ;
393
393
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
+
394
404
doShow ( ) ;
395
405
396
406
return popup . responseDeferred . promise ;
@@ -405,6 +415,8 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
405
415
popupStack . splice ( index , 1 ) ;
406
416
}
407
417
418
+ popup . element [ 0 ] . removeEventListener ( 'keypress' , popup . keylistener ) ;
419
+
408
420
popup . remove ( ) ;
409
421
410
422
if ( popupStack . length > 0 ) {
@@ -470,11 +482,28 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
470
482
scope . data . response = opts . defaultText ? opts . defaultText : '' ;
471
483
scope . data . placeholder = opts . inputPlaceholder ? opts . inputPlaceholder : '' ;
472
484
scope . data . maxlength = opts . maxLength ? parseInt ( opts . maxLength ) : '' ;
485
+
473
486
var text = '' ;
474
487
if ( opts . template && / < [ a - z ] [ \s \S ] * > / i. test ( opts . template ) === false ) {
475
488
text = '<span>' + opts . template + '</span>' ;
476
489
delete opts . template ;
477
490
}
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
+
478
507
return showPopup ( extend ( {
479
508
template : text + '<input ng-model="data.response" '
480
509
+ 'type="{{ data.fieldtype }}"'
0 commit comments