Mercurial > hg > webaudioevaluationtool
changeset 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 | df89a024e03f 0e13112d8501 |
files | ape.js core.js |
diffstat | 2 files changed, 59 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/ape.js Wed May 27 10:16:04 2015 +0100 +++ b/ape.js Wed May 27 11:49:20 2015 +0100 @@ -200,14 +200,22 @@ var sliderBox = document.createElement('div'); sliderBox.className = 'sliderCanvasDiv'; sliderBox.id = 'sliderCanvasHolder'; - sliderBox.align = 'center'; // Create the slider box to hold the slider elements var canvas = document.createElement('div'); canvas.id = 'slider'; + canvas.align = "left"; + canvas.addEventListener('dragover',function(event){ + event.preventDefault(); + return false; + },false); + var sliderMargin = document.createAttribute('marginsize'); + sliderMargin.nodeValue = 42; // Set default margins to 42px either side // Must have a known EXACT width, as this is used later to determine the ratings - canvas.style.width = width - 100 +"px"; - canvas.align = "left"; + var w = (Number(sliderMargin.nodeValue)+8)*2; + canvas.style.width = width - w +"px"; + canvas.style.marginLeft = sliderMargin.nodeValue +'px'; + canvas.setAttributeNode(sliderMargin); sliderBox.appendChild(canvas); // Create the div to hold any scale objects @@ -275,17 +283,19 @@ document.getElementById('pageTitle').textContent = titleNode[0].textContent; } var positionScale = canvas.style.width.substr(0,canvas.style.width.length-2); - var offset = 50-8; // Half the offset of the slider (window width -100) minus the body padding of 8 - // TODO: AUTOMATE ABOVE!! + var offset = Number(document.getElementById('slider').attributes['marginsize'].value); var scale = document.getElementById('sliderScaleHolder'); scale.innerHTML = null; interfaceObj.find('scale').each(function(index,scaleObj){ + var value = document.createAttribute('value'); var position = Number(scaleObj.attributes['position'].value)*0.01; + value.nodeValue = position; var pixelPosition = (position*positionScale)+offset; var scaleDOM = document.createElement('span'); scaleDOM.textContent = scaleObj.textContent; scale.appendChild(scaleDOM); scaleDOM.style.left = Math.floor((pixelPosition-($(scaleDOM).width()/2)))+'px'; + scaleDOM.setAttributeNode(value); }); // Extract the hostURL attribute. If not set, create an empty string. @@ -492,16 +502,17 @@ function dragEnd(ev) { // Function call when a div has been dropped var slider = document.getElementById('slider'); + var marginSize = Number(slider.attributes['marginsize'].value); var w = slider.style.width; w = Number(w.substr(0,w.length-2)); - var x = ev.x - ev.screenX; - if (x >= 42 && x < w+42) { + var x = ev.x - ev.view.screenX; + if (x >= marginSize && x < w+marginSize) { this.style.left = (x)+'px'; } else { - if (x<42) { - this.style.left = '42px'; + if (x<marginSize) { + this.style.left = marginSize+'px'; } else { - this.style.left = (w+42) + 'px'; + this.style.left = (w+marginSize) + 'px'; } } audioEngineContext.metric.sliderMoved(); @@ -552,14 +563,48 @@ function convSliderPosToRate(id) { var w = document.getElementById('slider').style.width; + var marginsize = Number(document.getElementById('slider').attributes['marginsize'].value); var maxPix = w.substr(0,w.length-2); var slider = document.getElementsByClassName('track-slider')[id]; var pix = slider.style.left; pix = pix.substr(0,pix.length-2); - var rate = (pix-42)/maxPix; + var rate = (pix-marginsize)/maxPix; return rate; } +function resizeWindow(event){ + // Function called when the window has been resized. + // MANDATORY FUNCTION + + // Store the slider marker values + var holdValues = []; + $(".track-slider").each(function(index,sliderObj){ + holdValues.push(convSliderPosToRate(index)); + }); + + var width = event.target.innerWidth; + var canvas = document.getElementById('sliderCanvasHolder'); + var sliderDiv = canvas.children[0]; + var sliderScaleDiv = canvas.children[1]; + var marginsize = Number(sliderDiv.attributes['marginsize'].value); + var w = (marginsize+8)*2; + sliderDiv.style.width = width - w + 'px'; + var width = width - w; + // Move sliders into new position + $(".track-slider").each(function(index,sliderObj){ + var pos = holdValues[index]; + var pix = pos * width; + sliderObj.style.left = pix+marginsize+'px'; + }); + + // Move scale labels + $(sliderScaleDiv.children).each(function(index,scaleObj){ + var position = Number(scaleObj.attributes['value'].value); + var pixelPosition = (position*width)+marginsize; + scaleObj.style.left = Math.floor((pixelPosition-($(scaleObj).width()/2)))+'px'; + }); +} + function pageXMLSave(testId) { // Saves a specific test page
--- a/core.js Wed May 27 10:16:04 2015 +0100 +++ b/core.js Wed May 27 11:49:20 2015 +0100 @@ -263,6 +263,9 @@ document.getElementsByTagName("head")[0].appendChild(css); } document.getElementsByTagName("head")[0].appendChild(interfaceJS); + + // Define window callbacks for interface + window.onresize = function(event){resizeWindow(event);}; } function createProjectSave(destURL) {