Mercurial > hg > webaudioevaluationtool
comparison test_create.html @ 2916:300bb2bbba4a
Merge branch 'master' of https://github.com/BrechtDeMan/WebAudioEvaluationTool
author | www-data <www-data@sucuk.dcs.qmul.ac.uk> |
---|---|
date | Tue, 01 Aug 2017 15:23:47 +0100 |
parents | 7b6cdd27f3ee |
children | c496aef6448b a5a6c44bab6e |
comparison
equal
deleted
inserted
replaced
2904:0e4b84497040 | 2916:300bb2bbba4a |
---|---|
10 <script type="text/javascript" src="js/specification.js"></script> | 10 <script type="text/javascript" src="js/specification.js"></script> |
11 <script type="text/javascript" src="test_create/test_core.js"></script> | 11 <script type="text/javascript" src="test_create/test_core.js"></script> |
12 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> | 12 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> |
13 <script type="text/javascript" src="js/xmllint.js"></script> | 13 <script type="text/javascript" src="js/xmllint.js"></script> |
14 | 14 |
15 <title>WAET 1.2.1 Test Creator</title> | 15 <title>WAET 1.2.2 Test Creator</title> |
16 </head> | 16 </head> |
17 | 17 |
18 <body ng-app="creator" ng-controller="view"> | 18 <body ng-app="creator" ng-controller="view"> |
19 <div class="container"> | 19 <div class="container"> |
20 <div id="pageRoot"> | 20 <div id="pageRoot"> |
21 <h1>Web Audio Evaluation Tool - Test Creator</h1> | 21 <h1>Web Audio Evaluation Tool</h1> |
22 <h3>Test Creator <span class="label label-primary">v1.2.2</span></h3> | |
22 </div> | 23 </div> |
23 <button type="button" class="btn btn-info" ng-click="validate()">Validate</button> | 24 <button type="button" class="btn btn-info" ng-click="validate()">Validate</button> |
24 <button type="button" class="btn btn-success" ng-click="exportXML()" ng-disabled="validated == false">Export XML</button> | 25 <button type="button" class="btn btn-success" ng-click="exportXML()" ng-disabled="validated == false">Export XML</button> |
25 <div ng-switch on="validated" ng-show="showValidationMessages"> | 26 <div ng-switch on="validated" ng-show="showValidationMessages"> |
26 <div class="panel panel-danger" ng-switch-when="false"> | 27 <div class="panel panel-danger" ng-switch-when="false"> |
43 <div id="setupNode" class="node" ng-controller="setup"> | 44 <div id="setupNode" class="node" ng-controller="setup"> |
44 <h2>Setup</h2> | 45 <h2>Setup</h2> |
45 <div class="attributes"> | 46 <div class="attributes"> |
46 <div class="attribute"> | 47 <div class="attribute"> |
47 <span>Interface: </span> | 48 <span>Interface: </span> |
48 <input type="text" ng-model="specification.interface" required/> | 49 <select type="text" ng-model="specification.interface" required> |
50 <option value="{{i.name}}" ng-repeat="i in availableInterfaceModules">{{i.name}}</option> | |
51 </select> | |
49 </div> | 52 </div> |
50 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="If you would like to save to a server other than your hosting server, you can place the full WAET URL here"> | 53 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="If you would like to save to a server other than your hosting server, you can place the full WAET URL here"> |
51 <span>Save URL: </span> | 54 <span>Save URL: </span> |
52 <input type="text" ng-model="specification.projectReturn" placeholder="save.php" /> | 55 <input type="text" ng-model="specification.projectReturn" placeholder="save.php" /> |
53 </div> | 56 </div> |
54 <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."> | 57 <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."> |
55 <span>Exit URL: </span> | 58 <span>Exit URL: </span> |
56 <input type="text" ng-model="specification.returnURL" /> | 59 <input type="text" ng-model="specification.returnURL" placeholder="{{placeholder('returnURL')}}" /> |
57 </div> | 60 </div> |
58 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Randomise the page order"> | 61 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Randomise the page order"> |
59 <span>Randomise Page Order: </span> | 62 <span>Randomise Page Order: </span> |
60 <input type="checkbox" ng-model="specification.randomiseOrder" /> | 63 <input type="checkbox" ng-model="specification.randomiseOrder" /> |
61 </div> | 64 </div> |
62 <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."> | 65 <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."> |
63 <span>Page Pool Size: </span> | 66 <span>Page Pool Size: </span> |
64 <input type="number" ng-model="specification.poolSize" min="0" /> | 67 <input type="number" ng-model="specification.poolSize" min="0" placeholder="{{placeholder('poolSize')}}" /> |
65 </div> | 68 </div> |
66 <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"> | 69 <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"> |
67 <span>Loudness Normalisation (LUFS): </span> | 70 <span>Loudness Normalisation (LUFS): </span> |
68 <input type="number" ng-model="specification.loudness" max="0" /> | 71 <input type="number" ng-model="specification.loudness" max="0" placeholder="{{placeholder('loudness')}}" /> |
69 </div> | 72 </div> |
70 <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."> | 73 <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."> |
71 <span>Fixed Sampling Rate: </span> | 74 <span>Fixed Sampling Rate: </span> |
72 <input type="number" ng-model="specification.sampleRate" min="0" /> | 75 <input type="number" ng-model="specification.sampleRate" min="0" placeholder="{{placeholder('sampleRate')}}" /> |
73 </div> | 76 </div> |
74 <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."> | 77 <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."> |
75 <span>Pre-Test audio calibration: </span> | 78 <span>Pre-Test audio calibration: </span> |
76 <input type="checkbox" ng-model="specification.calibration" /> | 79 <input type="checkbox" ng-model="specification.calibration" /> |
77 </div> | 80 </div> |
78 <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"> | 81 <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"> |
79 <span>Global Cross-fade time: </span> | 82 <span>Global Cross-fade time: </span> |
80 <input type="number" ng-model="specification.crossFade" min="0" step="0.1" /> | 83 <input type="number" ng-model="specification.crossFade" min="0" step="0.1" placeholder="{{placeholder('crossFade')}}" /> |
81 </div> | 84 </div> |
82 <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"> | 85 <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"> |
83 <span>Global Fragment Pre-Silence: </span> | 86 <span>Global Fragment Pre-Silence: </span> |
84 <input type="number" ng-model="specification.preSilence" min="0" step="0.1" /> | 87 <input type="number" ng-model="specification.preSilence" min="0" step="0.1" placeholder="{{placeholder('preSilence')}}" /> |
85 </div> | 88 </div> |
86 <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"> | 89 <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"> |
87 <span>Global Fragment Post-Silence: </span> | 90 <span>Global Fragment Post-Silence: </span> |
88 <input type="number" ng-model="specification.preSilence" min="0" step="0.1" /> | 91 <input type="number" ng-model="specification.postSilence" min="0" step="0.1" placeholder="{{placeholder('postSilence')}}" /> |
89 </div> | 92 </div> |
90 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Disable switching of audio elements"> | 93 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Disable switching of audio elements"> |
91 <span>Play audio one-at-a-time: </span> | 94 <span>Play audio one-at-a-time: </span> |
92 <input type="checkbox" ng-model="specification.playOne" /> | 95 <input type="checkbox" ng-model="specification.playOne" /> |
93 </div> | 96 </div> |
94 <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"> | 97 <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"> |
95 <span>Minimum number of fragment plays</span> | 98 <span>Minimum number of fragment plays</span> |
96 <input type="number" ng-model="specification.minNumberPlays" min="0" max="{{specification.maxNumberPlays}}" /> | 99 <input type="number" ng-model="specification.minNumberPlays" min="0" max="{{specification.maxNumberPlays}}" placeholder="{{placeholder('minNumberPlays')}}" /> |
97 </div> | 100 </div> |
98 <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"> | 101 <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"> |
99 <span>Maximum number of fragment plays</span> | 102 <span>Maximum number of fragment plays</span> |
100 <input type="number" ng-model="specification.maxNumberPlays" min="{{specification.minNumberPlays || 0}}" /> | 103 <input type="number" ng-model="specification.maxNumberPlays" min="{{specification.minNumberPlays || 0}}" placeholder="{{placeholder('maxNumberPlays')}}" /> |
101 </div> | 104 </div> |
102 </div> | 105 </div> |
103 <div class="node"> | 106 <div class="node"> |
104 <h2>Test Completed Message</h2> | 107 <h2>Test Completed Message</h2> |
105 <textarea ng-model="specification.exitText" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Once the test is completed, you can show a message to the user. Markdown syntax is supported for formatting."></textarea> | 108 <textarea ng-model="specification.exitText" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Once the test is completed, you can show a message to the user. Markdown syntax is supported for formatting."></textarea> |
138 </div> | 141 </div> |
139 </div> | 142 </div> |
140 <div id="globalpresurvey" class="node" ng-controller="survey" ng-init="survey = specification.preTest"> | 143 <div id="globalpresurvey" class="node" ng-controller="survey" ng-init="survey = specification.preTest"> |
141 <h2>Pre Test Survey</h2> | 144 <h2>Pre Test Survey</h2> |
142 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button> | 145 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button> |
143 <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption"> | 146 <div class="node surveyentry" ng-repeat="opt in survey.options" ng-controller="surveyOption"> |
144 <h3>Survey Entry</h3> | 147 <h3>Survey Entry</h3> |
145 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button> | 148 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button> |
146 <div class="attributes"> | 149 <div class="attributes"> |
147 <div class="attribute"> | 150 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Type of survey entry."> |
148 <span>Survey Type: </span> | 151 <span>Survey Type: </span> |
149 <select ng-model="opt.type"> | 152 <select ng-model="opt.type"> |
150 <option value="question">Question</option> | 153 <option value="question">Question</option> |
151 <option value="radio">Radio</option> | 154 <option value="radio">Radio</option> |
152 <option value="checkbox">Checkbox</option> | 155 <option value="checkbox">Checkbox</option> |
155 <option value="slider">Slider</option> | 158 <option value="slider">Slider</option> |
156 <option value="video">Video</option> | 159 <option value="video">Video</option> |
157 <option value="youtube">YouTube</option> | 160 <option value="youtube">YouTube</option> |
158 </select> | 161 </select> |
159 </div> | 162 </div> |
160 <div class="attribute"> | 163 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Unique across the entire session of all ID entries. "> |
161 <span>Unique Survey Entry ID:</span> | 164 <span>Unique Survey Entry ID:</span> |
162 <input type="text" ng-model="opt.id" required/> | 165 <input type="text" ng-model="opt.id" required/> |
163 </div> | 166 </div> |
164 <div class="attribute"> | 167 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Friendly name. Will be used in test results parsers instead of the ID, if defined."> |
165 <span>Entry Name:</span> | 168 <span>Entry Name:</span> |
166 <input type="text" ng-model="opt.name" /> | 169 <input type="text" ng-model="opt.name" /> |
167 </div> | 170 </div> |
168 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0"> | 171 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="An answer must be given to continue with the test."> |
169 <span>Mandatory:</span> | 172 <span>Mandatory:</span> |
170 <input type="checkbox" ng-model="opt.mandatory" /> | 173 <input type="checkbox" ng-model="opt.mandatory" /> |
171 </div> | 174 </div> |
172 <div class="attribute"> | 175 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum time in seconds before continuing."> |
173 <span>Minimum Wait Time (s):</span> | 176 <span>Minimum Wait Time (s):</span> |
174 <input type="number" ng-model="opt.minWait" min="0" /> | 177 <input type="number" ng-model="opt.minWait" min="0" /> |
175 </div> | 178 </div> |
176 <div class="attribute" ng-show="opt.type == 'question'"> | 179 <div class="attribute" ng-show="opt.type == 'question'" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Size of the displayed text box. Does not limit entry but may discourage (or encourage) longer ansewrs if bigger."> |
177 <span>Box Size:</span> | 180 <span>Box Size:</span> |
178 <select ng-model="opt.boxsize"> | 181 <select ng-model="opt.boxsize"> |
179 <option value="small">Small</option> | 182 <option value="small">Small</option> |
180 <option value="normal">Normal</option> | 183 <option value="normal">Normal</option> |
181 <option value="large">Large</option> | 184 <option value="large">Large</option> |
182 <option value="huge">Huge</option> | 185 <option value="huge">Huge</option> |
183 </select> | 186 </select> |
184 </div> | 187 </div> |
185 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> | 188 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="The minimum number of options that must be selected before continuing"> |
186 <span>Minimum Selected:</span> | 189 <span>Minimum Selected:</span> |
187 <input type="number" ng-model="opt.min" min="0" /> | 190 <input type="number" ng-model="opt.min" min="0" /> |
188 </div> | 191 </div> |
189 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> | 192 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Maximum number of options that can be selected to continue."> |
190 <span>Maximum Selected:</span> | 193 <span>Maximum Selected:</span> |
191 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" /> | 194 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" /> |
192 </div> | 195 </div> |
193 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> | 196 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum numerical value"> |
194 <span>Minimum Value:</span> | 197 <span>Minimum Value:</span> |
195 <input type="number" ng-model="opt.min" /> | 198 <input type="number" ng-model="opt.min" /> |
196 </div> | 199 </div> |
197 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> | 200 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Maximum numerical value"> |
198 <span>Maximum Value:</span> | 201 <span>Maximum Value:</span> |
199 <input type="number" ng-model="opt.max" /> | 202 <input type="number" ng-model="opt.max" /> |
200 </div> | 203 </div> |
201 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0"> | 204 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="URL of the video to embed."> |
202 <span>Video URL:</span> | 205 <span>Video URL:</span> |
203 <input type="text" ng-model="opt.url" /> | 206 <input type="text" ng-model="opt.url" /> |
204 </div> | 207 </div> |
205 </div> | 208 </div> |
206 <div class="node"> | 209 <div class="node" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Statement / Question to pose to the subject."> |
207 <h4>Statement</h4> | 210 <h4>Statement</h4> |
208 <textarea ng-model="opt.statement"></textarea> | 211 <textarea ng-model="opt.statement"></textarea> |
209 </div> | 212 </div> |
210 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> | 213 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> |
211 <h4>Options</h4> | 214 <h4>Options</h4> |
269 </div> | 272 </div> |
270 </div> | 273 </div> |
271 <div id="globalpostsurvey" class="node" ng-controller="survey" ng-init="survey = specification.postTest"> | 274 <div id="globalpostsurvey" class="node" ng-controller="survey" ng-init="survey = specification.postTest"> |
272 <h2>Post Test Survey</h2> | 275 <h2>Post Test Survey</h2> |
273 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button> | 276 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button> |
274 <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption"> | 277 <div class="node surveyentry" ng-repeat="opt in survey.options" ng-controller="surveyOption"> |
275 <h3>Survey Entry</h3> | 278 <h3>Survey Entry</h3> |
276 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button> | 279 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button> |
277 <div class="attributes"> | 280 <div class="attributes"> |
278 <div class="attribute"> | 281 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Type of survey entry."> |
279 <span>Survey Type: </span> | 282 <span>Survey Type: </span> |
280 <select ng-model="opt.type"> | 283 <select ng-model="opt.type"> |
281 <option value="question">Question</option> | 284 <option value="question">Question</option> |
282 <option value="radio">Radio</option> | 285 <option value="radio">Radio</option> |
283 <option value="checkbox">Checkbox</option> | 286 <option value="checkbox">Checkbox</option> |
286 <option value="slider">Slider</option> | 289 <option value="slider">Slider</option> |
287 <option value="video">Video</option> | 290 <option value="video">Video</option> |
288 <option value="youtube">YouTube</option> | 291 <option value="youtube">YouTube</option> |
289 </select> | 292 </select> |
290 </div> | 293 </div> |
291 <div class="attribute"> | 294 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Unique across the entire session of all ID entries. "> |
292 <span>Unique Survey Entry ID:</span> | 295 <span>Unique Survey Entry ID:</span> |
293 <input type="text" ng-model="opt.id" required/> | 296 <input type="text" ng-model="opt.id" required/> |
294 </div> | 297 </div> |
295 <div class="attribute"> | 298 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Friendly name. Will be used in test results parsers instead of the ID, if defined."> |
296 <span>Entry Name:</span> | 299 <span>Entry Name:</span> |
297 <input type="text" ng-model="opt.name" /> | 300 <input type="text" ng-model="opt.name" /> |
298 </div> | 301 </div> |
299 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0"> | 302 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="An answer must be given to continue with the test."> |
300 <span>Mandatory:</span> | 303 <span>Mandatory:</span> |
301 <input type="checkbox" ng-model="opt.mandatory" /> | 304 <input type="checkbox" ng-model="opt.mandatory" /> |
302 </div> | 305 </div> |
303 <div class="attribute"> | 306 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum time in seconds before continuing."> |
304 <span>Minimum Wait Time (s):</span> | 307 <span>Minimum Wait Time (s):</span> |
305 <input type="number" ng-model="opt.minWait" min="0" /> | 308 <input type="number" ng-model="opt.minWait" min="0" /> |
306 </div> | 309 </div> |
307 <div class="attribute" ng-show="opt.type == 'question'"> | 310 <div class="attribute" ng-show="opt.type == 'question'" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Size of the displayed text box. Does not limit entry but may discourage (or encourage) longer ansewrs if bigger."> |
308 <span>Box Size:</span> | 311 <span>Box Size:</span> |
309 <select ng-model="opt.boxsize"> | 312 <select ng-model="opt.boxsize"> |
310 <option value="small">Small</option> | 313 <option value="small">Small</option> |
311 <option value="normal">Normal</option> | 314 <option value="normal">Normal</option> |
312 <option value="large">Large</option> | 315 <option value="large">Large</option> |
313 <option value="huge">Huge</option> | 316 <option value="huge">Huge</option> |
314 </select> | 317 </select> |
315 </div> | 318 </div> |
316 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> | 319 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="The minimum number of options that must be selected before continuing"> |
317 <span>Minimum Selected:</span> | 320 <span>Minimum Selected:</span> |
318 <input type="number" ng-model="opt.min" min="0" /> | 321 <input type="number" ng-model="opt.min" min="0" /> |
319 </div> | 322 </div> |
320 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> | 323 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Maximum number of options that can be selected to continue."> |
321 <span>Maximum Selected:</span> | 324 <span>Maximum Selected:</span> |
322 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" /> | 325 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" /> |
323 </div> | 326 </div> |
324 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> | 327 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum numerical value"> |
325 <span>Minimum Value:</span> | 328 <span>Minimum Value:</span> |
326 <input type="number" ng-model="opt.min" /> | 329 <input type="number" ng-model="opt.min" /> |
327 </div> | 330 </div> |
328 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> | 331 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Maximum numerical value"> |
329 <span>Maximum Value:</span> | 332 <span>Maximum Value:</span> |
330 <input type="number" ng-model="opt.max" /> | 333 <input type="number" ng-model="opt.max" /> |
331 </div> | 334 </div> |
332 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0"> | 335 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="URL of the video to embed."> |
333 <span>Video URL:</span> | 336 <span>Video URL:</span> |
334 <input type="text" ng-model="opt.url" /> | 337 <input type="text" ng-model="opt.url" /> |
335 </div> | 338 </div> |
336 </div> | 339 </div> |
337 <div class="node"> | 340 <div class="node" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Statement / Question to pose to the subject."> |
338 <h4>Statement</h4> | 341 <h4>Statement</h4> |
339 <textarea ng-model="opt.statement"></textarea> | 342 <textarea ng-model="opt.statement"></textarea> |
340 </div> | 343 </div> |
341 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> | 344 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> |
342 <h4>Options</h4> | 345 <h4>Options</h4> |
401 </div> | 404 </div> |
402 <div id="globalinterface" class="node" ng-controller="interfaceNode" ng-init="interface = specification.interfaces"> | 405 <div id="globalinterface" class="node" ng-controller="interfaceNode" ng-init="interface = specification.interfaces"> |
403 <h2>Interface (Globals)</h2> | 406 <h2>Interface (Globals)</h2> |
404 <div class="node interfaceOptions"> | 407 <div class="node interfaceOptions"> |
405 <div class="attributes"> | 408 <div class="attributes"> |
406 <div class="attribute" name="fragmentPlayed" type="check"> | 409 <div class="attribute" name="fragmentPlayed" type="check" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="A page can only be submitted if all fragments have been played"> |
407 <span>Check all fragments played: </span> | 410 <span>Check all fragments played: </span> |
408 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> | 411 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> |
409 </div> | 412 </div> |
410 <div class="attribute" name="fragmentFullPlayback" type="check"> | 413 <div class="attribute" name="fragmentFullPlayback" type="check" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="A page can only be submitted if all fragments have been played completely."> |
411 <span>Check all fragments fully played: </span> | 414 <span>Check all fragments fully played: </span> |
412 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> | 415 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> |
413 </div> | 416 </div> |
414 <div class="attribute" name="fragmentMoved" type="check"> | 417 <div class="attribute" name="fragmentMoved" type="check" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="A page can only be submitted if all fragments have been moved"> |
415 <span>Check all fragments have been moved: </span> | 418 <span>Check all fragments have been moved: </span> |
416 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> | 419 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> |
417 </div> | 420 </div> |
418 <div class="attribute" name="fragmentComments" type="check"> | 421 <div class="attribute" name="fragmentComments" type="check" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="A page can only be submitted if all fragments have their comment boxes completed."> |
419 <span>Check all fragments have comments: </span> | 422 <span>Check all fragments have comments: </span> |
420 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> | 423 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> |
421 </div> | 424 </div> |
422 <div class="attribute" name="scalerange" type="check"> | 425 <div class="attribute" name="scalerange" type="check" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="A page can only be submitted if there are fragments above and below the maximum and minimum ranges."> |
423 <span>Enforce a scale usage: </span> | 426 <span>Enforce a scale usage: </span> |
424 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> | 427 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> |
425 <span>Minimum:</span> | 428 <span>Minimum:</span> |
426 <input type="number" min="0" max="100" name="min" /> | 429 <input type="number" min="0" max="100" name="min" /> |
427 <span>Maximum:</span> | 430 <span>Maximum:</span> |
428 <input type="number" min="0" max="100" name="max" /> | 431 <input type="number" min="0" max="100" name="max" /> |
429 </div> | 432 </div> |
430 <div class="attribute" name="volume" type="show"> | 433 <div class="attribute" name="volume" type="show" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Show the master volume control on each page."> |
431 <span>Show master volume control: </span> | 434 <span>Show master volume control: </span> |
432 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> | 435 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> |
433 </div> | 436 </div> |
434 <div class="attribute" name="playhead" type="show"> | 437 <div class="attribute" name="playhead" type="show" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Show the playhead for the fragments."> |
435 <span>Show playhead: </span> | 438 <span>Show playhead: </span> |
436 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> | 439 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> |
437 </div> | 440 </div> |
438 <div class="attribute" name="page-count" type="show"> | 441 <div class="attribute" name="page-count" type="show" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Show number of completed and remaining pages."> |
439 <span>Show Page Count: </span> | 442 <span>Show Page Count: </span> |
440 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> | 443 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> |
441 </div> | 444 </div> |
442 <div class="attribute" name="comments" type="show"> | 445 <div class="attribute" name="comments" type="show" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Show comment boxes for each fragment."> |
443 <span>Show Fragment Comments: </span> | 446 <span>Show Fragment Comments: </span> |
444 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> | 447 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> |
445 </div> | 448 </div> |
446 </div> | 449 </div> |
447 </div> | 450 </div> |
465 <div class="attribute"> | 468 <div class="attribute"> |
466 <span>Randomise Fragment Order: </span> | 469 <span>Randomise Fragment Order: </span> |
467 <input type="checkbox" ng-model="page.randomiseOrder" /> | 470 <input type="checkbox" ng-model="page.randomiseOrder" /> |
468 </div> | 471 </div> |
469 <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."> | 472 <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."> |
470 <span>Repeat Page N-times: </span> | 473 <span>Numer of repetitions: </span> |
471 <input type="number" ng-model="page.repeatCount" value="0" step="1" /> | 474 <input type="number" ng-model="page.repeatCount" value="0" step="1" placeholder="{{placeholder('repeatCount')}}" /> |
472 </div> | 475 </div> |
473 <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"> | 476 <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"> |
474 <span>Loop audio: </span> | 477 <span>Loop audio: </span> |
475 <input type="checkbox" ng-model="page.loop" /> | 478 <input type="checkbox" ng-model="page.loop" /> |
476 </div> | 479 </div> |
478 <span>Synchronous audio playback: </span> | 481 <span>Synchronous audio playback: </span> |
479 <input type="checkbox" ng-model="page.synchronous" /> | 482 <input type="checkbox" ng-model="page.synchronous" /> |
480 </div> | 483 </div> |
481 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global loudness normalisation"> | 484 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global loudness normalisation"> |
482 <span>Loudness (page): </span> | 485 <span>Loudness (page): </span> |
483 <input type="number" ng-model="page.loudness" max="0" /> | 486 <input type="number" ng-model="page.loudness" max="0" placeholder="{{specification.loudness || placeholder('loudness')}}" /> |
484 </div> | 487 </div> |
485 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Label type to display on the fragments."> | 488 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Label type to display on the fragments."> |
486 <span>Label type: </span> | 489 <span>Label type: </span> |
487 <select ng-model="page.label"> | 490 <select ng-model="page.label"> |
488 <option value="default">Default</option> | 491 <option value="default">Default</option> |
497 <span>Label Start: </span> | 500 <span>Label Start: </span> |
498 <input type="text" ng-model="page.labelStart" /> | 501 <input type="text" ng-model="page.labelStart" /> |
499 </div> | 502 </div> |
500 <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."> | 503 <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."> |
501 <span>Fragment pool size: </span> | 504 <span>Fragment pool size: </span> |
502 <input type="number" ng-model="page.poolSize" min="0" max="page.audioElements.length" /> | 505 <input type="number" ng-model="page.poolSize" min="0" max="page.audioElements.length" placeholder="{{placeholder('poolSize')}}" /> |
503 </div> | 506 </div> |
504 <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"> | 507 <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"> |
505 <span>Always include page: </span> | 508 <span>Always include page: </span> |
506 <input type="checkbox" ng-model="page.alwaysInclude" /> | 509 <input type="checkbox" ng-model="page.alwaysInclude" /> |
507 </div> | 510 </div> |
509 <span>Fixed Page Position: </span> | 512 <span>Fixed Page Position: </span> |
510 <input type="number" ng-model="page.position" min="0" max="{{specification.pages.length}}" /> | 513 <input type="number" ng-model="page.position" min="0" max="{{specification.pages.length}}" /> |
511 </div> | 514 </div> |
512 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global pre-silence"> | 515 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global pre-silence"> |
513 <span>Fragment pre-silence: </span> | 516 <span>Fragment pre-silence: </span> |
514 <input type="number" ng-model="page.preSilence" min="0" step="0.1" /> | 517 <input type="number" ng-model="page.preSilence" min="0" step="0.1" placeholder="{{specification.preSilence || placeholder('preSilence')}}" /> |
515 </div> | 518 </div> |
516 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global post-silence"> | 519 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global post-silence"> |
517 <span>Fragment post-silence: </span> | 520 <span>Fragment post-silence: </span> |
518 <input type="number" ng-model="page.postSilence" min="0" step="0.1" /> | 521 <input type="number" ng-model="page.postSilence" min="0" step="0.1" placeholder="{{specification.postSilence || placeholder('postSilence')}}" /> |
519 </div> | 522 </div> |
520 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Disable switching of audio"> | 523 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Disable switching of audio"> |
521 <span>Cannot interupt audio: </span> | 524 <span>Cannot interupt audio: </span> |
522 <input type="checkbox" ng-model="page.playOne" /> | 525 <input type="checkbox" ng-model="page.playOne" /> |
523 </div> | 526 </div> |
525 <span>Only move playing audio: </span> | 528 <span>Only move playing audio: </span> |
526 <input type="checkbox" ng-model="page.restrictMovement" /> | 529 <input type="checkbox" ng-model="page.restrictMovement" /> |
527 </div> | 530 </div> |
528 <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"> | 531 <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"> |
529 <span>Minimum number of fragment plays</span> | 532 <span>Minimum number of fragment plays</span> |
530 <input type="number" ng-model="page.minNumberPlays" min="0" max="{{page.maxNumberPlays || specification.maxNumberPlays}}" /> | 533 <input type="number" ng-model="page.minNumberPlays" min="0" max="{{page.maxNumberPlays || specification.maxNumberPlays}}" placeholder="{{specification.minNumberPlays || placeholder('minNumberPlays')}}" /> |
531 </div> | 534 </div> |
532 <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"> | 535 <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"> |
533 <span>Maximum number of fragment plays</span> | 536 <span>Maximum number of fragment plays</span> |
534 <input type="number" ng-model="page.maxNumberPlays" min="{{page.minNumberPlays || specification.minNumberPlays || 0}}" /> | 537 <input type="number" ng-model="page.maxNumberPlays" min="{{page.minNumberPlays || specification.minNumberPlays || 0}}" placeholder="{{specification.maxNumberPlays || placeholder('maxNumberPlays')}}" /> |
535 </div> | 538 </div> |
536 </div> | 539 </div> |
537 <div class="node" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Set the title of the page"> | 540 <div class="node" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Set the title of the page"> |
538 <h3>Page Title</h3> | 541 <h3>Page Title</h3> |
539 <textarea ng-model="page.title"></textarea> | 542 <textarea ng-model="page.title"></textarea> |
546 </p> | 549 </p> |
547 </div> | 550 </div> |
548 <div class="node" ng-controller="survey" ng-init="survey = page.preTest"> | 551 <div class="node" ng-controller="survey" ng-init="survey = page.preTest"> |
549 <h2>Pre Page Survey</h2> | 552 <h2>Pre Page Survey</h2> |
550 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button> | 553 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button> |
551 <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption"> | 554 <div class="node surveyentry" ng-repeat="opt in survey.options" ng-controller="surveyOption"> |
552 <h3>Survey Entry</h3> | 555 <h3>Survey Entry</h3> |
553 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button> | 556 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button> |
554 <div class="attributes"> | 557 <div class="attributes"> |
555 <div class="attribute"> | 558 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Type of survey entry."> |
556 <span>Survey Type: </span> | 559 <span>Survey Type: </span> |
557 <select ng-model="opt.type"> | 560 <select ng-model="opt.type"> |
558 <option value="question">Question</option> | 561 <option value="question">Question</option> |
559 <option value="radio">Radio</option> | 562 <option value="radio">Radio</option> |
560 <option value="checkbox">Checkbox</option> | 563 <option value="checkbox">Checkbox</option> |
563 <option value="slider">Slider</option> | 566 <option value="slider">Slider</option> |
564 <option value="video">Video</option> | 567 <option value="video">Video</option> |
565 <option value="youtube">YouTube</option> | 568 <option value="youtube">YouTube</option> |
566 </select> | 569 </select> |
567 </div> | 570 </div> |
568 <div class="attribute"> | 571 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Unique across the entire session of all ID entries. "> |
569 <span>Unique Survey Entry ID:</span> | 572 <span>Unique Survey Entry ID:</span> |
570 <input type="text" ng-model="opt.id" required/> | 573 <input type="text" ng-model="opt.id" required/> |
571 </div> | 574 </div> |
572 <div class="attribute"> | 575 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Friendly name. Will be used in test results parsers instead of the ID, if defined."> |
573 <span>Entry Name:</span> | 576 <span>Entry Name:</span> |
574 <input type="text" ng-model="opt.name" /> | 577 <input type="text" ng-model="opt.name" /> |
575 </div> | 578 </div> |
576 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0"> | 579 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="An answer must be given to continue with the test."> |
577 <span>Mandatory:</span> | 580 <span>Mandatory:</span> |
578 <input type="checkbox" ng-model="opt.mandatory" /> | 581 <input type="checkbox" ng-model="opt.mandatory" /> |
579 </div> | 582 </div> |
580 <div class="attribute"> | 583 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum time in seconds before continuing."> |
581 <span>Minimum Wait Time (s):</span> | 584 <span>Minimum Wait Time (s):</span> |
582 <input type="number" ng-model="opt.minWait" min="0" /> | 585 <input type="number" ng-model="opt.minWait" min="0" /> |
583 </div> | 586 </div> |
584 <div class="attribute" ng-show="opt.type == 'question'"> | 587 <div class="attribute" ng-show="opt.type == 'question'" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Size of the displayed text box. Does not limit entry but may discourage (or encourage) longer ansewrs if bigger."> |
585 <span>Box Size:</span> | 588 <span>Box Size:</span> |
586 <select ng-model="opt.boxsize"> | 589 <select ng-model="opt.boxsize"> |
587 <option value="small">Small</option> | 590 <option value="small">Small</option> |
588 <option value="normal">Normal</option> | 591 <option value="normal">Normal</option> |
589 <option value="large">Large</option> | 592 <option value="large">Large</option> |
590 <option value="huge">Huge</option> | 593 <option value="huge">Huge</option> |
591 </select> | 594 </select> |
592 </div> | 595 </div> |
593 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> | 596 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="The minimum number of options that must be selected before continuing"> |
594 <span>Minimum Selected:</span> | 597 <span>Minimum Selected:</span> |
595 <input type="number" ng-model="opt.min" min="0" /> | 598 <input type="number" ng-model="opt.min" min="0" /> |
596 </div> | 599 </div> |
597 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> | 600 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Maximum number of options that can be selected to continue."> |
598 <span>Maximum Selected:</span> | 601 <span>Maximum Selected:</span> |
599 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" /> | 602 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" /> |
600 </div> | 603 </div> |
601 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> | 604 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum numerical value"> |
602 <span>Minimum Value:</span> | 605 <span>Minimum Value:</span> |
603 <input type="number" ng-model="opt.min" /> | 606 <input type="number" ng-model="opt.min" /> |
604 </div> | 607 </div> |
605 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> | 608 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Maximum numerical value"> |
606 <span>Maximum Value:</span> | 609 <span>Maximum Value:</span> |
607 <input type="number" ng-model="opt.max" /> | 610 <input type="number" ng-model="opt.max" /> |
608 </div> | 611 </div> |
609 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0"> | 612 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="URL of the video to embed."> |
610 <span>Video URL:</span> | 613 <span>Video URL:</span> |
611 <input type="text" ng-model="opt.url" /> | 614 <input type="text" ng-model="opt.url" /> |
612 </div> | 615 </div> |
613 </div> | 616 </div> |
614 <div class="node"> | 617 <div class="node" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Statement / Question to pose to the subject."> |
615 <h4>Statement</h4> | 618 <h4>Statement</h4> |
616 <textarea ng-model="opt.statement"></textarea> | 619 <textarea ng-model="opt.statement"></textarea> |
617 </div> | 620 </div> |
618 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> | 621 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> |
619 <h4>Options</h4> | 622 <h4>Options</h4> |
677 </div> | 680 </div> |
678 </div> | 681 </div> |
679 <div class="node" ng-controller="survey" ng-init="survey = page.postTest"> | 682 <div class="node" ng-controller="survey" ng-init="survey = page.postTest"> |
680 <h2>Post Page Survey</h2> | 683 <h2>Post Page Survey</h2> |
681 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button> | 684 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button> |
682 <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption"> | 685 <div class="node surveyentry" ng-repeat="opt in survey.options" ng-controller="surveyOption"> |
683 <h3>Survey Entry</h3> | 686 <h3>Survey Entry</h3> |
684 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button> | 687 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button> |
685 <div class="attributes"> | 688 <div class="attributes"> |
686 <div class="attribute"> | 689 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Type of survey entry."> |
687 <span>Survey Type: </span> | 690 <span>Survey Type: </span> |
688 <select ng-model="opt.type"> | 691 <select ng-model="opt.type"> |
689 <option value="question">Question</option> | 692 <option value="question">Question</option> |
690 <option value="radio">Radio</option> | 693 <option value="radio">Radio</option> |
691 <option value="checkbox">Checkbox</option> | 694 <option value="checkbox">Checkbox</option> |
694 <option value="slider">Slider</option> | 697 <option value="slider">Slider</option> |
695 <option value="video">Video</option> | 698 <option value="video">Video</option> |
696 <option value="youtube">YouTube</option> | 699 <option value="youtube">YouTube</option> |
697 </select> | 700 </select> |
698 </div> | 701 </div> |
699 <div class="attribute"> | 702 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Unique across the entire session of all ID entries. "> |
700 <span>Unique Survey Entry ID:</span> | 703 <span>Unique Survey Entry ID:</span> |
701 <input type="text" ng-model="opt.id" required /> | 704 <input type="text" ng-model="opt.id" required/> |
702 </div> | 705 </div> |
703 <div class="attribute"> | 706 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Friendly name. Will be used in test results parsers instead of the ID, if defined."> |
704 <span>Entry Name:</span> | 707 <span>Entry Name:</span> |
705 <input type="text" ng-model="opt.name" /> | 708 <input type="text" ng-model="opt.name" /> |
706 </div> | 709 </div> |
707 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0"> | 710 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="An answer must be given to continue with the test."> |
708 <span>Mandatory:</span> | 711 <span>Mandatory:</span> |
709 <input type="checkbox" ng-model="opt.mandatory" /> | 712 <input type="checkbox" ng-model="opt.mandatory" /> |
710 </div> | 713 </div> |
711 <div class="attribute"> | 714 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum time in seconds before continuing."> |
712 <span>Minimum Wait Time (s):</span> | 715 <span>Minimum Wait Time (s):</span> |
713 <input type="number" ng-model="opt.minWait" min="0" /> | 716 <input type="number" ng-model="opt.minWait" min="0" /> |
714 </div> | 717 </div> |
715 <div class="attribute" ng-show="opt.type == 'question'"> | 718 <div class="attribute" ng-show="opt.type == 'question'" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Size of the displayed text box. Does not limit entry but may discourage (or encourage) longer ansewrs if bigger."> |
716 <span>Box Size:</span> | 719 <span>Box Size:</span> |
717 <select ng-model="opt.boxsize"> | 720 <select ng-model="opt.boxsize"> |
718 <option value="small">Small</option> | 721 <option value="small">Small</option> |
719 <option value="normal">Normal</option> | 722 <option value="normal">Normal</option> |
720 <option value="large">Large</option> | 723 <option value="large">Large</option> |
721 <option value="huge">Huge</option> | 724 <option value="huge">Huge</option> |
722 </select> | 725 </select> |
723 </div> | 726 </div> |
724 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> | 727 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="The minimum number of options that must be selected before continuing"> |
725 <span>Minimum Selected:</span> | 728 <span>Minimum Selected:</span> |
726 <input type="number" ng-model="opt.min" min="0" /> | 729 <input type="number" ng-model="opt.min" min="0" /> |
727 </div> | 730 </div> |
728 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> | 731 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Maximum number of options that can be selected to continue."> |
729 <span>Maximum Selected:</span> | 732 <span>Maximum Selected:</span> |
730 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" /> | 733 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" /> |
731 </div> | 734 </div> |
732 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> | 735 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum numerical value"> |
733 <span>Minimum Value:</span> | 736 <span>Minimum Value:</span> |
734 <input type="number" ng-model="opt.min" /> | 737 <input type="number" ng-model="opt.min" /> |
735 </div> | 738 </div> |
736 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> | 739 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Maximum numerical value"> |
737 <span>Maximum Value:</span> | 740 <span>Maximum Value:</span> |
738 <input type="number" ng-model="opt.max" /> | 741 <input type="number" ng-model="opt.max" /> |
739 </div> | 742 </div> |
740 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0"> | 743 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="URL of the video to embed."> |
741 <span>Video URL:</span> | 744 <span>Video URL:</span> |
742 <input type="text" ng-model="opt.url" /> | 745 <input type="text" ng-model="opt.url" /> |
743 </div> | 746 </div> |
744 </div> | 747 </div> |
745 <div class="node"> | 748 <div class="node" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Statement / Question to pose to the subject."> |
746 <h4>Statement</h4> | 749 <h4>Statement</h4> |
747 <textarea ng-model="opt.statement"></textarea> | 750 <textarea ng-model="opt.statement"></textarea> |
748 </div> | 751 </div> |
749 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> | 752 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> |
750 <h4>Options</h4> | 753 <h4>Options</h4> |
806 </div> | 809 </div> |
807 </div> | 810 </div> |
808 </div> | 811 </div> |
809 </div> | 812 </div> |
810 <button type="button" class="btn btn-success" ng-show="specification.interface == 'APE' || page.interfaces.length == 0" ng-click="addInterface()">Add Interface/Axis</button> | 813 <button type="button" class="btn btn-success" ng-show="specification.interface == 'APE' || page.interfaces.length == 0" ng-click="addInterface()">Add Interface/Axis</button> |
811 <div class="node" ng-repeat="interface in page.interfaces" ng-controller="interfaceNode"> | 814 <div class="node interface" ng-repeat="interface in page.interfaces" ng-controller="interfaceNode"> |
812 <h2>Interface</h2> | 815 <h2>Interface</h2> |
813 <button type="button" class="btn btn-danger" ng-click="removeInterface(interface)">Remove Interface/Axis</button> | 816 <button type="button" class="btn btn-danger" ng-click="removeInterface(interface)">Remove Interface/Axis</button> |
814 <div class="node interfaceOptions"> | 817 <div class="node interfaceOptions"> |
815 <div class="attributes"> | 818 <div class="attributes"> |
816 <div class="attribute" name="fragmentPlayed" type="check"> | 819 <div class="attribute" name="fragmentPlayed" type="check"> |
953 </div> | 956 </div> |
954 </div> | 957 </div> |
955 </div> | 958 </div> |
956 </div> | 959 </div> |
957 <button type="button" class="btn btn-success" ng-click="addAudioElement()">Add Fragment</button> | 960 <button type="button" class="btn btn-success" ng-click="addAudioElement()">Add Fragment</button> |
958 <div class="node" ng-repeat="fragment in page.audioElements"> | 961 <div class="node audioelement" ng-repeat="fragment in page.audioElements"> |
959 <h3>Audio Fragment</h3> | 962 <h3>Audio Fragment</h3> |
960 <button type="button" class="btn btn-danger" ng-click="removeAudioElement(fragment)">Remove Fragment</button> | 963 <button type="button" class="btn btn-danger" ng-click="removeAudioElement(fragment)">Remove Fragment</button> |
961 <div class="attributes"> | 964 <div class="attributes"> |
962 <div class="attribute"> | 965 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="The unique ID of this fragment. Must be unique across the entire session"> |
963 <span>Unique ID: </span> | 966 <span>Unique ID: </span> |
964 <input type="text" ng-model="fragment.id" required/> | 967 <input type="text" ng-model="fragment.id" required/> |
965 </div> | 968 </div> |
966 <div class="attribute"> | 969 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="URL of the fragment."> |
967 <span>URL: </span> | 970 <span>URL: </span> |
968 <input type="text" ng-model="fragment.url" required/> | 971 <input type="text" ng-model="fragment.url" required/> |
969 <span>Full URL: </span><span style="font-weight=600">{{page.hostURL}}{{fragment.url}}</span> | 972 <span>Full URL: </span><span style="font-weight=600">{{page.hostURL}}{{fragment.url}}</span> |
970 </div> | 973 </div> |
971 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Set the gain of this fragment. This is applied after any normalisation"> | 974 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Set the gain of this fragment. This is applied after any normalisation"> |
989 <option value="outside-reference">Outside Reference</option> | 992 <option value="outside-reference">Outside Reference</option> |
990 </select> | 993 </select> |
991 </div> | 994 </div> |
992 <div class="attribute" ng-show="fragment.type == 'anchor'"> | 995 <div class="attribute" ng-show="fragment.type == 'anchor'"> |
993 <span>Anchor must be below: </span> | 996 <span>Anchor must be below: </span> |
994 <input type="number" ng-model="fragment.marker" min="0" max="100" /> | 997 <input type="number" ng-model="fragment.marker" min="0" max="100" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="If this is set, the page cannot be submitted if this fragment is above this point." /> |
995 </div> | 998 </div> |
996 <div class="attribute" ng-show="fragment.type == 'reference'"> | 999 <div class="attribute" ng-show="fragment.type == 'reference'"> |
997 <span>Reference must be above: </span> | 1000 <span>Reference must be above: </span> |
998 <input type="number" ng-model="fragment.marker" min="0" max="100" /> | 1001 <input type="number" ng-model="fragment.marker" min="0" max="100" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="If this is set, the page cannot be submitted if this fragment is below this point." /> |
999 </div> | 1002 </div> |
1000 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global and page loudness"> | 1003 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global and page loudness"> |
1001 <span>Loudness: </span> | 1004 <span>Loudness: </span> |
1002 <input type="number" ng-model="fragment.loudness" max="0" /> | 1005 <input type="number" ng-model="fragment.loudness" max="0" placeholder="{{page.loudness || specification.loudness || ''}}" /> |
1003 </div> | 1006 </div> |
1004 <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"> | 1007 <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"> |
1005 <span>Always include fragment: </span> | 1008 <span>Always include fragment: </span> |
1006 <input type="checkbox" ng-model="fragment.alwaysInclude" max="0" /> | 1009 <input type="checkbox" ng-model="fragment.alwaysInclude" max="0" /> |
1007 </div> | 1010 </div> |
1042 </div> | 1045 </div> |
1043 </div> | 1046 </div> |
1044 <div id="popupHolder" ng-show="popupVisible"> | 1047 <div id="popupHolder" ng-show="popupVisible"> |
1045 <div ng-controller="introduction" class="popup" ng-show="popupVisible"> | 1048 <div ng-controller="introduction" class="popup" ng-show="popupVisible"> |
1046 <div class="popupTitle" ng-switch="state"> | 1049 <div class="popupTitle" ng-switch="state"> |
1047 <span ng-switch-when="0">Test Creator</span> | 1050 <span ng-switch-when="0">Test Creator <span class="label label-primary">v1.2.2</span></span> |
1048 <span ng-switch-when="1">Create New Test</span> | 1051 <span ng-switch-when="1">Create New Test</span> |
1049 </div> | 1052 </div> |
1050 <div class="popupContent container-fluid" ng-switch="state"> | 1053 <div class="popupContent container-fluid" ng-switch="state"> |
1051 <div ng-switch-when="0"> | 1054 <div ng-switch-when="0"> |
1052 <div> | 1055 <div> |
1053 <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> | 1056 <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> |
1054 </div> | 1057 </div> |
1055 <div> | 1058 <div> |
1056 <input type="file" id="files" ng-model="files" onchange="handleFiles(event)" /> | 1059 <input type="file" id="files" ng-model="files" onchange="handleFiles(event)" /> |
1057 </div> | 1060 </div> |
1058 </div> | 1061 </div> |
1060 <div> | 1063 <div> |
1061 <span>Please select the interface you would like to use below. Selecting an interface will give a brief description of the interface type.</span> | 1064 <span>Please select the interface you would like to use below. Selecting an interface will give a brief description of the interface type.</span> |
1062 </div> | 1065 </div> |
1063 <div class="row"> | 1066 <div class="row"> |
1064 <div class="col-md-6" style="overflow-y: scroll;height: 333px;"> | 1067 <div class="col-md-6" style="overflow-y: scroll;height: 333px;"> |
1065 <div class="new-test" ng-repeat="i in testSpecifications.interfaces" ng-mouseover="mouseover(i.name)" ng-click="initialise(i.name)"> | 1068 <div class="new-test" ng-repeat="i in testSpecifications.interfaces" ng-mouseover="mouseover(i.name)" ng-click="select(i.name)"> |
1066 <label style="cursor:pointer"> | 1069 <label style="cursor:pointer"> |
1067 <input type="radio" name="new-test" value="{{i.name}}" id="i.name" style="cursor:pointer" /> {{i.name}} | 1070 <input type="radio" name="new-test" value="{{i.name}}" id="i.name" style="cursor:pointer" /> {{i.name}} |
1068 </label> | 1071 </label> |
1069 </div> | 1072 </div> |
1070 </div> | 1073 </div> |