@angular-wave/angular.ts 0.7.7 → 0.8.0
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/animations/raf-scheduler.d.ts +2 -2
- package/@types/animations/shared.d.ts +0 -1
- package/@types/core/compile/attributes.d.ts +3 -3
- package/@types/core/compile/compile.d.ts +1 -1
- package/@types/core/di/injector.d.ts +0 -1
- package/@types/core/di/internal-injector.d.ts +1 -0
- package/@types/core/di/ng-module.d.ts +5 -0
- package/@types/core/filter/filter.d.ts +11 -13
- package/@types/core/parse/parse.d.ts +6 -7
- package/@types/core/sanitize/sanitize-uri.d.ts +3 -6
- package/@types/core/scope/scope.d.ts +1 -1
- package/@types/directive/attrs/attrs.d.ts +7 -1
- package/@types/directive/bind/bind.d.ts +2 -1
- package/@types/directive/events/events.d.ts +9 -3
- package/@types/directive/http/http.d.ts +6 -2
- package/@types/directive/include/include.d.ts +2 -2
- package/@types/directive/input/input.d.ts +2 -12
- package/@types/directive/messages/messages.d.ts +9 -48
- package/@types/directive/model/model.d.ts +3 -3
- package/@types/directive/options/options.d.ts +13 -20
- package/@types/directive/switch/switch.d.ts +1 -0
- package/@types/directive/transclude/transclude.d.ts +10 -6
- package/@types/index.d.ts +1 -1
- package/@types/interface.d.ts +56 -18
- package/@types/{public.d.ts → ng.d.ts} +2 -2
- package/@types/router/directives/view-directive.d.ts +2 -19
- package/@types/router/{common → glob}/glob.d.ts +5 -1
- package/@types/router/globals.d.ts +2 -3
- package/@types/router/path/path-utils.d.ts +8 -11
- package/@types/router/state/interface.d.ts +1 -1
- package/@types/router/state/state-object.d.ts +1 -1
- package/@types/router/state/state-registry.d.ts +1 -2
- package/@types/router/state/state-service.d.ts +8 -7
- package/@types/router/state-filters.d.ts +24 -2
- package/@types/router/transition/transition.d.ts +12 -15
- package/@types/router/url/url-matcher.d.ts +3 -3
- package/@types/router/url/url-rule.d.ts +1 -0
- package/@types/router/url/url-rules.d.ts +26 -6
- package/@types/router/url/url-service.d.ts +30 -42
- package/@types/services/anchor-scroll.d.ts +1 -1
- package/@types/{core → services/exception}/exception-handler.d.ts +4 -4
- package/@types/{core/error-handler.d.ts → services/exception/interface.d.ts} +1 -1
- package/@types/services/http/http.d.ts +48 -3
- package/@types/services/http/interface.d.ts +2 -2
- package/@types/services/http-backend/http-backend.d.ts +49 -44
- package/@types/services/location/interface.d.ts +63 -0
- package/@types/services/location/location.d.ts +330 -0
- package/@types/{core → services}/sce/sce.d.ts +1 -1
- package/@types/services/template-cache/interface.d.ts +8 -2
- package/@types/services/template-cache/template-cache.d.ts +1 -1
- package/@types/services/template-request.d.ts +1 -1
- package/@types/shared/cache.d.ts +0 -2
- package/@types/shared/common.d.ts +0 -2
- package/@types/shared/dom.d.ts +6 -0
- package/@types/shared/interface.d.ts +0 -4
- package/@types/{router/common → shared}/queue.d.ts +2 -2
- package/@types/shared/test-utils.d.ts +1 -0
- package/@types/shared/url-utils/interface.d.ts +46 -0
- package/@types/shared/url-utils/url-utils.d.ts +64 -0
- package/@types/shared/utils.d.ts +44 -6
- package/Makefile +8 -4
- package/dist/angular-ts.esm.js +1889 -2199
- package/dist/angular-ts.umd.js +1889 -2199
- package/dist/angular-ts.umd.min.js +1 -1
- package/docs/assets/scss/index.scss +23 -0
- package/docs/content/_index.md +9 -8
- package/docs/content/docs/_index.md +1 -1
- package/docs/content/docs/directive/app.md +1 -1
- package/docs/content/docs/directive/bind.md +10 -8
- package/docs/content/docs/directive/blur.md +1 -1
- package/docs/content/docs/directive/channel.md +2 -2
- package/docs/content/docs/directive/class-even.md +1 -1
- package/docs/content/docs/directive/class-odd.md +1 -1
- package/docs/content/docs/directive/class.md +1 -1
- package/docs/content/docs/directive/click.md +1 -1
- package/docs/content/docs/directive/copy.md +1 -1
- package/docs/content/docs/directive/cut.md +1 -1
- package/docs/content/docs/directive/dblclick.md +1 -1
- package/docs/content/docs/directive/focus.md +1 -1
- package/docs/content/docs/directive/get.md +203 -0
- package/docs/content/docs/directive/keydown.md +1 -1
- package/docs/content/docs/directive/keyup.md +1 -1
- package/docs/content/docs/directive/load.md +1 -1
- package/docs/content/docs/directive/mousedown.md +1 -1
- package/docs/content/docs/directive/mouseenter.md +1 -1
- package/docs/content/docs/directive/mouseleave.md +1 -1
- package/docs/content/docs/directive/mousemove.md +1 -1
- package/docs/content/docs/directive/mouseout.md +1 -1
- package/docs/content/docs/directive/mouseover.md +1 -1
- package/docs/content/docs/directive/mouseup.md +1 -1
- package/docs/content/docs/directive/non-bindable.md +28 -0
- package/docs/content/docs/provider/locationProvider.md +26 -0
- package/docs/content/docs/provider/templateCacheProvider.md +66 -1
- package/docs/content/docs/service/location.md +57 -0
- package/docs/content/docs/service/templateCache.md +2 -2
- package/docs/content/docs/service/url.md +5 -0
- package/docs/layouts/partials/hooks/head-end.html +1 -1
- package/docs/layouts/shortcodes/showcss.html +2 -0
- package/docs/layouts/shortcodes/version.html +1 -0
- package/docs/static/examples/counter/counter-test.html +0 -4
- package/docs/static/examples/eventbus/eventbus-test.html +0 -4
- package/docs/static/examples/ng-bind/ng-bind.html +2 -2
- package/docs/static/examples/ng-non-bindable/ng-non-bindable-test.html +13 -0
- package/docs/static/examples/ng-non-bindable/ng-non-bindable.html +3 -0
- package/docs/static/examples/ng-non-bindable/ng-non-bindable.test.js +11 -0
- package/docs/static/typedoc/assets/hierarchy.js +1 -1
- package/docs/static/typedoc/assets/highlight.css +6 -6
- package/docs/static/typedoc/assets/navigation.js +1 -1
- package/docs/static/typedoc/assets/search.js +1 -1
- package/docs/static/typedoc/classes/Location.html +55 -0
- package/docs/static/typedoc/classes/LocationProvider.html +20 -0
- package/docs/static/typedoc/classes/NgModule.html +32 -0
- package/docs/static/typedoc/classes/TemplateCacheProvider.html +1 -1
- package/docs/static/typedoc/hierarchy.html +1 -1
- package/docs/static/typedoc/index.html +1 -1
- package/docs/static/typedoc/interfaces/DefaultPorts.html +5 -0
- package/docs/static/typedoc/interfaces/Directive.html +5 -4
- package/docs/static/typedoc/interfaces/Html5Mode.html +23 -0
- package/docs/static/typedoc/interfaces/HttpProviderDefaults.html +1 -1
- package/docs/static/typedoc/interfaces/HttpResponse.html +2 -3
- package/docs/static/typedoc/interfaces/Provider.html +16 -10
- package/docs/static/typedoc/interfaces/RequestConfig.html +1 -1
- package/docs/static/typedoc/interfaces/RequestShortcutConfig.html +1 -1
- package/docs/static/typedoc/interfaces/TemplateCache.html +7 -0
- package/docs/static/typedoc/interfaces/UrlParts.html +9 -0
- package/docs/static/typedoc/types/AnnotatedDirectiveFactory.html +1 -0
- package/docs/static/typedoc/types/AnnotatedFactory.html +1 -1
- package/docs/static/typedoc/types/DirectiveFactory.html +1 -2
- package/docs/static/typedoc/types/DirectiveFactoryFn.html +1 -0
- package/docs/static/typedoc/types/Expression.html +1 -1
- package/docs/static/typedoc/types/HttpResponseStatus.html +1 -0
- package/docs/static/typedoc/types/{TemplateCache.html → SwapModeType.html} +1 -1
- package/docs/static/typedoc/types/UrlChangeListener.html +5 -0
- package/docs/static/typedoc/variables/SwapMode.html +11 -0
- package/docs/static/version.js +13 -0
- package/docs/test-results/.last-run.json +4 -0
- package/docs/test-results/static-examples-counter-counter-counter-example/error-context.md +50 -0
- package/legacy.d.ts +0 -10
- package/package.json +1 -3
- package/src/{loader.js → angular.js} +5 -10
- package/src/angular.spec.js +189 -21
- package/src/animations/animate-children-directive.js +2 -2
- package/src/animations/animate-css.js +17 -18
- package/src/animations/animate.spec.js +1 -1
- package/src/animations/raf-scheduler.js +1 -1
- package/src/animations/shared.js +2 -12
- package/src/binding.spec.js +1 -1
- package/src/core/compile/attributes.js +1 -1
- package/src/core/compile/compile.js +7 -10
- package/src/core/compile/compile.spec.js +1 -1
- package/src/core/controller/controller.spec.js +1 -1
- package/src/core/controller/controller.test.js +1 -0
- package/src/core/di/injector.js +11 -25
- package/src/core/di/injector.spec.js +2 -2
- package/src/core/di/injector.test.js +2 -2
- package/src/core/di/internal-injector.js +7 -7
- package/src/core/di/ng-module.js +12 -27
- package/src/core/filter/filter.js +28 -28
- package/src/core/filter/filter.spec.js +1 -1
- package/src/core/filter/filter.test.js +1 -0
- package/src/core/interpolate/interpolate.js +4 -6
- package/src/core/interpolate/interpolate.spec.js +1 -1
- package/src/core/interpolate/interpolate.test.js +1 -0
- package/src/core/parse/ast/ast.spec.js +1 -1
- package/src/core/parse/ast/ast.test.js +1 -1
- package/src/core/parse/interpreter.js +32 -38
- package/src/core/parse/lexer/lexer.spec.js +1 -1
- package/src/core/parse/parse.js +150 -146
- package/src/core/parse/parse.spec.js +17 -16
- package/src/core/prop.spec.js +1 -1
- package/src/core/root-element.spec.js +1 -1
- package/src/core/sanitize/sanitize-uri.js +3 -3
- package/src/core/scope/scope.js +12 -13
- package/src/core/scope/scope.spec.js +3 -4
- package/src/directive/aria/aria.spec.js +1 -1
- package/src/directive/aria/aria.test.js +1 -0
- package/src/directive/attrs/attrs.js +7 -4
- package/src/directive/attrs/attrs.spec.js +1 -1
- package/src/directive/attrs/attrs.test.js +1 -0
- package/src/directive/attrs/boolean.spec.js +1 -1
- package/src/directive/attrs/boolean.test.js +1 -0
- package/src/directive/attrs/element-style.spec.js +1 -1
- package/src/directive/attrs/element-style.test.js +1 -0
- package/src/directive/attrs/src.spec.js +1 -1
- package/src/directive/attrs/src.test.js +1 -0
- package/src/directive/bind/bind-html.spec.js +1 -1
- package/src/directive/bind/bind.js +1 -0
- package/src/directive/bind/bind.spec.js +1 -1
- package/src/directive/bind/bind.test.js +1 -0
- package/src/directive/channel/channel.spec.js +1 -1
- package/src/directive/channel/channel.test.js +1 -0
- package/src/directive/class/class.spec.js +1 -1
- package/src/directive/class/class.test.js +1 -0
- package/src/directive/cloak/cloak.spec.js +1 -1
- package/src/directive/cloak/cloak.test.js +1 -0
- package/src/directive/controller/controller.spec.js +1 -1
- package/src/directive/controller/controller.test.js +1 -0
- package/src/directive/events/click.spec.js +1 -1
- package/src/directive/events/event.spec.js +1 -1
- package/src/directive/events/events.js +6 -2
- package/src/directive/events/events.test.js +1 -0
- package/src/directive/form/form.js +8 -5
- package/src/directive/form/form.spec.js +1 -1
- package/src/directive/form/form.test.js +1 -0
- package/src/directive/http/delete.spec.js +3 -1
- package/src/directive/http/form-test.html +18 -0
- package/src/directive/http/get.spec.js +281 -4
- package/src/directive/http/http.js +112 -15
- package/src/directive/http/http.test.js +2 -2
- package/src/directive/http/post.spec.js +506 -9
- package/src/directive/http/put.spec.js +3 -1
- package/src/directive/if/if.spec.js +1 -1
- package/src/directive/include/include.js +7 -7
- package/src/directive/include/include.spec.js +1 -1
- package/src/directive/init/init.spec.js +1 -1
- package/src/directive/init/init.test.js +1 -0
- package/src/directive/input/input.js +19 -43
- package/src/directive/input/input.spec.js +1 -2
- package/src/directive/input/input.test.js +1 -0
- package/src/directive/messages/messages.js +4 -0
- package/src/directive/messages/messages.spec.js +1 -1
- package/src/directive/messages/messages.test.js +1 -0
- package/src/directive/model/model.js +14 -14
- package/src/directive/model/model.spec.js +1 -1
- package/src/directive/model/model.test.js +1 -0
- package/src/directive/model-options/model-option.test.js +1 -0
- package/src/directive/model-options/model-options.js +1 -1
- package/src/directive/model-options/model-options.spec.js +1 -1
- package/src/directive/non-bindable/non-bindable.spec.js +1 -1
- package/src/directive/non-bindable/non-bindable.test.js +1 -0
- package/src/directive/observe/observe.spec.js +1 -1
- package/src/directive/observe/observe.test.js +1 -0
- package/src/directive/on/on.spec.js +1 -1
- package/src/directive/on/on.test.js +1 -0
- package/src/directive/options/options.js +454 -464
- package/src/directive/options/options.spec.js +1 -1
- package/src/directive/options/options.test.js +1 -0
- package/src/directive/ref/href.spec.js +1 -1
- package/src/directive/ref/href.test.js +2 -0
- package/src/directive/ref/ref.spec.js +1 -1
- package/src/directive/repeat/repeat.spec.js +2 -3
- package/src/directive/repeat/repeat.test.js +1 -0
- package/src/directive/script/script.spec.js +1 -1
- package/src/directive/script/script.test.js +1 -0
- package/src/directive/select/select.js +1 -1
- package/src/directive/select/select.spec.js +1 -1
- package/src/directive/select/select.test.js +1 -0
- package/src/directive/setter/setter.js +12 -14
- package/src/directive/setter/setter.spec.js +40 -17
- package/src/directive/setter/setter.test.js +1 -0
- package/src/directive/show-hide/show-hide.spec.js +1 -1
- package/src/directive/show-hide/show-hide.test.js +1 -0
- package/src/directive/style/style.spec.js +1 -1
- package/src/directive/style/style.test.js +1 -0
- package/src/directive/switch/switch.js +1 -0
- package/src/directive/switch/switch.spec.js +1 -1
- package/src/directive/switch/switch.test.js +1 -0
- package/src/directive/transclude/transclude.js +87 -89
- package/src/directive/validators/validators.js +82 -84
- package/src/directive/validators/validators.spec.js +5 -4
- package/src/directive/validators/validators.test.js +1 -0
- package/src/filters/filter.spec.js +1 -1
- package/src/filters/filters.spec.js +1 -1
- package/src/filters/limit-to.js +2 -3
- package/src/filters/limit-to.spec.js +1 -1
- package/src/filters/order-by.spec.js +1 -1
- package/src/index.js +1 -1
- package/src/injection-tokens.js +6 -2
- package/src/interface.ts +70 -19
- package/src/loader.md +0 -155
- package/src/{public.js → ng.js} +16 -23
- package/src/{public.spec.js → ng.spec.js} +1 -1
- package/src/router/directives/state-directives.spec.js +9 -8
- package/src/router/directives/view-directive.js +11 -9
- package/src/router/directives/view-directive.spec.js +8 -9
- package/src/router/{common/common.html → glob/glob.html} +2 -3
- package/src/router/{common → glob}/glob.js +5 -0
- package/src/router/{common/common.test.js → glob/glob.test.js} +2 -1
- package/src/router/globals.js +1 -2
- package/src/router/path/path-utils.js +5 -0
- package/src/router/router-test-hashbang.html +45 -0
- package/src/router/services.spec.js +5 -6
- package/src/router/state/interface.ts +1 -1
- package/src/router/state/state-builder.js +3 -3
- package/src/router/state/state-builder.spec.js +1 -1
- package/src/router/state/state-object.js +1 -1
- package/src/router/state/state-registry.js +2 -3
- package/src/router/state/state-service.js +13 -10
- package/src/router/state/state.spec.js +23 -22
- package/src/router/state/state.test.js +1 -0
- package/src/router/state/views.js +1 -1
- package/src/router/state-filter.spec.js +1 -1
- package/src/router/state-filters.js +15 -11
- package/src/router/template-factory.js +5 -4
- package/src/router/template-factory.spec.js +1 -1
- package/src/router/transition/hook-registry.js +1 -1
- package/src/router/transition/transition-service.js +6 -5
- package/src/router/transition/transition.js +4 -4
- package/src/router/url/url-matcher.js +3 -3
- package/src/router/url/url-rule.js +1 -0
- package/src/router/url/url-rules.js +8 -5
- package/src/router/url/url-service.js +82 -85
- package/src/router/url/url-service.spec.js +55 -39
- package/src/router/url/url.test.js +1 -0
- package/src/router/view/view.js +4 -5
- package/src/router/view/view.spec.js +10 -12
- package/src/router/view/view.test.js +1 -0
- package/src/router/view-hook.spec.js +1 -1
- package/src/router/view-scroll.spec.js +1 -1
- package/src/services/anchor-scroll.html +2 -9
- package/src/services/anchor-scroll.js +6 -5
- package/src/{core → services/exception}/exception-handler.js +2 -2
- package/src/{core/error-handler.ts → services/exception/interface.ts} +1 -1
- package/src/services/http/http.js +11 -17
- package/src/services/http/http.spec.js +2 -7
- package/src/services/http/interface.ts +2 -2
- package/src/services/http/template-request.spec.js +1 -1
- package/src/services/http-backend/http-backend.js +53 -89
- package/src/services/http-backend/http-backend.spec.js +2 -6
- package/src/services/http-backend/http-backend.test.js +1 -0
- package/src/services/location/interface.ts +70 -0
- package/src/{core → services}/location/location.html +4 -1
- package/src/services/location/location.js +999 -0
- package/src/{core → services}/location/location.spec.js +911 -532
- package/src/{core → services}/location/location.test.js +2 -2
- package/src/services/log/log.spec.js +1 -1
- package/src/services/log/log.test.js +1 -0
- package/src/services/pubsub/pubsub.spec.js +1 -1
- package/src/{core → services}/sce/sce.html +1 -1
- package/src/{core → services}/sce/sce.js +14 -10
- package/src/{core → services}/sce/sce.md +2 -2
- package/src/{core → services}/sce/sce.spec.js +3 -4
- package/src/{core → services}/sce/sce.test.js +1 -1
- package/src/services/template-cache/interface.ts +8 -2
- package/src/services/template-cache/template-cache.js +3 -1
- package/src/services/template-cache/template-cache.spec.js +73 -1
- package/src/services/template-cache/template-cache.test.js +1 -0
- package/src/services/template-request.js +2 -1
- package/src/shared/cache.js +0 -2
- package/src/shared/common.js +0 -5
- package/src/shared/common.spec.js +1 -1
- package/src/shared/dom.js +10 -0
- package/src/shared/interface.ts +0 -4
- package/src/{router/common → shared}/queue.js +7 -7
- package/src/shared/shared.html +1 -0
- package/src/shared/shared.test.js +1 -0
- package/src/shared/test-utils.js +1 -0
- package/src/shared/url-utils/interface.ts +54 -0
- package/src/{core → shared}/url-utils/url-utils.html +4 -1
- package/src/{core → shared}/url-utils/url-utils.js +26 -47
- package/src/{core → shared}/url-utils/url-utils.spec.js +10 -17
- package/src/{core → shared}/url-utils/url-utils.test.js +1 -1
- package/src/shared/utils.js +60 -9
- package/src/shared/utils.spec.js +35 -1
- package/src/src.html +1 -2
- package/typedoc.json +0 -1
- package/utils/express.js +36 -2
- package/utils/version.cjs +23 -0
- package/@types/core/location/location.d.ts +0 -317
- package/@types/core/task-tracker-factory.d.ts +0 -76
- package/@types/core/url-utils/url-utils.d.ts +0 -56
- package/@types/router/state-provider.d.ts +0 -123
- package/@types/services/browser.d.ts +0 -101
- package/docs/static/typedoc/types/SwapInsertPosition.html +0 -2
- package/jsdoc.json +0 -22
- package/src/core/location/location.js +0 -984
- package/src/core/location/location.md +0 -114
- package/src/core/task-tracker-factory.js +0 -145
- package/src/core/url-utils/url-utils.md +0 -46
- package/src/directive/non-bindable/non-bindable.md +0 -17
- package/src/loader.spec.js +0 -169
- package/src/router/state-provider.js +0 -146
- package/src/services/browser.js +0 -212
- /package/@types/{loader.d.ts → angular.d.ts} +0 -0
- /package/src/router/{common → glob}/glob.spec.js +0 -0
- /package/src/{router/common → shared}/queue.spec.js +0 -0
|
@@ -51,6 +51,7 @@ export function ngBindTemplateDirective() {
|
|
|
51
51
|
|
|
52
52
|
ngBindHtmlDirective.$inject = [$injectTokens.$parse];
|
|
53
53
|
/**
|
|
54
|
+
* @param {import('../../core/parse/interface.ts').ParseService} $parse
|
|
54
55
|
* @returns {import('../../interface.ts').Directive}
|
|
55
56
|
*/
|
|
56
57
|
export function ngBindHtmlDirective($parse) {
|
|
@@ -5,6 +5,7 @@ const TEST_URL = "src/directive/bind/bind.html";
|
|
|
5
5
|
test("unit tests contain no errors", async ({ page }) => {
|
|
6
6
|
await page.goto(TEST_URL);
|
|
7
7
|
await page.content();
|
|
8
|
+
await page.waitForTimeout(1000);
|
|
8
9
|
await expect(page.locator(".jasmine-overall-result")).toHaveText(
|
|
9
10
|
/0 failures/,
|
|
10
11
|
);
|
|
@@ -3,6 +3,7 @@ import { test, expect } from "@playwright/test";
|
|
|
3
3
|
test("unit observer tests contain no errors", async ({ page }) => {
|
|
4
4
|
await page.goto("src/directive/channel/channel.html");
|
|
5
5
|
await page.content();
|
|
6
|
+
await page.waitForTimeout(1000);
|
|
6
7
|
await expect(page.locator(".jasmine-overall-result")).toHaveText(
|
|
7
8
|
/0 failures/,
|
|
8
9
|
);
|
|
@@ -5,6 +5,7 @@ const TEST_URL = "src/directive/class/class.html";
|
|
|
5
5
|
test("unit tests contain no errors", async ({ page }) => {
|
|
6
6
|
await page.goto(TEST_URL);
|
|
7
7
|
await page.content();
|
|
8
|
+
await page.waitForTimeout(1000);
|
|
8
9
|
await expect(page.locator(".jasmine-overall-result")).toHaveText(
|
|
9
10
|
/0 failures/,
|
|
10
11
|
);
|
|
@@ -5,6 +5,7 @@ const TEST_URL = "src/directive/cloak/cloak.html";
|
|
|
5
5
|
test("unit tests contain no errors", async ({ page }) => {
|
|
6
6
|
await page.goto(TEST_URL);
|
|
7
7
|
await page.content();
|
|
8
|
+
await page.waitForTimeout(1000);
|
|
8
9
|
await expect(page.locator(".jasmine-overall-result")).toHaveText(
|
|
9
10
|
/0 failures/,
|
|
10
11
|
);
|
|
@@ -5,6 +5,7 @@ const TEST_URL = "src/directive/controller/controller.html";
|
|
|
5
5
|
test("unit tests contain no errors", async ({ page }) => {
|
|
6
6
|
await page.goto(TEST_URL);
|
|
7
7
|
await page.content();
|
|
8
|
+
await page.waitForTimeout(1000);
|
|
8
9
|
await expect(page.locator(".jasmine-overall-result")).toHaveText(
|
|
9
10
|
/0 failures/,
|
|
10
11
|
);
|
|
@@ -4,6 +4,10 @@ import { directiveNormalize } from "../../shared/utils.js";
|
|
|
4
4
|
* A collection of directives that allows creation of custom event handlers that are defined as
|
|
5
5
|
* AngularTS expressions and are compiled and executed within the current scope.
|
|
6
6
|
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* @type {Record<string, import("../../interface.js").DirectiveFactory>}
|
|
10
|
+
*/
|
|
7
11
|
export const ngEventDirectives = {};
|
|
8
12
|
|
|
9
13
|
"click copy cut dblclick focus blur keydown keyup load mousedown mouseenter mouseleave mousemove mouseout mouseover mouseup paste submit touchstart touchend touchmove"
|
|
@@ -15,7 +19,7 @@ export const ngEventDirectives = {};
|
|
|
15
19
|
"$exceptionHandler",
|
|
16
20
|
/**
|
|
17
21
|
* @param {import("../../core/parse/interface.ts").ParseService} $parse
|
|
18
|
-
* @param {import('../../
|
|
22
|
+
* @param {import('../../services/exception/exception-handler.js').ErrorHandler} $exceptionHandler
|
|
19
23
|
* @returns
|
|
20
24
|
*/
|
|
21
25
|
($parse, $exceptionHandler) => {
|
|
@@ -32,7 +36,7 @@ export const ngEventDirectives = {};
|
|
|
32
36
|
/**
|
|
33
37
|
*
|
|
34
38
|
* @param {import("../../core/parse/interface.ts").ParseService} $parse
|
|
35
|
-
* @param {import('../../
|
|
39
|
+
* @param {import('../../services/exception/exception-handler.js').ErrorHandler} $exceptionHandler
|
|
36
40
|
* @param {string} directiveName
|
|
37
41
|
* @param {string} eventName
|
|
38
42
|
* @returns {import("../../interface.ts").Directive}
|
|
@@ -5,6 +5,7 @@ const TEST_URL = "src/directive/events/events.html";
|
|
|
5
5
|
test("unit tests contain no errors", async ({ page }) => {
|
|
6
6
|
await page.goto(TEST_URL);
|
|
7
7
|
await page.content();
|
|
8
|
+
await page.waitForTimeout(1000);
|
|
8
9
|
await expect(page.locator(".jasmine-overall-result")).toHaveText(
|
|
9
10
|
/0 failures/,
|
|
10
11
|
);
|
|
@@ -96,7 +96,13 @@ const SUBMITTED_CLASS = "ng-submitted";
|
|
|
96
96
|
|
|
97
97
|
export class FormController {
|
|
98
98
|
static $nonscope = true;
|
|
99
|
-
static $inject = [
|
|
99
|
+
/* @ignore */ static $inject = [
|
|
100
|
+
"$element",
|
|
101
|
+
"$attrs",
|
|
102
|
+
"$scope",
|
|
103
|
+
"$animate",
|
|
104
|
+
"$interpolate",
|
|
105
|
+
];
|
|
100
106
|
|
|
101
107
|
/**
|
|
102
108
|
* @param {Element} $element
|
|
@@ -560,7 +566,7 @@ const formDirectiveFactory = function (isNgForm) {
|
|
|
560
566
|
return [
|
|
561
567
|
"$parse",
|
|
562
568
|
function ($parse) {
|
|
563
|
-
|
|
569
|
+
return {
|
|
564
570
|
name: "form",
|
|
565
571
|
restrict: isNgForm ? "EA" : "E",
|
|
566
572
|
require: ["form", "^^?form"], // first is the form's own ctrl, second is an optional parent form
|
|
@@ -641,9 +647,6 @@ const formDirectiveFactory = function (isNgForm) {
|
|
|
641
647
|
};
|
|
642
648
|
},
|
|
643
649
|
};
|
|
644
|
-
|
|
645
|
-
return formDirective;
|
|
646
|
-
|
|
647
650
|
function getSetter(expression) {
|
|
648
651
|
if (expression === "") {
|
|
649
652
|
// create an assignable expression, so forms with an empty name can be renamed later
|
|
@@ -5,6 +5,7 @@ const TEST_URL = "src/directive/form/form.html";
|
|
|
5
5
|
test("unit tests contain no errors", async ({ page }) => {
|
|
6
6
|
await page.goto(TEST_URL);
|
|
7
7
|
await page.content();
|
|
8
|
+
await page.waitForTimeout(1000);
|
|
8
9
|
await expect(page.locator(".jasmine-overall-result")).toHaveText(
|
|
9
10
|
/0 failures/,
|
|
10
11
|
);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Angular } from "../../
|
|
1
|
+
import { Angular } from "../../angular.js";
|
|
2
|
+
import { dealoc } from "../../shared/dom.js";
|
|
2
3
|
// import { browserTrigger, wait } from "../../shared/test-utils.js";
|
|
3
4
|
|
|
4
5
|
describe("ngDelete", () => {
|
|
@@ -6,6 +7,7 @@ describe("ngDelete", () => {
|
|
|
6
7
|
|
|
7
8
|
beforeEach(() => {
|
|
8
9
|
el = document.getElementById("app");
|
|
10
|
+
dealoc(el);
|
|
9
11
|
el.innerHTML = "";
|
|
10
12
|
let angular = new Angular();
|
|
11
13
|
angular.module("default", []);
|
|
@@ -0,0 +1,18 @@
|
|
|
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="/src/index.js"></script>
|
|
8
|
+
</head>
|
|
9
|
+
<body ng-app>
|
|
10
|
+
<form
|
|
11
|
+
ng-post="/mock/urlencoded"
|
|
12
|
+
enctype="application/x-www-form-urlencoded"
|
|
13
|
+
>
|
|
14
|
+
<input type="text" name="name" />
|
|
15
|
+
<button type="submit">Add</button>
|
|
16
|
+
</form>
|
|
17
|
+
</body>
|
|
18
|
+
</html>
|
|
@@ -1,14 +1,32 @@
|
|
|
1
|
-
import { Angular } from "../../
|
|
1
|
+
import { Angular } from "../../angular.js";
|
|
2
2
|
import { browserTrigger, wait } from "../../shared/test-utils.js";
|
|
3
|
+
import { dealoc } from "../../shared/dom.js";
|
|
3
4
|
|
|
4
|
-
describe("
|
|
5
|
+
describe("ng-get", () => {
|
|
5
6
|
let $compile, $rootScope, $log, el;
|
|
6
7
|
|
|
7
8
|
beforeEach(() => {
|
|
8
9
|
el = document.getElementById("app");
|
|
10
|
+
dealoc(el);
|
|
9
11
|
el.innerHTML = "";
|
|
10
12
|
let angular = new Angular();
|
|
11
|
-
angular.module("default", [])
|
|
13
|
+
angular.module("default", []).config([
|
|
14
|
+
"$stateProvider",
|
|
15
|
+
"$locationProvider",
|
|
16
|
+
($stateProvider) => {
|
|
17
|
+
$stateProvider
|
|
18
|
+
.state({
|
|
19
|
+
name: "success",
|
|
20
|
+
url: "/success",
|
|
21
|
+
template: `success`,
|
|
22
|
+
})
|
|
23
|
+
.state({
|
|
24
|
+
name: "error",
|
|
25
|
+
url: "/error",
|
|
26
|
+
template: `error`,
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
]);
|
|
12
30
|
angular
|
|
13
31
|
.bootstrap(el, ["default"])
|
|
14
32
|
.invoke((_$compile_, _$rootScope_, _$log_) => {
|
|
@@ -37,6 +55,16 @@ describe("ngGet", () => {
|
|
|
37
55
|
expect(el.firstChild.innerHTML).toBe("<div>Hello</div>");
|
|
38
56
|
});
|
|
39
57
|
|
|
58
|
+
it("should compile innerHTML", async () => {
|
|
59
|
+
const scope = $rootScope.$new();
|
|
60
|
+
el.innerHTML = '<button ng-get="/mock/divexpr">Load</button>';
|
|
61
|
+
scope.expr = "World";
|
|
62
|
+
$compile(el)(scope);
|
|
63
|
+
browserTrigger(el.querySelector("button"), "click");
|
|
64
|
+
await wait(100);
|
|
65
|
+
expect(el.innerText).toBe("World");
|
|
66
|
+
});
|
|
67
|
+
|
|
40
68
|
it("should replace innerHTML on error", async () => {
|
|
41
69
|
const scope = $rootScope.$new();
|
|
42
70
|
el.innerHTML = '<button ng-get="/mock/422">Load</button>';
|
|
@@ -55,7 +83,7 @@ describe("ngGet", () => {
|
|
|
55
83
|
expect(el.innerText).toBe("Load");
|
|
56
84
|
});
|
|
57
85
|
|
|
58
|
-
it("should replace innerHTML on
|
|
86
|
+
it("should replace innerHTML on status error without a body", async () => {
|
|
59
87
|
const scope = $rootScope.$new();
|
|
60
88
|
el.innerHTML = '<button ng-get="/mock/401">Load</button>';
|
|
61
89
|
$compile(el)(scope);
|
|
@@ -64,6 +92,111 @@ describe("ngGet", () => {
|
|
|
64
92
|
expect(el.innerText).toBe("Unauthorized");
|
|
65
93
|
});
|
|
66
94
|
|
|
95
|
+
describe("data-trigger", () => {
|
|
96
|
+
it("should not trigger request on click if element has trigger attribute", async () => {
|
|
97
|
+
el.innerHTML =
|
|
98
|
+
'<button ng-get="/mock/hello" data-trigger="mouseover">Load</button>';
|
|
99
|
+
const scope = $rootScope.$new();
|
|
100
|
+
$compile(el)(scope);
|
|
101
|
+
browserTrigger(el.querySelector("button"), "click");
|
|
102
|
+
await wait(100);
|
|
103
|
+
expect(el.innerText).toBe("Load");
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it("should trigger request on new event name if element has trigger attribute", async () => {
|
|
107
|
+
el.innerHTML =
|
|
108
|
+
'<button ng-get="/mock/hello" data-trigger="mouseover">Load</button>';
|
|
109
|
+
const scope = $rootScope.$new();
|
|
110
|
+
$compile(el)(scope);
|
|
111
|
+
browserTrigger(el.querySelector("button"), "mouseover");
|
|
112
|
+
await wait(100);
|
|
113
|
+
expect(el.innerText).toBe("Hello");
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
describe("data-latch", () => {
|
|
118
|
+
it("should trigger request on latch change", async () => {
|
|
119
|
+
el.innerHTML =
|
|
120
|
+
'<button ng-get="/mock/now" data-latch="{{ latch }}">Load</button>';
|
|
121
|
+
const scope = $rootScope.$new();
|
|
122
|
+
$compile(el)(scope);
|
|
123
|
+
await wait(100);
|
|
124
|
+
expect(el.innerText).toBe("Load");
|
|
125
|
+
scope.latch = true;
|
|
126
|
+
await wait(100);
|
|
127
|
+
expect(el.innerText).not.toBe("Load");
|
|
128
|
+
const firstRes = parseInt(el.innerText);
|
|
129
|
+
expect(firstRes).toBeLessThan(Date.now());
|
|
130
|
+
|
|
131
|
+
scope.latch = !scope.latch;
|
|
132
|
+
await wait(100);
|
|
133
|
+
const secondRes = parseInt(el.innerText);
|
|
134
|
+
expect(secondRes).toBeGreaterThan(firstRes);
|
|
135
|
+
|
|
136
|
+
scope.latch = !scope.latch;
|
|
137
|
+
await wait(100);
|
|
138
|
+
const thirdRes = parseInt(el.innerText);
|
|
139
|
+
expect(thirdRes).toBeGreaterThan(secondRes);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it("should still work with events with latch change", async () => {
|
|
143
|
+
el.innerHTML =
|
|
144
|
+
'<button ng-get="/mock/now" data-latch="{{ latch }}">Load</button>';
|
|
145
|
+
const scope = $rootScope.$new();
|
|
146
|
+
$compile(el)(scope);
|
|
147
|
+
await wait(100);
|
|
148
|
+
expect(el.innerText).toBe("Load");
|
|
149
|
+
scope.latch = true;
|
|
150
|
+
await wait(100);
|
|
151
|
+
expect(el.innerText).not.toBe("Load");
|
|
152
|
+
const firstRes = parseInt(el.innerText);
|
|
153
|
+
expect(firstRes).toBeLessThan(Date.now());
|
|
154
|
+
|
|
155
|
+
browserTrigger(el.querySelector("button"), "click");
|
|
156
|
+
await wait(100);
|
|
157
|
+
const secondRes = parseInt(el.innerText);
|
|
158
|
+
expect(secondRes).toBeGreaterThan(firstRes);
|
|
159
|
+
});
|
|
160
|
+
|
|
161
|
+
it("should still work with custom events with latch change", async () => {
|
|
162
|
+
el.innerHTML =
|
|
163
|
+
'<button ng-get="/mock/now" data-latch="{{ latch }}" data-trigger="mouseover">Load</button>';
|
|
164
|
+
const scope = $rootScope.$new();
|
|
165
|
+
$compile(el)(scope);
|
|
166
|
+
await wait(100);
|
|
167
|
+
expect(el.innerText).toBe("Load");
|
|
168
|
+
scope.latch = true;
|
|
169
|
+
await wait(100);
|
|
170
|
+
expect(el.innerText).not.toBe("Load");
|
|
171
|
+
const firstRes = parseInt(el.innerText);
|
|
172
|
+
expect(firstRes).toBeLessThan(Date.now());
|
|
173
|
+
|
|
174
|
+
browserTrigger(el.querySelector("button"), "mouseover");
|
|
175
|
+
await wait(100);
|
|
176
|
+
const secondRes = parseInt(el.innerText);
|
|
177
|
+
expect(secondRes).toBeGreaterThan(firstRes);
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
it("should still work with ng-event directives with latch change", async () => {
|
|
181
|
+
el.innerHTML =
|
|
182
|
+
'<button ng-get="/mock/now" data-latch="{{ latch }}" ng-mouseover="latch = !latch">Load</button>';
|
|
183
|
+
const scope = $rootScope.$new();
|
|
184
|
+
$compile(el)(scope);
|
|
185
|
+
await wait(100);
|
|
186
|
+
expect(el.innerText).toBe("Load");
|
|
187
|
+
browserTrigger(el.querySelector("button"), "mouseover");
|
|
188
|
+
await wait(100);
|
|
189
|
+
expect(el.innerText).not.toBe("Load");
|
|
190
|
+
const firstRes = parseInt(el.innerText);
|
|
191
|
+
expect(firstRes).toBeLessThan(Date.now());
|
|
192
|
+
|
|
193
|
+
browserTrigger(el.querySelector("button"), "mouseover");
|
|
194
|
+
await wait(100);
|
|
195
|
+
const secondRes = parseInt(el.innerText);
|
|
196
|
+
expect(secondRes).toBeGreaterThan(firstRes);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
|
|
67
200
|
describe("data-swap", () => {
|
|
68
201
|
it("should not change anything if swap is 'none'", async () => {
|
|
69
202
|
const scope = $rootScope.$new();
|
|
@@ -208,4 +341,148 @@ describe("ngGet", () => {
|
|
|
208
341
|
expect(el.lastChild.textContent).toBe("Hello");
|
|
209
342
|
});
|
|
210
343
|
});
|
|
344
|
+
|
|
345
|
+
describe("data-delay", () => {
|
|
346
|
+
it("should accept delay as a data attribute", async () => {
|
|
347
|
+
const scope = $rootScope.$new();
|
|
348
|
+
el.innerHTML =
|
|
349
|
+
'<button ng-get="/mock/hello" data-delay="1000">Load</button>';
|
|
350
|
+
$compile(el)(scope);
|
|
351
|
+
browserTrigger(el.querySelector("button"), "click");
|
|
352
|
+
await wait(100);
|
|
353
|
+
expect(el.innerText).toBe("Load");
|
|
354
|
+
|
|
355
|
+
await wait(1000);
|
|
356
|
+
expect(el.innerText).toBe("Hello");
|
|
357
|
+
});
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
describe("data-throttle", () => {
|
|
361
|
+
it("should accept throttle as a data attribute", async () => {
|
|
362
|
+
const scope = $rootScope.$new();
|
|
363
|
+
el.innerHTML =
|
|
364
|
+
'<button ng-get="/mock/now" data-throttle="1000">Load</button>';
|
|
365
|
+
$compile(el)(scope);
|
|
366
|
+
browserTrigger(el.querySelector("button"), "click");
|
|
367
|
+
await wait(100);
|
|
368
|
+
const firstRes = parseInt(el.innerText);
|
|
369
|
+
expect(firstRes).toBeLessThan(Date.now());
|
|
370
|
+
browserTrigger(el.querySelector("button"), "click");
|
|
371
|
+
await wait(100);
|
|
372
|
+
const secondRes = parseInt(el.innerText);
|
|
373
|
+
expect(secondRes).toBe(firstRes);
|
|
374
|
+
|
|
375
|
+
await wait(900);
|
|
376
|
+
// should release the throttle
|
|
377
|
+
browserTrigger(el.querySelector("button"), "click");
|
|
378
|
+
await wait(100);
|
|
379
|
+
const thirdRes = parseInt(el.innerText);
|
|
380
|
+
expect(thirdRes).toBeGreaterThan(firstRes);
|
|
381
|
+
});
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
describe("data-interval", () => {
|
|
385
|
+
it("should accept delay as a data attribute and should stop on $destroy", async () => {
|
|
386
|
+
const scope = $rootScope.$new();
|
|
387
|
+
el.innerHTML =
|
|
388
|
+
'<button ng-get="/mock/now" data-interval="100">Load</button>';
|
|
389
|
+
$compile(el)(scope);
|
|
390
|
+
|
|
391
|
+
await wait(200);
|
|
392
|
+
await wait(200);
|
|
393
|
+
const firstRes = parseInt(el.innerText);
|
|
394
|
+
expect(firstRes).toBeLessThan(Date.now());
|
|
395
|
+
await wait(200);
|
|
396
|
+
await wait(200);
|
|
397
|
+
const secondRes = parseInt(el.innerText);
|
|
398
|
+
expect(secondRes).toBeGreaterThan(firstRes);
|
|
399
|
+
await wait(200);
|
|
400
|
+
await wait(200);
|
|
401
|
+
const thirdRes = parseInt(el.innerText);
|
|
402
|
+
expect(thirdRes).toBeGreaterThan(secondRes);
|
|
403
|
+
|
|
404
|
+
scope.$broadcast("$destroy");
|
|
405
|
+
|
|
406
|
+
await wait(200);
|
|
407
|
+
await wait(200);
|
|
408
|
+
const finalRes = parseInt(el.innerText);
|
|
409
|
+
|
|
410
|
+
await wait(1000);
|
|
411
|
+
await wait(200);
|
|
412
|
+
expect(parseInt(el.innerText)).toEqual(finalRes);
|
|
413
|
+
});
|
|
414
|
+
});
|
|
415
|
+
|
|
416
|
+
describe("data-loading", () => {
|
|
417
|
+
it("should update loading data attribute", async () => {
|
|
418
|
+
const scope = $rootScope.$new();
|
|
419
|
+
el.innerHTML = '<button ng-get="/mock/now" data-loading>Load</button>';
|
|
420
|
+
$compile(el)(scope);
|
|
421
|
+
browserTrigger(el.querySelector("button"), "click");
|
|
422
|
+
expect(el.querySelector("button").dataset.loading).toEqual("true");
|
|
423
|
+
await wait(200);
|
|
424
|
+
expect(el.querySelector("button").dataset.loading).toEqual("false");
|
|
425
|
+
});
|
|
426
|
+
});
|
|
427
|
+
|
|
428
|
+
describe("data-loading-class", () => {
|
|
429
|
+
it("should update class from data-loading-class attribute", async () => {
|
|
430
|
+
const scope = $rootScope.$new();
|
|
431
|
+
el.innerHTML =
|
|
432
|
+
'<button ng-get="/mock/now" data-loading-class="red">Load</button>';
|
|
433
|
+
$compile(el)(scope);
|
|
434
|
+
browserTrigger(el.querySelector("button"), "click");
|
|
435
|
+
expect(el.querySelector("button").classList.contains("red")).toBeTrue();
|
|
436
|
+
await wait(200);
|
|
437
|
+
expect(el.querySelector("button").classList.contains("red")).toBeFalse();
|
|
438
|
+
});
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
describe("data-success", () => {
|
|
442
|
+
it("should evaluate expression passing result", async () => {
|
|
443
|
+
const scope = $rootScope.$new();
|
|
444
|
+
el.innerHTML =
|
|
445
|
+
'<button ng-get="/mock/hello" data-success="res = $res">Load</button>';
|
|
446
|
+
$compile(el)(scope);
|
|
447
|
+
browserTrigger(el.querySelector("button"), "click");
|
|
448
|
+
await wait(200);
|
|
449
|
+
expect(scope.res).toEqual("Hello");
|
|
450
|
+
});
|
|
451
|
+
});
|
|
452
|
+
|
|
453
|
+
describe("data-state-success", () => {
|
|
454
|
+
it("should call stateService with success state", async () => {
|
|
455
|
+
const scope = $rootScope.$new();
|
|
456
|
+
el.innerHTML =
|
|
457
|
+
'<button ng-get="/mock/hello" data-state-success="success">Load</button><ng-view id="view"></ng-view>';
|
|
458
|
+
$compile(el)(scope);
|
|
459
|
+
browserTrigger(el.querySelector("button"), "click");
|
|
460
|
+
await wait(200);
|
|
461
|
+
expect(document.getElementById("view").innerHTML).toEqual("success");
|
|
462
|
+
});
|
|
463
|
+
});
|
|
464
|
+
|
|
465
|
+
describe("data-state-error", () => {
|
|
466
|
+
it("should call stateService with success state", async () => {
|
|
467
|
+
const scope = $rootScope.$new();
|
|
468
|
+
el.innerHTML =
|
|
469
|
+
'<button ng-get="/mock/422" data-state-success="success" data-state-error="error">Load</button><ng-view id="view"></ng-view>';
|
|
470
|
+
$compile(el)(scope);
|
|
471
|
+
browserTrigger(el.querySelector("button"), "click");
|
|
472
|
+
await wait(200);
|
|
473
|
+
expect(document.getElementById("view").innerHTML).toEqual("error");
|
|
474
|
+
});
|
|
475
|
+
});
|
|
476
|
+
|
|
477
|
+
describe("data-error", () => {
|
|
478
|
+
it("should evaluate expression passing result", async () => {
|
|
479
|
+
const scope = $rootScope.$new();
|
|
480
|
+
el.innerHTML =
|
|
481
|
+
'<button ng-get="/mock/422" data-error="res = $res">Load</button>';
|
|
482
|
+
$compile(el)(scope);
|
|
483
|
+
browserTrigger(el.querySelector("button"), "click");
|
|
484
|
+
await wait(200);
|
|
485
|
+
expect(scope.res).toEqual("Invalid data");
|
|
486
|
+
});
|
|
487
|
+
});
|
|
211
488
|
});
|