Mercurial > hg > webaudioevaluationtool
changeset 2907:a1e294297380
#222 WIP
author | Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk> |
---|---|
date | Mon, 31 Jul 2017 16:15:47 +0100 |
parents | 281393b64a13 |
children | 9c26e579e64d |
files | test_create.html test_create/style.css test_create/test_core.js xml/test-schema.xsd |
diffstat | 4 files changed, 48 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
--- a/test_create.html Fri Jul 21 14:48:37 2017 +0100 +++ b/test_create.html Mon Jul 31 16:15:47 2017 +0100 @@ -12,13 +12,14 @@ <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> <script type="text/javascript" src="js/xmllint.js"></script> - <title>WAET 1.2.1 Test Creator</title> + <title>WAET 1.2.2 Test Creator</title> </head> <body ng-app="creator" ng-controller="view"> <div class="container"> <div id="pageRoot"> - <h1>Web Audio Evaluation Tool - Test Creator</h1> + <h1>Web Audio Evaluation Tool</h1> + <h3>Test Creator <span class="label label-primary">v1.2.2</span></h3> </div> <button type="button" class="btn btn-info" ng-click="validate()">Validate</button> <button type="button" class="btn btn-success" ng-click="exportXML()" ng-disabled="validated == false">Export XML</button> @@ -53,7 +54,7 @@ </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Once the test is completed and save confirmed, the browser will redirect to this page, if not defined."> <span>Exit URL: </span> - <input type="text" ng-model="specification.returnURL" /> + <input type="text" ng-model="specification.returnURL" placeholder="{{placeholder('returnURL')}}" /> </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Randomise the page order"> <span>Randomise Page Order: </span> @@ -61,15 +62,15 @@ </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Set the number of pages to present to the user. This includes repeated pages. Set to '0' or blank to ignore. Randomise page order must be selected."> <span>Page Pool Size: </span> - <input type="number" ng-model="specification.poolSize" min="0" /> + <input type="number" ng-model="specification.poolSize" min="0" placeholder="{{placeholder('poolSize')}}" /> </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Automatically analyse and normalsie audio to this target LUFS. If unsure, use -25LUFS. 0 or blank disables normalisation"> <span>Loudness Normalisation (LUFS): </span> - <input type="number" ng-model="specification.loudness" max="0" /> + <input type="number" ng-model="specification.loudness" max="0" placeholder="{{placeholder('loudness')}}" /> </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Only perform the test if the browser reported sampling rate matches this."> <span>Fixed Sampling Rate: </span> - <input type="number" ng-model="specification.sampleRate" min="0" /> + <input type="number" ng-model="specification.sampleRate" min="0" placeholder="{{placeholder('sampleRate')}}" /> </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Show a 'method of adjustment' audio calibration before testing."> <span>Pre-Test audio calibration: </span> @@ -77,15 +78,15 @@ </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Default cross-fade time when switching between elements. Can be over-ridden on each page"> <span>Global Cross-fade time: </span> - <input type="number" ng-model="specification.crossFade" min="0" step="0.1" /> + <input type="number" ng-model="specification.crossFade" min="0" step="0.1" placeholder="{{placeholder('crossFade')}}" /> </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Default pre-play element silence. Can be over-ridden on each page and element"> <span>Global Fragment Pre-Silence: </span> - <input type="number" ng-model="specification.preSilence" min="0" step="0.1" /> + <input type="number" ng-model="specification.preSilence" min="0" step="0.1" placeholder="{{placeholder('preSilence')}}" /> </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Default post-play element silence. Can be over-ridden on each page and element"> <span>Global Fragment Post-Silence: </span> - <input type="number" ng-model="specification.preSilence" min="0" step="0.1" /> + <input type="number" ng-model="specification.postSilence" min="0" step="0.1" placeholder="{{placeholder('postSilence')}}" /> </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Disable switching of audio elements"> <span>Play audio one-at-a-time: </span> @@ -93,11 +94,11 @@ </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum number of times an audio fragment must be played"> <span>Minimum number of fragment plays</span> - <input type="number" ng-model="specification.minNumberPlays" min="0" max="{{specification.maxNumberPlays}}" /> + <input type="number" ng-model="specification.minNumberPlays" min="0" max="{{specification.maxNumberPlays}}" placeholder="{{placeholder('minNumberPlays')}}" /> </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Maximum number of times an audio fragment can be played"> <span>Maximum number of fragment plays</span> - <input type="number" ng-model="specification.maxNumberPlays" min="{{specification.minNumberPlays || 0}}" /> + <input type="number" ng-model="specification.maxNumberPlays" min="{{specification.minNumberPlays || 0}}" placeholder="{{placeholder('maxNumberPlays')}}" /> </div> </div> <div class="node"> @@ -468,7 +469,7 @@ </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Specify if this page should be repeated and how many times. Please note, that if page-pooling is also selected then it 'may' not repeat as many times."> <span>Repeat Page N-times: </span> - <input type="number" ng-model="page.repeatCount" value="0" step="1" /> + <input type="number" ng-model="page.repeatCount" value="0" step="1" placeholder="{{placeholder('repeatCount')}}" /> </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Loop audio playback until manually stopped or the page submit button is pressed"> <span>Loop audio: </span> @@ -480,7 +481,7 @@ </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global loudness normalisation"> <span>Loudness (page): </span> - <input type="number" ng-model="page.loudness" max="0" /> + <input type="number" ng-model="page.loudness" max="0" placeholder="{{specification.loudness || placeholder('loudness')}}" /> </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Label type to display on the fragments."> <span>Label type: </span> @@ -499,7 +500,7 @@ </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Select a subgroup of the given audio fragments to display. 0 or blank means all fragments will be displayed."> <span>Fragment pool size: </span> - <input type="number" ng-model="page.poolSize" min="0" max="page.audioElements.length" /> + <input type="number" ng-model="page.poolSize" min="0" max="page.audioElements.length" placeholder="{{placeholder('poolSize')}}" /> </div> <div class="attribute" ng-show="specification.poolSize > 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Always display this page, even after sub-pooling of pages"> <span>Always include page: </span> @@ -511,11 +512,11 @@ </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global pre-silence"> <span>Fragment pre-silence: </span> - <input type="number" ng-model="page.preSilence" min="0" step="0.1" /> + <input type="number" ng-model="page.preSilence" min="0" step="0.1" placeholder="{{specification.preSilence || placeholder('preSilence')}}" /> </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global post-silence"> <span>Fragment post-silence: </span> - <input type="number" ng-model="page.postSilence" min="0" step="0.1" /> + <input type="number" ng-model="page.postSilence" min="0" step="0.1" placeholder="{{specification.postSilence || placeholder('postSilence')}}" /> </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Disable switching of audio"> <span>Cannot interupt audio: </span> @@ -527,11 +528,11 @@ </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global minimum number of fragment plays"> <span>Minimum number of fragment plays</span> - <input type="number" ng-model="page.minNumberPlays" min="0" max="{{page.maxNumberPlays || specification.maxNumberPlays}}" /> + <input type="number" ng-model="page.minNumberPlays" min="0" max="{{page.maxNumberPlays || specification.maxNumberPlays}}" placeholder="{{specification.minNumberPlays || placeholder('minNumberPlays')}}" /> </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global maximum number of fragment plays"> <span>Maximum number of fragment plays</span> - <input type="number" ng-model="page.maxNumberPlays" min="{{page.minNumberPlays || specification.minNumberPlays || 0}}" /> + <input type="number" ng-model="page.maxNumberPlays" min="{{page.minNumberPlays || specification.minNumberPlays || 0}}" placeholder="{{specification.maxNumberPlays || placeholder('maxNumberPlays')}}" /> </div> </div> <div class="node" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Set the title of the page"> @@ -999,7 +1000,7 @@ </div> <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global and page loudness"> <span>Loudness: </span> - <input type="number" ng-model="fragment.loudness" max="0" /> + <input type="number" ng-model="fragment.loudness" max="0" placeholder="{{page.loudness || specification.loudness || ''}}" /> </div> <div class="attribute" ng-show="page.poolSize > 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Always include this fragment after any sub-pooling"> <span>Always include fragment: </span> @@ -1044,13 +1045,13 @@ <div id="popupHolder" ng-show="popupVisible"> <div ng-controller="introduction" class="popup" ng-show="popupVisible"> <div class="popupTitle" ng-switch="state"> - <span ng-switch-when="0">Test Creator</span> + <span ng-switch-when="0">Test Creator <span class="label label-primary">v1.2.2</span></span> <span ng-switch-when="1">Create New Test</span> </div> <div class="popupContent container-fluid" ng-switch="state"> <div ng-switch-when="0"> <div> - <span>Welcome to the WAET test creator tool. This will allow you to create a new test from scratch to suit your testing needs. If you wish to update a test file, please drag and drop the XML document into the area below for processing, otherwise press 'Next' to start a new test. This tool generates files for the WAET 1.2.1 version.</span> + <span>Welcome to the WAET test creator tool. This will allow you to create a new test from scratch to suit your testing needs. If you wish to update a test file, please drag and drop the XML document into the area below for processing, otherwise press 'Next' to start a new test. This tool generates files for the WAET 1.2.2 version.</span> </div> <div> <input type="file" id="files" ng-model="files" onchange="handleFiles(event)" />
--- a/test_create/style.css Fri Jul 21 14:48:37 2017 +0100 +++ b/test_create/style.css Mon Jul 31 16:15:47 2017 +0100 @@ -74,10 +74,10 @@ width: 80%; } .node > h1, -h2, -h3, -h4, -h5 { +.node > h2, +.node > h3, +.node > h4, +.node > h5 { text-align: center; } .attribute {
--- a/test_create/test_core.js Fri Jul 21 14:48:37 2017 +0100 +++ b/test_create/test_core.js Mon Jul 31 16:15:47 2017 +0100 @@ -240,6 +240,15 @@ $s.configure = function () {} $s.$watch("selectedTestPrototype", $s.configure); + + $s.placeholder = function (name) { + var spec = $s.schema.querySelector("attribute[name=\"" + name + "\"]") || $w.specification.schema.querySelector("attribute[name=\"" + name + "\"]"); + var attr = spec.getAttribute("default"); + if (attr === undefined) { + return ""; + } + return attr; + } }]); AngularInterface.controller("survey", ['$scope', '$element', '$window', function ($s, $e, $w) { @@ -413,6 +422,8 @@ $s.configure(); }]); AngularInterface.controller("page", ['$scope', '$element', '$window', function ($s, $e, $w) { + $s.schema = $w.specification.schema.querySelector("element[name=\"page\"]"); + $s.page.label = "default"; $s.addInterface = function () { $s.page.addInterface(); }; @@ -450,4 +461,13 @@ } $s.page.audioElements.splice(index, 1); }; + + $s.placeholder = function (name) { + var spec = $s.schema.querySelector("attribute[name=\"" + name + "\"]") || $w.specification.schema.querySelector("attribute[name=\"" + name + "\"]"); + var attr = spec.getAttribute("default"); + if (attr === undefined) { + return ""; + } + return attr; + } }]);
--- a/xml/test-schema.xsd Fri Jul 21 14:48:37 2017 +0100 +++ b/xml/test-schema.xsd Mon Jul 31 16:15:47 2017 +0100 @@ -12,14 +12,14 @@ <xs:attribute name="poolSize" type="xs:nonNegativeInteger" default="0" /> <xs:attribute name="alwaysInclude" type="xs:boolean" default="false" /> - <xs:attribute name="preSilence"> + <xs:attribute name="preSilence" default="0.0"> <xs:simpleType> <xs:restriction base="xs:decimal"> <xs:minInclusive value="0.0" /> </xs:restriction> </xs:simpleType> </xs:attribute> - <xs:attribute name="postSilence"> + <xs:attribute name="postSilence" default="0.0"> <xs:simpleType> <xs:restriction base="xs:decimal"> <xs:minInclusive value="0.0" />