annotate test_create/test_core.js @ 2364:de1d5100d7a1

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