From 520893437bbb1b5bc6e60d151edc6f763ca441b6 Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Thu, 23 Apr 2015 12:14:46 +0200 Subject: [PATCH] improve lxc DNS panel --- www/manager/lxc/CreateWizard.js | 44 +------- www/manager/lxc/DNS.js | 189 +++++++++++++++++++++++++++----- 2 files changed, 164 insertions(+), 69 deletions(-) diff --git a/www/manager/lxc/CreateWizard.js b/www/manager/lxc/CreateWizard.js index 2def8945..45193ee4 100644 --- a/www/manager/lxc/CreateWizard.js +++ b/www/manager/lxc/CreateWizard.js @@ -148,49 +148,9 @@ Ext.define('PVE.lxc.CreateWizard', { }, networkpanel, { - xtype: 'inputpanel', + xtype: 'pveLxcDNSInputPanel', title: gettext('DNS'), - column1: [ - { - xtype: 'pvetextfield', - name: 'searchdomain', - skipEmptyText: true, - fieldLabel: gettext('DNS domain'), - emptyText: 'use host settings', - allowBlank: true, - listeners: { - change: function(f, value) { - if (!me.rendered) { - return; - } - var field = me.down('#dns1'); - field.setDisabled(!value); - field.clearInvalid(); - field = me.down('#dns2'); - field.setDisabled(!value); - field.clearInvalid(); - } - } - }, - { - xtype: 'pvetextfield', - fieldLabel: gettext('DNS server') + " 1", - vtype: 'IPAddress', - allowBlank: true, - disabled: true, - name: 'nameserver', - itemId: 'dns1' - }, - { - xtype: 'pvetextfield', - fieldLabel: gettext('DNS server') + " 2", - vtype: 'IPAddress', - skipEmptyText: true, - disabled: true, - name: 'nameserver', - itemId: 'dns2' - } - ] + insideWizard: true }, { title: gettext('Confirm'), diff --git a/www/manager/lxc/DNS.js b/www/manager/lxc/DNS.js index e53d4fe8..14cbc2c4 100644 --- a/www/manager/lxc/DNS.js +++ b/www/manager/lxc/DNS.js @@ -1,3 +1,137 @@ +Ext.define('PVE.lxc.DNSInputPanel', { + extend: 'PVE.panel.InputPanel', + alias: 'widget.pveLxcDNSInputPanel', + + insideWizard: false, + + onGetValues: function(values) { + var me = this; + + if (!values.searchdomain) { + if (me.insideWizard) { + return {}; + } else { + return { "delete": "searchdomain,nameserver" }; + } + } + var list = []; + Ext.Array.each(['dns1', 'dns2', 'dns3'], function(fn) { + if (values[fn]) { + list.push(values[fn]); + } + delete values[fn]; + }); + + if (list.length) { + values.nameserver = list.join(' '); + } else { + if (!me.insideWizard) { + values['delete'] = 'nameserver'; + } + } + return values; + }, + + initComponent : function() { + var me = this; + + var items = [ + { + xtype: 'pvetextfield', + name: 'searchdomain', + skipEmptyText: true, + fieldLabel: gettext('DNS domain'), + emptyText: gettext('use host settings'), + allowBlank: true, + listeners: { + change: function(f, value) { + if (!me.rendered) { + return; + } + var field_ids = ['#dns1', '#dns2', '#dns3']; + Ext.Array.each(field_ids, function(fn) { + var field = me.down(fn); + field.setDisabled(!value); + field.clearInvalid(); + }); + } + } + }, + { + xtype: 'pvetextfield', + fieldLabel: gettext('DNS server') + " 1", + vtype: 'IPAddress', + allowBlank: true, + disabled: true, + name: 'dns1', + itemId: 'dns1' + }, + { + xtype: 'pvetextfield', + fieldLabel: gettext('DNS server') + " 2", + vtype: 'IPAddress', + skipEmptyText: true, + disabled: true, + name: 'dns2', + itemId: 'dns2' + }, + { + xtype: 'pvetextfield', + fieldLabel: gettext('DNS server') + " 3", + vtype: 'IPAddress', + skipEmptyText: true, + disabled: true, + name: 'dns3', + itemId: 'dns3' + } + ]; + + if (me.insideWizard) { + me.column1 = items; + } else { + me.items = items; + } + + me.callParent(); + } +}); + +Ext.define('PVE.lxc.DNSEdit', { + extend: 'PVE.window.Edit', + + initComponent : function() { + var me = this; + + var ipanel = Ext.create('PVE.lxc.DNSInputPanel'); + + Ext.apply(me, { + subject: gettext('Resources'), + items: ipanel + }); + + me.callParent(); + + if (!me.create) { + me.load({ + success: function(response, options) { + var values = response.result.data; + + if (values.nameserver) { + values.nameserver.replace(/[,;]/, ' '); + values.nameserver.replace(/^\s+/, ''); + var nslist = values.nameserver.split(/\s+/); + values.dns1 = nslist[0]; + values.dns2 = nslist[1]; + values.dns3 = nslist[2]; + } + + ipanel.setValues(values); + } + }); + } + } +}); + /*jslint confusion: true */ Ext.define('PVE.lxc.DNS', { extend: 'PVE.grid.ObjectGrid', @@ -41,30 +175,24 @@ Ext.define('PVE.lxc.DNS', { searchdomain: { header: gettext('DNS domain'), defaultValue: '', - editor: caps.vms['VM.Config.Network'] ? { - xtype: 'pveWindowEdit', - subject: gettext('DNS domain'), - items: { - xtype: 'pvetextfield', - name: 'searchdomain', - fieldLabel: gettext('DNS domain'), - allowBlank: false + editor: caps.vms['VM.Config.Network'] ? 'PVE.lxc.DNSEdit' : undefined, + renderer: function(value) { + if (me.getObjectValue('nameserver') || me.getObjectValue('searchdomain')) { + return value; } - } : undefined + return gettext('use host settings'); + } }, nameserver: { header: gettext('DNS server'), defaultValue: '', - editor: caps.vms['VM.Config.Network'] ? { - xtype: 'pveWindowEdit', - subject: gettext('DNS server'), - items: { - xtype: 'pvetextfield', - name: 'nameserver', - fieldLabel: gettext('DNS server'), - allowBlank: false + editor: caps.vms['VM.Config.Network'] ? 'PVE.lxc.DNSEdit' : undefined, + renderer: function(value) { + if (me.getObjectValue('nameserver') || me.getObjectValue('searchdomain')) { + return value; } - } : undefined + return gettext('use host settings'); + } } }; @@ -87,14 +215,22 @@ Ext.define('PVE.lxc.DNS', { return; } - var config = Ext.apply({ - pveSelNode: me.pveSelNode, - confid: rec.data.key, - url: '/api2/extjs/' + baseurl - }, rowdef.editor); - var win = Ext.createWidget(rowdef.editor.xtype, config); - win.load(); - + var win; + if (Ext.isString(rowdef.editor)) { + win = Ext.create(rowdef.editor, { + pveSelNode: me.pveSelNode, + confid: rec.data.key, + url: '/api2/extjs/' + baseurl + }); + } else { + var config = Ext.apply({ + pveSelNode: me.pveSelNode, + confid: rec.data.key, + url: '/api2/extjs/' + baseurl + }, rowdef.editor); + win = Ext.createWidget(rowdef.editor.xtype, config); + } + //win.load(); win.show(); win.on('destroy', reload); }; @@ -139,4 +275,3 @@ Ext.define('PVE.lxc.DNS', { me.on('show', reload); } }); -