function Input(name, value, options) { this.name = name; this.value = value; this.options = options; this.label = options && options.label || name; }; Input.prototype.getClasses = function() { return ['form-control', 'form-control-sm']; } Input.prototype.bootstrapify = function(input) { this.getClasses().forEach(input.addClass.bind(input)); return [ '
', '', '
', $.map(input, function(el) { return el.outerHTML; }).join(''), '
', '
' ].join(''); }; function TextInput() { Input.apply(this, arguments); }; TextInput.prototype = new Input(); TextInput.prototype.render = function() { return this.bootstrapify($('')); } function NumberInput() { Input.apply(this, arguments); }; NumberInput.prototype = new Input(); NumberInput.prototype.render = function() { return this.bootstrapify($('')); }; function SoapyGainInput() { Input.apply(this, arguments); } SoapyGainInput.prototype = new Input(); SoapyGainInput.prototype.getClasses = function() { return []; }; SoapyGainInput.prototype.render = function(){ var markup = $( '
' + '
Gain mode
' + '
' + '' + '
' + '
' + '
' + '
Gain
' + '
' + '' + '
' + '
' + this.options.gains.map(function(g){ return '
' + '
' + g + '
' + '
' + '' + '
' + '
'; }).join('') ); var el = $(this.bootstrapify(markup)) var setMode = function(mode){ el.find('select').val(mode); el.find('.option').hide(); el.find('.gain-mode-' + mode).show(); }; el.on('change', 'select', function(){ var mode = $(this).val(); setMode(mode); }); if (typeof(this.value) === 'number') { setMode('single'); el.find('.gain-mode-single input').val(this.value); } else if (typeof(this.value) === 'string') { if (this.value === 'auto') { setMode('auto'); } else { setMode('separate'); values = $.extend.apply($, this.value.split(',').map(function(seg){ var split = seg.split('='); if (split.length < 2) return; var res = {}; res[split[0]] = parseInt(split[1]); return res; })); el.find('.gain-mode-separate input').each(function(){ var $input = $(this); var g = $input.data('gain'); $input.val(g in values ? values[g] : 0); }); } } else { setMode('auto'); } return el; }; function ProfileInput() { Input.apply(this, arguments); }; ProfileInput.prototype = new Input(); ProfileInput.prototype.render = function() { return $('

Profiles

'); }; function SchedulerInput() { Input.apply(this, arguments); }; SchedulerInput.prototype = new Input(); SchedulerInput.prototype.render = function() { return $('

Scheduler

'); };