changeset 2419:4718cd881d3a

Merge branch 'master' of https://github.com/BrechtDeMan/WebAudioEvaluationTool
author www-data <www-data@sucuk.dcs.qmul.ac.uk>
date Fri, 27 May 2016 12:20:51 +0100
parents 002be75d71df (current diff) 3013cf945716 (diff)
children d5a721a2c0ef
files
diffstat 15 files changed, 280 insertions(+), 204 deletions(-) [+]
line wrap: on
line diff
--- a/interfaces/AB.js	Fri May 27 11:20:44 2016 +0100
+++ b/interfaces/AB.js	Fri May 27 12:20:51 2016 +0100
@@ -153,6 +153,9 @@
         if (node){feedbackHolder.removeChild(node);}
     }
     
+    // Populate the comparator object
+	interfaceContext.comparator = new comparator(audioHolderObject);
+    
     for (var option of interfaceOptions)
     {
         if (option.type == "show")
@@ -187,30 +190,27 @@
                         feedbackHolder.appendChild(interfaceContext.volume.object);
                     }
                     break;
+                case "comments":
+                    var commentHolder = document.createElement('div');
+                    commentHolder.id = 'commentHolder';
+                    document.getElementById('testContent').appendChild(commentHolder);
+                    // Generate one comment box per presented page
+                    for (var element of audioEngineContext.audioObjects)
+                    {
+                        interfaceContext.commentBoxes.createCommentBox(element);
+                    }
+                    interfaceContext.commentBoxes.showCommentBoxes(commentHolder,true);
+                    break;
             }
         }
     }
-	
-	// Populate the comparator object
-	interfaceContext.comparator = new comparator(audioHolderObject);
-    if (audioHolderObject.showElementComments)
-    {
-        var commentHolder = document.createElement('div');
-        commentHolder.id = 'commentHolder';
-        document.getElementById('testContent').appendChild(commentHolder);
-        // Generate one comment box per presented page
-        for (var element of audioEngineContext.audioObjects)
-        {
-            interfaceContext.commentBoxes.createCommentBox(element);
-        }
-        interfaceContext.commentBoxes.showCommentBoxes(commentHolder,true);
-    }
-	resizeWindow(null);
     
     $(audioHolderObject.commentQuestions).each(function(index,element) {
 		var node = interfaceContext.createCommentQuestion(element);
 		commentHolder.appendChild(node.holder);
 	});
+    
+	resizeWindow(null);
 }
 
 function comparator(audioHolderObject)
--- a/interfaces/ape.js	Fri May 27 11:20:44 2016 +0100
+++ b/interfaces/ape.js	Fri May 27 12:20:51 2016 +0100
@@ -339,6 +339,12 @@
                 {
                     feedbackHolder.appendChild(interfaceContext.volume.object);
                 }
+            } else if (interfaceList[k].options[i].type == 'show' && interfaceList[k].options[i].name == 'comments') {
+                var commentHolder = document.createElement('div');
+                commentHolder.id = 'commentHolder';
+                document.getElementById('testContent').appendChild(commentHolder);
+                interfaceContext.commentBoxes.showCommentBoxes(feedbackHolder,true);
+                break;
             }
         }
     }
@@ -444,17 +450,51 @@
 		interfaceContext.releaseObject();
 	});
 	
-	
-	if (audioHolderObject.showElementComments) {
-		interfaceContext.commentBoxes.showCommentBoxes(feedbackHolder,true);
-	}
-	
-	$(audioHolderObject.commentQuestions).each(function(index,element) {
+    var interfaceList = audioHolderObject.interfaces.concat(specification.interfaces);
+    for (var k=0; k<interfaceList.length; k++)
+    {
+        for (var i=0; i<interfaceList[k].options.length; i++)
+        {
+            if (interfaceList[k].options[i].type == 'show' && interfaceList[k].options[i].name == 'playhead')
+            {
+                var playbackHolder = document.getElementById('playback-holder');
+                if (playbackHolder == null)
+                {
+                    playbackHolder = document.createElement('div');
+                    playbackHolder.id = "playback-holder";
+                    playbackHolder.style.width = "100%";
+                    playbackHolder.align = 'center';
+                    playbackHolder.appendChild(interfaceContext.playhead.object);
+                    feedbackHolder.appendChild(playbackHolder);
+                }
+            } else if (interfaceList[k].options[i].type == 'show' && interfaceList[k].options[i].name == 'page-count')
+            {
+                var pagecountHolder = document.getElementById('page-count');
+                if (pagecountHolder == null)
+                {
+                    pagecountHolder = document.createElement('div');
+                    pagecountHolder.id = 'page-count';
+                }
+                pagecountHolder.innerHTML = '<span>Page '+(testState.stateIndex+1)+' of '+testState.stateMap.length+'</span>';
+                var inject = document.getElementById('interface-buttons');
+                inject.appendChild(pagecountHolder);
+            } else if (interfaceList[k].options[i].type == 'show' && interfaceList[k].options[i].name == 'volume') {
+                if (document.getElementById('master-volume-holder') == null)
+                {
+                    feedbackHolder.appendChild(interfaceContext.volume.object);
+                }
+            } else if (interfaceList[k].options[i].type == 'show' && interfaceList[k].options[i].name == 'comments') {
+                interfaceContext.commentBoxes.showCommentBoxes(feedbackHolder,true);
+                break;
+            }
+        }
+    }
+    
+    $(audioHolderObject.commentQuestions).each(function(index,element) {
 		var node = interfaceContext.createCommentQuestion(element);
 		feedbackHolder.appendChild(node.holder);
 	});
 	
-	
 	//testWaitIndicator();
 }
 
--- a/interfaces/discrete.js	Fri May 27 11:20:44 2016 +0100
+++ b/interfaces/discrete.js	Fri May 27 12:20:51 2016 +0100
@@ -130,44 +130,6 @@
 	{
 		document.getElementById("pageTitle").textContent = interfaceObj.title;
 	}
-    
-    var interfaceOptions = specification.interfaces.options.concat(interfaceObj.options);
-    for (var option of interfaceOptions)
-    {
-        if (option.type == "show")
-        {
-            switch(option.name) {
-                case "playhead":
-                    var playbackHolder = document.getElementById('playback-holder');
-                    if (playbackHolder == null)
-                    {
-                        playbackHolder = document.createElement('div');
-                        playbackHolder.style.width = "100%";
-                        playbackHolder.align = 'center';
-                        playbackHolder.appendChild(interfaceContext.playhead.object);
-                        feedbackHolder.appendChild(playbackHolder);
-                    }
-                    break;
-                case "page-count":
-                    var pagecountHolder = document.getElementById('page-count');
-                    if (pagecountHolder == null)
-                    {
-                        pagecountHolder = document.createElement('div');
-                        pagecountHolder.id = 'page-count';
-                    }
-                    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)
-                    {
-                        feedbackHolder.appendChild(interfaceContext.volume.object);
-                    }
-                    break;
-            }
-        }
-    }
 	
 	// Delete outside reference
     document.getElementById("outside-reference-holder").innerHTML = "";
@@ -224,11 +186,52 @@
         
 	});
 	
-    if (page.showElementComments)
+    var interfaceOptions = specification.interfaces.options.concat(interfaceObj.options);
+    for (var option of interfaceOptions)
     {
-        interfaceContext.commentBoxes.showCommentBoxes(feedbackHolder,true);
+        if (option.type == "show")
+        {
+            switch(option.name) {
+                case "playhead":
+                    var playbackHolder = document.getElementById('playback-holder');
+                    if (playbackHolder == null)
+                    {
+                        playbackHolder = document.createElement('div');
+                        playbackHolder.style.width = "100%";
+                        playbackHolder.align = 'center';
+                        playbackHolder.appendChild(interfaceContext.playhead.object);
+                        feedbackHolder.appendChild(playbackHolder);
+                    }
+                    break;
+                case "page-count":
+                    var pagecountHolder = document.getElementById('page-count');
+                    if (pagecountHolder == null)
+                    {
+                        pagecountHolder = document.createElement('div');
+                        pagecountHolder.id = 'page-count';
+                    }
+                    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)
+                    {
+                        feedbackHolder.appendChild(interfaceContext.volume.object);
+                    }
+                    break;
+                case "comments":
+                    interfaceContext.commentBoxes.showCommentBoxes(feedbackHolder,true);
+                    break;
+            }
+        }
     }
     
+    $(page.commentQuestions).each(function(index,element) {
+		var node = interfaceContext.createCommentQuestion(element);
+		commentHolder.appendChild(node.holder);
+	});
+    
 	// Auto-align
 	resizeWindow(null);
 }
--- a/interfaces/horizontal-sliders.js	Fri May 27 11:20:44 2016 +0100
+++ b/interfaces/horizontal-sliders.js	Fri May 27 12:20:51 2016 +0100
@@ -130,44 +130,6 @@
 	{
 		document.getElementById("pageTitle").textContent = interfaceObj.title;
 	}
-	
-    var interfaceOptions = specification.interfaces.options.concat(interfaceObj.options);
-    for (var option of interfaceOptions)
-    {
-        if (option.type == "show")
-        {
-            switch(option.name) {
-                case "playhead":
-                    var playbackHolder = document.getElementById('playback-holder');
-                    if (playbackHolder == null)
-                    {
-                        playbackHolder = document.createElement('div');
-                        playbackHolder.style.width = "100%";
-                        playbackHolder.align = 'center';
-                        playbackHolder.appendChild(interfaceContext.playhead.object);
-                        feedbackHolder.appendChild(playbackHolder);
-                    }
-                    break;
-                case "page-count":
-                    var pagecountHolder = document.getElementById('page-count');
-                    if (pagecountHolder == null)
-                    {
-                        pagecountHolder = document.createElement('div');
-                        pagecountHolder.id = 'page-count';
-                    }
-                    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)
-                    {
-                        feedbackHolder.appendChild(interfaceContext.volume.object);
-                    }
-                    break;
-            }
-        }
-    }
     
 	// Delete outside reference
 	document.getElementById("outside-reference-holder").innerHTML = "";
@@ -231,9 +193,45 @@
 		}
         
 	});
-	if (page.showElementComments)
+    var interfaceOptions = specification.interfaces.options.concat(interfaceObj.options);
+    for (var option of interfaceOptions)
     {
-        interfaceContext.commentBoxes.showCommentBoxes(feedbackHolder,true);
+        if (option.type == "show")
+        {
+            switch(option.name) {
+                case "playhead":
+                    var playbackHolder = document.getElementById('playback-holder');
+                    if (playbackHolder == null)
+                    {
+                        playbackHolder = document.createElement('div');
+                        playbackHolder.style.width = "100%";
+                        playbackHolder.align = 'center';
+                        playbackHolder.appendChild(interfaceContext.playhead.object);
+                        feedbackHolder.appendChild(playbackHolder);
+                    }
+                    break;
+                case "page-count":
+                    var pagecountHolder = document.getElementById('page-count');
+                    if (pagecountHolder == null)
+                    {
+                        pagecountHolder = document.createElement('div');
+                        pagecountHolder.id = 'page-count';
+                    }
+                    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)
+                    {
+                        feedbackHolder.appendChild(interfaceContext.volume.object);
+                    }
+                    break;
+                case "comments":
+                    interfaceContext.commentBoxes.showCommentBoxes(feedbackHolder,true);
+                    break;
+            }
+        }
     }
 	// Auto-align
 	resizeWindow(null);
--- a/interfaces/mushra.js	Fri May 27 11:20:44 2016 +0100
+++ b/interfaces/mushra.js	Fri May 27 12:20:51 2016 +0100
@@ -131,43 +131,6 @@
 	{
 		document.getElementById("pageTitle").textContent = interfaceObj.title;
 	}
-    var interfaceOptions = specification.interfaces.options.concat(interfaceObj.options);
-    for (var option of interfaceOptions)
-    {
-        if (option.type == "show")
-        {
-            switch(option.name) {
-                case "playhead":
-                    var playbackHolder = document.getElementById('playback-holder');
-                    if (playbackHolder == null)
-                    {
-                        playbackHolder = document.createElement('div');
-                        playbackHolder.style.width = "100%";
-                        playbackHolder.align = 'center';
-                        playbackHolder.appendChild(interfaceContext.playhead.object);
-                        feedbackHolder.appendChild(playbackHolder);
-                    }
-                    break;
-                case "page-count":
-                    var pagecountHolder = document.getElementById('page-count');
-                    if (pagecountHolder == null)
-                    {
-                        pagecountHolder = document.createElement('div');
-                        pagecountHolder.id = 'page-count';
-                    }
-                    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)
-                    {
-                        feedbackHolder.appendChild(interfaceContext.volume.object);
-                    }
-                    break;
-            }
-        }
-    }
 	
 	// Delete outside reference
 	var outsideReferenceHolder = document.getElementById("outside-reference-holder");
@@ -232,9 +195,47 @@
         
 	});
     
-    if (audioHolderObject.showElementComments) {
-		interfaceContext.commentBoxes.showCommentBoxes(feedbackHolder,true);
-	}
+    
+    var interfaceOptions = specification.interfaces.options.concat(interfaceObj.options);
+    for (var option of interfaceOptions)
+    {
+        if (option.type == "show")
+        {
+            switch(option.name) {
+                case "playhead":
+                    var playbackHolder = document.getElementById('playback-holder');
+                    if (playbackHolder == null)
+                    {
+                        playbackHolder = document.createElement('div');
+                        playbackHolder.style.width = "100%";
+                        playbackHolder.align = 'center';
+                        playbackHolder.appendChild(interfaceContext.playhead.object);
+                        feedbackHolder.appendChild(playbackHolder);
+                    }
+                    break;
+                case "page-count":
+                    var pagecountHolder = document.getElementById('page-count');
+                    if (pagecountHolder == null)
+                    {
+                        pagecountHolder = document.createElement('div');
+                        pagecountHolder.id = 'page-count';
+                    }
+                    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)
+                    {
+                        feedbackHolder.appendChild(interfaceContext.volume.object);
+                    }
+                    break;
+                case "comments":
+                    interfaceContext.commentBoxes.showCommentBoxes(feedbackHolder,true);
+                    break;
+            }
+        }
+    }
 	
 	$(audioHolderObject.commentQuestions).each(function(index,element) {
 		var node = interfaceContext.createCommentQuestion(element);
--- a/js/core.js	Fri May 27 11:20:44 2016 +0100
+++ b/js/core.js	Fri May 27 12:20:51 2016 +0100
@@ -1677,7 +1677,7 @@
 			} else {
                  this.outputGain.gain.setValueAtTime(0.0,startTime);
             }
-			this.bufferNode.start(startTime);
+			this.bufferNode.start(startTime,this.specification.startTime || 0, this.specification.stopTime-this.specification.startTime || this.buffer.buffer.duration);
             this.bufferNode.playbackStartTime = audioEngineContext.timer.getTestTime();
 		}
 	};
@@ -2488,7 +2488,7 @@
         this.outsideReferenceHolder = document.createElement('button');
         this.outsideReferenceHolder.className = 'outside-reference';
         this.outsideReferenceHolder.setAttribute('track-id',index);
-        this.outsideReferenceHolder.textContent = "Play Reference";
+        this.outsideReferenceHolder.textContent = this.parent.specification.label || "Reference";
         this.outsideReferenceHolder.disabled = true;
 
         this.outsideReferenceHolder.onclick = function(event)
@@ -2511,7 +2511,7 @@
                 progress = progress.split('.')[0];
                 this.outsideReferenceHolder.textContent = progress+'%';
             } else {
-                this.outsideReferenceHolder.textContent = "Play Reference";
+                this.outsideReferenceHolder.textContent = this.parent.specification.label || "Reference";
             }
         };
         this.startPlayback = function()
@@ -2536,7 +2536,7 @@
         };
         this.getPresentedId = function()
         {
-            return 'Reference';
+            return this.parent.specification.label || "Reference";
         };
         this.canMove = function()
         {
--- a/js/specification.js	Fri May 27 11:20:44 2016 +0100
+++ b/js/specification.js	Fri May 27 12:20:51 2016 +0100
@@ -442,7 +442,6 @@
 		this.hostURL = undefined;
 		this.randomiseOrder = undefined;
 		this.loop = undefined;
-		this.showElementComments = undefined;
 		this.outsideReference = null;
 		this.loudness = null;
         this.label = null;
@@ -626,6 +625,9 @@
 			this.marker = null;
 			this.enforce = false;
 			this.gain = 0.0;
+            this.label = null;
+            this.startTime = null;
+            this.stopTime = null;
 			this.schema = specification.schema.getAllElementsByName('audioelement')[0];;
 			this.parent = null;
 			this.decode = function(parent,xml)
--- a/test_create/attributes.json	Fri May 27 11:20:44 2016 +0100
+++ b/test_create/attributes.json	Fri May 27 12:20:51 2016 +0100
@@ -13,7 +13,6 @@
     "repeatCount": "Repeat Count",
     "loop": "Loop playback",
     "synchronous": "Synchronous playback",
-    "showElementComments": "Show Comment Boxes",
     "type": "Type",
     "min": "Minimum",
     "max": "Maximum",
--- a/test_create/test_core.js	Fri May 27 11:20:44 2016 +0100
+++ b/test_create/test_core.js	Fri May 27 12:20:51 2016 +0100
@@ -1332,7 +1332,7 @@
             span.textContent = "NOTE FOR SAFARI! You cannot right click on the below link and save it as a file, Safari does not like that at all. Instead click on it to open the XML, the Press Cmd+S to open the save dialogue. Make sure you have 'save as Page Source' selected on the bottom of the window. Currently Safari has no plans to support the HTML 'download' attribute which causes this problem";
             obj.content.appendChild(span);
             var link = document.createElement("div");
-            link.appendChild(doc.firstElementChild);
+            link.appendChild(doc.firstChild);
             var file = [link.innerHTML];
             var bb = new Blob(file,{type : 'application/xml'});
             var dnlk = window.URL.createObjectURL(bb);
@@ -1946,6 +1946,31 @@
             this.deleteNode.root.textContent = "Delete Entry";
             this.deleteNode.root.addEventListener("click",this.deleteNode,false);
             this.buttonDOM.appendChild(this.deleteNode.root);
+            
+            this.moveToPosition = function(new_index){
+                new_index = Math.min(new_index,this.parent.children.length);
+                var curr_index = this.parent.children.findIndex(function(elem){
+                    if (elem == this) {return true;} else {return false;}
+                },this);
+                // Split at the current location to remove the node and shift all the children up
+                var tail = this.parent.children.splice(curr_index+1);
+                this.parent.children.pop();
+                this.parent.children = this.parent.children.concat(tail);
+                
+                //Split at the new location and insert the node
+                tail = this.parent.children.splice(new_index);
+                this.parent.children.push(this);
+                this.parent.children = this.parent.children.concat(tail);
+                
+                // Re-build the specification
+                this.parent.specification.options = [];
+                this.parent.childrenDOM.innerHTML = "";
+                for (var obj of this.parent.children) {
+                    this.parent.specification.options.push(obj.specification);
+                    this.parent.childrenDOM.appendChild(obj.rootDOM);
+                }
+                
+            }
         }
         this.addNode = {
             root: document.createElement("button"),
--- a/tests/examples/AB_example.xml	Fri May 27 11:20:44 2016 +0100
+++ b/tests/examples/AB_example.xml	Fri May 27 12:20:51 2016 +0100
@@ -50,9 +50,10 @@
 			<interfaceoption type="show" name='playhead'/>
 			<interfaceoption type="show" name="page-count"/>
             <interfaceoption type="show" name='volume'/>
+            <interfaceoption type="show" name='comments'/>
 		</interface>
 	</setup>
-	<page id='test-0' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='true' showElementComments='true' loudness="-12">
+	<page id='test-0' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='true' loudness="-12">
 		<commentboxprefix>Comment on fragment</commentboxprefix>
 		<interface>
 			<title>Depth</title>
@@ -70,7 +71,7 @@
 			</surveyentry>
 		</survey>
 	</page>
-	<page id='test-1' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='false' showElementComments='true' loudness="-12">
+	<page id='test-1' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='false' loudness="-12">
 		<commentboxprefix>Comment on fragment</commentboxprefix>
 		<interface>
 			<title>Depth</title>
--- a/tests/examples/horizontal_example.xml	Fri May 27 11:20:44 2016 +0100
+++ b/tests/examples/horizontal_example.xml	Fri May 27 12:20:51 2016 +0100
@@ -16,9 +16,10 @@
 			<interfaceoption type="show" name='playhead'/>
 			<interfaceoption type="show" name="page-count"/>
             <interfaceoption type="show" name="volume"/>
+            <interfaceoption type="show" name="comments"/>
 		</interface>
 	</setup>
-	<page id='test-0' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='true' showElementComments='true' loudness="-12">
+	<page id='test-0' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='true' loudness="-12">
 		<interface>
 			<scales>
 				<scalelabel position="0">-50</scalelabel>
--- a/tests/examples/mushra_example.xml	Fri May 27 11:20:44 2016 +0100
+++ b/tests/examples/mushra_example.xml	Fri May 27 12:20:51 2016 +0100
@@ -53,7 +53,7 @@
             <interfaceoption type="show" name="volume"/>
 		</interface>
 	</setup>
-	<page id='test-0' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='true' showElementComments='true' loudness="-12">
+	<page id='test-0' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='true' loudness="-12">
 		<commentboxprefix>Comment on fragment</commentboxprefix>
 		<interface>
 			<scales>
@@ -82,10 +82,11 @@
 			</surveyentry>
 		</survey>
 	</page>
-	<page id='test-1' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='false' showElementComments='true'>
+	<page id='test-1' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='false'>
 		<commentboxprefix>Comment on fragment</commentboxprefix>
 		<interface name="preference">
 			<title>Example Test Question</title>
+            <interfaceoption type="show" name="comments"/>
 			<scales>
 				<scalelabel position="0">Min</scalelabel>
 				<scalelabel position="100">Max</scalelabel>
--- a/tests/examples/project.xml	Fri May 27 11:20:44 2016 +0100
+++ b/tests/examples/project.xml	Fri May 27 12:20:51 2016 +0100
@@ -50,9 +50,10 @@
 			<interfaceoption type="check" name="scalerange" min="25" max="75"/>
 			<interfaceoption type="show" name='playhead'/>
 			<interfaceoption type="show" name="page-count"/>
+            <interfaceoption type="show" name="comments"/>
 		</interface>
 	</setup>
-	<page id='test-0' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='true' showElementComments='true' loudness="-12">
+	<page id='test-0' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='true' loudness="-12">
 		<commentboxprefix>Comment on fragment</commentboxprefix>
 		<interface name="preference">
             <title>Preference</title>
@@ -88,7 +89,7 @@
 			</surveyentry>
 		</survey>
 	</page>
-	<page id='test-1' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='false' showElementComments='true' label="letter">
+	<page id='test-1' hostURL="media/example/" randomiseOrder='true' repeatCount='0' loop='false' label="letter">
 		<commentboxprefix>Comment on fragment</commentboxprefix>
 		<interface name="preference">
 			<title>Example Test Question</title>
--- a/tests/examples/radio_example.xml	Fri May 27 11:20:44 2016 +0100
+++ b/tests/examples/radio_example.xml	Fri May 27 12:20:51 2016 +0100
@@ -1,47 +1,37 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<waet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test-schema.xsd">
+<?xml version="1.0" encoding="UTF-8" ?>
+<waet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test-schema.xsd">
 	<setup interface="likert" projectReturn="save.php" crossFade="3.0">
-		<metric>
-			<metricenable>testTimer</metricenable>
-			<metricenable>elementTimer</metricenable>
-			<metricenable>elementInitialPosition</metricenable>
-			<metricenable>elementTracker</metricenable>
-			<metricenable>elementFlagListenedTo</metricenable>
-			<metricenable>elementFlagMoved</metricenable>
-			<metricenable>elementListenTracker</metricenable>
-		</metric>
-		<interface>
-			<interfaceoption type="check" name="fragmentMoved"/>
-			<interfaceoption type="check" name="scalerange" min="25" max="75"/>
-            <interfaceoption type="show" name="volume"/>
-			<interfaceoption type="show" name='playhead'/>
-			<interfaceoption type="show" name="page-count"/>
-		</interface>
-	</setup>
-	<page id='test-0' hostURL="media/example/" randomiseOrder='true' repeatCount='4' loop='true' showElementComments='true' loudness="-23">
-		<interface>
-			<scales>
-				<scalelabel position="0">(1) Very Annoying</scalelabel>
-				<scalelabel position="25">(2) Annoying</scalelabel>
-				<scalelabel position="50">(3) Slightly Annoying</scalelabel>
-				<scalelabel position="75">(4) Audible but not Annoying</scalelabel>
-				<scalelabel position="100">(5) Inaudible</scalelabel>
-			</scales>
-		</interface>
-		<audioelement url="0.wav" id="track-1" alwaysInclude="true"/>
-		<audioelement url="1.wav" id="track-2"/>
-        <audioelement url="3.wav" id="track-4"/>
-        <audioelement url="3.wav" id="track-5"/>
-        <audioelement url="3.wav" id="track-6"/>
-        <audioelement url="3.wav" id="track-7"/>
-        <audioelement url="3.wav" id="track-8"/>
-        <audioelement url="3.wav" id="track-9"/>
-        <audioelement url="3.wav" id="track-10"/>
-        <audioelement url="3.wav" id="track-11"/>
-        <audioelement url="3.wav" id="track-12"/>
-        <audioelement url="3.wav" id="track-13"/>
-        <audioelement url="3.wav" id="track-14"/>
-        <audioelement url="3.wav" id="track-15"/>
-        <audioelement url="2.wav" id="track-16" type="outside-reference"/>
-	</page>
-</waet>
+		<metric>
+			<metricenable>testTimer</metricenable>
+			<metricenable>elementTimer</metricenable>
+			<metricenable>elementInitialPosition</metricenable>
+			<metricenable>elementTracker</metricenable>
+			<metricenable>elementFlagListenedTo</metricenable>
+			<metricenable>elementFlagMoved</metricenable>
+			<metricenable>elementListenTracker</metricenable>
+		</metric>
+		<interface>
+			<interfaceoption type="check" name="fragmentMoved"/>
+			<interfaceoption type="check" name="scalerange" min="25" max="75"/>
+            <interfaceoption type="show" name="volume"/>
+			<interfaceoption type="show" name='playhead'/>
+			<interfaceoption type="show" name="page-count"/>
+            <interfaceoption type="show" name="comments"/>
+		</interface>
+	</setup>
+	<page id='test-0' hostURL="media/example/" randomiseOrder='true' repeatCount='4' loop='true' loudness="-23">
+		<interface>
+			<scales>
+				<scalelabel position="0">(1) Very Annoying</scalelabel>
+				<scalelabel position="25">(2) Annoying</scalelabel>
+				<scalelabel position="50">(3) Slightly Annoying</scalelabel>
+				<scalelabel position="75">(4) Audible but not Annoying</scalelabel>
+				<scalelabel position="100">(5) Inaudible</scalelabel>
+			</scales>
+		</interface>
+		<audioelement url="0.wav" id="track-1" alwaysInclude="true"/>
+		<audioelement url="1.wav" id="track-2"/>
+        <audioelement url="3.wav" id="track-4"/>
+        <audioelement url="3.wav" id="track-5"/>
+	</page>
+</waet>
--- a/xml/test-schema.xsd	Fri May 27 11:20:44 2016 +0100
+++ b/xml/test-schema.xsd	Fri May 27 12:20:51 2016 +0100
@@ -81,7 +81,6 @@
                 <xs:attribute name="repeatCount" type="xs:nonNegativeInteger" default="0" />
                 <xs:attribute name="loop" type="xs:boolean" default="false" />
                 <xs:attribute name="synchronous" type="xs:boolean" default="false" />
-                <xs:attribute name="showElementComments" type="xs:boolean" default="false" />
                 <xs:attribute name="loudness" type="xs:nonPositiveInteger" use="optional" />
                 <xs:attribute name="label" use="optional" default="default">
                     <xs:simpleType>
@@ -161,6 +160,7 @@
                 <xs:attribute ref="id" use="required" />
                 <xs:attribute name="url" type="xs:anyURI" use="required" />
                 <xs:attribute name="gain" type="xs:decimal" default="0" />
+                <xs:attribute name="label" type="xs:string" />
                 <xs:attribute ref="name" />
                 <xs:attribute name="type" default="normal">
                     <xs:simpleType>
@@ -184,6 +184,20 @@
                 <xs:attribute ref="alwaysInclude" />
                 <xs:attribute ref="preSilence" />
                 <xs:attribute ref="postSilence" />
+                <xs:attribute name="startTime" use="optional">
+                    <xs:simpleType>
+                        <xs:restriction base="xs:decimal">
+                            <xs:minInclusive value="0" />
+                        </xs:restriction>
+                    </xs:simpleType>
+                </xs:attribute>
+                <xs:attribute name="stopTime" use="optional">
+                    <xs:simpleType>
+                        <xs:restriction base="xs:decimal">
+                            <xs:minInclusive value="0" />
+                        </xs:restriction>
+                    </xs:simpleType>
+                </xs:attribute>
             </xs:complexType>
         </xs:element>