Skip to content

Commit 684534e

Browse files
committed
feat: html component plugin
1 parent 88ffc99 commit 684534e

File tree

6 files changed

+20
-7
lines changed

6 files changed

+20
-7
lines changed

packages/bytemd/src/Element.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,5 +71,5 @@
7171
</tbody>
7272
</table>
7373
{:else if node.type === 'html'}
74-
<HtmlViewer value={node.value} />
74+
<HtmlViewer value={node.value} {plugins} />
7575
{/if}

packages/bytemd/src/Elements.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66
</script>
77

88
{#each nodes as node}
9-
<Element {node} {plugins} plugin={plugins.find(p => p.shouldTransformElement(node))} />
9+
<Element {node} {plugins} plugin={plugins.find(p => p.shouldTransformElement && p.shouldTransformElement(node))} />
1010
{/each}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
<script>
22
import HtmlElements from './HtmlElements.svelte'
33
export let node
4+
export let plugins
45
</script>
56

67
{#if node.type === 'text'}
78
{node.value}
89
{:else if node.type === 'element'}
910
{#if node.tagName === 'p'}
10-
<p align={node.properties.align}><HtmlElements nodes={node.children} /></p>
11+
<p align={node.properties.align}><HtmlElements nodes={node.children} {plugins} /></p>
1112
{:else if node.tagName === 'img'}
1213
<img src={node.properties.src} alt={node.properties.alt} width={node.properties.width} height={node.properties.height} />
1314
{:else if node.tagName === 'a'}
14-
<a href={node.properties.href}><HtmlElements nodes={node.children} /></a>
15+
<a href={node.properties.href}><HtmlElements nodes={node.children} {plugins} /></a>
1516
{/if}
1617
{/if}
Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
<script>
22
import HtmlElement from './HtmlElement.svelte'
33
export let nodes;
4+
export let plugins;
5+
6+
$: findPlugin = (node) => {
7+
return plugins.find(p => p.shouldTransformHtmlElement && p.shouldTransformHtmlElement(node))
8+
}
49
</script>
510

611
{#each nodes as node}
7-
<HtmlElement {node} />
12+
{#if findPlugin(node)}
13+
<svelte:component this={findPlugin(node).component} {...node}></svelte:component>
14+
{:else}
15+
<HtmlElement {node} {plugins} />
16+
{/if}
817
{/each}

packages/bytemd/src/HtmlViewer.svelte

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
import HtmlElements from './HtmlElements.svelte';
55
66
export let value;
7+
export let plugins;
8+
79
const parser = unified().use(html, { fragment: true });
810
$: ast = parser.parse(value);
911
// $: console.log(ast);
1012
</script>
1113

12-
<HtmlElements nodes={ast.children} />
14+
<HtmlElements nodes={ast.children} {plugins} />

packages/bytemd/src/index.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { Node } from 'unist';
33
import { SvelteComponent } from 'svelte';
44

55
export interface Plugin {
6-
shouldTransformElement(node: Node): boolean;
6+
shouldTransformElement?(node: Node): boolean;
7+
shouldTransformHtmlElement?(node: Node): boolean;
78
component: typeof SvelteComponent;
89
}
910

0 commit comments

Comments
 (0)