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