From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id CAEA360622 for ; Wed, 2 Sep 2020 13:04:18 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id B7656101F3 for ; Wed, 2 Sep 2020 13:03:56 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 262E310123 for ; Wed, 2 Sep 2020 13:03:49 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id E6A89449BD for ; Wed, 2 Sep 2020 13:03:48 +0200 (CEST) From: Fabian Ebner To: pve-devel@lists.proxmox.com Date: Wed, 2 Sep 2020 13:03:31 +0200 Message-Id: <20200902110337.25004-9-f.ebner@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200902110337.25004-1-f.ebner@proxmox.com> References: <20200902110337.25004-1-f.ebner@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.041 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [me.storage, rec.data, me.sm, values.name] Subject: [pve-devel] [PATCH manager 08/14] create and use template view 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: , X-List-Received-Date: Wed, 02 Sep 2020 11:04:19 -0000 Signed-off-by: Fabian Ebner --- www/manager6/Makefile | 1 + www/manager6/storage/Browser.js | 4 +- www/manager6/storage/ContentView.js | 184 ----------------------- www/manager6/storage/TemplateView.js | 212 +++++++++++++++++++++++++++ 4 files changed, 214 insertions(+), 187 deletions(-) create mode 100644 www/manager6/storage/TemplateView.js diff --git a/www/manager6/Makefile b/www/manager6/Makefile index 4288acdd..cece0aae 100644 --- a/www/manager6/Makefile +++ b/www/manager6/Makefile @@ -232,6 +232,7 @@ JSSRC= \ storage/RBDEdit.js \ storage/StatusView.js \ storage/Summary.js \ + storage/TemplateView.js \ storage/ZFSEdit.js \ storage/ZFSPoolEdit.js \ tree/ResourceTree.js \ diff --git a/www/manager6/storage/Browser.js b/www/manager6/storage/Browser.js index 3e87fcd4..4393558c 100644 --- a/www/manager6/storage/Browser.js +++ b/www/manager6/storage/Browser.js @@ -97,12 +97,10 @@ Ext.define('PVE.storage.Browser', { } if (contents.includes('vztmpl')) { items.push({ - xtype: 'pveStorageContentView', + xtype: 'pveStorageTemplateView', title: PVE.Utils.contentTypes['vztmpl'], iconCls: 'fa fa-th', itemId: 'contentVztmpl', - content: 'vztmpl', - useUploadButton: true, }); } me.insertNodes(items); diff --git a/www/manager6/storage/ContentView.js b/www/manager6/storage/ContentView.js index acd34f20..03b595f8 100644 --- a/www/manager6/storage/ContentView.js +++ b/www/manager6/storage/ContentView.js @@ -1,170 +1,3 @@ -Ext.define('PVE.grid.TemplateSelector', { - extend: 'Ext.grid.GridPanel', - - alias: 'widget.pveTemplateSelector', - - stateful: true, - stateId: 'grid-template-selector', - viewConfig: { - trackOver: false - }, - initComponent : function() { - var me = this; - - if (!me.nodename) { - throw "no node name specified"; - } - - var baseurl = "/nodes/" + me.nodename + "/aplinfo"; - var store = new Ext.data.Store({ - model: 'pve-aplinfo', - groupField: 'section', - proxy: { - type: 'proxmox', - url: '/api2/json' + baseurl - } - }); - - var sm = Ext.create('Ext.selection.RowModel', {}); - - var groupingFeature = Ext.create('Ext.grid.feature.Grouping',{ - groupHeaderTpl: '{[ "Section: " + values.name ]} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})' - }); - - var reload = function() { - store.load(); - }; - - Proxmox.Utils.monStoreErrors(me, store); - - Ext.apply(me, { - store: store, - selModel: sm, - tbar: [ - '->', - gettext('Search'), - { - xtype: 'textfield', - width: 200, - enableKeyEvents: true, - listeners: { - buffer: 500, - keyup: function(field) { - var value = field.getValue().toLowerCase(); - store.clearFilter(true); - store.filterBy(function(rec) { - return (rec.data['package'].toLowerCase().indexOf(value) !== -1) - || (rec.data.headline.toLowerCase().indexOf(value) !== -1); - }); - } - } - } - ], - features: [ groupingFeature ], - columns: [ - { - header: gettext('Type'), - width: 80, - dataIndex: 'type' - }, - { - header: gettext('Package'), - flex: 1, - dataIndex: 'package' - }, - { - header: gettext('Version'), - width: 80, - dataIndex: 'version' - }, - { - header: gettext('Description'), - flex: 1.5, - renderer: Ext.String.htmlEncode, - dataIndex: 'headline' - } - ], - listeners: { - afterRender: reload - } - }); - - me.callParent(); - } - -}, function() { - - Ext.define('pve-aplinfo', { - extend: 'Ext.data.Model', - fields: [ - 'template', 'type', 'package', 'version', 'headline', 'infopage', - 'description', 'os', 'section' - ], - idProperty: 'template' - }); - -}); - -Ext.define('PVE.storage.TemplateDownload', { - extend: 'Ext.window.Window', - alias: 'widget.pveTemplateDownload', - - modal: true, - title: gettext('Templates'), - layout: 'fit', - width: 900, - height: 600, - initComponent : function() { - var me = this; - - var grid = Ext.create('PVE.grid.TemplateSelector', { - border: false, - scrollable: true, - nodename: me.nodename - }); - - var sm = grid.getSelectionModel(); - - var submitBtn = Ext.create('Proxmox.button.Button', { - text: gettext('Download'), - disabled: true, - selModel: sm, - handler: function(button, event, rec) { - Proxmox.Utils.API2Request({ - url: '/nodes/' + me.nodename + '/aplinfo', - params: { - storage: me.storage, - template: rec.data.template - }, - method: 'POST', - failure: function (response, opts) { - Ext.Msg.alert(gettext('Error'), response.htmlStatus); - }, - success: function(response, options) { - var upid = response.result.data; - - Ext.create('Proxmox.window.TaskViewer', { - upid: upid, - listeners: { - destroy: me.reloadGrid - } - }).show(); - - me.close(); - } - }); - } - }); - - Ext.apply(me, { - items: grid, - buttons: [ submitBtn ] - }); - - me.callParent(); - } -}); - Ext.define('PVE.storage.Upload', { extend: 'Ext.window.Window', alias: 'widget.pveStorageUpload', @@ -406,22 +239,6 @@ Ext.define('PVE.storage.ContentView', { Proxmox.Utils.monStoreErrors(me, store); - var templateButton = Ext.create('Proxmox.button.Button',{ - itemId: 'tmpl-btn', - text: gettext('Templates'), - handler: function() { - var win = Ext.create('PVE.storage.TemplateDownload', { - nodename: nodename, - storage: storage, - reloadGrid: reload - }); - win.show(); - } - }); - if (content !== 'vztmpl') { - templateButton.setDisabled(true); - } - var uploadButton = Ext.create('Proxmox.button.Button', { text: gettext('Upload'), handler: function() { @@ -540,7 +357,6 @@ Ext.define('PVE.storage.ContentView', { }, removeButton, imageRemoveButton, - templateButton, { xtype: 'proxmoxButton', text: gettext('Show Configuration'), diff --git a/www/manager6/storage/TemplateView.js b/www/manager6/storage/TemplateView.js new file mode 100644 index 00000000..f7b5efe8 --- /dev/null +++ b/www/manager6/storage/TemplateView.js @@ -0,0 +1,212 @@ +Ext.define('PVE.grid.TemplateSelector', { + extend: 'Ext.grid.GridPanel', + + alias: 'widget.pveTemplateSelector', + + stateful: true, + stateId: 'grid-template-selector', + viewConfig: { + trackOver: false + }, + initComponent : function() { + var me = this; + + if (!me.nodename) { + throw "no node name specified"; + } + + var baseurl = "/nodes/" + me.nodename + "/aplinfo"; + var store = new Ext.data.Store({ + model: 'pve-aplinfo', + groupField: 'section', + proxy: { + type: 'proxmox', + url: '/api2/json' + baseurl + } + }); + + var sm = Ext.create('Ext.selection.RowModel', {}); + + var groupingFeature = Ext.create('Ext.grid.feature.Grouping',{ + groupHeaderTpl: '{[ "Section: " + values.name ]} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})' + }); + + var reload = function() { + store.load(); + }; + + Proxmox.Utils.monStoreErrors(me, store); + + Ext.apply(me, { + store: store, + selModel: sm, + tbar: [ + '->', + gettext('Search'), + { + xtype: 'textfield', + width: 200, + enableKeyEvents: true, + listeners: { + buffer: 500, + keyup: function(field) { + var value = field.getValue().toLowerCase(); + store.clearFilter(true); + store.filterBy(function(rec) { + return (rec.data['package'].toLowerCase().indexOf(value) !== -1) + || (rec.data.headline.toLowerCase().indexOf(value) !== -1); + }); + } + } + } + ], + features: [ groupingFeature ], + columns: [ + { + header: gettext('Type'), + width: 80, + dataIndex: 'type' + }, + { + header: gettext('Package'), + flex: 1, + dataIndex: 'package' + }, + { + header: gettext('Version'), + width: 80, + dataIndex: 'version' + }, + { + header: gettext('Description'), + flex: 1.5, + renderer: Ext.String.htmlEncode, + dataIndex: 'headline' + } + ], + listeners: { + afterRender: reload + } + }); + + me.callParent(); + } + +}, function() { + + Ext.define('pve-aplinfo', { + extend: 'Ext.data.Model', + fields: [ + 'template', 'type', 'package', 'version', 'headline', 'infopage', + 'description', 'os', 'section' + ], + idProperty: 'template' + }); + +}); + +Ext.define('PVE.storage.TemplateDownload', { + extend: 'Ext.window.Window', + alias: 'widget.pveTemplateDownload', + + modal: true, + title: gettext('Templates'), + layout: 'fit', + width: 900, + height: 600, + initComponent : function() { + var me = this; + + var grid = Ext.create('PVE.grid.TemplateSelector', { + border: false, + scrollable: true, + nodename: me.nodename + }); + + var sm = grid.getSelectionModel(); + + var submitBtn = Ext.create('Proxmox.button.Button', { + text: gettext('Download'), + disabled: true, + selModel: sm, + handler: function(button, event, rec) { + Proxmox.Utils.API2Request({ + url: '/nodes/' + me.nodename + '/aplinfo', + params: { + storage: me.storage, + template: rec.data.template + }, + method: 'POST', + failure: function (response, opts) { + Ext.Msg.alert(gettext('Error'), response.htmlStatus); + }, + success: function(response, options) { + var upid = response.result.data; + + Ext.create('Proxmox.window.TaskViewer', { + upid: upid, + listeners: { + destroy: me.reloadGrid + } + }).show(); + + me.close(); + } + }); + } + }); + + Ext.apply(me, { + items: grid, + buttons: [ submitBtn ] + }); + + me.callParent(); + } +}); + +Ext.define('PVE.storage.TemplateView', { + extend: 'PVE.storage.ContentView', + + alias: 'widget.pveStorageTemplateView', + + initComponent: function() { + var me = this; + + var nodename = me.nodename = me.pveSelNode.data.node; + if (!nodename) { + throw "no node name specified"; + } + + var storage = me.storage = me.pveSelNode.data.storage; + if (!storage) { + throw "no storage ID specified"; + } + + me.content = 'vztmpl'; + + var sm = me.sm = Ext.create('Ext.selection.RowModel', {}); + + var reload = function() { + me.store.load(); + } + + var templateButton = Ext.create('Proxmox.button.Button',{ + itemId: 'tmpl-btn', + text: gettext('Templates'), + handler: function() { + var win = Ext.create('PVE.storage.TemplateDownload', { + nodename: nodename, + storage: storage, + reloadGrid: reload + }); + win.show(); + } + }); + + me.tbar = [ templateButton ]; + me.useUploadButton = true; + + me.callParent(); + }, +}); -- 2.20.1