annotate test_create/test_core.js @ 1099:0a15fa67bda1

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