39 lines
1.1 KiB
TypeScript
39 lines
1.1 KiB
TypeScript
import m from "mithril"
|
|
|
|
|
|
interface iTabDef {
|
|
tabname: string
|
|
tabview: m.ComponentTypes
|
|
}
|
|
|
|
type TabDef = [string, m.ComponentTypes]
|
|
|
|
export interface iTabView {
|
|
tabviews: TabDef[]
|
|
}
|
|
|
|
export const TabView: m.ClosureComponent<iTabView> = (vnode) => {
|
|
let tv = {}
|
|
vnode.attrs.tabviews.forEach((item: TabDef) => {
|
|
tv[item[0]] = item[1]
|
|
})
|
|
|
|
let currTab = ""
|
|
function changeview(e) {
|
|
currTab = e.target.value
|
|
}
|
|
return {
|
|
view: (vnode) => {
|
|
return m("div", {style: {display: 'grid', 'grid-template-rows': "auto 1fr", height: '100%'}}, [
|
|
m("div.w3-bar.w3-theme.w3-border-bottom.w3-border-theme.w3-theme-action.w3-small",
|
|
Object.keys(tv).map((key) => {
|
|
if (currTab == "") {currTab = key}
|
|
let c = (key == currTab) ? ".w3-theme-light" : ""
|
|
return m("button.w3-bar-item.w3-button" + c, {value: key, onclick: changeview}, key)
|
|
})
|
|
),
|
|
m("div", m(tv[currTab]))
|
|
])
|
|
}
|
|
}
|
|
} |