From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 908531FF16A for ; Fri, 13 Sep 2024 15:10:35 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D2E2F13385; Fri, 13 Sep 2024 15:10:38 +0200 (CEST) From: Gabriel Goller To: pbs-devel@lists.proxmox.com Date: Fri, 13 Sep 2024 15:10:29 +0200 Message-Id: <20240913131033.396324-4-g.goller@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240913131033.396324-1-g.goller@proxmox.com> References: <20240913131033.396324-1-g.goller@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.044 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH widget-toolkit v4 3/7] form: add support for multiline textarea X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" This adds support for a editable multiline textarea in the ObjectGrid. Now we can add a textarea row, which will open a textarea popup, and encode the multi-line text into an base64 string (with utf8 support). Signed-off-by: Gabriel Goller --- src/Makefile | 1 + src/form/TextAreaField.js | 60 +++++++++++++++++++++++++++++++++++++++ src/grid/ObjectGrid.js | 29 +++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 src/form/TextAreaField.js diff --git a/src/Makefile b/src/Makefile index 3c2fd4b0eb81..aa81bef17c84 100644 --- a/src/Makefile +++ b/src/Makefile @@ -31,6 +31,7 @@ JSSRC= \ form/ExpireDate.js \ form/IntegerField.js \ form/TextField.js \ + form/TextAreaField.js \ form/VlanField.js \ form/DateTimeField.js \ form/Checkbox.js \ diff --git a/src/form/TextAreaField.js b/src/form/TextAreaField.js new file mode 100644 index 000000000000..3182e4c863be --- /dev/null +++ b/src/form/TextAreaField.js @@ -0,0 +1,60 @@ +Ext.define('Proxmox.form.field.Textareafield', { + extend: 'Ext.form.field.TextArea', + alias: ['widget.proxmoxtextareafield'], + + config: { + skipEmptyText: false, + deleteEmpty: false, + trimValue: false, + editable: true, + width: 600, + height: 400, + scrollable: 'y', + }, + + setValue: function(value) { + // We want to edit the decoded version of the text + this.callParent([Proxmox.Utils.base64ToUtf8(value)]); + }, + + processRawValue: function(value) { + // The field could contain multi-line values + return Proxmox.Utils.utf8ToBase64(value); + }, + + getSubmitData: function() { + let me = this, + data = null, + val; + if (!me.disabled && me.submitValue && !me.isFileUpload()) { + val = me.getSubmitValue(); + if (val !== null) { + data = {}; + data[me.getName()] = val; + } else if (me.getDeleteEmpty()) { + data = {}; + data.delete = me.getName(); + } + } + return data; + }, + + getSubmitValue: function() { + let me = this; + + let value = this.processRawValue(this.getRawValue()); + if (me.getTrimValue() && typeof value === 'string') { + value = value.trim(); + } + if (value !== '') { + return value; + } + + return me.getSkipEmptyText() ? null: value; + }, + + setAllowBlank: function(allowBlank) { + this.allowBlank = allowBlank; + this.validate(); + }, +}); diff --git a/src/grid/ObjectGrid.js b/src/grid/ObjectGrid.js index b355d6dee2be..30e4ce4b01b6 100644 --- a/src/grid/ObjectGrid.js +++ b/src/grid/ObjectGrid.js @@ -182,6 +182,35 @@ Ext.define('Proxmox.grid.ObjectGrid', { }; }, + add_textareafield_row: function(name, text, opts) { + let me = this; + + opts = opts || {}; + me.rows = me.rows || {}; + + me.rows[name] = { + required: true, + defaultValue: "", + header: text, + renderer: function(value) { + return Ext.htmlEncode(Proxmox.Utils.base64ToUtf8(value)); + }, + editor: { + xtype: 'proxmoxWindowEdit', + subject: text, + onlineHelp: opts.onlineHelp, + fieldDefaults: { + labelWidth: opts.labelWidth || 600, + }, + items: { + xtype: 'proxmoxtextareafield', + name: name, + }, + }, + }; + }, + + editorConfig: {}, // default config passed to editor run_editor: function() { -- 2.39.2 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel