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-

203 lines (197 loc) 6.09 kB
import { Injectable, defineInjectable } from '@angular/core'; /** * @fileoverview added by tsickle * Generated from: lib/keyboard-options.model.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * Keyboard options class */ class KeyboardOptions { /** * @param {?=} options */ constructor(options) { this.scrollPadding = options && options.scrollPadding ? options.scrollPadding : true; this.scrollAssist = options && options.scrollAssist ? options.scrollAssist : true; } } /** * @fileoverview added by tsickle * Generated from: lib/ionic-keyboard-assist.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ 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 = defineInjectable({ factory: function IonicKeyboardAssist_Factory() { return new IonicKeyboardAssist(); }, token: IonicKeyboardAssist, providedIn: "root" }); /** * @fileoverview added by tsickle * Generated from: public-api.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * Generated from: ionic-keyboard-assist.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export { IonicKeyboardAssist }; //# sourceMappingURL=ionic-keyboard-assist.js.map