waibu-bootstrap
Version:
Bootstrap suport for Waibu Framework
81 lines (75 loc) • 2.76 kB
JavaScript
import { buildFormInput } from './_lib.js'
import { build } from './form-input.js'
export const css = ['waibuExtra.virtual:/tempusDominus/css/tempus-dominus.min.css']
export function scripts (req) {
const items = [
'waibuExtra.virtual:/popperjs/umd/popper.min.js',
'waibuExtra.virtual:/tempusDominus/js/tempus-dominus.min.js'
]
if (req.lang === 'id') items.push('waibuExtra.asset:/js/tempus-dominus-id.js')
return items
}
export function inlineScript (req) {
const { jsonStringify } = this.plugin.app.waibuMpa
const opts = {
display: {
icons: {
time: this.iconset.resolve('clock'),
date: this.iconset.resolve('calendar'),
up: this.iconset.resolve('caretUp'),
down: this.iconset.resolve('caretDown'),
previous: this.iconset.resolve('caretStart'),
next: this.iconset.resolve('caretEnd'),
close: this.iconset.resolve('remove'),
clear: this.iconset.resolve('trash'),
today: this.iconset.resolve('calendarCheck')
},
components: {
seconds: true
},
theme: req.darkMode ? 'dark' : 'light'
},
localization: {
format: 'L LTS'
}
}
const items = [`const tdGlobalOpts = ${jsonStringify(opts, true)}`]
if (req.lang === 'id') {
items.unshift(
'tempusDominus.loadLocale(tempusDominus.locales.id)',
'tempusDominus.locale(tempusDominus.locales.id.name)'
)
}
return items.join('\n')
}
export async function handler (opts, params = {}) {
const { jsonStringify } = this.plugin.app.waibuMpa
this.params.attr['x-ref'] = 'self'
this.params.attr['x-data'] = `{
instance: null,
opts: ${jsonStringify(opts, true)}
}`
this.params.attr['@load.window'] = `
const options = _.merge({}, tdGlobalOpts, opts ?? {})
instance = new tempusDominus.TempusDominus($refs.self, options)
`
await build.call(this, buildFormInput, this.params)
}
async function formDatetime () {
return class FormDatetime extends this.baseFactory {
static css = [...super.css, ...css]
static scripts = [...super.scripts, ...scripts(this.component.req)]
static inlineScript = inlineScript(this.component.req)
build = async () => {
const { set } = this.plugin.lib._
const opts = {}
if (this.params.attr.sideBySide) set(opts, 'display.sideBySide', true)
if (this.params.attr.calendarWeeks) set(opts, 'display.calendarWeeks', true)
set(opts, 'display.buttons.today', true)
set(opts, 'display.buttons.clear', true)
if (this.params.attr.dateRange) set(opts, 'dateRange', true)
await handler.call(this, opts, this.params)
}
}
}
export default formDatetime