json-object-editor
Version:
JOE the Json Object Editor | Platform Edition
120 lines (116 loc) • 5.9 kB
JavaScript
var question ={
title: 'Q | ${name}',
info:"The question panel is where you can manage the questions used to build a form.",
// Curated summary for agents
summary:{
description:'Reusable question definition used to build forms with various input types.',
purpose:'Questions define form field types (text, select, boolean, etc.) and can be organized into forms. Questions can reference datasets for select/multiple types, can be marked as usable for visitor ID or submission date tracking, and are categorized with tags. Questions are used in the Questionnaire and Church apps.',
labelField:'name',
defaultSort:{ field:'joeUpdated', dir:'desc' },
searchableFields:['name','info','description','title','fieldname','_id'],
allowedSorts:['joeUpdated','created','name','question_type'],
relationships:{
outbound:[
{ field:'tags', targetSchema:'tag', cardinality:'many' }
],
inbound:{ graphRef:'server/relationships.graph.json' }
},
joeManagedFields:['created','joeUpdated'],
fields:[
{ name:'_id', type:'string', required:true },
{ name:'itemtype', type:'string', required:true, const:'question' },
{ name:'name', type:'string', required:true },
{ name:'info', type:'string' },
{ name:'description', type:'string' },
{ name:'title', type:'string' },
{ name:'fieldname', type:'string' },
{ name:'question_type', type:'string', enumValues:['oneline','textarea','select','boolean','multiple','content','password','number'] },
{ name:'question_dataset', type:'string' },
{ name:'option_template', type:'string' },
{ name:'value_template', type:'string' },
{ name:'options', type:'objectList' },
{ name:'content', type:'code' },
{ name:'required', type:'boolean' },
{ name:'canBeId', type:'boolean' },
{ name:'canBeDate', type:'boolean' },
{ name:'tags', type:'string', isArray:true, isReference:true, targetSchema:'tag' },
{ name:'joeUpdated', type:'string', format:'date-time', required:true },
{ name:'created', type:'string', format:'date-time', required:true }
]
},
subsets:function(){
return [{name:'Required',filter:{required:true},stripeColor:'#ff9999'}
].concat(_joe.Filter.Options.getDatasetPropertyValues(
'question',
'question_type',
{ group: 'fieldtype', collapsed: false } // optional grouping
));
},
stripeColor:function(item){
if(item.required){
return {
title:'Required',
color:'#ff9999'
};
}
},
filters:function(item){
return _joe.Filter.Options.tags({group:'tags',untagged:true,collapsed:true}).concat(_joe.Filter.Options.status({group:'status',collapsed:true}));
},
fields:[
'name',
{name:'info',width:'50%'},
{extend:'description',specs:{comment:'description of question background and purpose.'}},
{name:'title',width:'50%'},
{name:'fieldname',comment:'used for database storage instead of name field'},
{name:'question_type',type:'select', rerender:'options,content,question_dataset,option_template',
values:['oneline','textarea','select','boolean','multiple','content','password','number']},
{name:'question_dataset',type:'select',width:'33%',
values:function(){
return [{name:'none',value:''}].concat(__collectionNames);
},hidden:function(item){
return (['multiple','select'].indexOf(item.question_type) == -1);
}
},
{name:'option_template',width:'33%',display:'option template',comment:'template for each option, use ${property} to display the property value.',
hidden:function(item){
return (['multiple','select'].indexOf(item.question_type) == -1);
}
},
{name:'value_template',width:'33%',display:'value template',comment:'defaults to _id',
hidden:function(item){
return (['multiple','select'].indexOf(item.question_type) == -1);
}
},
{name:'options',type:'objectList',comment:'label is the wording, value is the code',
hidden:function(item){
return (['multiple','select'].indexOf(item.question_type) == -1);
},
properties:['label','value']
},
{name:'content',type:'code',
comment:'receives an object of {question,form} when run as function.',
hidden:function(item){
return (item.question_type != 'content')
}},
'required:boolean',
{sidebar_start:'right'},
{section_start:'adv',collapsed:false},
{name:'canBeId',type:'boolean',tooltip:'can this field be used as form visitor id',display:'use as id',label:'can be used as visitor ID'},
{name:'canBeDate',type:'boolean',tooltip:'can this field be used as form submission date',display:'use as date',label:'can be used as form date'},
{section_end:'adv'},
'status',
'tags',
{sidebar_end:'right'},
{section_start:'system',collapsed:true},
'_id','created','itemtype',
{section_end:'system'}
],
idprop: '_id',
listView:{
title: '<joe-subtext>${fieldname}</joe-subtext>'
+'<joe-title>${name}</joe-title><joe-subtitle>${question_type}</joe-subtitle>',
listWindowTitle: 'Questions'
}
};
module.exports = question;