Mercurial > hg > webaudioevaluationtool
comparison ape.js @ 127:4ce9f5887eee
Bug #1235: Slider, slider objects and scale markings are adjusted on window resize.
author | Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk> |
---|---|
date | Wed, 27 May 2015 11:49:20 +0100 |
parents | a613b89f113b |
children | 0e13112d8501 |
comparison
equal
deleted
inserted
replaced
126:a613b89f113b | 127:4ce9f5887eee |
---|---|
198 | 198 |
199 // Create the div box to center align | 199 // Create the div box to center align |
200 var sliderBox = document.createElement('div'); | 200 var sliderBox = document.createElement('div'); |
201 sliderBox.className = 'sliderCanvasDiv'; | 201 sliderBox.className = 'sliderCanvasDiv'; |
202 sliderBox.id = 'sliderCanvasHolder'; | 202 sliderBox.id = 'sliderCanvasHolder'; |
203 sliderBox.align = 'center'; | |
204 | 203 |
205 // Create the slider box to hold the slider elements | 204 // Create the slider box to hold the slider elements |
206 var canvas = document.createElement('div'); | 205 var canvas = document.createElement('div'); |
207 canvas.id = 'slider'; | 206 canvas.id = 'slider'; |
207 canvas.align = "left"; | |
208 canvas.addEventListener('dragover',function(event){ | |
209 event.preventDefault(); | |
210 return false; | |
211 },false); | |
212 var sliderMargin = document.createAttribute('marginsize'); | |
213 sliderMargin.nodeValue = 42; // Set default margins to 42px either side | |
208 // Must have a known EXACT width, as this is used later to determine the ratings | 214 // Must have a known EXACT width, as this is used later to determine the ratings |
209 canvas.style.width = width - 100 +"px"; | 215 var w = (Number(sliderMargin.nodeValue)+8)*2; |
210 canvas.align = "left"; | 216 canvas.style.width = width - w +"px"; |
217 canvas.style.marginLeft = sliderMargin.nodeValue +'px'; | |
218 canvas.setAttributeNode(sliderMargin); | |
211 sliderBox.appendChild(canvas); | 219 sliderBox.appendChild(canvas); |
212 | 220 |
213 // Create the div to hold any scale objects | 221 // Create the div to hold any scale objects |
214 var scale = document.createElement('div'); | 222 var scale = document.createElement('div'); |
215 scale.className = 'sliderScale'; | 223 scale.className = 'sliderScale'; |
273 if (titleNode[0] != undefined) | 281 if (titleNode[0] != undefined) |
274 { | 282 { |
275 document.getElementById('pageTitle').textContent = titleNode[0].textContent; | 283 document.getElementById('pageTitle').textContent = titleNode[0].textContent; |
276 } | 284 } |
277 var positionScale = canvas.style.width.substr(0,canvas.style.width.length-2); | 285 var positionScale = canvas.style.width.substr(0,canvas.style.width.length-2); |
278 var offset = 50-8; // Half the offset of the slider (window width -100) minus the body padding of 8 | 286 var offset = Number(document.getElementById('slider').attributes['marginsize'].value); |
279 // TODO: AUTOMATE ABOVE!! | |
280 var scale = document.getElementById('sliderScaleHolder'); | 287 var scale = document.getElementById('sliderScaleHolder'); |
281 scale.innerHTML = null; | 288 scale.innerHTML = null; |
282 interfaceObj.find('scale').each(function(index,scaleObj){ | 289 interfaceObj.find('scale').each(function(index,scaleObj){ |
290 var value = document.createAttribute('value'); | |
283 var position = Number(scaleObj.attributes['position'].value)*0.01; | 291 var position = Number(scaleObj.attributes['position'].value)*0.01; |
292 value.nodeValue = position; | |
284 var pixelPosition = (position*positionScale)+offset; | 293 var pixelPosition = (position*positionScale)+offset; |
285 var scaleDOM = document.createElement('span'); | 294 var scaleDOM = document.createElement('span'); |
286 scaleDOM.textContent = scaleObj.textContent; | 295 scaleDOM.textContent = scaleObj.textContent; |
287 scale.appendChild(scaleDOM); | 296 scale.appendChild(scaleDOM); |
288 scaleDOM.style.left = Math.floor((pixelPosition-($(scaleDOM).width()/2)))+'px'; | 297 scaleDOM.style.left = Math.floor((pixelPosition-($(scaleDOM).width()/2)))+'px'; |
298 scaleDOM.setAttributeNode(value); | |
289 }); | 299 }); |
290 | 300 |
291 // Extract the hostURL attribute. If not set, create an empty string. | 301 // Extract the hostURL attribute. If not set, create an empty string. |
292 var hostURL = textXML.attributes['hostURL']; | 302 var hostURL = textXML.attributes['hostURL']; |
293 if (hostURL == undefined) { | 303 if (hostURL == undefined) { |
490 | 500 |
491 | 501 |
492 function dragEnd(ev) { | 502 function dragEnd(ev) { |
493 // Function call when a div has been dropped | 503 // Function call when a div has been dropped |
494 var slider = document.getElementById('slider'); | 504 var slider = document.getElementById('slider'); |
505 var marginSize = Number(slider.attributes['marginsize'].value); | |
495 var w = slider.style.width; | 506 var w = slider.style.width; |
496 w = Number(w.substr(0,w.length-2)); | 507 w = Number(w.substr(0,w.length-2)); |
497 var x = ev.x - ev.screenX; | 508 var x = ev.x - ev.view.screenX; |
498 if (x >= 42 && x < w+42) { | 509 if (x >= marginSize && x < w+marginSize) { |
499 this.style.left = (x)+'px'; | 510 this.style.left = (x)+'px'; |
500 } else { | 511 } else { |
501 if (x<42) { | 512 if (x<marginSize) { |
502 this.style.left = '42px'; | 513 this.style.left = marginSize+'px'; |
503 } else { | 514 } else { |
504 this.style.left = (w+42) + 'px'; | 515 this.style.left = (w+marginSize) + 'px'; |
505 } | 516 } |
506 } | 517 } |
507 audioEngineContext.metric.sliderMoved(); | 518 audioEngineContext.metric.sliderMoved(); |
508 } | 519 } |
509 | 520 |
550 } | 561 } |
551 | 562 |
552 function convSliderPosToRate(id) | 563 function convSliderPosToRate(id) |
553 { | 564 { |
554 var w = document.getElementById('slider').style.width; | 565 var w = document.getElementById('slider').style.width; |
566 var marginsize = Number(document.getElementById('slider').attributes['marginsize'].value); | |
555 var maxPix = w.substr(0,w.length-2); | 567 var maxPix = w.substr(0,w.length-2); |
556 var slider = document.getElementsByClassName('track-slider')[id]; | 568 var slider = document.getElementsByClassName('track-slider')[id]; |
557 var pix = slider.style.left; | 569 var pix = slider.style.left; |
558 pix = pix.substr(0,pix.length-2); | 570 pix = pix.substr(0,pix.length-2); |
559 var rate = (pix-42)/maxPix; | 571 var rate = (pix-marginsize)/maxPix; |
560 return rate; | 572 return rate; |
573 } | |
574 | |
575 function resizeWindow(event){ | |
576 // Function called when the window has been resized. | |
577 // MANDATORY FUNCTION | |
578 | |
579 // Store the slider marker values | |
580 var holdValues = []; | |
581 $(".track-slider").each(function(index,sliderObj){ | |
582 holdValues.push(convSliderPosToRate(index)); | |
583 }); | |
584 | |
585 var width = event.target.innerWidth; | |
586 var canvas = document.getElementById('sliderCanvasHolder'); | |
587 var sliderDiv = canvas.children[0]; | |
588 var sliderScaleDiv = canvas.children[1]; | |
589 var marginsize = Number(sliderDiv.attributes['marginsize'].value); | |
590 var w = (marginsize+8)*2; | |
591 sliderDiv.style.width = width - w + 'px'; | |
592 var width = width - w; | |
593 // Move sliders into new position | |
594 $(".track-slider").each(function(index,sliderObj){ | |
595 var pos = holdValues[index]; | |
596 var pix = pos * width; | |
597 sliderObj.style.left = pix+marginsize+'px'; | |
598 }); | |
599 | |
600 // Move scale labels | |
601 $(sliderScaleDiv.children).each(function(index,scaleObj){ | |
602 var position = Number(scaleObj.attributes['value'].value); | |
603 var pixelPosition = (position*width)+marginsize; | |
604 scaleObj.style.left = Math.floor((pixelPosition-($(scaleObj).width()/2)))+'px'; | |
605 }); | |
561 } | 606 } |
562 | 607 |
563 function pageXMLSave(testId) | 608 function pageXMLSave(testId) |
564 { | 609 { |
565 // Saves a specific test page | 610 // Saves a specific test page |