annotate ape.js @ 5:4766f485a1b0

Added track slider objects with draggable interface.
author Nicholas Jillings <nicholas.jillings@eecs.qmul.ac.uk>
date Tue, 24 Mar 2015 15:02:15 +0000
parents 1b01b7443a46
children 6a6272b06d34
rev   line source
nicholas@2 1 /**
nicholas@2 2 * ape.js
nicholas@2 3 * Create the APE interface
nicholas@2 4 */
nicholas@2 5
nicholas@2 6 // Once this is loaded and parsed, begin execution
nicholas@2 7 loadInterface(projectXML);
nicholas@2 8
nicholas@2 9 function loadInterface(xmlDoc) {
nicholas@2 10
nicholas@2 11 var width = window.innerWidth;
nicholas@2 12 var height = window.innerHeight;
nicholas@2 13
nicholas@2 14 // Set background to grey #ddd
nicholas@2 15 document.getElementsByTagName('body')[0].style.backgroundColor = '#ddd';
nicholas@2 16
nicholas@2 17 // The injection point into the HTML page
nicholas@2 18 var insertPoint = document.getElementById("topLevelBody");
nicholas@2 19
nicholas@2 20 // Decode parts of the xmlDoc that are needed
nicholas@2 21 // xmlDoc MUST already be parsed by jQuery!
nicholas@2 22 var xmlSetup = xmlDoc.find('setup');
nicholas@2 23 // Should put in an error function here incase of malprocessed or malformed XML
nicholas@2 24
nicholas@2 25 // Create the top div for the Title element
nicholas@2 26 var titleAttr = xmlSetup[0].attributes['title'];
nicholas@2 27 var title = document.createElement('div');
nicholas@2 28 title.className = "title";
nicholas@2 29 title.align = "center";
nicholas@2 30 var titleSpan = document.createElement('span');
nicholas@2 31
nicholas@2 32 // Set title to that defined in XML, else set to default
nicholas@2 33 if (titleAttr != undefined) {
nicholas@2 34 titleSpan.innerText = titleAttr.value;
nicholas@2 35 } else {
nicholas@2 36 titleSpan.innerText = 'APE Tool';
nicholas@2 37 }
nicholas@2 38 // Insert the titleSpan element into the title div element.
nicholas@2 39 title.appendChild(titleSpan);
nicholas@2 40
nicholas@2 41 // Now create the slider and HTML5 canvas boxes
nicholas@2 42
nicholas@2 43 var sliderBox = document.createElement('div');
nicholas@2 44 sliderBox.className = 'sliderCanvasDiv';
nicholas@2 45 sliderBox.id = 'sliderCanvasHolder'; // create an id so we can easily link to it later
nicholas@2 46 sliderBox.align = 'center';
nicholas@2 47
nicholas@5 48 var canvas = document.createElement('div');
nicholas@2 49 canvas.id = 'slider';
nicholas@5 50 canvas.style.width = width - 100 +"px";
nicholas@5 51 canvas.style.height = 150 + "px";
nicholas@5 52 canvas.style.marginBottom = "25px"
nicholas@2 53 canvas.style.backgroundColor = '#eee';
nicholas@5 54 canvas.align = "left";
nicholas@2 55 sliderBox.appendChild(canvas);
nicholas@5 56
nicholas@3 57 var feedbackHolder = document.createElement('div');
nicholas@3 58
nicholas@3 59 var tracksXML = xmlDoc.find('track');
nicholas@3 60 tracksXML.each(function(index,element){
nicholas@3 61 var trackObj = document.createElement('div');
nicholas@3 62 var trackTitle = document.createElement('span');
nicholas@3 63 trackTitle.innerText = 'Comment on track '+index;
nicholas@3 64 var trackComment = document.createElement('textarea');
nicholas@3 65 trackComment.rows = '4';
nicholas@3 66 trackComment.cols = '100';
nicholas@3 67 trackComment.name = 'trackComment'+index;
nicholas@3 68 trackComment.className = 'trackComment';
nicholas@3 69 feedbackHolder.appendChild(trackTitle);
nicholas@3 70 feedbackHolder.appendChild(trackComment);
nicholas@3 71 feedbackHolder.appendChild(trackObj);
nicholas@5 72 // Create a slider per track
nicholas@5 73
nicholas@5 74 var trackSliderObj = document.createElement('div');
nicholas@5 75 trackSliderObj.className = 'track-slider';
nicholas@5 76 trackSliderObj.id = 'track-slider-'+index;
nicholas@5 77 trackSliderObj.style.position = 'absolute';
nicholas@5 78 // Distribute it randomnly
nicholas@5 79 var w = window.innerWidth - 100;
nicholas@5 80 w = Math.random()*w;
nicholas@5 81 trackSliderObj.style.left = Math.floor(w)+50+'px';
nicholas@5 82 trackSliderObj.style.height = "150px";
nicholas@5 83 trackSliderObj.style.width = "10px";
nicholas@5 84 trackSliderObj.style.backgroundColor = 'rgb(100,200,100)';
nicholas@5 85 trackSliderObj.innerHTML = '<span>'+index+'</span>';
nicholas@5 86 trackSliderObj.style.float = "left";
nicholas@5 87 trackSliderObj.draggable = true;
nicholas@5 88 trackSliderObj.ondragend = dragEnd;
nicholas@5 89 canvas.appendChild(trackSliderObj);
nicholas@3 90 })
nicholas@3 91
nicholas@2 92
nicholas@2 93 // Inject into HTML
nicholas@2 94 insertPoint.innerHTML = null; // Clear the current schema
nicholas@2 95 insertPoint.appendChild(title); // Insert the title
nicholas@2 96 insertPoint.appendChild(sliderBox);
nicholas@3 97 insertPoint.appendChild(feedbackHolder);
nicholas@2 98 }
nicholas@5 99
nicholas@5 100 function dragEnd(ev) {
nicholas@5 101 // Function call when a div has been dropped
nicholas@5 102 if (ev.x >= 50 && ev.x < window.innerWidth-50) {
nicholas@5 103 this.style.left = (ev.x)+'px';
nicholas@5 104 } else {
nicholas@5 105 if (ev.x<50) {
nicholas@5 106 this.style.left = '50px';
nicholas@5 107 } else {
nicholas@5 108 this.style.left = window.innerWidth-50 + 'px';
nicholas@5 109 }
nicholas@5 110 }
nicholas@5 111 }