UNPKG

ionic-keyboard-assist

Version:

![](https://img.shields.io/badge/me-%40gesiel.com-brightgreen) ![](https://img.shields.io/npm/v/ionic-keyboard-assist?label=npm%40latest) ![](https://img.shields.io/bundlephobia/minzip/ionic-keyboard-assist/latest) ![](https://img.shields.io/npm/dm/ionic-

277 lines 16.5 kB
/** * @fileoverview added by tsickle * Generated from: lib/ionic-keyboard-assist.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable } from '@angular/core'; import { KeyboardOptions } from './keyboard-options.model'; import * as i0 from "@angular/core"; var IonicKeyboardAssist = /** @class */ (function () { function IonicKeyboardAssist() { var _this = this; /** * Stores modified pages element */ this.pages = []; /** * On keyboard did show actions * @param event: keyboard event */ this.onKeyboardDidShow = (/** * @param {?} event * @return {?} */ function (event) { /** @type {?} */ var modal = _this.getActiveModalElement(); /** @type {?} */ var activeElement; if (modal) { activeElement = modal; } else { activeElement = _this.getActivePageElement(); } _this.pages.push(activeElement); if (_this.options.scrollPadding) { _this.setPadding(activeElement, event.keyboardHeight); } if (_this.options.scrollAssist) { _this.scrollAssist(); } }); /** * On keyboard will hide actions */ this.onKeyboardWillHide = (/** * @return {?} */ function () { _this.pages.forEach((/** * @param {?} elem * @return {?} */ function (elem) { _this.setPadding(elem); })); setTimeout((/** * @return {?} */ function () { return _this.pages = []; }), 50); }); this.setOptions(); } /** * Start the keyboard wizard * @param options: KeyboardOptionsModel */ /** * Start the keyboard wizard * @param {?=} options * @return {?} */ IonicKeyboardAssist.prototype.init = /** * Start the keyboard wizard * @param {?=} options * @return {?} */ function (options) { if (options) { this.setOptions(options); } this.addEventListeners(); }; /** * Set keyboard options * @param options: KeyboardOptionsModel */ /** * Set keyboard options * @param {?=} options * @return {?} */ IonicKeyboardAssist.prototype.setOptions = /** * Set keyboard options * @param {?=} options * @return {?} */ function (options) { this.options = new KeyboardOptions(options); }; /** * Add Event Listeners */ /** * Add Event Listeners * @private * @return {?} */ IonicKeyboardAssist.prototype.addEventListeners = /** * Add Event Listeners * @private * @return {?} */ function () { window.addEventListener('keyboardDidShow', this.onKeyboardDidShow); window.addEventListener('keyboardWillHide', this.onKeyboardWillHide); }; /** * Remove Event Listeners */ /** * Remove Event Listeners * @private * @return {?} */ IonicKeyboardAssist.prototype.removeEventListeners = /** * Remove Event Listeners * @private * @return {?} */ function () { window.removeEventListener('keyboardDidShow', this.onKeyboardDidShow); window.removeEventListener('keyboardWillHide', this.onKeyboardWillHide); }; /** * Get current page element */ /** * Get current page element * @private * @return {?} */ IonicKeyboardAssist.prototype.getActivePageElement = /** * Get current page element * @private * @return {?} */ function () { /** @type {?} */ var elem = document.getElementsByTagName('ion-router-outlet'); if (elem && elem.length > 0) { /** @type {?} */ var page = elem[elem.length - 1]; return page && page.lastElementChild ? page.lastElementChild : null; } return null; }; /** * Get current modal element */ /** * Get current modal element * @private * @return {?} */ IonicKeyboardAssist.prototype.getActiveModalElement = /** * Get current modal element * @private * @return {?} */ function () { /** @type {?} */ var elem = document.getElementsByTagName('ion-app'); if (elem && elem.length > 0) { /** @type {?} */ var page = elem[elem.length - 1]; return page && page.lastElementChild && page.lastElementChild.tagName === 'ION-MODAL' ? page.lastElementChild : null; } return null; }; /** * Add padding on the element */ /** * Add padding on the element * @private * @param {?} elem * @param {?=} value * @return {?} */ IonicKeyboardAssist.prototype.setPadding = /** * Add padding on the element * @private * @param {?} elem * @param {?=} value * @return {?} */ function (elem, value) { if (value === void 0) { value = 0; } if (elem) { elem.setAttribute('style', "padding-bottom: " + value + "px !important"); } }; /** * Scroll view to active element */ /** * Scroll view to active element * @private * @return {?} */ IonicKeyboardAssist.prototype.scrollAssist = /** * Scroll view to active element * @private * @return {?} */ function () { if (document.activeElement && document.activeElement.tagName === 'INPUT') { setTimeout((/** * @return {?} */ function () { return document.activeElement.scrollIntoView({ block: 'center', behavior: 'smooth' }); }), 100); } }; /** * Remove listeners on destroy */ /** * Remove listeners on destroy * @return {?} */ IonicKeyboardAssist.prototype.ngOnDestroy = /** * Remove listeners on destroy * @return {?} */ function () { this.removeEventListeners(); }; IonicKeyboardAssist.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ IonicKeyboardAssist.ctorParameters = function () { return []; }; /** @nocollapse */ IonicKeyboardAssist.ngInjectableDef = i0.defineInjectable({ factory: function IonicKeyboardAssist_Factory() { return new IonicKeyboardAssist(); }, token: IonicKeyboardAssist, providedIn: "root" }); return IonicKeyboardAssist; }()); export { IonicKeyboardAssist }; if (false) { /** * Stores modified pages element * @type {?} * @private */ IonicKeyboardAssist.prototype.pages; /** * Keyboard options * @type {?} * @private */ IonicKeyboardAssist.prototype.options; /** * On keyboard did show actions * \@param event: keyboard event * @type {?} * @private */ IonicKeyboardAssist.prototype.onKeyboardDidShow; /** * On keyboard will hide actions * @type {?} * @private */ IonicKeyboardAssist.prototype.onKeyboardWillHide; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9uaWMta2V5Ym9hcmQtYXNzaXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pb25pYy1rZXlib2FyZC1hc3Npc3QvIiwic291cmNlcyI6WyJsaWIvaW9uaWMta2V5Ym9hcmQtYXNzaXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sMEJBQTBCLENBQUM7O0FBRWpGO0lBZUU7UUFBQSxpQkFFQzs7OztRQVRPLFVBQUssR0FBRyxFQUFFLENBQUM7Ozs7O1FBa0RYLHNCQUFpQjs7OztRQUFHLFVBQUMsS0FBSzs7Z0JBQzFCLEtBQUssR0FBRyxLQUFJLENBQUMscUJBQXFCLEVBQUU7O2dCQUN0QyxhQUFhO1lBRWpCLElBQUksS0FBSyxFQUFFO2dCQUNULGFBQWEsR0FBRyxLQUFLLENBQUM7YUFDdkI7aUJBQU07Z0JBQ0wsYUFBYSxHQUFHLEtBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQzdDO1lBRUQsS0FBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFL0IsSUFBSSxLQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtnQkFDOUIsS0FBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3REO1lBRUQsSUFBSSxLQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtnQkFDN0IsS0FBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxFQUFDOzs7O1FBS00sdUJBQWtCOzs7UUFBRztZQUMzQixLQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87Ozs7WUFBQyxVQUFBLElBQUk7Z0JBQ3JCLEtBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsQ0FBQyxFQUFDLENBQUM7WUFDSCxV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LENBQUMsY0FBYyxDQUFDLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLENBQUMsRUFBNUUsQ0FBNEUsR0FBRSxHQUFHLENBQUMsQ0FBQztTQUNyRztJQUNILENBQUM7SUFFRDs7T0FFRzs7Ozs7SUFDSCx5Q0FBVzs7OztJQUFYO1FBQ0UsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQzs7Z0JBeElGLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7OzhCQUxEO0NBNklDLEFBMUlELElBMElDO1NBdklZLG1CQUFtQjs7Ozs7OztJQUs5QixvQ0FBbUI7Ozs7OztJQUtuQixzQ0FBaUM7Ozs7Ozs7SUE2Q2pDLGdEQW1CRTs7Ozs7O0lBS0YsaURBS0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEtleWJvYXJkT3B0aW9ucywgS2V5Ym9hcmRPcHRpb25zTW9kZWwgfSBmcm9tICcuL2tleWJvYXJkLW9wdGlvbnMubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBJb25pY0tleWJvYXJkQXNzaXN0IGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICAvKipcbiAgICogU3RvcmVzIG1vZGlmaWVkIHBhZ2VzIGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgcGFnZXMgPSBbXTtcblxuICAvKipcbiAgICogS2V5Ym9hcmQgb3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBvcHRpb25zOiBLZXlib2FyZE9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRPcHRpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnQgdGhlIGtleWJvYXJkIHdpemFyZFxuICAgKiBAcGFyYW0gb3B0aW9uczogS2V5Ym9hcmRPcHRpb25zTW9kZWxcbiAgICovXG4gIGluaXQob3B0aW9ucz86IEtleWJvYXJkT3B0aW9uc01vZGVsKSB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBrZXlib2FyZCBvcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zOiBLZXlib2FyZE9wdGlvbnNNb2RlbFxuICAgKi9cbiAgc2V0T3B0aW9ucyhvcHRpb25zPzogS2V5Ym9hcmRPcHRpb25zTW9kZWwpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBuZXcgS2V5Ym9hcmRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBFdmVudCBMaXN0ZW5lcnNcbiAgICovXG4gIHByaXZhdGUgYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWJvYXJkRGlkU2hvdycsIHRoaXMub25LZXlib2FyZERpZFNob3cpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlib2FyZFdpbGxIaWRlJywgdGhpcy5vbktleWJvYXJkV2lsbEhpZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBFdmVudCBMaXN0ZW5lcnNcbiAgICovXG4gIHByaXZhdGUgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWJvYXJkRGlkU2hvdycsIHRoaXMub25LZXlib2FyZERpZFNob3cpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlib2FyZFdpbGxIaWRlJywgdGhpcy5vbktleWJvYXJkV2lsbEhpZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIGtleWJvYXJkIGRpZCBzaG93IGFjdGlvbnNcbiAgICogQHBhcmFtIGV2ZW50OiBrZXlib2FyZCBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSBvbktleWJvYXJkRGlkU2hvdyA9IChldmVudCkgPT4ge1xuICAgIGNvbnN0IG1vZGFsID0gdGhpcy5nZXRBY3RpdmVNb2RhbEVsZW1lbnQoKTtcbiAgICBsZXQgYWN0aXZlRWxlbWVudDtcblxuICAgIGlmIChtb2RhbCkge1xuICAgICAgYWN0aXZlRWxlbWVudCA9IG1vZGFsO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY3RpdmVFbGVtZW50ID0gdGhpcy5nZXRBY3RpdmVQYWdlRWxlbWVudCgpO1xuICAgIH1cblxuICAgIHRoaXMucGFnZXMucHVzaChhY3RpdmVFbGVtZW50KTtcblxuICAgIGlmICh0aGlzLm9wdGlvbnMuc2Nyb2xsUGFkZGluZykge1xuICAgICAgdGhpcy5zZXRQYWRkaW5nKGFjdGl2ZUVsZW1lbnQsIGV2ZW50LmtleWJvYXJkSGVpZ2h0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNjcm9sbEFzc2lzdCkge1xuICAgICAgdGhpcy5zY3JvbGxBc3Npc3QoKTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIE9uIGtleWJvYXJkIHdpbGwgaGlkZSBhY3Rpb25zXG4gICAqL1xuICBwcml2YXRlIG9uS2V5Ym9hcmRXaWxsSGlkZSA9ICgpID0+IHtcbiAgICB0aGlzLnBhZ2VzLmZvckVhY2goZWxlbSA9PiB7XG4gICAgICB0aGlzLnNldFBhZGRpbmcoZWxlbSk7XG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnBhZ2VzID0gW10sIDUwKTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgcGFnZSBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIGdldEFjdGl2ZVBhZ2VFbGVtZW50KCkge1xuICAgIGNvbnN0IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW9uLXJvdXRlci1vdXRsZXQnKTtcbiAgICBpZiAoZWxlbSAmJiBlbGVtLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBlbGVtW2VsZW0ubGVuZ3RoIC0gMV07XG4gICAgICByZXR1cm4gcGFnZSAmJiBwYWdlLmxhc3RFbGVtZW50Q2hpbGQgPyBwYWdlLmxhc3RFbGVtZW50Q2hpbGQgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCBtb2RhbCBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIGdldEFjdGl2ZU1vZGFsRWxlbWVudCgpIHtcbiAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lvbi1hcHAnKTtcbiAgICBpZiAoZWxlbSAmJiBlbGVtLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBlbGVtW2VsZW0ubGVuZ3RoIC0gMV07XG4gICAgICByZXR1cm4gcGFnZSAmJiBwYWdlLmxhc3RFbGVtZW50Q2hpbGQgJiYgcGFnZS5sYXN0RWxlbWVudENoaWxkLnRhZ05hbWUgPT09ICdJT04tTU9EQUwnID8gcGFnZS5sYXN0RWxlbWVudENoaWxkIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHBhZGRpbmcgb24gdGhlIGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgc2V0UGFkZGluZyhlbGVtLCB2YWx1ZSA9IDApIHtcbiAgICBpZiAoZWxlbSkge1xuICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYHBhZGRpbmctYm90dG9tOiAke3ZhbHVlfXB4ICFpbXBvcnRhbnRgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2Nyb2xsIHZpZXcgdG8gYWN0aXZlIGVsZW1lbnRcbiAgICovXG4gIHByaXZhdGUgc2Nyb2xsQXNzaXN0KCkge1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQudGFnTmFtZSA9PT0gJ0lOUFVUJykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiBkb2N1bWVudC5hY3RpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHtibG9jazogJ2NlbnRlcicsIGJlaGF2aW9yOiAnc21vb3RoJ30pLCAxMDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgbGlzdGVuZXJzIG9uIGRlc3Ryb3lcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG59XG4iXX0=