comparison test_create.html @ 2911:bcb741f60298

#222 More dropdown labels and help
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Tue, 01 Aug 2017 11:57:16 +0100
parents 9c26e579e64d
children 7b6cdd27f3ee
comparison
equal deleted inserted replaced
2910:becd7e8e0a3a 2911:bcb741f60298
139 </div> 139 </div>
140 </div> 140 </div>
141 <div id="globalpresurvey" class="node" ng-controller="survey" ng-init="survey = specification.preTest"> 141 <div id="globalpresurvey" class="node" ng-controller="survey" ng-init="survey = specification.preTest">
142 <h2>Pre Test Survey</h2> 142 <h2>Pre Test Survey</h2>
143 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button> 143 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button>
144 <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption"> 144 <div class="node surveyentry" ng-repeat="opt in survey.options" ng-controller="surveyOption">
145 <h3>Survey Entry</h3> 145 <h3>Survey Entry</h3>
146 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button> 146 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button>
147 <div class="attributes"> 147 <div class="attributes">
148 <div class="attribute"> 148 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Type of survey entry.">
149 <span>Survey Type: </span> 149 <span>Survey Type: </span>
150 <select ng-model="opt.type"> 150 <select ng-model="opt.type">
151 <option value="question">Question</option> 151 <option value="question">Question</option>
152 <option value="radio">Radio</option> 152 <option value="radio">Radio</option>
153 <option value="checkbox">Checkbox</option> 153 <option value="checkbox">Checkbox</option>
156 <option value="slider">Slider</option> 156 <option value="slider">Slider</option>
157 <option value="video">Video</option> 157 <option value="video">Video</option>
158 <option value="youtube">YouTube</option> 158 <option value="youtube">YouTube</option>
159 </select> 159 </select>
160 </div> 160 </div>
161 <div class="attribute"> 161 <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. ">
162 <span>Unique Survey Entry ID:</span> 162 <span>Unique Survey Entry ID:</span>
163 <input type="text" ng-model="opt.id" required/> 163 <input type="text" ng-model="opt.id" required/>
164 </div> 164 </div>
165 <div class="attribute"> 165 <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.">
166 <span>Entry Name:</span> 166 <span>Entry Name:</span>
167 <input type="text" ng-model="opt.name" /> 167 <input type="text" ng-model="opt.name" />
168 </div> 168 </div>
169 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0"> 169 <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.">
170 <span>Mandatory:</span> 170 <span>Mandatory:</span>
171 <input type="checkbox" ng-model="opt.mandatory" /> 171 <input type="checkbox" ng-model="opt.mandatory" />
172 </div> 172 </div>
173 <div class="attribute"> 173 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum time in seconds before continuing.">
174 <span>Minimum Wait Time (s):</span> 174 <span>Minimum Wait Time (s):</span>
175 <input type="number" ng-model="opt.minWait" min="0" /> 175 <input type="number" ng-model="opt.minWait" min="0" />
176 </div> 176 </div>
177 <div class="attribute" ng-show="opt.type == 'question'"> 177 <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.">
178 <span>Box Size:</span> 178 <span>Box Size:</span>
179 <select ng-model="opt.boxsize"> 179 <select ng-model="opt.boxsize">
180 <option value="small">Small</option> 180 <option value="small">Small</option>
181 <option value="normal">Normal</option> 181 <option value="normal">Normal</option>
182 <option value="large">Large</option> 182 <option value="large">Large</option>
183 <option value="huge">Huge</option> 183 <option value="huge">Huge</option>
184 </select> 184 </select>
185 </div> 185 </div>
186 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> 186 <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">
187 <span>Minimum Selected:</span> 187 <span>Minimum Selected:</span>
188 <input type="number" ng-model="opt.min" min="0" /> 188 <input type="number" ng-model="opt.min" min="0" />
189 </div> 189 </div>
190 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> 190 <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.">
191 <span>Maximum Selected:</span> 191 <span>Maximum Selected:</span>
192 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" /> 192 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" />
193 </div> 193 </div>
194 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> 194 <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">
195 <span>Minimum Value:</span> 195 <span>Minimum Value:</span>
196 <input type="number" ng-model="opt.min" /> 196 <input type="number" ng-model="opt.min" />
197 </div> 197 </div>
198 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> 198 <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">
199 <span>Maximum Value:</span> 199 <span>Maximum Value:</span>
200 <input type="number" ng-model="opt.max" /> 200 <input type="number" ng-model="opt.max" />
201 </div> 201 </div>
202 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0"> 202 <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.">
203 <span>Video URL:</span> 203 <span>Video URL:</span>
204 <input type="text" ng-model="opt.url" /> 204 <input type="text" ng-model="opt.url" />
205 </div> 205 </div>
206 </div> 206 </div>
207 <div class="node"> 207 <div class="node" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Statement / Question to pose to the subject.">
208 <h4>Statement</h4> 208 <h4>Statement</h4>
209 <textarea ng-model="opt.statement"></textarea> 209 <textarea ng-model="opt.statement"></textarea>
210 </div> 210 </div>
211 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> 211 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
212 <h4>Options</h4> 212 <h4>Options</h4>
270 </div> 270 </div>
271 </div> 271 </div>
272 <div id="globalpostsurvey" class="node" ng-controller="survey" ng-init="survey = specification.postTest"> 272 <div id="globalpostsurvey" class="node" ng-controller="survey" ng-init="survey = specification.postTest">
273 <h2>Post Test Survey</h2> 273 <h2>Post Test Survey</h2>
274 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button> 274 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button>
275 <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption"> 275 <div class="node surveyentry" ng-repeat="opt in survey.options" ng-controller="surveyOption">
276 <h3>Survey Entry</h3> 276 <h3>Survey Entry</h3>
277 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button> 277 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button>
278 <div class="attributes"> 278 <div class="attributes">
279 <div class="attribute"> 279 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Type of survey entry.">
280 <span>Survey Type: </span> 280 <span>Survey Type: </span>
281 <select ng-model="opt.type"> 281 <select ng-model="opt.type">
282 <option value="question">Question</option> 282 <option value="question">Question</option>
283 <option value="radio">Radio</option> 283 <option value="radio">Radio</option>
284 <option value="checkbox">Checkbox</option> 284 <option value="checkbox">Checkbox</option>
287 <option value="slider">Slider</option> 287 <option value="slider">Slider</option>
288 <option value="video">Video</option> 288 <option value="video">Video</option>
289 <option value="youtube">YouTube</option> 289 <option value="youtube">YouTube</option>
290 </select> 290 </select>
291 </div> 291 </div>
292 <div class="attribute"> 292 <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. ">
293 <span>Unique Survey Entry ID:</span> 293 <span>Unique Survey Entry ID:</span>
294 <input type="text" ng-model="opt.id" required/> 294 <input type="text" ng-model="opt.id" required/>
295 </div> 295 </div>
296 <div class="attribute"> 296 <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.">
297 <span>Entry Name:</span> 297 <span>Entry Name:</span>
298 <input type="text" ng-model="opt.name" /> 298 <input type="text" ng-model="opt.name" />
299 </div> 299 </div>
300 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0"> 300 <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.">
301 <span>Mandatory:</span> 301 <span>Mandatory:</span>
302 <input type="checkbox" ng-model="opt.mandatory" /> 302 <input type="checkbox" ng-model="opt.mandatory" />
303 </div> 303 </div>
304 <div class="attribute"> 304 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum time in seconds before continuing.">
305 <span>Minimum Wait Time (s):</span> 305 <span>Minimum Wait Time (s):</span>
306 <input type="number" ng-model="opt.minWait" min="0" /> 306 <input type="number" ng-model="opt.minWait" min="0" />
307 </div> 307 </div>
308 <div class="attribute" ng-show="opt.type == 'question'"> 308 <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.">
309 <span>Box Size:</span> 309 <span>Box Size:</span>
310 <select ng-model="opt.boxsize"> 310 <select ng-model="opt.boxsize">
311 <option value="small">Small</option> 311 <option value="small">Small</option>
312 <option value="normal">Normal</option> 312 <option value="normal">Normal</option>
313 <option value="large">Large</option> 313 <option value="large">Large</option>
314 <option value="huge">Huge</option> 314 <option value="huge">Huge</option>
315 </select> 315 </select>
316 </div> 316 </div>
317 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> 317 <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">
318 <span>Minimum Selected:</span> 318 <span>Minimum Selected:</span>
319 <input type="number" ng-model="opt.min" min="0" /> 319 <input type="number" ng-model="opt.min" min="0" />
320 </div> 320 </div>
321 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> 321 <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.">
322 <span>Maximum Selected:</span> 322 <span>Maximum Selected:</span>
323 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" /> 323 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" />
324 </div> 324 </div>
325 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> 325 <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">
326 <span>Minimum Value:</span> 326 <span>Minimum Value:</span>
327 <input type="number" ng-model="opt.min" /> 327 <input type="number" ng-model="opt.min" />
328 </div> 328 </div>
329 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> 329 <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">
330 <span>Maximum Value:</span> 330 <span>Maximum Value:</span>
331 <input type="number" ng-model="opt.max" /> 331 <input type="number" ng-model="opt.max" />
332 </div> 332 </div>
333 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0"> 333 <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.">
334 <span>Video URL:</span> 334 <span>Video URL:</span>
335 <input type="text" ng-model="opt.url" /> 335 <input type="text" ng-model="opt.url" />
336 </div> 336 </div>
337 </div> 337 </div>
338 <div class="node"> 338 <div class="node" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Statement / Question to pose to the subject.">
339 <h4>Statement</h4> 339 <h4>Statement</h4>
340 <textarea ng-model="opt.statement"></textarea> 340 <textarea ng-model="opt.statement"></textarea>
341 </div> 341 </div>
342 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> 342 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
343 <h4>Options</h4> 343 <h4>Options</h4>
402 </div> 402 </div>
403 <div id="globalinterface" class="node" ng-controller="interfaceNode" ng-init="interface = specification.interfaces"> 403 <div id="globalinterface" class="node" ng-controller="interfaceNode" ng-init="interface = specification.interfaces">
404 <h2>Interface (Globals)</h2> 404 <h2>Interface (Globals)</h2>
405 <div class="node interfaceOptions"> 405 <div class="node interfaceOptions">
406 <div class="attributes"> 406 <div class="attributes">
407 <div class="attribute" name="fragmentPlayed" type="check"> 407 <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">
408 <span>Check all fragments played: </span> 408 <span>Check all fragments played: </span>
409 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> 409 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
410 </div> 410 </div>
411 <div class="attribute" name="fragmentFullPlayback" type="check"> 411 <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.">
412 <span>Check all fragments fully played: </span> 412 <span>Check all fragments fully played: </span>
413 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> 413 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
414 </div> 414 </div>
415 <div class="attribute" name="fragmentMoved" type="check"> 415 <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">
416 <span>Check all fragments have been moved: </span> 416 <span>Check all fragments have been moved: </span>
417 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> 417 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
418 </div> 418 </div>
419 <div class="attribute" name="fragmentComments" type="check"> 419 <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.">
420 <span>Check all fragments have comments: </span> 420 <span>Check all fragments have comments: </span>
421 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> 421 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
422 </div> 422 </div>
423 <div class="attribute" name="scalerange" type="check"> 423 <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.">
424 <span>Enforce a scale usage: </span> 424 <span>Enforce a scale usage: </span>
425 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> 425 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
426 <span>Minimum:</span> 426 <span>Minimum:</span>
427 <input type="number" min="0" max="100" name="min" /> 427 <input type="number" min="0" max="100" name="min" />
428 <span>Maximum:</span> 428 <span>Maximum:</span>
429 <input type="number" min="0" max="100" name="max" /> 429 <input type="number" min="0" max="100" name="max" />
430 </div> 430 </div>
431 <div class="attribute" name="volume" type="show"> 431 <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.">
432 <span>Show master volume control: </span> 432 <span>Show master volume control: </span>
433 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> 433 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
434 </div> 434 </div>
435 <div class="attribute" name="playhead" type="show"> 435 <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.">
436 <span>Show playhead: </span> 436 <span>Show playhead: </span>
437 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> 437 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
438 </div> 438 </div>
439 <div class="attribute" name="page-count" type="show"> 439 <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.">
440 <span>Show Page Count: </span> 440 <span>Show Page Count: </span>
441 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> 441 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
442 </div> 442 </div>
443 <div class="attribute" name="comments" type="show"> 443 <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.">
444 <span>Show Fragment Comments: </span> 444 <span>Show Fragment Comments: </span>
445 <input type="checkbox" ng-click="enableInterfaceOption($event)" /> 445 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
446 </div> 446 </div>
447 </div> 447 </div>
448 </div> 448 </div>
466 <div class="attribute"> 466 <div class="attribute">
467 <span>Randomise Fragment Order: </span> 467 <span>Randomise Fragment Order: </span>
468 <input type="checkbox" ng-model="page.randomiseOrder" /> 468 <input type="checkbox" ng-model="page.randomiseOrder" />
469 </div> 469 </div>
470 <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 <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.">
471 <span>Repeat Page N-times: </span> 471 <span>Numer of repetitions: </span>
472 <input type="number" ng-model="page.repeatCount" value="0" step="1" placeholder="{{placeholder('repeatCount')}}" /> 472 <input type="number" ng-model="page.repeatCount" value="0" step="1" placeholder="{{placeholder('repeatCount')}}" />
473 </div> 473 </div>
474 <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 <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">
475 <span>Loop audio: </span> 475 <span>Loop audio: </span>
476 <input type="checkbox" ng-model="page.loop" /> 476 <input type="checkbox" ng-model="page.loop" />
547 </p> 547 </p>
548 </div> 548 </div>
549 <div class="node" ng-controller="survey" ng-init="survey = page.preTest"> 549 <div class="node" ng-controller="survey" ng-init="survey = page.preTest">
550 <h2>Pre Page Survey</h2> 550 <h2>Pre Page Survey</h2>
551 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button> 551 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button>
552 <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption"> 552 <div class="node surveyentry" ng-repeat="opt in survey.options" ng-controller="surveyOption">
553 <h3>Survey Entry</h3> 553 <h3>Survey Entry</h3>
554 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button> 554 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button>
555 <div class="attributes"> 555 <div class="attributes">
556 <div class="attribute"> 556 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Type of survey entry.">
557 <span>Survey Type: </span> 557 <span>Survey Type: </span>
558 <select ng-model="opt.type"> 558 <select ng-model="opt.type">
559 <option value="question">Question</option> 559 <option value="question">Question</option>
560 <option value="radio">Radio</option> 560 <option value="radio">Radio</option>
561 <option value="checkbox">Checkbox</option> 561 <option value="checkbox">Checkbox</option>
564 <option value="slider">Slider</option> 564 <option value="slider">Slider</option>
565 <option value="video">Video</option> 565 <option value="video">Video</option>
566 <option value="youtube">YouTube</option> 566 <option value="youtube">YouTube</option>
567 </select> 567 </select>
568 </div> 568 </div>
569 <div class="attribute"> 569 <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. ">
570 <span>Unique Survey Entry ID:</span> 570 <span>Unique Survey Entry ID:</span>
571 <input type="text" ng-model="opt.id" required/> 571 <input type="text" ng-model="opt.id" required/>
572 </div> 572 </div>
573 <div class="attribute"> 573 <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.">
574 <span>Entry Name:</span> 574 <span>Entry Name:</span>
575 <input type="text" ng-model="opt.name" /> 575 <input type="text" ng-model="opt.name" />
576 </div> 576 </div>
577 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0"> 577 <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.">
578 <span>Mandatory:</span> 578 <span>Mandatory:</span>
579 <input type="checkbox" ng-model="opt.mandatory" /> 579 <input type="checkbox" ng-model="opt.mandatory" />
580 </div> 580 </div>
581 <div class="attribute"> 581 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum time in seconds before continuing.">
582 <span>Minimum Wait Time (s):</span> 582 <span>Minimum Wait Time (s):</span>
583 <input type="number" ng-model="opt.minWait" min="0" /> 583 <input type="number" ng-model="opt.minWait" min="0" />
584 </div> 584 </div>
585 <div class="attribute" ng-show="opt.type == 'question'"> 585 <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.">
586 <span>Box Size:</span> 586 <span>Box Size:</span>
587 <select ng-model="opt.boxsize"> 587 <select ng-model="opt.boxsize">
588 <option value="small">Small</option> 588 <option value="small">Small</option>
589 <option value="normal">Normal</option> 589 <option value="normal">Normal</option>
590 <option value="large">Large</option> 590 <option value="large">Large</option>
591 <option value="huge">Huge</option> 591 <option value="huge">Huge</option>
592 </select> 592 </select>
593 </div> 593 </div>
594 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> 594 <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">
595 <span>Minimum Selected:</span> 595 <span>Minimum Selected:</span>
596 <input type="number" ng-model="opt.min" min="0" /> 596 <input type="number" ng-model="opt.min" min="0" />
597 </div> 597 </div>
598 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> 598 <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.">
599 <span>Maximum Selected:</span> 599 <span>Maximum Selected:</span>
600 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" /> 600 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" />
601 </div> 601 </div>
602 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> 602 <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">
603 <span>Minimum Value:</span> 603 <span>Minimum Value:</span>
604 <input type="number" ng-model="opt.min" /> 604 <input type="number" ng-model="opt.min" />
605 </div> 605 </div>
606 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> 606 <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">
607 <span>Maximum Value:</span> 607 <span>Maximum Value:</span>
608 <input type="number" ng-model="opt.max" /> 608 <input type="number" ng-model="opt.max" />
609 </div> 609 </div>
610 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0"> 610 <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.">
611 <span>Video URL:</span> 611 <span>Video URL:</span>
612 <input type="text" ng-model="opt.url" /> 612 <input type="text" ng-model="opt.url" />
613 </div> 613 </div>
614 </div> 614 </div>
615 <div class="node"> 615 <div class="node" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Statement / Question to pose to the subject.">
616 <h4>Statement</h4> 616 <h4>Statement</h4>
617 <textarea ng-model="opt.statement"></textarea> 617 <textarea ng-model="opt.statement"></textarea>
618 </div> 618 </div>
619 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> 619 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
620 <h4>Options</h4> 620 <h4>Options</h4>
678 </div> 678 </div>
679 </div> 679 </div>
680 <div class="node" ng-controller="survey" ng-init="survey = page.postTest"> 680 <div class="node" ng-controller="survey" ng-init="survey = page.postTest">
681 <h2>Post Page Survey</h2> 681 <h2>Post Page Survey</h2>
682 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button> 682 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button>
683 <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption"> 683 <div class="node surveyentry" ng-repeat="opt in survey.options" ng-controller="surveyOption">
684 <h3>Survey Entry</h3> 684 <h3>Survey Entry</h3>
685 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button> 685 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button>
686 <div class="attributes"> 686 <div class="attributes">
687 <div class="attribute"> 687 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Type of survey entry.">
688 <span>Survey Type: </span> 688 <span>Survey Type: </span>
689 <select ng-model="opt.type"> 689 <select ng-model="opt.type">
690 <option value="question">Question</option> 690 <option value="question">Question</option>
691 <option value="radio">Radio</option> 691 <option value="radio">Radio</option>
692 <option value="checkbox">Checkbox</option> 692 <option value="checkbox">Checkbox</option>
695 <option value="slider">Slider</option> 695 <option value="slider">Slider</option>
696 <option value="video">Video</option> 696 <option value="video">Video</option>
697 <option value="youtube">YouTube</option> 697 <option value="youtube">YouTube</option>
698 </select> 698 </select>
699 </div> 699 </div>
700 <div class="attribute"> 700 <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. ">
701 <span>Unique Survey Entry ID:</span> 701 <span>Unique Survey Entry ID:</span>
702 <input type="text" ng-model="opt.id" required /> 702 <input type="text" ng-model="opt.id" required/>
703 </div> 703 </div>
704 <div class="attribute"> 704 <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.">
705 <span>Entry Name:</span> 705 <span>Entry Name:</span>
706 <input type="text" ng-model="opt.name" /> 706 <input type="text" ng-model="opt.name" />
707 </div> 707 </div>
708 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0"> 708 <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.">
709 <span>Mandatory:</span> 709 <span>Mandatory:</span>
710 <input type="checkbox" ng-model="opt.mandatory" /> 710 <input type="checkbox" ng-model="opt.mandatory" />
711 </div> 711 </div>
712 <div class="attribute"> 712 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Minimum time in seconds before continuing.">
713 <span>Minimum Wait Time (s):</span> 713 <span>Minimum Wait Time (s):</span>
714 <input type="number" ng-model="opt.minWait" min="0" /> 714 <input type="number" ng-model="opt.minWait" min="0" />
715 </div> 715 </div>
716 <div class="attribute" ng-show="opt.type == 'question'"> 716 <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.">
717 <span>Box Size:</span> 717 <span>Box Size:</span>
718 <select ng-model="opt.boxsize"> 718 <select ng-model="opt.boxsize">
719 <option value="small">Small</option> 719 <option value="small">Small</option>
720 <option value="normal">Normal</option> 720 <option value="normal">Normal</option>
721 <option value="large">Large</option> 721 <option value="large">Large</option>
722 <option value="huge">Huge</option> 722 <option value="huge">Huge</option>
723 </select> 723 </select>
724 </div> 724 </div>
725 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> 725 <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">
726 <span>Minimum Selected:</span> 726 <span>Minimum Selected:</span>
727 <input type="number" ng-model="opt.min" min="0" /> 727 <input type="number" ng-model="opt.min" min="0" />
728 </div> 728 </div>
729 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> 729 <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.">
730 <span>Maximum Selected:</span> 730 <span>Maximum Selected:</span>
731 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" /> 731 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" />
732 </div> 732 </div>
733 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> 733 <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">
734 <span>Minimum Value:</span> 734 <span>Minimum Value:</span>
735 <input type="number" ng-model="opt.min" /> 735 <input type="number" ng-model="opt.min" />
736 </div> 736 </div>
737 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0"> 737 <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">
738 <span>Maximum Value:</span> 738 <span>Maximum Value:</span>
739 <input type="number" ng-model="opt.max" /> 739 <input type="number" ng-model="opt.max" />
740 </div> 740 </div>
741 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0"> 741 <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.">
742 <span>Video URL:</span> 742 <span>Video URL:</span>
743 <input type="text" ng-model="opt.url" /> 743 <input type="text" ng-model="opt.url" />
744 </div> 744 </div>
745 </div> 745 </div>
746 <div class="node"> 746 <div class="node" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Statement / Question to pose to the subject.">
747 <h4>Statement</h4> 747 <h4>Statement</h4>
748 <textarea ng-model="opt.statement"></textarea> 748 <textarea ng-model="opt.statement"></textarea>
749 </div> 749 </div>
750 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0"> 750 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
751 <h4>Options</h4> 751 <h4>Options</h4>
807 </div> 807 </div>
808 </div> 808 </div>
809 </div> 809 </div>
810 </div> 810 </div>
811 <button type="button" class="btn btn-success" ng-show="specification.interface == 'APE' || page.interfaces.length == 0" ng-click="addInterface()">Add Interface/Axis</button> 811 <button type="button" class="btn btn-success" ng-show="specification.interface == 'APE' || page.interfaces.length == 0" ng-click="addInterface()">Add Interface/Axis</button>
812 <div class="node" ng-repeat="interface in page.interfaces" ng-controller="interfaceNode"> 812 <div class="node interface" ng-repeat="interface in page.interfaces" ng-controller="interfaceNode">
813 <h2>Interface</h2> 813 <h2>Interface</h2>
814 <button type="button" class="btn btn-danger" ng-click="removeInterface(interface)">Remove Interface/Axis</button> 814 <button type="button" class="btn btn-danger" ng-click="removeInterface(interface)">Remove Interface/Axis</button>
815 <div class="node interfaceOptions"> 815 <div class="node interfaceOptions">
816 <div class="attributes"> 816 <div class="attributes">
817 <div class="attribute" name="fragmentPlayed" type="check"> 817 <div class="attribute" name="fragmentPlayed" type="check">
954 </div> 954 </div>
955 </div> 955 </div>
956 </div> 956 </div>
957 </div> 957 </div>
958 <button type="button" class="btn btn-success" ng-click="addAudioElement()">Add Fragment</button> 958 <button type="button" class="btn btn-success" ng-click="addAudioElement()">Add Fragment</button>
959 <div class="node" ng-repeat="fragment in page.audioElements"> 959 <div class="node audioelement" ng-repeat="fragment in page.audioElements">
960 <h3>Audio Fragment</h3> 960 <h3>Audio Fragment</h3>
961 <button type="button" class="btn btn-danger" ng-click="removeAudioElement(fragment)">Remove Fragment</button> 961 <button type="button" class="btn btn-danger" ng-click="removeAudioElement(fragment)">Remove Fragment</button>
962 <div class="attributes"> 962 <div class="attributes">
963 <div class="attribute"> 963 <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">
964 <span>Unique ID: </span> 964 <span>Unique ID: </span>
965 <input type="text" ng-model="fragment.id" required/> 965 <input type="text" ng-model="fragment.id" required/>
966 </div> 966 </div>
967 <div class="attribute"> 967 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="URL of the fragment.">
968 <span>URL: </span> 968 <span>URL: </span>
969 <input type="text" ng-model="fragment.url" required/> 969 <input type="text" ng-model="fragment.url" required/>
970 <span>Full URL: </span><span style="font-weight=600">{{page.hostURL}}{{fragment.url}}</span> 970 <span>Full URL: </span><span style="font-weight=600">{{page.hostURL}}{{fragment.url}}</span>
971 </div> 971 </div>
972 <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"> 972 <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">
990 <option value="outside-reference">Outside Reference</option> 990 <option value="outside-reference">Outside Reference</option>
991 </select> 991 </select>
992 </div> 992 </div>
993 <div class="attribute" ng-show="fragment.type == 'anchor'"> 993 <div class="attribute" ng-show="fragment.type == 'anchor'">
994 <span>Anchor must be below: </span> 994 <span>Anchor must be below: </span>
995 <input type="number" ng-model="fragment.marker" min="0" max="100" /> 995 <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." />
996 </div> 996 </div>
997 <div class="attribute" ng-show="fragment.type == 'reference'"> 997 <div class="attribute" ng-show="fragment.type == 'reference'">
998 <span>Reference must be above: </span> 998 <span>Reference must be above: </span>
999 <input type="number" ng-model="fragment.marker" min="0" max="100" /> 999 <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." />
1000 </div> 1000 </div>
1001 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global and page loudness"> 1001 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global and page loudness">
1002 <span>Loudness: </span> 1002 <span>Loudness: </span>
1003 <input type="number" ng-model="fragment.loudness" max="0" placeholder="{{page.loudness || specification.loudness || ''}}" /> 1003 <input type="number" ng-model="fragment.loudness" max="0" placeholder="{{page.loudness || specification.loudness || ''}}" />
1004 </div> 1004 </div>