luci-base: ui.js: implement Textarea widget

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2019-08-19 15:04:16 +02:00
parent 276aa89be3
commit afd361e368

View file

@ -146,6 +146,61 @@ var UITextfield = UIElement.extend({
}
});
var UITextarea = UIElement.extend({
__init__: function(value, options) {
this.value = value;
this.options = Object.assign({
optional: true,
wrap: false,
cols: null,
rows: null
}, options);
},
render: function() {
var frameEl = E('div', { 'id': this.options.id }),
value = (this.value != null) ? String(this.value) : '';
frameEl.appendChild(E('textarea', {
'id': this.options.id ? 'widget.' + this.options.id : null,
'name': this.options.name,
'class': 'cbi-input-textarea',
'readonly': this.options.readonly ? '' : null,
'placeholder': this.options.placeholder,
'style': !this.options.cols ? 'width:100%' : null,
'cols': this.options.cols,
'rows': this.options.rows,
'wrap': this.options.wrap ? '' : null
}, [ value ]));
if (this.options.monospace)
frameEl.firstElementChild.style.fontFamily = 'monospace';
return this.bind(frameEl);
},
bind: function(frameEl) {
var inputEl = frameEl.firstElementChild;
this.node = frameEl;
this.setUpdateEvents(inputEl, 'keyup', 'blur');
this.setChangeEvents(inputEl, 'change');
L.dom.bindClassInstance(frameEl, this);
return frameEl;
},
getValue: function() {
return this.node.firstElementChild.value;
},
setValue: function(value) {
this.node.firstElementChild.value = value;
}
});
var UICheckbox = UIElement.extend({
__init__: function(value, options) {
this.value = value;
@ -2106,6 +2161,7 @@ return L.Class.extend({
/* Widgets */
Textfield: UITextfield,
Textarea: UITextarea,
Checkbox: UICheckbox,
Select: UISelect,
Dropdown: UIDropdown,