comparison ape.js @ 1048:7a8fcf04aad3

Merge
author Brecht De Man <BrechtDeMan@users.noreply.github.com>
date Mon, 29 Jun 2015 19:04:40 +0100
parents 8ab5f8969856 e74327737152
children b7fd0296c6ab
comparison
equal deleted inserted replaced
885:ba83143187d6 1048:7a8fcf04aad3
145 } 145 }
146 } 146 }
147 return state; 147 return state;
148 }; 148 };
149 149
150 Interface.prototype.checkScaleRange = function()
151 {
152 var audioObjs = audioEngineContext.audioObjects;
153 var audioHolder = testState.stateMap[testState.stateIndex];
154 var interfaces = audioHolder.interfaces;
155
156 var minRanking = audioObjs[0].interfaceDOM.getValue();
157 var maxRanking = minRanking;
158
159 var minScale;
160 var maxScale;
161 for (var i=0; i<interfaces[0].options.length; i++)
162 {
163 if (interfaces[0].options[i].check == "scalerange") {
164 minScale = interfaces[0].options[i].min;
165 maxScale = interfaces[0].options[i].max;
166 }
167 }
168
169 for (var i=1; i<audioObjs.length; i++){
170 if (audioObjs[i].specification.type != 'outsidereference') {
171 var ranking = audioObjs[i].interfaceDOM.getValue();
172 if (ranking < minRanking) { minRanking = ranking;}
173 if (ranking > maxRanking) { maxRanking = ranking;}
174 }
175 }
176 if (minRanking > minScale || maxRanking < maxScale) {
177 alert('Please use the full width of the scale');
178 return false;
179 } else {
180 return true;
181 }
182 };
183
150 // Bindings for audioObjects 184 // Bindings for audioObjects
151 185
152 // Create the top div for the Title element 186 // Create the top div for the Title element
153 var titleAttr = specification.title; 187 var titleAttr = specification.title;
154 var title = document.createElement('div'); 188 var title = document.createElement('div');
262 var feedbackHolder = document.getElementById('feedbackHolder'); 296 var feedbackHolder = document.getElementById('feedbackHolder');
263 var canvas = document.getElementById('slider'); 297 var canvas = document.getElementById('slider');
264 feedbackHolder.innerHTML = null; 298 feedbackHolder.innerHTML = null;
265 canvas.innerHTML = null; 299 canvas.innerHTML = null;
266 300
267 //var playbackHolder = document.createElement('div'); 301 var playbackHolder = document.createElement('div');
268 //playbackHolder.style.width = "100%"; 302 playbackHolder.style.width = "100%";
269 //playbackHolder.align = 'center'; 303 playbackHolder.align = 'center';
270 //playbackHolder.appendChild(interfaceContext.playhead.object); 304 playbackHolder.appendChild(interfaceContext.playhead.object);
271 //feedbackHolder.appendChild(playbackHolder); 305 feedbackHolder.appendChild(playbackHolder);
272 // Setup question title 306 // Setup question title
273 var interfaceObj = audioHolderObject.interfaces; 307 var interfaceObj = audioHolderObject.interfaces;
274 var commentBoxPrefix = "Comment on track"; 308 var commentBoxPrefix = "Comment on track";
275 if (interfaceObj.length != 0) { 309 if (interfaceObj.length != 0) {
276 interfaceObj = interfaceObj[0]; 310 interfaceObj = interfaceObj[0];
321 355
322 currentTestHolder = document.createElement('audioHolder'); 356 currentTestHolder = document.createElement('audioHolder');
323 currentTestHolder.id = audioHolderObject.id; 357 currentTestHolder.id = audioHolderObject.id;
324 currentTestHolder.repeatCount = audioHolderObject.repeatCount; 358 currentTestHolder.repeatCount = audioHolderObject.repeatCount;
325 359
326 var randomise = audioHolderObject.randomiseOrder;
327
328 var audioElements = audioHolderObject.audioElements;
329 currentTrackOrder = [];
330 if (randomise) {
331 audioHolderObject.audioElements = randomiseOrder(audioHolderObject.audioElements);
332 }
333
334 // Delete any previous audioObjects associated with the audioEngine 360 // Delete any previous audioObjects associated with the audioEngine
335 audioEngineContext.audioObjects = []; 361 audioEngineContext.audioObjects = [];
336 interfaceContext.deleteCommentBoxes(); 362 interfaceContext.deleteCommentBoxes();
337 interfaceContext.deleteCommentQuestions(); 363 interfaceContext.deleteCommentQuestions();
338 364
366 392
367 $(audioHolderObject.commentQuestions).each(function(index,element) { 393 $(audioHolderObject.commentQuestions).each(function(index,element) {
368 var node = interfaceContext.createCommentQuestion(element); 394 var node = interfaceContext.createCommentQuestion(element);
369 feedbackHolder.appendChild(node.holder); 395 feedbackHolder.appendChild(node.holder);
370 }); 396 });
397
398 // Construct outside reference;
399 if (audioHolderObject.outsideReference != null) {
400 var outsideReferenceHolder = document.createElement('div');
401 outsideReferenceHolder.id = 'outside-reference';
402 outsideReferenceHolderspan = document.createElement('span');
403 outsideReferenceHolderspan.textContent = 'Reference';
404 outsideReferenceHolder.appendChild(outsideReferenceHolderspan);
405
406 var audioObject = audioEngineContext.newTrack(audioHolderObject.outsideReference);
407
408 outsideReferenceHolder.onclick = function()
409 {
410 audioEngineContext.play(audioEngineContext.audioObjects.length-1);
411 $('.track-slider').removeClass('track-slider-playing');
412 $('.comment-div').removeClass('comment-box-playing');
413 if (event.srcElement.nodeName == 'DIV') {
414 $(event.srcElement).addClass('track-slider-playing');
415 } else {
416 $(event.srcElement.parentElement).addClass('track-slider-playing');
417 }
418 };
419
420 document.getElementById('interface-buttons').appendChild(outsideReferenceHolder);
421 }
371 422
372 423
373 testWaitIndicator(); 424 testWaitIndicator();
374 } 425 }
375 426
406 //document.getElementById('track-slider-'+index).style.backgroundColor = "#FF0000"; 457 //document.getElementById('track-slider-'+index).style.backgroundColor = "#FF0000";
407 $('.track-slider').removeClass('track-slider-playing'); 458 $('.track-slider').removeClass('track-slider-playing');
408 $(element).addClass('track-slider-playing'); 459 $(element).addClass('track-slider-playing');
409 $('.comment-div').removeClass('comment-box-playing'); 460 $('.comment-div').removeClass('comment-box-playing');
410 $('#comment-div-'+id).addClass('comment-box-playing'); 461 $('#comment-div-'+id).addClass('comment-box-playing');
462 var outsideReference = document.getElementById('outside-reference');
463 if (outsideReference != undefined)
464 $(outsideReference).removeClass('track-slider-playing');
411 } 465 }
412 }; 466 };
413 467
414 this.exportXMLDOM = function(audioObject) { 468 this.exportXMLDOM = function(audioObject) {
415 // Called by the audioObject holding this element. Must be present 469 // Called by the audioObject holding this element. Must be present
443 audioEngineContext.audioObjects[id].metric.moved(time,convSliderPosToRate(ev.srcElement)); 497 audioEngineContext.audioObjects[id].metric.moved(time,convSliderPosToRate(ev.srcElement));
444 } 498 }
445 499
446 function buttonSubmitClick() // TODO: Only when all songs have been played! 500 function buttonSubmitClick() // TODO: Only when all songs have been played!
447 { 501 {
448 var checks = specification.commonInterface.options; 502 var checks = testState.currentStateMap[testState.currentIndex].interfaces[0].options;
449 var canContinue = true; 503 var canContinue = true;
450 504
451 // Check that the anchor and reference objects are correctly placed 505 // Check that the anchor and reference objects are correctly placed
452 var audioObjs = audioEngineContext.audioObjects; 506 if (interfaceContext.checkHiddenAnchor() == false) {return;}
453 var audioHolder = testState.stateMap[testState.stateIndex]; 507 if (interfaceContext.checkHiddenReference() == false) {return;}
454 var anchorId = null;
455 var referenceId = null;
456 for (var i=0; i<audioObjs.length; i++) {
457 if (audioObjs[i].specification.anchor == true && anchorId == null) {anchorId = i;}
458 if (audioObjs[i].specification.reference == true && referenceId == null) {referenceId = i;}
459 }
460 if (anchorId != null) {
461 if (audioObjs[anchorId].specification.marker != null) {
462 if (audioObjs[anchorId].interfaceDOM.getValue() > audioObjs[anchorId].specification.marker)
463 {
464 // Anchor is not set below
465 console.log('Anchor node not below marker value');
466 alert('Please keep listening');
467 return;
468 }
469 } else {
470 // No marker value given, ensure it is the minimum value
471 var anchorVal = audioObjs[anchorId].interfaceDOM.getValue();
472 for (var i=0; i<audioObjs.length; i++) {
473 if (i != anchorId) {
474 if (anchorVal > audioObjs[i].interfaceDOM.getValue()) {
475 // Anchor not the minimum
476 console.log('No marker set, anchor node not the minimum');
477 alert('Please keep listening');
478 return;
479 }
480 }
481 }
482 }
483 }
484 if (referenceId != null) {
485 if (audioObjs[referenceId].specification.marker != null) {
486 if (audioObjs[referenceId].interfaceDOM.getValue() < audioObjs[referenceId].specification.marker)
487 {
488 // Anchor is not set below
489 console.log('Reference node not above marker value');
490 alert('Please keep listening');
491 return;
492 }
493 } else {
494 // No marker value given, ensure it is the minimum value
495 var referenceVal = audioObjs[referenceId].interfaceDOM.getValue();
496 for (var i=0; i<audioObjs.length; i++) {
497 if (i != referenceId) {
498 if (referenceVal > audioObjs[i].interfaceDOM.getValue()) {
499 // Anchor not the minimum
500 console.log('No marker set, reference node not the maximum');
501 alert('Please keep listening');
502 return;
503 }
504 }
505 }
506 }
507 }
508 508
509 for (var i=0; i<checks.length; i++) { 509 for (var i=0; i<checks.length; i++) {
510 if (checks[i].type == 'check') 510 if (checks[i].type == 'check')
511 { 511 {
512 switch(checks[i].check) { 512 switch(checks[i].check) {
529 case 'fragmentComments': 529 case 'fragmentComments':
530 // Check all fragment sliders have been moved. 530 // Check all fragment sliders have been moved.
531 var checkState = interfaceContext.checkAllCommented(); 531 var checkState = interfaceContext.checkAllCommented();
532 if (checkState == false) {canContinue = false;} 532 if (checkState == false) {canContinue = false;}
533 break; 533 break;
534 } 534 case 'scalerange':
535 535 // Check the scale is used to its full width outlined by the node
536 } 536 var checkState = interfaceContext.checkScaleRange();
537 if (checkState == false) {canContinue = false;}
538 break;
539 }
540
541 }
542 if (!canContinue) {break;}
537 } 543 }
538 544
539 if (canContinue) { 545 if (canContinue) {
540 if (audioEngineContext.status == 1) { 546 if (audioEngineContext.status == 1) {
541 var playback = document.getElementById('playback-button'); 547 var playback = document.getElementById('playback-button');
616 xmlDoc.appendChild(metric); 622 xmlDoc.appendChild(metric);
617 var audioObjects = audioEngineContext.audioObjects; 623 var audioObjects = audioEngineContext.audioObjects;
618 for (var i=0; i<audioObjects.length; i++) 624 for (var i=0; i<audioObjects.length; i++)
619 { 625 {
620 var audioElement = audioEngineContext.audioObjects[i].exportXMLDOM(); 626 var audioElement = audioEngineContext.audioObjects[i].exportXMLDOM();
627 audioElement.setAttribute('presentedId',i);
621 xmlDoc.appendChild(audioElement); 628 xmlDoc.appendChild(audioElement);
622 } 629 }
623 630
624 $(interfaceContext.commentQuestions).each(function(index,element){ 631 $(interfaceContext.commentQuestions).each(function(index,element){
625 var node = element.exportXMLDOM(); 632 var node = element.exportXMLDOM();