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/shader/DoricScrollerNode.ts
2021-04-19 17:44:04 +08:00

70 lines
2.3 KiB
TypeScript

import { LEFT, RIGHT, CENTER_X, CENTER_Y, TOP, BOTTOM, toPixelString, DoricSuperNode, DVModel, DoricViewNode } from "./DoricViewNode";
export class DoricScrollerNode extends DoricSuperNode {
childViewId: string = ""
childNode?: DoricViewNode
build() {
const ret = document.createElement('div')
ret.style.overflow = "scroll"
return ret
}
blendProps(v: HTMLElement, propName: string, prop: any) {
if (propName === 'content') {
this.childViewId = prop
} else {
super.blendProps(v, propName, prop)
}
}
blendSubNode(model: DVModel): void {
this.childNode?.blend(model.props)
}
getSubNodeById(viewId: string) {
return viewId === this.childViewId ? this.childNode : undefined
}
onBlending() {
super.onBlending()
const model = this.getSubModel(this.childViewId)
if (model === undefined) {
return
}
if (this.childNode) {
if (this.childNode.viewId === this.childViewId) {
///skip
} else {
if (this.reusable && this.childNode.viewType === model.type) {
this.childNode.viewId = model.id
this.childNode.blend(model.props)
} else {
this.view.removeChild(this.childNode.view)
const childNode = DoricViewNode.create(this.context, model.type)
if (childNode === undefined) {
return
}
childNode.viewId = model.id
childNode.init(this)
childNode.blend(model.props)
this.view.appendChild(childNode.view)
this.childNode = childNode
}
}
} else {
const childNode = DoricViewNode.create(this.context, model.type)
if (childNode === undefined) {
return
}
childNode.viewId = model.id
childNode.init(this)
childNode.blend(model.props)
this.view.appendChild(childNode.view)
this.childNode = childNode
}
}
onBlended() {
super.onBlended()
this.childNode?.onBlended()
}
}