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;
|
nickjillings@1375
|
858 case "checkbox":
|
nickjillings@1375
|
859 case "radio":
|
nickjillings@1375
|
860 this.dynamic.appendChild(id);
|
nickjillings@1375
|
861 var optionHolder = document.createElement("div");
|
nickjillings@1375
|
862 optionHolder.className = 'node';
|
nickjillings@1375
|
863 optionHolder.id = 'popup-option-holder';
|
nickjillings@1375
|
864 var optionObject = function(parent,option) {
|
nickjillings@1375
|
865 this.rootDOM = document.createElement("div");
|
nickjillings@1375
|
866 this.rootDOM.className = "popup-option-entry";
|
nickjillings@1375
|
867 this.inputName = document.createElement("input");
|
nickjillings@1375
|
868 this.inputName.setAttribute("name","name");
|
nickjillings@1375
|
869 this.inputLabel = document.createElement("input");
|
nickjillings@1375
|
870 this.inputLabel.setAttribute("name","text");
|
nickjillings@1375
|
871 this.specification = option;
|
nickjillings@1375
|
872 this.parent = parent;
|
nickjillings@1375
|
873 this.handleEvent = function()
|
nickjillings@1375
|
874 {
|
nickjillings@1375
|
875 var target = event.currentTarget.getAttribute("name");
|
nickjillings@1375
|
876 eval("this.specification."+target+" = event.currentTarget.value");
|
nickjillings@1375
|
877 };
|
nickjillings@1375
|
878
|
nickjillings@1375
|
879 var nameText = document.createElement("span");
|
nickjillings@1375
|
880 nameText.textContent = "Name: ";
|
nickjillings@1375
|
881 var labelText = document.createElement("span");
|
nickjillings@1375
|
882 labelText.textContent = "Label: ";
|
nickjillings@1375
|
883 this.rootDOM.appendChild(nameText);
|
nickjillings@1375
|
884 this.rootDOM.appendChild(this.inputName);
|
nickjillings@1375
|
885 this.rootDOM.appendChild(labelText);
|
nickjillings@1375
|
886 this.rootDOM.appendChild(this.inputLabel);
|
nickjillings@1375
|
887 this.inputName.addEventListener("change",this,false);
|
nickjillings@1375
|
888 this.inputLabel.addEventListener("change",this,false);
|
nickjillings@1375
|
889 this.inputName.value = this.specification.name;
|
nickjillings@1375
|
890 this.inputLabel.value = this.specification.text;
|
nickjillings@2180
|
891 this.inputLabel.style.width = "350px";
|
nickjillings@1375
|
892
|
nickjillings@1375
|
893 this.deleteEntry = {
|
nickjillings@1375
|
894 root: document.createElement("button"),
|
nickjillings@1375
|
895 parent: this,
|
nickjillings@1375
|
896 handleEvent: function() {
|
nickjillings@1375
|
897 document.getElementById("popup-option-holder").removeChild(this.parent.rootDOM);
|
nickjillings@1375
|
898 var index = this.parent.parent.option.options.findIndex(function(element,index,array){
|
nickjillings@1375
|
899 if (element == this.parent.specification)
|
nickjillings@1375
|
900 return true;
|
nickjillings@1375
|
901 else
|
nickjillings@1375
|
902 return false;
|
nickjillings@1375
|
903 },this);
|
nickjillings@1375
|
904 var optionList = this.parent.parent.option.options;
|
nickjillings@1375
|
905 if (index == optionList.length-1) {
|
nickjillings@1375
|
906 optionList = optionList.slice(0,index);
|
nickjillings@1375
|
907 } else {
|
nickjillings@1375
|
908 optionList = optionList.slice(0,index).concat(optionList.slice(index+1));
|
nickjillings@1375
|
909 }
|
nickjillings@1375
|
910 this.parent.parent.option.options = optionList;
|
nickjillings@1375
|
911 }
|
nickjillings@1375
|
912 };
|
nickjillings@1375
|
913 this.deleteEntry.root.textContent = "Delete Option";
|
nickjillings@1375
|
914 this.deleteEntry.root.addEventListener("click",this.deleteEntry,false);
|
nickjillings@1375
|
915 this.rootDOM.appendChild(this.deleteEntry.root);
|
nickjillings@1375
|
916 }
|
nickjillings@2158
|
917 this.addEntry = {
|
nickjillings@2158
|
918 parent: this,
|
nickjillings@2158
|
919 root: document.createElement("button"),
|
nickjillings@2158
|
920 handleEvent: function() {
|
nickjillings@2158
|
921 var node = {name: "name", text: "text"};
|
nickjillings@2158
|
922 var optionsList = this.parent.option.options;
|
nickjillings@2158
|
923 optionsList.push(node);
|
nickjillings@2158
|
924 var obj = new optionObject(this.parent,optionsList[optionsList.length-1]);
|
nickjillings@2158
|
925 this.parent.optionLists.push(obj);
|
nickjillings@2158
|
926 document.getElementById("popup-option-holder").appendChild(obj.rootDOM);
|
nickjillings@2158
|
927 }
|
nickjillings@2158
|
928 }
|
nickjillings@2158
|
929 this.addEntry.root.textContent = "Add Option";
|
nickjillings@2158
|
930 this.addEntry.root.addEventListener("click",this.addEntry);
|
nickjillings@2158
|
931 this.dynamic.appendChild(this.addEntry.root);
|
nickjillings@1375
|
932 for (var i=0; i<this.option.options.length; i++)
|
nickjillings@1375
|
933 {
|
nickjillings@1375
|
934 var obj = new optionObject(this,this.option.options[i]);
|
nickjillings@1375
|
935 this.optionLists.push(obj);
|
nickjillings@1375
|
936 optionHolder.appendChild(obj.rootDOM);
|
nickjillings@1375
|
937 }
|
nickjillings@1375
|
938 this.dynamic.appendChild(optionHolder);
|
nickjillings@1370
|
939 }
|
nickjillings@1370
|
940 }
|
nickjillings@1370
|
941 this.handleEvent = function()
|
nickjillings@1370
|
942 {
|
nickjillings@1370
|
943 var name = event.currentTarget.getAttribute("name");
|
nickjillings@2159
|
944 var nodeName = event.currentTarget.nodeName;
|
nickjillings@2159
|
945 if (name == "type" && nodeName == "SELECT") {
|
nickjillings@2159
|
946 // If type has changed, we may need to rebuild the entire state node
|
nickjillings@2159
|
947 if (event.currentTarget.value != this.option.name)
|
nickjillings@2159
|
948 {
|
nickjillings@2159
|
949 this.option.type = event.currentTarget.value;
|
nickjillings@2159
|
950 this.generate(this.option,this.parent);
|
nickjillings@2159
|
951 }
|
nickjillings@2159
|
952 return;
|
nickjillings@2159
|
953 }
|
nickjillings@2162
|
954 switch(event.currentTarget.getAttribute("type")) {
|
nickjillings@2159
|
955 case "checkbox":
|
nickjillings@2159
|
956 eval("this.option."+name+" = event.currentTarget.checked");
|
nickjillings@1370
|
957 break;
|
nickjillings@2159
|
958 default:
|
nickjillings@2159
|
959 eval("this.option."+name+" = event.currentTarget.value");
|
nickjillings@1370
|
960 break;
|
nickjillings@1370
|
961 }
|
nickjillings@1370
|
962 }
|
nickjillings@1370
|
963 this.continue = function()
|
nickjillings@1370
|
964 {
|
nickjillings@1375
|
965 if (this.parent.type == "surveyNode")
|
nickjillings@1375
|
966 {
|
nickjillings@1375
|
967 var newNode = new this.parent.surveyEntryNode(this.parent,this.option);
|
nickjillings@1375
|
968 this.parent.children.push(newNode);
|
nickjillings@1375
|
969 this.parent.childrenDOM.appendChild(newNode.rootDOM);
|
nickjillings@1375
|
970 } else if (this.parent.type == "surveyEntryNode") {
|
nickjillings@1375
|
971 this.parent.build();
|
nickjillings@1375
|
972 }
|
nickjillings@1370
|
973 popupObject.hide();
|
nickjillings@1370
|
974 }
|
nickjillings@1370
|
975 }
|
nickjillings@1385
|
976 this.state[6] = new function() {
|
nickjillings@1385
|
977 this.title = "Edit Scale Markers";
|
nickjillings@1385
|
978 this.content = document.createElement("div");
|
nickjillings@1385
|
979 this.content.id = "state-6";
|
nickjillings@1385
|
980 var spnH = document.createElement('div');
|
nickjillings@1385
|
981 var span = document.createElement("span");
|
nickjillings@1385
|
982 span.textContent = "You can edit your scale markers here for the selected interface.";
|
nickjillings@1385
|
983 spnH.appendChild(span);
|
nickjillings@1385
|
984 this.scaleRoot;
|
nickjillings@1385
|
985 this.parent;
|
nickjillings@1385
|
986 this.markerNodes =[];
|
nickjillings@1385
|
987 this.preset = {
|
nickjillings@1385
|
988 input: document.createElement("select"),
|
nickjillings@1385
|
989 parent: this,
|
nickjillings@1385
|
990 handleEvent: function(event) {
|
nickjillings@1385
|
991 this.parent.scaleRoot.scales = [];
|
nickjillings@1385
|
992 var protoScale = interfaceSpecs.getAllElementsByTagName('scaledefinitions')[0].getAllElementsByName(event.currentTarget.value)[0];
|
nicholas@2390
|
993 var protoMarkers = protoScale.getElementsByTagName("scale");
|
nickjillings@1385
|
994 for (var i=0; i<protoMarkers.length; i++)
|
nickjillings@1385
|
995 {
|
nickjillings@1385
|
996 var marker = {
|
nickjillings@1385
|
997 position: protoMarkers[i].getAttribute("position"),
|
nickjillings@1385
|
998 text: protoMarkers[i].textContent
|
nickjillings@1385
|
999 }
|
nickjillings@1385
|
1000 this.parent.scaleRoot.scales.push(marker);
|
nickjillings@1385
|
1001 }
|
nickjillings@1385
|
1002 this.parent.buildMarkerList();
|
nickjillings@1385
|
1003 }
|
nickjillings@1385
|
1004 }
|
nickjillings@1385
|
1005 this.preset.input.addEventListener("change",this.preset);
|
nickjillings@1385
|
1006 this.content.appendChild(this.preset.input);
|
nickjillings@1385
|
1007 var optionHolder = document.createElement("div");
|
nickjillings@1385
|
1008 optionHolder.className = 'node';
|
nickjillings@1385
|
1009 optionHolder.id = 'popup-option-holder';
|
nickjillings@1385
|
1010 this.content.appendChild(optionHolder);
|
nickjillings@1385
|
1011 this.generate = function(scaleRoot,parent)
|
nickjillings@1385
|
1012 {
|
nickjillings@1385
|
1013 this.scaleRoot = scaleRoot;
|
nickjillings@1385
|
1014 this.parent = parent;
|
nickjillings@1385
|
1015
|
nickjillings@1385
|
1016 // Generate Pre-Set dropdown
|
nicholas@2390
|
1017 var protoScales = interfaceSpecs.getAllElementsByTagName('scaledefinitions')[0].getElementsByTagName("scale");
|
nickjillings@1385
|
1018 this.preset.input.innerHTML = "";
|
nickjillings@1385
|
1019
|
nickjillings@1385
|
1020 for (var i=0; i<protoScales.length; i++)
|
nickjillings@1385
|
1021 {
|
nickjillings@1385
|
1022 var selectOption = document.createElement("option");
|
nickjillings@1385
|
1023 var scaleName = protoScales[i].getAttribute("name");
|
nickjillings@1385
|
1024 selectOption.setAttribute("name",scaleName);
|
nickjillings@1385
|
1025 selectOption.textContent = scaleName;
|
nickjillings@1385
|
1026 this.preset.input.appendChild(selectOption);
|
nickjillings@1385
|
1027 }
|
nickjillings@1385
|
1028
|
nickjillings@2115
|
1029 this.addMarker = {
|
nickjillings@2115
|
1030 root: document.createElement("button"),
|
nickjillings@2115
|
1031 parent: this,
|
nickjillings@2115
|
1032 handleEvent: function() {
|
nickjillings@2115
|
1033 var marker = {
|
nickjillings@2115
|
1034 position: 0,
|
nickjillings@2115
|
1035 text: "text"
|
nickjillings@2115
|
1036 };
|
nickjillings@2115
|
1037 this.parent.scaleRoot.scales.push(marker);
|
nickjillings@2115
|
1038 var markerNode = new this.parent.buildMarkerNode(this.parent,marker);
|
nickjillings@2115
|
1039 document.getElementById("popup-option-holder").appendChild(markerNode.root);
|
nickjillings@2115
|
1040 this.parent.markerNodes.push(markerNode);
|
nickjillings@2115
|
1041 }
|
nickjillings@2115
|
1042 };
|
nickjillings@2115
|
1043 this.addMarker.root.textContent = "Add Marker";
|
nickjillings@2115
|
1044 this.addMarker.root.addEventListener("click",this.addMarker);
|
nickjillings@2115
|
1045 this.content.appendChild(this.addMarker.root);
|
nickjillings@2115
|
1046
|
nickjillings@1385
|
1047 // Create Marker List
|
nickjillings@1385
|
1048 this.buildMarkerList();
|
nickjillings@1385
|
1049 }
|
nickjillings@1385
|
1050 this.buildMarkerList = function() {
|
nickjillings@1385
|
1051 var markerInject = document.getElementById("popup-option-holder");
|
nickjillings@1385
|
1052 markerInject.innerHTML = "";
|
nickjillings@1385
|
1053 this.markerNodes = [];
|
nickjillings@1385
|
1054 for (var i=0; i<this.scaleRoot.scales.length; i++)
|
nickjillings@1385
|
1055 {
|
nickjillings@2115
|
1056 var markerNode = new this.buildMarkerNode(this,this.scaleRoot.scales[i]);
|
nickjillings@1385
|
1057 markerInject.appendChild(markerNode.root);
|
nickjillings@1385
|
1058 this.markerNodes.push(markerNode);
|
nickjillings@1385
|
1059
|
nickjillings@1385
|
1060 }
|
nickjillings@1385
|
1061 }
|
nickjillings@2115
|
1062
|
nickjillings@2115
|
1063 this.buildMarkerNode = function(parent,specification) {
|
nickjillings@2115
|
1064 this.root = document.createElement("div");
|
nickjillings@2115
|
1065 this.root.className = "popup-option-entry";
|
nickjillings@2115
|
1066 this.positionInput = document.createElement("input");
|
nickjillings@2115
|
1067 this.positionInput.min = 0;
|
nickjillings@2115
|
1068 this.positionInput.max = 100;
|
nickjillings@2115
|
1069 this.positionInput.value = specification.position;
|
nickjillings@2115
|
1070 this.positionInput.setAttribute("name","position");
|
nickjillings@2115
|
1071 this.textInput = document.createElement("input");
|
nickjillings@2115
|
1072 this.textInput.setAttribute("name","text");
|
nickjillings@2180
|
1073 this.textInput.style.width = "300px";
|
nickjillings@2115
|
1074 this.textInput.value = specification.text;
|
nickjillings@2115
|
1075 this.specification = specification;
|
nickjillings@2115
|
1076 this.parent = parent;
|
nickjillings@2115
|
1077 this.handleEvent = function(event) {
|
nickjillings@2115
|
1078 switch(event.currentTarget.getAttribute("name"))
|
nickjillings@2115
|
1079 {
|
nickjillings@2115
|
1080 case "position":
|
nickjillings@2115
|
1081 this.specification.position = Number(event.currentTarget.value);
|
nickjillings@2115
|
1082 break;
|
nickjillings@2115
|
1083 case "text":
|
nickjillings@2115
|
1084 this.specification.text = event.currentTarget.value;
|
nickjillings@2115
|
1085 break;
|
nickjillings@2115
|
1086 }
|
nickjillings@2115
|
1087 }
|
nickjillings@2115
|
1088 this.positionInput.addEventListener("change",this,false);
|
nickjillings@2115
|
1089 this.textInput.addEventListener("change",this,false);
|
nickjillings@2115
|
1090
|
nickjillings@2115
|
1091 var posText = document.createElement("span");
|
nickjillings@2115
|
1092 posText.textContent = "Position: ";
|
nickjillings@2115
|
1093 var textText = document.createElement("span");
|
nickjillings@2115
|
1094 textText.textContent = "Text: ";
|
nickjillings@2115
|
1095 this.root.appendChild(posText);
|
nickjillings@2115
|
1096 this.root.appendChild(this.positionInput);
|
nickjillings@2115
|
1097 this.root.appendChild(textText);
|
nickjillings@2115
|
1098 this.root.appendChild(this.textInput);
|
nickjillings@2115
|
1099
|
nickjillings@2115
|
1100 this.deleteMarker = {
|
nickjillings@2115
|
1101 root: document.createElement("button"),
|
nickjillings@2115
|
1102 parent: this,
|
nickjillings@2115
|
1103 handleEvent: function() {
|
nickjillings@2115
|
1104 var index = this.parent.parent.scaleRoot.scales.findIndex(function(element,index,array){
|
nickjillings@2115
|
1105 if (element == this) {return true;} else {return false;}
|
nickjillings@2115
|
1106 },this.parent.specification)
|
nickjillings@2115
|
1107 if (index >= 0) {
|
nickjillings@2115
|
1108 this.parent.parent.scaleRoot.scales.splice(index,1);
|
nickjillings@2115
|
1109 }
|
nickjillings@2115
|
1110 document.getElementById("popup-option-holder").removeChild(this.parent.root);
|
nickjillings@2115
|
1111 }
|
nickjillings@2115
|
1112 }
|
nickjillings@2115
|
1113 this.deleteMarker.root.addEventListener("click",this.deleteMarker);
|
nickjillings@2115
|
1114 this.deleteMarker.root.textContent = "Delete Marker"
|
nickjillings@2115
|
1115 this.root.appendChild(this.deleteMarker.root);
|
nickjillings@2115
|
1116 }
|
nickjillings@1385
|
1117 }
|
nickjillings@1370
|
1118 }
|
nickjillings@1370
|
1119 }
|
nickjillings@1370
|
1120
|
nickjillings@1370
|
1121 function SpecificationToHTML()
|
nickjillings@1370
|
1122 {
|
nickjillings@1370
|
1123 // This takes the specification node and converts it to an on-page HTML object
|
nickjillings@1370
|
1124 // Each Specification Node is given its own JS object which listens to the XSD for instant verification
|
nickjillings@1370
|
1125 // Once generated, it directly binds into the specification object to update with changes
|
nickjillings@1370
|
1126 // Fixed DOM entries
|
nickjillings@1370
|
1127 this.injectDOM;
|
nickjillings@1370
|
1128 this.setupDOM;
|
nickjillings@1370
|
1129 this.pages = [];
|
nickjillings@1370
|
1130
|
nickjillings@1370
|
1131 // Self-contained generators
|
nickjillings@1370
|
1132 this.createGeneralNodeDOM = function(name,id,parent)
|
nickjillings@1370
|
1133 {
|
nickjillings@1375
|
1134 this.type = name;
|
nickjillings@1370
|
1135 var root = document.createElement('div');
|
nickjillings@1370
|
1136 root.id = id;
|
nickjillings@1370
|
1137 root.className = "node";
|
nickjillings@1370
|
1138
|
nickjillings@1370
|
1139 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1140 titleDiv.className = "node-title";
|
nickjillings@1370
|
1141 var title = document.createElement('span');
|
nickjillings@1370
|
1142 title.className = "node-title";
|
nickjillings@1370
|
1143 title.textContent = name;
|
nickjillings@1370
|
1144 titleDiv.appendChild(title);
|
nickjillings@1370
|
1145
|
nickjillings@1370
|
1146 var attributeDiv = document.createElement('div');
|
nickjillings@1370
|
1147 attributeDiv.className = "node-attributes";
|
nickjillings@1370
|
1148
|
nickjillings@1370
|
1149 var childrenDiv = document.createElement('div');
|
nickjillings@1370
|
1150 childrenDiv.className = "node-children";
|
nickjillings@1370
|
1151
|
nickjillings@1370
|
1152 var buttonsDiv = document.createElement('div');
|
nickjillings@1370
|
1153 buttonsDiv.className = "node-buttons";
|
nickjillings@1370
|
1154
|
nickjillings@1370
|
1155 root.appendChild(titleDiv);
|
nickjillings@1370
|
1156 root.appendChild(attributeDiv);
|
nickjillings@1370
|
1157 root.appendChild(childrenDiv);
|
nickjillings@1370
|
1158 root.appendChild(buttonsDiv);
|
nickjillings@1370
|
1159
|
nickjillings@1370
|
1160 var obj = {
|
nickjillings@1370
|
1161 rootDOM: root,
|
nickjillings@1370
|
1162 titleDOM: title,
|
nickjillings@1370
|
1163 attributeDOM: attributeDiv,
|
nickjillings@1370
|
1164 attributes: [],
|
nickjillings@1370
|
1165 childrenDOM: childrenDiv,
|
nickjillings@1370
|
1166 children: [],
|
nickjillings@1370
|
1167 buttonDOM: buttonsDiv,
|
nickjillings@1370
|
1168 parent: parent
|
nickjillings@1370
|
1169 }
|
nickjillings@1370
|
1170 return obj;
|
nickjillings@1370
|
1171 }
|
nickjillings@1370
|
1172
|
nickjillings@1370
|
1173 this.convertAttributeToDOM = function(node,schema)
|
nickjillings@1370
|
1174 {
|
nickjillings@1370
|
1175 // This takes an attribute schema node and returns an object with the input node and any bindings
|
nickjillings@1370
|
1176 if (schema.getAttribute('name') == undefined && schema.getAttribute('ref') != undefined)
|
nickjillings@1370
|
1177 {
|
nickjillings@1370
|
1178 schema = specification.schema.getAllElementsByName(schema.getAttribute('ref'))[0];
|
nickjillings@1370
|
1179 }
|
nickjillings@1370
|
1180 var obj = new function()
|
nickjillings@1370
|
1181 {
|
nickjillings@1370
|
1182 this.input;
|
nickjillings@1370
|
1183 this.name;
|
nickjillings@1370
|
1184 this.owner;
|
nickjillings@1370
|
1185 this.holder;
|
nickjillings@1370
|
1186
|
nickjillings@1370
|
1187 this.name = schema.getAttribute('name');
|
nickjillings@1370
|
1188 this.default = schema.getAttribute('default');
|
nickjillings@1370
|
1189 this.dataType = schema.getAttribute('type');
|
nickjillings@2158
|
1190 if (this.dataType == undefined) {
|
nickjillings@2158
|
1191 if (schema.childElementCount > 0) {
|
nicholas@2390
|
1192 if (schema.firstElementChild.nodeName == "xs:simpleType") {
|
nickjillings@2158
|
1193 this.dataType = schema.getAllElementsByTagName("xs:restriction")[0].getAttribute("base");
|
nickjillings@2158
|
1194 }
|
nickjillings@2158
|
1195 }
|
nickjillings@2158
|
1196 }
|
nickjillings@1370
|
1197 if (typeof this.dataType == "string") { this.dataType = this.dataType.substr(3);}
|
nickjillings@1370
|
1198 else {this.dataType = "string";}
|
nickjillings@1370
|
1199 var minVar = undefined;
|
nickjillings@1370
|
1200 var maxVar = undefined;
|
nickjillings@1370
|
1201 switch(this.dataType)
|
nickjillings@1370
|
1202 {
|
nickjillings@1370
|
1203 case "negativeInteger":
|
nickjillings@1370
|
1204 maxVar = -1;
|
nickjillings@1370
|
1205 break;
|
nickjillings@1370
|
1206 case "positiveInteger":
|
nickjillings@1370
|
1207 minVar = 1;
|
nickjillings@1370
|
1208 break;
|
nickjillings@1370
|
1209 case "nonNegativeInteger":
|
nickjillings@1370
|
1210 minVar = 0;
|
nickjillings@1370
|
1211 break;
|
nickjillings@1370
|
1212 case "nonPositiveInteger":
|
nickjillings@1370
|
1213 maxVar = 0;
|
nickjillings@1370
|
1214 break;
|
nickjillings@1370
|
1215 case "byte":
|
nickjillings@1370
|
1216 minVar = 0;
|
nickjillings@1370
|
1217 maxVar = 256;
|
nickjillings@1370
|
1218 break;
|
nickjillings@1370
|
1219 case "short":
|
nickjillings@1370
|
1220 minVar = 0;
|
nickjillings@1370
|
1221 maxVar = 65536;
|
nickjillings@1370
|
1222 break;
|
nickjillings@1370
|
1223 default:
|
nickjillings@1370
|
1224 break;
|
nickjillings@1370
|
1225 }
|
nickjillings@2174
|
1226
|
nickjillings@2174
|
1227 this.enumeration = schema.getAllElementsByTagName("xs:enumeration");
|
nickjillings@2174
|
1228 if (this.enumeration.length == 0) {
|
nickjillings@2174
|
1229 this.input = document.createElement('input');
|
nickjillings@2174
|
1230 switch(this.dataType)
|
nickjillings@2174
|
1231 {
|
nickjillings@2174
|
1232 case "boolean":
|
nickjillings@2174
|
1233 this.input.type = "checkbox";
|
nickjillings@2174
|
1234 break;
|
nickjillings@2174
|
1235 case "negativeInteger":
|
nickjillings@2174
|
1236 case "positiveInteger":
|
nickjillings@2174
|
1237 case "nonNegativeInteger":
|
nickjillings@2174
|
1238 case "nonPositiveInteger":
|
nickjillings@2174
|
1239 case "integer":
|
nickjillings@2174
|
1240 case "short":
|
nickjillings@2174
|
1241 case "byte":
|
nickjillings@2174
|
1242 this.input.step = 1;
|
nickjillings@2174
|
1243 case "decimal":
|
nickjillings@2174
|
1244 this.input.type = "number";
|
nickjillings@2174
|
1245 this.input.min = minVar;
|
nickjillings@2174
|
1246 this.input.max = maxVar;
|
nickjillings@2174
|
1247 break;
|
nickjillings@2174
|
1248 default:
|
nickjillings@2174
|
1249 break;
|
nickjillings@2174
|
1250 }
|
nickjillings@2174
|
1251 } else {
|
nickjillings@2174
|
1252 this.input = document.createElement("select");
|
nickjillings@2174
|
1253 for (var i=0; i<this.enumeration.length; i++)
|
nickjillings@2174
|
1254 {
|
nickjillings@2174
|
1255 var option = document.createElement("option");
|
nickjillings@2174
|
1256 var value = this.enumeration[i].getAttribute("value");
|
nickjillings@2174
|
1257 option.setAttribute("value",value);
|
nickjillings@2174
|
1258 option.textContent = value;
|
nickjillings@2174
|
1259 this.input.appendChild(option);
|
nickjillings@2174
|
1260 }
|
nickjillings@1370
|
1261 }
|
nickjillings@1370
|
1262 var value;
|
nickjillings@1373
|
1263 eval("value = node."+this.name)
|
nickjillings@2174
|
1264 if (this.default != undefined && value == undefined)
|
nickjillings@1370
|
1265 {
|
nickjillings@2174
|
1266 value = this.default;
|
nickjillings@2174
|
1267 }
|
nickjillings@2174
|
1268 if (this.input.type == "checkbox") {
|
nicholas@2239
|
1269 if (value == "true" || value == "True") {this.input.checked = false;}
|
nicholas@2239
|
1270 else {this.input.checked = false;}
|
nickjillings@2174
|
1271 } else {
|
nickjillings@1370
|
1272 this.input.value = value;
|
nickjillings@1370
|
1273 }
|
nickjillings@1370
|
1274 this.handleEvent = function(event)
|
nickjillings@1370
|
1275 {
|
nickjillings@1370
|
1276 var value;
|
nickjillings@2174
|
1277 if (this.input.nodeName == "INPUT")
|
nickjillings@1370
|
1278 {
|
nickjillings@2174
|
1279 switch(this.input.type)
|
nickjillings@2174
|
1280 {
|
nickjillings@2174
|
1281 case "checkbox":
|
nickjillings@2174
|
1282 value = event.currentTarget.checked;
|
nickjillings@2174
|
1283 break;
|
nickjillings@2174
|
1284 case "number":
|
nickjillings@2174
|
1285 value = Number(event.currentTarget.value);
|
nickjillings@2174
|
1286 break;
|
nickjillings@2174
|
1287 default:
|
nickjillings@2174
|
1288 value = event.currentTarget.value;
|
nickjillings@2174
|
1289 break;
|
nickjillings@2174
|
1290 }
|
nickjillings@2174
|
1291 } else if (this.input.nodeName == "SELECT") {
|
nickjillings@2174
|
1292 value = event.currentTarget.value;
|
nickjillings@1370
|
1293 }
|
nickjillings@1370
|
1294 eval("this.owner."+this.name+" = value");
|
nickjillings@1370
|
1295 }
|
nickjillings@1370
|
1296 this.holder = document.createElement('div');
|
nickjillings@1370
|
1297 this.holder.className = "attribute";
|
nickjillings@1370
|
1298 this.holder.setAttribute('name',this.name);
|
nickjillings@1370
|
1299 var text = document.createElement('span');
|
nickjillings@1370
|
1300 eval("text.textContent = attributeText."+this.name+"+': '");
|
nickjillings@1370
|
1301 this.holder.appendChild(text);
|
nickjillings@1370
|
1302 this.holder.appendChild(this.input);
|
nickjillings@1370
|
1303 this.owner = node;
|
nickjillings@1370
|
1304 this.input.addEventListener("change",this,false);
|
nickjillings@1370
|
1305 }
|
nickjillings@1370
|
1306 if (obj.attribute != null)
|
nickjillings@1370
|
1307 {
|
nickjillings@1370
|
1308 obj.input.value = obj.attribute;
|
nickjillings@1370
|
1309 }
|
nickjillings@1370
|
1310 return obj;
|
nickjillings@1370
|
1311 }
|
nickjillings@1370
|
1312
|
nickjillings@1370
|
1313 this.convert = function(root)
|
nickjillings@1370
|
1314 {
|
nickjillings@1370
|
1315 //Performs the actual conversion using the given root DOM as the root
|
nickjillings@1370
|
1316 this.injectDOM = root;
|
nickjillings@1370
|
1317
|
nickjillings@1373
|
1318 // Build the export button
|
nickjillings@1373
|
1319 var exportButton = document.createElement("button");
|
nickjillings@1373
|
1320 exportButton.textContent = "Export to XML";
|
nickjillings@1373
|
1321 exportButton.onclick = function()
|
nickjillings@1373
|
1322 {
|
nickjillings@1373
|
1323 var doc = specification.encode();
|
nickjillings@1373
|
1324 var obj = {};
|
nickjillings@1373
|
1325 obj.title = "Export";
|
nickjillings@1373
|
1326 obj.content = document.createElement("div");
|
nickjillings@1373
|
1327 obj.content.id = "finish";
|
nickjillings@1373
|
1328 var span = document.createElement("span");
|
b@2364
|
1329 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. "
|
nickjillings@1373
|
1330 obj.content.appendChild(span);
|
nickjillings@1373
|
1331 var link = document.createElement("div");
|
n@2412
|
1332 link.appendChild(doc.firstChild);
|
nickjillings@1373
|
1333 var file = [link.innerHTML];
|
nickjillings@1373
|
1334 var bb = new Blob(file,{type : 'application/xml'});
|
nickjillings@1373
|
1335 var dnlk = window.URL.createObjectURL(bb);
|
nickjillings@1373
|
1336 var a = document.createElement("a");
|
nickjillings@1373
|
1337 a.hidden = '';
|
nickjillings@1373
|
1338 a.href = dnlk;
|
nickjillings@1373
|
1339 a.download = "project-specification.xml";
|
nickjillings@1373
|
1340 a.textContent = "Save File";
|
nickjillings@1373
|
1341 obj.content.appendChild(a);
|
nickjillings@1373
|
1342 popupObject.show();
|
nickjillings@1373
|
1343 popupObject.postNode(obj);
|
nickjillings@1373
|
1344 }
|
nickjillings@1373
|
1345 this.injectDOM.appendChild(exportButton);
|
nickjillings@1373
|
1346
|
nickjillings@1370
|
1347 // First perform the setupNode;
|
nickjillings@1370
|
1348 var setupSchema = specification.schema.getAllElementsByName('setup')[0];
|
nickjillings@2114
|
1349 this.setupDOM = new this.createGeneralNodeDOM('Global Configuration','setup',null);
|
nickjillings@1370
|
1350 this.injectDOM.appendChild(this.setupDOM.rootDOM);
|
nickjillings@1370
|
1351 var setupAttributes = setupSchema.getAllElementsByTagName('xs:attribute');
|
nickjillings@1370
|
1352 for (var i=0; i<setupAttributes.length; i++)
|
nickjillings@1370
|
1353 {
|
nickjillings@1370
|
1354 var attributeName = setupAttributes[i].getAttribute('name');
|
nickjillings@1370
|
1355 var attrObject = this.convertAttributeToDOM(specification,setupAttributes[i]);
|
nickjillings@1370
|
1356 this.setupDOM.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
1357 this.setupDOM.attributes.push(attrObject);
|
nickjillings@1370
|
1358 }
|
nickjillings@1370
|
1359
|
nickjillings@2179
|
1360 // Build the exit Text node
|
nickjillings@2179
|
1361 var exitText = new this.createGeneralNodeDOM("Exit Text","exit-test",this.setupDOM);
|
nickjillings@2179
|
1362 exitText.rootDOM.removeChild(exitText.attributeDOM);
|
nickjillings@2179
|
1363 this.setupDOM.children.push(exitText);
|
nickjillings@2179
|
1364 this.setupDOM.childrenDOM.appendChild(exitText.rootDOM);
|
nickjillings@2179
|
1365 var obj = {
|
nickjillings@2179
|
1366 rootDOM: document.createElement("div"),
|
nickjillings@2179
|
1367 labelDOM: document.createElement("label"),
|
nickjillings@2179
|
1368 inputDOM: document.createElement("textarea"),
|
nickjillings@2179
|
1369 parent: exitText,
|
nickjillings@2179
|
1370 specification: specification,
|
nickjillings@2179
|
1371 handleEvent: function(event) {
|
nickjillings@2179
|
1372 this.specification.exitText = this.inputDOM.value;
|
nickjillings@2179
|
1373 }
|
nickjillings@2179
|
1374 }
|
b@2367
|
1375 var exitWarning = document.createElement("div");
|
b@2367
|
1376 obj.rootDOM.appendChild(exitWarning);
|
b@2367
|
1377 exitWarning.textContent = "Only visible when the above 'On complete redirect URL' field is empty.";
|
nickjillings@2179
|
1378 obj.rootDOM.appendChild(obj.labelDOM);
|
nickjillings@2179
|
1379 obj.rootDOM.appendChild(obj.inputDOM);
|
nickjillings@2179
|
1380 obj.labelDOM.textContent = "Text: ";
|
nickjillings@2179
|
1381 obj.inputDOM.value = obj.specification.exitText;
|
nickjillings@2179
|
1382 obj.inputDOM.addEventListener("change",obj);
|
nickjillings@2179
|
1383 exitText.children.push(obj);
|
nickjillings@2179
|
1384 exitText.childrenDOM.appendChild(obj.rootDOM);
|
nickjillings@2179
|
1385
|
nickjillings@1370
|
1386 // Now we must build the interface Node
|
nickjillings@1370
|
1387 this.interfaceDOM = new this.interfaceNode(this,specification.interfaces);
|
nickjillings@1370
|
1388 this.interfaceDOM.build("Interface","setup-interface",this.setupDOM.rootDOM);
|
nickjillings@1370
|
1389
|
nickjillings@1370
|
1390 // Now build the Metrics selection node
|
nickjillings@2114
|
1391 var metric = this.createGeneralNodeDOM("Session Metrics","setup-metric",this.setupDOM);
|
nickjillings@1370
|
1392 metric.rootDOM.removeChild(metric.attributeDOM);
|
nickjillings@1370
|
1393 this.setupDOM.children.push(metric);
|
nickjillings@1370
|
1394 this.setupDOM.childrenDOM.appendChild(metric.rootDOM);
|
nickjillings@1370
|
1395 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1396 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
1397 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1398 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
1399 testXML = testXML.getAllElementsByTagName("metrics");
|
nicholas@2390
|
1400 var interfaceXMLChild = interfaceXML.firstElementChild;
|
nicholas@2390
|
1401 while(interfaceXMLChild)
|
nickjillings@1370
|
1402 {
|
nickjillings@1370
|
1403 var obj = {
|
nickjillings@1370
|
1404 input: document.createElement('input'),
|
nickjillings@1370
|
1405 root: document.createElement('div'),
|
nickjillings@1370
|
1406 text: document.createElement('span'),
|
nickjillings@1370
|
1407 specification: specification.metrics.enabled,
|
nicholas@2390
|
1408 name: interfaceXMLChild.getAttribute("name"),
|
nickjillings@1370
|
1409 handleEvent: function()
|
nickjillings@1370
|
1410 {
|
nickjillings@1370
|
1411 for (var i=0; i<this.specification.length; i++)
|
nickjillings@1370
|
1412 {
|
nickjillings@1370
|
1413 if (this.specification[i] == this.name)
|
nickjillings@1370
|
1414 {
|
nickjillings@1370
|
1415 var options = this.specification;
|
nickjillings@1370
|
1416 if (this.input.checked == false) {
|
nickjillings@1370
|
1417 if (i == options.length)
|
nickjillings@1370
|
1418 {options = options.slice(0,i);}
|
nickjillings@1370
|
1419 else {
|
nickjillings@1370
|
1420 options = options.slice(0,i).concat(options.slice(i+1));
|
nickjillings@1370
|
1421 }
|
nickjillings@1370
|
1422 } else {
|
nickjillings@1370
|
1423 return;
|
nickjillings@1370
|
1424 }
|
nickjillings@1370
|
1425 this.specification = options;
|
nickjillings@1370
|
1426 break;
|
nickjillings@1370
|
1427 }
|
nickjillings@1370
|
1428 }
|
nickjillings@1370
|
1429 if (this.input.checked) {
|
nickjillings@1370
|
1430 this.specification.push(this.name);
|
nickjillings@1370
|
1431 }
|
nickjillings@1370
|
1432 }
|
nickjillings@1370
|
1433 };
|
nickjillings@1370
|
1434 obj.root.className = "attribute";
|
nickjillings@1370
|
1435 obj.input.type = "checkbox";
|
nickjillings@1370
|
1436 obj.root.appendChild(obj.text);
|
nickjillings@1370
|
1437 obj.root.appendChild(obj.input);
|
nicholas@2390
|
1438 obj.text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
|
nickjillings@1370
|
1439 metric.children.push(obj);
|
nickjillings@1370
|
1440 metric.childrenDOM.appendChild(obj.root);
|
nickjillings@1314
|
1441 for (var j=0; j<specification.metrics.enabled.length; j++)
|
nickjillings@1370
|
1442 {
|
nickjillings@1314
|
1443 if (specification.metrics.enabled[j] == obj.name)
|
nickjillings@1370
|
1444 {
|
nickjillings@1370
|
1445 obj.input.checked = true;
|
nickjillings@1370
|
1446 break;
|
nickjillings@1370
|
1447 }
|
nickjillings@1370
|
1448 }
|
nicholas@2390
|
1449 interfaceXMLChild = interfaceXMLChild.nextElementSibling;
|
nickjillings@1370
|
1450 }
|
nickjillings@1370
|
1451
|
nickjillings@1370
|
1452 // Now both before and after surveys
|
nickjillings@1370
|
1453 if (specification.preTest == undefined){
|
nickjillings@2194
|
1454 specification.preTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
1455 specification.preTest.location = "pre";
|
nickjillings@1370
|
1456 }
|
nickjillings@1370
|
1457 if (specification.postTest == undefined){
|
nickjillings@2194
|
1458 specification.postTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
1459 specification.postTest.location = "post";
|
nickjillings@1370
|
1460 }
|
nickjillings@1370
|
1461 var surveyBefore = new this.surveyNode(this,specification.preTest,"Pre");
|
nickjillings@1370
|
1462 var surveyAfter = new this.surveyNode(this,specification.postTest,"Post");
|
nickjillings@1370
|
1463 this.setupDOM.children.push(surveyBefore);
|
nickjillings@1370
|
1464 this.setupDOM.children.push(surveyAfter);
|
nickjillings@1370
|
1465 this.setupDOM.childrenDOM.appendChild(surveyBefore.rootDOM);
|
nickjillings@1370
|
1466 this.setupDOM.childrenDOM.appendChild(surveyAfter.rootDOM);
|
nickjillings@1370
|
1467
|
nickjillings@1370
|
1468 // Add in the page creator button
|
nickjillings@1370
|
1469 this.addPage = {
|
nickjillings@1370
|
1470 root: document.createElement("button"),
|
nickjillings@1370
|
1471 parent: this,
|
nickjillings@1370
|
1472 handleEvent: function()
|
nickjillings@1370
|
1473 {
|
nickjillings@2194
|
1474 var pageObj = new specification.page(specification);
|
nickjillings@1370
|
1475 specification.pages.push(pageObj);
|
nickjillings@1370
|
1476 var newPage = new this.parent.pageNode(this.parent,pageObj);
|
nicholas@2315
|
1477 document.getElementById("page-holder").appendChild(newPage.rootDOM);
|
nickjillings@1370
|
1478 this.parent.pages.push(newPage);
|
nickjillings@1370
|
1479 }
|
nickjillings@1370
|
1480 }
|
nickjillings@1370
|
1481 this.addPage.root.textContent = "Add Page";
|
nicholas@2315
|
1482 this.addPage.root.id = "new-page-button";
|
nicholas@2315
|
1483 this.addPage.root.style.float = "left";
|
nickjillings@1370
|
1484 this.addPage.root.addEventListener("click",this.addPage,false);
|
nicholas@2315
|
1485
|
nicholas@2315
|
1486 var pageHolder = document.createElement("div");
|
nicholas@2315
|
1487 pageHolder.id ="page-holder";
|
nicholas@2315
|
1488 this.injectDOM.appendChild(pageHolder);
|
nickjillings@1374
|
1489
|
nickjillings@1374
|
1490 // Build each page
|
nickjillings@1374
|
1491 for (var page of specification.pages)
|
nickjillings@1374
|
1492 {
|
nickjillings@1374
|
1493 var newPage = new this.pageNode(this,page);
|
nicholas@2315
|
1494 pageHolder.appendChild(newPage.rootDOM);
|
nickjillings@1374
|
1495 this.pages.push(newPage);
|
nickjillings@1374
|
1496 }
|
nicholas@2315
|
1497
|
nicholas@2315
|
1498 this.injectDOM.appendChild(this.addPage.root);
|
nickjillings@1370
|
1499 }
|
nickjillings@1370
|
1500
|
nickjillings@1370
|
1501 this.interfaceNode = function(parent,rootObject)
|
nickjillings@1370
|
1502 {
|
nickjillings@1375
|
1503 this.type = "interfaceNode";
|
nickjillings@1370
|
1504 this.rootDOM;
|
nickjillings@1370
|
1505 this.titleDOM;
|
nickjillings@1370
|
1506 this.attributeDOM;
|
nickjillings@1370
|
1507 this.attributes = [];
|
nickjillings@1370
|
1508 this.childrenDOM;
|
nickjillings@1370
|
1509 this.children = [];
|
nickjillings@1370
|
1510 this.buttonDOM;
|
nickjillings@1370
|
1511 this.parent = parent;
|
nickjillings@1370
|
1512 this.HTMLPoint;
|
nickjillings@1370
|
1513 this.specification = rootObject;
|
nickjillings@1370
|
1514 this.schema = specification.schema.getAllElementsByName("interface")[1];
|
nickjillings@1370
|
1515
|
nickjillings@1370
|
1516 this.createIOasAttr = function(name,specification,parent,type) {
|
nickjillings@1370
|
1517 this.root = document.createElement('div');
|
nickjillings@1370
|
1518 this.input = document.createElement("input");
|
nickjillings@1370
|
1519 this.name = name;
|
nickjillings@1370
|
1520 this.type = type;
|
nickjillings@1370
|
1521 this.parent = parent;
|
nickjillings@1370
|
1522 this.specification = specification;
|
nickjillings@1370
|
1523 this.handleEvent = function(event) {
|
nickjillings@1370
|
1524 for (var i=0; i<this.specification.options.length; i++)
|
nickjillings@1370
|
1525 {
|
nickjillings@1370
|
1526 if (this.specification.options[i].name == this.name)
|
nickjillings@1370
|
1527 {
|
nickjillings@1370
|
1528 var options = this.specification.options;
|
nickjillings@1370
|
1529 if (this.input.checked == false) {
|
nickjillings@1370
|
1530 if (i == options.length)
|
nickjillings@1370
|
1531 {options = options.slice(0,i);}
|
nickjillings@1370
|
1532 else {
|
nickjillings@1370
|
1533 options = options.slice(0,i).concat(options.slice(i+1));
|
nickjillings@1370
|
1534 }
|
nickjillings@1370
|
1535 } else {
|
nickjillings@1370
|
1536 return;
|
nickjillings@1370
|
1537 }
|
nickjillings@1370
|
1538 this.specification.options = options;
|
nickjillings@1370
|
1539 break;
|
nickjillings@1370
|
1540 }
|
nickjillings@1370
|
1541 }
|
nickjillings@1370
|
1542 if (this.input.checked) {
|
nickjillings@1370
|
1543 var obj = {
|
nickjillings@1370
|
1544 name: this.name,
|
nickjillings@1370
|
1545 type: this.type
|
nickjillings@1370
|
1546 };
|
nickjillings@1370
|
1547 this.specification.options.push(obj);
|
nickjillings@1370
|
1548 }
|
nickjillings@1370
|
1549 if (this.parent.HTMLPoint.id == "setup")
|
nickjillings@1370
|
1550 {
|
nickjillings@1370
|
1551 // We've changed a global setting, must update all child 'interfaces' and disable them
|
nickjillings@1370
|
1552 for (pages of convert.pages)
|
nickjillings@1370
|
1553 {
|
nickjillings@1370
|
1554 for (interface of pages.interfaces)
|
nickjillings@1370
|
1555 {
|
nickjillings@1370
|
1556 if (this.type == "check")
|
nickjillings@1370
|
1557 {
|
nickjillings@1370
|
1558 for (node of interface.children[0].attributes)
|
nickjillings@1370
|
1559 {
|
nickjillings@1370
|
1560 if (node.name == this.name) {
|
nickjillings@1370
|
1561 if (this.input.checked) {
|
nickjillings@1370
|
1562 node.input.disabled = true;
|
nickjillings@1370
|
1563 node.input.checked = false;
|
nickjillings@1370
|
1564 } else {
|
nickjillings@1370
|
1565 node.input.disabled = false;
|
nickjillings@1370
|
1566 }
|
nickjillings@1370
|
1567 break;
|
nickjillings@1370
|
1568 }
|
nickjillings@1370
|
1569 }
|
nickjillings@1370
|
1570 } else if (this.type == "show")
|
nickjillings@1370
|
1571 {
|
nickjillings@1370
|
1572 for (node of interface.children[1].attributes)
|
nickjillings@1370
|
1573 {
|
nickjillings@1370
|
1574 if (node.name == this.name) {
|
nickjillings@1370
|
1575 if (this.input.checked) {
|
nickjillings@1370
|
1576 node.input.disabled = true;
|
nickjillings@1370
|
1577 } else {
|
nickjillings@1370
|
1578 node.input.disabled = false;
|
nickjillings@1370
|
1579 }
|
nickjillings@1370
|
1580 break;
|
nickjillings@1370
|
1581 }
|
nickjillings@1370
|
1582 }
|
nickjillings@1370
|
1583 }
|
nickjillings@1370
|
1584 }
|
nickjillings@1370
|
1585 }
|
nickjillings@1370
|
1586 }
|
nickjillings@1370
|
1587 };
|
nickjillings@1370
|
1588 this.findIndex = function(element,index,array){
|
nickjillings@1370
|
1589 if (element.name == this.name)
|
nickjillings@1370
|
1590 return true;
|
nickjillings@1370
|
1591 else
|
nickjillings@1370
|
1592 return false;
|
nickjillings@1370
|
1593 };
|
nickjillings@1370
|
1594 this.findNode = function(element,index,array){
|
nickjillings@1370
|
1595 if (element.name == this.name)
|
nickjillings@1370
|
1596 return true;
|
nickjillings@1370
|
1597 else
|
nickjillings@1370
|
1598 return false;
|
nickjillings@1370
|
1599 };
|
nickjillings@1370
|
1600 this.input.type = "checkbox";
|
nickjillings@1370
|
1601 this.input.setAttribute("name",name);
|
nickjillings@1370
|
1602 this.input.addEventListener("change",this,false);
|
nickjillings@1370
|
1603 this.root.appendChild(this.input);
|
nickjillings@1370
|
1604 this.root.className = "attribute";
|
nickjillings@1370
|
1605 return this;
|
nickjillings@1370
|
1606 }
|
nickjillings@1370
|
1607
|
nickjillings@1370
|
1608 this.build = function(name,id,parent)
|
nickjillings@1370
|
1609 {
|
nickjillings@1370
|
1610 var obj = this.parent.createGeneralNodeDOM(name,id,parent);
|
nickjillings@1370
|
1611
|
nickjillings@1370
|
1612 this.rootDOM = obj.rootDOM;
|
nickjillings@1370
|
1613 this.titleDOM = obj.titleDOM;
|
nickjillings@1370
|
1614 this.attributeDOM = obj.attributeDOM;
|
nickjillings@1370
|
1615 this.childrenDOM = obj.childrenDOM;
|
nickjillings@1370
|
1616 this.buttonDOM = obj.buttonsDOM;
|
nickjillings@1370
|
1617 this.HTMLPoint = parent;
|
nickjillings@1370
|
1618 this.rootDOM.removeChild(this.attributeDOM);
|
nicholas@2243
|
1619 if (parent.id != "setup") {
|
nicholas@2243
|
1620 // Put in the <title> node:
|
nicholas@2243
|
1621 this.titleNode = {
|
nicholas@2243
|
1622 root: document.createElement("div"),
|
nicholas@2243
|
1623 label: document.createElement("span"),
|
nicholas@2243
|
1624 input: document.createElement("input"),
|
nicholas@2243
|
1625 parent: this,
|
nicholas@2243
|
1626 handleEvent: function(event) {
|
nicholas@2243
|
1627 this.parent.specification.title = event.currentTarget.value;
|
nicholas@2243
|
1628 }
|
nicholas@2243
|
1629 }
|
nicholas@2243
|
1630 this.titleNode.label.textContent = "Axis Title:";
|
nicholas@2243
|
1631 this.titleNode.root.className = "node-children";
|
nicholas@2243
|
1632 this.titleNode.root.appendChild(this.titleNode.label);
|
nicholas@2243
|
1633 this.titleNode.root.appendChild(this.titleNode.input);
|
nicholas@2243
|
1634 this.titleNode.input.addEventListener("change",this.titleNode,false);
|
nicholas@2243
|
1635 this.titleNode.input.value = this.specification.title;
|
nicholas@2243
|
1636 this.children.push(this.titleNode);
|
nicholas@2243
|
1637 this.childrenDOM.appendChild(this.titleNode.root);
|
nicholas@2243
|
1638 }
|
nicholas@2243
|
1639
|
nickjillings@1370
|
1640 // Put in the check / show options as individual children
|
nickjillings@1370
|
1641 var checks = this.parent.createGeneralNodeDOM("Checks","setup-interface-checks",this);
|
nickjillings@1370
|
1642
|
nickjillings@1370
|
1643 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1644 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
1645 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1646 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
1647 testXML = testXML.getAllElementsByTagName("checks");
|
nicholas@2390
|
1648 var interfaceXMLChild = interfaceXML.firstElementChild;
|
nicholas@2390
|
1649 while (interfaceXMLChild)
|
nickjillings@1370
|
1650 {
|
nicholas@2390
|
1651 var obj = new this.createIOasAttr(interfaceXMLChild.getAttribute("name"),this.specification,this,"check");
|
nickjillings@1370
|
1652 for (var option of this.specification.options)
|
nickjillings@1370
|
1653 {
|
nickjillings@1370
|
1654 if (option.name == obj.name)
|
nickjillings@1370
|
1655 {
|
nickjillings@1370
|
1656 obj.input.checked = true;
|
nickjillings@1370
|
1657 break;
|
nickjillings@1370
|
1658 }
|
nickjillings@1370
|
1659 }
|
nickjillings@1370
|
1660 if (parent.id != "setup") {
|
nickjillings@1370
|
1661 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
|
nickjillings@1381
|
1662 if (node != undefined) {
|
nickjillings@1381
|
1663 if (node.input.checked) {
|
nickjillings@1381
|
1664 obj.input.checked = false;
|
nickjillings@1381
|
1665 obj.input.disabled = true;
|
nickjillings@1381
|
1666 }
|
nickjillings@1370
|
1667 }
|
nickjillings@1370
|
1668 }
|
nickjillings@1370
|
1669 var text = document.createElement('span');
|
nicholas@2390
|
1670 text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
|
nickjillings@1370
|
1671 obj.root.appendChild(text);
|
nickjillings@1370
|
1672 checks.attributeDOM.appendChild(obj.root);
|
nickjillings@1370
|
1673 checks.attributes.push(obj);
|
nicholas@2390
|
1674 interfaceXMLChild = interfaceXMLChild.nextElementSibling;
|
nickjillings@1370
|
1675 }
|
nickjillings@1370
|
1676 this.children.push(checks);
|
nickjillings@1370
|
1677 this.childrenDOM.appendChild(checks.rootDOM);
|
nickjillings@1370
|
1678
|
nickjillings@1370
|
1679 var show = this.parent.createGeneralNodeDOM("Show","setup-interface-show",this);
|
nickjillings@1370
|
1680 interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1681 checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
1682 testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1683 interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
1684 testXML = testXML.getAllElementsByTagName("show");
|
nicholas@2390
|
1685 interfaceXMLChild = interfaceXML.firstElementChild;
|
nicholas@2390
|
1686 while(interfaceXMLChild)
|
nickjillings@1370
|
1687 {
|
nicholas@2390
|
1688 var obj = new this.createIOasAttr(interfaceXMLChild.getAttribute("name"),this.specification,this,"show");
|
nickjillings@1370
|
1689 for (var option of this.specification.options)
|
nickjillings@1370
|
1690 {
|
nickjillings@1370
|
1691 if (option.name == obj.name)
|
nickjillings@1370
|
1692 {
|
nickjillings@1370
|
1693 obj.input.checked = true;
|
nickjillings@1370
|
1694 break;
|
nickjillings@1370
|
1695 }
|
nickjillings@1370
|
1696 }
|
nickjillings@1370
|
1697 if (parent.id != "setup") {
|
nickjillings@1370
|
1698 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
|
nickjillings@1381
|
1699 if (node != undefined) {
|
nickjillings@1381
|
1700 if (node.input.checked) {
|
nickjillings@1381
|
1701 obj.input.checked = false;
|
nickjillings@1381
|
1702 obj.input.disabled = true;
|
nickjillings@1381
|
1703 }
|
nickjillings@1370
|
1704 }
|
nickjillings@1370
|
1705 }
|
nickjillings@1370
|
1706 var text = document.createElement('span');
|
nicholas@2390
|
1707 text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
|
nickjillings@1370
|
1708 obj.root.appendChild(text);
|
nickjillings@1370
|
1709 show.attributeDOM.appendChild(obj.root);
|
nickjillings@1370
|
1710 show.attributes.push(obj);
|
nicholas@2390
|
1711 interfaceXMLChild = interfaceXMLChild.nextElementSibling;
|
nickjillings@1370
|
1712 }
|
nickjillings@1370
|
1713 this.children.push(show);
|
nickjillings@1370
|
1714 this.childrenDOM.appendChild(show.rootDOM);
|
nickjillings@1370
|
1715
|
nickjillings@1370
|
1716 if (parent.id == "setup")
|
nickjillings@1370
|
1717 {
|
nickjillings@1370
|
1718 } else {
|
nickjillings@1370
|
1719 var nameAttr = this.parent.convertAttributeToDOM(this,specification.schema.getAllElementsByName("name")[0]);
|
nickjillings@1370
|
1720 this.attributeDOM.appendChild(nameAttr.holder);
|
nickjillings@1370
|
1721 this.attributes.push(nameAttr);
|
nickjillings@1385
|
1722 var scales = new this.scalesNode(this,this.specification);
|
nickjillings@1385
|
1723 this.children.push(scales);
|
nickjillings@1385
|
1724 this.childrenDOM.appendChild(scales.rootDOM);
|
nickjillings@1370
|
1725 }
|
nickjillings@1370
|
1726 if (parent != undefined)
|
nickjillings@1370
|
1727 {
|
nickjillings@1370
|
1728 parent.appendChild(this.rootDOM);
|
nickjillings@1370
|
1729 }
|
nickjillings@1370
|
1730 }
|
nickjillings@1385
|
1731
|
nickjillings@1385
|
1732 this.scalesNode = function(parent,rootObject)
|
nickjillings@1385
|
1733 {
|
nickjillings@1385
|
1734 this.type = "scalesNode";
|
nickjillings@1385
|
1735 this.rootDOM = document.createElement("div");
|
nickjillings@1385
|
1736 this.titleDOM = document.createElement("span");
|
nickjillings@1385
|
1737 this.attributeDOM = document.createElement("div");
|
nickjillings@1385
|
1738 this.attributes = [];
|
nickjillings@1385
|
1739 this.childrenDOM = document.createElement("div");
|
nickjillings@1385
|
1740 this.children = [];
|
nickjillings@1385
|
1741 this.buttonDOM = document.createElement("div");
|
nickjillings@1385
|
1742 this.parent = parent;
|
nickjillings@1385
|
1743 this.specification = rootObject;
|
nickjillings@1385
|
1744 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1385
|
1745 this.rootDOM.className = "node";
|
nickjillings@1385
|
1746
|
nickjillings@1385
|
1747 var titleDiv = document.createElement('div');
|
nickjillings@1385
|
1748 titleDiv.className = "node-title";
|
nickjillings@1385
|
1749 this.titleDOM.className = "node-title";
|
nickjillings@1385
|
1750 this.titleDOM.textContent = "Interface Scales";
|
nickjillings@1385
|
1751 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1385
|
1752
|
nickjillings@1385
|
1753 this.attributeDOM.className = "node-attributes";
|
nickjillings@1385
|
1754 this.childrenDOM.className = "node-children";
|
nickjillings@1385
|
1755 this.buttonDOM.className = "node-buttons";
|
nickjillings@1385
|
1756
|
nickjillings@1385
|
1757 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1385
|
1758 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1385
|
1759 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1385
|
1760 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1385
|
1761
|
nickjillings@1385
|
1762 this.editButton = {
|
nickjillings@1385
|
1763 button: document.createElement("button"),
|
nickjillings@1385
|
1764 parent: this,
|
nickjillings@1385
|
1765 handleEvent: function(event) {
|
nickjillings@1385
|
1766 popupObject.show();
|
nickjillings@1385
|
1767 popupObject.postNode(popupStateNodes.state[6]);
|
nickjillings@1385
|
1768 popupStateNodes.state[6].generate(this.parent.specification,this.parent);
|
nickjillings@1385
|
1769 }
|
nickjillings@1385
|
1770 };
|
nickjillings@1385
|
1771 this.editButton.button.textContent = "Edit Scales/Markers";
|
nickjillings@1385
|
1772 this.editButton.button.addEventListener("click",this.editButton,false);
|
nickjillings@1385
|
1773 this.buttonDOM.appendChild(this.editButton.button);
|
nickjillings@1385
|
1774 }
|
nickjillings@1370
|
1775 }
|
nickjillings@1370
|
1776
|
nickjillings@1370
|
1777 this.surveyNode = function(parent,rootObject,location)
|
nickjillings@1370
|
1778 {
|
nickjillings@1375
|
1779 this.type = "surveyNode";
|
nickjillings@1370
|
1780 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1781 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1782 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1783 this.attributes = [];
|
nickjillings@1370
|
1784 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1785 this.children = [];
|
nickjillings@1370
|
1786 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1787 this.parent = parent;
|
nickjillings@1370
|
1788 this.specification = rootObject;
|
nickjillings@1370
|
1789 this.schema = specification.schema.getAllElementsByName("survey")[1];
|
nickjillings@1370
|
1790 this.rootDOM.className = "node";
|
nickjillings@1370
|
1791
|
nickjillings@1370
|
1792 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1793 titleDiv.className = "node-title";
|
nickjillings@1370
|
1794 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1795 this.titleDOM.textContent = "Survey";
|
nickjillings@1370
|
1796 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1797
|
nickjillings@1370
|
1798 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1799 var locationAttr = document.createElement("span");
|
nickjillings@1370
|
1800 this.attributeDOM.appendChild(locationAttr);
|
nickjillings@1370
|
1801 if (location == "Pre" || location == "pre") {
|
nickjillings@1370
|
1802 locationAttr.textContent = "Location: Before";
|
nickjillings@1370
|
1803 } else {
|
nickjillings@1370
|
1804 locationAttr.textContent = "Location: After";
|
nickjillings@1370
|
1805 }
|
nickjillings@1370
|
1806 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1807 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1808
|
nickjillings@1370
|
1809 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1810 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1811 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1812 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1813
|
nickjillings@1370
|
1814 this.surveyEntryNode = function(parent,rootObject)
|
nickjillings@1370
|
1815 {
|
nickjillings@1375
|
1816 this.type = "surveyEntryNode";
|
nickjillings@1370
|
1817 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1818 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1819 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1820 this.attributes = [];
|
nickjillings@1370
|
1821 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1822 this.children = [];
|
nickjillings@1370
|
1823 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1824 this.parent = parent;
|
nickjillings@1370
|
1825 this.specification = rootObject;
|
nickjillings@1370
|
1826 this.schema = specification.schema.getAllElementsByName("surveyentry")[1];
|
nickjillings@1370
|
1827
|
nickjillings@1370
|
1828 this.rootDOM.className = "node";
|
nickjillings@1370
|
1829 this.rootDOM.style.minWidth = "50%";
|
nickjillings@1370
|
1830
|
nickjillings@1370
|
1831 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1832 titleDiv.className = "node-title";
|
nickjillings@1370
|
1833 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1834 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1835
|
nickjillings@1370
|
1836 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1837 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1838 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1839
|
nickjillings@1370
|
1840 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1841 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1842 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1843 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1844
|
nickjillings@1375
|
1845 this.build = function()
|
nickjillings@1375
|
1846 {
|
nickjillings@1375
|
1847 this.attributeDOM.innerHTML = null;
|
nickjillings@1375
|
1848 this.childrenDOM.innerHTML = null;
|
nickjillings@1375
|
1849 var statementRoot = document.createElement("div");
|
nickjillings@1375
|
1850 var statement = document.createElement("span");
|
nickjillings@1375
|
1851 statement.textContent = "Statement / Question: "+this.specification.statement;
|
nickjillings@1375
|
1852 statementRoot.appendChild(statement);
|
nickjillings@1375
|
1853 this.children.push(statementRoot);
|
nickjillings@1375
|
1854 this.childrenDOM.appendChild(statementRoot);
|
nickjillings@1375
|
1855 switch(this.specification.type)
|
nickjillings@1375
|
1856 {
|
nickjillings@1375
|
1857 case "statement":
|
nickjillings@1375
|
1858 this.titleDOM.textContent = "Statement";
|
nickjillings@1375
|
1859 break;
|
nickjillings@1375
|
1860 case "question":
|
nickjillings@1375
|
1861 this.titleDOM.textContent = "Question";
|
nickjillings@1375
|
1862 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1863 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
|
nickjillings@1375
|
1864 var boxsize = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("boxsize")[0]);
|
nickjillings@1375
|
1865 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1866 this.attributes.push(id);
|
nickjillings@1375
|
1867 this.attributeDOM.appendChild(mandatory.holder);
|
nickjillings@1375
|
1868 this.attributes.push(mandatory);
|
nickjillings@1375
|
1869 this.attributeDOM.appendChild(boxsize.holder);
|
nickjillings@1375
|
1870 this.attributes.push(boxsize);
|
nickjillings@1375
|
1871 break;
|
nickjillings@1375
|
1872 case "number":
|
nickjillings@1375
|
1873 this.titleDOM.textContent = "Number";
|
nickjillings@1375
|
1874 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1875 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
|
nickjillings@1375
|
1876 var min = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("min")[0]);
|
nickjillings@1375
|
1877 var max = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("max")[0]);
|
nickjillings@1375
|
1878 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1879 this.attributes.push(id);
|
nickjillings@1375
|
1880 this.attributeDOM.appendChild(min.holder);
|
nickjillings@1375
|
1881 this.attributes.push(min);
|
nickjillings@1375
|
1882 this.attributeDOM.appendChild(max.holder);
|
nickjillings@1375
|
1883 this.attributes.push(max);
|
nickjillings@1375
|
1884 break;
|
nickjillings@1375
|
1885 case "checkbox":
|
nickjillings@1375
|
1886 this.titleDOM.textContent = "Checkbox";
|
nickjillings@1375
|
1887 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1888 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1889 this.attributes.push(id);
|
nickjillings@1375
|
1890 break;
|
nickjillings@1375
|
1891 case "radio":
|
nickjillings@1375
|
1892 this.titleDOM.textContent = "Radio";
|
nickjillings@1375
|
1893 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1894 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1895 this.attributes.push(id);
|
nickjillings@1375
|
1896 break;
|
nickjillings@1375
|
1897 }
|
nickjillings@1370
|
1898 }
|
nickjillings@1375
|
1899 this.build();
|
nickjillings@1370
|
1900
|
nickjillings@1370
|
1901 this.editNode = {
|
nickjillings@1370
|
1902 root: document.createElement("button"),
|
nickjillings@1370
|
1903 parent: this,
|
nickjillings@1370
|
1904 handleEvent: function()
|
nickjillings@1370
|
1905 {
|
nickjillings@1370
|
1906 popupObject.show();
|
nickjillings@1375
|
1907 popupStateNodes.state[5].generate(this.parent.specification,this.parent);
|
nickjillings@1370
|
1908 popupObject.postNode(popupStateNodes.state[5]);
|
nickjillings@1370
|
1909 }
|
nickjillings@1370
|
1910 }
|
nickjillings@1370
|
1911 this.editNode.root.textContent = "Edit Entry";
|
nickjillings@1370
|
1912 this.editNode.root.addEventListener("click",this.editNode,false);
|
nickjillings@1370
|
1913 this.buttonDOM.appendChild(this.editNode.root);
|
nickjillings@1370
|
1914
|
nickjillings@1370
|
1915 this.deleteNode = {
|
nickjillings@1370
|
1916 root: document.createElement("button"),
|
nickjillings@1370
|
1917 parent: this,
|
nickjillings@1370
|
1918 handleEvent: function()
|
nickjillings@1370
|
1919 {
|
nickjillings@1370
|
1920 var optionList = this.parent.parent.specification.options;
|
nickjillings@1370
|
1921 var childList = this.parent.parent.children;
|
nickjillings@1370
|
1922 for (var i=0; i <this.parent.parent.specification.options.length; i++)
|
nickjillings@1370
|
1923 {
|
nickjillings@1370
|
1924 var option = this.parent.parent.specification.options[i];
|
nickjillings@1370
|
1925 if (option == this.parent.specification)
|
nickjillings@1370
|
1926 {
|
nickjillings@1370
|
1927 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
|
nickjillings@1370
|
1928 if (i == this.parent.parent.specification.options.length-1)
|
nickjillings@1370
|
1929 {
|
nickjillings@1370
|
1930 optionList = optionList.slice(0,i);
|
nickjillings@1370
|
1931 childList = childList.slice(0,i);
|
nickjillings@1370
|
1932 }
|
nickjillings@1370
|
1933 else {
|
nickjillings@1370
|
1934 optionList = optionList.slice(0,i).concat(optionList.slice(i+1));
|
nickjillings@1370
|
1935 childList = childList.slice(0,i).concat(childList.slice(i+1));
|
nickjillings@1370
|
1936 }
|
nickjillings@1370
|
1937 this.parent.parent.specification.options = optionList;
|
nickjillings@1370
|
1938 this.parent.parent.children = childList;
|
nickjillings@1370
|
1939 }
|
nickjillings@1370
|
1940 }
|
nickjillings@1370
|
1941 }
|
nickjillings@1370
|
1942 }
|
nickjillings@1370
|
1943 this.deleteNode.root.textContent = "Delete Entry";
|
nickjillings@1370
|
1944 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
|
nickjillings@1370
|
1945 this.buttonDOM.appendChild(this.deleteNode.root);
|
nickjillings@1370
|
1946 }
|
nickjillings@1370
|
1947 this.addNode = {
|
nickjillings@1370
|
1948 root: document.createElement("button"),
|
nickjillings@1370
|
1949 parent: this,
|
nickjillings@1370
|
1950 handleEvent: function()
|
nickjillings@1370
|
1951 {
|
nickjillings@2194
|
1952 var newNode = new this.parent.specification.OptionNode(this.parent.specification);
|
nickjillings@1370
|
1953 this.parent.specification.options.push(newNode);
|
nickjillings@1370
|
1954 popupObject.show();
|
nickjillings@1370
|
1955 popupStateNodes.state[5].generate(newNode,this.parent);
|
nickjillings@1370
|
1956 popupObject.postNode(popupStateNodes.state[5]);
|
nickjillings@1370
|
1957 }
|
nickjillings@1370
|
1958 }
|
nickjillings@1370
|
1959 this.addNode.root.textContent = "Add Survey Entry";
|
nickjillings@1370
|
1960 this.addNode.root.addEventListener("click",this.addNode,false);
|
nickjillings@1370
|
1961 this.buttonDOM.appendChild(this.addNode.root);
|
nickjillings@1370
|
1962
|
nickjillings@1370
|
1963 for (var option of this.specification.options)
|
nickjillings@1370
|
1964 {
|
nickjillings@1370
|
1965 var newNode = new this.surveyEntryNode(this,option);
|
nickjillings@1370
|
1966 this.children.push(newNode);
|
nickjillings@1370
|
1967 this.childrenDOM.appendChild(newNode.rootDOM);
|
nickjillings@1370
|
1968 }
|
nickjillings@1370
|
1969 }
|
nickjillings@1370
|
1970
|
nickjillings@1370
|
1971 this.pageNode = function(parent,rootObject)
|
nickjillings@1370
|
1972 {
|
nickjillings@1375
|
1973 this.type = "pageNode";
|
nickjillings@1370
|
1974 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1975 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1976 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1977 this.attributes = [];
|
nickjillings@1370
|
1978 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1979 this.children = [];
|
nickjillings@1370
|
1980 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1981 this.parent = parent;
|
nickjillings@1370
|
1982 this.specification = rootObject;
|
nickjillings@1370
|
1983 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1370
|
1984 this.rootDOM.className = "node";
|
nickjillings@1370
|
1985
|
nickjillings@1370
|
1986 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1987 titleDiv.className = "node-title";
|
nickjillings@1370
|
1988 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1989 this.titleDOM.textContent = "Test Page";
|
nickjillings@1370
|
1990 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1991
|
nickjillings@1370
|
1992 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1993 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1994 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1995
|
nickjillings@1370
|
1996 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1997 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1998 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1999 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
2000
|
nickjillings@1370
|
2001 // Do the comment prefix node
|
nickjillings@1370
|
2002 var cpn = this.parent.createGeneralNodeDOM("Comment Prefix",""+this.specification.id+"-commentprefix",this.parent);
|
nickjillings@1370
|
2003 cpn.rootDOM.removeChild(cpn.attributeDOM);
|
nickjillings@1370
|
2004 var obj = {
|
nickjillings@1370
|
2005 root: document.createElement("div"),
|
nickjillings@1370
|
2006 input: document.createElement("input"),
|
nickjillings@1370
|
2007 parent: this,
|
nickjillings@1370
|
2008 handleEvent: function()
|
nickjillings@1370
|
2009 {
|
nickjillings@1370
|
2010 this.parent.specification.commentBoxPrefix = event.currentTarget.value;
|
nickjillings@1370
|
2011 }
|
nickjillings@1370
|
2012 }
|
nickjillings@1370
|
2013 cpn.children.push(obj);
|
nickjillings@1370
|
2014 cpn.childrenDOM.appendChild(obj.root);
|
nickjillings@1370
|
2015 obj.root.appendChild(obj.input);
|
nickjillings@1370
|
2016 obj.input.addEventListener("change",obj,false);
|
nickjillings@1370
|
2017 obj.input.value = this.specification.commentBoxPrefix;
|
nickjillings@1370
|
2018 this.childrenDOM.appendChild(cpn.rootDOM);
|
nickjillings@1370
|
2019 this.children.push(cpn);
|
nickjillings@1370
|
2020
|
nickjillings@1370
|
2021 // Now both before and after surveys
|
nickjillings@1370
|
2022 if (this.specification.preTest == undefined){
|
nickjillings@2194
|
2023 this.specification.preTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
2024 this.specification.preTest.location = "pre";
|
nickjillings@1370
|
2025 }
|
nickjillings@1370
|
2026 if (this.specification.postTest == undefined){
|
nickjillings@2194
|
2027 this.specification.postTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
2028 this.specification.postTest.location = "post";
|
nickjillings@1370
|
2029 }
|
nickjillings@1370
|
2030 var surveyBefore = new this.parent.surveyNode(this,this.specification.preTest,"Pre");
|
nickjillings@1370
|
2031 var surveyAfter = new this.parent.surveyNode(this,this.specification.postTest,"Post");
|
nickjillings@1370
|
2032 this.children.push(surveyBefore);
|
nickjillings@1370
|
2033 this.children.push(surveyAfter);
|
nickjillings@1370
|
2034 this.childrenDOM.appendChild(surveyBefore.rootDOM);
|
nickjillings@1370
|
2035 this.childrenDOM.appendChild(surveyAfter.rootDOM);
|
nickjillings@1370
|
2036
|
nickjillings@1370
|
2037 // Build the attributes
|
nickjillings@1370
|
2038 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
|
nickjillings@1370
|
2039 for (var i=0; i<attributeList.length; i++)
|
nickjillings@1370
|
2040 {
|
nickjillings@1370
|
2041 var attributeName = attributeList[i].getAttribute('name');
|
nickjillings@1370
|
2042 var attrObject = this.parent.convertAttributeToDOM(rootObject,attributeList[i]);
|
nickjillings@1370
|
2043 this.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
2044 this.attributes.push(attrObject);
|
nickjillings@1370
|
2045 }
|
nickjillings@1370
|
2046
|
nickjillings@1370
|
2047 this.interfaces = [];
|
nickjillings@1370
|
2048
|
nickjillings@1370
|
2049 this.audioElementNode = function(parent,rootObject)
|
nickjillings@1370
|
2050 {
|
nickjillings@1375
|
2051 this.type = "audioElementNode";
|
nickjillings@1370
|
2052 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
2053 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
2054 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
2055 this.attributes = [];
|
nickjillings@1370
|
2056 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
2057 this.children = [];
|
nickjillings@1370
|
2058 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
2059 this.parent = parent;
|
nickjillings@1370
|
2060 this.specification = rootObject;
|
nickjillings@1370
|
2061 this.schema = specification.schema.getAllElementsByName("audioelement")[0];
|
nickjillings@1370
|
2062 this.rootDOM.className = "node";
|
nickjillings@1370
|
2063
|
nickjillings@1370
|
2064 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
2065 titleDiv.className = "node-title";
|
nickjillings@1370
|
2066 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
2067 this.titleDOM.textContent = "Audio Element";
|
nickjillings@1370
|
2068 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
2069
|
nickjillings@1370
|
2070 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
2071 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
2072 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
2073
|
nickjillings@1370
|
2074 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
2075 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
2076 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
2077 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
2078
|
nickjillings@1370
|
2079 // Build the attributes
|
nickjillings@1370
|
2080 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
|
nickjillings@1370
|
2081 for (var i=0; i<attributeList.length; i++)
|
nickjillings@1370
|
2082 {
|
nickjillings@1370
|
2083 var attributeName = attributeList[i].getAttribute('name');
|
nickjillings@1370
|
2084 var attrObject = this.parent.parent.convertAttributeToDOM(rootObject,attributeList[i]);
|
nickjillings@1370
|
2085 this.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
2086 this.attributes.push(attrObject);
|
nickjillings@1370
|
2087 }
|
nickjillings@1370
|
2088
|
nickjillings@1370
|
2089 this.deleteNode = {
|
nickjillings@1370
|
2090 root: document.createElement("button"),
|
nickjillings@1370
|
2091 parent: this,
|
nickjillings@1370
|
2092 handleEvent: function()
|
nickjillings@1370
|
2093 {
|
nickjillings@1370
|
2094 var i = this.parent.parent.specification.audioElements.findIndex(this.findNode,this);
|
nickjillings@1370
|
2095 if (i >= 0) {
|
nickjillings@1370
|
2096 var aeList = this.parent.parent.specification.audioElements;
|
nickjillings@1370
|
2097 if (i < aeList.length-1) {
|
nickjillings@1370
|
2098 aeList = aeList.slice(0,i).concat(aeList.slice(i+1));
|
nickjillings@1370
|
2099 } else {
|
nickjillings@1370
|
2100 aeList = aeList.slice(0,i);
|
nickjillings@1370
|
2101 }
|
nickjillings@1370
|
2102 }
|
nickjillings@1370
|
2103 i = this.parent.parent.children.findIndex(function(element,index,array){
|
nickjillings@1370
|
2104 if (element == this.parent)
|
nickjillings@1370
|
2105 return true;
|
nickjillings@1370
|
2106 else
|
nickjillings@1370
|
2107 return false;
|
nickjillings@1370
|
2108 },this);
|
nickjillings@1370
|
2109 if (i >= 0) {
|
nickjillings@1370
|
2110 var childList = this.parent.children;
|
nickjillings@1370
|
2111 if (i < aeList.length-1) {
|
nickjillings@1370
|
2112 childList = childList.slice(0,i).concat(childList.slice(i+1));
|
nickjillings@1370
|
2113 } else {
|
nickjillings@1370
|
2114 childList = childList.slice(0,i);
|
nickjillings@1370
|
2115 }
|
nickjillings@1370
|
2116 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
|
nickjillings@1370
|
2117 }
|
nickjillings@1370
|
2118 },
|
nickjillings@1370
|
2119 findNode: function(element,index,array){
|
nickjillings@1370
|
2120 if (element == this.parent.specification)
|
nickjillings@1370
|
2121 return true;
|
nickjillings@1370
|
2122 else
|
nickjillings@1370
|
2123 return false;
|
nickjillings@1370
|
2124 }
|
nickjillings@1370
|
2125 }
|
nickjillings@1370
|
2126 this.deleteNode.root.textContent = "Delete Entry";
|
nickjillings@1370
|
2127 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
|
nickjillings@1370
|
2128 this.buttonDOM.appendChild(this.deleteNode.root);
|
nickjillings@1370
|
2129 }
|
nickjillings@1370
|
2130
|
nickjillings@1370
|
2131 this.commentQuestionNode = function(parent,rootObject)
|
nickjillings@1370
|
2132 {
|
nickjillings@1375
|
2133 this.type = "commentQuestionNode";
|
nickjillings@1370
|
2134 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
2135 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
2136 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
2137 this.attributes = [];
|
nickjillings@1370
|
2138 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
2139 this.children = [];
|
nickjillings@1370
|
2140 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
2141 this.parent = parent;
|
nickjillings@1370
|
2142 this.specification = rootObject;
|
nickjillings@1370
|
2143 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1370
|
2144 this.rootDOM.className = "node";
|
nickjillings@1370
|
2145
|
nickjillings@1370
|
2146 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
2147 titleDiv.className = "node-title";
|
nickjillings@1370
|
2148 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
2149 this.titleDOM.textContent = "Test Page";
|
nickjillings@1370
|
2150 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
2151
|
nickjillings@1370
|
2152 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
2153 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
2154 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
2155
|
nickjillings@1370
|
2156 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
2157 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
2158 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
2159 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
2160
|
nickjillings@1370
|
2161 }
|
nickjillings@1370
|
2162
|
nickjillings@1374
|
2163 // Build the components
|
nickjillings@1310
|
2164 if (this.specification.interfaces.length == 0) {
|
nickjillings@2194
|
2165 this.specification.interfaces.push(new specification.interfaceNode(specification));
|
nickjillings@1310
|
2166 }
|
nickjillings@1381
|
2167 for (var interfaceObj of this.specification.interfaces)
|
nickjillings@1381
|
2168 {
|
nickjillings@1381
|
2169 var newInterface = new this.parent.interfaceNode(this.parent,interfaceObj);
|
nickjillings@1381
|
2170 newInterface.build("Interface",""+this.specification.id+"-interface",this.childrenDOM);
|
nickjillings@1381
|
2171 this.children.push(newInterface);
|
nickjillings@1381
|
2172 this.interfaces.push(newInterface);
|
nickjillings@1381
|
2173 }
|
nickjillings@1381
|
2174
|
nickjillings@1374
|
2175 for (var elements of this.specification.audioElements)
|
nickjillings@1374
|
2176 {
|
nickjillings@1374
|
2177 var audioElementDOM = new this.audioElementNode(this,elements);
|
nickjillings@1374
|
2178 this.children.push(audioElementDOM);
|
nickjillings@1374
|
2179 this.childrenDOM.appendChild(audioElementDOM.rootDOM);
|
nickjillings@1374
|
2180 }
|
nickjillings@1374
|
2181
|
nickjillings@1370
|
2182 this.addInterface = {
|
nickjillings@1370
|
2183 root: document.createElement("button"),
|
nickjillings@1370
|
2184 parent: this,
|
nickjillings@1370
|
2185 handleEvent: function() {
|
nickjillings@2194
|
2186 var InterfaceObj = new specification.interfaceNode(specification);
|
nickjillings@1370
|
2187 var newInterface = new this.parent.parent.interfaceNode(this.parent.parent,InterfaceObj);
|
nickjillings@1370
|
2188 newInterface.build("Interface",""+this.parent.specification.id+"-interface",this.parent.childrenDOM);
|
nickjillings@1370
|
2189 this.parent.children.push(newInterface);
|
nickjillings@1370
|
2190 this.parent.specification.interfaces.push(InterfaceObj);
|
nickjillings@1370
|
2191 this.parent.interfaces.push(newInterface);
|
nickjillings@1370
|
2192 }
|
nickjillings@1370
|
2193 }
|
nickjillings@1370
|
2194 this.addInterface.root.textContent = "Add Interface";
|
nickjillings@1370
|
2195 this.addInterface.root.addEventListener("click",this.addInterface,false);
|
nickjillings@1370
|
2196 this.buttonDOM.appendChild(this.addInterface.root);
|
nickjillings@1370
|
2197
|
nickjillings@1370
|
2198 this.addAudioElement = {
|
nickjillings@1370
|
2199 root: document.createElement("button"),
|
nickjillings@1370
|
2200 parent: this,
|
nickjillings@1370
|
2201 handleEvent: function() {
|
nickjillings@2194
|
2202 var audioElementObject = new this.parent.specification.audioElementNode(specification);
|
nickjillings@1370
|
2203 var audioElementDOM = new this.parent.audioElementNode(this.parent,audioElementObject);
|
nickjillings@1370
|
2204 this.parent.specification.audioElements.push(audioElementObject);
|
nickjillings@1370
|
2205 this.parent.children.push(audioElementDOM);
|
nickjillings@1370
|
2206 this.parent.childrenDOM.appendChild(audioElementDOM.rootDOM);
|
nickjillings@1370
|
2207 }
|
nickjillings@1370
|
2208 }
|
nickjillings@1370
|
2209 this.addAudioElement.root.textContent = "Add Audio Element";
|
nickjillings@1370
|
2210 this.addAudioElement.root.addEventListener("click",this.addAudioElement,false);
|
nickjillings@1370
|
2211 this.buttonDOM.appendChild(this.addAudioElement.root);
|
nickjillings@1370
|
2212 }
|
nickjillings@1370
|
2213 } |