UNPKG

13.6 kBSource Map (JSON)View Raw
1{
2 "version": 3,
3 "file": "urlService.js",
4 "sourceRoot": "",
5 "sources": [
6 "@uirouter/core/url/urlService.ts"
7 ],
8 "names": [],
9 "mappings": "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",
10 "sourcesContent": [
11 "import { UIRouter } from '../router';\nimport { extend, is, isString, LocationServices, pattern } from '../common';\nimport { MatchResult, UrlParts, UrlRule, UrlSyncApi } from './interface';\nimport { UrlRules } from './urlRules';\nimport { UrlConfig } from './urlConfig';\nimport { TargetState, TargetStateDef } from '../state';\n\n/**\n * API for URL management\n */\nexport class UrlService implements LocationServices, UrlSyncApi {\n /** @internal */ private _stopListeningFn: Function;\n /** @internal */ interceptDeferred = false;\n\n /**\n * The nested [[UrlRules]] API for managing URL rules and rewrites\n *\n * See: [[UrlRules]] for details\n */\n public rules = new UrlRules(this.router);\n\n /**\n * The nested [[UrlConfig]] API to configure the URL and retrieve URL information\n *\n * See: [[UrlConfig]] for details\n */\n public config = new UrlConfig(this.router);\n\n /** @internal */\n constructor(/** @internal */ private router: UIRouter) {}\n /** @internal */\n public dispose() {\n this.listen(false);\n (this.rules as UrlRules).dispose();\n }\n\n /**\n * Gets the current URL parts\n *\n * This method returns the different parts of the current URL (the [[path]], [[search]], and [[hash]]) as a [[UrlParts]] object.\n */\n public parts(): UrlParts {\n return { path: this.path(), search: this.search(), hash: this.hash() };\n }\n\n /**\n * Activates the best rule for the current URL\n *\n * Checks the current URL for a matching [[UrlRule]], then invokes that rule's handler.\n * This method is called internally any time the URL has changed.\n *\n * This effectively activates the state (or redirect, etc) which matches the current URL.\n *\n * #### Example:\n * ```js\n * urlService.deferIntercept();\n *\n * fetch('/states.json').then(resp => resp.json()).then(data => {\n * data.forEach(state => $stateRegistry.register(state));\n * urlService.listen();\n * // Find the matching URL and invoke the handler.\n * urlService.sync();\n * });\n * ```\n */\n public sync(evt?) {\n if (evt && evt.defaultPrevented) return;\n const { urlService, stateService } = this.router;\n\n const url: UrlParts = { path: urlService.path(), search: urlService.search(), hash: urlService.hash() };\n const best = this.match(url);\n\n const applyResult = pattern([\n [isString, (newurl: string) => urlService.url(newurl, true)],\n [TargetState.isDef, (def: TargetStateDef) => stateService.go(def.state, def.params, def.options)],\n [is(TargetState), (target: TargetState) => stateService.go(target.state(), target.params(), target.options())],\n ]);\n\n applyResult(best && best.rule.handler(best.match, url, this.router));\n }\n\n /**\n * Starts or stops listening for URL changes\n *\n * Call this sometime after calling [[deferIntercept]] to start monitoring the url.\n * This causes UI-Router to start listening for changes to the URL, if it wasn't already listening.\n *\n * If called with `false`, UI-Router will stop listening (call listen(true) to start listening again).\n *\n * #### Example:\n * ```js\n * urlService.deferIntercept();\n *\n * fetch('/states.json').then(resp => resp.json()).then(data => {\n * data.forEach(state => $stateRegistry.register(state));\n * // Start responding to URL changes\n * urlService.listen();\n * urlService.sync();\n * });\n * ```\n *\n * @param enabled `true` or `false` to start or stop listening to URL changes\n */\n public listen(enabled?: boolean): Function {\n if (enabled === false) {\n this._stopListeningFn && this._stopListeningFn();\n delete this._stopListeningFn;\n } else {\n return (this._stopListeningFn =\n this._stopListeningFn || this.router.urlService.onChange((evt) => this.sync(evt)));\n }\n }\n\n /**\n * Disables monitoring of the URL.\n *\n * Call this method before UI-Router has bootstrapped.\n * It will stop UI-Router from performing the initial url sync.\n *\n * This can be useful to perform some asynchronous initialization before the router starts.\n * Once the initialization is complete, call [[listen]] to tell UI-Router to start watching and synchronizing the URL.\n *\n * #### Example:\n * ```js\n * // Prevent UI-Router from automatically intercepting URL changes when it starts;\n * urlService.deferIntercept();\n *\n * fetch('/states.json').then(resp => resp.json()).then(data => {\n * data.forEach(state => $stateRegistry.register(state));\n * urlService.listen();\n * urlService.sync();\n * });\n * ```\n *\n * @param defer Indicates whether to defer location change interception.\n * Passing no parameter is equivalent to `true`.\n */\n public deferIntercept(defer?: boolean) {\n if (defer === undefined) defer = true;\n this.interceptDeferred = defer;\n }\n\n /**\n * Matches a URL\n *\n * Given a URL (as a [[UrlParts]] object), check all rules and determine the best matching rule.\n * Return the result as a [[MatchResult]].\n */\n public match(url: UrlParts): MatchResult {\n url = extend({ path: '', search: {}, hash: '' }, url);\n const rules = this.rules.rules();\n\n // Checks a single rule. Returns { rule: rule, match: match, weight: weight } if it matched, or undefined\n const checkRule = (rule: UrlRule): MatchResult => {\n const match = rule.match(url, this.router);\n return match && { match, rule, weight: rule.matchPriority(match) };\n };\n\n // The rules are pre-sorted.\n // - Find the first matching rule.\n // - Find any other matching rule that sorted *exactly the same*, according to `.sort()`.\n // - Choose the rule with the highest match weight.\n let best: MatchResult;\n for (let i = 0; i < rules.length; i++) {\n // Stop when there is a 'best' rule and the next rule sorts differently than it.\n if (best && best.rule._group !== rules[i]._group) break;\n\n const current = checkRule(rules[i]);\n // Pick the best MatchResult\n best = !best || (current && current.weight > best.weight) ? current : best;\n }\n\n return best;\n }\n\n // Delegate these calls to the current LocationServices implementation\n /**\n * Gets the current url, or updates the url\n *\n * ### Getting the current URL\n *\n * When no arguments are passed, returns the current URL.\n * The URL is normalized using the internal [[path]]/[[search]]/[[hash]] values.\n *\n * For example, the URL may be stored in the hash ([[HashLocationServices]]) or\n * have a base HREF prepended ([[PushStateLocationServices]]).\n *\n * The raw URL in the browser might be:\n *\n * ```\n * http://mysite.com/somepath/index.html#/internal/path/123?param1=foo#anchor\n * ```\n *\n * or\n *\n * ```\n * http://mysite.com/basepath/internal/path/123?param1=foo#anchor\n * ```\n *\n * then this method returns:\n *\n * ```\n * /internal/path/123?param1=foo#anchor\n * ```\n *\n *\n * #### Example:\n * ```js\n * locationServices.url(); // \"/some/path?query=value#anchor\"\n * ```\n *\n * ### Updating the URL\n *\n * When `newurl` arguments is provided, changes the URL to reflect `newurl`\n *\n * #### Example:\n * ```js\n * locationServices.url(\"/some/path?query=value#anchor\", true);\n * ```\n *\n * @param newurl The new value for the URL.\n * This url should reflect only the new internal [[path]], [[search]], and [[hash]] values.\n * It should not include the protocol, site, port, or base path of an absolute HREF.\n * @param replace When true, replaces the current history entry (instead of appending it) with this new url\n * @param state The history's state object, i.e., pushState (if the LocationServices implementation supports it)\n *\n * @return the url (after potentially being processed)\n */\n public url = (newurl?: string, replace?: boolean, state?: any): string =>\n this.router.locationService.url(newurl, replace, state);\n\n /**\n * Gets the path part of the current url\n *\n * If the current URL is `/some/path?query=value#anchor`, this returns `/some/path`\n *\n * @return the path portion of the url\n */\n public path = (): string => this.router.locationService.path();\n\n /**\n * Gets the search part of the current url as an object\n *\n * If the current URL is `/some/path?query=value#anchor`, this returns `{ query: 'value' }`\n *\n * @return the search (query) portion of the url, as an object\n */\n public search = (): { [key: string]: any } => this.router.locationService.search();\n\n /**\n * Gets the hash part of the current url\n *\n * If the current URL is `/some/path?query=value#anchor`, this returns `anchor`\n *\n * @return the hash (anchor) portion of the url\n */\n public hash = (): string => this.router.locationService.hash();\n\n /**\n * @internal\n *\n * Registers a low level url change handler\n *\n * Note: Because this is a low level handler, it's not recommended for general use.\n *\n * #### Example:\n * ```js\n * let deregisterFn = locationServices.onChange((evt) => console.log(\"url change\", evt));\n * ```\n *\n * @param callback a function that will be called when the url is changing\n * @return a function that de-registers the callback\n */\n public onChange = (callback: EventListener): Function => this.router.locationService.onChange(callback);\n}\n"
12 ]
13}
\No newline at end of file