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 }
|