diff test_create/test_core.js @ 2886:c70036f28226

Fixes for #76 and #97
author Nicholas Jillings <nicholas.jillings@mail.bcu.ac.uk>
date Tue, 27 Jun 2017 13:07:41 +0100
parents 98209bb0fe87
children cedaf7ee1b81
line wrap: on
line diff
--- a/test_create/test_core.js	Mon Jun 26 12:52:42 2017 +0100
+++ b/test_create/test_core.js	Tue Jun 27 13:07:41 2017 +0100
@@ -83,6 +83,11 @@
         $s.globalSchema = specification.getSchema();
     });
     $s.specification = specification;
+    $s.selectedTestPrototype = undefined;
+    $s.setTestPrototype = function (obj) {
+        $s.selectedTestPrototype = obj;
+        $w.specification.interface = obj.interface;
+    }
 
     $s.addPage = function () {
         $s.specification.createNewPage();
@@ -132,7 +137,10 @@
         var obj = $s.testSpecifications.interfaces.find(function (i) {
             return i.name == name;
         });
-        specification.interface = obj.interface;
+        if (obj === undefined) {
+            throw ("Cannot find specification");
+        }
+        $s.setTestPrototype(obj);
     };
     // Get the test interface specifications
     $s.file = undefined;
@@ -191,6 +199,10 @@
             }
         }
     };
+
+    $s.configure = function () {}
+
+    $s.$watch("selectedTestPrototype", $s.configure);
 }]);
 
 AngularInterface.controller("survey", ['$scope', '$element', '$window', function ($s, $e, $w) {
@@ -283,6 +295,7 @@
             $s.interface.options.splice(index, 1);
         }
     };
+    $s.scales = [];
     $s.removeScale = function (scale) {
         var index = $s.interface.scales.findIndex(function (s) {
             return s == scale;
@@ -305,9 +318,62 @@
         scale.scales.forEach(function (s) {
             $s.interface.scales.push(s);
         });
-        $s.selectedScale = "Scale: " + scale.name;
+        $s.selectedScale = scale.name;
     };
-    $s.selectedScale = "Scale: Custom";
+    $s.selectedScale = undefined;
+
+    $s.configure = function () {
+        if ($s.selectedTestPrototype === undefined) {
+            return;
+        }
+        if ($s.selectedTestPrototype.checks && $s.selectedTestPrototype.checks.length >= 1) {
+            $s.selectedTestPrototype.checks.forEach(function (entry) {
+                var dom = $e[0].querySelector("[name=\"" + entry.name + "\"] input");
+                if (entry.support == "none") {
+                    dom.checked = false;
+                    dom.disabled = true;
+                }
+            });
+        }
+        if ($s.selectedTestPrototype.show && $s.selectedTestPrototype.show.length >= 1) {
+            $s.selectedTestPrototype.show.forEach(function (entry) {
+                var dom = $e[0].querySelector("[name=\"" + entry.name + "\"] input");
+                if (entry.support == "none") {
+                    dom.checked = false;
+                    dom.disabled = true;
+                }
+            });
+        }
+        if ($s.interface !== specification.interfaces) {
+            // Page specific interface nodes
+            if ($s.selectedTestPrototype.hasScales !== undefined && ($s.selectedTestPrototype.hasScales == "false" || $s.selectedTestPrototype.hasScales == false)) {
+                var elem = $e[0].querySelector("[name=\"scale-selection\"]")
+                elem.style.visibility = "hidden";
+                elem.style.height = "0px";
+            }
+            if ($s.selectedTestPrototype.scales && $s.selectedTestPrototype.show.length >= 1) {
+                $s.scales = [];
+                $s.selectedTestPrototype.scales.forEach(function (scalename) {
+                    var obj = $s.testSpecifications.scales.find(function (a) {
+                        return a.name == scalename;
+                    });
+                    $s.scales.push(obj);
+                });
+                if ($s.selectedTestPrototype.scales.includes($s.selectedScale) == false) {
+                    $s.clearScales();
+                }
+                if ($s.scales.length == 1) {
+                    $s.clearScales();
+                    $s.useScales($s.scales[0]);
+                }
+            } else {
+                $s.scales = $s.testSpecifications.scales;
+            }
+        }
+    };
+
+    $s.$watch("selectedTestPrototype", $s.configure);
+    $s.configure();
 }]);
 AngularInterface.controller("page", ['$scope', '$element', '$window', function ($s, $e, $w) {
     $s.addInterface = function () {