From beffe51c938ca8c139fb9274b9288ee72e5db497 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 10 Apr 2017 15:56:11 -0300 Subject: [PATCH] add Enter keypress to ionic popups --- js/angular/service/popup.js | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/js/angular/service/popup.js b/js/angular/service/popup.js index e8603558e..a27f23a10 100644 --- a/js/angular/service/popup.js +++ b/js/angular/service/popup.js @@ -396,6 +396,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 || {}; + popup.keylistener = popup.element[0].addEventListener('keypress', function (keyEvent) { + var userfunc = this.keyPressHandlers[keyEvent.keyCode]; + if (userfunc) userfunc(popup); + }); + doShow(); return popup.responseDeferred.promise; @@ -410,6 +420,8 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB popupStack.splice(index, 1); } + popup.element[0].removeEventListener('keypress', popup.keylistener); + popup.remove(); if (popupStack.length > 0) { @@ -443,7 +455,17 @@ 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); + } + }; + return showPopup(extend({ + keyPressHandlers: keyPressHandlers, buttons: [{ text: opts.okText || 'OK', type: opts.okType || 'button-positive', @@ -455,7 +477,17 @@ 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); + } + }; + return showPopup(extend({ + keyPressHandlers: keyPressHandlers, buttons: [{ text: opts.cancelText || 'Cancel', type: opts.cancelType || 'button-default', @@ -480,7 +512,18 @@ function($ionicTemplateLoader, $ionicBackdrop, $q, $timeout, $rootScope, $ionicB 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); + } + }; + return showPopup(extend({ + keyPressHandlers: keyPressHandlers, template: text + '