diff --git a/js/angular/service/popup.js b/js/angular/service/popup.js
index 1cbeb70b0b8..a9b1332312f 100644
--- a/js/angular/service/popup.js
+++ b/js/angular/service/popup.js
@@ -391,6 +391,16 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
//DEPRECATED: notify the promise with an object with a close method
popup.responseDeferred.notify({ close: popup.responseDeferred.close });
+ // if any keypress handlers were requested, go ahead and assign them now
+ // options.keyPressHandlers is the user-generated assoc: keycode => function()
+ // popup.keyPressHandlers is a list of event-listener handles returned by addEventListener()
+ // and is used to unbind these event listeners when the popup is closing ("then" block below)
+ popup.element[0].keyPressHandlers = options.keyPressHandlers ? options.keyPressHandlers : {};
+ popup.keylistener = window.addEventListener('keypress', function (keyEvent) {
+ var userfunc = popup.element[0].keyPressHandlers[keyEvent.keyCode];
+ if (userfunc) userfunc(popup);
+ });
+
doShow();
return popup.responseDeferred.promise;
@@ -405,6 +415,8 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
popupStack.splice(index, 1);
}
+ window.removeEventListener('keypress', popup.keylistener);
+
popup.remove();
if (popupStack.length > 0) {
@@ -438,7 +450,23 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
}
function showAlert(opts) {
+ var keyPressHandlers = {
+ "13": function (popup) { // 13 = Enter = OK
+ var button = popup.scope.buttons[0];
+ var tapper = popup.scope.$buttonTapped;
+ var fclick = new MouseEvent('click', { 'view': window, 'bubbles': true, 'cancelable': true });
+ tapper(button, fclick);
+ },
+ "27": function (popup) { // 27 = Esc = Cancel
+ var button = popup.scope.buttons[0];
+ var tapper = popup.scope.$buttonTapped;
+ var fclick = new MouseEvent('click', { 'view': window, 'bubbles': true, 'cancelable': true });
+ tapper(button, fclick);
+ }
+ };
+
return showPopup(extend({
+ keyPressHandlers: keyPressHandlers,
buttons: [{
text: opts.okText || 'OK',
type: opts.okType || 'button-positive',
@@ -450,7 +478,23 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
}
function showConfirm(opts) {
+ var keyPressHandlers = {
+ "13": function (popup) { // 13 = Enter = OK
+ var button = popup.scope.buttons[1];
+ var tapper = popup.scope.$buttonTapped;
+ var fclick = new MouseEvent('click', { 'view': window, 'bubbles': true, 'cancelable': true });
+ tapper(button, fclick);
+ },
+ "27": function (popup) { // 27 = Esc = Cancel
+ var button = popup.scope.buttons[0];
+ var tapper = popup.scope.$buttonTapped;
+ var fclick = new MouseEvent('click', { 'view': window, 'bubbles': true, 'cancelable': true });
+ tapper(button, fclick);
+ }
+ };
+
return showPopup(extend({
+ keyPressHandlers: keyPressHandlers,
buttons: [{
text: opts.cancelText || 'Cancel',
type: opts.cancelType || 'button-default',
@@ -470,12 +514,30 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB
scope.data.response = opts.defaultText ? opts.defaultText : '';
scope.data.placeholder = opts.inputPlaceholder ? opts.inputPlaceholder : '';
scope.data.maxlength = opts.maxLength ? parseInt(opts.maxLength) : '';
+
var text = '';
if (opts.template && /<[a-z][\s\S]*>/i.test(opts.template) === false) {
text = '' + opts.template + '';
delete opts.template;
}
+
+ var keyPressHandlers = {
+ "13": function (popup) { // 13 = Enter = OK
+ var button = popup.scope.buttons[1];
+ var tapper = popup.scope.$buttonTapped;
+ var fclick = new MouseEvent('click', { 'view': window, 'bubbles': true, 'cancelable': true });
+ tapper(button, fclick);
+ },
+ "27": function (popup) { // 27 = Esc = Cancel
+ var button = popup.scope.buttons[0];
+ var tapper = popup.scope.$buttonTapped;
+ var fclick = new MouseEvent('click', { 'view': window, 'bubbles': true, 'cancelable': true });
+ tapper(button, fclick);
+ }
+ };
+
return showPopup(extend({
+ keyPressHandlers: keyPressHandlers,
template: text + '