summaryrefslogtreecommitdiffhomepage
path: root/modules
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2019-08-19 15:04:16 +0200
committerJo-Philipp Wich <jo@mein.io>2019-08-19 15:04:16 +0200
commitafd361e368808472cee2e8f3a780252d8bd39f36 (patch)
tree0df82450916bbdee6fffc0d5604d40ee1db131a7 /modules
parent276aa89be3f4916d19b22895dfa9872629436fe7 (diff)
luci-base: ui.js: implement Textarea widget
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules')
-rw-r--r--modules/luci-base/htdocs/luci-static/resources/ui.js56
1 files changed, 56 insertions, 0 deletions
diff --git a/modules/luci-base/htdocs/luci-static/resources/ui.js b/modules/luci-base/htdocs/luci-static/resources/ui.js
index e00868171..77cef5396 100644
--- a/modules/luci-base/htdocs/luci-static/resources/ui.js
+++ b/modules/luci-base/htdocs/luci-static/resources/ui.js
@@ -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,