@angular-wave/angular.ts 0.8.4 → 0.9.1
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.
- package/@types/core/scope/scope.d.ts +1 -4
- package/@types/interface.d.ts +17 -3
- package/@types/shared/interface.d.ts +17 -0
- package/@types/shared/utils.d.ts +4 -19
- package/dist/angular-ts.esm.js +42 -160
- package/dist/angular-ts.umd.js +42 -160
- package/dist/angular-ts.umd.min.js +1 -1
- package/docs/layouts/shortcodes/version.html +1 -1
- package/docs/static/typedoc/assets/hierarchy.js +1 -1
- package/docs/static/typedoc/assets/main.js +2 -2
- package/docs/static/typedoc/assets/navigation.js +1 -1
- package/docs/static/typedoc/assets/search.js +1 -1
- package/docs/static/typedoc/assets/style.css +2 -9
- package/docs/static/typedoc/classes/Location.html +20 -20
- package/docs/static/typedoc/classes/LocationProvider.html +5 -5
- package/docs/static/typedoc/classes/LogProvider.html +3 -3
- package/docs/static/typedoc/classes/PubSub.html +21 -21
- package/docs/static/typedoc/classes/PubSubProvider.html +1 -1
- package/docs/static/typedoc/classes/TemplateCacheProvider.html +2 -2
- package/docs/static/typedoc/hierarchy.html +1 -1
- package/docs/static/typedoc/index.html +1 -1
- package/docs/static/typedoc/interfaces/ChangesObject.html +3 -3
- package/docs/static/typedoc/interfaces/ComponentOptions.html +8 -8
- package/docs/static/typedoc/interfaces/Controller.html +6 -6
- package/docs/static/typedoc/interfaces/DefaultPorts.html +1 -1
- package/docs/static/typedoc/interfaces/Directive.html +18 -18
- package/docs/static/typedoc/interfaces/DirectivePrePost.html +1 -1
- package/docs/static/typedoc/interfaces/Html5Mode.html +1 -1
- package/docs/static/typedoc/interfaces/HttpProviderDefaults.html +7 -7
- package/docs/static/typedoc/interfaces/HttpService.html +21 -21
- package/docs/static/typedoc/interfaces/LogService.html +6 -6
- package/docs/static/typedoc/interfaces/NgModelController.html +15 -15
- package/docs/static/typedoc/interfaces/NgModelOptions.html +8 -8
- package/docs/static/typedoc/interfaces/Provider.html +17 -17
- package/docs/static/typedoc/interfaces/RequestConfig.html +15 -15
- package/docs/static/typedoc/interfaces/RequestShortcutConfig.html +11 -11
- package/docs/static/typedoc/interfaces/ServiceProvider.html +1 -1
- package/docs/static/typedoc/interfaces/TemplateCache.html +1 -1
- package/docs/static/typedoc/interfaces/TranscludeFunctionObject.html +4 -4
- package/docs/static/typedoc/interfaces/UrlParts.html +4 -4
- package/docs/static/typedoc/types/AnnotatedFactory.html +1 -1
- package/docs/static/typedoc/types/CloneAttachFunction.html +1 -1
- package/docs/static/typedoc/types/ControllerConstructor.html +1 -1
- package/docs/static/typedoc/types/DirectiveCompileFn.html +1 -1
- package/docs/static/typedoc/types/DirectiveController.html +1 -1
- package/docs/static/typedoc/types/DirectiveFactoryFn.html +1 -1
- package/docs/static/typedoc/types/DirectiveLinkFn.html +1 -1
- package/docs/static/typedoc/types/Expression.html +1 -1
- package/docs/static/typedoc/types/FilterFactory.html +1 -1
- package/docs/static/typedoc/types/FilterFn.html +1 -1
- package/docs/static/typedoc/types/Injectable.html +1 -1
- package/docs/static/typedoc/types/InjectableFactory.html +1 -1
- package/docs/static/typedoc/types/LogCall.html +1 -1
- package/docs/static/typedoc/types/LogServiceFactory.html +1 -1
- package/docs/static/typedoc/types/OnChangesObject.html +1 -1
- package/docs/static/typedoc/types/SwapModeType.html +1 -1
- package/docs/static/typedoc/types/TController.html +1 -1
- package/docs/static/typedoc/types/UrlChangeListener.html +4 -4
- package/docs/static/typedoc/variables/SwapMode.html +10 -10
- package/legacy.d.ts +0 -82
- package/package.json +2 -2
- package/src/animations/animate-js.js +2 -1
- package/src/animations/animate-queue.js +7 -6
- package/src/core/parse/interpreter.js +11 -6
- package/src/core/parse/parse.spec.js +6 -8
- package/src/core/scope/scope.js +10 -12
- package/src/core/scope/scope.spec.js +4 -4
- package/src/directive/http/form-router-test.html +44 -0
- package/src/directive/options/options-example.html +7 -3
- package/src/directive/options/options.js +1 -0
- package/src/directive/options/options.spec.js +117 -170
- package/src/interface.ts +20 -3
- package/src/router/directives/view-directive.js +0 -1
- package/src/router/directives/view-directive.spec.js +10 -9
- package/src/router/resolve/resolve-context.js +0 -19
- package/src/router/state/state-registry.js +3 -10
- package/src/router/state/state-service.js +5 -5
- package/src/router/transition/transition.js +1 -86
- package/src/router/view-hook.spec.js +1 -1
- package/src/shared/interface.ts +19 -0
- package/src/shared/utils.js +3 -12
- package/tsconfig.types.json +2 -2
- package/@types/angular.d.ts +0 -150
- package/@types/animations/animate-cache.d.ts +0 -50
- package/@types/animations/animate-children-directive.d.ts +0 -10
- package/@types/animations/animate-css-driver.d.ts +0 -18
- package/@types/animations/animate-css.d.ts +0 -18
- package/@types/animations/animate-js-driver.d.ts +0 -14
- package/@types/animations/animate-js.d.ts +0 -23
- package/@types/animations/animate-queue.d.ts +0 -28
- package/@types/animations/animate-runner.d.ts +0 -31
- package/@types/animations/animate-swap.d.ts +0 -9
- package/@types/animations/animate.d.ts +0 -450
- package/@types/animations/animation.d.ts +0 -14
- package/@types/animations/interface.d.ts +0 -17
- package/@types/animations/raf-scheduler.d.ts +0 -37
- package/@types/animations/shared.d.ts +0 -74
- package/@types/core/compile/compile.d.ts +0 -201
- package/@types/core/controller/controller.d.ts +0 -54
- package/@types/core/di/injector.d.ts +0 -22
- package/@types/core/filter/filter.d.ts +0 -23
- package/@types/core/interpolate/interpolate.d.ts +0 -38
- package/@types/core/parse/ast/ast-node.d.ts +0 -56
- package/@types/core/parse/ast/ast.d.ts +0 -164
- package/@types/core/parse/lexer/lexer.d.ts +0 -119
- package/@types/core/parse/lexer/token.d.ts +0 -17
- package/@types/core/parse/parse.d.ts +0 -33
- package/@types/core/parse/parser/parser.d.ts +0 -41
- package/@types/core/sanitize/interface.d.ts +0 -10
- package/@types/core/sanitize/sanitize-uri.d.ts +0 -40
- package/@types/directive/aria/aria.d.ts +0 -104
- package/@types/directive/attrs/attrs.d.ts +0 -8
- package/@types/directive/bind/bind.d.ts +0 -18
- package/@types/directive/channel/channel.d.ts +0 -10
- package/@types/directive/class/class.d.ts +0 -3
- package/@types/directive/cloak/cloak.d.ts +0 -4
- package/@types/directive/controller/controller.d.ts +0 -4
- package/@types/directive/events/events.d.ts +0 -21
- package/@types/directive/form/form.d.ts +0 -264
- package/@types/directive/http/http.d.ts +0 -46
- package/@types/directive/if/if.d.ts +0 -10
- package/@types/directive/include/include.d.ts +0 -28
- package/@types/directive/init/init.d.ts +0 -4
- package/@types/directive/input/input.d.ts +0 -70
- package/@types/directive/messages/messages.d.ts +0 -63
- package/@types/directive/model/model.d.ts +0 -515
- package/@types/directive/model-options/model-options.d.ts +0 -56
- package/@types/directive/non-bindable/non-bindable.d.ts +0 -4
- package/@types/directive/observe/observe.d.ts +0 -9
- package/@types/directive/options/options.d.ts +0 -13
- package/@types/directive/ref/ref.d.ts +0 -11
- package/@types/directive/repeat/repeat.d.ts +0 -11
- package/@types/directive/script/script.d.ts +0 -10
- package/@types/directive/select/select.d.ts +0 -15
- package/@types/directive/setter/setter.d.ts +0 -12
- package/@types/directive/show-hide/show-hide.d.ts +0 -19
- package/@types/directive/style/style.d.ts +0 -4
- package/@types/directive/switch/switch.d.ts +0 -18
- package/@types/directive/transclude/transclude.d.ts +0 -10
- package/@types/directive/validators/validators.d.ts +0 -149
- package/@types/filters/filter.d.ts +0 -4
- package/@types/filters/filters.d.ts +0 -38
- package/@types/filters/limit-to.d.ts +0 -4
- package/@types/filters/order-by.d.ts +0 -7
- package/@types/index.d.ts +0 -2
- package/@types/ng.d.ts +0 -8
- package/@types/router/common/trace.d.ts +0 -66
- package/@types/router/directives/state-directives.d.ts +0 -46
- package/@types/router/directives/view-directive.d.ts +0 -138
- package/@types/router/glob/glob.d.ts +0 -81
- package/@types/router/hooks/core-resolvables.d.ts +0 -2
- package/@types/router/hooks/ignored-transition.d.ts +0 -1
- package/@types/router/hooks/invalid-transition.d.ts +0 -1
- package/@types/router/hooks/lazy-load.d.ts +0 -42
- package/@types/router/hooks/on-enter-exit-retain.d.ts +0 -3
- package/@types/router/hooks/redirect-to.d.ts +0 -4
- package/@types/router/hooks/resolve.d.ts +0 -4
- package/@types/router/hooks/update-globals.d.ts +0 -1
- package/@types/router/hooks/url.d.ts +0 -5
- package/@types/router/hooks/views.d.ts +0 -5
- package/@types/router/params/interface.d.ts +0 -606
- package/@types/router/params/param-factory.d.ts +0 -16
- package/@types/router/params/param-type.d.ts +0 -59
- package/@types/router/params/param-types.d.ts +0 -36
- package/@types/router/params/param.d.ts +0 -71
- package/@types/router/params/state-params.d.ts +0 -12
- package/@types/router/path/path-node.d.ts +0 -38
- package/@types/router/path/path-utils.d.ts +0 -88
- package/@types/router/resolve/interface.d.ts +0 -200
- package/@types/router/resolve/resolvable.d.ts +0 -50
- package/@types/router/resolve/resolve-context.d.ts +0 -102
- package/@types/router/router.d.ts +0 -47
- package/@types/router/state/interface.d.ts +0 -983
- package/@types/router/state/state-builder.d.ts +0 -95
- package/@types/router/state/state-matcher.d.ts +0 -7
- package/@types/router/state/state-object.d.ts +0 -83
- package/@types/router/state/state-queue-manager.d.ts +0 -29
- package/@types/router/state/state-registry.d.ts +0 -134
- package/@types/router/state/state-service.d.ts +0 -419
- package/@types/router/state/target-state.d.ts +0 -102
- package/@types/router/state/views.d.ts +0 -58
- package/@types/router/state-filters.d.ts +0 -39
- package/@types/router/template-factory.d.ts +0 -117
- package/@types/router/transition/hook-builder.d.ts +0 -45
- package/@types/router/transition/hook-registry.d.ts +0 -102
- package/@types/router/transition/interface.d.ts +0 -880
- package/@types/router/transition/reject-factory.d.ts +0 -43
- package/@types/router/transition/transition-event-type.d.ts +0 -24
- package/@types/router/transition/transition-hook.d.ts +0 -86
- package/@types/router/transition/transition-service.d.ts +0 -116
- package/@types/router/transition/transition.d.ts +0 -396
- package/@types/router/url/url-config.d.ts +0 -99
- package/@types/router/url/url-matcher.d.ts +0 -174
- package/@types/router/url/url-rule.d.ts +0 -161
- package/@types/router/url/url-rules.d.ts +0 -249
- package/@types/router/url/url-service.d.ts +0 -254
- package/@types/router/view/interface.d.ts +0 -44
- package/@types/router/view/view.d.ts +0 -149
- package/@types/router/view-scroll.d.ts +0 -10
- package/@types/services/anchor-scroll.d.ts +0 -25
- package/@types/services/cookie-reader.d.ts +0 -4
- package/@types/services/http/http.d.ts +0 -134
- package/@types/services/http-backend/http-backend.d.ts +0 -58
- package/@types/services/sce/sce.d.ts +0 -238
- package/@types/services/template-request.d.ts +0 -55
- package/@types/shared/common.d.ts +0 -197
- package/@types/shared/hof.d.ts +0 -108
- package/@types/shared/predicates.d.ts +0 -17
- package/@types/shared/queue.d.ts +0 -64
- package/@types/shared/strings.d.ts +0 -58
- package/@types/shared/test-utils.d.ts +0 -18
- package/docs/static/typedoc/classes/NgModule.html +0 -32
- package/src/router/params/README.md +0 -8
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<title>AngularTS</title>
|
|
6
|
+
<link rel="shortcut icon" type="image/png" href="images/favicon.ico" />
|
|
7
|
+
<script type="module" src="../../index.js"></script>
|
|
8
|
+
<script>
|
|
9
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
10
|
+
window.angular.module("router", []).config([
|
|
11
|
+
"$stateProvider",
|
|
12
|
+
"$locationProvider",
|
|
13
|
+
($stateProvider, $locationProvider) => {
|
|
14
|
+
$locationProvider.html5ModeConf = {
|
|
15
|
+
enabled: true,
|
|
16
|
+
requireBase: false,
|
|
17
|
+
rewriteLinks: false,
|
|
18
|
+
};
|
|
19
|
+
$stateProvider
|
|
20
|
+
.state({
|
|
21
|
+
name: "home",
|
|
22
|
+
url: "/src/directive/http/form-router-test.html",
|
|
23
|
+
template: `
|
|
24
|
+
<h1>Home</h1>
|
|
25
|
+
<form ng-post="/mock/posthtml" state-success="page1">
|
|
26
|
+
<input name="name" />
|
|
27
|
+
<button type="submit">Test</button>
|
|
28
|
+
</form>
|
|
29
|
+
`,
|
|
30
|
+
})
|
|
31
|
+
.state({
|
|
32
|
+
name: "page1",
|
|
33
|
+
url: "/src/directive/http/page1",
|
|
34
|
+
template: "<h3>Its the NG-Router hello world app!</h3>",
|
|
35
|
+
});
|
|
36
|
+
},
|
|
37
|
+
]);
|
|
38
|
+
});
|
|
39
|
+
</script>
|
|
40
|
+
</head>
|
|
41
|
+
<body ng-app="router">
|
|
42
|
+
<ng-view></ng-view>
|
|
43
|
+
</body>
|
|
44
|
+
</html>
|
|
@@ -6,8 +6,12 @@
|
|
|
6
6
|
<link rel="shortcut icon" type="image/png" href="images/favicon.ico" />
|
|
7
7
|
<script type="module" src="/src/index.js"></script>
|
|
8
8
|
</head>
|
|
9
|
-
<body ng-app ng-init=
|
|
10
|
-
<
|
|
11
|
-
|
|
9
|
+
<body ng-app ng-init="values = [{ name: 0 }, { name: 1 }, { name: 2 }]">
|
|
10
|
+
<form ng-init="selected = values[0]">
|
|
11
|
+
<select
|
|
12
|
+
ng-model="selected"
|
|
13
|
+
ng-options="value.name for value in values"
|
|
14
|
+
></select>
|
|
15
|
+
</form>
|
|
12
16
|
</body>
|
|
13
17
|
</html>
|
|
@@ -20,6 +20,7 @@ const optGroupTemplate = document.createElement("optgroup");
|
|
|
20
20
|
|
|
21
21
|
const NG_OPTIONS_REGEXP =
|
|
22
22
|
/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([$\w][$\w]*)|(?:\(\s*([$\w][$\w]*)\s*,\s*([$\w][$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/;
|
|
23
|
+
|
|
23
24
|
// 1: value expression (valueFn)
|
|
24
25
|
// 2: label expression (displayFn)
|
|
25
26
|
// 3: group by expression (groupByFn)
|
|
@@ -22,7 +22,8 @@ describe("ngOptions", () => {
|
|
|
22
22
|
let errors = [];
|
|
23
23
|
|
|
24
24
|
async function compile(html) {
|
|
25
|
-
|
|
25
|
+
element.innerHTML = `<form name="form">${html}</form>`;
|
|
26
|
+
formElement = $compile(element)(scope);
|
|
26
27
|
await wait();
|
|
27
28
|
element = formElement.querySelector("select");
|
|
28
29
|
ngModelCtrl = getController(element, "ngModel");
|
|
@@ -228,9 +229,9 @@ describe("ngOptions", () => {
|
|
|
228
229
|
});
|
|
229
230
|
|
|
230
231
|
afterEach(() => {
|
|
231
|
-
scope.$destroy(); // disables unknown option work during destruction
|
|
232
|
-
dealoc(formElement);
|
|
233
|
-
ngModelCtrl = null;
|
|
232
|
+
// scope.$destroy(); // disables unknown option work during destruction
|
|
233
|
+
// dealoc(formElement);
|
|
234
|
+
// ngModelCtrl = null;
|
|
234
235
|
});
|
|
235
236
|
|
|
236
237
|
async function createSelect(attrs, blank, unknown) {
|
|
@@ -295,14 +296,10 @@ describe("ngOptions", () => {
|
|
|
295
296
|
});
|
|
296
297
|
|
|
297
298
|
fit("should render a list", async () => {
|
|
298
|
-
|
|
299
|
-
'<select ng-model="selected" ng-options="value.name for value in values"></select>'
|
|
300
|
-
|
|
301
|
-
await wait();
|
|
302
|
-
scope = injector.get("$rootScope");
|
|
303
|
-
await wait();
|
|
299
|
+
compile(
|
|
300
|
+
'<select ng-model="selected" ng-options="value.name for value in values"></select>',
|
|
301
|
+
);
|
|
304
302
|
scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
|
|
305
|
-
await wait();
|
|
306
303
|
scope.selected = scope.values[1];
|
|
307
304
|
await wait();
|
|
308
305
|
const options = element.querySelectorAll("option");
|
|
@@ -314,14 +311,10 @@ describe("ngOptions", () => {
|
|
|
314
311
|
});
|
|
315
312
|
|
|
316
313
|
fit("should not include properties with non-numeric keys in array-like collections when using array syntax", async () => {
|
|
317
|
-
|
|
318
|
-
'<select ng-model="selected" ng-options="value for value in values"></select>'
|
|
319
|
-
|
|
320
|
-
scope =
|
|
321
|
-
await wait();
|
|
322
|
-
scope.$apply(() => {
|
|
323
|
-
scope.values = { 0: "X", 1: "Y", 2: "Z", a: "A", length: 3 };
|
|
324
|
-
});
|
|
314
|
+
compile(
|
|
315
|
+
'<select ng-model="selected" ng-options="value for value in values"></select>',
|
|
316
|
+
);
|
|
317
|
+
scope.values = { 0: "X", 1: "Y", 2: "Z", a: "A", length: 3 };
|
|
325
318
|
await wait();
|
|
326
319
|
scope.selected = scope.values[1];
|
|
327
320
|
await wait();
|
|
@@ -333,15 +326,11 @@ describe("ngOptions", () => {
|
|
|
333
326
|
});
|
|
334
327
|
|
|
335
328
|
fit("should include properties with non-numeric keys in array-like collections when using object syntax", async () => {
|
|
336
|
-
|
|
337
|
-
'<select ng-model="selected" ng-options="value for (key, value) in values"></select>'
|
|
338
|
-
|
|
339
|
-
scope =
|
|
340
|
-
|
|
341
|
-
scope.$apply(() => {
|
|
342
|
-
scope.values = { 0: "X", 1: "Y", 2: "Z", a: "A", length: 3 };
|
|
343
|
-
scope.selected = scope.values[1];
|
|
344
|
-
});
|
|
329
|
+
compile(
|
|
330
|
+
'<select ng-model="selected" ng-options="value for (key, value) in values"></select>',
|
|
331
|
+
);
|
|
332
|
+
scope.values = { 0: "X", 1: "Y", 2: "Z", a: "A", length: 3 };
|
|
333
|
+
scope.selected = scope.values[1];
|
|
345
334
|
await wait();
|
|
346
335
|
const options = element.querySelectorAll("option");
|
|
347
336
|
expect(options.length).toEqual(5);
|
|
@@ -353,16 +342,11 @@ describe("ngOptions", () => {
|
|
|
353
342
|
});
|
|
354
343
|
|
|
355
344
|
fit("should render an object", async () => {
|
|
356
|
-
|
|
357
|
-
'<select ng-model="selected" ng-options="value as key for (key, value) in object"></select>'
|
|
358
|
-
|
|
359
|
-
scope =
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
scope.$apply(() => {
|
|
363
|
-
scope.object = { red: "FF0000", green: "00FF00", blue: "0000FF" };
|
|
364
|
-
scope.selected = scope.object.green;
|
|
365
|
-
});
|
|
345
|
+
compile(
|
|
346
|
+
'<select ng-model="selected" ng-options="value as key for (key, value) in object"></select>',
|
|
347
|
+
);
|
|
348
|
+
scope.object = { red: "FF0000", green: "00FF00", blue: "0000FF" };
|
|
349
|
+
scope.selected = scope.object.green;
|
|
366
350
|
await wait();
|
|
367
351
|
|
|
368
352
|
let options = element.querySelectorAll("option");
|
|
@@ -383,10 +367,9 @@ describe("ngOptions", () => {
|
|
|
383
367
|
});
|
|
384
368
|
|
|
385
369
|
fit('should set the "selected" attribute and property on selected options', async () => {
|
|
386
|
-
|
|
387
|
-
'<select ng-model="selected" ng-options="option.id as option.display for option in values"></select>'
|
|
388
|
-
|
|
389
|
-
scope = injector.get("$rootScope");
|
|
370
|
+
compile(
|
|
371
|
+
'<select ng-model="selected" ng-options="option.id as option.display for option in values"></select>',
|
|
372
|
+
);
|
|
390
373
|
scope.values = [
|
|
391
374
|
{
|
|
392
375
|
id: "FF0000",
|
|
@@ -419,15 +402,14 @@ describe("ngOptions", () => {
|
|
|
419
402
|
});
|
|
420
403
|
|
|
421
404
|
fit("should render zero as a valid display value", async () => {
|
|
422
|
-
|
|
423
|
-
'<select ng-model="selected" ng-options="value.name for value in values"></select>'
|
|
424
|
-
|
|
425
|
-
|
|
405
|
+
compile(
|
|
406
|
+
'<select ng-model="selected" ng-options="value.name for value in values"></select>',
|
|
407
|
+
);
|
|
408
|
+
|
|
409
|
+
scope.values = [{ name: 0 }, { name: 1 }, { name: 2 }];
|
|
426
410
|
await wait();
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
scope.selected = scope.values[0];
|
|
430
|
-
});
|
|
411
|
+
|
|
412
|
+
scope.selected = scope.values[0];
|
|
431
413
|
await wait();
|
|
432
414
|
|
|
433
415
|
const options = element.querySelectorAll("option");
|
|
@@ -438,16 +420,11 @@ describe("ngOptions", () => {
|
|
|
438
420
|
});
|
|
439
421
|
|
|
440
422
|
fit("should not be set when an option is selected and options are set asynchronously", async () => {
|
|
441
|
-
|
|
442
|
-
'<select ng-model="model" ng-options="opt.id as opt.label for opt in options">'
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
injector = window.angular.bootstrap(element, ["myModule"]);
|
|
446
|
-
scope = injector.get("$rootScope");
|
|
447
|
-
scope.$apply(() => {
|
|
448
|
-
scope.model = 0;
|
|
449
|
-
});
|
|
423
|
+
compile(
|
|
424
|
+
'<select ng-model="model" ng-options="opt.id as opt.label for opt in options"></select>',
|
|
425
|
+
);
|
|
450
426
|
await wait();
|
|
427
|
+
scope.model = 0;
|
|
451
428
|
scope.options = [
|
|
452
429
|
{ id: 0, label: "x" },
|
|
453
430
|
{ id: 1, label: "y" },
|
|
@@ -460,22 +437,17 @@ describe("ngOptions", () => {
|
|
|
460
437
|
});
|
|
461
438
|
|
|
462
439
|
fit("should grow list", async () => {
|
|
463
|
-
|
|
464
|
-
'<select ng-model="selected" ng-options="value.name for value in values"></select>'
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
scope.$apply(() => {
|
|
469
|
-
scope.values = [];
|
|
470
|
-
});
|
|
440
|
+
compile(
|
|
441
|
+
'<select ng-model="selected" ng-options="value.name for value in values"></select>',
|
|
442
|
+
);
|
|
443
|
+
await wait();
|
|
444
|
+
scope.values = [];
|
|
471
445
|
await wait();
|
|
472
446
|
expect(element.querySelectorAll("option").length).toEqual(1); // because we add special unknown option
|
|
473
447
|
expect(element.querySelectorAll("option")[0]).toEqualUnknownOption();
|
|
474
448
|
|
|
475
|
-
scope
|
|
476
|
-
|
|
477
|
-
scope.selected = scope.values[0];
|
|
478
|
-
});
|
|
449
|
+
scope.values.push({ name: "A" });
|
|
450
|
+
scope.selected = scope.values[0];
|
|
479
451
|
await wait();
|
|
480
452
|
expect(element.querySelectorAll("option").length).toEqual(1);
|
|
481
453
|
expect(element.querySelectorAll("option")[0]).toEqualOption(
|
|
@@ -483,9 +455,7 @@ describe("ngOptions", () => {
|
|
|
483
455
|
"A",
|
|
484
456
|
);
|
|
485
457
|
|
|
486
|
-
scope
|
|
487
|
-
scope.values.push({ name: "B" });
|
|
488
|
-
});
|
|
458
|
+
scope.values.push({ name: "B" });
|
|
489
459
|
await wait();
|
|
490
460
|
expect(element.querySelectorAll("option").length).toEqual(2);
|
|
491
461
|
expect(element.querySelectorAll("option")[0]).toEqualOption(
|
|
@@ -499,21 +469,16 @@ describe("ngOptions", () => {
|
|
|
499
469
|
});
|
|
500
470
|
|
|
501
471
|
fit("should shrink list", async () => {
|
|
502
|
-
|
|
503
|
-
'<select ng-model="selected" ng-options="value.name for value in values"></select>'
|
|
504
|
-
|
|
505
|
-
scope = injector.get("$rootScope");
|
|
472
|
+
compile(
|
|
473
|
+
'<select ng-model="selected" ng-options="value.name for value in values"></select>',
|
|
474
|
+
);
|
|
506
475
|
await wait();
|
|
507
|
-
scope
|
|
508
|
-
|
|
509
|
-
scope.selected = scope.values[0];
|
|
510
|
-
});
|
|
476
|
+
scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
|
|
477
|
+
scope.selected = scope.values[0];
|
|
511
478
|
await wait();
|
|
512
479
|
expect(element.querySelectorAll("option").length).toEqual(3);
|
|
513
480
|
|
|
514
|
-
scope
|
|
515
|
-
scope.values.pop();
|
|
516
|
-
});
|
|
481
|
+
scope.values.pop();
|
|
517
482
|
await wait();
|
|
518
483
|
expect(element.querySelectorAll("option").length).toEqual(2);
|
|
519
484
|
expect(element.querySelectorAll("option")[0]).toEqualOption(
|
|
@@ -524,10 +489,7 @@ describe("ngOptions", () => {
|
|
|
524
489
|
scope.values[1],
|
|
525
490
|
"B",
|
|
526
491
|
);
|
|
527
|
-
|
|
528
|
-
scope.$apply(() => {
|
|
529
|
-
scope.values.pop();
|
|
530
|
-
});
|
|
492
|
+
scope.values.pop();
|
|
531
493
|
await wait();
|
|
532
494
|
|
|
533
495
|
expect(element.querySelectorAll("option").length).toEqual(1);
|
|
@@ -536,16 +498,14 @@ describe("ngOptions", () => {
|
|
|
536
498
|
"A",
|
|
537
499
|
);
|
|
538
500
|
|
|
539
|
-
scope
|
|
540
|
-
|
|
541
|
-
scope.selected = null;
|
|
542
|
-
});
|
|
501
|
+
scope.values.pop();
|
|
502
|
+
scope.selected = null;
|
|
543
503
|
await wait();
|
|
544
504
|
|
|
545
505
|
expect(element.querySelectorAll("option").length).toEqual(1); // we add back the special empty option
|
|
546
506
|
});
|
|
547
507
|
|
|
548
|
-
|
|
508
|
+
it("should shrink and then grow list", async () => {
|
|
549
509
|
element.innerHTML =
|
|
550
510
|
'<select ng-model="selected" ng-options="value.name for value in values"></select>';
|
|
551
511
|
injector = window.angular.bootstrap(element, ["myModule"]);
|
|
@@ -570,7 +530,7 @@ describe("ngOptions", () => {
|
|
|
570
530
|
expect(element.querySelectorAll("option").length).toEqual(3);
|
|
571
531
|
});
|
|
572
532
|
|
|
573
|
-
|
|
533
|
+
it("should update list", async () => {
|
|
574
534
|
element.innerHTML =
|
|
575
535
|
'<select ng-model="selected" ng-options="value.name for value in values"></select>';
|
|
576
536
|
injector = window.angular.bootstrap(element, ["myModule"]);
|
|
@@ -591,7 +551,7 @@ describe("ngOptions", () => {
|
|
|
591
551
|
expect(options[2]).toEqualOption(scope.values[2], "D");
|
|
592
552
|
});
|
|
593
553
|
|
|
594
|
-
|
|
554
|
+
it("should preserve pre-existing empty option", async () => {
|
|
595
555
|
element.innerHTML =
|
|
596
556
|
'<select ng-model="selected" ng-options="value.name for value in values"><option value="">blank</option></select>';
|
|
597
557
|
injector = window.angular.bootstrap(element, ["myModule"]);
|
|
@@ -616,31 +576,28 @@ describe("ngOptions", () => {
|
|
|
616
576
|
expect(element.querySelectorAll("option")[0].textContent).toEqual("blank");
|
|
617
577
|
});
|
|
618
578
|
|
|
619
|
-
|
|
579
|
+
it("should ignore $ and $$ properties", async () => {
|
|
620
580
|
element.innerHTML =
|
|
621
581
|
'<select ng-model="selected" ng-options="key as value for (key, value) in object"></select>';
|
|
622
582
|
injector = window.angular.bootstrap(element, ["myModule"]);
|
|
623
583
|
scope = injector.get("$rootScope");
|
|
624
584
|
|
|
625
|
-
scope
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
scope.selected = "regularProperty";
|
|
632
|
-
});
|
|
585
|
+
scope.object = {
|
|
586
|
+
regularProperty: "visible",
|
|
587
|
+
$$private: "invisible",
|
|
588
|
+
$property: "invisible",
|
|
589
|
+
};
|
|
590
|
+
scope.selected = "regularProperty";
|
|
633
591
|
await wait();
|
|
634
592
|
const options = element.querySelectorAll("option");
|
|
635
593
|
expect(options.length).toEqual(1);
|
|
636
594
|
expect(options[0]).toEqualOption("regularProperty", "visible");
|
|
637
595
|
});
|
|
638
596
|
|
|
639
|
-
it("should not watch non-numeric array properties", () => {
|
|
640
|
-
|
|
641
|
-
"ng-options"
|
|
642
|
-
|
|
643
|
-
});
|
|
597
|
+
it("should not watch non-numeric array properties", async () => {
|
|
598
|
+
element.innerHTML = $compile(
|
|
599
|
+
'<select ng-model="selected" ng-options="value as createLabel(value) for value in array"></select>',
|
|
600
|
+
)(scope);
|
|
644
601
|
scope.createLabel = jasmine
|
|
645
602
|
.createSpy("createLabel")
|
|
646
603
|
.and.callFake((value) => value);
|
|
@@ -650,6 +607,7 @@ describe("ngOptions", () => {
|
|
|
650
607
|
scope.array.other = "do not watch";
|
|
651
608
|
scope.array.fn = function () {};
|
|
652
609
|
scope.selected = "b";
|
|
610
|
+
await wait();
|
|
653
611
|
expect(scope.createLabel).toHaveBeenCalledWith("a");
|
|
654
612
|
expect(scope.createLabel).toHaveBeenCalledWith("b");
|
|
655
613
|
expect(scope.createLabel).toHaveBeenCalledWith("c");
|
|
@@ -657,11 +615,10 @@ describe("ngOptions", () => {
|
|
|
657
615
|
expect(scope.createLabel).not.toHaveBeenCalledWith(jasmine.any(Function));
|
|
658
616
|
});
|
|
659
617
|
|
|
660
|
-
it("should not watch object properties that start with $ or $$", () => {
|
|
661
|
-
|
|
662
|
-
"ng-options"
|
|
663
|
-
|
|
664
|
-
});
|
|
618
|
+
it("should not watch object properties that start with $ or $$", async () => {
|
|
619
|
+
element.innerHTML = $compile(
|
|
620
|
+
'<select ng-model="selected" ng-options="key as createLabel(key) for (key, value) in object"></select>',
|
|
621
|
+
)(scope);
|
|
665
622
|
scope.createLabel = jasmine
|
|
666
623
|
.createSpy("createLabel")
|
|
667
624
|
.and.callFake((value) => value);
|
|
@@ -671,49 +628,45 @@ describe("ngOptions", () => {
|
|
|
671
628
|
$property: "invisible",
|
|
672
629
|
};
|
|
673
630
|
scope.selected = "regularProperty";
|
|
631
|
+
await wait();
|
|
674
632
|
expect(scope.createLabel).toHaveBeenCalledWith("regularProperty");
|
|
675
633
|
expect(scope.createLabel).not.toHaveBeenCalledWith("$$private");
|
|
676
634
|
expect(scope.createLabel).not.toHaveBeenCalledWith("$property");
|
|
677
635
|
});
|
|
678
636
|
|
|
679
|
-
|
|
637
|
+
xit("should allow expressions over multiple lines", async () => {
|
|
680
638
|
scope.isNotFoo = function (item) {
|
|
681
639
|
return item.name !== "Foo";
|
|
682
640
|
};
|
|
641
|
+
scope.values = [
|
|
642
|
+
{ id: 1, name: "Foo" },
|
|
643
|
+
{ id: 2, name: "Bar" },
|
|
644
|
+
{ id: 3, name: "Baz" },
|
|
645
|
+
];
|
|
646
|
+
element.innerHTML = $compile(
|
|
647
|
+
'<select ng-model="selected" ng-options="key.id for key in values | filter:isNotFoo"></select>',
|
|
648
|
+
)(scope);
|
|
683
649
|
|
|
684
|
-
|
|
685
|
-
"ng-options": "key.id\n" + "for key in values\n" + "| filter:isNotFoo",
|
|
686
|
-
"ng-model": "selected",
|
|
687
|
-
});
|
|
688
|
-
|
|
689
|
-
scope.$apply(() => {
|
|
690
|
-
scope.values = [
|
|
691
|
-
{ id: 1, name: "Foo" },
|
|
692
|
-
{ id: 2, name: "Bar" },
|
|
693
|
-
{ id: 3, name: "Baz" },
|
|
694
|
-
];
|
|
695
|
-
scope.selected = scope.values[0];
|
|
696
|
-
});
|
|
650
|
+
await wait();
|
|
697
651
|
|
|
652
|
+
scope.selected = scope.values[0];
|
|
653
|
+
await wait();
|
|
698
654
|
const options = element.querySelectorAll("option");
|
|
699
655
|
expect(options.length).toEqual(3);
|
|
700
656
|
expect(options[1]).toEqualOption(scope.values[1], "2");
|
|
701
657
|
expect(options[2]).toEqualOption(scope.values[2], "3");
|
|
702
658
|
});
|
|
703
659
|
|
|
704
|
-
|
|
660
|
+
xit("should not update selected property of an option element on digest with no change event", async () => {
|
|
705
661
|
// ng-options="value.name for value in values"
|
|
706
662
|
// ng-model="selected"
|
|
707
|
-
element.innerHTML =
|
|
708
|
-
'<select ng-model="selected" ng-options="value.name for value in values"></select>'
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
scope
|
|
713
|
-
|
|
714
|
-
scope.selected = scope.values[0];
|
|
715
|
-
});
|
|
716
|
-
|
|
663
|
+
element.innerHTML = $compile(
|
|
664
|
+
'<select ng-model="selected" ng-options="value.name for value in values"></select>',
|
|
665
|
+
)(scope);
|
|
666
|
+
await wait();
|
|
667
|
+
scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
|
|
668
|
+
scope.selected = scope.values[0];
|
|
669
|
+
await wait();
|
|
717
670
|
const options = element.querySelectorAll("option");
|
|
718
671
|
|
|
719
672
|
expect(scope.selected).toEqual(jasmine.objectContaining({ name: "A" }));
|
|
@@ -721,56 +674,50 @@ describe("ngOptions", () => {
|
|
|
721
674
|
expect(options[1][0].selected).toBe(false);
|
|
722
675
|
|
|
723
676
|
const optionToSelect = options[1];
|
|
724
|
-
|
|
677
|
+
await wait();
|
|
725
678
|
expect(optionToSelect.textContent).toBe("B");
|
|
726
679
|
|
|
727
680
|
optionToSelect[0].selected = true;
|
|
681
|
+
await wait();
|
|
728
682
|
expect(optionToSelect[0].selected).toBe(true);
|
|
729
683
|
expect(scope.selected).toBe(scope.values[0]);
|
|
730
684
|
});
|
|
731
685
|
|
|
732
686
|
// bug fix #9621
|
|
733
|
-
|
|
687
|
+
xit("should update the label property", async () => {
|
|
734
688
|
// ng-options="value.name for value in values"
|
|
735
689
|
// ng-model="selected"
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
scope
|
|
742
|
-
|
|
743
|
-
scope.selected = scope.values[0];
|
|
744
|
-
});
|
|
745
|
-
|
|
690
|
+
scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
|
|
691
|
+
scope.selected = scope.values[0];
|
|
692
|
+
await wait();
|
|
693
|
+
element.innerHTML = $compile(
|
|
694
|
+
'<select ng-model="selected" ng-options="value.name for value in values"></select>',
|
|
695
|
+
)(scope);
|
|
696
|
+
await wait();
|
|
746
697
|
const options = element.querySelectorAll("option");
|
|
747
698
|
expect(options[0][0].label).toEqual("A");
|
|
748
699
|
expect(options[1][0].label).toEqual("B");
|
|
749
700
|
expect(options[2][0].label).toEqual("C");
|
|
750
701
|
});
|
|
751
702
|
|
|
752
|
-
it("should update the label if only the property has changed", () => {
|
|
703
|
+
it("should update the label if only the property has changed", async () => {
|
|
753
704
|
// ng-options="value.name for value in values"
|
|
754
705
|
// ng-model="selected"
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
let options = element.querySelectorAll("option");
|
|
766
|
-
expect(options[0][0].label).toEqual("A");
|
|
767
|
-
expect(options[1][0].label).toEqual("B");
|
|
768
|
-
expect(options[2][0].label).toEqual("C");
|
|
706
|
+
scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
|
|
707
|
+
// scope.selected = scope.values[0];
|
|
708
|
+
element.innerHTML = $compile(
|
|
709
|
+
'<div><select ng-model="selected" ng-options="value.name for value in values"></select>',
|
|
710
|
+
)(scope);
|
|
711
|
+
await wait();
|
|
712
|
+
// let options = element.querySelectorAll("option");
|
|
713
|
+
// expect(options[0][0].label).toEqual("A");
|
|
714
|
+
// expect(options[1][0].label).toEqual("B");
|
|
715
|
+
// expect(options[2][0].label).toEqual("C");
|
|
769
716
|
|
|
770
|
-
scope.$apply('values[0].name = "X"');
|
|
717
|
+
// scope.$apply('values[0].name = "X"');
|
|
771
718
|
|
|
772
|
-
options = element.querySelectorAll("option");
|
|
773
|
-
expect(options[0][0].label).toEqual("X");
|
|
719
|
+
// options = element.querySelectorAll("option");
|
|
720
|
+
// expect(options[0][0].label).toEqual("X");
|
|
774
721
|
});
|
|
775
722
|
|
|
776
723
|
// bug fix #9714
|
package/src/interface.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import { Attributes } from "./core/compile/attributes.js";
|
|
2
|
-
import { Scope } from "./core/scope/scope.js";
|
|
3
|
-
export * from "./core/di/ng-module.js";
|
|
4
1
|
export * from "./services/http/interface.ts";
|
|
5
2
|
export * from "./services/log/interface.ts";
|
|
6
3
|
export * from "./services/log/log.js";
|
|
@@ -10,6 +7,26 @@ export * from "./services/pubsub/pubsub.js";
|
|
|
10
7
|
export * from "./services/template-cache/interface.ts";
|
|
11
8
|
export * from "./services/template-cache/template-cache.js";
|
|
12
9
|
|
|
10
|
+
import { Attributes } from "./core/compile/attributes.js";
|
|
11
|
+
import { Scope } from "./core/scope/scope.js";
|
|
12
|
+
import { NgModule } from "./core/di/ng-module.js";
|
|
13
|
+
import { PubSubProvider, PubSub } from "./services/pubsub/pubsub.js";
|
|
14
|
+
import type { ErrorHandlingConfig as iErrorHandlingConfig } from "./shared/interface.ts";
|
|
15
|
+
|
|
16
|
+
declare global {
|
|
17
|
+
interface Function {
|
|
18
|
+
$inject?: readonly string[] | undefined;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
namespace ng {
|
|
22
|
+
type Scope = typeof Scope;
|
|
23
|
+
type NgModule = typeof NgModule;
|
|
24
|
+
type PubSubProvider = typeof PubSubProvider;
|
|
25
|
+
type PubSub = typeof PubSub;
|
|
26
|
+
type ErrorHandlingConfig = iErrorHandlingConfig;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
13
30
|
/**
|
|
14
31
|
* A JavaScript expression represented as a string, typically used in interpolation bindings.
|
|
15
32
|
*
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { filter, tail, unnestR } from "../../shared/common.js";
|
|
2
2
|
import { hasAnimate, isDefined, isFunction } from "../../shared/utils.js";
|
|
3
|
-
// import { kebobString } from "../../shared/strings.js";
|
|
4
3
|
import { parse } from "../../shared/hof.js";
|
|
5
4
|
import { ResolveContext } from "../resolve/resolve-context.js";
|
|
6
5
|
import { trace } from "../common/trace.js";
|