diff --git a/src/main/webapp/scripts/lib/form2js/src/form2js.js b/src/main/webapp/scripts/lib/form2js/src/form2js.js index 55c9bac720e93c52afc21b818f1cf1cebb652124..61a977db1e8e2a5d8f1e34a5a5d2cabc2397f7f3 100755 --- a/src/main/webapp/scripts/lib/form2js/src/form2js.js +++ b/src/main/webapp/scripts/lib/form2js/src/form2js.js @@ -258,7 +258,7 @@ function extractNodeValues(node, nodeCallback, useIdIfEmptyName, getDisabled) { if (node.disabled && !getDisabled) return []; - var callbackResult, fieldValue, result, fieldName = getFieldName(node, useIdIfEmptyName); + var callbackResult, hasValue, fieldValue, result, fieldName = getFieldName(node, useIdIfEmptyName); callbackResult = nodeCallback && nodeCallback(node); @@ -267,7 +267,17 @@ } else if (fieldName != '' && node.nodeName.match(/INPUT|TEXTAREA/i)) { fieldValue = getFieldValue(node, getDisabled); - if (null === fieldValue) { + + hasValue = !!fieldValue; + + // convert items with 'array-list' class to an actual array + if (hasValue && /array-list|list-array/i.test(node.className)) { + fieldValue = fieldValue.split(',').map(function(item, i){ + return item.trim(); + }); + } + + if (!hasValue) { result = []; } else { result = [ { name: fieldName, value: fieldValue} ]; diff --git a/src/main/webapp/scripts/xnat/ui/panel.js b/src/main/webapp/scripts/xnat/ui/panel.js index 98b1dc8e72bc3b83290b46caae1cbb21401afea0..682c4dbdc9795d3b22fdb46de2997962ddb58d19 100644 --- a/src/main/webapp/scripts/xnat/ui/panel.js +++ b/src/main/webapp/scripts/xnat/ui/panel.js @@ -146,6 +146,7 @@ var XNAT = getObject(XNAT || {}); } // creates a panel that's a form that can be submitted + // TODO: REFACTOR THIS BEAST panel.form = function panelForm(opts, callback){ opts = cloneObject(opts); @@ -211,23 +212,30 @@ var XNAT = getObject(XNAT || {}); // find all form inputs with a name attribute $$(form).find(':input').each(function(){ + var $this = $(this); var val = lookupObjectValue(dataObj, this.name||this.title); //if (!val) return; if (Array.isArray(val)) { val = val.join(', '); + $this.addClass('array-list') } else { val = stringable(val) ? val : JSON.stringify(val); } - $(this).changeVal(val); + $this.not(':radio').changeVal(val); - if (/checkbox|radio/i.test(this.type)) { + if (/checkbox/i.test(this.type)) { this.checked = !!this.value; } + if (/radio/i.test(this.type)) { + this.checked = (this.value === val); + //$this.trigger('change'); + } + }); loadingDialog().closeAll(); @@ -875,13 +883,20 @@ var XNAT = getObject(XNAT || {}); panelTextarea.openEditor(); }; - opts.element.rows = 10; + opts.element.rows = opts.rows || opts.element.rows || 10; var textarea = spawn('textarea', opts.element); return XNAT.ui.template.panelDisplay(opts, textarea).spawned; }; panel.input.textarea = panel.textarea; + panel.textarea.arrayList = function(opts){ + opts = extend(true, {}, { + element: { $: { addClass: 'array-list' } } + }, opts); + return panel.textarea(opts); + }; + ////////////////////////////////////////////////// // SELECT MENU PANEL ELEMENTS ////////////////////////////////////////////////// diff --git a/src/main/webapp/scripts/xnat/ui/templates.js b/src/main/webapp/scripts/xnat/ui/templates.js index 0239e1e19f3cac2a79924129fad0f4263c2056bb..9c7733420f66dc68cea9e84f1f0ab3bad18a0c9f 100644 --- a/src/main/webapp/scripts/xnat/ui/templates.js +++ b/src/main/webapp/scripts/xnat/ui/templates.js @@ -128,7 +128,7 @@ var XNAT = getObject(XNAT); opts = cloneObject(opts); opts.id = opts.id||toDashed(opts.name||''); - opts.label = opts.label||opts.title||opts.name||''; + opts.label = opts.label||''; // pass in an element or create a new 'div' element element = @@ -140,7 +140,10 @@ var XNAT = getObject(XNAT); }, opts.element)); return template.panelElement(opts, [ - ['label.element-label|for='+element.id||opts.id, opts.label], + + // only add a label if specified + (opts.label ? ['label.element-label|for='+element.id||opts.id, opts.label] : ''), + ['div.element-wrapper', [].concat( (opts.beforeElement ? opts.beforeElement : []),