comparison ape.js @ 453:44a6fe06e71a Dev_main

--UNSTABLE-- Major revision. Updated Specification including verification. Added storage collector for XML results. Popup more stable.
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Wed, 06 Jan 2016 10:36:37 +0000
parents 4866152611e6
children c251206bdddf
comparison
equal deleted inserted replaced
452:22ec1cf1986e 453:44a6fe06e71a
335 $(audioHolderObject.audioElements).each(function(index,element){ 335 $(audioHolderObject.audioElements).each(function(index,element){
336 // Find URL of track 336 // Find URL of track
337 // In this jQuery loop, variable 'this' holds the current audioElement. 337 // In this jQuery loop, variable 'this' holds the current audioElement.
338 338
339 // Check if an outside reference 339 // Check if an outside reference
340 if (index == audioHolderObject.outsideReference) 340 if (element.type == 'outside-reference')
341 { 341 {
342 // Construct outside reference;
343 var outsideReferenceHolder = document.createElement('div');
344 outsideReferenceHolder.id = 'outside-reference';
345 outsideReferenceHolder.className = 'outside-reference';
346 outsideReferenceHolderspan = document.createElement('span');
347 outsideReferenceHolderspan.textContent = 'Reference';
348 outsideReferenceHolder.appendChild(outsideReferenceHolderspan);
349
350 var audioObject = audioEngineContext.newTrack(element);
351
352 outsideReferenceHolder.onclick = function(event)
353 {
354 audioEngineContext.play(audioEngineContext.audioObjects.length-1);
355 $('.track-slider').removeClass('track-slider-playing');
356 $('.comment-div').removeClass('comment-box-playing');
357 if (event.currentTarget.nodeName == 'DIV') {
358 $(event.currentTarget).addClass('track-slider-playing');
359 } else {
360 $(event.currentTarget.parentElement).addClass('track-slider-playing');
361 }
362 };
363
364 document.getElementById('interface-buttons').appendChild(outsideReferenceHolder);
342 return; 365 return;
343 } 366 }
344 367
345 // Now load each audio sample. First create the new track by passing the full URL 368 // Now load each audio sample. First create the new track by passing the full URL
346 var trackURL = audioHolderObject.hostURL + element.url; 369 var trackURL = audioHolderObject.hostURL + element.url;
347 var audioObject = audioEngineContext.newTrack(element); 370 var audioObject = audioEngineContext.newTrack(element);
348 371
349 var node = interfaceContext.createCommentBox(audioObject); 372 var node = interfaceContext.createCommentBox(audioObject);
350
351 // Create a slider per track 373 // Create a slider per track
352 audioObject.interfaceDOM = new sliderObject(audioObject,interfaceObj); 374 audioObject.interfaceDOM = new sliderObject(audioObject,interfaceObj);
353 audioObject.metric.initialPosition = convSliderPosToRate(audioObject.interfaceDOM.trackSliderObjects[0]); 375 audioObject.metric.initialise(convSliderPosToRate(audioObject.interfaceDOM.trackSliderObjects[0]));
354 if (audioObject.state == 1) 376 if (audioObject.state == 1)
355 { 377 {
356 audioObject.interfaceDOM.enable(); 378 audioObject.interfaceDOM.enable();
357 } 379 }
358 380
435 } 457 }
436 interfaceContext.releaseObject(); 458 interfaceContext.releaseObject();
437 }); 459 });
438 460
439 461
440 if (commentShow) { 462 if (audioHolderObject.showElementComments) {
441 interfaceContext.showCommentBoxes(feedbackHolder,true); 463 interfaceContext.showCommentBoxes(feedbackHolder,true);
442 } 464 }
443 465
444 $(audioHolderObject.commentQuestions).each(function(index,element) { 466 $(audioHolderObject.commentQuestions).each(function(index,element) {
445 var node = interfaceContext.createCommentQuestion(element); 467 var node = interfaceContext.createCommentQuestion(element);
446 feedbackHolder.appendChild(node.holder); 468 feedbackHolder.appendChild(node.holder);
447 }); 469 });
448
449 // Construct outside reference;
450 if (audioHolderObject.outsideReference != null) {
451 var outsideReferenceHolder = document.createElement('div');
452 outsideReferenceHolder.id = 'outside-reference';
453 outsideReferenceHolder.className = 'outside-reference';
454 outsideReferenceHolderspan = document.createElement('span');
455 outsideReferenceHolderspan.textContent = 'Reference';
456 outsideReferenceHolder.appendChild(outsideReferenceHolderspan);
457
458 var audioObject = audioEngineContext.newTrack(audioHolderObject.audioElements[audioHolderObject.outsideReference]);
459
460 outsideReferenceHolder.onclick = function(event)
461 {
462 audioEngineContext.play(audioEngineContext.audioObjects.length-1);
463 $('.track-slider').removeClass('track-slider-playing');
464 $('.comment-div').removeClass('comment-box-playing');
465 if (event.currentTarget.nodeName == 'DIV') {
466 $(event.currentTarget).addClass('track-slider-playing');
467 } else {
468 $(event.currentTarget.parentElement).addClass('track-slider-playing');
469 }
470 };
471
472 document.getElementById('interface-buttons').appendChild(outsideReferenceHolder);
473 }
474 470
475 471
476 //testWaitIndicator(); 472 //testWaitIndicator();
477 } 473 }
478 474
531 this.scale.id = 'sliderScaleHolder-'+this.id; 527 this.scale.id = 'sliderScaleHolder-'+this.id;
532 this.scale.align = 'left'; 528 this.scale.align = 'left';
533 this.sliderDOM.appendChild(this.scale); 529 this.sliderDOM.appendChild(this.scale);
534 var positionScale = this.canvas.style.width.substr(0,this.canvas.style.width.length-2); 530 var positionScale = this.canvas.style.width.substr(0,this.canvas.style.width.length-2);
535 var offset = Number(this.canvas.attributes['marginsize'].value); 531 var offset = Number(this.canvas.attributes['marginsize'].value);
536 for (var index=0; index<interfaceObject.scale.length; index++) 532 for (var scaleObj of interfaceObject.scales)
537 { 533 {
538 var scaleObj = interfaceObject.scale[index];
539 var value = document.createAttribute('value'); 534 var value = document.createAttribute('value');
540 var position = Number(scaleObj[0])*0.01; 535 var position = Number(scaleObj.position)*0.01;
541 value.nodeValue = position; 536 value.nodeValue = position;
542 var pixelPosition = (position*positionScale)+offset; 537 var pixelPosition = (position*positionScale)+offset;
543 var scaleDOM = document.createElement('span'); 538 var scaleDOM = document.createElement('span');
544 scaleDOM.textContent = scaleObj[1]; 539 scaleDOM.textContent = scaleObj.text;
545 this.scale.appendChild(scaleDOM); 540 this.scale.appendChild(scaleDOM);
546 scaleDOM.style.left = Math.floor((pixelPosition-($(scaleDOM).width()/2)))+'px'; 541 scaleDOM.style.left = Math.floor((pixelPosition-($(scaleDOM).width()/2)))+'px';
547 scaleDOM.setAttributeNode(value); 542 scaleDOM.setAttributeNode(value);
548 } 543 }
549 544
650 }); 645 });
651 646
652 return obj; 647 return obj;
653 }; 648 };
654 this.getValue = function() { 649 this.getValue = function() {
655 return convSliderPosToRate(this.trackSliderObj); 650 return convSliderPosToRate(this.trackSliderObjects[0]);
656 }; 651 };
657 } 652 }
658 653
659 function buttonSubmitClick() 654 function buttonSubmitClick()
660 { 655 {
661 var checks = testState.currentStateMap[testState.currentIndex].interfaces[0].options; 656 var checks = [];
657 checks.concat(testState.currentStateMap.interfaces[0].options);
658 checks.concat(specification.interfaces.options);
662 var canContinue = true; 659 var canContinue = true;
663 660
664 // Check that the anchor and reference objects are correctly placed 661 // Check that the anchor and reference objects are correctly placed
665 if (interfaceContext.checkHiddenAnchor() == false) {return;} 662 if (interfaceContext.checkHiddenAnchor() == false) {return;}
666 if (interfaceContext.checkHiddenReference() == false) {return;} 663 if (interfaceContext.checkHiddenReference() == false) {return;}
741 { 738 {
742 interfaceContext.interfaceSliders[i].resize(event); 739 interfaceContext.interfaceSliders[i].resize(event);
743 } 740 }
744 } 741 }
745 742
746 function pageXMLSave(store, testXML) 743 function pageXMLSave(store, pageSpecification)
747 { 744 {
748 // MANDATORY 745 // MANDATORY
749 // Saves a specific test page 746 // Saves a specific test page
750 // You can use this space to add any extra nodes to your XML <audioHolder> saves 747 // You can use this space to add any extra nodes to your XML <audioHolder> saves
751 // Get the current <audioHolder> information in store (remember to appendChild your data to it) 748 // Get the current <page> information in store (remember to appendChild your data to it)
749 // pageSpecification is the current page node configuration
750 // To create new XML nodes, use storage.document.createElement();
751
752 if (interfaceContext.interfaceSliders.length == 1) 752 if (interfaceContext.interfaceSliders.length == 1)
753 { 753 {
754 // If there is only one axis, there only needs to be one metric return 754 // If there is only one axis, there only needs to be one metric return
755 return; 755 return;
756 } 756 }
757 var audioelements = store.getElementsByTagName("audioelement"); 757 var audioelements = store.getElementsByTagName("audioelement");
758 for (var i=0; i<audioelements.length; i++) 758 for (var i=0; i<audioelements.length; i++)
759 { 759 {
760 // Have to append the metric specific nodes 760 // Have to append the metric specific nodes
761 if (testXML.outsideReference == null || testXML.outsideReference.id != audioelements[i].id) 761 if (pageSpecification.outsideReference == null || pageSpecification.outsideReference.id != audioelements[i].id)
762 { 762 {
763 var inject = audioelements[i].getElementsByTagName("metric"); 763 var inject = audioelements[i].getElementsByTagName("metric");
764 if (inject.length == 0) 764 if (inject.length == 0)
765 { 765 {
766 inject = document.createElement("metric"); 766 inject = storage.document.createElement("metric");
767 } else { 767 } else {
768 inject = inject[0]; 768 inject = inject[0];
769 } 769 }
770 for (var k=0; k<interfaceContext.interfaceSliders.length; k++) 770 for (var k=0; k<interfaceContext.interfaceSliders.length; k++)
771 { 771 {
772 var node = interfaceContext.interfaceSliders[k].metrics[i].exportXMLDOM(); 772 var mrnodes = interfaceContext.interfaceSliders[k].metrics[i].exportXMLDOM(inject);
773 var mrnodes = node.getElementsByTagName("metricresult");
774 for (var j=0; j<mrnodes.length; j++) 773 for (var j=0; j<mrnodes.length; j++)
775 { 774 {
776 var name = mrnodes[j].getAttribute("name"); 775 var name = mrnodes[j].getAttribute("name");
777 if (name == "elementTracker" || name == "elementTrackerFull" || name == "elementInitialPosition" || name == "elementFlagMoved") 776 if (name == "elementTracker" || name == "elementTrackerFull" || name == "elementInitialPosition" || name == "elementFlagMoved")
778 { 777 {