changeset 2398:a51a6d810bf4

Merge branch 'master' of https://github.com/BrechtDeMan/WebAudioEvaluationTool
author www-data <www-data@sucuk.dcs.qmul.ac.uk>
date Thu, 26 May 2016 15:20:55 +0100
parents 7d1466f35a7b (current diff) c970a531228c (diff)
children e7601d5ff17b
files
diffstat 13 files changed, 148 insertions(+), 94 deletions(-) [+]
line wrap: on
line diff
--- a/interfaces/AB.css	Fri May 20 19:20:52 2016 +0100
+++ b/interfaces/AB.css	Thu May 26 15:20:55 2016 +0100
@@ -29,11 +29,17 @@
     height: 40px;
 }
 
+div#outside-reference-holder {
+    display: flex;
+    align-content: center;
+    justify-content: center;
+    margin-bottom: 5px;
+}
+
 button.outside-reference {
-	width:120px;
-	height:40px;
-	margin-bottom:5px;
-	position: absolute;
+    height: 40px;
+    position: inherit;
+    margin: 0px 5px;
 }
 
 div.comparator-holder {
--- a/interfaces/AB.js	Fri May 20 19:20:52 2016 +0100
+++ b/interfaces/AB.js	Thu May 26 15:20:55 2016 +0100
@@ -88,6 +88,10 @@
 	// Global parent for the comment boxes on the page
 	var feedbackHolder = document.createElement('div');
 	feedbackHolder.id = 'feedbackHolder';
+    
+    // Create outside reference holder
+    var outsideRef = document.createElement("div");
+    outsideRef.id = "outside-reference-holder";
 	
 	// Construct the AB Boxes
 	var boxes = document.createElement('div');
@@ -109,6 +113,7 @@
 	testContent.appendChild(title); // Insert the title
 	testContent.appendChild(pagetitle);
 	testContent.appendChild(interfaceButtons);
+    testContent.appendChild(outsideRef);
 	testContent.appendChild(feedbackHolder);
 	testContent.appendChild(submit);
 	interfaceContext.insertPoint.appendChild(testContent);
@@ -127,6 +132,10 @@
 		console.log("WARNING - This interface only supports one <interface> node per page. Using first interface node");
 	}
 	interfaceObj = interfaceObj[0];
+    
+    // Delete outside reference
+	var outsideReferenceHolder = document.getElementById("outside-reference-holder");
+    outsideReferenceHolder.innerHTML = "";
 	
 	if(interfaceObj.title != null)
 	{
@@ -134,6 +143,16 @@
 	}
     
     var interfaceOptions = specification.interfaces.options.concat(interfaceObj.options);
+    // Clear the interfaceElements
+    {
+        var node = document.getElementById('playback-holder');
+        if (node){feedbackHolder.removeChild(node);}
+        node = document.getElementById('page-count');
+        if (node){document.getElementById('interface-buttons').removeChild(node);}
+        node = document.getElementById('master-volume-holder-float');
+        if (node){feedbackHolder.removeChild(node);}
+    }
+    
     for (var option of interfaceOptions)
     {
         if (option.type == "show")
@@ -144,6 +163,7 @@
                     if (playbackHolder == null)
                     {
                         playbackHolder = document.createElement('div');
+                        playbackHolder.id = 'playback-holder';
                         playbackHolder.style.width = "100%";
                         playbackHolder.style.float = "left";
                         playbackHolder.align = 'center';
@@ -157,13 +177,12 @@
                     {
                         pagecountHolder = document.createElement('div');
                         pagecountHolder.id = 'page-count';
+                        document.getElementById('interface-buttons').appendChild(pagecountHolder);
                     }
                     pagecountHolder.innerHTML = '<span>Page '+(testState.stateIndex+1)+' of '+testState.stateMap.length+'</span>';
-                    var inject = document.getElementById('interface-buttons');
-                    inject.appendChild(pagecountHolder);
                     break;
                 case "volume":
-                    if (document.getElementById('master-volume-holder') == null)
+                    if (document.getElementById('master-volume-holder-float') == null)
                     {
                         feedbackHolder.appendChild(interfaceContext.volume.object);
                     }
@@ -336,7 +355,7 @@
         var audioObject = audioEngineContext.newTrack(element);
 		if (index == audioHolderObject.outsideReference || element.type == 'outside-reference')
 		{
-            var orNode = new interfaceContext.outsideReferenceDOM(audioObject,index,document.getElementById('interface-buttons'));
+            var orNode = new interfaceContext.outsideReferenceDOM(audioObject,index,document.getElementById("outside-reference-holder"));
 			audioObject.bindInterface(orNode);
         } else {
             var label;
--- a/interfaces/ape.css	Fri May 20 19:20:52 2016 +0100
+++ b/interfaces/ape.css	Thu May 26 15:20:55 2016 +0100
@@ -32,7 +32,7 @@
 	/* Specify any structure for the slider holder interface */
 	background-color: #eee;
 	height: 150px;
-	margin-bottom: 5px;
+	margin: 5px 50px;
 	-moz-user-select: -moz-none;
 	-khtml-user-select: none;
 	-webkit-user-select: none;
@@ -50,6 +50,8 @@
 	/* Any formatting of text below scale */
 	font-size: 1.2em;
 	min-width: 5px;
+    max-width: 100px;
+    text-align: center;
 	height: 20px;
 	position: absolute;
 }
@@ -67,13 +69,20 @@
     border: 1px solid black;
 }
 
+div#outside-reference-holder {
+    display: flex;
+    align-content: center;
+    justify-content: center;
+    margin-bottom: 5px;
+}
+
 div.outside-reference {
 	width:120px;
-	padding-left: 55px;
-	margin-left: 100px;
+    text-align: center;
 	height:20px;
-	margin-bottom:5px;
 	background-color: rgb(100,200,100);
+    position: inherit;
+    margin: 0px 5px;
 }
 
 div.track-slider-disabled {
--- a/interfaces/ape.js	Fri May 20 19:20:52 2016 +0100
+++ b/interfaces/ape.js	Thu May 26 15:20:55 2016 +0100
@@ -260,6 +260,9 @@
 	var sliderHolder = document.createElement("div");
 	sliderHolder.id = "slider-holder";
 	
+    // Create outside reference holder
+    var outsideRef = document.createElement("div");
+    outsideRef.id = "outside-reference-holder";
 	
 	// Global parent for the comment boxes on the page
 	var feedbackHolder = document.createElement('div');
@@ -271,6 +274,7 @@
 	// Inject into HTML
 	testContent.appendChild(title); // Insert the title
 	testContent.appendChild(interfaceButtons);
+    testContent.appendChild(outsideRef);
 	testContent.appendChild(sliderHolder);
 	testContent.appendChild(feedbackHolder);
 	interfaceContext.insertPoint.appendChild(testContent);
@@ -295,10 +299,7 @@
 	sliderHolder.innerHTML = "";
 	
 	// Delete outside reference
-	var outsideReferenceHolder = document.getElementById('outside-reference');
-	if (outsideReferenceHolder != null) {
-		document.getElementById('interface-buttons').removeChild(outsideReferenceHolder);
-	}
+	document.getElementById("outside-reference-holder").innerHTML = "";
 	
 	var interfaceObj = audioHolderObject.interfaces;
 	for (var k=0; k<interfaceObj.length; k++) {
@@ -361,7 +362,7 @@
 		if (element.type == 'outside-reference')
 		{
 			// Construct outside reference;
-			var orNode = new outsideReferenceDOM(audioObject,index,document.getElementById('interface-buttons'));
+			var orNode = new outsideReferenceDOM(audioObject,index,document.getElementById("outside-reference-holder"));
 			audioObject.bindInterface(orNode);
 		} else {
 			// Create a slider per track
@@ -416,6 +417,7 @@
 			audioEngineContext.audioObjects[id].metric.moved(time,rate);
 			interfaceContext.interfaceSliders[interfaceID].metrics[trackID].moved(time,rate);
 			console.log("slider "+id+" moved to "+rate+' ('+time+')');
+            obj.setAttribute("slider-value",convSliderPosToRate(obj));
 		} else {
 			var id = Number(obj.attributes['trackIndex'].value);
 			//audioEngineContext.metric.sliderPlayed(id);
@@ -496,13 +498,6 @@
 		event.dataTransfer.dropEffect = 'copy';
 		return false;
 	},false);
-	var sliderMargin = document.createAttribute('marginsize');
-	sliderMargin.nodeValue = 42; // Set default margins to 42px either side
-	// Must have a known EXACT width, as this is used later to determine the ratings
-	var w = (Number(sliderMargin.nodeValue)+8)*2;
-	this.canvas.style.width = window.innerWidth - w +"px";
-	this.canvas.style.marginLeft = sliderMargin.nodeValue +'px';
-	this.canvas.setAttributeNode(sliderMargin);
 	this.sliderDOM.appendChild(this.canvas);
 	
 	// Create the div to hold any scale objects
@@ -512,13 +507,14 @@
 	this.scale.align = 'left';
 	this.sliderDOM.appendChild(this.scale);
 	var positionScale = this.canvas.style.width.substr(0,this.canvas.style.width.length-2);
-	var offset = Number(this.canvas.attributes['marginsize'].value);
+	var offset = 50;
     var dest = document.getElementById("slider-holder").appendChild(this.sliderDOM);
 	for (var scaleObj of interfaceObject.scales)
 	{
 		var position = Number(scaleObj.position)*0.01;
 		var pixelPosition = (position*$(this.canvas).width())+offset;
 		var scaleDOM = document.createElement('span');
+        scaleDOM.className = "ape-marker-text";
 		scaleDOM.textContent = scaleObj.text;
         scaleDOM.setAttribute('value',position)
 		this.scale.appendChild(scaleDOM);
@@ -537,7 +533,7 @@
 		} else {
 			trackObj.setAttribute('interface-name',this.id);
 		}
-		var offset = Number(this.canvas.attributes['marginsize'].value);
+		var offset = 50;
 		// Distribute it randomnly
 		var w = window.innerWidth - (offset+8)*2;
 		w = Math.random()*w;
@@ -549,30 +545,24 @@
 		var labelHolder = document.createElement("span");
         labelHolder.textContent = label;
         trackObj.appendChild(labelHolder);
-		this.metrics[this.metrics.length-1].initialise(convSliderPosToRate(trackObj));
+        var rate = convSliderPosToRate(trackObj);
+		this.metrics[this.metrics.length-1].initialise(rate);
+        trackObj.setAttribute("slider-value",rate);
 		return trackObj;
 	};
 	
 	this.resize = function(event)
 	{
-		var holdValues = [];
-		for (var index = 0; index < this.sliders.length; index++)
-		{
-			holdValues.push(convSliderPosToRate(this.sliders[index])); 
-		}
-		var width = event.target.innerWidth;
+		var width = window.innerWidth;
 		var sliderDiv = this.canvas;
 		var sliderScaleDiv = this.scale;
-		var marginsize = Number(sliderDiv.attributes['marginsize'].value);
-		var w = (marginsize+8)*2;
-		sliderDiv.style.width = width - w + 'px';
-		var width = width - w;
+		var width = $(sliderDiv).width();
+        var marginsize = 50;
 		// Move sliders into new position
 		for (var index = 0; index < this.sliders.length; index++)
 		{
-			var pos = holdValues[index];
-			var pix = pos * width;
-			this.sliders[index].style.left = pix+marginsize+'px';
+			var pix = Number(this.sliders[index].getAttribute("slider-value")) * width;
+			this.sliders[index].style.left = (pix+marginsize)+'px';
 		}
 		
 		// Move scale labels
@@ -715,9 +705,9 @@
 		{
 			progress = String(progress);
 			progress = progress.split('.')[0];
-			this.outsideReferenceHolder[0].children[0].textContent = progress+'%';
+			this.outsideReferenceHolder.firstChild.textContent = progress+'%';
 		} else {
-			this.outsideReferenceHolder[0].children[0].textContent = "Play Reference";
+			this.outsideReferenceHolder.firstChild.textContent = "Play Reference";
 		}
 	};
     this.startPlayback = function()
@@ -822,9 +812,8 @@
 function convSliderPosToRate(trackSlider)
 {
 	var slider = trackSlider.parentElement;
-	var w = slider.style.width;
-	var marginsize = Number(slider.attributes['marginsize'].value);
-	var maxPix = w.substr(0,w.length-2);
+	var maxPix = $(slider).width();
+	var marginsize = 50;
 	var pix = trackSlider.style.left;
 	pix = pix.substr(0,pix.length-2);
 	var rate = (pix-marginsize)/maxPix;
--- a/interfaces/discrete.css	Fri May 20 19:20:52 2016 +0100
+++ b/interfaces/discrete.css	Thu May 26 15:20:55 2016 +0100
@@ -86,11 +86,16 @@
 	margin: 9px 0px;
 }
 
+div#outside-reference-holder {
+    display: flex;
+    align-content: center;
+    justify-content: center;
+    margin-bottom: 5px;
+}
+
 button.outside-reference {
-	width:120px;
-	height:20px;
-	margin-bottom:5px;
-	position: absolute;
+    position: inherit;
+    margin: 0px 5px;
 }
 
 div.track-slider-playing {
--- a/interfaces/discrete.js	Fri May 20 19:20:52 2016 +0100
+++ b/interfaces/discrete.js	Thu May 26 15:20:55 2016 +0100
@@ -53,6 +53,11 @@
             console.log('Stopped at ' + time); // DEBUG/SAFETY
 		}
 	};
+    
+    // Create outside reference holder
+    var outsideRef = document.createElement("div");
+    outsideRef.id = "outside-reference-holder";
+    
 	// Create Submit (save) button
 	var submit = document.createElement("button");
 	submit.innerHTML = 'Next';
@@ -98,6 +103,7 @@
 	testContent.appendChild(title); // Insert the title
 	testContent.appendChild(pagetitle);
 	testContent.appendChild(interfaceButtons);
+    testContent.appendChild(outsideRef);
 	testContent.appendChild(sliderBox);
 	testContent.appendChild(feedbackHolder);
 	interfaceContext.insertPoint.appendChild(testContent);
@@ -164,10 +170,7 @@
     }
 	
 	// Delete outside reference
-	var outsideReferenceHolder = document.getElementById('outside-reference');
-	if (outsideReferenceHolder != null) {
-		document.getElementById('interface-buttons').removeChild(outsideReferenceHolder);
-	}
+    document.getElementById("outside-reference-holder").innerHTML = "";
 	
 	var sliderBox = document.getElementById('slider-holder');
 	sliderBox.innerHTML = "";
@@ -194,7 +197,7 @@
 		if (element.type == 'outside-reference')
 		{
 			// Construct outside reference;
-			var orNode = new interfaceContext.outsideReferenceDOM(audioObject,index,document.getElementById('interface-buttons'));
+			var orNode = new interfaceContext.outsideReferenceDOM(audioObject,index,document.getElementById("outside-reference-holder"));
 			audioObject.bindInterface(orNode);
 		} else {
 			// Create a slider per track
--- a/interfaces/horizontal-sliders.css	Fri May 20 19:20:52 2016 +0100
+++ b/interfaces/horizontal-sliders.css	Thu May 26 15:20:55 2016 +0100
@@ -75,12 +75,16 @@
 	height: 94px;
 }
 
+div#outside-reference-holder {
+    display: flex;
+    align-content: center;
+    justify-content: center;
+    margin-bottom: 5px;
+}
 
 button.outside-reference {
-	width:120px;
-	height:20px;
-	margin-bottom:5px;
-	position: absolute;
+    position: inherit;
+    margin: 0px 5px;
 }
 
 div.track-slider-playing {
--- a/interfaces/horizontal-sliders.js	Fri May 20 19:20:52 2016 +0100
+++ b/interfaces/horizontal-sliders.js	Thu May 26 15:20:55 2016 +0100
@@ -62,6 +62,10 @@
 	// Append the interface buttons into the interfaceButtons object.
 	interfaceButtons.appendChild(playback);
 	interfaceButtons.appendChild(submit);
+    
+    // Create outside reference holder
+    var outsideRef = document.createElement("div");
+    outsideRef.id = "outside-reference-holder";
 	
 	// Create a slider box
 	var sliderBox = document.createElement('div');
@@ -98,6 +102,7 @@
 	testContent.appendChild(title); // Insert the title
 	testContent.appendChild(pagetitle);
 	testContent.appendChild(interfaceButtons);
+    testContent.appendChild(outsideRef);
 	testContent.appendChild(sliderBox);
 	testContent.appendChild(feedbackHolder);
 	interfaceContext.insertPoint.appendChild(testContent);
@@ -165,10 +170,7 @@
     }
     
 	// Delete outside reference
-	var outsideReferenceHolder = document.getElementById('outside-reference');
-	if (outsideReferenceHolder != null) {
-		document.getElementById('interface-buttons').removeChild(outsideReferenceHolder);
-	}
+	document.getElementById("outside-reference-holder").innerHTML = "";
 	
 	var sliderBox = document.getElementById('slider-holder');
 	sliderBox.innerHTML = "";
@@ -194,7 +196,7 @@
 		if (element.type == 'outside-reference')
 		{
 			// Construct outside reference;
-			var orNode = new interfaceContext.outsideReferenceDOM(audioObject,index,document.getElementById('interface-buttons'));
+			var orNode = new interfaceContext.outsideReferenceDOM(audioObject,index,document.getElementById("outside-reference-holder"));
 			audioObject.bindInterface(orNode);
 		} else {
 			// Create a slider per track
--- a/interfaces/mushra.css	Fri May 20 19:20:52 2016 +0100
+++ b/interfaces/mushra.css	Thu May 26 15:20:55 2016 +0100
@@ -61,11 +61,16 @@
 	margin-left: 50px;
 }
 
+div#outside-reference-holder {
+    display: flex;
+    align-content: center;
+    justify-content: center;
+    margin-bottom: 5px;
+}
+
 button.outside-reference {
-	width:120px;
-	height:20px;
-	margin-bottom:5px;
-	position: absolute;
+    position: inherit;
+    margin: 0px 5px;
 }
 
 div.track-slider-playing {
--- a/interfaces/mushra.js	Fri May 20 19:20:52 2016 +0100
+++ b/interfaces/mushra.js	Thu May 26 15:20:55 2016 +0100
@@ -68,6 +68,11 @@
 	// Append the interface buttons into the interfaceButtons object.
 	interfaceButtons.appendChild(playback);
 	interfaceButtons.appendChild(submit);
+    
+    // Create outside reference holder
+    var outsideRef = document.createElement("div");
+    outsideRef.id = "outside-reference-holder";
+    
 	
 	// Create a slider box
 	var sliderBox = document.createElement('div');
@@ -100,6 +105,7 @@
 	testContent.appendChild(title); // Insert the title
 	testContent.appendChild(pagetitle);
 	testContent.appendChild(interfaceButtons);
+    testContent.appendChild(outsideRef);
 	testContent.appendChild(sliderBox);
 	testContent.appendChild(feedbackHolder);
 	interfaceContext.insertPoint.appendChild(testContent);
@@ -164,10 +170,8 @@
     }
 	
 	// Delete outside reference
-	var outsideReferenceHolder = document.getElementById('outside-reference');
-	if (outsideReferenceHolder != null) {
-		document.getElementById('interface-buttons').removeChild(outsideReferenceHolder);
-	}
+	var outsideReferenceHolder = document.getElementById("outside-reference-holder");
+    outsideReferenceHolder.innerHTML = "";
 	
 	var sliderBox = document.getElementById('slider-holder');
 	sliderBox.innerHTML = "";
@@ -192,7 +196,7 @@
 		if (element.type == 'outside-reference')
 		{
 			// Construct outside reference;
-			var orNode = new interfaceContext.outsideReferenceDOM(audioObject,index,document.getElementById('interface-buttons'));
+			var orNode = new interfaceContext.outsideReferenceDOM(audioObject,index,outsideReferenceHolder);
 			audioObject.bindInterface(orNode);
 		} else {
 			// Create a slider per track
--- a/js/core.js	Fri May 20 19:20:52 2016 +0100
+++ b/js/core.js	Thu May 26 15:20:55 2016 +0100
@@ -2485,7 +2485,6 @@
     {
         this.parent = audioObject;
         this.outsideReferenceHolder = document.createElement('button');
-        this.outsideReferenceHolder.id = 'outside-reference';
         this.outsideReferenceHolder.className = 'outside-reference';
         this.outsideReferenceHolder.setAttribute('track-id',index);
         this.outsideReferenceHolder.textContent = "Play Reference";
--- a/js/specification.js	Fri May 20 19:20:52 2016 +0100
+++ b/js/specification.js	Thu May 26 15:20:55 2016 +0100
@@ -163,7 +163,7 @@
 	this.encode = function()
 	{
 		var RootDocument = document.implementation.createDocument(null,"waet");
-		var root = RootDocument.children[0];
+		var root = RootDocument.firstChild;
         root.setAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");
         root.setAttribute("xsi:noNamespaceSchemaLocation","test-schema.xsd");
 		// Build setup node
--- a/test_create/test_core.js	Fri May 20 19:20:52 2016 +0100
+++ b/test_create/test_core.js	Thu May 26 15:20:55 2016 +0100
@@ -282,7 +282,7 @@
             this.content.appendChild(this.select);
             this.description = document.createElement("p");
             this.content.appendChild(this.description);
-            this.testsXML = interfaceSpecs.getElementsByTagName('tests')[0].children;
+            this.testsXML = interfaceSpecs.getElementsByTagName('tests')[0].getElementsByTagName('test');
             for (var i=0; i<this.testsXML.length; i++)
             {
                 var option = document.createElement('option');
@@ -345,9 +345,10 @@
                 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
                 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("checks")[0];
                 this.testXML = this.testXML.getAllElementsByTagName("checks");
-                for (var i=0; i<this.interfaceXML.children.length; i++)
+                var interfaceXMLChildren = this.interfaceXML.getElementsByTagName('entry');
+                for (var i=0; i<interfaceXMLChildren.length; i++)
                 {
-                    var interfaceNode = this.interfaceXML.children[i];
+                    var interfaceNode = interfaceXMLChildren[i];
                     var checkName = interfaceNode.getAttribute('name');
                     var testNode
                     if (this.testXML.length > 0)
@@ -472,9 +473,10 @@
                 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
                 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("metrics")[0];
                 this.testXML = this.testXML.getAllElementsByTagName("metrics");
-                for (var i=0; i<this.interfaceXML.children.length; i++)
+                var interfaceXMLChildren = this.interfaceXML.getElementsByTagName('entry');
+                for (var i=0; i<interfaceXMLChildren.length; i++)
                 {
-                    var interfaceNode = this.interfaceXML.children[i];
+                    var interfaceNode = interfaceXMLChildren[i];
                     var checkName = interfaceNode.getAttribute('name');
                     var testNode
                     if (this.testXML.length > 0)
@@ -599,9 +601,10 @@
                 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
                 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("show")[0];
                 this.testXML = this.testXML.getAllElementsByTagName("show");
-                for (var i=0; i<this.interfaceXML.children.length; i++)
+                var interfaceXMLChildren = this.interfaceXML.getElementsByTagName('entry');
+                for (var i=0; i<interfaceXMLChildren.length; i++)
                 {
-                    var interfaceNode = this.interfaceXML.children[i];
+                    var interfaceNode = interfaceXMLChildren[i];
                     var checkName = interfaceNode.getAttribute('name');
                     var testNode
                     if (this.testXML.length > 0)
@@ -987,7 +990,7 @@
                 handleEvent: function(event) {
                     this.parent.scaleRoot.scales = [];
                     var protoScale = interfaceSpecs.getAllElementsByTagName('scaledefinitions')[0].getAllElementsByName(event.currentTarget.value)[0];
-                    var protoMarkers = protoScale.children;
+                    var protoMarkers = protoScale.getElementsByTagName("scale");
                     for (var i=0; i<protoMarkers.length; i++)
                     {
                         var marker = {
@@ -1011,7 +1014,7 @@
                 this.parent = parent;
                 
                 // Generate Pre-Set dropdown
-                var protoScales = interfaceSpecs.getAllElementsByTagName('scaledefinitions')[0].children;
+                var protoScales = interfaceSpecs.getAllElementsByTagName('scaledefinitions')[0].getElementsByTagName("scale");
                 this.preset.input.innerHTML = "";
                 
                 for (var i=0; i<protoScales.length; i++)
@@ -1186,7 +1189,7 @@
             this.dataType = schema.getAttribute('type');
             if (this.dataType == undefined) {
                 if (schema.childElementCount > 0) {
-                    if (schema.children[0].nodeName == "xs:simpleType") {
+                    if (schema.firstElementChild.nodeName == "xs:simpleType") {
                         this.dataType = schema.getAllElementsByTagName("xs:restriction")[0].getAttribute("base");
                     }
                 }
@@ -1326,7 +1329,7 @@
             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. "
             obj.content.appendChild(span);
             var link = document.createElement("div");
-            link.appendChild(doc.children[0]);
+            link.appendChild(doc.firstElementChild);
             var file = [link.innerHTML];
             var bb = new Blob(file,{type : 'application/xml'});
             var dnlk = window.URL.createObjectURL(bb);
@@ -1394,14 +1397,15 @@
         var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
         var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("metrics")[0];
         testXML = testXML.getAllElementsByTagName("metrics");
-        for (var i=0; i<interfaceXML.children.length; i++)
+        var interfaceXMLChild = interfaceXML.firstElementChild;
+        while(interfaceXMLChild)
         {
             var obj = {
                 input: document.createElement('input'),
                 root: document.createElement('div'),
                 text: document.createElement('span'),
                 specification: specification.metrics.enabled,
-                name: interfaceXML.children[i].getAttribute("name"),
+                name: interfaceXMLChild.getAttribute("name"),
                 handleEvent: function()
                 {
                     for (var i=0; i<this.specification.length; i++)
@@ -1431,7 +1435,7 @@
             obj.input.type = "checkbox";
             obj.root.appendChild(obj.text);
             obj.root.appendChild(obj.input);
-            obj.text.textContent = checkText.children[i].textContent;
+            obj.text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
             metric.children.push(obj);
             metric.childrenDOM.appendChild(obj.root);
             for (var j=0; j<specification.metrics.enabled.length; j++)
@@ -1442,6 +1446,7 @@
                     break;
                 }
             }
+            interfaceXMLChild = interfaceXMLChild.nextElementSibling;
         }
         
         // Now both before and after surveys
@@ -1640,9 +1645,10 @@
             var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
             var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("checks")[0];
             testXML = testXML.getAllElementsByTagName("checks");
-            for (var i=0; i<interfaceXML.children.length; i++)
+            var interfaceXMLChild = interfaceXML.firstElementChild;
+            while (interfaceXMLChild)
             {
-                var obj = new this.createIOasAttr(interfaceXML.children[i].getAttribute("name"),this.specification,this,"check");
+                var obj = new this.createIOasAttr(interfaceXMLChild.getAttribute("name"),this.specification,this,"check");
                 for (var option  of this.specification.options)
                 {
                     if (option.name == obj.name)
@@ -1661,10 +1667,11 @@
                     }
                 }
                 var text = document.createElement('span');
-                text.textContent = checkText.children[i].textContent;
+                text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
                 obj.root.appendChild(text);
                 checks.attributeDOM.appendChild(obj.root);
                 checks.attributes.push(obj);
+                interfaceXMLChild = interfaceXMLChild.nextElementSibling;
             }
             this.children.push(checks);
             this.childrenDOM.appendChild(checks.rootDOM);
@@ -1675,9 +1682,10 @@
             testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
             interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("show")[0];
             testXML = testXML.getAllElementsByTagName("show");
-            for (var i=0; i<interfaceXML.children.length; i++)
+            interfaceXMLChild = interfaceXML.firstElementChild;
+            while(interfaceXMLChild)
             {
-                var obj = new this.createIOasAttr(interfaceXML.children[i].getAttribute("name"),this.specification,this,"show");
+                var obj = new this.createIOasAttr(interfaceXMLChild.getAttribute("name"),this.specification,this,"show");
                 for (var option  of this.specification.options)
                 {
                     if (option.name == obj.name)
@@ -1696,10 +1704,11 @@
                     }
                 }
                 var text = document.createElement('span');
-                text.textContent = checkText.children[i].textContent;
+                text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
                 obj.root.appendChild(text);
                 show.attributeDOM.appendChild(obj.root);
                 show.attributes.push(obj);
+                interfaceXMLChild = interfaceXMLChild.nextElementSibling;
             }
             this.children.push(show);
             this.childrenDOM.appendChild(show.rootDOM);