This repository has been archived on 2024-07-22. You can view files and clone it, but cannot push or open issues or pull requests.
Doric/doric-web/src/DoricElement.ts
2021-04-14 16:56:19 +08:00

72 lines
1.6 KiB
TypeScript

import axios from 'axios'
import { loadDoricJSBundle } from './DoricBundleLoader'
import { DoricContext } from './DoricContext'
export class DoricElement extends HTMLElement {
context?: DoricContext
constructor() {
super()
}
get src() {
return this.getAttribute('src') as string
}
get alias() {
return this.getAttribute('alias') as string
}
set src(v: string) {
this.setAttribute('src', v)
}
set alias(v: string) {
this.setAttribute('alias', v)
}
get initData() {
return this.getAttribute('data') as string
}
set initData(v: string) {
this.setAttribute('data', v)
}
connectedCallback() {
if (this.src && this.context === undefined) {
loadDoricJSBundle(this.src).then(result => {
this.load(result)
})
}
}
disconnectedCallback() {
}
adoptedCallback() {
}
attributeChangedCallback() {
}
onDestroy() {
this.context?.onDestroy()
this.context?.teardown()
}
load(content: string) {
this.context = new DoricContext(content)
this.context.init(this.initData)
this.context.onCreate()
const divElement = document.createElement('div')
divElement.style.position = 'relative'
divElement.style.height = '100%'
this.append(divElement)
this.context.rootNode.view = divElement
this.context.build({
width: divElement.offsetWidth,
height: divElement.offsetHeight,
})
this.context.onShow()
}
}