annotate test_create/test_core.js @ 1385:bc75c4180b4d

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