# HG changeset patch # User Nicholas Jillings # Date 1449576108 0 # Node ID 38439b21d3697c9028951ced997feeec37710cdc # Parent b1cb28c63a19f9992e07994f4c8cb48edc74f35e STASH: UNSTABLE. Implementing APE multiple sliders. diff -r b1cb28c63a19 -r 38439b21d369 ape.css --- a/ape.css Mon Dec 07 18:42:36 2015 +0000 +++ b/ape.css Tue Dec 08 12:01:48 2015 +0000 @@ -14,7 +14,8 @@ div.pageTitle { width: auto; height: 20px; - margin-top: 20px; + margin-top: 5px; + margin-bottom: 10px; } div.pageTitle span{ @@ -27,7 +28,7 @@ background-color: #ddd } -div#slider { +div.slider { /* Specify any structure for the slider holder interface */ background-color: #eee; height: 150px; diff -r b1cb28c63a19 -r 38439b21d369 ape.js --- a/ape.js Mon Dec 07 18:42:36 2015 +0000 +++ b/ape.js Tue Dec 08 12:01:48 2015 +0000 @@ -147,33 +147,34 @@ var audioObjs = audioEngineContext.audioObjects; var audioHolder = testState.stateMap[testState.stateIndex]; var interfaces = audioHolder.interfaces; - - var minRanking = audioObjs[0].interfaceDOM.getValue(); - var maxRanking = minRanking; - - var minScale; - var maxScale; - for (var i=0; i maxRanking) { maxRanking = ranking;} + } + } + if (minRanking > minScale || maxRanking < maxScale) { + alert('Please use the full width of the scale'); + return false; } } - - for (var i=1; i maxRanking) { maxRanking = ranking;} - } - } - if (minRanking > minScale || maxRanking < maxScale) { - alert('Please use the full width of the scale'); - return false; - } else { - return true; - } + return true; }; Interface.prototype.objectSelected = null; @@ -225,13 +226,6 @@ // Insert the titleSpan element into the title div element. title.appendChild(titleSpan); - var pagetitle = document.createElement('div'); - pagetitle.className = "pageTitle"; - pagetitle.align = "center"; - var titleSpan = document.createElement('span'); - titleSpan.id = "pageTitle"; - pagetitle.appendChild(titleSpan); - // Create Interface buttons! var interfaceButtons = document.createElement('div'); interfaceButtons.id = 'interface-buttons'; @@ -259,38 +253,9 @@ interfaceButtons.appendChild(playback); interfaceButtons.appendChild(submit); - // Now create the slider and HTML5 canvas boxes + var sliderHolder = document.createElement("div"); + sliderHolder.id = "slider-holder"; - // Create the div box to center align - var sliderBox = document.createElement('div'); - sliderBox.className = 'sliderCanvasDiv'; - sliderBox.id = 'sliderCanvasHolder'; - - // 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(); - event.dataTransfer.effectAllowed = 'none'; - event.dataTransfer.dropEffect = 'copy'; - 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 - 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 - var scale = document.createElement('div'); - scale.className = 'sliderScale'; - scale.id = 'sliderScaleHolder'; - scale.align = 'left'; - sliderBox.appendChild(scale); // Global parent for the comment boxes on the page var feedbackHolder = document.createElement('div'); @@ -301,9 +266,8 @@ // Inject into HTML testContent.appendChild(title); // Insert the title - testContent.appendChild(pagetitle); testContent.appendChild(interfaceButtons); - testContent.appendChild(sliderBox); + testContent.appendChild(sliderHolder); testContent.appendChild(feedbackHolder); interfaceContext.insertPoint.appendChild(testContent); @@ -315,16 +279,78 @@ function loadTest(audioHolderObject) { - + var width = window.innerWidth; + var height = window.innerHeight; var id = audioHolderObject.id; var feedbackHolder = document.getElementById('feedbackHolder'); - var canvas = document.getElementById('slider'); + var sliderHolder = document.getElementById('slider-holder'); feedbackHolder.innerHTML = null; - canvas.innerHTML = null; + sliderHolder.innerHTML = null; var interfaceObj = audioHolderObject.interfaces; for (var k=0; k'; + this.trackSliderObjects = []; + for (var i=0; i'; + if (interfaceObjects[i].name != undefined) { + trackObj.setAttribute('interface-name',interfaceObjects[i].name); + } else { + trackObj.setAttribute('interface-name',i); + } + this.trackSliderObjects.push(trackObj); + var slider = document.getElementById("slider-"+trackObj.getAttribute("interface-name")); + var offset = Number(slider.attributes['marginsize'].value); + // Distribute it randomnly + var w = window.innerWidth - (offset+8)*2; + w = Math.random()*w; + w = Math.floor(w+(offset+8)); + trackObj.style.left = w+'px'; + slider.appendChild(trackObj); + } // Onclick, switch playback to that track this.enable = function() { if (this.parent.state == 1) { - $(this.trackSliderObj).removeClass('track-slider-disabled'); + $(this.trackSliderObjects).each(function(i,trackObj){ + $(trackObj).removeClass('track-slider-disabled'); + }); } }; this.exportXMLDOM = function(audioObject) { // Called by the audioObject holding this element. Must be present - var node = document.createElement('value'); - node.textContent = convSliderPosToRate(this.trackSliderObj); - return node; + var obj = []; + $(this.trackSliderObjects).each(function(i,trackObj){ + var node = document.createElement('value'); + node.setAttribute("name",trackObj.getAttribute("interface-name")); + node.textContent = convSliderPosToRate(trackObj); + obj.push(node); + }); + + return obj; }; this.getValue = function() { return convSliderPosToRate(this.trackSliderObj); @@ -596,12 +611,13 @@ } } -function convSliderPosToRate(slider) +function convSliderPosToRate(trackSlider) { - var w = document.getElementById('slider').style.width; - var marginsize = Number(document.getElementById('slider').attributes['marginsize'].value); + var slider = trackSlider.parentElement; + var w = slider.style.width; + var marginsize = Number(slider.attributes['marginsize'].value); var maxPix = w.substr(0,w.length-2); - var pix = slider.style.left; + var pix = trackSlider.style.left; pix = pix.substr(0,pix.length-2); var rate = (pix-marginsize)/maxPix; return rate; diff -r b1cb28c63a19 -r 38439b21d369 core.js --- a/core.js Mon Dec 07 18:42:36 2015 +0000 +++ b/core.js Tue Dec 08 12:01:48 2015 +0000 @@ -649,7 +649,6 @@ this.testPageCompleted = function(store, testXML, testId) { // Function called each time a test page has been completed - // Can be used to over-rule default behaviour var metric = document.createElement('metric'); if (audioEngineContext.metric.enableTestTimer) { @@ -658,17 +657,17 @@ testTime.textContent = audioEngineContext.timer.testDuration; metric.appendChild(testTime); } - testXML.appendChild(metric); + store.appendChild(metric); var audioObjects = audioEngineContext.audioObjects; for (var i=0; i - + Please enter your location. @@ -42,14 +42,21 @@ - - Example Test Question + + Preference Min Max Middle 20 Comment on fragment + + Depth + Low + High + Middle + Comment on fragment +