UNPKG

ionic-angular

Version:

A powerful framework for building mobile and progressive web apps with JavaScript and Angular 2

356 lines 13 kB
(function (factory) { if (typeof module === 'object' && typeof module.exports === 'object') { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === 'function' && define.amd) { define(["require", "exports", '@angular/core', '@angular/platform-browser', '../../config/config', '../../navigation/nav-util', '../../platform/platform', '../menu/menu-controller'], factory); } })(function (require, exports) { "use strict"; var core_1 = require('@angular/core'); var platform_browser_1 = require('@angular/platform-browser'); var config_1 = require('../../config/config'); var nav_util_1 = require('../../navigation/nav-util'); var platform_1 = require('../../platform/platform'); var menu_controller_1 = require('../menu/menu-controller'); /** * \@name App * \@description * App is a utility class used in Ionic to get information about various aspects of an app */ var App = (function () { /** * @param {?} _config * @param {?} _plt * @param {?=} _menuCtrl */ function App(_config, _plt, _menuCtrl) { this._config = _config; this._plt = _plt; this._menuCtrl = _menuCtrl; this._disTime = 0; this._scrollTime = 0; this._title = ''; this._titleSrv = new platform_browser_1.Title(); this._rootNav = null; /** * Observable that emits whenever a view loads in the app. * @returns {Observable} Returns an observable */ this.viewDidLoad = new core_1.EventEmitter(); /** * Observable that emits before any view is entered in the app. * @returns {Observable} Returns an observable */ this.viewWillEnter = new core_1.EventEmitter(); /** * Observable that emits after any view is entered in the app. * @returns {Observable} Returns an observable */ this.viewDidEnter = new core_1.EventEmitter(); /** * Observable that emits before any view is exited in the app. * @returns {Observable} Returns an observable */ this.viewWillLeave = new core_1.EventEmitter(); /** * Observable that emits after any view is exited in the app. * @returns {Observable} Returns an observable */ this.viewDidLeave = new core_1.EventEmitter(); /** * Observable that emits before any view unloads in the app. * @returns {Observable} Returns an observable */ this.viewWillUnload = new core_1.EventEmitter(); // listen for hardware back button events // register this back button action with a default priority _plt.registerBackButtonAction(this.goBack.bind(this)); this._disableScrollAssist = _config.getBoolean('disableScrollAssist', false); (void 0) /* runInDev */; } /** * Sets the document title. * @param {?} val * @return {?} */ App.prototype.setTitle = function (val) { if (val !== this._title) { this._title = val; this._titleSrv.setTitle(val); } }; /** * @param {?} className * @param {?} isAdd * @return {?} */ App.prototype.setElementClass = function (className, isAdd) { this._appRoot.setElementClass(className, isAdd); }; /** * Sets if the app is currently enabled or not, meaning if it's * available to accept new user commands. For example, this is set to `false` * while views transition, a modal slides up, an action-sheet * slides up, etc. After the transition completes it is set back to `true`. * is used to set the maximum number of milliseconds that app will wait until * it will automatically enable the app again. It's basically a fallback incase * something goes wrong during a transition and the app wasn't re-enabled correctly. * @param {?} isEnabled * @param {?=} duration * @param {?=} minDuration * @return {?} */ App.prototype.setEnabled = function (isEnabled, duration, minDuration) { if (duration === void 0) { duration = 700; } if (minDuration === void 0) { minDuration = 0; } this._disTime = (isEnabled ? 0 : Date.now() + duration); if (this._clickBlock) { if (isEnabled) { // disable the click block if it's enabled, or the duration is tiny this._clickBlock.activate(false, CLICK_BLOCK_BUFFER_IN_MILLIS, minDuration); } else { // show the click block for duration + some number this._clickBlock.activate(true, duration + CLICK_BLOCK_BUFFER_IN_MILLIS, minDuration); } } }; /** * Toggles whether an application can be scrolled * scrolling is enabled. When set to `true`, scrolling is disabled. * @param {?} disableScroll * @return {?} */ App.prototype._setDisableScroll = function (disableScroll) { if (this._disableScrollAssist) { this._appRoot._disableScroll(disableScroll); } }; /** * Boolean if the app is actively enabled or not. * @return {?} */ App.prototype.isEnabled = function () { var /** @type {?} */ disTime = this._disTime; if (disTime === 0) { return true; } return (disTime < Date.now()); }; /** * @return {?} */ App.prototype.setScrolling = function () { this._scrollTime = Date.now() + ACTIVE_SCROLLING_TIME; }; /** * Boolean if the app is actively scrolling or not. * @return {?} */ App.prototype.isScrolling = function () { var /** @type {?} */ scrollTime = this._scrollTime; if (scrollTime === 0) { return false; } if (scrollTime < Date.now()) { this._scrollTime = 0; return false; } return true; }; /** * @return {?} */ App.prototype.getActiveNav = function () { var /** @type {?} */ portal = this._appRoot._getPortal(MODAL); if (portal.length() > 0) { return findTopNav(portal); } return findTopNav(this._rootNav || null); }; /** * @return {?} */ App.prototype.getRootNav = function () { return this._rootNav; }; /** * @param {?} nav * @return {?} */ App.prototype._setRootNav = function (nav) { this._rootNav = nav; }; /** * @param {?} enteringView * @param {?} opts * @param {?=} appPortal * @return {?} */ App.prototype.present = function (enteringView, opts, appPortal) { var /** @type {?} */ portal = this._appRoot._getPortal(appPortal); // Set Nav must be set here in order to dimiss() work synchnously. // TODO: move _setNav() to the earlier stages of NavController. _queueTrns() enteringView._setNav(portal); opts.keyboardClose = false; opts.direction = nav_util_1.DIRECTION_FORWARD; if (!opts.animation) { opts.animation = enteringView.getTransitionName(nav_util_1.DIRECTION_FORWARD); } enteringView.setLeavingOpts({ keyboardClose: false, direction: nav_util_1.DIRECTION_BACK, animation: enteringView.getTransitionName(nav_util_1.DIRECTION_BACK), ev: opts.ev }); return portal.insertPages(-1, [enteringView], opts); }; /** * @return {?} */ App.prototype.goBack = function () { if (this._menuCtrl && this._menuCtrl.isOpen()) { return this._menuCtrl.close(); } var /** @type {?} */ navPromise = this.navPop(); if (navPromise === null) { // no views to go back to // let's exit the app if (this._config.getBoolean('navExitApp', true)) { (void 0) /* console.debug */; this._plt.exitApp(); } } return navPromise; }; /** * @return {?} */ App.prototype.navPop = function () { if (!this._rootNav || !this.isEnabled()) { return Promise.resolve(); } // If there are any alert/actionsheet open, let's do nothing var /** @type {?} */ portal = this._appRoot._getPortal(DEFAULT); if (portal.length() > 0) { return Promise.resolve(); } // next get the active nav, check itself and climb up all // of its parent navs until it finds a nav that can pop return recursivePop(this.getActiveNav()); }; App.decorators = [ { type: core_1.Injectable }, ]; /** @nocollapse */ App.ctorParameters = function () { return [ { type: config_1.Config, }, { type: platform_1.Platform, }, { type: menu_controller_1.MenuController, decorators: [{ type: core_1.Optional },] }, ]; }; return App; }()); exports.App = App; function App_tsickle_Closure_declarations() { /** @type {?} */ App.decorators; /** * @nocollapse * @type {?} */ App.ctorParameters; /** @type {?} */ App.prototype._disTime; /** @type {?} */ App.prototype._scrollTime; /** @type {?} */ App.prototype._title; /** @type {?} */ App.prototype._titleSrv; /** @type {?} */ App.prototype._rootNav; /** @type {?} */ App.prototype._disableScrollAssist; /** @type {?} */ App.prototype._clickBlock; /** @type {?} */ App.prototype._appRoot; /** * Observable that emits whenever a view loads in the app. * @type {?} */ App.prototype.viewDidLoad; /** * Observable that emits before any view is entered in the app. * @type {?} */ App.prototype.viewWillEnter; /** * Observable that emits after any view is entered in the app. * @type {?} */ App.prototype.viewDidEnter; /** * Observable that emits before any view is exited in the app. * @type {?} */ App.prototype.viewWillLeave; /** * Observable that emits after any view is exited in the app. * @type {?} */ App.prototype.viewDidLeave; /** * Observable that emits before any view unloads in the app. * @type {?} */ App.prototype.viewWillUnload; /** @type {?} */ App.prototype._config; /** @type {?} */ App.prototype._plt; /** @type {?} */ App.prototype._menuCtrl; } /** * @param {?} nav * @return {?} */ function recursivePop(nav) { if (!nav) { return null; } if (nav_util_1.isNav(nav)) { var /** @type {?} */ len = nav.length(); if (len > 1 || (nav._isPortal && len > 0)) { // this nav controller has more than one view // pop the current view on this nav and we're done here (void 0) /* console.debug */; return nav.pop(); } } // try again using the parent nav (if there is one) return recursivePop(nav.parent); } /** * @param {?} nav * @return {?} */ function findTopNav(nav) { var /** @type {?} */ activeChildNav; while (nav) { activeChildNav = nav.getActiveChildNav(); if (!activeChildNav) { break; } nav = activeChildNav; } return nav; } var /** @type {?} */ DEFAULT = 0; // AppPortal.DEFAULT var /** @type {?} */ MODAL = 1; // AppPortal.MODAL var /** @type {?} */ ACTIVE_SCROLLING_TIME = 100; var /** @type {?} */ CLICK_BLOCK_BUFFER_IN_MILLIS = 64; }); //# sourceMappingURL=app.js.map