hyper-html-api 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/conformance/MANIFEST.json +2 -2
- package/conformance/cases/no-data-list-skipped.expected.json +6 -0
- package/conformance/cases/no-data-list-skipped.html +1 -0
- package/conformance/cases/no-data-list-skipped.meta +4 -0
- package/conformance/cases/no-data-list-skipped.parsed.json +3 -0
- package/conformance/cases/no-data-list-skipped.rules +1 -0
- package/conformance/cases/no-data-text-projected.expected.json +3 -0
- package/conformance/cases/no-data-text-projected.html +1 -0
- package/conformance/cases/no-data-text-projected.meta +4 -0
- package/conformance/cases/no-data-text-projected.parsed.json +3 -0
- package/conformance/cases/no-data-text-projected.rules +1 -0
- package/conformance/cases/props-type-is-attribute.expected.json +5 -0
- package/conformance/cases/props-type-is-attribute.meta +4 -0
- package/conformance/cases/write-attr-app-scheme.after.html +1 -0
- package/conformance/cases/write-attr-app-scheme.after.json +3 -0
- package/conformance/cases/write-attr-app-scheme.data.json +1 -0
- package/conformance/cases/write-attr-app-scheme.html +1 -0
- package/conformance/cases/write-attr-app-scheme.meta +4 -0
- package/conformance/cases/write-attr-app-scheme.write.json +4 -0
- package/conformance/cases/write-attr-href.after.html +1 -0
- package/conformance/cases/write-attr-href.after.json +3 -0
- package/conformance/cases/write-attr-href.data.json +1 -0
- package/conformance/cases/write-attr-href.html +1 -0
- package/conformance/cases/write-attr-href.meta +4 -0
- package/conformance/cases/write-attr-href.write.json +4 -0
- package/conformance/cases/write-checked-false.after.html +1 -0
- package/conformance/cases/write-checked-false.after.json +3 -0
- package/conformance/cases/write-checked-false.data.json +1 -0
- package/conformance/cases/write-checked-false.html +1 -0
- package/conformance/cases/write-checked-false.meta +4 -0
- package/conformance/cases/write-checked-false.write.json +4 -0
- package/conformance/cases/write-checked-true.after.html +1 -0
- package/conformance/cases/write-checked-true.after.json +3 -0
- package/conformance/cases/write-checked-true.data.json +1 -0
- package/conformance/cases/write-checked-true.html +1 -0
- package/conformance/cases/write-checked-true.meta +4 -0
- package/conformance/cases/write-checked-true.write.json +4 -0
- package/conformance/cases/write-crlf-multi.after.html +12 -0
- package/conformance/cases/write-crlf-multi.after.json +8 -0
- package/conformance/cases/write-crlf-multi.data.json +1 -0
- package/conformance/cases/write-crlf-multi.html +12 -0
- package/conformance/cases/write-crlf-multi.meta +4 -0
- package/conformance/cases/write-crlf-multi.write.json +4 -0
- package/conformance/cases/write-fallback-implied.after.html +1 -0
- package/conformance/cases/write-fallback-implied.after.json +3 -0
- package/conformance/cases/write-fallback-implied.data.json +1 -0
- package/conformance/cases/write-fallback-implied.html +1 -0
- package/conformance/cases/write-fallback-implied.meta +4 -0
- package/conformance/cases/write-fallback-implied.write.json +4 -0
- package/conformance/cases/write-flatten.after.html +1 -0
- package/conformance/cases/write-flatten.after.json +3 -0
- package/conformance/cases/write-flatten.data.json +1 -0
- package/conformance/cases/write-flatten.html +1 -0
- package/conformance/cases/write-flatten.meta +4 -0
- package/conformance/cases/write-flatten.write.json +4 -0
- package/conformance/cases/write-list-empty-no-seed.data.json +1 -0
- package/conformance/cases/write-list-empty-no-seed.error.json +8 -0
- package/conformance/cases/write-list-empty-no-seed.html +1 -0
- package/conformance/cases/write-list-empty-no-seed.meta +4 -0
- package/conformance/cases/write-list-grow-from-template.after.html +1 -0
- package/conformance/cases/write-list-grow-from-template.after.json +5 -0
- package/conformance/cases/write-list-grow-from-template.data.json +1 -0
- package/conformance/cases/write-list-grow-from-template.html +1 -0
- package/conformance/cases/write-list-grow-from-template.meta +4 -0
- package/conformance/cases/write-list-grow-from-template.write.json +4 -0
- package/conformance/cases/write-list-object-clone.after.html +1 -0
- package/conformance/cases/write-list-object-clone.after.json +12 -0
- package/conformance/cases/write-list-object-clone.data.json +1 -0
- package/conformance/cases/write-list-object-clone.html +1 -0
- package/conformance/cases/write-list-object-clone.meta +4 -0
- package/conformance/cases/write-list-object-clone.write.json +4 -0
- package/conformance/cases/write-list-scalar-grow.after.html +4 -0
- package/conformance/cases/write-list-scalar-grow.after.json +7 -0
- package/conformance/cases/write-list-scalar-grow.data.json +1 -0
- package/conformance/cases/write-list-scalar-grow.html +4 -0
- package/conformance/cases/write-list-scalar-grow.meta +4 -0
- package/conformance/cases/write-list-scalar-grow.write.json +4 -0
- package/conformance/cases/write-list-scalar-shrink.after.html +4 -0
- package/conformance/cases/write-list-scalar-shrink.after.json +5 -0
- package/conformance/cases/write-list-scalar-shrink.data.json +1 -0
- package/conformance/cases/write-list-scalar-shrink.html +4 -0
- package/conformance/cases/write-list-scalar-shrink.meta +4 -0
- package/conformance/cases/write-list-scalar-shrink.write.json +4 -0
- package/conformance/cases/write-list-shrink-zero.after.html +1 -0
- package/conformance/cases/write-list-shrink-zero.after.json +3 -0
- package/conformance/cases/write-list-shrink-zero.data.json +1 -0
- package/conformance/cases/write-list-shrink-zero.html +1 -0
- package/conformance/cases/write-list-shrink-zero.meta +4 -0
- package/conformance/cases/write-list-shrink-zero.write.json +4 -0
- package/conformance/cases/write-no-data-kept.after.html +1 -0
- package/conformance/cases/write-no-data-kept.after.json +3 -0
- package/conformance/cases/write-no-data-kept.data.json +1 -0
- package/conformance/cases/write-no-data-kept.html +1 -0
- package/conformance/cases/write-no-data-kept.meta +4 -0
- package/conformance/cases/write-no-data-kept.write.json +4 -0
- package/conformance/cases/write-no-rules-tag.data.json +1 -0
- package/conformance/cases/write-no-rules-tag.error.json +6 -0
- package/conformance/cases/write-no-rules-tag.html +1 -0
- package/conformance/cases/write-no-rules-tag.meta +4 -0
- package/conformance/cases/write-noop.after.html +3 -0
- package/conformance/cases/write-noop.after.json +3 -0
- package/conformance/cases/write-noop.data.json +1 -0
- package/conformance/cases/write-noop.html +3 -0
- package/conformance/cases/write-noop.meta +4 -0
- package/conformance/cases/write-noop.write.json +4 -0
- package/conformance/cases/write-outerhtml-unchanged.after.html +1 -0
- package/conformance/cases/write-outerhtml-unchanged.after.json +3 -0
- package/conformance/cases/write-outerhtml-unchanged.data.json +1 -0
- package/conformance/cases/write-outerhtml-unchanged.html +1 -0
- package/conformance/cases/write-outerhtml-unchanged.meta +4 -0
- package/conformance/cases/write-outerhtml-unchanged.write.json +4 -0
- package/conformance/cases/write-readonly-changed.data.json +1 -0
- package/conformance/cases/write-readonly-changed.error.json +6 -0
- package/conformance/cases/write-readonly-changed.html +1 -0
- package/conformance/cases/write-readonly-changed.meta +4 -0
- package/conformance/cases/write-readonly-unchanged.after.html +1 -0
- package/conformance/cases/write-readonly-unchanged.after.json +4 -0
- package/conformance/cases/write-readonly-unchanged.data.json +1 -0
- package/conformance/cases/write-readonly-unchanged.html +1 -0
- package/conformance/cases/write-readonly-unchanged.meta +4 -0
- package/conformance/cases/write-readonly-unchanged.write.json +4 -0
- package/conformance/cases/write-refused-animate.data.json +1 -0
- package/conformance/cases/write-refused-animate.error.json +11 -0
- package/conformance/cases/write-refused-animate.html +1 -0
- package/conformance/cases/write-refused-animate.meta +4 -0
- package/conformance/cases/write-refused-attr-name.data.json +1 -0
- package/conformance/cases/write-refused-attr-name.error.json +11 -0
- package/conformance/cases/write-refused-attr-name.html +1 -0
- package/conformance/cases/write-refused-attr-name.meta +4 -0
- package/conformance/cases/write-refused-data-url.data.json +1 -0
- package/conformance/cases/write-refused-data-url.error.json +11 -0
- package/conformance/cases/write-refused-data-url.html +1 -0
- package/conformance/cases/write-refused-data-url.meta +4 -0
- package/conformance/cases/write-refused-innerhtml.data.json +1 -0
- package/conformance/cases/write-refused-innerhtml.error.json +11 -0
- package/conformance/cases/write-refused-innerhtml.html +1 -0
- package/conformance/cases/write-refused-innerhtml.meta +4 -0
- package/conformance/cases/write-refused-javascript-url.data.json +1 -0
- package/conformance/cases/write-refused-javascript-url.error.json +11 -0
- package/conformance/cases/write-refused-javascript-url.html +1 -0
- package/conformance/cases/write-refused-javascript-url.meta +4 -0
- package/conformance/cases/write-refused-list-removes-rules-tag.data.json +1 -0
- package/conformance/cases/write-refused-list-removes-rules-tag.error.json +11 -0
- package/conformance/cases/write-refused-list-removes-rules-tag.html +1 -0
- package/conformance/cases/write-refused-list-removes-rules-tag.meta +4 -0
- package/conformance/cases/write-refused-multiple.data.json +1 -0
- package/conformance/cases/write-refused-multiple.error.json +15 -0
- package/conformance/cases/write-refused-multiple.html +1 -0
- package/conformance/cases/write-refused-multiple.meta +4 -0
- package/conformance/cases/write-refused-onclick.data.json +1 -0
- package/conformance/cases/write-refused-onclick.error.json +11 -0
- package/conformance/cases/write-refused-onclick.html +1 -0
- package/conformance/cases/write-refused-onclick.meta +4 -0
- package/conformance/cases/write-refused-rules-tag-ancestor.data.json +1 -0
- package/conformance/cases/write-refused-rules-tag-ancestor.error.json +11 -0
- package/conformance/cases/write-refused-rules-tag-ancestor.html +1 -0
- package/conformance/cases/write-refused-rules-tag-ancestor.meta +4 -0
- package/conformance/cases/write-refused-script.data.json +1 -0
- package/conformance/cases/write-refused-script.error.json +11 -0
- package/conformance/cases/write-refused-script.html +1 -0
- package/conformance/cases/write-refused-script.meta +4 -0
- package/conformance/cases/write-shape-mismatch.data.json +1 -0
- package/conformance/cases/write-shape-mismatch.error.json +12 -0
- package/conformance/cases/write-shape-mismatch.html +1 -0
- package/conformance/cases/write-shape-mismatch.meta +4 -0
- package/conformance/cases/write-text-basic.after.html +3 -0
- package/conformance/cases/write-text-basic.after.json +3 -0
- package/conformance/cases/write-text-basic.data.json +1 -0
- package/conformance/cases/write-text-basic.html +3 -0
- package/conformance/cases/write-text-basic.meta +4 -0
- package/conformance/cases/write-text-basic.write.json +4 -0
- package/conformance/cases/write-text-escape.after.html +1 -0
- package/conformance/cases/write-text-escape.after.json +3 -0
- package/conformance/cases/write-text-escape.data.json +1 -0
- package/conformance/cases/write-text-escape.html +1 -0
- package/conformance/cases/write-text-escape.meta +4 -0
- package/conformance/cases/write-text-escape.write.json +4 -0
- package/conformance/cases/write-text-null-clears.after.html +1 -0
- package/conformance/cases/write-text-null-clears.after.json +3 -0
- package/conformance/cases/write-text-null-clears.data.json +1 -0
- package/conformance/cases/write-text-null-clears.html +1 -0
- package/conformance/cases/write-text-null-clears.meta +4 -0
- package/conformance/cases/write-text-null-clears.write.json +4 -0
- package/conformance/cases/write-type-attribute.after.html +1 -0
- package/conformance/cases/write-type-attribute.after.json +3 -0
- package/conformance/cases/write-type-attribute.data.json +1 -0
- package/conformance/cases/write-type-attribute.html +1 -0
- package/conformance/cases/write-type-attribute.meta +4 -0
- package/conformance/cases/write-type-attribute.write.json +4 -0
- package/conformance/cases/write-unknown-key.data.json +1 -0
- package/conformance/cases/write-unknown-key.error.json +11 -0
- package/conformance/cases/write-unknown-key.html +3 -0
- package/conformance/cases/write-unknown-key.meta +4 -0
- package/conformance/cases/write-unmatched.data.json +1 -0
- package/conformance/cases/write-unmatched.error.json +14 -0
- package/conformance/cases/write-unmatched.html +1 -0
- package/conformance/cases/write-unmatched.meta +4 -0
- package/conformance/write-policy.json +78 -0
- package/dist/hyper-html-api.engine.min.js +1 -1
- package/dist/hyper-html-api.min.js +5 -4
- package/dist/hyper-html-api.upgrade.min.js +2 -2
- package/package.json +5 -3
- package/packed-contract.json +1 -0
- package/src/adapters/cheerio.js +109 -10
- package/src/adapters/dom.js +191 -0
- package/src/dom-api.js +17 -6
- package/src/engine/apply.js +16 -2
- package/src/engine/errors.js +25 -0
- package/src/engine/extract.js +3 -0
- package/src/engine/index.js +4 -1
- package/src/engine/splice.js +118 -0
- package/src/engine/write-plan.js +52 -0
- package/src/engine/write-policy.js +136 -0
- package/src/lib/content-dom.js +110 -0
- package/src/lib/region-capabilities.js +71 -0
- package/src/write.js +29 -0
- package/conformance/cases/props-type-is-node-type.expected.json +0 -5
- package/conformance/cases/props-type-is-node-type.meta +0 -11
- /package/conformance/cases/{props-type-is-node-type.html → props-type-is-attribute.html} +0 -0
- /package/conformance/cases/{props-type-is-node-type.parsed.json → props-type-is-attribute.parsed.json} +0 -0
- /package/conformance/cases/{props-type-is-node-type.rules → props-type-is-attribute.rules} +0 -0
package/README.md
CHANGED
|
@@ -48,6 +48,16 @@ extracts data and `set(data)` writes it back. Token resolution is
|
|
|
48
48
|
document-scoped, so a tag mounted in `<head>` is found even when `bind` is given
|
|
49
49
|
a body or form element; `get()`/`set()` stay scoped to that element.
|
|
50
50
|
|
|
51
|
+
DOM bound operations exclude `no-data` and `editor-ui` regions by default.
|
|
52
|
+
Both bare attributes and `clay` tokens work, and the exclusion is inherited by
|
|
53
|
+
descendants. The filtered structure is shared by selectors, text and HTML
|
|
54
|
+
reads, cloning, row matching, and insertion coordinates. Writes still update
|
|
55
|
+
the corresponding live authored nodes. Pass `{ exclude: '.selector' }` to add a
|
|
56
|
+
consumer exclusion, or `{ exclude: null }` for an explicit raw view such as a
|
|
57
|
+
CMS reading its own form controls. The generic engine remains adapter neutral.
|
|
58
|
+
The Cheerio adapter rejects semantic `exclude` options because it does not yet
|
|
59
|
+
implement the same structural contract.
|
|
60
|
+
|
|
51
61
|
## Upgrade
|
|
52
62
|
|
|
53
63
|
A page that was copied from a template can pull in the template's newer
|
|
@@ -120,6 +130,34 @@ const { rules } = findRulesIn(cheerioAdapter, $.root(), 'api')
|
|
|
120
130
|
const data = extract(cheerioAdapter, $.root(), rules)
|
|
121
131
|
```
|
|
122
132
|
|
|
133
|
+
### Writing content back
|
|
134
|
+
|
|
135
|
+
`writeDocument` applies JSON to a document's source through its own rules tag, and
|
|
136
|
+
returns the new source. It is the write half of a local data API: hyperclay-local's
|
|
137
|
+
`POST /_/api/<file>` and HTML Clay's Go port both follow it, pinned by the `face: write`
|
|
138
|
+
conformance cases.
|
|
139
|
+
|
|
140
|
+
```js
|
|
141
|
+
import { writeDocument } from 'hyper-html-api/write'
|
|
142
|
+
import * as cheerio from 'cheerio'
|
|
143
|
+
|
|
144
|
+
const { html, changed, spliced } = writeDocument(cheerio.load, src, { title: 'Groceries' })
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
- **Content only.** Every write goes through the policy in `conformance/write-policy.json`.
|
|
148
|
+
Text is written as text. A write refused by the policy (script and style targets,
|
|
149
|
+
`on*` handlers, `javascript:`/`vbscript:`/`data:` URLs, `@innerHTML`, `@outerHTML`, the
|
|
150
|
+
save and region markers) throws `WriteRefused`, which lists every refusal. Nothing is
|
|
151
|
+
written.
|
|
152
|
+
- **Strict keys.** An unknown key or a rule whose selector matches nothing throws
|
|
153
|
+
`WriteRejected` before anything is applied. The document must have a rules tag for the
|
|
154
|
+
token (default `api`), or `NoRulesTag` is thrown.
|
|
155
|
+
- **Byte-preserving.** Only the elements that changed are re-serialized and spliced into
|
|
156
|
+
the original source. The result is verified by reparsing, and when that proof fails the
|
|
157
|
+
whole document is rendered instead (`spliced: false`). A body that changes nothing
|
|
158
|
+
returns the source untouched with `changed: false`.
|
|
159
|
+
- `no-data` and `editor-ui` regions are invisible to writes, as they are to reads.
|
|
160
|
+
|
|
123
161
|
## License
|
|
124
162
|
|
|
125
163
|
MIT-0 (MIT No Attribution).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<ul><li editor-ui>Add</li><li>A</li><li>B</li></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{items:"li[]"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<p id="x">Hi <span no-data>secret</span>there</p>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{t:"#x"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{h:"#a@href"}</script><a id="a" href="obsidian://open?vault=x">x</a>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"h":"obsidian://open?vault=x"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{h:"#a@href"}</script><a id=a href="/">x</a>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{h:"#a@href"}</script><a id="a" href="https://example.com/?a=1&b=2">x</a>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"h":"https://example.com/?a=1&b=2"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{h:"#a@href"}</script><a id=a href="/">x</a>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{d:"#c@checked"}</script><input id="c" type="checkbox">
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"d":false}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{d:"#c@checked"}</script><input id=c type=checkbox checked>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{d:"#c@checked"}</script><input id="c" type="checkbox" checked="">
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"d":true}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{d:"#c@checked"}</script><input id=c type=checkbox>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang=en>
|
|
3
|
+
<head><script data-rules-name="api" data-rules-version="1">{title:"h1",link:"#a@href",items:"li[]"}</script></head>
|
|
4
|
+
<body>
|
|
5
|
+
<h1 class="x">World</h1>
|
|
6
|
+
<p>© 2026<br/></p>
|
|
7
|
+
<a id="a" href="/next">x</a>
|
|
8
|
+
<ul>
|
|
9
|
+
<li>A</li>
|
|
10
|
+
<li>B</li></ul>
|
|
11
|
+
</body>
|
|
12
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"title":"World","link":"/next","items":["A","B"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang=en>
|
|
3
|
+
<head><script data-rules-name="api" data-rules-version="1">{title:"h1",link:"#a@href",items:"li[]"}</script></head>
|
|
4
|
+
<body>
|
|
5
|
+
<h1 class='x'>Hello</h1>
|
|
6
|
+
<p>© 2026<br/></p>
|
|
7
|
+
<a id=a href="/">x</a>
|
|
8
|
+
<ul>
|
|
9
|
+
<li>A</li>
|
|
10
|
+
</ul>
|
|
11
|
+
</body>
|
|
12
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<html lang="en"><head><script data-rules-name="api" data-rules-version="1">{l:"html@lang"}</script></head><body><p>x</p></body></html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"l":"en"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{l:"html@lang"}</script><p>x</p>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{t:"#l"}</script><li id="l">Buy bread</li>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"t":"Buy bread"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{t:"#l"}</script><li id=l><input type=checkbox> Buy milk</li>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"items":["A"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{items:"li[]"}</script><ul></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{items:"li[]"}</script><ul><li>First</li><li cms-template=""></li></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"items":["First"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{items:"li[]"}</script><ul><li cms-template></li></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{rows:["li",{name:"b",n:"i"}]}</script><ul><li id="r1"><b>A</b><i>1</i></li><li><b>B</b><i>2</i></li></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"rows":[{"name":"A","n":"1"},{"name":"B","n":"2"}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{rows:["li",{name:"b",n:"i"}]}</script><ul><li id=r1><b>A</b><i>1</i></li></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"items":["A","B","C"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"items":["B"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{items:"li[]"}</script><ul></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"items":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{items:"li[]"}</script><ul><li>A</li></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{t:"#x"}</script><p id="x">Bye<span no-data="">UI</span></p>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"t":"Bye"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{t:"#x"}</script><p id=x>Hi <span no-data>UI</span></p>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<p>x</p>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"title":"Hello"}
|