comparison ape.js @ 16:f2dad7c64e1e

Added comments. Variable name changes to match specification document during ape.js loading.
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Tue, 07 Apr 2015 11:32:46 +0100
parents 94e080247b11
children a87846fba882 375410a5571d
comparison
equal deleted inserted replaced
15:94e080247b11 16:f2dad7c64e1e
6 // Once this is loaded and parsed, begin execution 6 // Once this is loaded and parsed, begin execution
7 loadInterface(projectXML); 7 loadInterface(projectXML);
8 8
9 function loadInterface(xmlDoc) { 9 function loadInterface(xmlDoc) {
10 10
11 // Get the dimensions of the screen available to the page
11 var width = window.innerWidth; 12 var width = window.innerWidth;
12 var height = window.innerHeight; 13 var height = window.innerHeight;
13 14
14 // Set background to grey #ddd 15 // Set background to grey #ddd
15 document.getElementsByTagName('body')[0].style.backgroundColor = '#ddd'; 16 document.getElementsByTagName('body')[0].style.backgroundColor = '#ddd';
52 downloadPoint.id = 'download-point'; 53 downloadPoint.id = 'download-point';
53 54
54 // Create playback start/stop points 55 // Create playback start/stop points
55 var playback = document.createElement("button"); 56 var playback = document.createElement("button");
56 playback.innerText = 'Start'; 57 playback.innerText = 'Start';
58 // onclick function. Check if it is playing or not, call the correct function in the
59 // audioEngine, change the button text to reflect the next state.
57 playback.onclick = function() { 60 playback.onclick = function() {
58 if (audioEngineContext.status == 0) { 61 if (audioEngineContext.status == 0) {
59 audioEngineContext.play(); 62 audioEngineContext.play();
60 this.innerText = 'Stop'; 63 this.innerText = 'Stop';
61 } else { 64 } else {
62 audioEngineContext.stop(); 65 audioEngineContext.stop();
63 this.innerText = 'Start'; 66 this.innerText = 'Start';
64 } 67 }
65 } 68 };
66 // Create Submit (save) button 69 // Create Submit (save) button
67 var submit = document.createElement("button"); 70 var submit = document.createElement("button");
68 submit.innerText = 'Submit'; 71 submit.innerText = 'Submit';
69 submit.onclick = function() { 72 submit.onclick = function() {
70 // TODO: Update this for postTest tags 73 // TODO: Update this for postTest tags
71 createProjectSave(projectReturn) 74 createProjectSave(projectReturn)
72 } 75 };
73 76 // Append the interface buttons into the interfaceButtons object.
74 interfaceButtons.appendChild(playback); 77 interfaceButtons.appendChild(playback);
75 interfaceButtons.appendChild(submit); 78 interfaceButtons.appendChild(submit);
76 interfaceButtons.appendChild(downloadPoint); 79 interfaceButtons.appendChild(downloadPoint);
77 80
78 // Now create the slider and HTML5 canvas boxes 81 // Now create the slider and HTML5 canvas boxes
79 82
83 // Create the div box to center align
80 var sliderBox = document.createElement('div'); 84 var sliderBox = document.createElement('div');
81 sliderBox.className = 'sliderCanvasDiv'; 85 sliderBox.className = 'sliderCanvasDiv';
82 sliderBox.id = 'sliderCanvasHolder'; // create an id so we can easily link to it later 86 sliderBox.id = 'sliderCanvasHolder';
83 sliderBox.align = 'center'; 87 sliderBox.align = 'center';
84 88
89 // Create the slider box to hold the slider elements
85 var canvas = document.createElement('div'); 90 var canvas = document.createElement('div');
86 canvas.id = 'slider'; 91 canvas.id = 'slider';
92 // Must have a known EXACT width, as this is used later to determine the ratings
87 canvas.style.width = width - 100 +"px"; 93 canvas.style.width = width - 100 +"px";
88 canvas.style.height = 150 + "px"; 94 canvas.style.height = 150 + "px";
89 canvas.style.marginBottom = "25px" 95 canvas.style.marginBottom = "25px";
90 canvas.style.backgroundColor = '#eee'; 96 canvas.style.backgroundColor = '#eee';
91 canvas.align = "left"; 97 canvas.align = "left";
92 sliderBox.appendChild(canvas); 98 sliderBox.appendChild(canvas);
93 99
100 // Global parent for the comment boxes on the page
94 var feedbackHolder = document.createElement('div'); 101 var feedbackHolder = document.createElement('div');
95 102 // Find the parent audioHolder object.
96 var tracks = xmlDoc.find('audioHolder'); 103 var audioHolder = xmlDoc.find('audioHolder');
97 tracks = tracks[0]; 104 audioHolder = audioHolder[0]; // Remove from one field array
98 var hostURL = tracks.attributes['hostURL']; 105 // Extract the hostURL attribute. If not set, create an empty string.
106 var hostURL = audioHolder.attributes['hostURL'];
99 if (hostURL == undefined) { 107 if (hostURL == undefined) {
100 hostURL = ""; 108 hostURL = "";
101 } else { 109 } else {
102 hostURL = hostURL.value; 110 hostURL = hostURL.value;
103 } 111 }
104 112 // Extract the sampleRate. If set, convert the string to a Number.
105 var hostFs = tracks.attributes['sampleRate']; 113 var hostFs = audioHolder.attributes['sampleRate'];
106 if (hostFs != undefined) { 114 if (hostFs != undefined) {
107 hostFs = Number(hostFs.value); 115 hostFs = Number(hostFs.value);
108 } 116 }
109 117
110 /// CHECK FOR SAMPLE RATE COMPATIBILITY 118 /// CHECK FOR SAMPLE RATE COMPATIBILITY
113 var errStr = 'Sample rates do not match! Requested '+Number(hostFs)+', got '+audioContext.sampleRate+'. Please set the sample rate to match before completing this test.'; 121 var errStr = 'Sample rates do not match! Requested '+Number(hostFs)+', got '+audioContext.sampleRate+'. Please set the sample rate to match before completing this test.';
114 alert(errStr); 122 alert(errStr);
115 return; 123 return;
116 } 124 }
117 } 125 }
118 126 // Find all the audioElements from the audioHolder
119 var tracksXML = xmlDoc.find('audioElements'); 127 var audioElements = $(audioHolder).find('audioElements');
120 tracksXML.each(function(index,element){ 128 audioElements.each(function(index,element){
121 // Find URL of track 129 // Find URL of track
130 // In this jQuery loop, variable 'this' holds the current audioElement.
131
132 // Now load each audio sample. First create the new track by passing the full URL
122 var trackURL = hostURL + this.attributes['url'].value; 133 var trackURL = hostURL + this.attributes['url'].value;
123 // Now load each track in
124 audioEngineContext.newTrack(trackURL); 134 audioEngineContext.newTrack(trackURL);
125 var trackObj = document.createElement('div'); 135 // Create document objects to hold the comment boxes
126 var trackTitle = document.createElement('span'); 136 var trackComment = document.createElement('div');
127 trackTitle.innerText = 'Comment on track '+index; 137 // Create a string next to each comment asking for a comment
128 var trackComment = document.createElement('textarea'); 138 var trackString = document.createElement('span');
129 trackComment.rows = '4'; 139 trackString.innerText = 'Comment on track '+index;
130 trackComment.cols = '100'; 140 // Create the HTML5 comment box 'textarea'
131 trackComment.name = 'trackComment'+index; 141 var trackCommentBox = document.createElement('textarea');
132 trackComment.className = 'trackComment'; 142 trackCommentBox.rows = '4';
133 trackObj.appendChild(trackTitle); 143 trackCommentBox.cols = '100';
134 trackObj.appendChild(trackComment); 144 trackCommentBox.name = 'trackComment'+index;
135 feedbackHolder.appendChild(trackObj); 145 trackCommentBox.className = 'trackComment';
146 // Add to the holder.
147 trackComment.appendChild(trackString);
148 trackComment.appendChild(trackCommentBox);
149 feedbackHolder.appendChild(trackComment);
150
136 // Create a slider per track 151 // Create a slider per track
137 152
138 var trackSliderObj = document.createElement('div'); 153 var trackSliderObj = document.createElement('div');
139 trackSliderObj.className = 'track-slider'; 154 trackSliderObj.className = 'track-slider';
140 trackSliderObj.id = 'track-slider-'+index; 155 trackSliderObj.id = 'track-slider-'+index;