Mercurial > hg > webaudioevaluationtool
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 { |