59c77f5f by Adam Heath

Replace now just contains replacements/slotHandler, and defers html

parsing to External.
1 parent 754d6092
...@@ -3,8 +3,9 @@ import Custom from './custom.astro' ...@@ -3,8 +3,9 @@ import Custom from './custom.astro'
3 import Match from './match.astro' 3 import Match from './match.astro'
4 import Node from './node.astro' 4 import Node from './node.astro'
5 import Replace from './replace.astro' 5 import Replace from './replace.astro'
6 import External from './external.astro'
6 7
7 export { Children, Custom, Match, Node, Replace } 8 export { Children, Custom, Match, Node, Replace, External }
8 9
9 import type { NodeType } from 'ultrahtml' 10 import type { NodeType } from 'ultrahtml'
10 type SlotHandler = (string, NodeType) => Promise<Any> 11 type SlotHandler = (string, NodeType) => Promise<Any>
......
1 ---
2 import { parseHtml, createMatcher, findNode } from './html.ts'
3 import Match from './match.astro'
4
5 const { props } = Astro
6 const { debug, replacers, slotHandler } = props
7
8 const adjustmentsCompiled = Object.entries(adjustments).map(([ selector, handler ]) => [ createMatcher(selector), handler ])
9 const adjuster = (node, parent, index) => {
10 for (const [ matcher, handler ] of adjustmentsCompiled) {
11 if (matcher(node, parent, index, false)) {
12 node = handler(node)
13 }
14 }
15 return node
16 }
17
18 const doc = props.node ? props.node : parseHtml(props.html, { adjuster })
19 const node = xpath ? findNode(doc, xpath) : doc
20
21 const nextDebug = debug ? debug - 1 : 0
22 ---
23 <Match node={node} debug={nextDebug} replacers={replacers} slotHandler={slotHandler} adjuster={adjuster}/>
1 --- 1 ---
2 import { walkSync } from 'ultrahtml' 2 import { createMatcher } from './html.ts'
3 import { parseHtml, createMatcher, findNode } from './html.ts' 3 import External from './external.astro'
4 import Match from './match.astro'
5 import type { SlotHandler, Replacements } from './astro.ts' 4 import type { SlotHandler, Replacements } from './astro.ts'
6 5
7 interface Props { 6 interface Props {
...@@ -13,26 +12,13 @@ interface Props { ...@@ -13,26 +12,13 @@ interface Props {
13 } 12 }
14 13
15 const { props } = Astro 14 const { props } = Astro
16 const { html, debug = 0, xpath, replacements = {}, adjustments = {} } = props 15 const { debug = 0, replacements = {}, ...rest } = props
17 16
18 const replacers = Object.entries(replacements).map(([ selector, handler ]) => [ createMatcher(selector), handler ]) 17 const replacers = Object.entries(replacements).map(([ selector, handler ]) => [ createMatcher(selector), handler ])
19 18
20 const adjustmentsCompiled = Object.entries(adjustments).map(([ selector, handler ]) => [ createMatcher(selector), handler ])
21 const adjuster = (node, parent, index) => {
22 for (const [ matcher, handler ] of adjustmentsCompiled) {
23 if (matcher(node, parent, index, false)) {
24 node = handler(node)
25 }
26 }
27 return node
28 }
29
30 const doc = props.node ? props.node : parseHtml(props.html, { adjuster })
31 const node = xpath ? findNode(doc, xpath) : doc
32
33 const slotHandler: SlotHandler = (slotName, node) => { 19 const slotHandler: SlotHandler = (slotName, node) => {
34 return Astro.slots.render(slotName, [ node, { slotHandler, replacers } ] ) 20 return Astro.slots.render(slotName, [ node, { slotHandler, replacers } ] )
35 } 21 }
36 const nextDebug = debug ? debug - 1 : 0 22 const nextDebug = debug ? debug - 1 : 0
37 --- 23 ---
38 <Match node={node} debug={nextDebug} replacers={replacers} slotHandler={slotHandler}/> 24 <External {...rest} debug={nextDebug} replacers={replacers} slotHandler={slotHandler}/>
......