@ulb-darmstadt/shacl-form
Version:
SHACL form generator
45 lines (39 loc) • 1.6 kB
text/typescript
import { DefaultTheme } from './default'
import { Term } from '@rdfjs/types'
import { ShaclPropertyTemplate } from '../property-template'
import { Editor } from '../theme'
import bootstrap from 'bootstrap/dist/css/bootstrap.min.css'
import css from './bootstrap.css?raw'
export class BootstrapTheme extends DefaultTheme {
constructor() {
super(bootstrap + '\n' + css)
}
apply(root: HTMLFormElement): void {
super.apply(root)
root.dataset.bsTheme = 'light'
}
createDefaultTemplate(label: string, value: Term | null, required: boolean, editor: Editor, template?: ShaclPropertyTemplate | undefined): HTMLElement {
const result = super.createDefaultTemplate(label, value, required, editor, template)
if (editor.type !== 'checkbox') {
result.classList.add('form-floating')
if (editor.tagName === 'SELECT') {
editor.classList.add('form-select')
} else {
editor.classList.add('form-control')
}
}
const labelElem = result.querySelector('label')
labelElem?.classList.add('form-label')
if (labelElem?.title) {
result.dataset.description = labelElem.title
labelElem.removeAttribute('title')
}
result.prepend(editor)
return result
}
createButton(label: string, primary: boolean): HTMLElement {
const button = super.createButton(label, primary)
button.classList.add('btn', primary ? 'btn-primary' : 'btn-outline-secondary')
return button
}
}