comparison test_create.html @ 2907:a1e294297380

#222 WIP
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Mon, 31 Jul 2017 16:15:47 +0100
parents cedaf7ee1b81
children 9c26e579e64d
comparison
equal deleted inserted replaced
2906:281393b64a13 2907:a1e294297380
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">
51 <span>Save URL: </span> 52 <span>Save URL: </span>
52 <input type="text" ng-model="specification.projectReturn" placeholder="save.php" /> 53 <input type="text" ng-model="specification.projectReturn" placeholder="save.php" />
53 </div> 54 </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."> 55 <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> 56 <span>Exit URL: </span>
56 <input type="text" ng-model="specification.returnURL" /> 57 <input type="text" ng-model="specification.returnURL" placeholder="{{placeholder('returnURL')}}" />
57 </div> 58 </div>
58 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Randomise the page order"> 59 <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> 60 <span>Randomise Page Order: </span>
60 <input type="checkbox" ng-model="specification.randomiseOrder" /> 61 <input type="checkbox" ng-model="specification.randomiseOrder" />
61 </div> 62 </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."> 63 <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> 64 <span>Page Pool Size: </span>
64 <input type="number" ng-model="specification.poolSize" min="0" /> 65 <input type="number" ng-model="specification.poolSize" min="0" placeholder="{{placeholder('poolSize')}}" />
65 </div> 66 </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"> 67 <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> 68 <span>Loudness Normalisation (LUFS): </span>
68 <input type="number" ng-model="specification.loudness" max="0" /> 69 <input type="number" ng-model="specification.loudness" max="0" placeholder="{{placeholder('loudness')}}" />
69 </div> 70 </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."> 71 <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> 72 <span>Fixed Sampling Rate: </span>
72 <input type="number" ng-model="specification.sampleRate" min="0" /> 73 <input type="number" ng-model="specification.sampleRate" min="0" placeholder="{{placeholder('sampleRate')}}" />
73 </div> 74 </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."> 75 <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> 76 <span>Pre-Test audio calibration: </span>
76 <input type="checkbox" ng-model="specification.calibration" /> 77 <input type="checkbox" ng-model="specification.calibration" />
77 </div> 78 </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"> 79 <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> 80 <span>Global Cross-fade time: </span>
80 <input type="number" ng-model="specification.crossFade" min="0" step="0.1" /> 81 <input type="number" ng-model="specification.crossFade" min="0" step="0.1" placeholder="{{placeholder('crossFade')}}" />
81 </div> 82 </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"> 83 <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> 84 <span>Global Fragment Pre-Silence: </span>
84 <input type="number" ng-model="specification.preSilence" min="0" step="0.1" /> 85 <input type="number" ng-model="specification.preSilence" min="0" step="0.1" placeholder="{{placeholder('preSilence')}}" />
85 </div> 86 </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"> 87 <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> 88 <span>Global Fragment Post-Silence: </span>
88 <input type="number" ng-model="specification.preSilence" min="0" step="0.1" /> 89 <input type="number" ng-model="specification.postSilence" min="0" step="0.1" placeholder="{{placeholder('postSilence')}}" />
89 </div> 90 </div>
90 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Disable switching of audio elements"> 91 <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> 92 <span>Play audio one-at-a-time: </span>
92 <input type="checkbox" ng-model="specification.playOne" /> 93 <input type="checkbox" ng-model="specification.playOne" />
93 </div> 94 </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"> 95 <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> 96 <span>Minimum number of fragment plays</span>
96 <input type="number" ng-model="specification.minNumberPlays" min="0" max="{{specification.maxNumberPlays}}" /> 97 <input type="number" ng-model="specification.minNumberPlays" min="0" max="{{specification.maxNumberPlays}}" placeholder="{{placeholder('minNumberPlays')}}" />
97 </div> 98 </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"> 99 <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> 100 <span>Maximum number of fragment plays</span>
100 <input type="number" ng-model="specification.maxNumberPlays" min="{{specification.minNumberPlays || 0}}" /> 101 <input type="number" ng-model="specification.maxNumberPlays" min="{{specification.minNumberPlays || 0}}" placeholder="{{placeholder('maxNumberPlays')}}" />
101 </div> 102 </div>
102 </div> 103 </div>
103 <div class="node"> 104 <div class="node">
104 <h2>Test Completed Message</h2> 105 <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> 106 <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>
466 <span>Randomise Fragment Order: </span> 467 <span>Randomise Fragment Order: </span>
467 <input type="checkbox" ng-model="page.randomiseOrder" /> 468 <input type="checkbox" ng-model="page.randomiseOrder" />
468 </div> 469 </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."> 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 <span>Repeat Page N-times: </span> 471 <span>Repeat Page N-times: </span>
471 <input type="number" ng-model="page.repeatCount" value="0" step="1" /> 472 <input type="number" ng-model="page.repeatCount" value="0" step="1" placeholder="{{placeholder('repeatCount')}}" />
472 </div> 473 </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"> 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 <span>Loop audio: </span> 475 <span>Loop audio: </span>
475 <input type="checkbox" ng-model="page.loop" /> 476 <input type="checkbox" ng-model="page.loop" />
476 </div> 477 </div>
478 <span>Synchronous audio playback: </span> 479 <span>Synchronous audio playback: </span>
479 <input type="checkbox" ng-model="page.synchronous" /> 480 <input type="checkbox" ng-model="page.synchronous" />
480 </div> 481 </div>
481 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global loudness normalisation"> 482 <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> 483 <span>Loudness (page): </span>
483 <input type="number" ng-model="page.loudness" max="0" /> 484 <input type="number" ng-model="page.loudness" max="0" placeholder="{{specification.loudness || placeholder('loudness')}}" />
484 </div> 485 </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."> 486 <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> 487 <span>Label type: </span>
487 <select ng-model="page.label"> 488 <select ng-model="page.label">
488 <option value="default">Default</option> 489 <option value="default">Default</option>
497 <span>Label Start: </span> 498 <span>Label Start: </span>
498 <input type="text" ng-model="page.labelStart" /> 499 <input type="text" ng-model="page.labelStart" />
499 </div> 500 </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."> 501 <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> 502 <span>Fragment pool size: </span>
502 <input type="number" ng-model="page.poolSize" min="0" max="page.audioElements.length" /> 503 <input type="number" ng-model="page.poolSize" min="0" max="page.audioElements.length" placeholder="{{placeholder('poolSize')}}" />
503 </div> 504 </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"> 505 <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> 506 <span>Always include page: </span>
506 <input type="checkbox" ng-model="page.alwaysInclude" /> 507 <input type="checkbox" ng-model="page.alwaysInclude" />
507 </div> 508 </div>
509 <span>Fixed Page Position: </span> 510 <span>Fixed Page Position: </span>
510 <input type="number" ng-model="page.position" min="0" max="{{specification.pages.length}}" /> 511 <input type="number" ng-model="page.position" min="0" max="{{specification.pages.length}}" />
511 </div> 512 </div>
512 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global pre-silence"> 513 <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> 514 <span>Fragment pre-silence: </span>
514 <input type="number" ng-model="page.preSilence" min="0" step="0.1" /> 515 <input type="number" ng-model="page.preSilence" min="0" step="0.1" placeholder="{{specification.preSilence || placeholder('preSilence')}}" />
515 </div> 516 </div>
516 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Over-ride global post-silence"> 517 <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> 518 <span>Fragment post-silence: </span>
518 <input type="number" ng-model="page.postSilence" min="0" step="0.1" /> 519 <input type="number" ng-model="page.postSilence" min="0" step="0.1" placeholder="{{specification.postSilence || placeholder('postSilence')}}" />
519 </div> 520 </div>
520 <div class="attribute" data-container="body" data-toggle="popover" data-placement="bottom" data-trigger="hover" data-content="Disable switching of audio"> 521 <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> 522 <span>Cannot interupt audio: </span>
522 <input type="checkbox" ng-model="page.playOne" /> 523 <input type="checkbox" ng-model="page.playOne" />
523 </div> 524 </div>
525 <span>Only move playing audio: </span> 526 <span>Only move playing audio: </span>
526 <input type="checkbox" ng-model="page.restrictMovement" /> 527 <input type="checkbox" ng-model="page.restrictMovement" />
527 </div> 528 </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"> 529 <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> 530 <span>Minimum number of fragment plays</span>
530 <input type="number" ng-model="page.minNumberPlays" min="0" max="{{page.maxNumberPlays || specification.maxNumberPlays}}" /> 531 <input type="number" ng-model="page.minNumberPlays" min="0" max="{{page.maxNumberPlays || specification.maxNumberPlays}}" placeholder="{{specification.minNumberPlays || placeholder('minNumberPlays')}}" />
531 </div> 532 </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"> 533 <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> 534 <span>Maximum number of fragment plays</span>
534 <input type="number" ng-model="page.maxNumberPlays" min="{{page.minNumberPlays || specification.minNumberPlays || 0}}" /> 535 <input type="number" ng-model="page.maxNumberPlays" min="{{page.minNumberPlays || specification.minNumberPlays || 0}}" placeholder="{{specification.maxNumberPlays || placeholder('maxNumberPlays')}}" />
535 </div> 536 </div>
536 </div> 537 </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"> 538 <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> 539 <h3>Page Title</h3>
539 <textarea ng-model="page.title"></textarea> 540 <textarea ng-model="page.title"></textarea>
997 <span>Reference must be above: </span> 998 <span>Reference must be above: </span>
998 <input type="number" ng-model="fragment.marker" min="0" max="100" /> 999 <input type="number" ng-model="fragment.marker" min="0" max="100" />
999 </div> 1000 </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"> 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 <span>Loudness: </span> 1002 <span>Loudness: </span>
1002 <input type="number" ng-model="fragment.loudness" max="0" /> 1003 <input type="number" ng-model="fragment.loudness" max="0" placeholder="{{page.loudness || specification.loudness || ''}}" />
1003 </div> 1004 </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"> 1005 <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> 1006 <span>Always include fragment: </span>
1006 <input type="checkbox" ng-model="fragment.alwaysInclude" max="0" /> 1007 <input type="checkbox" ng-model="fragment.alwaysInclude" max="0" />
1007 </div> 1008 </div>
1042 </div> 1043 </div>
1043 </div> 1044 </div>
1044 <div id="popupHolder" ng-show="popupVisible"> 1045 <div id="popupHolder" ng-show="popupVisible">
1045 <div ng-controller="introduction" class="popup" ng-show="popupVisible"> 1046 <div ng-controller="introduction" class="popup" ng-show="popupVisible">
1046 <div class="popupTitle" ng-switch="state"> 1047 <div class="popupTitle" ng-switch="state">
1047 <span ng-switch-when="0">Test Creator</span> 1048 <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> 1049 <span ng-switch-when="1">Create New Test</span>
1049 </div> 1050 </div>
1050 <div class="popupContent container-fluid" ng-switch="state"> 1051 <div class="popupContent container-fluid" ng-switch="state">
1051 <div ng-switch-when="0"> 1052 <div ng-switch-when="0">
1052 <div> 1053 <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> 1054 <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> 1055 </div>
1055 <div> 1056 <div>
1056 <input type="file" id="files" ng-model="files" onchange="handleFiles(event)" /> 1057 <input type="file" id="files" ng-model="files" onchange="handleFiles(event)" />
1057 </div> 1058 </div>
1058 </div> 1059 </div>