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-

198 lines 14.1 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"; export class IonicKeyboardAssist { constructor() { /** * Stores modified pages element */ this.pages = []; /** * On keyboard did show actions * @param event: keyboard event */ this.onKeyboardDidShow = (/** * @param {?} event * @return {?} */ (event) => { /** @type {?} */ const modal = this.getActiveModalElement(); /** @type {?} */ let 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 {?} */ () => { this.pages.forEach((/** * @param {?} elem * @return {?} */ elem => { this.setPadding(elem); })); setTimeout((/** * @return {?} */ () => this.pages = []), 50); }); this.setOptions(); } /** * Start the keyboard wizard * @param {?=} options * @return {?} */ init(options) { if (options) { this.setOptions(options); } this.addEventListeners(); } /** * Set keyboard options * @param {?=} options * @return {?} */ setOptions(options) { this.options = new KeyboardOptions(options); } /** * Add Event Listeners * @private * @return {?} */ addEventListeners() { window.addEventListener('keyboardDidShow', this.onKeyboardDidShow); window.addEventListener('keyboardWillHide', this.onKeyboardWillHide); } /** * Remove Event Listeners * @private * @return {?} */ removeEventListeners() { window.removeEventListener('keyboardDidShow', this.onKeyboardDidShow); window.removeEventListener('keyboardWillHide', this.onKeyboardWillHide); } /** * Get current page element * @private * @return {?} */ getActivePageElement() { /** @type {?} */ const elem = document.getElementsByTagName('ion-router-outlet'); if (elem && elem.length > 0) { /** @type {?} */ const page = elem[elem.length - 1]; return page && page.lastElementChild ? page.lastElementChild : null; } return null; } /** * Get current modal element * @private * @return {?} */ getActiveModalElement() { /** @type {?} */ const elem = document.getElementsByTagName('ion-app'); if (elem && elem.length > 0) { /** @type {?} */ const page = elem[elem.length - 1]; return page && page.lastElementChild && page.lastElementChild.tagName === 'ION-MODAL' ? page.lastElementChild : null; } return null; } /** * Add padding on the element * @private * @param {?} elem * @param {?=} value * @return {?} */ setPadding(elem, value = 0) { if (elem) { elem.setAttribute('style', `padding-bottom: ${value}px !important`); } } /** * Scroll view to active element * @private * @return {?} */ scrollAssist() { if (document.activeElement && document.activeElement.tagName === 'INPUT') { setTimeout((/** * @return {?} */ () => document.activeElement.scrollIntoView({ block: 'center', behavior: 'smooth' })), 100); } } /** * Remove listeners on destroy * @return {?} */ ngOnDestroy() { this.removeEventListeners(); } } IonicKeyboardAssist.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ IonicKeyboardAssist.ctorParameters = () => []; /** @nocollapse */ IonicKeyboardAssist.ngInjectableDef = i0.defineInjectable({ factory: function IonicKeyboardAssist_Factory() { return new IonicKeyboardAssist(); }, token: IonicKeyboardAssist, providedIn: "root" }); 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9uaWMta2V5Ym9hcmQtYXNzaXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pb25pYy1rZXlib2FyZC1hc3Npc3QvIiwic291cmNlcyI6WyJsaWIvaW9uaWMta2V5Ym9hcmQtYXNzaXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxlQUFlLEVBQXdCLE1BQU0sMEJBQTBCLENBQUM7O0FBS2pGLE1BQU0sT0FBTyxtQkFBbUI7SUFZOUI7Ozs7UUFQUSxVQUFLLEdBQUcsRUFBRSxDQUFDOzs7OztRQWtEWCxzQkFBaUI7Ozs7UUFBRyxDQUFDLEtBQUssRUFBRSxFQUFFOztrQkFDOUIsS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRTs7Z0JBQ3RDLGFBQWE7WUFFakIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsYUFBYSxHQUFHLEtBQUssQ0FBQzthQUN2QjtpQkFBTTtnQkFDTCxhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7YUFDN0M7WUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUUvQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO2dCQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDdEQ7WUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO2dCQUM3QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7YUFDckI7UUFDSCxDQUFDLEVBQUM7Ozs7UUFLTSx1QkFBa0I7OztRQUFHLEdBQUcsRUFBRTtZQUNoQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87Ozs7WUFBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMs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QzlCLENBQUM7OztZQXhJRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7Ozs7Ozs7O0lBTUMsb0NBQW1COzs7Ozs7SUFLbkIsc0NBQWlDOzs7Ozs7O0lBNkNqQyxnREFtQkU7Ozs7OztJQUtGLGlEQUtFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLZXlib2FyZE9wdGlvbnMsIEtleWJvYXJkT3B0aW9uc01vZGVsIH0gZnJvbSAnLi9rZXlib2FyZC1vcHRpb25zLm1vZGVsJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSW9uaWNLZXlib2FyZEFzc2lzdCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG5cbiAgLyoqXG4gICAqIFN0b3JlcyBtb2RpZmllZCBwYWdlcyBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIHBhZ2VzID0gW107XG5cbiAgLyoqXG4gICAqIEtleWJvYXJkIG9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgb3B0aW9uczogS2V5Ym9hcmRPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0T3B0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IHRoZSBrZXlib2FyZCB3aXphcmRcbiAgICogQHBhcmFtIG9wdGlvbnM6IEtleWJvYXJkT3B0aW9uc01vZGVsXG4gICAqL1xuICBpbml0KG9wdGlvbnM/OiBLZXlib2FyZE9wdGlvbnNNb2RlbCkge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB0aGlzLnNldE9wdGlvbnMob3B0aW9ucyk7XG4gICAgfVxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQga2V5Ym9hcmQgb3B0aW9uc1xuICAgKiBAcGFyYW0gb3B0aW9uczogS2V5Ym9hcmRPcHRpb25zTW9kZWxcbiAgICovXG4gIHNldE9wdGlvbnMob3B0aW9ucz86IEtleWJvYXJkT3B0aW9uc01vZGVsKSB7XG4gICAgdGhpcy5vcHRpb25zID0gbmV3IEtleWJvYXJkT3B0aW9ucyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgRXZlbnQgTGlzdGVuZXJzXG4gICAqL1xuICBwcml2YXRlIGFkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlib2FyZERpZFNob3cnLCB0aGlzLm9uS2V5Ym9hcmREaWRTaG93KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5Ym9hcmRXaWxsSGlkZScsIHRoaXMub25LZXlib2FyZFdpbGxIaWRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgRXZlbnQgTGlzdGVuZXJzXG4gICAqL1xuICBwcml2YXRlIHJlbW92ZUV2ZW50TGlzdGVuZXJzKCkge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlib2FyZERpZFNob3cnLCB0aGlzLm9uS2V5Ym9hcmREaWRTaG93KTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5Ym9hcmRXaWxsSGlkZScsIHRoaXMub25LZXlib2FyZFdpbGxIaWRlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBrZXlib2FyZCBkaWQgc2hvdyBhY3Rpb25zXG4gICAqIEBwYXJhbSBldmVudDoga2V5Ym9hcmQgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgb25LZXlib2FyZERpZFNob3cgPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCBtb2RhbCA9IHRoaXMuZ2V0QWN0aXZlTW9kYWxFbGVtZW50KCk7XG4gICAgbGV0IGFjdGl2ZUVsZW1lbnQ7XG5cbiAgICBpZiAobW9kYWwpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQgPSBtb2RhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgYWN0aXZlRWxlbWVudCA9IHRoaXMuZ2V0QWN0aXZlUGFnZUVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnBhZ2VzLnB1c2goYWN0aXZlRWxlbWVudCk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLnNjcm9sbFBhZGRpbmcpIHtcbiAgICAgIHRoaXMuc2V0UGFkZGluZyhhY3RpdmVFbGVtZW50LCBldmVudC5rZXlib2FyZEhlaWdodCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5zY3JvbGxBc3Npc3QpIHtcbiAgICAgIHRoaXMuc2Nyb2xsQXNzaXN0KCk7XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiBPbiBrZXlib2FyZCB3aWxsIGhpZGUgYWN0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBvbktleWJvYXJkV2lsbEhpZGUgPSAoKSA9PiB7XG4gICAgdGhpcy5wYWdlcy5mb3JFYWNoKGVsZW0gPT4ge1xuICAgICAgdGhpcy5zZXRQYWRkaW5nKGVsZW0pO1xuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5wYWdlcyA9IFtdLCA1MCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEdldCBjdXJyZW50IHBhZ2UgZWxlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBY3RpdmVQYWdlRWxlbWVudCgpIHtcbiAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2lvbi1yb3V0ZXItb3V0bGV0Jyk7XG4gICAgaWYgKGVsZW0gJiYgZWxlbS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwYWdlID0gZWxlbVtlbGVtLmxlbmd0aCAtIDFdO1xuICAgICAgcmV0dXJuIHBhZ2UgJiYgcGFnZS5sYXN0RWxlbWVudENoaWxkID8gcGFnZS5sYXN0RWxlbWVudENoaWxkIDogbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGN1cnJlbnQgbW9kYWwgZWxlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBY3RpdmVNb2RhbEVsZW1lbnQoKSB7XG4gICAgY29uc3QgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdpb24tYXBwJyk7XG4gICAgaWYgKGVsZW0gJiYgZWxlbS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBwYWdlID0gZWxlbVtlbGVtLmxlbmd0aCAtIDFdO1xuICAgICAgcmV0dXJuIHBhZ2UgJiYgcGFnZS5sYXN0RWxlbWVudENoaWxkICYmIHBhZ2UubGFzdEVsZW1lbnRDaGlsZC50YWdOYW1lID09PSAnSU9OLU1PREFMJyA/IHBhZ2UubGFzdEVsZW1lbnRDaGlsZCA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBwYWRkaW5nIG9uIHRoZSBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIHNldFBhZGRpbmcoZWxlbSwgdmFsdWUgPSAwKSB7XG4gICAgaWYgKGVsZW0pIHtcbiAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdzdHlsZScsIGBwYWRkaW5nLWJvdHRvbTogJHt2YWx1ZX1weCAhaW1wb3J0YW50YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNjcm9sbCB2aWV3IHRvIGFjdGl2ZSBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIHNjcm9sbEFzc2lzdCgpIHtcbiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7YmxvY2s6ICdjZW50ZXInLCBiZWhhdmlvcjogJ3Ntb290aCd9KSwgMTAwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGxpc3RlbmVycyBvbiBkZXN0cm95XG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxufVxuIl19