diff ape.js @ 371:ad267c5e32ae

Merge of dev into default/master
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Fri, 04 Dec 2015 11:00:55 +0000
parents ed22a47dcacd
children 81246d594793
line wrap: on
line diff
--- a/ape.js	Fri Dec 04 10:57:39 2015 +0000
+++ b/ape.js	Fri Dec 04 11:00:55 2015 +0000
@@ -7,6 +7,8 @@
 // Once this is loaded and parsed, begin execution
 loadInterface();
 
+var clicking = -1;
+
 function loadInterface() {
 	
 	// Get the dimensions of the screen available to the page
@@ -174,6 +176,37 @@
 		}
 	};
 	
+	Interface.prototype.objectSelected = null;
+	Interface.prototype.objectMoved = false;
+	Interface.prototype.selectObject = function(object)
+	{
+		if (this.objectSelected == null)
+		{
+			this.objectSelected = object;
+			this.objectMoved = false;
+		}
+	};
+	Interface.prototype.moveObject = function()
+	{
+		if (this.objectMoved == false)
+		{
+			this.objectMoved = true;
+		}
+	};
+	Interface.prototype.releaseObject = function()
+	{
+		this.objectSelected = null;
+		this.objectMoved = false;
+	};
+	Interface.prototype.getSelectedObject = function()
+	{
+		return this.objectSelected;
+	};
+	Interface.prototype.hasSelectedObjectMoved = function()
+	{
+		return this.objectMoved;
+	};
+	
 	// Bindings for audioObjects
 	
 	// Create the top div for the Title element
@@ -368,9 +401,6 @@
 
 	audioEngineContext.loopPlayback = loopPlayback;
 	// Create AudioEngine bindings for playback
-	audioEngineContext.selectedTrack = function(id) {
-		console.log('Deprecated');
-	};
 	
 	currentTestHolder = document.createElement('audioHolder');
 	currentTestHolder.id = audioHolderObject.id;
@@ -405,6 +435,54 @@
 		audioObject.metric.initialised(convSliderPosToRate(audioObject.interfaceDOM.trackSliderObj));
         
 	});
+	
+	$('.track-slider').mousedown(function(event) {
+		interfaceContext.selectObject($(this)[0]);
+	});
+	
+	$('.track-slider').mousemove(function(event) {
+		event.preventDefault();
+	});
+	
+	$('#slider').mousemove(function(event) {
+		event.preventDefault();
+		var obj = interfaceContext.getSelectedObject();
+		if (obj == null) {return;}
+		$(obj).css("left",event.clientX + "px");
+		interfaceContext.moveObject();
+	});
+
+	$(document).mouseup(function(event){
+		event.preventDefault();
+		var obj = interfaceContext.getSelectedObject();
+		if (obj == null) {return;}
+		if (interfaceContext.hasSelectedObjectMoved() == true)
+		{
+			var l = $(obj).css("left");
+			var id = obj.getAttribute('trackIndex');
+			var time = audioEngineContext.timer.getTestTime();
+			var rate = convSliderPosToRate(obj);
+			audioEngineContext.audioObjects[id].metric.moved(time,rate);
+			console.log("slider "+id+" moved to "+rate+' ('+time+')');
+		} else {
+			var id = Number(obj.attributes['trackIndex'].value);
+			//audioEngineContext.metric.sliderPlayed(id);
+			audioEngineContext.play(id);
+	        // Currently playing track red, rest green
+	        
+	        //document.getElementById('track-slider-'+index).style.backgroundColor = "#FF0000";
+	        $('.track-slider').removeClass('track-slider-playing');
+	        $(obj).addClass('track-slider-playing');
+	        $('.comment-div').removeClass('comment-box-playing');
+	        $('#comment-div-'+id).addClass('comment-box-playing');
+	        var outsideReference = document.getElementById('outside-reference');
+	        if (outsideReference != undefined)
+	        $(outsideReference).removeClass('track-slider-playing');
+		}
+		interfaceContext.releaseObject();
+	});
+	
+	
 	if (commentShow) {
 		interfaceContext.showCommentBoxes(feedbackHolder,true);
 	}
@@ -452,43 +530,8 @@
 
 	this.trackSliderObj.setAttribute('trackIndex',audioObject.id);
 	this.trackSliderObj.innerHTML = '<span>'+audioObject.id+'</span>';
-	this.trackSliderObj.draggable = true;
-	this.trackSliderObj.ondragend = dragEnd;
-	
-	this.trackSliderObj.ondragstart = function(event){
-		event.dataTransfer.setData('Text',null);
-	};
-	
-	this.trackSliderObj.ondrop = function(event)
-	{
-		if(event.stopPropagation) {event.stopPropagation();}
-		return false;
-	};
 
 	// Onclick, switch playback to that track
-	this.trackSliderObj.onclick = function(event) {
-		// Cannot continue to issue play command until audioObjects reported as ready!
-		// Get the track ID from the object ID
-		var element;
-		if (event.currentTarget.nodeName == "SPAN") {
-			element = event.currentTarget.parentNode;
-		} else {
-			element = event.currentTarget;
-		}
-		var id = Number(element.attributes['trackIndex'].value);
-		//audioEngineContext.metric.sliderPlayed(id);
-		audioEngineContext.play(id);
-        // Currently playing track red, rest green
-        
-        //document.getElementById('track-slider-'+index).style.backgroundColor = "#FF0000";
-        $('.track-slider').removeClass('track-slider-playing');
-        $(element).addClass('track-slider-playing');
-        $('.comment-div').removeClass('comment-box-playing');
-        $('#comment-div-'+id).addClass('comment-box-playing');
-        var outsideReference = document.getElementById('outside-reference');
-        if (outsideReference != undefined)
-        $(outsideReference).removeClass('track-slider-playing');
-	};
 	
 	this.enable = function() {
 		if (this.parent.state == 1)
@@ -508,32 +551,6 @@
 	};
 }
 
-function dragEnd(ev) {
-	// Function call when a div has been dropped
-	var slider = document.getElementById('slider');
-	var marginSize = Number(slider.attributes['marginsize'].value);
-	var w = slider.style.width;
-	w = Number(w.substr(0,w.length-2));
-	var x = ev.screenX;
-	
-	x += Math.abs(window.screenX);
-	x = x % window.outerWidth;
-	
-	if (x >= marginSize && x < w+marginSize) {
-		this.style.left = (x)+'px';
-	} else {
-		if (x<marginSize) {
-			this.style.left = marginSize+'px';
-		} else {
-			this.style.left = (w+marginSize) + 'px';
-		}
-	}
-	var time = audioEngineContext.timer.getTestTime();
-	var id = Number(ev.currentTarget.getAttribute('trackindex'));
-	audioEngineContext.audioObjects[id].metric.moved(time,convSliderPosToRate(ev.currentTarget));
-	console.log('slider '+id+' moved to '+convSliderPosToRate(ev.currentTarget)+' ('+time+')');
-}
-
 function buttonSubmitClick()
 {
 	var checks = testState.currentStateMap[testState.currentIndex].interfaces[0].options;
@@ -554,9 +571,8 @@
 				break;
 			case  'fragmentFullPlayback':
 				// Check all fragments have been played to their full length
-				var checkState = interfaceContext.checkAllPlayed();
+				var checkState = interfaceContext.checkFragmentsFullyPlayed();
 				if (checkState == false) {canContinue = false;}
-				console.log('NOTE: fragmentFullPlayback not currently implemented, performing check fragmentPlayed instead');
 				break;
 			case 'fragmentMoved':
 				// Check all fragment sliders have been moved.