@angular-wave/angular.ts 0.0.22 → 0.0.24

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 (71) hide show
  1. package/dist/angular-ts.esm.js +1 -1
  2. package/dist/angular-ts.umd.js +1 -1
  3. package/index.html +6 -2
  4. package/package.json +1 -1
  5. package/src/core/compile.js +2 -3
  6. package/src/core/parser/parse.js +2 -3
  7. package/src/filters/order-by.js +8 -8
  8. package/src/router/directives/{stateDirectives.js → state-directives.js} +1 -2
  9. package/src/router/directives/{viewDirective.js → view-directive.js} +4 -12
  10. package/src/router/globals.js +1 -1
  11. package/src/router/hooks/{ignoredTransition.js → ignored-transition.js} +1 -1
  12. package/src/router/hooks/{redirectTo.js → redirect-to.js} +1 -1
  13. package/src/router/hooks/resolve.js +1 -1
  14. package/src/router/index.js +6 -8
  15. package/src/router/params/{paramTypes.js → param-types.js} +3 -4
  16. package/src/router/params/param.js +1 -1
  17. package/src/router/path/{pathUtils.js → path-utils.js} +2 -2
  18. package/src/router/resolve/resolvable.js +2 -2
  19. package/src/router/resolve/{resolveContext.js → resolve-context.js} +1 -1
  20. package/src/router/router.js +8 -8
  21. package/src/router/services.js +3 -3
  22. package/src/router/state/{stateBuilder.js → state-builder.js} +2 -3
  23. package/src/router/state/{stateQueueManager.js → state-queue-manager.js} +2 -1
  24. package/src/router/state/{stateRegistry.js → state-registry.js} +3 -3
  25. package/src/router/state/{stateService.js → state-service.js} +7 -7
  26. package/src/router/state/views.js +1 -1
  27. package/src/router/{stateProvider.js → state-provider.js} +8 -0
  28. package/src/router/{templateFactory.js → template-factory.js} +93 -51
  29. package/src/router/transition/{hookBuilder.js → hook-builder.js} +3 -3
  30. package/src/router/transition/{transitionEventType.js → transition-event-type.js} +1 -1
  31. package/src/router/transition/{transitionHook.js → transition-hook.js} +2 -2
  32. package/src/router/transition/{transitionService.js → transition-service.js} +10 -10
  33. package/src/router/transition/transition.js +12 -9
  34. package/src/router/url/{urlConfig.js → url-config.js} +1 -1
  35. package/src/router/url/{urlMatcherFactory.js → url-matcher-factory.js} +1 -1
  36. package/src/router/url/{urlMatcher.js → url-matcher.js} +0 -2
  37. package/src/router/url/{urlRouter.js → url-router.js} +1 -1
  38. package/src/router/url/{urlRule.js → url-rule.js} +13 -5
  39. package/src/router/url/{urlRules.js → url-rules.js} +3 -3
  40. package/src/router/url/{urlService.js → url-service.js} +6 -6
  41. package/src/services/browser.js +3 -18
  42. package/src/shared/strings.js +2 -2
  43. package/test/router/ng-state-builder.spec.js +81 -0
  44. package/test/router/services.spec.js +0 -1
  45. package/test/router/state-directives.spec.js +867 -893
  46. package/test/router/template-factory.spec.js +146 -0
  47. package/test/router/url-matcher-factory.spec.js +1313 -0
  48. package/test/router/view-directive.spec.js +2013 -0
  49. package/test/router/view-hook.spec.js +217 -0
  50. package/test/router/view-scroll.spec.js +77 -0
  51. package/test/router/view.spec.js +117 -0
  52. package/test/test-utils.js +9 -0
  53. package/types/router/legacy/resolveService.d.ts +1 -1
  54. package/types/router/statebuilders/onEnterExitRetain.d.ts +1 -1
  55. package/types/router/statebuilders/views.d.ts +1 -2
  56. /package/src/router/hooks/{coreResolvables.js → core-resolvables.js} +0 -0
  57. /package/src/router/hooks/{invalidTransition.js → invalid-transition.js} +0 -0
  58. /package/src/router/hooks/{lazyLoad.js → lazy-load.js} +0 -0
  59. /package/src/router/hooks/{onEnterExitRetain.js → on-enter-exit-retain.js} +0 -0
  60. /package/src/router/hooks/{updateGlobals.js → update-globals.js} +0 -0
  61. /package/src/router/{locationServices.js → location-services.js} +0 -0
  62. /package/src/router/params/{paramType.js → param-type.js} +0 -0
  63. /package/src/router/params/{stateParams.js → state-params.js} +0 -0
  64. /package/src/router/path/{pathNode.js → path-node.js} +0 -0
  65. /package/src/router/state/{stateMatcher.js → state-matcher.js} +0 -0
  66. /package/src/router/state/{stateObject.js → state-object.js} +0 -0
  67. /package/src/router/state/{targetState.js → target-state.js} +0 -0
  68. /package/src/router/{stateFilters.js → state-filters.js} +0 -0
  69. /package/src/router/transition/{hookRegistry.js → hook-registry.js} +0 -0
  70. /package/src/router/transition/{rejectFactory.js → reject-factory.js} +0 -0
  71. /package/src/router/{viewScroll.js → view-scroll.js} +0 -0
@@ -0,0 +1,217 @@
1
+ import { dealoc } from "../../src/jqLite";
2
+ import { Angular } from "../../src/loader";
3
+ import { publishExternalAPI } from "../../src/public";
4
+ import { wait } from "../test-utils";
5
+
6
+ describe("view hooks", () => {
7
+ let app,
8
+ $state,
9
+ $q,
10
+ $timeout,
11
+ log = "";
12
+ class ctrl {
13
+ constructor() {
14
+ this.data = "DATA";
15
+ }
16
+ }
17
+
18
+ const component = {
19
+ bindings: { cmpdata: "<" },
20
+ template: "{{$ctrl.cmpdata}}",
21
+ };
22
+
23
+ beforeEach(() => {
24
+ dealoc(document.getElementById("dummy"));
25
+ window.angular = new Angular();
26
+ publishExternalAPI();
27
+ app = window.angular
28
+ .module("defaultModule", ["ui.router"])
29
+ .config(($stateProvider) => {
30
+ $stateProvider.state({ name: "foo", url: "/foo", component: "foo" });
31
+ $stateProvider.state({ name: "bar", url: "/bar", component: "bar" });
32
+ $stateProvider.state({ name: "baz", url: "/baz", component: "baz" });
33
+ $stateProvider.state({ name: "redirect", redirectTo: "baz" });
34
+ })
35
+ .component(
36
+ "foo",
37
+ Object.assign({}, Object.assign(component, { controller: ctrl })),
38
+ )
39
+ .component("bar", Object.assign({}, component))
40
+ .component("baz", Object.assign({}, component));
41
+
42
+ let $injector = window.angular.bootstrap(document.getElementById("dummy"), [
43
+ "defaultModule",
44
+ ]);
45
+
46
+ $injector.invoke((_$state_, _$q_, _$timeout_, $compile, $rootScope) => {
47
+ $state = _$state_;
48
+ $q = _$q_;
49
+ $timeout = _$timeout_;
50
+ $compile("<div><ui-view></ui-view></div>")($rootScope.$new());
51
+ });
52
+ });
53
+
54
+ describe("uiCanExit", () => {
55
+ beforeEach(() => {
56
+ log = "";
57
+ });
58
+
59
+ const initial = async () => {
60
+ $state.go("foo");
61
+ await wait(10);
62
+ expect(log).toBe("");
63
+ expect($state.current.name).toBe("foo");
64
+ };
65
+
66
+ it("can cancel a transition that would exit the view's state by returning false", async () => {
67
+ $state.defaultErrorHandler(function () {});
68
+ ctrl.prototype.uiCanExit = function () {
69
+ log += "canexit;";
70
+ return false;
71
+ };
72
+ await initial();
73
+ $state.go("bar");
74
+ expect(log).toBe("canexit;");
75
+ expect($state.current.name).toBe("foo");
76
+ });
77
+
78
+ it("can allow the transition by returning true", async () => {
79
+ ctrl.prototype.uiCanExit = function () {
80
+ log += "canexit;";
81
+ return true;
82
+ };
83
+ await initial();
84
+
85
+ $state.go("bar");
86
+ await wait(10);
87
+ expect(log).toBe("canexit;");
88
+ expect($state.current.name).toBe("bar");
89
+ });
90
+
91
+ it("can allow the transition by returning nothing", async () => {
92
+ ctrl.prototype.uiCanExit = function () {
93
+ log += "canexit;";
94
+ };
95
+ await initial();
96
+
97
+ $state.go("bar");
98
+ await wait(10);
99
+ expect(log).toBe("canexit;");
100
+ expect($state.current.name).toBe("bar");
101
+ });
102
+
103
+ it("can redirect the transition", async () => {
104
+ ctrl.prototype.uiCanExit = function (trans) {
105
+ log += "canexit;";
106
+ return trans.router.stateService.target("baz");
107
+ };
108
+ await initial();
109
+
110
+ $state.go("bar");
111
+ await wait(10);
112
+ expect(log).toBe("canexit;");
113
+ expect($state.current.name).toBe("baz");
114
+ });
115
+
116
+ it("can cancel the transition by returning a rejected promise", async () => {
117
+ ctrl.prototype.uiCanExit = function () {
118
+ log += "canexit;";
119
+ return $q.reject("nope");
120
+ };
121
+ await initial();
122
+
123
+ $state.defaultErrorHandler(function () {});
124
+ $state.go("bar");
125
+ await wait(10);
126
+ expect(log).toBe("canexit;");
127
+ expect($state.current.name).toBe("foo");
128
+ });
129
+
130
+ it("can wait for a promise and then reject the transition", async () => {
131
+ $state.defaultErrorHandler(function () {});
132
+ ctrl.prototype.uiCanExit = function () {
133
+ log += "canexit;";
134
+ return $timeout(() => {
135
+ log += "delay;";
136
+ return false;
137
+ }, 1);
138
+ };
139
+ await initial();
140
+
141
+ $state.go("bar");
142
+ await wait(10);
143
+ expect(log).toBe("canexit;delay;");
144
+ expect($state.current.name).toBe("foo");
145
+ });
146
+
147
+ it("can wait for a promise and then allow the transition", async () => {
148
+ ctrl.prototype.uiCanExit = function () {
149
+ log += "canexit;";
150
+ return $timeout(() => {
151
+ log += "delay;";
152
+ }, 1);
153
+ };
154
+ await initial();
155
+
156
+ $state.go("bar");
157
+ await wait(10);
158
+ expect(log).toBe("canexit;delay;");
159
+ expect($state.current.name).toBe("bar");
160
+ });
161
+
162
+ it("has 'this' bound to the controller", async () => {
163
+ ctrl.prototype.uiCanExit = function () {
164
+ log += this.data;
165
+ };
166
+ await initial();
167
+
168
+ $state.go("bar");
169
+ await wait(10);
170
+ expect(log).toBe("DATA");
171
+ expect($state.current.name).toBe("bar");
172
+ });
173
+
174
+ it("receives the new Transition as the first argument", async () => {
175
+ const _state = $state;
176
+ ctrl.prototype.uiCanExit = function (trans) {
177
+ log += "canexit;";
178
+ expect(typeof trans.treeChanges).toBe("function");
179
+ expect(trans.injector().get("$state")).toBe(_state);
180
+ };
181
+ await initial();
182
+
183
+ $state.go("bar");
184
+ await wait(10);
185
+ expect(log).toBe("canexit;");
186
+ expect($state.current.name).toBe("bar");
187
+ });
188
+
189
+ // Test for https://github.com/angular-ui/ui-router/issues/3308
190
+ it("should trigger once when answered truthy even if redirected", async () => {
191
+ ctrl.prototype.uiCanExit = function () {
192
+ log += "canexit;";
193
+ return true;
194
+ };
195
+ await initial();
196
+
197
+ $state.go("redirect");
198
+ await wait(10);
199
+ expect(log).toBe("canexit;");
200
+ expect($state.current.name).toBe("baz");
201
+ });
202
+
203
+ // Test for https://github.com/angular-ui/ui-router/issues/3308
204
+ it("should trigger only once if returns a redirect", async () => {
205
+ ctrl.prototype.uiCanExit = function () {
206
+ log += "canexit;";
207
+ return $state.target("bar");
208
+ };
209
+ await initial();
210
+
211
+ $state.go("redirect");
212
+ await wait(10);
213
+ expect(log).toBe("canexit;");
214
+ expect($state.current.name).toBe("bar");
215
+ });
216
+ });
217
+ });
@@ -0,0 +1,77 @@
1
+ import { dealoc } from "../../src/jqLite";
2
+ import { Angular } from "../../src/loader";
3
+ import { publishExternalAPI } from "../../src/public";
4
+ import { wait } from "../test-utils";
5
+
6
+ describe("uiView", () => {
7
+ describe("scrollIntoView", () => {
8
+ let elem, $anchorScroll, $uiViewScroll, $timeout;
9
+
10
+ beforeEach(() => {
11
+ dealoc(document.getElementById("dummy"));
12
+ window.angular = new Angular();
13
+ publishExternalAPI();
14
+ window.angular.module("defaultModule", ["ui.router"]);
15
+ let $injector = window.angular.bootstrap(
16
+ document.getElementById("dummy"),
17
+ ["defaultModule"],
18
+ );
19
+
20
+ $injector.invoke((_$uiViewScroll_, _$timeout_, _$anchorScroll_) => {
21
+ $anchorScroll = _$anchorScroll_;
22
+ $uiViewScroll = _$uiViewScroll_;
23
+ $timeout = _$timeout_;
24
+ });
25
+ elem = [{ scrollIntoView: jasmine.createSpy("scrollIntoView") }];
26
+ });
27
+
28
+ it("should scroll element into view after timeout", async () => {
29
+ $uiViewScroll(elem);
30
+ expect(elem[0].scrollIntoView).not.toHaveBeenCalled();
31
+
32
+ await wait(10);
33
+ expect(elem[0].scrollIntoView).toHaveBeenCalled();
34
+ });
35
+
36
+ it("should return the promise from the timeout", async () => {
37
+ const promise = $uiViewScroll(elem);
38
+
39
+ await wait(10);
40
+ expect(elem[0].scrollIntoView).toHaveBeenCalled();
41
+ expect(promise).toBeDefined();
42
+ });
43
+ });
44
+
45
+ describe("useAnchorScroll", () => {
46
+ let elem, $anchorScroll, $uiViewScroll;
47
+
48
+ beforeEach(() => {
49
+ dealoc(document.getElementById("dummy"));
50
+ window.angular = new Angular();
51
+ publishExternalAPI();
52
+ let module = window.angular.module("defaultModule", ["ui.router"]);
53
+ module.config(($provide, $uiViewScrollProvider) => {
54
+ $provide.decorator("$anchorScroll", function ($delegate) {
55
+ return jasmine.createSpy("$anchorScroll");
56
+ });
57
+ $uiViewScrollProvider.useAnchorScroll();
58
+ });
59
+
60
+ let $injector = window.angular.bootstrap(
61
+ document.getElementById("dummy"),
62
+ ["defaultModule"],
63
+ );
64
+
65
+ $injector.invoke((_$uiViewScroll_, _$anchorScroll_) => {
66
+ $anchorScroll = _$anchorScroll_;
67
+ $uiViewScroll = _$uiViewScroll_;
68
+ });
69
+ elem = [{ scrollIntoView: jasmine.createSpy("scrollIntoView") }];
70
+ });
71
+
72
+ it("should call $anchorScroll", () => {
73
+ $uiViewScroll();
74
+ expect($anchorScroll).toHaveBeenCalled();
75
+ });
76
+ });
77
+ });
@@ -0,0 +1,117 @@
1
+ import { dealoc } from "../../src/jqLite";
2
+ import { Angular } from "../../src/loader";
3
+ import { publishExternalAPI } from "../../src/public";
4
+ import { curry } from "../../src/shared/hof";
5
+ import { StateMatcher } from "../../src/router/state/state-matcher";
6
+ import { StateBuilder } from "../../src/router/state/state-builder";
7
+ import { StateObject } from "../../src/router/state/state-object";
8
+ import { ViewService } from "../../src/router/view/view";
9
+ import {
10
+ ng1ViewsBuilder,
11
+ getNg1ViewConfigFactory,
12
+ } from "../../src/router/state/views";
13
+ import { PathNode } from "../../src/router/path/path-node";
14
+ import { PathUtils } from "../../src/router/path/path-utils";
15
+ import { tail } from "../../src/shared/common";
16
+ import { wait } from "../test-utils";
17
+
18
+ describe("view", () => {
19
+ let scope,
20
+ $compile,
21
+ $injector,
22
+ elem,
23
+ $controllerProvider,
24
+ $urlMatcherFactoryProvider,
25
+ $view,
26
+ $q;
27
+ let root, states;
28
+
29
+ beforeEach(() => {
30
+ dealoc(document.getElementById("dummy"));
31
+ window.angular = new Angular();
32
+ publishExternalAPI();
33
+
34
+ window.angular
35
+ .module("defaultModule", ["ui.router"])
36
+ .config(
37
+ function (
38
+ _$provide_,
39
+ _$controllerProvider_,
40
+ _$urlMatcherFactoryProvider_,
41
+ ) {
42
+ _$provide_.factory("foo", () => {
43
+ return "Foo";
44
+ });
45
+ $controllerProvider = _$controllerProvider_;
46
+ $urlMatcherFactoryProvider = _$urlMatcherFactoryProvider_;
47
+ },
48
+ );
49
+ $injector = window.angular.bootstrap(document.getElementById("dummy"), [
50
+ "defaultModule",
51
+ ]);
52
+
53
+ $injector.invoke(($rootScope, _$compile_, _$injector_, _$view_, _$q_) => {
54
+ scope = $rootScope.$new();
55
+ $compile = _$compile_;
56
+ $injector = _$injector_;
57
+ elem = angular.element("<div>");
58
+
59
+ states = {};
60
+ const matcher = new StateMatcher(states);
61
+ const stateBuilder = new StateBuilder(
62
+ matcher,
63
+ $urlMatcherFactoryProvider,
64
+ );
65
+ stateBuilder.builder("views", ng1ViewsBuilder);
66
+ register = registerState(states, stateBuilder);
67
+ root = register({ name: "" });
68
+ $q = _$q_;
69
+ $view = _$view_;
70
+ });
71
+ });
72
+
73
+ let register;
74
+ const registerState = curry(function (_states, stateBuilder, config) {
75
+ const state = StateObject.create(config);
76
+ const built = stateBuilder.build(state);
77
+ return (_states[built.name] = built);
78
+ });
79
+
80
+ describe("controller handling", () => {
81
+ let state, path, ctrlExpression;
82
+ beforeEach(() => {
83
+ ctrlExpression = null;
84
+ const stateDeclaration = {
85
+ name: "foo",
86
+ template: "test",
87
+ controllerProvider: [
88
+ "foo",
89
+ function (/* $stateParams, */ foo) {
90
+ // todo: reimplement localized $stateParams
91
+ ctrlExpression =
92
+ /* $stateParams.type + */ foo + "Controller as foo";
93
+ return ctrlExpression;
94
+ },
95
+ ],
96
+ };
97
+
98
+ state = register(stateDeclaration);
99
+ const $view = new ViewService(null);
100
+ $view._pluginapi._viewConfigFactory("ng1", getNg1ViewConfigFactory());
101
+
102
+ const _states = [root, state];
103
+ path = _states.map((_state) => new PathNode(_state));
104
+ PathUtils.applyViewConfigs($view, path, _states);
105
+ });
106
+
107
+ it("uses the controllerProvider to get controller dynamically", async () => {
108
+ $controllerProvider.register("AcmeFooController", () => {});
109
+ elem.append($compile("<div><ui-view></ui-view></div>")(scope));
110
+
111
+ const view = tail(path).views[0];
112
+ view.load();
113
+ await wait(10);
114
+ expect(ctrlExpression).toEqual("FooController as foo");
115
+ });
116
+ });
117
+ });
@@ -1,11 +1,20 @@
1
1
  import { jqLite } from "../src/jqLite";
2
2
 
3
+ /**
4
+ * @param {HTMLElement} element
5
+ * @param {string} event
6
+ */
3
7
  export function browserTrigger(element, event) {
4
8
  jqLite(element)[0].dispatchEvent(
5
9
  new Event(event, { bubbles: true, cancelable: true }),
6
10
  );
7
11
  }
8
12
 
13
+ /**
14
+ *
15
+ * @param {number} t milliseconds to wait
16
+ * @returns
17
+ */
9
18
  export function wait(t) {
10
19
  return new Promise((resolve, _) => setTimeout(resolve, t));
11
20
  }
@@ -1,5 +1,5 @@
1
1
  /** @publicapi @module ng1 */ /** */
2
- import { Obj } from "./core";
2
+ import { Obj } from "../core";
3
3
  /** @hidden */
4
4
  export declare const resolveFactory: () => {
5
5
  /**
@@ -1,5 +1,5 @@
1
1
  /** @publicapi @module ng1 */ /** */
2
- import { StateObject, TransitionStateHookFn } from "./core";
2
+ import { StateObject, TransitionStateHookFn } from "../core";
3
3
  /**
4
4
  * This is a [[StateBuilder.builder]] function for angular1 `onEnter`, `onExit`,
5
5
  * `onRetain` callback hooks on a [[Ng1StateDeclaration]].
@@ -1,4 +1,3 @@
1
- /** @publicapi @module ng1 */ /** */
2
1
  import {
3
2
  StateObject,
4
3
  ViewConfig,
@@ -6,7 +5,7 @@ import {
6
5
  PathNode,
7
6
  ResolveContext,
8
7
  IInjectable,
9
- } from "./core";
8
+ } from "../core";
10
9
  import { Ng1ViewDeclaration } from "../interface";
11
10
  import { TemplateFactory } from "../templateFactory";
12
11
  /** @internalapi */
File without changes
File without changes
File without changes