]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/form/USBSelector.js
a67c8765415f7cc8131b10c57f3dd3bdbc3c320a
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 initComponent: function() {
29 var nodename
= me
.pveSelNode
.data
.node
;
32 throw "no nodename specified";
35 if (me
.type
!== 'device' && me
.type
!== 'port') {
36 throw "no valid type specified";
39 let store
= new Ext
.data
.Store({
40 model
: `pve-usb-${me.type}`,
43 url
: `/api2/json/nodes/${nodename}/hardware/usb`,
46 ({ data
}) => !!data
.usbpath
&& !!data
.prodid
&& String(data
.class) !== "9",
50 if (me
.type
=== 'device') {
51 emptyText
= gettext('Passthrough a specific device');
53 emptyText
= gettext('Passthrough a full port');
63 header
: me
.type
=== 'device'?gettext('Device'):gettext('Port'),
69 header
: gettext('Manufacturer'),
71 dataIndex
: 'manufacturer',
75 header
: gettext('Product'),
81 header
: gettext('Speed'),
85 renderer: function(value
) {
93 return speed2Class
[value
] || value
+ " Mbps";
106 Ext
.define('pve-usb-device', {
107 extend
: 'Ext.data.Model',
111 convert: function(val
, data
) {
115 return data
.get('vendid') + ':' + data
.get('prodid');
118 'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath',
119 { name
: 'port', type
: 'number' },
120 { name
: 'level', type
: 'number' },
121 { name
: 'class', type
: 'number' },
122 { name
: 'devnum', type
: 'number' },
123 { name
: 'busnum', type
: 'number' },
125 name
: 'product_and_id',
127 convert
: (v
, rec
) => {
128 let res
= rec
.data
.product
|| gettext('Unknown');
129 res
+= " (" + rec
.data
.usbid
+ ")";
136 Ext
.define('pve-usb-port', {
137 extend
: 'Ext.data.Model',
141 convert: function(val
, data
) {
145 return data
.get('busnum') + '-' + data
.get('usbpath');
148 'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath',
149 { name
: 'port', type
: 'number' },
150 { name
: 'level', type
: 'number' },
151 { name
: 'class', type
: 'number' },
152 { name
: 'devnum', type
: 'number' },
153 { name
: 'busnum', type
: 'number' },
155 name
: 'product_and_id',
157 convert
: (v
, rec
) => {
158 let res
= rec
.data
.product
|| gettext('Unplugged');
159 res
+= " (" + rec
.data
.usbid
+ ")";