# HG changeset patch # User Nicholas Jillings # Date 1504705813 -3600 # Node ID 5acdaf4c14c38da247d953771fb986bf1002c448 # Parent 03b9e845f7302733d28e5ea921415086d784d2e1# Parent 3342bc1f325682a5b598a6adf38ff03be66af0ec Merge branch 'vnext' into Dev_main diff -r 03b9e845f730 -r 5acdaf4c14c3 css/core.css --- a/css/core.css Fri Aug 04 11:27:55 2017 +0200 +++ b/css/core.css Wed Sep 06 14:50:13 2017 +0100 @@ -88,14 +88,14 @@ border-style: solid; background-color: #fff; } -div.popup-option-checbox { +div.popup-option-checkbox { /* Popup window checkbox */ padding: 5px; width: fit-content; width: -moz-fit-content; width: -webkit-fit-content; } -div.popup-option-checbox input { +div.popup-option-checkbox input { /* Popup window checkbox */ margin-right: 15px; } diff -r 03b9e845f730 -r 5acdaf4c14c3 js/core.js --- 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); diff -r 03b9e845f730 -r 5acdaf4c14c3 js/loudness.js --- a/js/loudness.js Fri Aug 04 11:27:55 2017 +0200 +++ b/js/loudness.js Wed Sep 06 14:50:13 2017 +0100 @@ -31,7 +31,7 @@ target = -23; } if (offlineContext === undefined) { - offlineContext = new OfflineAudioContext(audioContext.destination.channelCount, buffer.buffer.duration * audioContext.sampleRate, audioContext.sampleRate); + offlineContext = new OfflineAudioContext(audioContext.destination.channelCount, Math.max(0.4, buffer.buffer.duration) * audioContext.sampleRate, audioContext.sampleRate); } // Create the required filters var KFilter = offlineContext.createBiquadFilter(); @@ -80,7 +80,7 @@ var frame_size = Math.floor(buffer.sampleRate * frame_dur); var step_size = Math.floor(frame_size * (1.0 - frame_overlap)); var num_frames = Math.floor((buffer.length - frame_size) / step_size); - num_frames = Math.max(num_frames, 0); + num_frames = Math.max(num_frames, 1); var MS = Array(buffer.numberOfChannels); for (var c = 0; c < buffer.numberOfChannels; c++) { diff -r 03b9e845f730 -r 5acdaf4c14c3 tests/examples/APE_example.xml --- a/tests/examples/APE_example.xml Fri Aug 04 11:27:55 2017 +0200 +++ b/tests/examples/APE_example.xml Wed Sep 06 14:50:13 2017 +0100 @@ -2,24 +2,24 @@ - + Please enter your name. - - + + Please select with which activities you have any experience (example checkbox question) - - + + What instrument did you play - - + + This is an example of an 'APE'-style test, with two pages, using the test stimuli in 'example_eval/'. - + diff -r 03b9e845f730 -r 5acdaf4c14c3 xml/test-schema.xsd --- a/xml/test-schema.xsd Fri Aug 04 11:27:55 2017 +0200 +++ b/xml/test-schema.xsd Wed Sep 06 14:50:13 2017 +0100 @@ -386,6 +386,7 @@ + @@ -411,6 +412,7 @@ +