add a bit more dynamic content
This commit is contained in:
parent
98cb1a8389
commit
a03176223a
@ -1,13 +1,14 @@
|
|||||||
function Input(name, value) {
|
function Input(name, value, label) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.value = value;
|
this.value = value;
|
||||||
|
this.label = label;
|
||||||
};
|
};
|
||||||
|
|
||||||
Input.prototype.bootstrapify = function(input, label) {
|
Input.prototype.bootstrapify = function(input) {
|
||||||
input.addClass('form-control').addClass('form-control-sm');
|
input.addClass('form-control').addClass('form-control-sm');
|
||||||
return [
|
return [
|
||||||
'<div class="form-group row">',
|
'<div class="form-group row">',
|
||||||
'<label class="col-form-label col-form-label-sm col-3" for="' + self.name + '">' + this.name + '</label>',
|
'<label class="col-form-label col-form-label-sm col-3" for="' + this.name + '">' + this.label + '</label>',
|
||||||
'<div class="col-9">',
|
'<div class="col-9">',
|
||||||
input[0].outerHTML,
|
input[0].outerHTML,
|
||||||
'</div>',
|
'</div>',
|
||||||
@ -55,34 +56,104 @@ SchedulerInput.prototype.render = function() {
|
|||||||
return $('<div><h3>Scheduler</h3></div>');
|
return $('<div><h3>Scheduler</h3></div>');
|
||||||
};
|
};
|
||||||
|
|
||||||
Input.mappings = {
|
function SdrDevice(el, data) {
|
||||||
"name": TextInput,
|
|
||||||
"type": TextInput,
|
|
||||||
"ppm": NumberInput,
|
|
||||||
"profiles": ProfileInput,
|
|
||||||
"scheduler": SchedulerInput
|
|
||||||
};
|
|
||||||
|
|
||||||
function SdrDevice(el) {
|
|
||||||
this.el = el;
|
this.el = el;
|
||||||
this.data = JSON.parse(decodeURIComponent(el.data('config')));
|
this.data = data;
|
||||||
this.inputs = {};
|
this.inputs = {};
|
||||||
this.render();
|
this.render();
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
el.on('click', '.fieldselector .btn', function() {
|
el.on('click', '.fieldselector .btn', function() {
|
||||||
var key = el.find('.fieldselector select').val();
|
var key = el.find('.fieldselector select').val();
|
||||||
self.data[key] = false;
|
self.data[key] = self.getInitialValue(key);
|
||||||
self.render();
|
self.render();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SdrDevice.create = function(el) {
|
||||||
|
var data = JSON.parse(decodeURIComponent(el.data('config')));
|
||||||
|
var type = data.type;
|
||||||
|
var constructor = SdrDevice.types[type] || SdrDevice;
|
||||||
|
return new constructor(el, data);
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getData = function() {
|
||||||
|
return $.extend(new Object(), this.getDefaults(), this.data);
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getDefaults = function() {
|
||||||
|
var defaults = {}
|
||||||
|
$.each(this.getMappings(), function(k, v) {
|
||||||
|
if (!v.includeInDefault) return;
|
||||||
|
defaults[k] = 'initialValue' in v ? v['initialValue'] : false;
|
||||||
|
});
|
||||||
|
return defaults;
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getMappings = function() {
|
||||||
|
return {
|
||||||
|
"name": {
|
||||||
|
constructor: TextInput,
|
||||||
|
label: "Name",
|
||||||
|
initialValue: "",
|
||||||
|
includeInDefault: true
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
constructor: TextInput,
|
||||||
|
label: "Type",
|
||||||
|
initialValue: '',
|
||||||
|
includeInDefault: true
|
||||||
|
},
|
||||||
|
"ppm": {
|
||||||
|
constructor: NumberInput,
|
||||||
|
label: "PPM",
|
||||||
|
initialValue: 0
|
||||||
|
},
|
||||||
|
"profiles": {
|
||||||
|
constructor: ProfileInput,
|
||||||
|
label: "Profiles",
|
||||||
|
initialValue: [],
|
||||||
|
includeInDefault: true,
|
||||||
|
},
|
||||||
|
"scheduler": {
|
||||||
|
constructor: SchedulerInput,
|
||||||
|
label: "Scheduler",
|
||||||
|
initialValue: {}
|
||||||
|
},
|
||||||
|
"rf_gain": {
|
||||||
|
constructor: TextInput,
|
||||||
|
label: "Gain",
|
||||||
|
initialValue: 0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getMapping = function(key) {
|
||||||
|
var mappings = this.getMappings();
|
||||||
|
return mappings[key];
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getInputClass = function(key) {
|
||||||
|
var mapping = this.getMapping(key);
|
||||||
|
return mapping && mapping.constructor || TextInput;
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getLabel = function(key) {
|
||||||
|
var mapping = this.getMapping(key);
|
||||||
|
return mapping && mapping.label || key;
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.prototype.getInitialValue = function(key) {
|
||||||
|
var mapping = this.getMapping(key);
|
||||||
|
return mapping && ('initialValue' in mapping) ? mapping['initialValue'] : false;
|
||||||
|
};
|
||||||
|
|
||||||
SdrDevice.prototype.render = function() {
|
SdrDevice.prototype.render = function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
self.el.empty();
|
self.el.empty();
|
||||||
$.each(this.data, function(key, value) {
|
$.each(this.getData(), function(key, value) {
|
||||||
var inputClass = Input.mappings[key] || TextInput;
|
var inputClass = self.getInputClass(key);
|
||||||
var input = new inputClass(key, value);
|
var input = new inputClass(key, value, self.getLabel(key));
|
||||||
self.inputs[key] = input;
|
self.inputs[key] = input;
|
||||||
self.el.append(input.render());
|
self.el.append(input.render());
|
||||||
});
|
});
|
||||||
@ -95,10 +166,10 @@ SdrDevice.prototype.renderFieldSelector = function() {
|
|||||||
'<h3>Add new configuration options<h3>' +
|
'<h3>Add new configuration options<h3>' +
|
||||||
'<div class="form-group row">' +
|
'<div class="form-group row">' +
|
||||||
'<div class="col-3"><select class="form-control form-control-sm">' +
|
'<div class="col-3"><select class="form-control form-control-sm">' +
|
||||||
Object.keys(Input.mappings).filter(function(m){
|
Object.keys(self.getMappings()).filter(function(m){
|
||||||
return !(m in self.data);
|
return !(m in self.data);
|
||||||
}).map(function(m) {
|
}).map(function(m) {
|
||||||
return '<option name="' + m + '">' + m + '</option>';
|
return '<option value="' + m + '">' + self.getLabel(m) + '</option>';
|
||||||
}).join('') +
|
}).join('') +
|
||||||
'</select></div>' +
|
'</select></div>' +
|
||||||
'<div class="col-2">' +
|
'<div class="col-2">' +
|
||||||
@ -108,11 +179,33 @@ SdrDevice.prototype.renderFieldSelector = function() {
|
|||||||
'</div>';
|
'</div>';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
RtlSdrDevice = function(el, data) {
|
||||||
|
SdrDevice.apply(this, arguments);
|
||||||
|
};
|
||||||
|
|
||||||
|
RtlSdrDevice.prototype = Object.create(SdrDevice.prototype);
|
||||||
|
RtlSdrDevice.prototype.constructor = RtlSdrDevice;
|
||||||
|
|
||||||
|
RtlSdrDevice.prototype.getMappings = function() {
|
||||||
|
var mappings = SdrDevice.prototype.getMappings.apply(this, arguments);
|
||||||
|
return $.extend(new Object(), mappings, {
|
||||||
|
"device": {
|
||||||
|
constructor: TextInput,
|
||||||
|
label: "Serial Number",
|
||||||
|
initialValue: ""
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
SdrDevice.types = {
|
||||||
|
'rtl_sdr': RtlSdrDevice
|
||||||
|
};
|
||||||
|
|
||||||
$.fn.sdrdevice = function() {
|
$.fn.sdrdevice = function() {
|
||||||
return this.map(function(){
|
return this.map(function(){
|
||||||
var el = $(this);
|
var el = $(this);
|
||||||
if (!el.data('sdrdevice')) {
|
if (!el.data('sdrdevice')) {
|
||||||
el.data('sdrdevice', new SdrDevice(el));
|
el.data('sdrdevice', SdrDevice.create(el));
|
||||||
}
|
}
|
||||||
return el.data('sdrdevice');
|
return el.data('sdrdevice');
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user