ui-router-core
Version:
UI-Router Core: Framework agnostic, State-based routing for JavaScript Single Page Apps
184 lines (183 loc) • 5.53 kB
TypeScript
/**
* This module is a stub for core services such as Dependency Injection or Browser Location.
* Core services may be implemented by a specific framework, such as ng1 or ng2, or be pure javascript.
*
* @module common
*/
/** for typedoc */
import { IInjectable, Obj } from "./common";
import { Disposable } from "../interface";
export declare let notImplemented: (fnname: string) => () => never;
declare let services: CoreServices;
export interface $QLikeDeferred {
resolve: (val?: any) => void;
reject: (reason?: any) => void;
promise: Promise<any>;
}
export interface $QLike {
when<T>(val?: T): Promise<T>;
reject<T>(reason: any): Promise<T>;
defer(): $QLikeDeferred;
all(promises: {
[key: string]: Promise<any>;
}): Promise<any>;
all(promises: Promise<any>[]): Promise<any[]>;
}
export interface $InjectorLike {
get(token: any): any;
get<T>(token: any): T;
has(token: any): boolean;
invoke(fn: IInjectable, context?: any, locals?: Obj): any;
annotate(fn: IInjectable, strictDi?: boolean): any[];
strictDi?: boolean;
}
export interface CoreServices {
$q: $QLike;
$injector: $InjectorLike;
}
export interface LocationServices extends Disposable {
/**
* Gets the current url string
*
* The URL is normalized using the internal [[path]]/[[search]]/[[hash]] values.
*
* For example, the URL may be stored in the hash ([[HashLocationServices]]) or
* have a base HREF prepended ([[PushStateLocationServices]]).
*
* The raw URL in the browser might be:
*
* ```
* http://mysite.com/somepath/index.html#/internal/path/123?param1=foo#anchor
* ```
*
* or
*
* ```
* http://mysite.com/basepath/internal/path/123?param1=foo#anchor
* ```
*
* then this method returns:
*
* ```
* /internal/path/123?param1=foo#anchor
* ```
*
*
* #### Example:
* ```js
* locationServices.url(); // "/some/path?query=value#anchor"
* ```
*
* @returns the current value of the url, as a string.
*/
url(): string;
/**
* Updates the url, or gets the current url
*
* Updates the url, changing it to the value in `newurl`
*
* #### Example:
* ```js
* locationServices.url("/some/path?query=value#anchor", true);
* ```
*
* @param newurl The new value for the URL.
* This url should reflect only the new internal [[path]], [[search]], and [[hash]] values.
* It should not include the protocol, site, port, or base path of an absolute HREF.
* @param replace When true, replaces the current history entry (instead of appending it) with this new url
* @param state The history's state object, i.e., pushState (if the LocationServices implementation supports it)
* @return the url (after potentially being processed)
*/
url(newurl: string, replace?: boolean, state?: any): string;
/**
* Gets the path part of the current url
*
* If the current URL is `/some/path?query=value#anchor`, this returns `/some/path`
*
* @return the path portion of the url
*/
path(): string;
/**
* Gets the search part of the current url as an object
*
* If the current URL is `/some/path?query=value#anchor`, this returns `{ query: 'value' }`
*
* @return the search (querystring) portion of the url, as an object
*/
search(): {
[key: string]: any;
};
/**
* Gets the hash part of the current url
*
* If the current URL is `/some/path?query=value#anchor`, this returns `anchor`
*
* @return the hash (anchor) portion of the url
*/
hash(): string;
/**
* Registers a url change handler
*
* #### Example:
* ```js
* let deregisterFn = locationServices.onChange((evt) => console.log("url change", evt));
* ```
*
* @param callback a function that will be called when the url is changing
* @return a function that de-registers the callback
*/
onChange(callback: Function): Function;
}
/**
* This service returns the location configuration
*
* This service returns information about the location configuration.
* This service is primarily used when building URLs (e.g., for `hrefs`)
*/
export interface LocationConfig extends Disposable {
/**
* Gets the port, e.g., `80`
*
* @return the port number
*/
port(): number;
/**
* Gets the protocol, e.g., `http`
*
* @return the protocol
*/
protocol(): string;
/**
* Gets the host, e.g., `localhost`
*
* @return the protocol
*/
host(): string;
/**
* Gets the base Href, e.g., `http://localhost/approot/`
*
* @return the application's base href
*/
baseHref(): string;
/**
* Returns true when running in pushstate mode
*
* @return true when running in pushstate mode
*/
html5Mode(): boolean;
/**
* Gets the hashPrefix (when not running in pushstate mode)
*
* If the current url is `http://localhost/app#!/uirouter/path/#anchor`, it returns `!` which is the prefix for the "hashbang" portion.
*
* @return the hash prefix
*/
hashPrefix(): string;
/**
* Sets the hashPrefix (when not running in pushstate mode)
*
* @return the new hash prefix
*/
hashPrefix(newprefix: string): string;
}
export { services };