]>
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 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 var store
= new Ext
.data
.Store({
40 model
: 'pve-usb-' + me
.type
,
43 url
: `/api2/json/nodes/${nodename}/hardware/usb`,
47 return !!item
.data
.usbpath
&& !!item
.data
.prodid
&& item
.data
['class'] != 9;
52 if (me
.type
=== 'device') {
53 emptyText
= gettext('Passthrough a specific device');
55 emptyText
= gettext('Passthrough a full port');
65 header
: (me
.type
=== 'device')?gettext('Device'):gettext('Port'),
71 header
: gettext('Manufacturer'),
73 dataIndex
: 'manufacturer',
77 header
: gettext('Product'),
83 header
: gettext('Speed'),
87 renderer: function(value
) {
95 return speed_map
[value
] || value
+ " Mbps";
109 Ext
.define('pve-usb-device', {
110 extend
: 'Ext.data.Model',
114 convert: function(val
, data
) {
118 return data
.get('vendid') + ':' + data
.get('prodid');
121 'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath',
122 { name
: 'port', type
: 'number' },
123 { name
: 'level', type
: 'number' },
124 { name
: 'class', type
: 'number' },
125 { name
: 'devnum', type
: 'number' },
126 { name
: 'busnum', type
: 'number' },
128 name
: 'product_and_id',
130 convert
: (v
, rec
) => {
131 let res
= rec
.data
.product
|| gettext('Unkown');
132 res
+= " (" + rec
.data
.usbid
+ ")";
139 Ext
.define('pve-usb-port', {
140 extend
: 'Ext.data.Model',
144 convert: function(val
, data
) {
148 return data
.get('busnum') + '-' + data
.get('usbpath');
151 'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath',
152 { name
: 'port', type
: 'number' },
153 { name
: 'level', type
: 'number' },
154 { name
: 'class', type
: 'number' },
155 { name
: 'devnum', type
: 'number' },
156 { name
: 'busnum', type
: 'number' },
158 name
: 'product_and_id',
160 convert
: (v
, rec
) => {
161 let res
= rec
.data
.product
|| gettext('Unplugged');
162 res
+= " (" + rec
.data
.usbid
+ ")";