mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2025-08-21 04:53:58 +08:00
141 lines
3.7 KiB
TypeScript
141 lines
3.7 KiB
TypeScript
import {Injectable, NgZone} from 'angular2/core';
|
|
import {Title} from 'angular2/platform/browser';
|
|
|
|
import {Config} from '../../config/config';
|
|
import {ClickBlock} from '../../util/click-block';
|
|
import {rafFrames} from '../../util/dom';
|
|
|
|
|
|
/**
|
|
* @private
|
|
* Component registry service. For more information on registering
|
|
* components see the [IdRef API reference](../id/IdRef/).
|
|
*/
|
|
@Injectable()
|
|
export class IonicApp {
|
|
private _titleSrv: Title = new Title();
|
|
private _title: string = '';
|
|
private _disTime: number = 0;
|
|
private _scrollTime: number = 0;
|
|
|
|
// Our component registry map
|
|
private components: {[id: string] : any} = {};
|
|
|
|
constructor(
|
|
private _config: Config,
|
|
private _clickBlock: ClickBlock,
|
|
private _zone: NgZone
|
|
) {}
|
|
|
|
/**
|
|
* Sets the document title.
|
|
* @param {string} val Value to set the document title to.
|
|
*/
|
|
setTitle(val: string) {
|
|
let self = this;
|
|
if (val !== self._title) {
|
|
self._title = val;
|
|
this._zone.runOutsideAngular(() => {
|
|
function setAppTitle() {
|
|
self._titleSrv.setTitle(self._title);
|
|
}
|
|
rafFrames(4, setAppTitle);
|
|
});
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @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 {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: 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 {bool}
|
|
*/
|
|
isEnabled(): boolean {
|
|
return (this._disTime < Date.now());
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
setScrolling() {
|
|
this._scrollTime = Date.now();
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
* Boolean if the app is actively scrolling or not.
|
|
* @return {bool}
|
|
*/
|
|
isScrolling(): boolean {
|
|
return (this._scrollTime + 64 > Date.now());
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
* Register a known component with a key, for easy lookups later.
|
|
* @param {string} id The id to use to register the component
|
|
* @param {Object} component The component to register
|
|
*/
|
|
register(id: string, component: any) {
|
|
if (this.components[id] && this.components[id] !== component) {
|
|
//console.error('Component id "' + id + '" already registered.');
|
|
}
|
|
this.components[id] = component;
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
* Unregister a known component with a key.
|
|
* @param {string} id The id to use to unregister
|
|
*/
|
|
unregister(id: string) {
|
|
delete this.components[id];
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
* Get a registered component with the given type (returns the first)
|
|
* @param {Object} cls the type to search for
|
|
* @return {Object} the matching component, or undefined if none was found
|
|
*/
|
|
getRegisteredComponent(cls: any): any {
|
|
for (let key in this.components) {
|
|
const component = this.components[key];
|
|
if (component instanceof cls) {
|
|
return component;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @private
|
|
* Get the component for the given key.
|
|
* @param {string} id TODO
|
|
* @return {Object} TODO
|
|
*/
|
|
getComponent(id: string): any {
|
|
return this.components[id];
|
|
}
|
|
|
|
}
|