Mercurial > hg > webaudioevaluationtool
comparison ape.js @ 391:3b97ee830b48 Dev_main
APE: Each slider now a JS object to ease metric tracking. Resize function fixed.
author | Nicholas Jillings <nicholas.jillings@eecs.qmul.ac.uk> |
---|---|
date | Tue, 08 Dec 2015 17:15:34 +0000 |
parents | 5995d8fe96eb |
children | feaa33f28221 |
comparison
equal
deleted
inserted
replaced
387:5995d8fe96eb | 391:3b97ee830b48 |
---|---|
204 Interface.prototype.hasSelectedObjectMoved = function() | 204 Interface.prototype.hasSelectedObjectMoved = function() |
205 { | 205 { |
206 return this.objectMoved; | 206 return this.objectMoved; |
207 }; | 207 }; |
208 | 208 |
209 // Bindings for slider interfaces | |
210 Interface.prototype.interfaceSliders = []; | |
211 | |
209 // Bindings for audioObjects | 212 // Bindings for audioObjects |
210 | 213 |
211 // Create the top div for the Title element | 214 // Create the top div for the Title element |
212 var titleAttr = specification.title; | 215 var titleAttr = specification.title; |
213 var title = document.createElement('div'); | 216 var title = document.createElement('div'); |
279 { | 282 { |
280 var width = window.innerWidth; | 283 var width = window.innerWidth; |
281 var height = window.innerHeight; | 284 var height = window.innerHeight; |
282 var id = audioHolderObject.id; | 285 var id = audioHolderObject.id; |
283 | 286 |
287 interfaceContext.interfaceSliders = []; | |
288 | |
284 var feedbackHolder = document.getElementById('feedbackHolder'); | 289 var feedbackHolder = document.getElementById('feedbackHolder'); |
285 var sliderHolder = document.getElementById('slider-holder'); | 290 var sliderHolder = document.getElementById('slider-holder'); |
286 feedbackHolder.innerHTML = null; | 291 feedbackHolder.innerHTML = null; |
287 sliderHolder.innerHTML = null; | 292 sliderHolder.innerHTML = null; |
288 | 293 |
289 var interfaceObj = audioHolderObject.interfaces; | 294 var interfaceObj = audioHolderObject.interfaces; |
290 for (var k=0; k<interfaceObj.length; k++) { | 295 for (var k=0; k<interfaceObj.length; k++) { |
291 // Create the div box to center align | 296 // Create the div box to center align |
292 var sliderBox = document.createElement('div'); | 297 interfaceContext.interfaceSliders.push(new interfaceSliderHolder(interfaceObj[k])); |
293 sliderBox.className = 'sliderCanvasDiv'; | |
294 sliderBox.id = 'sliderCanvasHolder-'+k; | |
295 | |
296 var pagetitle = document.createElement('div'); | |
297 pagetitle.className = "pageTitle"; | |
298 pagetitle.align = "center"; | |
299 var titleSpan = document.createElement('span'); | |
300 titleSpan.id = "pageTitle-"+k; | |
301 if (interfaceObj[k].title != undefined && typeof interfaceObj[k].title == "string") | |
302 { | |
303 titleSpan.textContent = interfaceObj[k].title; | |
304 } | |
305 pagetitle.appendChild(titleSpan); | |
306 sliderBox.appendChild(pagetitle); | |
307 | |
308 // Create the slider box to hold the slider elements | |
309 var canvas = document.createElement('div'); | |
310 if (interfaceObj[k].name != undefined) | |
311 canvas.id = 'slider-'+interfaceObj[k].name; | |
312 else | |
313 canvas.id = 'slider-'+k; | |
314 canvas.className = 'slider'; | |
315 canvas.align = "left"; | |
316 canvas.addEventListener('dragover',function(event){ | |
317 event.preventDefault(); | |
318 event.dataTransfer.effectAllowed = 'none'; | |
319 event.dataTransfer.dropEffect = 'copy'; | |
320 return false; | |
321 },false); | |
322 var sliderMargin = document.createAttribute('marginsize'); | |
323 sliderMargin.nodeValue = 42; // Set default margins to 42px either side | |
324 // Must have a known EXACT width, as this is used later to determine the ratings | |
325 var w = (Number(sliderMargin.nodeValue)+8)*2; | |
326 canvas.style.width = width - w +"px"; | |
327 canvas.style.marginLeft = sliderMargin.nodeValue +'px'; | |
328 canvas.setAttributeNode(sliderMargin); | |
329 sliderBox.appendChild(canvas); | |
330 | |
331 // Create the div to hold any scale objects | |
332 var scale = document.createElement('div'); | |
333 scale.className = 'sliderScale'; | |
334 scale.id = 'sliderScaleHolder'; | |
335 scale.align = 'left'; | |
336 sliderBox.appendChild(scale); | |
337 sliderHolder.appendChild(sliderBox); | |
338 var positionScale = canvas.style.width.substr(0,canvas.style.width.length-2); | |
339 var offset = Number(canvas.attributes['marginsize'].value); | |
340 $(interfaceObj[k].scale).each(function(index,scaleObj){ | |
341 var value = document.createAttribute('value'); | |
342 var position = Number(scaleObj[0])*0.01; | |
343 value.nodeValue = position; | |
344 var pixelPosition = (position*positionScale)+offset; | |
345 var scaleDOM = document.createElement('span'); | |
346 scaleDOM.textContent = scaleObj[1]; | |
347 scale.appendChild(scaleDOM); | |
348 scaleDOM.style.left = Math.floor((pixelPosition-($(scaleDOM).width()/2)))+'px'; | |
349 scaleDOM.setAttributeNode(value); | |
350 }); | |
351 | |
352 for (var i=0; i<interfaceObj[k].options.length; i++) | 298 for (var i=0; i<interfaceObj[k].options.length; i++) |
353 { | 299 { |
354 if (interfaceObj[k].options[i].type == 'option' && interfaceObj[k].options[i].name == 'playhead') | 300 if (interfaceObj[k].options[i].type == 'option' && interfaceObj[k].options[i].name == 'playhead') |
355 { | 301 { |
356 var playbackHolder = document.getElementById('playback-holder'); | 302 var playbackHolder = document.getElementById('playback-holder'); |
491 | 437 |
492 | 438 |
493 //testWaitIndicator(); | 439 //testWaitIndicator(); |
494 } | 440 } |
495 | 441 |
496 function sliderObject(audioObject,interfaceObjects) { | 442 function interfaceSliderHolder(interfaceObject) |
497 // Create a new slider object; | 443 { |
498 this.parent = audioObject; | 444 this.sliders = []; |
499 this.trackSliderObjects = []; | 445 this.id = document.getElementsByClassName("sliderCanvasDiv").length; |
500 for (var i=0; i<interfaceObjects.length; i++) | 446 this.name = interfaceObject.name; |
447 this.interfaceObject = interfaceObject; | |
448 this.sliderDOM = document.createElement('div'); | |
449 this.sliderDOM.className = 'sliderCanvasDiv'; | |
450 this.sliderDOM.id = 'sliderCanvasHolder-'+this.id; | |
451 | |
452 var pagetitle = document.createElement('div'); | |
453 pagetitle.className = "pageTitle"; | |
454 pagetitle.align = "center"; | |
455 var titleSpan = document.createElement('span'); | |
456 titleSpan.id = "pageTitle-"+this.id; | |
457 if (interfaceObject.title != undefined && typeof interfaceObject.title == "string") | |
458 { | |
459 titleSpan.textContent = interfaceObject.title; | |
460 } | |
461 pagetitle.appendChild(titleSpan); | |
462 this.sliderDOM.appendChild(pagetitle); | |
463 | |
464 // Create the slider box to hold the slider elements | |
465 this.canvas = document.createElement('div'); | |
466 if (this.name != undefined) | |
467 this.canvas.id = 'slider-'+this.name; | |
468 else | |
469 this.canvas.id = 'slider-'+this.id; | |
470 this.canvas.className = 'slider'; | |
471 this.canvas.align = "left"; | |
472 this.canvas.addEventListener('dragover',function(event){ | |
473 event.preventDefault(); | |
474 event.dataTransfer.effectAllowed = 'none'; | |
475 event.dataTransfer.dropEffect = 'copy'; | |
476 return false; | |
477 },false); | |
478 var sliderMargin = document.createAttribute('marginsize'); | |
479 sliderMargin.nodeValue = 42; // Set default margins to 42px either side | |
480 // Must have a known EXACT width, as this is used later to determine the ratings | |
481 var w = (Number(sliderMargin.nodeValue)+8)*2; | |
482 this.canvas.style.width = window.innerWidth - w +"px"; | |
483 this.canvas.style.marginLeft = sliderMargin.nodeValue +'px'; | |
484 this.canvas.setAttributeNode(sliderMargin); | |
485 this.sliderDOM.appendChild(this.canvas); | |
486 | |
487 // Create the div to hold any scale objects | |
488 this.scale = document.createElement('div'); | |
489 this.scale.className = 'sliderScale'; | |
490 this.scale.id = 'sliderScaleHolder-'+this.id; | |
491 this.scale.align = 'left'; | |
492 this.sliderDOM.appendChild(this.scale); | |
493 var positionScale = this.canvas.style.width.substr(0,this.canvas.style.width.length-2); | |
494 var offset = Number(this.canvas.attributes['marginsize'].value); | |
495 for (var index=0; index<interfaceObject.scale.length; index++) | |
496 { | |
497 var scaleObj = interfaceObject.scale[index]; | |
498 var value = document.createAttribute('value'); | |
499 var position = Number(scaleObj[0])*0.01; | |
500 value.nodeValue = position; | |
501 var pixelPosition = (position*positionScale)+offset; | |
502 var scaleDOM = document.createElement('span'); | |
503 scaleDOM.textContent = scaleObj[1]; | |
504 this.scale.appendChild(scaleDOM); | |
505 scaleDOM.style.left = Math.floor((pixelPosition-($(scaleDOM).width()/2)))+'px'; | |
506 scaleDOM.setAttributeNode(value); | |
507 } | |
508 | |
509 var dest = document.getElementById("slider-holder"); | |
510 dest.appendChild(this.sliderDOM); | |
511 | |
512 this.createSliderObject = function(audioObject) | |
501 { | 513 { |
502 var trackObj = document.createElement('div'); | 514 var trackObj = document.createElement('div'); |
503 trackObj.className = 'track-slider track-slider-disabled track-slider-'+audioObject.id; | 515 trackObj.className = 'track-slider track-slider-disabled track-slider-'+audioObject.id; |
504 trackObj.id = 'track-slider-'+i+'-'+audioObject.id; | 516 trackObj.id = 'track-slider-'+this.id+'-'+audioObject.id; |
505 trackObj.setAttribute('trackIndex',audioObject.id); | 517 trackObj.setAttribute('trackIndex',audioObject.id); |
506 trackObj.innerHTML = '<span>'+audioObject.id+'</span>'; | 518 trackObj.innerHTML = '<span>'+audioObject.id+'</span>'; |
507 if (interfaceObjects[i].name != undefined) { | 519 if (this.name != undefined) { |
508 trackObj.setAttribute('interface-name',interfaceObjects[i].name); | 520 trackObj.setAttribute('interface-name',this.name); |
509 } else { | 521 } else { |
510 trackObj.setAttribute('interface-name',i); | 522 trackObj.setAttribute('interface-name',this.id); |
511 } | 523 } |
512 this.trackSliderObjects.push(trackObj); | 524 var offset = Number(this.canvas.attributes['marginsize'].value); |
513 var slider = document.getElementById("slider-"+trackObj.getAttribute("interface-name")); | |
514 var offset = Number(slider.attributes['marginsize'].value); | |
515 // Distribute it randomnly | 525 // Distribute it randomnly |
516 var w = window.innerWidth - (offset+8)*2; | 526 var w = window.innerWidth - (offset+8)*2; |
517 w = Math.random()*w; | 527 w = Math.random()*w; |
518 w = Math.floor(w+(offset+8)); | 528 w = Math.floor(w+(offset+8)); |
519 trackObj.style.left = w+'px'; | 529 trackObj.style.left = w+'px'; |
520 slider.appendChild(trackObj); | 530 this.canvas.appendChild(trackObj); |
531 this.sliders.push(trackObj); | |
532 return trackObj; | |
533 }; | |
534 | |
535 this.resize = function(event) | |
536 { | |
537 var holdValues = []; | |
538 for (var index = 0; index < this.sliders.length; index++) | |
539 { | |
540 holdValues.push(convSliderPosToRate(this.sliders[index])); | |
541 } | |
542 var width = event.target.innerWidth; | |
543 var sliderDiv = this.canvas; | |
544 var sliderScaleDiv = this.scale; | |
545 var marginsize = Number(sliderDiv.attributes['marginsize'].value); | |
546 var w = (marginsize+8)*2; | |
547 sliderDiv.style.width = width - w + 'px'; | |
548 var width = width - w; | |
549 // Move sliders into new position | |
550 for (var index = 0; index < this.sliders.length; index++) | |
551 { | |
552 var pos = holdValues[index]; | |
553 var pix = pos * width; | |
554 this.sliders[index].style.left = pix+marginsize+'px'; | |
555 } | |
556 | |
557 // Move scale labels | |
558 for (var index = 0; index < this.scale.children.length; index++) | |
559 { | |
560 var scaleObj = this.scale.children[index]; | |
561 var position = Number(scaleObj.attributes['value'].value); | |
562 var pixelPosition = (position*width)+marginsize; | |
563 scaleObj.style.left = Math.floor((pixelPosition-($(scaleObj).width()/2)))+'px'; | |
564 } | |
565 } | |
566 } | |
567 | |
568 function sliderObject(audioObject,interfaceObjects) { | |
569 // Create a new slider object; | |
570 this.parent = audioObject; | |
571 this.trackSliderObjects = []; | |
572 for (var i=0; i<interfaceContext.interfaceSliders.length; i++) | |
573 { | |
574 var trackObj = interfaceContext.interfaceSliders[i].createSliderObject(audioObject); | |
575 this.trackSliderObjects.push(trackObj); | |
521 } | 576 } |
522 | 577 |
523 // Onclick, switch playback to that track | 578 // Onclick, switch playback to that track |
524 | 579 |
525 this.enable = function() { | 580 this.enable = function() { |
624 function resizeWindow(event){ | 679 function resizeWindow(event){ |
625 // Function called when the window has been resized. | 680 // Function called when the window has been resized. |
626 // MANDATORY FUNCTION | 681 // MANDATORY FUNCTION |
627 | 682 |
628 // Store the slider marker values | 683 // Store the slider marker values |
629 var holdValues = []; | 684 for (var i=0; i<interfaceContext.interfaceSliders.length; i++) |
630 $(".track-slider").each(function(index,sliderObj){ | 685 { |
631 holdValues.push(convSliderPosToRate(sliderObj)); | 686 interfaceContext.interfaceSliders[i].resize(event); |
632 }); | 687 } |
633 | |
634 var width = event.target.innerWidth; | |
635 var canvas = document.getElementById('sliderCanvasHolder'); | |
636 var sliderDiv = canvas.children[0]; | |
637 var sliderScaleDiv = canvas.children[1]; | |
638 var marginsize = Number(sliderDiv.attributes['marginsize'].value); | |
639 var w = (marginsize+8)*2; | |
640 sliderDiv.style.width = width - w + 'px'; | |
641 var width = width - w; | |
642 // Move sliders into new position | |
643 $(".track-slider").each(function(index,sliderObj){ | |
644 var pos = holdValues[index]; | |
645 var pix = pos * width; | |
646 sliderObj.style.left = pix+marginsize+'px'; | |
647 }); | |
648 | |
649 // Move scale labels | |
650 $(sliderScaleDiv.children).each(function(index,scaleObj){ | |
651 var position = Number(scaleObj.attributes['value'].value); | |
652 var pixelPosition = (position*width)+marginsize; | |
653 scaleObj.style.left = Math.floor((pixelPosition-($(scaleObj).width()/2)))+'px'; | |
654 }); | |
655 } | 688 } |
656 | 689 |
657 function pageXMLSave(store, testXML) | 690 function pageXMLSave(store, testXML) |
658 { | 691 { |
659 // MANDATORY | 692 // MANDATORY |