annotate test_create.html @ 2861:79258b2a8245

Completed file upload for test_create
author Nicholas Jillings <nicholas.jillings@mail.bcu.ac.uk>
date Thu, 27 Apr 2017 12:57:31 +0100
parents 65b8d9ad75cc
children b8795a6452f8
rev   line source
nicholas@2859 1 <html>
nicholas@2859 2
nicholas@2859 3 <head>
nicholas@2859 4 <meta http-equiv="content-type" content="text/html; charset=utf-8">
nicholas@2859 5 <!-- This defines the test creator tool for the Web Audio Evaluation Toolbox -->
nicholas@2859 6 <link rel="stylesheet" type="text/css" href="test_create/style.css" />
nicholas@2859 7 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
nicholas@2859 8 <script src="js/jquery-2.1.4.js"></script>
nicholas@2859 9 <script src="js/angular.min.js"></script>
nicholas@2859 10 <script type="text/javascript" src="js/specification.js"></script>
nicholas@2859 11 <script type="text/javascript" src="test_create/test_core.js"></script>
nicholas@2859 12 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
nicholas@2859 13
nicholas@2859 14 <title>WAET 1.2.1 Test Creator</title>
nicholas@2859 15 </head>
nicholas@2859 16
nicholas@2859 17 <body>
nicholas@2859 18 <div ng-app="creator" ng-controller="view">
nicholas@2859 19 <div id="pageRoot">
nicholas@2859 20 <h1>Web Audio Evaluation Tool - Test Creator</h1>
nicholas@2859 21 </div>
nicholas@2860 22 <button type="button" class="btn btn-success" ng-click="exportXML()">Export XML</button>
nicholas@2859 23 <div id="setupNode" class="node" ng-controller="setup">
nicholas@2859 24 <h2>Setup</h2>
nicholas@2859 25 <div class="attributes">
nicholas@2859 26 <div class="attribute">
nicholas@2859 27 <span>Interface: </span>
nicholas@2859 28 <input type="text" ng-model="specification.interface" />
nicholas@2859 29 </div>
nicholas@2859 30 <div class="attribute">
nicholas@2859 31 <span>Save URL: </span>
nicholas@2859 32 <input type="text" ng-model="specification.projectReturn" />
nicholas@2859 33 </div>
nicholas@2859 34 <div class="attribute">
nicholas@2859 35 <span>Exit URL: </span>
nicholas@2859 36 <input type="text" ng-model="specification.returnURL" />
nicholas@2859 37 </div>
nicholas@2859 38 <div class="attribute">
nicholas@2859 39 <span>Randomise Page Order: </span>
nicholas@2859 40 <input type="checkbox" ng-model="specification.randomiseOrder" />
nicholas@2859 41 </div>
nicholas@2859 42 <div class="attribute">
nicholas@2859 43 <span>Page Pool Size: </span>
nicholas@2859 44 <input type="number" ng-model="specification.poolSize" min="0" />
nicholas@2859 45 </div>
nicholas@2859 46 <div class="attribute">
nicholas@2859 47 <span>Loudness Normalisation (LUFS): </span>
nicholas@2859 48 <input type="number" ng-model="specification.loudness" max="0" />
nicholas@2859 49 </div>
nicholas@2859 50 <div class="attribute">
nicholas@2859 51 <span>Fixed Sampling Rate: </span>
nicholas@2859 52 <input type="number" ng-model="specification.sampleRate" min="0" />
nicholas@2859 53 </div>
nicholas@2859 54 <div class="attribute">
nicholas@2859 55 <span>Pre-Test audio calibration: </span>
nicholas@2859 56 <input type="checkbox" ng-model="specification.calibration" />
nicholas@2859 57 </div>
nicholas@2859 58 <div class="attribute">
nicholas@2859 59 <span>Global Cross-fade time: </span>
nicholas@2859 60 <input type="number" ng-model="specification.crossFade" min="0" step="0.1" />
nicholas@2859 61 </div>
nicholas@2859 62 <div class="attribute">
nicholas@2859 63 <span>Global Fragment Pre-Silence: </span>
nicholas@2859 64 <input type="number" ng-model="specification.preSilence" min="0" step="0.1" />
nicholas@2859 65 </div>
nicholas@2859 66 <div class="attribute">
nicholas@2859 67 <span>Global Fragment Post-Silence: </span>
nicholas@2859 68 <input type="number" ng-model="specification.preSilence" min="0" step="0.1" />
nicholas@2859 69 </div>
nicholas@2859 70 <div class="attribute">
nicholas@2859 71 <span>Play audio one-at-a-time: </span>
nicholas@2859 72 <input type="checkbox" ng-model="specification.playOne" />
nicholas@2859 73 </div>
nicholas@2859 74 </div>
nicholas@2859 75 <div class="node">
nicholas@2859 76 <h2>Test Completed Message</h2>
nicholas@2859 77 <textarea ng-model="specification.exitText"></textarea>
nicholas@2859 78 </div>
nicholas@2859 79 <div id="metricsNode" class="node">
nicholas@2859 80 <h3>Session Metrics</h3>
nicholas@2859 81 <div class="attributes">
nicholas@2859 82 <div class="attribute">
nicholas@2859 83 <span>Collect Total Test Time: </span>
nicholas@2859 84 <input type="checkbox" value="testTimer" ng-click="enableMetric($event)" />
nicholas@2859 85 </div>
nicholas@2859 86 <div class="attribute">
nicholas@2859 87 <span>Collect Fragment Listen Time: </span>
nicholas@2859 88 <input type="checkbox" value="elementTimer" ng-click="enableMetric($event)" />
nicholas@2859 89 </div>
nicholas@2859 90 <div class="attribute">
nicholas@2859 91 <span>Collect Fragment Initial Position: </span>
nicholas@2859 92 <input type="checkbox" value="elementInitialPosition" ng-click="enableMetric($event)" />
nicholas@2859 93 </div>
nicholas@2859 94 <div class="attribute">
nicholas@2859 95 <span>Collect Fragment Position over Time: </span>
nicholas@2859 96 <input type="checkbox" value="elementTracker" ng-click="enableMetric($event)" />
nicholas@2859 97 </div>
nicholas@2859 98 <div class="attribute">
nicholas@2859 99 <span>Collect Fragment Listened To Flag: </span>
nicholas@2859 100 <input type="checkbox" value="elementFlagListenedTo" ng-click="enableMetric($event)" />
nicholas@2859 101 </div>
nicholas@2859 102 <div class="attribute">
nicholas@2859 103 <span>Collect Fragment Moved Flag: </span>
nicholas@2859 104 <input type="checkbox" value="elementFlagMoved" ng-click="enableMetric($event)" />
nicholas@2859 105 </div>
nicholas@2859 106 <div class="attribute">
nicholas@2859 107 <span>Collect Fragment Listened Flag: </span>
nicholas@2859 108 <input type="checkbox" value="elementListenTracker" ng-click="enableMetric($event)" />
nicholas@2859 109 </div>
nicholas@2859 110 </div>
nicholas@2859 111 </div>
nicholas@2859 112 <div id="globalpresurvey" class="node" ng-controller="survey" ng-init="survey = specification.preTest">
nicholas@2859 113 <h2>Pre Test Survey</h2>
nicholas@2859 114 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button>
nicholas@2859 115 <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption">
nicholas@2859 116 <h3>Survey Entry</h3>
nicholas@2859 117 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button>
nicholas@2859 118 <div class="attributes">
nicholas@2859 119 <div class="attribute">
nicholas@2859 120 <span>Survey Type: </span>
nicholas@2859 121 <select ng-model="opt.type">
nicholas@2859 122 <option value="question">Question</option>
nicholas@2859 123 <option value="radio">Radio</option>
nicholas@2859 124 <option value="checkbox">Checkbox</option>
nicholas@2859 125 <option value="statement">Statement</option>
nicholas@2859 126 <option value="number">Number</option>
nicholas@2859 127 <option value="slider">Slider</option>
nicholas@2859 128 <option value="video">Video</option>
nicholas@2859 129 <option value="youtube">YouTube</option>
nicholas@2859 130 </select>
nicholas@2859 131 </div>
nicholas@2859 132 <div class="attribute">
nicholas@2859 133 <span>Unique Survey Entry ID:</span>
nicholas@2859 134 <input type="text" ng-model="opt.id" />
nicholas@2859 135 </div>
nicholas@2859 136 <div class="attribute">
nicholas@2859 137 <span>Entry Name:</span>
nicholas@2859 138 <input type="text" ng-model="opt.name" />
nicholas@2859 139 </div>
nicholas@2859 140 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0">
nicholas@2859 141 <span>Mandatory:</span>
nicholas@2859 142 <input type="checkbox" ng-model="opt.mandatory" />
nicholas@2859 143 </div>
nicholas@2859 144 <div class="attribute">
nicholas@2859 145 <span>Minimum Wait Time (s):</span>
nicholas@2859 146 <input type="number" ng-model="opt.minWait" min="0" />
nicholas@2859 147 </div>
nicholas@2859 148 <div class="attribute" ng-show="opt.type == 'question'">
nicholas@2859 149 <span>Box Size:</span>
nicholas@2859 150 <select ng-model="opt.boxsize">
nicholas@2859 151 <option value="small">Small</option>
nicholas@2859 152 <option value="normal">Normal</option>
nicholas@2859 153 <option value="large">Large</option>
nicholas@2859 154 <option value="huge">Huge</option>
nicholas@2859 155 </select>
nicholas@2859 156 </div>
nicholas@2859 157 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
nicholas@2859 158 <span>Minimum Selected:</span>
nicholas@2859 159 <input type="number" ng-model="opt.min" min="0" />
nicholas@2859 160 </div>
nicholas@2859 161 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
nicholas@2859 162 <span>Maximum Selected:</span>
nicholas@2859 163 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" />
nicholas@2859 164 </div>
nicholas@2859 165 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
nicholas@2859 166 <span>Minimum Value:</span>
nicholas@2859 167 <input type="number" ng-model="opt.min" />
nicholas@2859 168 </div>
nicholas@2859 169 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
nicholas@2859 170 <span>Maximum Value:</span>
nicholas@2859 171 <input type="number" ng-model="opt.max" />
nicholas@2859 172 </div>
nicholas@2859 173 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0">
nicholas@2859 174 <span>Video URL:</span>
nicholas@2859 175 <input type="text" ng-model="opt.url" />
nicholas@2859 176 </div>
nicholas@2859 177 </div>
nicholas@2859 178 <div class="node">
nicholas@2859 179 <h4>Statement</h4>
nicholas@2859 180 <textarea ng-model="opt.statement"></textarea>
nicholas@2859 181 </div>
nicholas@2859 182 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
nicholas@2859 183 <h4>Options</h4>
nicholas@2859 184 <div>
nicholas@2859 185 <button type="button" class="btn btn-default" ng-click="addOption();">Add Option</button>
nicholas@2859 186 </div>
nicholas@2859 187 <div class="node" ng-repeat="option in opt.options">
nicholas@2859 188 <div class="attributes">
nicholas@2859 189 <div class="attribute">
nicholas@2859 190 <button type="button" class="btn btn-default" ng-click="removeOption(option);">Remove</button>
nicholas@2859 191 </div>
nicholas@2859 192 <div class="attribute">
nicholas@2859 193 <span>Name: </span>
nicholas@2859 194 <input type="text" ng-model="option.name" />
nicholas@2859 195 </div>
nicholas@2859 196 <div class="attribute">
nicholas@2859 197 <span>Displayed Text: </span>
nicholas@2859 198 <input type="text" ng-model="option.text" />
nicholas@2859 199 </div>
nicholas@2859 200 </div>
nicholas@2859 201 </div>
nicholas@2859 202 </div>
nicholas@2859 203 <div class="node">
nicholas@2859 204 <h4>Conditionals</h4>
nicholas@2859 205 <button type="button" class="btn btn-default" ng-click="addCondition()">Add Condition</button>
nicholas@2859 206 <div class="node" ng-repeat="condition in opt.conditions">
nicholas@2859 207 <div class="attributes">
nicholas@2859 208 <div class="attribute">
nicholas@2859 209 <button type="button" class="btn btn-danger" ng-click="removeCondition(condition)">Remove</button>
nicholas@2859 210 </div>
nicholas@2859 211 <div class="attribute">
nicholas@2859 212 <span>Check Type:</span>
nicholas@2859 213 <select ng-model="condition.check">
nicholas@2859 214 <option value="equals">Equal To</option>
nicholas@2859 215 <option value="lessThan">Less Than</option>
nicholas@2859 216 <option value="greaterThan">Greater Than</option>
nicholas@2859 217 <option value="stringContains">String Contains</option>
nicholas@2859 218 </select>
nicholas@2859 219 </div>
nicholas@2859 220 <div class="attribute">
nicholas@2859 221 <span>Value: </span>
nicholas@2859 222 <input type="text" ng-model="condition.value" />
nicholas@2859 223 </div>
nicholas@2859 224 <div class="attribute">
nicholas@2859 225 <span>Jump To On Pass: </span>
nicholas@2859 226 <select ng-model="condition.jumpToOnPass">
nicholas@2859 227 <option value="">None</option>
nicholas@2859 228 <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
nicholas@2859 229 </select>
nicholas@2859 230 </div>
nicholas@2859 231 <div class="attribute">
nicholas@2859 232 <span>Jump To On Fail: </span>
nicholas@2859 233 <select ng-model="condition.jumpToOnFail">
nicholas@2859 234 <option value="">None</option>
nicholas@2859 235 <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
nicholas@2859 236 </select>
nicholas@2859 237 </div>
nicholas@2859 238 </div>
nicholas@2859 239 </div>
nicholas@2859 240 </div>
nicholas@2859 241 </div>
nicholas@2859 242 </div>
nicholas@2859 243 <div id="globalpostsurvey" class="node" ng-controller="survey" ng-init="survey = specification.postTest">
nicholas@2859 244 <h2>Post Test Survey</h2>
nicholas@2859 245 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button>
nicholas@2859 246 <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption">
nicholas@2859 247 <h3>Survey Entry</h3>
nicholas@2859 248 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button>
nicholas@2859 249 <div class="attributes">
nicholas@2859 250 <div class="attribute">
nicholas@2859 251 <span>Survey Type: </span>
nicholas@2859 252 <select ng-model="opt.type">
nicholas@2859 253 <option value="question">Question</option>
nicholas@2859 254 <option value="radio">Radio</option>
nicholas@2859 255 <option value="checkbox">Checkbox</option>
nicholas@2859 256 <option value="statement">Statement</option>
nicholas@2859 257 <option value="number">Number</option>
nicholas@2859 258 <option value="slider">Slider</option>
nicholas@2859 259 <option value="video">Video</option>
nicholas@2859 260 <option value="youtube">YouTube</option>
nicholas@2859 261 </select>
nicholas@2859 262 </div>
nicholas@2859 263 <div class="attribute">
nicholas@2859 264 <span>Unique Survey Entry ID:</span>
nicholas@2859 265 <input type="text" ng-model="opt.id" />
nicholas@2859 266 </div>
nicholas@2859 267 <div class="attribute">
nicholas@2859 268 <span>Entry Name:</span>
nicholas@2859 269 <input type="text" ng-model="opt.name" />
nicholas@2859 270 </div>
nicholas@2859 271 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0">
nicholas@2859 272 <span>Mandatory:</span>
nicholas@2859 273 <input type="checkbox" ng-model="opt.mandatory" />
nicholas@2859 274 </div>
nicholas@2859 275 <div class="attribute">
nicholas@2859 276 <span>Minimum Wait Time (s):</span>
nicholas@2859 277 <input type="number" ng-model="opt.minWait" min="0" />
nicholas@2859 278 </div>
nicholas@2859 279 <div class="attribute" ng-show="opt.type == 'question'">
nicholas@2859 280 <span>Box Size:</span>
nicholas@2859 281 <select ng-model="opt.boxsize">
nicholas@2859 282 <option value="small">Small</option>
nicholas@2859 283 <option value="normal">Normal</option>
nicholas@2859 284 <option value="large">Large</option>
nicholas@2859 285 <option value="huge">Huge</option>
nicholas@2859 286 </select>
nicholas@2859 287 </div>
nicholas@2859 288 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
nicholas@2859 289 <span>Minimum Selected:</span>
nicholas@2859 290 <input type="number" ng-model="opt.min" min="0" />
nicholas@2859 291 </div>
nicholas@2859 292 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
nicholas@2859 293 <span>Maximum Selected:</span>
nicholas@2859 294 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" />
nicholas@2859 295 </div>
nicholas@2859 296 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
nicholas@2859 297 <span>Minimum Value:</span>
nicholas@2859 298 <input type="number" ng-model="opt.min" />
nicholas@2859 299 </div>
nicholas@2859 300 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
nicholas@2859 301 <span>Maximum Value:</span>
nicholas@2859 302 <input type="number" ng-model="opt.max" />
nicholas@2859 303 </div>
nicholas@2859 304 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0">
nicholas@2859 305 <span>Video URL:</span>
nicholas@2859 306 <input type="text" ng-model="opt.url" />
nicholas@2859 307 </div>
nicholas@2859 308 </div>
nicholas@2859 309 <div class="node">
nicholas@2859 310 <h4>Statement</h4>
nicholas@2859 311 <textarea ng-model="opt.statement"></textarea>
nicholas@2859 312 </div>
nicholas@2859 313 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
nicholas@2859 314 <h4>Options</h4>
nicholas@2859 315 <div>
nicholas@2859 316 <button type="button" class="btn btn-default" ng-click="addOption();">Add Option</button>
nicholas@2859 317 </div>
nicholas@2859 318 <div class="node" ng-repeat="option in opt.options">
nicholas@2859 319 <div class="attributes">
nicholas@2859 320 <div class="attribute">
nicholas@2859 321 <button type="button" class="btn btn-default" ng-click="removeOption(option);">Remove</button>
nicholas@2859 322 </div>
nicholas@2859 323 <div class="attribute">
nicholas@2859 324 <span>Name: </span>
nicholas@2859 325 <input type="text" ng-model="option.name" />
nicholas@2859 326 </div>
nicholas@2859 327 <div class="attribute">
nicholas@2859 328 <span>Displayed Text: </span>
nicholas@2859 329 <input type="text" ng-model="option.text" />
nicholas@2859 330 </div>
nicholas@2859 331 </div>
nicholas@2859 332 </div>
nicholas@2859 333 </div>
nicholas@2859 334 <div class="node">
nicholas@2859 335 <h4>Conditionals</h4>
nicholas@2859 336 <button type="button" class="btn btn-default" ng-click="addCondition()">Add Condition</button>
nicholas@2859 337 <div class="node" ng-repeat="condition in opt.conditions">
nicholas@2859 338 <div class="attributes">
nicholas@2859 339 <div class="attribute">
nicholas@2859 340 <button type="button" class="btn btn-danger" ng-click="removeCondition(condition)">Remove</button>
nicholas@2859 341 </div>
nicholas@2859 342 <div class="attribute">
nicholas@2859 343 <span>Check Type:</span>
nicholas@2859 344 <select ng-model="condition.check">
nicholas@2859 345 <option value="equals">Equal To</option>
nicholas@2859 346 <option value="lessThan">Less Than</option>
nicholas@2859 347 <option value="greaterThan">Greater Than</option>
nicholas@2859 348 <option value="stringContains">String Contains</option>
nicholas@2859 349 </select>
nicholas@2859 350 </div>
nicholas@2859 351 <div class="attribute">
nicholas@2859 352 <span>Value: </span>
nicholas@2859 353 <input type="text" ng-model="condition.value" />
nicholas@2859 354 </div>
nicholas@2859 355 <div class="attribute">
nicholas@2859 356 <span>Jump To On Pass: </span>
nicholas@2859 357 <select ng-model="condition.jumpToOnPass">
nicholas@2859 358 <option value="">None</option>
nicholas@2859 359 <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
nicholas@2859 360 </select>
nicholas@2859 361 </div>
nicholas@2859 362 <div class="attribute">
nicholas@2859 363 <span>Jump To On Fail: </span>
nicholas@2859 364 <select ng-model="condition.jumpToOnFail">
nicholas@2859 365 <option value="">None</option>
nicholas@2859 366 <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
nicholas@2859 367 </select>
nicholas@2859 368 </div>
nicholas@2859 369 </div>
nicholas@2859 370 </div>
nicholas@2859 371 </div>
nicholas@2859 372 </div>
nicholas@2859 373 </div>
nicholas@2859 374 <div id="globalinterface" class="node" ng-controller="interfaceNode" ng-init="interface = specification.interfaces">
nicholas@2859 375 <h2>Interface (Globals)</h2>
nicholas@2859 376 <div class="node interfaceOptions">
nicholas@2859 377 <div class="attributes">
nicholas@2859 378 <div class="attribute" name="fragmentPlayed" type="check">
nicholas@2859 379 <span>Check all fragments played: </span>
nicholas@2859 380 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 381 </div>
nicholas@2859 382 <div class="attribute" name="fragmentFullPlayback" type="check">
nicholas@2859 383 <span>Check all fragments fully played: </span>
nicholas@2859 384 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 385 </div>
nicholas@2859 386 <div class="attribute" name="fragmentMoved" type="check">
nicholas@2859 387 <span>Check all fragments have been moved: </span>
nicholas@2859 388 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 389 </div>
nicholas@2859 390 <div class="attribute" name="fragmentComments" type="check">
nicholas@2859 391 <span>Check all fragments have comments: </span>
nicholas@2859 392 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 393 </div>
nicholas@2859 394 <div class="attribute" name="scalerange" type="check">
nicholas@2859 395 <span>Enforce a scale usage: </span>
nicholas@2859 396 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 397 <span>Minimum:</span>
nicholas@2859 398 <input type="number" min="0" max="100" name="min" />
nicholas@2859 399 <span>Maximum:</span>
nicholas@2859 400 <input type="number" min="0" max="100" name="max" />
nicholas@2859 401 </div>
nicholas@2859 402 <div class="attribute" name="volume" type="show">
nicholas@2859 403 <span>Show master volume control: </span>
nicholas@2859 404 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 405 </div>
nicholas@2859 406 <div class="attribute" name="playhead" type="show">
nicholas@2859 407 <span>Show playhead: </span>
nicholas@2859 408 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 409 </div>
nicholas@2859 410 <div class="attribute" name="page-count" type="show">
nicholas@2859 411 <span>Show Page Count: </span>
nicholas@2859 412 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 413 </div>
nicholas@2859 414 <div class="attribute" name="comments" type="show">
nicholas@2859 415 <span>Show Fragment Comments: </span>
nicholas@2859 416 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 417 </div>
nicholas@2859 418 </div>
nicholas@2859 419 </div>
nicholas@2859 420 </div>
nicholas@2859 421 </div>
nicholas@2859 422 <div style="text-align: center;">
nicholas@2859 423 <button type="button" class="btn btn-success" ng-click="addPage()">Add Page</button>
nicholas@2859 424 </div>
nicholas@2859 425 <div class="node pageNode" ng-controller="page" ng-repeat="page in specification.pages">
nicholas@2859 426 <h2>Page</h2>
nicholas@2859 427 <div class="attributes">
nicholas@2859 428 <div class="attribute">
nicholas@2859 429 <span>Unique ID: </span>
nicholas@2859 430 <input type="text" ng-model="page.id" />
nicholas@2859 431 </div>
nicholas@2859 432 <div class="attribute">
nicholas@2859 433 <span>Fragment common-root URL: </span>
nicholas@2859 434 <input type="text" ng-model="page.hostURL" />
nicholas@2859 435 </div>
nicholas@2859 436 <div class="attribute">
nicholas@2859 437 <span>Randomise Fragment Order: </span>
nicholas@2859 438 <input type="checkbox" ng-model="page.randomiseOrder" />
nicholas@2859 439 </div>
nicholas@2859 440 <div class="attribute">
nicholas@2859 441 <span>Repeat Page N-times: </span>
nicholas@2859 442 <input type="number" ng-model="page.repeatCount" />
nicholas@2859 443 </div>
nicholas@2859 444 <div class="attribute">
nicholas@2859 445 <span>Loop audio: </span>
nicholas@2859 446 <input type="checkbox" ng-model="page.loop" />
nicholas@2859 447 </div>
nicholas@2859 448 <div class="attribute">
nicholas@2859 449 <span>Synchronous audio playback: </span>
nicholas@2859 450 <input type="checkbox" ng-model="page.synchronous" />
nicholas@2859 451 </div>
nicholas@2859 452 <div class="attribute">
nicholas@2859 453 <span>Loudness (page): </span>
nicholas@2859 454 <input type="number" ng-model="page.loudness" max="0" />
nicholas@2859 455 </div>
nicholas@2859 456 <div class="attribute">
nicholas@2859 457 <span>Label type: </span>
nicholas@2859 458 <select ng-model="page.label">
nicholas@2859 459 <option value="default">Default</option>
nicholas@2859 460 <option value="none">None</option>
nicholas@2859 461 <option value="number">[1, 2, 3...]</option>
nicholas@2859 462 <option value="letter">[a, b, c...]</option>
nicholas@2859 463 <option value="capital">[A, B, C...]</option>
nicholas@2859 464 <option value="samediff" ng-show="specification.interface == 'AB'">[Same, Different]</option>
nicholas@2859 465 </select>
nicholas@2859 466 </div>
nicholas@2859 467 <div class="attribute" ng-show="page.label != 'default' && page.label != 'none'">
nicholas@2859 468 <span>Label Start: </span>
nicholas@2859 469 <input type="text" ng-model="page.labelStart" />
nicholas@2859 470 </div>
nicholas@2859 471 <div class="attribute">
nicholas@2859 472 <span>Fragment pool size: </span>
nicholas@2859 473 <input type="number" ng-model="page.poolSize" min="0" max="page.audioElements.length" />
nicholas@2859 474 </div>
nicholas@2859 475 <div class="attribute" ng-show="specification.poolSize > 0">
nicholas@2859 476 <span>Always include page: </span>
nicholas@2859 477 <input type="checkbox" ng-model="page.alwaysInclude" />
nicholas@2859 478 </div>
nicholas@2859 479 <div class="attribute">
nicholas@2859 480 <span>Fixed Page Position: </span>
nicholas@2859 481 <input type="number" ng-model="page.position" max="{{specification.pages.length}}" />
nicholas@2859 482 </div>
nicholas@2859 483 <div class="attribute">
nicholas@2859 484 <span>Fixed Page Position: </span>
nicholas@2859 485 <input type="number" ng-model="page.position" min="0" max="{{specification.pages.length}}" />
nicholas@2859 486 </div>
nicholas@2859 487 <div class="attribute">
nicholas@2859 488 <span>Fragment pre-silence: </span>
nicholas@2859 489 <input type="number" ng-model="page.preSilence" min="0" step="0.1" />
nicholas@2859 490 </div>
nicholas@2859 491 <div class="attribute">
nicholas@2859 492 <span>Fragment post-silence: </span>
nicholas@2859 493 <input type="number" ng-model="page.postSilence" min="0" step="0.1" />
nicholas@2859 494 </div>
nicholas@2859 495 <div class="attribute">
nicholas@2859 496 <span>Cannot interupt audio: </span>
nicholas@2859 497 <input type="checkbox" ng-model="page.playOne" />
nicholas@2859 498 </div>
nicholas@2859 499 <div class="attribute">
nicholas@2859 500 <span>Only move playing audio: </span>
nicholas@2859 501 <input type="checkbox" ng-model="page.restrictMovement" />
nicholas@2859 502 </div>
nicholas@2859 503 </div>
nicholas@2859 504 <div class="node">
nicholas@2859 505 <h3>Page Title</h3>
nicholas@2859 506 <textarea ng-model="page.title"></textarea>
nicholas@2859 507 </div>
nicholas@2859 508 <div class="node">
nicholas@2859 509 <h3>Comment box text prefix</h3>
nicholas@2859 510 <textarea ng-model="page.commentboxprefix"></textarea>
nicholas@2859 511 <p>Example:
nicholas@2859 512 <span style="font-weight:600">{{page.commentboxprefix}} A</span>
nicholas@2859 513 </p>
nicholas@2859 514 </div>
nicholas@2859 515 <div class="node" ng-controller="survey" ng-init="survey = page.preTest">
nicholas@2859 516 <h2>Pre Page Survey</h2>
nicholas@2859 517 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button>
nicholas@2859 518 <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption">
nicholas@2859 519 <h3>Survey Entry</h3>
nicholas@2859 520 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button>
nicholas@2859 521 <div class="attributes">
nicholas@2859 522 <div class="attribute">
nicholas@2859 523 <span>Survey Type: </span>
nicholas@2859 524 <select ng-model="opt.type">
nicholas@2859 525 <option value="question">Question</option>
nicholas@2859 526 <option value="radio">Radio</option>
nicholas@2859 527 <option value="checkbox">Checkbox</option>
nicholas@2859 528 <option value="statement">Statement</option>
nicholas@2859 529 <option value="number">Number</option>
nicholas@2859 530 <option value="slider">Slider</option>
nicholas@2859 531 <option value="video">Video</option>
nicholas@2859 532 <option value="youtube">YouTube</option>
nicholas@2859 533 </select>
nicholas@2859 534 </div>
nicholas@2859 535 <div class="attribute">
nicholas@2859 536 <span>Unique Survey Entry ID:</span>
nicholas@2859 537 <input type="text" ng-model="opt.id" />
nicholas@2859 538 </div>
nicholas@2859 539 <div class="attribute">
nicholas@2859 540 <span>Entry Name:</span>
nicholas@2859 541 <input type="text" ng-model="opt.name" />
nicholas@2859 542 </div>
nicholas@2859 543 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0">
nicholas@2859 544 <span>Mandatory:</span>
nicholas@2859 545 <input type="checkbox" ng-model="opt.mandatory" />
nicholas@2859 546 </div>
nicholas@2859 547 <div class="attribute">
nicholas@2859 548 <span>Minimum Wait Time (s):</span>
nicholas@2859 549 <input type="number" ng-model="opt.minWait" min="0" />
nicholas@2859 550 </div>
nicholas@2859 551 <div class="attribute" ng-show="opt.type == 'question'">
nicholas@2859 552 <span>Box Size:</span>
nicholas@2859 553 <select ng-model="opt.boxsize">
nicholas@2859 554 <option value="small">Small</option>
nicholas@2859 555 <option value="normal">Normal</option>
nicholas@2859 556 <option value="large">Large</option>
nicholas@2859 557 <option value="huge">Huge</option>
nicholas@2859 558 </select>
nicholas@2859 559 </div>
nicholas@2859 560 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
nicholas@2859 561 <span>Minimum Selected:</span>
nicholas@2859 562 <input type="number" ng-model="opt.min" min="0" />
nicholas@2859 563 </div>
nicholas@2859 564 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
nicholas@2859 565 <span>Maximum Selected:</span>
nicholas@2859 566 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" />
nicholas@2859 567 </div>
nicholas@2859 568 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
nicholas@2859 569 <span>Minimum Value:</span>
nicholas@2859 570 <input type="number" ng-model="opt.min" />
nicholas@2859 571 </div>
nicholas@2859 572 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
nicholas@2859 573 <span>Maximum Value:</span>
nicholas@2859 574 <input type="number" ng-model="opt.max" />
nicholas@2859 575 </div>
nicholas@2859 576 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0">
nicholas@2859 577 <span>Video URL:</span>
nicholas@2859 578 <input type="text" ng-model="opt.url" />
nicholas@2859 579 </div>
nicholas@2859 580 </div>
nicholas@2859 581 <div class="node">
nicholas@2859 582 <h4>Statement</h4>
nicholas@2859 583 <textarea ng-model="opt.statement"></textarea>
nicholas@2859 584 </div>
nicholas@2859 585 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
nicholas@2859 586 <h4>Options</h4>
nicholas@2859 587 <div>
nicholas@2859 588 <button type="button" class="btn btn-default" ng-click="addOption();">Add Option</button>
nicholas@2859 589 </div>
nicholas@2859 590 <div class="node" ng-repeat="option in opt.options">
nicholas@2859 591 <div class="attributes">
nicholas@2859 592 <div class="attribute">
nicholas@2859 593 <button type="button" class="btn btn-default" ng-click="removeOption(option);">Remove</button>
nicholas@2859 594 </div>
nicholas@2859 595 <div class="attribute">
nicholas@2859 596 <span>Name: </span>
nicholas@2859 597 <input type="text" ng-model="option.name" />
nicholas@2859 598 </div>
nicholas@2859 599 <div class="attribute">
nicholas@2859 600 <span>Displayed Text: </span>
nicholas@2859 601 <input type="text" ng-model="option.text" />
nicholas@2859 602 </div>
nicholas@2859 603 </div>
nicholas@2859 604 </div>
nicholas@2859 605 </div>
nicholas@2859 606 <div class="node">
nicholas@2859 607 <h4>Conditionals</h4>
nicholas@2859 608 <button type="button" class="btn btn-default" ng-click="addCondition()">Add Condition</button>
nicholas@2859 609 <div class="node" ng-repeat="condition in opt.conditions">
nicholas@2859 610 <div class="attributes">
nicholas@2859 611 <div class="attribute">
nicholas@2859 612 <button type="button" class="btn btn-danger" ng-click="removeCondition(condition)">Remove</button>
nicholas@2859 613 </div>
nicholas@2859 614 <div class="attribute">
nicholas@2859 615 <span>Check Type:</span>
nicholas@2859 616 <select ng-model="condition.check">
nicholas@2859 617 <option value="equals">Equal To</option>
nicholas@2859 618 <option value="lessThan">Less Than</option>
nicholas@2859 619 <option value="greaterThan">Greater Than</option>
nicholas@2859 620 <option value="stringContains">String Contains</option>
nicholas@2859 621 </select>
nicholas@2859 622 </div>
nicholas@2859 623 <div class="attribute">
nicholas@2859 624 <span>Value: </span>
nicholas@2859 625 <input type="text" ng-model="condition.value" />
nicholas@2859 626 </div>
nicholas@2859 627 <div class="attribute">
nicholas@2859 628 <span>Jump To On Pass: </span>
nicholas@2859 629 <select ng-model="condition.jumpToOnPass">
nicholas@2859 630 <option value="">None</option>
nicholas@2859 631 <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
nicholas@2859 632 </select>
nicholas@2859 633 </div>
nicholas@2859 634 <div class="attribute">
nicholas@2859 635 <span>Jump To On Fail: </span>
nicholas@2859 636 <select ng-model="condition.jumpToOnFail">
nicholas@2859 637 <option value="">None</option>
nicholas@2859 638 <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
nicholas@2859 639 </select>
nicholas@2859 640 </div>
nicholas@2859 641 </div>
nicholas@2859 642 </div>
nicholas@2859 643 </div>
nicholas@2859 644 </div>
nicholas@2859 645 </div>
nicholas@2859 646 <div class="node" ng-controller="survey" ng-init="survey = specification.postTest">
nicholas@2859 647 <h2>Post Page Survey</h2>
nicholas@2859 648 <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button>
nicholas@2859 649 <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption">
nicholas@2859 650 <h3>Survey Entry</h3>
nicholas@2859 651 <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button>
nicholas@2859 652 <div class="attributes">
nicholas@2859 653 <div class="attribute">
nicholas@2859 654 <span>Survey Type: </span>
nicholas@2859 655 <select ng-model="opt.type">
nicholas@2859 656 <option value="question">Question</option>
nicholas@2859 657 <option value="radio">Radio</option>
nicholas@2859 658 <option value="checkbox">Checkbox</option>
nicholas@2859 659 <option value="statement">Statement</option>
nicholas@2859 660 <option value="number">Number</option>
nicholas@2859 661 <option value="slider">Slider</option>
nicholas@2859 662 <option value="video">Video</option>
nicholas@2859 663 <option value="youtube">YouTube</option>
nicholas@2859 664 </select>
nicholas@2859 665 </div>
nicholas@2859 666 <div class="attribute">
nicholas@2859 667 <span>Unique Survey Entry ID:</span>
nicholas@2859 668 <input type="text" ng-model="opt.id" />
nicholas@2859 669 </div>
nicholas@2859 670 <div class="attribute">
nicholas@2859 671 <span>Entry Name:</span>
nicholas@2859 672 <input type="text" ng-model="opt.name" />
nicholas@2859 673 </div>
nicholas@2859 674 <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0">
nicholas@2859 675 <span>Mandatory:</span>
nicholas@2859 676 <input type="checkbox" ng-model="opt.mandatory" />
nicholas@2859 677 </div>
nicholas@2859 678 <div class="attribute">
nicholas@2859 679 <span>Minimum Wait Time (s):</span>
nicholas@2859 680 <input type="number" ng-model="opt.minWait" min="0" />
nicholas@2859 681 </div>
nicholas@2859 682 <div class="attribute" ng-show="opt.type == 'question'">
nicholas@2859 683 <span>Box Size:</span>
nicholas@2859 684 <select ng-model="opt.boxsize">
nicholas@2859 685 <option value="small">Small</option>
nicholas@2859 686 <option value="normal">Normal</option>
nicholas@2859 687 <option value="large">Large</option>
nicholas@2859 688 <option value="huge">Huge</option>
nicholas@2859 689 </select>
nicholas@2859 690 </div>
nicholas@2859 691 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
nicholas@2859 692 <span>Minimum Selected:</span>
nicholas@2859 693 <input type="number" ng-model="opt.min" min="0" />
nicholas@2859 694 </div>
nicholas@2859 695 <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
nicholas@2859 696 <span>Maximum Selected:</span>
nicholas@2859 697 <input type="number" ng-model="opt.max" max="{{opt.options.length}}" />
nicholas@2859 698 </div>
nicholas@2859 699 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
nicholas@2859 700 <span>Minimum Value:</span>
nicholas@2859 701 <input type="number" ng-model="opt.min" />
nicholas@2859 702 </div>
nicholas@2859 703 <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
nicholas@2859 704 <span>Maximum Value:</span>
nicholas@2859 705 <input type="number" ng-model="opt.max" />
nicholas@2859 706 </div>
nicholas@2859 707 <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0">
nicholas@2859 708 <span>Video URL:</span>
nicholas@2859 709 <input type="text" ng-model="opt.url" />
nicholas@2859 710 </div>
nicholas@2859 711 </div>
nicholas@2859 712 <div class="node">
nicholas@2859 713 <h4>Statement</h4>
nicholas@2859 714 <textarea ng-model="opt.statement"></textarea>
nicholas@2859 715 </div>
nicholas@2859 716 <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
nicholas@2859 717 <h4>Options</h4>
nicholas@2859 718 <div>
nicholas@2859 719 <button type="button" class="btn btn-default" ng-click="addOption();">Add Option</button>
nicholas@2859 720 </div>
nicholas@2859 721 <div class="node" ng-repeat="option in opt.options">
nicholas@2859 722 <div class="attributes">
nicholas@2859 723 <div class="attribute">
nicholas@2859 724 <button type="button" class="btn btn-default" ng-click="removeOption(option);">Remove</button>
nicholas@2859 725 </div>
nicholas@2859 726 <div class="attribute">
nicholas@2859 727 <span>Name: </span>
nicholas@2859 728 <input type="text" ng-model="option.name" />
nicholas@2859 729 </div>
nicholas@2859 730 <div class="attribute">
nicholas@2859 731 <span>Displayed Text: </span>
nicholas@2859 732 <input type="text" ng-model="option.text" />
nicholas@2859 733 </div>
nicholas@2859 734 </div>
nicholas@2859 735 </div>
nicholas@2859 736 </div>
nicholas@2859 737 <div class="node">
nicholas@2859 738 <h4>Conditionals</h4>
nicholas@2859 739 <button type="button" class="btn btn-default" ng-click="addCondition()">Add Condition</button>
nicholas@2859 740 <div class="node" ng-repeat="condition in opt.conditions">
nicholas@2859 741 <div class="attributes">
nicholas@2859 742 <div class="attribute">
nicholas@2859 743 <button type="button" class="btn btn-danger" ng-click="removeCondition(condition)">Remove</button>
nicholas@2859 744 </div>
nicholas@2859 745 <div class="attribute">
nicholas@2859 746 <span>Check Type:</span>
nicholas@2859 747 <select ng-model="condition.check">
nicholas@2859 748 <option value="equals">Equal To</option>
nicholas@2859 749 <option value="lessThan">Less Than</option>
nicholas@2859 750 <option value="greaterThan">Greater Than</option>
nicholas@2859 751 <option value="stringContains">String Contains</option>
nicholas@2859 752 </select>
nicholas@2859 753 </div>
nicholas@2859 754 <div class="attribute">
nicholas@2859 755 <span>Value: </span>
nicholas@2859 756 <input type="text" ng-model="condition.value" />
nicholas@2859 757 </div>
nicholas@2859 758 <div class="attribute">
nicholas@2859 759 <span>Jump To On Pass: </span>
nicholas@2859 760 <select ng-model="condition.jumpToOnPass">
nicholas@2859 761 <option value="">None</option>
nicholas@2859 762 <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
nicholas@2859 763 </select>
nicholas@2859 764 </div>
nicholas@2859 765 <div class="attribute">
nicholas@2859 766 <span>Jump To On Fail: </span>
nicholas@2859 767 <select ng-model="condition.jumpToOnFail">
nicholas@2859 768 <option value="">None</option>
nicholas@2859 769 <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
nicholas@2859 770 </select>
nicholas@2859 771 </div>
nicholas@2859 772 </div>
nicholas@2859 773 </div>
nicholas@2859 774 </div>
nicholas@2859 775 </div>
nicholas@2859 776 </div>
nicholas@2859 777 <button type="button" class="btn btn-success" ng-show="specification.interface == 'APE' || page.interfaces.length == 0" ng-click="addInterface()">Add Interface/Axis</button>
nicholas@2859 778 <div class="node" ng-repeat="interface in page.interfaces" ng-controller="interfaceNode">
nicholas@2859 779 <h2>Interface</h2>
nicholas@2859 780 <button type="button" class="btn btn-danger" ng-click="removeInterface(interface)">Remove Interface/Axis</button>
nicholas@2859 781 <div class="node interfaceOptions">
nicholas@2859 782 <div class="attributes">
nicholas@2859 783 <div class="attribute" name="fragmentPlayed" type="check">
nicholas@2859 784 <span>Check all fragments played: </span>
nicholas@2859 785 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 786 </div>
nicholas@2859 787 <div class="attribute" name="fragmentFullPlayback" type="check">
nicholas@2859 788 <span>Check all fragments fully played: </span>
nicholas@2859 789 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 790 </div>
nicholas@2859 791 <div class="attribute" name="fragmentMoved" type="check">
nicholas@2859 792 <span>Check all fragments have been moved: </span>
nicholas@2859 793 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 794 </div>
nicholas@2859 795 <div class="attribute" name="fragmentComments" type="check">
nicholas@2859 796 <span>Check all fragments have comments: </span>
nicholas@2859 797 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 798 </div>
nicholas@2859 799 <div class="attribute" name="scalerange" type="check">
nicholas@2859 800 <span>Enforce a scale usage: </span>
nicholas@2859 801 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 802 <span>Minimum:</span>
nicholas@2859 803 <input type="number" min="0" max="100" name="min" />
nicholas@2859 804 <span>Maximum:</span>
nicholas@2859 805 <input type="number" min="0" max="100" name="max" />
nicholas@2859 806 </div>
nicholas@2859 807 <div class="attribute" name="volume" type="show">
nicholas@2859 808 <span>Show master volume control: </span>
nicholas@2859 809 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 810 </div>
nicholas@2859 811 <div class="attribute" name="playhead" type="show">
nicholas@2859 812 <span>Show playhead: </span>
nicholas@2859 813 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 814 </div>
nicholas@2859 815 <div class="attribute" name="page-count" type="show">
nicholas@2859 816 <span>Show Page Count: </span>
nicholas@2859 817 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 818 </div>
nicholas@2859 819 <div class="attribute" name="comments" type="show">
nicholas@2859 820 <span>Show Fragment Comments: </span>
nicholas@2859 821 <input type="checkbox" ng-click="enableInterfaceOption($event)" />
nicholas@2859 822 </div>
nicholas@2859 823 </div>
nicholas@2859 824 </div>
nicholas@2859 825 <div class="node">
nicholas@2859 826 <h3>Axis Title</h3>
nicholas@2859 827 <textarea ng-model="interface.title"></textarea>
nicholas@2859 828 <div class="attributes">
nicholas@2859 829 <div class="attribute">
nicholas@2859 830 <span>Axis name (in saves): </span>
nicholas@2859 831 <input type="text" ng-model="interface.name" />
nicholas@2859 832 </div>
nicholas@2859 833 </div>
nicholas@2859 834 </div>
nicholas@2859 835 <div class="node">
nicholas@2859 836 <h3>Axis Image</h3>
nicholas@2859 837 <textarea ng-model="interface.image"></textarea>
nicholas@2859 838 </div>
nicholas@2859 839 <div class="node">
nicholas@2859 840 <h3>Axis Scales</h3>
nicholas@2859 841 <button type="button" class="btn btn-default" ng-click="addScale();">Add</button>
nicholas@2859 842 <div class="node" ng-repeat="scale in interface.scales">
nicholas@2859 843 <div class="attributes">
nicholas@2859 844 <div class="attribute">
nicholas@2859 845 <button type="button" class="btn btn-danger" ng-click="removeScale(scale);">Remove</button>
nicholas@2859 846 </div>
nicholas@2859 847 <div class="attribute">
nicholas@2859 848 <span>Position: </span>
nicholas@2859 849 <input type="number" min="0" max="100" ng-model="scale.position" />
nicholas@2859 850 </div>
nicholas@2859 851 <div class="attribute">
nicholas@2859 852 <span>Text: </span>
nicholas@2859 853 <input type="text" ng-model="scale.text" />
nicholas@2859 854 </div>
nicholas@2859 855 </div>
nicholas@2859 856 </div>
nicholas@2859 857 </div>
nicholas@2859 858 </div>
nicholas@2859 859 <div class="node">
nicholas@2859 860 <h3>Comment Questions</h3>
nicholas@2859 861 <button type="button" class="btn btn-success" ng-click="addCommentQuestion()">Add Comment Question</button>
nicholas@2859 862 <div class="node" ng-repeat="cq in page.commentQuestions">
nicholas@2859 863 <button type="button" class="btn btn-danger" ng-click="removeCommentQuestion(cq)">Remove Comment Question</button>
nicholas@2859 864 <div class="attributes">
nicholas@2859 865 <div class="attribute">
nicholas@2859 866 <span>Unique ID:</span>
nicholas@2859 867 <input type="text" ng-model="cq.id" />
nicholas@2859 868 </div>
nicholas@2859 869 <div class="attribute">
nicholas@2859 870 <span>Common Name:</span>
nicholas@2859 871 <input type="text" ng-model="cq.name" />
nicholas@2859 872 </div>
nicholas@2859 873 <div class="attribute" ng-show="cq.type == 'slider'">
nicholas@2859 874 <span>Minimum:</span>
nicholas@2859 875 <input type="number" ng-model="cq.min" />
nicholas@2859 876 </div>
nicholas@2859 877 <div class="attribute" ng-show="cq.type == 'slider'">
nicholas@2859 878 <span>Maximum:</span>
nicholas@2859 879 <input type="number" ng-model="cq.max" />
nicholas@2859 880 </div>
nicholas@2859 881 <div class="attribute" ng-show="cq.type == 'slider'">
nicholas@2859 882 <span>Step size:</span>
nicholas@2859 883 <input type="number" ng-model="cq.step" />
nicholas@2859 884 </div>
nicholas@2859 885 <div class="attribute" ng-show="cq.type == 'slider'">
nicholas@2859 886 <span>Initial Value:</span>
nicholas@2859 887 <input type="number" ng-model="cq.value" />
nicholas@2859 888 </div>
nicholas@2859 889 </div>
nicholas@2859 890 <div class="node">
nicholas@2859 891 <h4>Question:</h4>
nicholas@2859 892 <textarea ng-model="cq.statement"></textarea>
nicholas@2859 893 </div>
nicholas@2859 894 <div class="node" ng-show="['radio', 'checkbox'].indexOf(cq.type) >= 0">
nicholas@2859 895 <h4>Options</h4>
nicholas@2859 896 <div class="node" ng-repeat="option in cq.options">
nicholas@2859 897 <div class="attributes">
nicholas@2859 898 <div class="attribute">
nicholas@2859 899 <button type="button" class="btn btn-danger" ng-click="removeCommentQuestionOption(cq,option)">Remove</button>
nicholas@2859 900 </div>
nicholas@2859 901 <div class="attribute">
nicholas@2859 902 <span>Name: </span>
nicholas@2859 903 <input type="text" ng-model="option.name" />
nicholas@2859 904 </div>
nicholas@2859 905 <div class="attribute">
nicholas@2859 906 <span>Display Text: </span>
nicholas@2859 907 <input type="text" ng-model="option.text" />
nicholas@2859 908 </div>
nicholas@2859 909 </div>
nicholas@2859 910 </div>
nicholas@2859 911 </div>
nicholas@2859 912 </div>
nicholas@2859 913 </div>
nicholas@2859 914 <button type="button" class="btn btn-success" ng-click="addAudioElement()">Add Fragment</button>
nicholas@2859 915 <div class="node" ng-repeat="fragment in page.audioElements">
nicholas@2859 916 <h3>Audio Fragment</h3>
nicholas@2859 917 <button type="button" class="btn btn-danger" ng-click="removeAudioElement(fragment)">Remove Fragment</button>
nicholas@2859 918 <div class="attributes">
nicholas@2859 919 <div class="attribute">
nicholas@2859 920 <span>Unique ID: </span>
nicholas@2859 921 <input type="text" ng-model="fragment.id" />
nicholas@2859 922 </div>
nicholas@2859 923 <div class="attribute">
nicholas@2859 924 <span>URL: </span>
nicholas@2859 925 <input type="text" ng-model="fragment.url" />
nicholas@2859 926 <span>Full URL: </span><span style="font-weight=600">{{page.hostURL}}{{fragment.url}}</span>
nicholas@2859 927 </div>
nicholas@2859 928 <div class="attribute">
nicholas@2859 929 <span>Fragment Gain (dB): </span>
nicholas@2859 930 <input type="number" ng-model="fragment.gain" />
nicholas@2859 931 </div>
nicholas@2859 932 <div class="attribute">
nicholas@2859 933 <span>Fragment Label: </span>
nicholas@2859 934 <input type="text" ng-model="fragment.label" />
nicholas@2859 935 </div>
nicholas@2859 936 <div class="attribute">
nicholas@2859 937 <span>Fragment Common name: </span>
nicholas@2859 938 <input type="text" ng-model="fragment.name" />
nicholas@2859 939 </div>
nicholas@2859 940 <div class="attribute">
nicholas@2859 941 <span>Fragment Type: </span>
nicholas@2859 942 <select ng-model="fragment.type">
nicholas@2859 943 <option value="normal">Normal</option>
nicholas@2859 944 <option value="anchor">Hidden Anchor</option>
nicholas@2859 945 <option value="reference">Hidden Reference</option>
nicholas@2859 946 <option value="outside-reference">Outside Reference</option>
nicholas@2859 947 </select>
nicholas@2859 948 </div>
nicholas@2859 949 <div class="attribute" ng-show="fragment.type == 'anchor'">
nicholas@2859 950 <span>Anchor must be below: </span>
nicholas@2859 951 <input type="number" ng-model="fragment.marker" min="0" max="100" />
nicholas@2859 952 </div>
nicholas@2859 953 <div class="attribute" ng-show="fragment.type == 'reference'">
nicholas@2859 954 <span>Reference must be above: </span>
nicholas@2859 955 <input type="number" ng-model="fragment.marker" min="0" max="100" />
nicholas@2859 956 </div>
nicholas@2859 957 <div class="attribute">
nicholas@2859 958 <span>Loudness: </span>
nicholas@2859 959 <input type="number" ng-model="fragment.loudness" max="0" />
nicholas@2859 960 </div>
nicholas@2859 961 <div class="attribute" ng-show="page.poolSize > 0">
nicholas@2859 962 <span>Always include fragment: </span>
nicholas@2859 963 <input type="checkbox" ng-model="fragment.alwaysInclude" max="0" />
nicholas@2859 964 </div>
nicholas@2859 965 <div class="attribute">
nicholas@2859 966 <span>Fragment Pre-Silence: </span>
nicholas@2859 967 <input type="number" ng-model="fragment.preSilence" max="0" step="0.1" />
nicholas@2859 968 </div>
nicholas@2859 969 <div class="attribute">
nicholas@2859 970 <span>Fragment Post-Silence: </span>
nicholas@2859 971 <input type="number" ng-model="fragment.postSilence" max="0" step="0.1" />
nicholas@2859 972 </div>
nicholas@2859 973 <div class="attribute">
nicholas@2859 974 <span>Fragment playback start position (s): </span>
nicholas@2859 975 <input type="number" ng-model="fragment.startTime" min="0" max="{{fragment.stopTime}}" />
nicholas@2859 976 </div>
nicholas@2859 977 <div class="attribute">
nicholas@2859 978 <span>Fragment playback stop position (s): </span>
nicholas@2859 979 <input type="number" ng-model="fragment.stopTime" min="{{fragment.startTime}}" />
nicholas@2859 980 </div>
nicholas@2859 981 <div class="attribute">
nicholas@2859 982 <span>Fragment sampling rate: </span>
nicholas@2859 983 <input type="number" ng-model="fragment.sampleRate" min="1" />
nicholas@2859 984 </div>
nicholas@2859 985 <div class="attribute">
nicholas@2859 986 <span>Fragment Image (URL): </span>
nicholas@2859 987 <input type="text" ng-model="fragment.image" />
nicholas@2859 988 </div>
nicholas@2859 989 </div>
nicholas@2859 990 </div>
nicholas@2859 991 </div>
nicholas@2859 992 <div id="popupHolder" ng-show="popupVisible">
nicholas@2859 993 <div ng-controller="introduction" class="popup" ng-show="popupVisible">
nicholas@2859 994 <div class="popupTitle" ng-switch="state">
nicholas@2859 995 <span ng-switch-when="0">Test Creator</span>
nicholas@2859 996 <span ng-switch-when="1">Create New Test</span>
nicholas@2859 997 </div>
nicholas@2859 998 <div class="popupContent container-fluid" ng-switch="state">
nicholas@2859 999 <div ng-switch-when="0">
nicholas@2859 1000 <div>
nicholas@2859 1001 <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>
nicholas@2859 1002 </div>
nicholas@2861 1003 <div>
nicholas@2861 1004 <input type="file" id="files" ng-model="files" onchange="handleFiles(event)" />
nicholas@2861 1005 </div>
nicholas@2859 1006 </div>
nicholas@2859 1007 <div ng-switch-when="1">
nicholas@2859 1008 <div>
nicholas@2859 1009 <span>Please select the interface you would like to use below. Selecting an interface will give a brief description of the interface type.</span>
nicholas@2859 1010 </div>
nicholas@2859 1011 <div class="row">
nicholas@2859 1012 <div class="col-md-6" style="overflow-y: scroll;height: 333px;">
nicholas@2859 1013 <div class="new-test" ng-repeat="i in interfaces" ng-mouseover="mouseover(i.name)" ng-click="initialise(i.name)">
nicholas@2859 1014 <label style="cursor:pointer">
nicholas@2859 1015 <input type="radio" name="new-test" value="{{i.name}}" id="i.name" style="cursor:pointer" /> {{i.name}}
nicholas@2859 1016 </label>
nicholas@2859 1017 </div>
nicholas@2859 1018 </div>
nicholas@2859 1019 <div class="col-md-6">
nicholas@2859 1020 <span>{{description}}</span>
nicholas@2859 1021 </div>
nicholas@2859 1022 </div>
nicholas@2859 1023 </div>
nicholas@2859 1024 </div>
nicholas@2859 1025 <div class="popupButtons">
nicholas@2859 1026 <button id="popupBack" type="button" class="btn btn-default" ng-show="state>0" ng-click="back()">Back</button>
nicholas@2859 1027 <button id="popupNext" type="button" class="btn btn-default" ng-click="next()">Next</button>
nicholas@2859 1028 </div>
nicholas@2859 1029 </div>
nicholas@2859 1030 </div>
nicholas@2859 1031 <div id="screenblank" ng-show="popupVisible"></div>
nicholas@2859 1032 </div>
nicholas@2859 1033 </body>
nicholas@2859 1034
nicholas@2859 1035 </html>