@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.
Files changed (376) hide show
  1. package/@types/animations/raf-scheduler.d.ts +2 -2
  2. package/@types/animations/shared.d.ts +0 -1
  3. package/@types/core/compile/attributes.d.ts +3 -3
  4. package/@types/core/compile/compile.d.ts +1 -1
  5. package/@types/core/di/injector.d.ts +0 -1
  6. package/@types/core/di/internal-injector.d.ts +1 -0
  7. package/@types/core/di/ng-module.d.ts +5 -0
  8. package/@types/core/filter/filter.d.ts +11 -13
  9. package/@types/core/parse/parse.d.ts +6 -7
  10. package/@types/core/sanitize/sanitize-uri.d.ts +3 -6
  11. package/@types/core/scope/scope.d.ts +1 -1
  12. package/@types/directive/attrs/attrs.d.ts +7 -1
  13. package/@types/directive/bind/bind.d.ts +2 -1
  14. package/@types/directive/events/events.d.ts +9 -3
  15. package/@types/directive/http/http.d.ts +6 -2
  16. package/@types/directive/include/include.d.ts +2 -2
  17. package/@types/directive/input/input.d.ts +2 -12
  18. package/@types/directive/messages/messages.d.ts +9 -48
  19. package/@types/directive/model/model.d.ts +3 -3
  20. package/@types/directive/options/options.d.ts +13 -20
  21. package/@types/directive/switch/switch.d.ts +1 -0
  22. package/@types/directive/transclude/transclude.d.ts +10 -6
  23. package/@types/index.d.ts +1 -1
  24. package/@types/interface.d.ts +56 -18
  25. package/@types/{public.d.ts → ng.d.ts} +2 -2
  26. package/@types/router/directives/view-directive.d.ts +2 -19
  27. package/@types/router/{common → glob}/glob.d.ts +5 -1
  28. package/@types/router/globals.d.ts +2 -3
  29. package/@types/router/path/path-utils.d.ts +8 -11
  30. package/@types/router/state/interface.d.ts +1 -1
  31. package/@types/router/state/state-object.d.ts +1 -1
  32. package/@types/router/state/state-registry.d.ts +1 -2
  33. package/@types/router/state/state-service.d.ts +8 -7
  34. package/@types/router/state-filters.d.ts +24 -2
  35. package/@types/router/transition/transition.d.ts +12 -15
  36. package/@types/router/url/url-matcher.d.ts +3 -3
  37. package/@types/router/url/url-rule.d.ts +1 -0
  38. package/@types/router/url/url-rules.d.ts +26 -6
  39. package/@types/router/url/url-service.d.ts +30 -42
  40. package/@types/services/anchor-scroll.d.ts +1 -1
  41. package/@types/{core → services/exception}/exception-handler.d.ts +4 -4
  42. package/@types/{core/error-handler.d.ts → services/exception/interface.d.ts} +1 -1
  43. package/@types/services/http/http.d.ts +48 -3
  44. package/@types/services/http/interface.d.ts +2 -2
  45. package/@types/services/http-backend/http-backend.d.ts +49 -44
  46. package/@types/services/location/interface.d.ts +63 -0
  47. package/@types/services/location/location.d.ts +330 -0
  48. package/@types/{core → services}/sce/sce.d.ts +1 -1
  49. package/@types/services/template-cache/interface.d.ts +8 -2
  50. package/@types/services/template-cache/template-cache.d.ts +1 -1
  51. package/@types/services/template-request.d.ts +1 -1
  52. package/@types/shared/cache.d.ts +0 -2
  53. package/@types/shared/common.d.ts +0 -2
  54. package/@types/shared/dom.d.ts +6 -0
  55. package/@types/shared/interface.d.ts +0 -4
  56. package/@types/{router/common → shared}/queue.d.ts +2 -2
  57. package/@types/shared/test-utils.d.ts +1 -0
  58. package/@types/shared/url-utils/interface.d.ts +46 -0
  59. package/@types/shared/url-utils/url-utils.d.ts +64 -0
  60. package/@types/shared/utils.d.ts +44 -6
  61. package/Makefile +8 -4
  62. package/dist/angular-ts.esm.js +1889 -2199
  63. package/dist/angular-ts.umd.js +1889 -2199
  64. package/dist/angular-ts.umd.min.js +1 -1
  65. package/docs/assets/scss/index.scss +23 -0
  66. package/docs/content/_index.md +9 -8
  67. package/docs/content/docs/_index.md +1 -1
  68. package/docs/content/docs/directive/app.md +1 -1
  69. package/docs/content/docs/directive/bind.md +10 -8
  70. package/docs/content/docs/directive/blur.md +1 -1
  71. package/docs/content/docs/directive/channel.md +2 -2
  72. package/docs/content/docs/directive/class-even.md +1 -1
  73. package/docs/content/docs/directive/class-odd.md +1 -1
  74. package/docs/content/docs/directive/class.md +1 -1
  75. package/docs/content/docs/directive/click.md +1 -1
  76. package/docs/content/docs/directive/copy.md +1 -1
  77. package/docs/content/docs/directive/cut.md +1 -1
  78. package/docs/content/docs/directive/dblclick.md +1 -1
  79. package/docs/content/docs/directive/focus.md +1 -1
  80. package/docs/content/docs/directive/get.md +203 -0
  81. package/docs/content/docs/directive/keydown.md +1 -1
  82. package/docs/content/docs/directive/keyup.md +1 -1
  83. package/docs/content/docs/directive/load.md +1 -1
  84. package/docs/content/docs/directive/mousedown.md +1 -1
  85. package/docs/content/docs/directive/mouseenter.md +1 -1
  86. package/docs/content/docs/directive/mouseleave.md +1 -1
  87. package/docs/content/docs/directive/mousemove.md +1 -1
  88. package/docs/content/docs/directive/mouseout.md +1 -1
  89. package/docs/content/docs/directive/mouseover.md +1 -1
  90. package/docs/content/docs/directive/mouseup.md +1 -1
  91. package/docs/content/docs/directive/non-bindable.md +28 -0
  92. package/docs/content/docs/provider/locationProvider.md +26 -0
  93. package/docs/content/docs/provider/templateCacheProvider.md +66 -1
  94. package/docs/content/docs/service/location.md +57 -0
  95. package/docs/content/docs/service/templateCache.md +2 -2
  96. package/docs/content/docs/service/url.md +5 -0
  97. package/docs/layouts/partials/hooks/head-end.html +1 -1
  98. package/docs/layouts/shortcodes/showcss.html +2 -0
  99. package/docs/layouts/shortcodes/version.html +1 -0
  100. package/docs/static/examples/counter/counter-test.html +0 -4
  101. package/docs/static/examples/eventbus/eventbus-test.html +0 -4
  102. package/docs/static/examples/ng-bind/ng-bind.html +2 -2
  103. package/docs/static/examples/ng-non-bindable/ng-non-bindable-test.html +13 -0
  104. package/docs/static/examples/ng-non-bindable/ng-non-bindable.html +3 -0
  105. package/docs/static/examples/ng-non-bindable/ng-non-bindable.test.js +11 -0
  106. package/docs/static/typedoc/assets/hierarchy.js +1 -1
  107. package/docs/static/typedoc/assets/highlight.css +6 -6
  108. package/docs/static/typedoc/assets/navigation.js +1 -1
  109. package/docs/static/typedoc/assets/search.js +1 -1
  110. package/docs/static/typedoc/classes/Location.html +55 -0
  111. package/docs/static/typedoc/classes/LocationProvider.html +20 -0
  112. package/docs/static/typedoc/classes/NgModule.html +32 -0
  113. package/docs/static/typedoc/classes/TemplateCacheProvider.html +1 -1
  114. package/docs/static/typedoc/hierarchy.html +1 -1
  115. package/docs/static/typedoc/index.html +1 -1
  116. package/docs/static/typedoc/interfaces/DefaultPorts.html +5 -0
  117. package/docs/static/typedoc/interfaces/Directive.html +5 -4
  118. package/docs/static/typedoc/interfaces/Html5Mode.html +23 -0
  119. package/docs/static/typedoc/interfaces/HttpProviderDefaults.html +1 -1
  120. package/docs/static/typedoc/interfaces/HttpResponse.html +2 -3
  121. package/docs/static/typedoc/interfaces/Provider.html +16 -10
  122. package/docs/static/typedoc/interfaces/RequestConfig.html +1 -1
  123. package/docs/static/typedoc/interfaces/RequestShortcutConfig.html +1 -1
  124. package/docs/static/typedoc/interfaces/TemplateCache.html +7 -0
  125. package/docs/static/typedoc/interfaces/UrlParts.html +9 -0
  126. package/docs/static/typedoc/types/AnnotatedDirectiveFactory.html +1 -0
  127. package/docs/static/typedoc/types/AnnotatedFactory.html +1 -1
  128. package/docs/static/typedoc/types/DirectiveFactory.html +1 -2
  129. package/docs/static/typedoc/types/DirectiveFactoryFn.html +1 -0
  130. package/docs/static/typedoc/types/Expression.html +1 -1
  131. package/docs/static/typedoc/types/HttpResponseStatus.html +1 -0
  132. package/docs/static/typedoc/types/{TemplateCache.html → SwapModeType.html} +1 -1
  133. package/docs/static/typedoc/types/UrlChangeListener.html +5 -0
  134. package/docs/static/typedoc/variables/SwapMode.html +11 -0
  135. package/docs/static/version.js +13 -0
  136. package/docs/test-results/.last-run.json +4 -0
  137. package/docs/test-results/static-examples-counter-counter-counter-example/error-context.md +50 -0
  138. package/legacy.d.ts +0 -10
  139. package/package.json +1 -3
  140. package/src/{loader.js → angular.js} +5 -10
  141. package/src/angular.spec.js +189 -21
  142. package/src/animations/animate-children-directive.js +2 -2
  143. package/src/animations/animate-css.js +17 -18
  144. package/src/animations/animate.spec.js +1 -1
  145. package/src/animations/raf-scheduler.js +1 -1
  146. package/src/animations/shared.js +2 -12
  147. package/src/binding.spec.js +1 -1
  148. package/src/core/compile/attributes.js +1 -1
  149. package/src/core/compile/compile.js +7 -10
  150. package/src/core/compile/compile.spec.js +1 -1
  151. package/src/core/controller/controller.spec.js +1 -1
  152. package/src/core/controller/controller.test.js +1 -0
  153. package/src/core/di/injector.js +11 -25
  154. package/src/core/di/injector.spec.js +2 -2
  155. package/src/core/di/injector.test.js +2 -2
  156. package/src/core/di/internal-injector.js +7 -7
  157. package/src/core/di/ng-module.js +12 -27
  158. package/src/core/filter/filter.js +28 -28
  159. package/src/core/filter/filter.spec.js +1 -1
  160. package/src/core/filter/filter.test.js +1 -0
  161. package/src/core/interpolate/interpolate.js +4 -6
  162. package/src/core/interpolate/interpolate.spec.js +1 -1
  163. package/src/core/interpolate/interpolate.test.js +1 -0
  164. package/src/core/parse/ast/ast.spec.js +1 -1
  165. package/src/core/parse/ast/ast.test.js +1 -1
  166. package/src/core/parse/interpreter.js +32 -38
  167. package/src/core/parse/lexer/lexer.spec.js +1 -1
  168. package/src/core/parse/parse.js +150 -146
  169. package/src/core/parse/parse.spec.js +17 -16
  170. package/src/core/prop.spec.js +1 -1
  171. package/src/core/root-element.spec.js +1 -1
  172. package/src/core/sanitize/sanitize-uri.js +3 -3
  173. package/src/core/scope/scope.js +12 -13
  174. package/src/core/scope/scope.spec.js +3 -4
  175. package/src/directive/aria/aria.spec.js +1 -1
  176. package/src/directive/aria/aria.test.js +1 -0
  177. package/src/directive/attrs/attrs.js +7 -4
  178. package/src/directive/attrs/attrs.spec.js +1 -1
  179. package/src/directive/attrs/attrs.test.js +1 -0
  180. package/src/directive/attrs/boolean.spec.js +1 -1
  181. package/src/directive/attrs/boolean.test.js +1 -0
  182. package/src/directive/attrs/element-style.spec.js +1 -1
  183. package/src/directive/attrs/element-style.test.js +1 -0
  184. package/src/directive/attrs/src.spec.js +1 -1
  185. package/src/directive/attrs/src.test.js +1 -0
  186. package/src/directive/bind/bind-html.spec.js +1 -1
  187. package/src/directive/bind/bind.js +1 -0
  188. package/src/directive/bind/bind.spec.js +1 -1
  189. package/src/directive/bind/bind.test.js +1 -0
  190. package/src/directive/channel/channel.spec.js +1 -1
  191. package/src/directive/channel/channel.test.js +1 -0
  192. package/src/directive/class/class.spec.js +1 -1
  193. package/src/directive/class/class.test.js +1 -0
  194. package/src/directive/cloak/cloak.spec.js +1 -1
  195. package/src/directive/cloak/cloak.test.js +1 -0
  196. package/src/directive/controller/controller.spec.js +1 -1
  197. package/src/directive/controller/controller.test.js +1 -0
  198. package/src/directive/events/click.spec.js +1 -1
  199. package/src/directive/events/event.spec.js +1 -1
  200. package/src/directive/events/events.js +6 -2
  201. package/src/directive/events/events.test.js +1 -0
  202. package/src/directive/form/form.js +8 -5
  203. package/src/directive/form/form.spec.js +1 -1
  204. package/src/directive/form/form.test.js +1 -0
  205. package/src/directive/http/delete.spec.js +3 -1
  206. package/src/directive/http/form-test.html +18 -0
  207. package/src/directive/http/get.spec.js +281 -4
  208. package/src/directive/http/http.js +112 -15
  209. package/src/directive/http/http.test.js +2 -2
  210. package/src/directive/http/post.spec.js +506 -9
  211. package/src/directive/http/put.spec.js +3 -1
  212. package/src/directive/if/if.spec.js +1 -1
  213. package/src/directive/include/include.js +7 -7
  214. package/src/directive/include/include.spec.js +1 -1
  215. package/src/directive/init/init.spec.js +1 -1
  216. package/src/directive/init/init.test.js +1 -0
  217. package/src/directive/input/input.js +19 -43
  218. package/src/directive/input/input.spec.js +1 -2
  219. package/src/directive/input/input.test.js +1 -0
  220. package/src/directive/messages/messages.js +4 -0
  221. package/src/directive/messages/messages.spec.js +1 -1
  222. package/src/directive/messages/messages.test.js +1 -0
  223. package/src/directive/model/model.js +14 -14
  224. package/src/directive/model/model.spec.js +1 -1
  225. package/src/directive/model/model.test.js +1 -0
  226. package/src/directive/model-options/model-option.test.js +1 -0
  227. package/src/directive/model-options/model-options.js +1 -1
  228. package/src/directive/model-options/model-options.spec.js +1 -1
  229. package/src/directive/non-bindable/non-bindable.spec.js +1 -1
  230. package/src/directive/non-bindable/non-bindable.test.js +1 -0
  231. package/src/directive/observe/observe.spec.js +1 -1
  232. package/src/directive/observe/observe.test.js +1 -0
  233. package/src/directive/on/on.spec.js +1 -1
  234. package/src/directive/on/on.test.js +1 -0
  235. package/src/directive/options/options.js +454 -464
  236. package/src/directive/options/options.spec.js +1 -1
  237. package/src/directive/options/options.test.js +1 -0
  238. package/src/directive/ref/href.spec.js +1 -1
  239. package/src/directive/ref/href.test.js +2 -0
  240. package/src/directive/ref/ref.spec.js +1 -1
  241. package/src/directive/repeat/repeat.spec.js +2 -3
  242. package/src/directive/repeat/repeat.test.js +1 -0
  243. package/src/directive/script/script.spec.js +1 -1
  244. package/src/directive/script/script.test.js +1 -0
  245. package/src/directive/select/select.js +1 -1
  246. package/src/directive/select/select.spec.js +1 -1
  247. package/src/directive/select/select.test.js +1 -0
  248. package/src/directive/setter/setter.js +12 -14
  249. package/src/directive/setter/setter.spec.js +40 -17
  250. package/src/directive/setter/setter.test.js +1 -0
  251. package/src/directive/show-hide/show-hide.spec.js +1 -1
  252. package/src/directive/show-hide/show-hide.test.js +1 -0
  253. package/src/directive/style/style.spec.js +1 -1
  254. package/src/directive/style/style.test.js +1 -0
  255. package/src/directive/switch/switch.js +1 -0
  256. package/src/directive/switch/switch.spec.js +1 -1
  257. package/src/directive/switch/switch.test.js +1 -0
  258. package/src/directive/transclude/transclude.js +87 -89
  259. package/src/directive/validators/validators.js +82 -84
  260. package/src/directive/validators/validators.spec.js +5 -4
  261. package/src/directive/validators/validators.test.js +1 -0
  262. package/src/filters/filter.spec.js +1 -1
  263. package/src/filters/filters.spec.js +1 -1
  264. package/src/filters/limit-to.js +2 -3
  265. package/src/filters/limit-to.spec.js +1 -1
  266. package/src/filters/order-by.spec.js +1 -1
  267. package/src/index.js +1 -1
  268. package/src/injection-tokens.js +6 -2
  269. package/src/interface.ts +70 -19
  270. package/src/loader.md +0 -155
  271. package/src/{public.js → ng.js} +16 -23
  272. package/src/{public.spec.js → ng.spec.js} +1 -1
  273. package/src/router/directives/state-directives.spec.js +9 -8
  274. package/src/router/directives/view-directive.js +11 -9
  275. package/src/router/directives/view-directive.spec.js +8 -9
  276. package/src/router/{common/common.html → glob/glob.html} +2 -3
  277. package/src/router/{common → glob}/glob.js +5 -0
  278. package/src/router/{common/common.test.js → glob/glob.test.js} +2 -1
  279. package/src/router/globals.js +1 -2
  280. package/src/router/path/path-utils.js +5 -0
  281. package/src/router/router-test-hashbang.html +45 -0
  282. package/src/router/services.spec.js +5 -6
  283. package/src/router/state/interface.ts +1 -1
  284. package/src/router/state/state-builder.js +3 -3
  285. package/src/router/state/state-builder.spec.js +1 -1
  286. package/src/router/state/state-object.js +1 -1
  287. package/src/router/state/state-registry.js +2 -3
  288. package/src/router/state/state-service.js +13 -10
  289. package/src/router/state/state.spec.js +23 -22
  290. package/src/router/state/state.test.js +1 -0
  291. package/src/router/state/views.js +1 -1
  292. package/src/router/state-filter.spec.js +1 -1
  293. package/src/router/state-filters.js +15 -11
  294. package/src/router/template-factory.js +5 -4
  295. package/src/router/template-factory.spec.js +1 -1
  296. package/src/router/transition/hook-registry.js +1 -1
  297. package/src/router/transition/transition-service.js +6 -5
  298. package/src/router/transition/transition.js +4 -4
  299. package/src/router/url/url-matcher.js +3 -3
  300. package/src/router/url/url-rule.js +1 -0
  301. package/src/router/url/url-rules.js +8 -5
  302. package/src/router/url/url-service.js +82 -85
  303. package/src/router/url/url-service.spec.js +55 -39
  304. package/src/router/url/url.test.js +1 -0
  305. package/src/router/view/view.js +4 -5
  306. package/src/router/view/view.spec.js +10 -12
  307. package/src/router/view/view.test.js +1 -0
  308. package/src/router/view-hook.spec.js +1 -1
  309. package/src/router/view-scroll.spec.js +1 -1
  310. package/src/services/anchor-scroll.html +2 -9
  311. package/src/services/anchor-scroll.js +6 -5
  312. package/src/{core → services/exception}/exception-handler.js +2 -2
  313. package/src/{core/error-handler.ts → services/exception/interface.ts} +1 -1
  314. package/src/services/http/http.js +11 -17
  315. package/src/services/http/http.spec.js +2 -7
  316. package/src/services/http/interface.ts +2 -2
  317. package/src/services/http/template-request.spec.js +1 -1
  318. package/src/services/http-backend/http-backend.js +53 -89
  319. package/src/services/http-backend/http-backend.spec.js +2 -6
  320. package/src/services/http-backend/http-backend.test.js +1 -0
  321. package/src/services/location/interface.ts +70 -0
  322. package/src/{core → services}/location/location.html +4 -1
  323. package/src/services/location/location.js +999 -0
  324. package/src/{core → services}/location/location.spec.js +911 -532
  325. package/src/{core → services}/location/location.test.js +2 -2
  326. package/src/services/log/log.spec.js +1 -1
  327. package/src/services/log/log.test.js +1 -0
  328. package/src/services/pubsub/pubsub.spec.js +1 -1
  329. package/src/{core → services}/sce/sce.html +1 -1
  330. package/src/{core → services}/sce/sce.js +14 -10
  331. package/src/{core → services}/sce/sce.md +2 -2
  332. package/src/{core → services}/sce/sce.spec.js +3 -4
  333. package/src/{core → services}/sce/sce.test.js +1 -1
  334. package/src/services/template-cache/interface.ts +8 -2
  335. package/src/services/template-cache/template-cache.js +3 -1
  336. package/src/services/template-cache/template-cache.spec.js +73 -1
  337. package/src/services/template-cache/template-cache.test.js +1 -0
  338. package/src/services/template-request.js +2 -1
  339. package/src/shared/cache.js +0 -2
  340. package/src/shared/common.js +0 -5
  341. package/src/shared/common.spec.js +1 -1
  342. package/src/shared/dom.js +10 -0
  343. package/src/shared/interface.ts +0 -4
  344. package/src/{router/common → shared}/queue.js +7 -7
  345. package/src/shared/shared.html +1 -0
  346. package/src/shared/shared.test.js +1 -0
  347. package/src/shared/test-utils.js +1 -0
  348. package/src/shared/url-utils/interface.ts +54 -0
  349. package/src/{core → shared}/url-utils/url-utils.html +4 -1
  350. package/src/{core → shared}/url-utils/url-utils.js +26 -47
  351. package/src/{core → shared}/url-utils/url-utils.spec.js +10 -17
  352. package/src/{core → shared}/url-utils/url-utils.test.js +1 -1
  353. package/src/shared/utils.js +60 -9
  354. package/src/shared/utils.spec.js +35 -1
  355. package/src/src.html +1 -2
  356. package/typedoc.json +0 -1
  357. package/utils/express.js +36 -2
  358. package/utils/version.cjs +23 -0
  359. package/@types/core/location/location.d.ts +0 -317
  360. package/@types/core/task-tracker-factory.d.ts +0 -76
  361. package/@types/core/url-utils/url-utils.d.ts +0 -56
  362. package/@types/router/state-provider.d.ts +0 -123
  363. package/@types/services/browser.d.ts +0 -101
  364. package/docs/static/typedoc/types/SwapInsertPosition.html +0 -2
  365. package/jsdoc.json +0 -22
  366. package/src/core/location/location.js +0 -984
  367. package/src/core/location/location.md +0 -114
  368. package/src/core/task-tracker-factory.js +0 -145
  369. package/src/core/url-utils/url-utils.md +0 -46
  370. package/src/directive/non-bindable/non-bindable.md +0 -17
  371. package/src/loader.spec.js +0 -169
  372. package/src/router/state-provider.js +0 -146
  373. package/src/services/browser.js +0 -212
  374. /package/@types/{loader.d.ts → angular.d.ts} +0 -0
  375. /package/src/router/{common → glob}/glob.spec.js +0 -0
  376. /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) {
@@ -1,4 +1,4 @@
1
- import { Angular } from "../../loader.js";
1
+ import { Angular } from "../../angular.js";
2
2
  import { dealoc } from "../../shared/dom.js";
3
3
  import { wait } from "../../shared/test-utils.js";
4
4
 
@@ -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
  );
@@ -1,4 +1,4 @@
1
- import { Angular } from "../../loader.js";
1
+ import { Angular } from "../../angular.js";
2
2
  import { EventBus } from "../../services/pubsub/pubsub.js";
3
3
  import { dealoc } from "../../shared/dom.js";
4
4
  import { wait } from "../../shared/test-utils.js";
@@ -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
  );
@@ -1,4 +1,4 @@
1
- import { Angular } from "../../loader.js";
1
+ import { Angular } from "../../angular.js";
2
2
  import { dealoc } from "../../shared/dom.js";
3
3
  import { wait } from "../../shared/test-utils.js";
4
4
 
@@ -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
  );
@@ -1,5 +1,5 @@
1
1
  import { createElementFromHTML, dealoc } from "../../shared/dom.js";
2
- import { Angular } from "../../loader.js";
2
+ import { Angular } from "../../angular.js";
3
3
  import { createInjector } from "../../core/di/injector.js";
4
4
 
5
5
  describe("ngCloak", () => {
@@ -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
  );
@@ -1,4 +1,4 @@
1
- import { Angular } from "../../loader.js";
1
+ import { Angular } from "../../angular.js";
2
2
  import { createInjector } from "../../core/di/injector.js";
3
3
  import { dealoc, createElementFromHTML } from "../../shared/dom.js";
4
4
  import { bind } from "../../shared/utils.js";
@@ -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
  );
@@ -1,5 +1,5 @@
1
1
  import { dealoc } from "../../shared/dom.js";
2
- import { Angular } from "../../loader.js";
2
+ import { Angular } from "../../angular.js";
3
3
  import { createInjector } from "../../core/di/injector.js";
4
4
 
5
5
  describe("ngClick", () => {
@@ -1,4 +1,4 @@
1
- import { Angular } from "../../loader.js";
1
+ import { Angular } from "../../angular.js";
2
2
  import { createInjector } from "../../core/di/injector.js";
3
3
  import { dealoc } from "../../shared/dom.js";
4
4
  import { browserTrigger, wait } from "../../shared/test-utils.js";
@@ -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('../../core/exception-handler.js').ErrorHandler} $exceptionHandler
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('../../core/exception-handler.js').ErrorHandler} $exceptionHandler
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 = ["$element", "$attrs", "$scope", "$animate", "$interpolate"];
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
- const formDirective = {
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
@@ -1,4 +1,4 @@
1
- import { Angular } from "../../loader.js";
1
+ import { Angular } from "../../angular.js";
2
2
  import {
3
3
  createElementFromHTML,
4
4
  dealoc,
@@ -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 "../../loader.js";
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 "../../loader.js";
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("ngGet", () => {
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 statuc error without a body", async () => {
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
  });