2
0
mirror of https://github.com/tenrok/BBob.git synced 2026-05-30 15:24:05 +03:00
Files
bbob/examples/vite/src/main.ts
T
Nikolay Kost 16ad5216db feat: react, vue3 and vanilla examples (#242)
* feat: react, vue3 and vanilla examples

* fix: vue3 example

* Create rare-worms-tease.md

* fix: vue3 types

* fix: vue3 ts checks

* fix: vue3 render types

* fix: vue3 component types
2024-07-12 02:35:51 +02:00

79 lines
2.0 KiB
TypeScript

import './style.css'
import typescriptLogo from './typescript.svg'
import viteLogo from '/vite.svg'
import preset from '@bbob/preset-html5'
import html from '@bbob/html'
import { NodeContent } from '@bbob/types'
const myPreset = preset.extend(defTags => ({
...defTags,
// bbcode tags always lowercased
// <span class="my-tag"><span class="avatar"/> <slot></slot></span>
avatar: (node) => {
const avatarNode = {
tag: 'span',
attrs: {
class: 'avatar',
},
content: [],
}
const content: NodeContent[] = []
const nodeContent = node.content || ''
return ({
...node,
tag: 'span',
attrs: {
class: 'my-tag',
},
content: content.concat(avatarNode, nodeContent),
})
}
}))
const bbcode = 'Text [b]bolded[/b] and [avatar]Some Name[/avatar]'
document.querySelector<HTMLDivElement>('#app')!.innerHTML = `
<div>
<a href="https://vitejs.dev" target="_blank">
<img src="${viteLogo}" class="logo" alt="Vite logo" />
</a>
<a href="https://www.typescriptlang.org/" target="_blank">
<img src="${typescriptLogo}" class="logo vanilla" alt="TypeScript logo" />
</a>
<div class="data">
<div class="bbcode">
<h2>Raw BB Code here</h2>
<textarea name="bbcode" id="bbcode" cols="30" rows="10" id="bbcode">${bbcode}</textarea>
</div>
<div class="html">
<h2>Generated HTML here</h2>
<div id="result"></div>
</div>
</div>
</div>
`
document.addEventListener('DOMContentLoaded', () => {
const bbcode: HTMLTextAreaElement | null = document.getElementById('bbcode') as HTMLTextAreaElement
const result = document.getElementById('result')
if (bbcode && result) {
const plugins = [
myPreset()
]
const render = (input: string) => html(input, plugins)
bbcode.addEventListener('input', (e) => {
const target = e?.target as HTMLInputElement
result.innerHTML = render(target?.value)
})
result.innerHTML = render(bbcode?.value)
}
})