]> git.proxmox.com Git - pve-manager.git/blob - www/manager/node/NetworkEdit.js
improve network API - add more gettext markers
[pve-manager.git] / www / manager / node / NetworkEdit.js
1 Ext.define('PVE.node.NetworkEdit', {
2 extend: 'PVE.window.Edit',
3 alias: ['widget.pveNodeNetworkEdit'],
4
5 initComponent : function() {
6 var me = this;
7
8 var nodename = me.pveSelNode.data.node;
9 if (!nodename) {
10 throw "no node name specified";
11 }
12
13 if (!me.iftype) {
14 throw "no network device type specified";
15 }
16
17 me.create = !me.iface;
18
19 var iface_vtype;
20
21 if (me.iftype === 'bridge') {
22 me.subject = "Bridge";
23 iface_vtype = 'BridgeName';
24 } else if (me.iftype === 'bond') {
25 me.subject = "Bond";
26 iface_vtype = 'BondName';
27 } else {
28 throw "no known network device type specified";
29 }
30
31 var column2 = [
32 {
33 xtype: 'pvecheckbox',
34 fieldLabel: 'Autostart',
35 name: 'autostart',
36 uncheckedValue: 0,
37 checked: me.create ? true : undefined
38 }
39 ];
40
41 if (me.iftype === 'bridge') {
42 column2.push({
43 xtype: 'textfield',
44 fieldLabel: 'Bridge ports',
45 name: 'bridge_ports'
46 });
47 } else if (me.iftype === 'bond') {
48 column2.push({
49 xtype: 'textfield',
50 fieldLabel: 'Slaves',
51 name: 'slaves'
52 });
53 column2.push({
54 xtype: 'bondModeSelector',
55 fieldLabel: 'Mode',
56 name: 'bond_mode',
57 value: me.create ? 'balance-rr' : undefined,
58 allowBlank: false
59 });
60 }
61
62 var url;
63 var method;
64
65 if (me.create) {
66 url = "/api2/extjs/nodes/" + nodename + "/network";
67 method = 'POST';
68 } else {
69 url = "/api2/extjs/nodes/" + nodename + "/network/" + me.iface;
70 method = 'PUT';
71 }
72
73 var column1 = [
74 {
75 xtype: me.create ? 'textfield' : 'displayfield',
76 fieldLabel: gettext('Name'),
77 height: 22, // hack: set same height as text fields
78 name: 'iface',
79 value: me.iface,
80 vtype: iface_vtype,
81 allowBlank: false
82 },
83 {
84 xtype: 'pvetextfield',
85 deleteEmpty: !me.create,
86 fieldLabel: gettext('IP address'),
87 vtype: 'IPAddress',
88 name: 'address'
89 },
90 {
91 xtype: 'pvetextfield',
92 deleteEmpty: !me.create,
93 fieldLabel: gettext('Subnet mask'),
94 vtype: 'IPAddress',
95 name: 'netmask',
96 validator: function(value) {
97 /*jslint confusion: true */
98 if (!me.items) {
99 return true;
100 }
101 var address = me.down('field[name=address]').getValue();
102 if (value !== '') {
103 if (address === '') {
104 return "Subnet mask requires option 'IP address'";
105 }
106 } else {
107 if (address !== '') {
108 return "Option 'IP address' requires a subnet mask";
109 }
110 }
111
112 return true;
113 }
114 },
115 {
116 xtype: 'pvetextfield',
117 deleteEmpty: !me.create,
118 fieldLabel: 'Gateway',
119 vtype: 'IPAddress',
120 name: 'gateway'
121 }
122 ];
123
124 Ext.applyIf(me, {
125 url: url,
126 method: method,
127 items: {
128 xtype: 'inputpanel',
129 column1: column1,
130 column2: column2
131 }
132 });
133
134 me.callParent();
135
136 if (me.create) {
137 me.down('field[name=iface]').setValue(me.iface_default);
138 } else {
139 me.load({
140 success: function(response, options) {
141 var data = response.result.data;
142 if (data.type !== me.iftype) {
143 var msg = "Got unexpected device type";
144 Ext.Msg.alert(gettext('Error'), msg, function() {
145 me.close();
146 });
147 return;
148 }
149 me.setValues(data);
150 me.isValid(); // trigger validation
151 }
152 });
153 }
154 }
155 });