You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

46 lines
1.2 KiB
JavaScript

class UiFileWidget extends Widget {
$el;
constructor(data, renderer) {
super(data, renderer);
this.$el = document.createElement('div');
this.$el.classList.add('widget_col');
this.$el.style.width = this.data.wwidth_t + '%';
this.update(data);
}
update(data) {
super.update(data);
if (!("value" in data)) return;
if (typeof value === 'string')
this.addFile(data.value, 'text', (file) => {
let controls = null;
try {
controls = JSON.parse('[' + file + ']');
} catch (e) {
console.log('JSON parse error in ui_json from ' + data.path);
}
this.#setControls(controls);
});
else this.#setControls(data.value);
}
#setControls(controls){
const children = [];
this.renderer._makeWidgets(children, 'col', controls, true);
this.$el.replaceChildren()
for (const w of children) {
const $w = w.build();
if ($w) this.$el.append($w);
}
}
build() {
return this.$el;
}
}
Renderer.register('ui_file', UiFileWidget);