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");
|
n@2405
|
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."
|
n@2405
|
1330 obj.content.appendChild(span);
|
n@2405
|
1331 span = document.createElement("p");
|
n@2405
|
1332 span.textContent = "NOTE FOR SAFARI! You cannot right click on the below link and save it as a file, Safari does not like that at all. Instead click on it to open the XML, the Press Cmd+S to open the save dialogue. Make sure you have 'save as Page Source' selected on the bottom of the window. Currently Safari has no plans to support the HTML 'download' attribute which causes this problem";
|
nickjillings@1373
|
1333 obj.content.appendChild(span);
|
nickjillings@1373
|
1334 var link = document.createElement("div");
|
nicholas@2390
|
1335 link.appendChild(doc.firstElementChild);
|
nickjillings@1373
|
1336 var file = [link.innerHTML];
|
nickjillings@1373
|
1337 var bb = new Blob(file,{type : 'application/xml'});
|
nickjillings@1373
|
1338 var dnlk = window.URL.createObjectURL(bb);
|
nickjillings@1373
|
1339 var a = document.createElement("a");
|
nickjillings@1373
|
1340 a.hidden = '';
|
nickjillings@1373
|
1341 a.href = dnlk;
|
nickjillings@1373
|
1342 a.download = "project-specification.xml";
|
nickjillings@1373
|
1343 a.textContent = "Save File";
|
nickjillings@1373
|
1344 obj.content.appendChild(a);
|
nickjillings@1373
|
1345 popupObject.show();
|
nickjillings@1373
|
1346 popupObject.postNode(obj);
|
nickjillings@1373
|
1347 }
|
nickjillings@1373
|
1348 this.injectDOM.appendChild(exportButton);
|
nickjillings@1373
|
1349
|
nickjillings@1370
|
1350 // First perform the setupNode;
|
nickjillings@1370
|
1351 var setupSchema = specification.schema.getAllElementsByName('setup')[0];
|
nickjillings@2114
|
1352 this.setupDOM = new this.createGeneralNodeDOM('Global Configuration','setup',null);
|
nickjillings@1370
|
1353 this.injectDOM.appendChild(this.setupDOM.rootDOM);
|
nickjillings@1370
|
1354 var setupAttributes = setupSchema.getAllElementsByTagName('xs:attribute');
|
nickjillings@1370
|
1355 for (var i=0; i<setupAttributes.length; i++)
|
nickjillings@1370
|
1356 {
|
nickjillings@1370
|
1357 var attributeName = setupAttributes[i].getAttribute('name');
|
nickjillings@1370
|
1358 var attrObject = this.convertAttributeToDOM(specification,setupAttributes[i]);
|
nickjillings@1370
|
1359 this.setupDOM.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
1360 this.setupDOM.attributes.push(attrObject);
|
nickjillings@1370
|
1361 }
|
nickjillings@1370
|
1362
|
nickjillings@2179
|
1363 // Build the exit Text node
|
nickjillings@2179
|
1364 var exitText = new this.createGeneralNodeDOM("Exit Text","exit-test",this.setupDOM);
|
nickjillings@2179
|
1365 exitText.rootDOM.removeChild(exitText.attributeDOM);
|
nickjillings@2179
|
1366 this.setupDOM.children.push(exitText);
|
nickjillings@2179
|
1367 this.setupDOM.childrenDOM.appendChild(exitText.rootDOM);
|
nickjillings@2179
|
1368 var obj = {
|
nickjillings@2179
|
1369 rootDOM: document.createElement("div"),
|
nickjillings@2179
|
1370 labelDOM: document.createElement("label"),
|
nickjillings@2179
|
1371 inputDOM: document.createElement("textarea"),
|
nickjillings@2179
|
1372 parent: exitText,
|
nickjillings@2179
|
1373 specification: specification,
|
nickjillings@2179
|
1374 handleEvent: function(event) {
|
nickjillings@2179
|
1375 this.specification.exitText = this.inputDOM.value;
|
nickjillings@2179
|
1376 }
|
nickjillings@2179
|
1377 }
|
b@2367
|
1378 var exitWarning = document.createElement("div");
|
b@2367
|
1379 obj.rootDOM.appendChild(exitWarning);
|
b@2367
|
1380 exitWarning.textContent = "Only visible when the above 'On complete redirect URL' field is empty.";
|
nickjillings@2179
|
1381 obj.rootDOM.appendChild(obj.labelDOM);
|
nickjillings@2179
|
1382 obj.rootDOM.appendChild(obj.inputDOM);
|
nickjillings@2179
|
1383 obj.labelDOM.textContent = "Text: ";
|
nickjillings@2179
|
1384 obj.inputDOM.value = obj.specification.exitText;
|
nickjillings@2179
|
1385 obj.inputDOM.addEventListener("change",obj);
|
nickjillings@2179
|
1386 exitText.children.push(obj);
|
nickjillings@2179
|
1387 exitText.childrenDOM.appendChild(obj.rootDOM);
|
nickjillings@2179
|
1388
|
nickjillings@1370
|
1389 // Now we must build the interface Node
|
nickjillings@1370
|
1390 this.interfaceDOM = new this.interfaceNode(this,specification.interfaces);
|
nickjillings@1370
|
1391 this.interfaceDOM.build("Interface","setup-interface",this.setupDOM.rootDOM);
|
nickjillings@1370
|
1392
|
nickjillings@1370
|
1393 // Now build the Metrics selection node
|
nickjillings@2114
|
1394 var metric = this.createGeneralNodeDOM("Session Metrics","setup-metric",this.setupDOM);
|
nickjillings@1370
|
1395 metric.rootDOM.removeChild(metric.attributeDOM);
|
nickjillings@1370
|
1396 this.setupDOM.children.push(metric);
|
nickjillings@1370
|
1397 this.setupDOM.childrenDOM.appendChild(metric.rootDOM);
|
nickjillings@1370
|
1398 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1399 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
1400 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1401 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
1402 testXML = testXML.getAllElementsByTagName("metrics");
|
nicholas@2390
|
1403 var interfaceXMLChild = interfaceXML.firstElementChild;
|
nicholas@2390
|
1404 while(interfaceXMLChild)
|
nickjillings@1370
|
1405 {
|
nickjillings@1370
|
1406 var obj = {
|
nickjillings@1370
|
1407 input: document.createElement('input'),
|
nickjillings@1370
|
1408 root: document.createElement('div'),
|
nickjillings@1370
|
1409 text: document.createElement('span'),
|
nickjillings@1370
|
1410 specification: specification.metrics.enabled,
|
nicholas@2390
|
1411 name: interfaceXMLChild.getAttribute("name"),
|
nickjillings@1370
|
1412 handleEvent: function()
|
nickjillings@1370
|
1413 {
|
nickjillings@1370
|
1414 for (var i=0; i<this.specification.length; i++)
|
nickjillings@1370
|
1415 {
|
nickjillings@1370
|
1416 if (this.specification[i] == this.name)
|
nickjillings@1370
|
1417 {
|
nickjillings@1370
|
1418 var options = this.specification;
|
nickjillings@1370
|
1419 if (this.input.checked == false) {
|
nickjillings@1370
|
1420 if (i == options.length)
|
nickjillings@1370
|
1421 {options = options.slice(0,i);}
|
nickjillings@1370
|
1422 else {
|
nickjillings@1370
|
1423 options = options.slice(0,i).concat(options.slice(i+1));
|
nickjillings@1370
|
1424 }
|
nickjillings@1370
|
1425 } else {
|
nickjillings@1370
|
1426 return;
|
nickjillings@1370
|
1427 }
|
nickjillings@1370
|
1428 this.specification = options;
|
nickjillings@1370
|
1429 break;
|
nickjillings@1370
|
1430 }
|
nickjillings@1370
|
1431 }
|
nickjillings@1370
|
1432 if (this.input.checked) {
|
nickjillings@1370
|
1433 this.specification.push(this.name);
|
nickjillings@1370
|
1434 }
|
nickjillings@1370
|
1435 }
|
nickjillings@1370
|
1436 };
|
nickjillings@1370
|
1437 obj.root.className = "attribute";
|
nickjillings@1370
|
1438 obj.input.type = "checkbox";
|
nickjillings@1370
|
1439 obj.root.appendChild(obj.text);
|
nickjillings@1370
|
1440 obj.root.appendChild(obj.input);
|
nicholas@2390
|
1441 obj.text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
|
nickjillings@1370
|
1442 metric.children.push(obj);
|
nickjillings@1370
|
1443 metric.childrenDOM.appendChild(obj.root);
|
nickjillings@1314
|
1444 for (var j=0; j<specification.metrics.enabled.length; j++)
|
nickjillings@1370
|
1445 {
|
nickjillings@1314
|
1446 if (specification.metrics.enabled[j] == obj.name)
|
nickjillings@1370
|
1447 {
|
nickjillings@1370
|
1448 obj.input.checked = true;
|
nickjillings@1370
|
1449 break;
|
nickjillings@1370
|
1450 }
|
nickjillings@1370
|
1451 }
|
nicholas@2390
|
1452 interfaceXMLChild = interfaceXMLChild.nextElementSibling;
|
nickjillings@1370
|
1453 }
|
nickjillings@1370
|
1454
|
nickjillings@1370
|
1455 // Now both before and after surveys
|
nickjillings@1370
|
1456 if (specification.preTest == undefined){
|
nickjillings@2194
|
1457 specification.preTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
1458 specification.preTest.location = "pre";
|
nickjillings@1370
|
1459 }
|
nickjillings@1370
|
1460 if (specification.postTest == undefined){
|
nickjillings@2194
|
1461 specification.postTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
1462 specification.postTest.location = "post";
|
nickjillings@1370
|
1463 }
|
nickjillings@1370
|
1464 var surveyBefore = new this.surveyNode(this,specification.preTest,"Pre");
|
nickjillings@1370
|
1465 var surveyAfter = new this.surveyNode(this,specification.postTest,"Post");
|
nickjillings@1370
|
1466 this.setupDOM.children.push(surveyBefore);
|
nickjillings@1370
|
1467 this.setupDOM.children.push(surveyAfter);
|
nickjillings@1370
|
1468 this.setupDOM.childrenDOM.appendChild(surveyBefore.rootDOM);
|
nickjillings@1370
|
1469 this.setupDOM.childrenDOM.appendChild(surveyAfter.rootDOM);
|
nickjillings@1370
|
1470
|
nickjillings@1370
|
1471 // Add in the page creator button
|
nickjillings@1370
|
1472 this.addPage = {
|
nickjillings@1370
|
1473 root: document.createElement("button"),
|
nickjillings@1370
|
1474 parent: this,
|
nickjillings@1370
|
1475 handleEvent: function()
|
nickjillings@1370
|
1476 {
|
nickjillings@2194
|
1477 var pageObj = new specification.page(specification);
|
nickjillings@1370
|
1478 specification.pages.push(pageObj);
|
nickjillings@1370
|
1479 var newPage = new this.parent.pageNode(this.parent,pageObj);
|
nicholas@2315
|
1480 document.getElementById("page-holder").appendChild(newPage.rootDOM);
|
nickjillings@1370
|
1481 this.parent.pages.push(newPage);
|
nickjillings@1370
|
1482 }
|
nickjillings@1370
|
1483 }
|
nickjillings@1370
|
1484 this.addPage.root.textContent = "Add Page";
|
nicholas@2315
|
1485 this.addPage.root.id = "new-page-button";
|
nicholas@2315
|
1486 this.addPage.root.style.float = "left";
|
nickjillings@1370
|
1487 this.addPage.root.addEventListener("click",this.addPage,false);
|
nicholas@2315
|
1488
|
nicholas@2315
|
1489 var pageHolder = document.createElement("div");
|
nicholas@2315
|
1490 pageHolder.id ="page-holder";
|
nicholas@2315
|
1491 this.injectDOM.appendChild(pageHolder);
|
nickjillings@1374
|
1492
|
nickjillings@1374
|
1493 // Build each page
|
nickjillings@1374
|
1494 for (var page of specification.pages)
|
nickjillings@1374
|
1495 {
|
nickjillings@1374
|
1496 var newPage = new this.pageNode(this,page);
|
nicholas@2315
|
1497 pageHolder.appendChild(newPage.rootDOM);
|
nickjillings@1374
|
1498 this.pages.push(newPage);
|
nickjillings@1374
|
1499 }
|
nicholas@2315
|
1500
|
nicholas@2315
|
1501 this.injectDOM.appendChild(this.addPage.root);
|
nickjillings@1370
|
1502 }
|
nickjillings@1370
|
1503
|
nickjillings@1370
|
1504 this.interfaceNode = function(parent,rootObject)
|
nickjillings@1370
|
1505 {
|
nickjillings@1375
|
1506 this.type = "interfaceNode";
|
nickjillings@1370
|
1507 this.rootDOM;
|
nickjillings@1370
|
1508 this.titleDOM;
|
nickjillings@1370
|
1509 this.attributeDOM;
|
nickjillings@1370
|
1510 this.attributes = [];
|
nickjillings@1370
|
1511 this.childrenDOM;
|
nickjillings@1370
|
1512 this.children = [];
|
nickjillings@1370
|
1513 this.buttonDOM;
|
nickjillings@1370
|
1514 this.parent = parent;
|
nickjillings@1370
|
1515 this.HTMLPoint;
|
nickjillings@1370
|
1516 this.specification = rootObject;
|
nickjillings@1370
|
1517 this.schema = specification.schema.getAllElementsByName("interface")[1];
|
nickjillings@1370
|
1518
|
nickjillings@1370
|
1519 this.createIOasAttr = function(name,specification,parent,type) {
|
nickjillings@1370
|
1520 this.root = document.createElement('div');
|
nickjillings@1370
|
1521 this.input = document.createElement("input");
|
nickjillings@1370
|
1522 this.name = name;
|
nickjillings@1370
|
1523 this.type = type;
|
nickjillings@1370
|
1524 this.parent = parent;
|
nickjillings@1370
|
1525 this.specification = specification;
|
nickjillings@1370
|
1526 this.handleEvent = function(event) {
|
nickjillings@1370
|
1527 for (var i=0; i<this.specification.options.length; i++)
|
nickjillings@1370
|
1528 {
|
nickjillings@1370
|
1529 if (this.specification.options[i].name == this.name)
|
nickjillings@1370
|
1530 {
|
nickjillings@1370
|
1531 var options = this.specification.options;
|
nickjillings@1370
|
1532 if (this.input.checked == false) {
|
nickjillings@1370
|
1533 if (i == options.length)
|
nickjillings@1370
|
1534 {options = options.slice(0,i);}
|
nickjillings@1370
|
1535 else {
|
nickjillings@1370
|
1536 options = options.slice(0,i).concat(options.slice(i+1));
|
nickjillings@1370
|
1537 }
|
nickjillings@1370
|
1538 } else {
|
nickjillings@1370
|
1539 return;
|
nickjillings@1370
|
1540 }
|
nickjillings@1370
|
1541 this.specification.options = options;
|
nickjillings@1370
|
1542 break;
|
nickjillings@1370
|
1543 }
|
nickjillings@1370
|
1544 }
|
nickjillings@1370
|
1545 if (this.input.checked) {
|
nickjillings@1370
|
1546 var obj = {
|
nickjillings@1370
|
1547 name: this.name,
|
nickjillings@1370
|
1548 type: this.type
|
nickjillings@1370
|
1549 };
|
nickjillings@1370
|
1550 this.specification.options.push(obj);
|
nickjillings@1370
|
1551 }
|
nickjillings@1370
|
1552 if (this.parent.HTMLPoint.id == "setup")
|
nickjillings@1370
|
1553 {
|
nickjillings@1370
|
1554 // We've changed a global setting, must update all child 'interfaces' and disable them
|
nickjillings@1370
|
1555 for (pages of convert.pages)
|
nickjillings@1370
|
1556 {
|
nickjillings@1370
|
1557 for (interface of pages.interfaces)
|
nickjillings@1370
|
1558 {
|
nickjillings@1370
|
1559 if (this.type == "check")
|
nickjillings@1370
|
1560 {
|
nickjillings@1370
|
1561 for (node of interface.children[0].attributes)
|
nickjillings@1370
|
1562 {
|
nickjillings@1370
|
1563 if (node.name == this.name) {
|
nickjillings@1370
|
1564 if (this.input.checked) {
|
nickjillings@1370
|
1565 node.input.disabled = true;
|
nickjillings@1370
|
1566 node.input.checked = false;
|
nickjillings@1370
|
1567 } else {
|
nickjillings@1370
|
1568 node.input.disabled = false;
|
nickjillings@1370
|
1569 }
|
nickjillings@1370
|
1570 break;
|
nickjillings@1370
|
1571 }
|
nickjillings@1370
|
1572 }
|
nickjillings@1370
|
1573 } else if (this.type == "show")
|
nickjillings@1370
|
1574 {
|
nickjillings@1370
|
1575 for (node of interface.children[1].attributes)
|
nickjillings@1370
|
1576 {
|
nickjillings@1370
|
1577 if (node.name == this.name) {
|
nickjillings@1370
|
1578 if (this.input.checked) {
|
nickjillings@1370
|
1579 node.input.disabled = true;
|
nickjillings@1370
|
1580 } else {
|
nickjillings@1370
|
1581 node.input.disabled = false;
|
nickjillings@1370
|
1582 }
|
nickjillings@1370
|
1583 break;
|
nickjillings@1370
|
1584 }
|
nickjillings@1370
|
1585 }
|
nickjillings@1370
|
1586 }
|
nickjillings@1370
|
1587 }
|
nickjillings@1370
|
1588 }
|
nickjillings@1370
|
1589 }
|
nickjillings@1370
|
1590 };
|
nickjillings@1370
|
1591 this.findIndex = function(element,index,array){
|
nickjillings@1370
|
1592 if (element.name == this.name)
|
nickjillings@1370
|
1593 return true;
|
nickjillings@1370
|
1594 else
|
nickjillings@1370
|
1595 return false;
|
nickjillings@1370
|
1596 };
|
nickjillings@1370
|
1597 this.findNode = function(element,index,array){
|
nickjillings@1370
|
1598 if (element.name == this.name)
|
nickjillings@1370
|
1599 return true;
|
nickjillings@1370
|
1600 else
|
nickjillings@1370
|
1601 return false;
|
nickjillings@1370
|
1602 };
|
nickjillings@1370
|
1603 this.input.type = "checkbox";
|
nickjillings@1370
|
1604 this.input.setAttribute("name",name);
|
nickjillings@1370
|
1605 this.input.addEventListener("change",this,false);
|
nickjillings@1370
|
1606 this.root.appendChild(this.input);
|
nickjillings@1370
|
1607 this.root.className = "attribute";
|
nickjillings@1370
|
1608 return this;
|
nickjillings@1370
|
1609 }
|
nickjillings@1370
|
1610
|
nickjillings@1370
|
1611 this.build = function(name,id,parent)
|
nickjillings@1370
|
1612 {
|
nickjillings@1370
|
1613 var obj = this.parent.createGeneralNodeDOM(name,id,parent);
|
nickjillings@1370
|
1614
|
nickjillings@1370
|
1615 this.rootDOM = obj.rootDOM;
|
nickjillings@1370
|
1616 this.titleDOM = obj.titleDOM;
|
nickjillings@1370
|
1617 this.attributeDOM = obj.attributeDOM;
|
nickjillings@1370
|
1618 this.childrenDOM = obj.childrenDOM;
|
nickjillings@1370
|
1619 this.buttonDOM = obj.buttonsDOM;
|
nickjillings@1370
|
1620 this.HTMLPoint = parent;
|
nickjillings@1370
|
1621 this.rootDOM.removeChild(this.attributeDOM);
|
nicholas@2243
|
1622 if (parent.id != "setup") {
|
nicholas@2243
|
1623 // Put in the <title> node:
|
nicholas@2243
|
1624 this.titleNode = {
|
nicholas@2243
|
1625 root: document.createElement("div"),
|
nicholas@2243
|
1626 label: document.createElement("span"),
|
nicholas@2243
|
1627 input: document.createElement("input"),
|
nicholas@2243
|
1628 parent: this,
|
nicholas@2243
|
1629 handleEvent: function(event) {
|
nicholas@2243
|
1630 this.parent.specification.title = event.currentTarget.value;
|
nicholas@2243
|
1631 }
|
nicholas@2243
|
1632 }
|
nicholas@2243
|
1633 this.titleNode.label.textContent = "Axis Title:";
|
nicholas@2243
|
1634 this.titleNode.root.className = "node-children";
|
nicholas@2243
|
1635 this.titleNode.root.appendChild(this.titleNode.label);
|
nicholas@2243
|
1636 this.titleNode.root.appendChild(this.titleNode.input);
|
nicholas@2243
|
1637 this.titleNode.input.addEventListener("change",this.titleNode,false);
|
nicholas@2243
|
1638 this.titleNode.input.value = this.specification.title;
|
nicholas@2243
|
1639 this.children.push(this.titleNode);
|
nicholas@2243
|
1640 this.childrenDOM.appendChild(this.titleNode.root);
|
nicholas@2243
|
1641 }
|
nicholas@2243
|
1642
|
nickjillings@1370
|
1643 // Put in the check / show options as individual children
|
nickjillings@1370
|
1644 var checks = this.parent.createGeneralNodeDOM("Checks","setup-interface-checks",this);
|
nickjillings@1370
|
1645
|
nickjillings@1370
|
1646 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1647 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
1648 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1649 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
1650 testXML = testXML.getAllElementsByTagName("checks");
|
nicholas@2390
|
1651 var interfaceXMLChild = interfaceXML.firstElementChild;
|
nicholas@2390
|
1652 while (interfaceXMLChild)
|
nickjillings@1370
|
1653 {
|
nicholas@2390
|
1654 var obj = new this.createIOasAttr(interfaceXMLChild.getAttribute("name"),this.specification,this,"check");
|
nickjillings@1370
|
1655 for (var option of this.specification.options)
|
nickjillings@1370
|
1656 {
|
nickjillings@1370
|
1657 if (option.name == obj.name)
|
nickjillings@1370
|
1658 {
|
nickjillings@1370
|
1659 obj.input.checked = true;
|
nickjillings@1370
|
1660 break;
|
nickjillings@1370
|
1661 }
|
nickjillings@1370
|
1662 }
|
nickjillings@1370
|
1663 if (parent.id != "setup") {
|
nickjillings@1370
|
1664 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
|
nickjillings@1381
|
1665 if (node != undefined) {
|
nickjillings@1381
|
1666 if (node.input.checked) {
|
nickjillings@1381
|
1667 obj.input.checked = false;
|
nickjillings@1381
|
1668 obj.input.disabled = true;
|
nickjillings@1381
|
1669 }
|
nickjillings@1370
|
1670 }
|
nickjillings@1370
|
1671 }
|
nickjillings@1370
|
1672 var text = document.createElement('span');
|
nicholas@2390
|
1673 text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
|
nickjillings@1370
|
1674 obj.root.appendChild(text);
|
nickjillings@1370
|
1675 checks.attributeDOM.appendChild(obj.root);
|
nickjillings@1370
|
1676 checks.attributes.push(obj);
|
nicholas@2390
|
1677 interfaceXMLChild = interfaceXMLChild.nextElementSibling;
|
nickjillings@1370
|
1678 }
|
nickjillings@1370
|
1679 this.children.push(checks);
|
nickjillings@1370
|
1680 this.childrenDOM.appendChild(checks.rootDOM);
|
nickjillings@1370
|
1681
|
nickjillings@1370
|
1682 var show = this.parent.createGeneralNodeDOM("Show","setup-interface-show",this);
|
nickjillings@1370
|
1683 interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1684 checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
1685 testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1686 interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
1687 testXML = testXML.getAllElementsByTagName("show");
|
nicholas@2390
|
1688 interfaceXMLChild = interfaceXML.firstElementChild;
|
nicholas@2390
|
1689 while(interfaceXMLChild)
|
nickjillings@1370
|
1690 {
|
nicholas@2390
|
1691 var obj = new this.createIOasAttr(interfaceXMLChild.getAttribute("name"),this.specification,this,"show");
|
nickjillings@1370
|
1692 for (var option of this.specification.options)
|
nickjillings@1370
|
1693 {
|
nickjillings@1370
|
1694 if (option.name == obj.name)
|
nickjillings@1370
|
1695 {
|
nickjillings@1370
|
1696 obj.input.checked = true;
|
nickjillings@1370
|
1697 break;
|
nickjillings@1370
|
1698 }
|
nickjillings@1370
|
1699 }
|
nickjillings@1370
|
1700 if (parent.id != "setup") {
|
nickjillings@1370
|
1701 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
|
nickjillings@1381
|
1702 if (node != undefined) {
|
nickjillings@1381
|
1703 if (node.input.checked) {
|
nickjillings@1381
|
1704 obj.input.checked = false;
|
nickjillings@1381
|
1705 obj.input.disabled = true;
|
nickjillings@1381
|
1706 }
|
nickjillings@1370
|
1707 }
|
nickjillings@1370
|
1708 }
|
nickjillings@1370
|
1709 var text = document.createElement('span');
|
nicholas@2390
|
1710 text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
|
nickjillings@1370
|
1711 obj.root.appendChild(text);
|
nickjillings@1370
|
1712 show.attributeDOM.appendChild(obj.root);
|
nickjillings@1370
|
1713 show.attributes.push(obj);
|
nicholas@2390
|
1714 interfaceXMLChild = interfaceXMLChild.nextElementSibling;
|
nickjillings@1370
|
1715 }
|
nickjillings@1370
|
1716 this.children.push(show);
|
nickjillings@1370
|
1717 this.childrenDOM.appendChild(show.rootDOM);
|
nickjillings@1370
|
1718
|
nickjillings@1370
|
1719 if (parent.id == "setup")
|
nickjillings@1370
|
1720 {
|
nickjillings@1370
|
1721 } else {
|
nickjillings@1370
|
1722 var nameAttr = this.parent.convertAttributeToDOM(this,specification.schema.getAllElementsByName("name")[0]);
|
nickjillings@1370
|
1723 this.attributeDOM.appendChild(nameAttr.holder);
|
nickjillings@1370
|
1724 this.attributes.push(nameAttr);
|
nickjillings@1385
|
1725 var scales = new this.scalesNode(this,this.specification);
|
nickjillings@1385
|
1726 this.children.push(scales);
|
nickjillings@1385
|
1727 this.childrenDOM.appendChild(scales.rootDOM);
|
nickjillings@1370
|
1728 }
|
nickjillings@1370
|
1729 if (parent != undefined)
|
nickjillings@1370
|
1730 {
|
nickjillings@1370
|
1731 parent.appendChild(this.rootDOM);
|
nickjillings@1370
|
1732 }
|
nickjillings@1370
|
1733 }
|
nickjillings@1385
|
1734
|
nickjillings@1385
|
1735 this.scalesNode = function(parent,rootObject)
|
nickjillings@1385
|
1736 {
|
nickjillings@1385
|
1737 this.type = "scalesNode";
|
nickjillings@1385
|
1738 this.rootDOM = document.createElement("div");
|
nickjillings@1385
|
1739 this.titleDOM = document.createElement("span");
|
nickjillings@1385
|
1740 this.attributeDOM = document.createElement("div");
|
nickjillings@1385
|
1741 this.attributes = [];
|
nickjillings@1385
|
1742 this.childrenDOM = document.createElement("div");
|
nickjillings@1385
|
1743 this.children = [];
|
nickjillings@1385
|
1744 this.buttonDOM = document.createElement("div");
|
nickjillings@1385
|
1745 this.parent = parent;
|
nickjillings@1385
|
1746 this.specification = rootObject;
|
nickjillings@1385
|
1747 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1385
|
1748 this.rootDOM.className = "node";
|
nickjillings@1385
|
1749
|
nickjillings@1385
|
1750 var titleDiv = document.createElement('div');
|
nickjillings@1385
|
1751 titleDiv.className = "node-title";
|
nickjillings@1385
|
1752 this.titleDOM.className = "node-title";
|
nickjillings@1385
|
1753 this.titleDOM.textContent = "Interface Scales";
|
nickjillings@1385
|
1754 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1385
|
1755
|
nickjillings@1385
|
1756 this.attributeDOM.className = "node-attributes";
|
nickjillings@1385
|
1757 this.childrenDOM.className = "node-children";
|
nickjillings@1385
|
1758 this.buttonDOM.className = "node-buttons";
|
nickjillings@1385
|
1759
|
nickjillings@1385
|
1760 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1385
|
1761 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1385
|
1762 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1385
|
1763 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1385
|
1764
|
nickjillings@1385
|
1765 this.editButton = {
|
nickjillings@1385
|
1766 button: document.createElement("button"),
|
nickjillings@1385
|
1767 parent: this,
|
nickjillings@1385
|
1768 handleEvent: function(event) {
|
nickjillings@1385
|
1769 popupObject.show();
|
nickjillings@1385
|
1770 popupObject.postNode(popupStateNodes.state[6]);
|
nickjillings@1385
|
1771 popupStateNodes.state[6].generate(this.parent.specification,this.parent);
|
nickjillings@1385
|
1772 }
|
nickjillings@1385
|
1773 };
|
nickjillings@1385
|
1774 this.editButton.button.textContent = "Edit Scales/Markers";
|
nickjillings@1385
|
1775 this.editButton.button.addEventListener("click",this.editButton,false);
|
nickjillings@1385
|
1776 this.buttonDOM.appendChild(this.editButton.button);
|
nickjillings@1385
|
1777 }
|
nickjillings@1370
|
1778 }
|
nickjillings@1370
|
1779
|
nickjillings@1370
|
1780 this.surveyNode = function(parent,rootObject,location)
|
nickjillings@1370
|
1781 {
|
nickjillings@1375
|
1782 this.type = "surveyNode";
|
nickjillings@1370
|
1783 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1784 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1785 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1786 this.attributes = [];
|
nickjillings@1370
|
1787 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1788 this.children = [];
|
nickjillings@1370
|
1789 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1790 this.parent = parent;
|
nickjillings@1370
|
1791 this.specification = rootObject;
|
nickjillings@1370
|
1792 this.schema = specification.schema.getAllElementsByName("survey")[1];
|
nickjillings@1370
|
1793 this.rootDOM.className = "node";
|
nickjillings@1370
|
1794
|
nickjillings@1370
|
1795 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1796 titleDiv.className = "node-title";
|
nickjillings@1370
|
1797 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1798 this.titleDOM.textContent = "Survey";
|
nickjillings@1370
|
1799 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1800
|
nickjillings@1370
|
1801 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1802 var locationAttr = document.createElement("span");
|
nickjillings@1370
|
1803 this.attributeDOM.appendChild(locationAttr);
|
nickjillings@1370
|
1804 if (location == "Pre" || location == "pre") {
|
nickjillings@1370
|
1805 locationAttr.textContent = "Location: Before";
|
nickjillings@1370
|
1806 } else {
|
nickjillings@1370
|
1807 locationAttr.textContent = "Location: After";
|
nickjillings@1370
|
1808 }
|
nickjillings@1370
|
1809 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1810 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1811
|
nickjillings@1370
|
1812 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1813 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1814 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1815 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1816
|
nickjillings@1370
|
1817 this.surveyEntryNode = function(parent,rootObject)
|
nickjillings@1370
|
1818 {
|
nickjillings@1375
|
1819 this.type = "surveyEntryNode";
|
nickjillings@1370
|
1820 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1821 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1822 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1823 this.attributes = [];
|
nickjillings@1370
|
1824 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1825 this.children = [];
|
nickjillings@1370
|
1826 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1827 this.parent = parent;
|
nickjillings@1370
|
1828 this.specification = rootObject;
|
nickjillings@1370
|
1829 this.schema = specification.schema.getAllElementsByName("surveyentry")[1];
|
nickjillings@1370
|
1830
|
nickjillings@1370
|
1831 this.rootDOM.className = "node";
|
nickjillings@1370
|
1832 this.rootDOM.style.minWidth = "50%";
|
nickjillings@1370
|
1833
|
nickjillings@1370
|
1834 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1835 titleDiv.className = "node-title";
|
nickjillings@1370
|
1836 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1837 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1838
|
nickjillings@1370
|
1839 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1840 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1841 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1842
|
nickjillings@1370
|
1843 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1844 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1845 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1846 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1847
|
nickjillings@1375
|
1848 this.build = function()
|
nickjillings@1375
|
1849 {
|
nickjillings@1375
|
1850 this.attributeDOM.innerHTML = null;
|
nickjillings@1375
|
1851 this.childrenDOM.innerHTML = null;
|
nickjillings@1375
|
1852 var statementRoot = document.createElement("div");
|
nickjillings@1375
|
1853 var statement = document.createElement("span");
|
nickjillings@1375
|
1854 statement.textContent = "Statement / Question: "+this.specification.statement;
|
nickjillings@1375
|
1855 statementRoot.appendChild(statement);
|
nickjillings@1375
|
1856 this.children.push(statementRoot);
|
nickjillings@1375
|
1857 this.childrenDOM.appendChild(statementRoot);
|
nickjillings@1375
|
1858 switch(this.specification.type)
|
nickjillings@1375
|
1859 {
|
nickjillings@1375
|
1860 case "statement":
|
nickjillings@1375
|
1861 this.titleDOM.textContent = "Statement";
|
nickjillings@1375
|
1862 break;
|
nickjillings@1375
|
1863 case "question":
|
nickjillings@1375
|
1864 this.titleDOM.textContent = "Question";
|
nickjillings@1375
|
1865 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1866 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
|
nickjillings@1375
|
1867 var boxsize = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("boxsize")[0]);
|
nickjillings@1375
|
1868 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1869 this.attributes.push(id);
|
nickjillings@1375
|
1870 this.attributeDOM.appendChild(mandatory.holder);
|
nickjillings@1375
|
1871 this.attributes.push(mandatory);
|
nickjillings@1375
|
1872 this.attributeDOM.appendChild(boxsize.holder);
|
nickjillings@1375
|
1873 this.attributes.push(boxsize);
|
nickjillings@1375
|
1874 break;
|
nickjillings@1375
|
1875 case "number":
|
nickjillings@1375
|
1876 this.titleDOM.textContent = "Number";
|
nickjillings@1375
|
1877 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1878 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
|
nickjillings@1375
|
1879 var min = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("min")[0]);
|
nickjillings@1375
|
1880 var max = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("max")[0]);
|
nickjillings@1375
|
1881 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1882 this.attributes.push(id);
|
nickjillings@1375
|
1883 this.attributeDOM.appendChild(min.holder);
|
nickjillings@1375
|
1884 this.attributes.push(min);
|
nickjillings@1375
|
1885 this.attributeDOM.appendChild(max.holder);
|
nickjillings@1375
|
1886 this.attributes.push(max);
|
nickjillings@1375
|
1887 break;
|
nickjillings@1375
|
1888 case "checkbox":
|
nickjillings@1375
|
1889 this.titleDOM.textContent = "Checkbox";
|
nickjillings@1375
|
1890 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1891 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1892 this.attributes.push(id);
|
nickjillings@1375
|
1893 break;
|
nickjillings@1375
|
1894 case "radio":
|
nickjillings@1375
|
1895 this.titleDOM.textContent = "Radio";
|
nickjillings@1375
|
1896 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1897 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1898 this.attributes.push(id);
|
nickjillings@1375
|
1899 break;
|
nickjillings@1375
|
1900 }
|
nickjillings@1370
|
1901 }
|
nickjillings@1375
|
1902 this.build();
|
nickjillings@1370
|
1903
|
nickjillings@1370
|
1904 this.editNode = {
|
nickjillings@1370
|
1905 root: document.createElement("button"),
|
nickjillings@1370
|
1906 parent: this,
|
nickjillings@1370
|
1907 handleEvent: function()
|
nickjillings@1370
|
1908 {
|
nickjillings@1370
|
1909 popupObject.show();
|
nickjillings@1375
|
1910 popupStateNodes.state[5].generate(this.parent.specification,this.parent);
|
nickjillings@1370
|
1911 popupObject.postNode(popupStateNodes.state[5]);
|
nickjillings@1370
|
1912 }
|
nickjillings@1370
|
1913 }
|
nickjillings@1370
|
1914 this.editNode.root.textContent = "Edit Entry";
|
nickjillings@1370
|
1915 this.editNode.root.addEventListener("click",this.editNode,false);
|
nickjillings@1370
|
1916 this.buttonDOM.appendChild(this.editNode.root);
|
nickjillings@1370
|
1917
|
nickjillings@1370
|
1918 this.deleteNode = {
|
nickjillings@1370
|
1919 root: document.createElement("button"),
|
nickjillings@1370
|
1920 parent: this,
|
nickjillings@1370
|
1921 handleEvent: function()
|
nickjillings@1370
|
1922 {
|
nickjillings@1370
|
1923 var optionList = this.parent.parent.specification.options;
|
nickjillings@1370
|
1924 var childList = this.parent.parent.children;
|
nickjillings@1370
|
1925 for (var i=0; i <this.parent.parent.specification.options.length; i++)
|
nickjillings@1370
|
1926 {
|
nickjillings@1370
|
1927 var option = this.parent.parent.specification.options[i];
|
nickjillings@1370
|
1928 if (option == this.parent.specification)
|
nickjillings@1370
|
1929 {
|
nickjillings@1370
|
1930 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
|
nickjillings@1370
|
1931 if (i == this.parent.parent.specification.options.length-1)
|
nickjillings@1370
|
1932 {
|
nickjillings@1370
|
1933 optionList = optionList.slice(0,i);
|
nickjillings@1370
|
1934 childList = childList.slice(0,i);
|
nickjillings@1370
|
1935 }
|
nickjillings@1370
|
1936 else {
|
nickjillings@1370
|
1937 optionList = optionList.slice(0,i).concat(optionList.slice(i+1));
|
nickjillings@1370
|
1938 childList = childList.slice(0,i).concat(childList.slice(i+1));
|
nickjillings@1370
|
1939 }
|
nickjillings@1370
|
1940 this.parent.parent.specification.options = optionList;
|
nickjillings@1370
|
1941 this.parent.parent.children = childList;
|
nickjillings@1370
|
1942 }
|
nickjillings@1370
|
1943 }
|
nickjillings@1370
|
1944 }
|
nickjillings@1370
|
1945 }
|
nickjillings@1370
|
1946 this.deleteNode.root.textContent = "Delete Entry";
|
nickjillings@1370
|
1947 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
|
nickjillings@1370
|
1948 this.buttonDOM.appendChild(this.deleteNode.root);
|
nickjillings@1370
|
1949 }
|
nickjillings@1370
|
1950 this.addNode = {
|
nickjillings@1370
|
1951 root: document.createElement("button"),
|
nickjillings@1370
|
1952 parent: this,
|
nickjillings@1370
|
1953 handleEvent: function()
|
nickjillings@1370
|
1954 {
|
nickjillings@2194
|
1955 var newNode = new this.parent.specification.OptionNode(this.parent.specification);
|
nickjillings@1370
|
1956 this.parent.specification.options.push(newNode);
|
nickjillings@1370
|
1957 popupObject.show();
|
nickjillings@1370
|
1958 popupStateNodes.state[5].generate(newNode,this.parent);
|
nickjillings@1370
|
1959 popupObject.postNode(popupStateNodes.state[5]);
|
nickjillings@1370
|
1960 }
|
nickjillings@1370
|
1961 }
|
nickjillings@1370
|
1962 this.addNode.root.textContent = "Add Survey Entry";
|
nickjillings@1370
|
1963 this.addNode.root.addEventListener("click",this.addNode,false);
|
nickjillings@1370
|
1964 this.buttonDOM.appendChild(this.addNode.root);
|
nickjillings@1370
|
1965
|
nickjillings@1370
|
1966 for (var option of this.specification.options)
|
nickjillings@1370
|
1967 {
|
nickjillings@1370
|
1968 var newNode = new this.surveyEntryNode(this,option);
|
nickjillings@1370
|
1969 this.children.push(newNode);
|
nickjillings@1370
|
1970 this.childrenDOM.appendChild(newNode.rootDOM);
|
nickjillings@1370
|
1971 }
|
nickjillings@1370
|
1972 }
|
nickjillings@1370
|
1973
|
nickjillings@1370
|
1974 this.pageNode = function(parent,rootObject)
|
nickjillings@1370
|
1975 {
|
nickjillings@1375
|
1976 this.type = "pageNode";
|
nickjillings@1370
|
1977 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1978 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1979 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1980 this.attributes = [];
|
nickjillings@1370
|
1981 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1982 this.children = [];
|
nickjillings@1370
|
1983 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1984 this.parent = parent;
|
nickjillings@1370
|
1985 this.specification = rootObject;
|
nickjillings@1370
|
1986 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1370
|
1987 this.rootDOM.className = "node";
|
nickjillings@1370
|
1988
|
nickjillings@1370
|
1989 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1990 titleDiv.className = "node-title";
|
nickjillings@1370
|
1991 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1992 this.titleDOM.textContent = "Test Page";
|
nickjillings@1370
|
1993 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1994
|
nickjillings@1370
|
1995 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1996 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1997 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1998
|
nickjillings@1370
|
1999 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
2000 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
2001 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
2002 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
2003
|
nickjillings@1370
|
2004 // Do the comment prefix node
|
nickjillings@1370
|
2005 var cpn = this.parent.createGeneralNodeDOM("Comment Prefix",""+this.specification.id+"-commentprefix",this.parent);
|
nickjillings@1370
|
2006 cpn.rootDOM.removeChild(cpn.attributeDOM);
|
nickjillings@1370
|
2007 var obj = {
|
nickjillings@1370
|
2008 root: document.createElement("div"),
|
nickjillings@1370
|
2009 input: document.createElement("input"),
|
nickjillings@1370
|
2010 parent: this,
|
nickjillings@1370
|
2011 handleEvent: function()
|
nickjillings@1370
|
2012 {
|
nickjillings@1370
|
2013 this.parent.specification.commentBoxPrefix = event.currentTarget.value;
|
nickjillings@1370
|
2014 }
|
nickjillings@1370
|
2015 }
|
nickjillings@1370
|
2016 cpn.children.push(obj);
|
nickjillings@1370
|
2017 cpn.childrenDOM.appendChild(obj.root);
|
nickjillings@1370
|
2018 obj.root.appendChild(obj.input);
|
nickjillings@1370
|
2019 obj.input.addEventListener("change",obj,false);
|
nickjillings@1370
|
2020 obj.input.value = this.specification.commentBoxPrefix;
|
nickjillings@1370
|
2021 this.childrenDOM.appendChild(cpn.rootDOM);
|
nickjillings@1370
|
2022 this.children.push(cpn);
|
nickjillings@1370
|
2023
|
nickjillings@1370
|
2024 // Now both before and after surveys
|
nickjillings@1370
|
2025 if (this.specification.preTest == undefined){
|
nickjillings@2194
|
2026 this.specification.preTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
2027 this.specification.preTest.location = "pre";
|
nickjillings@1370
|
2028 }
|
nickjillings@1370
|
2029 if (this.specification.postTest == undefined){
|
nickjillings@2194
|
2030 this.specification.postTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
2031 this.specification.postTest.location = "post";
|
nickjillings@1370
|
2032 }
|
nickjillings@1370
|
2033 var surveyBefore = new this.parent.surveyNode(this,this.specification.preTest,"Pre");
|
nickjillings@1370
|
2034 var surveyAfter = new this.parent.surveyNode(this,this.specification.postTest,"Post");
|
nickjillings@1370
|
2035 this.children.push(surveyBefore);
|
nickjillings@1370
|
2036 this.children.push(surveyAfter);
|
nickjillings@1370
|
2037 this.childrenDOM.appendChild(surveyBefore.rootDOM);
|
nickjillings@1370
|
2038 this.childrenDOM.appendChild(surveyAfter.rootDOM);
|
nickjillings@1370
|
2039
|
nickjillings@1370
|
2040 // Build the attributes
|
nickjillings@1370
|
2041 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
|
nickjillings@1370
|
2042 for (var i=0; i<attributeList.length; i++)
|
nickjillings@1370
|
2043 {
|
nickjillings@1370
|
2044 var attributeName = attributeList[i].getAttribute('name');
|
nickjillings@1370
|
2045 var attrObject = this.parent.convertAttributeToDOM(rootObject,attributeList[i]);
|
nickjillings@1370
|
2046 this.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
2047 this.attributes.push(attrObject);
|
nickjillings@1370
|
2048 }
|
nickjillings@1370
|
2049
|
nickjillings@1370
|
2050 this.interfaces = [];
|
nickjillings@1370
|
2051
|
nickjillings@1370
|
2052 this.audioElementNode = function(parent,rootObject)
|
nickjillings@1370
|
2053 {
|
nickjillings@1375
|
2054 this.type = "audioElementNode";
|
nickjillings@1370
|
2055 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
2056 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
2057 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
2058 this.attributes = [];
|
nickjillings@1370
|
2059 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
2060 this.children = [];
|
nickjillings@1370
|
2061 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
2062 this.parent = parent;
|
nickjillings@1370
|
2063 this.specification = rootObject;
|
nickjillings@1370
|
2064 this.schema = specification.schema.getAllElementsByName("audioelement")[0];
|
nickjillings@1370
|
2065 this.rootDOM.className = "node";
|
nickjillings@1370
|
2066
|
nickjillings@1370
|
2067 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
2068 titleDiv.className = "node-title";
|
nickjillings@1370
|
2069 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
2070 this.titleDOM.textContent = "Audio Element";
|
nickjillings@1370
|
2071 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
2072
|
nickjillings@1370
|
2073 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
2074 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
2075 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
2076
|
nickjillings@1370
|
2077 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
2078 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
2079 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
2080 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
2081
|
nickjillings@1370
|
2082 // Build the attributes
|
nickjillings@1370
|
2083 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
|
nickjillings@1370
|
2084 for (var i=0; i<attributeList.length; i++)
|
nickjillings@1370
|
2085 {
|
nickjillings@1370
|
2086 var attributeName = attributeList[i].getAttribute('name');
|
nickjillings@1370
|
2087 var attrObject = this.parent.parent.convertAttributeToDOM(rootObject,attributeList[i]);
|
nickjillings@1370
|
2088 this.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
2089 this.attributes.push(attrObject);
|
nickjillings@1370
|
2090 }
|
nickjillings@1370
|
2091
|
nickjillings@1370
|
2092 this.deleteNode = {
|
nickjillings@1370
|
2093 root: document.createElement("button"),
|
nickjillings@1370
|
2094 parent: this,
|
nickjillings@1370
|
2095 handleEvent: function()
|
nickjillings@1370
|
2096 {
|
nickjillings@1370
|
2097 var i = this.parent.parent.specification.audioElements.findIndex(this.findNode,this);
|
nickjillings@1370
|
2098 if (i >= 0) {
|
nickjillings@1370
|
2099 var aeList = this.parent.parent.specification.audioElements;
|
nickjillings@1370
|
2100 if (i < aeList.length-1) {
|
nickjillings@1370
|
2101 aeList = aeList.slice(0,i).concat(aeList.slice(i+1));
|
nickjillings@1370
|
2102 } else {
|
nickjillings@1370
|
2103 aeList = aeList.slice(0,i);
|
nickjillings@1370
|
2104 }
|
nickjillings@1370
|
2105 }
|
nickjillings@1370
|
2106 i = this.parent.parent.children.findIndex(function(element,index,array){
|
nickjillings@1370
|
2107 if (element == this.parent)
|
nickjillings@1370
|
2108 return true;
|
nickjillings@1370
|
2109 else
|
nickjillings@1370
|
2110 return false;
|
nickjillings@1370
|
2111 },this);
|
nickjillings@1370
|
2112 if (i >= 0) {
|
nickjillings@1370
|
2113 var childList = this.parent.children;
|
nickjillings@1370
|
2114 if (i < aeList.length-1) {
|
nickjillings@1370
|
2115 childList = childList.slice(0,i).concat(childList.slice(i+1));
|
nickjillings@1370
|
2116 } else {
|
nickjillings@1370
|
2117 childList = childList.slice(0,i);
|
nickjillings@1370
|
2118 }
|
nickjillings@1370
|
2119 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
|
nickjillings@1370
|
2120 }
|
nickjillings@1370
|
2121 },
|
nickjillings@1370
|
2122 findNode: function(element,index,array){
|
nickjillings@1370
|
2123 if (element == this.parent.specification)
|
nickjillings@1370
|
2124 return true;
|
nickjillings@1370
|
2125 else
|
nickjillings@1370
|
2126 return false;
|
nickjillings@1370
|
2127 }
|
nickjillings@1370
|
2128 }
|
nickjillings@1370
|
2129 this.deleteNode.root.textContent = "Delete Entry";
|
nickjillings@1370
|
2130 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
|
nickjillings@1370
|
2131 this.buttonDOM.appendChild(this.deleteNode.root);
|
nickjillings@1370
|
2132 }
|
nickjillings@1370
|
2133
|
nickjillings@1370
|
2134 this.commentQuestionNode = function(parent,rootObject)
|
nickjillings@1370
|
2135 {
|
nickjillings@1375
|
2136 this.type = "commentQuestionNode";
|
nickjillings@1370
|
2137 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
2138 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
2139 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
2140 this.attributes = [];
|
nickjillings@1370
|
2141 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
2142 this.children = [];
|
nickjillings@1370
|
2143 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
2144 this.parent = parent;
|
nickjillings@1370
|
2145 this.specification = rootObject;
|
nickjillings@1370
|
2146 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1370
|
2147 this.rootDOM.className = "node";
|
nickjillings@1370
|
2148
|
nickjillings@1370
|
2149 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
2150 titleDiv.className = "node-title";
|
nickjillings@1370
|
2151 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
2152 this.titleDOM.textContent = "Test Page";
|
nickjillings@1370
|
2153 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
2154
|
nickjillings@1370
|
2155 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
2156 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
2157 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
2158
|
nickjillings@1370
|
2159 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
2160 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
2161 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
2162 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
2163
|
nickjillings@1370
|
2164 }
|
nickjillings@1370
|
2165
|
nickjillings@1374
|
2166 // Build the components
|
nickjillings@1310
|
2167 if (this.specification.interfaces.length == 0) {
|
nickjillings@2194
|
2168 this.specification.interfaces.push(new specification.interfaceNode(specification));
|
nickjillings@1310
|
2169 }
|
nickjillings@1381
|
2170 for (var interfaceObj of this.specification.interfaces)
|
nickjillings@1381
|
2171 {
|
nickjillings@1381
|
2172 var newInterface = new this.parent.interfaceNode(this.parent,interfaceObj);
|
nickjillings@1381
|
2173 newInterface.build("Interface",""+this.specification.id+"-interface",this.childrenDOM);
|
nickjillings@1381
|
2174 this.children.push(newInterface);
|
nickjillings@1381
|
2175 this.interfaces.push(newInterface);
|
nickjillings@1381
|
2176 }
|
nickjillings@1381
|
2177
|
nickjillings@1374
|
2178 for (var elements of this.specification.audioElements)
|
nickjillings@1374
|
2179 {
|
nickjillings@1374
|
2180 var audioElementDOM = new this.audioElementNode(this,elements);
|
nickjillings@1374
|
2181 this.children.push(audioElementDOM);
|
nickjillings@1374
|
2182 this.childrenDOM.appendChild(audioElementDOM.rootDOM);
|
nickjillings@1374
|
2183 }
|
nickjillings@1374
|
2184
|
nickjillings@1370
|
2185 this.addInterface = {
|
nickjillings@1370
|
2186 root: document.createElement("button"),
|
nickjillings@1370
|
2187 parent: this,
|
nickjillings@1370
|
2188 handleEvent: function() {
|
nickjillings@2194
|
2189 var InterfaceObj = new specification.interfaceNode(specification);
|
nickjillings@1370
|
2190 var newInterface = new this.parent.parent.interfaceNode(this.parent.parent,InterfaceObj);
|
nickjillings@1370
|
2191 newInterface.build("Interface",""+this.parent.specification.id+"-interface",this.parent.childrenDOM);
|
nickjillings@1370
|
2192 this.parent.children.push(newInterface);
|
nickjillings@1370
|
2193 this.parent.specification.interfaces.push(InterfaceObj);
|
nickjillings@1370
|
2194 this.parent.interfaces.push(newInterface);
|
nickjillings@1370
|
2195 }
|
nickjillings@1370
|
2196 }
|
nickjillings@1370
|
2197 this.addInterface.root.textContent = "Add Interface";
|
nickjillings@1370
|
2198 this.addInterface.root.addEventListener("click",this.addInterface,false);
|
nickjillings@1370
|
2199 this.buttonDOM.appendChild(this.addInterface.root);
|
nickjillings@1370
|
2200
|
nickjillings@1370
|
2201 this.addAudioElement = {
|
nickjillings@1370
|
2202 root: document.createElement("button"),
|
nickjillings@1370
|
2203 parent: this,
|
nickjillings@1370
|
2204 handleEvent: function() {
|
nickjillings@2194
|
2205 var audioElementObject = new this.parent.specification.audioElementNode(specification);
|
nickjillings@1370
|
2206 var audioElementDOM = new this.parent.audioElementNode(this.parent,audioElementObject);
|
nickjillings@1370
|
2207 this.parent.specification.audioElements.push(audioElementObject);
|
nickjillings@1370
|
2208 this.parent.children.push(audioElementDOM);
|
nickjillings@1370
|
2209 this.parent.childrenDOM.appendChild(audioElementDOM.rootDOM);
|
nickjillings@1370
|
2210 }
|
nickjillings@1370
|
2211 }
|
nickjillings@1370
|
2212 this.addAudioElement.root.textContent = "Add Audio Element";
|
nickjillings@1370
|
2213 this.addAudioElement.root.addEventListener("click",this.addAudioElement,false);
|
nickjillings@1370
|
2214 this.buttonDOM.appendChild(this.addAudioElement.root);
|
nickjillings@1370
|
2215 }
|
nickjillings@1370
|
2216 } |