Files
2015-11-19 11:23:41 -06:00

119 lines
3.2 KiB
TypeScript

import {Title} from 'angular2/angular2';
import {ClickBlock} from '../../util/click-block';
import {ScrollTo} from '../../animations/scroll-to';
/**
* Component registry service. For more information on registering
* components see the [IdRef API reference](../id/IdRef/).
*/
export class IonicApp {
constructor(config, fastdom) {
this._config = config;
this._fastdom = fastdom;
this._titleSrv = new Title();
this._title = '';
this._disTime = 0;
this._trnsTime = 0;
// Our component registry map
this.components = {};
}
/**
* Sets the document title.
* @param {string} val Value to set the document title to.
*/
setTitle(val) {
if (val !== this._title) {
this._title = val;
this._fastdom.defer(4, () => {
this._titleSrv.setTitle(this._title);
});
}
}
/**
* 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 {bool} isEnabled
* @param {bool} 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, fallback=700) {
this._disTime = (isEnabled ? 0 : Date.now() + fallback);
if (this._config.get('clickBlock')) {
ClickBlock(!isEnabled, fallback + 100);
}
}
/**
* Boolean if the app is actively enabled or not.
* @return {bool}
*/
isEnabled() {
return (this._disTime < Date.now());
}
setTransitioning(isTransitioning, fallback=700) {
this._trnsTime = (isTransitioning ? Date.now() + fallback : 0);
}
/**
* Boolean if the app is actively transitioning or not.
* @return {bool}
*/
isTransitioning() {
return (this._trnsTime > Date.now());
}
/**
* Register a known component with a key, for easy lookups later.
* @param {TODO} id The id to use to register the component
* @param {TODO} component The component to register
*/
register(id, component) {
if (this.components[id] && this.components[id] !== component) {
//console.error('Component id "' + id + '" already registered.');
}
this.components[id] = component;
}
/**
* Unregister a known component with a key.
* @param {TODO} id The id to use to unregister
*/
unregister(id) {
delete this.components[id];
}
/**
* Get a registered component with the given type (returns the first)
* @param {Object} cls the type to search for
* @return the matching component, or undefined if none was found
*/
getRegisteredComponent(cls) {
for(let component of this.components) {
if(component instanceof cls) {
return component;
}
}
}
/**
* Get the component for the given key.
* @param {TODO} key TODO
* @return {TODO} TODO
*/
getComponent(id) {
return this.components[id];
}
}