annotate test_create/test_create_2.html @ 1814:a6d3b7b64943

Bug fixes in scripts: display plays in last timeline segment of each fragment (post last move); call sub-processes of generate_report.py in same folder (pass on argument); indentation in LaTeX file.
author Brecht De Man <b.deman@qmul.ac.uk>
date Wed, 16 Sep 2015 13:31:40 +0100
parents 68ed6e4ed3de
children
rev   line source
nickjillings@1511 1 <!DOCTYPE html>
nickjillings@1511 2 <html lang="en">
nickjillings@1511 3 <head>
nickjillings@1511 4 <meta charset="utf-8">
nickjillings@1511 5
nickjillings@1511 6 <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
nickjillings@1511 7 Remove this if you use the .htaccess -->
nickjillings@1511 8 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
nickjillings@1511 9
nickjillings@1511 10 <title>test_create_2</title>
nickjillings@1511 11 <meta name="description" content="">
nickjillings@1511 12 <meta name="author" content="Nicholas">
nickjillings@1511 13
nickjillings@1511 14 <meta name="viewport" content="width=device-width; initial-scale=1.0">
nickjillings@1511 15
nickjillings@1511 16 <script type="text/javascript">
nickjillings@1511 17 window.onload = function() {
nickjillings@1511 18 var dropBody = document.getElementById('dragFile');
nickjillings@1511 19 dropBody.addEventListener('dragover', handleDragOver, false);
nickjillings@1511 20 dropBody.addEventListener('dragenter',handleDragEnter,false);
nickjillings@1511 21 dropBody.addEventListener('dragleave',handleDragLeave,false);
nickjillings@1511 22 dropBody.addEventListener('drop', handleDrop,false);
nickjillings@1511 23 };
nickjillings@1511 24
nickjillings@1511 25 function handleDragOver(e) {
nickjillings@1511 26 e.stopPropagation();
nickjillings@1511 27 e.preventDefault();
nickjillings@1511 28 }
nickjillings@1511 29 function handleDragEnter(e) {
nickjillings@1511 30 e.stopPropagation();
nickjillings@1511 31 e.preventDefault();
nickjillings@1511 32 this.style.backgroundColor = '#AAFFAA';
nickjillings@1511 33 }
nickjillings@1511 34 function handleDragLeave(e) {
nickjillings@1511 35 e.stopPropagation();
nickjillings@1511 36 e.preventDefault();
nickjillings@1511 37 this.style.backgroundColor = "#FFFFFF";
nickjillings@1511 38 }
nickjillings@1511 39 function handleDrop(e) {
nickjillings@1511 40 e.stopPropagation();
nickjillings@1511 41 e.preventDefault();
nickjillings@1511 42
nickjillings@1511 43 var file = e.dataTransfer.files[0];
nickjillings@1511 44
nickjillings@1511 45 // Uses HTML5 FileAPI - https://w3c.github.io/FileAPI/#filereader-interface
nickjillings@1511 46 var reader = new FileReader();
nickjillings@1511 47 reader.onload = function() {
nickjillings@1511 48 var parse = new DOMParser();
nickjillings@1511 49 var xml = parse.parseFromString(reader.result,'text/xml');
nickjillings@1511 50 importXML(xml);
nickjillings@1511 51 };
nickjillings@1511 52 reader.readAsText(file);
nickjillings@1511 53
nickjillings@1511 54 }
nickjillings@1511 55
nickjillings@1511 56 function removeNode(event) {
nickjillings@1511 57 event.srcElement.parentElement.parentElement.removeChild(event.srcElement.parentElement);
nickjillings@1511 58 }
nickjillings@1511 59
nickjillings@1511 60 function removeNodeButton()
nickjillings@1511 61 {
nickjillings@1511 62 var button = document.createElement('button');
nickjillings@1511 63 button.textContent = 'Remove';
nickjillings@1511 64 button.onclick = function(event){removeNode(event);};
nickjillings@1511 65 return button;
nickjillings@1511 66 }
nickjillings@1511 67
nickjillings@1511 68 function attributePair(type,text,name,mandatory)
nickjillings@1511 69 {
nickjillings@1511 70 var node = document.createElement('div');
nickjillings@1511 71 node.setAttribute('name','attribute');
nickjillings@1511 72 var span = document.createElement('span');
nickjillings@1511 73 span.textContent = text;
nickjillings@1511 74 var input = document.createElement('input');
nickjillings@1511 75 input.type = type;
nickjillings@1511 76 input.setAttribute('attrib-name',name);
nickjillings@1511 77 input.setAttribute('mandatory',mandatory);
nickjillings@1511 78 node.appendChild(span);
nickjillings@1511 79 node.appendChild(input);
nickjillings@1511 80 return node;
nickjillings@1511 81 }
nickjillings@1511 82
nickjillings@1511 83 function buttonClickedValidate()
nickjillings@1511 84 {
nickjillings@1511 85 var allInputs = document.getElementsByTagName('input');
nickjillings@1511 86 for (var i=0; i<allInputs.length; i++)
nickjillings@1511 87 {goodNode(allInputs[i]);}
nickjillings@1511 88 var errList = document.getElementById('errorMessage');
nickjillings@1511 89 errList.innerHTML = "";
nickjillings@1511 90 validate(document.getElementById('topLevelBody'));
nickjillings@1511 91 var submit = document.getElementById('createXML');
nickjillings@1511 92 if (errList.innerHTML == "")
nickjillings@1511 93 {submit.disabled = false;}
nickjillings@1511 94 else {submit.disabled = true;}
nickjillings@1511 95 }
nickjillings@1511 96
nickjillings@1511 97 function validate(node)
nickjillings@1511 98 {
nickjillings@1511 99 var name = node.getAttribute('name');
nickjillings@1511 100 if (name != 'attribute' && name != 'element') {
nickjillings@1511 101 var child = node.children;
nickjillings@1511 102 for (var i=0; i<node.childElementCount; i++)
nickjillings@1511 103 {
nickjillings@1511 104 if (child[i].nodeName == "DIV")
nickjillings@1511 105 {
nickjillings@1511 106 validate(child[i]);
nickjillings@1511 107 }
nickjillings@1511 108 }
nickjillings@1511 109 } else if (name == 'attribute')
nickjillings@1511 110 {
nickjillings@1511 111 var child = node.children;
nickjillings@1511 112 for (var i=0; i<node.childElementCount; i++)
nickjillings@1511 113 {
nickjillings@1511 114 if (child[i].nodeName == "INPUT")
nickjillings@1511 115 {
nickjillings@1511 116 var mandatory = child[i].getAttribute('mandatory');
nickjillings@1511 117 if (mandatory == 'true') {mandatory = true;}
nickjillings@1511 118 else {mandatory = false;}
nickjillings@1511 119 if (child[i].type =='text' || child[i].type =='number')
nickjillings@1511 120 {
nickjillings@1511 121 if (child[i].value.length == 0)
nickjillings@1511 122 {
nickjillings@1511 123 if (mandatory == true) {errorNode(child[i]);}
nickjillings@1511 124 else {warningNode(child[i]);}
nickjillings@1511 125 } else {goodNode(child[i]);}
nickjillings@1511 126 }
nickjillings@1511 127 }
nickjillings@1511 128 }
nickjillings@1511 129 } else if (name == 'element')
nickjillings@1511 130 {
nickjillings@1511 131 var child = node.children;
nickjillings@1511 132 for (var i=0; i<node.childElementCount; i++)
nickjillings@1511 133 {
nickjillings@1511 134 if (child[i].nodeName == "INPUT")
nickjillings@1511 135 {
nickjillings@1511 136 if (child[i].value.length == 0){warningNode(child[i]);}
nickjillings@1511 137 else {goodNode(child[i]);}
nickjillings@1511 138 }
nickjillings@1511 139 }
nickjillings@1511 140 }
nickjillings@1511 141 }
nickjillings@1511 142
nickjillings@1511 143 function buttonClickedSubmit()
nickjillings@1511 144 {
nickjillings@1511 145 var xml = document.createElement('BrowserEvalProjectDocument');
nickjillings@1511 146 var dom = document.getElementById('topLevelBody');
nickjillings@1511 147 xml = extractXML(xml,dom);
nickjillings@1511 148 var drop = document.getElementById('errorMessage');
nickjillings@1511 149 createProjectSave(xml,drop);
nickjillings@1511 150 }
nickjillings@1511 151
nickjillings@1511 152 function createProjectSave(xmlDoc, injectPoint) {
nickjillings@1511 153 var parent = document.createElement("div");
nickjillings@1511 154 parent.appendChild(xmlDoc);
nickjillings@1511 155 var file = [parent.innerHTML];
nickjillings@1511 156 var bb = new Blob(file,{type : 'application/xml'});
nickjillings@1511 157 var dnlk = window.URL.createObjectURL(bb);
nickjillings@1511 158 var a = document.createElement("a");
nickjillings@1511 159 a.hidden = '';
nickjillings@1511 160 a.href = dnlk;
nickjillings@1511 161 a.download = "save.xml";
nickjillings@1511 162 a.textContent = "Save File";
nickjillings@1511 163 injectPoint.appendChild(a);
nickjillings@1511 164 }
nickjillings@1511 165
nickjillings@1511 166 function extractXML(xml,node)
nickjillings@1511 167 {
nickjillings@1511 168 if(node.getAttribute('class')=='attrib')
nickjillings@1511 169 {
nickjillings@1511 170 var children = node.children;
nickjillings@1511 171 for (var i=0; i<children.length; i++)
nickjillings@1511 172 {
nickjillings@1511 173 if (children[i].getAttribute('name')=='attribute')
nickjillings@1511 174 {
nickjillings@1511 175 var input = children[i].children[1];
nickjillings@1511 176 if (input.type == 'checkbox')
nickjillings@1511 177 {
nickjillings@1511 178 xml.setAttribute(input.getAttribute('attrib-name'),input.checked);
nickjillings@1511 179 } else {
nickjillings@1511 180 xml.setAttribute(input.getAttribute('attrib-name'),input.value);
nickjillings@1511 181 }
nickjillings@1511 182 } else if (children[i].getAttribute('name') == 'element')
nickjillings@1511 183 {
nickjillings@1511 184 var input = children[i].children[1];
nickjillings@1511 185 xml.textContent = input.value;
nickjillings@1511 186 }
nickjillings@1511 187 }
nickjillings@1511 188 return xml;
nickjillings@1511 189 } else if (node.getAttribute('node-name') != undefined)
nickjillings@1511 190 {
nickjillings@1511 191 var xmlDom = document.createElement(node.getAttribute('node-name'));
nickjillings@1511 192 xml.appendChild(xmlDom);
nickjillings@1511 193 var children = node.children;
nickjillings@1511 194 for (var i=0; i<children.length; i++)
nickjillings@1511 195 {
nickjillings@1511 196 if (children[i].nodeName == "DIV")
nickjillings@1511 197 {
nickjillings@1511 198 xmlDom = extractXML(xmlDom,children[i]);
nickjillings@1511 199 }
nickjillings@1511 200 }
nickjillings@1511 201 } else {
nickjillings@1511 202 var children = node.children;
nickjillings@1511 203 for (var i=0; i<children.length; i++)
nickjillings@1511 204 {
nickjillings@1511 205 if (children[i].nodeName == "DIV")
nickjillings@1511 206 {
nickjillings@1511 207 xml = extractXML(xml,children[i]);
nickjillings@1511 208 }
nickjillings@1511 209 }
nickjillings@1511 210 }
nickjillings@1511 211 return xml;
nickjillings@1511 212 }
nickjillings@1511 213
nickjillings@1511 214 function goodNode(node)
nickjillings@1511 215 {node.style.backgroundColor="#FFFFFF";}
nickjillings@1511 216
nickjillings@1511 217 function warningNode(node)
nickjillings@1511 218 {node.style.backgroundColor="#FFFF88";}
nickjillings@1511 219
nickjillings@1511 220 function errorNode(node)
nickjillings@1511 221 {
nickjillings@1511 222 var errLog = document.getElementById('errorMessage');
nickjillings@1511 223 var div = document.createElement('div');
nickjillings@1511 224 var span = document.createElement('span');
nickjillings@1511 225 span.textContent = 'Invalid Data: ';
nickjillings@1511 226 var list = [node.getAttribute('attrib-name')];
nickjillings@1511 227 var pNode = node;
nickjillings@1511 228 while (pNode.id != 'topLevelBody')
nickjillings@1511 229 {
nickjillings@1511 230 if (pNode.getAttribute('node-name') != undefined)
nickjillings@1511 231 {list.push(pNode.getAttribute('node-name'));}
nickjillings@1511 232 pNode = pNode.parentElement;
nickjillings@1511 233 }
nickjillings@1511 234 for (var i=list.length-1; i>=0; i--)
nickjillings@1511 235 {
nickjillings@1511 236 span.textContent = span.textContent +' ->'+ list[i];
nickjillings@1511 237 }
nickjillings@1511 238 div.appendChild(span);
nickjillings@1511 239 errLog.appendChild(div);
nickjillings@1511 240 errLog.style.visibility = 'visible';
nickjillings@1511 241 node.style.backgroundColor="#FF0000";
nickjillings@1511 242 }
nickjillings@1511 243
nickjillings@1511 244 function importXML(xml)
nickjillings@1511 245 {
nickjillings@1511 246 xml = xml.children[0];
nickjillings@1511 247 var setup = xml.getElementsByTagName('setup')[0];
nickjillings@1511 248 var DOM = document.getElementById('setup');
nickjillings@1511 249 // Insert any setup node attributes
nickjillings@1511 250 setAttributes(DOM,setup);
nickjillings@1511 251
nickjillings@1511 252 for (var i=0; i<setup.childElementCount; i++)
nickjillings@1511 253 {
nickjillings@1511 254 var node = DOM.getElementsByClassName(setup.children[i].nodeName);
nickjillings@1511 255 if (node.length != 0)
nickjillings@1511 256 {
nickjillings@1511 257 node = node[0];
nickjillings@1511 258 setAttributes(node,setup.children[i]);
nickjillings@1511 259 buildNode(node,setup.children[i]);
nickjillings@1511 260 }
nickjillings@1511 261 }
nickjillings@1511 262
nickjillings@1511 263 var holders = xml.getElementsByTagName('audioHolder');
nickjillings@1511 264 for (var i=0; i<holders.length; i++)
nickjillings@1511 265 {
nickjillings@1511 266 var node = addAudioHolder();
nickjillings@1511 267 document.getElementById('topLevelBody').appendChild(node);
nickjillings@1511 268 setAttributes(node,holders[i]);
nickjillings@1511 269 buildNode(node,holders[i]);
nickjillings@1511 270 }
nickjillings@1511 271 }
nickjillings@1511 272
nickjillings@1511 273 function setAttributes(node,xml)
nickjillings@1511 274 {
nickjillings@1511 275 var attribs = node.getElementsByClassName('attrib');
nickjillings@1511 276 if (attribs.length != 0){
nickjillings@1511 277 attribs = attribs[0];
nickjillings@1511 278 for (var i=0; i < attribs.children.length; i++)
nickjillings@1511 279 {
nickjillings@1511 280 if(attribs.children[i].getAttribute('name')=='attribute'){
nickjillings@1511 281 var input = attribs.children[i].children[1];
nickjillings@1511 282 var value = xml.attributes.getNamedItem(input.getAttribute('attrib-name'));
nickjillings@1511 283 if (value != undefined) {value = value.value;}
nickjillings@1511 284 if (input.type == 'checkbox')
nickjillings@1511 285 {input.checked = value;}
nickjillings@1511 286 else
nickjillings@1511 287 {input.value = value;}
nickjillings@1511 288 } else if(attribs.children[i].getAttribute('name')=='element'){
nickjillings@1511 289 var input = attribs.children[i].children[1];
nickjillings@1511 290 input.value = xml.textContent;
nickjillings@1511 291 }
nickjillings@1511 292 }
nickjillings@1511 293 }
nickjillings@1511 294 }
nickjillings@1511 295
nickjillings@1511 296 function buildNode(parent,xml)
nickjillings@1511 297 {
nickjillings@1511 298 for (var i=0; i<xml.childElementCount; i++)
nickjillings@1511 299 {
nickjillings@1511 300 var child = xml.children[i];
nickjillings@1511 301 var name = child.nodeName;
nickjillings@1511 302 var node = null;
nickjillings@1511 303 if (name == 'statement'){node = addPPStatement();}
nickjillings@1511 304 else if (name == 'question' || name == 'number'){node = addPPQuestion();}
nickjillings@1511 305 else if (name == 'checkbox'){node = addPPCheckbox();}
nickjillings@1511 306 else if (name == 'radio'){node = addPPRadio();}
nickjillings@1511 307 else if (name == 'metricEnable'){node = addMetricEnable();}
nickjillings@1511 308 else if (name == 'check'){node = addInterfaceCheck();}
nickjillings@1511 309 else if (name == 'option'){node = addInterfaceOption();}
nickjillings@1511 310 else if (name == 'scale'){node = addScaleMarker();}
nickjillings@1511 311 else if (name == 'audioHolder'){node = addAudioHolder();}
nickjillings@1511 312 else if (name == 'audioElements'){node = addAudioElement();}
nickjillings@1511 313 else if (name == 'commentQuestion'){node = addExtraComment();}
nickjillings@1511 314 else if (name == 'interface'){node = parent.getElementsByClassName('interface')[0];}
nickjillings@1511 315 else if (name == 'preTest' || name == 'PreTest')
nickjillings@1511 316 {
nickjillings@1511 317 node = parent.getElementsByClassName('preTest')[0];
nickjillings@1511 318 }
nickjillings@1511 319 else if (name == 'postTest' || name == 'PostTest')
nickjillings@1511 320 {
nickjillings@1511 321 node = parent.getElementsByClassName('postTest')[0];
nickjillings@1511 322 }
nickjillings@1511 323 else if (name == 'title' || name == 'commentBoxPrefix')
nickjillings@1511 324 {
nickjillings@1511 325 node = parent.getElementsByClassName(name)[0];
nickjillings@1511 326 }
nickjillings@1511 327 if (node != null) {
nickjillings@1511 328 if (name == 'radio' || name == 'checkbox')
nickjillings@1511 329 {
nickjillings@1511 330 buildRadio(node,xml.children[i]);
nickjillings@1511 331 parent.appendChild(node);
nickjillings@1511 332 } else
nickjillings@1511 333 {
nickjillings@1511 334 setAttributes(node,child);
nickjillings@1511 335 parent.appendChild(node);
nickjillings@1511 336 buildNode(node,child);
nickjillings@1511 337 }
nickjillings@1511 338 } else {
nickjillings@1511 339 var node = createHead(name,name,'h3');
nickjillings@1511 340
nickjillings@1511 341 var attrib = document.createElement('div');
nickjillings@1511 342 attrib.className = 'attrib';
nickjillings@1511 343 for (var j=0; j<child.attributes.length; j++)
nickjillings@1511 344 {
nickjillings@1511 345 attrib.appendChild(attributePair('text',child.attributes[j].name,child.attributes[j].name,false));
nickjillings@1511 346 }
nickjillings@1511 347
nickjillings@1511 348 node.appendChild(attrib);
nickjillings@1511 349 parent.appendChild(node);
nickjillings@1511 350 setAttributes(node,child);
nickjillings@1511 351 /*
nickjillings@1511 352 buildNode(node,child);
nickjillings@1511 353 */
nickjillings@1511 354 }
nickjillings@1511 355 }
nickjillings@1511 356 }
nickjillings@1511 357
nickjillings@1511 358 function buildRadio(node,xml)
nickjillings@1511 359 {
nickjillings@1511 360 setAttributes(node,xml);
nickjillings@1511 361 setAttributes(node.getElementsByClassName('statement')[0],xml.getElementsByTagName('statement')[0]);
nickjillings@1511 362 var options = xml.getElementsByTagName('option');
nickjillings@1511 363 var addOptionButton = node.getElementsByTagName('button')[2];
nickjillings@1511 364 for (var i=0; i<options.length; i++)
nickjillings@1511 365 {
nickjillings@1511 366 addOptionButton.click();
nickjillings@1511 367 setAttributes(node.getElementsByClassName('option')[i],options[i]);
nickjillings@1511 368 }
nickjillings@1511 369 }
nickjillings@1511 370
nickjillings@1511 371 function createHead(name,title,size)
nickjillings@1511 372 {
nickjillings@1511 373 var node = document.createElement('div');
nickjillings@1511 374 node.setAttribute('class','head '+name);
nickjillings@1511 375 node.setAttribute('node-name',name);
nickjillings@1511 376 if (size == undefined)
nickjillings@1511 377 {var node_T = document.createElement('h3');}
nickjillings@1511 378 else{var node_T = document.createElement(size);}
nickjillings@1511 379 node_T.textContent = title;
nickjillings@1511 380 node.appendChild(node_T);
nickjillings@1511 381 node.appendChild(removeNodeButton());
nickjillings@1511 382 return node;
nickjillings@1511 383 }
nickjillings@1511 384
nickjillings@1511 385 function addPretestNode()
nickjillings@1511 386 {
nickjillings@1511 387 var node = createHead('preTest', 'Pre Test','h3');
nickjillings@1511 388 var addStatement = document.createElement('button');
nickjillings@1511 389 addStatement.textContent = 'Add Statement';
nickjillings@1511 390 addStatement.onclick = function(){event.srcElement.parentElement.appendChild(addPPStatement());};
nickjillings@1511 391 node.appendChild(addStatement);
nickjillings@1511 392 var addQuestion = document.createElement('button');
nickjillings@1511 393 addQuestion.textContent = 'Add Question';
nickjillings@1511 394 addQuestion.onclick = function(){event.srcElement.parentElement.appendChild(addPPQuestion());};
nickjillings@1511 395 node.appendChild(addQuestion);
nickjillings@1511 396 var addCheckbox = document.createElement('button');
nickjillings@1511 397 addCheckbox.textContent = 'Add Checkbox';
nickjillings@1511 398 addCheckbox.onclick = function(){event.srcElement.parentElement.appendChild(addPPCheckbox());};
nickjillings@1511 399 node.appendChild(addCheckbox);
nickjillings@1511 400 var addRadio = document.createElement('button');
nickjillings@1511 401 addRadio.textContent = 'Add Checkbox';
nickjillings@1511 402 addRadio.onclick = function(){event.srcElement.parentElement.appendChild(addPPRadio());};
nickjillings@1511 403 node.appendChild(addRadio);
nickjillings@1511 404 return node;
nickjillings@1511 405 };
nickjillings@1511 406
nickjillings@1511 407 function addPosttestNode()
nickjillings@1511 408 {
nickjillings@1511 409 var node = createHead('postTest', 'Post Test','h3');
nickjillings@1511 410 var addStatement = document.createElement('button');
nickjillings@1511 411 addStatement.textContent = 'Add Statement';
nickjillings@1511 412 addStatement.onclick = function(){event.srcElement.parentElement.appendChild(addPPStatement());};
nickjillings@1511 413 node.appendChild(addStatement);
nickjillings@1511 414 var addQuestion = document.createElement('button');
nickjillings@1511 415 addQuestion.textContent = 'Add Question';
nickjillings@1511 416 addQuestion.onclick = function(){event.srcElement.parentElement.appendChild(addPPQuestion());};
nickjillings@1511 417 node.appendChild(addQuestion);
nickjillings@1511 418 var addCheckbox = document.createElement('button');
nickjillings@1511 419 addCheckbox.textContent = 'Add Checkbox';
nickjillings@1511 420 addCheckbox.onclick = function(){event.srcElement.parentElement.appendChild(addPPCheckbox());};
nickjillings@1511 421 node.appendChild(addCheckbox);
nickjillings@1511 422 var addRadio = document.createElement('button');
nickjillings@1511 423 addRadio.textContent = 'Add Checkbox';
nickjillings@1511 424 addRadio.onclick = function(){event.srcElement.parentElement.appendChild(addPPRadio());};
nickjillings@1511 425 node.appendChild(addRadio);
nickjillings@1511 426 return node;
nickjillings@1511 427 };
nickjillings@1511 428
nickjillings@1511 429 function addPPStatement()
nickjillings@1511 430 {
nickjillings@1511 431 var node = createHead('statement', 'Statement','h4');
nickjillings@1511 432 var attrib = document.createElement('div');
nickjillings@1511 433 attrib.className = "attrib";
nickjillings@1511 434 var element = document.createElement('div');
nickjillings@1511 435 element.setAttribute('name','element');
nickjillings@1511 436 var span = document.createElement('span');
nickjillings@1511 437 span.textContent = "Enter statement: ";
nickjillings@1511 438 element.appendChild(span);
nickjillings@1511 439 var input = document.createElement('input');
nickjillings@1511 440 input.type = "text";
nickjillings@1511 441 input.style.width = "500px";
nickjillings@1511 442 element.appendChild(input);
nickjillings@1511 443 attrib.appendChild(element);
nickjillings@1511 444 node.appendChild(attrib);
nickjillings@1511 445 return node;
nickjillings@1511 446 };
nickjillings@1511 447 function addPPQuestion()
nickjillings@1511 448 {
nickjillings@1511 449 var node = createHead('question', 'Question','h4');
nickjillings@1511 450 var attrib = document.createElement('div');
nickjillings@1511 451 attrib.className = "attrib";
nickjillings@1511 452 attrib.appendChild(attributePair('text','ID: ','id',true));
nickjillings@1511 453 attrib.appendChild(attributePair('checkbox','Mandatory: ','mandatory',false));
nickjillings@1511 454 attrib.appendChild(attributePair('text','Box size: ','boxsize',false));
nickjillings@1511 455 var element = document.createElement('div');
nickjillings@1511 456 element.setAttribute('name','element');
nickjillings@1511 457 var span = document.createElement('span');
nickjillings@1511 458 span.textContent = "Enter Question: ";
nickjillings@1511 459 element.appendChild(span);
nickjillings@1511 460 var input = document.createElement('input');
nickjillings@1511 461 input.type = "text";
nickjillings@1511 462 input.style.width = "500px";
nickjillings@1511 463 element.appendChild(input);
nickjillings@1511 464 attrib.appendChild(element);
nickjillings@1511 465 node.appendChild(attrib);
nickjillings@1511 466 return node;
nickjillings@1511 467 };
nickjillings@1511 468 function addPPCheckbox()
nickjillings@1511 469 {
nickjillings@1511 470 var node = createHead('checkbox', 'Checkbox','h4');
nickjillings@1511 471 var attrib = document.createElement('div');
nickjillings@1511 472 attrib.className = "attrib";
nickjillings@1511 473 attrib.appendChild(attributePair('text','ID: ','id',true));
nickjillings@1511 474 attrib.appendChild(attributePair('checkbox','Mandatory: ','mandatory',false));
nickjillings@1511 475 node.appendChild(attrib);
nickjillings@1511 476 node.appendChild(addPPStatement());
nickjillings@1511 477 var addOption = document.createElement('button');
nickjillings@1511 478 addOption.textContent = 'Add Checkbox';
nickjillings@1511 479 addOption.onclick = function() {
nickjillings@1511 480 var node = createHead('option', 'Option','h4');
nickjillings@1511 481 var attrib = document.createElement('div');
nickjillings@1511 482 attrib.className = "attrib";
nickjillings@1511 483 attrib.appendChild(attributePair('text','ID: ','id',true));
nickjillings@1511 484 var element = document.createElement('div');
nickjillings@1511 485 element.setAttribute('name','element');
nickjillings@1511 486 var span = document.createElement('span');
nickjillings@1511 487 span.textContent = "Enter Text: ";
nickjillings@1511 488 var input = document.createElement('input');
nickjillings@1511 489 input.type = 'text';
nickjillings@1511 490 element.appendChild(span);
nickjillings@1511 491 element.appendChild(input);
nickjillings@1511 492 attrib.appendChild(element);
nickjillings@1511 493 node.appendChild(attrib);
nickjillings@1511 494 event.srcElement.parentElement.appendChild(node);
nickjillings@1511 495 };
nickjillings@1511 496 node.appendChild(addOption);
nickjillings@1511 497 return node;
nickjillings@1511 498 };
nickjillings@1511 499
nickjillings@1511 500 function addPPRadio()
nickjillings@1511 501 {
nickjillings@1511 502 var node = createHead('radio', 'Radio','h4');
nickjillings@1511 503 var attrib = document.createElement('div');
nickjillings@1511 504 attrib.className = "attrib";
nickjillings@1511 505 attrib.appendChild(attributePair('text','ID: ','id',true));
nickjillings@1511 506 attrib.appendChild(attributePair('checkbox','Mandatory: ','mandatory',false));
nickjillings@1511 507 node.appendChild(attrib);
nickjillings@1511 508 node.appendChild(addPPStatement());
nickjillings@1511 509 var addOption = document.createElement('button');
nickjillings@1511 510 addOption.textContent = 'Add Radio';
nickjillings@1511 511 addOption.onclick = function() {
nickjillings@1511 512 var node = createHead('option', 'Option','h4');
nickjillings@1511 513 var attrib = document.createElement('div');
nickjillings@1511 514 attrib.className = "attrib";
nickjillings@1511 515 attrib.appendChild(attributePair('text','Name: ','name',true));
nickjillings@1511 516 var element = document.createElement('div');
nickjillings@1511 517 element.setAttribute('name','element');
nickjillings@1511 518 var span = document.createElement('span');
nickjillings@1511 519 span.textContent = "Enter Text: ";
nickjillings@1511 520 var input = document.createElement('input');
nickjillings@1511 521 input.type = 'text';
nickjillings@1511 522 element.appendChild(span);
nickjillings@1511 523 element.appendChild(input);
nickjillings@1511 524 attrib.appendChild(element);
nickjillings@1511 525 node.appendChild(attrib);
nickjillings@1511 526 event.srcElement.parentElement.appendChild(node);
nickjillings@1511 527 };
nickjillings@1511 528 node.appendChild(addOption);
nickjillings@1511 529 return node;
nickjillings@1511 530 };
nickjillings@1511 531
nickjillings@1511 532 function addMetricEnable()
nickjillings@1511 533 {
nickjillings@1511 534 var node = createHead('metricEnable', '','h4');
nickjillings@1511 535 var attrib = document.createElement('div');
nickjillings@1511 536 attrib.className = "attrib";
nickjillings@1511 537 var element = document.createElement('div');
nickjillings@1511 538 element.setAttribute('name','element');
nickjillings@1511 539 var span = document.createElement('span');
nickjillings@1511 540 span.textContent = "Enter Metric Name: ";
nickjillings@1511 541 element.appendChild(span);
nickjillings@1511 542 var input = document.createElement('input');
nickjillings@1511 543 input.type = "text";
nickjillings@1511 544 input.style.width = "500px";
nickjillings@1511 545 element.appendChild(input);
nickjillings@1511 546 attrib.appendChild(element);
nickjillings@1511 547 node.appendChild(attrib);
nickjillings@1511 548 return node;
nickjillings@1511 549 };
nickjillings@1511 550
nickjillings@1511 551 function addInterfaceCheck()
nickjillings@1511 552 {
nickjillings@1511 553 var node = createHead('check', 'Check','h4');
nickjillings@1511 554 var attrib = document.createElement('div');
nickjillings@1511 555 attrib.className = "attrib";
nickjillings@1511 556 attrib.appendChild(attributePair('text','Name','name',true));
nickjillings@1511 557 node.appendChild(attrib);
nickjillings@1511 558 return node;
nickjillings@1511 559 }
nickjillings@1511 560 function addInterfaceOption()
nickjillings@1511 561 {
nickjillings@1511 562 var node = createHead('option', 'Option','h4');
nickjillings@1511 563 var attrib = document.createElement('div');
nickjillings@1511 564 attrib.className = "attrib";
nickjillings@1511 565 attrib.appendChild(attributePair('text','Name','name',true));
nickjillings@1511 566 node.appendChild(attrib);
nickjillings@1511 567 return node;
nickjillings@1511 568 }
nickjillings@1511 569
nickjillings@1511 570
nickjillings@1511 571 function addAudioHolder()
nickjillings@1511 572 {
nickjillings@1511 573 var node = createHead('audioHolder','Audio Holder / Test Page','h2');
nickjillings@1511 574 var attrib = document.createElement('div');
nickjillings@1511 575 attrib.className = "attrib";
nickjillings@1511 576 node.appendChild(attrib);
nickjillings@1511 577
nickjillings@1511 578 attrib.appendChild(attributePair('text','ID: ','id',true));
nickjillings@1511 579 attrib.appendChild(attributePair('url','Host URL: ','hostURL',false));
nickjillings@1511 580 attrib.appendChild(attributePair('number','Sample Rate: ','sampleRate',false));
nickjillings@1511 581 attrib.appendChild(attributePair('checkbox','Randomise Fragment Order: ','randomiseOrder',false));
nickjillings@1511 582 attrib.appendChild(attributePair('number','Repeat Count: ','repeatCount',false));
nickjillings@1511 583 attrib.appendChild(attributePair('checkbox','Loop Fragments: ','loop',false));
nickjillings@1511 584 attrib.appendChild(attributePair('checkbox','Fragment Comment Boxes: ','enableComments',false));
nickjillings@1511 585
nickjillings@1511 586 node.appendChild(addPretestNode());
nickjillings@1511 587
nickjillings@1511 588 node.appendChild(addPosttestNode());
nickjillings@1511 589
nickjillings@1511 590 var interfaceNode = createHead('interface','Interface','h3');
nickjillings@1511 591 var addOption = document.createElement('button');
nickjillings@1511 592 addOption.textContent = 'Add Option';
nickjillings@1511 593 addOption.onclick = function(){event.srcElement.parentElement.appendChild(addInterfaceOption());};
nickjillings@1511 594 interfaceNode.appendChild(addOption);
nickjillings@1511 595 var scale = document.createElement('button');
nickjillings@1511 596 scale.textContent = 'Add scale';
nickjillings@1511 597 scale.onclick = function(){event.srcElement.parentElement.appendChild(addScaleMarker());};
nickjillings@1511 598 interfaceNode.appendChild(scale);
nickjillings@1511 599
nickjillings@1511 600 var PageTitle = createHead('title','Page Title','h4');
nickjillings@1511 601 var attrib = document.createElement('div');
nickjillings@1511 602 attrib.className='attrib';
nickjillings@1511 603 var element = document.createElement('div');
nickjillings@1511 604 element.setAttribute('name','element');
nickjillings@1511 605 var span = document.createElement('span');
nickjillings@1511 606 span.textContent = 'Page Title: ';
nickjillings@1511 607 element.appendChild(span);
nickjillings@1511 608 var input = document.createElement('input');
nickjillings@1511 609 input.type = 'text';
nickjillings@1511 610 input.style.width = "500px";
nickjillings@1511 611 element.appendChild(input);
nickjillings@1511 612 attrib.appendChild(element);
nickjillings@1511 613 PageTitle.appendChild(attrib);
nickjillings@1511 614 interfaceNode.appendChild(PageTitle);
nickjillings@1511 615
nickjillings@1511 616 var commentBoxPrefix = createHead('commentBoxPrefix','Comment Box Prefix','h4');
nickjillings@1511 617 var attrib = document.createElement('div');
nickjillings@1511 618 attrib.className='attrib';
nickjillings@1511 619 var element = document.createElement('div');
nickjillings@1511 620 element.setAttribute('name','element');
nickjillings@1511 621 var span = document.createElement('span');
nickjillings@1511 622 span.textContent = 'Prefix: ';
nickjillings@1511 623 element.appendChild(span);
nickjillings@1511 624 var input = document.createElement('input');
nickjillings@1511 625 input.type = 'text';
nickjillings@1511 626 input.style.width = "500px";
nickjillings@1511 627 element.appendChild(input);
nickjillings@1511 628 attrib.appendChild(element);
nickjillings@1511 629 commentBoxPrefix.appendChild(attrib);
nickjillings@1511 630 interfaceNode.appendChild(commentBoxPrefix);
nickjillings@1511 631
nickjillings@1511 632 node.appendChild(interfaceNode);
nickjillings@1511 633
nickjillings@1511 634 var addElement = document.createElement('button');
nickjillings@1511 635 addElement.textContent = 'Add Audio Element';
nickjillings@1511 636 addElement.onclick = function(){event.srcElement.parentElement.appendChild(addAudioElement());};
nickjillings@1511 637 node.appendChild(addElement);
nickjillings@1511 638
nickjillings@1511 639 var addCQ = document.createElement('button');
nickjillings@1511 640 addCQ.textContent = 'Add Comment Box';
nickjillings@1511 641 addCQ.onclick = function(){event.srcElement.parentElement.appendChild(addExtraComment());};
nickjillings@1511 642 node.appendChild(addCQ);
nickjillings@1511 643
nickjillings@1511 644 return node;
nickjillings@1511 645 };
nickjillings@1511 646
nickjillings@1511 647 function addScaleMarker(){
nickjillings@1511 648 var node = createHead('scale','Scale','h4');
nickjillings@1511 649 var attrib = document.createElement('div');
nickjillings@1511 650 attrib.className = "attrib";
nickjillings@1511 651 node.appendChild(attrib);
nickjillings@1511 652 attrib.appendChild(attributePair('number','Position','position',true));
nickjillings@1511 653 var element = document.createElement('div');
nickjillings@1511 654 element.setAttribute('name','element');
nickjillings@1511 655 var span = document.createElement('span');
nickjillings@1511 656 span.textContent = 'Marker Text (Optional): ';
nickjillings@1511 657 element.appendChild(span);
nickjillings@1511 658 var input = document.createElement('input');
nickjillings@1511 659 input.type = 'text';
nickjillings@1511 660 element.appendChild(input);
nickjillings@1511 661 attrib.appendChild(element);
nickjillings@1511 662 return node;
nickjillings@1511 663 };
nickjillings@1511 664
nickjillings@1511 665 function addAudioElement()
nickjillings@1511 666 {
nickjillings@1511 667 var node = createHead('audioElements','Audio Element');
nickjillings@1511 668 var attrib = document.createElement('div');
nickjillings@1511 669 attrib.className = "attrib";
nickjillings@1511 670 node.appendChild(attrib);
nickjillings@1511 671
nickjillings@1511 672 attrib.appendChild(attributePair('text','ID: ','id',true));
nickjillings@1511 673 attrib.appendChild(attributePair('text','URL: ','url',true));
nickjillings@1511 674 attrib.appendChild(attributePair('text','Type: ','type',false));
nickjillings@1511 675
nickjillings@1511 676 return node;
nickjillings@1511 677 };
nickjillings@1511 678
nickjillings@1511 679 function addExtraComment()
nickjillings@1511 680 {
nickjillings@1511 681 var node = createHead('CommentQuestion','Comment');
nickjillings@1511 682 var attrib = document.createElement('div');
nickjillings@1511 683 attrib.className = "attrib";
nickjillings@1511 684 node.appendChild(attrib);
nickjillings@1511 685 attrib.appendChild(attributePair('text','ID: ','id',true));
nickjillings@1511 686
nickjillings@1511 687 var element = document.createElement('div');
nickjillings@1511 688 element.setAttribute('name','element');
nickjillings@1511 689 var span = document.createElement('span');
nickjillings@1511 690 span.textContent = 'Question: ';
nickjillings@1511 691 element.appendChild(span);
nickjillings@1511 692 var input = document.createElement('input');
nickjillings@1511 693 input.type = 'text';
nickjillings@1511 694 input.style.width = "500px";
nickjillings@1511 695 element.appendChild(input);
nickjillings@1511 696 attrib.appendChild(element);
nickjillings@1511 697 return node;
nickjillings@1511 698 }
nickjillings@1511 699 </script>
nickjillings@1511 700
nickjillings@1511 701 <style>
nickjillings@1511 702 h4 {margin: 0px;}
nickjillings@1511 703 div {
nickjillings@1511 704 padding: 2px;
nickjillings@1511 705 margin-top: 2px;
nickjillings@1511 706 margin-bottom: 2px;
nickjillings@1511 707 }
nickjillings@1511 708 div.head{
nickjillings@1511 709 margin-left: 10px;
nickjillings@1511 710 border: black;
nickjillings@1511 711 border-width: 2px;
nickjillings@1511 712 border-style: solid;
nickjillings@1511 713 }
nickjillings@1511 714 div.attrib{
nickjillings@1511 715 margin-left:25px;
nickjillings@1511 716 border: black;
nickjillings@1511 717 border-width: 2px;
nickjillings@1511 718 border-style: dashed;
nickjillings@1511 719 margin-bottom: 10px;
nickjillings@1511 720 display: table;
nickjillings@1511 721 background-color: rgb(200,255,255);
nickjillings@1511 722 }
nickjillings@1511 723 div.attrib div {
nickjillings@1511 724 width: auto;
nickjillings@1511 725 position: relative;
nickjillings@1511 726 display: table-cell;
nickjillings@1511 727 }
nickjillings@1511 728 div#dragFile{
nickjillings@1511 729 height:100px;
nickjillings@1511 730 border-width: 2px;
nickjillings@1511 731 border-style: dashed;
nickjillings@1511 732 margin-bottom: 10px;
nickjillings@1511 733 }
nickjillings@1511 734 </style>
nickjillings@1511 735 </head>
nickjillings@1511 736
nickjillings@1511 737 <body>
nickjillings@1511 738 <h1>Create Test Setup XML</h1>
nickjillings@1511 739 <div id="dragFile">
nickjillings@1511 740 <span>Drag and Drop an XML specification file here to auto-load.</span>
nickjillings@1511 741 </div>
nickjillings@1511 742 <button id="validateXML" onclick="buttonClickedValidate();">Validate</button>
nickjillings@1511 743 <button id="createXML" onclick="buttonClickedSubmit();" disabled>Submit</button>
nickjillings@1511 744 <div id="errorMessage" visibility="hidden"></div>
nickjillings@1511 745 <div id="topLevelBody" align="left">
nickjillings@1511 746 <div id='setup' class="head setup" node-name='setup'>
nickjillings@1511 747 <h2>Setup Node</h2>
nickjillings@1511 748 <div class="attrib">
nickjillings@1511 749 <div name="attribute">
nickjillings@1511 750 <span>Interface: </span>
nickjillings@1511 751 <input type="text" attrib-name='interface' mandatory='true'/>
nickjillings@1511 752 </div>
nickjillings@1511 753 <div name="attribute">
nickjillings@1511 754 <span>Project Return: </span>
nickjillings@1511 755 <input type="url" attrib-name='projectReturn'/>
nickjillings@1511 756 </div>
nickjillings@1511 757 <div name="attribute">
nickjillings@1511 758 <span>Randomise Page Order: </span>
nickjillings@1511 759 <input type="checkbox" attrib-name='randomiseOrder'/>
nickjillings@1511 760 </div>
nickjillings@1511 761 <div name="attribute">
nickjillings@1511 762 <span>Collect Metrics: </span>
nickjillings@1511 763 <input type="checkbox" attrib-name='collectMetrics'/>
nickjillings@1511 764 </div>
nickjillings@1511 765 </div>
nickjillings@1511 766 <div class="head PreTest" node-name="preTest">
nickjillings@1511 767 <h3>Pre Test</h3>
nickjillings@1511 768 <button onclick="event.srcElement.parentElement.appendChild(addPPStatement());">Add Statement</button>
nickjillings@1511 769 <button onclick="event.srcElement.parentElement.appendChild(addPPQuestion());">Add Question</button>
nickjillings@1511 770 <button onclick="event.srcElement.parentElement.appendChild(addPPCheckbox());">Add Checkbox</button>
nickjillings@1511 771 <button onclick="event.srcElement.parentElement.appendChild(addPPRadio());">Add Radio</button>
nickjillings@1511 772 </div>
nickjillings@1511 773 <div class="head PostTest" node-name="postTest">
nickjillings@1511 774 <h3>Post Test</h3>
nickjillings@1511 775 <button onclick="event.srcElement.parentElement.appendChild(addPPStatement());">Add Statement</button>
nickjillings@1511 776 <button onclick="event.srcElement.parentElement.appendChild(addPPQuestion());">Add Question</button>
nickjillings@1511 777 <button onclick="event.srcElement.parentElement.appendChild(addPPCheckbox());">Add Checkbox</button>
nickjillings@1511 778 <button onclick="event.srcElement.parentElement.appendChild(addPPRadio());">Add Radio</button>
nickjillings@1511 779 </div>
nickjillings@1511 780 <div class="head Metric" node-name="metrics">
nickjillings@1511 781 <h3>Metrics</h3>
nickjillings@1511 782 <button onclick="event.srcElement.parentElement.appendChild(addMetricEnable());">Add Metric Enable</button>
nickjillings@1511 783 </div>
nickjillings@1511 784 <div class="head interface" node-name="interface">
nickjillings@1511 785 <h3>Interface</h3>
nickjillings@1511 786 <button onclick="event.srcElement.parentElement.appendChild(addInterfaceCheck());">Add Check</button>
nickjillings@1511 787 <button onclick="event.srcElement.parentElement.appendChild(addInterfaceOption());">Add Option</button>
nickjillings@1511 788 </div>
nickjillings@1511 789 </div>
nickjillings@1511 790 <button onclick="event.srcElement.parentElement.appendChild(addAudioHolder());">Add Audio Holder</button>
nickjillings@1511 791 </div>
nickjillings@1511 792 </body>
nickjillings@1511 793 </html>