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