annotate test_create/test_create.html @ 1102:b5bf2f57187c

Merge
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Tue, 08 Mar 2016 14:44:14 +0000
parents 0a15fa67bda1
children 83b439322229
rev   line source
djmoffat@1099 1 <html>
djmoffat@1099 2 <head>
djmoffat@1099 3 <!-- This defines the test creator tool for the Web Audio Evaluation Toolbox -->
djmoffat@1099 4 <link rel='stylesheet' type="text/css" href="style.css"/>
n@1102 5 <link rel='stylesheet' type="text/css" href="custom.css"/>
djmoffat@1099 6 <script type="text/javascript">
n@1102 7 window.onbeforeunload = function (e) {var message = 'If you leave the page now, any unsaved changes will be lost', e = e || window.event; if (e) { e.returnValue = message;}return message;};
djmoffat@1099 8 // Copy of Specifiation node from Core.js
djmoffat@1099 9 function Specification() {
djmoffat@1099 10 // Handles the decoding of the project specification XML into a simple JavaScript Object.
djmoffat@1099 11
djmoffat@1099 12 this.interface = null;
djmoffat@1099 13 this.projectReturn = "null";
djmoffat@1099 14 this.randomiseOrder = null;
djmoffat@1099 15 this.testPages = null;
djmoffat@1099 16 this.pages = [];
djmoffat@1099 17 this.metrics = null;
djmoffat@1099 18 this.interfaces = null;
djmoffat@1099 19 this.loudness = null;
djmoffat@1099 20 this.errors = [];
djmoffat@1099 21 this.schema = null;
djmoffat@1099 22
djmoffat@1099 23 this.processAttribute = function(attribute,schema)
djmoffat@1099 24 {
djmoffat@1099 25 // attribute is the string returned from getAttribute on the XML
djmoffat@1099 26 // schema is the <xs:attribute> node
djmoffat@1099 27 if (schema.getAttribute('name') == undefined && schema.getAttribute('ref') != undefined)
djmoffat@1099 28 {
djmoffat@1099 29 schema = this.schema.getAllElementsByName(schema.getAttribute('ref'))[0];
djmoffat@1099 30 }
djmoffat@1099 31 var defaultOpt = schema.getAttribute('default');
djmoffat@1099 32 if (attribute == null) {
djmoffat@1099 33 attribute = defaultOpt;
djmoffat@1099 34 }
djmoffat@1099 35 var dataType = schema.getAttribute('type');
djmoffat@1099 36 if (typeof dataType == "string") { dataType = dataType.substr(3);}
djmoffat@1099 37 else {dataType = "string";}
djmoffat@1099 38 if (attribute == null)
djmoffat@1099 39 {
djmoffat@1099 40 return attribute;
djmoffat@1099 41 }
djmoffat@1099 42 switch(dataType)
djmoffat@1099 43 {
djmoffat@1099 44 case "boolean":
djmoffat@1099 45 if (attribute == 'true'){attribute = true;}else{attribute=false;}
djmoffat@1099 46 break;
djmoffat@1099 47 case "negativeInteger":
djmoffat@1099 48 case "positiveInteger":
djmoffat@1099 49 case "nonNegativeInteger":
djmoffat@1099 50 case "nonPositiveInteger":
djmoffat@1099 51 case "integer":
djmoffat@1099 52 case "decimal":
djmoffat@1099 53 case "short":
djmoffat@1099 54 attribute = Number(attribute);
djmoffat@1099 55 break;
djmoffat@1099 56 case "string":
djmoffat@1099 57 default:
djmoffat@1099 58 attribute = String(attribute);
djmoffat@1099 59 break;
djmoffat@1099 60 }
djmoffat@1099 61 return attribute;
djmoffat@1099 62 };
djmoffat@1099 63
djmoffat@1099 64 this.decode = function(projectXML) {
djmoffat@1099 65 this.errors = [];
djmoffat@1099 66 // projectXML - DOM Parsed document
djmoffat@1099 67 this.projectXML = projectXML.childNodes[0];
djmoffat@1099 68 var setupNode = projectXML.getElementsByTagName('setup')[0];
djmoffat@1099 69 var schemaSetup = this.schema.getAllElementsByName('setup')[0];
djmoffat@1099 70 // First decode the attributes
djmoffat@1099 71 var attributes = schemaSetup.getAllElementsByTagName('xs:attribute');
djmoffat@1099 72 for (var i in attributes)
djmoffat@1099 73 {
djmoffat@1099 74 if (isNaN(Number(i)) == true){break;}
djmoffat@1099 75 var attributeName = attributes[i].getAttribute('name');
djmoffat@1099 76 var projectAttr = setupNode.getAttribute(attributeName);
djmoffat@1099 77 projectAttr = this.processAttribute(projectAttr,attributes[i]);
djmoffat@1099 78 switch(typeof projectAttr)
djmoffat@1099 79 {
djmoffat@1099 80 case "number":
djmoffat@1099 81 case "boolean":
djmoffat@1099 82 eval('this.'+attributeName+' = '+projectAttr);
djmoffat@1099 83 break;
djmoffat@1099 84 case "string":
djmoffat@1099 85 eval('this.'+attributeName+' = "'+projectAttr+'"');
djmoffat@1099 86 break;
djmoffat@1099 87 }
djmoffat@1099 88
djmoffat@1099 89 }
djmoffat@1099 90
djmoffat@1099 91 this.metrics = new this.metricNode();
djmoffat@1099 92
djmoffat@1099 93 this.metrics.decode(this,setupNode.getElementsByTagName('metric')[0]);
djmoffat@1099 94
djmoffat@1099 95 // Now process the survey node options
djmoffat@1099 96 var survey = setupNode.getElementsByTagName('survey');
djmoffat@1099 97 for (var i in survey) {
djmoffat@1099 98 if (isNaN(Number(i)) == true){break;}
djmoffat@1099 99 var location = survey[i].getAttribute('location');
djmoffat@1099 100 if (location == 'pre' || location == 'before')
djmoffat@1099 101 {
djmoffat@1099 102 if (this.preTest != null){this.errors.push("Already a pre/before test survey defined! Ignoring second!!");}
djmoffat@1099 103 else {
djmoffat@1099 104 this.preTest = new this.surveyNode();
djmoffat@1099 105 this.preTest.decode(this,survey[i]);
djmoffat@1099 106 }
djmoffat@1099 107 } else if (location == 'post' || location == 'after') {
djmoffat@1099 108 if (this.postTest != null){this.errors.push("Already a post/after test survey defined! Ignoring second!!");}
djmoffat@1099 109 else {
djmoffat@1099 110 this.postTest = new this.surveyNode();
djmoffat@1099 111 this.postTest.decode(this,survey[i]);
djmoffat@1099 112 }
djmoffat@1099 113 }
djmoffat@1099 114 }
djmoffat@1099 115
djmoffat@1099 116 var interfaceNode = setupNode.getElementsByTagName('interface');
djmoffat@1099 117 if (interfaceNode.length > 1)
djmoffat@1099 118 {
djmoffat@1099 119 this.errors.push("Only one <interface> node in the <setup> node allowed! Others except first ingnored!");
djmoffat@1099 120 }
djmoffat@1099 121 this.interfaces = new this.interfaceNode();
djmoffat@1099 122 if (interfaceNode.length != 0)
djmoffat@1099 123 {
djmoffat@1099 124 interfaceNode = interfaceNode[0];
djmoffat@1099 125 this.interfaces.decode(this,interfaceNode,this.schema.getAllElementsByName('interface')[1]);
djmoffat@1099 126 }
djmoffat@1099 127
djmoffat@1099 128 // Page tags
djmoffat@1099 129 var pageTags = projectXML.getElementsByTagName('page');
djmoffat@1099 130 var pageSchema = this.schema.getAllElementsByName('page')[0];
djmoffat@1099 131 for (var i=0; i<pageTags.length; i++)
djmoffat@1099 132 {
djmoffat@1099 133 var node = new this.page();
djmoffat@1099 134 node.decode(this,pageTags[i],pageSchema);
djmoffat@1099 135 this.pages.push(node);
djmoffat@1099 136 }
djmoffat@1099 137 };
djmoffat@1099 138
djmoffat@1099 139 this.encode = function()
djmoffat@1099 140 {
djmoffat@1099 141 var RootDocument = document.implementation.createDocument(null,"waet");
djmoffat@1099 142 var root = RootDocument.children[0];
djmoffat@1099 143 root.setAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");
djmoffat@1099 144 root.setAttribute("xsi:noNamespaceSchemaLocation","test-schema.xsd");
djmoffat@1099 145 // Build setup node
djmoffat@1099 146 var setup = RootDocument.createElement("setup");
djmoffat@1099 147 var schemaSetup = this.schema.getAllElementsByName('setup')[0];
djmoffat@1099 148 // First decode the attributes
djmoffat@1099 149 var attributes = schemaSetup.getAllElementsByTagName('xs:attribute');
djmoffat@1099 150 for (var i=0; i<attributes.length; i++)
djmoffat@1099 151 {
djmoffat@1099 152 var name = attributes[i].getAttribute("name");
djmoffat@1099 153 if (name == undefined) {
djmoffat@1099 154 name = attributes[i].getAttribute("ref");
djmoffat@1099 155 }
djmoffat@1099 156 if(eval("this."+name+" != undefined") || attributes[i].getAttribute("use") == "required")
djmoffat@1099 157 {
djmoffat@1099 158 eval("setup.setAttribute('"+name+"',this."+name+")");
djmoffat@1099 159 }
djmoffat@1099 160 }
djmoffat@1099 161 root.appendChild(setup);
djmoffat@1099 162 // Survey node
djmoffat@1099 163 setup.appendChild(this.preTest.encode(RootDocument));
djmoffat@1099 164 setup.appendChild(this.postTest.encode(RootDocument));
djmoffat@1099 165 setup.appendChild(this.metrics.encode(RootDocument));
djmoffat@1099 166 setup.appendChild(this.interfaces.encode(RootDocument));
djmoffat@1099 167 for (var page of this.pages)
djmoffat@1099 168 {
djmoffat@1099 169 root.appendChild(page.encode(RootDocument));
djmoffat@1099 170 }
djmoffat@1099 171 return RootDocument;
djmoffat@1099 172 };
djmoffat@1099 173
djmoffat@1099 174 this.surveyNode = function() {
djmoffat@1099 175 this.location = null;
djmoffat@1099 176 this.options = [];
djmoffat@1099 177 this.schema = specification.schema.getAllElementsByName('survey')[0];
djmoffat@1099 178
djmoffat@1099 179 this.OptionNode = function() {
djmoffat@1099 180 this.type = undefined;
djmoffat@1099 181 this.schema = specification.schema.getAllElementsByName('surveyentry')[0];
djmoffat@1099 182 this.id = undefined;
djmoffat@1099 183 this.mandatory = undefined;
djmoffat@1099 184 this.statement = undefined;
djmoffat@1099 185 this.boxsize = undefined;
djmoffat@1099 186 this.options = [];
djmoffat@1099 187 this.min = undefined;
djmoffat@1099 188 this.max = undefined;
djmoffat@1099 189 this.step = undefined;
djmoffat@1099 190
djmoffat@1099 191 this.decode = function(parent,child)
djmoffat@1099 192 {
djmoffat@1099 193 var attributeMap = this.schema.getAllElementsByTagName('xs:attribute');
djmoffat@1099 194 for (var i in attributeMap){
djmoffat@1099 195 if(isNaN(Number(i)) == true){break;}
djmoffat@1099 196 var attributeName = attributeMap[i].getAttribute('name') || attributeMap[i].getAttribute('ref');
djmoffat@1099 197 var projectAttr = child.getAttribute(attributeName);
djmoffat@1099 198 projectAttr = parent.processAttribute(projectAttr,attributeMap[i]);
djmoffat@1099 199 switch(typeof projectAttr)
djmoffat@1099 200 {
djmoffat@1099 201 case "number":
djmoffat@1099 202 case "boolean":
djmoffat@1099 203 eval('this.'+attributeName+' = '+projectAttr);
djmoffat@1099 204 break;
djmoffat@1099 205 case "string":
djmoffat@1099 206 eval('this.'+attributeName+' = "'+projectAttr+'"');
djmoffat@1099 207 break;
djmoffat@1099 208 }
djmoffat@1099 209 }
djmoffat@1099 210 this.statement = child.getElementsByTagName('statement')[0].textContent;
djmoffat@1099 211 if (this.type == "checkbox" || this.type == "radio") {
djmoffat@1099 212 var children = child.getElementsByTagName('option');
djmoffat@1099 213 if (children.length == null) {
djmoffat@1099 214 console.log('Malformed' +child.nodeName+ 'entry');
djmoffat@1099 215 this.statement = 'Malformed' +child.nodeName+ 'entry';
djmoffat@1099 216 this.type = 'statement';
djmoffat@1099 217 } else {
djmoffat@1099 218 this.options = [];
djmoffat@1099 219 for (var i in children)
djmoffat@1099 220 {
djmoffat@1099 221 if (isNaN(Number(i))==true){break;}
djmoffat@1099 222 this.options.push({
djmoffat@1099 223 name: children[i].getAttribute('name'),
djmoffat@1099 224 text: children[i].textContent
djmoffat@1099 225 });
djmoffat@1099 226 }
djmoffat@1099 227 }
djmoffat@1099 228 }
djmoffat@1099 229 };
djmoffat@1099 230
djmoffat@1099 231 this.exportXML = function(doc)
djmoffat@1099 232 {
n@1102 233 var node = doc.createElement('surveyentry');
djmoffat@1099 234 node.setAttribute('type',this.type);
djmoffat@1099 235 var statement = doc.createElement('statement');
djmoffat@1099 236 statement.textContent = this.statement;
djmoffat@1099 237 node.appendChild(statement);
djmoffat@1099 238 switch(this.type)
djmoffat@1099 239 {
djmoffat@1099 240 case "statement":
djmoffat@1099 241 break;
djmoffat@1099 242 case "question":
djmoffat@1099 243 node.id = this.id;
n@1102 244 if (this.mandatory != undefined) { node.setAttribute("mandatory",this.mandatory);}
n@1102 245 if (this.boxsize != undefined) {node.setAttribute("boxsize",this.boxsize);}
djmoffat@1099 246 break;
djmoffat@1099 247 case "number":
djmoffat@1099 248 node.id = this.id;
n@1102 249 if (this.mandatory != undefined) { node.setAttribute("mandatory",this.mandatory);}
n@1102 250 if (this.min != undefined) {node.setAttribute("min", this.min);}
n@1102 251 if (this.max != undefined) {node.setAttribute("max", this.max);}
djmoffat@1099 252 break;
djmoffat@1099 253 case "checkbox":
djmoffat@1099 254 case "radio":
djmoffat@1099 255 node.id = this.id;
djmoffat@1099 256 for (var i=0; i<this.options.length; i++)
djmoffat@1099 257 {
djmoffat@1099 258 var option = this.options[i];
djmoffat@1099 259 var optionNode = doc.createElement("option");
djmoffat@1099 260 optionNode.setAttribute("name",option.name);
djmoffat@1099 261 optionNode.textContent = option.text;
djmoffat@1099 262 node.appendChild(optionNode);
djmoffat@1099 263 }
djmoffat@1099 264 break;
djmoffat@1099 265 }
djmoffat@1099 266 return node;
djmoffat@1099 267 };
djmoffat@1099 268 };
djmoffat@1099 269 this.decode = function(parent,xml) {
djmoffat@1099 270 this.location = xml.getAttribute('location');
djmoffat@1099 271 if (this.location == 'before'){this.location = 'pre';}
djmoffat@1099 272 else if (this.location == 'after'){this.location = 'post';}
djmoffat@1099 273 for (var i in xml.children)
djmoffat@1099 274 {
djmoffat@1099 275 if(isNaN(Number(i))==true){break;}
djmoffat@1099 276 var node = new this.OptionNode();
djmoffat@1099 277 node.decode(parent,xml.children[i]);
djmoffat@1099 278 this.options.push(node);
djmoffat@1099 279 }
djmoffat@1099 280 };
djmoffat@1099 281 this.encode = function(doc) {
djmoffat@1099 282 var node = doc.createElement('survey');
djmoffat@1099 283 node.setAttribute('location',this.location);
djmoffat@1099 284 for (var i=0; i<this.options.length; i++)
djmoffat@1099 285 {
djmoffat@1099 286 node.appendChild(this.options[i].exportXML(doc));
djmoffat@1099 287 }
djmoffat@1099 288 return node;
djmoffat@1099 289 };
djmoffat@1099 290 };
djmoffat@1099 291
djmoffat@1099 292 this.interfaceNode = function()
djmoffat@1099 293 {
djmoffat@1099 294 this.title = null;
djmoffat@1099 295 this.name = null;
djmoffat@1099 296 this.options = [];
djmoffat@1099 297 this.scales = [];
djmoffat@1099 298 this.schema = specification.schema.getAllElementsByName('interface')[1];
djmoffat@1099 299
djmoffat@1099 300 this.decode = function(parent,xml) {
djmoffat@1099 301 this.name = xml.getAttribute('name');
djmoffat@1099 302 var titleNode = xml.getElementsByTagName('title');
djmoffat@1099 303 if (titleNode.length == 1)
djmoffat@1099 304 {
djmoffat@1099 305 this.title = titleNode[0].textContent;
djmoffat@1099 306 }
djmoffat@1099 307 var interfaceOptionNodes = xml.getElementsByTagName('interfaceoption');
djmoffat@1099 308 // Extract interfaceoption node schema
djmoffat@1099 309 var interfaceOptionNodeSchema = this.schema.getAllElementsByName('interfaceoption')[0];
djmoffat@1099 310 var attributeMap = interfaceOptionNodeSchema.getAllElementsByTagName('xs:attribute');
djmoffat@1099 311 for (var i=0; i<interfaceOptionNodes.length; i++)
djmoffat@1099 312 {
djmoffat@1099 313 var ioNode = interfaceOptionNodes[i];
djmoffat@1099 314 var option = {};
djmoffat@1099 315 for (var j=0; j<attributeMap.length; j++)
djmoffat@1099 316 {
djmoffat@1099 317 var attributeName = attributeMap[j].getAttribute('name') || attributeMap[j].getAttribute('ref');
djmoffat@1099 318 var projectAttr = ioNode.getAttribute(attributeName);
djmoffat@1099 319 projectAttr = parent.processAttribute(projectAttr,attributeMap[j]);
djmoffat@1099 320 switch(typeof projectAttr)
djmoffat@1099 321 {
djmoffat@1099 322 case "number":
djmoffat@1099 323 case "boolean":
djmoffat@1099 324 eval('option.'+attributeName+' = '+projectAttr);
djmoffat@1099 325 break;
djmoffat@1099 326 case "string":
djmoffat@1099 327 eval('option.'+attributeName+' = "'+projectAttr+'"');
djmoffat@1099 328 break;
djmoffat@1099 329 }
djmoffat@1099 330 }
djmoffat@1099 331 this.options.push(option);
djmoffat@1099 332 }
djmoffat@1099 333
djmoffat@1099 334 // Now the scales nodes
djmoffat@1099 335 var scaleParent = xml.getElementsByTagName('scales');
djmoffat@1099 336 if (scaleParent.length == 1) {
djmoffat@1099 337 scaleParent = scaleParent[0];
djmoffat@1099 338 for (var i=0; i<scaleParent.children.length; i++) {
djmoffat@1099 339 var child = scaleParent.children[i];
djmoffat@1099 340 this.scales.push({
djmoffat@1099 341 text: child.textContent,
djmoffat@1099 342 position: Number(child.getAttribute('position'))
djmoffat@1099 343 });
djmoffat@1099 344 }
djmoffat@1099 345 }
djmoffat@1099 346 };
djmoffat@1099 347
djmoffat@1099 348 this.encode = function(doc) {
djmoffat@1099 349 var node = doc.createElement("interface");
djmoffat@1099 350 if (typeof name == "string")
djmoffat@1099 351 node.setAttribute("name",this.name);
djmoffat@1099 352 for (var option of this.options)
djmoffat@1099 353 {
djmoffat@1099 354 var child = doc.createElement("interfaceoption");
djmoffat@1099 355 child.setAttribute("type",option.type);
djmoffat@1099 356 child.setAttribute("name",option.name);
djmoffat@1099 357 node.appendChild(child);
djmoffat@1099 358 }
djmoffat@1099 359 if (this.scales.length != 0) {
djmoffat@1099 360 var scales = doc.createElement("scales");
djmoffat@1099 361 for (var scale of this.scales)
djmoffat@1099 362 {
djmoffat@1099 363 var child = doc.createElement("scalelabel");
djmoffat@1099 364 child.setAttribute("position",scale.position);
djmoffat@1099 365 child.textContent = scale.text;
djmoffat@1099 366 scales.appendChild(child);
djmoffat@1099 367 }
djmoffat@1099 368 node.appendChild(scales);
djmoffat@1099 369 }
djmoffat@1099 370 return node;
djmoffat@1099 371 };
djmoffat@1099 372 };
djmoffat@1099 373
djmoffat@1099 374 this.metricNode = function() {
djmoffat@1099 375 this.enabled = [];
djmoffat@1099 376 this.decode = function(parent, xml) {
djmoffat@1099 377 var children = xml.getElementsByTagName('metricenable');
djmoffat@1099 378 for (var i in children) {
djmoffat@1099 379 if (isNaN(Number(i)) == true){break;}
djmoffat@1099 380 this.enabled.push(children[i].textContent);
djmoffat@1099 381 }
djmoffat@1099 382 }
djmoffat@1099 383 this.encode = function(doc) {
djmoffat@1099 384 var node = doc.createElement('metric');
djmoffat@1099 385 for (var i in this.enabled)
djmoffat@1099 386 {
djmoffat@1099 387 if (isNaN(Number(i)) == true){break;}
djmoffat@1099 388 var child = doc.createElement('metricenable');
djmoffat@1099 389 child.textContent = this.enabled[i];
djmoffat@1099 390 node.appendChild(child);
djmoffat@1099 391 }
djmoffat@1099 392 return node;
djmoffat@1099 393 }
djmoffat@1099 394 }
djmoffat@1099 395
djmoffat@1099 396 this.page = function() {
djmoffat@1099 397 this.presentedId = undefined;
djmoffat@1099 398 this.id = undefined;
djmoffat@1099 399 this.hostURL = undefined;
djmoffat@1099 400 this.randomiseOrder = undefined;
djmoffat@1099 401 this.loop = undefined;
djmoffat@1099 402 this.showElementComments = undefined;
djmoffat@1099 403 this.outsideReference = null;
djmoffat@1099 404 this.loudness = null;
djmoffat@1099 405 this.preTest = null;
djmoffat@1099 406 this.postTest = null;
djmoffat@1099 407 this.interfaces = [];
djmoffat@1099 408 this.commentBoxPrefix = "Comment on track";
djmoffat@1099 409 this.audioElements = [];
djmoffat@1099 410 this.commentQuestions = [];
djmoffat@1099 411 this.schema = specification.schema.getAllElementsByName("page")[0];
djmoffat@1099 412
djmoffat@1099 413 this.decode = function(parent,xml)
djmoffat@1099 414 {
djmoffat@1099 415 var attributeMap = this.schema.getAllElementsByTagName('xs:attribute');
djmoffat@1099 416 for (var i=0; i<attributeMap.length; i++)
djmoffat@1099 417 {
djmoffat@1099 418 var attributeName = attributeMap[i].getAttribute('name') || attributeMap[i].getAttribute('ref');
djmoffat@1099 419 var projectAttr = xml.getAttribute(attributeName);
djmoffat@1099 420 projectAttr = parent.processAttribute(projectAttr,attributeMap[i]);
djmoffat@1099 421 switch(typeof projectAttr)
djmoffat@1099 422 {
djmoffat@1099 423 case "number":
djmoffat@1099 424 case "boolean":
djmoffat@1099 425 eval('this.'+attributeName+' = '+projectAttr);
djmoffat@1099 426 break;
djmoffat@1099 427 case "string":
djmoffat@1099 428 eval('this.'+attributeName+' = "'+projectAttr+'"');
djmoffat@1099 429 break;
djmoffat@1099 430 }
djmoffat@1099 431 }
djmoffat@1099 432
djmoffat@1099 433 // Get the Comment Box Prefix
djmoffat@1099 434 var CBP = xml.getElementsByTagName('commentboxprefix');
djmoffat@1099 435 if (CBP.length != 0) {
djmoffat@1099 436 this.commentBoxPrefix = CBP[0].textContent;
djmoffat@1099 437 }
djmoffat@1099 438
djmoffat@1099 439 // Now decode the interfaces
djmoffat@1099 440 var interfaceNode = xml.getElementsByTagName('interface');
djmoffat@1099 441 for (var i=0; i<interfaceNode.length; i++)
djmoffat@1099 442 {
djmoffat@1099 443 var node = new parent.interfaceNode();
djmoffat@1099 444 node.decode(this,interfaceNode[i],parent.schema.getAllElementsByName('interface')[1]);
djmoffat@1099 445 this.interfaces.push(node);
djmoffat@1099 446 }
djmoffat@1099 447
djmoffat@1099 448 // Now process the survey node options
djmoffat@1099 449 var survey = xml.getElementsByTagName('survey');
djmoffat@1099 450 var surveySchema = parent.schema.getAllElementsByName('survey')[0];
djmoffat@1099 451 for (var i in survey) {
djmoffat@1099 452 if (isNaN(Number(i)) == true){break;}
djmoffat@1099 453 var location = survey[i].getAttribute('location');
djmoffat@1099 454 if (location == 'pre' || location == 'before')
djmoffat@1099 455 {
djmoffat@1099 456 if (this.preTest != null){this.errors.push("Already a pre/before test survey defined! Ignoring second!!");}
djmoffat@1099 457 else {
djmoffat@1099 458 this.preTest = new parent.surveyNode();
djmoffat@1099 459 this.preTest.decode(parent,survey[i],surveySchema);
djmoffat@1099 460 }
djmoffat@1099 461 } else if (location == 'post' || location == 'after') {
djmoffat@1099 462 if (this.postTest != null){this.errors.push("Already a post/after test survey defined! Ignoring second!!");}
djmoffat@1099 463 else {
djmoffat@1099 464 this.postTest = new parent.surveyNode();
djmoffat@1099 465 this.postTest.decode(parent,survey[i],surveySchema);
djmoffat@1099 466 }
djmoffat@1099 467 }
djmoffat@1099 468 }
djmoffat@1099 469
djmoffat@1099 470 // Now process the audioelement tags
djmoffat@1099 471 var audioElements = xml.getElementsByTagName('audioelement');
djmoffat@1099 472 for (var i=0; i<audioElements.length; i++)
djmoffat@1099 473 {
djmoffat@1099 474 var node = new this.audioElementNode();
djmoffat@1099 475 node.decode(this,audioElements[i]);
djmoffat@1099 476 this.audioElements.push(node);
djmoffat@1099 477 }
djmoffat@1099 478
djmoffat@1099 479 // Now decode the commentquestions
djmoffat@1099 480 var commentQuestions = xml.getElementsByTagName('commentquestion');
djmoffat@1099 481 for (var i=0; i<commentQuestions.length; i++)
djmoffat@1099 482 {
djmoffat@1099 483 var node = new this.commentQuestionNode();
djmoffat@1099 484 node.decode(parent,commentQuestions[i]);
djmoffat@1099 485 this.commentQuestions.push(node);
djmoffat@1099 486 }
djmoffat@1099 487 };
djmoffat@1099 488
djmoffat@1099 489 this.encode = function(root)
djmoffat@1099 490 {
djmoffat@1099 491 var AHNode = root.createElement("page");
djmoffat@1099 492 // First decode the attributes
djmoffat@1099 493 var attributes = this.schema.getAllElementsByTagName('xs:attribute');
djmoffat@1099 494 for (var i=0; i<attributes.length; i++)
djmoffat@1099 495 {
djmoffat@1099 496 var name = attributes[i].getAttribute("name");
djmoffat@1099 497 if (name == undefined) {
djmoffat@1099 498 name = attributes[i].getAttribute("ref");
djmoffat@1099 499 }
djmoffat@1099 500 if(eval("this."+name+" != undefined") || attributes[i].getAttribute("use") == "required")
djmoffat@1099 501 {
djmoffat@1099 502 eval("AHNode.setAttribute('"+name+"',this."+name+")");
djmoffat@1099 503 }
djmoffat@1099 504 }
djmoffat@1099 505 if(this.loudness != null) {AHNode.setAttribute("loudness",this.loudness);}
djmoffat@1099 506 // <commentboxprefix>
djmoffat@1099 507 var commentboxprefix = root.createElement("commentboxprefix");
djmoffat@1099 508 commentboxprefix.textContent = this.commentBoxPrefix;
djmoffat@1099 509 AHNode.appendChild(commentboxprefix);
djmoffat@1099 510
djmoffat@1099 511 for (var i=0; i<this.interfaces.length; i++)
djmoffat@1099 512 {
djmoffat@1099 513 AHNode.appendChild(this.interfaces[i].encode(root));
djmoffat@1099 514 }
djmoffat@1099 515
djmoffat@1099 516 for (var i=0; i<this.audioElements.length; i++) {
djmoffat@1099 517 AHNode.appendChild(this.audioElements[i].encode(root));
djmoffat@1099 518 }
djmoffat@1099 519 // Create <CommentQuestion>
djmoffat@1099 520 for (var i=0; i<this.commentQuestions.length; i++)
djmoffat@1099 521 {
djmoffat@1099 522 AHNode.appendChild(this.commentQuestions[i].encode(root));
djmoffat@1099 523 }
djmoffat@1099 524
djmoffat@1099 525 AHNode.appendChild(this.preTest.encode(root));
djmoffat@1099 526 AHNode.appendChild(this.postTest.encode(root));
djmoffat@1099 527 return AHNode;
djmoffat@1099 528 };
djmoffat@1099 529
djmoffat@1099 530 this.commentQuestionNode = function() {
djmoffat@1099 531 this.id = null;
djmoffat@1099 532 this.type = undefined;
djmoffat@1099 533 this.options = [];
djmoffat@1099 534 this.statement = undefined;
djmoffat@1099 535 this.schema = specification.schema.getAllElementsByName('commentquestion')[0];
djmoffat@1099 536 this.decode = function(parent,xml)
djmoffat@1099 537 {
djmoffat@1099 538 this.id = xml.id;
djmoffat@1099 539 this.type = xml.getAttribute('type');
djmoffat@1099 540 this.statement = xml.getElementsByTagName('statement')[0].textContent;
djmoffat@1099 541 var optNodes = xml.getElementsByTagName('option');
djmoffat@1099 542 for (var i=0; i<optNodes.length; i++)
djmoffat@1099 543 {
djmoffat@1099 544 var optNode = optNodes[i];
djmoffat@1099 545 this.options.push({
djmoffat@1099 546 name: optNode.getAttribute('name'),
djmoffat@1099 547 text: optNode.textContent
djmoffat@1099 548 });
djmoffat@1099 549 }
djmoffat@1099 550 };
djmoffat@1099 551
djmoffat@1099 552 this.encode = function(root)
djmoffat@1099 553 {
djmoffat@1099 554 var node = root.createElement("commentquestion");
djmoffat@1099 555 node.id = this.id;
djmoffat@1099 556 node.setAttribute("type",this.type);
djmoffat@1099 557 var statement = root.createElement("statement");
djmoffat@1099 558 statement.textContent = this.statement;
djmoffat@1099 559 node.appendChild(statement);
djmoffat@1099 560 for (var option of this.options)
djmoffat@1099 561 {
djmoffat@1099 562 var child = root.createElement("option");
djmoffat@1099 563 child.setAttribute("name",option.name);
djmoffat@1099 564 child.textContent = option.text;
djmoffat@1099 565 node.appendChild(child);
djmoffat@1099 566 }
djmoffat@1099 567 return node;
djmoffat@1099 568 };
djmoffat@1099 569 };
djmoffat@1099 570
djmoffat@1099 571 this.audioElementNode = function() {
djmoffat@1099 572 this.url = null;
djmoffat@1099 573 this.id = null;
djmoffat@1099 574 this.parent = null;
djmoffat@1099 575 this.type = null;
n@1102 576 this.marker = null;
djmoffat@1099 577 this.enforce = false;
n@1102 578 this.gain = 0.0;
djmoffat@1099 579 this.schema = specification.schema.getAllElementsByName('audioelement')[0];;
djmoffat@1099 580 this.parent = null;
djmoffat@1099 581 this.decode = function(parent,xml)
djmoffat@1099 582 {
djmoffat@1099 583 this.parent = parent;
djmoffat@1099 584 var attributeMap = this.schema.getAllElementsByTagName('xs:attribute');
djmoffat@1099 585 for (var i=0; i<attributeMap.length; i++)
djmoffat@1099 586 {
djmoffat@1099 587 var attributeName = attributeMap[i].getAttribute('name') || attributeMap[i].getAttribute('ref');
djmoffat@1099 588 var projectAttr = xml.getAttribute(attributeName);
djmoffat@1099 589 projectAttr = specification.processAttribute(projectAttr,attributeMap[i]);
djmoffat@1099 590 switch(typeof projectAttr)
djmoffat@1099 591 {
djmoffat@1099 592 case "number":
djmoffat@1099 593 case "boolean":
djmoffat@1099 594 eval('this.'+attributeName+' = '+projectAttr);
djmoffat@1099 595 break;
djmoffat@1099 596 case "string":
djmoffat@1099 597 eval('this.'+attributeName+' = "'+projectAttr+'"');
djmoffat@1099 598 break;
djmoffat@1099 599 }
djmoffat@1099 600 }
djmoffat@1099 601
djmoffat@1099 602 };
djmoffat@1099 603 this.encode = function(root)
djmoffat@1099 604 {
djmoffat@1099 605 var AENode = root.createElement("audioelement");
djmoffat@1099 606 var attributes = this.schema.getAllElementsByTagName('xs:attribute');
djmoffat@1099 607 for (var i=0; i<attributes.length; i++)
djmoffat@1099 608 {
djmoffat@1099 609 var name = attributes[i].getAttribute("name");
djmoffat@1099 610 if (name == undefined) {
djmoffat@1099 611 name = attributes[i].getAttribute("ref");
djmoffat@1099 612 }
djmoffat@1099 613 if(eval("this."+name+" != undefined") || attributes[i].getAttribute("use") == "required")
djmoffat@1099 614 {
djmoffat@1099 615 eval("AENode.setAttribute('"+name+"',this."+name+")");
djmoffat@1099 616 }
djmoffat@1099 617 }
djmoffat@1099 618 return AENode;
djmoffat@1099 619 };
djmoffat@1099 620 };
djmoffat@1099 621 };
djmoffat@1099 622 }
djmoffat@1099 623
djmoffat@1099 624 </script>
djmoffat@1099 625 <script src="../jquery-2.1.4.js"></script>
djmoffat@1099 626 <script type="text/javascript" src="test_core.js"/>
djmoffat@1099 627 <script type="text/javascript">
djmoffat@1099 628
djmoffat@1099 629 </script>
djmoffat@1099 630 </head>
djmoffat@1099 631 <body>
djmoffat@1099 632 <div id="popupHolder"></div>
djmoffat@1099 633 <div id="blanket"></div>
djmoffat@1099 634 <div id="content"></div>
djmoffat@1099 635 </body>
n@1102 636 </html>