n@156
|
1 <!DOCTYPE html>
|
n@156
|
2 <html lang="en">
|
n@156
|
3 <head>
|
n@156
|
4 <meta charset="utf-8">
|
n@156
|
5
|
n@156
|
6 <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
|
n@156
|
7 Remove this if you use the .htaccess -->
|
n@156
|
8 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
n@156
|
9
|
n@156
|
10 <title>WAET Create Test</title>
|
n@156
|
11 <meta name="description" content="">
|
n@156
|
12 <meta name="author" content="">
|
n@156
|
13
|
n@156
|
14 <meta name="viewport" content="width=device-width; initial-scale=1.0">
|
n@157
|
15
|
n@157
|
16 <script type="text/javascript">
|
n@157
|
17 // To aid 'one-page set-up' all scripts and CSS must be included directly in this file!
|
n@157
|
18 var topLevel;
|
n@157
|
19 window.onload = function() {
|
n@157
|
20 // Initialise page
|
n@157
|
21 topLevel = document.getElementById('topLevelBody');
|
n@157
|
22 var setup = document.createElement('div');
|
n@157
|
23 setup.id = 'setupTagDiv';
|
n@157
|
24
|
n@157
|
25 };
|
n@157
|
26
|
n@162
|
27 function attributePair(string, type, mandatory){
|
n@157
|
28 var id = document.createElement("span");
|
n@157
|
29 id.textContent = string;
|
n@157
|
30 var input = document.createElement("input");
|
n@157
|
31 input.type = type;
|
n@162
|
32 if (type == 'text') {
|
n@162
|
33 if (mandatory == true) {
|
n@162
|
34 input.setAttribute('mandatory','true');
|
n@162
|
35 }
|
n@162
|
36 else {
|
n@162
|
37 input.setAttribute('mandatory','false');
|
n@162
|
38 }
|
n@162
|
39 }
|
n@157
|
40 return [id, input];
|
n@157
|
41 }
|
n@157
|
42
|
n@159
|
43 function removeNode(event) {
|
n@159
|
44 event.srcElement.parentElement.parentElement.removeChild(event.srcElement.parentElement);
|
n@159
|
45 }
|
n@159
|
46
|
n@162
|
47 function buttonClickedValidate() {
|
n@162
|
48 var ready = validate();
|
n@162
|
49 if (ready == false) {
|
n@162
|
50 var errMsg = document.getElementById('errorMessage');
|
n@163
|
51 errMsg.textContent = "There were some errors with your XML. Any input boxes highlighted in red are invalid because they are empty or because its ID matches another elements ID. Please fill these in correctly. Any boxes which are yellow are not-invalid but will use the default value.";
|
n@162
|
52 errMsg.style.visibility = 'visible';
|
n@162
|
53 document.getElementById('createXML').disabled = true;
|
n@162
|
54
|
n@162
|
55 } else {
|
n@162
|
56 var errMsg = document.getElementById('errorMessage');
|
n@162
|
57 errMsg.textContent = "";
|
n@162
|
58 errMsg.style.visiblity = 'hidden';
|
n@162
|
59 document.getElementById('createXML').disabled = false;
|
n@162
|
60 }
|
n@162
|
61 }
|
n@162
|
62
|
n@163
|
63 function buttonClickedSubmit() {
|
n@163
|
64 var ready = validate();
|
n@163
|
65 if (ready == true) {
|
n@163
|
66 var xmlDoc = document.createElement('BrowserEvalProjectDocument');
|
n@163
|
67 var setup = document.createElement('setup');
|
n@163
|
68 setup.setAttribute('interface',document.getElementById('interface').value);
|
n@163
|
69 if (document.getElementById('projectReturn').value == "") {
|
n@163
|
70 setup.setAttribute('projectReturn',"null");
|
n@163
|
71 } else {
|
n@163
|
72 setup.setAttribute('projectReturn',document.getElementById('projectReturn').value);
|
n@163
|
73 }
|
n@163
|
74 setup.setAttribute('randomiseOrder',document.getElementById('randomisePageOrder').checked);
|
n@163
|
75 setup.setAttribute('collectMetrics',document.getElementById('collectMetrics').checked);
|
n@163
|
76
|
n@163
|
77 var globalPreTest = document.createElement('preTest');
|
n@163
|
78 var options = document.getElementById('globalPreTest').getElementsByClassName('head');
|
n@163
|
79 constructPrePost(globalPreTest, options);
|
n@163
|
80
|
n@163
|
81 var globalPostTest = document.createElement('postTest');
|
n@163
|
82 options = document.getElementById('globalPostTest').getElementsByClassName('head');
|
n@163
|
83 constructPrePost(globalPostTest, options);
|
n@163
|
84
|
n@163
|
85 var globalMetrics = document.createElement('metric');
|
n@163
|
86 options = document.getElementById('globalMetric').getElementsByClassName('attrib')[0].getElementsByTagName('input');
|
n@163
|
87 for (var i=0; i<options.length; i++) {
|
n@163
|
88 if (options[i].checked) {
|
n@163
|
89 var metric = document.createElement('metricEnable');
|
n@163
|
90 metric.textContent = options[i].id;
|
n@163
|
91 globalMetrics.appendChild(metric);
|
n@163
|
92 }
|
n@163
|
93 }
|
n@166
|
94 setup.appendChild(globalPreTest);
|
n@166
|
95 setup.appendChild(globalPostTest);
|
n@166
|
96 setup.appendChild(globalMetrics);
|
n@166
|
97 xmlDoc.appendChild(setup);
|
n@163
|
98
|
n@166
|
99 var audioHolders = document.getElementsByName('audio-holder');
|
n@166
|
100 for (var i=0; i<audioHolders.length; i++) {
|
n@166
|
101 var audioHolder = document.createElement('audioHolder');
|
n@166
|
102 var audioHolderDOM = audioHolders[i];
|
n@166
|
103 var attribs = audioHolderDOM.getElementsByClassName('attrib')[0].getElementsByTagName('input');
|
n@166
|
104 audioHolder.id = attribs[0].value;
|
n@166
|
105 if (attribs[1].value != "") {audioHolder.setAttribute('sampleRate',attribs[1].value);}
|
n@166
|
106 if (attribs[2].value != "") {audioHolder.setAttribute('hostURL',attribs[2].value);}
|
n@166
|
107 audioHolder.setAttribute('randomiseOrder',attribs[3].checked);
|
n@166
|
108 audioHolder.setAttribute('repeatCount',attribs[4].checked);
|
n@166
|
109 audioHolder.setAttribute('loop',attribs[5].checked);
|
n@166
|
110 audioHolder.setAttribute('elementComments',attribs[6].checked);
|
n@166
|
111
|
n@166
|
112 // Audio-Holder PreTests
|
n@166
|
113 var audioHolderPreTest = document.createElement('preTest');
|
n@166
|
114 var audioHolderPostTest = document.createElement('postTest');
|
n@166
|
115 options = audioHolderDOM.childNodes[2].getElementsByClassName('head');
|
n@166
|
116 constructPrePost(audioHolderPreTest, options);
|
n@166
|
117 options = audioHolderDOM.childNodes[3].getElementsByClassName('head');
|
n@166
|
118 constructPrePost(audioHolderPostTest, options);
|
n@166
|
119
|
n@166
|
120 audioHolder.appendChild(audioHolderPreTest);
|
n@166
|
121 audioHolder.appendChild(audioHolderPostTest);
|
n@166
|
122
|
n@166
|
123 // audio-Elements
|
n@166
|
124 var audioElementsDOM = [];
|
n@166
|
125 var commentQuestionDOM = [];
|
n@166
|
126 for (var j=0; j<audioHolderDOM.childElementCount; j++) {
|
n@166
|
127 var child = audioHolderDOM.childNodes[j];
|
n@166
|
128 var name = child.getAttribute('name');
|
n@166
|
129 if (name == 'audio-element') {audioElementsDOM.push(child);}
|
n@166
|
130 else if (name == 'comment-question') {commentQuestionDOM.push(child);}
|
n@166
|
131 }
|
n@166
|
132
|
n@166
|
133 for (var j=0; j<audioElementsDOM.length; j++) {
|
n@166
|
134 var audioElement = document.createElement('audioElement');
|
n@166
|
135 attribs = audioElementsDOM[j].getElementsByClassName('attrib')[0].getElementsByTagName('input');
|
n@166
|
136 audioElement.id = attribs[0].value;
|
n@166
|
137 audioElement.setAttribute('url',attribs[1].value);
|
n@166
|
138 audioHolder.appendChild(audioElement);
|
n@166
|
139 }
|
n@166
|
140
|
n@166
|
141 for (var j=0; j<commentQuestionDOM.length; j++) {
|
n@166
|
142 var commentQuestion = document.createElement('commentQuestion');
|
n@166
|
143 attribs = commentQuestionDOM[j].getElementsByClassName('attrib')[0].getElementsByTagName('input');
|
n@166
|
144 commentQuestion.id = attribs[0].value;
|
n@166
|
145 commentQuestion.textContent = attribs[1].value;
|
n@166
|
146 audioHolder.appendChild(commentQuestion);
|
n@166
|
147 }
|
n@166
|
148 xmlDoc.appendChild(audioHolder);
|
n@166
|
149 }
|
n@166
|
150 return xmlDoc;
|
n@163
|
151 }
|
n@163
|
152 }
|
n@163
|
153
|
n@163
|
154 function constructPrePost(parent, options) {
|
n@163
|
155 for (var i=0; i<options.length; i++) {
|
n@163
|
156 var elem = options[i];
|
n@163
|
157 var attributes = elem.getElementsByClassName('attrib')[0].getElementsByTagName('input');
|
n@163
|
158 if (elem.getAttribute('name') == 'question-node') {
|
n@163
|
159 var node = document.createElement('question');
|
n@163
|
160 node.setAttribute('id',attributes[0].value);
|
n@163
|
161 node.textContent = attributes[1].value;
|
n@163
|
162 } else if (elem.getAttribute('name') == 'statement-node') {
|
n@163
|
163 var node = document.createElement('statment');
|
n@163
|
164 node.textContent = attributes[0].value;
|
n@163
|
165 }
|
n@163
|
166 parent.appendChild(node);
|
n@163
|
167 }
|
n@163
|
168 }
|
n@163
|
169
|
n@162
|
170 function validate() {
|
n@162
|
171 var canExport = true;
|
n@162
|
172 // Checks if the XML can be created from the given entries
|
n@162
|
173 var inputs = document.getElementsByTagName('input');
|
n@162
|
174 for (var i=0; i<inputs.length; i++) {
|
n@162
|
175 if (inputs[i].type == 'text') {
|
n@162
|
176 if (inputs[i].value == "") {
|
n@162
|
177 var mandatory = inputs[i].getAttribute('mandatory');
|
n@162
|
178 if (mandatory == "true") {
|
n@162
|
179 errorInput(inputs[i]);
|
n@162
|
180 canExport = false;
|
n@162
|
181 } else {
|
n@162
|
182 warningInput(inputs[i]);
|
n@162
|
183 }
|
n@162
|
184 } else {
|
n@162
|
185 goodInput(inputs[i]);
|
n@162
|
186 }
|
n@162
|
187 }
|
n@162
|
188 }
|
n@163
|
189
|
n@163
|
190 var audioHolders = document.getElementsByName('audio-holder');
|
n@163
|
191 for (var i=0; i<audioHolders.length; i++) {
|
n@163
|
192 var divs = audioHolders[i].getElementsByClassName('head');
|
n@163
|
193 var IDs = [];
|
n@163
|
194 for (var j=0; j<divs.length; j++) {
|
n@163
|
195 if (divs[j].getAttribute('name') == 'audio-element') {
|
n@163
|
196 var obj = divs[j].getElementsByClassName('attrib')[0].children[1];
|
n@163
|
197 var aeID = obj.value;
|
n@163
|
198 if (aeID != "") {
|
n@163
|
199 var unique = true;
|
n@163
|
200 for (var k=0; k<IDs.length; k++) {
|
n@163
|
201 if (aeID == IDs[k]) {
|
n@163
|
202 unique = false;
|
n@163
|
203 break;
|
n@163
|
204 }
|
n@163
|
205 }
|
n@163
|
206 if (unique == true) {
|
n@163
|
207 IDs.push(aeID);
|
n@163
|
208 } else {
|
n@163
|
209 errorInput(obj);
|
n@163
|
210 canExport = false;
|
n@163
|
211 }
|
n@163
|
212 }
|
n@163
|
213 }
|
n@163
|
214 }
|
n@163
|
215 }
|
n@162
|
216 return canExport;
|
n@162
|
217 };
|
n@162
|
218
|
n@162
|
219 function errorInput(node) {
|
n@162
|
220 node.style.backgroundColor = "#FF0000";
|
n@162
|
221 }
|
n@162
|
222
|
n@162
|
223 function warningInput(node) {
|
n@162
|
224 node.style.backgroundColor = "#FFFF00";
|
n@162
|
225 }
|
n@162
|
226
|
n@162
|
227 function goodInput(node) {
|
n@162
|
228 node.style.backgroundColor = "#FFFFFF";
|
n@162
|
229 }
|
n@162
|
230
|
n@157
|
231 function questionNode() {
|
n@157
|
232 var node = document.createElement("div");
|
n@157
|
233 node.setAttribute('class','head');
|
n@157
|
234 node.setAttribute('name','question-node');
|
n@157
|
235 var nodeTitle = document.createElement("span");
|
n@157
|
236 nodeTitle.textContent = "Question";
|
n@157
|
237 var attributes = document.createElement("div");
|
n@157
|
238 attributes.setAttribute('class','attrib');
|
n@162
|
239 var id = attributePair("ID:","text", true);
|
n@162
|
240 var question = attributePair("Question:","text", false);
|
n@157
|
241 node.appendChild(nodeTitle);
|
n@157
|
242 id.forEach(function(item){attributes.appendChild(item);},false);
|
n@157
|
243 question.forEach(function(item){attributes.appendChild(item);},false);
|
n@157
|
244 node.appendChild(attributes);
|
n@159
|
245
|
n@159
|
246 var removeButton = document.createElement("button");
|
n@159
|
247 removeButton.textContent = "Remove";
|
n@159
|
248 removeButton.onclick = removeNode;
|
n@159
|
249 node.appendChild(removeButton);
|
n@157
|
250 return node;
|
n@157
|
251 }
|
n@157
|
252
|
n@157
|
253 function statementNode() {
|
n@157
|
254 var node = document.createElement("div");
|
n@157
|
255 node.setAttribute('class','head');
|
n@162
|
256 node.setAttribute('name','statement-node');
|
n@157
|
257 var nodeTitle = document.createElement("span");
|
n@157
|
258 nodeTitle.textContent = "Statement";
|
n@157
|
259 var attributes = document.createElement("div");
|
n@157
|
260 attributes.setAttribute('class','attrib');
|
n@162
|
261 var statement = attributePair("Statement:","text",false);
|
n@157
|
262 node.appendChild(nodeTitle);
|
n@157
|
263 statement.forEach(function(item){attributes.appendChild(item);},false);
|
n@157
|
264 node.appendChild(attributes);
|
n@159
|
265
|
n@159
|
266 var removeButton = document.createElement("button");
|
n@159
|
267 removeButton.textContent = "Remove";
|
n@159
|
268 removeButton.onclick = removeNode;
|
n@159
|
269 node.appendChild(removeButton);
|
n@157
|
270 return node;
|
n@157
|
271 }
|
n@157
|
272
|
n@157
|
273 function audioHolderNode() {
|
n@157
|
274 var audioHolderCounts = document.getElementsByName("audio-holder").length;
|
n@157
|
275 var node = document.createElement("div");
|
n@157
|
276 node.setAttribute("class","head");
|
n@157
|
277 node.setAttribute("name","audio-holder");
|
n@159
|
278 node.setAttribute("id","audio-holder-"+audioHolderCounts);
|
n@157
|
279 var nodeTitle = document.createElement("span");
|
n@159
|
280 nodeTitle.textContent = "Audio Holder "+(audioHolderCounts+1);
|
n@157
|
281
|
n@157
|
282 var attributes = document.createElement("div");
|
n@157
|
283 attributes.setAttribute('class','attrib');
|
n@162
|
284 var id = attributePair("ID:","text",true);
|
n@159
|
285 id[1].value=audioHolderCounts;
|
n@162
|
286 var hostURL = attributePair("Host URL:", "text",false);
|
n@162
|
287 var sampleRate = attributePair("Sample Rate:","text",false);
|
n@159
|
288 var randomiseOrder = attributePair("Randomise Element Order:","checkbox");
|
n@159
|
289 var repeatCount = attributePair("Repeat Page Count:","number");
|
n@159
|
290 repeatCount[1].value = 0;
|
n@159
|
291 var loop = attributePair("Loop Element Playback","checkbox");
|
n@159
|
292 var elementComments = attributePair("Enable Comment Boxes","checkbox");
|
n@159
|
293 id.forEach(function(item){attributes.appendChild(item);},false);
|
n@159
|
294 hostURL.forEach(function(item){attributes.appendChild(item);},false);
|
n@159
|
295 sampleRate.forEach(function(item){attributes.appendChild(item);},false);
|
n@159
|
296 hostURL.forEach(function(item){attributes.appendChild(item);},false);
|
n@159
|
297 randomiseOrder.forEach(function(item){attributes.appendChild(item);},false);
|
n@159
|
298 repeatCount.forEach(function(item){attributes.appendChild(item);},false);
|
n@159
|
299 loop.forEach(function(item){attributes.appendChild(item);},false);
|
n@159
|
300 elementComments.forEach(function(item){attributes.appendChild(item);},false);
|
n@159
|
301
|
n@159
|
302 node.appendChild(nodeTitle);
|
n@159
|
303 node.appendChild(attributes);
|
n@159
|
304
|
n@159
|
305 var pretest = document.createElement("div");
|
n@159
|
306 pretest.setAttribute('class','head');
|
n@159
|
307 pretest.setAttribute('name','pre-test');
|
n@159
|
308 var pretestTitle = document.createElement("h4");
|
n@159
|
309 pretestTitle.textContent = "Pre Test";
|
n@159
|
310 var buttonAddQ = document.createElement("button");
|
n@159
|
311 buttonAddQ.textContent = "Add Pre Test Question";
|
n@159
|
312 buttonAddQ.onclick = function(){event.srcElement.parentElement.appendChild(questionNode());};
|
n@159
|
313 var buttonAddS = document.createElement("button");
|
n@159
|
314 buttonAddS.textContent = "Add Pre Test Statement";
|
n@159
|
315 buttonAddS.onclick = function(){event.srcElement.parentElement.appendChild(statementNode());};
|
n@159
|
316 pretest.appendChild(pretestTitle);
|
n@159
|
317 pretest.appendChild(buttonAddQ);
|
n@159
|
318 pretest.appendChild(buttonAddS);
|
n@159
|
319
|
n@159
|
320 var posttest = document.createElement("div");
|
n@159
|
321 posttest.setAttribute('class','head');
|
n@159
|
322 posttest.setAttribute('name','post-test');
|
n@159
|
323 var posttestTitle = document.createElement("h4");
|
n@159
|
324 posttestTitle.textContent = "Post Test";
|
n@159
|
325 var buttonAddQ = document.createElement("button");
|
n@159
|
326 buttonAddQ.textContent = "Add Post Test Question";
|
n@159
|
327 buttonAddQ.onclick = function(){event.srcElement.parentElement.appendChild(questionNode());};
|
n@159
|
328 var buttonAddS = document.createElement("button");
|
n@159
|
329 buttonAddS.textContent = "Add Post Test Statement";
|
n@159
|
330 buttonAddS.onclick = function(){event.srcElement.parentElement.appendChild(statementNode());};
|
n@159
|
331 posttest.appendChild(posttestTitle);
|
n@159
|
332 posttest.appendChild(buttonAddQ);
|
n@159
|
333 posttest.appendChild(buttonAddS);
|
n@159
|
334
|
n@159
|
335 node.appendChild(pretest);
|
n@159
|
336 node.appendChild(posttest);
|
n@159
|
337
|
n@159
|
338 var newAudioElementButton = document.createElement("button");
|
n@159
|
339 newAudioElementButton.textContent = "Add audio element";
|
n@159
|
340 newAudioElementButton.onclick = function(){
|
n@159
|
341 event.srcElement.parentElement.appendChild(audioElementNode());
|
n@159
|
342 };
|
n@159
|
343 node.appendChild(newAudioElementButton);
|
n@159
|
344
|
n@159
|
345 var newCommentButton = document.createElement("button");
|
n@159
|
346 newCommentButton.textContent = "Add Comment Box";
|
n@159
|
347 newCommentButton.onclick = function() {
|
n@159
|
348 event.srcElement.parentElement.appendChild(commentBox());
|
n@159
|
349 };
|
n@159
|
350 node.appendChild(newCommentButton);
|
n@159
|
351
|
n@159
|
352 var removeButton = document.createElement("button");
|
n@159
|
353 removeButton.textContent = "Remove Audio Holder";
|
n@159
|
354 removeButton.onclick = removeNode;
|
n@159
|
355 node.appendChild(removeButton);
|
n@159
|
356 return node;
|
n@159
|
357 }
|
n@159
|
358
|
n@159
|
359 function audioElementNode() {
|
n@159
|
360 var parentStructure = event.srcElement.parentElement.childNodes;
|
n@159
|
361 var audioElemCounts = 0;
|
n@159
|
362 for (var i=0; i<parentStructure.length; i++) {
|
n@159
|
363 if (parentStructure[i].getAttribute('name') == "audio-element")
|
n@159
|
364 {audioElemCounts++;}
|
n@159
|
365 }
|
n@159
|
366 var node = document.createElement('div');
|
n@159
|
367 node.setAttribute('class','head');
|
n@159
|
368 node.setAttribute('name','audio-element');
|
n@159
|
369 var nodeTitle = document.createElement('span');
|
n@159
|
370 nodeTitle.textContent = 'Audio Element '+(audioElemCounts+1);
|
n@159
|
371
|
n@159
|
372 var attributes = document.createElement("div");
|
n@159
|
373 attributes.setAttribute('class','attrib');
|
n@162
|
374 var id = attributePair("ID:","text",true);
|
n@159
|
375 id[1].value = audioElemCounts;
|
n@162
|
376 var url = attributePair("URL:","text",true);
|
n@159
|
377 id.forEach(function(item){attributes.appendChild(item);},false);
|
n@159
|
378 url.forEach(function(item){attributes.appendChild(item);},false);
|
n@159
|
379
|
n@159
|
380 node.appendChild(nodeTitle);
|
n@159
|
381 node.appendChild(attributes);
|
n@159
|
382
|
n@159
|
383 var removeButton = document.createElement("button");
|
n@159
|
384 removeButton.textContent = "Remove Audio Element";
|
n@159
|
385 removeButton.onclick = removeNode;
|
n@159
|
386 node.appendChild(removeButton);
|
n@159
|
387 return node;
|
n@159
|
388 }
|
n@159
|
389
|
n@159
|
390 function commentBox() {
|
n@159
|
391 var node = document.createElement('div');
|
n@159
|
392 node.setAttribute('class','head');
|
n@159
|
393 node.setAttribute('name','comment-question');
|
n@159
|
394 var nodeTitle = document.createElement('h4');
|
n@159
|
395 nodeTitle.textContent = "Comment Box";
|
n@159
|
396
|
n@159
|
397 var attributes = document.createElement('div');
|
n@159
|
398 attributes.setAttribute('class','attrib');
|
n@162
|
399 var id = attributePair("ID:",'text',true);
|
n@162
|
400 var question = attributePair("Question:",'text',true);
|
n@159
|
401 id.forEach(function(item){attributes.appendChild(item);},false);
|
n@159
|
402 question.forEach(function(item){attributes.appendChild(item);},false);
|
n@159
|
403
|
n@159
|
404 var removeButton = document.createElement("button");
|
n@159
|
405 removeButton.textContent = "Remove Comment Box";
|
n@159
|
406 removeButton.onclick = removeNode;
|
n@159
|
407
|
n@159
|
408 node.appendChild(nodeTitle);
|
n@159
|
409 node.appendChild(attributes);
|
n@159
|
410 node.appendChild(removeButton);
|
n@159
|
411 return node;
|
n@157
|
412 }
|
n@157
|
413 </script>
|
n@157
|
414 <style>
|
n@157
|
415 div {
|
n@157
|
416 padding: 2px;
|
n@157
|
417 margin-top: 2px;
|
n@157
|
418 margin-bottom: 2px;
|
n@157
|
419 }
|
n@157
|
420 div.head{
|
n@157
|
421 margin-left: 10px;
|
n@157
|
422 border: black;
|
n@157
|
423 border-width: 2px;
|
n@157
|
424 border-style: solid;
|
n@157
|
425 }
|
n@157
|
426 div.attrib{
|
n@157
|
427 margin-left:25px;
|
n@157
|
428 border: black;
|
n@157
|
429 border-width: 2px;
|
n@157
|
430 border-style: dashed;
|
n@157
|
431 margin-bottom: 10px;
|
n@157
|
432 }
|
n@157
|
433 </style>
|
n@157
|
434
|
n@156
|
435 </head>
|
n@156
|
436
|
n@156
|
437 <body>
|
n@157
|
438 <h1>Create Test Setup XML</h1>
|
n@162
|
439 <button id="validateXML" onclick="buttonClickedValidate();">Validate</button>
|
n@162
|
440 <button id="createXML" onclick="buttonClickedValidate();" disabled>Submit</button>
|
n@162
|
441 <span id="errorMessage" visibility="hidden"></span>
|
n@157
|
442 <div id="topLevelBody" align="left">
|
n@156
|
443 <!-- Interface goes here -->
|
n@157
|
444 <div name='test-setup'>
|
n@157
|
445 <div id="setup" class="head">
|
n@157
|
446 <h2>Setup Tag</h2>
|
n@157
|
447 <div id="setup-attribs" class="attrib">
|
n@157
|
448 <span>Interface</span>
|
n@157
|
449 <select id="interface">
|
n@157
|
450 <option value='APE'>APE</option>
|
n@157
|
451 </select>
|
n@157
|
452 <span>Project Return</span>
|
n@162
|
453 <input type="text" id="projectReturn" mandatory="false">
|
n@157
|
454 <span>Randomise Test Page Order</span>
|
n@157
|
455 <input id="randomisePageOrder" type="checkbox" value="false">
|
n@157
|
456 <span>Collect Session Metrics</span>
|
n@157
|
457 <input id="collectMetrics" type="checkbox">
|
n@157
|
458 </div>
|
n@157
|
459 <div id="globalPreTest" class="head">
|
n@157
|
460 <h3>Pre Test</h3>
|
n@157
|
461 <button id="addPreTestQ" onclick="event.srcElement.parentElement.appendChild(questionNode());">Add Pre Test Question</button>
|
n@157
|
462 <button id="addPreTestS" onclick="event.srcElement.parentElement.appendChild(statementNode());">Add Pre Test Statement</button>
|
n@157
|
463 </div>
|
n@157
|
464 <div id="globalPostTest" class="head">
|
n@157
|
465 <h3>Post Test</h3>
|
n@157
|
466 <button id="addPreTestQ" onclick="event.srcElement.parentElement.appendChild(questionNode());">Add Post Test Question</button>
|
n@157
|
467 <button id="addPreTestS" onclick="event.srcElement.parentElement.appendChild(statementNode());">Add Post Test Statement</button>
|
n@157
|
468 </div>
|
n@157
|
469 <div id="globalMetric" class="head">
|
n@157
|
470 <h3>Global Metrics</h3>
|
n@157
|
471 <div id="globalMetric-attrib" class="attrib">
|
n@157
|
472 <span>Test Timer</span>
|
n@157
|
473 <input type="checkbox" id="testTimer" />
|
n@157
|
474 <span>Element Playback Timer</span>
|
n@157
|
475 <input type="checkbox" id="elementTimer" />
|
n@157
|
476 <span>Element Initial Position</span>
|
n@157
|
477 <input type="checkbox" id="elementInitialPosition" />
|
n@157
|
478 <span>Element Tracker</span>
|
n@157
|
479 <input type="checkbox" id="elementTracker" />
|
n@157
|
480 <span>Element Flag Listened To</span>
|
n@163
|
481 <input type="checkbox" id="elementFlagListenedTo" />
|
n@157
|
482 <span>Element Flag Moved</span>
|
n@157
|
483 <input type="checkbox" id="elementFlagMoved" />
|
n@157
|
484 </div>
|
n@157
|
485 </div>
|
n@159
|
486 <button id="addAudioHolder" onclick="event.srcElement.parentElement.appendChild(audioHolderNode());">Add AudioHolder / Test Page</button>
|
n@157
|
487 </div>
|
n@157
|
488 </div>
|
n@156
|
489 </div>
|
n@156
|
490 </body>
|
n@156
|
491 </html>
|