annotate test_create/test_core.js @ 1201:5e2e3becc292

Started Bug #1604: New test dialog windows now use <label> instead of span.
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Mon, 22 Feb 2016 14:20:50 +0000
parents 525608556601
children 27be75c51b5c
rev   line source
n@1170 1 var interfaceSpecs;
n@1170 2 var xmlHttp;
n@1170 3 var popupObject;
n@1170 4 var popupStateNodes;
n@1170 5 var specification;
n@1170 6 var convert;
n@1170 7 var attributeText;
n@1170 8
n@1170 9 // Firefox does not have an XMLDocument.prototype.getElementsByName
n@1170 10 // and there is no searchAll style command, this custom function will
n@1170 11 // search all children recusrively for the name. Used for XSD where all
n@1170 12 // element nodes must have a name and therefore can pull the schema node
n@1170 13 XMLDocument.prototype.getAllElementsByName = function(name)
n@1170 14 {
n@1170 15 name = String(name);
n@1170 16 var selected = this.documentElement.getAllElementsByName(name);
n@1170 17 return selected;
n@1170 18 }
n@1170 19
n@1170 20 Element.prototype.getAllElementsByName = function(name)
n@1170 21 {
n@1170 22 name = String(name);
n@1170 23 var selected = [];
n@1170 24 var node = this.firstElementChild;
n@1170 25 while(node != null)
n@1170 26 {
n@1170 27 if (node.getAttribute('name') == name)
n@1170 28 {
n@1170 29 selected.push(node);
n@1170 30 }
n@1170 31 if (node.childElementCount > 0)
n@1170 32 {
n@1170 33 selected = selected.concat(node.getAllElementsByName(name));
n@1170 34 }
n@1170 35 node = node.nextElementSibling;
n@1170 36 }
n@1170 37 return selected;
n@1170 38 }
n@1170 39
n@1170 40 XMLDocument.prototype.getAllElementsByTagName = function(name)
n@1170 41 {
n@1170 42 name = String(name);
n@1170 43 var selected = this.documentElement.getAllElementsByTagName(name);
n@1170 44 return selected;
n@1170 45 }
n@1170 46
n@1170 47 Element.prototype.getAllElementsByTagName = function(name)
n@1170 48 {
n@1170 49 name = String(name);
n@1170 50 var selected = [];
n@1170 51 var node = this.firstElementChild;
n@1170 52 while(node != null)
n@1170 53 {
n@1170 54 if (node.nodeName == name)
n@1170 55 {
n@1170 56 selected.push(node);
n@1170 57 }
n@1170 58 if (node.childElementCount > 0)
n@1170 59 {
n@1170 60 selected = selected.concat(node.getAllElementsByTagName(name));
n@1170 61 }
n@1170 62 node = node.nextElementSibling;
n@1170 63 }
n@1170 64 return selected;
n@1170 65 }
n@1170 66
n@1170 67 // Firefox does not have an XMLDocument.prototype.getElementsByName
n@1170 68 if (typeof XMLDocument.prototype.getElementsByName != "function") {
n@1170 69 XMLDocument.prototype.getElementsByName = function(name)
n@1170 70 {
n@1170 71 name = String(name);
n@1170 72 var node = this.documentElement.firstElementChild;
n@1170 73 var selected = [];
n@1170 74 while(node != null)
n@1170 75 {
n@1170 76 if (node.getAttribute('name') == name)
n@1170 77 {
n@1170 78 selected.push(node);
n@1170 79 }
n@1170 80 node = node.nextElementSibling;
n@1170 81 }
n@1170 82 return selected;
n@1170 83 }
n@1170 84 }
n@1170 85
n@1170 86 window.onload = function()
n@1170 87 {
n@1170 88 specification = new Specification();
n@1170 89 convert = new SpecificationToHTML();
n@1170 90 xmlHttp = new XMLHttpRequest();
n@1170 91 xmlHttp.open("GET","./interface-specs.xml",true);
n@1170 92 xmlHttp.onload = function()
n@1170 93 {
n@1170 94 var parse = new DOMParser();
n@1170 95 interfaceSpecs = parse.parseFromString(xmlHttp.response,'text/xml');
n@1170 96 buildPage();
n@1170 97 popupObject.postNode(popupStateNodes.state[0])
n@1170 98 }
n@1170 99 xmlHttp.send();
n@1170 100
n@1170 101 var xsdGet = new XMLHttpRequest();
n@1170 102 xsdGet.open("GET","../test-schema.xsd",true);
n@1170 103 xsdGet.onload = function()
n@1170 104 {
n@1170 105 var parse = new DOMParser();
n@1170 106 specification.schema = parse.parseFromString(xsdGet.response,'text/xml');;
n@1170 107 }
n@1170 108 xsdGet.send();
n@1170 109
n@1170 110 var jsonAttribute = new XMLHttpRequest();
n@1170 111 jsonAttribute.open("GET","./attributes.json",true);
n@1170 112 jsonAttribute.onload = function()
n@1170 113 {
n@1170 114 attributeText = JSON.parse(jsonAttribute.response)
n@1170 115 }
n@1170 116 jsonAttribute.send();
n@1170 117 }
n@1170 118
n@1170 119 function buildPage()
n@1170 120 {
n@1170 121 popupObject = new function() {
n@1170 122 this.object = document.getElementById("popupHolder");
n@1170 123 this.blanket = document.getElementById("blanket");
n@1170 124
n@1170 125 this.popupTitle = document.createElement("div");
n@1170 126 this.popupTitle.id = "popup-title-holder";
n@1170 127 this.popupTitle.align = "center";
n@1170 128 this.titleDOM = document.createElement("span");
n@1170 129 this.titleDOM.id = "popup-title";
n@1170 130 this.popupTitle.appendChild(this.titleDOM);
n@1170 131 this.object.appendChild(this.popupTitle);
n@1170 132
n@1170 133 this.popupContent = document.createElement("div");
n@1170 134 this.popupContent.id = "popup-content";
n@1170 135 this.object.appendChild(this.popupContent);
n@1170 136
n@1170 137 this.proceedButton = document.createElement("button");
n@1170 138 this.proceedButton.id = "popup-proceed";
n@1200 139 this.proceedButton.className = "popup-button";
n@1170 140 this.proceedButton.textContent = "Next";
n@1170 141 this.proceedButton.onclick = function()
n@1170 142 {
n@1170 143 popupObject.popupContent.innerHTML = null;
n@1170 144 popupObject.shownObject.continue();
n@1170 145 };
n@1170 146 this.object.appendChild(this.proceedButton);
n@1170 147
n@1200 148 this.backButton = document.createElement("button");
n@1200 149 this.backButton.id = "popup-back";
n@1200 150 this.backButton.className = "popup-button";
n@1200 151 this.backButton.textContent = "Back";
n@1200 152 this.backButton.onclick = function()
n@1200 153 {
n@1200 154 popupObject.popupContent.innerHTML = null;
n@1200 155 popupObject.shownObject.back();
n@1200 156 };
n@1200 157 this.object.appendChild(this.backButton);
n@1200 158
n@1170 159 this.shownObject;
n@1170 160
n@1170 161 this.resize = function()
n@1170 162 {
n@1170 163 var w = window.innerWidth;
n@1170 164 var h = window.innerHeight;
n@1170 165 this.object.style.left = Math.floor((w-750)/2) + 'px';
n@1170 166 this.object.style.top = Math.floor((h-500)/2) + 'px';
n@1170 167 }
n@1170 168
n@1170 169 this.show = function()
n@1170 170 {
n@1170 171 this.object.style.visibility = "visible";
n@1170 172 this.blanket.style.visibility = "visible";
n@1200 173 if (typeof this.shownObject.back == "function") {
n@1200 174 this.backButton.style.visibility = "visible";
n@1200 175 } else {
n@1200 176 this.backButton.style.visibility = "hidden";
n@1200 177 }
n@1170 178 }
n@1170 179
n@1170 180 this.hide = function()
n@1170 181 {
n@1170 182 this.object.style.visibility = "hidden";
n@1170 183 this.blanket.style.visibility = "hidden";
n@1200 184 this.backButton.style.visibility = "hidden";
n@1170 185 }
n@1170 186
n@1170 187 this.postNode = function(postObject)
n@1170 188 {
n@1170 189 //Passed object must have the following:
n@1170 190 // Title: text to show in the title
n@1170 191 // Content: HTML DOM to show on the page
n@1170 192 // On complete this HTML DOM is destroyed so make sure it is referenced elsewhere for processing
n@1170 193 this.titleDOM.textContent = postObject.title;
n@1170 194 this.popupContent.appendChild(postObject.content);
n@1170 195 this.shownObject = postObject;
n@1200 196 if (typeof this.shownObject.back == "function") {
n@1200 197 this.backButton.style.visibility = "visible";
n@1200 198 } else {
n@1200 199 this.backButton.style.visibility = "hidden";
n@1200 200 }
n@1200 201 this.show();
n@1170 202 }
n@1170 203
n@1170 204 this.resize();
n@1170 205 this.hide();
n@1170 206 };
n@1170 207
n@1170 208 popupStateNodes = new function()
n@1170 209 {
n@1170 210 // This defines the several popup states wanted
n@1170 211 this.state = [];
n@1170 212 this.state[0] = new function()
n@1170 213 {
n@1170 214 this.title = "Welcome";
n@1170 215 this.content = document.createElement("div");
n@1170 216 this.content.id = "state-0";
n@1170 217 var span = document.createElement("span");
n@1170 218 span.textContent = "Welcome to the WAET test creator tool. This will allow you to create a new test from scratch to suit your testing needs. If you wish to update a test file, please drag and drop the XML document into the area below for processing, otherwise press 'Next' to start a new test. This tool generates files for the WAET 1.2.0 version."
n@1170 219 this.content.appendChild(span);
n@1170 220 this.dragArea = document.createElement("div");
n@1173 221 this.dragArea.className = "drag-area";
n@1173 222 this.dragArea.id = "project-drop";
n@1170 223 this.content.appendChild(this.dragArea);
n@1173 224
n@1174 225 this.dragArea.addEventListener('dragover',function(e){
n@1173 226 e.stopPropagation();
n@1173 227 e.preventDefault();
n@1173 228 e.dataTransfer.dropEffect = 'copy';
n@1173 229 e.currentTarget.className = "drag-area drag-over";
n@1173 230 });
n@1173 231
n@1173 232 this.dragArea.addEventListener('dragexit',function(e){
n@1173 233 e.stopPropagation();
n@1173 234 e.preventDefault();
n@1173 235 e.dataTransfer.dropEffect = 'copy';
n@1173 236 e.currentTarget.className = "drag-area";
n@1173 237 });
n@1173 238
n@1173 239 this.dragArea.addEventListener('drop',function(e){
n@1173 240 e.stopPropagation();
n@1173 241 e.preventDefault();
n@1173 242 e.currentTarget.className = "drag-area drag-dropped";
n@1173 243 var files = e.dataTransfer.files[0];
n@1174 244 var reader = new FileReader();
n@1174 245 reader.onload = function(decoded) {
n@1174 246 var parse = new DOMParser();
n@1174 247 specification.decode(parse.parseFromString(decoded.target.result,'text/xml'));
n@1174 248 popupObject.hide();
n@1175 249 popupObject.popupContent.innerHTML = null;
n@1174 250 convert.convert(document.getElementById('content'));
n@1174 251 }
n@1174 252 reader.readAsText(files);
n@1173 253 });
n@1173 254
n@1170 255
n@1170 256 this.continue = function()
n@1170 257 {
n@1170 258 popupObject.postNode(popupStateNodes.state[1]);
n@1170 259 }
n@1170 260 }
n@1170 261 this.state[1] = new function()
n@1170 262 {
n@1170 263 this.title = "Select your interface";
n@1170 264 this.content = document.createElement("div");
n@1170 265 this.content.id = "state-1";
n@1170 266 var spnH = document.createElement('div');
n@1170 267 var span = document.createElement("span");
n@1170 268 span.textContent = "Please select your interface from the list shown below. This will define the various options which are available. This can later be changed.";
n@1170 269 spnH.appendChild(span);
n@1170 270 this.content.appendChild(spnH);
n@1170 271 this.select = document.createElement("select");
n@1170 272 this.testsXML = interfaceSpecs.getElementsByTagName('tests')[0].children;
n@1170 273 for (var i=0; i<this.testsXML.length; i++)
n@1170 274 {
n@1170 275 var option = document.createElement('option');
n@1170 276 option.value = this.testsXML[i].getAttribute('name');
n@1170 277 option.textContent = this.testsXML[i].getAttribute('name');
n@1170 278 this.select.appendChild(option);
n@1170 279 }
n@1170 280 this.content.appendChild(this.select);
n@1170 281 this.continue = function()
n@1170 282 {
n@1170 283 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(this.select.value)[0];
n@1170 284 specification.interface = testXML.getAttribute("interface");
n@1200 285 if (specification.interfaces == null)
n@1200 286 {
n@1200 287 specification.interfaces = new specification.interfaceNode();
n@1200 288 }
n@1200 289 if (specification.metrics == null) {
n@1200 290 specification.metrics = new specification.metricNode();
n@1200 291 }
n@1170 292 popupStateNodes.state[2].generate();
n@1170 293 popupObject.postNode(popupStateNodes.state[2]);
n@1170 294 }
n@1200 295 this.back = function() {
n@1200 296 popupObject.postNode(popupStateNodes.state[0]);
n@1200 297 }
n@1170 298 }
n@1170 299 this.state[2] = new function()
n@1170 300 {
n@1170 301 this.title = "Test Checks & Restrictions";
n@1170 302 this.content = document.createElement("div");
n@1170 303 this.content.id = "state-1";
n@1170 304 var spnH = document.createElement('div');
n@1170 305 var span = document.createElement("span");
n@1170 306 span.textContent = "Select your test checks and restrictions. Greyed out items are fixed by the test/interface and cannot be changed";
n@1170 307 spnH.appendChild(span);
n@1170 308 this.content.appendChild(spnH);
n@1170 309 var holder = document.createElement("div");
n@1170 310 this.options = [];
n@1170 311 this.testXML = null;
n@1170 312 this.interfaceXML = null;
n@1200 313 this.dynamicContent = document.createElement("div");
n@1200 314 this.content.appendChild(this.dynamicContent);
n@1170 315 this.generate = function()
n@1170 316 {
n@1200 317 this.options = [];
n@1200 318 this.dynamicContent.innerHTML = null;
n@1170 319 var interfaceName = popupStateNodes.state[1].select.value;
n@1170 320 this.checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("checks")[0];
n@1170 321 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
n@1170 322 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("checks")[0];
n@1170 323 this.testXML = this.testXML.getAllElementsByTagName("checks");
n@1170 324 for (var i=0; i<this.interfaceXML.children.length; i++)
n@1170 325 {
n@1170 326 var interfaceNode = this.interfaceXML.children[i];
n@1170 327 var checkName = interfaceNode.getAttribute('name');
n@1170 328 var testNode
n@1170 329 if (this.testXML.length > 0)
n@1170 330 {
n@1170 331 testNode = this.testXML[0].getAllElementsByName(checkName);
n@1170 332 if(testNode.length != 0) {testNode = testNode[0];}
n@1170 333 else {testNode = undefined;}
n@1170 334 } else {
n@1170 335 testNode = undefined;
n@1170 336 }
n@1200 337 var obj = {
n@1200 338 root: document.createElement("div"),
n@1201 339 text: document.createElement("label"),
n@1200 340 input: document.createElement("input"),
n@1200 341 parent: this,
n@1200 342 name: checkName,
n@1200 343 handleEvent: function(event) {
n@1200 344 if (this.input.checked) {
n@1200 345 // Add to specification.interfaces.option
n@1200 346 var included = specification.interfaces.options.find(function(element,index,array){
n@1200 347 if (element.name == this.name) {return true;} else {return false;}
n@1200 348 },this);
n@1200 349 if (included == null) {
n@1200 350 specification.interfaces.options.push({type:"check",name:this.name});
n@1200 351 }
n@1200 352 } else {
n@1200 353 // Remove from specification.interfaces.option
n@1200 354 var position = specification.interfaces.options.findIndex(function(element,index,array){
n@1200 355 if (element.name == this.name) {return true;} else {return false;}
n@1200 356 },this);
n@1200 357 if (position >= 0) {
n@1200 358 specification.interfaces.options.splice(position,1);
n@1200 359 }
n@1200 360 }
n@1200 361 }
n@1170 362 }
n@1200 363
n@1200 364 obj.input.addEventListener("click",obj);
n@1200 365 obj.root.className = "popup-checkbox";
n@1200 366 obj.input.type = "checkbox";
n@1201 367 obj.input.setAttribute('id',checkName);
n@1201 368 obj.text.setAttribute("for",checkName);
n@1200 369 obj.text.textContent = this.checkText.getAllElementsByName(checkName)[0].textContent;
n@1200 370 obj.root.appendChild(obj.input);
n@1200 371 obj.root.appendChild(obj.text);
n@1170 372 if(testNode != undefined)
n@1170 373 {
n@1200 374 if (testNode.getAttribute('default') == 'on')
n@1170 375 {
n@1200 376 obj.input.checked = true;
n@1170 377 }
n@1170 378 if (testNode.getAttribute('support') == "none")
n@1170 379 {
n@1200 380 obj.input.disabled = true;
n@1200 381 obj.input.checked = false;
n@1200 382 obj.root.className = "popup-checkbox disabled";
n@1170 383 }else if (interfaceNode.getAttribute('support') == "mandatory")
n@1170 384 {
n@1200 385 obj.input.disabled = true;
n@1200 386 obj.input.checked = true;
n@1200 387 obj.root.className = "popup-checkbox disabled";
n@1200 388 }
n@1200 389 } else {
n@1200 390 if (interfaceNode.getAttribute('default') == 'on')
n@1200 391 {
n@1200 392 obj.input.checked = true;
n@1200 393 }
n@1200 394 if (interfaceNode.getAttribute('support') == "none")
n@1200 395 {
n@1200 396 obj.input.disabled = true;
n@1200 397 obj.input.checked = false;
n@1200 398 obj.root.className = "popup-checkbox disabled";
n@1200 399 } else if (interfaceNode.getAttribute('support') == "mandatory")
n@1200 400 {
n@1200 401 obj.input.disabled = true;
n@1200 402 obj.input.checked = true;
n@1200 403 obj.root.className = "popup-checkbox disabled";
n@1170 404 }
n@1170 405 }
n@1200 406 var included = specification.interfaces.options.find(function(element,index,array){
n@1200 407 if (element.name == this.name) {return true;} else {return false;}
n@1200 408 },obj);
n@1200 409 if (included != undefined) {
n@1200 410 obj.input.checked = true;
n@1200 411 }
n@1200 412 obj.handleEvent();
n@1200 413 this.options.push(obj);
n@1200 414 this.dynamicContent.appendChild(obj.root);
n@1170 415 }
n@1170 416 }
n@1170 417 this.continue = function()
n@1170 418 {
n@1170 419 popupStateNodes.state[3].generate();
n@1170 420 popupObject.postNode(popupStateNodes.state[3]);
n@1170 421 }
n@1200 422 this.back = function() {
n@1200 423 popupObject.postNode(popupStateNodes.state[1]);
n@1200 424 }
n@1170 425 }
n@1170 426 this.state[3] = new function()
n@1170 427 {
n@1170 428 this.title = "Test Metrics";
n@1170 429 this.content = document.createElement("div");
n@1170 430 this.content.id = "state-1";
n@1170 431 var spnH = document.createElement('div');
n@1170 432 var span = document.createElement("span");
n@1170 433 span.textContent = "Select which data points to include in the exported results XML. Some of this is required for certain post script analysis. See the documentation for further details";
n@1170 434 spnH.appendChild(span);
n@1170 435 this.content.appendChild(spnH);
n@1170 436 this.options = [];
n@1170 437 this.checkText;
n@1170 438 this.testXML;
n@1170 439 this.interfaceXML;
n@1200 440 this.dynamicContent = document.createElement("div");
n@1200 441 this.content.appendChild(this.dynamicContent);
n@1170 442 this.generate = function()
n@1170 443 {
n@1200 444 this.options = [];
n@1200 445 this.dynamicContent.innerHTML = null;
n@1170 446 var interfaceName = popupStateNodes.state[1].select.value;
n@1170 447 this.checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("metrics")[0];
n@1170 448 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
n@1170 449 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("metrics")[0];
n@1170 450 this.testXML = this.testXML.getAllElementsByTagName("metrics");
n@1170 451 for (var i=0; i<this.interfaceXML.children.length; i++)
n@1170 452 {
n@1170 453 var interfaceNode = this.interfaceXML.children[i];
n@1170 454 var checkName = interfaceNode.getAttribute('name');
n@1170 455 var testNode
n@1170 456 if (this.testXML.length > 0)
n@1170 457 {
n@1170 458 testNode = this.testXML[0].getAllElementsByName(checkName);
n@1170 459 if(testNode.length != 0) {testNode = testNode[0];}
n@1170 460 else {testNode = undefined;}
n@1170 461 } else {
n@1170 462 testNode = undefined;
n@1170 463 }
n@1200 464 var obj = {
n@1200 465 root: document.createElement("div"),
n@1201 466 text: document.createElement("label"),
n@1200 467 input: document.createElement("input"),
n@1200 468 parent: this,
n@1200 469 name: checkName,
n@1200 470 handleEvent: function(event) {
n@1200 471 if (this.input.checked) {
n@1200 472 // Add to specification.interfaces.option
n@1200 473 var included = specification.metrics.enabled.find(function(element,index,array){
n@1200 474 if (element == this.name) {return true;} else {return false;}
n@1200 475 },this);
n@1200 476 if (included == null) {
n@1200 477 specification.metrics.enabled.push(this.name);
n@1200 478 }
n@1200 479 } else {
n@1200 480 // Remove from specification.interfaces.option
n@1200 481 var position = specification.metrics.enabled.findIndex(function(element,index,array){
n@1200 482 if (element == this.name) {return true;} else {return false;}
n@1200 483 },this);
n@1200 484 if (position >= 0) {
n@1200 485 specification.metrics.enabled.splice(position,1);
n@1200 486 }
n@1200 487 }
n@1200 488 }
n@1170 489 }
n@1200 490
n@1200 491 obj.input.addEventListener("click",obj);
n@1200 492 obj.root.className = "popup-checkbox";
n@1200 493 obj.input.type = "checkbox";
n@1201 494 obj.input.setAttribute('id',checkName);
n@1201 495 obj.text.setAttribute("for",checkName);
n@1200 496 obj.text.textContent = this.checkText.getAllElementsByName(checkName)[0].textContent;
n@1200 497 obj.root.appendChild(obj.input);
n@1200 498 obj.root.appendChild(obj.text);
n@1170 499 if(testNode != undefined)
n@1170 500 {
n@1200 501 if (testNode.getAttribute('default') == 'on')
n@1170 502 {
n@1200 503 obj.input.checked = true;
n@1170 504 }
n@1170 505 if (testNode.getAttribute('support') == "none")
n@1170 506 {
n@1200 507 obj.input.disabled = true;
n@1200 508 obj.input.checked = false;
n@1200 509 obj.root.className = "popup-checkbox disabled";
n@1170 510 }else if (interfaceNode.getAttribute('support') == "mandatory")
n@1170 511 {
n@1200 512 obj.input.disabled = true;
n@1200 513 obj.input.checked = true;
n@1200 514 obj.root.className = "popup-checkbox disabled";
n@1200 515 }
n@1200 516 } else {
n@1200 517 if (interfaceNode.getAttribute('default') == 'on')
n@1200 518 {
n@1200 519 obj.input.checked = true;
n@1200 520 }
n@1200 521 if (interfaceNode.getAttribute('support') == "none")
n@1200 522 {
n@1200 523 obj.input.disabled = true;
n@1200 524 obj.input.checked = false;
n@1200 525 obj.root.className = "popup-checkbox disabled";
n@1200 526 } else if (interfaceNode.getAttribute('support') == "mandatory")
n@1200 527 {
n@1200 528 obj.input.disabled = true;
n@1200 529 obj.input.checked = true;
n@1200 530 obj.root.className = "popup-checkbox disabled";
n@1170 531 }
n@1170 532 }
n@1200 533 var included = specification.metrics.enabled.find(function(element,index,array){
n@1200 534 if (element == this.name) {return true;} else {return false;}
n@1200 535 },obj);
n@1200 536 obj.handleEvent();
n@1200 537 if (included != undefined) {
n@1200 538 obj.input.checked = true;
n@1200 539 }
n@1200 540 this.options.push(obj);
n@1200 541 this.dynamicContent.appendChild(obj.root);
n@1170 542 }
n@1170 543 }
n@1170 544 this.continue = function()
n@1170 545 {
n@1170 546 popupStateNodes.state[4].generate();
n@1170 547 popupObject.postNode(popupStateNodes.state[4]);
n@1170 548 }
n@1200 549 this.back = function() {
n@1200 550 popupObject.postNode(popupStateNodes.state[2]);
n@1200 551 }
n@1170 552 }
n@1170 553 this.state[4] = new function()
n@1170 554 {
n@1170 555 this.title = "Test Visuals";
n@1170 556 this.content = document.createElement("div");
n@1170 557 this.content.id = "state-1";
n@1170 558 var spnH = document.createElement('div');
n@1170 559 var span = document.createElement("span");
n@1170 560 span.textContent = "You can display extra visual content with your interface for the test user to interact with. Select from the available options below. Greyed out options are unavailable for your selected interface";
n@1170 561 spnH.appendChild(span);
n@1170 562 this.content.appendChild(spnH);
n@1170 563 this.options = [];
n@1170 564 this.checkText;
n@1170 565 this.testXML;
n@1170 566 this.interfaceXML;
n@1200 567 this.dynamicContent = document.createElement("div");
n@1200 568 this.content.appendChild(this.dynamicContent);
n@1170 569 this.generate = function()
n@1170 570 {
n@1200 571 this.options = [];
n@1200 572 this.dynamicContent.innerHTML = null;
n@1170 573 var interfaceName = popupStateNodes.state[1].select.value;
n@1170 574 this.checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("show")[0];
n@1170 575 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
n@1170 576 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("show")[0];
n@1200 577 this.testXML = this.testXML.getAllElementsByTagName("show");
n@1170 578 for (var i=0; i<this.interfaceXML.children.length; i++)
n@1170 579 {
n@1170 580 var interfaceNode = this.interfaceXML.children[i];
n@1170 581 var checkName = interfaceNode.getAttribute('name');
n@1170 582 var testNode
n@1170 583 if (this.testXML.length > 0)
n@1170 584 {
n@1170 585 testNode = this.testXML[0].getAllElementsByName(checkName);
n@1170 586 if(testNode.length != 0) {testNode = testNode[0];}
n@1170 587 else {testNode = undefined;}
n@1170 588 } else {
n@1170 589 testNode = undefined;
n@1170 590 }
n@1200 591 var obj = {
n@1200 592 root: document.createElement("div"),
n@1201 593 text: document.createElement("label"),
n@1200 594 input: document.createElement("input"),
n@1200 595 parent: this,
n@1200 596 name: checkName,
n@1200 597 handleEvent: function(event) {
n@1200 598 if (this.input.checked) {
n@1200 599 // Add to specification.interfaces.option
n@1200 600 var included = specification.interfaces.options.find(function(element,index,array){
n@1200 601 if (element.name == this.name) {return true;} else {return false;}
n@1200 602 },this);
n@1200 603 if (included == null) {
n@1200 604 specification.interfaces.options.push({type:"show",name:this.name});
n@1200 605 }
n@1200 606 } else {
n@1200 607 // Remove from specification.interfaces.option
n@1200 608 var position = specification.interfaces.options.findIndex(function(element,index,array){
n@1200 609 if (element.name == this.name) {return true;} else {return false;}
n@1200 610 },this);
n@1200 611 if (position >= 0) {
n@1200 612 specification.interfaces.options.splice(position,1);
n@1200 613 }
n@1200 614 }
n@1200 615 }
n@1170 616 }
n@1200 617
n@1200 618 obj.input.addEventListener("click",obj);
n@1200 619 obj.root.className = "popup-checkbox";
n@1200 620 obj.input.type = "checkbox";
n@1201 621 obj.input.setAttribute('id',checkName);
n@1201 622 obj.text.setAttribute("for",checkName);
n@1200 623 obj.text.textContent = this.checkText.getAllElementsByName(checkName)[0].textContent;
n@1200 624 obj.root.appendChild(obj.input);
n@1200 625 obj.root.appendChild(obj.text);
n@1170 626 if(testNode != undefined)
n@1170 627 {
n@1200 628 if (testNode.getAttribute('default') == 'on')
n@1170 629 {
n@1200 630 obj.input.checked = true;
n@1170 631 }
n@1170 632 if (testNode.getAttribute('support') == "none")
n@1170 633 {
n@1200 634 obj.input.disabled = true;
n@1200 635 obj.input.checked = false;
n@1200 636 obj.root.className = "popup-checkbox disabled";
n@1170 637 }else if (interfaceNode.getAttribute('support') == "mandatory")
n@1170 638 {
n@1200 639 obj.input.disabled = true;
n@1200 640 obj.input.checked = true;
n@1200 641 obj.root.className = "popup-checkbox disabled";
n@1200 642 }
n@1200 643 } else {
n@1200 644 if (interfaceNode.getAttribute('default') == 'on')
n@1200 645 {
n@1200 646 obj.input.checked = true;
n@1200 647 }
n@1200 648 if (interfaceNode.getAttribute('support') == "none")
n@1200 649 {
n@1200 650 obj.input.disabled = true;
n@1200 651 obj.input.checked = false;
n@1200 652 obj.root.className = "popup-checkbox disabled";
n@1200 653 } else if (interfaceNode.getAttribute('support') == "mandatory")
n@1200 654 {
n@1200 655 obj.input.disabled = true;
n@1200 656 obj.input.checked = true;
n@1200 657 obj.root.className = "popup-checkbox disabled";
n@1170 658 }
n@1170 659 }
n@1200 660 var included = specification.interfaces.options.find(function(element,index,array){
n@1200 661 if (element.name == this.name) {return true;} else {return false;}
n@1200 662 },obj);
n@1200 663 if (included != undefined) {
n@1200 664 obj.input.checked = true;
n@1200 665 }
n@1200 666 obj.handleEvent();
n@1200 667 this.options.push(obj);
n@1200 668 this.dynamicContent.appendChild(obj.root);
n@1170 669 }
n@1170 670 }
n@1170 671 this.continue = function()
n@1170 672 {
n@1170 673 popupObject.hide();
n@1170 674 convert.convert(document.getElementById('content'));
n@1170 675 }
n@1200 676 this.back = function() {
n@1200 677 popupObject.postNode(popupStateNodes.state[3]);
n@1200 678 }
n@1170 679 }
n@1170 680 this.state[5] = new function() {
n@1170 681 this.title = "Add/Edit Survey Element";
n@1170 682 this.content = document.createElement("div");
n@1170 683 this.content.id = "state-1";
n@1170 684 var spnH = document.createElement('div');
n@1170 685 var span = document.createElement("span");
n@1170 686 span.textContent = "You can configure your survey element here. Press 'Continue' to complete your changes.";
n@1170 687 spnH.appendChild(span);
n@1170 688 this.content.appendChild(spnH);
n@1170 689 this.dynamic = document.createElement("div");
n@1170 690 this.option = null;
n@1170 691 this.parent = null;
n@1175 692 this.optionLists = [];
n@1170 693 var select = document.createElement("select");
n@1170 694 select.setAttribute("name","type");
n@1170 695 select.addEventListener("change",this,false);
n@1170 696 this.content.appendChild(select);
n@1170 697 this.content.appendChild(this.dynamic);
n@1170 698 this.generate = function(option, parent)
n@1170 699 {
n@1170 700 this.option = option;
n@1170 701 this.parent = parent;
n@1170 702 var optionList = specification.schema.getAllElementsByName("survey")[0].getAllElementsByName("type")[0].getAllElementsByTagName("xs:enumeration");
n@1170 703 for (var i=0; i<optionList.length; i++)
n@1170 704 {
n@1170 705 var selectOption = document.createElement("option");
n@1170 706 selectOption.value = optionList[i].getAttribute("value");
n@1170 707 selectOption.textContent = selectOption.value;
n@1170 708 select.appendChild(selectOption);
n@1170 709 }
n@1170 710 if (this.option.type != undefined){
n@1170 711 select.value = this.option.type
n@1170 712 } else {
n@1170 713 select.value = "statement";
n@1170 714 this.option.type = "statement";
n@1170 715 }
n@1170 716
n@1170 717 this.dynamic.innerHTML = null;
n@1170 718 var statement = document.createElement("div");
n@1170 719 var statementText = document.createElement("span");
n@1170 720 var statementEntry = document.createElement("textarea");
n@1170 721 statement.appendChild(statementText);
n@1170 722 statement.appendChild(statementEntry);
n@1170 723 statementText.textContent = "Statement/Question";
n@1170 724 statementEntry.addEventListener("change",this,false);
n@1170 725 statementEntry.setAttribute("name","statement");
n@1170 726 statementEntry.value = this.option.statement;
n@1170 727 this.dynamic.appendChild(statement);
n@1175 728
n@1175 729 var id = document.createElement("div");
n@1175 730 var idText = document.createElement("span");
n@1175 731 var idEntry = document.createElement("input");
n@1175 732 id.appendChild(idText);
n@1175 733 id.appendChild(idEntry);
n@1175 734 idText.textContent = "ID: ";
n@1175 735 idEntry.addEventListener("change",this,false);
n@1175 736 idEntry.setAttribute("name","id");
n@1175 737 idEntry.value = this.option.id;
n@1175 738
n@1170 739 switch(this.option.type)
n@1170 740 {
n@1170 741 case "statement":
n@1170 742 break;
n@1170 743 case "question":
n@1175 744 this.dynamic.appendChild(id);
n@1170 745 var boxsizeSelect = document.createElement("select");
n@1170 746 var optionList = specification.schema.getAllElementsByName("survey")[0].getAllElementsByName("boxsize")[0].getAllElementsByTagName("xs:enumeration");
n@1170 747 for (var i=0; i<optionList.length; i++)
n@1170 748 {
n@1170 749 var selectOption = document.createElement("option");
n@1170 750 selectOption.value = optionList[i].getAttribute("value");
n@1170 751 selectOption.textContent = selectOption.value;
n@1170 752 boxsizeSelect.appendChild(selectOption);
n@1170 753 }
n@1170 754 if(this.option.boxsize != undefined) {
n@1170 755 boxsizeSelect.value = this.option.boxsize;
n@1170 756 } else {
n@1170 757 boxsizeSelect.value = "normal";
n@1170 758 this.option.boxsize = "normal";
n@1170 759 }
n@1170 760 boxsizeSelect.setAttribute("name","boxsize");
n@1170 761 boxsizeSelect.addEventListener("change",this,false);
n@1170 762 var boxsize = document.createElement("div");
n@1170 763 var boxsizeText = document.createElement("span");
n@1170 764 boxsizeText.textContent = "Entry Size: ";
n@1170 765 boxsize.appendChild(boxsizeText);
n@1170 766 boxsize.appendChild(boxsizeSelect);
n@1170 767 this.dynamic.appendChild(boxsize);
n@1170 768
n@1170 769 var mandatory = document.createElement("div");
n@1170 770 var mandatoryInput = document.createElement("input");
n@1170 771 var mandatoryText = document.createElement("span");
n@1170 772 mandatoryText.textContent = "Mandatory: ";
n@1170 773 mandatory.appendChild(mandatoryText);
n@1170 774 mandatory.appendChild(mandatoryInput);
n@1170 775 mandatoryInput.type = "checkbox";
n@1170 776 if (this.option.mandatory) {mandatoryInput.checked = true;} else {mandatoryInput.checked = false;}
n@1170 777 mandatoryInput.setAttribute("name","mandatory");
n@1170 778 mandatoryInput.addEventListener("change",this,false);
n@1175 779 this.dynamic.appendChild(mandatory);
n@1175 780 break;
n@1175 781 case "number":
n@1175 782 this.dynamic.appendChild(id);
n@1175 783
n@1175 784 var mandatory = document.createElement("div");
n@1175 785 var mandatoryInput = document.createElement("input");
n@1175 786 var mandatoryText = document.createElement("span");
n@1175 787 mandatoryText.textContent = "Mandatory: ";
n@1170 788 mandatory.appendChild(mandatoryText);
n@1170 789 mandatory.appendChild(mandatoryInput);
n@1175 790 mandatoryInput.type = "checkbox";
n@1175 791 if (this.option.mandatory) {mandatoryInput.checked = true;} else {mandatoryInput.checked = false;}
n@1175 792 mandatoryInput.setAttribute("name","mandatory");
n@1175 793 mandatoryInput.addEventListener("change",this,false);
n@1170 794 this.dynamic.appendChild(mandatory);
n@1175 795
n@1175 796 var minimum = document.createElement("div");
n@1175 797 var minimumEntry = document.createElement("input");
n@1175 798 var minimumText = document.createElement("span");
n@1175 799 minimumText.textContent = "Minimum: ";
n@1175 800 minimum.appendChild(minimumText);
n@1175 801 minimum.appendChild(minimumEntry);
n@1175 802 minimumEntry.type = "number";
n@1175 803 minimumEntry.setAttribute("name","min");
n@1175 804 minimumEntry.addEventListener("change",this,false);
n@1175 805 minimumEntry.value = this.option.min;
n@1175 806 this.dynamic.appendChild(minimum);
n@1175 807
n@1175 808 var maximum = document.createElement("div");
n@1175 809 var maximumEntry = document.createElement("input");
n@1175 810 var maximumText = document.createElement("span");
n@1175 811 maximumText.textContent = "Maximum: ";
n@1175 812 maximum.appendChild(maximumText);
n@1175 813 maximum.appendChild(maximumEntry);
n@1175 814 maximumEntry.type = "number";
n@1175 815 maximumEntry.setAttribute("name","max");
n@1175 816 maximumEntry.addEventListener("change",this,false);
n@1175 817 maximumEntry.value = this.option.max;
n@1175 818 this.dynamic.appendChild(maximum);
n@1170 819 break;
n@1175 820 case "checkbox":
n@1175 821 case "radio":
n@1175 822 this.dynamic.appendChild(id);
n@1175 823 var optionHolder = document.createElement("div");
n@1175 824 optionHolder.className = 'node';
n@1175 825 optionHolder.id = 'popup-option-holder';
n@1175 826 var optionObject = function(parent,option) {
n@1175 827 this.rootDOM = document.createElement("div");
n@1175 828 this.rootDOM.className = "popup-option-entry";
n@1175 829 this.inputName = document.createElement("input");
n@1175 830 this.inputName.setAttribute("name","name");
n@1175 831 this.inputLabel = document.createElement("input");
n@1175 832 this.inputLabel.setAttribute("name","text");
n@1175 833 this.specification = option;
n@1175 834 this.parent = parent;
n@1175 835 this.handleEvent = function()
n@1175 836 {
n@1175 837 var target = event.currentTarget.getAttribute("name");
n@1175 838 eval("this.specification."+target+" = event.currentTarget.value");
n@1175 839 };
n@1175 840
n@1175 841 var nameText = document.createElement("span");
n@1175 842 nameText.textContent = "Name: ";
n@1175 843 var labelText = document.createElement("span");
n@1175 844 labelText.textContent = "Label: ";
n@1175 845 this.rootDOM.appendChild(nameText);
n@1175 846 this.rootDOM.appendChild(this.inputName);
n@1175 847 this.rootDOM.appendChild(labelText);
n@1175 848 this.rootDOM.appendChild(this.inputLabel);
n@1175 849 this.inputName.addEventListener("change",this,false);
n@1175 850 this.inputLabel.addEventListener("change",this,false);
n@1175 851 this.inputName.value = this.specification.name;
n@1175 852 this.inputLabel.value = this.specification.text;
n@1175 853
n@1175 854 this.deleteEntry = {
n@1175 855 root: document.createElement("button"),
n@1175 856 parent: this,
n@1175 857 handleEvent: function() {
n@1175 858 document.getElementById("popup-option-holder").removeChild(this.parent.rootDOM);
n@1175 859 var index = this.parent.parent.option.options.findIndex(function(element,index,array){
n@1175 860 if (element == this.parent.specification)
n@1175 861 return true;
n@1175 862 else
n@1175 863 return false;
n@1175 864 },this);
n@1175 865 var optionList = this.parent.parent.option.options;
n@1175 866 if (index == optionList.length-1) {
n@1175 867 optionList = optionList.slice(0,index);
n@1175 868 } else {
n@1175 869 optionList = optionList.slice(0,index).concat(optionList.slice(index+1));
n@1175 870 }
n@1175 871 this.parent.parent.option.options = optionList;
n@1175 872 }
n@1175 873 };
n@1175 874 this.deleteEntry.root.textContent = "Delete Option";
n@1175 875 this.deleteEntry.root.addEventListener("click",this.deleteEntry,false);
n@1175 876 this.rootDOM.appendChild(this.deleteEntry.root);
n@1175 877 }
n@1175 878 for (var i=0; i<this.option.options.length; i++)
n@1175 879 {
n@1175 880 var obj = new optionObject(this,this.option.options[i]);
n@1175 881 this.optionLists.push(obj);
n@1175 882 optionHolder.appendChild(obj.rootDOM);
n@1175 883 }
n@1175 884 this.dynamic.appendChild(optionHolder);
n@1170 885 }
n@1170 886 }
n@1170 887 this.handleEvent = function()
n@1170 888 {
n@1170 889 var name = event.currentTarget.getAttribute("name");
n@1170 890 switch(name) {
n@1170 891 case "type":
n@1170 892 // If type has changed, we may need to rebuild the entire state node
n@1170 893 if (event.currentTarget.value != this.option.name)
n@1170 894 {
n@1170 895 this.option.type = event.currentTarget.value;
n@1170 896 this.generate(this.option,this.parent);
n@1170 897 }
n@1170 898 break;
n@1170 899 case "mandatory":
n@1170 900 this.option.mandatory = event.currentTarget.checked;
n@1170 901 break;
n@1170 902 case "boxsize":
n@1170 903 this.option.boxsize = event.currentTarget.value;
n@1170 904 break;
n@1170 905 case "statement":
n@1170 906 this.option.statement = event.currentTarget.value;
n@1170 907 break;
n@1170 908 }
n@1170 909 }
n@1170 910 this.continue = function()
n@1170 911 {
n@1175 912 if (this.parent.type == "surveyNode")
n@1175 913 {
n@1175 914 var newNode = new this.parent.surveyEntryNode(this.parent,this.option);
n@1175 915 this.parent.children.push(newNode);
n@1175 916 this.parent.childrenDOM.appendChild(newNode.rootDOM);
n@1175 917 } else if (this.parent.type == "surveyEntryNode") {
n@1175 918 this.parent.build();
n@1175 919 }
n@1170 920 popupObject.hide();
n@1170 921 }
n@1170 922 }
n@1185 923 this.state[6] = new function() {
n@1185 924 this.title = "Edit Scale Markers";
n@1185 925 this.content = document.createElement("div");
n@1185 926 this.content.id = "state-6";
n@1185 927 var spnH = document.createElement('div');
n@1185 928 var span = document.createElement("span");
n@1185 929 span.textContent = "You can edit your scale markers here for the selected interface.";
n@1185 930 spnH.appendChild(span);
n@1185 931 this.scaleRoot;
n@1185 932 this.parent;
n@1185 933 this.markerNodes =[];
n@1185 934 this.preset = {
n@1185 935 input: document.createElement("select"),
n@1185 936 parent: this,
n@1185 937 handleEvent: function(event) {
n@1185 938 this.parent.scaleRoot.scales = [];
n@1185 939 var protoScale = interfaceSpecs.getAllElementsByTagName('scaledefinitions')[0].getAllElementsByName(event.currentTarget.value)[0];
n@1185 940 var protoMarkers = protoScale.children;
n@1185 941 for (var i=0; i<protoMarkers.length; i++)
n@1185 942 {
n@1185 943 var marker = {
n@1185 944 position: protoMarkers[i].getAttribute("position"),
n@1185 945 text: protoMarkers[i].textContent
n@1185 946 }
n@1185 947 this.parent.scaleRoot.scales.push(marker);
n@1185 948 }
n@1185 949 this.parent.buildMarkerList();
n@1185 950 }
n@1185 951 }
n@1185 952 this.preset.input.addEventListener("change",this.preset);
n@1185 953 this.content.appendChild(this.preset.input);
n@1185 954 var optionHolder = document.createElement("div");
n@1185 955 optionHolder.className = 'node';
n@1185 956 optionHolder.id = 'popup-option-holder';
n@1185 957 this.content.appendChild(optionHolder);
n@1185 958 this.generate = function(scaleRoot,parent)
n@1185 959 {
n@1185 960 this.scaleRoot = scaleRoot;
n@1185 961 this.parent = parent;
n@1185 962
n@1185 963 // Generate Pre-Set dropdown
n@1185 964 var protoScales = interfaceSpecs.getAllElementsByTagName('scaledefinitions')[0].children;
n@1185 965 this.preset.input.innerHTML = "";
n@1185 966
n@1185 967 for (var i=0; i<protoScales.length; i++)
n@1185 968 {
n@1185 969 var selectOption = document.createElement("option");
n@1185 970 var scaleName = protoScales[i].getAttribute("name");
n@1185 971 selectOption.setAttribute("name",scaleName);
n@1185 972 selectOption.textContent = scaleName;
n@1185 973 this.preset.input.appendChild(selectOption);
n@1185 974 }
n@1185 975
n@1185 976 // Create Marker List
n@1185 977 this.buildMarkerList();
n@1185 978 }
n@1185 979 this.buildMarkerList = function() {
n@1185 980 var markerInject = document.getElementById("popup-option-holder");
n@1185 981 markerInject.innerHTML = "";
n@1185 982 this.markerNodes = [];
n@1185 983 for (var i=0; i<this.scaleRoot.scales.length; i++)
n@1185 984 {
n@1185 985 var markerNode = {};
n@1185 986 markerNode.root = document.createElement("div");
n@1185 987 markerNode.root.className = "popup-option-entry";
n@1185 988 markerNode.positionInput = document.createElement("input");
n@1185 989 markerNode.positionInput.min = 0;
n@1185 990 markerNode.positionInput.max = 100;
n@1185 991 markerNode.positionInput.value = this.scaleRoot.scales[i].position;
n@1185 992 markerNode.positionInput.setAttribute("name","position");
n@1185 993 markerNode.textInput = document.createElement("input");
n@1185 994 markerNode.textInput.setAttribute("name","text");
n@1185 995 markerNode.textInput.value = this.scaleRoot.scales[i].text;
n@1185 996 markerNode.specification = this.scaleRoot.scales[i];
n@1185 997 markerNode.parent = this;
n@1185 998 markerNode.handleEvent = function(event) {
n@1185 999 switch(event.currentTarget.getAttribute("name"))
n@1185 1000 {
n@1185 1001 case "position":
n@1185 1002 this.specification.position = Number(event.currentTarget.value);
n@1185 1003 break;
n@1185 1004 case "text":
n@1185 1005 this.specification.text = event.currentTarget.value;
n@1185 1006 break;
n@1185 1007 }
n@1185 1008 }
n@1185 1009 markerNode.positionInput.addEventListener("change",markerNode,false);
n@1185 1010 markerNode.textInput.addEventListener("change",markerNode,false);
n@1185 1011
n@1185 1012 var posText = document.createElement("span");
n@1185 1013 posText.textContent = "Position: ";
n@1185 1014 var textText = document.createElement("span");
n@1185 1015 textText.textContent = "Text: ";
n@1185 1016 markerNode.root.appendChild(posText);
n@1185 1017 markerNode.root.appendChild(markerNode.positionInput);
n@1185 1018 markerNode.root.appendChild(textText);
n@1185 1019 markerNode.root.appendChild(markerNode.textInput);
n@1185 1020 markerInject.appendChild(markerNode.root);
n@1185 1021 this.markerNodes.push(markerNode);
n@1185 1022
n@1185 1023 }
n@1185 1024 }
n@1185 1025 this.continue = function()
n@1185 1026 {
n@1185 1027 popupObject.hide();
n@1185 1028 }
n@1185 1029 }
n@1170 1030 }
n@1170 1031 }
n@1170 1032
n@1170 1033 function SpecificationToHTML()
n@1170 1034 {
n@1170 1035 // This takes the specification node and converts it to an on-page HTML object
n@1170 1036 // Each Specification Node is given its own JS object which listens to the XSD for instant verification
n@1170 1037 // Once generated, it directly binds into the specification object to update with changes
n@1170 1038 // Fixed DOM entries
n@1170 1039 this.injectDOM;
n@1170 1040 this.setupDOM;
n@1170 1041 this.pages = [];
n@1170 1042
n@1170 1043 // Self-contained generators
n@1170 1044 this.createGeneralNodeDOM = function(name,id,parent)
n@1170 1045 {
n@1175 1046 this.type = name;
n@1170 1047 var root = document.createElement('div');
n@1170 1048 root.id = id;
n@1170 1049 root.className = "node";
n@1170 1050
n@1170 1051 var titleDiv = document.createElement('div');
n@1170 1052 titleDiv.className = "node-title";
n@1170 1053 var title = document.createElement('span');
n@1170 1054 title.className = "node-title";
n@1170 1055 title.textContent = name;
n@1170 1056 titleDiv.appendChild(title);
n@1170 1057
n@1170 1058 var attributeDiv = document.createElement('div');
n@1170 1059 attributeDiv.className = "node-attributes";
n@1170 1060
n@1170 1061 var childrenDiv = document.createElement('div');
n@1170 1062 childrenDiv.className = "node-children";
n@1170 1063
n@1170 1064 var buttonsDiv = document.createElement('div');
n@1170 1065 buttonsDiv.className = "node-buttons";
n@1170 1066
n@1170 1067 root.appendChild(titleDiv);
n@1170 1068 root.appendChild(attributeDiv);
n@1170 1069 root.appendChild(childrenDiv);
n@1170 1070 root.appendChild(buttonsDiv);
n@1170 1071
n@1170 1072 var obj = {
n@1170 1073 rootDOM: root,
n@1170 1074 titleDOM: title,
n@1170 1075 attributeDOM: attributeDiv,
n@1170 1076 attributes: [],
n@1170 1077 childrenDOM: childrenDiv,
n@1170 1078 children: [],
n@1170 1079 buttonDOM: buttonsDiv,
n@1170 1080 parent: parent
n@1170 1081 }
n@1170 1082 return obj;
n@1170 1083 }
n@1170 1084
n@1170 1085 this.convertAttributeToDOM = function(node,schema)
n@1170 1086 {
n@1170 1087 // This takes an attribute schema node and returns an object with the input node and any bindings
n@1170 1088 if (schema.getAttribute('name') == undefined && schema.getAttribute('ref') != undefined)
n@1170 1089 {
n@1170 1090 schema = specification.schema.getAllElementsByName(schema.getAttribute('ref'))[0];
n@1170 1091 }
n@1170 1092 var obj = new function()
n@1170 1093 {
n@1170 1094 this.input;
n@1170 1095 this.name;
n@1170 1096 this.owner;
n@1170 1097 this.holder;
n@1170 1098
n@1170 1099 this.name = schema.getAttribute('name');
n@1170 1100 this.default = schema.getAttribute('default');
n@1170 1101 this.dataType = schema.getAttribute('type');
n@1170 1102 if (typeof this.dataType == "string") { this.dataType = this.dataType.substr(3);}
n@1170 1103 else {this.dataType = "string";}
n@1170 1104 var minVar = undefined;
n@1170 1105 var maxVar = undefined;
n@1170 1106 switch(this.dataType)
n@1170 1107 {
n@1170 1108 case "negativeInteger":
n@1170 1109 maxVar = -1;
n@1170 1110 break;
n@1170 1111 case "positiveInteger":
n@1170 1112 minVar = 1;
n@1170 1113 break;
n@1170 1114 case "nonNegativeInteger":
n@1170 1115 minVar = 0;
n@1170 1116 break;
n@1170 1117 case "nonPositiveInteger":
n@1170 1118 maxVar = 0;
n@1170 1119 break;
n@1170 1120 case "byte":
n@1170 1121 minVar = 0;
n@1170 1122 maxVar = 256;
n@1170 1123 break;
n@1170 1124 case "short":
n@1170 1125 minVar = 0;
n@1170 1126 maxVar = 65536;
n@1170 1127 break;
n@1170 1128 default:
n@1170 1129 break;
n@1170 1130 }
n@1170 1131
n@1170 1132 this.input = document.createElement('input');
n@1170 1133 switch(this.dataType)
n@1170 1134 {
n@1170 1135 case "boolean":
n@1170 1136 this.input.type = "checkbox";
n@1170 1137 break;
n@1170 1138 case "negativeInteger":
n@1170 1139 case "positiveInteger":
n@1170 1140 case "nonNegativeInteger":
n@1170 1141 case "nonPositiveInteger":
n@1170 1142 case "integer":
n@1170 1143 case "short":
n@1170 1144 case "byte":
n@1170 1145 this.input.step = 1;
n@1170 1146 case "decimal":
n@1170 1147 this.input.type = "number";
n@1170 1148 this.input.min = minVar;
n@1170 1149 this.input.max = maxVar;
n@1170 1150 break;
n@1170 1151 default:
n@1170 1152 break;
n@1170 1153 }
n@1170 1154 var value;
n@1173 1155 eval("value = node."+this.name)
n@1170 1156 if (value != undefined)
n@1170 1157 {
n@1170 1158 this.input.value = value;
n@1170 1159 } else if (this.default != undefined)
n@1170 1160 {
n@1170 1161 this.input.value = this.default;
n@1170 1162 }
n@1170 1163 this.handleEvent = function(event)
n@1170 1164 {
n@1170 1165 var value;
n@1170 1166 switch(this.input.type)
n@1170 1167 {
n@1170 1168 case "checkbox":
n@1170 1169 value = event.currentTarget.checked;
n@1170 1170 break;
n@1170 1171 case "number":
n@1170 1172 value = Number(event.currentTarget.value);
n@1170 1173 break;
n@1170 1174 default:
n@1170 1175 value = event.currentTarget.value;
n@1170 1176 break;
n@1170 1177 }
n@1170 1178 eval("this.owner."+this.name+" = value");
n@1170 1179 }
n@1170 1180 this.holder = document.createElement('div');
n@1170 1181 this.holder.className = "attribute";
n@1170 1182 this.holder.setAttribute('name',this.name);
n@1170 1183 var text = document.createElement('span');
n@1170 1184 eval("text.textContent = attributeText."+this.name+"+': '");
n@1170 1185 this.holder.appendChild(text);
n@1170 1186 this.holder.appendChild(this.input);
n@1170 1187 this.owner = node;
n@1170 1188 this.input.addEventListener("change",this,false);
n@1170 1189 }
n@1170 1190 if (obj.attribute != null)
n@1170 1191 {
n@1170 1192 obj.input.value = obj.attribute;
n@1170 1193 }
n@1170 1194 return obj;
n@1170 1195 }
n@1170 1196
n@1170 1197 this.convert = function(root)
n@1170 1198 {
n@1170 1199 //Performs the actual conversion using the given root DOM as the root
n@1170 1200 this.injectDOM = root;
n@1170 1201
n@1173 1202 // Build the export button
n@1173 1203 var exportButton = document.createElement("button");
n@1173 1204 exportButton.textContent = "Export to XML";
n@1173 1205 exportButton.onclick = function()
n@1173 1206 {
n@1173 1207 var doc = specification.encode();
n@1173 1208 var obj = {};
n@1173 1209 obj.title = "Export";
n@1173 1210 obj.content = document.createElement("div");
n@1173 1211 obj.content.id = "finish";
n@1173 1212 var span = document.createElement("span");
n@1173 1213 span.textContent = "Your XML document is linked below. On most browsers, simply right click on the link and select 'Save As'. Or clicking on the link may download the file directly."
n@1173 1214 obj.content.appendChild(span);
n@1173 1215 var link = document.createElement("div");
n@1173 1216 link.appendChild(doc.children[0]);
n@1173 1217 var file = [link.innerHTML];
n@1173 1218 var bb = new Blob(file,{type : 'application/xml'});
n@1173 1219 var dnlk = window.URL.createObjectURL(bb);
n@1173 1220 var a = document.createElement("a");
n@1173 1221 a.hidden = '';
n@1173 1222 a.href = dnlk;
n@1173 1223 a.download = "project-specification.xml";
n@1173 1224 a.textContent = "Save File";
n@1173 1225 obj.content.appendChild(a);
n@1173 1226 popupObject.show();
n@1173 1227 popupObject.postNode(obj);
n@1173 1228 }
n@1173 1229 this.injectDOM.appendChild(exportButton);
n@1173 1230
n@1170 1231 // First perform the setupNode;
n@1170 1232 var setupSchema = specification.schema.getAllElementsByName('setup')[0];
n@1170 1233 this.setupDOM = new this.createGeneralNodeDOM('setup','setup',null);
n@1170 1234 this.injectDOM.appendChild(this.setupDOM.rootDOM);
n@1170 1235 var setupAttributes = setupSchema.getAllElementsByTagName('xs:attribute');
n@1170 1236 for (var i=0; i<setupAttributes.length; i++)
n@1170 1237 {
n@1170 1238 var attributeName = setupAttributes[i].getAttribute('name');
n@1170 1239 var attrObject = this.convertAttributeToDOM(specification,setupAttributes[i]);
n@1170 1240 this.setupDOM.attributeDOM.appendChild(attrObject.holder);
n@1170 1241 this.setupDOM.attributes.push(attrObject);
n@1170 1242 }
n@1170 1243
n@1170 1244 // Now we must build the interface Node
n@1170 1245 this.interfaceDOM = new this.interfaceNode(this,specification.interfaces);
n@1170 1246 this.interfaceDOM.build("Interface","setup-interface",this.setupDOM.rootDOM);
n@1170 1247
n@1170 1248 // Now build the Metrics selection node
n@1170 1249 var metric = this.createGeneralNodeDOM("metrics","setup-metric",this.setupDOM);
n@1170 1250 metric.rootDOM.removeChild(metric.attributeDOM);
n@1170 1251 this.setupDOM.children.push(metric);
n@1170 1252 this.setupDOM.childrenDOM.appendChild(metric.rootDOM);
n@1170 1253 var interfaceName = popupStateNodes.state[1].select.value;
n@1170 1254 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("metrics")[0];
n@1170 1255 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
n@1170 1256 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("metrics")[0];
n@1170 1257 testXML = testXML.getAllElementsByTagName("metrics");
n@1170 1258 for (var i=0; i<interfaceXML.children.length; i++)
n@1170 1259 {
n@1170 1260 var obj = {
n@1170 1261 input: document.createElement('input'),
n@1170 1262 root: document.createElement('div'),
n@1170 1263 text: document.createElement('span'),
n@1170 1264 specification: specification.metrics.enabled,
n@1170 1265 name: interfaceXML.children[i].getAttribute("name"),
n@1170 1266 handleEvent: function()
n@1170 1267 {
n@1170 1268 for (var i=0; i<this.specification.length; i++)
n@1170 1269 {
n@1170 1270 if (this.specification[i] == this.name)
n@1170 1271 {
n@1170 1272 var options = this.specification;
n@1170 1273 if (this.input.checked == false) {
n@1170 1274 if (i == options.length)
n@1170 1275 {options = options.slice(0,i);}
n@1170 1276 else {
n@1170 1277 options = options.slice(0,i).concat(options.slice(i+1));
n@1170 1278 }
n@1170 1279 } else {
n@1170 1280 return;
n@1170 1281 }
n@1170 1282 this.specification = options;
n@1170 1283 break;
n@1170 1284 }
n@1170 1285 }
n@1170 1286 if (this.input.checked) {
n@1170 1287 this.specification.push(this.name);
n@1170 1288 }
n@1170 1289 }
n@1170 1290 };
n@1170 1291 obj.root.className = "attribute";
n@1170 1292 obj.input.type = "checkbox";
n@1170 1293 obj.root.appendChild(obj.text);
n@1170 1294 obj.root.appendChild(obj.input);
n@1170 1295 obj.text.textContent = checkText.children[i].textContent;
n@1170 1296 metric.children.push(obj);
n@1170 1297 metric.childrenDOM.appendChild(obj.root);
n@1114 1298 for (var j=0; j<specification.metrics.enabled.length; j++)
n@1170 1299 {
n@1114 1300 if (specification.metrics.enabled[j] == obj.name)
n@1170 1301 {
n@1170 1302 obj.input.checked = true;
n@1170 1303 break;
n@1170 1304 }
n@1170 1305 }
n@1170 1306 }
n@1170 1307
n@1170 1308 // Now both before and after surveys
n@1170 1309 if (specification.preTest == undefined){
n@1170 1310 specification.preTest = new specification.surveyNode();
n@1170 1311 specification.preTest.location = "pre";
n@1170 1312 }
n@1170 1313 if (specification.postTest == undefined){
n@1170 1314 specification.postTest = new specification.surveyNode();
n@1170 1315 specification.postTest.location = "post";
n@1170 1316 }
n@1170 1317 var surveyBefore = new this.surveyNode(this,specification.preTest,"Pre");
n@1170 1318 var surveyAfter = new this.surveyNode(this,specification.postTest,"Post");
n@1170 1319 this.setupDOM.children.push(surveyBefore);
n@1170 1320 this.setupDOM.children.push(surveyAfter);
n@1170 1321 this.setupDOM.childrenDOM.appendChild(surveyBefore.rootDOM);
n@1170 1322 this.setupDOM.childrenDOM.appendChild(surveyAfter.rootDOM);
n@1170 1323
n@1170 1324 // Add in the page creator button
n@1170 1325 this.addPage = {
n@1170 1326 root: document.createElement("button"),
n@1170 1327 parent: this,
n@1170 1328 handleEvent: function()
n@1170 1329 {
n@1170 1330 var pageObj = new specification.page();
n@1170 1331 specification.pages.push(pageObj);
n@1170 1332 var newPage = new this.parent.pageNode(this.parent,pageObj);
n@1170 1333 this.parent.injectDOM.appendChild(newPage.rootDOM);
n@1170 1334 this.parent.pages.push(newPage);
n@1170 1335 }
n@1170 1336 }
n@1170 1337 this.addPage.root.textContent = "Add Page";
n@1170 1338 this.addPage.root.addEventListener("click",this.addPage,false);
n@1170 1339 this.injectDOM.appendChild(this.addPage.root);
n@1174 1340
n@1174 1341 // Build each page
n@1174 1342 for (var page of specification.pages)
n@1174 1343 {
n@1174 1344 var newPage = new this.pageNode(this,page);
n@1174 1345 this.injectDOM.appendChild(newPage.rootDOM);
n@1174 1346 this.pages.push(newPage);
n@1174 1347 }
n@1170 1348 }
n@1170 1349
n@1170 1350 this.interfaceNode = function(parent,rootObject)
n@1170 1351 {
n@1175 1352 this.type = "interfaceNode";
n@1170 1353 this.rootDOM;
n@1170 1354 this.titleDOM;
n@1170 1355 this.attributeDOM;
n@1170 1356 this.attributes = [];
n@1170 1357 this.childrenDOM;
n@1170 1358 this.children = [];
n@1170 1359 this.buttonDOM;
n@1170 1360 this.parent = parent;
n@1170 1361 this.HTMLPoint;
n@1170 1362 this.specification = rootObject;
n@1170 1363 this.schema = specification.schema.getAllElementsByName("interface")[1];
n@1170 1364
n@1170 1365 this.createIOasAttr = function(name,specification,parent,type) {
n@1170 1366 this.root = document.createElement('div');
n@1170 1367 this.input = document.createElement("input");
n@1170 1368 this.name = name;
n@1170 1369 this.type = type;
n@1170 1370 this.parent = parent;
n@1170 1371 this.specification = specification;
n@1170 1372 this.handleEvent = function(event) {
n@1170 1373 for (var i=0; i<this.specification.options.length; i++)
n@1170 1374 {
n@1170 1375 if (this.specification.options[i].name == this.name)
n@1170 1376 {
n@1170 1377 var options = this.specification.options;
n@1170 1378 if (this.input.checked == false) {
n@1170 1379 if (i == options.length)
n@1170 1380 {options = options.slice(0,i);}
n@1170 1381 else {
n@1170 1382 options = options.slice(0,i).concat(options.slice(i+1));
n@1170 1383 }
n@1170 1384 } else {
n@1170 1385 return;
n@1170 1386 }
n@1170 1387 this.specification.options = options;
n@1170 1388 break;
n@1170 1389 }
n@1170 1390 }
n@1170 1391 if (this.input.checked) {
n@1170 1392 var obj = {
n@1170 1393 name: this.name,
n@1170 1394 type: this.type
n@1170 1395 };
n@1170 1396 this.specification.options.push(obj);
n@1170 1397 }
n@1170 1398 if (this.parent.HTMLPoint.id == "setup")
n@1170 1399 {
n@1170 1400 // We've changed a global setting, must update all child 'interfaces' and disable them
n@1170 1401 for (pages of convert.pages)
n@1170 1402 {
n@1170 1403 for (interface of pages.interfaces)
n@1170 1404 {
n@1170 1405 if (this.type == "check")
n@1170 1406 {
n@1170 1407 for (node of interface.children[0].attributes)
n@1170 1408 {
n@1170 1409 if (node.name == this.name) {
n@1170 1410 if (this.input.checked) {
n@1170 1411 node.input.disabled = true;
n@1170 1412 node.input.checked = false;
n@1170 1413 } else {
n@1170 1414 node.input.disabled = false;
n@1170 1415 }
n@1170 1416 break;
n@1170 1417 }
n@1170 1418 }
n@1170 1419 } else if (this.type == "show")
n@1170 1420 {
n@1170 1421 for (node of interface.children[1].attributes)
n@1170 1422 {
n@1170 1423 if (node.name == this.name) {
n@1170 1424 if (this.input.checked) {
n@1170 1425 node.input.disabled = true;
n@1170 1426 } else {
n@1170 1427 node.input.disabled = false;
n@1170 1428 }
n@1170 1429 break;
n@1170 1430 }
n@1170 1431 }
n@1170 1432 }
n@1170 1433 }
n@1170 1434 }
n@1170 1435 }
n@1170 1436 };
n@1170 1437 this.findIndex = function(element,index,array){
n@1170 1438 if (element.name == this.name)
n@1170 1439 return true;
n@1170 1440 else
n@1170 1441 return false;
n@1170 1442 };
n@1170 1443 this.findNode = function(element,index,array){
n@1170 1444 if (element.name == this.name)
n@1170 1445 return true;
n@1170 1446 else
n@1170 1447 return false;
n@1170 1448 };
n@1170 1449 this.input.type = "checkbox";
n@1170 1450 this.input.setAttribute("name",name);
n@1170 1451 this.input.addEventListener("change",this,false);
n@1170 1452 this.root.appendChild(this.input);
n@1170 1453 this.root.className = "attribute";
n@1170 1454 return this;
n@1170 1455 }
n@1170 1456
n@1170 1457 this.build = function(name,id,parent)
n@1170 1458 {
n@1170 1459 var obj = this.parent.createGeneralNodeDOM(name,id,parent);
n@1170 1460
n@1170 1461 this.rootDOM = obj.rootDOM;
n@1170 1462 this.titleDOM = obj.titleDOM;
n@1170 1463 this.attributeDOM = obj.attributeDOM;
n@1170 1464 this.childrenDOM = obj.childrenDOM;
n@1170 1465 this.buttonDOM = obj.buttonsDOM;
n@1170 1466 this.HTMLPoint = parent;
n@1170 1467 this.rootDOM.removeChild(this.attributeDOM);
n@1170 1468 // Put in the check / show options as individual children
n@1170 1469 var checks = this.parent.createGeneralNodeDOM("Checks","setup-interface-checks",this);
n@1170 1470
n@1170 1471 var interfaceName = popupStateNodes.state[1].select.value;
n@1170 1472 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("checks")[0];
n@1170 1473 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
n@1170 1474 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("checks")[0];
n@1170 1475 testXML = testXML.getAllElementsByTagName("checks");
n@1170 1476 for (var i=0; i<interfaceXML.children.length; i++)
n@1170 1477 {
n@1170 1478 var obj = new this.createIOasAttr(interfaceXML.children[i].getAttribute("name"),this.specification,this,"check");
n@1170 1479 for (var option of this.specification.options)
n@1170 1480 {
n@1170 1481 if (option.name == obj.name)
n@1170 1482 {
n@1170 1483 obj.input.checked = true;
n@1170 1484 break;
n@1170 1485 }
n@1170 1486 }
n@1170 1487 if (parent.id != "setup") {
n@1170 1488 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
n@1181 1489 if (node != undefined) {
n@1181 1490 if (node.input.checked) {
n@1181 1491 obj.input.checked = false;
n@1181 1492 obj.input.disabled = true;
n@1181 1493 }
n@1170 1494 }
n@1170 1495 }
n@1170 1496 var text = document.createElement('span');
n@1170 1497 text.textContent = checkText.children[i].textContent;
n@1170 1498 obj.root.appendChild(text);
n@1170 1499 checks.attributeDOM.appendChild(obj.root);
n@1170 1500 checks.attributes.push(obj);
n@1170 1501 }
n@1170 1502 this.children.push(checks);
n@1170 1503 this.childrenDOM.appendChild(checks.rootDOM);
n@1170 1504
n@1170 1505 var show = this.parent.createGeneralNodeDOM("Show","setup-interface-show",this);
n@1170 1506 interfaceName = popupStateNodes.state[1].select.value;
n@1170 1507 checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("show")[0];
n@1170 1508 testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
n@1170 1509 interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("show")[0];
n@1170 1510 testXML = testXML.getAllElementsByTagName("show");
n@1170 1511 for (var i=0; i<interfaceXML.children.length; i++)
n@1170 1512 {
n@1170 1513 var obj = new this.createIOasAttr(interfaceXML.children[i].getAttribute("name"),this.specification,this,"show");
n@1170 1514 for (var option of this.specification.options)
n@1170 1515 {
n@1170 1516 if (option.name == obj.name)
n@1170 1517 {
n@1170 1518 obj.input.checked = true;
n@1170 1519 break;
n@1170 1520 }
n@1170 1521 }
n@1170 1522 if (parent.id != "setup") {
n@1170 1523 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
n@1181 1524 if (node != undefined) {
n@1181 1525 if (node.input.checked) {
n@1181 1526 obj.input.checked = false;
n@1181 1527 obj.input.disabled = true;
n@1181 1528 }
n@1170 1529 }
n@1170 1530 }
n@1170 1531 var text = document.createElement('span');
n@1170 1532 text.textContent = checkText.children[i].textContent;
n@1170 1533 obj.root.appendChild(text);
n@1170 1534 show.attributeDOM.appendChild(obj.root);
n@1170 1535 show.attributes.push(obj);
n@1170 1536 }
n@1170 1537 this.children.push(show);
n@1170 1538 this.childrenDOM.appendChild(show.rootDOM);
n@1170 1539
n@1170 1540 if (parent.id == "setup")
n@1170 1541 {
n@1170 1542 } else {
n@1170 1543 var nameAttr = this.parent.convertAttributeToDOM(this,specification.schema.getAllElementsByName("name")[0]);
n@1170 1544 this.attributeDOM.appendChild(nameAttr.holder);
n@1170 1545 this.attributes.push(nameAttr);
n@1185 1546 var scales = new this.scalesNode(this,this.specification);
n@1185 1547 this.children.push(scales);
n@1185 1548 this.childrenDOM.appendChild(scales.rootDOM);
n@1170 1549 }
n@1170 1550 if (parent != undefined)
n@1170 1551 {
n@1170 1552 parent.appendChild(this.rootDOM);
n@1170 1553 }
n@1170 1554 }
n@1185 1555
n@1185 1556 this.scalesNode = function(parent,rootObject)
n@1185 1557 {
n@1185 1558 this.type = "scalesNode";
n@1185 1559 this.rootDOM = document.createElement("div");
n@1185 1560 this.titleDOM = document.createElement("span");
n@1185 1561 this.attributeDOM = document.createElement("div");
n@1185 1562 this.attributes = [];
n@1185 1563 this.childrenDOM = document.createElement("div");
n@1185 1564 this.children = [];
n@1185 1565 this.buttonDOM = document.createElement("div");
n@1185 1566 this.parent = parent;
n@1185 1567 this.specification = rootObject;
n@1185 1568 this.schema = specification.schema.getAllElementsByName("page")[0];
n@1185 1569 this.rootDOM.className = "node";
n@1185 1570
n@1185 1571 var titleDiv = document.createElement('div');
n@1185 1572 titleDiv.className = "node-title";
n@1185 1573 this.titleDOM.className = "node-title";
n@1185 1574 this.titleDOM.textContent = "Interface Scales";
n@1185 1575 titleDiv.appendChild(this.titleDOM);
n@1185 1576
n@1185 1577 this.attributeDOM.className = "node-attributes";
n@1185 1578 this.childrenDOM.className = "node-children";
n@1185 1579 this.buttonDOM.className = "node-buttons";
n@1185 1580
n@1185 1581 this.rootDOM.appendChild(titleDiv);
n@1185 1582 this.rootDOM.appendChild(this.attributeDOM);
n@1185 1583 this.rootDOM.appendChild(this.childrenDOM);
n@1185 1584 this.rootDOM.appendChild(this.buttonDOM);
n@1185 1585
n@1185 1586 this.editButton = {
n@1185 1587 button: document.createElement("button"),
n@1185 1588 parent: this,
n@1185 1589 handleEvent: function(event) {
n@1185 1590 popupObject.show();
n@1185 1591 popupObject.postNode(popupStateNodes.state[6]);
n@1185 1592 popupStateNodes.state[6].generate(this.parent.specification,this.parent);
n@1185 1593 }
n@1185 1594 };
n@1185 1595 this.editButton.button.textContent = "Edit Scales/Markers";
n@1185 1596 this.editButton.button.addEventListener("click",this.editButton,false);
n@1185 1597 this.buttonDOM.appendChild(this.editButton.button);
n@1185 1598 }
n@1170 1599 }
n@1170 1600
n@1170 1601 this.surveyNode = function(parent,rootObject,location)
n@1170 1602 {
n@1175 1603 this.type = "surveyNode";
n@1170 1604 this.rootDOM = document.createElement("div");
n@1170 1605 this.titleDOM = document.createElement("span");
n@1170 1606 this.attributeDOM = document.createElement("div");
n@1170 1607 this.attributes = [];
n@1170 1608 this.childrenDOM = document.createElement("div");
n@1170 1609 this.children = [];
n@1170 1610 this.buttonDOM = document.createElement("div");
n@1170 1611 this.parent = parent;
n@1170 1612 this.specification = rootObject;
n@1170 1613 this.schema = specification.schema.getAllElementsByName("survey")[1];
n@1170 1614 this.rootDOM.className = "node";
n@1170 1615
n@1170 1616 var titleDiv = document.createElement('div');
n@1170 1617 titleDiv.className = "node-title";
n@1170 1618 this.titleDOM.className = "node-title";
n@1170 1619 this.titleDOM.textContent = "Survey";
n@1170 1620 titleDiv.appendChild(this.titleDOM);
n@1170 1621
n@1170 1622 this.attributeDOM.className = "node-attributes";
n@1170 1623 var locationAttr = document.createElement("span");
n@1170 1624 this.attributeDOM.appendChild(locationAttr);
n@1170 1625 if (location == "Pre" || location == "pre") {
n@1170 1626 locationAttr.textContent = "Location: Before";
n@1170 1627 } else {
n@1170 1628 locationAttr.textContent = "Location: After";
n@1170 1629 }
n@1170 1630 this.childrenDOM.className = "node-children";
n@1170 1631 this.buttonDOM.className = "node-buttons";
n@1170 1632
n@1170 1633 this.rootDOM.appendChild(titleDiv);
n@1170 1634 this.rootDOM.appendChild(this.attributeDOM);
n@1170 1635 this.rootDOM.appendChild(this.childrenDOM);
n@1170 1636 this.rootDOM.appendChild(this.buttonDOM);
n@1170 1637
n@1170 1638 this.surveyEntryNode = function(parent,rootObject)
n@1170 1639 {
n@1175 1640 this.type = "surveyEntryNode";
n@1170 1641 this.rootDOM = document.createElement("div");
n@1170 1642 this.titleDOM = document.createElement("span");
n@1170 1643 this.attributeDOM = document.createElement("div");
n@1170 1644 this.attributes = [];
n@1170 1645 this.childrenDOM = document.createElement("div");
n@1170 1646 this.children = [];
n@1170 1647 this.buttonDOM = document.createElement("div");
n@1170 1648 this.parent = parent;
n@1170 1649 this.specification = rootObject;
n@1170 1650 this.schema = specification.schema.getAllElementsByName("surveyentry")[1];
n@1170 1651
n@1170 1652 this.rootDOM.className = "node";
n@1170 1653 this.rootDOM.style.minWidth = "50%";
n@1170 1654
n@1170 1655 var titleDiv = document.createElement('div');
n@1170 1656 titleDiv.className = "node-title";
n@1170 1657 this.titleDOM.className = "node-title";
n@1170 1658 titleDiv.appendChild(this.titleDOM);
n@1170 1659
n@1170 1660 this.attributeDOM.className = "node-attributes";
n@1170 1661 this.childrenDOM.className = "node-children";
n@1170 1662 this.buttonDOM.className = "node-buttons";
n@1170 1663
n@1170 1664 this.rootDOM.appendChild(titleDiv);
n@1170 1665 this.rootDOM.appendChild(this.attributeDOM);
n@1170 1666 this.rootDOM.appendChild(this.childrenDOM);
n@1170 1667 this.rootDOM.appendChild(this.buttonDOM);
n@1170 1668
n@1175 1669 this.build = function()
n@1175 1670 {
n@1175 1671 this.attributeDOM.innerHTML = null;
n@1175 1672 this.childrenDOM.innerHTML = null;
n@1175 1673 var statementRoot = document.createElement("div");
n@1175 1674 var statement = document.createElement("span");
n@1175 1675 statement.textContent = "Statement / Question: "+this.specification.statement;
n@1175 1676 statementRoot.appendChild(statement);
n@1175 1677 this.children.push(statementRoot);
n@1175 1678 this.childrenDOM.appendChild(statementRoot);
n@1175 1679 switch(this.specification.type)
n@1175 1680 {
n@1175 1681 case "statement":
n@1175 1682 this.titleDOM.textContent = "Statement";
n@1175 1683 break;
n@1175 1684 case "question":
n@1175 1685 this.titleDOM.textContent = "Question";
n@1175 1686 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
n@1175 1687 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
n@1175 1688 var boxsize = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("boxsize")[0]);
n@1175 1689 this.attributeDOM.appendChild(id.holder);
n@1175 1690 this.attributes.push(id);
n@1175 1691 this.attributeDOM.appendChild(mandatory.holder);
n@1175 1692 this.attributes.push(mandatory);
n@1175 1693 this.attributeDOM.appendChild(boxsize.holder);
n@1175 1694 this.attributes.push(boxsize);
n@1175 1695 break;
n@1175 1696 case "number":
n@1175 1697 this.titleDOM.textContent = "Number";
n@1175 1698 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
n@1175 1699 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
n@1175 1700 var min = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("min")[0]);
n@1175 1701 var max = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("max")[0]);
n@1175 1702 this.attributeDOM.appendChild(id.holder);
n@1175 1703 this.attributes.push(id);
n@1175 1704 this.attributeDOM.appendChild(min.holder);
n@1175 1705 this.attributes.push(min);
n@1175 1706 this.attributeDOM.appendChild(max.holder);
n@1175 1707 this.attributes.push(max);
n@1175 1708 break;
n@1175 1709 case "checkbox":
n@1175 1710 this.titleDOM.textContent = "Checkbox";
n@1175 1711 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
n@1175 1712 this.attributeDOM.appendChild(id.holder);
n@1175 1713 this.attributes.push(id);
n@1175 1714 break;
n@1175 1715 case "radio":
n@1175 1716 this.titleDOM.textContent = "Radio";
n@1175 1717 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
n@1175 1718 this.attributeDOM.appendChild(id.holder);
n@1175 1719 this.attributes.push(id);
n@1175 1720 break;
n@1175 1721 }
n@1170 1722 }
n@1175 1723 this.build();
n@1170 1724
n@1170 1725 this.editNode = {
n@1170 1726 root: document.createElement("button"),
n@1170 1727 parent: this,
n@1170 1728 handleEvent: function()
n@1170 1729 {
n@1170 1730 popupObject.show();
n@1175 1731 popupStateNodes.state[5].generate(this.parent.specification,this.parent);
n@1170 1732 popupObject.postNode(popupStateNodes.state[5]);
n@1170 1733 }
n@1170 1734 }
n@1170 1735 this.editNode.root.textContent = "Edit Entry";
n@1170 1736 this.editNode.root.addEventListener("click",this.editNode,false);
n@1170 1737 this.buttonDOM.appendChild(this.editNode.root);
n@1170 1738
n@1170 1739 this.deleteNode = {
n@1170 1740 root: document.createElement("button"),
n@1170 1741 parent: this,
n@1170 1742 handleEvent: function()
n@1170 1743 {
n@1170 1744 var optionList = this.parent.parent.specification.options;
n@1170 1745 var childList = this.parent.parent.children;
n@1170 1746 for (var i=0; i <this.parent.parent.specification.options.length; i++)
n@1170 1747 {
n@1170 1748 var option = this.parent.parent.specification.options[i];
n@1170 1749 if (option == this.parent.specification)
n@1170 1750 {
n@1170 1751 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
n@1170 1752 if (i == this.parent.parent.specification.options.length-1)
n@1170 1753 {
n@1170 1754 optionList = optionList.slice(0,i);
n@1170 1755 childList = childList.slice(0,i);
n@1170 1756 }
n@1170 1757 else {
n@1170 1758 optionList = optionList.slice(0,i).concat(optionList.slice(i+1));
n@1170 1759 childList = childList.slice(0,i).concat(childList.slice(i+1));
n@1170 1760 }
n@1170 1761 this.parent.parent.specification.options = optionList;
n@1170 1762 this.parent.parent.children = childList;
n@1170 1763 }
n@1170 1764 }
n@1170 1765 }
n@1170 1766 }
n@1170 1767 this.deleteNode.root.textContent = "Delete Entry";
n@1170 1768 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
n@1170 1769 this.buttonDOM.appendChild(this.deleteNode.root);
n@1170 1770 }
n@1170 1771 this.addNode = {
n@1170 1772 root: document.createElement("button"),
n@1170 1773 parent: this,
n@1170 1774 handleEvent: function()
n@1170 1775 {
n@1170 1776 var newNode = new this.parent.specification.OptionNode();
n@1170 1777 this.parent.specification.options.push(newNode);
n@1170 1778 popupObject.show();
n@1170 1779 popupStateNodes.state[5].generate(newNode,this.parent);
n@1170 1780 popupObject.postNode(popupStateNodes.state[5]);
n@1170 1781 }
n@1170 1782 }
n@1170 1783 this.addNode.root.textContent = "Add Survey Entry";
n@1170 1784 this.addNode.root.addEventListener("click",this.addNode,false);
n@1170 1785 this.buttonDOM.appendChild(this.addNode.root);
n@1170 1786
n@1170 1787 for (var option of this.specification.options)
n@1170 1788 {
n@1170 1789 var newNode = new this.surveyEntryNode(this,option);
n@1170 1790 this.children.push(newNode);
n@1170 1791 this.childrenDOM.appendChild(newNode.rootDOM);
n@1170 1792 }
n@1170 1793 }
n@1170 1794
n@1170 1795 this.pageNode = function(parent,rootObject)
n@1170 1796 {
n@1175 1797 this.type = "pageNode";
n@1170 1798 this.rootDOM = document.createElement("div");
n@1170 1799 this.titleDOM = document.createElement("span");
n@1170 1800 this.attributeDOM = document.createElement("div");
n@1170 1801 this.attributes = [];
n@1170 1802 this.childrenDOM = document.createElement("div");
n@1170 1803 this.children = [];
n@1170 1804 this.buttonDOM = document.createElement("div");
n@1170 1805 this.parent = parent;
n@1170 1806 this.specification = rootObject;
n@1170 1807 this.schema = specification.schema.getAllElementsByName("page")[0];
n@1170 1808 this.rootDOM.className = "node";
n@1170 1809
n@1170 1810 var titleDiv = document.createElement('div');
n@1170 1811 titleDiv.className = "node-title";
n@1170 1812 this.titleDOM.className = "node-title";
n@1170 1813 this.titleDOM.textContent = "Test Page";
n@1170 1814 titleDiv.appendChild(this.titleDOM);
n@1170 1815
n@1170 1816 this.attributeDOM.className = "node-attributes";
n@1170 1817 this.childrenDOM.className = "node-children";
n@1170 1818 this.buttonDOM.className = "node-buttons";
n@1170 1819
n@1170 1820 this.rootDOM.appendChild(titleDiv);
n@1170 1821 this.rootDOM.appendChild(this.attributeDOM);
n@1170 1822 this.rootDOM.appendChild(this.childrenDOM);
n@1170 1823 this.rootDOM.appendChild(this.buttonDOM);
n@1170 1824
n@1170 1825 // Do the comment prefix node
n@1170 1826 var cpn = this.parent.createGeneralNodeDOM("Comment Prefix",""+this.specification.id+"-commentprefix",this.parent);
n@1170 1827 cpn.rootDOM.removeChild(cpn.attributeDOM);
n@1170 1828 var obj = {
n@1170 1829 root: document.createElement("div"),
n@1170 1830 input: document.createElement("input"),
n@1170 1831 parent: this,
n@1170 1832 handleEvent: function()
n@1170 1833 {
n@1170 1834 this.parent.specification.commentBoxPrefix = event.currentTarget.value;
n@1170 1835 }
n@1170 1836 }
n@1170 1837 cpn.children.push(obj);
n@1170 1838 cpn.childrenDOM.appendChild(obj.root);
n@1170 1839 obj.root.appendChild(obj.input);
n@1170 1840 obj.input.addEventListener("change",obj,false);
n@1170 1841 obj.input.value = this.specification.commentBoxPrefix;
n@1170 1842 this.childrenDOM.appendChild(cpn.rootDOM);
n@1170 1843 this.children.push(cpn);
n@1170 1844
n@1170 1845 // Now both before and after surveys
n@1170 1846 if (this.specification.preTest == undefined){
n@1170 1847 this.specification.preTest = new specification.surveyNode();
n@1170 1848 this.specification.preTest.location = "pre";
n@1170 1849 }
n@1170 1850 if (this.specification.postTest == undefined){
n@1170 1851 this.specification.postTest = new specification.surveyNode();
n@1170 1852 this.specification.postTest.location = "post";
n@1170 1853 }
n@1170 1854 var surveyBefore = new this.parent.surveyNode(this,this.specification.preTest,"Pre");
n@1170 1855 var surveyAfter = new this.parent.surveyNode(this,this.specification.postTest,"Post");
n@1170 1856 this.children.push(surveyBefore);
n@1170 1857 this.children.push(surveyAfter);
n@1170 1858 this.childrenDOM.appendChild(surveyBefore.rootDOM);
n@1170 1859 this.childrenDOM.appendChild(surveyAfter.rootDOM);
n@1170 1860
n@1170 1861 // Build the attributes
n@1170 1862 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
n@1170 1863 for (var i=0; i<attributeList.length; i++)
n@1170 1864 {
n@1170 1865 var attributeName = attributeList[i].getAttribute('name');
n@1170 1866 var attrObject = this.parent.convertAttributeToDOM(rootObject,attributeList[i]);
n@1170 1867 this.attributeDOM.appendChild(attrObject.holder);
n@1170 1868 this.attributes.push(attrObject);
n@1170 1869 }
n@1170 1870
n@1170 1871 this.interfaces = [];
n@1170 1872
n@1170 1873 this.audioElementNode = function(parent,rootObject)
n@1170 1874 {
n@1175 1875 this.type = "audioElementNode";
n@1170 1876 this.rootDOM = document.createElement("div");
n@1170 1877 this.titleDOM = document.createElement("span");
n@1170 1878 this.attributeDOM = document.createElement("div");
n@1170 1879 this.attributes = [];
n@1170 1880 this.childrenDOM = document.createElement("div");
n@1170 1881 this.children = [];
n@1170 1882 this.buttonDOM = document.createElement("div");
n@1170 1883 this.parent = parent;
n@1170 1884 this.specification = rootObject;
n@1170 1885 this.schema = specification.schema.getAllElementsByName("audioelement")[0];
n@1170 1886 this.rootDOM.className = "node";
n@1170 1887
n@1170 1888 var titleDiv = document.createElement('div');
n@1170 1889 titleDiv.className = "node-title";
n@1170 1890 this.titleDOM.className = "node-title";
n@1170 1891 this.titleDOM.textContent = "Audio Element";
n@1170 1892 titleDiv.appendChild(this.titleDOM);
n@1170 1893
n@1170 1894 this.attributeDOM.className = "node-attributes";
n@1170 1895 this.childrenDOM.className = "node-children";
n@1170 1896 this.buttonDOM.className = "node-buttons";
n@1170 1897
n@1170 1898 this.rootDOM.appendChild(titleDiv);
n@1170 1899 this.rootDOM.appendChild(this.attributeDOM);
n@1170 1900 this.rootDOM.appendChild(this.childrenDOM);
n@1170 1901 this.rootDOM.appendChild(this.buttonDOM);
n@1170 1902
n@1170 1903 // Build the attributes
n@1170 1904 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
n@1170 1905 for (var i=0; i<attributeList.length; i++)
n@1170 1906 {
n@1170 1907 var attributeName = attributeList[i].getAttribute('name');
n@1170 1908 var attrObject = this.parent.parent.convertAttributeToDOM(rootObject,attributeList[i]);
n@1170 1909 this.attributeDOM.appendChild(attrObject.holder);
n@1170 1910 this.attributes.push(attrObject);
n@1170 1911 }
n@1170 1912
n@1170 1913 this.deleteNode = {
n@1170 1914 root: document.createElement("button"),
n@1170 1915 parent: this,
n@1170 1916 handleEvent: function()
n@1170 1917 {
n@1170 1918 var i = this.parent.parent.specification.audioElements.findIndex(this.findNode,this);
n@1170 1919 if (i >= 0) {
n@1170 1920 var aeList = this.parent.parent.specification.audioElements;
n@1170 1921 if (i < aeList.length-1) {
n@1170 1922 aeList = aeList.slice(0,i).concat(aeList.slice(i+1));
n@1170 1923 } else {
n@1170 1924 aeList = aeList.slice(0,i);
n@1170 1925 }
n@1170 1926 }
n@1170 1927 i = this.parent.parent.children.findIndex(function(element,index,array){
n@1170 1928 if (element == this.parent)
n@1170 1929 return true;
n@1170 1930 else
n@1170 1931 return false;
n@1170 1932 },this);
n@1170 1933 if (i >= 0) {
n@1170 1934 var childList = this.parent.children;
n@1170 1935 if (i < aeList.length-1) {
n@1170 1936 childList = childList.slice(0,i).concat(childList.slice(i+1));
n@1170 1937 } else {
n@1170 1938 childList = childList.slice(0,i);
n@1170 1939 }
n@1170 1940 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
n@1170 1941 }
n@1170 1942 },
n@1170 1943 findNode: function(element,index,array){
n@1170 1944 if (element == this.parent.specification)
n@1170 1945 return true;
n@1170 1946 else
n@1170 1947 return false;
n@1170 1948 }
n@1170 1949 }
n@1170 1950 this.deleteNode.root.textContent = "Delete Entry";
n@1170 1951 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
n@1170 1952 this.buttonDOM.appendChild(this.deleteNode.root);
n@1170 1953 }
n@1170 1954
n@1170 1955 this.commentQuestionNode = function(parent,rootObject)
n@1170 1956 {
n@1175 1957 this.type = "commentQuestionNode";
n@1170 1958 this.rootDOM = document.createElement("div");
n@1170 1959 this.titleDOM = document.createElement("span");
n@1170 1960 this.attributeDOM = document.createElement("div");
n@1170 1961 this.attributes = [];
n@1170 1962 this.childrenDOM = document.createElement("div");
n@1170 1963 this.children = [];
n@1170 1964 this.buttonDOM = document.createElement("div");
n@1170 1965 this.parent = parent;
n@1170 1966 this.specification = rootObject;
n@1170 1967 this.schema = specification.schema.getAllElementsByName("page")[0];
n@1170 1968 this.rootDOM.className = "node";
n@1170 1969
n@1170 1970 var titleDiv = document.createElement('div');
n@1170 1971 titleDiv.className = "node-title";
n@1170 1972 this.titleDOM.className = "node-title";
n@1170 1973 this.titleDOM.textContent = "Test Page";
n@1170 1974 titleDiv.appendChild(this.titleDOM);
n@1170 1975
n@1170 1976 this.attributeDOM.className = "node-attributes";
n@1170 1977 this.childrenDOM.className = "node-children";
n@1170 1978 this.buttonDOM.className = "node-buttons";
n@1170 1979
n@1170 1980 this.rootDOM.appendChild(titleDiv);
n@1170 1981 this.rootDOM.appendChild(this.attributeDOM);
n@1170 1982 this.rootDOM.appendChild(this.childrenDOM);
n@1170 1983 this.rootDOM.appendChild(this.buttonDOM);
n@1170 1984
n@1170 1985 }
n@1170 1986
n@1174 1987 // Build the components
n@1110 1988 if (this.specification.interfaces.length == 0) {
n@1110 1989 this.specification.interfaces.push(new specification.interfaceNode());
n@1110 1990 }
n@1181 1991 for (var interfaceObj of this.specification.interfaces)
n@1181 1992 {
n@1181 1993 var newInterface = new this.parent.interfaceNode(this.parent,interfaceObj);
n@1181 1994 newInterface.build("Interface",""+this.specification.id+"-interface",this.childrenDOM);
n@1181 1995 this.children.push(newInterface);
n@1181 1996 this.interfaces.push(newInterface);
n@1181 1997 }
n@1181 1998
n@1174 1999 for (var elements of this.specification.audioElements)
n@1174 2000 {
n@1174 2001 var audioElementDOM = new this.audioElementNode(this,elements);
n@1174 2002 this.children.push(audioElementDOM);
n@1174 2003 this.childrenDOM.appendChild(audioElementDOM.rootDOM);
n@1174 2004 }
n@1174 2005
n@1170 2006 this.addInterface = {
n@1170 2007 root: document.createElement("button"),
n@1170 2008 parent: this,
n@1170 2009 handleEvent: function() {
n@1170 2010 var InterfaceObj = new specification.interfaceNode();
n@1170 2011 var newInterface = new this.parent.parent.interfaceNode(this.parent.parent,InterfaceObj);
n@1170 2012 newInterface.build("Interface",""+this.parent.specification.id+"-interface",this.parent.childrenDOM);
n@1170 2013 this.parent.children.push(newInterface);
n@1170 2014 this.parent.specification.interfaces.push(InterfaceObj);
n@1170 2015 this.parent.interfaces.push(newInterface);
n@1170 2016 }
n@1170 2017 }
n@1170 2018 this.addInterface.root.textContent = "Add Interface";
n@1170 2019 this.addInterface.root.addEventListener("click",this.addInterface,false);
n@1170 2020 this.buttonDOM.appendChild(this.addInterface.root);
n@1170 2021
n@1170 2022 this.addAudioElement = {
n@1170 2023 root: document.createElement("button"),
n@1170 2024 parent: this,
n@1170 2025 handleEvent: function() {
n@1170 2026 var audioElementObject = new this.parent.specification.audioElementNode();
n@1170 2027 var audioElementDOM = new this.parent.audioElementNode(this.parent,audioElementObject);
n@1170 2028 this.parent.specification.audioElements.push(audioElementObject);
n@1170 2029 this.parent.children.push(audioElementDOM);
n@1170 2030 this.parent.childrenDOM.appendChild(audioElementDOM.rootDOM);
n@1170 2031 }
n@1170 2032 }
n@1170 2033 this.addAudioElement.root.textContent = "Add Audio Element";
n@1170 2034 this.addAudioElement.root.addEventListener("click",this.addAudioElement,false);
n@1170 2035 this.buttonDOM.appendChild(this.addAudioElement.root);
n@1170 2036 }
n@1170 2037 }