changeset 499:841de347591e Dev_main

Merge
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Mon, 01 Feb 2016 10:38:54 +0000
parents 47ab6c962962 (current diff) da8b22838465 (diff)
children ee23bf531ec4
files core.js
diffstat 6 files changed, 74 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/core.js	Mon Feb 01 10:37:28 2016 +0000
+++ b/core.js	Mon Feb 01 10:38:54 2016 +0000
@@ -950,8 +950,14 @@
 		this.xmlRequest = new XMLHttpRequest();
 		this.xmlRequest.parent = this;
 		this.users = [];
+        this.progress = 0;
+        this.status = 0;
 		this.ready = function()
 		{
+            if (this.status >= 2)
+            {
+                this.status = 3;
+            }
 			for (var i=0; i<this.users.length; i++)
 			{
 				this.users[i].state = 1;
@@ -983,6 +989,7 @@
                             buffer_ptr[n] = waveObj.decoded_data[c][n];
                         }
                     }
+                    
                     delete waveObj;
                 } else {
                     audioContext.decodeAudioData(bufferObj.xmlRequest.response, function(decodedData) {
@@ -999,11 +1006,13 @@
                                 console.log('URL: '+audioObj.url);
                                 errorSessionDump('Fragment '+audioObj.id+' 404 error');
                             }
+                            this.status = -1;
                         }
                     });
                 }
                 if (bufferObj.buffer != undefined)
                 {
+                    bufferObj.status = 2;
                     calculateLoudness(bufferObj,"I");
                 }
 			};
@@ -1025,8 +1034,25 @@
 				}
 			};
 			this.xmlRequest.addEventListener("progress", this.progressCallback);
+            this.status = 1;
 			this.xmlRequest.send();
 		};
+        
+        this.registerAudioObject = function(audioObject)
+        {
+            // Called by an audioObject to register to the buffer for use
+            // First check if already in the register pool
+            for (var objects of this.users)
+            {
+                if (audioObject.id == objects.id){return 0;}
+            }
+            this.users.push(audioObject);
+            if (this.status == 3)
+            {
+                // The buffer is already ready, trigger bufferLoaded
+                audioObject.bufferLoaded(this);
+            }
+        }
 	};
 	
 	this.play = function(id) {
@@ -1114,12 +1140,11 @@
 		{
 			console.log("[WARN]: Buffer was not loaded in pre-test! "+URL);
 			buffer = new this.bufferObj();
+            this.buffers.push(buffer);
 			buffer.getMedia(URL);
-			this.buffers.push(buffer);
 		}
 		this.audioObjects[audioObjectId].specification = element;
 		this.audioObjects[audioObjectId].url = URL;
-		buffer.users.push(this.audioObjects[audioObjectId]);
 		// Obtain store node
 		var aeNodes = this.pageStore.XMLDOM.getElementsByTagName('audioelement');
 		for (var i=0; i<aeNodes.length; i++)
@@ -1130,10 +1155,7 @@
 				break;
 			}
 		}
-		if (buffer.buffer.lufs != undefined)
-		{
-			this.audioObjects[audioObjectId].bufferLoaded(buffer);
-		}
+        buffer.registerAudioObject(this.audioObjects[audioObjectId]);
 		return this.audioObjects[audioObjectId];
 	};
 	
@@ -2351,7 +2373,7 @@
 		this.trackComment.id = 'comment-div-'+audioObject.id;
 		// Create a string next to each comment asking for a comment
 		this.trackString = document.createElement('span');
-		this.trackString.innerHTML = audioHolderObject.commentBoxPrefix+' '+audioObject.id;
+		this.trackString.innerHTML = audioHolderObject.commentBoxPrefix+' '+audioObject.interfaceDOM.getPresentedId();
 		// Create the HTML5 comment box 'textarea'
 		this.trackCommentBox = document.createElement('textarea');
 		this.trackCommentBox.rows = '4';
--- a/interfaces/AB.js	Mon Feb 01 10:37:28 2016 +0000
+++ b/interfaces/AB.js	Mon Feb 01 10:38:54 2016 +0000
@@ -150,6 +150,18 @@
 	
 	// Populate the comparitor object
 	interfaceContext.comparitor = new Comparitor(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.createCommentBox(element);
+        }
+        interfaceContext.showCommentBoxes(commentHolder,true);
+    }
 	resizeWindow(null);
 }
 
--- a/interfaces/ape.js	Mon Feb 01 10:37:28 2016 +0000
+++ b/interfaces/ape.js	Mon Feb 01 10:38:54 2016 +0000
@@ -353,10 +353,10 @@
 			var orNode = new outsideReferenceDOM(audioObject,index,document.getElementById('interface-buttons'));
 			audioObject.bindInterface(orNode);
 		} else {
-			var node = interfaceContext.createCommentBox(audioObject);
 			// Create a slider per track
 			var sliderNode = new sliderObject(audioObject,interfaceObj);
 			audioObject.bindInterface(sliderNode);
+            interfaceContext.createCommentBox(audioObject);
 		}
 	});
 	
@@ -377,7 +377,7 @@
 		event.preventDefault();
 		var obj = interfaceContext.getSelectedObject();
 		if (obj == null) {return;}
-		$(obj).css("left",event.clientX + "px");
+		$(obj).css("left",event.clientX-6 + "px");
 		interfaceContext.moveObject();
 	});
 	
@@ -502,25 +502,22 @@
 	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 dest = document.getElementById("slider-holder").appendChild(this.sliderDOM);
 	for (var scaleObj of interfaceObject.scales)
 	{
-		var value = document.createAttribute('value');
 		var position = Number(scaleObj.position)*0.01;
-		value.nodeValue = position;
-		var pixelPosition = (position*positionScale)+offset;
+		var pixelPosition = (position*$(this.canvas).width())+offset;
 		var scaleDOM = document.createElement('span');
 		scaleDOM.textContent = scaleObj.text;
+        scaleDOM.setAttribute('value',position)
 		this.scale.appendChild(scaleDOM);
 		scaleDOM.style.left = Math.floor((pixelPosition-($(scaleDOM).width()/2)))+'px';
-		scaleDOM.setAttributeNode(value);
 	}
 	
-	var dest = document.getElementById("slider-holder");
-	dest.appendChild(this.sliderDOM);
-	
 	this.createSliderObject = function(audioObject)
 	{
 		var trackObj = document.createElement('div');
+        trackObj.align = "center";
 		trackObj.className = 'track-slider track-slider-disabled track-slider-'+audioObject.id;
 		trackObj.id = 'track-slider-'+this.id+'-'+audioObject.id;
 		trackObj.setAttribute('trackIndex',audioObject.id);
--- a/interfaces/discrete.js	Mon Feb 01 10:37:28 2016 +0000
+++ b/interfaces/discrete.js	Mon Feb 01 10:38:54 2016 +0000
@@ -197,17 +197,21 @@
 			var orNode = new outsideReferenceDOM(audioObject,index,document.getElementById('interface-buttons'));
 			audioObject.bindInterface(orNode);
 		} else {
-			var node = interfaceContext.createCommentBox(audioObject);
-		
 			// Create a slider per track
 			var sliderObj = new discreteObject(audioObject,label,interfaceScales);
 			sliderBox.appendChild(sliderObj.holder);
 			audioObject.bindInterface(sliderObj);
+            interfaceContext.createCommentBox(audioObject);
 			label += 1;
 		}
         
 	});
 	
+    if (page.showElementComments)
+    {
+        interfaceContext.showCommentBoxes(feedbackHolder,true);
+    }
+    
 	// Auto-align
 	resizeWindow(null);
 }
@@ -246,6 +250,7 @@
 		var node = document.createElement('input');
 		node.setAttribute('type','radio');
 		node.className = 'track-radio';
+        node.disabled = true;
 		node.setAttribute('position',interfaceScales[i].position);
 		node.setAttribute('name',audioObject.specification.id);
 		node.setAttribute('id',audioObject.specification.id+'-'+String(i));
@@ -297,10 +302,22 @@
 		this.play.disabled = false;
 		this.play.textContent = "Play";
 		$(this.slider).removeClass('track-slider-disabled');
+        for (var radio of this.discretes)
+        {
+            radio.disabled = false;
+        }
 	};
 	this.updateLoading = function(progress)
 	{
 		// progress is a value from 0 to 100 indicating the current download state of media files
+        if (progress != 100)
+        {
+            progress = String(progress);
+            progress = progress.split('.')[0];
+            this.play.textContent = progress+'%';
+        } else {
+            this.play.textContent = "Play";
+        }
 	};
     
     this.startPlayback = function()
@@ -309,6 +326,7 @@
         $(".track-slider").removeClass('track-slider-playing');
 		$(this.holder).addClass('track-slider-playing');
 		var outsideReference = document.getElementById('outside-reference');
+        this.play.textContent = "Listening";
 		if (outsideReference != null) {
 			$(outsideReference).removeClass('track-slider-playing');
 		}
@@ -317,6 +335,7 @@
     {
         // Called by audioObject when playback stops
         $(this.holder).removeClass('track-slider-playing');
+        this.play.textContent = "Play";
     }
     
 	this.getValue = function()
--- a/interfaces/horizontal-sliders.js	Mon Feb 01 10:37:28 2016 +0000
+++ b/interfaces/horizontal-sliders.js	Mon Feb 01 10:38:54 2016 +0000
@@ -197,8 +197,6 @@
 			var orNode = new outsideReferenceDOM(audioObject,index,document.getElementById('interface-buttons'));
 			audioObject.bindInterface(orNode);
 		} else {
-			var node = interfaceContext.createCommentBox(audioObject);
-		
 			// Create a slider per track
 			var sliderObj = new sliderObject(audioObject,label);
 			
@@ -212,11 +210,15 @@
 			}
 			sliderBox.appendChild(sliderObj.holder);
 			audioObject.bindInterface(sliderObj);
+            interfaceContext.createCommentBox(audioObject);
 			label += 1;
 		}
         
 	});
-	
+	if (page.showElementComments)
+    {
+        interfaceContext.showCommentBoxes(feedbackHolder,true);
+    }
 	// Auto-align
 	resizeWindow(null);
 }
--- a/interfaces/mushra.js	Mon Feb 01 10:37:28 2016 +0000
+++ b/interfaces/mushra.js	Mon Feb 01 10:38:54 2016 +0000
@@ -200,8 +200,6 @@
 			var orNode = new outsideReferenceDOM(audioObject,index,document.getElementById('interface-buttons'));
 			audioObject.bindInterface(orNode);
 		} else {
-			var node = interfaceContext.createCommentBox(audioObject);
-		
 			// Create a slider per track
 			var sliderObj = new sliderObject(audioObject,label);
 			
@@ -215,6 +213,7 @@
 			}
 			sliderBox.appendChild(sliderObj.holder);
 			audioObject.bindInterface(sliderObj);
+            interfaceContext.createCommentBox(audioObject);
 			label += 1;
 		}