ionic-keyboard-assist
Version:
    {
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=