nicholas@2859
|
1 <html>
|
nicholas@2859
|
2
|
nicholas@2859
|
3 <head>
|
nicholas@2859
|
4 <meta http-equiv="content-type" content="text/html; charset=utf-8">
|
nicholas@2859
|
5 <!-- This defines the test creator tool for the Web Audio Evaluation Toolbox -->
|
nicholas@2859
|
6 <link rel="stylesheet" type="text/css" href="test_create/style.css" />
|
nicholas@2859
|
7 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
|
nicholas@2859
|
8 <script src="js/jquery-2.1.4.js"></script>
|
nicholas@2859
|
9 <script src="js/angular.min.js"></script>
|
nicholas@2859
|
10 <script type="text/javascript" src="js/specification.js"></script>
|
nicholas@2859
|
11 <script type="text/javascript" src="test_create/test_core.js"></script>
|
nicholas@2859
|
12 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
|
nicholas@2859
|
13
|
nicholas@2859
|
14 <title>WAET 1.2.1 Test Creator</title>
|
nicholas@2859
|
15 </head>
|
nicholas@2859
|
16
|
nicholas@2859
|
17 <body>
|
nicholas@2859
|
18 <div ng-app="creator" ng-controller="view">
|
nicholas@2859
|
19 <div id="pageRoot">
|
nicholas@2859
|
20 <h1>Web Audio Evaluation Tool - Test Creator</h1>
|
nicholas@2859
|
21 </div>
|
nicholas@2860
|
22 <button type="button" class="btn btn-success" ng-click="exportXML()">Export XML</button>
|
nicholas@2859
|
23 <div id="setupNode" class="node" ng-controller="setup">
|
nicholas@2859
|
24 <h2>Setup</h2>
|
nicholas@2859
|
25 <div class="attributes">
|
nicholas@2859
|
26 <div class="attribute">
|
nicholas@2859
|
27 <span>Interface: </span>
|
nicholas@2859
|
28 <input type="text" ng-model="specification.interface" />
|
nicholas@2859
|
29 </div>
|
nicholas@2859
|
30 <div class="attribute">
|
nicholas@2859
|
31 <span>Save URL: </span>
|
nicholas@2859
|
32 <input type="text" ng-model="specification.projectReturn" />
|
nicholas@2859
|
33 </div>
|
nicholas@2859
|
34 <div class="attribute">
|
nicholas@2859
|
35 <span>Exit URL: </span>
|
nicholas@2859
|
36 <input type="text" ng-model="specification.returnURL" />
|
nicholas@2859
|
37 </div>
|
nicholas@2859
|
38 <div class="attribute">
|
nicholas@2859
|
39 <span>Randomise Page Order: </span>
|
nicholas@2859
|
40 <input type="checkbox" ng-model="specification.randomiseOrder" />
|
nicholas@2859
|
41 </div>
|
nicholas@2859
|
42 <div class="attribute">
|
nicholas@2859
|
43 <span>Page Pool Size: </span>
|
nicholas@2859
|
44 <input type="number" ng-model="specification.poolSize" min="0" />
|
nicholas@2859
|
45 </div>
|
nicholas@2859
|
46 <div class="attribute">
|
nicholas@2859
|
47 <span>Loudness Normalisation (LUFS): </span>
|
nicholas@2859
|
48 <input type="number" ng-model="specification.loudness" max="0" />
|
nicholas@2859
|
49 </div>
|
nicholas@2859
|
50 <div class="attribute">
|
nicholas@2859
|
51 <span>Fixed Sampling Rate: </span>
|
nicholas@2859
|
52 <input type="number" ng-model="specification.sampleRate" min="0" />
|
nicholas@2859
|
53 </div>
|
nicholas@2859
|
54 <div class="attribute">
|
nicholas@2859
|
55 <span>Pre-Test audio calibration: </span>
|
nicholas@2859
|
56 <input type="checkbox" ng-model="specification.calibration" />
|
nicholas@2859
|
57 </div>
|
nicholas@2859
|
58 <div class="attribute">
|
nicholas@2859
|
59 <span>Global Cross-fade time: </span>
|
nicholas@2859
|
60 <input type="number" ng-model="specification.crossFade" min="0" step="0.1" />
|
nicholas@2859
|
61 </div>
|
nicholas@2859
|
62 <div class="attribute">
|
nicholas@2859
|
63 <span>Global Fragment Pre-Silence: </span>
|
nicholas@2859
|
64 <input type="number" ng-model="specification.preSilence" min="0" step="0.1" />
|
nicholas@2859
|
65 </div>
|
nicholas@2859
|
66 <div class="attribute">
|
nicholas@2859
|
67 <span>Global Fragment Post-Silence: </span>
|
nicholas@2859
|
68 <input type="number" ng-model="specification.preSilence" min="0" step="0.1" />
|
nicholas@2859
|
69 </div>
|
nicholas@2859
|
70 <div class="attribute">
|
nicholas@2859
|
71 <span>Play audio one-at-a-time: </span>
|
nicholas@2859
|
72 <input type="checkbox" ng-model="specification.playOne" />
|
nicholas@2859
|
73 </div>
|
nicholas@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@2859
|
142 <input type="text" ng-model="opt.id" />
|
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@2859
|
202 <input type="text" ng-model="option.name" />
|
nicholas@2859
|
203 </div>
|
nicholas@2859
|
204 <div class="attribute">
|
nicholas@2859
|
205 <span>Displayed Text: </span>
|
nicholas@2859
|
206 <input type="text" ng-model="option.text" />
|
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@2859
|
230 <input type="text" ng-model="condition.value" />
|
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@2859
|
273 <input type="text" ng-model="opt.id" />
|
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@2859
|
333 <input type="text" ng-model="option.name" />
|
nicholas@2859
|
334 </div>
|
nicholas@2859
|
335 <div class="attribute">
|
nicholas@2859
|
336 <span>Displayed Text: </span>
|
nicholas@2859
|
337 <input type="text" ng-model="option.text" />
|
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@2859
|
361 <input type="text" ng-model="condition.value" />
|
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@2859
|
439 <input type="text" ng-model="page.id" />
|
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@2859
|
451 <input type="number" ng-model="page.repeatCount" />
|
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@2859
|
554 <input type="text" ng-model="opt.id" />
|
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@2859
|
614 <input type="text" ng-model="option.name" />
|
nicholas@2859
|
615 </div>
|
nicholas@2859
|
616 <div class="attribute">
|
nicholas@2859
|
617 <span>Displayed Text: </span>
|
nicholas@2859
|
618 <input type="text" ng-model="option.text" />
|
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@2859
|
642 <input type="text" ng-model="condition.value" />
|
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@2859
|
685 <input type="text" ng-model="opt.id" />
|
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@2859
|
745 <input type="text" ng-model="option.name" />
|
nicholas@2859
|
746 </div>
|
nicholas@2859
|
747 <div class="attribute">
|
nicholas@2859
|
748 <span>Displayed Text: </span>
|
nicholas@2859
|
749 <input type="text" ng-model="option.text" />
|
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@2859
|
773 <input type="text" ng-model="condition.value" />
|
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@2864
|
862 Use scale...
|
nicholas@2864
|
863 <span class="caret"></span>
|
nicholas@2864
|
864 </button>
|
nicholas@2864
|
865 <ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
|
nicholas@2864
|
866 <li ng-repeat="scale in testSpecifications.scales" ng-click="useScales(scale.scales)"><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@2859
|
876 <input type="number" min="0" max="100" ng-model="scale.position" />
|
nicholas@2859
|
877 </div>
|
nicholas@2859
|
878 <div class="attribute">
|
nicholas@2859
|
879 <span>Text: </span>
|
nicholas@2859
|
880 <input type="text" ng-model="scale.text" />
|
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@2859
|
894 <input type="text" ng-model="cq.id" />
|
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@2859
|
930 <input type="text" ng-model="option.name" />
|
nicholas@2859
|
931 </div>
|
nicholas@2859
|
932 <div class="attribute">
|
nicholas@2859
|
933 <span>Display Text: </span>
|
nicholas@2859
|
934 <input type="text" ng-model="option.text" />
|
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@2859
|
948 <input type="text" ng-model="fragment.id" />
|
nicholas@2859
|
949 </div>
|
nicholas@2859
|
950 <div class="attribute">
|
nicholas@2859
|
951 <span>URL: </span>
|
nicholas@2859
|
952 <input type="text" ng-model="fragment.url" />
|
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>
|