diff ape.js @ 453:44a6fe06e71a Dev_main

--UNSTABLE-- Major revision. Updated Specification including verification. Added storage collector for XML results. Popup more stable.
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Wed, 06 Jan 2016 10:36:37 +0000
parents 4866152611e6
children c251206bdddf
line wrap: on
line diff
--- a/ape.js	Tue Dec 29 13:54:56 2015 +0000
+++ b/ape.js	Wed Jan 06 10:36:37 2016 +0000
@@ -337,8 +337,31 @@
 		// In this jQuery loop, variable 'this' holds the current audioElement.
 		
 		// Check if an outside reference
-		if (index == audioHolderObject.outsideReference)
+		if (element.type == 'outside-reference')
 		{
+			// Construct outside reference;
+			var outsideReferenceHolder = document.createElement('div');
+			outsideReferenceHolder.id = 'outside-reference';
+			outsideReferenceHolder.className = 'outside-reference';
+			outsideReferenceHolderspan = document.createElement('span');
+			outsideReferenceHolderspan.textContent = 'Reference';
+			outsideReferenceHolder.appendChild(outsideReferenceHolderspan);
+			
+			var audioObject = audioEngineContext.newTrack(element);
+			
+			outsideReferenceHolder.onclick = function(event)
+			{
+				audioEngineContext.play(audioEngineContext.audioObjects.length-1);
+				$('.track-slider').removeClass('track-slider-playing');
+	            $('.comment-div').removeClass('comment-box-playing');
+	            if (event.currentTarget.nodeName == 'DIV') {
+	            	$(event.currentTarget).addClass('track-slider-playing');
+	            } else {
+	            	$(event.currentTarget.parentElement).addClass('track-slider-playing');
+	            }
+			};
+			
+			document.getElementById('interface-buttons').appendChild(outsideReferenceHolder);
 			return;
 		}
 		
@@ -347,10 +370,9 @@
 		var audioObject = audioEngineContext.newTrack(element);
 		
 		var node = interfaceContext.createCommentBox(audioObject);
-		
 		// Create a slider per track
 		audioObject.interfaceDOM = new sliderObject(audioObject,interfaceObj);
-		audioObject.metric.initialPosition = convSliderPosToRate(audioObject.interfaceDOM.trackSliderObjects[0]);
+		audioObject.metric.initialise(convSliderPosToRate(audioObject.interfaceDOM.trackSliderObjects[0]));
 		if (audioObject.state == 1)
 		{
 			audioObject.interfaceDOM.enable();
@@ -437,7 +459,7 @@
 	});
 	
 	
-	if (commentShow) {
+	if (audioHolderObject.showElementComments) {
 		interfaceContext.showCommentBoxes(feedbackHolder,true);
 	}
 	
@@ -446,32 +468,6 @@
 		feedbackHolder.appendChild(node.holder);
 	});
 	
-	// Construct outside reference;
-	if (audioHolderObject.outsideReference != null) {
-		var outsideReferenceHolder = document.createElement('div');
-		outsideReferenceHolder.id = 'outside-reference';
-		outsideReferenceHolder.className = 'outside-reference';
-		outsideReferenceHolderspan = document.createElement('span');
-		outsideReferenceHolderspan.textContent = 'Reference';
-		outsideReferenceHolder.appendChild(outsideReferenceHolderspan);
-		
-		var audioObject = audioEngineContext.newTrack(audioHolderObject.audioElements[audioHolderObject.outsideReference]);
-		
-		outsideReferenceHolder.onclick = function(event)
-		{
-			audioEngineContext.play(audioEngineContext.audioObjects.length-1);
-			$('.track-slider').removeClass('track-slider-playing');
-            $('.comment-div').removeClass('comment-box-playing');
-            if (event.currentTarget.nodeName == 'DIV') {
-            	$(event.currentTarget).addClass('track-slider-playing');
-            } else {
-            	$(event.currentTarget.parentElement).addClass('track-slider-playing');
-            }
-		};
-		
-		document.getElementById('interface-buttons').appendChild(outsideReferenceHolder);
-	}
-	
 	
 	//testWaitIndicator();
 }
@@ -533,15 +529,14 @@
 	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);
-	for (var index=0; index<interfaceObject.scale.length; index++)
+	for (var scaleObj of interfaceObject.scales)
 	{
-		var scaleObj = interfaceObject.scale[index];
 		var value = document.createAttribute('value');
-		var position = Number(scaleObj[0])*0.01;
+		var position = Number(scaleObj.position)*0.01;
 		value.nodeValue = position;
 		var pixelPosition = (position*positionScale)+offset;
 		var scaleDOM = document.createElement('span');
-		scaleDOM.textContent = scaleObj[1];
+		scaleDOM.textContent = scaleObj.text;
 		this.scale.appendChild(scaleDOM);
 		scaleDOM.style.left = Math.floor((pixelPosition-($(scaleDOM).width()/2)))+'px';
 		scaleDOM.setAttributeNode(value);
@@ -652,13 +647,15 @@
 		return obj;
 	};
 	this.getValue = function() {
-		return convSliderPosToRate(this.trackSliderObj);
+		return convSliderPosToRate(this.trackSliderObjects[0]);
 	};
 }
 
 function buttonSubmitClick()
 {
-	var checks = testState.currentStateMap[testState.currentIndex].interfaces[0].options;
+	var checks = [];
+	checks.concat(testState.currentStateMap.interfaces[0].options);
+	checks.concat(specification.interfaces.options);
 	var canContinue = true;
 	
 	// Check that the anchor and reference objects are correctly placed
@@ -743,12 +740,15 @@
 	}
 }
 
-function pageXMLSave(store, testXML)
+function pageXMLSave(store, pageSpecification)
 {
 	// MANDATORY
 	// Saves a specific test page
 	// You can use this space to add any extra nodes to your XML <audioHolder> saves
-	// Get the current <audioHolder> information in store (remember to appendChild your data to it)
+	// Get the current <page> information in store (remember to appendChild your data to it)
+	// pageSpecification is the current page node configuration
+	// To create new XML nodes, use storage.document.createElement();
+	
 	if (interfaceContext.interfaceSliders.length == 1)
 	{
 		// If there is only one axis, there only needs to be one metric return
@@ -758,19 +758,18 @@
 	for (var i=0; i<audioelements.length; i++)
 	{
 		// Have to append the metric specific nodes
-		if (testXML.outsideReference == null || testXML.outsideReference.id != audioelements[i].id)
+		if (pageSpecification.outsideReference == null || pageSpecification.outsideReference.id != audioelements[i].id)
 		{
 			var inject = audioelements[i].getElementsByTagName("metric");
 			if (inject.length == 0)
 			{
-				inject = document.createElement("metric");
+				inject = storage.document.createElement("metric");
 			} else {
 				inject = inject[0];
 			}
 			for (var k=0; k<interfaceContext.interfaceSliders.length; k++)
 			{
-				var node = interfaceContext.interfaceSliders[k].metrics[i].exportXMLDOM();
-				var mrnodes = node.getElementsByTagName("metricresult");
+				var mrnodes = interfaceContext.interfaceSliders[k].metrics[i].exportXMLDOM(inject);
 				for (var j=0; j<mrnodes.length; j++)
 				{
 					var name = mrnodes[j].getAttribute("name");