]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/panel/IPSet.js
1 Ext
.define('PVE.IPSetList', {
2 extend
: 'Ext.grid.Panel',
3 alias
: 'widget.pveIPSetList',
5 ipset_panel
: undefined,
13 initComponent: function() {
14 /*jslint confusion: true */
17 if (me
.ipset_panel
== undefined) {
18 throw "no rule panel specified";
21 if (me
.base_url
== undefined) {
22 throw "no base_url specified";
25 var store
= new Ext
.data
.Store({
26 fields
: [ 'name', 'comment', 'digest' ],
29 url
: "/api2/json" + me
.base_url
38 var sm
= Ext
.create('Ext.selection.RowModel', {});
40 var reload = function() {
41 var oldrec
= sm
.getSelection()[0];
42 store
.load(function(records
, operation
, success
) {
44 var rec
= store
.findRecord('name', oldrec
.data
.name
);
52 var run_editor = function() {
53 var rec
= sm
.getSelection()[0];
57 var win
= Ext
.create('PVE.window.Edit', {
58 subject
: "IPSet '" + rec
.data
.name
+ "'",
61 digest
: rec
.data
.digest
,
72 fieldLabel
: gettext('Name'),
78 value
: rec
.data
.comment
,
79 fieldLabel
: gettext('Comment')
84 win
.on('destroy', reload
);
87 me
.editBtn
= new PVE
.button
.Button({
88 text
: gettext('Edit'),
94 me
.addBtn
= new PVE
.button
.Button({
95 text
: gettext('Create'),
98 var win
= Ext
.create('PVE.window.Edit', {
107 fieldLabel
: gettext('Name'),
114 fieldLabel
: gettext('Comment')
119 win
.on('destroy', reload
);
124 me
.removeBtn
= new PVE
.button
.Button({
125 text
: gettext('Remove'),
128 handler: function() {
129 var rec
= sm
.getSelection()[0];
130 if (!rec
|| !me
.base_url
) {
133 PVE
.Utils
.API2Request({
134 url
: me
.base_url
+ '/' + rec
.data
.name
,
137 failure: function(response
, options
) {
138 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
147 tbar
: [ '<b>IPSet:</b>', me
.addBtn
, me
.removeBtn
, me
.editBtn
],
150 { header
: 'IPSet', dataIndex
: 'name', width
: 100 },
151 { header
: gettext('Comment'), dataIndex
: 'comment', flex
: 1 }
154 itemdblclick
: run_editor
,
155 select: function(sm
, rec
) {
156 var url
= me
.base_url
+ '/' + rec
.data
.name
;
157 me
.ipset_panel
.setBaseUrl(url
);
159 deselect: function() {
160 me
.ipset_panel
.setBaseUrl(undefined);
172 Ext
.define('PVE.IPSetCidrEdit', {
173 extend
: 'PVE.window.Edit',
177 initComponent : function() {
178 /*jslint confusion: true */
181 me
.create
= (me
.cidr
=== undefined);
185 me
.url
= '/api2/extjs' + me
.base_url
;
188 me
.url
= '/api2/extjs' + me
.base_url
+ '/' + me
.cidr
;
195 if (!me
.list_refs_url
) {
196 throw "no alias_base_url specified";
200 xtype
: 'pveIPRefSelector',
205 base_url
: me
.list_refs_url
,
207 fieldLabel
: gettext('IP/CIDR')
211 xtype
: 'displayfield',
213 height
: 22, // hack: set same height as text fields
215 fieldLabel
: gettext('IP/CIDR')
219 var ipanel
= Ext
.create('PVE.panel.InputPanel', {
224 xtype
: 'pvecheckbox',
227 height
: 22, // hack: set same height as text fields
229 fieldLabel
: gettext('nomatch')
237 fieldLabel
: gettext('Comment')
243 subject
: gettext('IP/CIDR'),
251 success: function(response
, options
) {
252 var values
= response
.result
.data
;
253 ipanel
.setValues(values
);
260 Ext
.define('PVE.IPSetGrid', {
261 extend
: 'Ext.grid.Panel',
262 alias
: 'widget.pveIPSetGrid',
265 list_refs_url
: undefined,
268 removeBtn
: undefined,
271 setBaseUrl: function(url
) {
276 if (url
=== undefined) {
277 me
.addBtn
.setDisabled(true);
278 me
.store
.removeAll();
280 me
.addBtn
.setDisabled(false);
283 url
: '/api2/json' + url
290 initComponent: function() {
291 /*jslint confusion: true */
294 if (!me
.list_refs_url
) {
295 throw "no1 list_refs_url specified";
298 var store
= new Ext
.data
.Store({
302 var reload = function() {
306 var sm
= Ext
.create('Ext.selection.RowModel', {});
308 var run_editor = function() {
309 var rec
= sm
.getSelection()[0];
313 var win
= Ext
.create('PVE.IPSetCidrEdit', {
314 base_url
: me
.base_url
,
318 win
.on('destroy', reload
);
321 me
.editBtn
= new PVE
.button
.Button({
322 text
: gettext('Edit'),
328 me
.addBtn
= new PVE
.button
.Button({
329 text
: gettext('Add'),
331 handler: function() {
335 var win
= Ext
.create('PVE.IPSetCidrEdit', {
336 base_url
: me
.base_url
,
337 list_refs_url
: me
.list_refs_url
340 win
.on('destroy', reload
);
344 me
.removeBtn
= new PVE
.button
.Button({
345 text
: gettext('Remove'),
348 handler: function() {
349 var rec
= sm
.getSelection()[0];
350 if (!rec
|| !me
.base_url
) {
354 PVE
.Utils
.API2Request({
355 url
: me
.base_url
+ '/' + rec
.data
.cidr
,
358 failure: function(response
, options
) {
359 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
366 var render_errors = function(value
, metaData
, record
) {
367 var errors
= record
.data
.errors
;
369 var msg
= errors
.cidr
|| errors
.nomatch
;
371 metaData
.tdCls
= 'x-form-invalid-field';
372 var html
= '<p>' + Ext
.htmlEncode(msg
) + '</p>';
373 metaData
.tdAttr
= 'data-qwidth=600 data-qtitle="ERROR" data-qtip="' +
374 html
.replace(/\"/g,'"') + '"';
381 tbar
: [ '<b>IP/CIDR:</b>', me
.addBtn
, me
.removeBtn
, me
.editBtn
],
385 itemdblclick
: run_editor
392 header
: gettext('IP/CIDR'),
395 renderer: function(value
, metaData
, record
) {
396 value
= render_errors(value
, metaData
, record
);
397 if (record
.data
.nomatch
) {
398 return '<b>! </b>' + value
;
404 header
: gettext('Comment'),
405 dataIndex
: 'comment',
407 renderer: function(value
) {
408 return Ext
.util
.Format
.htmlEncode(value
);
417 me
.setBaseUrl(me
.base_url
); // load
422 Ext
.define('pve-ipset', {
423 extend
: 'Ext.data.Model',
424 fields
: [ { name
: 'nomatch', type
: 'boolean' },
425 'cidr', 'comment', 'errors' ],
431 Ext
.define('PVE.IPSet', {
432 extend
: 'Ext.panel.Panel',
433 alias
: 'widget.pveIPSet',
437 list_refs_url
: undefined,
439 initComponent: function() {
442 if (!me
.list_refs_url
) {
443 throw "no list_refs_url specified";
446 var ipset_panel
= Ext
.createWidget('pveIPSetGrid', {
448 list_refs_url
: me
.list_refs_url
,
453 var ipset_list
= Ext
.createWidget('pveIPSetList', {
455 ipset_panel
: ipset_panel
,
456 base_url
: me
.base_url
,
464 items
: [ ipset_list
, ipset_panel
],
467 ipset_list
.fireEvent('show', ipset_list
);