Ext.define('PBS.form.NamespaceMaxDepth', { extend: 'Proxmox.form.field.Integer', alias: 'widget.pbsNamespaceMaxDepth', allowBlank: true, emptyText: gettext('Full'), fieldLabel: gettext('Max. Depth'), deleteEmpty: true, minValue: 0, maxValue: 7, triggers: { clear: { cls: 'pmx-clear-trigger', weight: -1, hidden: true, handler: function() { this.triggers.clear.setVisible(false); this.setValue(''); }, }, }, listeners: { change: function(field, value) { let canClear = value !== ''; field.triggers.clear.setVisible(canClear); }, }, }); Ext.define('PBS.form.NamespaceMaxDepthReduced', { extend: 'PBS.form.NamespaceMaxDepth', alias: 'widget.pbsNamespaceMaxDepthReduced', calcMaxPrefixLength: function(ns1, ns2) { let maxPrefixLength = 0; if (ns1 !== undefined && ns1 !== null) { maxPrefixLength = (ns1.match(/[/]/g) || []).length + (ns1 === '' ? 0 : 1); } if (ns2 !== undefined && ns2 !== null) { let ns2PrefixLength = (ns2.match(/[/]/g) || []).length + (ns2 === '' ? 0 : 1); if (ns2PrefixLength > maxPrefixLength) { maxPrefixLength = ns2PrefixLength; } } return maxPrefixLength; }, setLimit: function(ns1, ns2) { let me = this; let maxPrefixLength = me.calcMaxPrefixLength(ns1, ns2); if (maxPrefixLength !== undefined) { me.maxValue = 7 - maxPrefixLength; } else { me.maxValue = 7; } }, });