changeset 674:436db2f29f73

Updated metric functions. Completed Metric Exporting.
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Mon, 13 Apr 2015 09:58:16 +0100
parents d4e55184f776
children 7e73d1cdcff8
files ape.js core.js example_eval/project.xml
diffstat 3 files changed, 113 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/ape.js	Sun Apr 12 18:20:39 2015 +0100
+++ b/ape.js	Mon Apr 13 09:58:16 2015 +0100
@@ -42,26 +42,56 @@
 	// Should put in an error function here incase of malprocessed or malformed XML
 	
 	// Extract the different test XML DOM trees
-	 var audioHolders = xmlDoc.find('audioHolder');
-	 audioHolders.each(function(index,element) {
-	 	var repeatN = element.attributes['repeatCount'].value;
-	 	for (var r=0; r<=repeatN; r++) {
-	 		testXMLSetups[testXMLSetups.length] = element;
-	 	}
-	 });
+	var audioHolders = xmlDoc.find('audioHolder');
+	audioHolders.each(function(index,element) {
+		var repeatN = element.attributes['repeatCount'].value;
+		for (var r=0; r<=repeatN; r++) {
+			testXMLSetups[testXMLSetups.length] = element;
+		}
+	});
 	 
-	 // New check if we need to randomise the test order
-	 var randomise = xmlSetup[0].attributes['randomiseOrder'];
-	 if (randomise != undefined) {
-	 	randomise = Boolean(randomise.value);
-	 } else {
-	 	randomise = false;
-	 }
-	 if (randomise)
-	 {
-	 	// TODO: Implement Randomisation!!
-	 }
+	// New check if we need to randomise the test order
+	var randomise = xmlSetup[0].attributes['randomiseOrder'];
+	if (randomise != undefined) {
+		randomise = Boolean(randomise.value);
+	} else {
+		randomise = false;
+	}
+	if (randomise)
+	{
+ 		// TODO: Implement Randomisation!!
+	}
 	 
+	// Obtain the metrics enabled
+	var metricNode = xmlSetup.find('Metric');
+	var metricNode = metricNode.find('metricEnable');
+	metricNode.each(function(index,node){
+		var enabled = node.textContent;
+		switch(enabled)
+		{
+		case 'testTimer':
+			sessionMetrics.prototype.enableTestTimer = true;
+			break;
+		case 'elementTimer':
+			sessionMetrics.prototype.enableElementTimer = true;
+			break;
+		case 'elementTracker':
+			sessionMetrics.prototype.enableElementTracker = true;
+			break;
+		case 'elementInitalPosition':
+			sessionMetrics.prototype.enableElementInitialPosition = true;
+			break;
+		case 'elementFlagListenedTo':
+			sessionMetrics.prototype.enableFlagListenedTo = true;
+			break;
+		case 'elementFlagMoved':
+			sessionMetrics.prototype.enableFlagMoved = true;
+			break;
+		case 'elementFlagComments':
+			sessionMetrics.prototype.enableFlagComments = true;
+			break;
+		}
+	});
 	
 	// Create the top div for the Title element
 	var titleAttr = xmlSetup[0].attributes['title'];
@@ -578,6 +608,16 @@
 {
 	// Saves a specific test page
 	var xmlDoc = currentTestHolder;
+	// Check if any session wide metrics are enabled
+	var metric = document.createElement('metric');
+	if (audioEngineContext.metric.enableTestTimer)
+	{
+		var testTime = document.createElement('metricResult');
+		testTime.id = 'testTime';
+		testTime.textContent = audioEngineContext.timer.testDuration;
+		metric.appendChild(testTime);
+	}
+	xmlDoc.appendChild(metric);
 	var trackSliderObjects = document.getElementsByClassName('track-slider');
 	var commentObjects = document.getElementsByClassName('comment-div');
 	var rateMin = 50;
@@ -600,6 +640,59 @@
 		comment.appendChild(response);
 		audioElement.appendChild(value);
 		audioElement.appendChild(comment);
+		// Check for any per element metrics
+		var metric = document.createElement('metric');
+		var elementMetric = audioEngineContext.audioObjects[i].metric;
+		if (audioEngineContext.metric.enableElementTimer) {
+			var elementTimer = document.createElement('metricResult');
+			elementTimer.id = 'elementTimer';
+			elementTimer.textContent = elementMetric.listenedTimer;
+			metric.appendChild(elementTimer);
+		}
+		if (audioEngineContext.metric.enableElementTracker) {
+			var elementTrackerFull = document.createElement('metricResult');
+			elementTrackerFull.id = 'elementTrackerFull';
+			var data = elementMetric.movementTracker;
+			for (var k=0; k<data.length; k++)
+			{
+				var timePos = document.createElement('timePos');
+				timePos.id = k;
+				var time = document.createElement('time');
+				time.textContent = data[k][0];
+				var position = document.createElement('position');
+				position.textContent = data[k][1];
+				timePos.appendChild(time);
+				timePos.appendChild(position);
+				elementTrackerFull.appendChild(timePos);
+			}
+			metric.appendChild(elementTrackerFull);
+		}
+		if (audioEngineContext.metric.enableElementInitialPosition) {
+			var elementInitial = document.createElement('metricResult');
+			elementInitial.id = 'elementInitialPosition';
+			elementInitial.textContent = elementMetric.initialPosition;
+			metric.appendChild(elementInitial);
+		}
+		if (audioEngineContext.metric.enableFlagListenedTo) {
+			var flagListenedTo = document.createElement('metricResult');
+			flagListenedTo.id = 'elementFlagListenedTo';
+			flagListenedTo.textContent = elementMetric.wasListenedTo;
+			metric.appendChild(flagListenedTo);
+		}
+		if (audioEngineContext.metric.enableFlagMoved) {
+			var flagMoved = document.createElement('metricResult');
+			flagMoved.id = 'elementFlagMoved';
+			flagMoved.textContent = elementMetric.wasMoved;
+			metric.appendChild(flagMoved);
+		}
+		if (audioEngineContext.metric.enableFlagComments) {
+			var flagComments = document.createElement('metricResult');
+			flagComments.id = 'elementFlagComments';
+			if (response.textContent.length == 0) {flag.textContent = 'false';}
+			else {flag.textContet = 'true';}
+			metric.appendChild(flagComments);
+		}
+		audioElement.appendChild(metric);
 		xmlDoc.appendChild(audioElement);
 	}
 	testResultsHolders[testId] = xmlDoc;
--- a/core.js	Sun Apr 12 18:20:39 2015 +0100
+++ b/core.js	Mon Apr 13 09:58:16 2015 +0100
@@ -375,4 +375,4 @@
 			this.listenStart = 0;
 		}
 	};
-}
+}
\ No newline at end of file
--- a/example_eval/project.xml	Sun Apr 12 18:20:39 2015 +0100
+++ b/example_eval/project.xml	Mon Apr 13 09:58:16 2015 +0100
@@ -12,6 +12,7 @@
 		<Metric>
 			<metricEnable>testTimer</metricEnable>
 			<metricEnable>elementTimer</metricEnable>
+			<metricEnable>elementInitalPosition</metricEnable>
 			<metricEnable>elementTracker</metricEnable>
 			<metricEnable>elementFlagListenedTo</metricEnable>
 			<metricEnable>elementFlagMoved</metricEnable>