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 A9C921FF16F for ; Fri, 15 Nov 2024 15:02:24 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 9FF9915A5D; Fri, 15 Nov 2024 15:01:55 +0100 (CET) From: Markus Frank To: pve-devel@lists.proxmox.com Date: Fri, 15 Nov 2024 15:00:34 +0100 Message-Id: <20241115140037.191682-10-m.frank@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20241115140037.191682-1-m.frank@proxmox.com> References: <20241115140037.191682-1-m.frank@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.073 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 POISEN_SPAM_PILL_4 0.1 random spam to be learned in bayes SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pve-devel] [PATCH manager v12 09/12] ui: add edit window for dir mappings X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" Signed-off-by: Markus Frank --- www/manager6/Makefile | 1 + www/manager6/window/DirMapEdit.js | 230 ++++++++++++++++++++++++++++++ 2 files changed, 231 insertions(+) create mode 100644 www/manager6/window/DirMapEdit.js diff --git a/www/manager6/Makefile b/www/manager6/Makefile index d623dfb9..74c6b0e1 100644 --- a/www/manager6/Makefile +++ b/www/manager6/Makefile @@ -138,6 +138,7 @@ JSSRC= \ window/TreeSettingsEdit.js \ window/PCIMapEdit.js \ window/USBMapEdit.js \ + window/DirMapEdit.js \ window/GuestImport.js \ ha/Fencing.js \ ha/GroupEdit.js \ diff --git a/www/manager6/window/DirMapEdit.js b/www/manager6/window/DirMapEdit.js new file mode 100644 index 00000000..126d7c57 --- /dev/null +++ b/www/manager6/window/DirMapEdit.js @@ -0,0 +1,230 @@ +Ext.define('PVE.window.DirMapEditWindow', { + extend: 'Proxmox.window.Edit', + + mixins: ['Proxmox.Mixin.CBind'], + + cbindData: function(initialConfig) { + let me = this; + me.isCreate = !me.name; + me.method = me.isCreate ? 'POST' : 'PUT'; + me.hideMapping = !!me.entryOnly; + me.hideComment = me.name && !me.entryOnly; + me.hideNodeSelector = me.nodename || me.entryOnly; + me.hideNode = !me.nodename || !me.hideNodeSelector; + return { + name: me.name, + nodename: me.nodename, + }; + }, + + submitUrl: function(_url, data) { + let me = this; + let name = me.isCreate ? '' : me.name; + return `/cluster/mapping/dir/${name}`; + }, + + title: gettext('Add Dir mapping'), + + onlineHelp: 'resource_mapping', + + method: 'POST', + + controller: { + xclass: 'Ext.app.ViewController', + + onGetValues: function(values) { + let me = this; + let view = me.getView(); + values.node ??= view.nodename; + + let name = values.name; + let description = values.description; + let xattr = values.xattr; + let acl = values.acl; + let deletes = values.delete; + + delete values.description; + delete values.name; + delete values.xattr; + delete values.acl; + delete values.delete; + + if (PVE.Parser.parseBoolean(values.submounts)) { + values.submounts = 1; + } + + let map = []; + if (me.originalMap) { + map = PVE.Parser.filterPropertyStringList(me.originalMap, (e) => e.node !== values.node); + } + if (values.path) { + map.push(PVE.Parser.printPropertyString(values)); + } + values = { map }; + + if (description) { + values.description = description; + } + if (xattr) { + values.xattr = xattr; + } + if (acl) { + values.acl = acl; + } + if (deletes && !view.isCreate) { + values.delete = deletes; + } + if (view.isCreate) { + values.id = name; + } + + return values; + }, + + onSetValues: function(values) { + let me = this; + let view = me.getView(); + me.originalMap = [...values.map]; + let configuredNodes = []; + PVE.Parser.filterPropertyStringList(values.map, (e) => { + configuredNodes.push(e.node); + e.submounts = PVE.Parser.parseBoolean(e.submounts) ? 1 : 0; + if (e.node === view.nodename) { + values = e; + } + return false; + }); + + me.lookup('nodeselector').disallowedNodes = configuredNodes; + + return values; + }, + + init: function(view) { + let me = this; + + if (!view.nodename) { + //throw "no nodename given"; + } + }, + }, + + items: [ + { + xtype: 'inputpanel', + onGetValues: function(values) { + return this.up('window').getController().onGetValues(values); + }, + + onSetValues: function(values) { + return this.up('window').getController().onSetValues(values); + }, + + columnT: [ + { + xtype: 'displayfield', + reference: 'directory-hint', + columnWidth: 1, + value: 'Make sure the directory exists.', + cbind: { + disabled: '{hideMapping}', + hidden: '{hideMapping}', + }, + userCls: 'pmx-hint', + }, + ], + + column1: [ + { + xtype: 'pmxDisplayEditField', + fieldLabel: gettext('Name'), + cbind: { + editable: '{!name}', + value: '{name}', + submitValue: '{isCreate}', + }, + name: 'name', + allowBlank: false, + }, + { + xtype: 'pveNodeSelector', + reference: 'nodeselector', + fieldLabel: gettext('Node'), + name: 'node', + cbind: { + disabled: '{hideNodeSelector}', + hidden: '{hideNodeSelector}', + }, + allowBlank: false, + }, + ], + + column2: [ + { + xtype: 'fieldcontainer', + defaultType: 'radiofield', + layout: 'fit', + cbind: { + disabled: '{hideMapping}', + hidden: '{hideMapping}', + }, + items: [ + { + xtype: 'textfield', + name: 'path', + reference: 'path', + value: '', + emptyText: gettext('/some/path'), + cbind: { + nodename: '{nodename}', + disabled: '{hideMapping}', + }, + allowBlank: false, + fieldLabel: gettext('Path'), + }, + { + xtype: 'proxmoxcheckbox', + name: 'submounts', + fieldLabel: gettext('submounts'), + value: '1', + deleteEmpty: false, + }, + ], + }, + ], + + columnB: [ + { + xtype: 'fieldcontainer', + defaultType: 'radiofield', + layout: 'fit', + cbind: { + disabled: '{hideComment}', + hidden: '{hideComment}', + }, + items: [ + { + xtype: 'proxmoxtextfield', + fieldLabel: gettext('Comment'), + submitValue: true, + name: 'description', + deleteEmpty: true, + }, + { + xtype: 'proxmoxcheckbox', + fieldLabel: gettext('Use dir with xattr by default'), + name: 'xattr', + deleteEmpty: true, + }, + { + xtype: 'proxmoxcheckbox', + fieldLabel: gettext('Use dir with acl by default'), + name: 'acl', + deleteEmpty: true, + }, + ], + }, + ], + }, + ], +}); -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel