Files
Adam Bradley df328361fd chore(id): finding component by an id attr has been removed
BREAKING CHANGES: app.getComponent() has been removed. Please use
Angular's ViewChild annotation instead:
http://learnangular2.com/viewChild/
2016-04-28 11:29:48 -05:00

179 lines
4.4 KiB
TypeScript

import {Injectable, Injector} from 'angular2/core';
import {Title} from 'angular2/platform/browser';
import {Config} from '../../config/config';
import {ClickBlock} from '../../util/click-block';
import {Platform} from '../../platform/platform';
/**
* App utility service. Allows you to look up components that have been
* registered using the [Id directive](../Id/).
*/
@Injectable()
export class IonicApp {
private _disTime: number = 0;
private _scrollTime: number = 0;
private _title: string = '';
private _titleSrv: Title = new Title();
private _isProd: boolean = false;
private _rootNav: any = null;
private _appInjector: Injector;
constructor(
private _config: Config,
private _clickBlock: ClickBlock,
platform: Platform
) {
platform.backButton.subscribe(() => {
let activeNav = this.getActiveNav();
if (activeNav) {
if (activeNav.length() === 1) {
platform.exitApp();
} else {
activeNav.pop();
}
}
});
}
/**
* Sets the document title.
* @param {string} val Value to set the document title to.
*/
setTitle(val: string) {
if (val !== this._title) {
this._title = val;
this._titleSrv.setTitle(val);
}
}
/**
* Returns if the app has been set to be in be in production mode or not.
* Production mode can only be set within the config of `@App`. Defaults
* to `false`.
* @return {boolean}
*/
isProd(): boolean {
return this._isProd;
}
/**
* @private
*/
setProd(val: boolean) {
this._isProd = !!val;
}
/**
* @private
* 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`.
* @param {boolean} isEnabled
* @param {boolean} fallback When `isEnabled` is set to `false`, this argument
* 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.
*/
setEnabled(isEnabled: boolean, duration: number = 700) {
this._disTime = (isEnabled ? 0 : Date.now() + duration);
if (duration > 32 || isEnabled) {
// only do a click block if the duration is longer than XXms
this._clickBlock.show(!isEnabled, duration + 64);
}
}
/**
* @private
* Boolean if the app is actively enabled or not.
* @return {boolean}
*/
isEnabled(): boolean {
return (this._disTime < Date.now());
}
/**
* @private
*/
setScrolling() {
this._scrollTime = Date.now();
}
/**
* Boolean if the app is actively scrolling or not.
* @return {boolean}
*/
isScrolling(): boolean {
return (this._scrollTime + 64 > Date.now());
}
/**
* @private
*/
getActiveNav(): any {
var nav = this._rootNav || null;
var activeChildNav;
while (nav) {
activeChildNav = nav.getActiveChildNav();
if (!activeChildNav) {
break;
}
nav = activeChildNav;
}
return nav;
}
/**
* @private
*/
getRootNav(): any {
return this._rootNav;
}
/**
* @private
*/
setRootNav(nav: any) {
this._rootNav = nav;
}
/**
* @private
*/
getRegisteredComponent(cls: any): any {
// deprecated warning: added 2016-04-28, beta7
console.warn('Using app.getRegisteredComponent() to query components has been deprecated. ' +
'Please use Angular\'s ViewChild annotation instead:\n\nhttp://learnangular2.com/viewChild/');
}
/**
* @private
*/
getComponent(id: string): any {
// deprecated warning: added 2016-04-28, beta7
console.warn('Using app.getComponent() to query components has been deprecated. ' +
'Please use Angular\'s ViewChild annotation instead:\n\nhttp://learnangular2.com/viewChild/');
}
/**
* Set the global app injector that contains references to all of the instantiated providers
* @param injector
*/
setAppInjector(injector: Injector) {
this._appInjector = injector;
}
/**
* Get an instance of the global app injector that contains references to all of the instantiated providers
* @returns {Injector}
*/
getAppInjector(): Injector {
return this._appInjector;
}
}