@angular-wave/angular.ts 0.7.5 → 0.7.8

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 (174) 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/sanitize/sanitize-uri.d.ts +3 -6
  10. package/@types/core/scope/scope.d.ts +1 -3
  11. package/@types/directive/attrs/attrs.d.ts +7 -1
  12. package/@types/directive/events/events.d.ts +9 -3
  13. package/@types/directive/http/http.d.ts +6 -2
  14. package/@types/directive/include/include.d.ts +2 -2
  15. package/@types/directive/input/input.d.ts +2 -12
  16. package/@types/directive/messages/messages.d.ts +9 -48
  17. package/@types/directive/model/model.d.ts +3 -3
  18. package/@types/directive/options/options.d.ts +13 -20
  19. package/@types/directive/setter/setter.d.ts +2 -2
  20. package/@types/directive/switch/switch.d.ts +1 -0
  21. package/@types/directive/transclude/transclude.d.ts +10 -6
  22. package/@types/interface.d.ts +54 -18
  23. package/@types/router/common/glob.d.ts +5 -1
  24. package/@types/router/directives/view-directive.d.ts +2 -19
  25. package/@types/router/globals.d.ts +1 -2
  26. package/@types/router/state/state-registry.d.ts +1 -2
  27. package/@types/router/url/url-service.d.ts +7 -9
  28. package/@types/services/anchor-scroll.d.ts +1 -1
  29. package/@types/{core → services/exception}/exception-handler.d.ts +4 -4
  30. package/@types/{core/error-handler.d.ts → services/exception/interface.d.ts} +1 -1
  31. package/@types/services/http/http.d.ts +0 -2
  32. package/@types/services/http/interface.d.ts +2 -2
  33. package/@types/services/http-backend/http-backend.d.ts +13 -21
  34. package/@types/services/location/interface.d.ts +8 -0
  35. package/@types/{core → services}/location/location.d.ts +52 -12
  36. package/@types/{core → services}/sce/sce.d.ts +1 -1
  37. package/@types/services/template-cache/interface.d.ts +8 -2
  38. package/@types/services/template-cache/template-cache.d.ts +1 -1
  39. package/@types/services/template-request.d.ts +1 -1
  40. package/@types/shared/cache.d.ts +0 -2
  41. package/@types/shared/dom.d.ts +6 -0
  42. package/@types/shared/test-utils.d.ts +1 -0
  43. package/@types/shared/url-utils/interface.d.ts +47 -0
  44. package/@types/{core → shared}/url-utils/url-utils.d.ts +26 -13
  45. package/@types/shared/utils.d.ts +23 -0
  46. package/Makefile +3 -2
  47. package/dist/angular-ts.esm.js +1188 -1364
  48. package/dist/angular-ts.umd.js +1188 -1364
  49. package/dist/angular-ts.umd.min.js +1 -1
  50. package/docs/assets/scss/index.scss +12 -0
  51. package/docs/content/_index.md +15 -4
  52. package/docs/content/docs/directive/bind.md +72 -0
  53. package/docs/content/docs/directive/click.md +3 -0
  54. package/docs/content/docs/directive/dblclick.md +3 -0
  55. package/docs/content/docs/directive/get.md +203 -0
  56. package/docs/content/docs/directive/keydown.md +38 -0
  57. package/docs/content/docs/directive/keyup.md +38 -0
  58. package/docs/content/docs/directive/load.md +43 -0
  59. package/docs/content/docs/provider/templateCacheProvider.md +66 -1
  60. package/docs/content/docs/service/templateCache.md +2 -2
  61. package/docs/layouts/partials/hooks/head-end.html +1 -1
  62. package/docs/layouts/shortcodes/showcss.html +2 -0
  63. package/docs/static/examples/ng-bind/ng-bind.html +9 -0
  64. package/docs/static/examples/ng-keydown/ng-keydown.html +9 -0
  65. package/docs/static/examples/ng-keyup/ng-keyup.html +9 -0
  66. package/docs/static/examples/ng-load/ng-load.html +8 -0
  67. package/docs/static/typedoc/assets/hierarchy.js +1 -1
  68. package/docs/static/typedoc/assets/navigation.js +1 -1
  69. package/docs/static/typedoc/assets/search.js +1 -1
  70. package/docs/static/typedoc/classes/NgModule.html +32 -0
  71. package/docs/static/typedoc/classes/TemplateCacheProvider.html +1 -1
  72. package/docs/static/typedoc/hierarchy.html +1 -1
  73. package/docs/static/typedoc/index.html +1 -1
  74. package/docs/static/typedoc/interfaces/Directive.html +5 -4
  75. package/docs/static/typedoc/interfaces/HttpProviderDefaults.html +1 -1
  76. package/docs/static/typedoc/interfaces/HttpResponse.html +2 -3
  77. package/docs/static/typedoc/interfaces/Provider.html +15 -10
  78. package/docs/static/typedoc/interfaces/RequestConfig.html +1 -1
  79. package/docs/static/typedoc/interfaces/RequestShortcutConfig.html +1 -1
  80. package/docs/static/typedoc/interfaces/TemplateCache.html +7 -0
  81. package/docs/static/typedoc/types/AnnotatedDirectiveFactory.html +1 -0
  82. package/docs/static/typedoc/types/DirectiveFactory.html +1 -2
  83. package/docs/static/typedoc/types/DirectiveFactoryFn.html +1 -0
  84. package/docs/static/typedoc/types/HttpResponseStatus.html +1 -0
  85. package/docs/static/typedoc/types/{TemplateCache.html → SwapModeType.html} +1 -1
  86. package/docs/static/typedoc/variables/SwapMode.html +11 -0
  87. package/legacy.d.ts +0 -14
  88. package/package.json +1 -3
  89. package/src/animations/animate-children-directive.js +2 -2
  90. package/src/animations/raf-scheduler.js +1 -1
  91. package/src/animations/shared.js +0 -9
  92. package/src/core/compile/attributes.js +1 -1
  93. package/src/core/compile/compile.js +3 -3
  94. package/src/core/di/injector.js +4 -17
  95. package/src/core/di/internal-injector.js +4 -1
  96. package/src/core/di/ng-module.js +12 -27
  97. package/src/core/filter/filter.js +28 -28
  98. package/src/core/parse/interpreter.js +32 -38
  99. package/src/core/sanitize/sanitize-uri.js +3 -3
  100. package/src/core/scope/scope.js +2 -7
  101. package/src/directive/attrs/attrs.js +7 -4
  102. package/src/directive/bind/bind.js +16 -4
  103. package/src/directive/bind/bind.spec.js +13 -0
  104. package/src/directive/events/events.js +7 -3
  105. package/src/directive/events/events.md +0 -41
  106. package/src/directive/http/delete.spec.js +2 -0
  107. package/src/directive/http/get.spec.js +280 -3
  108. package/src/directive/http/http.js +100 -12
  109. package/src/directive/http/http.test.js +2 -2
  110. package/src/directive/http/post.spec.js +2 -0
  111. package/src/directive/http/put.spec.js +2 -0
  112. package/src/directive/include/include.js +7 -7
  113. package/src/directive/input/input.js +6 -28
  114. package/src/directive/messages/messages.js +5 -1
  115. package/src/directive/model/model.js +1 -1
  116. package/src/directive/options/options.js +454 -464
  117. package/src/directive/repeat/repeat.js +175 -153
  118. package/src/directive/setter/setter.js +13 -15
  119. package/src/directive/setter/setter.spec.js +39 -16
  120. package/src/directive/switch/switch.js +1 -0
  121. package/src/directive/switch/switch.spec.js +1 -1
  122. package/src/directive/transclude/transclude.js +87 -89
  123. package/src/injection-tokens.js +1 -1
  124. package/src/interface.ts +68 -19
  125. package/src/loader.js +4 -9
  126. package/src/public.js +9 -15
  127. package/src/router/common/glob.js +5 -0
  128. package/src/router/directives/state-directives.js +4 -6
  129. package/src/router/directives/state-directives.spec.js +1 -1
  130. package/src/router/directives/view-directive.js +9 -1
  131. package/src/router/globals.js +0 -1
  132. package/src/router/state/state-registry.js +0 -1
  133. package/src/router/state-filters.js +2 -2
  134. package/src/router/url/url-service.js +5 -9
  135. package/src/services/anchor-scroll.html +0 -7
  136. package/src/services/anchor-scroll.js +2 -2
  137. package/src/{core → services/exception}/exception-handler.js +2 -2
  138. package/src/{core/error-handler.ts → services/exception/interface.ts} +1 -1
  139. package/src/services/http/http.js +2 -13
  140. package/src/services/http/interface.ts +2 -2
  141. package/src/services/http-backend/http-backend.js +4 -14
  142. package/src/services/http-backend/http-backend.spec.js +1 -4
  143. package/src/services/location/interface.ts +8 -0
  144. package/src/{core → services}/location/location.html +4 -1
  145. package/src/{core → services}/location/location.js +129 -27
  146. package/src/{core → services}/location/location.spec.js +2 -2
  147. package/src/{core → services}/location/location.test.js +1 -1
  148. package/src/{core → services}/sce/sce.html +1 -1
  149. package/src/{core → services}/sce/sce.js +9 -3
  150. package/src/{core → services}/sce/sce.spec.js +2 -3
  151. package/src/{core → services}/sce/sce.test.js +1 -1
  152. package/src/services/template-cache/interface.ts +8 -2
  153. package/src/services/template-cache/template-cache.js +3 -1
  154. package/src/services/template-cache/template-cache.spec.js +72 -0
  155. package/src/services/template-request.js +2 -1
  156. package/src/shared/cache.js +0 -2
  157. package/src/shared/dom.js +10 -0
  158. package/src/shared/test-utils.js +1 -0
  159. package/src/shared/url-utils/interface.ts +56 -0
  160. package/src/{core → shared}/url-utils/url-utils.html +4 -1
  161. package/src/{core → shared}/url-utils/url-utils.js +26 -23
  162. package/src/{core → shared}/url-utils/url-utils.spec.js +0 -8
  163. package/src/{core → shared}/url-utils/url-utils.test.js +1 -1
  164. package/src/shared/utils.js +47 -1
  165. package/utils/express.js +9 -1
  166. package/@types/core/task-tracker-factory.d.ts +0 -76
  167. package/@types/services/browser.d.ts +0 -101
  168. package/docs/static/typedoc/types/SwapInsertPosition.html +0 -2
  169. package/jsdoc.json +0 -22
  170. package/src/core/task-tracker-factory.js +0 -145
  171. package/src/services/browser.js +0 -212
  172. /package/src/{core → services}/location/location.md +0 -0
  173. /package/src/{core → services}/sce/sce.md +0 -0
  174. /package/src/{core → shared}/url-utils/url-utils.md +0 -0
@@ -10,4 +10,16 @@
10
10
  &::after {
11
11
  background-color: white !important; // override dark overlay
12
12
  }
13
+
14
+ #download {
15
+ display: flex;
16
+ flex-direction: row;
17
+ justify-content: center;
18
+ align-items: baseline;
19
+
20
+ #version {
21
+ font-weight: 600;
22
+ margin-right: 2rem;
23
+ }
24
+ }
13
25
  }
@@ -4,13 +4,24 @@ title: AngularTS
4
4
 
5
5
  {{< blocks/cover color="white" height="full" >}}
6
6
 
7
- <div class="text-center">
7
+ <div class="text-center" ng-app>
8
8
  <h1 class="display-1 mt-0 mt-md-5 pb-4">Angular<span>TS</span></h1>
9
9
  </div>
10
10
 
11
11
  <p class="lead mb-5">A modern, reactive and typesafe evolution of the classic JS framework from Google&copy;</p>
12
- <a class="btn btn-lg btn-secondary me-3 mb-4" href="https://github.com/Angular-Wave/angular.ts">
13
- Download <i class="fab fa-github ms-2 "></i>
14
- </a>
12
+
13
+ <div id="download">
14
+ <span id="version"></span>
15
+ <a class="btn btn-lg btn-secondary me-3 mb-4" href="https://github.com/Angular-Wave/angular.ts">
16
+ Download <i class="fab fa-github ms-2 "></i>
17
+ </a>
18
+ <script defer>
19
+ window.addEventListener("DOMContentLoaded", () => {
20
+ const versionSpan = document.getElementById("version");
21
+ const version = window.angular.version;
22
+ versionSpan.textContent = `Latest release: ${version}`;
23
+ });
24
+ </script>
25
+ </div>
15
26
 
16
27
  {{< /blocks/cover >}}
@@ -0,0 +1,72 @@
1
+ ---
2
+ title: ng-bind
3
+ description: >
4
+ Sync or hydrate textContent of element with an expression
5
+ ---
6
+
7
+ ### Description
8
+
9
+ The `ng-bind` attribute places the text content of the specified HTML element
10
+ with the value of a given expression, and to update the text content when the
11
+ value of that expression changes.
12
+
13
+ Typically, you don't use `ng-bind` directly, but instead you use the double
14
+ curly markup like `{{ expression }}` which is similar but less verbose.
15
+
16
+ It is preferable to use `ng-bind` instead of `{{ expression }}` if a template is
17
+ momentarily displayed by the browser in its raw state before it is compiled.
18
+ Since `ng-bind` is an element attribute, it makes the bindings invisible to the
19
+ user while the page is loading.
20
+
21
+ An alternative solution to this problem would be using the `ng-cloak` directive.
22
+
23
+ `ng-bind` can be modified with a `data-lazy` data attribute (or shorthand `lazy`
24
+ attribute), which will delay update of element content until model is changed.
25
+ This is useful for rendering server-generated content, while keeping the UI
26
+ dynamic. In other frameworks, this technieque is known as
27
+ [hydration](<https://en.wikipedia.org/wiki/Hydration_(web_development)>).
28
+
29
+ ### Directive parameters
30
+
31
+ ---
32
+
33
+ #### `ng-bind`
34
+
35
+ - **Type:** [Expression](../../../typedoc/types/Expression.html)
36
+ - **Restrict:** `A`
37
+ - **Element:** ANY
38
+ - **Priority:** `0`
39
+ - **Description:** Expression to evaluate and modify
40
+ [textContent](https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent)
41
+ property.
42
+ - **Example:**
43
+
44
+ ```html
45
+ <div ng-bind="name"></div>
46
+ ```
47
+
48
+ ---
49
+
50
+ ### Directive modifiers
51
+
52
+ #### `data-lazy`
53
+
54
+ - **Type:** N/A
55
+ - **Description:** Apply expression once the bound model changes.
56
+ - **Example:**
57
+
58
+ ```html
59
+ <div ng-bind="name" data-lazy></div>
60
+ <!-- or -->
61
+ <div ng-bind="name" lazy></div>
62
+ ```
63
+
64
+ ---
65
+
66
+ ### Demo
67
+
68
+ {{< showhtml src="examples/ng-bind/ng-bind.html" >}}
69
+
70
+ {{< showraw src="examples/ng-bind/ng-bind.html" >}}
71
+
72
+ ---
@@ -16,6 +16,9 @@ is clicked.
16
16
  #### `ng-click`
17
17
 
18
18
  - **Type:** [Expression](../../../typedoc/types/Expression.html)
19
+ - **Restrict:** `A`
20
+ - **Element:** ANY
21
+ - **Priority:** `0`
19
22
  - **Description:** Expression to evaluate upon
20
23
  [click](https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event)
21
24
  event.
@@ -16,6 +16,9 @@ element is double clicked.
16
16
  #### `ng-dblclick`
17
17
 
18
18
  - **Type:** [Expression](../../../typedoc/types/Expression.html)
19
+ - **Restrict:** `A`
20
+ - **Element:** ANY
21
+ - **Priority:** `0`
19
22
  - **Description:** Expression to evaluate upon
20
23
  [dblclick](https://developer.mozilla.org/en-US/docs/Web/API/Element/dblclick_event)
21
24
  event.
@@ -0,0 +1,203 @@
1
+ ---
2
+ title: ng-get
3
+ description: >
4
+ Initiates a GET request
5
+ ---
6
+
7
+ ### Description
8
+
9
+ The `ng-get` directive allows you to fetch content via `$http` service from a
10
+ remote URL and insert, replace, or manipulate it into the DOM. In case of server
11
+ error, the directive displays the error in place of success result. This
12
+ behavior can be modified with error parameters below.
13
+
14
+ ### Directive parameters
15
+
16
+ ---
17
+
18
+ #### `ng-get`
19
+
20
+ - **Type:** `string`
21
+ - **Description:** A URL to issue a GET request to
22
+ - **Example:**
23
+
24
+ ```html
25
+ <div ng-get="/example">get</div>
26
+ ```
27
+
28
+ ---
29
+
30
+ ### Directive parameters
31
+
32
+ #### `data-trigger`
33
+
34
+ - **Type:** `string`
35
+ - **Description:** Specifies the DOM event for triggering a request (default is
36
+ `click`). For a complete list, see
37
+ [UI Events](https://developer.mozilla.org/en-US/docs/Web/API/UI_Events)
38
+ - **Example:**
39
+
40
+ ```html
41
+ <div ng-get="/example" trigger="mouseover">Get</div>
42
+ ```
43
+
44
+ ---
45
+
46
+ #### `data-latch`
47
+
48
+ - **Type:** `string`
49
+ - **Description:** Triggers a request whenever its value changes. Can Cn be used
50
+ with interpolation (e.g., {{ expression }}) to observe reactive changes in the
51
+ scope.
52
+ - **Example:**
53
+
54
+ ```html
55
+ <div ng-get="/example" latch="{{ latch }}" ng-mouseover="latch = !latch">
56
+ Get
57
+ </div>
58
+ ```
59
+
60
+ ---
61
+
62
+ #### `data-swap`
63
+
64
+ - **Type:** [SwapMode](../../../typedoc/variables/SwapMode.html)
65
+ - **Description:** Controls how the response is inserted
66
+ - **Example:**
67
+
68
+ ```html
69
+ <div ng-get="/example" swap="outerHTML">Get</div>
70
+ ```
71
+
72
+ ---
73
+
74
+ #### `data-target`
75
+
76
+ - **Type:**
77
+ [selectors](https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector#selectors)
78
+ - **Description:** Specifies a DOM element where the response should be rendered
79
+ - **Example:**
80
+
81
+ ```html
82
+ <div ng-get="/example" target=".test">Get</div>
83
+ ```
84
+
85
+ ---
86
+
87
+ #### `data-delay`
88
+
89
+ - **Type:**
90
+ [delay](https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout#delay)
91
+ - **Description:** Delay request by N millisecond
92
+ - **Example:**
93
+
94
+ ```html
95
+ <div ng-get="/example" delay="1000">Get</div>
96
+ ```
97
+
98
+ ---
99
+
100
+ #### `data-interval`
101
+
102
+ - **Type:**
103
+ [delay](https://developer.mozilla.org/en-US/docs/Web/API/Window/setInterval#delay)
104
+ - **Description:** Repeat request every N milliseconds
105
+ - **Example:**
106
+
107
+ ```html
108
+ <div ng-get="/example" interval="1000">Get</div>
109
+ ```
110
+
111
+ ---
112
+
113
+ #### `data-throttle`
114
+
115
+ - **Type:**
116
+ [delay](https://developer.mozilla.org/en-US/docs/Web/API/Window/setTimeout#delay)
117
+ - **Description:** Ignores subsequent requests for N millisecond
118
+ - **Example:**
119
+
120
+ ```html
121
+ <div ng-get="/example" throttle="1000">Get</div>
122
+ ```
123
+
124
+ ---
125
+
126
+ #### `data-loading`
127
+
128
+ - **Type:** N/A
129
+ - **Description:** Adds a data-loading="true/false" flag during request
130
+ lifecycle.
131
+ - **Example:**
132
+
133
+ ```html
134
+ <div ng-get="/example" data-loading>Get</div>
135
+ ```
136
+
137
+ ---
138
+
139
+ #### `data-loading-class`
140
+
141
+ - **Type:** `string`
142
+ - **Description:** Toggles the specified class on the element while loading.
143
+ - **Example:**
144
+
145
+ ```html
146
+ <div ng-get="/example" data-loading-class="red">Get</div>
147
+ ```
148
+
149
+ ---
150
+
151
+ #### `data-success`
152
+
153
+ - **Type:** [Expression](../../../typedoc/types/Expression.html)
154
+ - **Description:** Evaluates expression when request succeeds. Response data is
155
+ available as a `$res` property on the scope.
156
+ - **Example:**
157
+
158
+ ```html
159
+ <div ng-get="/example" success="message = $res">Get {{ message }}</div>
160
+ ```
161
+
162
+ ---
163
+
164
+ #### `data-error`
165
+
166
+ - **Type:** [Expression](../../../typedoc/types/Expression.html)
167
+ - **Description:** Evaluates expression when request fails. Response data is
168
+ available as a `$res` property on the scope.
169
+ - **Example:**
170
+
171
+ ```html
172
+ <div ng-get="/example" error="errormessage = $res">
173
+ Get {{ errormessage }}
174
+ </div>
175
+ ```
176
+
177
+ ---
178
+
179
+ #### `data-success-state`
180
+
181
+ - **Type:** `string`
182
+ - **Description:** Name of the state to nagitate to when request succeeds
183
+ - **Example:**
184
+
185
+ ```html
186
+ <ng-view></ng-view>
187
+ <div ng-get="/example" success-state="account">Get</div>
188
+ ```
189
+
190
+ ---
191
+
192
+ #### `data-success-error`
193
+
194
+ - **Type:** `string`
195
+ - **Description:** Name of the state to nagitate to when request fails
196
+ - **Example:**
197
+
198
+ ```html
199
+ <ng-view></ng-view>
200
+ <div ng-get="/example" error-state="login">Get</div>
201
+ ```
202
+
203
+ ---
@@ -0,0 +1,38 @@
1
+ ---
2
+ title: ng-keydown
3
+ description: >
4
+ Handler for keydown event
5
+ ---
6
+
7
+ ### Description
8
+
9
+ The `ng-keydown` directive allows you to specify custom behavior when pressing
10
+ keys, regardless of whether they produce a character value.
11
+
12
+ ### Directive parameters
13
+
14
+ ---
15
+
16
+ #### `ng-keydown`
17
+
18
+ - **Type:** [Expression](../../../typedoc/types/Expression.html)
19
+ - **Description:** Expression to evaluate upon
20
+ [keydown](https://developer.mozilla.org/en-US/docs/Web/API/Element/keydown_event)
21
+ event.
22
+ [KeyboardEvent](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent)
23
+ object is available as `$event`.
24
+ - **Example:**
25
+
26
+ ```html
27
+ <div ng-keydown="$ctrl.greet($event)"></div>
28
+ ```
29
+
30
+ ---
31
+
32
+ #### Demo
33
+
34
+ {{< showhtml src="examples/ng-keydown/ng-keydown.html" >}}
35
+
36
+ {{< showraw src="examples/ng-keydown/ng-keydown.html" >}}
37
+
38
+ ---
@@ -0,0 +1,38 @@
1
+ ---
2
+ title: ng-keyup
3
+ description: >
4
+ Handler for keyup event
5
+ ---
6
+
7
+ ### Description
8
+
9
+ The `ng-keyup` directive allows you to specify custom behavior when releasing
10
+ keys, regardless of whether they produce a character value.
11
+
12
+ ### Directive parameters
13
+
14
+ ---
15
+
16
+ #### `ng-keyup`
17
+
18
+ - **Type:** [Expression](../../../typedoc/types/Expression.html)
19
+ - **Description:** Expression to evaluate upon
20
+ [keyup](https://developer.mozilla.org/en-US/docs/Web/API/Element/keyup_event)
21
+ event.
22
+ [KeyboardEvent](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent)
23
+ object is available as `$event`.
24
+ - **Example:**
25
+
26
+ ```html
27
+ <div ng-keyup="$ctrl.greet($event)"></div>
28
+ ```
29
+
30
+ ---
31
+
32
+ #### Demo
33
+
34
+ {{< showhtml src="examples/ng-keyup/ng-keyup.html" >}}
35
+
36
+ {{< showraw src="examples/ng-keyup/ng-keyup.html" >}}
37
+
38
+ ---
@@ -0,0 +1,43 @@
1
+ ---
2
+ title: ng-load
3
+ description: >
4
+ Handler for load event
5
+ ---
6
+
7
+ ### Description
8
+
9
+ The `ng-load` directive allows you to specify custom behavior for elements that
10
+ trigger
11
+ [load](https://developer.mozilla.org/en-US/docs/Web/API/Window/load_event)
12
+ event.
13
+
14
+ **Note**: there is no guarantee that the browser will bind `ng-load` directive
15
+ before loading its resource. Demo below is using a large image to showcase
16
+ itself.
17
+
18
+ ### Directive parameters
19
+
20
+ ---
21
+
22
+ #### `ng-load`
23
+
24
+ - **Type:** [Expression](../../../typedoc/types/Expression.html)
25
+ - **Description:** Expression to evaluate upon
26
+ [load](https://developer.mozilla.org/en-US/docs/Web/API/Window/load_event)
27
+ event. [Event](https://developer.mozilla.org/en-US/docs/Web/API/Event) object
28
+ is available as `$event`.
29
+ - **Example:**
30
+
31
+ ```html
32
+ <img src="url" ng-load="$ctrl.load($event)"></div>
33
+ ```
34
+
35
+ ---
36
+
37
+ #### Demo
38
+
39
+ {{< showhtml src="examples/ng-load/ng-load.html" >}}
40
+
41
+ {{< showraw src="examples/ng-load/ng-load.html" >}}
42
+
43
+ ---
@@ -6,10 +6,75 @@ description: >
6
6
 
7
7
  ### Description
8
8
 
9
- Initializes cache instancce for `$templateCache` service as an empty
9
+ Initializes cache instance for `$templateCache` service as an empty
10
10
  [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)
11
11
  object.
12
12
 
13
+ An alternative caching implementation can be provided by implementing
14
+ [TemplateCache](../../../typedoc/types/TemplateCache.html) interface for web
15
+ standard storage options like `localStorage`, `sessionStorage`, `IndexedDB`, or
16
+ `Cache API`. You can also use third-party storage engines like
17
+ [pouch](https://github.com/pouchdb/pouchdb) or
18
+ [SQLite](https://github.com/sqlitebrowser/sqlitebrowser). With WebAssembly
19
+ (WASM), even more powerful and flexible storage backends become possible.
20
+
21
+ Below is an example implementation using `localStorage`:
22
+
23
+ ```js
24
+ class LocalStorageMap {
25
+ constructor(prefix = '') {
26
+ this.prefix = prefix;
27
+ }
28
+
29
+ _key(key) {
30
+ return `${this.prefix}${key}`;
31
+ }
32
+
33
+ get(key) {
34
+ const raw = localStorage.getItem(this._key(key));
35
+ if (raw === null) return undefined;
36
+ try {
37
+ return JSON.parse(raw);
38
+ } catch {
39
+ return raw;
40
+ }
41
+ }
42
+
43
+ set(key, value) {
44
+ localStorage.setItem(this._key(key), value);
45
+ return this;
46
+ }
47
+
48
+ has(key) {
49
+ return localStorage.getItem(this._key(key)) !== null;
50
+ }
51
+
52
+ delete(key) {
53
+ localStorage.removeItem(this._key(key));
54
+ return true;
55
+ }
56
+
57
+ clear() {
58
+ const toRemove = [];
59
+ for (let i = 0; i < localStorage.length; i++) {
60
+ const k = localStorage.key(i);
61
+ if (k && k.startsWith(this.prefix)) {
62
+ toRemove.push(k);
63
+ }
64
+ }
65
+ toRemove.forEach((k) => localStorage.removeItem(k));
66
+ }
67
+ }
68
+ ```
69
+
70
+ Override during configuration phase:
71
+
72
+ ```js
73
+ angular.module('demo', []).config(($templateCacheProvider) => {
74
+ templateCacheProvider.cache = new LocalStorageMap();
75
+ });
76
+ ```
77
+
13
78
  ### Properties
14
79
 
15
80
  ---
@@ -9,8 +9,8 @@ description: >
9
9
  object created by `$templateCacheProvider`.
10
10
 
11
11
  The first time a template is used, it is loaded in the template cache for quick
12
- retrieval. You can load templates directly into the cache in a script tag, by
13
- using $templateRequest, or by consuming the $templateCache service directly.
12
+ retrieval. You can load templates directly into the cache in a script tag by
13
+ using $templateRequest or by consuming the $templateCache service directly.
14
14
 
15
15
  Adding via the script tag:
16
16
 
@@ -1,3 +1,3 @@
1
1
  <script src="
2
- https://cdn.jsdelivr.net/npm/@angular-wave/angular.ts/dist/angular-ts.umd.min.js
2
+ https://cdn.jsdelivr.net/npm/@angular-wave/angular.ts/dist/angular-ts.umd.js
3
3
  "></script>
@@ -0,0 +1,2 @@
1
+ {{ $code := readFile (printf "static/%s" (.Get "src")) }} {{ highlight $code
2
+ "css" "" }}
@@ -0,0 +1,9 @@
1
+ <section ng-app>
2
+ <!-- Eager bind -->
3
+ <label>Enter name: <input type="text" ng-model="name" /></label><br />
4
+ Hello <span ng-bind="name">I am never displayed</span>!
5
+
6
+ <!-- Lazy bind with short-hand `lazy` -->
7
+ <button ng-click="name1 = name">Sync</button>
8
+ <span ng-bind="name1" lazy>I am server content</span>!
9
+ </section>
@@ -0,0 +1,9 @@
1
+ <section ng-app>
2
+ <input
3
+ type="text"
4
+ ng-keydown="count = count + 1"
5
+ ng-init="count = 0"
6
+ placeholder="Click here, then press down a key."
7
+ />
8
+ Keydown {{ count }} times
9
+ </section>
@@ -0,0 +1,9 @@
1
+ <section ng-app>
2
+ <input
3
+ type="text"
4
+ ng-keyup="count = count + 1"
5
+ ng-init="count = 0"
6
+ placeholder="Click here, then press down a key."
7
+ />
8
+ Keyup {{ count }} times
9
+ </section>
@@ -0,0 +1,8 @@
1
+ <section ng-app>
2
+ <img
3
+ ng-load="res = 'Large image loaded'"
4
+ width="150px"
5
+ src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Centroamerica_prehispanica_siglo_XVI.svg/1920px-Centroamerica_prehispanica_siglo_XVI.svg.png"
6
+ />
7
+ {{ res }}
8
+ </section>
@@ -1 +1 @@
1
- window.hierarchyData = "eJyVjrEKwjAQht/l5lShtRW66uAoOkqHkFxsME00ubiUvruJgwgW1OmH/+67+0bwzlGA9lRWdcfAozIoSDubuhFSmcPyAaGFHdF1791dS/RbVDyaRDK4aCuhLeuGQfQm7WlL6BUXGJZzyKKnwSROGB7SF6Agi3yjeHF52GsjPdpstlp3E4MUby4HvEUMdOydJxFp46zS5y8ys8zfNk31tGmqT5t/LH7+Pk3TAxAbj6k="
1
+ window.hierarchyData = "eJyVjrEOwiAQht/lZqppmzp01cHR6Gg6EDgskYLC4dL03QUHY2IT7fQn/913943gnaMA7bmu6o6BR2VQkHY2dSOkMoflA0ILe6LbwbuHluh3qHg0iWRw1VZCWzUbBtGbtKctoVdcYFjPIaueBpM4YXhIX4CCLPKN4s3lYa+N9GizWd10E4MUHy5HvEcMdOqdJxFp66zSlx8ys8xim6Z82TTlt80Si7+/T9P0BAQ3j50="
@@ -1 +1 @@
1
- window.navigationData = "eJyVl01z0zAQhv+Lzx2gYcpHbyVtaGcKyeDcGA6KvYlFZclIa9MO0/+O0jixZX32ltH76vFqJe0qP/9lCI+YXWb3YreSoqMlyOwsawhWerBgRClQb0fimwprph0PlJfZ5fns0/PZibFqN3m7sacfxuMz/QGYeoi0hrphBGFOigr8QKctxJ1XhO9ALTe/ocCBRzmC3JJCIw2HiZpdfBijRN0IDhyXDVLBlZs2MYWBHKVgbLxQA3WUQ5BrKnXctAMn46QmIVYSVkK50zQ1hYC3iM0tEL016isgetZnuWLI435fw5a0DN0b4DLGwD/gTwsKdcK3dNeH5IW7zIkfWEvC1VbIOpAR2xqHK33klPsAjA2poLQwLW8Mn4PsaOEPs9dDGF3QQpRBDkG+776JEljk9lmuBGSoMJiWEMyufiOMu+aZAOOEOimGIwGVV0Ji0SYgTWcI3e9UcLUTTwj3chAL1pawaHmxT3Kg5vvMoQ9ccS5Qt55yQQoU8mkA41OjmVN9wnr3+eP5xWxc/ZnuE1eIupMdg5giHZYo9XRe9S+Fst3HYnFdphj51AD2LY4yWFjh2o5XMO3LaEE9N9FP9ezUVE/m3VP+EFj2QY7Rbh4bwkuR6y/DFDXWEjgSlHIcm0GJMRaU6TvhSZMhJpKsWI7jsfl9266pspIykmKUO76/xWTDLMigpDM8ebEMMaJuS3PC2JTTDyfM7sugJx7LECMuuedVfOBN5Bgt/0uaO/0SkKifhdRVxmxHjLn214N1eh0w/ixYnLEYvWudftF/aUedvSOS7o+Avm29ZjLez55//Qc9SK6h"
1
+ window.navigationData = "eJyVl8tu2zAQRf9F66BpXKSP7FInbgqktVF5V3RBS2ObCU2q5MhNUPTfS8V6UXxmZ/BeHg5nyKH882+G8ITZVXYvdispjrQEmZ1lFcG9HiwYUQrU+Uh8s8cD045Hysvs6mL28d9Zz/i++ybKmoEN6JTQ7FW9yeuNPfc0Hp/pD9/UQ6Q1HCpGEOak2IMf6LSFuPM94TtQy80DFDjwKEeQW1JopOEwUbPL92OUOFSCA8dlhVRw5aZNTGEgRykYG2/UQHVyCHJDpY6bHsHJ6NUkxErCSih3mqamEPAOsboDokujvgCiZ3+WK4bs6n0DW1IzdBfAZYyBf8DvGhTqhG/prg3JC3eZExdYS8LVVshDICO2NQ5X+sgp9wEYG1JBaWFa3hg+B3mkhT/MVg9hdDsMUQY5BHlpicAit89yJSBDjcG0hGB29xth3D3PBBgn1EkxHAmofC8kFnUC0nSG0G2lgrudeEI442VwwgxHENWc6YLVJSxqXjT1CjwfPnNogWvOBepIyr6pLkiBQj4PK+BzpeFe44T+9tOHi8uZa4UYOJE3Z/pRu0bUqeu2OUU6LFFqf7n0L4WybmKxuC5TjNznq3mPKYOFFa7teAXT7hwW1NM2/FRPpV5b+ak/sPPekcy8p/wxADzJMdrtU0V4KXK9NkxRYy2BI0Epx1EclBhjQZm+yZ7UG2IiyYqlG4/Nb79bDlRZSRlJKZTuac71Ba+VC2Y6YsyvvOlnZMOswAYlneHJtWWIEfVbPyeMTTntcMLs9m3xxGMZYsQl9/zVOPEmcoyW/yFV872w1pOnqLEW46z9vWqd3qNuj/oPzefxWToSSZti6bvWaibjnWszrumdZk3/9R8p2DA0"
@@ -1 +1 @@
1
- window.searchData = "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";
1
+ window.searchData = "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";