view test_create.html @ 2875:18261c4593c4

Open exported XML in new tab, not same tab
author Nicholas Jillings <nicholas.jillings@mail.bcu.ac.uk>
date Wed, 31 May 2017 11:43:48 +0100
parents dafc6eba55fc
children 88dff8b9247c
line wrap: on
line source
<html>

<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <!-- This defines the test creator tool for the Web Audio Evaluation Toolbox -->
    <link rel="stylesheet" type="text/css" href="test_create/style.css" />
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <script src="js/jquery-2.1.4.js"></script>
    <script src="js/angular.min.js"></script>
    <script type="text/javascript" src="js/specification.js"></script>
    <script type="text/javascript" src="test_create/test_core.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>

    <title>WAET 1.2.1 Test Creator</title>
</head>

<body>
    <div ng-app="creator" ng-controller="view">
        <div id="pageRoot">
            <h1>Web Audio Evaluation Tool - Test Creator</h1>
        </div>
        <button type="button" class="btn btn-success" ng-click="exportXML()">Export XML</button>
        <div id="setupNode" class="node" ng-controller="setup">
            <h2>Setup</h2>
            <div class="attributes">
                <div class="attribute">
                    <span>Interface: </span>
                    <input type="text" ng-model="specification.interface" />
                </div>
                <div class="attribute">
                    <span>Save URL: </span>
                    <input type="text" ng-model="specification.projectReturn" />
                </div>
                <div class="attribute">
                    <span>Exit URL: </span>
                    <input type="text" ng-model="specification.returnURL" />
                </div>
                <div class="attribute">
                    <span>Randomise Page Order: </span>
                    <input type="checkbox" ng-model="specification.randomiseOrder" />
                </div>
                <div class="attribute">
                    <span>Page Pool Size: </span>
                    <input type="number" ng-model="specification.poolSize" min="0" />
                </div>
                <div class="attribute">
                    <span>Loudness Normalisation (LUFS): </span>
                    <input type="number" ng-model="specification.loudness" max="0" />
                </div>
                <div class="attribute">
                    <span>Fixed Sampling Rate: </span>
                    <input type="number" ng-model="specification.sampleRate" min="0" />
                </div>
                <div class="attribute">
                    <span>Pre-Test audio calibration: </span>
                    <input type="checkbox" ng-model="specification.calibration" />
                </div>
                <div class="attribute">
                    <span>Global Cross-fade time: </span>
                    <input type="number" ng-model="specification.crossFade" min="0" step="0.1" />
                </div>
                <div class="attribute">
                    <span>Global Fragment Pre-Silence: </span>
                    <input type="number" ng-model="specification.preSilence" min="0" step="0.1" />
                </div>
                <div class="attribute">
                    <span>Global Fragment Post-Silence: </span>
                    <input type="number" ng-model="specification.preSilence" min="0" step="0.1" />
                </div>
                <div class="attribute">
                    <span>Play audio one-at-a-time: </span>
                    <input type="checkbox" ng-model="specification.playOne" />
                </div>
                <div class="attribute">
                    <span>Minimum number of fragment plays</span>
                    <input type="number" ng-model="specification.minNumberPlays" min="0" max="{{specification.maxNumberPlays}}" />
                </div>
                <div class="attribute">
                    <span>Maximum number of fragment plays</span>
                    <input type="number" ng-model="specification.maxNumberPlays" min="{{specification.minNumberPlays || 0}}" />
                </div>
            </div>
            <div class="node">
                <h2>Test Completed Message</h2>
                <textarea ng-model="specification.exitText"></textarea>
            </div>
            <div id="metricsNode" class="node">
                <h3>Session Metrics</h3>
                <div class="attributes">
                    <div class="attribute">
                        <span>Collect Total Test Time: </span>
                        <input type="checkbox" value="testTimer" ng-click="enableMetric($event)" />
                    </div>
                    <div class="attribute">
                        <span>Collect Fragment Listen Time: </span>
                        <input type="checkbox" value="elementTimer" ng-click="enableMetric($event)" />
                    </div>
                    <div class="attribute">
                        <span>Collect Fragment Initial Position: </span>
                        <input type="checkbox" value="elementInitialPosition" ng-click="enableMetric($event)" />
                    </div>
                    <div class="attribute">
                        <span>Collect Fragment Position over Time: </span>
                        <input type="checkbox" value="elementTracker" ng-click="enableMetric($event)" />
                    </div>
                    <div class="attribute">
                        <span>Collect Fragment Listened To Flag: </span>
                        <input type="checkbox" value="elementFlagListenedTo" ng-click="enableMetric($event)" />
                    </div>
                    <div class="attribute">
                        <span>Collect Fragment Moved Flag: </span>
                        <input type="checkbox" value="elementFlagMoved" ng-click="enableMetric($event)" />
                    </div>
                    <div class="attribute">
                        <span>Collect Fragment Listened Flag: </span>
                        <input type="checkbox" value="elementListenTracker" ng-click="enableMetric($event)" />
                    </div>
                </div>
            </div>
            <div id="globalpresurvey" class="node" ng-controller="survey" ng-init="survey = specification.preTest">
                <h2>Pre Test Survey</h2>
                <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button>
                <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption">
                    <h3>Survey Entry</h3>
                    <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button>
                    <div class="attributes">
                        <div class="attribute">
                            <span>Survey Type: </span>
                            <select ng-model="opt.type">
                                <option value="question">Question</option>
                                <option value="radio">Radio</option>
                                <option value="checkbox">Checkbox</option>
                                <option value="statement">Statement</option>
                                <option value="number">Number</option>
                                <option value="slider">Slider</option>
                                <option value="video">Video</option>
                                <option value="youtube">YouTube</option>
                            </select>
                        </div>
                        <div class="attribute">
                            <span>Unique Survey Entry ID:</span>
                            <input type="text" ng-model="opt.id" />
                        </div>
                        <div class="attribute">
                            <span>Entry Name:</span>
                            <input type="text" ng-model="opt.name" />
                        </div>
                        <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0">
                            <span>Mandatory:</span>
                            <input type="checkbox" ng-model="opt.mandatory" />
                        </div>
                        <div class="attribute">
                            <span>Minimum Wait Time (s):</span>
                            <input type="number" ng-model="opt.minWait" min="0" />
                        </div>
                        <div class="attribute" ng-show="opt.type == 'question'">
                            <span>Box Size:</span>
                            <select ng-model="opt.boxsize">
                                <option value="small">Small</option>
                                <option value="normal">Normal</option>
                                <option value="large">Large</option>
                                <option value="huge">Huge</option>
                            </select>
                        </div>
                        <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
                            <span>Minimum Selected:</span>
                            <input type="number" ng-model="opt.min" min="0" />
                        </div>
                        <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
                            <span>Maximum Selected:</span>
                            <input type="number" ng-model="opt.max" max="{{opt.options.length}}" />
                        </div>
                        <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
                            <span>Minimum Value:</span>
                            <input type="number" ng-model="opt.min" />
                        </div>
                        <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
                            <span>Maximum Value:</span>
                            <input type="number" ng-model="opt.max" />
                        </div>
                        <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0">
                            <span>Video URL:</span>
                            <input type="text" ng-model="opt.url" />
                        </div>
                    </div>
                    <div class="node">
                        <h4>Statement</h4>
                        <textarea ng-model="opt.statement"></textarea>
                    </div>
                    <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
                        <h4>Options</h4>
                        <div>
                            <button type="button" class="btn btn-default" ng-click="addOption();">Add Option</button>
                        </div>
                        <div class="node" ng-repeat="option in opt.options">
                            <div class="attributes">
                                <div class="attribute">
                                    <button type="button" class="btn btn-default" ng-click="removeOption(option);">Remove</button>
                                </div>
                                <div class="attribute">
                                    <span>Name: </span>
                                    <input type="text" ng-model="option.name" />
                                </div>
                                <div class="attribute">
                                    <span>Displayed Text: </span>
                                    <input type="text" ng-model="option.text" />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="node">
                        <h4>Conditionals</h4>
                        <button type="button" class="btn btn-default" ng-click="addCondition()">Add Condition</button>
                        <div class="node" ng-repeat="condition in opt.conditions">
                            <div class="attributes">
                                <div class="attribute">
                                    <button type="button" class="btn btn-danger" ng-click="removeCondition(condition)">Remove</button>
                                </div>
                                <div class="attribute">
                                    <span>Check Type:</span>
                                    <select ng-model="condition.check">
                                        <option value="equals">Equal To</option>
                                        <option value="lessThan">Less Than</option>
                                        <option value="greaterThan">Greater Than</option>
                                        <option value="stringContains">String Contains</option>
                                    </select>
                                </div>
                                <div class="attribute">
                                    <span>Value: </span>
                                    <input type="text" ng-model="condition.value" />
                                </div>
                                <div class="attribute">
                                    <span>Jump To On Pass: </span>
                                    <select ng-model="condition.jumpToOnPass">
                                        <option value="">None</option>
                                        <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
                                    </select>
                                </div>
                                <div class="attribute">
                                    <span>Jump To On Fail: </span>
                                    <select ng-model="condition.jumpToOnFail">
                                        <option value="">None</option>
                                        <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
                                    </select>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div id="globalpostsurvey" class="node" ng-controller="survey" ng-init="survey = specification.postTest">
                <h2>Post Test Survey</h2>
                <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button>
                <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption">
                    <h3>Survey Entry</h3>
                    <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button>
                    <div class="attributes">
                        <div class="attribute">
                            <span>Survey Type: </span>
                            <select ng-model="opt.type">
                                <option value="question">Question</option>
                                <option value="radio">Radio</option>
                                <option value="checkbox">Checkbox</option>
                                <option value="statement">Statement</option>
                                <option value="number">Number</option>
                                <option value="slider">Slider</option>
                                <option value="video">Video</option>
                                <option value="youtube">YouTube</option>
                            </select>
                        </div>
                        <div class="attribute">
                            <span>Unique Survey Entry ID:</span>
                            <input type="text" ng-model="opt.id" />
                        </div>
                        <div class="attribute">
                            <span>Entry Name:</span>
                            <input type="text" ng-model="opt.name" />
                        </div>
                        <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0">
                            <span>Mandatory:</span>
                            <input type="checkbox" ng-model="opt.mandatory" />
                        </div>
                        <div class="attribute">
                            <span>Minimum Wait Time (s):</span>
                            <input type="number" ng-model="opt.minWait" min="0" />
                        </div>
                        <div class="attribute" ng-show="opt.type == 'question'">
                            <span>Box Size:</span>
                            <select ng-model="opt.boxsize">
                                <option value="small">Small</option>
                                <option value="normal">Normal</option>
                                <option value="large">Large</option>
                                <option value="huge">Huge</option>
                            </select>
                        </div>
                        <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
                            <span>Minimum Selected:</span>
                            <input type="number" ng-model="opt.min" min="0" />
                        </div>
                        <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
                            <span>Maximum Selected:</span>
                            <input type="number" ng-model="opt.max" max="{{opt.options.length}}" />
                        </div>
                        <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
                            <span>Minimum Value:</span>
                            <input type="number" ng-model="opt.min" />
                        </div>
                        <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
                            <span>Maximum Value:</span>
                            <input type="number" ng-model="opt.max" />
                        </div>
                        <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0">
                            <span>Video URL:</span>
                            <input type="text" ng-model="opt.url" />
                        </div>
                    </div>
                    <div class="node">
                        <h4>Statement</h4>
                        <textarea ng-model="opt.statement"></textarea>
                    </div>
                    <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
                        <h4>Options</h4>
                        <div>
                            <button type="button" class="btn btn-default" ng-click="addOption();">Add Option</button>
                        </div>
                        <div class="node" ng-repeat="option in opt.options">
                            <div class="attributes">
                                <div class="attribute">
                                    <button type="button" class="btn btn-default" ng-click="removeOption(option);">Remove</button>
                                </div>
                                <div class="attribute">
                                    <span>Name: </span>
                                    <input type="text" ng-model="option.name" />
                                </div>
                                <div class="attribute">
                                    <span>Displayed Text: </span>
                                    <input type="text" ng-model="option.text" />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="node">
                        <h4>Conditionals</h4>
                        <button type="button" class="btn btn-default" ng-click="addCondition()">Add Condition</button>
                        <div class="node" ng-repeat="condition in opt.conditions">
                            <div class="attributes">
                                <div class="attribute">
                                    <button type="button" class="btn btn-danger" ng-click="removeCondition(condition)">Remove</button>
                                </div>
                                <div class="attribute">
                                    <span>Check Type:</span>
                                    <select ng-model="condition.check">
                                        <option value="equals">Equal To</option>
                                        <option value="lessThan">Less Than</option>
                                        <option value="greaterThan">Greater Than</option>
                                        <option value="stringContains">String Contains</option>
                                    </select>
                                </div>
                                <div class="attribute">
                                    <span>Value: </span>
                                    <input type="text" ng-model="condition.value" />
                                </div>
                                <div class="attribute">
                                    <span>Jump To On Pass: </span>
                                    <select ng-model="condition.jumpToOnPass">
                                        <option value="">None</option>
                                        <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
                                    </select>
                                </div>
                                <div class="attribute">
                                    <span>Jump To On Fail: </span>
                                    <select ng-model="condition.jumpToOnFail">
                                        <option value="">None</option>
                                        <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
                                    </select>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div id="globalinterface" class="node" ng-controller="interfaceNode" ng-init="interface = specification.interfaces">
                <h2>Interface (Globals)</h2>
                <div class="node interfaceOptions">
                    <div class="attributes">
                        <div class="attribute" name="fragmentPlayed" type="check">
                            <span>Check all fragments played: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="fragmentFullPlayback" type="check">
                            <span>Check all fragments fully played: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="fragmentMoved" type="check">
                            <span>Check all fragments have been moved: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="fragmentComments" type="check">
                            <span>Check all fragments have comments: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="scalerange" type="check">
                            <span>Enforce a scale usage: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                            <span>Minimum:</span>
                            <input type="number" min="0" max="100" name="min" />
                            <span>Maximum:</span>
                            <input type="number" min="0" max="100" name="max" />
                        </div>
                        <div class="attribute" name="volume" type="show">
                            <span>Show master volume control: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="playhead" type="show">
                            <span>Show playhead: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="page-count" type="show">
                            <span>Show Page Count: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="comments" type="show">
                            <span>Show Fragment Comments: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <div style="text-align: center;">
            <button type="button" class="btn btn-success" ng-click="addPage()">Add Page</button>
        </div>
        <div class="node pageNode" ng-controller="page" ng-repeat="page in specification.pages">
            <h2>Page</h2>
            <button type="button" class="btn btn-danger" ng-click="removePage(page)">Remove Page</button>
            <div class="attributes">
                <div class="attribute">
                    <span>Unique ID: </span>
                    <input type="text" ng-model="page.id" />
                </div>
                <div class="attribute">
                    <span>Fragment common-root URL: </span>
                    <input type="text" ng-model="page.hostURL" />
                </div>
                <div class="attribute">
                    <span>Randomise Fragment Order: </span>
                    <input type="checkbox" ng-model="page.randomiseOrder" />
                </div>
                <div class="attribute">
                    <span>Repeat Page N-times: </span>
                    <input type="number" ng-model="page.repeatCount" />
                </div>
                <div class="attribute">
                    <span>Loop audio: </span>
                    <input type="checkbox" ng-model="page.loop" />
                </div>
                <div class="attribute">
                    <span>Synchronous audio playback: </span>
                    <input type="checkbox" ng-model="page.synchronous" />
                </div>
                <div class="attribute">
                    <span>Loudness (page): </span>
                    <input type="number" ng-model="page.loudness" max="0" />
                </div>
                <div class="attribute">
                    <span>Label type: </span>
                    <select ng-model="page.label">
                        <option value="default">Default</option>
                        <option value="none">None</option>
                        <option value="number">[1, 2, 3...]</option>
                        <option value="letter">[a, b, c...]</option>
                        <option value="capital">[A, B, C...]</option>
                        <option value="samediff" ng-show="specification.interface == 'AB'">[Same, Different]</option>
                    </select>
                </div>
                <div class="attribute" ng-show="page.label != 'default' && page.label != 'none'">
                    <span>Label Start: </span>
                    <input type="text" ng-model="page.labelStart" />
                </div>
                <div class="attribute">
                    <span>Fragment pool size: </span>
                    <input type="number" ng-model="page.poolSize" min="0" max="page.audioElements.length" />
                </div>
                <div class="attribute" ng-show="specification.poolSize > 0">
                    <span>Always include page: </span>
                    <input type="checkbox" ng-model="page.alwaysInclude" />
                </div>
                <div class="attribute">
                    <span>Fixed Page Position: </span>
                    <input type="number" ng-model="page.position" max="{{specification.pages.length}}" />
                </div>
                <div class="attribute">
                    <span>Fixed Page Position: </span>
                    <input type="number" ng-model="page.position" min="0" max="{{specification.pages.length}}" />
                </div>
                <div class="attribute">
                    <span>Fragment pre-silence: </span>
                    <input type="number" ng-model="page.preSilence" min="0" step="0.1" />
                </div>
                <div class="attribute">
                    <span>Fragment post-silence: </span>
                    <input type="number" ng-model="page.postSilence" min="0" step="0.1" />
                </div>
                <div class="attribute">
                    <span>Cannot interupt audio: </span>
                    <input type="checkbox" ng-model="page.playOne" />
                </div>
                <div class="attribute">
                    <span>Only move playing audio: </span>
                    <input type="checkbox" ng-model="page.restrictMovement" />
                </div>
                <div class="attribute">
                    <span>Minimum number of fragment plays</span>
                    <input type="number" ng-model="page.minNumberPlays" min="0" max="{{page.maxNumberPlays || specification.maxNumberPlays}}" />
                </div>
                <div class="attribute">
                    <span>Maximum number of fragment plays</span>
                    <input type="number" ng-model="page.maxNumberPlays" min="{{page.minNumberPlays || specification.minNumberPlays || 0}}" />
                </div>
            </div>
            <div class="node">
                <h3>Page Title</h3>
                <textarea ng-model="page.title"></textarea>
            </div>
            <div class="node">
                <h3>Comment box text prefix</h3>
                <textarea ng-model="page.commentboxprefix"></textarea>
                <p>Example:
                    <span style="font-weight:600">{{page.commentboxprefix}} A</span>
                </p>
            </div>
            <div class="node" ng-controller="survey" ng-init="survey = page.preTest">
                <h2>Pre Page Survey</h2>
                <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button>
                <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption">
                    <h3>Survey Entry</h3>
                    <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button>
                    <div class="attributes">
                        <div class="attribute">
                            <span>Survey Type: </span>
                            <select ng-model="opt.type">
                                <option value="question">Question</option>
                                <option value="radio">Radio</option>
                                <option value="checkbox">Checkbox</option>
                                <option value="statement">Statement</option>
                                <option value="number">Number</option>
                                <option value="slider">Slider</option>
                                <option value="video">Video</option>
                                <option value="youtube">YouTube</option>
                            </select>
                        </div>
                        <div class="attribute">
                            <span>Unique Survey Entry ID:</span>
                            <input type="text" ng-model="opt.id" />
                        </div>
                        <div class="attribute">
                            <span>Entry Name:</span>
                            <input type="text" ng-model="opt.name" />
                        </div>
                        <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0">
                            <span>Mandatory:</span>
                            <input type="checkbox" ng-model="opt.mandatory" />
                        </div>
                        <div class="attribute">
                            <span>Minimum Wait Time (s):</span>
                            <input type="number" ng-model="opt.minWait" min="0" />
                        </div>
                        <div class="attribute" ng-show="opt.type == 'question'">
                            <span>Box Size:</span>
                            <select ng-model="opt.boxsize">
                                <option value="small">Small</option>
                                <option value="normal">Normal</option>
                                <option value="large">Large</option>
                                <option value="huge">Huge</option>
                            </select>
                        </div>
                        <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
                            <span>Minimum Selected:</span>
                            <input type="number" ng-model="opt.min" min="0" />
                        </div>
                        <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
                            <span>Maximum Selected:</span>
                            <input type="number" ng-model="opt.max" max="{{opt.options.length}}" />
                        </div>
                        <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
                            <span>Minimum Value:</span>
                            <input type="number" ng-model="opt.min" />
                        </div>
                        <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
                            <span>Maximum Value:</span>
                            <input type="number" ng-model="opt.max" />
                        </div>
                        <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0">
                            <span>Video URL:</span>
                            <input type="text" ng-model="opt.url" />
                        </div>
                    </div>
                    <div class="node">
                        <h4>Statement</h4>
                        <textarea ng-model="opt.statement"></textarea>
                    </div>
                    <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
                        <h4>Options</h4>
                        <div>
                            <button type="button" class="btn btn-default" ng-click="addOption();">Add Option</button>
                        </div>
                        <div class="node" ng-repeat="option in opt.options">
                            <div class="attributes">
                                <div class="attribute">
                                    <button type="button" class="btn btn-default" ng-click="removeOption(option);">Remove</button>
                                </div>
                                <div class="attribute">
                                    <span>Name: </span>
                                    <input type="text" ng-model="option.name" />
                                </div>
                                <div class="attribute">
                                    <span>Displayed Text: </span>
                                    <input type="text" ng-model="option.text" />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="node">
                        <h4>Conditionals</h4>
                        <button type="button" class="btn btn-default" ng-click="addCondition()">Add Condition</button>
                        <div class="node" ng-repeat="condition in opt.conditions">
                            <div class="attributes">
                                <div class="attribute">
                                    <button type="button" class="btn btn-danger" ng-click="removeCondition(condition)">Remove</button>
                                </div>
                                <div class="attribute">
                                    <span>Check Type:</span>
                                    <select ng-model="condition.check">
                                        <option value="equals">Equal To</option>
                                        <option value="lessThan">Less Than</option>
                                        <option value="greaterThan">Greater Than</option>
                                        <option value="stringContains">String Contains</option>
                                    </select>
                                </div>
                                <div class="attribute">
                                    <span>Value: </span>
                                    <input type="text" ng-model="condition.value" />
                                </div>
                                <div class="attribute">
                                    <span>Jump To On Pass: </span>
                                    <select ng-model="condition.jumpToOnPass">
                                        <option value="">None</option>
                                        <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
                                    </select>
                                </div>
                                <div class="attribute">
                                    <span>Jump To On Fail: </span>
                                    <select ng-model="condition.jumpToOnFail">
                                        <option value="">None</option>
                                        <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
                                    </select>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="node" ng-controller="survey" ng-init="survey = page.postTest">
                <h2>Post Page Survey</h2>
                <button type="button" class="btn btn-success" ng-click="addSurveyEntry()">Add Entry</button>
                <div class="node" ng-repeat="opt in survey.options" ng-controller="surveyOption">
                    <h3>Survey Entry</h3>
                    <button type="button" class="btn btn-danger" ng-click="removeSurveyEntry(opt);">Delete Entry</button>
                    <div class="attributes">
                        <div class="attribute">
                            <span>Survey Type: </span>
                            <select ng-model="opt.type">
                                <option value="question">Question</option>
                                <option value="radio">Radio</option>
                                <option value="checkbox">Checkbox</option>
                                <option value="statement">Statement</option>
                                <option value="number">Number</option>
                                <option value="slider">Slider</option>
                                <option value="video">Video</option>
                                <option value="youtube">YouTube</option>
                            </select>
                        </div>
                        <div class="attribute">
                            <span>Unique Survey Entry ID:</span>
                            <input type="text" ng-model="opt.id" />
                        </div>
                        <div class="attribute">
                            <span>Entry Name:</span>
                            <input type="text" ng-model="opt.name" />
                        </div>
                        <div class="attribute" ng-show="['question', 'checkbox', 'radio', 'number'].indexOf(opt.type) >= 0">
                            <span>Mandatory:</span>
                            <input type="checkbox" ng-model="opt.mandatory" />
                        </div>
                        <div class="attribute">
                            <span>Minimum Wait Time (s):</span>
                            <input type="number" ng-model="opt.minWait" min="0" />
                        </div>
                        <div class="attribute" ng-show="opt.type == 'question'">
                            <span>Box Size:</span>
                            <select ng-model="opt.boxsize">
                                <option value="small">Small</option>
                                <option value="normal">Normal</option>
                                <option value="large">Large</option>
                                <option value="huge">Huge</option>
                            </select>
                        </div>
                        <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
                            <span>Minimum Selected:</span>
                            <input type="number" ng-model="opt.min" min="0" />
                        </div>
                        <div class="attribute" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
                            <span>Maximum Selected:</span>
                            <input type="number" ng-model="opt.max" max="{{opt.options.length}}" />
                        </div>
                        <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
                            <span>Minimum Value:</span>
                            <input type="number" ng-model="opt.min" />
                        </div>
                        <div class="attribute" ng-show="['slider', 'number'].indexOf(opt.type) >= 0">
                            <span>Maximum Value:</span>
                            <input type="number" ng-model="opt.max" />
                        </div>
                        <div class="attribute" ng-show="['video', 'youtube'].indexOf(opt.type) >= 0">
                            <span>Video URL:</span>
                            <input type="text" ng-model="opt.url" />
                        </div>
                    </div>
                    <div class="node">
                        <h4>Statement</h4>
                        <textarea ng-model="opt.statement"></textarea>
                    </div>
                    <div class="node" ng-show="['checkbox', 'radio'].indexOf(opt.type) >= 0">
                        <h4>Options</h4>
                        <div>
                            <button type="button" class="btn btn-default" ng-click="addOption();">Add Option</button>
                        </div>
                        <div class="node" ng-repeat="option in opt.options">
                            <div class="attributes">
                                <div class="attribute">
                                    <button type="button" class="btn btn-default" ng-click="removeOption(option);">Remove</button>
                                </div>
                                <div class="attribute">
                                    <span>Name: </span>
                                    <input type="text" ng-model="option.name" />
                                </div>
                                <div class="attribute">
                                    <span>Displayed Text: </span>
                                    <input type="text" ng-model="option.text" />
                                </div>
                            </div>
                        </div>
                    </div>
                    <div class="node">
                        <h4>Conditionals</h4>
                        <button type="button" class="btn btn-default" ng-click="addCondition()">Add Condition</button>
                        <div class="node" ng-repeat="condition in opt.conditions">
                            <div class="attributes">
                                <div class="attribute">
                                    <button type="button" class="btn btn-danger" ng-click="removeCondition(condition)">Remove</button>
                                </div>
                                <div class="attribute">
                                    <span>Check Type:</span>
                                    <select ng-model="condition.check">
                                        <option value="equals">Equal To</option>
                                        <option value="lessThan">Less Than</option>
                                        <option value="greaterThan">Greater Than</option>
                                        <option value="stringContains">String Contains</option>
                                    </select>
                                </div>
                                <div class="attribute">
                                    <span>Value: </span>
                                    <input type="text" ng-model="condition.value" />
                                </div>
                                <div class="attribute">
                                    <span>Jump To On Pass: </span>
                                    <select ng-model="condition.jumpToOnPass">
                                        <option value="">None</option>
                                        <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
                                    </select>
                                </div>
                                <div class="attribute">
                                    <span>Jump To On Fail: </span>
                                    <select ng-model="condition.jumpToOnFail">
                                        <option value="">None</option>
                                        <option ng-repeat="entry in survey.options" value="{{entry.id}}">{{entry.id}}</option>
                                    </select>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <button type="button" class="btn btn-success" ng-show="specification.interface == 'APE' || page.interfaces.length == 0" ng-click="addInterface()">Add Interface/Axis</button>
            <div class="node" ng-repeat="interface in page.interfaces" ng-controller="interfaceNode">
                <h2>Interface</h2>
                <button type="button" class="btn btn-danger" ng-click="removeInterface(interface)">Remove Interface/Axis</button>
                <div class="node interfaceOptions">
                    <div class="attributes">
                        <div class="attribute" name="fragmentPlayed" type="check">
                            <span>Check all fragments played: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="fragmentFullPlayback" type="check">
                            <span>Check all fragments fully played: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="fragmentMoved" type="check">
                            <span>Check all fragments have been moved: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="fragmentComments" type="check">
                            <span>Check all fragments have comments: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="scalerange" type="check">
                            <span>Enforce a scale usage: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                            <span>Minimum:</span>
                            <input type="number" min="0" max="100" name="min" />
                            <span>Maximum:</span>
                            <input type="number" min="0" max="100" name="max" />
                        </div>
                        <div class="attribute" name="volume" type="show">
                            <span>Show master volume control: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="playhead" type="show">
                            <span>Show playhead: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="page-count" type="show">
                            <span>Show Page Count: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                        <div class="attribute" name="comments" type="show">
                            <span>Show Fragment Comments: </span>
                            <input type="checkbox" ng-click="enableInterfaceOption($event)" />
                        </div>
                    </div>
                </div>
                <div class="node">
                    <h3>Axis Title</h3>
                    <textarea ng-model="interface.title"></textarea>
                    <div class="attributes">
                        <div class="attribute">
                            <span>Axis name (in saves): </span>
                            <input type="text" ng-model="interface.name" />
                        </div>
                    </div>
                </div>
                <div class="node">
                    <h3>Axis Image</h3>
                    <textarea ng-model="interface.image"></textarea>
                </div>
                <div class="node">
                    <h3>Axis Scales</h3>
                    <button type="button" class="btn btn-success" ng-click="addScale();">Add</button>
                    <button type="button" class="btn btn-danger" ng-click="clearScales()" ng-show="interface.scales.length > 0">Clear Scales</button>
                    <div class="dropdown" style="display: inline-block;">
                        <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
                            Use scale...
                            <span class="caret"></span>
                        </button>
                        <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
                            <li ng-repeat="scale in testSpecifications.scales" ng-click="useScales(scale.scales)"><a href="#">{{scale.name}}</a></li>
                        </ul>
                    </div>
                    <div class="node" ng-repeat="scale in interface.scales">
                        <div class="attributes">
                            <div class="attribute">
                                <button type="button" class="btn btn-danger" ng-click="removeScale(scale);">Remove</button>
                            </div>
                            <div class="attribute">
                                <span>Position: </span>
                                <input type="number" min="0" max="100" ng-model="scale.position" />
                            </div>
                            <div class="attribute">
                                <span>Text: </span>
                                <input type="text" ng-model="scale.text" />
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <div class="node">
                <h3>Comment Questions</h3>
                <button type="button" class="btn btn-success" ng-click="addCommentQuestion()">Add Comment Question</button>
                <div class="node" ng-repeat="cq in page.commentQuestions">
                    <button type="button" class="btn btn-danger" ng-click="removeCommentQuestion(cq)">Remove Comment Question</button>
                    <div class="attributes">
                        <div class="attribute">
                            <span>Unique ID:</span>
                            <input type="text" ng-model="cq.id" />
                        </div>
                        <div class="attribute">
                            <span>Common Name:</span>
                            <input type="text" ng-model="cq.name" />
                        </div>
                        <div class="attribute" ng-show="cq.type == 'slider'">
                            <span>Minimum:</span>
                            <input type="number" ng-model="cq.min" />
                        </div>
                        <div class="attribute" ng-show="cq.type == 'slider'">
                            <span>Maximum:</span>
                            <input type="number" ng-model="cq.max" />
                        </div>
                        <div class="attribute" ng-show="cq.type == 'slider'">
                            <span>Step size:</span>
                            <input type="number" ng-model="cq.step" />
                        </div>
                        <div class="attribute" ng-show="cq.type == 'slider'">
                            <span>Initial Value:</span>
                            <input type="number" ng-model="cq.value" />
                        </div>
                    </div>
                    <div class="node">
                        <h4>Question:</h4>
                        <textarea ng-model="cq.statement"></textarea>
                    </div>
                    <div class="node" ng-show="['radio', 'checkbox'].indexOf(cq.type) >= 0">
                        <h4>Options</h4>
                        <div class="node" ng-repeat="option in cq.options">
                            <div class="attributes">
                                <div class="attribute">
                                    <button type="button" class="btn btn-danger" ng-click="removeCommentQuestionOption(cq,option)">Remove</button>
                                </div>
                                <div class="attribute">
                                    <span>Name: </span>
                                    <input type="text" ng-model="option.name" />
                                </div>
                                <div class="attribute">
                                    <span>Display Text: </span>
                                    <input type="text" ng-model="option.text" />
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            <button type="button" class="btn btn-success" ng-click="addAudioElement()">Add Fragment</button>
            <div class="node" ng-repeat="fragment in page.audioElements">
                <h3>Audio Fragment</h3>
                <button type="button" class="btn btn-danger" ng-click="removeAudioElement(fragment)">Remove Fragment</button>
                <div class="attributes">
                    <div class="attribute">
                        <span>Unique ID: </span>
                        <input type="text" ng-model="fragment.id" />
                    </div>
                    <div class="attribute">
                        <span>URL: </span>
                        <input type="text" ng-model="fragment.url" />
                        <span>Full URL: </span><span style="font-weight=600">{{page.hostURL}}{{fragment.url}}</span>
                    </div>
                    <div class="attribute">
                        <span>Fragment Gain (dB): </span>
                        <input type="number" ng-model="fragment.gain" />
                    </div>
                    <div class="attribute">
                        <span>Fragment Label: </span>
                        <input type="text" ng-model="fragment.label" />
                    </div>
                    <div class="attribute">
                        <span>Fragment Common name: </span>
                        <input type="text" ng-model="fragment.name" />
                    </div>
                    <div class="attribute">
                        <span>Fragment Type: </span>
                        <select ng-model="fragment.type">
                            <option value="normal">Normal</option>
                            <option value="anchor">Hidden Anchor</option>
                            <option value="reference">Hidden Reference</option>
                            <option value="outside-reference">Outside Reference</option>
                        </select>
                    </div>
                    <div class="attribute" ng-show="fragment.type == 'anchor'">
                        <span>Anchor must be below: </span>
                        <input type="number" ng-model="fragment.marker" min="0" max="100" />
                    </div>
                    <div class="attribute" ng-show="fragment.type == 'reference'">
                        <span>Reference must be above: </span>
                        <input type="number" ng-model="fragment.marker" min="0" max="100" />
                    </div>
                    <div class="attribute">
                        <span>Loudness: </span>
                        <input type="number" ng-model="fragment.loudness" max="0" />
                    </div>
                    <div class="attribute" ng-show="page.poolSize > 0">
                        <span>Always include fragment: </span>
                        <input type="checkbox" ng-model="fragment.alwaysInclude" max="0" />
                    </div>
                    <div class="attribute">
                        <span>Fragment Pre-Silence: </span>
                        <input type="number" ng-model="fragment.preSilence" max="0" step="0.1" />
                    </div>
                    <div class="attribute">
                        <span>Fragment Post-Silence: </span>
                        <input type="number" ng-model="fragment.postSilence" max="0" step="0.1" />
                    </div>
                    <div class="attribute">
                        <span>Fragment playback start position (s): </span>
                        <input type="number" ng-model="fragment.startTime" min="0" max="{{fragment.stopTime}}" />
                    </div>
                    <div class="attribute">
                        <span>Fragment playback stop position (s): </span>
                        <input type="number" ng-model="fragment.stopTime" min="{{fragment.startTime}}" />
                    </div>
                    <div class="attribute">
                        <span>Fragment sampling rate: </span>
                        <input type="number" ng-model="fragment.sampleRate" min="1" />
                    </div>
                    <div class="attribute">
                        <span>Fragment Image (URL): </span>
                        <input type="text" ng-model="fragment.image" />
                    </div>
                    <div class="attribute">
                        <span>Minimum number of plays</span>
                        <input type="number" ng-model="fragment.minNumberPlays" min="0" max="{{fragment.maxNumberPlays || page.maxNumberPlays || specification.maxNumberPlays}}" />
                    </div>
                    <div class="attribute">
                        <span>Maximum number of plays</span>
                        <input type="number" ng-model="fragment.maxNumberPlays" min="{{fragment.minNumberPlays || page.minNumberPlays || specification.minNumberPlays || 0}}" />
                    </div>
                </div>
            </div>
        </div>
        <div id="popupHolder" ng-show="popupVisible">
            <div ng-controller="introduction" class="popup" ng-show="popupVisible">
                <div class="popupTitle" ng-switch="state">
                    <span ng-switch-when="0">Test Creator</span>
                    <span ng-switch-when="1">Create New Test</span>
                </div>
                <div class="popupContent container-fluid" ng-switch="state">
                    <div ng-switch-when="0">
                        <div>
                            <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>
                        </div>
                        <div>
                            <input type="file" id="files" ng-model="files" onchange="handleFiles(event)" />
                        </div>
                    </div>
                    <div ng-switch-when="1">
                        <div>
                            <span>Please select the interface you would like to use below. Selecting an interface will give a brief description of the interface type.</span>
                        </div>
                        <div class="row">
                            <div class="col-md-6" style="overflow-y: scroll;height: 333px;">
                                <div class="new-test" ng-repeat="i in testSpecifications.interfaces" ng-mouseover="mouseover(i.name)" ng-click="initialise(i.name)">
                                    <label style="cursor:pointer">
                                        <input type="radio" name="new-test" value="{{i.name}}" id="i.name" style="cursor:pointer" /> {{i.name}}
                                    </label>
                                </div>
                            </div>
                            <div class="col-md-6">
                                <span>{{description}}</span>
                            </div>
                        </div>
                    </div>
                </div>
                <div class="popupButtons">
                    <button id="popupBack" type="button" class="btn btn-default" ng-show="state>0" ng-click="back()">Back</button>
                    <button id="popupNext" type="button" class="btn btn-default" ng-click="next()">Next</button>
                </div>
            </div>
        </div>
        <div id="screenblank" ng-show="popupVisible"></div>
    </div>
</body>

</html>