/// /// /* tslint:disable:no-string-literal */ import { App } from "../app"; import * as timeService from "../timeservice"; import { uiManager } from "./uimanager"; declare var app: App; export class KeyboardActivationService { public static keyboardShowModifier = "keyboard-shown"; private lastPage: string = null; private lastPageBlock: string = null; private lastPopup: string = null; public setup() { if (window["Keyboard"]) { let supported = true; if (window["device"]) { if (device.platform === "iOS") { const iOS70 = device.version.indexOf("7.0") === 0; const iOS6X = device.version.indexOf("6") === 0; if (!iOS70 && !iOS6X) { // apply only to the iOS 6.x and 7.0 supported = false; } supported = false; } } if (!supported) { console.log("Native keyboard adjust is available. Don't use our method for adjust page position"); } else { console.log("Native keyboard adjust is not available. Do our best to provide better UI."); } Keyboard.onshow = () => { if (supported) { this.applyStyles(); } }; Keyboard.onhiding = () => { document.body.scrollLeft = 0; }; Keyboard.onhide = () => { timeService.setTimeout(() => { this.forceHideKeyboard(); }, 1); }; } else { const enableKeyboardEmulationOnDesktop = false; if (enableKeyboardEmulationOnDesktop) { const selector = "input[type='text'], input[type='password'], input[type='date'], input[type='number']"; $("body").on("focus", selector, (event) => { this.applyStyles(); }); $("body").on("blur", selector, (event) => { this.removeStyles(); }); } } } public forceHideKeyboard() { const activeElement = document.activeElement as HTMLElement; if (activeElement !== null) { activeElement.blur(); } this.removeStyles(); } private applyStyles() { const showModifierClassName = KeyboardActivationService.keyboardShowModifier; if (app.currentPopup === null) { this.log("Apply kbd styles to current page"); $("." + uiManager.currentPage + ".sub-page").addClass(showModifierClassName); $("." + uiManager.currentPageBlock + ".page-block").addClass(showModifierClassName); this.lastPage = uiManager.currentPage; this.lastPageBlock = uiManager.currentPageBlock; } else { this.log("Apply kbd styles to popup " + app.currentPopup); $("." + app.currentPopup + ".popup").addClass(showModifierClassName); this.lastPopup = app.currentPopup; } } private removeStyles() { if (this.lastPage !== null) { $("." + this.lastPage + ".sub-page").removeClass(KeyboardActivationService.keyboardShowModifier); this.lastPage = null; } if (this.lastPageBlock !== null) { $("." + this.lastPageBlock + ".page-block").removeClass(KeyboardActivationService.keyboardShowModifier); } if (this.lastPopup !== null) { $("." + this.lastPopup + ".popup").removeClass(KeyboardActivationService.keyboardShowModifier); } } private log(format: string) { // tslint:disable-next-line:no-console console.log(format); } }