Mercurial > hg > webaudioevaluationtool
changeset 1257:3600fff74af9
Fixed errors caused by specifcation nesting, specifically if <page> interface nodes have <interfaceoption> nodes.
author | Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk> |
---|---|
date | Fri, 18 Mar 2016 14:52:30 +0000 |
parents | 4fb8222b96ae |
children | 51ac572fb0be |
files | core.js test_create/test_create.html |
diffstat | 2 files changed, 33 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/core.js Wed Mar 16 16:52:30 2016 +0000 +++ b/core.js Fri Mar 18 14:52:30 2016 +0000 @@ -1812,13 +1812,13 @@ this.errors = []; this.schema = null; - this.processAttribute = function(attribute,schema) + this.processAttribute = function(attribute,schema,schemaRoot) { // attribute is the string returned from getAttribute on the XML // schema is the <xs:attribute> node if (schema.getAttribute('name') == undefined && schema.getAttribute('ref') != undefined) { - schema = this.schema.getAllElementsByName(schema.getAttribute('ref'))[0]; + schema = schemaRoot.getAllElementsByName(schema.getAttribute('ref'))[0]; } var defaultOpt = schema.getAttribute('default'); if (attribute == null) { @@ -1864,9 +1864,9 @@ for (var i in attributes) { if (isNaN(Number(i)) == true){break;} - var attributeName = attributes[i].getAttribute('name'); + var attributeName = attributes[i].getAttribute('name') || attributes[i].getAttribute('ref'); var projectAttr = setupNode.getAttribute(attributeName); - projectAttr = this.processAttribute(projectAttr,attributes[i]); + projectAttr = this.processAttribute(projectAttr,attributes[i],this.schema); switch(typeof projectAttr) { case "number": @@ -1966,6 +1966,7 @@ this.surveyNode = function() { this.location = null; this.options = []; + this.parent = null; this.schema = specification.schema.getAllElementsByName('survey')[0]; this.OptionNode = function() { @@ -1988,7 +1989,7 @@ if(isNaN(Number(i)) == true){break;} var attributeName = attributeMap[i].getAttribute('name') || attributeMap[i].getAttribute('ref'); var projectAttr = child.getAttribute(attributeName); - projectAttr = parent.processAttribute(projectAttr,attributeMap[i]); + projectAttr = parent.processAttribute(projectAttr,attributeMap[i],parent.schema); switch(typeof projectAttr) { case "number": @@ -2058,6 +2059,7 @@ }; }; this.decode = function(parent,xml) { + this.parent = parent; this.location = xml.getAttribute('location'); if (this.location == 'before'){this.location = 'pre';} else if (this.location == 'after'){this.location = 'post';} @@ -2107,7 +2109,11 @@ { var attributeName = attributeMap[j].getAttribute('name') || attributeMap[j].getAttribute('ref'); var projectAttr = ioNode.getAttribute(attributeName); - projectAttr = parent.processAttribute(projectAttr,attributeMap[j]); + if(parent.processAttribute) { + parent.processAttribute(projectAttr, attributeMap[j], parent.schema) + } else { + parent.parent.processAttribute(projectAttr, attributeMap[j], parent.parent.schema) + } switch(typeof projectAttr) { case "number": @@ -2201,15 +2207,17 @@ this.audioElements = []; this.commentQuestions = []; this.schema = specification.schema.getAllElementsByName("page")[0]; + this.parent = null; this.decode = function(parent,xml) { + this.parent = parent; var attributeMap = this.schema.getAllElementsByTagName('xs:attribute'); for (var i=0; i<attributeMap.length; i++) { var attributeName = attributeMap[i].getAttribute('name') || attributeMap[i].getAttribute('ref'); var projectAttr = xml.getAttribute(attributeName); - projectAttr = parent.processAttribute(projectAttr,attributeMap[i]); + projectAttr = parent.processAttribute(projectAttr,attributeMap[i],parent.schema); switch(typeof projectAttr) { case "number": @@ -2382,7 +2390,7 @@ { var attributeName = attributeMap[i].getAttribute('name') || attributeMap[i].getAttribute('ref'); var projectAttr = xml.getAttribute(attributeName); - projectAttr = specification.processAttribute(projectAttr,attributeMap[i]); + projectAttr = parent.parent.processAttribute(projectAttr,attributeMap[i],parent.parent.schema); switch(typeof projectAttr) { case "number":
--- a/test_create/test_create.html Wed Mar 16 16:52:30 2016 +0000 +++ b/test_create/test_create.html Fri Mar 18 14:52:30 2016 +0000 @@ -20,13 +20,13 @@ this.errors = []; this.schema = null; - this.processAttribute = function(attribute,schema) + this.processAttribute = function(attribute,schema,schemaRoot) { // attribute is the string returned from getAttribute on the XML // schema is the <xs:attribute> node if (schema.getAttribute('name') == undefined && schema.getAttribute('ref') != undefined) { - schema = this.schema.getAllElementsByName(schema.getAttribute('ref'))[0]; + schema = schemaRoot.getAllElementsByName(schema.getAttribute('ref'))[0]; } var defaultOpt = schema.getAttribute('default'); if (attribute == null) { @@ -72,9 +72,9 @@ for (var i in attributes) { if (isNaN(Number(i)) == true){break;} - var attributeName = attributes[i].getAttribute('name'); + var attributeName = attributes[i].getAttribute('name') || attributes[i].getAttribute('ref'); var projectAttr = setupNode.getAttribute(attributeName); - projectAttr = this.processAttribute(projectAttr,attributes[i]); + projectAttr = this.processAttribute(projectAttr,attributes[i],this.schema); switch(typeof projectAttr) { case "number": @@ -174,6 +174,7 @@ this.surveyNode = function() { this.location = null; this.options = []; + this.parent = null; this.schema = specification.schema.getAllElementsByName('survey')[0]; this.OptionNode = function() { @@ -196,7 +197,7 @@ if(isNaN(Number(i)) == true){break;} var attributeName = attributeMap[i].getAttribute('name') || attributeMap[i].getAttribute('ref'); var projectAttr = child.getAttribute(attributeName); - projectAttr = parent.processAttribute(projectAttr,attributeMap[i]); + projectAttr = parent.processAttribute(projectAttr,attributeMap[i],parent.schema); switch(typeof projectAttr) { case "number": @@ -266,6 +267,7 @@ }; }; this.decode = function(parent,xml) { + this.parent = parent; this.location = xml.getAttribute('location'); if (this.location == 'before'){this.location = 'pre';} else if (this.location == 'after'){this.location = 'post';} @@ -315,7 +317,11 @@ { var attributeName = attributeMap[j].getAttribute('name') || attributeMap[j].getAttribute('ref'); var projectAttr = ioNode.getAttribute(attributeName); - projectAttr = parent.processAttribute(projectAttr,attributeMap[j]); + if(parent.processAttribute) { + parent.processAttribute(projectAttr, attributeMap[j], parent.schema) + } else { + parent.parent.processAttribute(projectAttr, attributeMap[j], parent.parent.schema) + } switch(typeof projectAttr) { case "number": @@ -401,6 +407,7 @@ this.showElementComments = undefined; this.outsideReference = null; this.loudness = null; + this.label = null; this.preTest = null; this.postTest = null; this.interfaces = []; @@ -408,15 +415,17 @@ this.audioElements = []; this.commentQuestions = []; this.schema = specification.schema.getAllElementsByName("page")[0]; + this.parent = null; this.decode = function(parent,xml) { + this.parent = parent; var attributeMap = this.schema.getAllElementsByTagName('xs:attribute'); for (var i=0; i<attributeMap.length; i++) { var attributeName = attributeMap[i].getAttribute('name') || attributeMap[i].getAttribute('ref'); var projectAttr = xml.getAttribute(attributeName); - projectAttr = parent.processAttribute(projectAttr,attributeMap[i]); + projectAttr = parent.processAttribute(projectAttr,attributeMap[i],parent.schema); switch(typeof projectAttr) { case "number": @@ -589,7 +598,7 @@ { var attributeName = attributeMap[i].getAttribute('name') || attributeMap[i].getAttribute('ref'); var projectAttr = xml.getAttribute(attributeName); - projectAttr = specification.processAttribute(projectAttr,attributeMap[i]); + projectAttr = parent.parent.processAttribute(projectAttr,attributeMap[i],parent.parent.schema); switch(typeof projectAttr) { case "number":