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