diff js/core.js @ 3013:5acdaf4c14c3

Merge branch 'vnext' into Dev_main
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Wed, 06 Sep 2017 14:50:13 +0100
parents a10cbbccc4f3 3342bc1f3256
children 664065577426
line wrap: on
line diff
--- a/js/core.js	Fri Aug 04 11:27:55 2017 +0200
+++ b/js/core.js	Wed Sep 06 14:50:13 2017 +0100
@@ -677,9 +677,10 @@
         var table = document.createElement("table");
         table.className = "popup-option-list";
         table.border = "0";
+        var nodelist = [];
         node.specification.options.forEach(function (option, index) {
             var tr = document.createElement("tr");
-            table.appendChild(tr);
+            nodelist.push(tr);
             var td = document.createElement("td");
             tr.appendChild(td);
             var input = document.createElement('input');
@@ -695,20 +696,37 @@
             tr = document.createElement('div');
             tr.setAttribute('name', 'option');
             tr.className = "popup-option-checbox";
-            if (node.response[index] !== undefined) {
-                if (node.response[index].checked === true) {
+            var resp = undefined;
+            if (node.response.length > 0) {
+                resp = node.response.find(function (a) {
+                    return a.name == option.name;
+                });
+            }
+            if (resp !== undefined) {
+                if (resp.checked === true) {
                     input.checked = "true";
                 }
+            } else {
+                node.response.push({
+                    "name": option.name,
+                    "text": option.text,
+                    "checked": false
+                });
             }
             index++;
         });
+        if (node.specification.randomise) {
+            nodelist = randomiseOrder(nodelist);
+        }
+        nodelist.forEach(function (e) {
+            table.appendChild(e);
+        });
         this.popupResponse.appendChild(table);
     }
 
     function processCheckbox(node) {
         console.log("Checkbox: " + node.specification.statement);
         var inputs = this.popupResponse.getElementsByTagName('input');
-        node.response = [];
         var numChecked = 0,
             i;
         for (i = 0; i < node.specification.options.length; i++) {
@@ -738,10 +756,9 @@
             }
         }
         for (i = 0; i < node.specification.options.length; i++) {
-            node.response.push({
-                name: node.specification.options[i].name,
-                text: node.specification.options[i].text,
-                checked: inputs[i].checked
+            node.response.forEach(function (a) {
+                var input = this.popupResponse.querySelector("#" + a.name);
+                a.checked = input.checked;
             });
             console.log(node.specification.options[i].name + ": " + inputs[i].checked);
         }
@@ -781,12 +798,10 @@
         var table = document.createElement("table");
         table.className = "popup-option-list";
         table.border = "0";
-        if (node.response === null || node.response.length === 0) {
-            node.response = [];
-        }
+        var nodelist = [];
         node.specification.options.forEach(function (option, index) {
             var tr = document.createElement("tr");
-            table.appendChild(tr);
+            nodelist.push(tr);
             var td = document.createElement("td");
             tr.appendChild(td);
             var input = document.createElement('input');
@@ -802,8 +817,16 @@
             td.appendChild(span);
             tr = document.createElement('div');
             tr.setAttribute('name', 'option');
-            tr.className = "popup-option-checbox";
-            table.appendChild(tr);
+            tr.className = "popup-option-checkbox";
+            if (node.response.name === option.name) {
+                input.checked = true;
+            }
+        });
+        if (node.specification.randomise) {
+            nodelist = randomiseOrder(nodelist);
+        }
+        nodelist.forEach(function (e) {
+            table.appendChild(e);
         });
         this.popupResponse.appendChild(table);
     }
@@ -1968,13 +1991,15 @@
                 // Safari does not like using 'this' to reference the calling object!
                 //event.currentTarget.owner.metric.stopListening(audioEngineContext.timer.getTestTime(),event.currentTarget.owner.getCurrentPosition());
                 if (event.currentTarget !== null) {
-                    event.currentTarget.owner.stop(audioContext.currentTime + 1);
+                    event.currentTarget.owner.stop(audioContext.currentTime + 0.1);
                 }
             };
             this.outputGain.gain.cancelScheduledValues(audioContext.currentTime);
             if (!audioEngineContext.loopPlayback || !audioEngineContext.synchPlayback) {
                 this.metric.startListening(audioEngineContext.timer.getTestTime());
-                this.outputGain.gain.linearRampToValueAtTime(this.onplayGain, startTime + specification.crossFade);
+                if (this.outputGain.gain.value !== this.onplayGain) {
+                    this.outputGain.gain.linearRampToValueAtTime(this.onplayGain, startTime + Number(specification.crossFade));
+                }
                 this.interfaceDOM.startPlayback();
             } else {
                 this.outputGain.gain.linearRampToValueAtTime(0.0, startTime);