]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/form/USBSelector.js
1 Ext
.define('PVE.form.USBSelector', {
2 extend
: 'Proxmox.form.ComboGrid',
3 alias
: ['widget.pveUSBSelector'],
8 displayField
: 'product_and_id',
12 validator: function(value
) {
15 return true; // handled later by allowEmpty in the getErrors call chain
17 value
= me
.getValue(); // as the valueField is not the displayfield
18 if (me
.type
=== 'device') {
19 return (/^[a-f0-9]{4}:[a-f0-9]{4}$/i).test(value
);
20 } else if (me
.type
=== 'port') {
21 return (/^[0-9]+-[0-9]+(\.[0-9]+)*$/).test(value
);
23 return gettext("Invalid Value");
26 setNodename: function(nodename
) {
29 if (!nodename
|| me
.nodename
=== nodename
) {
33 me
.nodename
= nodename
;
37 url
: `/api2/json/nodes/${me.nodename}/hardware/usb`,
43 initComponent: function() {
47 me
.nodename
= me
.pveSelNode
.data
.node
;
50 var nodename
= me
.nodename
;
51 me
.nodename
= undefined;
53 if (me
.type
!== 'device' && me
.type
!== 'port') {
54 throw "no valid type specified";
57 let store
= new Ext
.data
.Store({
58 model
: `pve-usb-${me.type}`,
60 ({ data
}) => !!data
.usbpath
&& !!data
.prodid
&& String(data
.class) !== "9",
64 if (me
.type
=== 'device') {
65 emptyText
= gettext('Passthrough a specific device');
67 emptyText
= gettext('Passthrough a full port');
78 header
: me
.type
=== 'device'?gettext('Device'):gettext('Port'),
84 header
: gettext('Manufacturer'),
86 dataIndex
: 'manufacturer',
90 header
: gettext('Product'),
96 header
: gettext('Speed'),
100 renderer: function(value
) {
108 return speed2Class
[value
] || value
+ " Mbps";
117 me
.setNodename(nodename
);
121 Ext
.define('pve-usb-device', {
122 extend
: 'Ext.data.Model',
126 convert: function(val
, data
) {
130 return data
.get('vendid') + ':' + data
.get('prodid');
133 'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath',
134 { name
: 'port', type
: 'number' },
135 { name
: 'level', type
: 'number' },
136 { name
: 'class', type
: 'number' },
137 { name
: 'devnum', type
: 'number' },
138 { name
: 'busnum', type
: 'number' },
140 name
: 'product_and_id',
142 convert
: (v
, rec
) => {
143 let res
= rec
.data
.product
|| gettext('Unknown');
144 res
+= " (" + rec
.data
.usbid
+ ")";
151 Ext
.define('pve-usb-port', {
152 extend
: 'Ext.data.Model',
156 convert: function(val
, data
) {
160 return data
.get('busnum') + '-' + data
.get('usbpath');
163 'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath',
164 { name
: 'port', type
: 'number' },
165 { name
: 'level', type
: 'number' },
166 { name
: 'class', type
: 'number' },
167 { name
: 'devnum', type
: 'number' },
168 { name
: 'busnum', type
: 'number' },
170 name
: 'product_and_id',
172 convert
: (v
, rec
) => {
173 let res
= rec
.data
.product
|| gettext('Unplugged');
174 res
+= " (" + rec
.data
.usbid
+ ")";