From: Filip Schauer <f.schauer@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH manager] ui: Remove pveACMEPluginView in favor of pmxACMEPluginView
Date: Tue, 29 Aug 2023 13:00:49 +0200 [thread overview]
Message-ID: <20230829110049.39854-1-f.schauer@proxmox.com> (raw)
Remove pveACMEPluginView and use the ACMEPluginView from the
proxmox-widget-toolkit instead. This leaves pveACMEPluginEditor unused,
so remove it as well.
Signed-off-by: Filip Schauer <f.schauer@proxmox.com>
---
www/manager6/dc/ACMEClusterView.js | 100 +------------
www/manager6/dc/ACMEPluginEdit.js | 223 -----------------------------
2 files changed, 2 insertions(+), 321 deletions(-)
delete mode 100644 www/manager6/dc/ACMEPluginEdit.js
diff --git a/www/manager6/dc/ACMEClusterView.js b/www/manager6/dc/ACMEClusterView.js
index d02aeef0..3d7adbf8 100644
--- a/www/manager6/dc/ACMEClusterView.js
+++ b/www/manager6/dc/ACMEClusterView.js
@@ -119,103 +119,6 @@ Ext.define('PVE.dc.ACMEAccountView', {
},
});
-Ext.define('PVE.dc.ACMEPluginView', {
- extend: 'Ext.grid.Panel',
- alias: 'widget.pveACMEPluginView',
-
- title: gettext('Challenge Plugins'),
-
- controller: {
- xclass: 'Ext.app.ViewController',
-
- addPlugin: function() {
- let me = this;
- Ext.create('PVE.dc.ACMEPluginEditor', {
- isCreate: true,
- apiCallDone: function() {
- me.reload();
- },
- }).show();
- },
-
- editPlugin: function() {
- let me = this;
- let view = me.getView();
- let selection = view.getSelection();
- if (selection.length < 1) return;
- let plugin = selection[0].data.plugin;
- Ext.create('PVE.dc.ACMEPluginEditor', {
- url: `/cluster/acme/plugins/${plugin}`,
- apiCallDone: function() {
- me.reload();
- },
- }).show();
- },
-
- reload: function() {
- let me = this;
- let view = me.getView();
- view.getStore().rstore.load();
- },
- },
-
- minHeight: 150,
- emptyText: gettext('No Plugins configured'),
-
- columns: [
- {
- dataIndex: 'plugin',
- text: gettext('Plugin'),
- renderer: Ext.String.htmlEncode,
- flex: 1,
- },
- {
- dataIndex: 'api',
- text: 'API',
- renderer: Ext.String.htmlEncode,
- flex: 1,
- },
- ],
-
- tbar: [
- {
- xtype: 'proxmoxButton',
- text: gettext('Add'),
- handler: 'addPlugin',
- selModel: false,
- },
- {
- xtype: 'proxmoxButton',
- text: gettext('Edit'),
- handler: 'editPlugin',
- disabled: true,
- },
- {
- xtype: 'proxmoxStdRemoveButton',
- baseurl: '/cluster/acme/plugins',
- callback: 'reload',
- },
- ],
-
- listeners: {
- itemdblclick: 'editPlugin',
- },
-
- store: {
- type: 'diff',
- autoDestroy: true,
- autoDestroyRstore: true,
- rstore: {
- type: 'update',
- storeid: 'pve-acme-plugins',
- model: 'pve-acme-plugins',
- autoStart: true,
- filters: item => !!item.data.api,
- },
- sorters: 'plugin',
- },
-});
-
Ext.define('PVE.dc.ACMEClusterView', {
extend: 'Ext.panel.Panel',
alias: 'widget.pveACMEClusterView',
@@ -231,7 +134,8 @@ Ext.define('PVE.dc.ACMEClusterView', {
{
region: 'center',
border: false,
- xtype: 'pveACMEPluginView',
+ xtype: 'pmxACMEPluginView',
+ acmeUrl: '/config/acme',
},
],
});
diff --git a/www/manager6/dc/ACMEPluginEdit.js b/www/manager6/dc/ACMEPluginEdit.js
deleted file mode 100644
index 570b4dd2..00000000
--- a/www/manager6/dc/ACMEPluginEdit.js
+++ /dev/null
@@ -1,223 +0,0 @@
-Ext.define('PVE.dc.ACMEPluginEditor', {
- extend: 'Proxmox.window.Edit',
- xtype: 'pveACMEPluginEditor',
- mixins: ['Proxmox.Mixin.CBind'],
-
- onlineHelp: 'sysadmin_certs_acme_plugins',
-
- isAdd: true,
- isCreate: false,
-
- width: 550,
- url: '/cluster/acme/plugins/',
-
- subject: 'ACME DNS Plugin',
-
- items: [
- {
- xtype: 'inputpanel',
- // we dynamically create fields from the given schema
- // things we have to do here:
- // * save which fields we created to remove them again
- // * split the data from the generic 'data' field into the boxes
- // * on deletion collect those values again
- // * save the original values of the data field
- createdFields: {},
- createdInitially: false,
- originalValues: {},
- createSchemaFields: function(schema) {
- let me = this;
- // we know where to add because we define it right below
- let container = me.down('container');
- let datafield = me.down('field[name=data]');
- let hintfield = me.down('field[name=hint]');
- if (!me.createdInitially) {
- [me.originalValues] = PVE.Parser.parseACMEPluginData(datafield.getValue());
- }
-
- // collect values from custom fields and add it to 'data'',
- // then remove the custom fields
- let data = [];
- for (const [name, field] of Object.entries(me.createdFields)) {
- let value = field.getValue();
- if (value !== undefined && value !== null && value !== '') {
- data.push(`${name}=${value}`);
- }
- container.remove(field);
- }
- let datavalue = datafield.getValue();
- if (datavalue !== undefined && datavalue !== null && datavalue !== '') {
- data.push(datavalue);
- }
- datafield.setValue(data.join('\n'));
-
- me.createdFields = {};
-
- if (typeof schema.fields !== 'object') {
- schema.fields = {};
- }
- // create custom fields according to schema
- let gotSchemaField = false;
- let cmp = (a, b) => a[0].localeCompare(b[0]);
- for (const [name, definition] of Object.entries(schema.fields).sort(cmp)) {
- let xtype;
- switch (definition.type) {
- case 'string':
- xtype = 'proxmoxtextfield';
- break;
- case 'integer':
- xtype = 'proxmoxintegerfield';
- break;
- case 'number':
- xtype = 'numberfield';
- break;
- default:
- console.warn(`unknown type '${definition.type}'`);
- xtype = 'proxmoxtextfield';
- break;
- }
-
- let label = name;
- if (typeof definition.name === "string") {
- label = definition.name;
- }
-
- let field = Ext.create({
- xtype,
- name: `custom_${name}`,
- fieldLabel: label,
- width: '100%',
- labelWidth: 150,
- labelSeparator: '=',
- emptyText: definition.default || '',
- autoEl: definition.description ? {
- tag: 'div',
- 'data-qtip': definition.description,
- } : undefined,
- });
-
- me.createdFields[name] = field;
- container.add(field);
- gotSchemaField = true;
- }
- datafield.setHidden(gotSchemaField); // prefer schema-fields
-
- if (schema.description) {
- hintfield.setValue(schema.description);
- hintfield.setHidden(false);
- } else {
- hintfield.setValue('');
- hintfield.setHidden(true);
- }
-
- // parse data from field and set it to the custom ones
- let extradata = [];
- [data, extradata] = PVE.Parser.parseACMEPluginData(datafield.getValue());
- for (const [key, value] of Object.entries(data)) {
- if (me.createdFields[key]) {
- me.createdFields[key].setValue(value);
- me.createdFields[key].originalValue = me.originalValues[key];
- } else {
- extradata.push(`${key}=${value}`);
- }
- }
- datafield.setValue(extradata.join('\n'));
- if (!me.createdInitially) {
- datafield.resetOriginalValue();
- me.createdInitially = true; // save that we initally set that
- }
- },
- onGetValues: function(values) {
- let me = this;
- let win = me.up('pveACMEPluginEditor');
- if (win.isCreate) {
- values.id = values.plugin;
- values.type = 'dns'; // the only one for now
- }
- delete values.plugin;
-
- PVE.Utils.delete_if_default(values, 'validation-delay', '30', win.isCreate);
-
- let data = '';
- for (const [name, field] of Object.entries(me.createdFields)) {
- let value = field.getValue();
- if (value !== null && value !== undefined && value !== '') {
- data += `${name}=${value}\n`;
- }
- delete values[`custom_${name}`];
- }
- values.data = Ext.util.Base64.encode(data + values.data);
- return values;
- },
- items: [
- {
- xtype: 'pmxDisplayEditField',
- cbind: {
- editable: (get) => get('isCreate'),
- submitValue: (get) => get('isCreate'),
- },
- editConfig: {
- flex: 1,
- xtype: 'proxmoxtextfield',
- allowBlank: false,
- },
- name: 'plugin',
- labelWidth: 150,
- fieldLabel: gettext('Plugin ID'),
- },
- {
- xtype: 'proxmoxintegerfield',
- name: 'validation-delay',
- labelWidth: 150,
- fieldLabel: gettext('Validation Delay'),
- emptyText: 30,
- cbind: {
- deleteEmpty: '{!isCreate}',
- },
- minValue: 0,
- maxValue: 48*60*60,
- },
- {
- xtype: 'pveACMEApiSelector',
- name: 'api',
- labelWidth: 150,
- listeners: {
- change: function(selector) {
- let schema = selector.getSchema();
- selector.up('inputpanel').createSchemaFields(schema);
- },
- },
- },
- {
- xtype: 'textarea',
- fieldLabel: gettext('API Data'),
- labelWidth: 150,
- name: 'data',
- },
- {
- xtype: 'displayfield',
- fieldLabel: gettext('Hint'),
- labelWidth: 150,
- name: 'hint',
- hidden: true,
- },
- ],
- },
- ],
-
- initComponent: function() {
- var me = this;
-
- me.callParent();
-
- if (!me.isCreate) {
- me.load({
- success: function(response, opts) {
- me.setValues(response.result.data);
- },
- });
- } else {
- me.method = 'POST';
- }
- },
-});
--
2.39.2
next reply other threads:[~2023-08-29 11:01 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-29 11:00 Filip Schauer [this message]
2024-04-29 10:22 ` Filip Schauer
2024-04-29 11:14 ` Thomas Lamprecht
2024-04-30 11:18 ` Filip Schauer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230829110049.39854-1-f.schauer@proxmox.com \
--to=f.schauer@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.