From 93bdfefc85cd8fa152202cd43e362b66118f55be Mon Sep 17 00:00:00 2001
From: "Mark M. Florida" <markflorida@wustl.edu>
Date: Thu, 11 Aug 2016 15:14:39 -0500
Subject: [PATCH] XNAT-4461: Checkbox fix

---
 src/main/webapp/scripts/xnat/spawner.js  |  5 ++++-
 src/main/webapp/scripts/xnat/ui/input.js |  1 +
 src/main/webapp/scripts/xnat/ui/panel.js | 20 +++++++++++++-------
 3 files changed, 18 insertions(+), 8 deletions(-)

diff --git a/src/main/webapp/scripts/xnat/spawner.js b/src/main/webapp/scripts/xnat/spawner.js
index 6088de02..66fa3444 100644
--- a/src/main/webapp/scripts/xnat/spawner.js
+++ b/src/main/webapp/scripts/xnat/spawner.js
@@ -65,6 +65,8 @@ var XNAT = getObject(XNAT);
             // lastly use the object's own name
             prop.name = prop.name || item;
 
+            prop.id = prop.id || prop.element.id || toDashed(prop.name);
+
             // accept 'kind' or 'type' property name
             // but 'kind' will take priority
             // with a fallback to a generic div
@@ -146,7 +148,8 @@ var XNAT = getObject(XNAT);
 
                 }
                 else {
-                    spawner.notSpawned.push(item);
+                    if (hasConsole) console.log('not spawned: ' + prop);
+                    spawner.notSpawned.push(prop);
                 }
             }
 
diff --git a/src/main/webapp/scripts/xnat/ui/input.js b/src/main/webapp/scripts/xnat/ui/input.js
index 0f829de3..66875c5a 100644
--- a/src/main/webapp/scripts/xnat/ui/input.js
+++ b/src/main/webapp/scripts/xnat/ui/input.js
@@ -134,6 +134,7 @@ var XNAT = getObject(XNAT);
     input.radio = function(config){
         otherTypes.push('radio');
         config = extend(true, {}, config, config.element);
+        return setupType('radio', '', config);
     };
 
     // save a list of all available input types
diff --git a/src/main/webapp/scripts/xnat/ui/panel.js b/src/main/webapp/scripts/xnat/ui/panel.js
index 1e9969d8..0747ed1a 100644
--- a/src/main/webapp/scripts/xnat/ui/panel.js
+++ b/src/main/webapp/scripts/xnat/ui/panel.js
@@ -225,10 +225,10 @@ var XNAT = getObject(XNAT || {});
                     val = stringable(val) ? val : JSON.stringify(val);
                 }
 
-                $this.not(':radio').changeVal(val);
+                $this.changeVal(val);
 
                 if (/checkbox/i.test(this.type)) {
-                    this.checked = (this.value === val || !!this.value);
+                    this.checked = realValue(val);
                 }
 
                 if (/radio/i.test(this.type)) {
@@ -856,10 +856,13 @@ var XNAT = getObject(XNAT || {});
     };
 
     panel.textarea = function(opts){
+
         opts = cloneObject(opts);
         opts.element = opts.element || opts.config || {};
+
         if (opts.id) opts.element.id = opts.id;
         if (opts.name) opts.element.name = opts.name;
+
         opts.element.html =
             opts.element.html ||
             opts.element.value ||
@@ -873,19 +876,22 @@ var XNAT = getObject(XNAT || {});
         if (opts.code || opts.codeLanguage) {
             opts.code = opts.code || opts.codeLanguage;
             addDataObjects(opts.element, {
-                codeLanguage: opts.code
+                codeEditor: opts.code,
+                codeLanguage: opts.codeLanguage || opts.code
             });
             // open code editor on double-click
-            opts.element.ondblclick = function(){
-                var panelTextarea = XNAT.app.codeEditor.init(this, { language: opts.code || 'html' });
-                panelTextarea.openEditor();
-            };
+            // opts.element.ondblclick = function(){
+            //     var panelTextarea = XNAT.app.codeEditor.init(this, { language: opts.code || 'html' });
+            //     panelTextarea.openEditor();
+            // };
         }
 
         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;
 
-- 
GitLab