marko 4.28.6 → 4.28.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 (75) hide show
  1. package/CHANGELOG.md +2569 -0
  2. package/dist/compiler/ast/CustomTag.js +1 -1
  3. package/dist/core-tags/core/await/renderer.js +11 -3
  4. package/dist/core-tags/core/await/reorderer-renderer.js +35 -8
  5. package/dist/node_modules/@internal/components-beginComponent/index-browser.js +5 -5
  6. package/dist/node_modules/@internal/components-beginComponent/index.js +12 -12
  7. package/dist/node_modules/@internal/components-define-widget-legacy/index-browser.js +43 -43
  8. package/dist/node_modules/@internal/components-define-widget-legacy/index.js +3 -3
  9. package/dist/node_modules/@internal/components-endComponent/index.js +3 -3
  10. package/dist/node_modules/@internal/components-entry/index-browser.js +2 -2
  11. package/dist/node_modules/@internal/components-entry/index.js +21 -21
  12. package/dist/node_modules/@internal/components-entry-legacy/index-browser.js +6 -6
  13. package/dist/node_modules/@internal/components-entry-legacy/index.js +1 -1
  14. package/dist/node_modules/@internal/components-registry/index-browser.js +40 -40
  15. package/dist/node_modules/@internal/components-registry/index.js +2 -2
  16. package/dist/node_modules/@internal/components-util/index-browser.js +20 -20
  17. package/dist/node_modules/@internal/components-util/index.js +9 -9
  18. package/dist/node_modules/@internal/create-readable/index-browser.js +1 -1
  19. package/dist/node_modules/@internal/create-readable/index.js +8 -8
  20. package/dist/node_modules/@internal/init-components-tag/index.js +4 -4
  21. package/dist/node_modules/@internal/preserve-tag/index-browser.js +8 -8
  22. package/dist/node_modules/@internal/preserve-tag/index.js +5 -5
  23. package/dist/node_modules/@internal/set-immediate/index-browser.js +1 -1
  24. package/dist/node_modules/@internal/set-immediate/index-worker.js +2 -2
  25. package/dist/node_modules/@internal/set-immediate/index.js +2 -2
  26. package/dist/runtime/RenderResult.js +13 -13
  27. package/dist/runtime/components/Component.js +144 -144
  28. package/dist/runtime/components/ComponentDef.js +27 -27
  29. package/dist/runtime/components/ComponentsContext.js +19 -19
  30. package/dist/runtime/components/GlobalComponentsContext.js +4 -4
  31. package/dist/runtime/components/KeySequence.js +3 -3
  32. package/dist/runtime/components/ServerComponent.js +13 -13
  33. package/dist/runtime/components/State.js +26 -26
  34. package/dist/runtime/components/attach-detach.js +8 -8
  35. package/dist/runtime/components/defineComponent.js +5 -5
  36. package/dist/runtime/components/dom-data.js +4 -4
  37. package/dist/runtime/components/event-delegation.js +10 -10
  38. package/dist/runtime/components/legacy/defineComponent-legacy.js +1 -1
  39. package/dist/runtime/components/legacy/defineRenderer-legacy.js +16 -16
  40. package/dist/runtime/components/legacy/dependencies/index.js +9 -9
  41. package/dist/runtime/components/legacy/helper-getWidgetFromOut.js +3 -3
  42. package/dist/runtime/components/legacy/renderer-legacy.js +39 -39
  43. package/dist/runtime/components/renderer.js +34 -34
  44. package/dist/runtime/components/update-manager.js +10 -10
  45. package/dist/runtime/createOut.js +1 -1
  46. package/dist/runtime/dom-insert.js +5 -5
  47. package/dist/runtime/helpers/_change-case.js +2 -2
  48. package/dist/runtime/helpers/dynamic-tag.js +13 -13
  49. package/dist/runtime/helpers/style-value.js +1 -1
  50. package/dist/runtime/html/AsyncStream.js +24 -24
  51. package/dist/runtime/html/BufferedWriter.js +2 -2
  52. package/dist/runtime/html/StringWriter.js +1 -1
  53. package/dist/runtime/html/helpers/data-marko.js +2 -2
  54. package/dist/runtime/html/helpers/escape-xml.js +1 -1
  55. package/dist/runtime/html/index.js +1 -1
  56. package/dist/runtime/renderable.js +5 -5
  57. package/dist/runtime/vdom/AsyncVDOMBuilder.js +43 -43
  58. package/dist/runtime/vdom/VComponent.js +2 -2
  59. package/dist/runtime/vdom/VDocumentFragment.js +1 -1
  60. package/dist/runtime/vdom/VElement.js +12 -12
  61. package/dist/runtime/vdom/VFragment.js +4 -4
  62. package/dist/runtime/vdom/VNode.js +2 -2
  63. package/dist/runtime/vdom/index.js +1 -1
  64. package/dist/runtime/vdom/morphdom/fragment.js +2 -2
  65. package/dist/runtime/vdom/morphdom/helpers.js +3 -3
  66. package/dist/runtime/vdom/morphdom/index.js +43 -43
  67. package/package.json +1 -1
  68. package/src/compiler/Normalizer.js +4 -1
  69. package/src/compiler/ast/CustomTag.js +14 -3
  70. package/src/core-tags/components/TransformHelper/convertToComponent.js +1 -1
  71. package/src/core-tags/core/await/renderer.js +14 -3
  72. package/src/core-tags/core/await/reorderer-renderer.js +78 -43
  73. package/src/core-tags/migrate/all-tags/widget-in-attrs.js +9 -7
  74. package/src/runtime/components/legacy/index.js +3 -1
  75. package/src/runtime/helpers/interop-require.js +1 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,2569 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
+
5
+ ### [4.28.8](https://github.com/marko-js/marko/compare/v4.28.7...v4.28.8) (2025-02-19)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * backport await tag fixes ([44708e0](https://github.com/marko-js/marko/commit/44708e0440893de844f25d534b09508a8b562f57))
11
+
12
+ ### [4.28.7](https://github.com/marko-js/marko/compare/v4.28.6...v4.28.7) (2024-09-20)
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * attr tag regression for vdom ([80e0344](https://github.com/marko-js/marko/commit/80e0344c09151544545c7826a481d78f22b88555))
18
+
19
+ ### [4.28.6](https://github.com/marko-js/marko/compare/v4.28.4...v4.28.6) (2024-09-10)
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * forward taglib errors to compile cb ([3a9983e](https://github.com/marko-js/marko/commit/3a9983e708d1bebb2627c9bf029db7fd3442e11c))
25
+ * prefer .marko.js precompiled files when using load api ([bc9dbab](https://github.com/marko-js/marko/commit/bc9dbabc4d345069e25760911ee122ecf6c69b68))
26
+
27
+ ### [4.28.5](https://github.com/marko-js/marko/compare/v4.28.4...v4.28.5) (2024-08-05)
28
+
29
+
30
+ ### Bug Fixes
31
+
32
+ * prefer .marko.js precompiled files when using load api ([bc9dbab](https://github.com/marko-js/marko/commit/bc9dbabc4d345069e25760911ee122ecf6c69b68))
33
+
34
+ ### [4.28.4](https://github.com/marko-js/marko/compare/v4.28.3...v4.28.4) (2024-04-03)
35
+
36
+
37
+ ### Bug Fixes
38
+
39
+ * regression with split text nodes across component hydration ([8994a91](https://github.com/marko-js/marko/commit/8994a915dadfdaedb876fa816cb4554a8ceb6fff))
40
+
41
+ ### [4.28.3](https://github.com/marko-js/marko/compare/v4.28.2...v4.28.3) (2024-03-11)
42
+
43
+
44
+ ### Bug Fixes
45
+
46
+ * issue with ignoreUnrecognizedTags and nested attribute tags ([a0861ed](https://github.com/marko-js/marko/commit/a0861edfe5c97ee478f889ca71c56a1d69f56821))
47
+ * **ts:** add script-lang to v4 ([924df52](https://github.com/marko-js/marko/commit/924df5237108556c8032e25f15ba5367c491a840))
48
+
49
+ ### [4.28.2](https://github.com/marko-js/marko/compare/v4.28.1...v4.28.2) (2024-02-25)
50
+
51
+
52
+ ### Bug Fixes
53
+
54
+ * split text node hydrate issue ([cf71c44](https://github.com/marko-js/marko/commit/cf71c4426e815bbc8ee6ca5c977dc7998e0f93e5))
55
+
56
+ ### [4.28.1](https://github.com/marko-js/marko/compare/v4.28.0...v4.28.1) (2024-02-16)
57
+
58
+
59
+ ### Bug Fixes
60
+
61
+ * diffing edge cases ([236d92b](https://github.com/marko-js/marko/commit/236d92ba4a035407e5fcdeac2d440813563343ba))
62
+ * relax dynamic nested attr tag restrictions ([e9cb3c7](https://github.com/marko-js/marko/commit/e9cb3c72832121cd0defb3f00985ff7219f143fd))
63
+
64
+ ## [4.28.0](https://github.com/marko-js/marko/compare/v4.27.0...v4.28.0) (2024-01-26)
65
+
66
+
67
+ ### Features
68
+
69
+ * support esm compiled component files ([0b7f948](https://github.com/marko-js/marko/commit/0b7f94802825058f864a0e7c91e4e5f87df6b591))
70
+ * support exports field in marko.json ([be0d24f](https://github.com/marko-js/marko/commit/be0d24f547a2e3e7c83c692b62963ce8dc7590ab))
71
+
72
+ ## [4.27.0](https://github.com/marko-js/marko/compare/v4.26.5...v4.27.0) (2023-08-07)
73
+
74
+
75
+ ### Features
76
+
77
+ * remove deprecations for features added in Marko 5 compat layer ([4b868ee](https://github.com/marko-js/marko/commit/4b868eeded4034fb50e50c6126ea6db8f0934612))
78
+
79
+ ### [4.26.5](https://github.com/marko-js/marko/compare/v4.26.4...v4.26.5) (2023-06-27)
80
+
81
+ ### [4.26.4](https://github.com/marko-js/marko/compare/v4.26.3...v4.26.4) (2023-06-27)
82
+
83
+
84
+ ### Bug Fixes
85
+
86
+ * bind render method on legacy widgets ([163d2ae](https://github.com/marko-js/marko/commit/163d2ae33063dd7399b6e4e9b531d445458f7c77))
87
+
88
+ ### [4.26.3](https://github.com/marko-js/marko/compare/v4.26.2...v4.26.3) (2023-06-27)
89
+
90
+
91
+ ### Bug Fixes
92
+
93
+ * strict mode issues around calling render on legacy components ([d04449a](https://github.com/marko-js/marko/commit/d04449a99918ad01bfc944965c72101a17691495))
94
+
95
+ ### [4.26.2](https://github.com/marko-js/marko/compare/v4.26.1...v4.26.2) (2023-06-07)
96
+
97
+
98
+ ### Bug Fixes
99
+
100
+ * regression with components registered only via browser.json ([183011e](https://github.com/marko-js/marko/commit/183011ed18ad3cfff4a0f2e5d4d68cf351bee1c4))
101
+
102
+ ### [4.26.1](https://github.com/marko-js/marko/compare/v4.26.0...v4.26.1) (2023-05-23)
103
+
104
+
105
+ ### Bug Fixes
106
+
107
+ * add missing exposed _wrr flag ([b95b3c4](https://github.com/marko-js/marko/commit/b95b3c4e70c0ad5c78d20de29e1a46112b0355dc))
108
+
109
+ ## [4.26.0](https://github.com/marko-js/marko/compare/v4.25.0...v4.26.0) (2023-05-23)
110
+
111
+
112
+ ### Features
113
+
114
+ * backport Marko 5 runtime improvements ([1f40cae](https://github.com/marko-js/marko/commit/1f40cae8071dae4bea0870a5db4000bdb9e4779a))
115
+
116
+ ## [4.25.0](https://github.com/marko-js/marko/compare/v4.24.6...v4.25.0) (2023-03-02)
117
+
118
+
119
+ ### Features
120
+
121
+ * upgrade javascript parse/generate utils ([ef97e46](https://github.com/marko-js/marko/commit/ef97e46dec1bec2b990d9f5ccf280ab22924e37a))
122
+
123
+ ### [4.24.6](https://github.com/marko-js/marko/compare/v4.24.5...v4.24.6) (2022-10-12)
124
+
125
+
126
+ ### Bug Fixes
127
+
128
+ * improve tag dir scanning cache ([#1859](https://github.com/marko-js/marko/issues/1859)) ([412e2eb](https://github.com/marko-js/marko/commit/412e2eb77a57772dfd619756b40d962425332748))
129
+
130
+ ### [4.24.5](https://github.com/marko-js/marko/compare/v4.24.4...v4.24.5) (2022-07-14)
131
+
132
+
133
+ ### Bug Fixes
134
+
135
+ * ignoreUnrecognizedTags attr tags under control flow ([8e0aaf2](https://github.com/marko-js/marko/commit/8e0aaf227d4e192e3c02b494995f1f2682c4cbc3))
136
+
137
+ ### [4.24.4](https://github.com/marko-js/marko/compare/v4.24.3...v4.24.4) (2022-03-22)
138
+
139
+
140
+ ### Bug Fixes
141
+
142
+ * prevent bubbling non bubbling events ([#1781](https://github.com/marko-js/marko/issues/1781)) ([7230c76](https://github.com/marko-js/marko/commit/7230c76892ed2c346cdb161208dea70741a6b6b0))
143
+
144
+ ### [4.24.3](https://github.com/marko-js/marko/compare/v4.24.2...v4.24.3) (2022-03-08)
145
+
146
+
147
+ ### Bug Fixes
148
+
149
+ * performance hit in development mode because continually parsing stack trace ([#1777](https://github.com/marko-js/marko/issues/1777)) ([40d6599](https://github.com/marko-js/marko/commit/40d659979370900c18503a3dc6dab807f52c154d))
150
+
151
+ ### [4.24.2](https://github.com/marko-js/marko/compare/v4.24.1...v4.24.2) (2021-10-22)
152
+
153
+
154
+ ### Bug Fixes
155
+
156
+ * m4 npm publish dist tag ([478d772](https://github.com/marko-js/marko/commit/478d7720b281893ba16913b8292e96195f86a007))
157
+
158
+ ### [4.24.1](https://github.com/marko-js/marko/compare/v4.24.0...v4.24.1) (2021-10-22)
159
+
160
+
161
+ ### Bug Fixes
162
+
163
+ * regression with identical tag name & taglib deduping ([3da701c](https://github.com/marko-js/marko/commit/3da701c0f101ae064c943faf0a908b674992b845))
164
+ * upgrade htmljs parser ([18a41fb](https://github.com/marko-js/marko/commit/18a41fb96bdbc851480856bd6342d822d367866b))
165
+
166
+ ## [4.24.0](https://github.com/marko-js/marko/compare/v4.23.17...v4.24.0) (2021-10-11)
167
+
168
+
169
+ ### Features
170
+
171
+ * upgrade htmljs-parser ([31cc60c](https://github.com/marko-js/marko/commit/31cc60c6ad5e2f6b34382de79874afd1fa5e32ac))
172
+
173
+ ### [4.23.17](https://github.com/marko-js/marko/compare/v4.23.16...v4.23.17) (2021-08-11)
174
+
175
+
176
+ ### Bug Fixes
177
+
178
+ * remove file rename hack when writing files to disk ([22ae52f](https://github.com/marko-js/marko/commit/22ae52ff7c215b4a7f6ea1690e496be457abb039))
179
+
180
+ ### [4.23.16](https://github.com/marko-js/marko/compare/v4.23.15...v4.23.16) (2021-03-29)
181
+
182
+
183
+ ### Bug Fixes
184
+
185
+ * dynamic attr tags followed by html element ([49c6b0d](https://github.com/marko-js/marko/commit/49c6b0ddb435b34316f164e8d1b8ff26f3cc46cb))
186
+
187
+ ### [4.23.15](https://github.com/marko-js/marko/compare/v4.23.14...v4.23.15) (2021-03-08)
188
+
189
+
190
+ ### Bug Fixes
191
+
192
+ * **marko:** issue with delegating events from text nodes ([fadde17](https://github.com/marko-js/marko/commit/fadde17db1234b7d3b915fa0895af12bf70196b5))
193
+ * release command ([3b29aff](https://github.com/marko-js/marko/commit/3b29aff94ea4745cc3b8a71a8720d65e11ab2957))
194
+
195
+ ### [4.23.14](https://github.com/marko-js/marko/compare/v4.23.13...v4.23.14) (2021-02-18)
196
+
197
+
198
+ ### Bug Fixes
199
+
200
+ * improve windows support for taglib finder ([5b8ee7c](https://github.com/marko-js/marko/commit/5b8ee7c7d27c055d3fe9c2c7f5666bb547ea987f))
201
+
202
+ ### [4.23.13](https://github.com/marko-js/marko/compare/v4.23.12...v4.23.13) (2021-02-11)
203
+
204
+
205
+ ### Bug Fixes
206
+
207
+ * prevent potential race condition while tag scanning ([103eb85](https://github.com/marko-js/marko/commit/103eb85bc58c5b0898bdb75793a4413b05c168bb))
208
+
209
+ ### [4.23.12](https://github.com/marko-js/marko/compare/v4.23.11...v4.23.12) (2021-01-14)
210
+
211
+
212
+ ### Bug Fixes
213
+
214
+ * issue with using flags before defined ([8740f93](https://github.com/marko-js/marko/commit/8740f937c613dbbbfb34694db608adf5800a70ad))
215
+
216
+ ### [4.23.11](https://github.com/marko-js/marko/compare/v4.23.10...v4.23.11) (2021-01-13)
217
+
218
+
219
+ ### Bug Fixes
220
+
221
+ * issue with only renderBody being serialized ([4db3c18](https://github.com/marko-js/marko/commit/4db3c1835aea610088e1a6efb67f521bc884d966))
222
+
223
+ ### [4.23.10](https://github.com/marko-js/marko/compare/v4.23.9...v4.23.10) (2020-12-08)
224
+
225
+
226
+ ### Bug Fixes
227
+
228
+ * properly handle default renderBody with dynamic attribute tags ([451ce98](https://github.com/marko-js/marko/commit/451ce98d81cfccee01d6ce468d3b02ced90daebb))
229
+
230
+ ### [4.23.9](https://github.com/marko-js/marko/compare/v4.23.8...v4.23.9) (2020-10-13)
231
+
232
+
233
+ ### Bug Fixes
234
+
235
+ * regression with no-update-body with no renderBody ([5bd753b](https://github.com/marko-js/marko/commit/5bd753b3798315a62ac6a0b44e1a2cffa7797adc))
236
+
237
+ ### [4.23.8](https://github.com/marko-js/marko/compare/v4.23.7...v4.23.8) (2020-10-09)
238
+
239
+
240
+ ### Bug Fixes
241
+
242
+ * no longer use fragments for preserved native els ([c167cfa](https://github.com/marko-js/marko/commit/c167cfa1ab0d9d6db3aecc264fd830d804456f25))
243
+
244
+ ### [4.23.7](https://github.com/marko-js/marko/compare/v4.23.6...v4.23.7) (2020-10-02)
245
+
246
+
247
+ ### Bug Fixes
248
+
249
+ * prevent adding new global for legacy runtime ([0ec1497](https://github.com/marko-js/marko/commit/0ec1497bbbbc5430188c12d5ad37d3d0b04aafe1))
250
+
251
+ ### [4.23.6](https://github.com/marko-js/marko/compare/v4.23.5...v4.23.6) (2020-10-02)
252
+
253
+
254
+ ### Bug Fixes
255
+
256
+ * regression serializing empty component data with custom runtimeid ([d589737](https://github.com/marko-js/marko/commit/d5897375e4b95d587c307612050f8e0d8144e996))
257
+
258
+ ### [4.23.5](https://github.com/marko-js/marko/compare/v4.23.4...v4.23.5) (2020-09-28)
259
+
260
+ ### [4.23.4](https://github.com/marko-js/marko/compare/v4.23.3...v4.23.4) (2020-09-17)
261
+
262
+ ### [4.23.3](https://github.com/marko-js/marko/compare/v4.23.2...v4.23.3) (2020-09-15)
263
+
264
+
265
+ ### Bug Fixes
266
+
267
+ * duplicate export 'registerOptimizer' ([#1601](https://github.com/marko-js/marko/issues/1601)) ([ac20e50](https://github.com/marko-js/marko/commit/ac20e5040f71d35901ecce1e847d41a8ce53145e))
268
+ * prevent loading complain module in prod for legacy helpers ([e394ff0](https://github.com/marko-js/marko/commit/e394ff089bc56aafad4f6e73ba97b3a7fd4a63b8))
269
+
270
+ ### [4.23.2](https://github.com/marko-js/marko/compare/v4.23.1...v4.23.2) (2020-08-26)
271
+
272
+
273
+ ### Bug Fixes
274
+
275
+ * regression with manual component init with custom runtimeid ([f08a60a](https://github.com/marko-js/marko/commit/f08a60a3f64ab53fa387575a7658990c145c0fdd))
276
+
277
+ ### [4.23.1](https://github.com/marko-js/marko/compare/v4.23.0...v4.23.1) (2020-08-26)
278
+
279
+
280
+ ### Bug Fixes
281
+
282
+ * typo with aria-describedby autocomplete ([cd12a3a](https://github.com/marko-js/marko/commit/cd12a3a68873c9ce72a3d94d861fe2f48b6a2228))
283
+
284
+ ## [4.23.0](https://github.com/marko-js/marko/compare/v4.22.8...v4.23.0) (2020-08-25)
285
+
286
+
287
+ ### Features
288
+
289
+ * switch to espree from esprima ([#1596](https://github.com/marko-js/marko/issues/1596)) ([8c318cc](https://github.com/marko-js/marko/commit/8c318cc6f29f645026a97375cd5cbba53908a354))
290
+
291
+ ### [4.22.8](https://github.com/marko-js/marko/compare/v4.22.7...v4.22.8) (2020-08-20)
292
+
293
+
294
+ ### Bug Fixes
295
+
296
+ * issue with hydrating body-only content ([7837185](https://github.com/marko-js/marko/commit/7837185073b3ccd203267d5e853e03d2b8d72e7a))
297
+
298
+ ### [4.22.7](https://github.com/marko-js/marko/compare/v4.22.6...v4.22.7) (2020-08-13)
299
+
300
+ ### [4.22.6](https://github.com/marko-js/marko/compare/v4.22.5...v4.22.6) (2020-08-10)
301
+
302
+
303
+ ### Bug Fixes
304
+
305
+ * set default value for textarea when created ([#1593](https://github.com/marko-js/marko/issues/1593)) ([1efae18](https://github.com/marko-js/marko/commit/1efae18402df3a236410794fc3d4f6a2076d1d64))
306
+
307
+ ### [4.22.5](https://github.com/marko-js/marko/compare/v4.22.4...v4.22.5) (2020-08-07)
308
+
309
+
310
+ ### Bug Fixes
311
+
312
+ * add support for nested tag long hand properties ([#1592](https://github.com/marko-js/marko/issues/1592)) ([8f595fd](https://github.com/marko-js/marko/commit/8f595fd493d4462f8cc2b103d8ea77e04616edea))
313
+
314
+ ### [4.22.4](https://github.com/marko-js/marko/compare/v4.22.3...v4.22.4) (2020-08-04)
315
+
316
+ ### [4.22.3](https://github.com/marko-js/marko/compare/v4.22.1...v4.22.3) (2020-07-31)
317
+
318
+
319
+ ### Bug Fixes
320
+
321
+ * allow <await> in sync mode ([#1589](https://github.com/marko-js/marko/issues/1589)) ([2c50419](https://github.com/marko-js/marko/commit/2c50419117ea67fd64b61e10f8ad5e216d1ca16c))
322
+ * diffing dynamic attributes with mismatched keys ([#1587](https://github.com/marko-js/marko/issues/1587)) ([3832cfe](https://github.com/marko-js/marko/commit/3832cfea72efadb1bfcf9de7a83ba8b1fddf14f4))
323
+ * doc paths ([f5a4721](https://github.com/marko-js/marko/commit/f5a472133dbf7cc2b909bc9bb8ca24285d6ee08e))
324
+
325
+ ### [4.22.2](https://github.com/marko-js/marko/compare/v4.22.1...v4.22.2) (2020-07-28)
326
+
327
+
328
+ ### Bug Fixes
329
+
330
+ * diffing dynamic attributes with mismatched keys ([#1587](https://github.com/marko-js/marko/issues/1587)) ([3832cfe](https://github.com/marko-js/marko/commit/3832cfea72efadb1bfcf9de7a83ba8b1fddf14f4))
331
+ * doc paths ([f5a4721](https://github.com/marko-js/marko/commit/f5a472133dbf7cc2b909bc9bb8ca24285d6ee08e))
332
+
333
+ ### [4.22.1](https://github.com/marko-js/marko/compare/v4.22.0...v4.22.1) (2020-07-21)
334
+
335
+
336
+ ### Bug Fixes
337
+
338
+ * issue with hydrating no-update-if content ([#1581](https://github.com/marko-js/marko/issues/1581)) ([82b500e](https://github.com/marko-js/marko/commit/82b500e95b35af47565ace5e16e2812fc3b0353c))
339
+
340
+ ## [4.22.0](https://github.com/marko-js/marko/compare/v4.21.10...v4.22.0) (2020-06-22)
341
+
342
+
343
+ ### Features
344
+
345
+ * add new import dynamic tag syntax to migrations ([#1562](https://github.com/marko-js/marko/issues/1562)) ([755ffd6](https://github.com/marko-js/marko/commit/755ffd6e15bfdf1769eae64946c40651e6d729a9))
346
+
347
+
348
+ ### Bug Fixes
349
+
350
+ * issue with optional arguments for legacy macro migration ([#1577](https://github.com/marko-js/marko/issues/1577)) ([df556df](https://github.com/marko-js/marko/commit/df556df106c473a78fb5c10c02089754835929da))
351
+
352
+ ### [4.21.10](https://github.com/marko-js/marko/compare/v4.21.9...v4.21.10) (2020-05-20)
353
+
354
+
355
+ ### Bug Fixes
356
+
357
+ * nextTick timing regression ([#1573](https://github.com/marko-js/marko/issues/1573)) ([65ecb6f](https://github.com/marko-js/marko/commit/65ecb6fa334c5bf533a1de54d7820f89dbf2081a))
358
+
359
+ ### [4.21.9](https://github.com/marko-js/marko/compare/v4.21.8...v4.21.9) (2020-05-12)
360
+
361
+ ### [4.21.8](https://github.com/marko-js/marko/compare/v4.21.7...v4.21.8) (2020-05-07)
362
+
363
+
364
+ ### Bug Fixes
365
+
366
+ * support empty w-config ([#1570](https://github.com/marko-js/marko/issues/1570)) ([b62ff6a](https://github.com/marko-js/marko/commit/b62ff6a3ba1565ecfde5b8114682e3ac6d753903))
367
+
368
+ ### [4.21.7](https://github.com/marko-js/marko/compare/v4.21.6...v4.21.7) (2020-05-04)
369
+
370
+
371
+ ### Bug Fixes
372
+
373
+ * components not always initializing inside client-reorder await ([#1566](https://github.com/marko-js/marko/issues/1566)) ([28b3b7f](https://github.com/marko-js/marko/commit/28b3b7f728b9aa42e035e00b37e811dbcce1c79a))
374
+
375
+ ### [4.21.6](https://github.com/marko-js/marko/compare/v4.21.5...v4.21.6) (2020-04-30)
376
+
377
+
378
+ ### Bug Fixes
379
+
380
+ * issue with data-marko attributes under 'no-update' with <await> ([#1564](https://github.com/marko-js/marko/issues/1564)) ([211a8a3](https://github.com/marko-js/marko/commit/211a8a334b58af035347cb4f91f4e6a625c35d82))
381
+
382
+ ### [4.21.5](https://github.com/marko-js/marko/compare/v4.21.4...v4.21.5) (2020-04-24)
383
+
384
+
385
+ ### Bug Fixes
386
+
387
+ * regression with unquoted attribute with trailing slash ([#1561](https://github.com/marko-js/marko/issues/1561)) ([5c26b9b](https://github.com/marko-js/marko/commit/5c26b9b3ec6f5e8847ffe43e99f7593da806932a))
388
+
389
+ ### [4.21.4](https://github.com/marko-js/marko/compare/v4.21.3...v4.21.4) (2020-04-24)
390
+
391
+ ### [4.21.3](https://github.com/marko-js/marko/compare/v4.21.2...v4.21.3) (2020-04-24)
392
+
393
+
394
+ ### Bug Fixes
395
+
396
+ * allow legacy widgets to update after being destroyed ([#1560](https://github.com/marko-js/marko/issues/1560)) ([5bb800e](https://github.com/marko-js/marko/commit/5bb800e088455a03ccd951c9fcc582da062b499c))
397
+
398
+ ### [4.21.2](https://github.com/marko-js/marko/compare/v4.21.1...v4.21.2) (2020-04-23)
399
+
400
+
401
+ ### Bug Fixes
402
+
403
+ * split components under preserved root resetting ___isPreserved ([#1559](https://github.com/marko-js/marko/issues/1559)) ([03bb099](https://github.com/marko-js/marko/commit/03bb0991c571b182949d79ee0c42aee92f867f25))
404
+
405
+ ### [4.21.1](https://github.com/marko-js/marko/compare/v4.21.0...v4.21.1) (2020-04-21)
406
+
407
+
408
+ ### Bug Fixes
409
+
410
+ * **legacy dependencies:** relative path should begin with ./ ([#1558](https://github.com/marko-js/marko/issues/1558)) ([a01b644](https://github.com/marko-js/marko/commit/a01b644b8f3511777f9bda8d93f4ae93e5745b02))
411
+
412
+ ## [4.21.0](https://github.com/marko-js/marko/compare/v4.20.2...v4.21.0) (2020-04-21)
413
+
414
+
415
+ ### Features
416
+
417
+ * short hand syntax for component imports ([#1552](https://github.com/marko-js/marko/issues/1552)) ([b5453cc](https://github.com/marko-js/marko/commit/b5453cce8bbc3b96a406bf0cbd926ee7123d158a))
418
+
419
+ ### [4.20.2](https://github.com/marko-js/marko/compare/v4.20.1...v4.20.2) (2020-04-21)
420
+
421
+
422
+ ### Bug Fixes
423
+
424
+ * prevent lasso 2 from inlining full system paths ([#1555](https://github.com/marko-js/marko/issues/1555)) ([50750b4](https://github.com/marko-js/marko/commit/50750b4b9ec61210081e318175a5e8a746fe2069))
425
+ * switch safe renderer to use nextTick for errors ([#1554](https://github.com/marko-js/marko/issues/1554)) ([6ea9fe3](https://github.com/marko-js/marko/commit/6ea9fe330b499f9fdb125eaf0f25f2ee1553ef4e))
426
+
427
+ ### [4.20.1](https://github.com/marko-js/marko/compare/v4.20.0...v4.20.1) (2020-04-15)
428
+
429
+
430
+ ### Bug Fixes
431
+
432
+ * improve micro task helper ([76e2ab9](https://github.com/marko-js/marko/commit/76e2ab910dcdec1af750ca40bc287d147ec82e3f))
433
+
434
+ ## [4.20.0](https://github.com/marko-js/marko/compare/v4.19.13...v4.20.0) (2020-04-10)
435
+
436
+
437
+ ### Features
438
+
439
+ * improve serialization across multiple writes ([#1542](https://github.com/marko-js/marko/issues/1542)) ([81c4da7](https://github.com/marko-js/marko/commit/81c4da75c8e272d6b2d145e225078695c931dfd3))
440
+
441
+
442
+ ### Bug Fixes
443
+
444
+ * don't modify proto.init when creating a widget ([#1544](https://github.com/marko-js/marko/issues/1544)) ([f694a6b](https://github.com/marko-js/marko/commit/f694a6bee2ffd7d39ed651649e248499804144ff))
445
+ * improve a few small things legacy compatibility ([#1545](https://github.com/marko-js/marko/issues/1545)) ([72e716e](https://github.com/marko-js/marko/commit/72e716e42e264e8ee3c88220e0ebd96bcc1430f7))
446
+
447
+ ### [4.19.13](https://github.com/marko-js/marko/compare/v4.19.12...v4.19.13) (2020-04-08)
448
+
449
+
450
+ ### Bug Fixes
451
+
452
+ * add devmode warning for removing fragment markers ([#1541](https://github.com/marko-js/marko/issues/1541)) ([1c3852f](https://github.com/marko-js/marko/commit/1c3852f2c7938a689c249b6d59b6280becda216e))
453
+
454
+ ### [4.19.12](https://github.com/marko-js/marko/compare/v4.19.11...v4.19.12) (2020-04-07)
455
+
456
+
457
+ ### Bug Fixes
458
+
459
+ * implement missing methods for void-writer ([#1540](https://github.com/marko-js/marko/issues/1540)) ([2806066](https://github.com/marko-js/marko/commit/28060669a421837cec19f35f307f35c0ef636b0e))
460
+
461
+ ### [4.19.11](https://github.com/marko-js/marko/compare/v4.19.10...v4.19.11) (2020-04-06)
462
+
463
+ ### [4.19.10](https://github.com/marko-js/marko/compare/v4.19.9...v4.19.10) (2020-04-03)
464
+
465
+
466
+ ### Bug Fixes
467
+
468
+ * regression with nullish values in partial string attribute values ([#1537](https://github.com/marko-js/marko/issues/1537)) ([a469e02](https://github.com/marko-js/marko/commit/a469e020cc60089bae73bf1a311a8e6919bc0ce0))
469
+
470
+ ### [4.19.9](https://github.com/marko-js/marko/compare/v4.19.8...v4.19.9) (2020-03-30)
471
+
472
+ ### [4.19.8](https://github.com/marko-js/marko/compare/v4.19.7...v4.19.8) (2020-03-16)
473
+
474
+
475
+ ### Bug Fixes
476
+
477
+ * improve legacy compatibility with getWidgetForEl api ([#1533](https://github.com/marko-js/marko/issues/1533)) ([d5e3a27](https://github.com/marko-js/marko/commit/d5e3a272ae3c02ad48860d5ccddd8a6e2bcba3c9))
478
+
479
+ ### [4.19.7](https://github.com/marko-js/marko/compare/v4.19.6...v4.19.7) (2020-03-13)
480
+
481
+
482
+ ### Bug Fixes
483
+
484
+ * prevent issue with range loop iterating in reverse ([#1531](https://github.com/marko-js/marko/issues/1531)) ([cd6459d](https://github.com/marko-js/marko/commit/cd6459dc8d057de0eb88040c81dcf034ae7ca5ad))
485
+
486
+ ### [4.19.6](https://github.com/marko-js/marko/compare/v4.19.5...v4.19.6) (2020-03-13)
487
+
488
+
489
+ ### Bug Fixes
490
+
491
+ * spread attrs for native tag preserves case ([#1530](https://github.com/marko-js/marko/issues/1530)) ([f972707](https://github.com/marko-js/marko/commit/f97270746e7580d0d38e3a2a43e585721a256baf))
492
+
493
+ ### [4.19.5](https://github.com/marko-js/marko/compare/v4.19.4...v4.19.5) (2020-03-10)
494
+
495
+
496
+ ### Bug Fixes
497
+
498
+ * issue with keys under ssr no-update root ([#1527](https://github.com/marko-js/marko/issues/1527)) ([fd03031](https://github.com/marko-js/marko/commit/fd03031c47881bf5dd7b311dd1fec843c98a1c06))
499
+ * return raw state for legacy widgets ([#1526](https://github.com/marko-js/marko/issues/1526)) ([6905521](https://github.com/marko-js/marko/commit/6905521c875a1ecc18d7afbdfd0ef53df31831c5))
500
+
501
+ ### [4.19.4](https://github.com/marko-js/marko/compare/v4.19.3...v4.19.4) (2020-03-09)
502
+
503
+
504
+ ### Bug Fixes
505
+
506
+ * don't serialize component boundary keys if the owner isn't hydrated ([#1525](https://github.com/marko-js/marko/issues/1525)) ([9bf16b8](https://github.com/marko-js/marko/commit/9bf16b81f46abda06e42cbbd9341dd023fdcadc0))
507
+
508
+ ### [4.19.3](https://github.com/marko-js/marko/compare/v4.19.2...v4.19.3) (2020-03-05)
509
+
510
+
511
+ ### Bug Fixes
512
+
513
+ * add 'get' API for marko-widgets compat ([#1524](https://github.com/marko-js/marko/issues/1524)) ([095459f](https://github.com/marko-js/marko/commit/095459f43947b8f4be380286bd1f720109a3d86a))
514
+ * improve support for legacy widget for range ([#1523](https://github.com/marko-js/marko/issues/1523)) ([ca4afb9](https://github.com/marko-js/marko/commit/ca4afb98165a063b0b5f85255235b87f332ddf92))
515
+
516
+ ### [4.19.2](https://github.com/marko-js/marko/compare/v4.19.1...v4.19.2) (2020-03-04)
517
+
518
+
519
+ ### Bug Fixes
520
+
521
+ * don't serialize input for stateful widgets ([#1522](https://github.com/marko-js/marko/issues/1522)) ([3a14f62](https://github.com/marko-js/marko/commit/3a14f629688645d11b11678bd149a77cadfe745e))
522
+
523
+ ### [4.19.1](https://github.com/marko-js/marko/compare/v4.19.0...v4.19.1) (2020-02-28)
524
+
525
+
526
+ ### Bug Fixes
527
+
528
+ * support monkey patching lifecycle methods for legacy widgets ([#1521](https://github.com/marko-js/marko/issues/1521)) ([3056bd1](https://github.com/marko-js/marko/commit/3056bd11a63e2bf36d44657dc8d2ccf2381cfc92))
529
+
530
+ ## [4.19.0](https://github.com/marko-js/marko/compare/v4.18.51...v4.19.0) (2020-02-27)
531
+
532
+
533
+ ### Features
534
+
535
+ * all vnodes have owner components ([#1517](https://github.com/marko-js/marko/issues/1517)) ([cb42609](https://github.com/marko-js/marko/commit/cb426099ea83638f5feba85562ba7b56083dac4c))
536
+
537
+ ### [4.18.51](https://github.com/marko-js/marko/compare/v4.18.50...v4.18.51) (2020-02-26)
538
+
539
+
540
+ ### Bug Fixes
541
+
542
+ * always include nested contexts when serializing ([#1515](https://github.com/marko-js/marko/issues/1515)) ([c4f28e4](https://github.com/marko-js/marko/commit/c4f28e433cee13f206736c85431975e62b8ceed2))
543
+
544
+ ### [4.18.50](https://github.com/marko-js/marko/compare/v4.18.48...v4.18.50) (2020-02-26)
545
+
546
+ ### Bug Fixes
547
+
548
+ - non standard template literals filter out null & undefined ([#1514](https://github.com/marko-js/marko/issues/1514)) ([d5fa202](https://github.com/marko-js/marko/commit/d5fa20267b0b0bfc5c835ebdda1c6cb61955c9c7))
549
+
550
+ ### [4.18.49](https://github.com/marko-js/marko/compare/v4.18.48...v4.18.49) (2020-02-26)
551
+
552
+ ### 4.18.48
553
+
554
+ - Fixes a regression from [#1499](https://github.com/marko-js/marko/pull/1499) which caused `<${dynamic}>` tags with body content to not have their events registered. [#1507](https://github.com/marko-js/marko/pull/1507)
555
+ - Fixes issue with `getEl` being used on a keyed `<${dynamic}>` tag. [#1507](https://github.com/marko-js/marko/pull/1507)
556
+ - Fixes registering event handlers added to a `<${dynamic}>` tag that renders a native element under a split component. [#1507](https://github.com/marko-js/marko/pull/1507)
557
+
558
+ ### 4.18.47
559
+
560
+ - Deprecate implicit JSON.stringify for attributes, attr toString fix. [#1505](https://github.com/marko-js/marko/pull/1505)
561
+ - Remove data-widget, add warning for non-split, non-stateful widgets. [#1503](https://github.com/marko-js/marko/pull/1503)
562
+ - Flushing improvements. [#1502](https://github.com/marko-js/marko/pull/1502)
563
+
564
+ ### 4.18.46
565
+
566
+ - Fixed issue with `<init-components>` being rendered under nested async outs. [#1500](https://github.com/marko-js/marko/pull/1500)
567
+
568
+ ### 4.18.45
569
+
570
+ - Fixed dynamic tags to add data-marko-key for split components [#1499](https://github.com/marko-js/marko/pull/1499)
571
+ - Fixed dynamic tags properly render self-closing tags on the server [#1499](https://github.com/marko-js/marko/pull/1499)
572
+
573
+ ### 4.18.44
574
+
575
+ - Fix issue with diffing SSR'd `no-update` section. [#1498](https://github.com/marko-js/marko/pull/1498)
576
+
577
+ ### 4.18.43
578
+
579
+ - No longer serialize input for split legacy widgets. [#1497](https://github.com/marko-js/marko/pull/1497)
580
+
581
+ ### 4.18.42
582
+
583
+ - Fix regression for unkeyed elements with toggled spread attributes [#1496](https://github.com/marko-js/marko/pull/1496)
584
+ - Fix regression with body-only-if migration for legacy renderers [#1495](https://github.com/marko-js/marko/pull/1495)
585
+
586
+ ### 4.18.41
587
+
588
+ - Improve support for conditional `w-bind`. [#1494](https://github.com/marko-js/marko/pull/1494)
589
+ - No longer delete `onBeforeDestroy` and `onBeforeUpdate` from legacy widget prototypes. [#1494](https://github.com/marko-js/marko/pull/1494)
590
+ - Fix regression with registering event handlers for SSR content under a `no-update`. [#1493](https://github.com/marko-js/marko/pull/1493)
591
+
592
+ ### 4.18.40
593
+
594
+ - Fix issue with the `ignoreUnrecognizedTags` compiler option with `<@attribute>` tags inside of a `<${dynamic}>` tag. [#1491](https://github.com/marko-js/marko/pull/1491)
595
+ - Improve support for legacy widgets by allowing for custom `init` method on prototype. [#1490](https://github.com/marko-js/marko/pull/1490)
596
+ - Removes some unused properties that were serialized with legacy widgets [#1489](https://github.com/marko-js/marko/pull/1489)
597
+ - Improves consistency with `...spread` attributes onto native tags. [#1488](https://github.com/marko-js/marko/pull/1488)
598
+ - Now turns `camelCase` properties into `dash-cash`
599
+ - Now omits `renderBody` properties.
600
+ - Improves `this.el` warning for legacy widgets. [#1487](https://github.com/marko-js/marko/pull/1487)
601
+ - Fixes an issue with nested `no-update`'s around components not initializing properly. [#1486](https://github.com/marko-js/marko/pull/1486)
602
+
603
+ ### 4.18.39
604
+
605
+ - Support overriding the 'ready' method in legacy widgets. [#1484](https://github.com/marko-js/marko/pull/1484)
606
+
607
+ ### 4.18.38
608
+
609
+ - Fix regression with ssr'd components under 'no-update' not initializing. [#1483](https://github.com/marko-js/marko/pull/1483)
610
+
611
+ ### 4.18.37
612
+
613
+ - Fix regression with no-update-body on textarea tags. [#1482](https://github.com/marko-js/marko/pull/1482)
614
+
615
+ ### 4.18.36
616
+
617
+ - Fix issue for legacy widget rerenders not preserving props. [#1481](https://github.com/marko-js/marko/pull/1481)
618
+ - `no-update` will now preserve elements rendered from the server side. [#1480](https://github.com/marko-js/marko/pull/1480)
619
+
620
+ ### 4.18.35
621
+
622
+ - Improve support for legacy split widgets. [#1477](https://github.com/marko-js/marko/pull/1477)
623
+
624
+ ### 4.18.34
625
+
626
+ - Improve legacy widgets assigning into state causing a replace instead of merge. [#1476](https://github.com/marko-js/marko/pull/1476)
627
+
628
+ ### 4.18.33
629
+
630
+ - Fix event name case normalization for legacy components with `w-on`. [#1475](https://github.com/marko-js/marko/pull/1475)
631
+
632
+ ### 4.18.32
633
+
634
+ - Return the component id if no key is passed to getElId/elId. [#1474](https://github.com/marko-js/marko/pull/1474)
635
+ - Support having nullish keys in the legacy (v3) renderer. [#1473](https://github.com/marko-js/marko/pull/1473)
636
+
637
+ ### 4.18.31
638
+
639
+ - Fix legacy render lifecycle order to match marko-widgets@6. [#1472](https://github.com/marko-js/marko/pull/1472)
640
+
641
+ ### 4.18.30
642
+
643
+ - Fix regression with browser remap for legacy widgets. [#1471](https://github.com/marko-js/marko/pull/1471)
644
+
645
+ ### 4.18.29
646
+
647
+ - Fixed regression which was causing getTemplateData to be serialized.
648
+ - Refactor helpers, fix circular deps, improve code splitting [#1468](https://github.com/marko-js/marko/pull/1468)
649
+ - Remove unused deps, update package-lock [#1469](https://github.com/marko-js/marko/pull/1469)
650
+ - Fixed typo in example output [#1463](https://github.com/marko-js/marko/pull/1463)
651
+
652
+ ### 4.18.28
653
+
654
+ - Allow support for `<state>` tag and calling `setState` on null state [#1460](https://github.com/marko-js/marko/pull/1460)
655
+
656
+ ### 4.18.27
657
+
658
+ - Allow empty `<@catch>` in `<await>` [#1456](https://github.com/marko-js/marko/pull/1456)
659
+
660
+ ### 4.18.26
661
+
662
+ - Improve errors emitted from AsyncWriter
663
+
664
+ ### 4.18.25
665
+
666
+ - Better async stack traces in dev [#1453](https://github.com/marko-js/marko/pull/1453)
667
+
668
+ ### 4.18.24
669
+
670
+ - Remove circular dep for dom weakmaps. [#1449](https://github.com/marko-js/marko/pull/1449)
671
+ - Fix invalid deprecation message for core-tags on windows. [#1448](https://github.com/marko-js/marko/pull/1448)
672
+
673
+ ### 4.18.23
674
+
675
+ - Allow `<macro>` nested under `<if>`. [#1445](https://github.com/marko-js/marko/pull/1445)
676
+
677
+ ### 4.18.22
678
+
679
+ - Improve legacy compatibilty layer by exposing `widgetProps` on the `data` object. [#1443](https://github.com/marko-js/marko/pull/1443)
680
+ - Improve getComponentByEl lookup to prefer owner components. [#1444](https://github.com/marko-js/marko/pull/1444)
681
+
682
+ ### 4.18.21
683
+
684
+ - Fix issue where duplicated attributes were not being included properly in compiled templates. [#1442](https://github.com/marko-js/marko/pull/1442)
685
+
686
+ ### 4.18.20
687
+
688
+ - Fix initialization edge-case for top-level async components. [#1441](https://github.com/marko-js/marko/pull/1441)
689
+
690
+ ### 4.18.19
691
+
692
+ - Deprecate `$global.widgetIdPrefix` (should use `$global.componentIdPrefix` instead). [#1439](https://github.com/marko-js/marko/pull/1439)
693
+ - Improve support for rollup by removing usage of `require.resolve`. [#1440](https://github.com/marko-js/marko/pull/1440)
694
+ - Update minimum version of htmljs-parser to bring in patch release for parsing css calc values.
695
+
696
+ ### 4.18.18
697
+
698
+ - Adds a missing method used by part of the legacy compatibility layer.
699
+
700
+ ### 4.18.17
701
+
702
+ - Fix issue with async out of order components initializing in the wrong order [#1436](https://github.com/marko-js/marko/pull/1436)
703
+ - Improvements to the legacy compatibility layer [#1437](https://github.com/marko-js/marko/pull/1437)
704
+
705
+ ### 4.18.16
706
+
707
+ - Fix top-level components throwing error on hydrate [#1428](https://github.com/marko-js/marko/pull/1428)
708
+ - Ensure scripts only have one text node as a child [#1429](https://github.com/marko-js/marko/pull/1429)
709
+
710
+ ### 4.18.15
711
+
712
+ - Improve support for conditional comments spanning multiple comments. [#1427](https://github.com/marko-js/marko/pull/1427)
713
+ - Add a check for loading precompiled templates. [#1426](https://github.com/marko-js/marko/pull/1426)
714
+
715
+ ### 4.18.14
716
+
717
+ - Improve support for running multiple versions of Marko on the page. [#1418](https://github.com/marko-js/marko/pull/1418)
718
+ - Add migration for `component.elId` when used in a place where `:scoped` is recommended. [#1413](https://github.com/marko-js/marko/pull/1413)
719
+ - Fix issue where static regexps in the template would output differently than dynamic ones. [#1412](https://github.com/marko-js/marko/pull/1412)
720
+ - Improve `marko.json` definitions for core/html tags [#1411](https://github.com/marko-js/marko/pull/1411)
721
+
722
+ ### 4.18.13
723
+
724
+ - Improve support for consuming v3 components via webpack. [#1410](https://github.com/marko-js/marko/pull/1410)
725
+
726
+ ### 4.18.12
727
+
728
+ - Improve autocompletion for core tags. [#1405](https://github.com/marko-js/marko/pull/1405)
729
+ - Fix issue when using `getComponentForEl` with split components. [#1400](https://github.com/marko-js/marko/pull/1400)
730
+
731
+ ### 4.18.11
732
+
733
+ - Fix server-rendered conditional widgets in the compatibility layer. [#1395](https://github.com/marko-js/marko/pull/1395)
734
+ - Deprecate the partial dynamic tag. [#1397](https://github.com/marko-js/marko/pull/1397)
735
+
736
+ ### 4.18.10
737
+
738
+ - Improve migration for `getInitialState` with legacy widgets. [#1385](https://github.com/marko-js/marko/pull/1385)
739
+
740
+ ### 4.18.9
741
+
742
+ - Legacy compat fixes [#1383](https://github.com/marko-js/marko/pull/1383)
743
+ - Temporary fix to ensure `getComponents` doesn't return `null` entries - these should really be removed from the `lookup` instead
744
+ - Use a `for...in` loop to extend the `BaseComponent` (doesn't support getters properly) to maintain the same behavior as `marko-widgets`
745
+ - Ensure that the original `input` for a widget is what gets serialized, not the result of `getTemplateData` (which is called again when hydrating)
746
+
747
+ ### 4.18.8
748
+
749
+ - Fixes an issue where `require("marko/components").getComponentForEl` could return undefined when a component exists, or the wrong component, when nested fragments are present. [#1382](https://github.com/marko-js/marko/pull/1382)
750
+
751
+ ### 4.18.7
752
+
753
+ - Fixes a regression from 4.18.6 that could cause some body content to be omitted from the output [#1380](https://github.com/marko-js/marko/pull/1380)
754
+ - Adds deprecated string dynamic attributes to the vdom runtime for improved legacy compatibility [#1378](https://github.com/marko-js/marko/pull/1378)
755
+
756
+ ### 4.18.6
757
+
758
+ - Migration does not add `id:scoped` when migrating a repeated `w-id` [#1377](https://github.com/marko-js/marko/pull/1377)
759
+ - Fixes an issue diffing the selected option within an optgroup [#1376](https://github.com/marko-js/marko/pull/1376)
760
+ - Fixes component tracking for client-reorder [#1375](https://github.com/marko-js/marko/pull/1375)
761
+ - Improve the migration for legacy `<for>` syntax [#1374](https://github.com/marko-js/marko/pull/1374)
762
+ - Add migration for named classes in the template [#1372](https://github.com/marko-js/marko/pull/1372)
763
+
764
+ ### 4.18.5
765
+
766
+ - Fix issue with invoke tag migration when a inline control flow is used [#1366](https://github.com/marko-js/marko/pull/1366)
767
+
768
+ ### 4.18.4
769
+
770
+ - Lazily evaluate attributes for dynamic tags [#1365](https://github.com/marko-js/marko/pull/1365)
771
+
772
+ ### 4.18.3
773
+
774
+ - Fix `registerTaglib`: use correct function call [#1363](https://github.com/marko-js/marko/pull/1363)
775
+ - Fix tryonline: correct paths and no `taglibImports` [#1360](https://github.com/marko-js/marko/pull/1360)
776
+ - Migration fix: [#1364](https://github.com/marko-js/marko/pull/1364)
777
+ - Migration improvement: deprecation warnings that are automatically migratable now have a `MIGRATION` heading [#1364](https://github.com/marko-js/marko/pull/1364) (also included test improvements)
778
+ - Migration improvement: remove empty `<layout-put>` tags [#1355](https://github.com/marko-js/marko/pull/1355)
779
+
780
+ ### 4.18.2
781
+
782
+ - Fixes an issue where fragments could remove nodes from their siblings [#1359](https://github.com/marko-js/marko/pull/1359)
783
+
784
+ ### 4.18.1
785
+
786
+ - Fixes a regression with `body-only-if` and a legacy control flow attribute [#1356](https://github.com/marko-js/marko/pull/1356)
787
+
788
+ ### 4.18.0
789
+
790
+ - Added dynamic tags to act like body-only-if. If dynamic tags are null then the outer tag will not be rendered. However, the body will be rendered. Deprecated body-only-if [#1332](https://github.com/marko-js/marko/pull/1332)
791
+
792
+ ## 4.17.x
793
+
794
+ ### 4.17.5
795
+
796
+ - Fix issue where setting the `value` attribute of a textarea to `false` caused the string `"false"` to be used in the vdom. [#1348](https://github.com/marko-js/marko/issues/1348)
797
+
798
+ ### 4.17.4
799
+
800
+ - Updates htmljs-parser to fix an issue with comments inside inline scriptlets.
801
+ - Fix some issues with for loop auto keying. [#1346](https://github.com/marko-js/marko/issues/1346)
802
+ - Fix error when using a non string as a key (now logs a deprecation). [#1344](https://github.com/marko-js/marko/issues/1344)
803
+
804
+ ### 4.17.3
805
+
806
+ - Fix issue were `getEls` would not work with repeated keys for split components. [#1343](https://github.com/marko-js/marko/issues/1343)
807
+
808
+ ### 4.17.2
809
+
810
+ - Fix regression with namespaces in nested fragments. [#1340](https://github.com/marko-js/marko/issues/1340)
811
+
812
+ ### 4.17.1
813
+
814
+ - Allow emitting events while the parent is mounting. [#1336](https://github.com/marko-js/marko/issues/1336)
815
+ - Fix issue where `component.el` and `component.getEl` could return a marker node. [#1339](https://github.com/marko-js/marko/issues/1339)
816
+
817
+ ### 4.17.0
818
+
819
+ - Element namespaces are now calculated at runtime, fixes some edge cases with the dynamic tag. [#1333](https://github.com/marko-js/marko/issues/1333)
820
+
821
+ ## 4.16.x
822
+
823
+ ### 4.16.15
824
+
825
+ - Fix an issue where nodes may be preserved if another node with the same key was rendered as preserved. [#1334](https://github.com/marko-js/marko/issues/1334)
826
+ - Improve the `ignoreUnrecognizedTags` compiler option to ignored nested `@tags` on unrecognized tags (removes the need for the `escapeAtTags` option). [#1335](https://github.com/marko-js/marko/issues/1335)
827
+
828
+ ### 4.16.14
829
+
830
+ - Prevent treating macro usage with parameters as a component. [#1326](https://github.com/marko-js/marko/issues/1326)
831
+
832
+ ### 4.16.13
833
+
834
+ - Fixes a regression with printing nested unary expressions (eg typeof). [#1323](https://github.com/marko-js/marko/issues/1323)
835
+
836
+ ### 4.16.12
837
+
838
+ - fix destorying a component that has already removed some top-level nodes [#1321](https://github.com/marko-js/marko/issues/1321)
839
+ - fix components runtime path after refactor released in 4.16.11 [#1322](https://github.com/marko-js/marko/issues/1322)
840
+
841
+ ### 4.16.11
842
+
843
+ - Fixes a regression (syntax) in IE 11 introduced in 4.16.10
844
+
845
+ ### 4.16.10
846
+
847
+ - Hydrating components now consistently render from the top down. [#1317](https://github.com/marko-js/marko/issues/1317)
848
+
849
+ ### 4.16.9
850
+
851
+ - Fixes an issue where legacy widgets could loose a reference to their parent components. [#1311](https://github.com/marko-js/marko/issues/1311)
852
+
853
+ ### 4.16.8
854
+
855
+ - Fixes an issue with hot-reload. [#1282](https://github.com/marko-js/marko/issues/1282)
856
+ - If the require hook is enabled, all templates loaded by marko will now use the require hook, including hot-reloaded templates and tags loaded from compiled templates. [#1310](https://github.com/marko-js/marko/pull/1310)
857
+
858
+ ### 4.16.7
859
+
860
+ - Improve parsing of tag arguments (allows for `<${input.renderBody}(...spread)/>`). [#1308](https://github.com/marko-js/marko/pull/1308)
861
+
862
+ ### 4.16.6
863
+
864
+ - Fix issue with hydrating legacy Marko 3 widgets from the server. [#1306](https://github.com/marko-js/marko/pull/1306)
865
+
866
+ ### 4.16.5
867
+
868
+ - Fix regression with legacy dynamic attributes when a string without whitespace is used. [#1304](https://github.com/marko-js/marko/pull/1304)
869
+ - The `disabled` property on buttons is now properly synced with the template. [#1303](https://github.com/marko-js/marko/pull/1303)
870
+
871
+ ### 4.16.4
872
+
873
+ - Fix regression with migrating legacy `<macro>` syntax with a magic `renderBody` variable. [#1300](https://github.com/marko-js/marko/pull/1300)
874
+
875
+ ### 4.16.3
876
+
877
+ - Fix issue with migrating `<var>` and `<assign>` with `widget` properties. [#1298](https://github.com/marko-js/marko/pull/1298)
878
+
879
+ ### 4.16.2
880
+
881
+ - Fix issue with nested fragments (often as dynamic tags) that were adjacent in the DOM not hydrating properly. [#1294](https://github.com/marko-js/marko/pull/1294)
882
+ - Remove redundant portion of keys for `<macro>` tags within `<for>` loops. [#1295](https://github.com/marko-js/marko/pull/1295)
883
+
884
+ ### 4.16.1
885
+
886
+ - Fix regression for `:no-update` on dynamic tag html attributes. [#1292](https://github.com/marko-js/marko/pull/1292)
887
+
888
+ ### 4.16.0
889
+
890
+ - Add `<marko deprecated-no-create-or-input-for-top-level-hydrate />` option to revert to pre `4.9.0` hydrate behavior. [#1289](https://github.com/marko-js/marko/pull/1289)
891
+
892
+ ## 4.15.x
893
+
894
+ ### 4.15.6
895
+
896
+ - Fix regression in older browsers caused by using `string.startsWith` in the runtime code.
897
+
898
+ ### 4.15.5
899
+
900
+ - Allow syntax that Marko does not understand (but esprima does) to pass through in the arguments syntax. [#1286](https://github.com/marko-js/marko/pull/1286)
901
+ - Fix issue with `<title>` inside of an `<svg>` using the wrong namespace. [#1284](https://github.com/marko-js/marko/pull/1284)
902
+
903
+ ### 4.15.4
904
+
905
+ - Forward errors from `<await client-reorder>` to the parent out to prevent potential unhandled rejections. [#1275](https://github.com/marko-js/marko/pull/1275)
906
+
907
+ ### 4.15.3
908
+
909
+ - Fix false positive deprecation message for legacy nested tag syntax. [#1271](https://github.com/marko-js/marko/pull/1271)
910
+
911
+ ### 4.15.2
912
+
913
+ - Improve the webpack server-bundling experience by guarding a legacy (lasso-specific) api that uses a dynamic require and causes a warning to be emitted. [#1267](https://github.com/marko-js/marko/pull/1267)
914
+
915
+ ### 4.15.1
916
+
917
+ - Improve support for using raw functions as event handlers by not outputing `data-marko` content for components that will rerender in the browser. [#1262](https://github.com/marko-js/marko/pull/1262)
918
+
919
+ ### 4.15.0
920
+
921
+ The most notable change here is to the `<for>`, `<macro>` and `<await>` core tags. These tags previously each relied on custom syntax to implement an API that was not possible to do in userland when they were introduced. Generic solutions for these problems has arrived in the form of [attribute tags](https://markojs.com/docs/syntax#attribute-tag) and [tag parameters](https://markojs.com/docs/syntax#parameters).
922
+
923
+ With these new features in place and currently available in userland we set out to normalize these existing tags, hopefully making the learning process for Marko a little easier, and also promoting the use of these new features. We've also spent time formalizing some best practices, and highlighting this new syntax in the documentation on the [markojs.com](https://markojs.com) website.
924
+
925
+ The existing syntax will continue to be supported until Marko 5 and will currently log a deprecation warning. For these deprecations and most others you can automatically migrate existing code using the [marko migrate](https://github.com/marko-js/cli/blob/master/packages/migrate/README.md) cli tool.
926
+
927
+ - Updated documentation with guides and changes to syntax/core tags. [#1260](https://github.com/marko-js/marko/pull/1260)
928
+ - Modernize the [`<for>` tag](https://markojs.com/docs/core-tags#for). [#1238](https://github.com/marko-js/marko/pull/1238)
929
+ - Modernize the [`<await>` tag](https://markojs.com/docs/core-tags#await). [#1244](https://github.com/marko-js/marko/pull/1244)
930
+ - Modernize the [`<macro>` tag](https://markojs.com/docs/core-tags#macro). [#1227](https://github.com/marko-js/marko/pull/1227)
931
+ - Deprecated legacy top level imports (jquery/ready) and compiler option tags (recommended to use marko.json instead). [#1258](https://github.com/marko-js/marko/pull/1258)
932
+ - Modern arguments support for the dynamic tag. [#1259](https://github.com/marko-js/marko/pull/1259)
933
+ - Improves parsing inside of the `<html-comment>` tag to support the same style of content as actual html comments. [#1261](https://github.com/marko-js/marko/pull/1261)
934
+ - Ignore only whitespace content inside of concise mode tags (including `class` and `style`) which would previously error. [#1256](https://github.com/marko-js/marko/pull/1256)
935
+ - Fixes a regression with passing a string literal as a `${dynamic}` attribute and add a deprecation warning. [#1257](https://github.com/marko-js/marko/pull/1257)
936
+
937
+ ## 4.14.x
938
+
939
+ ### 4.14.25
940
+
941
+ - Fix regression with non standard template literals (`"stuff ${placeholder}"`) that have escaped content such as newlines [#1254](https://github.com/marko-js/marko/pull/1254)
942
+
943
+ ### 4.14.24
944
+
945
+ - Fix regression in `<await>` that caused flushing to not occur in all cases [#1252](https://github.com/marko-js/marko/pull/1252)
946
+
947
+ ### 4.14.23
948
+
949
+ - Fix warning that `"marko"` was using deprecated features. [#1250](https://github.com/marko-js/marko/pull/1250)
950
+ - Improve code optimization for conditional `@nested` tags. [#1249](https://github.com/marko-js/marko/pull/1249)
951
+
952
+ ### 4.14.22
953
+
954
+ - Fix issue with `no-update` not moving preserved items [#1247](https://github.com/marko-js/marko/pull/1247).
955
+ - Fix regression with include tag migration where `<include(data())>` has side effects. [#1246](https://github.com/marko-js/marko/pull/1246)
956
+ - Treat importing tags the same as using them in the template (uses `load` api instead of `require` when configured). [#1245](https://github.com/marko-js/marko/pull/1245)
957
+ - Gracefully handle async client-reorder when nodes are missing during hydrate. [#1243](https://github.com/marko-js/marko/pull/1243)
958
+
959
+ ### 4.14.21
960
+
961
+ - Update `htmljs-parser` to improve parsing regexes [htmljs-parser #61](https://github.com/marko-js/htmljs-parser/pull/61)
962
+
963
+ ### 4.14.20
964
+
965
+ - Add new `<tag|params|>` support and migrator for old syntax/flag [#1236](https://github.com/marko-js/marko/pull/1236)
966
+ - Remove unneeded deprecation warning when using `component` within a template [#1235](https://github.com/marko-js/marko/pull/1235)
967
+
968
+ ### 4.14.19
969
+
970
+ - Fixes walking into some AST nodes which was causing some migrations to not be as effective [#1233](https://github.com/marko-js/marko/pull/1233)
971
+
972
+ ### 4.14.18
973
+
974
+ - Fixes [#1230](https://github.com/marko-js/marko/issues/1230) - regression with include tag migration outputing invalid identifiers [#1231](https://github.com/marko-js/marko/pull/1231)
975
+ - Add migration for legacy nested tag syntax [#1129](https://github.com/marko-js/marko/pull/1129)
976
+
977
+ ### 4.14.17
978
+
979
+ - Fixes [#1219](https://github.com/marko-js/marko/issues/1219) - transitive widget getEl and events [#1225](https://github.com/marko-js/marko/pull/1225)
980
+ - Importing a marko template adds it to tags meta (fixes regression with `<include>` tag) [#1226](https://github.com/marko-js/marko/pull/1226)
981
+
982
+ ### 4.14.16
983
+
984
+ - Add migration for non-standard template literals. [#1224](https://github.com/marko-js/marko/pull/1224)
985
+ - Fix regression with dynamic attribute migration. [#1223](https://github.com/marko-js/marko/pull/1223)
986
+
987
+ ### 4.14.15
988
+
989
+ - Improve migrating `widget` references to `component` in attributes. [#1220](https://github.com/marko-js/marko/pull/1220)
990
+
991
+ ### 4.14.14
992
+
993
+ - Fix regression with `eval`ing class names in debug mode. [#1218](https://github.com/marko-js/marko/pull/1218)
994
+
995
+ ### 4.14.13
996
+
997
+ - Support file name migrations with Marko migrate. [#1216](https://github.com/marko-js/marko/pull/1216)
998
+ - Skip `id:scoped` when migrating w-id for custom tags. [#1217](https://github.com/marko-js/marko/pull/1217)
999
+
1000
+ ### 4.14.12
1001
+
1002
+ - Add migrator for `w-config` attribute. [#1214](https://github.com/marko-js/marko/pull/1214)
1003
+ - Add migrator for and deprecate `unless` tag/directive. [#1210](https://github.com/marko-js/marko/pull/1210)
1004
+
1005
+ ### 4.14.11
1006
+
1007
+ - Fix regression with `w-body` tag. [#1213](https://github.com/marko-js/marko/pull/1213)
1008
+
1009
+ ### 4.14.10
1010
+
1011
+ - Add migrator for `ref` attribute. [#1207](https://github.com/marko-js/marko/pull/1207)
1012
+ - Fix regression with `var` tag and `w-body/include` tags. [#1212](https://github.com/marko-js/marko/pull/1212)
1013
+
1014
+ ### 4.14.9
1015
+
1016
+ - Add migrator for layout tags and include tag/directive. [#1206](https://github.com/marko-js/marko/pull/1206) & [#1204](https://github.com/marko-js/marko/pull/1204)
1017
+ - Add migrator for `<script template-helpers>` and `<script marko-init>`. [#1209](https://github.com/marko-js/marko/pull/1209)
1018
+
1019
+ ### 4.14.8
1020
+
1021
+ - Add migrator from w-body to dynamic tag. [#1199](https://github.com/marko-js/marko/pull/1199)
1022
+ - Add migrator from dynamic attributes to spread attributes. [#1202](https://github.com/marko-js/marko/pull/1202)
1023
+
1024
+ ### 4.14.7
1025
+
1026
+ - Fix regression for `widget.elId` migration. [#1198](https://github.com/marko-js/marko/pull/1198)
1027
+
1028
+ ### 4.14.6
1029
+
1030
+ - Add a whitelist of files to publish to NPM. [#1197](https://github.com/marko-js/marko/pull/1197)
1031
+
1032
+ ### 4.14.5
1033
+
1034
+ - Add `getTemplateData` migrator. [#1195](https://github.com/marko-js/marko/pull/1195)
1035
+ - Add migrators for most of the `w-*` attributes. [#1190](https://github.com/marko-js/marko/pull/1190)
1036
+ - Add basic legacy widget migration. [#1192](https://github.com/marko-js/marko/pull/1192)
1037
+
1038
+ ### 4.14.4
1039
+
1040
+ - Fix regression with `setProps` on legacy compatibility layer. [#1193](https://github.com/marko-js/marko/pull/1193)
1041
+
1042
+ ### 4.14.3
1043
+
1044
+ - Move `w-on` compatibility to the migrate stage. [#1186](https://github.com/marko-js/marko/pull/1186)
1045
+ - Legacy compatibility (v3) improvements. [#1189](https://github.com/marko-js/marko/pull/1189)
1046
+ - Specially handle template literals in templates. [#1188](https://github.com/marko-js/marko/pull/1188)
1047
+
1048
+ ### 4.14.2
1049
+
1050
+ - Convert the `<async-fragment>` transformer into a migrator. [#1185](https://github.com/marko-js/marko/pull/1185)
1051
+
1052
+ ### 4.14.1
1053
+
1054
+ - Fix regression causing some parsed javascript nodes to be omitted from output. [#1184](https://github.com/marko-js/marko/pull/1184)
1055
+
1056
+ ### 4.14.0
1057
+
1058
+ - Add migration stage, deprecate rendering with `out`, deprecate control-flow directive as attributes. [#1180](https://github.com/marko-js/marko/pull/1180)
1059
+ - parse = parseRaw + normalize [#1179](https://github.com/marko-js/marko/pull/1179)
1060
+ - parse nonstandard string with placeholder to TemplateLiteral node, transpile template literals. [#1179](https://github.com/marko-js/marko/pull/1179)
1061
+ - add new parse api
1062
+
1063
+ ## 4.13.x
1064
+
1065
+ ### 4.13.13
1066
+
1067
+ - Fix regression: parsing of `if` statements without braces (in scriptlets & otherwise). [#1175](https://github.com/marko-js/marko/pull/1175)
1068
+ - Fix regression: `<var>` and `<assign>` tags with non-standard placeholders in normal string attributes. [#1176](https://github.com/marko-js/marko/pull/1176)
1069
+
1070
+ ### 4.13.12
1071
+
1072
+ - `<invoke>` tag translates to modern Marko scriptlet (or dynamic tag). [#1165](https://github.com/marko-js/marko/pull/1165)
1073
+ - `<assign>` tag translates to modern Marko scriptlet. [#1158](https://github.com/marko-js/marko/pull/1158)
1074
+ - Imperative rendering in scriptlets translates to modern Marko dynamic tag. [#1174](https://github.com/marko-js/marko/pull/1174)
1075
+
1076
+ ### 4.13.11
1077
+
1078
+ - Add spread attribute optimization, fix issue with spreading non objects. [#1171](https://github.com/marko-js/marko/pull/1171)
1079
+ - Move `#` to the start of `:scoped` attributes (allows for `href:scoped="#name"`). [#1172](https://github.com/marko-js/marko/pull/1172)
1080
+
1081
+ ### 4.13.10
1082
+
1083
+ - Adds a hidden api used to make [@marko-tags/context](https://github.com/marko-js/tags/tree/master/tags/context) possible. [#1168](https://github.com/marko-js/marko/pull/1168)
1084
+
1085
+ ### 4.13.9
1086
+
1087
+ - Improve support for [arc]() by normalizing file system names with square brackets. [#1166](https://github.com/marko-js/marko/pull/1166)
1088
+
1089
+ ### 4.13.8
1090
+
1091
+ - Quick patch for `4.13.7` that removes a `let` assignment. [#1153](https://github.com/marko-js/marko/pull/1153)
1092
+
1093
+ ### 4.13.7
1094
+
1095
+ - Prevent treating components with tag params being treated as implicit components. [#1149](https://github.com/marko-js/marko/pull/1149)
1096
+
1097
+ ### 4.13.6
1098
+
1099
+ - Prevent mutating component input when using a single spread attribute with repeated @tags. [#1142](https://github.com/marko-js/marko/pull/1142)
1100
+ - Fix for include tag hydration when transcluded. [#1143](https://github.com/marko-js/marko/pull/1143)
1101
+
1102
+ ### 4.13.5
1103
+
1104
+ - Add additional reference to fragment nodes which resolves an issue with IE. [#1130](https://github.com/marko-js/marko/pull/1130)
1105
+
1106
+ ### 4.13.4
1107
+
1108
+ - Remove Object.assign calls in the browser. [#1120](https://github.com/marko-js/marko/pull/1120)
1109
+
1110
+ ### 4.13.3
1111
+
1112
+ - Propagate errors to express automatically with the `res.marko` api. [#1119](https://github.com/marko-js/marko/pull/1119)
1113
+ - Support multi line import statments. [#1118](https://github.com/marko-js/marko/pull/1118)
1114
+
1115
+ ### 4.13.2
1116
+
1117
+ - Allow discovering tags where the template name matches the directory name [#1117](https://github.com/marko-js/marko/pull/1117):
1118
+
1119
+ ```
1120
+ components/
1121
+ tag-name/
1122
+ tag-name.marko
1123
+ tag-name.style.css
1124
+ ```
1125
+
1126
+ ### 4.13.1
1127
+
1128
+ - Remove es2015 features from runtime. [#1115](https://github.com/marko-js/marko/pull/1115)
1129
+
1130
+ ### 4.13.0
1131
+
1132
+ #### PR #1094
1133
+
1134
+ **Introducing HTMLFragment**
1135
+
1136
+ - Updates the diffing algorithm to use an HTMLFragment node as an abstraction rather than keeping track of startNode and endNode all throughout the diffing algorithm.
1137
+ - Uses the HTMLFragment for the `<${dynamic}>` tag and `<include>` tags to preserve server-rendered content for which the `renderBody` is not available in the browser.
1138
+
1139
+ **Changes to keys**
1140
+
1141
+ - Component ids are based on the resulting parent tree (not the owner tree). This means we cannot rely on the ids in the global lookup, so component key/refs are now also stored on the component instance.
1142
+ - Autokeyed elements are now stored on the parent rather than the owner. User assigned key/refs are still stored on the owner component. Because of this, user assigned keys are now prefixed to differentiate them from autokeys. This also has the benefit that assigning numeric keys can no longer conflict with the autokeys.
1143
+ - Static node trees are now only auto assigned a key for the top-level node (instead of all nodes). This is because:
1144
+ - When updating, only the top-level node is considered.
1145
+ - When static nodes are hoisted out of the render method, they are not associated with the owner component
1146
+
1147
+ **Changes to Hydration**
1148
+
1149
+ - Server comment starting markers now have the component's key serialized so the component can be attached to its owner
1150
+ - Server comment markers no longer have the id on the closing marker, it is stack based.
1151
+ - Normalize differences between hydration and client-rendering, so post mount the DOM looks the same regardless of whether a component was server or client rendered.
1152
+
1153
+ ## 4.12.x
1154
+
1155
+ ### 4.12.4
1156
+
1157
+ - Don't render invalid attribute names on the server [#1103](https://github.com/marko-js/marko/pull/1103)
1158
+
1159
+ ### 4.12.3
1160
+
1161
+ - Removes extra parentheses in output javascript for expressions that Marko does not understand.
1162
+
1163
+ ### 4.12.2
1164
+
1165
+ - Fixes automatic keying of elements/components in `for()` attribute loops
1166
+
1167
+ ### 4.12.1
1168
+
1169
+ - Fix #1022 - transcluded keys don't match, stateful component not preserved [#1086](https://github.com/marko-js/marko/pull/1086)
1170
+
1171
+ ### 4.12.0
1172
+
1173
+ - Tag params [#1076](https://github.com/marko-js/marko/pull/1076)
1174
+ - Style arrays [#1082](https://github.com/marko-js/marko/pull/1082)
1175
+ - Fix #1075 - cannot compile dynamic tag at root with user key [#1081](https://github.com/marko-js/marko/pull/1081)
1176
+ - Fix #1078 - mutating spread attributes [#1080](https://github.com/marko-js/marko/pull/1080)
1177
+
1178
+ ## 4.11.x
1179
+
1180
+ ### 4.11.5
1181
+
1182
+ - Add fallback location for compile-time deprecation warnings
1183
+
1184
+ ### 4.11.4
1185
+
1186
+ - Fixes an issue with scoped attributes automatically setting keys in a problematic way [#1069](https://github.com/marko-js/marko/pull/1069)
1187
+ - Fixes #1059 and #1052 - `Cannot read property 'nextSibling' of null`
1188
+
1189
+ ### 4.11.3
1190
+
1191
+ - Fixes #952
1192
+ - Fixes automatic keying of elements/components in `<for>` loops
1193
+
1194
+ ### 4.11.2
1195
+
1196
+ - Fixes another regression in the `<${dynamic}>` tag where `dashed-case` attributes were being converted to `camelCase` when rendering html elements.
1197
+
1198
+ ### 4.11.1
1199
+
1200
+ - Fixes a regression in `<${dynamic}>` tags for object/array class/style attributes:
1201
+ ```marko
1202
+ $ const style = { color:'blue' };
1203
+ <${tagName} style=style/>
1204
+ ```
1205
+ - Allows dynamic attributes defined using `...spread` to include object/array class/style [#933](https://github.com/marko-js/marko/pull/933):
1206
+ ```marko
1207
+ $ const attrs = { style:{ color:'blue' } };
1208
+ <tag ...attrs/>
1209
+ ```
1210
+ - Fixes issue where object/array class/style attributes could not be used with `...spread` [#1007](https://github.com/marko-js/marko/pull/1007):
1211
+ ```marko
1212
+ $ const attrs = {};
1213
+ <tag class=["oops"] ...attrs/>
1214
+ ```
1215
+
1216
+ ### 4.11.0
1217
+
1218
+ - Implement #880: `<${dynamic}>` tag
1219
+ - `<include>` should be considered deprecated. Formal deprecation warning to come.
1220
+
1221
+ ## 4.10.x
1222
+
1223
+ ### 4.10.1
1224
+
1225
+ - Fix issue with calling `require('marko/components').init(components)` multiple times.
1226
+
1227
+ ### 4.10.0
1228
+
1229
+ - Fix #1049 Fix documentation urls on the website.
1230
+
1231
+ ## 4.9.x
1232
+
1233
+ ### 4.9.7
1234
+
1235
+ - Fix #1038 Legacy compatibility dirty check returning false positives.
1236
+
1237
+ ### 4.9.6
1238
+
1239
+ - Fix #1008 Spread attribute now supports functions (`..attrs()`) [#1029](https://github.com/marko-js/marko/pull/1029)
1240
+
1241
+ ### 4.9.5
1242
+
1243
+ - Fix `onBeforeUpdate` timing for legacy component layer [#1027](https://github.com/marko-js/marko/pull/1027)
1244
+
1245
+ ### 4.9.4
1246
+
1247
+ - Fix breaking older browsers with es6 object shorthand notation [bc0e91d5](https://github.com/marko-js/marko/commit/bc0e91d517d7b8de484c745a5734f15347ed0d26)
1248
+
1249
+ ### 4.9.3
1250
+
1251
+ - Fix import-var compilation when there are no explicit attributes [#1002](https://github.com/marko-js/marko/pull/1002)
1252
+
1253
+ ### 4.9.2
1254
+
1255
+ - Fixes collisions with multiple Marko runtimes on the same page. [#1019](https://github.com/marko-js/marko/pull/1019)
1256
+ - Switch to using prettier and eslint. [#1016](https://github.com/marko-js/marko/pull/1016)
1257
+
1258
+ ### 4.9.1
1259
+
1260
+ - Fixes an issue with keyed elements not getting properly removed. [#1013](https://github.com/marko-js/marko/pull/1013)
1261
+
1262
+ ### 4.9.0
1263
+
1264
+ - Fixes related to hydration, split components, and the legacy compatibility layer [#1010](https://github.com/marko-js/marko/pull/1010)
1265
+
1266
+ - Fix paths for vdom dependencies [#1011](https://github.com/marko-js/marko/pull/1011)
1267
+
1268
+ ## 4.8.x
1269
+
1270
+ ### 4.8.0
1271
+
1272
+ - Add `once-[event]` directive [#990](https://github.com/marko-js/marko/pull/990)
1273
+
1274
+ - Improve testing setup [#989](https://github.com/marko-js/marko/pull/989)
1275
+
1276
+ ## 4.7.x
1277
+
1278
+ ### 4.7.5
1279
+
1280
+ - Update docs for advanced attribute definition [#968](https://github.com/marko-js/marko/pull/968)
1281
+
1282
+ - Improve error message for async rendering [#958](https://github.com/marko-js/marko/pull/958)
1283
+
1284
+ ### 4.7.4
1285
+
1286
+ - Make jQuery optional for legacy components [#951](https://github.com/marko-js/marko/pull/951)
1287
+
1288
+ ### 4.7.3
1289
+
1290
+ - Prevent onRender running on the server for legacy widgets
1291
+
1292
+ ### 4.7.2
1293
+
1294
+ - Fixes [#946](https://github.com/marko-js/marko/issues/946) - don't put legacy init code in a separate lasso bundle
1295
+
1296
+ - Fixes allowing conditionally binding to different roots in a legacy widget [#944](https://github.com/marko-js/marko/pull/944)
1297
+
1298
+ ### 4.7.1
1299
+
1300
+ - Fix issue with multiple top level elements being removed twice. [#940](https://github.com/marko-js/marko/pull/940)
1301
+
1302
+ ### 4.7.0
1303
+
1304
+ - Add jQuery legacy compatibility layer support [#937](https://github.com/marko-js/marko/pull/937)
1305
+
1306
+ - Reorganize Marko tests [#934](https://github.com/marko-js/marko/pull/934)
1307
+
1308
+ - Switch to using jsdom in test suite [#935](https://github.com/marko-js/marko/pull/935)
1309
+
1310
+ - Decouple component hydration from Lasso [#929](https://github.com/marko-js/marko/pull/929)
1311
+
1312
+ ## 4.6.x
1313
+
1314
+ ### 4.6.0
1315
+
1316
+ - Fixes [#914](https://github.com/marko-js/marko/issues/914) and [#920](https://github.com/marko-js/marko/issues/920) -
1317
+ Resolves top-level component bugs
1318
+
1319
+ - Setup `marko.load()` to prefer precompiled templates from [marko-cli](https://github.com/marko-js/marko-cli)
1320
+
1321
+ - Various compiler changes to improve [marko-migrate](https://github.com/marko-js/marko-migrate)
1322
+
1323
+ - Fixes [#916](https://github.com/marko-js/marko/pull/916) - Add Marko debug mode.
1324
+ Adds babel plugin to remove and statically evaluate 'MARKO_DEBUG' literals for
1325
+ adding deprecation warnings and hints for the runtime without a performance
1326
+ penalty for production builds.
1327
+
1328
+ ## 4.5.x
1329
+
1330
+ ### 4.5.6
1331
+
1332
+ - Fixes [#909](https://github.com/marko-js/marko/issues/909) - Fix condition preventing bubbling DOM events from properly being attached to a component.
1333
+
1334
+ ### 4.5.5
1335
+
1336
+ - Add 10 Awesome Marko Features article to documentation
1337
+
1338
+ ### 4.5.4
1339
+
1340
+ - Fixes [#904](https://github.com/marko-js/marko/issues/904) - The loop status variable is not compiling when the equal sign is padded in spacing
1341
+
1342
+ ### 4.5.3
1343
+
1344
+ - Fixes [#903](https://github.com/marko-js/marko/issues/903) - Special unicode chars (\u2028 and \u2029) need to be escaped if within script tag
1345
+
1346
+ ### 4.5.2
1347
+
1348
+ - Fixes [#899](https://github.com/marko-js/marko/issues/899) - Keyed element could be incorrectly removed after DOM diffing/patching in case of HTML element mismatch for elements with the same key. [PR #900](https://github.com/marko-js/marko/pull/900)
1349
+
1350
+ ### 4.5.1
1351
+
1352
+ - Fixes [#893](https://github.com/marko-js/marko/issues/893) - Keyed element could be incorrectly removed after DOM diffing/patching in case of HTML element mismatch for elements with the same key. [PR #894](https://github.com/marko-js/marko/pull/894) by [@westtrade](https://github.com/westtrade)
1353
+
1354
+ ### 4.5.0
1355
+
1356
+ Summary of changes across all beta releases for the `4.5.0` release:
1357
+
1358
+ - Fixes [#886](https://github.com/marko-js/marko/issues/886) - Write component initialization code when async out and all of its nested async outs finish
1359
+ - Fixes [#854](https://github.com/marko-js/marko/issues/854) - Make every .marko file a UI component ([PR #855](https://github.com/marko-js/marko/pull/855))
1360
+ - Added support for the `:scoped` modifier on attributes and deprecated `:key`:
1361
+
1362
+ ```marko
1363
+ <label for:scoped="name">Name</label>
1364
+ <input id:scoped="name" value="Frank"/>
1365
+ ```
1366
+
1367
+ - Fixes [#817](https://github.com/marko-js/marko/issues/817) - Support dynamic root elements
1368
+ - Marko no longer attaches `id` attributes to elements for purposes of keyed matching
1369
+ - Keyed elements are maintained in an internal, per-component lookup
1370
+ - Keys are now assigned to all custom tags and HTML elements at compile-time to improve reliability and performance of DOM diffing
1371
+ - Optimized internal bookkeeping required during rendering a UI component tree (no more UI component stack)
1372
+ - DOM diffing/patching changes:
1373
+ - Significant performance improvements
1374
+ - morphdom is now UI component-aware
1375
+
1376
+ ### 4.5.0-beta.3
1377
+
1378
+ - Fixes [#854](https://github.com/marko-js/marko/issues/854) - Make every .marko file a UI component ([PR #855](https://github.com/marko-js/marko/pull/855))
1379
+
1380
+ ### 4.5.0-beta.2
1381
+
1382
+ - Add ids for any key when component.elId/getElId is used as an attribute value
1383
+ - Use indexOf instead of includes to support Node 4
1384
+ - [docs] Fixes [#841](https://github.com/marko-js/marko/issues/841) - `docs/components.md` refers to deprecated "data" variable [#842](https://github.com/marko-js/marko/pull/842)
1385
+
1386
+ ### 4.5.0-beta.1
1387
+
1388
+ - Add back (legacy) support for component.elId + key in template
1389
+ - Fixes [#837](https://github.com/marko-js/marko/issues/837) - Update esprima to the latest to support async/await and ES2017 inside of components. ([PR #839](https://github.com/marko-js/marko/pull/839))
1390
+ - Fixes key/scope for attributes that have dashes in the name
1391
+
1392
+ ### 4.5.0-beta.0
1393
+
1394
+ - Fixes [#817](https://github.com/marko-js/marko/issues/817) - Support dynamic root elements
1395
+ - Marko no longer attaches `id` attributes to elements for purposes of keyed matching
1396
+ - Keyed elements are maintained in an internal, per-component lookup
1397
+ - Keys are now assigned to all custom tags and HTML elements at compile-time to improve reliability and performance of DOM diffing
1398
+ - Optimized internal bookkeeping required during rendering a UI component tree (no more UI component stack)
1399
+ - DOM diffing/patching changes:
1400
+ - Significant performance improvements
1401
+ - morphdom is now UI component-aware
1402
+
1403
+ ## 4.4.x
1404
+
1405
+ ### 4.4.28
1406
+
1407
+ - fix undefined reference error in Component.js
1408
+ - Increase mocha timeout to avoid CI build's failing [#821](https://github.com/marko-js/marko/pull/821)
1409
+
1410
+ ### 4.4.27
1411
+
1412
+ - Add ability to update globals by setting new input.
1413
+ - [docs] Remove unneeded command from installation docs
1414
+ - [docs] Update installing.md
1415
+
1416
+ ### 4.4.26
1417
+
1418
+ - Add better interop for importing modules with default exports [#803](https://github.com/marko-js/marko/pull/803)
1419
+
1420
+ ### 4.4.25
1421
+
1422
+ - Fixes #778 - Fix Marko compiler generating incorrect path for requires on Windows.
1423
+
1424
+ ### 4.4.24
1425
+
1426
+ - [docs] Update installing.md
1427
+
1428
+ ### 4.4.23
1429
+
1430
+ - Fixes #796 - Fix events for event targets that are SVGElementInstance types in IE11.
1431
+ - Used shortcut for escapeAtTags;
1432
+ - Added `escapeAtTags` options in order to render `<@tags>` as they are;
1433
+ - simplify a condition judgement in components-jquery
1434
+ - Fixes #790 - Class tag should not allow nested body content.
1435
+ - Update `compile/index.js` test description
1436
+ - Update handleRootNodes.js [#747](https://github.com/marko-js/marko/pull/747)
1437
+ - [docs] Fix reference to lifecycle section in docs.
1438
+
1439
+ ### 4.4.22
1440
+
1441
+ - Fixes #784 - Fix compiled preserve-attrs path.
1442
+ - [testing] Fix express tests [#779](https://github.com/marko-js/marko/pull/779)
1443
+ - [docs] Update webpack.md
1444
+
1445
+ ### 4.4.21
1446
+
1447
+ - Updated description in `package.json`
1448
+
1449
+ ### 4.4.20
1450
+
1451
+ - update bindComponentVar to use dynamic location
1452
+ - updating location of bindComponent helper
1453
+
1454
+ ### 4.4.19
1455
+
1456
+ - [testing] Fix key suffix test assertions.
1457
+ - Address key suffix feedback. Additional tests.
1458
+ - [morphdom] Removed bad and unhelpful optimization to avoid infinite loops
1459
+ - [morphdom] Ensure `onBeforeNodeDiscarded` is only called once by looking to see if the node is still attached.
1460
+ - [morphdom] Infinite loop fix in morphdom
1461
+ - Fixes #761 - component.elId() does not work on the server
1462
+ - Fixes #755 - Allow diffing of HTML, head, and body. [#756](https://github.com/marko-js/marko/pull/756)
1463
+ - [docs] Updated component docs
1464
+ - [docs] Use relative link for image
1465
+ - [testing] User default npm version for each Node.js version
1466
+
1467
+ ### 4.4.18
1468
+
1469
+ - Fixes #749 #690 - Do not rely on root node having an ID on rerender and properly handle style root nodes.
1470
+
1471
+ ### 4.4.17
1472
+
1473
+ - Put package (`browser.json`) deps before others and parent deps before child deps [#750](https://github.com/marko-js/marko/pull/750)
1474
+ - [docs] Fix typo in redux.md
1475
+ - [docs] Add redux document to structure.json
1476
+ - [docs] Add doc describing how to use Redux with Marko.
1477
+
1478
+ ### 4.4.16
1479
+
1480
+ - Fix duplicate body variable
1481
+
1482
+ ### 4.4.15
1483
+
1484
+ - Fixes #739 - Should not attempt to check instanceof of type Map if it does not exist in the browser.
1485
+ - Added build scripts
1486
+
1487
+ ### 4.4.14
1488
+
1489
+ - Fixes issue with renderToString not rendering text nodes
1490
+
1491
+ ### 4.4.13
1492
+
1493
+ - Fixes #721 - Add a Code of Conduct
1494
+ - Fixes #655 - Implement renderToString in the browser.
1495
+
1496
+ ### 4.4.12
1497
+
1498
+ - Fixes #695 - Always ignore unrecognized tags for XML files when using the compiler.
1499
+ - Fixes #705 - Throw error when the root HTML element is a component and has a dynamic id attribute.
1500
+ - [testing] Additional test for root node with dynamic id of a component with a component.js file.
1501
+
1502
+ ### 4.4.11
1503
+
1504
+ - Fixes #728 - Do not use module keyword because webpack compiles it to a custom object.
1505
+ - Fixes #719 - Support Express 4 and Express 5.
1506
+ - fixes #658 by removing empty style blocks [#715](https://github.com/marko-js/marko/pull/715)
1507
+ - fixes #688 - add reference to browser.json in meta dependencies
1508
+ - [docs] Fix broken link
1509
+ - [docs] Fix Marko syntax in docs causing compilation errors on the website.
1510
+ - [docs] Change pixels to percent in doc images.
1511
+ - [testing] Purge express cache so that express tests both use correct module versions.
1512
+
1513
+ ### 4.4.9
1514
+
1515
+ - Revert "Fixes #705 - Throw error when the root HTML element has a dynamic id …"
1516
+ - [testing] Only run Node 4, 6, & 8 in travis
1517
+
1518
+ ### 4.4.8
1519
+
1520
+ - [docs] Clean up why-is-marko-fast.md
1521
+ - [docs] Clean up marko-vs-react.md
1522
+
1523
+ ### 4.4.7
1524
+
1525
+ - Add silent option to browser-refresh and hot-reload
1526
+ - Check id attribute for Literal. Update error message to include error page.
1527
+ - Fixes #705 - Throw error when the root HTML element has a dynamic id attribute.
1528
+ - [docs] Clean up components.md
1529
+ - [docs] Fix typo in webpack.md
1530
+ - [testing] give extra time for test timing out in travis
1531
+ - [testing] run tests on node 8
1532
+ - [testing] ignore test-dist from coverage
1533
+
1534
+ ### 4.4.6
1535
+
1536
+ - Fixes #693 - [SSR] Improved handling of top-level UI components with renderBody func
1537
+ - Switching to using `prepublish` with npm@5
1538
+
1539
+ ### 4.4.3
1540
+
1541
+ - Use parent module to require express patch [#701](https://github.com/marko-js/marko/pull/701)
1542
+ - [docs] Reference app should point to "marko-lasso" because "ui-components-playground" does not contain lasso
1543
+ - [docs] Add articles section to docs.
1544
+
1545
+ ### 4.4.2
1546
+
1547
+ - Build fixes related to compiler
1548
+
1549
+ ### 4.4.0
1550
+
1551
+ - Improve no-update-if condition check
1552
+ - Compatibility improvements for Try Online
1553
+ - Code size reduction
1554
+ - Introduced src/ and dist/ folders for optimized production builds
1555
+ - Fixes #695 - Default to ignoring unrecognized tags for XML files.
1556
+
1557
+ ## 4.3.x
1558
+
1559
+ ### 4.3.1
1560
+
1561
+ - Add basic test for ensuring that res.marko returns a promise.
1562
+ - enable res.marko can catch a error safe
1563
+
1564
+ ### 4.3.0
1565
+
1566
+ - [compiler] Added more control over how attributes are targeted to props
1567
+ - Don't add root markers to tags that don't produce output
1568
+ - [docs] Added docs for Marko + Huncwot integration
1569
+ - [AST] Added `node.removeChildren()`
1570
+ - Extend marko globals with defaults
1571
+
1572
+ ### 4.3.0-beta.4
1573
+
1574
+ - Fixes #673 - Circular dependency is causing problems with Webpack
1575
+
1576
+ ### 4.3.0-beta.3
1577
+
1578
+ - Changes related to #670 - Globals must be serialized earlier to allow early mount of UI components in
1579
+ - [docs] Improved docs for SSR
1580
+
1581
+ ### 4.3.0-beta.2
1582
+
1583
+ - Fixes for #670 - Add support for serialized globals and retain globals on re-render
1584
+
1585
+ ## 4.2.x
1586
+
1587
+ ### 4.2.8
1588
+
1589
+ - Bug: Fixes [#661](https://github.com/marko-js/marko/issues/661) - Component initialization code may end up in the wrong place
1590
+ - Bug: Fixes [#668](https://github.com/marko-js/marko/issues/668) - Declarative event listeners are now allowed on the `<include>` tag
1591
+
1592
+ ### 4.2.7
1593
+
1594
+ - Bug: Fixes [#650](https://github.com/marko-js/marko/issues/650) - The tag "await" does not support attribute "unless"
1595
+ - Improvements to legacy state
1596
+
1597
+ ### 4.2.6
1598
+
1599
+ - Bug: Fixes [#654](https://github.com/marko-js/marko/issues/654) - Bug: components implementing a `key` attribute break in Marko v4
1600
+ - Improvements to legacy compatibility layer
1601
+
1602
+ ### 4.2.5
1603
+
1604
+ - Improved support for UI components implemented using native JavaScript class in a separate file
1605
+ - Improved how legacy layout tags are handled by Marko v4
1606
+
1607
+ ### 4.2.4
1608
+
1609
+ - Bug: Fixes [#653](https://github.com/marko-js/marko/issues/653) - Event handlers are no longer bound in edge case
1610
+
1611
+ ### 4.2.3
1612
+
1613
+ - Bug: Fixes [#649](https://github.com/marko-js/marko/issues/649) - New line always added to `textarea` and other elements for single line/delimited HTML blocks
1614
+
1615
+ ### 4.2.2
1616
+
1617
+ - Bug: Fixes [#648](https://github.com/marko-js/marko/issues/648) - Style attribute object and lengths not handled properly
1618
+
1619
+ ### 4.2.1
1620
+
1621
+ - Bug: Fixed [#644](https://github.com/marko-js/marko/issues/644) - Attribute not rendered by Marko is not preserved if component first rendered on the server
1622
+ - [Performance] Escaping is not needed for the `data-marko` attribute
1623
+
1624
+ ### 4.2.0
1625
+
1626
+ - Bug: Fixed [#629](https://github.com/marko-js/marko/issues/629) - VDOM: Rendering unescaped HTML produces non-functioning HTML input controls
1627
+ - Bug: Fixed [#634](https://github.com/marko-js/marko/issues/634) - writeInitComponentsCode is not a function
1628
+ - Enhancement: Added support to allow improved precompiling of templates
1629
+ - Enhancement: Fixed [#636](https://github.com/marko-js/marko/issues/636) - Add error when macro with duplicate name is found
1630
+ - Performance: Optimized diffing/patching to avoid indexing entire tree to find keyed elements
1631
+ - Performance: Optimized how event handlers are attached to VDOM nodes (separated from attributes)
1632
+
1633
+ ## 4.1.x
1634
+
1635
+ ### 4.1.3
1636
+
1637
+ - Bug: Fixed losing cursor position in Edge (see [morphdom PR #100](https://github.com/patrick-steele-idem/morphdom/pull/100) by [@zastavnitskiy](https://github.com/zastavnitskiy))
1638
+ - Bug: Ignore `xmlns` attributes when virtualizing real DOM nodes (needed when inserting an HTML string when rendering to a VDOM)
1639
+
1640
+ ### 4.1.2
1641
+
1642
+ - Bug: Fixed [#623](https://github.com/marko-js/marko/issues/623) - Uncaught TypeError: `toEl.$__hasAttribute` is not a function
1643
+ - Bug: Fixed [#619](https://github.com/marko-js/marko/issues/619) - Deprecated `constructor()` for UI component classes
1644
+
1645
+ ### 4.1.1
1646
+
1647
+ - Added `"use strict";` to restore Node.js compatibility for Node.js v4 and v5
1648
+
1649
+ ### 4.1.0
1650
+
1651
+ - Bug: Fixes [#611](https://github.com/marko-js/marko/issues/611) - Component IDs are not being assigned correctly when intermediate non-component is rendered
1652
+ - Performance: SVG namespaced elements are now resolved determined at compile-time
1653
+ - Performance: Merged in `morphdom` and optimized for Marko
1654
+ - Performance: Optimized diffing/patching of elements with only simple attributes in the following set: `class`, `id` and `style`
1655
+
1656
+ ## 4.0.x
1657
+
1658
+ ### 4.0.1
1659
+
1660
+ - Bug: Fixes [#612](https://github.com/marko-js/marko/issues/612) - Compile error when class method has empty `return`
1661
+ - Bug: Fixes [#604](https://github.com/marko-js/marko/issues/604) - `no-update` attributes error when first rendered on the server
1662
+ - Bug: Fixes [#608](https://github.com/marko-js/marko/issues/608) - Component losing `renderBody` input on a particular redraw
1663
+ - Enhancement: Fixes [#606](https://github.com/marko-js/marko/issues/606) - named single-file component doesn't work
1664
+
1665
+ ### 4.0.0
1666
+
1667
+ - Marko v4! [Release Announcement](https://medium.com/@mlrawlings/marko-4-0-is-here-837884c5f60d)
1668
+
1669
+ # 3.x
1670
+
1671
+ ## 3.13.x
1672
+
1673
+ ### 3.13.2
1674
+
1675
+ - Fixed [#478](TagLookup fails when merging taglibs) - TagLookup fails when merging taglibs
1676
+
1677
+ ### 3.13.1
1678
+
1679
+ - Fixes [#465](https://github.com/marko-js/marko/issues/465)
1680
+
1681
+ ### 3.13.0
1682
+
1683
+ ## 3.12.x
1684
+
1685
+ ### 3.12.0
1686
+
1687
+ - Added warnings for using render methods when you want string output ([Pull Request #450](https://github.com/marko-js/marko/pull/450) by [@mlrawlings](https://github.com/mlrawlings))
1688
+
1689
+ ## 3.11.x
1690
+
1691
+ ### 3.11.8
1692
+
1693
+ - Fixes [#382](https://github.com/marko-js/marko/issues/382) - Local variable for tag should have prefix or suffix to avoid conflict
1694
+
1695
+ ### 3.11.7
1696
+
1697
+ - Fixes [#381](https://github.com/marko-js/marko/issues/381) - `$global` broken when using `template.stream()`
1698
+
1699
+ ### 3.11.6
1700
+
1701
+ - Internal change: `AsyncWriter` → `AsyncStream`
1702
+
1703
+ ### 3.11.5
1704
+
1705
+ - (no changes)
1706
+
1707
+ ### 3.11.4
1708
+
1709
+ - Update to `async-writer@2`
1710
+
1711
+ ### 3.11.3
1712
+
1713
+ - Silently ignore errors when parsing tag definition code inlined in JavaScript
1714
+
1715
+ ### 3.11.2
1716
+
1717
+ - Fixed [#318](https://github.com/marko-js/marko/issues/318) - Use compiler options passed to require hook to configure marko globally
1718
+
1719
+ ```javascript
1720
+ require("marko/node-require").install({
1721
+ compilerOptions: {
1722
+ writeToDisk: false
1723
+ }
1724
+ });
1725
+ ```
1726
+
1727
+ ### 3.11.1
1728
+
1729
+ - Fixed [#370](https://github.com/marko-js/marko/issues/370) - HTML characters in loop separator string should not be escaped
1730
+
1731
+ ### 3.11.0
1732
+
1733
+ - Introduced the `<include-html(path)>` tag for including static HTML:
1734
+
1735
+ ```xml
1736
+ <include-html('./foo.html')>
1737
+ ```
1738
+
1739
+ ## 3.10.x
1740
+
1741
+ ### 3.10.1
1742
+
1743
+ - Fixed [#44](https://github.com/marko-js/marko/issues/44) - Webpack compatibility fixes. Also see [marko-loader](https://github.com/marko-js/marko-loader) (A marko loader for webpack)
1744
+
1745
+ ### 3.10.0
1746
+
1747
+ - Fixed [#357](https://github.com/marko-js/marko/issues/357) - Deprecate `empty`/`notEmpty` in Marko v3
1748
+
1749
+ ## 3.9.x
1750
+
1751
+ ### 3.9.4
1752
+
1753
+ - Fixed [#355](https://github.com/marko-js/marko/issues/355) - `status-var`/`separator` options not handled when looping over properties
1754
+ - Fixed [#354](https://github.com/marko-js/marko/issues/354) - regular expressions used in attribute values are not being handled correctly
1755
+ - Fixed [#353](https://github.com/marko-js/marko/issues/353) - `body-only-if` attribute does not work with custom tags (only HTML tags)
1756
+
1757
+ ### 3.9.3
1758
+
1759
+ - Upgraded to `raptor-util@^2`
1760
+
1761
+ ### 3.9.2
1762
+
1763
+ - Fixed [#327](https://github.com/marko-js/marko/issues/327) - alt attribute with empty string should be allowed ([Pull Request #350](https://github.com/marko-js/marko/pull/350) by [@mlrawlings](https://github.com/mlrawlings))
1764
+
1765
+ ### 3.9.1
1766
+
1767
+ - Fixed [#348](https://github.com/marko-js/marko/issues/348) - exclude all `*.orig` and other files from published npm package
1768
+
1769
+ ### 3.9.0
1770
+
1771
+ - Fixed [#231](https://github.com/marko-js/marko/issues/231) - Allow <assign count++>
1772
+ - Fixed [#345](https://github.com/marko-js/marko/issues/345) - Whitespace preservation now applies to all deeply nested text nodes
1773
+ - Fixed [#344](https://github.com/marko-js/marko/issues/344) - Introduced [defineRenderer](./docs/javascript-api.md#requiremarkodefinerenderer) for Marko
1774
+ - Docs: Added docs for excluding directories from taglib discovery ([@mlrawlings](https://github.com/mlrawlings))
1775
+ - Docs: Added docs for component autodiscovery ([@mlrawlings](https://github.com/mlrawlings))
1776
+ - Docs: Added docs for passing a data object to a custom tag
1777
+
1778
+ ## 3.8.x
1779
+
1780
+ ### 3.8.1
1781
+
1782
+ - Fixed [#342](https://github.com/marko-js/marko/issues/342) - `await:finish` event not emitted for async fragments with client reorder and that complete synchronously
1783
+
1784
+ ### 3.8.0
1785
+
1786
+ - Fixed [#329](https://github.com/marko-js/marko/issues/329) - Add autodiscover of components/ directory ([Pull Request #338](https://github.com/marko-js/marko/pull/338) by [@mlrawlings](https://github.com/mlrawlings))
1787
+
1788
+ ## 3.7.x
1789
+
1790
+ ### 3.7.4
1791
+
1792
+ - Fixed [#339](https://github.com/marko-js/marko/issues/339) - Tag transformers are not being applied to tags with a dynamic tag name (fixes [#146](https://github.com/marko-js/marko-components/issues/146) for Marko Components)
1793
+
1794
+ ### 3.7.3
1795
+
1796
+ - Fixed [#332](https://github.com/marko-js/marko/issues/332) and [#333](https://github.com/marko-js/marko/issues/333) - Correct values for `literalUndefined` and `literalFalse` in the Builder API [@bkuri](https://github.com/bkuri)
1797
+ - Fixed [#336](https://github.com/marko-js/marko/issues/336) - Upgraded to latest version of `minimatch`
1798
+
1799
+ ### 3.7.2
1800
+
1801
+ - Fixed [#328](https://github.com/marko-js/marko/issues/328) - Improve error reporting when taglib/tag definition fails to load
1802
+ - Additional change to disable escaping for dynamic `Text` nodes added to body of `<script>` tag to fix [issue #326](https://github.com/marko-js/marko/issues/326)
1803
+
1804
+ ### 3.7.1
1805
+
1806
+ - Improved escaping within the `<script>` tag to fix [issue #322](https://github.com/marko-js/marko/issues/322). Special HTML characters will no longer be escaped within the context of the `<script>` tag since browsers do not decode HTML entities within the `<script>` tag. Instead, only the ending `</script>` tag sequence is escaped using JavaScript string escaping sequences.
1807
+
1808
+ ### 3.7.0
1809
+
1810
+ - Made change to make configuration a true singleton shared across all instances of `marko` loaded at runtime ([commit](https://github.com/marko-js/marko/commit/cd797322adf80f2890015de7b8f62301c2921a0a))
1811
+
1812
+ ## 3.6.x
1813
+
1814
+ ### 3.6.2
1815
+
1816
+ - Improved support for hot reloading by automatically disabling `assumeUpToDate` if hot reload is enabled. ([Pull Request #320](https://github.com/marko-js/marko/pull/320) by [@ianvonholt](https://github.com/ianvonholt))
1817
+
1818
+ ### 3.6.1
1819
+
1820
+ - Fixed a bug that was causing transforms to be run on detached nodes. This was manifesting itself in the `<async-fragment>` to `<await>` transform if an `if()` attribute was present (or other core attributes that end up wrapping the tag it is defined on).
1821
+
1822
+ ### 3.6.0
1823
+
1824
+ - Introduced a new and simpler `<await>` tag that should be used instead of the now deprecated `<async-fragment>` tag (see deprecation details below) ([Pull Request #312](https://github.com/marko-js/marko/pull/312) by [@mlrawlings](https://github.com/mlrawlings))
1825
+
1826
+ #### Deprecations
1827
+
1828
+ - Deprecated the `<async-fragment var="<var>" data-provider=<data-provider>>` tag in favor of the `<await(<var> from <data-provider>)>` tag:
1829
+
1830
+ OLD:
1831
+
1832
+ ```xml
1833
+ <async-fragment var="userInfo" data-provider=data.userInfoPromise>
1834
+ Hello ${userInfo.name}!
1835
+ </async-fragment>
1836
+ ```
1837
+
1838
+ NEW:
1839
+
1840
+ ```xml
1841
+ <await(userInfo from data.userInfoPromise)>
1842
+ Hello ${userInfo.name}!
1843
+ </await>
1844
+ ```
1845
+
1846
+ The `<await>` tag supports all of the attributes of the previous `<async-fragment>` tag except for `var` and `data-provider`:
1847
+
1848
+ ```xml
1849
+ <await(userInfo from data.userInfoPromise) name="userInfo" timeout=10000 client-reorder>
1850
+ Hello ${userInfo.name}!
1851
+ </await>
1852
+ ```
1853
+
1854
+ Finally, the nested tags for providing content for the placeholder, error and timeout messages have been renamed accordingly:
1855
+
1856
+ ```xml
1857
+ <await(userInfo from data.userInfoPromise) client-reorder>
1858
+ <await-placeholder>
1859
+ This is alternate content while the async fragment is loading.
1860
+ </await-placeholder>
1861
+ <await-timeout>
1862
+ A timeout has occurred!
1863
+ </await-timeout>
1864
+ <await-error>
1865
+ A error has occurred!
1866
+ </await-error>
1867
+
1868
+ Hello ${userInfo.name}!
1869
+ </await>
1870
+ ```
1871
+
1872
+ ## 3.5.x
1873
+
1874
+ ### 3.5.1
1875
+
1876
+ - Fixes #316 - Autocomplete for tags is not updated when tag files updated despite clearing cache. This improves the [autocomplete-marko](https://github.com/marko-js/atom-autocomplete-marko) plugin for Atom.
1877
+ - Fixes #314 - Remove hyphens from include props
1878
+ - Deprecated:
1879
+ - Properties passed in using the `<include>` tag should not be access using hyphens.
1880
+
1881
+ For example, given the following template:
1882
+
1883
+ ```xml
1884
+ <include("./include-target.marko") first-name='Jane'/>
1885
+ ```
1886
+
1887
+ The `first-name` data should be accessed using the `firstName` property:
1888
+
1889
+ ```javascript
1890
+ var firstName = input.firstName;
1891
+ // NOT: var firstName = input['first-name'];
1892
+ ```
1893
+
1894
+ ### 3.5.0
1895
+
1896
+ - Added functionality to exclude specific directory or package from taglib finder ([Pull Request #309](https://github.com/marko-js/marko/pull/309) by [@oxala](https://github.com/oxala))
1897
+
1898
+ ## 3.4.x
1899
+
1900
+ ### 3.4.9
1901
+
1902
+ - Fixed [https://github.com/marko-js/marko/issues/307] - Marko concise syntax, with multiple class names ([Pull Request #308](https://github.com/marko-js/marko/pull/308) by [@mlrawlings](https://github.com/mlrawlings))
1903
+
1904
+ ### 3.4.8
1905
+
1906
+ - Added support for an "enum" attribute value
1907
+
1908
+ ### 3.4.7
1909
+
1910
+ - Async fragment improvements ([Pull Request #305](https://github.com/marko-js/marko/pull/305) by [@mlrawlings](https://github.com/mlrawlings))
1911
+ - Adds additional event info (finished/timedout) to the data emitted from <async-fragment> tags.
1912
+ - Ensures that renderBody() is not called again if the fragment has already finished (timed out).
1913
+ - Fixes `npm run test-async`
1914
+ - Removes a redundant `async-fragment` timeout related test
1915
+
1916
+ ### 3.4.6
1917
+
1918
+ - Updated autocomplete information
1919
+
1920
+ ### 3.4.5
1921
+
1922
+ - Fixes #304 - async-fragment-tag-transformer.js being loaded by PhantomJS
1923
+ - Updated taglibs with additional information to support tooling
1924
+ - Added [Michael Rawlings](https://github.com/mlrawlings) as a maintainer
1925
+
1926
+ ### 3.4.4
1927
+
1928
+ - Fixes #303 - `addStaticVar` is not generating unique variable names correctly
1929
+
1930
+ ### 3.4.3
1931
+
1932
+ - Improved validation for macros ([@mlrawlings](https://github.com/mlrawlings), [PR #300](https://github.com/marko-js/marko/pull/300))
1933
+ - Added code coverage reporting ([@mlrawlings](https://github.com/mlrawlings), [PR #301](https://github.com/marko-js/marko/pull/301))
1934
+
1935
+ ### 3.4.2
1936
+
1937
+ - Improved error reporting in cases when code generation fails ([@mlrawlings](https://github.com/mlrawlings))
1938
+
1939
+ ### 3.4.1
1940
+
1941
+ - Additional tweaks for #298 - Always emit correct events for async fragments
1942
+
1943
+ ### 3.4.0
1944
+
1945
+ - Fixes #298 - Always emit correct events for async fragments
1946
+ - Updated docs
1947
+
1948
+ ## 3.3.x
1949
+
1950
+ ### 3.3.0
1951
+
1952
+ - Include async fragment name in the `asyncFragmentFinish` events ([@kprakasam](https://github.com/kprakasam))
1953
+
1954
+ ## 3.2.x
1955
+
1956
+ ### 3.2.0
1957
+
1958
+ - Fixes #286 - Add res.marko(templateData) for use with Express ([@mlrawlings](https://github.com/mlrawlings))
1959
+
1960
+ ## 3.1.x
1961
+
1962
+ ### 3.1.9
1963
+
1964
+ - Fixes #288 - Provide API for discovering custom tags and attributes for autocomplete/tooling purposes
1965
+ - Documentation improvements
1966
+
1967
+ ### 3.1.8
1968
+
1969
+ - Fixes #280 - Switch from jsonminify to strip-json-comments
1970
+ - Updated docs for Koa and Hapi
1971
+ - Additional tests for Node.js v6
1972
+
1973
+ ### 3.1.7
1974
+
1975
+ - Fixes #274 - marko-compiler-options tag is not properly ended when using raw parsing (for prettyprint)
1976
+
1977
+ ### 3.1.6
1978
+
1979
+ - Fixes #268 - this.write is not a function for empty ArrayExpression
1980
+
1981
+ ### 3.1.5
1982
+
1983
+ - Fixes #262 - node-require module removes `.marko` extension from filenames in compiled code
1984
+
1985
+ ### 3.1.4
1986
+
1987
+ - Fixes #267 - Shorthand CSS class name cannot be combined with object/array class names
1988
+
1989
+ ### 3.1.3
1990
+
1991
+ - Fixed #266 - Hot reloading fails if original template is deleted
1992
+
1993
+ ### 3.1.2
1994
+
1995
+ - Fixed error reporting when using `compiler.parseRaw()`
1996
+ - Added test for #262
1997
+
1998
+ ### 3.1.1
1999
+
2000
+ - Improved whitespace removal for text nodes directly below the root
2001
+
2002
+ ### 3.1.0
2003
+
2004
+ - Fixes #254 - Allow preserve whitespace to be enabled at the global level
2005
+
2006
+ ## 3.0.x
2007
+
2008
+ ### 3.0.7
2009
+
2010
+ - Fixes #240 - Always trim start and end of template (even if preserveWhitespace is true)
2011
+ - Fixes #260 - Circular custom tags causes infinite recursion when writeToDisk is set to false
2012
+ - Minor internal cleanup
2013
+
2014
+ ### 3.0.6
2015
+
2016
+ - Don't wrap exception in `parseJavaScript` if error object was not created by Esprima
2017
+
2018
+ ### 3.0.5
2019
+
2020
+ - Fixes #257 - Placeholders don't render for out-of-order async fragments
2021
+
2022
+ ### 3.0.4
2023
+
2024
+ - Fixes #256 - Convert attributes to title case if no attributes are declared for a custom tag
2025
+ - Use `<noscript>` for out-of-order async fragment placeholders
2026
+
2027
+ ### 3.0.3
2028
+
2029
+ - Make renderSync behave if no context was supplied ([PR #250](https://github.com/marko-js/marko/pull/250) by [@jsumners](https://github.com/jsumners))
2030
+
2031
+ ### 3.0.2
2032
+
2033
+ - Store `tagDef` with `HtmlElement` node (needed for pretty printing)
2034
+
2035
+ ### 3.0.1
2036
+
2037
+ - Docs: Fixed minor issues in docs
2038
+ - Reintroduced support for the `MARKO_CLEAN` environment variable: `MARK_CLEAN=true node server.js`
2039
+
2040
+ ### 3.0.0
2041
+
2042
+ - See: [What's New in Marko v3](http://markojs.com/docs/marko/what-is-new-marko-v3/)
2043
+
2044
+ # 2.x
2045
+
2046
+ ## 2.8.x
2047
+
2048
+ ### 2.8.4
2049
+
2050
+ - Fixes circular dependency issue between runtime/index.js and hot-reload/index.js
2051
+
2052
+ ### 2.8.3
2053
+
2054
+ - Fixes circular dependency issue between runtime/index.js and hot-reload/index.js
2055
+
2056
+ ### 2.8.2
2057
+
2058
+ - Fixes #203 - Incorrect behavior when attrs is used on a standard HTML tag with a tag def
2059
+
2060
+ ### 2.8.1
2061
+
2062
+ - Fixes #202 - Pass along options to compiler when loading a template
2063
+
2064
+ ### 2.8.0
2065
+
2066
+ - Added support for automatically discovering taglibs from installed packages that are scoped. ([PR #183](https://github.com/marko-js/marko/pull/183) by [@tropperstyle](https://github.com/tropperstyle))
2067
+
2068
+ ### 2.8.3
2069
+
2070
+ - Fixes circular dependency issue between `hot-reload/index.js` and `runtime/index.js`
2071
+
2072
+ ## 2.7.x
2073
+
2074
+ ### 2.7.31
2075
+
2076
+ - Fixes #167 - Nested tags only work one level deep
2077
+
2078
+ ### 2.7.30
2079
+
2080
+ - docs: don't exclude docs in .npmignore
2081
+
2082
+ ### 2.7.29
2083
+
2084
+ - Fixes #161 - Nested tags with no body content are not handled correctly
2085
+
2086
+ ### 2.7.28
2087
+
2088
+ - Fixes #140 - Also de-dupe cached taglibs in finder
2089
+
2090
+ ### 2.7.27
2091
+
2092
+ - Make loading template from String template source easier:
2093
+
2094
+ ```javascript
2095
+ var template = marko.load(templatePath, "Hello $!{data.name}!");
2096
+ ```
2097
+
2098
+ _NOTE: Loading directly from source only works on the server_
2099
+
2100
+ See [Pull Request #153](https://github.com/marko-js/marko/pull/153)
2101
+
2102
+ ### 2.7.26
2103
+
2104
+ - Use shorter relative paths in error messages
2105
+
2106
+ ### 2.7.25
2107
+
2108
+ - Fixes #150 - Provide option to prevent writing compiled templates to disk. Example usage:
2109
+
2110
+ ```javascript
2111
+ require("marko/compiler").defaultOptions.writeToDisk = false;
2112
+ ```
2113
+
2114
+ NOTE: If you disable writing compiled templates to disk then it will be a little harder to debug errors in templates on the server since the stack trace will refer to a file that has not been written to disk.
2115
+
2116
+ For a more complete list of compiler options please see: http://markojs.com/docs/marko/javascript-api/#defaultoptions
2117
+
2118
+ ### 2.7.24
2119
+
2120
+ - Fixes #140 - De-dupe taglibs by module name
2121
+ - Documentation: Miscellaneous changes
2122
+
2123
+ ### 2.7.23
2124
+
2125
+ - Fixed a typo for `rendererFunc` `in helpers.js` (commit: 0205a47f04911f34ca4d458970d710f81a143987)
2126
+
2127
+ ### 2.7.22
2128
+
2129
+ - New language feature: [`unless` support added](http://markojs.com/docs/marko/language-guide/#unlesselse-ifelse)
2130
+
2131
+ ### 2.7.21
2132
+
2133
+ - Automatically enable hot-reload and browser-refresh if launched using [browser-refresh](https://github.com/patrick-steele-idem/browser-refresh)
2134
+
2135
+ ### 2.7.20
2136
+
2137
+ - Documentation: Miscellaneous changes
2138
+
2139
+ ### 2.7.19
2140
+
2141
+ - Fixes #137 - adds support for dynamic HTML tag names
2142
+
2143
+ ### 2.7.18
2144
+
2145
+ - Improvement: Better resolving of tag renderer
2146
+ - Compiler: Fix to make compiler work in the browser
2147
+
2148
+ ### 2.7.17
2149
+
2150
+ - Fixes #135 Allow "attrs" attribute on custom tags
2151
+
2152
+ ### 2.7.16
2153
+
2154
+ - Improved handling of imports
2155
+ - Better handling of loading taglibs with circular dependencies
2156
+
2157
+ ### 2.7.15
2158
+
2159
+ - Handle circular taglib imports
2160
+
2161
+ ### 2.7.14
2162
+
2163
+ - Fixes #131 - Recursively handle taglib imports
2164
+
2165
+ ### 2.7.13
2166
+
2167
+ - Added a `.npmignore` file
2168
+ - Fixed licensing header in source
2169
+ - Documentation: improved docs for input.renderBody()
2170
+ - Documentation: Miscellaneous changes
2171
+
2172
+ ### 2.7.12
2173
+
2174
+ - Fixes #122 Don't allow invalid attributes when using shorthand
2175
+ - Fixes #122 Typo in hasAttributes
2176
+ - Fixes #127 - Make sure all possible input files are accounted for when checking if a compiled template is up-to-date
2177
+ - Use `browser.json` files instead of `optimizer.json` files
2178
+ - Documentation: Improved docs for async taglib
2179
+ - Documentation: Added empty() and notEmpty() helpers to the readme
2180
+ - Added Martin Aberer as a maintainer
2181
+ - Documentation: Miscellaneous changes
2182
+
2183
+ ### 2.7.11
2184
+
2185
+ - New logo!
2186
+
2187
+ ### 2.7.10
2188
+
2189
+ - Fixes #118 Better error when parsing JSON file for tag
2190
+ - Testing: More test cases related to empty attributes
2191
+ - Documentation: Clarification for the Node.js require extension
2192
+ - Documentation: doc reference for `getLength()` of loop `status-var`
2193
+ - Documentation: Added reference to [sublime-marko](https://github.com/merwan7/sublime-marko) under the tools section.
2194
+
2195
+ ### 2.7.9
2196
+
2197
+ - Fixes #109 - Allow `compiler.createNode('div')`
2198
+ - Fixes #108 - Improve how the `MARKO_CLEAN` env variable is handled
2199
+
2200
+ ### 2.7.8
2201
+
2202
+ - Minor documentation changes
2203
+
2204
+ ### 2.7.7
2205
+
2206
+ - Allow `.html` extension for layouts (Fix for https://github.com/raptorjs/marko-layout/issues/2)
2207
+
2208
+ ### 2.7.6
2209
+
2210
+ - Make require('marko/node-require').install() a noop in the browser
2211
+
2212
+ ### 2.7.5
2213
+
2214
+ - Improvement: Allow `template-data` to be combined with other attributes on the `<include>` tag
2215
+ - Documentation: Fixes #98 - docs for `<include template-data="...">`
2216
+
2217
+ ### 2.7.4
2218
+
2219
+ - Fixes #96 - Allow relative, dynamic include paths
2220
+
2221
+ ### 2.7.3
2222
+
2223
+ - Internal change: Additional test cases added for using promises with async fragments
2224
+
2225
+ ### 2.7.2
2226
+
2227
+ - Fixes #73 - Prevent same taglib from being loaded multiple times
2228
+
2229
+ ### 2.7.1
2230
+
2231
+ - Fixes #88 - Assign global data to the correct out
2232
+
2233
+ ### 2.7.0
2234
+
2235
+ - Fixes [#27](https://github.com/raptorjs/marko/issues/27) - IE conditional comments (e.g., `<!--[if lt IE 9]><div><![endif]-->`) are automatically preserved. Previously, all HTML comments were stripped out when loading a template. For example:
2236
+ - Added support for `<compiler-options comments="preserve"/>` to enable comments to preserved in a template. For example:
2237
+
2238
+ ```xml
2239
+ <compiler-options comments="preserve"/>
2240
+ Hello
2241
+ <!--This comment should be preserved-->
2242
+ World
2243
+ ```
2244
+
2245
+ Output:
2246
+
2247
+ ```xml
2248
+ Hello
2249
+ <!--This comment should be preserved-->
2250
+ World
2251
+ ```
2252
+
2253
+ ## 2.6.x
2254
+
2255
+ ### 2.6.0
2256
+
2257
+ - Performance improvements
2258
+ - `'use strict';`
2259
+ - Optimized render code paths
2260
+ - Code cleanup
2261
+ - Compatibility fixes for Node.js 0.12
2262
+ - Bad: `fs.readFile(path, 'utf8')`
2263
+ - Good: `fs.readFile(path, {encoding: 'utf8'})`
2264
+
2265
+ ## 2.5.x
2266
+
2267
+ ### 2.5.0
2268
+
2269
+ - Fixes #78 - Custom Node.js require extension for Marko template files. Example usage:
2270
+
2271
+ ```javascript
2272
+ // Install the Node.js require extension in your application's main script (server-side only)
2273
+ require("marko/node-require").install();
2274
+
2275
+ // Now you can require `*.marko` files just like any other JavaScript module
2276
+ var template = require("./hello.marko");
2277
+ var html = template.renderSync({ name: "Frank" });
2278
+ ```
2279
+
2280
+ - Compiled templates now export a loaded Template instance. In the previous version of marko, compiled templates exported a function that could be used to create a loaded Template instance.
2281
+
2282
+ ## 2.4.x
2283
+
2284
+ ### 2.4.3
2285
+
2286
+ - Fixes edge case: More precise regular expression for decoding HTML entities
2287
+
2288
+ ### 2.4.2
2289
+
2290
+ - Internal: Fixes #75 Always assign the tag property to custom tag nodes
2291
+
2292
+ ### 2.4.1
2293
+
2294
+ - Improvement to allow taglibs to be imported from other taglibs ([commit](https://github.com/raptorjs/marko/commit/73e9a3420a1bac3e2c201d4dcadf21c0701b5222))
2295
+
2296
+ ### 2.4.0
2297
+
2298
+ - Added support for short-hand tags and attributes
2299
+
2300
+ Old `marko-taglib.json`:
2301
+
2302
+ ```json
2303
+ {
2304
+ "tags": {
2305
+ "my-hello": {
2306
+ "renderer": "./hello-renderer",
2307
+ "attributes": {
2308
+ "name": "string"
2309
+ }
2310
+ }
2311
+ }
2312
+ }
2313
+ ```
2314
+
2315
+ Short-hand `marko-taglib.json`:
2316
+
2317
+ ```json
2318
+ {
2319
+ "<my-hello>": {
2320
+ "renderer": "./hello-renderer",
2321
+ "@name": "string"
2322
+ }
2323
+ }
2324
+ ```
2325
+
2326
+ - Fixes #61 Simplify parent/child relationships
2327
+
2328
+ Marko now supports custom tags in the following format: `<parent_tag.nested_tag>`
2329
+
2330
+ Example usage:
2331
+
2332
+ ```html
2333
+ <ui-tabs orientation="horizontal">
2334
+ <ui-tabs.tab title="Home"> Content for Home </ui-tabs.tab>
2335
+ <ui-tabs.tab title="Profile"> Content for Profile </ui-tabs.tab>
2336
+ <ui-tabs.tab title="Messages"> Content for Messages </ui-tabs.tab>
2337
+ </ui-tabs>
2338
+ ```
2339
+
2340
+ **_ui-tabs/marko-tag.json_**
2341
+
2342
+ ```json
2343
+ {
2344
+ "@orientation": "string",
2345
+ "@tabs <tab>[]": {
2346
+ "@title": "string"
2347
+ }
2348
+ }
2349
+ ```
2350
+
2351
+ **_ui-tabs/renderer.js_**
2352
+
2353
+ ```javascript
2354
+ var template = require("marko").load(require.resolve("./template.marko"));
2355
+
2356
+ exports.renderer = function(input, out) {
2357
+ var tabs = input.tabs;
2358
+
2359
+ // Tabs will be in the following form:
2360
+ // [
2361
+ // {
2362
+ // title: 'Home',
2363
+ // renderBody: function(out) { ... }
2364
+ // },
2365
+ // {
2366
+ // title: 'Profile',
2367
+ // renderBody: function(out) { ... }
2368
+ // },
2369
+ // {
2370
+ // title: 'Messages',
2371
+ // renderBody: function(out) { ... }
2372
+ // }
2373
+ // ]
2374
+ console.log(tabs.length); // Output: 3
2375
+
2376
+ template.render(
2377
+ {
2378
+ tabs: tabs
2379
+ },
2380
+ out
2381
+ );
2382
+ };
2383
+ ```
2384
+
2385
+ **_ui-tabs/template.marko_**
2386
+
2387
+ ```html
2388
+ <div class="tabs">
2389
+ <ul class="nav nav-tabs">
2390
+ <li class="tab" for="tab in data.tabs">
2391
+ <a href="#${tab.title}"> ${tab.title} </a>
2392
+ </li>
2393
+ </ul>
2394
+ <div class="tab-content">
2395
+ <div class="tab-pane" for="tab in data.tabs">
2396
+ <invoke function="tab.renderBody(out)" />
2397
+ </div>
2398
+ </div>
2399
+ </div>
2400
+ ```
2401
+
2402
+ ## 2.3.x
2403
+
2404
+ ### 2.3.2
2405
+
2406
+ Fixes #66 - Allow circular dependencies when loading templates
2407
+
2408
+ ### 2.3.1
2409
+
2410
+ - Testing framework changes
2411
+ - Fixes #65 - Generated variable name is an empty string in some cases
2412
+
2413
+ ### 2.3.0
2414
+
2415
+ - Fixes #53 Merge c-input with attr props
2416
+
2417
+ ## 2.2.x
2418
+
2419
+ ### 2.2.2
2420
+
2421
+ Fixes #60 Don't replace special operators for body functions
2422
+
2423
+ ### 2.2.1
2424
+
2425
+ - Fixes #58 Added support for MARKO_CLEAN env variable (force recompile of all loaded templates). Example usage:
2426
+
2427
+ ```bash
2428
+ MARKO_CLEAN=true node run.js
2429
+ ```
2430
+
2431
+ - Code formatting: add spaces in var code
2432
+
2433
+ ### 2.2.0
2434
+
2435
+ - Fixes #51 Allow body content to be mapped to a String input property
2436
+ - Fixes #52 Remove JavaScript comments from JSON taglib files before parsing
2437
+
2438
+ ## 2.1.x
2439
+
2440
+ ### 2.1.6
2441
+
2442
+ - Fixes #50 Initialize the loader after the runtime is fully initialized
2443
+
2444
+ ### 2.1.5
2445
+
2446
+ - Fixes #50 Ensure that all instances of marko have hot-reload and browser-refresh enabled
2447
+
2448
+ ### 2.1.4
2449
+
2450
+ - Allowing complex var names (i.e. LHS) for the `<assign>` tag.
2451
+
2452
+ ### 2.1.3
2453
+
2454
+ - Minor change: Slight improvement to code to resolve tag handler
2455
+
2456
+ ### 2.1.2
2457
+
2458
+ - Minor change: Improve how renderer is resolved
2459
+
2460
+ ### 2.1.1
2461
+
2462
+ - Fixes #48 name in marko-tag.json should override default name given during discovery
2463
+
2464
+ ### 2.1.0
2465
+
2466
+ - Fixes #47 - Added support for "taglib-imports"
2467
+
2468
+ ## 2.0.x
2469
+
2470
+ ### 2.0.12
2471
+
2472
+ - Fixes #31 - Add support for providing prefix when scanning for tags
2473
+ - Allow "code" to be a function that lazily evaluates to a code string during code generation
2474
+
2475
+ ### 2.0.11
2476
+
2477
+ - Added method for custom node compilers to get access to the `escapeXml` function at runtime
2478
+
2479
+ ### 2.0.10
2480
+
2481
+ - Fixes #39 - Added missing return when using hot-reload
2482
+
2483
+ ### 2.0.9
2484
+
2485
+ - Fixed bad publish
2486
+
2487
+ ### 2.0.8
2488
+
2489
+ - Better merging of tags when loading and merging taglibs
2490
+
2491
+ ### 2.0.7
2492
+
2493
+ - Changes to avoid problems associated with the same taglib being found multiple times in the search path
2494
+
2495
+ ### 2.0.6
2496
+
2497
+ - `renderBody` function is only added if tag has children
2498
+
2499
+ ### 2.0.5
2500
+
2501
+ - Fixed #36 - Don't use `invokeBody()` in the cache taglib
2502
+
2503
+ ### 2.0.4
2504
+
2505
+ - :exclamation: Fixed #36 - Deprecated - When using `<include>` with body content, nested body content is now passed in as `String` property named `body`. Old behavior: nested content would be passed in as a `Function` property named `invokeBody` that would return the `String` value of the nested content. `invokeBody()` has been deprecated.
2506
+
2507
+ ### 2.0.3
2508
+
2509
+ - Fixed #36 - Don't use `invokeBody()` in test code and the HTML comments tag
2510
+
2511
+ ### 2.0.2
2512
+
2513
+ - :exclamation: Fixed #36 - Deprecated `input.invokeBody()` in favor of `input.renderBody(out)`
2514
+ - Fixed #37 - Duplicate input property for custom tag renderers
2515
+
2516
+ ### 2.0.1
2517
+
2518
+ - Fixed #35 - Added support for `<compiler-options>`. Example:
2519
+
2520
+ ```html
2521
+ <compiler-options whitespace="preserve" /> A B C
2522
+ ```
2523
+
2524
+ ### 2.0.0
2525
+
2526
+ - Dynamic attributes for scanned tags without a tag will have dashes removed by default.
2527
+ - :exclamation: When using `tags-dir` to discover tags that do not have a `marko-tag.json`, the previous behavior was to allow all attributes and to use the actual attribute name as the input property name. For example, when using `<hello first-name="John">`, first name would need to be read in as `input['first-name']`. This was changed such that the first name property should now be read in as `input.firstName` (dashes removed and converted to camel case)
2528
+ - Changes to allow UI component to be put into a single JS file:
2529
+ - Updated taglib directory scanner to use `index.js` if found. New search order:
2530
+ 1. `renderer.js` (use `renderer.js` if it exists)
2531
+ 2. `index.js` (use `index.js` if it exists and assume it exports a `renderer` or `render` property)
2532
+ 3. `template.marko` (use the template as the renderer if no `renderer.js` or `index.js`)
2533
+ - :exclamation: Changes to the taglib directory scanner could break existing code. Specifically, if a UI component directory had an `index.js` file and a `template.marko` file then in in `marko@<2` the `template.marko` file would have been selected as the renderer. In `marko@2.x`, the `index.js` will be selected as the tag renderer.
2534
+ - :exclamation: Removed support for mapping a tag renderer to a module with a `process` method
2535
+ - Removed sub-module `marko/renderer` that exports [raptor-renderer](https://github.com/raptorjs/raptor-renderer)
2536
+
2537
+ # 1.x
2538
+
2539
+ ## 1.6.x
2540
+
2541
+ ### 1.6.1
2542
+
2543
+ - Added back code to allow the new marko runtime to load templates compiled by an earlier compiler that used `module.exports`
2544
+
2545
+ ### 1.6.0
2546
+
2547
+ - Fixed #32. Switched from `module.exports = function create(__helpers) { ... }` to `exports.create = function(__helpers) { ... }` to avoid circular dependency problems
2548
+
2549
+ ## 1.5.x
2550
+
2551
+ ### 1.5.8
2552
+
2553
+ - Added support for adding "static" code to the top of a compiled template (helpful for initializing variables or running code once).
2554
+
2555
+ ### 1.5.7
2556
+
2557
+ - Added sub-module `marko/renderer` that exports [raptor-renderer](https://github.com/raptorjs/raptor-renderer)
2558
+
2559
+ ### 1.5.6
2560
+
2561
+ - Changes to avoid unoptimized code in V8
2562
+
2563
+ ### 1.5.5
2564
+
2565
+ - Handle case where template was loaded before hot-reload was enabled
2566
+
2567
+ ## 1.5.4
2568
+
2569
+ - Added support for `$global` in `renderSync`