nickjillings@1370
|
1 var interfaceSpecs;
|
nickjillings@1370
|
2 var xmlHttp;
|
nickjillings@1370
|
3 var popupObject;
|
nickjillings@1370
|
4 var popupStateNodes;
|
nickjillings@1370
|
5 var specification;
|
nickjillings@1370
|
6 var convert;
|
nickjillings@1370
|
7 var attributeText;
|
nicholas@2355
|
8 var page_lang = "en";
|
nickjillings@1370
|
9
|
nickjillings@1370
|
10 // Firefox does not have an XMLDocument.prototype.getElementsByName
|
nickjillings@1370
|
11 // and there is no searchAll style command, this custom function will
|
nickjillings@1370
|
12 // search all children recusrively for the name. Used for XSD where all
|
nickjillings@1370
|
13 // element nodes must have a name and therefore can pull the schema node
|
nickjillings@1370
|
14 XMLDocument.prototype.getAllElementsByName = function(name)
|
nickjillings@1370
|
15 {
|
nickjillings@1370
|
16 name = String(name);
|
nickjillings@1370
|
17 var selected = this.documentElement.getAllElementsByName(name);
|
nickjillings@1370
|
18 return selected;
|
nickjillings@1370
|
19 }
|
nickjillings@1370
|
20
|
nickjillings@1370
|
21 Element.prototype.getAllElementsByName = function(name)
|
nickjillings@1370
|
22 {
|
nickjillings@1370
|
23 name = String(name);
|
nickjillings@1370
|
24 var selected = [];
|
nickjillings@1370
|
25 var node = this.firstElementChild;
|
nickjillings@1370
|
26 while(node != null)
|
nickjillings@1370
|
27 {
|
nickjillings@1370
|
28 if (node.getAttribute('name') == name)
|
nickjillings@1370
|
29 {
|
nickjillings@1370
|
30 selected.push(node);
|
nickjillings@1370
|
31 }
|
nickjillings@1370
|
32 if (node.childElementCount > 0)
|
nickjillings@1370
|
33 {
|
nickjillings@1370
|
34 selected = selected.concat(node.getAllElementsByName(name));
|
nickjillings@1370
|
35 }
|
nickjillings@1370
|
36 node = node.nextElementSibling;
|
nickjillings@1370
|
37 }
|
nickjillings@1370
|
38 return selected;
|
nickjillings@1370
|
39 }
|
nickjillings@1370
|
40
|
nickjillings@1370
|
41 XMLDocument.prototype.getAllElementsByTagName = function(name)
|
nickjillings@1370
|
42 {
|
nickjillings@1370
|
43 name = String(name);
|
nickjillings@1370
|
44 var selected = this.documentElement.getAllElementsByTagName(name);
|
nickjillings@1370
|
45 return selected;
|
nickjillings@1370
|
46 }
|
nickjillings@1370
|
47
|
nickjillings@1370
|
48 Element.prototype.getAllElementsByTagName = function(name)
|
nickjillings@1370
|
49 {
|
nickjillings@1370
|
50 name = String(name);
|
nickjillings@1370
|
51 var selected = [];
|
nickjillings@1370
|
52 var node = this.firstElementChild;
|
nickjillings@1370
|
53 while(node != null)
|
nickjillings@1370
|
54 {
|
nickjillings@1370
|
55 if (node.nodeName == name)
|
nickjillings@1370
|
56 {
|
nickjillings@1370
|
57 selected.push(node);
|
nickjillings@1370
|
58 }
|
nickjillings@1370
|
59 if (node.childElementCount > 0)
|
nickjillings@1370
|
60 {
|
nickjillings@1370
|
61 selected = selected.concat(node.getAllElementsByTagName(name));
|
nickjillings@1370
|
62 }
|
nickjillings@1370
|
63 node = node.nextElementSibling;
|
nickjillings@1370
|
64 }
|
nickjillings@1370
|
65 return selected;
|
nickjillings@1370
|
66 }
|
nickjillings@1370
|
67
|
nickjillings@1370
|
68 // Firefox does not have an XMLDocument.prototype.getElementsByName
|
nickjillings@1370
|
69 if (typeof XMLDocument.prototype.getElementsByName != "function") {
|
nickjillings@1370
|
70 XMLDocument.prototype.getElementsByName = function(name)
|
nickjillings@1370
|
71 {
|
nickjillings@1370
|
72 name = String(name);
|
nickjillings@1370
|
73 var node = this.documentElement.firstElementChild;
|
nickjillings@1370
|
74 var selected = [];
|
nickjillings@1370
|
75 while(node != null)
|
nickjillings@1370
|
76 {
|
nickjillings@1370
|
77 if (node.getAttribute('name') == name)
|
nickjillings@1370
|
78 {
|
nickjillings@1370
|
79 selected.push(node);
|
nickjillings@1370
|
80 }
|
nickjillings@1370
|
81 node = node.nextElementSibling;
|
nickjillings@1370
|
82 }
|
nickjillings@1370
|
83 return selected;
|
nickjillings@1370
|
84 }
|
nickjillings@1370
|
85 }
|
nickjillings@1370
|
86
|
nickjillings@1370
|
87 window.onload = function()
|
nickjillings@1370
|
88 {
|
nickjillings@1370
|
89 specification = new Specification();
|
nickjillings@1370
|
90 convert = new SpecificationToHTML();
|
nickjillings@1370
|
91 xmlHttp = new XMLHttpRequest();
|
nicholas@2224
|
92 xmlHttp.open("GET","test_create/interface-specs.xml",true);
|
nickjillings@1370
|
93 xmlHttp.onload = function()
|
nickjillings@1370
|
94 {
|
nickjillings@1370
|
95 var parse = new DOMParser();
|
nickjillings@1370
|
96 interfaceSpecs = parse.parseFromString(xmlHttp.response,'text/xml');
|
nickjillings@1370
|
97 buildPage();
|
nickjillings@1370
|
98 popupObject.postNode(popupStateNodes.state[0])
|
nickjillings@1370
|
99 }
|
nickjillings@1370
|
100 xmlHttp.send();
|
nickjillings@1370
|
101
|
nickjillings@1370
|
102 var xsdGet = new XMLHttpRequest();
|
nicholas@2224
|
103 xsdGet.open("GET","xml/test-schema.xsd",true);
|
nickjillings@1370
|
104 xsdGet.onload = function()
|
nickjillings@1370
|
105 {
|
nickjillings@1370
|
106 var parse = new DOMParser();
|
nickjillings@1370
|
107 specification.schema = parse.parseFromString(xsdGet.response,'text/xml');;
|
nickjillings@1370
|
108 }
|
nickjillings@1370
|
109 xsdGet.send();
|
nickjillings@1370
|
110
|
nickjillings@1370
|
111 var jsonAttribute = new XMLHttpRequest();
|
nicholas@2224
|
112 jsonAttribute.open("GET","test_create/attributes.json",true);
|
nickjillings@1370
|
113 jsonAttribute.onload = function()
|
nickjillings@1370
|
114 {
|
nickjillings@1370
|
115 attributeText = JSON.parse(jsonAttribute.response)
|
nickjillings@1370
|
116 }
|
nickjillings@1370
|
117 jsonAttribute.send();
|
nickjillings@1370
|
118 }
|
nickjillings@1370
|
119
|
nickjillings@1370
|
120 function buildPage()
|
nickjillings@1370
|
121 {
|
nickjillings@1370
|
122 popupObject = new function() {
|
nickjillings@1370
|
123 this.object = document.getElementById("popupHolder");
|
nickjillings@1370
|
124 this.blanket = document.getElementById("blanket");
|
nickjillings@1370
|
125
|
nickjillings@1370
|
126 this.popupTitle = document.createElement("div");
|
nickjillings@1370
|
127 this.popupTitle.id = "popup-title-holder";
|
nickjillings@1370
|
128 this.popupTitle.align = "center";
|
nickjillings@1370
|
129 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
130 this.titleDOM.id = "popup-title";
|
nickjillings@1370
|
131 this.popupTitle.appendChild(this.titleDOM);
|
nickjillings@1370
|
132 this.object.appendChild(this.popupTitle);
|
nickjillings@1370
|
133
|
nickjillings@1370
|
134 this.popupContent = document.createElement("div");
|
nickjillings@1370
|
135 this.popupContent.id = "popup-content";
|
nickjillings@1370
|
136 this.object.appendChild(this.popupContent);
|
nickjillings@1370
|
137
|
nickjillings@1370
|
138 this.proceedButton = document.createElement("button");
|
nickjillings@1370
|
139 this.proceedButton.id = "popup-proceed";
|
nickjillings@2108
|
140 this.proceedButton.className = "popup-button";
|
nickjillings@1370
|
141 this.proceedButton.textContent = "Next";
|
nickjillings@1370
|
142 this.proceedButton.onclick = function()
|
nickjillings@1370
|
143 {
|
nickjillings@1370
|
144 popupObject.popupContent.innerHTML = null;
|
nickjillings@2110
|
145 if(typeof popupObject.shownObject.continue == "function") {
|
nickjillings@2110
|
146 popupObject.shownObject.continue();
|
nickjillings@2110
|
147 } else {
|
nickjillings@2110
|
148 popupObject.hide();
|
nickjillings@2110
|
149 }
|
nickjillings@1370
|
150 };
|
nickjillings@1370
|
151 this.object.appendChild(this.proceedButton);
|
nickjillings@1370
|
152
|
nickjillings@2108
|
153 this.backButton = document.createElement("button");
|
nickjillings@2108
|
154 this.backButton.id = "popup-back";
|
nickjillings@2108
|
155 this.backButton.className = "popup-button";
|
nickjillings@2108
|
156 this.backButton.textContent = "Back";
|
nickjillings@2108
|
157 this.backButton.onclick = function()
|
nickjillings@2108
|
158 {
|
nickjillings@2108
|
159 popupObject.popupContent.innerHTML = null;
|
nickjillings@2108
|
160 popupObject.shownObject.back();
|
nickjillings@2108
|
161 };
|
nickjillings@2108
|
162 this.object.appendChild(this.backButton);
|
nickjillings@2108
|
163
|
nickjillings@1370
|
164 this.shownObject;
|
nickjillings@1370
|
165
|
nickjillings@1370
|
166 this.resize = function()
|
nickjillings@1370
|
167 {
|
nickjillings@1370
|
168 var w = window.innerWidth;
|
nickjillings@1370
|
169 var h = window.innerHeight;
|
nickjillings@1370
|
170 this.object.style.left = Math.floor((w-750)/2) + 'px';
|
nickjillings@1370
|
171 this.object.style.top = Math.floor((h-500)/2) + 'px';
|
nickjillings@1370
|
172 }
|
nickjillings@1370
|
173
|
nickjillings@1370
|
174 this.show = function()
|
nickjillings@1370
|
175 {
|
nickjillings@1370
|
176 this.object.style.visibility = "visible";
|
nickjillings@1370
|
177 this.blanket.style.visibility = "visible";
|
nickjillings@2108
|
178 if (typeof this.shownObject.back == "function") {
|
nickjillings@2108
|
179 this.backButton.style.visibility = "visible";
|
nickjillings@2108
|
180 } else {
|
nickjillings@2108
|
181 this.backButton.style.visibility = "hidden";
|
nickjillings@2108
|
182 }
|
nickjillings@1370
|
183 }
|
nickjillings@1370
|
184
|
nickjillings@1370
|
185 this.hide = function()
|
nickjillings@1370
|
186 {
|
nickjillings@1370
|
187 this.object.style.visibility = "hidden";
|
nickjillings@1370
|
188 this.blanket.style.visibility = "hidden";
|
nickjillings@2108
|
189 this.backButton.style.visibility = "hidden";
|
nickjillings@1370
|
190 }
|
nickjillings@1370
|
191
|
nickjillings@1370
|
192 this.postNode = function(postObject)
|
nickjillings@1370
|
193 {
|
nickjillings@1370
|
194 //Passed object must have the following:
|
nickjillings@1370
|
195 // Title: text to show in the title
|
nickjillings@1370
|
196 // Content: HTML DOM to show on the page
|
nickjillings@1370
|
197 // On complete this HTML DOM is destroyed so make sure it is referenced elsewhere for processing
|
nickjillings@1370
|
198 this.titleDOM.textContent = postObject.title;
|
nickjillings@1370
|
199 this.popupContent.appendChild(postObject.content);
|
nickjillings@1370
|
200 this.shownObject = postObject;
|
nickjillings@2108
|
201 if (typeof this.shownObject.back == "function") {
|
nickjillings@2108
|
202 this.backButton.style.visibility = "visible";
|
nickjillings@2108
|
203 } else {
|
nickjillings@2108
|
204 this.backButton.style.visibility = "hidden";
|
nickjillings@2108
|
205 }
|
nickjillings@2110
|
206 if (typeof this.shownObject.continue == "function") {
|
nickjillings@2110
|
207 this.proceedButton.textContent = "Next";
|
nickjillings@2110
|
208 } else {
|
nickjillings@2110
|
209 this.proceedButton.textContent = "Finish";
|
nickjillings@2110
|
210 }
|
nickjillings@2108
|
211 this.show();
|
nickjillings@1370
|
212 }
|
nickjillings@1370
|
213
|
nickjillings@1370
|
214 this.resize();
|
nickjillings@1370
|
215 this.hide();
|
nickjillings@1370
|
216 };
|
nickjillings@1370
|
217
|
nickjillings@1370
|
218 popupStateNodes = new function()
|
nickjillings@1370
|
219 {
|
nickjillings@1370
|
220 // This defines the several popup states wanted
|
nickjillings@1370
|
221 this.state = [];
|
nickjillings@1370
|
222 this.state[0] = new function()
|
nickjillings@1370
|
223 {
|
nickjillings@1370
|
224 this.title = "Welcome";
|
nickjillings@1370
|
225 this.content = document.createElement("div");
|
nickjillings@1370
|
226 this.content.id = "state-0";
|
nickjillings@1370
|
227 var span = document.createElement("span");
|
nickjillings@1370
|
228 span.textContent = "Welcome to the WAET test creator tool. This will allow you to create a new test from scratch to suit your testing needs. If you wish to update a test file, please drag and drop the XML document into the area below for processing, otherwise press 'Next' to start a new test. This tool generates files for the WAET 1.2.0 version."
|
nickjillings@1370
|
229 this.content.appendChild(span);
|
nickjillings@1370
|
230 this.dragArea = document.createElement("div");
|
nickjillings@1373
|
231 this.dragArea.className = "drag-area";
|
nickjillings@1373
|
232 this.dragArea.id = "project-drop";
|
nickjillings@1370
|
233 this.content.appendChild(this.dragArea);
|
nickjillings@1373
|
234
|
nickjillings@1374
|
235 this.dragArea.addEventListener('dragover',function(e){
|
nickjillings@1373
|
236 e.stopPropagation();
|
nickjillings@1373
|
237 e.preventDefault();
|
nickjillings@1373
|
238 e.dataTransfer.dropEffect = 'copy';
|
nickjillings@1373
|
239 e.currentTarget.className = "drag-area drag-over";
|
nickjillings@1373
|
240 });
|
nickjillings@1373
|
241
|
nickjillings@1373
|
242 this.dragArea.addEventListener('dragexit',function(e){
|
nickjillings@1373
|
243 e.stopPropagation();
|
nickjillings@1373
|
244 e.preventDefault();
|
nickjillings@1373
|
245 e.dataTransfer.dropEffect = 'copy';
|
nickjillings@1373
|
246 e.currentTarget.className = "drag-area";
|
nickjillings@1373
|
247 });
|
nickjillings@1373
|
248
|
nickjillings@1373
|
249 this.dragArea.addEventListener('drop',function(e){
|
nickjillings@1373
|
250 e.stopPropagation();
|
nickjillings@1373
|
251 e.preventDefault();
|
nickjillings@1373
|
252 e.currentTarget.className = "drag-area drag-dropped";
|
nickjillings@1373
|
253 var files = e.dataTransfer.files[0];
|
nickjillings@1374
|
254 var reader = new FileReader();
|
nickjillings@1374
|
255 reader.onload = function(decoded) {
|
nickjillings@1374
|
256 var parse = new DOMParser();
|
nickjillings@1374
|
257 specification.decode(parse.parseFromString(decoded.target.result,'text/xml'));
|
nickjillings@1374
|
258 popupObject.hide();
|
nickjillings@1375
|
259 popupObject.popupContent.innerHTML = null;
|
nickjillings@1374
|
260 convert.convert(document.getElementById('content'));
|
nickjillings@1374
|
261 }
|
nickjillings@1374
|
262 reader.readAsText(files);
|
nickjillings@1373
|
263 });
|
nickjillings@1373
|
264
|
nickjillings@1370
|
265
|
nickjillings@1370
|
266 this.continue = function()
|
nickjillings@1370
|
267 {
|
nickjillings@1370
|
268 popupObject.postNode(popupStateNodes.state[1]);
|
nickjillings@1370
|
269 }
|
nickjillings@1370
|
270 }
|
nickjillings@1370
|
271 this.state[1] = new function()
|
nickjillings@1370
|
272 {
|
nickjillings@1370
|
273 this.title = "Select your interface";
|
nickjillings@1370
|
274 this.content = document.createElement("div");
|
nickjillings@1370
|
275 this.content.id = "state-1";
|
nickjillings@1370
|
276 var spnH = document.createElement('div');
|
nickjillings@1370
|
277 var span = document.createElement("span");
|
nickjillings@1370
|
278 span.textContent = "Please select your interface from the list shown below. This will define the various options which are available. This can later be changed.";
|
nickjillings@1370
|
279 spnH.appendChild(span);
|
nickjillings@1370
|
280 this.content.appendChild(spnH);
|
nickjillings@1370
|
281 this.select = document.createElement("select");
|
nicholas@2355
|
282 this.content.appendChild(this.select);
|
nicholas@2355
|
283 this.description = document.createElement("p");
|
nicholas@2355
|
284 this.content.appendChild(this.description);
|
nicholas@2390
|
285 this.testsXML = interfaceSpecs.getElementsByTagName('tests')[0].getElementsByTagName('test');
|
nickjillings@1370
|
286 for (var i=0; i<this.testsXML.length; i++)
|
nickjillings@1370
|
287 {
|
nickjillings@1370
|
288 var option = document.createElement('option');
|
nickjillings@1370
|
289 option.value = this.testsXML[i].getAttribute('name');
|
nickjillings@1370
|
290 option.textContent = this.testsXML[i].getAttribute('name');
|
nickjillings@1370
|
291 this.select.appendChild(option);
|
nickjillings@1370
|
292 }
|
nicholas@2355
|
293 this.handleEvent = function(event) {
|
nicholas@2355
|
294 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(this.select.value)[0];
|
nicholas@2355
|
295 var descriptors = testXML.getAllElementsByTagName("description");
|
nicholas@2355
|
296 this.description.textContent = "";
|
nicholas@2355
|
297 for (var i=0; i<descriptors.length; i++) {
|
nicholas@2355
|
298 if (descriptors[i].getAttribute("lang") == page_lang) {
|
nicholas@2355
|
299 this.description.textContent = descriptors[i].textContent;
|
nicholas@2355
|
300 }
|
nicholas@2355
|
301 }
|
nicholas@2355
|
302 }
|
nicholas@2355
|
303 this.select.addEventListener("change",this);
|
nicholas@2355
|
304 this.handleEvent();
|
nickjillings@1370
|
305 this.continue = function()
|
nickjillings@1370
|
306 {
|
nickjillings@1370
|
307 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(this.select.value)[0];
|
nickjillings@1370
|
308 specification.interface = testXML.getAttribute("interface");
|
nickjillings@2108
|
309 if (specification.interfaces == null)
|
nickjillings@2108
|
310 {
|
nickjillings@2194
|
311 specification.interfaces = new specification.interfaceNode(specification);
|
nickjillings@2108
|
312 }
|
nickjillings@2108
|
313 if (specification.metrics == null) {
|
nickjillings@2108
|
314 specification.metrics = new specification.metricNode();
|
nickjillings@2108
|
315 }
|
nickjillings@1370
|
316 popupStateNodes.state[2].generate();
|
nickjillings@1370
|
317 popupObject.postNode(popupStateNodes.state[2]);
|
nickjillings@1370
|
318 }
|
nickjillings@2108
|
319 this.back = function() {
|
nickjillings@2108
|
320 popupObject.postNode(popupStateNodes.state[0]);
|
nickjillings@2108
|
321 }
|
nickjillings@1370
|
322 }
|
nickjillings@1370
|
323 this.state[2] = new function()
|
nickjillings@1370
|
324 {
|
nickjillings@1370
|
325 this.title = "Test Checks & Restrictions";
|
nickjillings@1370
|
326 this.content = document.createElement("div");
|
nickjillings@1370
|
327 this.content.id = "state-1";
|
nickjillings@1370
|
328 var spnH = document.createElement('div');
|
nickjillings@1370
|
329 var span = document.createElement("span");
|
nickjillings@1370
|
330 span.textContent = "Select your test checks and restrictions. Greyed out items are fixed by the test/interface and cannot be changed";
|
nickjillings@1370
|
331 spnH.appendChild(span);
|
nickjillings@1370
|
332 this.content.appendChild(spnH);
|
nickjillings@1370
|
333 var holder = document.createElement("div");
|
nickjillings@1370
|
334 this.options = [];
|
nickjillings@1370
|
335 this.testXML = null;
|
nickjillings@1370
|
336 this.interfaceXML = null;
|
nickjillings@2108
|
337 this.dynamicContent = document.createElement("div");
|
nickjillings@2108
|
338 this.content.appendChild(this.dynamicContent);
|
nickjillings@1370
|
339 this.generate = function()
|
nickjillings@1370
|
340 {
|
nickjillings@2108
|
341 this.options = [];
|
nickjillings@2108
|
342 this.dynamicContent.innerHTML = null;
|
nickjillings@1370
|
343 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
344 this.checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
345 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
346 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
347 this.testXML = this.testXML.getAllElementsByTagName("checks");
|
nicholas@2390
|
348 var interfaceXMLChildren = this.interfaceXML.getElementsByTagName('entry');
|
nicholas@2390
|
349 for (var i=0; i<interfaceXMLChildren.length; i++)
|
nickjillings@1370
|
350 {
|
nicholas@2390
|
351 var interfaceNode = interfaceXMLChildren[i];
|
nickjillings@1370
|
352 var checkName = interfaceNode.getAttribute('name');
|
nickjillings@1370
|
353 var testNode
|
nickjillings@1370
|
354 if (this.testXML.length > 0)
|
nickjillings@1370
|
355 {
|
nickjillings@1370
|
356 testNode = this.testXML[0].getAllElementsByName(checkName);
|
nickjillings@1370
|
357 if(testNode.length != 0) {testNode = testNode[0];}
|
nickjillings@1370
|
358 else {testNode = undefined;}
|
nickjillings@1370
|
359 } else {
|
nickjillings@1370
|
360 testNode = undefined;
|
nickjillings@1370
|
361 }
|
nickjillings@2108
|
362 var obj = {
|
nickjillings@2108
|
363 root: document.createElement("div"),
|
nickjillings@2109
|
364 text: document.createElement("label"),
|
nickjillings@2108
|
365 input: document.createElement("input"),
|
nickjillings@2108
|
366 parent: this,
|
nickjillings@2108
|
367 name: checkName,
|
nickjillings@2108
|
368 handleEvent: function(event) {
|
nickjillings@2108
|
369 if (this.input.checked) {
|
nickjillings@2108
|
370 // Add to specification.interfaces.option
|
nickjillings@2108
|
371 var included = specification.interfaces.options.find(function(element,index,array){
|
nickjillings@2108
|
372 if (element.name == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
373 },this);
|
nickjillings@2108
|
374 if (included == null) {
|
nickjillings@2108
|
375 specification.interfaces.options.push({type:"check",name:this.name});
|
nickjillings@2108
|
376 }
|
nickjillings@2108
|
377 } else {
|
nickjillings@2108
|
378 // Remove from specification.interfaces.option
|
nickjillings@2108
|
379 var position = specification.interfaces.options.findIndex(function(element,index,array){
|
nickjillings@2108
|
380 if (element.name == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
381 },this);
|
nickjillings@2108
|
382 if (position >= 0) {
|
nickjillings@2108
|
383 specification.interfaces.options.splice(position,1);
|
nickjillings@2108
|
384 }
|
nickjillings@2108
|
385 }
|
nickjillings@2108
|
386 }
|
nickjillings@1370
|
387 }
|
nickjillings@2108
|
388
|
nickjillings@2108
|
389 obj.input.addEventListener("click",obj);
|
nickjillings@2108
|
390 obj.root.className = "popup-checkbox";
|
nickjillings@2108
|
391 obj.input.type = "checkbox";
|
nickjillings@2109
|
392 obj.input.setAttribute('id',checkName);
|
nickjillings@2109
|
393 obj.text.setAttribute("for",checkName);
|
nickjillings@2108
|
394 obj.text.textContent = this.checkText.getAllElementsByName(checkName)[0].textContent;
|
nickjillings@2108
|
395 obj.root.appendChild(obj.input);
|
nickjillings@2108
|
396 obj.root.appendChild(obj.text);
|
nickjillings@1370
|
397 if(testNode != undefined)
|
nickjillings@1370
|
398 {
|
nickjillings@2108
|
399 if (testNode.getAttribute('default') == 'on')
|
nickjillings@1370
|
400 {
|
nickjillings@2108
|
401 obj.input.checked = true;
|
nickjillings@1370
|
402 }
|
nickjillings@1370
|
403 if (testNode.getAttribute('support') == "none")
|
nickjillings@1370
|
404 {
|
nickjillings@2108
|
405 obj.input.disabled = true;
|
nickjillings@2108
|
406 obj.input.checked = false;
|
nickjillings@2108
|
407 obj.root.className = "popup-checkbox disabled";
|
nickjillings@1370
|
408 }else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@1370
|
409 {
|
nickjillings@2108
|
410 obj.input.disabled = true;
|
nickjillings@2108
|
411 obj.input.checked = true;
|
nickjillings@2108
|
412 obj.root.className = "popup-checkbox disabled";
|
nickjillings@2108
|
413 }
|
nickjillings@2108
|
414 } else {
|
nickjillings@2108
|
415 if (interfaceNode.getAttribute('default') == 'on')
|
nickjillings@2108
|
416 {
|
nickjillings@2108
|
417 obj.input.checked = true;
|
nickjillings@2108
|
418 }
|
nickjillings@2108
|
419 if (interfaceNode.getAttribute('support') == "none")
|
nickjillings@2108
|
420 {
|
nickjillings@2108
|
421 obj.input.disabled = true;
|
nickjillings@2108
|
422 obj.input.checked = false;
|
nickjillings@2108
|
423 obj.root.className = "popup-checkbox disabled";
|
nickjillings@2108
|
424 } else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@2108
|
425 {
|
nickjillings@2108
|
426 obj.input.disabled = true;
|
nickjillings@2108
|
427 obj.input.checked = true;
|
nickjillings@2108
|
428 obj.root.className = "popup-checkbox disabled";
|
nickjillings@1370
|
429 }
|
nickjillings@1370
|
430 }
|
nickjillings@2108
|
431 var included = specification.interfaces.options.find(function(element,index,array){
|
nickjillings@2108
|
432 if (element.name == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
433 },obj);
|
nickjillings@2108
|
434 if (included != undefined) {
|
nickjillings@2108
|
435 obj.input.checked = true;
|
nickjillings@2108
|
436 }
|
nickjillings@2108
|
437 obj.handleEvent();
|
nickjillings@2108
|
438 this.options.push(obj);
|
nickjillings@2108
|
439 this.dynamicContent.appendChild(obj.root);
|
nickjillings@1370
|
440 }
|
nickjillings@1370
|
441 }
|
nickjillings@1370
|
442 this.continue = function()
|
nickjillings@1370
|
443 {
|
nickjillings@1370
|
444 popupStateNodes.state[3].generate();
|
nickjillings@1370
|
445 popupObject.postNode(popupStateNodes.state[3]);
|
nickjillings@1370
|
446 }
|
nickjillings@2108
|
447 this.back = function() {
|
nickjillings@2108
|
448 popupObject.postNode(popupStateNodes.state[1]);
|
nickjillings@2108
|
449 }
|
nickjillings@1370
|
450 }
|
nickjillings@1370
|
451 this.state[3] = new function()
|
nickjillings@1370
|
452 {
|
nickjillings@1370
|
453 this.title = "Test Metrics";
|
nickjillings@1370
|
454 this.content = document.createElement("div");
|
nickjillings@1370
|
455 this.content.id = "state-1";
|
nickjillings@1370
|
456 var spnH = document.createElement('div');
|
nickjillings@1370
|
457 var span = document.createElement("span");
|
nickjillings@1370
|
458 span.textContent = "Select which data points to include in the exported results XML. Some of this is required for certain post script analysis. See the documentation for further details";
|
nickjillings@1370
|
459 spnH.appendChild(span);
|
nickjillings@1370
|
460 this.content.appendChild(spnH);
|
nickjillings@1370
|
461 this.options = [];
|
nickjillings@1370
|
462 this.checkText;
|
nickjillings@1370
|
463 this.testXML;
|
nickjillings@1370
|
464 this.interfaceXML;
|
nickjillings@2108
|
465 this.dynamicContent = document.createElement("div");
|
nickjillings@2108
|
466 this.content.appendChild(this.dynamicContent);
|
nickjillings@1370
|
467 this.generate = function()
|
nickjillings@1370
|
468 {
|
nickjillings@2108
|
469 this.options = [];
|
nickjillings@2108
|
470 this.dynamicContent.innerHTML = null;
|
nickjillings@1370
|
471 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
472 this.checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
473 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
474 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
475 this.testXML = this.testXML.getAllElementsByTagName("metrics");
|
nicholas@2390
|
476 var interfaceXMLChildren = this.interfaceXML.getElementsByTagName('entry');
|
nicholas@2390
|
477 for (var i=0; i<interfaceXMLChildren.length; i++)
|
nickjillings@1370
|
478 {
|
nicholas@2390
|
479 var interfaceNode = interfaceXMLChildren[i];
|
nickjillings@1370
|
480 var checkName = interfaceNode.getAttribute('name');
|
nickjillings@1370
|
481 var testNode
|
nickjillings@1370
|
482 if (this.testXML.length > 0)
|
nickjillings@1370
|
483 {
|
nickjillings@1370
|
484 testNode = this.testXML[0].getAllElementsByName(checkName);
|
nickjillings@1370
|
485 if(testNode.length != 0) {testNode = testNode[0];}
|
nickjillings@1370
|
486 else {testNode = undefined;}
|
nickjillings@1370
|
487 } else {
|
nickjillings@1370
|
488 testNode = undefined;
|
nickjillings@1370
|
489 }
|
nickjillings@2108
|
490 var obj = {
|
nickjillings@2108
|
491 root: document.createElement("div"),
|
nickjillings@2109
|
492 text: document.createElement("label"),
|
nickjillings@2108
|
493 input: document.createElement("input"),
|
nickjillings@2108
|
494 parent: this,
|
nickjillings@2108
|
495 name: checkName,
|
nickjillings@2108
|
496 handleEvent: function(event) {
|
nickjillings@2108
|
497 if (this.input.checked) {
|
nickjillings@2108
|
498 // Add to specification.interfaces.option
|
nickjillings@2108
|
499 var included = specification.metrics.enabled.find(function(element,index,array){
|
nickjillings@2108
|
500 if (element == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
501 },this);
|
nickjillings@2108
|
502 if (included == null) {
|
nickjillings@2108
|
503 specification.metrics.enabled.push(this.name);
|
nickjillings@2108
|
504 }
|
nickjillings@2108
|
505 } else {
|
nickjillings@2108
|
506 // Remove from specification.interfaces.option
|
nickjillings@2108
|
507 var position = specification.metrics.enabled.findIndex(function(element,index,array){
|
nickjillings@2108
|
508 if (element == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
509 },this);
|
nickjillings@2108
|
510 if (position >= 0) {
|
nickjillings@2108
|
511 specification.metrics.enabled.splice(position,1);
|
nickjillings@2108
|
512 }
|
nickjillings@2108
|
513 }
|
nickjillings@2108
|
514 }
|
nickjillings@1370
|
515 }
|
nickjillings@2108
|
516
|
nickjillings@2108
|
517 obj.input.addEventListener("click",obj);
|
nickjillings@2108
|
518 obj.root.className = "popup-checkbox";
|
nickjillings@2108
|
519 obj.input.type = "checkbox";
|
nickjillings@2109
|
520 obj.input.setAttribute('id',checkName);
|
nickjillings@2109
|
521 obj.text.setAttribute("for",checkName);
|
nickjillings@2108
|
522 obj.text.textContent = this.checkText.getAllElementsByName(checkName)[0].textContent;
|
nickjillings@2108
|
523 obj.root.appendChild(obj.input);
|
nickjillings@2108
|
524 obj.root.appendChild(obj.text);
|
nickjillings@1370
|
525 if(testNode != undefined)
|
nickjillings@1370
|
526 {
|
nickjillings@2108
|
527 if (testNode.getAttribute('default') == 'on')
|
nickjillings@1370
|
528 {
|
nickjillings@2108
|
529 obj.input.checked = true;
|
nickjillings@1370
|
530 }
|
nickjillings@1370
|
531 if (testNode.getAttribute('support') == "none")
|
nickjillings@1370
|
532 {
|
nickjillings@2108
|
533 obj.input.disabled = true;
|
nickjillings@2108
|
534 obj.input.checked = false;
|
nickjillings@2108
|
535 obj.root.className = "popup-checkbox disabled";
|
nickjillings@1370
|
536 }else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@1370
|
537 {
|
nickjillings@2108
|
538 obj.input.disabled = true;
|
nickjillings@2108
|
539 obj.input.checked = true;
|
nickjillings@2108
|
540 obj.root.className = "popup-checkbox disabled";
|
nickjillings@2108
|
541 }
|
nickjillings@2108
|
542 } else {
|
nickjillings@2108
|
543 if (interfaceNode.getAttribute('default') == 'on')
|
nickjillings@2108
|
544 {
|
nickjillings@2108
|
545 obj.input.checked = true;
|
nickjillings@2108
|
546 }
|
nickjillings@2108
|
547 if (interfaceNode.getAttribute('support') == "none")
|
nickjillings@2108
|
548 {
|
nickjillings@2108
|
549 obj.input.disabled = true;
|
nickjillings@2108
|
550 obj.input.checked = false;
|
nickjillings@2108
|
551 obj.root.className = "popup-checkbox disabled";
|
nickjillings@2108
|
552 } else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@2108
|
553 {
|
nickjillings@2108
|
554 obj.input.disabled = true;
|
nickjillings@2108
|
555 obj.input.checked = true;
|
nickjillings@2108
|
556 obj.root.className = "popup-checkbox disabled";
|
nickjillings@1370
|
557 }
|
nickjillings@1370
|
558 }
|
nickjillings@2108
|
559 var included = specification.metrics.enabled.find(function(element,index,array){
|
nickjillings@2108
|
560 if (element == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
561 },obj);
|
nickjillings@2108
|
562 obj.handleEvent();
|
nickjillings@2108
|
563 if (included != undefined) {
|
nickjillings@2108
|
564 obj.input.checked = true;
|
nickjillings@2108
|
565 }
|
nickjillings@2108
|
566 this.options.push(obj);
|
nickjillings@2108
|
567 this.dynamicContent.appendChild(obj.root);
|
nickjillings@1370
|
568 }
|
nickjillings@1370
|
569 }
|
nickjillings@1370
|
570 this.continue = function()
|
nickjillings@1370
|
571 {
|
nickjillings@1370
|
572 popupStateNodes.state[4].generate();
|
nickjillings@1370
|
573 popupObject.postNode(popupStateNodes.state[4]);
|
nickjillings@1370
|
574 }
|
nickjillings@2108
|
575 this.back = function() {
|
nickjillings@2108
|
576 popupObject.postNode(popupStateNodes.state[2]);
|
nickjillings@2108
|
577 }
|
nickjillings@1370
|
578 }
|
nickjillings@1370
|
579 this.state[4] = new function()
|
nickjillings@1370
|
580 {
|
nickjillings@1370
|
581 this.title = "Test Visuals";
|
nickjillings@1370
|
582 this.content = document.createElement("div");
|
nickjillings@1370
|
583 this.content.id = "state-1";
|
nickjillings@1370
|
584 var spnH = document.createElement('div');
|
nickjillings@1370
|
585 var span = document.createElement("span");
|
nickjillings@1370
|
586 span.textContent = "You can display extra visual content with your interface for the test user to interact with. Select from the available options below. Greyed out options are unavailable for your selected interface";
|
nickjillings@1370
|
587 spnH.appendChild(span);
|
nickjillings@1370
|
588 this.content.appendChild(spnH);
|
nickjillings@1370
|
589 this.options = [];
|
nickjillings@1370
|
590 this.checkText;
|
nickjillings@1370
|
591 this.testXML;
|
nickjillings@1370
|
592 this.interfaceXML;
|
nickjillings@2108
|
593 this.dynamicContent = document.createElement("div");
|
nickjillings@2108
|
594 this.content.appendChild(this.dynamicContent);
|
nickjillings@1370
|
595 this.generate = function()
|
nickjillings@1370
|
596 {
|
nickjillings@2108
|
597 this.options = [];
|
nickjillings@2108
|
598 this.dynamicContent.innerHTML = null;
|
nickjillings@1370
|
599 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
600 this.checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
601 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
602 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("show")[0];
|
nickjillings@2108
|
603 this.testXML = this.testXML.getAllElementsByTagName("show");
|
nicholas@2390
|
604 var interfaceXMLChildren = this.interfaceXML.getElementsByTagName('entry');
|
nicholas@2390
|
605 for (var i=0; i<interfaceXMLChildren.length; i++)
|
nickjillings@1370
|
606 {
|
nicholas@2390
|
607 var interfaceNode = interfaceXMLChildren[i];
|
nickjillings@1370
|
608 var checkName = interfaceNode.getAttribute('name');
|
nickjillings@1370
|
609 var testNode
|
nickjillings@1370
|
610 if (this.testXML.length > 0)
|
nickjillings@1370
|
611 {
|
nickjillings@1370
|
612 testNode = this.testXML[0].getAllElementsByName(checkName);
|
nickjillings@1370
|
613 if(testNode.length != 0) {testNode = testNode[0];}
|
nickjillings@1370
|
614 else {testNode = undefined;}
|
nickjillings@1370
|
615 } else {
|
nickjillings@1370
|
616 testNode = undefined;
|
nickjillings@1370
|
617 }
|
nickjillings@2108
|
618 var obj = {
|
nickjillings@2108
|
619 root: document.createElement("div"),
|
nickjillings@2109
|
620 text: document.createElement("label"),
|
nickjillings@2108
|
621 input: document.createElement("input"),
|
nickjillings@2108
|
622 parent: this,
|
nickjillings@2108
|
623 name: checkName,
|
nickjillings@2108
|
624 handleEvent: function(event) {
|
nickjillings@2108
|
625 if (this.input.checked) {
|
nickjillings@2108
|
626 // Add to specification.interfaces.option
|
nickjillings@2108
|
627 var included = specification.interfaces.options.find(function(element,index,array){
|
nickjillings@2108
|
628 if (element.name == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
629 },this);
|
nickjillings@2108
|
630 if (included == null) {
|
nickjillings@2108
|
631 specification.interfaces.options.push({type:"show",name:this.name});
|
nickjillings@2108
|
632 }
|
nickjillings@2108
|
633 } else {
|
nickjillings@2108
|
634 // Remove from specification.interfaces.option
|
nickjillings@2108
|
635 var position = specification.interfaces.options.findIndex(function(element,index,array){
|
nickjillings@2108
|
636 if (element.name == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
637 },this);
|
nickjillings@2108
|
638 if (position >= 0) {
|
nickjillings@2108
|
639 specification.interfaces.options.splice(position,1);
|
nickjillings@2108
|
640 }
|
nickjillings@2108
|
641 }
|
nickjillings@2108
|
642 }
|
nickjillings@1370
|
643 }
|
nickjillings@2108
|
644
|
nickjillings@2108
|
645 obj.input.addEventListener("click",obj);
|
nickjillings@2108
|
646 obj.root.className = "popup-checkbox";
|
nickjillings@2108
|
647 obj.input.type = "checkbox";
|
nickjillings@2109
|
648 obj.input.setAttribute('id',checkName);
|
nickjillings@2109
|
649 obj.text.setAttribute("for",checkName);
|
nickjillings@2108
|
650 obj.text.textContent = this.checkText.getAllElementsByName(checkName)[0].textContent;
|
nickjillings@2108
|
651 obj.root.appendChild(obj.input);
|
nickjillings@2108
|
652 obj.root.appendChild(obj.text);
|
nickjillings@1370
|
653 if(testNode != undefined)
|
nickjillings@1370
|
654 {
|
nickjillings@2108
|
655 if (testNode.getAttribute('default') == 'on')
|
nickjillings@1370
|
656 {
|
nickjillings@2108
|
657 obj.input.checked = true;
|
nickjillings@1370
|
658 }
|
nickjillings@1370
|
659 if (testNode.getAttribute('support') == "none")
|
nickjillings@1370
|
660 {
|
nickjillings@2108
|
661 obj.input.disabled = true;
|
nickjillings@2108
|
662 obj.input.checked = false;
|
nickjillings@2108
|
663 obj.root.className = "popup-checkbox disabled";
|
nickjillings@1370
|
664 }else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@1370
|
665 {
|
nickjillings@2108
|
666 obj.input.disabled = true;
|
nickjillings@2108
|
667 obj.input.checked = true;
|
nickjillings@2108
|
668 obj.root.className = "popup-checkbox disabled";
|
nickjillings@2108
|
669 }
|
nickjillings@2108
|
670 } else {
|
nickjillings@2108
|
671 if (interfaceNode.getAttribute('default') == 'on')
|
nickjillings@2108
|
672 {
|
nickjillings@2108
|
673 obj.input.checked = true;
|
nickjillings@2108
|
674 }
|
nickjillings@2108
|
675 if (interfaceNode.getAttribute('support') == "none")
|
nickjillings@2108
|
676 {
|
nickjillings@2108
|
677 obj.input.disabled = true;
|
nickjillings@2108
|
678 obj.input.checked = false;
|
nickjillings@2108
|
679 obj.root.className = "popup-checkbox disabled";
|
nickjillings@2108
|
680 } else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@2108
|
681 {
|
nickjillings@2108
|
682 obj.input.disabled = true;
|
nickjillings@2108
|
683 obj.input.checked = true;
|
nickjillings@2108
|
684 obj.root.className = "popup-checkbox disabled";
|
nickjillings@1370
|
685 }
|
nickjillings@1370
|
686 }
|
nickjillings@2108
|
687 var included = specification.interfaces.options.find(function(element,index,array){
|
nickjillings@2108
|
688 if (element.name == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
689 },obj);
|
nickjillings@2108
|
690 if (included != undefined) {
|
nickjillings@2108
|
691 obj.input.checked = true;
|
nickjillings@2108
|
692 }
|
nickjillings@2108
|
693 obj.handleEvent();
|
nickjillings@2108
|
694 this.options.push(obj);
|
nickjillings@2108
|
695 this.dynamicContent.appendChild(obj.root);
|
nickjillings@1370
|
696 }
|
nickjillings@1370
|
697 }
|
nickjillings@1370
|
698 this.continue = function()
|
nickjillings@1370
|
699 {
|
nickjillings@1370
|
700 popupObject.hide();
|
nickjillings@1370
|
701 convert.convert(document.getElementById('content'));
|
nickjillings@1370
|
702 }
|
nickjillings@2108
|
703 this.back = function() {
|
nickjillings@2108
|
704 popupObject.postNode(popupStateNodes.state[3]);
|
nickjillings@2108
|
705 }
|
nickjillings@1370
|
706 }
|
nickjillings@1370
|
707 this.state[5] = new function() {
|
nickjillings@1370
|
708 this.title = "Add/Edit Survey Element";
|
nickjillings@1370
|
709 this.content = document.createElement("div");
|
nickjillings@1370
|
710 this.content.id = "state-1";
|
nickjillings@1370
|
711 var spnH = document.createElement('div');
|
nickjillings@1370
|
712 var span = document.createElement("span");
|
nickjillings@1370
|
713 span.textContent = "You can configure your survey element here. Press 'Continue' to complete your changes.";
|
nickjillings@1370
|
714 spnH.appendChild(span);
|
nickjillings@1370
|
715 this.content.appendChild(spnH);
|
nickjillings@1370
|
716 this.dynamic = document.createElement("div");
|
nickjillings@1370
|
717 this.option = null;
|
nickjillings@1370
|
718 this.parent = null;
|
nickjillings@1375
|
719 this.optionLists = [];
|
nickjillings@2158
|
720 this.select = document.createElement("select");
|
nickjillings@2158
|
721 this.select.setAttribute("name","type");
|
nickjillings@2158
|
722 this.select.addEventListener("change",this,false);
|
nickjillings@2158
|
723 this.content.appendChild(this.select);
|
nickjillings@1370
|
724 this.content.appendChild(this.dynamic);
|
nickjillings@1370
|
725 this.generate = function(option, parent)
|
nickjillings@1370
|
726 {
|
nickjillings@1370
|
727 this.option = option;
|
nickjillings@1370
|
728 this.parent = parent;
|
nickjillings@2158
|
729 if (this.select.childElementCount == 0) {
|
nickjillings@2158
|
730 var optionList = specification.schema.getAllElementsByName("survey")[0].getAllElementsByName("type")[0].getAllElementsByTagName("xs:enumeration");
|
nickjillings@2158
|
731 for (var i=0; i<optionList.length; i++)
|
nickjillings@2158
|
732 {
|
nickjillings@2158
|
733 var selectOption = document.createElement("option");
|
nickjillings@2158
|
734 selectOption.value = optionList[i].getAttribute("value");
|
nickjillings@2158
|
735 selectOption.textContent = selectOption.value;
|
nickjillings@2158
|
736 this.select.appendChild(selectOption);
|
nickjillings@2158
|
737 }
|
nickjillings@1370
|
738 }
|
nickjillings@1370
|
739 if (this.option.type != undefined){
|
nickjillings@2158
|
740 this.select.value = this.option.type
|
nickjillings@1370
|
741 } else {
|
nickjillings@2158
|
742 this.select.value = "statement";
|
nickjillings@1370
|
743 this.option.type = "statement";
|
nickjillings@1370
|
744 }
|
nickjillings@1370
|
745
|
nickjillings@1370
|
746 this.dynamic.innerHTML = null;
|
nickjillings@1370
|
747 var statement = document.createElement("div");
|
nickjillings@1370
|
748 var statementText = document.createElement("span");
|
nickjillings@2159
|
749 var statementEntry = document.createElement("input");
|
nickjillings@1370
|
750 statement.appendChild(statementText);
|
nickjillings@1370
|
751 statement.appendChild(statementEntry);
|
nickjillings@2159
|
752 statement.className = "survey-entry-attribute";
|
nickjillings@1370
|
753 statementText.textContent = "Statement/Question";
|
nickjillings@2159
|
754 statementEntry.style.width = "500px";
|
nickjillings@1370
|
755 statementEntry.addEventListener("change",this,false);
|
nickjillings@1370
|
756 statementEntry.setAttribute("name","statement");
|
nickjillings@1370
|
757 statementEntry.value = this.option.statement;
|
nickjillings@1370
|
758 this.dynamic.appendChild(statement);
|
nickjillings@1375
|
759
|
nickjillings@1375
|
760 var id = document.createElement("div");
|
nickjillings@1375
|
761 var idText = document.createElement("span");
|
nickjillings@1375
|
762 var idEntry = document.createElement("input");
|
nickjillings@1375
|
763 id.appendChild(idText);
|
nickjillings@1375
|
764 id.appendChild(idEntry);
|
nickjillings@2159
|
765 id.className = "survey-entry-attribute";
|
nickjillings@1375
|
766 idText.textContent = "ID: ";
|
nickjillings@1375
|
767 idEntry.addEventListener("change",this,false);
|
nickjillings@1375
|
768 idEntry.setAttribute("name","id");
|
nickjillings@1375
|
769 idEntry.value = this.option.id;
|
nickjillings@1375
|
770
|
nickjillings@2158
|
771 this.dynamic.appendChild(id);
|
nickjillings@2158
|
772
|
nickjillings@1370
|
773 switch(this.option.type)
|
nickjillings@1370
|
774 {
|
nickjillings@1370
|
775 case "statement":
|
nickjillings@1370
|
776 break;
|
nickjillings@1370
|
777 case "question":
|
nickjillings@1370
|
778 var boxsizeSelect = document.createElement("select");
|
nickjillings@1370
|
779 var optionList = specification.schema.getAllElementsByName("survey")[0].getAllElementsByName("boxsize")[0].getAllElementsByTagName("xs:enumeration");
|
nickjillings@1370
|
780 for (var i=0; i<optionList.length; i++)
|
nickjillings@1370
|
781 {
|
nickjillings@1370
|
782 var selectOption = document.createElement("option");
|
nickjillings@1370
|
783 selectOption.value = optionList[i].getAttribute("value");
|
nickjillings@1370
|
784 selectOption.textContent = selectOption.value;
|
nickjillings@1370
|
785 boxsizeSelect.appendChild(selectOption);
|
nickjillings@1370
|
786 }
|
nickjillings@1370
|
787 if(this.option.boxsize != undefined) {
|
nickjillings@1370
|
788 boxsizeSelect.value = this.option.boxsize;
|
nickjillings@1370
|
789 } else {
|
nickjillings@1370
|
790 boxsizeSelect.value = "normal";
|
nickjillings@1370
|
791 this.option.boxsize = "normal";
|
nickjillings@1370
|
792 }
|
nickjillings@1370
|
793 boxsizeSelect.setAttribute("name","boxsize");
|
nickjillings@1370
|
794 boxsizeSelect.addEventListener("change",this,false);
|
nickjillings@1370
|
795 var boxsize = document.createElement("div");
|
nickjillings@1370
|
796 var boxsizeText = document.createElement("span");
|
nickjillings@1370
|
797 boxsizeText.textContent = "Entry Size: ";
|
nickjillings@1370
|
798 boxsize.appendChild(boxsizeText);
|
nickjillings@1370
|
799 boxsize.appendChild(boxsizeSelect);
|
nickjillings@2159
|
800 boxsize.className = "survey-entry-attribute";
|
nickjillings@1370
|
801 this.dynamic.appendChild(boxsize);
|
nickjillings@1370
|
802
|
nickjillings@1370
|
803 var mandatory = document.createElement("div");
|
nickjillings@1370
|
804 var mandatoryInput = document.createElement("input");
|
nickjillings@1370
|
805 var mandatoryText = document.createElement("span");
|
nickjillings@1370
|
806 mandatoryText.textContent = "Mandatory: ";
|
nickjillings@1370
|
807 mandatory.appendChild(mandatoryText);
|
nickjillings@1370
|
808 mandatory.appendChild(mandatoryInput);
|
nickjillings@2159
|
809 mandatory.className = "survey-entry-attribute";
|
nickjillings@1370
|
810 mandatoryInput.type = "checkbox";
|
nickjillings@1370
|
811 if (this.option.mandatory) {mandatoryInput.checked = true;} else {mandatoryInput.checked = false;}
|
nickjillings@1370
|
812 mandatoryInput.setAttribute("name","mandatory");
|
nickjillings@1370
|
813 mandatoryInput.addEventListener("change",this,false);
|
nickjillings@1375
|
814 this.dynamic.appendChild(mandatory);
|
nickjillings@1375
|
815 break;
|
nickjillings@1375
|
816 case "number":
|
nickjillings@1375
|
817 this.dynamic.appendChild(id);
|
nickjillings@1375
|
818
|
nickjillings@1375
|
819 var mandatory = document.createElement("div");
|
nickjillings@1375
|
820 var mandatoryInput = document.createElement("input");
|
nickjillings@1375
|
821 var mandatoryText = document.createElement("span");
|
nickjillings@1375
|
822 mandatoryText.textContent = "Mandatory: ";
|
nickjillings@1370
|
823 mandatory.appendChild(mandatoryText);
|
nickjillings@1370
|
824 mandatory.appendChild(mandatoryInput);
|
nickjillings@2159
|
825 mandatory.className = "survey-entry-attribute";
|
nickjillings@1375
|
826 mandatoryInput.type = "checkbox";
|
nickjillings@1375
|
827 if (this.option.mandatory) {mandatoryInput.checked = true;} else {mandatoryInput.checked = false;}
|
nickjillings@1375
|
828 mandatoryInput.setAttribute("name","mandatory");
|
nickjillings@1375
|
829 mandatoryInput.addEventListener("change",this,false);
|
nickjillings@1370
|
830 this.dynamic.appendChild(mandatory);
|
nickjillings@1375
|
831
|
nickjillings@1375
|
832 var minimum = document.createElement("div");
|
nickjillings@1375
|
833 var minimumEntry = document.createElement("input");
|
nickjillings@1375
|
834 var minimumText = document.createElement("span");
|
nickjillings@1375
|
835 minimumText.textContent = "Minimum: ";
|
nickjillings@1375
|
836 minimum.appendChild(minimumText);
|
nickjillings@1375
|
837 minimum.appendChild(minimumEntry);
|
nickjillings@2159
|
838 minimum.className = "survey-entry-attribute";
|
nickjillings@1375
|
839 minimumEntry.type = "number";
|
nickjillings@1375
|
840 minimumEntry.setAttribute("name","min");
|
nickjillings@1375
|
841 minimumEntry.addEventListener("change",this,false);
|
nickjillings@1375
|
842 minimumEntry.value = this.option.min;
|
nickjillings@1375
|
843 this.dynamic.appendChild(minimum);
|
nickjillings@1375
|
844
|
nickjillings@1375
|
845 var maximum = document.createElement("div");
|
nickjillings@1375
|
846 var maximumEntry = document.createElement("input");
|
nickjillings@1375
|
847 var maximumText = document.createElement("span");
|
nickjillings@1375
|
848 maximumText.textContent = "Maximum: ";
|
nickjillings@1375
|
849 maximum.appendChild(maximumText);
|
nickjillings@1375
|
850 maximum.appendChild(maximumEntry);
|
nickjillings@2159
|
851 maximum.className = "survey-entry-attribute";
|
nickjillings@1375
|
852 maximumEntry.type = "number";
|
nickjillings@1375
|
853 maximumEntry.setAttribute("name","max");
|
nickjillings@1375
|
854 maximumEntry.addEventListener("change",this,false);
|
nickjillings@1375
|
855 maximumEntry.value = this.option.max;
|
nickjillings@1375
|
856 this.dynamic.appendChild(maximum);
|
nickjillings@1370
|
857 break;
|
nicholas@2562
|
858 case "video":
|
nicholas@2562
|
859 case "youtube":
|
nicholas@2562
|
860 this.dynamic.appendChild(id);
|
nicholas@2562
|
861
|
nicholas@2562
|
862 var mandatory = document.createElement("div");
|
nicholas@2562
|
863 var mandatoryInput = document.createElement("input");
|
nicholas@2562
|
864 var mandatoryText = document.createElement("span");
|
nicholas@2562
|
865 mandatoryText.textContent = "Mandatory: ";
|
nicholas@2562
|
866 mandatory.appendChild(mandatoryText);
|
nicholas@2562
|
867 mandatory.appendChild(mandatoryInput);
|
nicholas@2562
|
868 mandatory.className = "survey-entry-attribute";
|
nicholas@2562
|
869 mandatoryInput.type = "checkbox";
|
nicholas@2562
|
870 if (this.option.mandatory) {mandatoryInput.checked = true;} else {mandatoryInput.checked = false;}
|
nicholas@2562
|
871 mandatoryInput.setAttribute("name","mandatory");
|
nicholas@2562
|
872 mandatoryInput.addEventListener("change",this,false);
|
nicholas@2562
|
873 this.dynamic.appendChild(mandatory);
|
nicholas@2562
|
874
|
nicholas@2562
|
875 var url = document.createElement("div");
|
nicholas@2562
|
876 var urlInput = document.createElement("input");
|
nicholas@2562
|
877 var urlText = document.createElement("span");
|
nicholas@2562
|
878 urlText.textContent = "URL: ";
|
nicholas@2562
|
879 url.appendChild(urlText);
|
nicholas@2562
|
880 url.appendChild(urlInput);
|
nicholas@2562
|
881 url.className = "survey-entry-attribute";
|
nicholas@2562
|
882 urlInput.type = "text";
|
nicholas@2562
|
883 if (this.option.mandatory) {urlInput.value = this.option.mandatory;} else {urlInput.value = "";}
|
nicholas@2562
|
884 urlInput.setAttribute("name","url");
|
nicholas@2562
|
885 urlInput.addEventListener("change",this,false);
|
nicholas@2562
|
886 this.dynamic.appendChild(url);
|
nicholas@2562
|
887 break;
|
nickjillings@1375
|
888 case "checkbox":
|
nickjillings@1375
|
889 case "radio":
|
nickjillings@1375
|
890 this.dynamic.appendChild(id);
|
nickjillings@1375
|
891 var optionHolder = document.createElement("div");
|
nickjillings@1375
|
892 optionHolder.className = 'node';
|
nickjillings@1375
|
893 optionHolder.id = 'popup-option-holder';
|
nickjillings@1375
|
894 var optionObject = function(parent,option) {
|
nickjillings@1375
|
895 this.rootDOM = document.createElement("div");
|
nickjillings@1375
|
896 this.rootDOM.className = "popup-option-entry";
|
nickjillings@1375
|
897 this.inputName = document.createElement("input");
|
nickjillings@1375
|
898 this.inputName.setAttribute("name","name");
|
nickjillings@1375
|
899 this.inputLabel = document.createElement("input");
|
nickjillings@1375
|
900 this.inputLabel.setAttribute("name","text");
|
nickjillings@1375
|
901 this.specification = option;
|
nickjillings@1375
|
902 this.parent = parent;
|
nickjillings@1375
|
903 this.handleEvent = function()
|
nickjillings@1375
|
904 {
|
nickjillings@1375
|
905 var target = event.currentTarget.getAttribute("name");
|
nickjillings@1375
|
906 eval("this.specification."+target+" = event.currentTarget.value");
|
nickjillings@1375
|
907 };
|
nickjillings@1375
|
908
|
nickjillings@1375
|
909 var nameText = document.createElement("span");
|
nickjillings@1375
|
910 nameText.textContent = "Name: ";
|
nickjillings@1375
|
911 var labelText = document.createElement("span");
|
nickjillings@1375
|
912 labelText.textContent = "Label: ";
|
nickjillings@1375
|
913 this.rootDOM.appendChild(nameText);
|
nickjillings@1375
|
914 this.rootDOM.appendChild(this.inputName);
|
nickjillings@1375
|
915 this.rootDOM.appendChild(labelText);
|
nickjillings@1375
|
916 this.rootDOM.appendChild(this.inputLabel);
|
nickjillings@1375
|
917 this.inputName.addEventListener("change",this,false);
|
nickjillings@1375
|
918 this.inputLabel.addEventListener("change",this,false);
|
nickjillings@1375
|
919 this.inputName.value = this.specification.name;
|
nickjillings@1375
|
920 this.inputLabel.value = this.specification.text;
|
nickjillings@2180
|
921 this.inputLabel.style.width = "350px";
|
nickjillings@1375
|
922
|
nickjillings@1375
|
923 this.deleteEntry = {
|
nickjillings@1375
|
924 root: document.createElement("button"),
|
nickjillings@1375
|
925 parent: this,
|
nickjillings@1375
|
926 handleEvent: function() {
|
nickjillings@1375
|
927 document.getElementById("popup-option-holder").removeChild(this.parent.rootDOM);
|
nickjillings@1375
|
928 var index = this.parent.parent.option.options.findIndex(function(element,index,array){
|
nickjillings@1375
|
929 if (element == this.parent.specification)
|
nickjillings@1375
|
930 return true;
|
nickjillings@1375
|
931 else
|
nickjillings@1375
|
932 return false;
|
nickjillings@1375
|
933 },this);
|
nickjillings@1375
|
934 var optionList = this.parent.parent.option.options;
|
nickjillings@1375
|
935 if (index == optionList.length-1) {
|
nickjillings@1375
|
936 optionList = optionList.slice(0,index);
|
nickjillings@1375
|
937 } else {
|
nickjillings@1375
|
938 optionList = optionList.slice(0,index).concat(optionList.slice(index+1));
|
nickjillings@1375
|
939 }
|
nickjillings@1375
|
940 this.parent.parent.option.options = optionList;
|
nickjillings@1375
|
941 }
|
nickjillings@1375
|
942 };
|
nickjillings@1375
|
943 this.deleteEntry.root.textContent = "Delete Option";
|
nickjillings@1375
|
944 this.deleteEntry.root.addEventListener("click",this.deleteEntry,false);
|
nickjillings@1375
|
945 this.rootDOM.appendChild(this.deleteEntry.root);
|
nickjillings@1375
|
946 }
|
nickjillings@2158
|
947 this.addEntry = {
|
nickjillings@2158
|
948 parent: this,
|
nickjillings@2158
|
949 root: document.createElement("button"),
|
nickjillings@2158
|
950 handleEvent: function() {
|
nickjillings@2158
|
951 var node = {name: "name", text: "text"};
|
nickjillings@2158
|
952 var optionsList = this.parent.option.options;
|
nickjillings@2158
|
953 optionsList.push(node);
|
nickjillings@2158
|
954 var obj = new optionObject(this.parent,optionsList[optionsList.length-1]);
|
nickjillings@2158
|
955 this.parent.optionLists.push(obj);
|
nickjillings@2158
|
956 document.getElementById("popup-option-holder").appendChild(obj.rootDOM);
|
nickjillings@2158
|
957 }
|
nickjillings@2158
|
958 }
|
nickjillings@2158
|
959 this.addEntry.root.textContent = "Add Option";
|
nickjillings@2158
|
960 this.addEntry.root.addEventListener("click",this.addEntry);
|
nickjillings@2158
|
961 this.dynamic.appendChild(this.addEntry.root);
|
nickjillings@1375
|
962 for (var i=0; i<this.option.options.length; i++)
|
nickjillings@1375
|
963 {
|
nickjillings@1375
|
964 var obj = new optionObject(this,this.option.options[i]);
|
nickjillings@1375
|
965 this.optionLists.push(obj);
|
nickjillings@1375
|
966 optionHolder.appendChild(obj.rootDOM);
|
nickjillings@1375
|
967 }
|
nickjillings@1375
|
968 this.dynamic.appendChild(optionHolder);
|
nickjillings@1370
|
969 }
|
nickjillings@1370
|
970 }
|
nicholas@2562
|
971 this.handleEvent = function(event)
|
nickjillings@1370
|
972 {
|
nickjillings@1370
|
973 var name = event.currentTarget.getAttribute("name");
|
nickjillings@2159
|
974 var nodeName = event.currentTarget.nodeName;
|
nickjillings@2159
|
975 if (name == "type" && nodeName == "SELECT") {
|
nickjillings@2159
|
976 // If type has changed, we may need to rebuild the entire state node
|
nickjillings@2159
|
977 if (event.currentTarget.value != this.option.name)
|
nickjillings@2159
|
978 {
|
nickjillings@2159
|
979 this.option.type = event.currentTarget.value;
|
nickjillings@2159
|
980 this.generate(this.option,this.parent);
|
nickjillings@2159
|
981 }
|
nickjillings@2159
|
982 return;
|
nickjillings@2159
|
983 }
|
nickjillings@2162
|
984 switch(event.currentTarget.getAttribute("type")) {
|
nickjillings@2159
|
985 case "checkbox":
|
nickjillings@2159
|
986 eval("this.option."+name+" = event.currentTarget.checked");
|
nickjillings@1370
|
987 break;
|
nickjillings@2159
|
988 default:
|
nickjillings@2159
|
989 eval("this.option."+name+" = event.currentTarget.value");
|
nickjillings@1370
|
990 break;
|
nickjillings@1370
|
991 }
|
nickjillings@1370
|
992 }
|
nickjillings@1370
|
993 this.continue = function()
|
nickjillings@1370
|
994 {
|
nickjillings@1375
|
995 if (this.parent.type == "surveyNode")
|
nickjillings@1375
|
996 {
|
nickjillings@1375
|
997 var newNode = new this.parent.surveyEntryNode(this.parent,this.option);
|
nickjillings@1375
|
998 this.parent.children.push(newNode);
|
nickjillings@1375
|
999 this.parent.childrenDOM.appendChild(newNode.rootDOM);
|
nickjillings@1375
|
1000 } else if (this.parent.type == "surveyEntryNode") {
|
nickjillings@1375
|
1001 this.parent.build();
|
nickjillings@1375
|
1002 }
|
nickjillings@1370
|
1003 popupObject.hide();
|
nickjillings@1370
|
1004 }
|
nickjillings@1370
|
1005 }
|
nickjillings@1385
|
1006 this.state[6] = new function() {
|
nickjillings@1385
|
1007 this.title = "Edit Scale Markers";
|
nickjillings@1385
|
1008 this.content = document.createElement("div");
|
nickjillings@1385
|
1009 this.content.id = "state-6";
|
nickjillings@1385
|
1010 var spnH = document.createElement('div');
|
nickjillings@1385
|
1011 var span = document.createElement("span");
|
nickjillings@1385
|
1012 span.textContent = "You can edit your scale markers here for the selected interface.";
|
nickjillings@1385
|
1013 spnH.appendChild(span);
|
nickjillings@1385
|
1014 this.scaleRoot;
|
nickjillings@1385
|
1015 this.parent;
|
nickjillings@1385
|
1016 this.markerNodes =[];
|
nickjillings@1385
|
1017 this.preset = {
|
nickjillings@1385
|
1018 input: document.createElement("select"),
|
nickjillings@1385
|
1019 parent: this,
|
nickjillings@1385
|
1020 handleEvent: function(event) {
|
nickjillings@1385
|
1021 this.parent.scaleRoot.scales = [];
|
nickjillings@1385
|
1022 var protoScale = interfaceSpecs.getAllElementsByTagName('scaledefinitions')[0].getAllElementsByName(event.currentTarget.value)[0];
|
nicholas@2390
|
1023 var protoMarkers = protoScale.getElementsByTagName("scale");
|
nickjillings@1385
|
1024 for (var i=0; i<protoMarkers.length; i++)
|
nickjillings@1385
|
1025 {
|
nickjillings@1385
|
1026 var marker = {
|
nickjillings@1385
|
1027 position: protoMarkers[i].getAttribute("position"),
|
nickjillings@1385
|
1028 text: protoMarkers[i].textContent
|
nickjillings@1385
|
1029 }
|
nickjillings@1385
|
1030 this.parent.scaleRoot.scales.push(marker);
|
nickjillings@1385
|
1031 }
|
nickjillings@1385
|
1032 this.parent.buildMarkerList();
|
nickjillings@1385
|
1033 }
|
nickjillings@1385
|
1034 }
|
nickjillings@1385
|
1035 this.preset.input.addEventListener("change",this.preset);
|
nickjillings@1385
|
1036 this.content.appendChild(this.preset.input);
|
nickjillings@1385
|
1037 var optionHolder = document.createElement("div");
|
nickjillings@1385
|
1038 optionHolder.className = 'node';
|
nickjillings@1385
|
1039 optionHolder.id = 'popup-option-holder';
|
nickjillings@1385
|
1040 this.content.appendChild(optionHolder);
|
nickjillings@1385
|
1041 this.generate = function(scaleRoot,parent)
|
nickjillings@1385
|
1042 {
|
nickjillings@1385
|
1043 this.scaleRoot = scaleRoot;
|
nickjillings@1385
|
1044 this.parent = parent;
|
nickjillings@1385
|
1045
|
nickjillings@1385
|
1046 // Generate Pre-Set dropdown
|
nicholas@2390
|
1047 var protoScales = interfaceSpecs.getAllElementsByTagName('scaledefinitions')[0].getElementsByTagName("scale");
|
nickjillings@1385
|
1048 this.preset.input.innerHTML = "";
|
nickjillings@1385
|
1049
|
nickjillings@1385
|
1050 for (var i=0; i<protoScales.length; i++)
|
nickjillings@1385
|
1051 {
|
nickjillings@1385
|
1052 var selectOption = document.createElement("option");
|
nickjillings@1385
|
1053 var scaleName = protoScales[i].getAttribute("name");
|
nickjillings@1385
|
1054 selectOption.setAttribute("name",scaleName);
|
nickjillings@1385
|
1055 selectOption.textContent = scaleName;
|
nickjillings@1385
|
1056 this.preset.input.appendChild(selectOption);
|
nickjillings@1385
|
1057 }
|
nickjillings@1385
|
1058
|
nickjillings@2115
|
1059 this.addMarker = {
|
nickjillings@2115
|
1060 root: document.createElement("button"),
|
nickjillings@2115
|
1061 parent: this,
|
nickjillings@2115
|
1062 handleEvent: function() {
|
nickjillings@2115
|
1063 var marker = {
|
nickjillings@2115
|
1064 position: 0,
|
nickjillings@2115
|
1065 text: "text"
|
nickjillings@2115
|
1066 };
|
nickjillings@2115
|
1067 this.parent.scaleRoot.scales.push(marker);
|
nickjillings@2115
|
1068 var markerNode = new this.parent.buildMarkerNode(this.parent,marker);
|
nickjillings@2115
|
1069 document.getElementById("popup-option-holder").appendChild(markerNode.root);
|
nickjillings@2115
|
1070 this.parent.markerNodes.push(markerNode);
|
nickjillings@2115
|
1071 }
|
nickjillings@2115
|
1072 };
|
nickjillings@2115
|
1073 this.addMarker.root.textContent = "Add Marker";
|
nickjillings@2115
|
1074 this.addMarker.root.addEventListener("click",this.addMarker);
|
nickjillings@2115
|
1075 this.content.appendChild(this.addMarker.root);
|
nickjillings@2115
|
1076
|
nickjillings@1385
|
1077 // Create Marker List
|
nickjillings@1385
|
1078 this.buildMarkerList();
|
nickjillings@1385
|
1079 }
|
nickjillings@1385
|
1080 this.buildMarkerList = function() {
|
nickjillings@1385
|
1081 var markerInject = document.getElementById("popup-option-holder");
|
nickjillings@1385
|
1082 markerInject.innerHTML = "";
|
nickjillings@1385
|
1083 this.markerNodes = [];
|
nickjillings@1385
|
1084 for (var i=0; i<this.scaleRoot.scales.length; i++)
|
nickjillings@1385
|
1085 {
|
nickjillings@2115
|
1086 var markerNode = new this.buildMarkerNode(this,this.scaleRoot.scales[i]);
|
nickjillings@1385
|
1087 markerInject.appendChild(markerNode.root);
|
nickjillings@1385
|
1088 this.markerNodes.push(markerNode);
|
nickjillings@1385
|
1089
|
nickjillings@1385
|
1090 }
|
nickjillings@1385
|
1091 }
|
nickjillings@2115
|
1092
|
nickjillings@2115
|
1093 this.buildMarkerNode = function(parent,specification) {
|
nickjillings@2115
|
1094 this.root = document.createElement("div");
|
nickjillings@2115
|
1095 this.root.className = "popup-option-entry";
|
nickjillings@2115
|
1096 this.positionInput = document.createElement("input");
|
nickjillings@2115
|
1097 this.positionInput.min = 0;
|
nickjillings@2115
|
1098 this.positionInput.max = 100;
|
nickjillings@2115
|
1099 this.positionInput.value = specification.position;
|
nickjillings@2115
|
1100 this.positionInput.setAttribute("name","position");
|
nickjillings@2115
|
1101 this.textInput = document.createElement("input");
|
nickjillings@2115
|
1102 this.textInput.setAttribute("name","text");
|
nickjillings@2180
|
1103 this.textInput.style.width = "300px";
|
nickjillings@2115
|
1104 this.textInput.value = specification.text;
|
nickjillings@2115
|
1105 this.specification = specification;
|
nickjillings@2115
|
1106 this.parent = parent;
|
nickjillings@2115
|
1107 this.handleEvent = function(event) {
|
nickjillings@2115
|
1108 switch(event.currentTarget.getAttribute("name"))
|
nickjillings@2115
|
1109 {
|
nickjillings@2115
|
1110 case "position":
|
nickjillings@2115
|
1111 this.specification.position = Number(event.currentTarget.value);
|
nickjillings@2115
|
1112 break;
|
nickjillings@2115
|
1113 case "text":
|
nickjillings@2115
|
1114 this.specification.text = event.currentTarget.value;
|
nickjillings@2115
|
1115 break;
|
nickjillings@2115
|
1116 }
|
nickjillings@2115
|
1117 }
|
nickjillings@2115
|
1118 this.positionInput.addEventListener("change",this,false);
|
nickjillings@2115
|
1119 this.textInput.addEventListener("change",this,false);
|
nickjillings@2115
|
1120
|
nickjillings@2115
|
1121 var posText = document.createElement("span");
|
nickjillings@2115
|
1122 posText.textContent = "Position: ";
|
nickjillings@2115
|
1123 var textText = document.createElement("span");
|
nickjillings@2115
|
1124 textText.textContent = "Text: ";
|
nickjillings@2115
|
1125 this.root.appendChild(posText);
|
nickjillings@2115
|
1126 this.root.appendChild(this.positionInput);
|
nickjillings@2115
|
1127 this.root.appendChild(textText);
|
nickjillings@2115
|
1128 this.root.appendChild(this.textInput);
|
nickjillings@2115
|
1129
|
nickjillings@2115
|
1130 this.deleteMarker = {
|
nickjillings@2115
|
1131 root: document.createElement("button"),
|
nickjillings@2115
|
1132 parent: this,
|
nickjillings@2115
|
1133 handleEvent: function() {
|
nickjillings@2115
|
1134 var index = this.parent.parent.scaleRoot.scales.findIndex(function(element,index,array){
|
nickjillings@2115
|
1135 if (element == this) {return true;} else {return false;}
|
nickjillings@2115
|
1136 },this.parent.specification)
|
nickjillings@2115
|
1137 if (index >= 0) {
|
nickjillings@2115
|
1138 this.parent.parent.scaleRoot.scales.splice(index,1);
|
nickjillings@2115
|
1139 }
|
nickjillings@2115
|
1140 document.getElementById("popup-option-holder").removeChild(this.parent.root);
|
nickjillings@2115
|
1141 }
|
nickjillings@2115
|
1142 }
|
nickjillings@2115
|
1143 this.deleteMarker.root.addEventListener("click",this.deleteMarker);
|
nickjillings@2115
|
1144 this.deleteMarker.root.textContent = "Delete Marker"
|
nickjillings@2115
|
1145 this.root.appendChild(this.deleteMarker.root);
|
nickjillings@2115
|
1146 }
|
nickjillings@1385
|
1147 }
|
nickjillings@1370
|
1148 }
|
nickjillings@1370
|
1149 }
|
nickjillings@1370
|
1150
|
nickjillings@1370
|
1151 function SpecificationToHTML()
|
nickjillings@1370
|
1152 {
|
nickjillings@1370
|
1153 // This takes the specification node and converts it to an on-page HTML object
|
nickjillings@1370
|
1154 // Each Specification Node is given its own JS object which listens to the XSD for instant verification
|
nickjillings@1370
|
1155 // Once generated, it directly binds into the specification object to update with changes
|
nickjillings@1370
|
1156 // Fixed DOM entries
|
nickjillings@1370
|
1157 this.injectDOM;
|
nickjillings@1370
|
1158 this.setupDOM;
|
nickjillings@1370
|
1159 this.pages = [];
|
nickjillings@1370
|
1160
|
nickjillings@1370
|
1161 // Self-contained generators
|
nickjillings@1370
|
1162 this.createGeneralNodeDOM = function(name,id,parent)
|
nickjillings@1370
|
1163 {
|
nickjillings@1375
|
1164 this.type = name;
|
nickjillings@1370
|
1165 var root = document.createElement('div');
|
nickjillings@1370
|
1166 root.id = id;
|
nickjillings@1370
|
1167 root.className = "node";
|
nickjillings@1370
|
1168
|
nickjillings@1370
|
1169 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1170 titleDiv.className = "node-title";
|
nickjillings@1370
|
1171 var title = document.createElement('span');
|
nickjillings@1370
|
1172 title.className = "node-title";
|
nickjillings@1370
|
1173 title.textContent = name;
|
nickjillings@1370
|
1174 titleDiv.appendChild(title);
|
nickjillings@1370
|
1175
|
nickjillings@1370
|
1176 var attributeDiv = document.createElement('div');
|
nickjillings@1370
|
1177 attributeDiv.className = "node-attributes";
|
nickjillings@1370
|
1178
|
nickjillings@1370
|
1179 var childrenDiv = document.createElement('div');
|
nickjillings@1370
|
1180 childrenDiv.className = "node-children";
|
nickjillings@1370
|
1181
|
nickjillings@1370
|
1182 var buttonsDiv = document.createElement('div');
|
nickjillings@1370
|
1183 buttonsDiv.className = "node-buttons";
|
nickjillings@1370
|
1184
|
nickjillings@1370
|
1185 root.appendChild(titleDiv);
|
nickjillings@1370
|
1186 root.appendChild(attributeDiv);
|
nickjillings@1370
|
1187 root.appendChild(childrenDiv);
|
nickjillings@1370
|
1188 root.appendChild(buttonsDiv);
|
nickjillings@1370
|
1189
|
nickjillings@1370
|
1190 var obj = {
|
nickjillings@1370
|
1191 rootDOM: root,
|
nickjillings@1370
|
1192 titleDOM: title,
|
nickjillings@1370
|
1193 attributeDOM: attributeDiv,
|
nickjillings@1370
|
1194 attributes: [],
|
nickjillings@1370
|
1195 childrenDOM: childrenDiv,
|
nickjillings@1370
|
1196 children: [],
|
nickjillings@1370
|
1197 buttonDOM: buttonsDiv,
|
nickjillings@1370
|
1198 parent: parent
|
nickjillings@1370
|
1199 }
|
nickjillings@1370
|
1200 return obj;
|
nickjillings@1370
|
1201 }
|
nickjillings@1370
|
1202
|
nickjillings@1370
|
1203 this.convertAttributeToDOM = function(node,schema)
|
nickjillings@1370
|
1204 {
|
nickjillings@1370
|
1205 // This takes an attribute schema node and returns an object with the input node and any bindings
|
nickjillings@1370
|
1206 if (schema.getAttribute('name') == undefined && schema.getAttribute('ref') != undefined)
|
nickjillings@1370
|
1207 {
|
nickjillings@1370
|
1208 schema = specification.schema.getAllElementsByName(schema.getAttribute('ref'))[0];
|
nickjillings@1370
|
1209 }
|
nickjillings@1370
|
1210 var obj = new function()
|
nickjillings@1370
|
1211 {
|
nickjillings@1370
|
1212 this.input;
|
nickjillings@1370
|
1213 this.name;
|
nickjillings@1370
|
1214 this.owner;
|
nickjillings@1370
|
1215 this.holder;
|
nickjillings@1370
|
1216
|
nickjillings@1370
|
1217 this.name = schema.getAttribute('name');
|
nickjillings@1370
|
1218 this.default = schema.getAttribute('default');
|
nickjillings@1370
|
1219 this.dataType = schema.getAttribute('type');
|
nickjillings@2158
|
1220 if (this.dataType == undefined) {
|
nickjillings@2158
|
1221 if (schema.childElementCount > 0) {
|
nicholas@2390
|
1222 if (schema.firstElementChild.nodeName == "xs:simpleType") {
|
nickjillings@2158
|
1223 this.dataType = schema.getAllElementsByTagName("xs:restriction")[0].getAttribute("base");
|
nickjillings@2158
|
1224 }
|
nickjillings@2158
|
1225 }
|
nickjillings@2158
|
1226 }
|
nickjillings@1370
|
1227 if (typeof this.dataType == "string") { this.dataType = this.dataType.substr(3);}
|
nickjillings@1370
|
1228 else {this.dataType = "string";}
|
nickjillings@1370
|
1229 var minVar = undefined;
|
nickjillings@1370
|
1230 var maxVar = undefined;
|
nickjillings@1370
|
1231 switch(this.dataType)
|
nickjillings@1370
|
1232 {
|
nickjillings@1370
|
1233 case "negativeInteger":
|
nickjillings@1370
|
1234 maxVar = -1;
|
nickjillings@1370
|
1235 break;
|
nickjillings@1370
|
1236 case "positiveInteger":
|
nickjillings@1370
|
1237 minVar = 1;
|
nickjillings@1370
|
1238 break;
|
nickjillings@1370
|
1239 case "nonNegativeInteger":
|
nickjillings@1370
|
1240 minVar = 0;
|
nickjillings@1370
|
1241 break;
|
nickjillings@1370
|
1242 case "nonPositiveInteger":
|
nickjillings@1370
|
1243 maxVar = 0;
|
nickjillings@1370
|
1244 break;
|
nickjillings@1370
|
1245 case "byte":
|
nickjillings@1370
|
1246 minVar = 0;
|
nickjillings@1370
|
1247 maxVar = 256;
|
nickjillings@1370
|
1248 break;
|
nickjillings@1370
|
1249 case "short":
|
nickjillings@1370
|
1250 minVar = 0;
|
nickjillings@1370
|
1251 maxVar = 65536;
|
nickjillings@1370
|
1252 break;
|
nickjillings@1370
|
1253 default:
|
nickjillings@1370
|
1254 break;
|
nickjillings@1370
|
1255 }
|
nickjillings@2174
|
1256
|
nickjillings@2174
|
1257 this.enumeration = schema.getAllElementsByTagName("xs:enumeration");
|
nickjillings@2174
|
1258 if (this.enumeration.length == 0) {
|
nickjillings@2174
|
1259 this.input = document.createElement('input');
|
nickjillings@2174
|
1260 switch(this.dataType)
|
nickjillings@2174
|
1261 {
|
nickjillings@2174
|
1262 case "boolean":
|
nickjillings@2174
|
1263 this.input.type = "checkbox";
|
nickjillings@2174
|
1264 break;
|
nickjillings@2174
|
1265 case "negativeInteger":
|
nickjillings@2174
|
1266 case "positiveInteger":
|
nickjillings@2174
|
1267 case "nonNegativeInteger":
|
nickjillings@2174
|
1268 case "nonPositiveInteger":
|
nickjillings@2174
|
1269 case "integer":
|
nickjillings@2174
|
1270 case "short":
|
nickjillings@2174
|
1271 case "byte":
|
nickjillings@2174
|
1272 this.input.step = 1;
|
nickjillings@2174
|
1273 case "decimal":
|
nickjillings@2174
|
1274 this.input.type = "number";
|
nickjillings@2174
|
1275 this.input.min = minVar;
|
nickjillings@2174
|
1276 this.input.max = maxVar;
|
nickjillings@2174
|
1277 break;
|
nickjillings@2174
|
1278 default:
|
nickjillings@2174
|
1279 break;
|
nickjillings@2174
|
1280 }
|
nickjillings@2174
|
1281 } else {
|
nickjillings@2174
|
1282 this.input = document.createElement("select");
|
nickjillings@2174
|
1283 for (var i=0; i<this.enumeration.length; i++)
|
nickjillings@2174
|
1284 {
|
nickjillings@2174
|
1285 var option = document.createElement("option");
|
nickjillings@2174
|
1286 var value = this.enumeration[i].getAttribute("value");
|
nickjillings@2174
|
1287 option.setAttribute("value",value);
|
nickjillings@2174
|
1288 option.textContent = value;
|
nickjillings@2174
|
1289 this.input.appendChild(option);
|
nickjillings@2174
|
1290 }
|
nickjillings@1370
|
1291 }
|
nickjillings@1370
|
1292 var value;
|
nickjillings@1373
|
1293 eval("value = node."+this.name)
|
nickjillings@2174
|
1294 if (this.default != undefined && value == undefined)
|
nickjillings@1370
|
1295 {
|
nickjillings@2174
|
1296 value = this.default;
|
nickjillings@2174
|
1297 }
|
nickjillings@2174
|
1298 if (this.input.type == "checkbox") {
|
nicholas@2239
|
1299 if (value == "true" || value == "True") {this.input.checked = false;}
|
nicholas@2239
|
1300 else {this.input.checked = false;}
|
nickjillings@2174
|
1301 } else {
|
nickjillings@1370
|
1302 this.input.value = value;
|
nickjillings@1370
|
1303 }
|
nickjillings@1370
|
1304 this.handleEvent = function(event)
|
nickjillings@1370
|
1305 {
|
nickjillings@1370
|
1306 var value;
|
nickjillings@2174
|
1307 if (this.input.nodeName == "INPUT")
|
nickjillings@1370
|
1308 {
|
nickjillings@2174
|
1309 switch(this.input.type)
|
nickjillings@2174
|
1310 {
|
nickjillings@2174
|
1311 case "checkbox":
|
nickjillings@2174
|
1312 value = event.currentTarget.checked;
|
nickjillings@2174
|
1313 break;
|
nickjillings@2174
|
1314 case "number":
|
n@2423
|
1315 if (event.currentTarget.value != "") {
|
n@2423
|
1316 value = Number(event.currentTarget.value);
|
n@2423
|
1317 } else {
|
n@2423
|
1318 value = undefined;
|
n@2423
|
1319 }
|
nickjillings@2174
|
1320 break;
|
nickjillings@2174
|
1321 default:
|
n@2423
|
1322 if (event.currentTarget.value != "") {
|
n@2423
|
1323 value = event.currentTarget.value;
|
n@2423
|
1324 } else {
|
n@2423
|
1325 value = undefined;
|
n@2423
|
1326 }
|
nickjillings@2174
|
1327 break;
|
nickjillings@2174
|
1328 }
|
nickjillings@2174
|
1329 } else if (this.input.nodeName == "SELECT") {
|
nickjillings@2174
|
1330 value = event.currentTarget.value;
|
nickjillings@1370
|
1331 }
|
nickjillings@1370
|
1332 eval("this.owner."+this.name+" = value");
|
nickjillings@1370
|
1333 }
|
nickjillings@1370
|
1334 this.holder = document.createElement('div');
|
nickjillings@1370
|
1335 this.holder.className = "attribute";
|
nickjillings@1370
|
1336 this.holder.setAttribute('name',this.name);
|
nickjillings@1370
|
1337 var text = document.createElement('span');
|
nickjillings@1370
|
1338 eval("text.textContent = attributeText."+this.name+"+': '");
|
nickjillings@1370
|
1339 this.holder.appendChild(text);
|
nickjillings@1370
|
1340 this.holder.appendChild(this.input);
|
nickjillings@1370
|
1341 this.owner = node;
|
nickjillings@1370
|
1342 this.input.addEventListener("change",this,false);
|
nickjillings@1370
|
1343 }
|
nickjillings@1370
|
1344 if (obj.attribute != null)
|
nickjillings@1370
|
1345 {
|
nickjillings@1370
|
1346 obj.input.value = obj.attribute;
|
nickjillings@1370
|
1347 }
|
nickjillings@1370
|
1348 return obj;
|
nickjillings@1370
|
1349 }
|
nickjillings@1370
|
1350
|
nickjillings@1370
|
1351 this.convert = function(root)
|
nickjillings@1370
|
1352 {
|
nickjillings@1370
|
1353 //Performs the actual conversion using the given root DOM as the root
|
nickjillings@1370
|
1354 this.injectDOM = root;
|
nickjillings@1370
|
1355
|
nickjillings@1373
|
1356 // Build the export button
|
nickjillings@1373
|
1357 var exportButton = document.createElement("button");
|
nickjillings@1373
|
1358 exportButton.textContent = "Export to XML";
|
nickjillings@1373
|
1359 exportButton.onclick = function()
|
nickjillings@1373
|
1360 {
|
nickjillings@1373
|
1361 var doc = specification.encode();
|
nickjillings@1373
|
1362 var obj = {};
|
nickjillings@1373
|
1363 obj.title = "Export";
|
nickjillings@1373
|
1364 obj.content = document.createElement("div");
|
nickjillings@1373
|
1365 obj.content.id = "finish";
|
nickjillings@1373
|
1366 var span = document.createElement("span");
|
n@2405
|
1367 span.textContent = "Your XML document is linked below. On most browsers, simply right click on the link and select 'Save As'. Or clicking on the link may download the file directly."
|
n@2405
|
1368 obj.content.appendChild(span);
|
n@2405
|
1369 span = document.createElement("p");
|
n@2405
|
1370 span.textContent = "NOTE FOR SAFARI! You cannot right click on the below link and save it as a file, Safari does not like that at all. Instead click on it to open the XML, the Press Cmd+S to open the save dialogue. Make sure you have 'save as Page Source' selected on the bottom of the window. Currently Safari has no plans to support the HTML 'download' attribute which causes this problem";
|
nickjillings@1373
|
1371 obj.content.appendChild(span);
|
nickjillings@1373
|
1372 var link = document.createElement("div");
|
n@2412
|
1373 link.appendChild(doc.firstChild);
|
nickjillings@1373
|
1374 var file = [link.innerHTML];
|
nickjillings@1373
|
1375 var bb = new Blob(file,{type : 'application/xml'});
|
nickjillings@1373
|
1376 var dnlk = window.URL.createObjectURL(bb);
|
nickjillings@1373
|
1377 var a = document.createElement("a");
|
nickjillings@1373
|
1378 a.hidden = '';
|
nickjillings@1373
|
1379 a.href = dnlk;
|
nickjillings@1373
|
1380 a.download = "project-specification.xml";
|
nickjillings@1373
|
1381 a.textContent = "Save File";
|
nickjillings@1373
|
1382 obj.content.appendChild(a);
|
nickjillings@1373
|
1383 popupObject.show();
|
nickjillings@1373
|
1384 popupObject.postNode(obj);
|
nickjillings@1373
|
1385 }
|
nickjillings@1373
|
1386 this.injectDOM.appendChild(exportButton);
|
nickjillings@1373
|
1387
|
nickjillings@1370
|
1388 // First perform the setupNode;
|
nickjillings@1370
|
1389 var setupSchema = specification.schema.getAllElementsByName('setup')[0];
|
nickjillings@2114
|
1390 this.setupDOM = new this.createGeneralNodeDOM('Global Configuration','setup',null);
|
nickjillings@1370
|
1391 this.injectDOM.appendChild(this.setupDOM.rootDOM);
|
nickjillings@1370
|
1392 var setupAttributes = setupSchema.getAllElementsByTagName('xs:attribute');
|
nickjillings@1370
|
1393 for (var i=0; i<setupAttributes.length; i++)
|
nickjillings@1370
|
1394 {
|
nickjillings@1370
|
1395 var attributeName = setupAttributes[i].getAttribute('name');
|
nickjillings@1370
|
1396 var attrObject = this.convertAttributeToDOM(specification,setupAttributes[i]);
|
nickjillings@1370
|
1397 this.setupDOM.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
1398 this.setupDOM.attributes.push(attrObject);
|
nickjillings@1370
|
1399 }
|
nickjillings@1370
|
1400
|
nickjillings@2179
|
1401 // Build the exit Text node
|
nickjillings@2179
|
1402 var exitText = new this.createGeneralNodeDOM("Exit Text","exit-test",this.setupDOM);
|
nickjillings@2179
|
1403 exitText.rootDOM.removeChild(exitText.attributeDOM);
|
nickjillings@2179
|
1404 this.setupDOM.children.push(exitText);
|
nickjillings@2179
|
1405 this.setupDOM.childrenDOM.appendChild(exitText.rootDOM);
|
nickjillings@2179
|
1406 var obj = {
|
nickjillings@2179
|
1407 rootDOM: document.createElement("div"),
|
nickjillings@2179
|
1408 labelDOM: document.createElement("label"),
|
nickjillings@2179
|
1409 inputDOM: document.createElement("textarea"),
|
nickjillings@2179
|
1410 parent: exitText,
|
nickjillings@2179
|
1411 specification: specification,
|
nickjillings@2179
|
1412 handleEvent: function(event) {
|
nickjillings@2179
|
1413 this.specification.exitText = this.inputDOM.value;
|
nickjillings@2179
|
1414 }
|
nickjillings@2179
|
1415 }
|
b@2367
|
1416 var exitWarning = document.createElement("div");
|
b@2367
|
1417 obj.rootDOM.appendChild(exitWarning);
|
b@2367
|
1418 exitWarning.textContent = "Only visible when the above 'On complete redirect URL' field is empty.";
|
nickjillings@2179
|
1419 obj.rootDOM.appendChild(obj.labelDOM);
|
nickjillings@2179
|
1420 obj.rootDOM.appendChild(obj.inputDOM);
|
nickjillings@2179
|
1421 obj.labelDOM.textContent = "Text: ";
|
nickjillings@2179
|
1422 obj.inputDOM.value = obj.specification.exitText;
|
nickjillings@2179
|
1423 obj.inputDOM.addEventListener("change",obj);
|
nickjillings@2179
|
1424 exitText.children.push(obj);
|
nickjillings@2179
|
1425 exitText.childrenDOM.appendChild(obj.rootDOM);
|
nickjillings@2179
|
1426
|
nickjillings@1370
|
1427 // Now we must build the interface Node
|
nickjillings@1370
|
1428 this.interfaceDOM = new this.interfaceNode(this,specification.interfaces);
|
nickjillings@1370
|
1429 this.interfaceDOM.build("Interface","setup-interface",this.setupDOM.rootDOM);
|
nickjillings@1370
|
1430
|
nickjillings@1370
|
1431 // Now build the Metrics selection node
|
nickjillings@2114
|
1432 var metric = this.createGeneralNodeDOM("Session Metrics","setup-metric",this.setupDOM);
|
nickjillings@1370
|
1433 metric.rootDOM.removeChild(metric.attributeDOM);
|
nickjillings@1370
|
1434 this.setupDOM.children.push(metric);
|
nickjillings@1370
|
1435 this.setupDOM.childrenDOM.appendChild(metric.rootDOM);
|
nickjillings@1370
|
1436 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1437 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
1438 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1439 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
1440 testXML = testXML.getAllElementsByTagName("metrics");
|
nicholas@2390
|
1441 var interfaceXMLChild = interfaceXML.firstElementChild;
|
nicholas@2390
|
1442 while(interfaceXMLChild)
|
nickjillings@1370
|
1443 {
|
nickjillings@1370
|
1444 var obj = {
|
nickjillings@1370
|
1445 input: document.createElement('input'),
|
nickjillings@1370
|
1446 root: document.createElement('div'),
|
nickjillings@1370
|
1447 text: document.createElement('span'),
|
nickjillings@1370
|
1448 specification: specification.metrics.enabled,
|
nicholas@2390
|
1449 name: interfaceXMLChild.getAttribute("name"),
|
nickjillings@1370
|
1450 handleEvent: function()
|
nickjillings@1370
|
1451 {
|
nickjillings@1370
|
1452 for (var i=0; i<this.specification.length; i++)
|
nickjillings@1370
|
1453 {
|
nickjillings@1370
|
1454 if (this.specification[i] == this.name)
|
nickjillings@1370
|
1455 {
|
nickjillings@1370
|
1456 var options = this.specification;
|
nickjillings@1370
|
1457 if (this.input.checked == false) {
|
nickjillings@1370
|
1458 if (i == options.length)
|
nickjillings@1370
|
1459 {options = options.slice(0,i);}
|
nickjillings@1370
|
1460 else {
|
nickjillings@1370
|
1461 options = options.slice(0,i).concat(options.slice(i+1));
|
nickjillings@1370
|
1462 }
|
nickjillings@1370
|
1463 } else {
|
nickjillings@1370
|
1464 return;
|
nickjillings@1370
|
1465 }
|
nickjillings@1370
|
1466 this.specification = options;
|
nickjillings@1370
|
1467 break;
|
nickjillings@1370
|
1468 }
|
nickjillings@1370
|
1469 }
|
nickjillings@1370
|
1470 if (this.input.checked) {
|
nickjillings@1370
|
1471 this.specification.push(this.name);
|
nickjillings@1370
|
1472 }
|
nickjillings@1370
|
1473 }
|
nickjillings@1370
|
1474 };
|
nickjillings@1370
|
1475 obj.root.className = "attribute";
|
nickjillings@1370
|
1476 obj.input.type = "checkbox";
|
nickjillings@1370
|
1477 obj.root.appendChild(obj.text);
|
nickjillings@1370
|
1478 obj.root.appendChild(obj.input);
|
nicholas@2390
|
1479 obj.text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
|
nickjillings@1370
|
1480 metric.children.push(obj);
|
nickjillings@1370
|
1481 metric.childrenDOM.appendChild(obj.root);
|
nickjillings@1314
|
1482 for (var j=0; j<specification.metrics.enabled.length; j++)
|
nickjillings@1370
|
1483 {
|
nickjillings@1314
|
1484 if (specification.metrics.enabled[j] == obj.name)
|
nickjillings@1370
|
1485 {
|
nickjillings@1370
|
1486 obj.input.checked = true;
|
nickjillings@1370
|
1487 break;
|
nickjillings@1370
|
1488 }
|
nickjillings@1370
|
1489 }
|
nicholas@2390
|
1490 interfaceXMLChild = interfaceXMLChild.nextElementSibling;
|
nickjillings@1370
|
1491 }
|
nickjillings@1370
|
1492
|
nickjillings@1370
|
1493 // Now both before and after surveys
|
nickjillings@1370
|
1494 if (specification.preTest == undefined){
|
nickjillings@2194
|
1495 specification.preTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
1496 specification.preTest.location = "pre";
|
nickjillings@1370
|
1497 }
|
nickjillings@1370
|
1498 if (specification.postTest == undefined){
|
nickjillings@2194
|
1499 specification.postTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
1500 specification.postTest.location = "post";
|
nickjillings@1370
|
1501 }
|
nickjillings@1370
|
1502 var surveyBefore = new this.surveyNode(this,specification.preTest,"Pre");
|
nickjillings@1370
|
1503 var surveyAfter = new this.surveyNode(this,specification.postTest,"Post");
|
nickjillings@1370
|
1504 this.setupDOM.children.push(surveyBefore);
|
nickjillings@1370
|
1505 this.setupDOM.children.push(surveyAfter);
|
nickjillings@1370
|
1506 this.setupDOM.childrenDOM.appendChild(surveyBefore.rootDOM);
|
nickjillings@1370
|
1507 this.setupDOM.childrenDOM.appendChild(surveyAfter.rootDOM);
|
nickjillings@1370
|
1508
|
nickjillings@1370
|
1509 // Add in the page creator button
|
nickjillings@1370
|
1510 this.addPage = {
|
nickjillings@1370
|
1511 root: document.createElement("button"),
|
nickjillings@1370
|
1512 parent: this,
|
nickjillings@1370
|
1513 handleEvent: function()
|
nickjillings@1370
|
1514 {
|
nickjillings@2194
|
1515 var pageObj = new specification.page(specification);
|
nickjillings@1370
|
1516 specification.pages.push(pageObj);
|
nickjillings@1370
|
1517 var newPage = new this.parent.pageNode(this.parent,pageObj);
|
nicholas@2315
|
1518 document.getElementById("page-holder").appendChild(newPage.rootDOM);
|
nickjillings@1370
|
1519 this.parent.pages.push(newPage);
|
nickjillings@1370
|
1520 }
|
nickjillings@1370
|
1521 }
|
nickjillings@1370
|
1522 this.addPage.root.textContent = "Add Page";
|
nicholas@2315
|
1523 this.addPage.root.id = "new-page-button";
|
nicholas@2315
|
1524 this.addPage.root.style.float = "left";
|
nickjillings@1370
|
1525 this.addPage.root.addEventListener("click",this.addPage,false);
|
nicholas@2315
|
1526
|
nicholas@2315
|
1527 var pageHolder = document.createElement("div");
|
nicholas@2315
|
1528 pageHolder.id ="page-holder";
|
nicholas@2315
|
1529 this.injectDOM.appendChild(pageHolder);
|
nickjillings@1374
|
1530
|
nickjillings@1374
|
1531 // Build each page
|
nickjillings@1374
|
1532 for (var page of specification.pages)
|
nickjillings@1374
|
1533 {
|
nickjillings@1374
|
1534 var newPage = new this.pageNode(this,page);
|
nicholas@2315
|
1535 pageHolder.appendChild(newPage.rootDOM);
|
nickjillings@1374
|
1536 this.pages.push(newPage);
|
nickjillings@1374
|
1537 }
|
nicholas@2315
|
1538
|
nicholas@2315
|
1539 this.injectDOM.appendChild(this.addPage.root);
|
nickjillings@1370
|
1540 }
|
nickjillings@1370
|
1541
|
nickjillings@1370
|
1542 this.interfaceNode = function(parent,rootObject)
|
nickjillings@1370
|
1543 {
|
nickjillings@1375
|
1544 this.type = "interfaceNode";
|
nickjillings@1370
|
1545 this.rootDOM;
|
nickjillings@1370
|
1546 this.titleDOM;
|
nickjillings@1370
|
1547 this.attributeDOM;
|
nickjillings@1370
|
1548 this.attributes = [];
|
nickjillings@1370
|
1549 this.childrenDOM;
|
nickjillings@1370
|
1550 this.children = [];
|
nickjillings@1370
|
1551 this.buttonDOM;
|
nickjillings@1370
|
1552 this.parent = parent;
|
nickjillings@1370
|
1553 this.HTMLPoint;
|
nickjillings@1370
|
1554 this.specification = rootObject;
|
nickjillings@1370
|
1555 this.schema = specification.schema.getAllElementsByName("interface")[1];
|
nickjillings@1370
|
1556
|
nickjillings@1370
|
1557 this.createIOasAttr = function(name,specification,parent,type) {
|
nickjillings@1370
|
1558 this.root = document.createElement('div');
|
nickjillings@1370
|
1559 this.input = document.createElement("input");
|
nickjillings@1370
|
1560 this.name = name;
|
nickjillings@1370
|
1561 this.type = type;
|
nickjillings@1370
|
1562 this.parent = parent;
|
nickjillings@1370
|
1563 this.specification = specification;
|
nickjillings@1370
|
1564 this.handleEvent = function(event) {
|
nickjillings@1370
|
1565 for (var i=0; i<this.specification.options.length; i++)
|
nickjillings@1370
|
1566 {
|
nickjillings@1370
|
1567 if (this.specification.options[i].name == this.name)
|
nickjillings@1370
|
1568 {
|
nickjillings@1370
|
1569 var options = this.specification.options;
|
nickjillings@1370
|
1570 if (this.input.checked == false) {
|
nickjillings@1370
|
1571 if (i == options.length)
|
nickjillings@1370
|
1572 {options = options.slice(0,i);}
|
nickjillings@1370
|
1573 else {
|
nickjillings@1370
|
1574 options = options.slice(0,i).concat(options.slice(i+1));
|
nickjillings@1370
|
1575 }
|
nickjillings@1370
|
1576 } else {
|
nickjillings@1370
|
1577 return;
|
nickjillings@1370
|
1578 }
|
nickjillings@1370
|
1579 this.specification.options = options;
|
nickjillings@1370
|
1580 break;
|
nickjillings@1370
|
1581 }
|
nickjillings@1370
|
1582 }
|
nickjillings@1370
|
1583 if (this.input.checked) {
|
nickjillings@1370
|
1584 var obj = {
|
nickjillings@1370
|
1585 name: this.name,
|
nickjillings@1370
|
1586 type: this.type
|
nickjillings@1370
|
1587 };
|
nickjillings@1370
|
1588 this.specification.options.push(obj);
|
nickjillings@1370
|
1589 }
|
nickjillings@1370
|
1590 if (this.parent.HTMLPoint.id == "setup")
|
nickjillings@1370
|
1591 {
|
nickjillings@1370
|
1592 // We've changed a global setting, must update all child 'interfaces' and disable them
|
nickjillings@1370
|
1593 for (pages of convert.pages)
|
nickjillings@1370
|
1594 {
|
nickjillings@1370
|
1595 for (interface of pages.interfaces)
|
nickjillings@1370
|
1596 {
|
nickjillings@1370
|
1597 if (this.type == "check")
|
nickjillings@1370
|
1598 {
|
nickjillings@1370
|
1599 for (node of interface.children[0].attributes)
|
nickjillings@1370
|
1600 {
|
nickjillings@1370
|
1601 if (node.name == this.name) {
|
nickjillings@1370
|
1602 if (this.input.checked) {
|
nickjillings@1370
|
1603 node.input.disabled = true;
|
nickjillings@1370
|
1604 node.input.checked = false;
|
nickjillings@1370
|
1605 } else {
|
nickjillings@1370
|
1606 node.input.disabled = false;
|
nickjillings@1370
|
1607 }
|
nickjillings@1370
|
1608 break;
|
nickjillings@1370
|
1609 }
|
nickjillings@1370
|
1610 }
|
nickjillings@1370
|
1611 } else if (this.type == "show")
|
nickjillings@1370
|
1612 {
|
nickjillings@1370
|
1613 for (node of interface.children[1].attributes)
|
nickjillings@1370
|
1614 {
|
nickjillings@1370
|
1615 if (node.name == this.name) {
|
nickjillings@1370
|
1616 if (this.input.checked) {
|
nickjillings@1370
|
1617 node.input.disabled = true;
|
nickjillings@1370
|
1618 } else {
|
nickjillings@1370
|
1619 node.input.disabled = false;
|
nickjillings@1370
|
1620 }
|
nickjillings@1370
|
1621 break;
|
nickjillings@1370
|
1622 }
|
nickjillings@1370
|
1623 }
|
nickjillings@1370
|
1624 }
|
nickjillings@1370
|
1625 }
|
nickjillings@1370
|
1626 }
|
nickjillings@1370
|
1627 }
|
nickjillings@1370
|
1628 };
|
nickjillings@1370
|
1629 this.findIndex = function(element,index,array){
|
nickjillings@1370
|
1630 if (element.name == this.name)
|
nickjillings@1370
|
1631 return true;
|
nickjillings@1370
|
1632 else
|
nickjillings@1370
|
1633 return false;
|
nickjillings@1370
|
1634 };
|
nickjillings@1370
|
1635 this.findNode = function(element,index,array){
|
nickjillings@1370
|
1636 if (element.name == this.name)
|
nickjillings@1370
|
1637 return true;
|
nickjillings@1370
|
1638 else
|
nickjillings@1370
|
1639 return false;
|
nickjillings@1370
|
1640 };
|
nickjillings@1370
|
1641 this.input.type = "checkbox";
|
nickjillings@1370
|
1642 this.input.setAttribute("name",name);
|
nickjillings@1370
|
1643 this.input.addEventListener("change",this,false);
|
nickjillings@1370
|
1644 this.root.appendChild(this.input);
|
nickjillings@1370
|
1645 this.root.className = "attribute";
|
nickjillings@1370
|
1646 return this;
|
nickjillings@1370
|
1647 }
|
nickjillings@1370
|
1648
|
nickjillings@1370
|
1649 this.build = function(name,id,parent)
|
nickjillings@1370
|
1650 {
|
nickjillings@1370
|
1651 var obj = this.parent.createGeneralNodeDOM(name,id,parent);
|
nickjillings@1370
|
1652
|
nickjillings@1370
|
1653 this.rootDOM = obj.rootDOM;
|
nickjillings@1370
|
1654 this.titleDOM = obj.titleDOM;
|
nickjillings@1370
|
1655 this.attributeDOM = obj.attributeDOM;
|
nickjillings@1370
|
1656 this.childrenDOM = obj.childrenDOM;
|
nickjillings@1370
|
1657 this.buttonDOM = obj.buttonsDOM;
|
nickjillings@1370
|
1658 this.HTMLPoint = parent;
|
nickjillings@1370
|
1659 this.rootDOM.removeChild(this.attributeDOM);
|
nicholas@2243
|
1660 if (parent.id != "setup") {
|
nicholas@2243
|
1661 // Put in the <title> node:
|
nicholas@2243
|
1662 this.titleNode = {
|
nicholas@2243
|
1663 root: document.createElement("div"),
|
nicholas@2243
|
1664 label: document.createElement("span"),
|
nicholas@2243
|
1665 input: document.createElement("input"),
|
nicholas@2243
|
1666 parent: this,
|
nicholas@2243
|
1667 handleEvent: function(event) {
|
nicholas@2243
|
1668 this.parent.specification.title = event.currentTarget.value;
|
nicholas@2243
|
1669 }
|
nicholas@2243
|
1670 }
|
nicholas@2243
|
1671 this.titleNode.label.textContent = "Axis Title:";
|
nicholas@2243
|
1672 this.titleNode.root.className = "node-children";
|
nicholas@2243
|
1673 this.titleNode.root.appendChild(this.titleNode.label);
|
nicholas@2243
|
1674 this.titleNode.root.appendChild(this.titleNode.input);
|
nicholas@2243
|
1675 this.titleNode.input.addEventListener("change",this.titleNode,false);
|
nicholas@2243
|
1676 this.titleNode.input.value = this.specification.title;
|
nicholas@2243
|
1677 this.children.push(this.titleNode);
|
nicholas@2243
|
1678 this.childrenDOM.appendChild(this.titleNode.root);
|
nicholas@2243
|
1679 }
|
nicholas@2243
|
1680
|
nickjillings@1370
|
1681 // Put in the check / show options as individual children
|
nickjillings@1370
|
1682 var checks = this.parent.createGeneralNodeDOM("Checks","setup-interface-checks",this);
|
nickjillings@1370
|
1683
|
nickjillings@1370
|
1684 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1685 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
1686 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1687 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
1688 testXML = testXML.getAllElementsByTagName("checks");
|
nicholas@2390
|
1689 var interfaceXMLChild = interfaceXML.firstElementChild;
|
nicholas@2390
|
1690 while (interfaceXMLChild)
|
nickjillings@1370
|
1691 {
|
nicholas@2390
|
1692 var obj = new this.createIOasAttr(interfaceXMLChild.getAttribute("name"),this.specification,this,"check");
|
nickjillings@1370
|
1693 for (var option of this.specification.options)
|
nickjillings@1370
|
1694 {
|
nickjillings@1370
|
1695 if (option.name == obj.name)
|
nickjillings@1370
|
1696 {
|
nickjillings@1370
|
1697 obj.input.checked = true;
|
nickjillings@1370
|
1698 break;
|
nickjillings@1370
|
1699 }
|
nickjillings@1370
|
1700 }
|
nickjillings@1370
|
1701 if (parent.id != "setup") {
|
nickjillings@1370
|
1702 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
|
nickjillings@1381
|
1703 if (node != undefined) {
|
nickjillings@1381
|
1704 if (node.input.checked) {
|
nickjillings@1381
|
1705 obj.input.checked = false;
|
nickjillings@1381
|
1706 obj.input.disabled = true;
|
nickjillings@1381
|
1707 }
|
nickjillings@1370
|
1708 }
|
nickjillings@1370
|
1709 }
|
nickjillings@1370
|
1710 var text = document.createElement('span');
|
nicholas@2390
|
1711 text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
|
nickjillings@1370
|
1712 obj.root.appendChild(text);
|
nickjillings@1370
|
1713 checks.attributeDOM.appendChild(obj.root);
|
nickjillings@1370
|
1714 checks.attributes.push(obj);
|
nicholas@2390
|
1715 interfaceXMLChild = interfaceXMLChild.nextElementSibling;
|
nickjillings@1370
|
1716 }
|
nickjillings@1370
|
1717 this.children.push(checks);
|
nickjillings@1370
|
1718 this.childrenDOM.appendChild(checks.rootDOM);
|
nickjillings@1370
|
1719
|
nickjillings@1370
|
1720 var show = this.parent.createGeneralNodeDOM("Show","setup-interface-show",this);
|
nickjillings@1370
|
1721 interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1722 checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
1723 testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1724 interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
1725 testXML = testXML.getAllElementsByTagName("show");
|
nicholas@2390
|
1726 interfaceXMLChild = interfaceXML.firstElementChild;
|
nicholas@2390
|
1727 while(interfaceXMLChild)
|
nickjillings@1370
|
1728 {
|
nicholas@2390
|
1729 var obj = new this.createIOasAttr(interfaceXMLChild.getAttribute("name"),this.specification,this,"show");
|
nickjillings@1370
|
1730 for (var option of this.specification.options)
|
nickjillings@1370
|
1731 {
|
nickjillings@1370
|
1732 if (option.name == obj.name)
|
nickjillings@1370
|
1733 {
|
nickjillings@1370
|
1734 obj.input.checked = true;
|
nickjillings@1370
|
1735 break;
|
nickjillings@1370
|
1736 }
|
nickjillings@1370
|
1737 }
|
nickjillings@1370
|
1738 if (parent.id != "setup") {
|
nickjillings@1370
|
1739 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
|
nickjillings@1381
|
1740 if (node != undefined) {
|
nickjillings@1381
|
1741 if (node.input.checked) {
|
nickjillings@1381
|
1742 obj.input.checked = false;
|
nickjillings@1381
|
1743 obj.input.disabled = true;
|
nickjillings@1381
|
1744 }
|
nickjillings@1370
|
1745 }
|
nickjillings@1370
|
1746 }
|
nickjillings@1370
|
1747 var text = document.createElement('span');
|
nicholas@2390
|
1748 text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
|
nickjillings@1370
|
1749 obj.root.appendChild(text);
|
nickjillings@1370
|
1750 show.attributeDOM.appendChild(obj.root);
|
nickjillings@1370
|
1751 show.attributes.push(obj);
|
nicholas@2390
|
1752 interfaceXMLChild = interfaceXMLChild.nextElementSibling;
|
nickjillings@1370
|
1753 }
|
nickjillings@1370
|
1754 this.children.push(show);
|
nickjillings@1370
|
1755 this.childrenDOM.appendChild(show.rootDOM);
|
nickjillings@1370
|
1756
|
nickjillings@1370
|
1757 if (parent.id == "setup")
|
nickjillings@1370
|
1758 {
|
nickjillings@1370
|
1759 } else {
|
nickjillings@1370
|
1760 var nameAttr = this.parent.convertAttributeToDOM(this,specification.schema.getAllElementsByName("name")[0]);
|
nickjillings@1370
|
1761 this.attributeDOM.appendChild(nameAttr.holder);
|
nickjillings@1370
|
1762 this.attributes.push(nameAttr);
|
nickjillings@1385
|
1763 var scales = new this.scalesNode(this,this.specification);
|
nickjillings@1385
|
1764 this.children.push(scales);
|
nickjillings@1385
|
1765 this.childrenDOM.appendChild(scales.rootDOM);
|
nickjillings@1370
|
1766 }
|
nickjillings@1370
|
1767 if (parent != undefined)
|
nickjillings@1370
|
1768 {
|
nickjillings@1370
|
1769 parent.appendChild(this.rootDOM);
|
nickjillings@1370
|
1770 }
|
nickjillings@1370
|
1771 }
|
nickjillings@1385
|
1772
|
nickjillings@1385
|
1773 this.scalesNode = function(parent,rootObject)
|
nickjillings@1385
|
1774 {
|
nickjillings@1385
|
1775 this.type = "scalesNode";
|
nickjillings@1385
|
1776 this.rootDOM = document.createElement("div");
|
nickjillings@1385
|
1777 this.titleDOM = document.createElement("span");
|
nickjillings@1385
|
1778 this.attributeDOM = document.createElement("div");
|
nickjillings@1385
|
1779 this.attributes = [];
|
nickjillings@1385
|
1780 this.childrenDOM = document.createElement("div");
|
nickjillings@1385
|
1781 this.children = [];
|
nickjillings@1385
|
1782 this.buttonDOM = document.createElement("div");
|
nickjillings@1385
|
1783 this.parent = parent;
|
nickjillings@1385
|
1784 this.specification = rootObject;
|
nickjillings@1385
|
1785 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1385
|
1786 this.rootDOM.className = "node";
|
nickjillings@1385
|
1787
|
nickjillings@1385
|
1788 var titleDiv = document.createElement('div');
|
nickjillings@1385
|
1789 titleDiv.className = "node-title";
|
nickjillings@1385
|
1790 this.titleDOM.className = "node-title";
|
nickjillings@1385
|
1791 this.titleDOM.textContent = "Interface Scales";
|
nickjillings@1385
|
1792 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1385
|
1793
|
nickjillings@1385
|
1794 this.attributeDOM.className = "node-attributes";
|
nickjillings@1385
|
1795 this.childrenDOM.className = "node-children";
|
nickjillings@1385
|
1796 this.buttonDOM.className = "node-buttons";
|
nickjillings@1385
|
1797
|
nickjillings@1385
|
1798 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1385
|
1799 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1385
|
1800 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1385
|
1801 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1385
|
1802
|
nickjillings@1385
|
1803 this.editButton = {
|
nickjillings@1385
|
1804 button: document.createElement("button"),
|
nickjillings@1385
|
1805 parent: this,
|
nickjillings@1385
|
1806 handleEvent: function(event) {
|
nickjillings@1385
|
1807 popupObject.show();
|
nickjillings@1385
|
1808 popupObject.postNode(popupStateNodes.state[6]);
|
nickjillings@1385
|
1809 popupStateNodes.state[6].generate(this.parent.specification,this.parent);
|
nickjillings@1385
|
1810 }
|
nickjillings@1385
|
1811 };
|
nickjillings@1385
|
1812 this.editButton.button.textContent = "Edit Scales/Markers";
|
nickjillings@1385
|
1813 this.editButton.button.addEventListener("click",this.editButton,false);
|
nickjillings@1385
|
1814 this.buttonDOM.appendChild(this.editButton.button);
|
nickjillings@1385
|
1815 }
|
nickjillings@1370
|
1816 }
|
nickjillings@1370
|
1817
|
nickjillings@1370
|
1818 this.surveyNode = function(parent,rootObject,location)
|
nickjillings@1370
|
1819 {
|
nickjillings@1375
|
1820 this.type = "surveyNode";
|
nickjillings@1370
|
1821 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1822 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1823 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1824 this.attributes = [];
|
nickjillings@1370
|
1825 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1826 this.children = [];
|
nickjillings@1370
|
1827 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1828 this.parent = parent;
|
nickjillings@1370
|
1829 this.specification = rootObject;
|
nickjillings@1370
|
1830 this.schema = specification.schema.getAllElementsByName("survey")[1];
|
nickjillings@1370
|
1831 this.rootDOM.className = "node";
|
nickjillings@1370
|
1832
|
nickjillings@1370
|
1833 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1834 titleDiv.className = "node-title";
|
nickjillings@1370
|
1835 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1836 this.titleDOM.textContent = "Survey";
|
nickjillings@1370
|
1837 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1838
|
nickjillings@1370
|
1839 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1840 var locationAttr = document.createElement("span");
|
nickjillings@1370
|
1841 this.attributeDOM.appendChild(locationAttr);
|
nickjillings@1370
|
1842 if (location == "Pre" || location == "pre") {
|
nickjillings@1370
|
1843 locationAttr.textContent = "Location: Before";
|
nickjillings@1370
|
1844 } else {
|
nickjillings@1370
|
1845 locationAttr.textContent = "Location: After";
|
nickjillings@1370
|
1846 }
|
nickjillings@1370
|
1847 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1848 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1849
|
nickjillings@1370
|
1850 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1851 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1852 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1853 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1854
|
nickjillings@1370
|
1855 this.surveyEntryNode = function(parent,rootObject)
|
nickjillings@1370
|
1856 {
|
nickjillings@1375
|
1857 this.type = "surveyEntryNode";
|
nickjillings@1370
|
1858 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1859 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1860 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1861 this.attributes = [];
|
nickjillings@1370
|
1862 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1863 this.children = [];
|
nickjillings@1370
|
1864 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1865 this.parent = parent;
|
nickjillings@1370
|
1866 this.specification = rootObject;
|
nickjillings@1370
|
1867 this.schema = specification.schema.getAllElementsByName("surveyentry")[1];
|
nickjillings@1370
|
1868
|
nickjillings@1370
|
1869 this.rootDOM.className = "node";
|
nickjillings@1370
|
1870 this.rootDOM.style.minWidth = "50%";
|
nickjillings@1370
|
1871
|
nickjillings@1370
|
1872 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1873 titleDiv.className = "node-title";
|
nickjillings@1370
|
1874 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1875 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1876
|
nickjillings@1370
|
1877 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1878 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1879 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1880
|
nickjillings@1370
|
1881 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1882 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1883 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1884 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1885
|
nickjillings@1375
|
1886 this.build = function()
|
nickjillings@1375
|
1887 {
|
nickjillings@1375
|
1888 this.attributeDOM.innerHTML = null;
|
nickjillings@1375
|
1889 this.childrenDOM.innerHTML = null;
|
nickjillings@1375
|
1890 var statementRoot = document.createElement("div");
|
nickjillings@1375
|
1891 var statement = document.createElement("span");
|
nickjillings@1375
|
1892 statement.textContent = "Statement / Question: "+this.specification.statement;
|
nickjillings@1375
|
1893 statementRoot.appendChild(statement);
|
nickjillings@1375
|
1894 this.children.push(statementRoot);
|
nickjillings@1375
|
1895 this.childrenDOM.appendChild(statementRoot);
|
nickjillings@1375
|
1896 switch(this.specification.type)
|
nickjillings@1375
|
1897 {
|
nickjillings@1375
|
1898 case "statement":
|
nickjillings@1375
|
1899 this.titleDOM.textContent = "Statement";
|
nickjillings@1375
|
1900 break;
|
nickjillings@1375
|
1901 case "question":
|
nickjillings@1375
|
1902 this.titleDOM.textContent = "Question";
|
nickjillings@1375
|
1903 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1904 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
|
nickjillings@1375
|
1905 var boxsize = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("boxsize")[0]);
|
nickjillings@1375
|
1906 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1907 this.attributes.push(id);
|
nickjillings@1375
|
1908 this.attributeDOM.appendChild(mandatory.holder);
|
nickjillings@1375
|
1909 this.attributes.push(mandatory);
|
nickjillings@1375
|
1910 this.attributeDOM.appendChild(boxsize.holder);
|
nickjillings@1375
|
1911 this.attributes.push(boxsize);
|
nickjillings@1375
|
1912 break;
|
nickjillings@1375
|
1913 case "number":
|
nickjillings@1375
|
1914 this.titleDOM.textContent = "Number";
|
nickjillings@1375
|
1915 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1916 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
|
nickjillings@1375
|
1917 var min = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("min")[0]);
|
nickjillings@1375
|
1918 var max = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("max")[0]);
|
nickjillings@1375
|
1919 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1920 this.attributes.push(id);
|
nicholas@2562
|
1921 this.attributeDOM.appendChild(mandatory.holder);
|
nicholas@2562
|
1922 this.attributes.push(mandatory);
|
nickjillings@1375
|
1923 this.attributeDOM.appendChild(min.holder);
|
nickjillings@1375
|
1924 this.attributes.push(min);
|
nickjillings@1375
|
1925 this.attributeDOM.appendChild(max.holder);
|
nickjillings@1375
|
1926 this.attributes.push(max);
|
nickjillings@1375
|
1927 break;
|
nickjillings@1375
|
1928 case "checkbox":
|
nickjillings@1375
|
1929 this.titleDOM.textContent = "Checkbox";
|
nickjillings@1375
|
1930 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1931 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1932 this.attributes.push(id);
|
nickjillings@1375
|
1933 break;
|
nickjillings@1375
|
1934 case "radio":
|
nickjillings@1375
|
1935 this.titleDOM.textContent = "Radio";
|
nickjillings@1375
|
1936 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1937 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1938 this.attributes.push(id);
|
nickjillings@1375
|
1939 break;
|
nicholas@2562
|
1940 case "video":
|
nicholas@2562
|
1941 this.titleDOM.textContent = "Video";
|
nicholas@2562
|
1942 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nicholas@2562
|
1943 this.attributeDOM.appendChild(id.holder);
|
nicholas@2562
|
1944 this.attributes.push(id);
|
nicholas@2562
|
1945 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
|
nicholas@2562
|
1946 var url = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("url")[0]);
|
nicholas@2562
|
1947 this.attributeDOM.appendChild(mandatory.holder);
|
nicholas@2562
|
1948 this.attributes.push(mandatory);
|
nicholas@2562
|
1949 this.attributeDOM.appendChild(url.holder);
|
nicholas@2562
|
1950 this.attributes.push(url);
|
nicholas@2562
|
1951 break;
|
nicholas@2562
|
1952 case "youtube":
|
nicholas@2562
|
1953 this.titleDOM.textContent = "YouTube";
|
nicholas@2562
|
1954 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nicholas@2562
|
1955 this.attributeDOM.appendChild(id.holder);
|
nicholas@2562
|
1956 this.attributes.push(id);
|
nicholas@2562
|
1957 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
|
nicholas@2562
|
1958 var url = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("url")[0]);
|
nicholas@2562
|
1959 this.attributeDOM.appendChild(mandatory.holder);
|
nicholas@2562
|
1960 this.attributes.push(mandatory);
|
nicholas@2562
|
1961 this.attributeDOM.appendChild(url.holder);
|
nicholas@2562
|
1962 this.attributes.push(url);
|
nicholas@2562
|
1963 break;
|
nickjillings@1375
|
1964 }
|
nickjillings@1370
|
1965 }
|
nickjillings@1375
|
1966 this.build();
|
nickjillings@1370
|
1967
|
nicholas@2564
|
1968 var Conditional = function(parent, rootObject) {
|
nicholas@2564
|
1969 this.type = "surveyEntryConditionalNode";
|
nicholas@2564
|
1970 this.rootDOM = document.createElement("div");
|
nicholas@2564
|
1971 this.titleDOM = document.createElement("span");
|
nicholas@2564
|
1972 this.attributeDOM = document.createElement("div");
|
nicholas@2564
|
1973 this.attributes = [];
|
nicholas@2564
|
1974 this.childrenDOM = document.createElement("div");
|
nicholas@2564
|
1975 this.children = [];
|
nicholas@2564
|
1976 this.buttonDOM = document.createElement("div");
|
nicholas@2564
|
1977 this.parent = parent;
|
nicholas@2564
|
1978 this.specification = rootObject;
|
nicholas@2564
|
1979 this.schema = specification.schema.getAllElementsByName("conditional")[0];
|
nicholas@2564
|
1980
|
nicholas@2564
|
1981 this.rootDOM.className = "node";
|
nicholas@2564
|
1982 this.rootDOM.style.minWidth = "50%";
|
nicholas@2564
|
1983
|
nicholas@2564
|
1984 var titleDiv = document.createElement('div');
|
nicholas@2564
|
1985 titleDiv.className = "node-title";
|
nicholas@2564
|
1986 this.titleDOM.className = "node-title";
|
nicholas@2564
|
1987 titleDiv.appendChild(this.titleDOM);
|
nicholas@2564
|
1988
|
nicholas@2564
|
1989 this.attributeDOM.className = "node-attributes";
|
nicholas@2564
|
1990 this.childrenDOM.className = "node-children";
|
nicholas@2564
|
1991 this.buttonDOM.className = "node-buttons";
|
nicholas@2564
|
1992
|
nicholas@2564
|
1993 this.rootDOM.appendChild(titleDiv);
|
nicholas@2564
|
1994 this.rootDOM.appendChild(this.attributeDOM);
|
nicholas@2564
|
1995 this.rootDOM.appendChild(this.childrenDOM);
|
nicholas@2564
|
1996 this.rootDOM.appendChild(this.buttonDOM);
|
nicholas@2564
|
1997
|
nicholas@2564
|
1998 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
|
nicholas@2564
|
1999
|
nicholas@2564
|
2000 for (var i=0; i<attributeList.length; i++) {
|
nicholas@2564
|
2001 var attributeName = attributeList[i].getAttribute("name");
|
nicholas@2564
|
2002 var attribute = convert.convertAttributeToDOM(this.specification,this.schema.getAllElementsByName(attributeName)[0]);
|
nicholas@2564
|
2003 this.attributes.push(attribute);
|
nicholas@2564
|
2004 this.attributeDOM.appendChild(attribute.holder);
|
nicholas@2564
|
2005 }
|
nicholas@2564
|
2006
|
nicholas@2564
|
2007 this.build = function() {
|
nicholas@2564
|
2008 }
|
nicholas@2564
|
2009
|
nicholas@2564
|
2010 this.deleteNode = {
|
nicholas@2564
|
2011 root: document.createElement("button"),
|
nicholas@2564
|
2012 parent: this,
|
nicholas@2564
|
2013 handleEvent: function(event) {
|
nicholas@2564
|
2014 this.root.parentElement.removeChild(this.root);
|
nicholas@2564
|
2015 this.parent.parent.addConditional.root.disabled = false;
|
nicholas@2564
|
2016 var index = this.parent.parent.children.findIndex(function(element){
|
nicholas@2564
|
2017 if (this == element) {return true;} return false;
|
nicholas@2564
|
2018 },this.parent);
|
nicholas@2564
|
2019 if (index >= 0) {
|
nicholas@2564
|
2020 this.parent.parent.children.splice(index,1);
|
nicholas@2564
|
2021 }
|
nicholas@2564
|
2022 }
|
nicholas@2564
|
2023 }
|
nicholas@2564
|
2024 this.deleteNode.root.textContent = "Delete";
|
nicholas@2564
|
2025 this.deleteNode.root.addEventListener("click",this.deleteNode);
|
nicholas@2564
|
2026
|
nicholas@2564
|
2027 this.buttonDOM.appendChild(this.deleteNode.root);
|
nicholas@2564
|
2028 }
|
nicholas@2564
|
2029
|
nicholas@2564
|
2030 this.addConditional = {
|
nicholas@2564
|
2031 root: document.createElement("button"),
|
nicholas@2564
|
2032 parent: this,
|
nicholas@2564
|
2033 handleEvent: function(event) {
|
nicholas@2564
|
2034 var spec = {
|
nicholas@2564
|
2035 check: null,
|
nicholas@2564
|
2036 value: null,
|
nicholas@2564
|
2037 jumpToOnPass: null,
|
nicholas@2564
|
2038 jumpToOnFail: null
|
nicholas@2564
|
2039 };
|
nicholas@2564
|
2040 this.parent.specification.conditions.push(spec);
|
nicholas@2564
|
2041 var condition = new Conditional(this.parent,spec);
|
nicholas@2564
|
2042 this.parent.children.push(condition);
|
nicholas@2564
|
2043 this.parent.childrenDOM.appendChild(condition.rootDOM);
|
nicholas@2564
|
2044 }
|
nicholas@2564
|
2045 }
|
nicholas@2564
|
2046 this.addConditional.root.addEventListener("click",this.addConditional);
|
nicholas@2564
|
2047 this.addConditional.root.textContent = "Add Condition";
|
nicholas@2564
|
2048 this.buttonDOM.appendChild(this.addConditional.root);
|
nicholas@2564
|
2049
|
nickjillings@1370
|
2050 this.editNode = {
|
nickjillings@1370
|
2051 root: document.createElement("button"),
|
nickjillings@1370
|
2052 parent: this,
|
nickjillings@1370
|
2053 handleEvent: function()
|
nickjillings@1370
|
2054 {
|
nickjillings@1370
|
2055 popupObject.show();
|
nickjillings@1375
|
2056 popupStateNodes.state[5].generate(this.parent.specification,this.parent);
|
nickjillings@1370
|
2057 popupObject.postNode(popupStateNodes.state[5]);
|
nickjillings@1370
|
2058 }
|
nickjillings@1370
|
2059 }
|
nickjillings@1370
|
2060 this.editNode.root.textContent = "Edit Entry";
|
nickjillings@1370
|
2061 this.editNode.root.addEventListener("click",this.editNode,false);
|
nickjillings@1370
|
2062 this.buttonDOM.appendChild(this.editNode.root);
|
nickjillings@1370
|
2063
|
nickjillings@1370
|
2064 this.deleteNode = {
|
nickjillings@1370
|
2065 root: document.createElement("button"),
|
nickjillings@1370
|
2066 parent: this,
|
nickjillings@1370
|
2067 handleEvent: function()
|
nickjillings@1370
|
2068 {
|
nickjillings@1370
|
2069 var optionList = this.parent.parent.specification.options;
|
nickjillings@1370
|
2070 var childList = this.parent.parent.children;
|
nickjillings@1370
|
2071 for (var i=0; i <this.parent.parent.specification.options.length; i++)
|
nickjillings@1370
|
2072 {
|
nickjillings@1370
|
2073 var option = this.parent.parent.specification.options[i];
|
nickjillings@1370
|
2074 if (option == this.parent.specification)
|
nickjillings@1370
|
2075 {
|
nickjillings@1370
|
2076 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
|
nickjillings@1370
|
2077 if (i == this.parent.parent.specification.options.length-1)
|
nickjillings@1370
|
2078 {
|
nickjillings@1370
|
2079 optionList = optionList.slice(0,i);
|
nickjillings@1370
|
2080 childList = childList.slice(0,i);
|
nickjillings@1370
|
2081 }
|
nickjillings@1370
|
2082 else {
|
nickjillings@1370
|
2083 optionList = optionList.slice(0,i).concat(optionList.slice(i+1));
|
nickjillings@1370
|
2084 childList = childList.slice(0,i).concat(childList.slice(i+1));
|
nickjillings@1370
|
2085 }
|
nickjillings@1370
|
2086 this.parent.parent.specification.options = optionList;
|
nickjillings@1370
|
2087 this.parent.parent.children = childList;
|
nickjillings@1370
|
2088 }
|
nickjillings@1370
|
2089 }
|
nickjillings@1370
|
2090 }
|
nickjillings@1370
|
2091 }
|
nickjillings@1370
|
2092 this.deleteNode.root.textContent = "Delete Entry";
|
nickjillings@1370
|
2093 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
|
nickjillings@1370
|
2094 this.buttonDOM.appendChild(this.deleteNode.root);
|
n@2414
|
2095
|
n@2416
|
2096 this.moveToPosition = function(new_index){
|
n@2416
|
2097 new_index = Math.min(new_index,this.parent.children.length);
|
n@2416
|
2098 var curr_index = this.parent.children.findIndex(function(elem){
|
n@2416
|
2099 if (elem == this) {return true;} else {return false;}
|
n@2416
|
2100 },this);
|
n@2416
|
2101 // Split at the current location to remove the node and shift all the children up
|
n@2416
|
2102 var tail = this.parent.children.splice(curr_index+1);
|
n@2416
|
2103 this.parent.children.pop();
|
n@2416
|
2104 this.parent.children = this.parent.children.concat(tail);
|
n@2416
|
2105
|
n@2416
|
2106 //Split at the new location and insert the node
|
n@2416
|
2107 tail = this.parent.children.splice(new_index);
|
n@2416
|
2108 this.parent.children.push(this);
|
n@2416
|
2109 this.parent.children = this.parent.children.concat(tail);
|
n@2416
|
2110
|
n@2416
|
2111 // Re-build the specification
|
n@2416
|
2112 this.parent.specification.options = [];
|
n@2416
|
2113 this.parent.childrenDOM.innerHTML = "";
|
n@2416
|
2114 for (var obj of this.parent.children) {
|
n@2416
|
2115 this.parent.specification.options.push(obj.specification);
|
n@2416
|
2116 this.parent.childrenDOM.appendChild(obj.rootDOM);
|
n@2416
|
2117 }
|
n@2420
|
2118 this.parent.children.forEach(function(obj,index){
|
n@2420
|
2119 obj.moveButtons.disable(index);
|
n@2420
|
2120 });
|
n@2414
|
2121 }
|
n@2420
|
2122
|
n@2420
|
2123 this.moveButtons = {
|
n@2420
|
2124 root_up: document.createElement("button"),
|
n@2420
|
2125 root_down: document.createElement("button"),
|
n@2420
|
2126 parent: this,
|
n@2420
|
2127 handleEvent: function(event) {
|
n@2420
|
2128 var index = this.parent.parent.children.indexOf(this.parent);
|
n@2420
|
2129 if (event.currentTarget.getAttribute("direction") == "up") {
|
n@2420
|
2130 index = Math.max(index-1,0);
|
n@2420
|
2131 } else if (event.currentTarget.getAttribute("direction") == "down") {
|
n@2420
|
2132 index = Math.min(index+1,this.parent.parent.children.length-1);
|
n@2420
|
2133 }
|
n@2420
|
2134 this.parent.moveToPosition(index);
|
n@2420
|
2135 this.disable(index);
|
n@2420
|
2136 },
|
n@2420
|
2137 disable: function(index) {
|
n@2420
|
2138 if (index == 0) {
|
n@2420
|
2139 this.root_up.disabled = true;
|
n@2420
|
2140 } else {
|
n@2420
|
2141 this.root_up.disabled = false;
|
n@2420
|
2142 }
|
n@2420
|
2143 if (index == this.parent.parent.children.length-1) {
|
n@2420
|
2144 this.root_down.disabled = true;
|
n@2420
|
2145 } else {
|
n@2420
|
2146 this.root_down.disabled = false;
|
n@2420
|
2147 }
|
n@2420
|
2148 }
|
n@2420
|
2149 }
|
n@2420
|
2150 this.moveButtons.root_up.setAttribute("direction","up");
|
n@2420
|
2151 this.moveButtons.root_down.setAttribute("direction","down");
|
n@2420
|
2152 this.moveButtons.root_up.addEventListener("click",this.moveButtons,false);
|
n@2420
|
2153 this.moveButtons.root_down.addEventListener("click",this.moveButtons,false);
|
n@2420
|
2154 this.moveButtons.root_up.textContent = "Move Up";
|
n@2420
|
2155 this.moveButtons.root_down.textContent = "Move Down";
|
n@2420
|
2156 this.buttonDOM.appendChild(this.moveButtons.root_up);
|
n@2420
|
2157 this.buttonDOM.appendChild(this.moveButtons.root_down);
|
nicholas@2564
|
2158
|
nicholas@2564
|
2159 for (var condition of this.specification.conditions) {
|
nicholas@2564
|
2160 var newNode = new Conditional(this,condition);
|
nicholas@2564
|
2161 this.children.push(newNode);
|
nicholas@2564
|
2162 this.childrenDOM.appendChild(newNode.rootDOM);
|
nicholas@2564
|
2163 }
|
nickjillings@1370
|
2164 }
|
nickjillings@1370
|
2165 this.addNode = {
|
nickjillings@1370
|
2166 root: document.createElement("button"),
|
nickjillings@1370
|
2167 parent: this,
|
nickjillings@1370
|
2168 handleEvent: function()
|
nickjillings@1370
|
2169 {
|
nickjillings@2194
|
2170 var newNode = new this.parent.specification.OptionNode(this.parent.specification);
|
nickjillings@1370
|
2171 this.parent.specification.options.push(newNode);
|
nickjillings@1370
|
2172 popupObject.show();
|
nickjillings@1370
|
2173 popupStateNodes.state[5].generate(newNode,this.parent);
|
nickjillings@1370
|
2174 popupObject.postNode(popupStateNodes.state[5]);
|
nickjillings@1370
|
2175 }
|
nickjillings@1370
|
2176 }
|
nickjillings@1370
|
2177 this.addNode.root.textContent = "Add Survey Entry";
|
nickjillings@1370
|
2178 this.addNode.root.addEventListener("click",this.addNode,false);
|
nickjillings@1370
|
2179 this.buttonDOM.appendChild(this.addNode.root);
|
nickjillings@1370
|
2180
|
nickjillings@1370
|
2181 for (var option of this.specification.options)
|
nickjillings@1370
|
2182 {
|
nickjillings@1370
|
2183 var newNode = new this.surveyEntryNode(this,option);
|
nickjillings@1370
|
2184 this.children.push(newNode);
|
nickjillings@1370
|
2185 this.childrenDOM.appendChild(newNode.rootDOM);
|
nickjillings@1370
|
2186 }
|
n@2420
|
2187
|
n@2420
|
2188 this.children.forEach(function(obj,index){
|
n@2420
|
2189 obj.moveButtons.disable(index);
|
n@2420
|
2190 });
|
nickjillings@1370
|
2191 }
|
nickjillings@1370
|
2192
|
nickjillings@1370
|
2193 this.pageNode = function(parent,rootObject)
|
nickjillings@1370
|
2194 {
|
nickjillings@1375
|
2195 this.type = "pageNode";
|
nickjillings@1370
|
2196 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
2197 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
2198 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
2199 this.attributes = [];
|
nickjillings@1370
|
2200 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
2201 this.children = [];
|
nickjillings@1370
|
2202 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
2203 this.parent = parent;
|
nickjillings@1370
|
2204 this.specification = rootObject;
|
nickjillings@1370
|
2205 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1370
|
2206 this.rootDOM.className = "node";
|
nickjillings@1370
|
2207
|
nickjillings@1370
|
2208 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
2209 titleDiv.className = "node-title";
|
nickjillings@1370
|
2210 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
2211 this.titleDOM.textContent = "Test Page";
|
nickjillings@1370
|
2212 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
2213
|
nickjillings@1370
|
2214 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
2215 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
2216 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
2217
|
nickjillings@1370
|
2218 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
2219 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
2220 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
2221 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
2222
|
nickjillings@1370
|
2223 // Do the comment prefix node
|
nickjillings@1370
|
2224 var cpn = this.parent.createGeneralNodeDOM("Comment Prefix",""+this.specification.id+"-commentprefix",this.parent);
|
nickjillings@1370
|
2225 cpn.rootDOM.removeChild(cpn.attributeDOM);
|
nickjillings@1370
|
2226 var obj = {
|
nickjillings@1370
|
2227 root: document.createElement("div"),
|
nickjillings@1370
|
2228 input: document.createElement("input"),
|
nickjillings@1370
|
2229 parent: this,
|
nickjillings@1370
|
2230 handleEvent: function()
|
nickjillings@1370
|
2231 {
|
nickjillings@1370
|
2232 this.parent.specification.commentBoxPrefix = event.currentTarget.value;
|
nickjillings@1370
|
2233 }
|
nickjillings@1370
|
2234 }
|
nickjillings@1370
|
2235 cpn.children.push(obj);
|
nickjillings@1370
|
2236 cpn.childrenDOM.appendChild(obj.root);
|
nickjillings@1370
|
2237 obj.root.appendChild(obj.input);
|
nickjillings@1370
|
2238 obj.input.addEventListener("change",obj,false);
|
nickjillings@1370
|
2239 obj.input.value = this.specification.commentBoxPrefix;
|
nickjillings@1370
|
2240 this.childrenDOM.appendChild(cpn.rootDOM);
|
nickjillings@1370
|
2241 this.children.push(cpn);
|
nickjillings@1370
|
2242
|
nickjillings@1370
|
2243 // Now both before and after surveys
|
nickjillings@1370
|
2244 if (this.specification.preTest == undefined){
|
nickjillings@2194
|
2245 this.specification.preTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
2246 this.specification.preTest.location = "pre";
|
nickjillings@1370
|
2247 }
|
nickjillings@1370
|
2248 if (this.specification.postTest == undefined){
|
nickjillings@2194
|
2249 this.specification.postTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
2250 this.specification.postTest.location = "post";
|
nickjillings@1370
|
2251 }
|
nickjillings@1370
|
2252 var surveyBefore = new this.parent.surveyNode(this,this.specification.preTest,"Pre");
|
nickjillings@1370
|
2253 var surveyAfter = new this.parent.surveyNode(this,this.specification.postTest,"Post");
|
nickjillings@1370
|
2254 this.children.push(surveyBefore);
|
nickjillings@1370
|
2255 this.children.push(surveyAfter);
|
nickjillings@1370
|
2256 this.childrenDOM.appendChild(surveyBefore.rootDOM);
|
nickjillings@1370
|
2257 this.childrenDOM.appendChild(surveyAfter.rootDOM);
|
nickjillings@1370
|
2258
|
nickjillings@1370
|
2259 // Build the attributes
|
nickjillings@1370
|
2260 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
|
nickjillings@1370
|
2261 for (var i=0; i<attributeList.length; i++)
|
nickjillings@1370
|
2262 {
|
nickjillings@1370
|
2263 var attributeName = attributeList[i].getAttribute('name');
|
nickjillings@1370
|
2264 var attrObject = this.parent.convertAttributeToDOM(rootObject,attributeList[i]);
|
nickjillings@1370
|
2265 this.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
2266 this.attributes.push(attrObject);
|
nickjillings@1370
|
2267 }
|
nickjillings@1370
|
2268
|
nickjillings@1370
|
2269 this.interfaces = [];
|
nickjillings@1370
|
2270
|
n@2421
|
2271 this.getAudioElements = function() {
|
n@2421
|
2272 var array = [];
|
n@2421
|
2273 for (var i=0; i<this.children.length; i++) {
|
n@2421
|
2274 if (this.children[i].type == "audioElementNode") {
|
n@2421
|
2275 array[array.length] = this.children[i];
|
n@2421
|
2276 }
|
n@2421
|
2277 }
|
n@2421
|
2278 return array;
|
n@2421
|
2279 }
|
n@2421
|
2280
|
n@2421
|
2281 this.redrawChildren = function() {
|
n@2421
|
2282 this.childrenDOM.innerHTML = "";
|
n@2421
|
2283 for(var child of this.children) {
|
n@2421
|
2284 this.childrenDOM.appendChild(child.rootDOM);
|
n@2421
|
2285 }
|
n@2421
|
2286 }
|
n@2421
|
2287
|
nickjillings@1370
|
2288 this.audioElementNode = function(parent,rootObject)
|
nickjillings@1370
|
2289 {
|
nickjillings@1375
|
2290 this.type = "audioElementNode";
|
nickjillings@1370
|
2291 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
2292 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
2293 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
2294 this.attributes = [];
|
nickjillings@1370
|
2295 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
2296 this.children = [];
|
nickjillings@1370
|
2297 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
2298 this.parent = parent;
|
nickjillings@1370
|
2299 this.specification = rootObject;
|
nickjillings@1370
|
2300 this.schema = specification.schema.getAllElementsByName("audioelement")[0];
|
nickjillings@1370
|
2301 this.rootDOM.className = "node";
|
nickjillings@1370
|
2302
|
nickjillings@1370
|
2303 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
2304 titleDiv.className = "node-title";
|
nickjillings@1370
|
2305 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
2306 this.titleDOM.textContent = "Audio Element";
|
nickjillings@1370
|
2307 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
2308
|
nickjillings@1370
|
2309 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
2310 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
2311 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
2312
|
nickjillings@1370
|
2313 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
2314 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
2315 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
2316 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
2317
|
nickjillings@1370
|
2318 // Build the attributes
|
nickjillings@1370
|
2319 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
|
nickjillings@1370
|
2320 for (var i=0; i<attributeList.length; i++)
|
nickjillings@1370
|
2321 {
|
nickjillings@1370
|
2322 var attributeName = attributeList[i].getAttribute('name');
|
nickjillings@1370
|
2323 var attrObject = this.parent.parent.convertAttributeToDOM(rootObject,attributeList[i]);
|
nickjillings@1370
|
2324 this.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
2325 this.attributes.push(attrObject);
|
nickjillings@1370
|
2326 }
|
nickjillings@1370
|
2327
|
nickjillings@1370
|
2328 this.deleteNode = {
|
nickjillings@1370
|
2329 root: document.createElement("button"),
|
nickjillings@1370
|
2330 parent: this,
|
nickjillings@1370
|
2331 handleEvent: function()
|
nickjillings@1370
|
2332 {
|
nickjillings@1370
|
2333 var i = this.parent.parent.specification.audioElements.findIndex(this.findNode,this);
|
nickjillings@1370
|
2334 if (i >= 0) {
|
nickjillings@1370
|
2335 var aeList = this.parent.parent.specification.audioElements;
|
nickjillings@1370
|
2336 if (i < aeList.length-1) {
|
nickjillings@1370
|
2337 aeList = aeList.slice(0,i).concat(aeList.slice(i+1));
|
nickjillings@1370
|
2338 } else {
|
nickjillings@1370
|
2339 aeList = aeList.slice(0,i);
|
nickjillings@1370
|
2340 }
|
nickjillings@1370
|
2341 }
|
nickjillings@1370
|
2342 i = this.parent.parent.children.findIndex(function(element,index,array){
|
nickjillings@1370
|
2343 if (element == this.parent)
|
nickjillings@1370
|
2344 return true;
|
nickjillings@1370
|
2345 else
|
nickjillings@1370
|
2346 return false;
|
nickjillings@1370
|
2347 },this);
|
nickjillings@1370
|
2348 if (i >= 0) {
|
nickjillings@1370
|
2349 var childList = this.parent.children;
|
nickjillings@1370
|
2350 if (i < aeList.length-1) {
|
nickjillings@1370
|
2351 childList = childList.slice(0,i).concat(childList.slice(i+1));
|
nickjillings@1370
|
2352 } else {
|
nickjillings@1370
|
2353 childList = childList.slice(0,i);
|
nickjillings@1370
|
2354 }
|
nickjillings@1370
|
2355 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
|
nickjillings@1370
|
2356 }
|
nickjillings@1370
|
2357 },
|
nickjillings@1370
|
2358 findNode: function(element,index,array){
|
nickjillings@1370
|
2359 if (element == this.parent.specification)
|
nickjillings@1370
|
2360 return true;
|
nickjillings@1370
|
2361 else
|
nickjillings@1370
|
2362 return false;
|
nickjillings@1370
|
2363 }
|
nickjillings@1370
|
2364 }
|
nickjillings@1370
|
2365 this.deleteNode.root.textContent = "Delete Entry";
|
nickjillings@1370
|
2366 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
|
nickjillings@1370
|
2367 this.buttonDOM.appendChild(this.deleteNode.root);
|
n@2421
|
2368
|
n@2421
|
2369 this.moveButtons = {
|
n@2421
|
2370 root_up: document.createElement("button"),
|
n@2421
|
2371 root_down: document.createElement("button"),
|
n@2421
|
2372 parent: this,
|
n@2421
|
2373 handleEvent: function(event) {
|
n@2421
|
2374 var index = this.parent.parent.getAudioElements().indexOf(this.parent);
|
n@2421
|
2375 if (event.currentTarget.getAttribute("direction") == "up") {
|
n@2421
|
2376 index = Math.max(index-1,0);
|
n@2421
|
2377 } else if (event.currentTarget.getAttribute("direction") == "down") {
|
n@2421
|
2378 index = Math.min(index+1,this.parent.parent.getAudioElements().length-1);
|
n@2421
|
2379 }
|
n@2421
|
2380 this.parent.moveToPosition(index);
|
n@2421
|
2381 this.disable(index);
|
n@2421
|
2382 },
|
n@2421
|
2383 disable: function(index) {
|
n@2421
|
2384 if (index == 0) {
|
n@2421
|
2385 this.root_up.disabled = true;
|
n@2421
|
2386 } else {
|
n@2421
|
2387 this.root_up.disabled = false;
|
n@2421
|
2388 }
|
n@2421
|
2389 if (index == this.parent.parent.getAudioElements().length-1) {
|
n@2421
|
2390 this.root_down.disabled = true;
|
n@2421
|
2391 } else {
|
n@2421
|
2392 this.root_down.disabled = false;
|
n@2421
|
2393 }
|
n@2421
|
2394 }
|
n@2421
|
2395 }
|
n@2421
|
2396 this.moveButtons.root_up.setAttribute("direction","up");
|
n@2421
|
2397 this.moveButtons.root_down.setAttribute("direction","down");
|
n@2421
|
2398 this.moveButtons.root_up.addEventListener("click",this.moveButtons,false);
|
n@2421
|
2399 this.moveButtons.root_down.addEventListener("click",this.moveButtons,false);
|
n@2421
|
2400 this.moveButtons.root_up.textContent = "Move Up";
|
n@2421
|
2401 this.moveButtons.root_down.textContent = "Move Down";
|
n@2421
|
2402 this.buttonDOM.appendChild(this.moveButtons.root_up);
|
n@2421
|
2403 this.buttonDOM.appendChild(this.moveButtons.root_down);
|
n@2421
|
2404
|
n@2421
|
2405 this.moveToPosition = function(new_index) {
|
n@2421
|
2406
|
n@2421
|
2407 // Get the zero-th Object
|
n@2421
|
2408 var zero_object = this.parent.getAudioElements()[0];
|
n@2421
|
2409 var parent_children_root_index = this.parent.children.indexOf(zero_object);
|
n@2421
|
2410 // splice out the array for processing
|
n@2421
|
2411 var process_array = this.parent.children.splice(parent_children_root_index);
|
n@2421
|
2412
|
n@2421
|
2413
|
n@2421
|
2414 new_index = Math.min(new_index, process_array.length);
|
n@2421
|
2415 var curr_index = process_array.findIndex(function(elem){
|
n@2421
|
2416 if (elem == this) {return true;} else {return false;}
|
n@2421
|
2417 },this);
|
n@2421
|
2418
|
n@2421
|
2419 // Split at the current location to remove the node and shift all the children up
|
n@2421
|
2420 var tail = process_array.splice(curr_index+1);
|
n@2421
|
2421 process_array.pop();
|
n@2421
|
2422 process_array = process_array.concat(tail);
|
n@2421
|
2423
|
n@2421
|
2424 //Split at the new location and insert the node
|
n@2421
|
2425 tail = process_array.splice(new_index);
|
n@2421
|
2426 process_array.push(this);
|
n@2421
|
2427 process_array = process_array.concat(tail);
|
n@2421
|
2428
|
n@2421
|
2429 // Re-attach to the parent.children
|
n@2421
|
2430 this.parent.children = this.parent.children.concat(process_array);
|
n@2421
|
2431
|
n@2421
|
2432 // Re-build the specification
|
n@2421
|
2433 this.parent.specification.audioElements = [];
|
n@2421
|
2434 for (var obj of process_array) {
|
n@2421
|
2435 this.parent.specification.audioElements.push(obj.specification);
|
n@2421
|
2436 }
|
n@2421
|
2437 this.parent.redrawChildren();
|
n@2421
|
2438
|
n@2421
|
2439 process_array.forEach(function(obj,index){
|
n@2421
|
2440 obj.moveButtons.disable(index);
|
n@2421
|
2441 });
|
n@2421
|
2442
|
n@2421
|
2443 }
|
nickjillings@1370
|
2444 }
|
nickjillings@1370
|
2445
|
nickjillings@1370
|
2446 this.commentQuestionNode = function(parent,rootObject)
|
nickjillings@1370
|
2447 {
|
nickjillings@1375
|
2448 this.type = "commentQuestionNode";
|
nickjillings@1370
|
2449 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
2450 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
2451 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
2452 this.attributes = [];
|
nickjillings@1370
|
2453 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
2454 this.children = [];
|
nickjillings@1370
|
2455 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
2456 this.parent = parent;
|
nickjillings@1370
|
2457 this.specification = rootObject;
|
nickjillings@1370
|
2458 this.schema = specification.schema.getAllElementsByName("page")[0];
|
n@2421
|
2459 this.rootDOM.className = "node audio-element";
|
nickjillings@1370
|
2460
|
nickjillings@1370
|
2461 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
2462 titleDiv.className = "node-title";
|
nickjillings@1370
|
2463 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
2464 this.titleDOM.textContent = "Test Page";
|
nickjillings@1370
|
2465 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
2466
|
nickjillings@1370
|
2467 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
2468 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
2469 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
2470
|
nickjillings@1370
|
2471 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
2472 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
2473 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
2474 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
2475
|
nickjillings@1370
|
2476 }
|
nickjillings@1370
|
2477
|
nickjillings@1374
|
2478 // Build the components
|
nickjillings@1310
|
2479 if (this.specification.interfaces.length == 0) {
|
nickjillings@2194
|
2480 this.specification.interfaces.push(new specification.interfaceNode(specification));
|
nickjillings@1310
|
2481 }
|
nickjillings@1381
|
2482 for (var interfaceObj of this.specification.interfaces)
|
nickjillings@1381
|
2483 {
|
nickjillings@1381
|
2484 var newInterface = new this.parent.interfaceNode(this.parent,interfaceObj);
|
nickjillings@1381
|
2485 newInterface.build("Interface",""+this.specification.id+"-interface",this.childrenDOM);
|
nickjillings@1381
|
2486 this.children.push(newInterface);
|
nickjillings@1381
|
2487 this.interfaces.push(newInterface);
|
nickjillings@1381
|
2488 }
|
nickjillings@1381
|
2489
|
nickjillings@1374
|
2490 for (var elements of this.specification.audioElements)
|
nickjillings@1374
|
2491 {
|
nickjillings@1374
|
2492 var audioElementDOM = new this.audioElementNode(this,elements);
|
nickjillings@1374
|
2493 this.children.push(audioElementDOM);
|
nickjillings@1374
|
2494 this.childrenDOM.appendChild(audioElementDOM.rootDOM);
|
nickjillings@1374
|
2495 }
|
nickjillings@1374
|
2496
|
n@2421
|
2497 this.getAudioElements().forEach(function(elem){
|
n@2421
|
2498 elem.moveButtons.disable();
|
n@2421
|
2499 });
|
n@2421
|
2500
|
nickjillings@1370
|
2501 this.addInterface = {
|
nickjillings@1370
|
2502 root: document.createElement("button"),
|
nickjillings@1370
|
2503 parent: this,
|
nickjillings@1370
|
2504 handleEvent: function() {
|
nickjillings@2194
|
2505 var InterfaceObj = new specification.interfaceNode(specification);
|
nickjillings@1370
|
2506 var newInterface = new this.parent.parent.interfaceNode(this.parent.parent,InterfaceObj);
|
nickjillings@1370
|
2507 newInterface.build("Interface",""+this.parent.specification.id+"-interface",this.parent.childrenDOM);
|
nickjillings@1370
|
2508 this.parent.children.push(newInterface);
|
nickjillings@1370
|
2509 this.parent.specification.interfaces.push(InterfaceObj);
|
nickjillings@1370
|
2510 this.parent.interfaces.push(newInterface);
|
nickjillings@1370
|
2511 }
|
nickjillings@1370
|
2512 }
|
nickjillings@1370
|
2513 this.addInterface.root.textContent = "Add Interface";
|
nickjillings@1370
|
2514 this.addInterface.root.addEventListener("click",this.addInterface,false);
|
nickjillings@1370
|
2515 this.buttonDOM.appendChild(this.addInterface.root);
|
nickjillings@1370
|
2516
|
nickjillings@1370
|
2517 this.addAudioElement = {
|
nickjillings@1370
|
2518 root: document.createElement("button"),
|
nickjillings@1370
|
2519 parent: this,
|
nickjillings@1370
|
2520 handleEvent: function() {
|
nickjillings@2194
|
2521 var audioElementObject = new this.parent.specification.audioElementNode(specification);
|
nickjillings@1370
|
2522 var audioElementDOM = new this.parent.audioElementNode(this.parent,audioElementObject);
|
nickjillings@1370
|
2523 this.parent.specification.audioElements.push(audioElementObject);
|
nickjillings@1370
|
2524 this.parent.children.push(audioElementDOM);
|
nickjillings@1370
|
2525 this.parent.childrenDOM.appendChild(audioElementDOM.rootDOM);
|
nickjillings@1370
|
2526 }
|
nickjillings@1370
|
2527 }
|
nickjillings@1370
|
2528 this.addAudioElement.root.textContent = "Add Audio Element";
|
nickjillings@1370
|
2529 this.addAudioElement.root.addEventListener("click",this.addAudioElement,false);
|
nickjillings@1370
|
2530 this.buttonDOM.appendChild(this.addAudioElement.root);
|
nickjillings@1370
|
2531 }
|
nickjillings@1370
|
2532 } |