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