Config ScriptΒΆ
The Config API exposes a standardized set of GUI widgets for configuration of a module. Items are added sequentially in a vertical layout as the script executes. Below are some example scripts for various config elements.
// addLabel example
js.ConfigApi.addLabel("label")
// addText example
js.ConfigApi.addText(js.config.db_name, function(val){
js.config.db_name = val;
})
// addInput example
js.ConfigApi.addInput(js.config.field_name, function(val){
js.config.field_name = val;
})
// Add plus area
var params = {
"initial":js.config.field_name.map((tok)=>{JSON.stringify(tok)}),
"validate":function(val){return val.hasOwnProperty('answer')},
"callback":function(val){js.config.field_name = JSON.parse(val)},
"info":"<h3>Instructions</h3>",
"limit":2,
}
js.ConfigApi.addPlusArea(params)
// addPlusArea example
var initial = []
if(Object.prototype.toString.call(js.config.options) === "[object Array]"){
initial = js.config.options
}
var dfault = {"name":"Strategy", "desc":"", "questions":[]}
function valid_id(str){
return /^[A-Za-z][-A-Za-z0-9_:.]*$/.test(str)
}
function validate_obj(obj){
//console.log('trying', JSON.stringify(obj, null, 2))
var ret = true
if(Object.prototype.toString.call(obj) !== "[object Object]" )
ret = false
if(!obj.hasOwnProperty('name'))
ret = false
if(!valid_id(obj.name)){
alert('Name must also be a valid html id:' + obj.name)
ret = false
}
if(!obj.hasOwnProperty('desc'))
ret = false
if(!obj.hasOwnProperty('questions'))
ret = false
return ret
}
function deserialize(str){
try{
return JSON.parse(str)
}catch(e){
alert("Problem deserializing")
}
}
var params = {};
params.validate = function(str){
var obj = deserialize(str)
return validate_obj(obj)
}
params.initial = initial.map((tok)=>{
if(validate_obj(tok)){
return JSON.stringify(tok, null, 2)
}else{
return JSON.stringify(dfault, null, 2)
}
})
params.callback = function(vals){
js.config.options = vals.map((tok)=>{return deserialize(tok)})
}
params.info = "<b>this</b> is how to do it";
params.limit = 10
js.ConfigApi.addPlusArea(params)