annotate test_create.html @ 2877:5164a6f53a02

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