marko 5.37.5 → 6.0.0-3.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common/attr-tag.d.ts +8 -0
- package/dist/common/compat-meta.d.ts +2 -0
- package/dist/common/for.d.ts +5 -0
- package/dist/common/helpers.d.ts +7 -0
- package/dist/common/meta.d.ts +2 -0
- package/dist/common/types.d.ts +105 -0
- package/dist/debug/dom.js +2111 -0
- package/dist/debug/dom.mjs +2088 -0
- package/dist/debug/html.js +2740 -0
- package/dist/debug/html.mjs +2663 -0
- package/dist/dom/abort-signal.d.ts +3 -0
- package/dist/dom/compat.d.ts +20 -0
- package/dist/dom/control-flow.d.ts +14 -0
- package/dist/dom/controllable.d.ts +12 -0
- package/dist/dom/dom.d.ts +19 -0
- package/dist/dom/event.d.ts +4 -0
- package/dist/dom/parse-html.d.ts +5 -0
- package/dist/dom/queue.d.ts +10 -0
- package/dist/dom/reconcile.d.ts +2 -0
- package/dist/dom/renderer.d.ts +21 -0
- package/dist/dom/resolve-cursor-position.d.ts +1 -0
- package/dist/dom/resume.d.ts +9 -0
- package/dist/dom/schedule.d.ts +2 -0
- package/dist/dom/scope.d.ts +7 -0
- package/dist/dom/signals.d.ts +39 -0
- package/dist/dom/template.d.ts +3 -0
- package/dist/dom/walker.d.ts +4 -0
- package/dist/dom.d.ts +15 -0
- package/dist/dom.js +1370 -0
- package/dist/dom.mjs +1350 -0
- package/dist/html/attrs.d.ts +14 -0
- package/dist/html/compat.d.ts +14 -0
- package/dist/html/content.d.ts +5 -0
- package/dist/html/dynamic-tag.d.ts +12 -0
- package/dist/html/for.d.ts +4 -0
- package/dist/html/inlined-runtimes.d.ts +2 -0
- package/dist/html/serializer.d.ts +14 -0
- package/dist/html/template.d.ts +3 -0
- package/dist/html/writer.d.ts +114 -0
- package/dist/html.d.ts +9 -0
- package/dist/html.js +1818 -0
- package/dist/html.mjs +1744 -0
- package/dist/translator/core/attrs.d.ts +3 -0
- package/dist/translator/core/client.d.ts +14 -0
- package/dist/translator/core/const.d.ts +3 -0
- package/dist/translator/core/debug.d.ts +3 -0
- package/dist/translator/core/define.d.ts +3 -0
- package/dist/translator/core/effect.d.ts +3 -0
- package/dist/translator/core/export.d.ts +3 -0
- package/dist/translator/core/for.d.ts +67 -0
- package/dist/translator/core/html-comment.d.ts +12 -0
- package/dist/translator/core/html-script.d.ts +9 -0
- package/dist/translator/core/html-style.d.ts +9 -0
- package/dist/translator/core/id.d.ts +3 -0
- package/dist/translator/core/if.d.ts +53 -0
- package/dist/translator/core/import.d.ts +3 -0
- package/dist/translator/core/index.d.ts +152 -0
- package/dist/translator/core/let.d.ts +8 -0
- package/dist/translator/core/lifecycle.d.ts +10 -0
- package/dist/translator/core/log.d.ts +3 -0
- package/dist/translator/core/return.d.ts +6 -0
- package/dist/translator/core/script.d.ts +3 -0
- package/dist/translator/core/server.d.ts +14 -0
- package/dist/translator/core/static.d.ts +14 -0
- package/dist/translator/core/style.d.ts +3 -0
- package/dist/translator/index.d.ts +201 -0
- package/dist/translator/index.js +9134 -490
- package/dist/translator/util/assert.d.ts +3 -0
- package/dist/translator/util/binding-has-downstream-expressions.d.ts +2 -0
- package/dist/translator/util/entry-builder.d.ts +19 -0
- package/dist/translator/util/evaluate.d.ts +11 -0
- package/dist/translator/util/for-each-identifier.d.ts +2 -0
- package/dist/translator/util/get-defined-binding-expression.d.ts +3 -0
- package/dist/translator/util/get-known-attr-values.d.ts +2 -0
- package/dist/translator/util/get-parent-tag.d.ts +2 -0
- package/dist/translator/util/get-root.d.ts +7 -0
- package/dist/translator/util/get-tag-name.d.ts +2 -0
- package/dist/translator/util/is-core-tag.d.ts +10 -0
- package/dist/translator/util/is-stateful.d.ts +3 -0
- package/dist/translator/util/is-static.d.ts +2 -0
- package/dist/translator/util/marko-config.d.ts +4 -0
- package/dist/translator/util/nested-attribute-tags.d.ts +17 -0
- package/dist/translator/util/normalize-string-expression.d.ts +3 -0
- package/dist/translator/util/optional.d.ts +20 -0
- package/dist/translator/util/plugin-hooks.d.ts +4 -0
- package/dist/translator/util/references.d.ts +84 -0
- package/dist/translator/util/runtime-info.d.ts +5 -0
- package/dist/translator/util/runtime.d.ts +15 -0
- package/dist/translator/util/scope-read.d.ts +6 -0
- package/dist/translator/util/sections.d.ts +51 -0
- package/dist/translator/util/signals.d.ts +61 -0
- package/dist/translator/util/simplify-fn.d.ts +5 -0
- package/dist/translator/util/state.d.ts +3 -0
- package/dist/translator/util/tag-name-type.d.ts +16 -0
- package/dist/translator/util/to-first-expression-or-block.d.ts +3 -0
- package/dist/translator/util/to-first-statement-or-block.d.ts +2 -0
- package/dist/translator/util/to-property-name.d.ts +7 -0
- package/dist/translator/util/translate-attrs.d.ts +12 -0
- package/dist/translator/util/translate-var.d.ts +2 -0
- package/dist/translator/util/traverse.d.ts +9 -0
- package/dist/translator/util/visitors.d.ts +11 -0
- package/dist/translator/util/walks.d.ts +15 -0
- package/dist/translator/util/with-previous-location.d.ts +2 -0
- package/dist/translator/util/writer.d.ts +13 -0
- package/dist/translator/visitors/cdata.d.ts +7 -0
- package/dist/translator/visitors/comment.d.ts +7 -0
- package/dist/translator/visitors/declaration.d.ts +7 -0
- package/dist/translator/visitors/document-type.d.ts +7 -0
- package/dist/translator/visitors/function.d.ts +19 -0
- package/dist/translator/visitors/import-declaration.d.ts +8 -0
- package/dist/translator/visitors/placeholder.d.ts +22 -0
- package/dist/translator/visitors/program/dom.d.ts +7 -0
- package/dist/translator/visitors/program/html.d.ts +8 -0
- package/dist/translator/visitors/program/index.d.ts +39 -0
- package/dist/translator/visitors/referenced-identifier.d.ts +7 -0
- package/dist/translator/visitors/scriptlet.d.ts +8 -0
- package/dist/translator/visitors/tag/attribute-tag.d.ts +11 -0
- package/dist/translator/visitors/tag/custom-tag.d.ts +19 -0
- package/dist/translator/visitors/tag/dynamic-tag.d.ts +18 -0
- package/dist/translator/visitors/tag/index.d.ts +15 -0
- package/dist/translator/visitors/tag/native-tag.d.ts +25 -0
- package/dist/translator/visitors/text.d.ts +7 -0
- package/package.json +34 -70
- package/tag-types/const.d.marko +7 -0
- package/tag-types/debug.d.marko +5 -0
- package/tag-types/define.d.marko +5 -0
- package/tag-types/do.d.marko +5 -0
- package/tag-types/effect.d.marko +5 -0
- package/tag-types/id.d.marko +3 -0
- package/tag-types/let.d.marko +8 -0
- package/tag-types/lifecycle.d.marko +7 -0
- package/tag-types/log.d.marko +5 -0
- package/tag-types/script.d.marko +5 -0
- package/README.md +0 -161
- package/bin/markoc +0 -2
- package/bin/markoc.js +0 -441
- package/browser-refresh.js +0 -5
- package/compiler-browser.marko +0 -15
- package/compiler.js +0 -7
- package/components-browser.marko +0 -15
- package/components.js +0 -7
- package/dist/build.json +0 -3
- package/dist/compiler/config.js +0 -45
- package/dist/compiler/index.js +0 -164
- package/dist/compiler/modules.js +0 -5
- package/dist/core-tags/components/init-components-tag.js +0 -54
- package/dist/core-tags/components/preferred-script-location-tag.js +0 -25
- package/dist/core-tags/components/preserve-tag.js +0 -1
- package/dist/core-tags/core/__flush_here_and_after__.js +0 -44
- package/dist/core-tags/core/await/AsyncValue.js +0 -121
- package/dist/core-tags/core/await/client-reorder-runtime.js +0 -51
- package/dist/core-tags/core/await/index.d.marko +0 -10
- package/dist/core-tags/core/await/renderer.js +0 -249
- package/dist/core-tags/core/await/reorderer-renderer.js +0 -156
- package/dist/index.js +0 -4
- package/dist/node-require/browser-refresh.js +0 -1
- package/dist/node-require/hot-reload.js +0 -45
- package/dist/node-require/index.js +0 -103
- package/dist/node_modules/@internal/components-beginComponent/index-browser.js +0 -23
- package/dist/node_modules/@internal/components-beginComponent/index.js +0 -84
- package/dist/node_modules/@internal/components-beginComponent/package.json +0 -11
- package/dist/node_modules/@internal/components-define-widget-legacy/index-browser.js +0 -335
- package/dist/node_modules/@internal/components-define-widget-legacy/index.js +0 -18
- package/dist/node_modules/@internal/components-define-widget-legacy/package.json +0 -11
- package/dist/node_modules/@internal/components-endComponent/index-browser.js +0 -5
- package/dist/node_modules/@internal/components-endComponent/index.js +0 -11
- package/dist/node_modules/@internal/components-endComponent/package.json +0 -11
- package/dist/node_modules/@internal/components-entry/index-browser.js +0 -11
- package/dist/node_modules/@internal/components-entry/index.js +0 -301
- package/dist/node_modules/@internal/components-entry/package.json +0 -11
- package/dist/node_modules/@internal/components-entry-legacy/index-browser.js +0 -76
- package/dist/node_modules/@internal/components-entry-legacy/index.js +0 -16
- package/dist/node_modules/@internal/components-entry-legacy/package.json +0 -11
- package/dist/node_modules/@internal/components-registry/index-browser.js +0 -586
- package/dist/node_modules/@internal/components-registry/index.js +0 -44
- package/dist/node_modules/@internal/components-registry/package.json +0 -11
- package/dist/node_modules/@internal/components-util/index-browser.js +0 -152
- package/dist/node_modules/@internal/components-util/index.js +0 -71
- package/dist/node_modules/@internal/components-util/package.json +0 -11
- package/dist/node_modules/@internal/create-readable/index-browser.js +0 -30
- package/dist/node_modules/@internal/create-readable/index.js +0 -57
- package/dist/node_modules/@internal/create-readable/package.json +0 -11
- package/dist/node_modules/@internal/loader/fallback-node.js +0 -89
- package/dist/node_modules/@internal/loader/index-browser.js +0 -2
- package/dist/node_modules/@internal/loader/index.js +0 -23
- package/dist/node_modules/@internal/loader/package.json +0 -10
- package/dist/node_modules/@internal/preserve-tag/index-browser.js +0 -46
- package/dist/node_modules/@internal/preserve-tag/index.js +0 -34
- package/dist/node_modules/@internal/preserve-tag/package.json +0 -11
- package/dist/node_modules/@internal/require/index-browser.js +0 -15
- package/dist/node_modules/@internal/require/index-legacy-browser.js +0 -20
- package/dist/node_modules/@internal/require/index-webpack.js +0 -16
- package/dist/node_modules/@internal/require/index.js +0 -15
- package/dist/node_modules/@internal/require/package.json +0 -11
- package/dist/node_modules/@internal/set-immediate/index-browser.js +0 -19
- package/dist/node_modules/@internal/set-immediate/index-worker.js +0 -31
- package/dist/node_modules/@internal/set-immediate/index.js +0 -3
- package/dist/node_modules/@internal/set-immediate/package.json +0 -11
- package/dist/node_modules/@internal/set-immediate/queueMicrotask.js +0 -8
- package/dist/runtime/RenderResult.js +0 -112
- package/dist/runtime/components/Component.js +0 -663
- package/dist/runtime/components/ComponentDef.js +0 -169
- package/dist/runtime/components/ComponentsContext.js +0 -59
- package/dist/runtime/components/GlobalComponentsContext.js +0 -10
- package/dist/runtime/components/KeySequence.js +0 -16
- package/dist/runtime/components/ServerComponent.js +0 -73
- package/dist/runtime/components/State.js +0 -101
- package/dist/runtime/components/attach-detach.js +0 -60
- package/dist/runtime/components/defineComponent.js +0 -60
- package/dist/runtime/components/dom-data.js +0 -8
- package/dist/runtime/components/event-delegation.js +0 -144
- package/dist/runtime/components/index.js +0 -1
- package/dist/runtime/components/legacy/browser.json +0 -9
- package/dist/runtime/components/legacy/defineComponent-legacy.js +0 -27
- package/dist/runtime/components/legacy/defineRenderer-legacy.js +0 -171
- package/dist/runtime/components/legacy/defineWidget-legacy.js +0 -1
- package/dist/runtime/components/legacy/dependencies/html.js +0 -3
- package/dist/runtime/components/legacy/dependencies/index.js +0 -177
- package/dist/runtime/components/legacy/dependencies/vdom.js +0 -3
- package/dist/runtime/components/legacy/index.js +0 -1
- package/dist/runtime/components/legacy/jquery.js +0 -52
- package/dist/runtime/components/legacy/ready.js +0 -152
- package/dist/runtime/components/legacy/renderer-legacy.js +0 -231
- package/dist/runtime/components/registry.js +0 -1
- package/dist/runtime/components/renderer.js +0 -236
- package/dist/runtime/components/update-manager.js +0 -94
- package/dist/runtime/createOut.js +0 -13
- package/dist/runtime/dom-insert.js +0 -77
- package/dist/runtime/events.js +0 -2
- package/dist/runtime/helpers/_change-case.js +0 -45
- package/dist/runtime/helpers/assign.js +0 -21
- package/dist/runtime/helpers/attr-tag.js +0 -43
- package/dist/runtime/helpers/class-value.js +0 -30
- package/dist/runtime/helpers/dynamic-tag.js +0 -181
- package/dist/runtime/helpers/empty-component.js +0 -1
- package/dist/runtime/helpers/merge.js +0 -13
- package/dist/runtime/helpers/of-fallback.js +0 -4
- package/dist/runtime/helpers/render-tag.js +0 -20
- package/dist/runtime/helpers/serialize-noop.js +0 -5
- package/dist/runtime/helpers/style-value.js +0 -45
- package/dist/runtime/helpers/tags-compat/dom-debug.js +0 -1
- package/dist/runtime/helpers/tags-compat/dom-debug.mjs +0 -4
- package/dist/runtime/helpers/tags-compat/dom.js +0 -1
- package/dist/runtime/helpers/tags-compat/dom.mjs +0 -4
- package/dist/runtime/helpers/tags-compat/html-debug.js +0 -3
- package/dist/runtime/helpers/tags-compat/html-debug.mjs +0 -4
- package/dist/runtime/helpers/tags-compat/html.js +0 -3
- package/dist/runtime/helpers/tags-compat/html.mjs +0 -4
- package/dist/runtime/helpers/tags-compat/runtime-dom.js +0 -239
- package/dist/runtime/helpers/tags-compat/runtime-html.js +0 -136
- package/dist/runtime/helpers/to-string.js +0 -5
- package/dist/runtime/html/AsyncStream.js +0 -805
- package/dist/runtime/html/BufferedWriter.js +0 -52
- package/dist/runtime/html/StringWriter.js +0 -73
- package/dist/runtime/html/helpers/_dynamic-attr.js +0 -35
- package/dist/runtime/html/helpers/attr.js +0 -80
- package/dist/runtime/html/helpers/attrs.js +0 -26
- package/dist/runtime/html/helpers/class-attr.js +0 -8
- package/dist/runtime/html/helpers/data-marko.js +0 -36
- package/dist/runtime/html/helpers/escape-quotes.js +0 -35
- package/dist/runtime/html/helpers/escape-script-placeholder.js +0 -24
- package/dist/runtime/html/helpers/escape-style-placeholder.js +0 -22
- package/dist/runtime/html/helpers/escape-xml.js +0 -21
- package/dist/runtime/html/helpers/merge-attrs.js +0 -55
- package/dist/runtime/html/helpers/props-script.js +0 -32
- package/dist/runtime/html/helpers/style-attr.js +0 -8
- package/dist/runtime/html/hot-reload.js +0 -26
- package/dist/runtime/html/index.js +0 -33
- package/dist/runtime/html/marko-namespace.js +0 -3
- package/dist/runtime/renderable.js +0 -194
- package/dist/runtime/vdom/AsyncVDOMBuilder.js +0 -456
- package/dist/runtime/vdom/VComment.js +0 -24
- package/dist/runtime/vdom/VComponent.js +0 -17
- package/dist/runtime/vdom/VDocumentFragment.js +0 -34
- package/dist/runtime/vdom/VElement.js +0 -375
- package/dist/runtime/vdom/VFragment.js +0 -26
- package/dist/runtime/vdom/VNode.js +0 -100
- package/dist/runtime/vdom/VText.js +0 -25
- package/dist/runtime/vdom/helpers/attrs.js +0 -62
- package/dist/runtime/vdom/helpers/const-element.js +0 -25
- package/dist/runtime/vdom/helpers/merge-attrs.js +0 -16
- package/dist/runtime/vdom/hot-reload.js +0 -115
- package/dist/runtime/vdom/index.js +0 -30
- package/dist/runtime/vdom/is-text-only.js +0 -10
- package/dist/runtime/vdom/marko-namespace.js +0 -3
- package/dist/runtime/vdom/morphdom/fragment.js +0 -95
- package/dist/runtime/vdom/morphdom/helpers.js +0 -42
- package/dist/runtime/vdom/morphdom/index.js +0 -741
- package/dist/runtime/vdom/parse-html.js +0 -18
- package/dist/runtime/vdom/vdom.js +0 -88
- package/dist/taglib/index.js +0 -51
- package/dist/translator/cdata/index.js +0 -15
- package/dist/translator/cdata/index[html].js +0 -15
- package/dist/translator/cdata/index[vdom].js +0 -12
- package/dist/translator/class.js +0 -65
- package/dist/translator/comment/index.js +0 -15
- package/dist/translator/comment/index[html].js +0 -17
- package/dist/translator/comment/index[vdom].js +0 -3
- package/dist/translator/declaration/index.js +0 -15
- package/dist/translator/declaration/index[html].js +0 -12
- package/dist/translator/declaration/index[vdom].js +0 -3
- package/dist/translator/document-type/index.js +0 -15
- package/dist/translator/document-type/index[html].js +0 -12
- package/dist/translator/document-type/index[vdom].js +0 -3
- package/dist/translator/placeholder/index.js +0 -15
- package/dist/translator/placeholder/index[html].js +0 -93
- package/dist/translator/placeholder/index[vdom].js +0 -22
- package/dist/translator/scriptlet.js +0 -4
- package/dist/translator/tag/attribute/directives/class.js +0 -42
- package/dist/translator/tag/attribute/directives/index.js +0 -15
- package/dist/translator/tag/attribute/directives/no-update-body-if.js +0 -15
- package/dist/translator/tag/attribute/directives/no-update-body.js +0 -10
- package/dist/translator/tag/attribute/directives/no-update-if.js +0 -12
- package/dist/translator/tag/attribute/directives/no-update.js +0 -48
- package/dist/translator/tag/attribute/directives/style.js +0 -42
- package/dist/translator/tag/attribute/index.js +0 -150
- package/dist/translator/tag/attribute/modifiers/index.js +0 -7
- package/dist/translator/tag/attribute/modifiers/no-update.js +0 -14
- package/dist/translator/tag/attribute/modifiers/scoped.js +0 -23
- package/dist/translator/tag/attribute-tag.js +0 -149
- package/dist/translator/tag/custom-tag.js +0 -146
- package/dist/translator/tag/dynamic-tag.js +0 -74
- package/dist/translator/tag/index.js +0 -287
- package/dist/translator/tag/macro-tag.js +0 -7
- package/dist/translator/tag/native-tag.js +0 -27
- package/dist/translator/tag/native-tag[html]/attributes.js +0 -151
- package/dist/translator/tag/native-tag[html]/index.js +0 -221
- package/dist/translator/tag/native-tag[vdom]/attributes.js +0 -105
- package/dist/translator/tag/native-tag[vdom]/index.js +0 -189
- package/dist/translator/tag/util.js +0 -246
- package/dist/translator/taglib/core/conditional/translate-else-if.js +0 -20
- package/dist/translator/taglib/core/conditional/translate-else.js +0 -20
- package/dist/translator/taglib/core/conditional/translate-if.js +0 -8
- package/dist/translator/taglib/core/conditional/util.js +0 -41
- package/dist/translator/taglib/core/index.js +0 -474
- package/dist/translator/taglib/core/macro/parse.js +0 -17
- package/dist/translator/taglib/core/macro/translate.js +0 -48
- package/dist/translator/taglib/core/parse-class.js +0 -79
- package/dist/translator/taglib/core/parse-export.js +0 -14
- package/dist/translator/taglib/core/parse-import.js +0 -14
- package/dist/translator/taglib/core/parse-module-code.js +0 -18
- package/dist/translator/taglib/core/parse-static.js +0 -18
- package/dist/translator/taglib/core/transform-style.js +0 -66
- package/dist/translator/taglib/core/translate-await.js +0 -41
- package/dist/translator/taglib/core/translate-body.js +0 -17
- package/dist/translator/taglib/core/translate-for.js +0 -156
- package/dist/translator/taglib/core/translate-html-comment.js +0 -52
- package/dist/translator/taglib/core/translate-include-content.js +0 -53
- package/dist/translator/taglib/core/translate-server-only.js +0 -5
- package/dist/translator/taglib/core/translate-while.js +0 -32
- package/dist/translator/taglib/index.js +0 -6
- package/dist/translator/taglib/migrate/all-templates.js +0 -46
- package/dist/translator/taglib/migrate/index.js +0 -5
- package/dist/translator/text/index.js +0 -10
- package/dist/translator/text/index[html].js +0 -12
- package/dist/translator/text/index[vdom].js +0 -20
- package/dist/translator/util/add-dependencies.js +0 -329
- package/dist/translator/util/escape-regexp.js +0 -4
- package/dist/translator/util/get-component-files.js +0 -86
- package/dist/translator/util/html-out-write.js +0 -15
- package/dist/translator/util/key-manager.js +0 -176
- package/dist/translator/util/optimize-html-writes.js +0 -52
- package/dist/translator/util/optimize-vdom-create.js +0 -164
- package/dist/translator/util/plugin-hooks.js +0 -22
- package/dist/translator/util/runtime-flags.js +0 -3
- package/dist/translator/util/vdom-out-write.js +0 -10
- package/dist/translator/util/with-previous-location.js +0 -6
- package/docs/10-awesome-marko-features.md +0 -291
- package/docs/body-content.md +0 -355
- package/docs/class-components.md +0 -1001
- package/docs/cloudflare-workers.md +0 -32
- package/docs/compiler-hooks.png +0 -0
- package/docs/compiler.md +0 -473
- package/docs/component-diagram.afdesign +0 -0
- package/docs/component-diagram.svg +0 -87
- package/docs/concise.md +0 -141
- package/docs/conditionals-and-lists.md +0 -72
- package/docs/core-tags.md +0 -325
- package/docs/custom-tags.md +0 -201
- package/docs/editor-plugins.md +0 -45
- package/docs/events.md +0 -131
- package/docs/express.md +0 -66
- package/docs/fastify.md +0 -65
- package/docs/getting-started.md +0 -95
- package/docs/http.md +0 -34
- package/docs/icons/js.svg +0 -4
- package/docs/icons/marko.svg +0 -1
- package/docs/icons/ts.svg +0 -1
- package/docs/installing.md +0 -51
- package/docs/koa.md +0 -35
- package/docs/lasso.md +0 -196
- package/docs/marko-5-upgrade.md +0 -59
- package/docs/marko-json.md +0 -248
- package/docs/marko-vs-react.md +0 -854
- package/docs/redux.md +0 -61
- package/docs/rendering.md +0 -268
- package/docs/rollup.md +0 -352
- package/docs/state.md +0 -105
- package/docs/structure.json +0 -49
- package/docs/styles.md +0 -29
- package/docs/syntax.md +0 -601
- package/docs/troubleshooting-streaming.md +0 -68
- package/docs/typescript.md +0 -406
- package/docs/vite.md +0 -86
- package/docs/webpack.md +0 -205
- package/docs/why-is-marko-fast.md +0 -239
- package/env.js +0 -7
- package/helpers/README.md +0 -3
- package/helpers/empty.js +0 -4
- package/helpers/notEmpty.js +0 -11
- package/index-browser.marko +0 -15
- package/index.d.ts +0 -375
- package/index.js +0 -7
- package/legacy-components-browser.marko +0 -15
- package/legacy-components.js +0 -7
- package/node-require.js +0 -8
- package/src/build.json +0 -3
- package/src/compiler/config.js +0 -45
- package/src/compiler/index.js +0 -164
- package/src/compiler/modules.js +0 -5
- package/src/core-tags/.eslintrc +0 -5
- package/src/core-tags/components/init-components-tag.js +0 -54
- package/src/core-tags/components/preferred-script-location-tag.js +0 -25
- package/src/core-tags/components/preserve-tag.js +0 -1
- package/src/core-tags/core/__flush_here_and_after__.js +0 -44
- package/src/core-tags/core/await/AsyncValue.js +0 -121
- package/src/core-tags/core/await/client-reorder-runtime.js +0 -51
- package/src/core-tags/core/await/index.d.marko +0 -10
- package/src/core-tags/core/await/renderer.js +0 -249
- package/src/core-tags/core/await/reorderer-renderer.js +0 -156
- package/src/index.js +0 -4
- package/src/node-require/browser-refresh.js +0 -18
- package/src/node-require/hot-reload.js +0 -45
- package/src/node-require/index.js +0 -103
- package/src/node_modules/@internal/components-beginComponent/index-browser.js +0 -23
- package/src/node_modules/@internal/components-beginComponent/index.js +0 -84
- package/src/node_modules/@internal/components-beginComponent/package.json +0 -11
- package/src/node_modules/@internal/components-define-widget-legacy/index-browser.js +0 -335
- package/src/node_modules/@internal/components-define-widget-legacy/index.js +0 -18
- package/src/node_modules/@internal/components-define-widget-legacy/package.json +0 -11
- package/src/node_modules/@internal/components-endComponent/index-browser.js +0 -5
- package/src/node_modules/@internal/components-endComponent/index.js +0 -11
- package/src/node_modules/@internal/components-endComponent/package.json +0 -11
- package/src/node_modules/@internal/components-entry/index-browser.js +0 -11
- package/src/node_modules/@internal/components-entry/index.js +0 -301
- package/src/node_modules/@internal/components-entry/package.json +0 -11
- package/src/node_modules/@internal/components-entry-legacy/index-browser.js +0 -76
- package/src/node_modules/@internal/components-entry-legacy/index.js +0 -16
- package/src/node_modules/@internal/components-entry-legacy/package.json +0 -11
- package/src/node_modules/@internal/components-registry/index-browser.js +0 -586
- package/src/node_modules/@internal/components-registry/index.js +0 -44
- package/src/node_modules/@internal/components-registry/package.json +0 -11
- package/src/node_modules/@internal/components-util/index-browser.js +0 -152
- package/src/node_modules/@internal/components-util/index.js +0 -75
- package/src/node_modules/@internal/components-util/package.json +0 -11
- package/src/node_modules/@internal/create-readable/index-browser.js +0 -30
- package/src/node_modules/@internal/create-readable/index.js +0 -57
- package/src/node_modules/@internal/create-readable/package.json +0 -11
- package/src/node_modules/@internal/loader/fallback-node.js +0 -89
- package/src/node_modules/@internal/loader/index-browser.js +0 -2
- package/src/node_modules/@internal/loader/index.js +0 -23
- package/src/node_modules/@internal/loader/package.json +0 -10
- package/src/node_modules/@internal/preserve-tag/index-browser.js +0 -46
- package/src/node_modules/@internal/preserve-tag/index.js +0 -34
- package/src/node_modules/@internal/preserve-tag/package.json +0 -11
- package/src/node_modules/@internal/require/index-browser.js +0 -15
- package/src/node_modules/@internal/require/index-legacy-browser.js +0 -20
- package/src/node_modules/@internal/require/index-webpack.js +0 -16
- package/src/node_modules/@internal/require/index.js +0 -15
- package/src/node_modules/@internal/require/package.json +0 -11
- package/src/node_modules/@internal/set-immediate/index-browser.js +0 -19
- package/src/node_modules/@internal/set-immediate/index-worker.js +0 -31
- package/src/node_modules/@internal/set-immediate/index.js +0 -3
- package/src/node_modules/@internal/set-immediate/package.json +0 -11
- package/src/node_modules/@internal/set-immediate/queueMicrotask.js +0 -8
- package/src/runtime/.eslintrc +0 -5
- package/src/runtime/RenderResult.js +0 -112
- package/src/runtime/components/Component.js +0 -663
- package/src/runtime/components/ComponentDef.js +0 -169
- package/src/runtime/components/ComponentsContext.js +0 -59
- package/src/runtime/components/GlobalComponentsContext.js +0 -10
- package/src/runtime/components/KeySequence.js +0 -16
- package/src/runtime/components/ServerComponent.js +0 -73
- package/src/runtime/components/State.js +0 -101
- package/src/runtime/components/attach-detach.js +0 -60
- package/src/runtime/components/defineComponent.js +0 -60
- package/src/runtime/components/dom-data.js +0 -8
- package/src/runtime/components/event-delegation.js +0 -144
- package/src/runtime/components/index.js +0 -1
- package/src/runtime/components/legacy/browser.json +0 -9
- package/src/runtime/components/legacy/defineComponent-legacy.js +0 -27
- package/src/runtime/components/legacy/defineRenderer-legacy.js +0 -171
- package/src/runtime/components/legacy/defineWidget-legacy.js +0 -1
- package/src/runtime/components/legacy/dependencies/html.js +0 -3
- package/src/runtime/components/legacy/dependencies/index.js +0 -177
- package/src/runtime/components/legacy/dependencies/vdom.js +0 -3
- package/src/runtime/components/legacy/index.js +0 -1
- package/src/runtime/components/legacy/jquery.js +0 -52
- package/src/runtime/components/legacy/ready.js +0 -152
- package/src/runtime/components/legacy/renderer-legacy.js +0 -231
- package/src/runtime/components/registry.js +0 -1
- package/src/runtime/components/renderer.js +0 -236
- package/src/runtime/components/update-manager.js +0 -94
- package/src/runtime/createOut.js +0 -13
- package/src/runtime/dom-insert.js +0 -77
- package/src/runtime/events.js +0 -2
- package/src/runtime/helpers/_change-case.js +0 -45
- package/src/runtime/helpers/assign.js +0 -21
- package/src/runtime/helpers/attr-tag.js +0 -43
- package/src/runtime/helpers/class-value.js +0 -30
- package/src/runtime/helpers/dynamic-tag.js +0 -181
- package/src/runtime/helpers/empty-component.js +0 -1
- package/src/runtime/helpers/merge.js +0 -13
- package/src/runtime/helpers/of-fallback.js +0 -4
- package/src/runtime/helpers/render-tag.js +0 -20
- package/src/runtime/helpers/serialize-noop.js +0 -5
- package/src/runtime/helpers/style-value.js +0 -45
- package/src/runtime/helpers/tags-compat/dom-debug.js +0 -1
- package/src/runtime/helpers/tags-compat/dom-debug.mjs +0 -4
- package/src/runtime/helpers/tags-compat/dom.js +0 -1
- package/src/runtime/helpers/tags-compat/dom.mjs +0 -4
- package/src/runtime/helpers/tags-compat/html-debug.js +0 -3
- package/src/runtime/helpers/tags-compat/html-debug.mjs +0 -4
- package/src/runtime/helpers/tags-compat/html.js +0 -3
- package/src/runtime/helpers/tags-compat/html.mjs +0 -4
- package/src/runtime/helpers/tags-compat/runtime-dom.js +0 -239
- package/src/runtime/helpers/tags-compat/runtime-html.js +0 -136
- package/src/runtime/helpers/to-string.js +0 -5
- package/src/runtime/html/AsyncStream.js +0 -805
- package/src/runtime/html/BufferedWriter.js +0 -52
- package/src/runtime/html/StringWriter.js +0 -73
- package/src/runtime/html/helpers/_dynamic-attr.js +0 -35
- package/src/runtime/html/helpers/attr.js +0 -80
- package/src/runtime/html/helpers/attrs.js +0 -26
- package/src/runtime/html/helpers/class-attr.js +0 -8
- package/src/runtime/html/helpers/data-marko.js +0 -36
- package/src/runtime/html/helpers/escape-quotes.js +0 -35
- package/src/runtime/html/helpers/escape-script-placeholder.js +0 -24
- package/src/runtime/html/helpers/escape-style-placeholder.js +0 -22
- package/src/runtime/html/helpers/escape-xml.js +0 -21
- package/src/runtime/html/helpers/merge-attrs.js +0 -55
- package/src/runtime/html/helpers/props-script.js +0 -32
- package/src/runtime/html/helpers/style-attr.js +0 -8
- package/src/runtime/html/hot-reload.js +0 -26
- package/src/runtime/html/index.js +0 -33
- package/src/runtime/html/marko-namespace.js +0 -3
- package/src/runtime/renderable.js +0 -194
- package/src/runtime/vdom/AsyncVDOMBuilder.js +0 -456
- package/src/runtime/vdom/VComment.js +0 -24
- package/src/runtime/vdom/VComponent.js +0 -17
- package/src/runtime/vdom/VDocumentFragment.js +0 -34
- package/src/runtime/vdom/VElement.js +0 -375
- package/src/runtime/vdom/VFragment.js +0 -26
- package/src/runtime/vdom/VNode.js +0 -100
- package/src/runtime/vdom/VText.js +0 -25
- package/src/runtime/vdom/helpers/attrs.js +0 -62
- package/src/runtime/vdom/helpers/const-element.js +0 -25
- package/src/runtime/vdom/helpers/merge-attrs.js +0 -16
- package/src/runtime/vdom/hot-reload.js +0 -115
- package/src/runtime/vdom/index.js +0 -30
- package/src/runtime/vdom/is-text-only.js +0 -10
- package/src/runtime/vdom/marko-namespace.js +0 -3
- package/src/runtime/vdom/morphdom/fragment.js +0 -95
- package/src/runtime/vdom/morphdom/helpers.js +0 -42
- package/src/runtime/vdom/morphdom/index.js +0 -741
- package/src/runtime/vdom/parse-html.js +0 -18
- package/src/runtime/vdom/vdom.js +0 -88
- package/src/taglib/index.js +0 -51
- package/src/translator/cdata/index.js +0 -15
- package/src/translator/cdata/index[html].js +0 -15
- package/src/translator/cdata/index[vdom].js +0 -12
- package/src/translator/class.js +0 -65
- package/src/translator/comment/index.js +0 -15
- package/src/translator/comment/index[html].js +0 -17
- package/src/translator/comment/index[vdom].js +0 -3
- package/src/translator/declaration/index.js +0 -15
- package/src/translator/declaration/index[html].js +0 -12
- package/src/translator/declaration/index[vdom].js +0 -3
- package/src/translator/document-type/index.js +0 -15
- package/src/translator/document-type/index[html].js +0 -12
- package/src/translator/document-type/index[vdom].js +0 -3
- package/src/translator/index.js +0 -552
- package/src/translator/placeholder/index.js +0 -15
- package/src/translator/placeholder/index[html].js +0 -93
- package/src/translator/placeholder/index[vdom].js +0 -22
- package/src/translator/scriptlet.js +0 -4
- package/src/translator/tag/attribute/directives/class.js +0 -42
- package/src/translator/tag/attribute/directives/index.js +0 -15
- package/src/translator/tag/attribute/directives/no-update-body-if.js +0 -15
- package/src/translator/tag/attribute/directives/no-update-body.js +0 -10
- package/src/translator/tag/attribute/directives/no-update-if.js +0 -12
- package/src/translator/tag/attribute/directives/no-update.js +0 -48
- package/src/translator/tag/attribute/directives/style.js +0 -42
- package/src/translator/tag/attribute/index.js +0 -150
- package/src/translator/tag/attribute/modifiers/index.js +0 -7
- package/src/translator/tag/attribute/modifiers/no-update.js +0 -14
- package/src/translator/tag/attribute/modifiers/scoped.js +0 -23
- package/src/translator/tag/attribute-tag.js +0 -149
- package/src/translator/tag/custom-tag.js +0 -146
- package/src/translator/tag/dynamic-tag.js +0 -74
- package/src/translator/tag/index.js +0 -287
- package/src/translator/tag/macro-tag.js +0 -7
- package/src/translator/tag/native-tag.js +0 -27
- package/src/translator/tag/native-tag[html]/attributes.js +0 -151
- package/src/translator/tag/native-tag[html]/index.js +0 -221
- package/src/translator/tag/native-tag[vdom]/attributes.js +0 -105
- package/src/translator/tag/native-tag[vdom]/index.js +0 -189
- package/src/translator/tag/util.js +0 -246
- package/src/translator/taglib/core/conditional/translate-else-if.js +0 -20
- package/src/translator/taglib/core/conditional/translate-else.js +0 -20
- package/src/translator/taglib/core/conditional/translate-if.js +0 -8
- package/src/translator/taglib/core/conditional/util.js +0 -41
- package/src/translator/taglib/core/index.js +0 -474
- package/src/translator/taglib/core/macro/parse.js +0 -17
- package/src/translator/taglib/core/macro/translate.js +0 -48
- package/src/translator/taglib/core/parse-class.js +0 -79
- package/src/translator/taglib/core/parse-export.js +0 -14
- package/src/translator/taglib/core/parse-import.js +0 -14
- package/src/translator/taglib/core/parse-module-code.js +0 -18
- package/src/translator/taglib/core/parse-static.js +0 -18
- package/src/translator/taglib/core/transform-style.js +0 -66
- package/src/translator/taglib/core/translate-await.js +0 -41
- package/src/translator/taglib/core/translate-body.js +0 -17
- package/src/translator/taglib/core/translate-for.js +0 -156
- package/src/translator/taglib/core/translate-html-comment.js +0 -52
- package/src/translator/taglib/core/translate-include-content.js +0 -53
- package/src/translator/taglib/core/translate-server-only.js +0 -5
- package/src/translator/taglib/core/translate-while.js +0 -32
- package/src/translator/taglib/index.js +0 -7
- package/src/translator/taglib/migrate/all-templates.js +0 -46
- package/src/translator/taglib/migrate/index.js +0 -5
- package/src/translator/text/index.js +0 -10
- package/src/translator/text/index[html].js +0 -12
- package/src/translator/text/index[vdom].js +0 -20
- package/src/translator/util/add-dependencies.js +0 -329
- package/src/translator/util/escape-regexp.js +0 -4
- package/src/translator/util/get-component-files.js +0 -86
- package/src/translator/util/html-out-write.js +0 -15
- package/src/translator/util/key-manager.js +0 -176
- package/src/translator/util/optimize-html-writes.js +0 -52
- package/src/translator/util/optimize-vdom-create.js +0 -164
- package/src/translator/util/plugin-hooks.js +0 -22
- package/src/translator/util/runtime-flags.js +0 -3
- package/src/translator/util/vdom-out-write.js +0 -10
- package/src/translator/util/with-previous-location.js +0 -6
- package/tags-html.d.ts +0 -3855
- package/translator/index.d.ts +0 -7
- package/translator/package.json +0 -5
package/docs/concise.md
DELETED
@@ -1,141 +0,0 @@
|
|
1
|
-
# Concise syntax
|
2
|
-
|
3
|
-
Marko's concise syntax is very similar to the HTML syntax, except it's more... concise. Essentially, you take an HTML tag, remove the angle brackets (`<>`) and use indentation rather than a closing tag:
|
4
|
-
|
5
|
-
_input.marko_
|
6
|
-
|
7
|
-
```marko
|
8
|
-
div class="thumbnail"
|
9
|
-
img src="https://example.com/thumb.png"
|
10
|
-
```
|
11
|
-
|
12
|
-
_output.html_
|
13
|
-
|
14
|
-
```html
|
15
|
-
<div class="thumbnail"><img src="https://example.com/thumb.png" /></div>
|
16
|
-
```
|
17
|
-
|
18
|
-
## Shorthand attributes
|
19
|
-
|
20
|
-
Marko provides a shorthand for declaring classes and ids on an element:
|
21
|
-
|
22
|
-
_input.marko_
|
23
|
-
|
24
|
-
```marko
|
25
|
-
div.my-class
|
26
|
-
span#my-id
|
27
|
-
button#submit.primary.large
|
28
|
-
```
|
29
|
-
|
30
|
-
Yields this HTML:
|
31
|
-
|
32
|
-
_output.html_
|
33
|
-
|
34
|
-
```html
|
35
|
-
<div class="my-class"></div>
|
36
|
-
<span id="my-id"></span> <button id="submit" class="primary large"></button>
|
37
|
-
```
|
38
|
-
|
39
|
-
> **ProTip:** These shorthand attributes are available within the HTML syntax as well
|
40
|
-
|
41
|
-
## Attributes on multiple lines
|
42
|
-
|
43
|
-
If a component has lots of attributes, you can spread them across multiple lines by surrounding them with square brackets
|
44
|
-
|
45
|
-
_input.marko_
|
46
|
-
|
47
|
-
```marko
|
48
|
-
div [
|
49
|
-
id="hello"
|
50
|
-
class=["class1", "class2", "class3"]
|
51
|
-
style={ border: "1px solid red" }
|
52
|
-
] -- hello
|
53
|
-
```
|
54
|
-
|
55
|
-
_output.html_
|
56
|
-
|
57
|
-
```html
|
58
|
-
<div id="hello" class="class1 class2 class3" style="border:1px solid red">
|
59
|
-
hello
|
60
|
-
</div>
|
61
|
-
```
|
62
|
-
|
63
|
-
## Text
|
64
|
-
|
65
|
-
Text in concise mode is denoted by two or more dashes (`--`).
|
66
|
-
|
67
|
-
If there is text on the same line following `--`, it is single-line text:
|
68
|
-
|
69
|
-
_single-line-text.marko_
|
70
|
-
|
71
|
-
```marko
|
72
|
-
-- Hello world
|
73
|
-
```
|
74
|
-
|
75
|
-
The dashes can also follow an element to give it a single text node as a child
|
76
|
-
|
77
|
-
_single-line-text.marko_
|
78
|
-
|
79
|
-
```marko
|
80
|
-
div -- Hello world
|
81
|
-
```
|
82
|
-
|
83
|
-
If there is a line break immediately following `--`, everything following the `--` at the current indentation is parsed as multi-line line text.
|
84
|
-
|
85
|
-
_multi-line-text.marko_
|
86
|
-
|
87
|
-
```marko
|
88
|
-
div
|
89
|
-
--
|
90
|
-
Hello world
|
91
|
-
this text
|
92
|
-
is multi-line
|
93
|
-
|
94
|
-
div
|
95
|
-
--
|
96
|
-
this is more
|
97
|
-
text
|
98
|
-
```
|
99
|
-
|
100
|
-
A multi-line text block can be ended by the same number of dashes that opened it. This allows it to have siblings:
|
101
|
-
|
102
|
-
_multi-line-text.marko_
|
103
|
-
|
104
|
-
```marko
|
105
|
-
div
|
106
|
-
img src="https://example.com/photo.png"
|
107
|
-
--
|
108
|
-
Hello world
|
109
|
-
this text
|
110
|
-
is multi-line
|
111
|
-
--
|
112
|
-
span -- text after
|
113
|
-
```
|
114
|
-
|
115
|
-
### Root level text
|
116
|
-
|
117
|
-
There is one "gotcha" that you need to be aware of. The Marko parser starts out in the concise mode. Therefore, given the following template:
|
118
|
-
|
119
|
-
_input.marko_
|
120
|
-
|
121
|
-
```marko
|
122
|
-
Hello World
|
123
|
-
Welcome to Marko
|
124
|
-
```
|
125
|
-
|
126
|
-
The output would be the following:
|
127
|
-
|
128
|
-
_output.html_
|
129
|
-
|
130
|
-
```html
|
131
|
-
<Hello World></Hello> <Welcome to Marko></Welcome>
|
132
|
-
```
|
133
|
-
|
134
|
-
Instead, prefix the lines with `--` so they are parsed as text:
|
135
|
-
|
136
|
-
_input.marko_
|
137
|
-
|
138
|
-
```marko
|
139
|
-
-- Hello World
|
140
|
-
-- Welcome to Marko
|
141
|
-
```
|
@@ -1,72 +0,0 @@
|
|
1
|
-
# Conditionals and Lists
|
2
|
-
|
3
|
-
While HTML itself does not support conditionally displaying elements or repeating elements, it is a critical part of building any web application. In Marko, this functionality is provided by the `<if>` and `<for>` tags.
|
4
|
-
|
5
|
-
## Conditionals
|
6
|
-
|
7
|
-
The `<if>` tag receives an [argument](./syntax.md#arguments) which is used to determine if its body content should be present.
|
8
|
-
|
9
|
-
```marko
|
10
|
-
<if(user.loggedOut)>
|
11
|
-
<a href="/login">Log in</a>
|
12
|
-
</if>
|
13
|
-
```
|
14
|
-
|
15
|
-
As you might expect, there are also `<else>` and `<else-if>` tags as well:
|
16
|
-
|
17
|
-
```marko
|
18
|
-
<if(user.loggedOut)>
|
19
|
-
<a href="/login">Log in</a>
|
20
|
-
</if>
|
21
|
-
<else-if(!user.trappedForever)>
|
22
|
-
<a href="/logout">Log out</a>
|
23
|
-
</else-if>
|
24
|
-
<else>
|
25
|
-
Hey ${user.name}!
|
26
|
-
</else>
|
27
|
-
```
|
28
|
-
|
29
|
-
## Lists
|
30
|
-
|
31
|
-
If you have a list of data and need to represent it in the UI, the `<for>` tag is probably what you're looking for. The `<for>` tag passes each item and its index to its body as [parameters](./syntax.md#parameters).
|
32
|
-
|
33
|
-
```marko
|
34
|
-
<ul>
|
35
|
-
<for|color, index| of=colors>
|
36
|
-
<li>${index}: ${color}</li>
|
37
|
-
</for>
|
38
|
-
</ul>
|
39
|
-
```
|
40
|
-
|
41
|
-
The `<for>` tag actually support 3 different flavors:
|
42
|
-
|
43
|
-
- [`<for|item, index, array| of=array>`](./core-tags.md#iterating-over-a-list) renders its body for each item of an array. It's similar to the JavaScript [`for...of`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of) loop.
|
44
|
-
- [`<for|key, value| in=object>`](./core-tags.md#iterating-over-an-objects-properties) renders its body for each property in an object. It's similar to the JavaScript [`for...in`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) loop.
|
45
|
-
- [`<for|value| from=first to=last step=increment>`](./core-tags.md#iterating-between-a-range-of-numbers) renders its body for each value in between and including `from` and `to`.
|
46
|
-
|
47
|
-
### Always set a `key`
|
48
|
-
|
49
|
-
Marko automatically keeps your UI in sync with the state behind it, but one place where it needs a little extra help is repeated content. Specifying keys gives Marko a way to identify items in a list and keep track of which items have been changed, added, or removed.
|
50
|
-
|
51
|
-
A key should be a string or number that uniquely identifies an item in the list and differentiates it from its siblings. The same key value should never be used twice! Often, you will use something like an `id` property.
|
52
|
-
|
53
|
-
```marko
|
54
|
-
<for|user| of=users>
|
55
|
-
<user-card key=user.id data=user/>
|
56
|
-
</for>
|
57
|
-
```
|
58
|
-
|
59
|
-
> **ProTip:** If you have multiple tags underneath `<for>`, you can key only the first tag and that is enough to properly identify its siblings as well
|
60
|
-
>
|
61
|
-
> ```marko
|
62
|
-
> <dl>
|
63
|
-
> <for|entry| of=entries>
|
64
|
-
> <!-- only the first tag needs a key -->
|
65
|
-
> <dt key=entry.id>${entry.word}</dt>
|
66
|
-
> <!-- This key can be omitted -->
|
67
|
-
> <dd>${entry.definition}</dd>
|
68
|
-
> </for>
|
69
|
-
> </dl>
|
70
|
-
> ```
|
71
|
-
|
72
|
-
> **Note:** If a key is not set, Marko will use the index of an item as its key. However this only works perfectly if items are only ever added or removed at the end of a list. Here's an example where things break down: if we have a list of `["A", "B", "C"]` and reverse the order, index keys would cause "A" to be transformed into "C" (and "C" into "A"), rather than just swapping them. Additionally if these components contained state, the new "C" would contain the state from the old "A" (and vice-versa). Be aware, stateful components include tags like the native `<input>` element. For this reason **it is always recommended to set a `key` on tags in a `<for>`.**
|
package/docs/core-tags.md
DELETED
@@ -1,325 +0,0 @@
|
|
1
|
-
# Core tags and attributes
|
2
|
-
|
3
|
-
Much like [HTML has its own native tags](https://developer.mozilla.org/en-US/docs/Web/HTML/Element), Marko includes **core tags** and **global attributes** for declaratively building modern applications.
|
4
|
-
|
5
|
-
## `<if>`, `<else-if>`, `<else>`
|
6
|
-
|
7
|
-
Like the [equivalent JavaScript statements](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else), these tags render [conditional content](./conditionals-and-lists.md#conditionals):
|
8
|
-
|
9
|
-
```marko
|
10
|
-
<if(arriving)>
|
11
|
-
Hey there
|
12
|
-
</if>
|
13
|
-
<else-if(leaving)>
|
14
|
-
Bye now
|
15
|
-
</else-if>
|
16
|
-
<else>
|
17
|
-
What’s up?
|
18
|
-
</else>
|
19
|
-
```
|
20
|
-
|
21
|
-
They support any JavaScript expression in their [tag arguments](./syntax.md#arguments):
|
22
|
-
|
23
|
-
```marko
|
24
|
-
<if(Math.random() > 0.5)>
|
25
|
-
<p>50% chance to see this</p>
|
26
|
-
</if>
|
27
|
-
```
|
28
|
-
|
29
|
-
## `<for>`
|
30
|
-
|
31
|
-
The `<for>` tag iterates over [arrays/array-likes](#iterating-over-a-list), [object properties](#iterating-over-an-objects-properties), and [ranges of numbers](#iterating-between-a-range-of-numbers).
|
32
|
-
|
33
|
-
### Iterating over a list
|
34
|
-
|
35
|
-
Like the [JavaScript `for...of` loop statement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of), giving `<for>`’s `of` attribute a value will loop over that value as an array or iterable.
|
36
|
-
|
37
|
-
The current **item**, **index**, and the **iterating list** are provided as [tag parameters](./syntax.md#parameters):
|
38
|
-
|
39
|
-
```marko
|
40
|
-
$ const colors = ["red", "green", "blue"];
|
41
|
-
<ol>
|
42
|
-
<for|color, index, colorList| of=colors>
|
43
|
-
<li value=index>${color}</li>
|
44
|
-
</for>
|
45
|
-
</ol>
|
46
|
-
```
|
47
|
-
|
48
|
-
The output HTML would be:
|
49
|
-
|
50
|
-
```html
|
51
|
-
<ol>
|
52
|
-
<li value="0">red</li>
|
53
|
-
<li value="1">green</li>
|
54
|
-
<li value="2">blue</li>
|
55
|
-
</ol>
|
56
|
-
```
|
57
|
-
|
58
|
-
> **Pro Tip**: `<for>`’s `of` attribute can loop over any iterable, just like JavaScript’s [`for...of`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of). This includes strings, `NodeList`s, `Set`s… any object with zero-indexed numeric properties and a `.length`, basically.
|
59
|
-
|
60
|
-
### Iterating over an object’s properties
|
61
|
-
|
62
|
-
Like [JavaScript’s `for...in` loop statement](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in), giving `<for>` an object as its `in` attribute will loop over that object’s properties.
|
63
|
-
|
64
|
-
The current **property name** and **property value** are provided as [tag parameters](./syntax.md#parameters):
|
65
|
-
|
66
|
-
```marko
|
67
|
-
$ const settings = {
|
68
|
-
"Dark Mode": false,
|
69
|
-
"Fullscreen": true
|
70
|
-
};
|
71
|
-
|
72
|
-
<dl>
|
73
|
-
<for|name, enabled| in=settings>
|
74
|
-
<dt>${name}:</dt>
|
75
|
-
<dd>${enabled ? "on" : "off"}</dd>
|
76
|
-
</for>
|
77
|
-
</dl>
|
78
|
-
```
|
79
|
-
|
80
|
-
The output HTML would be:
|
81
|
-
|
82
|
-
```html
|
83
|
-
<dl>
|
84
|
-
<dt>Dark Mode:</dt>
|
85
|
-
<dd>off</dd>
|
86
|
-
<dt>Fullscreen:</dt>
|
87
|
-
<dd>on</dd>
|
88
|
-
</dl>
|
89
|
-
```
|
90
|
-
|
91
|
-
### Iterating between a range of numbers
|
92
|
-
|
93
|
-
The final `<for>` variant loops between two numbers, by providing `from` and `to` attributes. The current number in the range will be provided as a [tag parameter](./syntax.md#parameters):
|
94
|
-
|
95
|
-
```marko
|
96
|
-
<ol type="I">
|
97
|
-
<for|i| from=0 to=10>
|
98
|
-
<li value=i>${i}</li>
|
99
|
-
</for>
|
100
|
-
</ol>
|
101
|
-
```
|
102
|
-
|
103
|
-
You can also pass an optional `step` attribute, which defaults to 1 otherwise. `step` lets you increment by a specific amount:
|
104
|
-
|
105
|
-
```marko
|
106
|
-
<ol type="I">
|
107
|
-
<for|i| from=0 to=10 step=2>
|
108
|
-
<li value=i>${i}</li>
|
109
|
-
</for>
|
110
|
-
</ol>
|
111
|
-
```
|
112
|
-
|
113
|
-
…becomes:
|
114
|
-
|
115
|
-
```marko
|
116
|
-
<ol type="I">
|
117
|
-
<li value="0">0</li>
|
118
|
-
<li value="2">2</li>
|
119
|
-
<li value="4">4</li>
|
120
|
-
<li value="6">6</li>
|
121
|
-
<li value="8">8</li>
|
122
|
-
<li value="10">10</li>
|
123
|
-
</ol>
|
124
|
-
```
|
125
|
-
|
126
|
-
> **ProTip:** This syntax is for generating numbers from nothing. Don’t use it to iterate over an object, like so:
|
127
|
-
>
|
128
|
-
> ```marko
|
129
|
-
> <!-- Inefficient code, do not copy -->
|
130
|
-
> <ul>
|
131
|
-
> <for|i| from=0 to=(myArray.length - 1)>
|
132
|
-
> <li>${myArray[i]}</li>
|
133
|
-
> </for>
|
134
|
-
> </ul>
|
135
|
-
> ```
|
136
|
-
>
|
137
|
-
> Use [`<for of>`](#iterating-over-a-list) instead.
|
138
|
-
|
139
|
-
## `<while>`
|
140
|
-
|
141
|
-
> **Warning:** Using `<while>` is not recommended. Instead, replicate it with [an iterable and `<for>`](#iterating-over-a-list).
|
142
|
-
>
|
143
|
-
> In the future, Marko may restrict value mutation during rendering, for runtime optimizations.
|
144
|
-
|
145
|
-
You can repeat a chunk of markup _until a condition is met_ with the `while` tag:
|
146
|
-
|
147
|
-
```marko
|
148
|
-
$ let n = 0;
|
149
|
-
|
150
|
-
<while(n < 4)>
|
151
|
-
<p>${n++}</p>
|
152
|
-
</while>
|
153
|
-
```
|
154
|
-
|
155
|
-
…becomes:
|
156
|
-
|
157
|
-
```html
|
158
|
-
<p>0</p>
|
159
|
-
<p>1</p>
|
160
|
-
<p>2</p>
|
161
|
-
<p>3</p>
|
162
|
-
```
|
163
|
-
|
164
|
-
## `<macro>`
|
165
|
-
|
166
|
-
Macros create reusable markup fragments for later use in the same template they were defined in.
|
167
|
-
|
168
|
-
The `<macro>` tag defines a macro as a tag via the `name` attribute. For example, the following macro is registered as the `<greeting>` tag:
|
169
|
-
|
170
|
-
```marko
|
171
|
-
<macro name="greeting">
|
172
|
-
<p>Welcome!</p>
|
173
|
-
</macro>
|
174
|
-
|
175
|
-
<greeting/>
|
176
|
-
<greeting/>
|
177
|
-
```
|
178
|
-
|
179
|
-
…the output HTML would be:
|
180
|
-
|
181
|
-
```html
|
182
|
-
<p>Welcome!</p>
|
183
|
-
<p>Welcome!</p>
|
184
|
-
```
|
185
|
-
|
186
|
-
Macros become more useful with [tag parameters](./syntax.md#parameters), allowing complex templates. In this next example, `<greeting>` can now receive `firstName` and `count` parameters from its parent:
|
187
|
-
|
188
|
-
```marko
|
189
|
-
<macro|{ firstName, count }| name="greeting">
|
190
|
-
<p>Hello ${firstName}!
|
191
|
-
<output>You have ${count} new messages.</output>
|
192
|
-
</p>
|
193
|
-
</macro>
|
194
|
-
|
195
|
-
<greeting firstName="Frank" count=20/>
|
196
|
-
```
|
197
|
-
|
198
|
-
…the output HTML would be:
|
199
|
-
|
200
|
-
```html
|
201
|
-
<p>
|
202
|
-
Hello Frank!
|
203
|
-
<output>You have 20 new messages.</output>
|
204
|
-
</p>
|
205
|
-
```
|
206
|
-
|
207
|
-
Macros receive input like components do, including [a `renderBody` for provided body content](./body-content.md):
|
208
|
-
|
209
|
-
```marko
|
210
|
-
<macro|{ renderBody }| name="special-heading">
|
211
|
-
<h1>
|
212
|
-
<${renderBody}/>!
|
213
|
-
</h1>
|
214
|
-
</macro>
|
215
|
-
|
216
|
-
<special-heading>
|
217
|
-
Hello
|
218
|
-
</special-heading>
|
219
|
-
```
|
220
|
-
|
221
|
-
…the output HTML would be:
|
222
|
-
|
223
|
-
```html
|
224
|
-
<h1>Hello!</h1>
|
225
|
-
```
|
226
|
-
|
227
|
-
> **ProTip:** You can use a macro inside itself for recursive layouts, like displaying directory contents.
|
228
|
-
|
229
|
-
## `<await>`
|
230
|
-
|
231
|
-
The `<await>` tag **renders markup asynchronously using a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)**.
|
232
|
-
|
233
|
-
- Its `<@then>` [attribute tag](./syntax.md#attribute-tag) displays when the Promise _resolves_, optionally receiving the resolved value as a [tag parameter](./syntax.md#parameters).
|
234
|
-
- Its `<@catch>` attribute tag displays when the Promise _rejects_, optionally receiving the rejected value as a tag parameter.
|
235
|
-
- Its optional `<@placeholder>` attribute tag displays while the Promise is pending.
|
236
|
-
|
237
|
-
```marko
|
238
|
-
$ const personPromise = new Promise((resolve, reject) => {
|
239
|
-
setTimeout(() => resolve({ name: 'Frank' }), 1000);
|
240
|
-
});
|
241
|
-
|
242
|
-
<await(personPromise) client-reorder=true>
|
243
|
-
<@placeholder>
|
244
|
-
<!-- Displays while promise is pending -->
|
245
|
-
<label>Loading…
|
246
|
-
<progress></progress>
|
247
|
-
</label>
|
248
|
-
</@placeholder>
|
249
|
-
|
250
|
-
<@then|person|>
|
251
|
-
<!-- Displays if promise resolves -->
|
252
|
-
<p>Hello ${person.name}!</p>
|
253
|
-
</@then>
|
254
|
-
|
255
|
-
<@catch|err|>
|
256
|
-
<!-- Displays if promise rejects -->
|
257
|
-
${err.name} error: ${err.message}
|
258
|
-
</@catch>
|
259
|
-
</await>
|
260
|
-
```
|
261
|
-
|
262
|
-
Optional attributes for `<await>`:
|
263
|
-
|
264
|
-
| Attribute | Type | Description |
|
265
|
-
| ---------------: | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
266
|
-
| `timeout` | integer | An optional timeout. If reached, rejects the promise with a `TimeoutError`. |
|
267
|
-
| `name` | string | Improves debugging and ensures ordering with the `show-after` attribute. |
|
268
|
-
| `show-after` | string | Another `<await>` tag’s `name`. Use with `client-reorder` to ensure that the current `<await>` will always render alongside or after the named `<await>`. |
|
269
|
-
| `client-reorder` | boolean | If true, anything after this `<await>` will be server-rendered before the Promise completes, then the fulfilled Promise’s result will be updated with client-side JavaScript. |
|
270
|
-
|
271
|
-
Regardless of these attributes, the promise is executed as eagerly as possible. The attributes control how to coordinate rendering with the rest of the page:
|
272
|
-
|
273
|
-
- `client-reorder` prevents `<await>` blocks from delaying the HTTP stream, at the expense of making their rendering rely on client-side JS. Useful for making non-critical page sections not block HTML streaming of important content.
|
274
|
-
|
275
|
-
- Using `show-after` with `client-reorder` ensures that the current `<await>` block will always render simultaneously with or after the named `<await>`. Useful for cutting down on [layout shift](https://web.dev/debug-layout-shifts/). `<@placeholder>`s can help fine-tune the user experience while loading.
|
276
|
-
|
277
|
-
- `timeout` is useful for limiting non-critical content from slowing down the rest of the page too much.
|
278
|
-
|
279
|
-
> **Pro Tip**: When using `timeout`, you can distinguish between `TimeoutError`s and promise rejections by checking the error’s `name`:
|
280
|
-
>
|
281
|
-
> ```marko
|
282
|
-
> <await(slowPromise) timeout=5000>
|
283
|
-
> <@then>Done</@then>
|
284
|
-
> <@catch|err|>
|
285
|
-
> <if(err.name === "TimeoutError")>
|
286
|
-
> Took too long to fetch the data!
|
287
|
-
> </if>
|
288
|
-
> <else>
|
289
|
-
> Promise failed with ${err.message}.
|
290
|
-
> </else>
|
291
|
-
> </@catch>
|
292
|
-
> </await>
|
293
|
-
> ```
|
294
|
-
|
295
|
-
## `<include-text>`
|
296
|
-
|
297
|
-
`<include-text>` inlines text files into a template, escaping HTML syntax characters (`<`, `"`, etc.).
|
298
|
-
|
299
|
-
```marko
|
300
|
-
<include-text('./foo.txt')/>
|
301
|
-
```
|
302
|
-
|
303
|
-
If you do not want escaping, use [`<include-html>`](#include-html) instead.
|
304
|
-
|
305
|
-
## `<include-html>`
|
306
|
-
|
307
|
-
Like `<include-text>`, `<include-html>` inlines the contents of a file. However, this tag **does _not_ escape** special HTML characters.
|
308
|
-
|
309
|
-
```marko
|
310
|
-
<include-html('./foo.html')/>
|
311
|
-
```
|
312
|
-
|
313
|
-
## `<html-comment>`
|
314
|
-
|
315
|
-
Marko removes HTML comment tags from its output. But if you need comments in the output, that’s what `<html-comment>` is for:
|
316
|
-
|
317
|
-
```marko
|
318
|
-
<html-comment>[if IE]><script src="html-shiv.js"></script><![endif]</html-comment>
|
319
|
-
```
|
320
|
-
|
321
|
-
…becomes:
|
322
|
-
|
323
|
-
```html
|
324
|
-
<!--[if IE]><script src="html-shiv.js"></script><![endif]-->
|
325
|
-
```
|