@angular-wave/angular.ts 0.0.25 → 0.0.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/dist/angular-ts.esm.js +1 -1
  3. package/dist/angular-ts.umd.js +1 -1
  4. package/index.html +4 -4
  5. package/legacy/angular.js +6 -6
  6. package/package.json +1 -1
  7. package/src/core/compile.md +2 -2
  8. package/src/directive/cloak.md +2 -2
  9. package/src/directive/repeat.md +1 -1
  10. package/src/router/globals.js +0 -5
  11. package/src/router/params/param-types.js +0 -3
  12. package/src/router/router.js +5 -53
  13. package/src/router/services.js +2 -4
  14. package/src/router/state/state-queue-manager.js +0 -3
  15. package/src/router/state/state-registry.js +0 -5
  16. package/src/router/state/state-service.js +0 -4
  17. package/src/router/transition/transition-hook.js +1 -8
  18. package/src/router/transition/transition-service.js +0 -12
  19. package/src/router/url/url-config.js +7 -7
  20. package/src/router/url/url-router.js +1 -1
  21. package/src/router/url/url-rules.js +0 -4
  22. package/src/router/url/url-service.js +113 -80
  23. package/src/shared/utils.js +1 -1
  24. package/test/angular.spec.js +4 -4
  25. package/test/core/compile.spec.js +9 -9
  26. package/test/core/interval.spec.js +1 -1
  27. package/test/core/on.spec.js +2 -2
  28. package/test/core/prop.spec.js +2 -2
  29. package/test/directive/ref.spec.js +1 -1
  30. package/test/router/state-directives.spec.js +72 -72
  31. package/test/router/state.spec.js +12 -8
  32. package/test/router/template-factory.spec.js +2 -2
  33. package/test/router/view-directive.spec.js +65 -65
  34. package/test/router/view-hook.spec.js +11 -11
  35. package/test/router/view-scroll.spec.js +2 -2
  36. package/test/router/view.spec.js +1 -1
  37. package/src/router/location-services.js +0 -67
package/index.html CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  <!-- <script src="dist/angular-ts.umd.js"></script> -->
18
18
  <!-- include spec files here... -->
19
-
19
+ <!--
20
20
  <script type="module" src="test/directive/boolean.spec.js"></script>
21
21
  <script type="module" src="test/directive/form.spec.js"></script>
22
22
  <script type="module" src="test/directive/input.spec.js"></script>
@@ -95,7 +95,7 @@
95
95
  <script type="module" src="test/shared/common.spec.js"></script>
96
96
  <script type="module" src="test/shared/hof.spec.js"></script>
97
97
  <script type="module" src="test/shared/strings.spec.js"></script>
98
- <script type="module" src="test/shared/utils.spec.js"></script>
98
+ <script type="module" src="test/shared/utils.spec.js"></script> -->
99
99
 
100
100
  <!-- Router specs-->
101
101
  <script type="module" src="test/router/glob.spec.js"></script>
@@ -111,8 +111,8 @@
111
111
  <script type="module" src="test/router/view.spec.js"></script>
112
112
 
113
113
  <!-- Run asyncs last to prevent digest polution-->
114
- <script type="module" src="test/core/interval.spec.js"></script>
115
- <script type="module" src="test/core/timeout.spec.js"></script>
114
+ <!-- <script type="module" src="test/core/interval.spec.js"></script>
115
+ <script type="module" src="test/core/timeout.spec.js"></script> -->
116
116
  </head>
117
117
  <body>
118
118
  <div id="dummy"></div>
package/legacy/angular.js CHANGED
@@ -1629,7 +1629,7 @@ function encodeUriQuery(val, pctEncodeSpaces) {
1629
1629
  replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
1630
1630
  }
1631
1631
 
1632
- var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-'];
1632
+ var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'ng-'];
1633
1633
 
1634
1634
  function getNgAttribute(element, ngAttr) {
1635
1635
  var attr, i, ii = ngAttrPrefixes.length;
@@ -8136,7 +8136,7 @@ function $TemplateCacheProvider() {
8136
8136
  * `link()` or `compile()` functions. It has a variety of uses.
8137
8137
  *
8138
8138
  * * *Accessing normalized attribute names:* Directives like `ngBind` can be expressed in many ways:
8139
- * `ng:bind`, `data-ng-bind`, or `x-ng-bind`. The attributes object allows for normalized access
8139
+ * `ng:bind`, `data-ng-bind`, or `ng-bind`. The attributes object allows for normalized access
8140
8140
  * to the attributes.
8141
8141
  *
8142
8142
  * * *Directive inter-communication:* All directives share the same instance of the attributes
@@ -11591,7 +11591,7 @@ function directiveNormalize(name) {
11591
11591
  * needed since all of these are treated as equivalent in AngularJS:
11592
11592
  *
11593
11593
  * ```
11594
- * <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a">
11594
+ * <span ng:bind="a" ng-bind="a" data-ng-bind="a" ng-bind="a">
11595
11595
  * ```
11596
11596
  */
11597
11597
 
@@ -28570,7 +28570,7 @@ var ngClassEvenDirective = classDirective('Even', 1);
28570
28570
  * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}).
28571
28571
  *
28572
28572
  * ```css
28573
- * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
28573
+ * [ng\:cloak], [ng-cloak], [data-ng-cloak], [ng-cloak], .ng-cloak, .ng-cloak {
28574
28574
  * display: none !important;
28575
28575
  * }
28576
28576
  * ```
@@ -33702,7 +33702,7 @@ var ngRefDirective = ['$parse', function($parse) {
33702
33702
  * ```
33703
33703
  *
33704
33704
  * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such
33705
- * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).
33705
+ * as **data-ng-repeat-start**, **ng-repeat-start** and **ng:repeat-start**).
33706
33706
  *
33707
33707
  * @animations
33708
33708
  * | Animation | Occurs |
@@ -36597,4 +36597,4 @@ $provide.value("$locale", {
36597
36597
 
36598
36598
  })(window);
36599
36599
 
36600
- !window.angular.$$csp().noInlineStyle && window.angular.element(document.head).prepend(window.angular.element('<style>').text('@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}'));
36600
+ !window.angular.$$csp().noInlineStyle && window.angular.element(document.head).prepend(window.angular.element('<style>').text('@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[ng-cloak],.ng-cloak,.ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}'));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@angular-wave/angular.ts",
3
3
  "license": "MIT",
4
- "version": "0.0.25",
4
+ "version": "0.0.27",
5
5
  "type": "module",
6
6
  "main": "dist/angular-ts.esm.js",
7
7
  "browser": "dist/angular-ts.umd.js",
@@ -830,7 +830,7 @@
830
830
  - `link()` or `compile()` functions. It has a variety of uses.
831
831
  -
832
832
  - - _Accessing normalized attribute names:_ Directives like `ngBind` can be expressed in many ways:
833
- - `ng:bind`, `data-ng-bind`, or `x-ng-bind`. The attributes object allows for normalized access
833
+ - `ng:bind`, `data-ng-bind`, or `ng-bind`. The attributes object allows for normalized access
834
834
  - to the attributes.
835
835
  -
836
836
  - - _Directive inter-communication:_ All directives share the same instance of the attributes
@@ -1194,7 +1194,7 @@
1194
1194
 
1195
1195
  ```
1196
1196
 
1197
- - <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a">
1197
+ - <span ng:bind="a" ng-bind="a" data-ng-bind="a" ng-bind="a">
1198
1198
  - ```
1199
1199
  */
1200
1200
  ```
@@ -16,9 +16,9 @@ The directive can be applied to the `<body>` element, but the preferred usage is
16
16
  [ng\:cloak],
17
17
  [ng-cloak],
18
18
  [data-ng-cloak],
19
- [x-ng-cloak],
19
+ [ng-cloak],
20
20
  .ng-cloak,
21
- .x-ng-cloak {
21
+ .ng-cloak {
22
22
  display: none !important;
23
23
  }
24
24
  ```
@@ -278,7 +278,7 @@
278
278
 
279
279
  -
280
280
  - The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such
281
- - as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**).
281
+ - as **data-ng-repeat-start**, **ng-repeat-start** and **ng:repeat-start**).
282
282
  -
283
283
  - @animations
284
284
  - | Animation | Occurs |
@@ -31,9 +31,4 @@ export class UIRouterGlobals {
31
31
  */
32
32
  this.successfulTransitions = new Queue([], 1);
33
33
  }
34
- dispose() {
35
- this.transitionHistory.clear();
36
- this.successfulTransitions.clear();
37
- this.transition = null;
38
- }
39
34
  }
@@ -54,9 +54,6 @@ export class ParamTypes {
54
54
  new ParamType(Object.assign({ name }, definition));
55
55
  this.types = inherit(map(this.defaultTypes, makeType), {});
56
56
  }
57
- dispose() {
58
- this.types = {};
59
- }
60
57
  /**
61
58
  * Registers a parameter type
62
59
  *
@@ -5,8 +5,6 @@ import { ViewService } from "./view/view";
5
5
  import { StateRegistry } from "./state/state-registry";
6
6
  import { StateService } from "./state/state-service";
7
7
  import { UIRouterGlobals } from "./globals";
8
- import { removeFrom } from "../shared/common";
9
- import { isFunction } from "../shared/utils";
10
8
  import { UrlService } from "./url/url-service";
11
9
  import { trace } from "./common/trace";
12
10
 
@@ -26,18 +24,14 @@ export class UIRouter {
26
24
  /**
27
25
  * Creates a new `UIRouter` object
28
26
  *
29
- * @param {import('./location-services').Ng1LocationServices} locationService
27
+ * @param {angular.ILocationProvider} $locationProvider
30
28
  */
31
- constructor(locationService) {
32
- /**
33
- * @type {import('./location-services').Ng1LocationServices}
34
- */
35
- this.locationService = locationService;
29
+ constructor($locationProvider) {
36
30
  /** @type {number} */ this.$id = routerId++;
37
- /** @type {boolean} */ this._disposed = false;
38
- this._disposables = [];
31
+
39
32
  /** Enable/disable tracing to the javascript console */
40
33
  this.trace = trace;
34
+ this.$locationProvider = $locationProvider;
41
35
  /** Provides services related to ui-view synchronization */
42
36
  this.viewService = new ViewService(this);
43
37
  /** @type {UIRouterGlobals} An object that contains global router state, such as the current state and params */
@@ -55,7 +49,7 @@ export class UIRouter {
55
49
  */
56
50
  this.urlRouter = new UrlRouter(this);
57
51
  /** Provides services related to the URL */
58
- this.urlService = new UrlService(this);
52
+ this.urlService = new UrlService(this, $locationProvider);
59
53
  /** Provides a registry for states, and related registration services */
60
54
  this.stateRegistry = new StateRegistry(this);
61
55
  /** Provides services related to states */
@@ -65,47 +59,6 @@ export class UIRouter {
65
59
  this.viewService._pluginapi._rootViewContext(this.stateRegistry.root());
66
60
  this.globals.$current = this.stateRegistry.root();
67
61
  this.globals.current = this.globals.$current.self;
68
- this.disposable(this.globals);
69
- this.disposable(this.stateService);
70
- this.disposable(this.stateRegistry);
71
- this.disposable(this.transitionService);
72
- this.disposable(this.urlService);
73
- this.disposable(locationService);
74
- }
75
-
76
- /**
77
- * Registers an object to be notified when the router is disposed
78
- * @param {Disposable} disposable
79
- * @returns {void}
80
- */
81
- disposable(disposable) {
82
- this._disposables.push(disposable);
83
- }
84
- /**
85
- * Disposes this router instance
86
- *
87
- * When called, clears resources retained by the router by calling `dispose(this)` on all
88
- * registered [[disposable]] objects.
89
- *
90
- * Or, if a `disposable` object is provided, calls `dispose(this)` on that object only.
91
- *
92
- * @internal
93
- * @param disposable (optional) the disposable to dispose
94
- */
95
- dispose(disposable) {
96
- if (disposable && isFunction(disposable.dispose)) {
97
- disposable.dispose(this);
98
- return undefined;
99
- }
100
- this._disposed = true;
101
- this._disposables.slice().forEach((d) => {
102
- try {
103
- typeof d.dispose === "function" && d.dispose(this);
104
- removeFrom(this._disposables, d);
105
- } catch (ignored) {
106
- /* empty */
107
- }
108
- });
109
62
  }
110
63
 
111
64
  /**
@@ -167,7 +120,6 @@ export class UIRouter {
167
120
  throw new Error(
168
121
  "Required property `name` missing on plugin: " + pluginInstance,
169
122
  );
170
- this._disposables.push(pluginInstance);
171
123
  return (this._plugins[pluginInstance.name] = pluginInstance);
172
124
  }
173
125
  getPlugin(pluginName) {
@@ -16,7 +16,6 @@ import { UIRouter } from "./router";
16
16
  import { ng1ViewsBuilder, getNg1ViewConfigFactory } from "./state/views";
17
17
 
18
18
  import { StateProvider } from "./state-provider";
19
- import { Ng1LocationServices } from "./location-services";
20
19
  import { ResolveContext } from "./resolve/resolve-context";
21
20
 
22
21
  /** @type {angular.UIRouter}} */
@@ -24,9 +23,8 @@ export let router = null;
24
23
  $routerProvider.$inject = ["$locationProvider"];
25
24
  /** This angular 1 provider instantiates a Router and exposes its services via the angular injector */
26
25
  export function $routerProvider($locationProvider) {
27
- const ng1LocationService = new Ng1LocationServices($locationProvider);
28
26
  // Create a new instance of the Router when the $routerProvider is initialized
29
- router = this.router = new UIRouter(ng1LocationService);
27
+ router = this.router = new UIRouter($locationProvider);
30
28
  router.stateProvider = new StateProvider(
31
29
  router.stateRegistry,
32
30
  router.stateService,
@@ -69,7 +67,7 @@ export function $routerProvider($locationProvider) {
69
67
  router["$get"] = $get;
70
68
  $get.$inject = ["$location", "$browser", "$rootScope"];
71
69
  function $get($location, $browser, $rootScope) {
72
- ng1LocationService._runtimeServices($rootScope, $location, $browser);
70
+ router.urlService._runtimeServices($rootScope, $location, $browser);
73
71
  return router;
74
72
  }
75
73
  return router;
@@ -11,9 +11,6 @@ export class StateQueueManager {
11
11
  this.listeners = listeners;
12
12
  this.queue = [];
13
13
  }
14
- dispose() {
15
- this.queue = [];
16
- }
17
14
  register(stateDecl) {
18
15
  const queue = this.queue;
19
16
  const state = StateObject.create(stateDecl);
@@ -39,11 +39,6 @@ export class StateRegistry {
39
39
  _root.navigable = null;
40
40
  }
41
41
 
42
- dispose() {
43
- this.stateQueue.dispose();
44
- this.listeners = [];
45
- this.get().forEach((state) => this.get(state) && this.deregister(state));
46
- }
47
42
  /**
48
43
  * Listen for a State Registry events
49
44
  *
@@ -85,10 +85,6 @@ export class StateService {
85
85
  );
86
86
  }
87
87
 
88
- dispose() {
89
- this.defaultErrorHandler(() => {});
90
- this.invalidCallbacks = [];
91
- }
92
88
  /**
93
89
  * Handler for when [[transitionTo]] is called with an invalid state.
94
90
  *
@@ -142,16 +142,9 @@ export class TransitionHook {
142
142
  }
143
143
  /**
144
144
  * Return a Rejection promise if the transition is no longer current due
145
- * to a stopped router (disposed), or a new transition has started and superseded this one.
145
+ * a new transition has started and superseded this one.
146
146
  */
147
147
  getNotCurrentRejection() {
148
- const router = this.transition.router;
149
- // The router is stopped
150
- if (router._disposed) {
151
- return Rejection.aborted(
152
- `UIRouter instance #${router.$id} has been stopped (disposed)`,
153
- ).toPromise();
154
- }
155
148
  if (this.transition._aborted) {
156
149
  return Rejection.aborted().toPromise();
157
150
  }
@@ -110,18 +110,6 @@ export class TransitionService {
110
110
  * @returns a function which deregisters the hook.
111
111
  */
112
112
 
113
- /**
114
- * dispose
115
- * @internal
116
- */
117
- dispose() {
118
- Object.values(this._registeredHooks).forEach((hooksArray) =>
119
- hooksArray.forEach((hook) => {
120
- hook._deregistered = true;
121
- removeFrom(hooksArray, hook);
122
- }),
123
- );
124
- }
125
113
  /**
126
114
  * Creates a new [[Transition]] object
127
115
  *
@@ -30,14 +30,14 @@ export class UrlConfig {
30
30
  this._isStrictMode = true;
31
31
  /** @type {boolean} */
32
32
  this._defaultSquashPolicy = false;
33
- this.dispose = () => this.paramTypes.dispose();
33
+
34
34
  // Delegate these calls to the current LocationConfig implementation
35
35
  /**
36
36
  * Gets the base Href, e.g., `http://localhost/approot/`
37
37
  *
38
38
  * @return the application's base href
39
39
  */
40
- this.baseHref = () => this.router.locationService.baseHref();
40
+ this.baseHref = () => this.router.urlService.baseHref();
41
41
  /**
42
42
  * Gets or sets the hashPrefix
43
43
  *
@@ -48,31 +48,31 @@ export class UrlConfig {
48
48
  * @return the hash prefix
49
49
  */
50
50
  this.hashPrefix = (newprefix) =>
51
- this.router.locationService.$locationProvider.hashPrefix(newprefix);
51
+ this.router.$locationProvider.hashPrefix(newprefix);
52
52
  /**
53
53
  * Gets the host, e.g., `localhost`
54
54
  *
55
55
  * @return {string} the protocol
56
56
  */
57
- this.host = () => this.router.locationService.$location.host();
57
+ this.host = () => this.router.urlService.$location.host();
58
58
  /**
59
59
  * Returns true when running in pushstate mode
60
60
  *
61
61
  * @return {boolean} true when running in html5 mode (pushstate mode).
62
62
  */
63
- this.html5Mode = () => this.router.locationService.html5Mode();
63
+ this.html5Mode = () => this.router.urlService.html5Mode();
64
64
  /**
65
65
  * Gets the port, e.g., `80`
66
66
  *
67
67
  * @return {number} the port number
68
68
  */
69
- this.port = () => this.router.locationService.$location.port();
69
+ this.port = () => this.router.urlService.$location.port();
70
70
  /**
71
71
  * Gets the protocol, e.g., `http`
72
72
  *
73
73
  * @return {string} the protocol
74
74
  */
75
- this.protocol = () => this.router.locationService.$location.protocol();
75
+ this.protocol = () => this.router.urlService.$location.protocol();
76
76
  }
77
77
  /**
78
78
  * Defines whether URL matching should be case sensitive (the default behavior), or not.
@@ -25,7 +25,7 @@ export class UrlRouter {
25
25
  }
26
26
  /** Internal API. */
27
27
  update(read) {
28
- const $url = this.router.locationService;
28
+ const $url = this.router.urlService;
29
29
  if (read) {
30
30
  this.location = $url.url();
31
31
  return;
@@ -72,10 +72,6 @@ export class UrlRules {
72
72
  this.urlRuleFactory = new UrlRuleFactory(router);
73
73
  }
74
74
 
75
- dispose() {
76
- this._rules = [];
77
- delete this._otherwiseFn;
78
- }
79
75
  /**
80
76
  * Defines the initial state, path, or behavior to use when the app starts.
81
77
  *
@@ -1,8 +1,9 @@
1
- import { isString } from "../../shared/utils";
1
+ import { isDefined, isObject, isString } from "../../shared/utils";
2
2
  import { is, pattern } from "../../shared/hof";
3
3
  import { UrlRules } from "./url-rules";
4
4
  import { UrlConfig } from "./url-config";
5
5
  import { TargetState } from "../state/target-state";
6
+ import { removeFrom } from "../../shared/common";
6
7
  /**
7
8
  * API for URL management
8
9
  */
@@ -10,13 +11,16 @@ export class UrlService {
10
11
  /**
11
12
  *
12
13
  * @param {import('../router').UIRouter} router
14
+ * @param {angular.ILocationProvider} $locationProvider
13
15
  */
14
- constructor(router) {
16
+ constructor(router, $locationProvider) {
15
17
  /**
16
18
  * @type {import('../router').UIRouter}
17
19
  */
18
20
  this.router = router;
19
21
 
22
+ this.$locationProvider = $locationProvider;
23
+
20
24
  /** @type {boolean} */
21
25
  this.interceptDeferred = false;
22
26
  /**
@@ -33,61 +37,7 @@ export class UrlService {
33
37
  * @type {UrlConfig}
34
38
  */
35
39
  this.config = new UrlConfig(this.router);
36
- // Delegate these calls to the current LocationServices implementation
37
- /**
38
- * Gets the current url, or updates the url
39
- *
40
- * ### Getting the current URL
41
- *
42
- * When no arguments are passed, returns the current URL.
43
- * The URL is normalized using the internal [[path]]/[[search]]/[[hash]] values.
44
- *
45
- * For example, the URL may be stored in the hash ([[HashLocationServices]]) or
46
- * have a base HREF prepended ([[PushStateLocationServices]]).
47
- *
48
- * The raw URL in the browser might be:
49
- *
50
- * ```
51
- * http://mysite.com/somepath/index.html#/internal/path/123?param1=foo#anchor
52
- * ```
53
- *
54
- * or
55
- *
56
- * ```
57
- * http://mysite.com/basepath/internal/path/123?param1=foo#anchor
58
- * ```
59
- *
60
- * then this method returns:
61
- *
62
- * ```
63
- * /internal/path/123?param1=foo#anchor
64
- * ```
65
- *
66
- *
67
- * #### Example:
68
- * ```js
69
- * locationServices.url(); // "/some/path?query=value#anchor"
70
- * ```
71
- *
72
- * ### Updating the URL
73
- *
74
- * When `newurl` arguments is provided, changes the URL to reflect `newurl`
75
- *
76
- * #### Example:
77
- * ```js
78
- * locationServices.url("/some/path?query=value#anchor", true);
79
- * ```
80
- *
81
- * @param {string} newurl The new value for the URL.
82
- * This url should reflect only the new internal [[path]], [[search]], and [[hash]] values.
83
- * It should not include the protocol, site, port, or base path of an absolute HREF.
84
- * @param {boolean} replace When true, replaces the current history entry (instead of appending it) with this new url
85
- * @param {any} state The history's state object, i.e., pushState (if the LocationServices implementation supports it)
86
- *
87
- * @return the url (after potentially being processed)
88
- */
89
- this.url = (newurl, replace, state) =>
90
- this.router.locationService.url(newurl, replace, state);
40
+
91
41
  /**
92
42
  * Gets the path part of the current url
93
43
  *
@@ -95,7 +45,7 @@ export class UrlService {
95
45
  *
96
46
  * @return the path portion of the url
97
47
  */
98
- this.path = () => this.router.locationService.path();
48
+ this.path = () => this.$location.path();
99
49
  /**
100
50
  * Gets the search part of the current url as an object
101
51
  *
@@ -103,7 +53,7 @@ export class UrlService {
103
53
  *
104
54
  * @return the search (query) portion of the url, as an object
105
55
  */
106
- this.search = () => this.router.locationService.search();
56
+ this.search = () => this.$location.search();
107
57
  /**
108
58
  * Gets the hash part of the current url
109
59
  *
@@ -111,30 +61,103 @@ export class UrlService {
111
61
  *
112
62
  * @return the hash (anchor) portion of the url
113
63
  */
114
- this.hash = () => this.router.locationService.hash();
115
- /**
116
- * @internal
117
- *
118
- * Registers a low level url change handler
119
- *
120
- * Note: Because this is a low level handler, it's not recommended for general use.
121
- *
122
- * #### Example:
123
- * ```js
124
- * let deregisterFn = locationServices.onChange((evt) => console.log("url change", evt));
125
- * ```
126
- *
127
- * @param callback a function that will be called when the url is changing
128
- * @return a function that de-registers the callback
129
- */
130
- this.onChange = (callback) =>
131
- this.router.locationService.onChange(callback);
64
+ this.hash = () => this.$location.hash();
65
+
66
+ this._urlListeners = [];
67
+ }
68
+
69
+ html5Mode() {
70
+ let html5Mode = this.$locationProvider.html5Mode();
71
+ html5Mode = isObject(html5Mode) ? html5Mode.enabled : html5Mode;
72
+ return html5Mode && typeof history !== "undefined";
132
73
  }
133
74
 
134
- dispose() {
135
- this.listen(false);
136
- this.rules.dispose();
75
+ baseHref() {
76
+ return (
77
+ this._baseHref ||
78
+ (this._baseHref = this.$browser.baseHref() || window.location.pathname)
79
+ );
137
80
  }
81
+
82
+ /**
83
+ * Gets the current url, or updates the url
84
+ *
85
+ * ### Getting the current URL
86
+ *
87
+ * When no arguments are passed, returns the current URL.
88
+ * The URL is normalized using the internal [[path]]/[[search]]/[[hash]] values.
89
+ *
90
+ * For example, the URL may be stored in the hash ([[HashLocationServices]]) or
91
+ * have a base HREF prepended ([[PushStateLocationServices]]).
92
+ *
93
+ * The raw URL in the browser might be:
94
+ *
95
+ * ```
96
+ * http://mysite.com/somepath/index.html#/internal/path/123?param1=foo#anchor
97
+ * ```
98
+ *
99
+ * or
100
+ *
101
+ * ```
102
+ * http://mysite.com/basepath/internal/path/123?param1=foo#anchor
103
+ * ```
104
+ *
105
+ * then this method returns:
106
+ *
107
+ * ```
108
+ * /internal/path/123?param1=foo#anchor
109
+ * ```
110
+ *
111
+ *
112
+ * #### Example:
113
+ * ```js
114
+ * locationServices.url(); // "/some/path?query=value#anchor"
115
+ * ```
116
+ *
117
+ * ### Updating the URL
118
+ *
119
+ * When `newurl` arguments is provided, changes the URL to reflect `newurl`
120
+ *
121
+ * #### Example:
122
+ * ```js
123
+ * locationServices.url("/some/path?query=value#anchor", true);
124
+ * ```
125
+ *
126
+ * @param {string} newUrl The new value for the URL.
127
+ * This url should reflect only the new internal [[path]], [[search]], and [[hash]] values.
128
+ * It should not include the protocol, site, port, or base path of an absolute HREF.
129
+ * @param {boolean} replace When true, replaces the current history entry (instead of appending it) with this new url
130
+ * @param {any} state The history's state object, i.e., pushState (if the LocationServices implementation supports it)
131
+ *
132
+ * @return the url (after potentially being processed)
133
+ */
134
+ url(newUrl, replace = false, state) {
135
+ if (isDefined(newUrl)) this.$location.url(newUrl);
136
+ if (replace) this.$location.replace();
137
+ if (state) this.$location.state(state);
138
+ return this.$location.url();
139
+ }
140
+
141
+ /**
142
+ * @internal
143
+ *
144
+ * Registers a low level url change handler
145
+ *
146
+ * Note: Because this is a low level handler, it's not recommended for general use.
147
+ *
148
+ * #### Example:
149
+ * ```js
150
+ * let deregisterFn = locationServices.onChange((evt) => console.log("url change", evt));
151
+ * ```
152
+ *
153
+ * @param callback a function that will be called when the url is changing
154
+ * @return a function that de-registers the callback
155
+ */
156
+ onChange(callback) {
157
+ this._urlListeners.push(callback);
158
+ return () => removeFrom(this._urlListeners)(callback);
159
+ }
160
+
138
161
  /**
139
162
  * Gets the current URL parts
140
163
  *
@@ -275,4 +298,14 @@ export class UrlService {
275
298
  }
276
299
  return best;
277
300
  }
301
+
302
+ _runtimeServices($rootScope, $location, $browser) {
303
+ /** @type {angular.ILocationService} */
304
+ this.$location = $location;
305
+ this.$browser = $browser;
306
+ // Bind $locationChangeSuccess to the listeners registered in LocationService.onChange
307
+ $rootScope.$on("$locationChangeSuccess", (evt) =>
308
+ this._urlListeners.forEach((fn) => fn(evt)),
309
+ );
310
+ }
278
311
  }