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 }
|
nickjillings@1370
|
1035 }
|
nickjillings@1370
|
1036 }
|
nickjillings@1370
|
1037
|
nickjillings@1370
|
1038 function SpecificationToHTML()
|
nickjillings@1370
|
1039 {
|
nickjillings@1370
|
1040 // This takes the specification node and converts it to an on-page HTML object
|
nickjillings@1370
|
1041 // Each Specification Node is given its own JS object which listens to the XSD for instant verification
|
nickjillings@1370
|
1042 // Once generated, it directly binds into the specification object to update with changes
|
nickjillings@1370
|
1043 // Fixed DOM entries
|
nickjillings@1370
|
1044 this.injectDOM;
|
nickjillings@1370
|
1045 this.setupDOM;
|
nickjillings@1370
|
1046 this.pages = [];
|
nickjillings@1370
|
1047
|
nickjillings@1370
|
1048 // Self-contained generators
|
nickjillings@1370
|
1049 this.createGeneralNodeDOM = function(name,id,parent)
|
nickjillings@1370
|
1050 {
|
nickjillings@1375
|
1051 this.type = name;
|
nickjillings@1370
|
1052 var root = document.createElement('div');
|
nickjillings@1370
|
1053 root.id = id;
|
nickjillings@1370
|
1054 root.className = "node";
|
nickjillings@1370
|
1055
|
nickjillings@1370
|
1056 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1057 titleDiv.className = "node-title";
|
nickjillings@1370
|
1058 var title = document.createElement('span');
|
nickjillings@1370
|
1059 title.className = "node-title";
|
nickjillings@1370
|
1060 title.textContent = name;
|
nickjillings@1370
|
1061 titleDiv.appendChild(title);
|
nickjillings@1370
|
1062
|
nickjillings@1370
|
1063 var attributeDiv = document.createElement('div');
|
nickjillings@1370
|
1064 attributeDiv.className = "node-attributes";
|
nickjillings@1370
|
1065
|
nickjillings@1370
|
1066 var childrenDiv = document.createElement('div');
|
nickjillings@1370
|
1067 childrenDiv.className = "node-children";
|
nickjillings@1370
|
1068
|
nickjillings@1370
|
1069 var buttonsDiv = document.createElement('div');
|
nickjillings@1370
|
1070 buttonsDiv.className = "node-buttons";
|
nickjillings@1370
|
1071
|
nickjillings@1370
|
1072 root.appendChild(titleDiv);
|
nickjillings@1370
|
1073 root.appendChild(attributeDiv);
|
nickjillings@1370
|
1074 root.appendChild(childrenDiv);
|
nickjillings@1370
|
1075 root.appendChild(buttonsDiv);
|
nickjillings@1370
|
1076
|
nickjillings@1370
|
1077 var obj = {
|
nickjillings@1370
|
1078 rootDOM: root,
|
nickjillings@1370
|
1079 titleDOM: title,
|
nickjillings@1370
|
1080 attributeDOM: attributeDiv,
|
nickjillings@1370
|
1081 attributes: [],
|
nickjillings@1370
|
1082 childrenDOM: childrenDiv,
|
nickjillings@1370
|
1083 children: [],
|
nickjillings@1370
|
1084 buttonDOM: buttonsDiv,
|
nickjillings@1370
|
1085 parent: parent
|
nickjillings@1370
|
1086 }
|
nickjillings@1370
|
1087 return obj;
|
nickjillings@1370
|
1088 }
|
nickjillings@1370
|
1089
|
nickjillings@1370
|
1090 this.convertAttributeToDOM = function(node,schema)
|
nickjillings@1370
|
1091 {
|
nickjillings@1370
|
1092 // This takes an attribute schema node and returns an object with the input node and any bindings
|
nickjillings@1370
|
1093 if (schema.getAttribute('name') == undefined && schema.getAttribute('ref') != undefined)
|
nickjillings@1370
|
1094 {
|
nickjillings@1370
|
1095 schema = specification.schema.getAllElementsByName(schema.getAttribute('ref'))[0];
|
nickjillings@1370
|
1096 }
|
nickjillings@1370
|
1097 var obj = new function()
|
nickjillings@1370
|
1098 {
|
nickjillings@1370
|
1099 this.input;
|
nickjillings@1370
|
1100 this.name;
|
nickjillings@1370
|
1101 this.owner;
|
nickjillings@1370
|
1102 this.holder;
|
nickjillings@1370
|
1103
|
nickjillings@1370
|
1104 this.name = schema.getAttribute('name');
|
nickjillings@1370
|
1105 this.default = schema.getAttribute('default');
|
nickjillings@1370
|
1106 this.dataType = schema.getAttribute('type');
|
nickjillings@1370
|
1107 if (typeof this.dataType == "string") { this.dataType = this.dataType.substr(3);}
|
nickjillings@1370
|
1108 else {this.dataType = "string";}
|
nickjillings@1370
|
1109 var minVar = undefined;
|
nickjillings@1370
|
1110 var maxVar = undefined;
|
nickjillings@1370
|
1111 switch(this.dataType)
|
nickjillings@1370
|
1112 {
|
nickjillings@1370
|
1113 case "negativeInteger":
|
nickjillings@1370
|
1114 maxVar = -1;
|
nickjillings@1370
|
1115 break;
|
nickjillings@1370
|
1116 case "positiveInteger":
|
nickjillings@1370
|
1117 minVar = 1;
|
nickjillings@1370
|
1118 break;
|
nickjillings@1370
|
1119 case "nonNegativeInteger":
|
nickjillings@1370
|
1120 minVar = 0;
|
nickjillings@1370
|
1121 break;
|
nickjillings@1370
|
1122 case "nonPositiveInteger":
|
nickjillings@1370
|
1123 maxVar = 0;
|
nickjillings@1370
|
1124 break;
|
nickjillings@1370
|
1125 case "byte":
|
nickjillings@1370
|
1126 minVar = 0;
|
nickjillings@1370
|
1127 maxVar = 256;
|
nickjillings@1370
|
1128 break;
|
nickjillings@1370
|
1129 case "short":
|
nickjillings@1370
|
1130 minVar = 0;
|
nickjillings@1370
|
1131 maxVar = 65536;
|
nickjillings@1370
|
1132 break;
|
nickjillings@1370
|
1133 default:
|
nickjillings@1370
|
1134 break;
|
nickjillings@1370
|
1135 }
|
nickjillings@1370
|
1136
|
nickjillings@1370
|
1137 this.input = document.createElement('input');
|
nickjillings@1370
|
1138 switch(this.dataType)
|
nickjillings@1370
|
1139 {
|
nickjillings@1370
|
1140 case "boolean":
|
nickjillings@1370
|
1141 this.input.type = "checkbox";
|
nickjillings@1370
|
1142 break;
|
nickjillings@1370
|
1143 case "negativeInteger":
|
nickjillings@1370
|
1144 case "positiveInteger":
|
nickjillings@1370
|
1145 case "nonNegativeInteger":
|
nickjillings@1370
|
1146 case "nonPositiveInteger":
|
nickjillings@1370
|
1147 case "integer":
|
nickjillings@1370
|
1148 case "short":
|
nickjillings@1370
|
1149 case "byte":
|
nickjillings@1370
|
1150 this.input.step = 1;
|
nickjillings@1370
|
1151 case "decimal":
|
nickjillings@1370
|
1152 this.input.type = "number";
|
nickjillings@1370
|
1153 this.input.min = minVar;
|
nickjillings@1370
|
1154 this.input.max = maxVar;
|
nickjillings@1370
|
1155 break;
|
nickjillings@1370
|
1156 default:
|
nickjillings@1370
|
1157 break;
|
nickjillings@1370
|
1158 }
|
nickjillings@1370
|
1159 var value;
|
nickjillings@1373
|
1160 eval("value = node."+this.name)
|
nickjillings@1370
|
1161 if (value != undefined)
|
nickjillings@1370
|
1162 {
|
nickjillings@1370
|
1163 this.input.value = value;
|
nickjillings@1370
|
1164 } else if (this.default != undefined)
|
nickjillings@1370
|
1165 {
|
nickjillings@1370
|
1166 this.input.value = this.default;
|
nickjillings@1370
|
1167 }
|
nickjillings@1370
|
1168 this.handleEvent = function(event)
|
nickjillings@1370
|
1169 {
|
nickjillings@1370
|
1170 var value;
|
nickjillings@1370
|
1171 switch(this.input.type)
|
nickjillings@1370
|
1172 {
|
nickjillings@1370
|
1173 case "checkbox":
|
nickjillings@1370
|
1174 value = event.currentTarget.checked;
|
nickjillings@1370
|
1175 break;
|
nickjillings@1370
|
1176 case "number":
|
nickjillings@1370
|
1177 value = Number(event.currentTarget.value);
|
nickjillings@1370
|
1178 break;
|
nickjillings@1370
|
1179 default:
|
nickjillings@1370
|
1180 value = event.currentTarget.value;
|
nickjillings@1370
|
1181 break;
|
nickjillings@1370
|
1182 }
|
nickjillings@1370
|
1183 eval("this.owner."+this.name+" = value");
|
nickjillings@1370
|
1184 }
|
nickjillings@1370
|
1185 this.holder = document.createElement('div');
|
nickjillings@1370
|
1186 this.holder.className = "attribute";
|
nickjillings@1370
|
1187 this.holder.setAttribute('name',this.name);
|
nickjillings@1370
|
1188 var text = document.createElement('span');
|
nickjillings@1370
|
1189 eval("text.textContent = attributeText."+this.name+"+': '");
|
nickjillings@1370
|
1190 this.holder.appendChild(text);
|
nickjillings@1370
|
1191 this.holder.appendChild(this.input);
|
nickjillings@1370
|
1192 this.owner = node;
|
nickjillings@1370
|
1193 this.input.addEventListener("change",this,false);
|
nickjillings@1370
|
1194 }
|
nickjillings@1370
|
1195 if (obj.attribute != null)
|
nickjillings@1370
|
1196 {
|
nickjillings@1370
|
1197 obj.input.value = obj.attribute;
|
nickjillings@1370
|
1198 }
|
nickjillings@1370
|
1199 return obj;
|
nickjillings@1370
|
1200 }
|
nickjillings@1370
|
1201
|
nickjillings@1370
|
1202 this.convert = function(root)
|
nickjillings@1370
|
1203 {
|
nickjillings@1370
|
1204 //Performs the actual conversion using the given root DOM as the root
|
nickjillings@1370
|
1205 this.injectDOM = root;
|
nickjillings@1370
|
1206
|
nickjillings@1373
|
1207 // Build the export button
|
nickjillings@1373
|
1208 var exportButton = document.createElement("button");
|
nickjillings@1373
|
1209 exportButton.textContent = "Export to XML";
|
nickjillings@1373
|
1210 exportButton.onclick = function()
|
nickjillings@1373
|
1211 {
|
nickjillings@1373
|
1212 var doc = specification.encode();
|
nickjillings@1373
|
1213 var obj = {};
|
nickjillings@1373
|
1214 obj.title = "Export";
|
nickjillings@1373
|
1215 obj.content = document.createElement("div");
|
nickjillings@1373
|
1216 obj.content.id = "finish";
|
nickjillings@1373
|
1217 var span = document.createElement("span");
|
nickjillings@1373
|
1218 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
|
1219 obj.content.appendChild(span);
|
nickjillings@1373
|
1220 var link = document.createElement("div");
|
nickjillings@1373
|
1221 link.appendChild(doc.children[0]);
|
nickjillings@1373
|
1222 var file = [link.innerHTML];
|
nickjillings@1373
|
1223 var bb = new Blob(file,{type : 'application/xml'});
|
nickjillings@1373
|
1224 var dnlk = window.URL.createObjectURL(bb);
|
nickjillings@1373
|
1225 var a = document.createElement("a");
|
nickjillings@1373
|
1226 a.hidden = '';
|
nickjillings@1373
|
1227 a.href = dnlk;
|
nickjillings@1373
|
1228 a.download = "project-specification.xml";
|
nickjillings@1373
|
1229 a.textContent = "Save File";
|
nickjillings@1373
|
1230 obj.content.appendChild(a);
|
nickjillings@1373
|
1231 popupObject.show();
|
nickjillings@1373
|
1232 popupObject.postNode(obj);
|
nickjillings@1373
|
1233 }
|
nickjillings@1373
|
1234 this.injectDOM.appendChild(exportButton);
|
nickjillings@1373
|
1235
|
nickjillings@1370
|
1236 // First perform the setupNode;
|
nickjillings@1370
|
1237 var setupSchema = specification.schema.getAllElementsByName('setup')[0];
|
nickjillings@2114
|
1238 this.setupDOM = new this.createGeneralNodeDOM('Global Configuration','setup',null);
|
nickjillings@1370
|
1239 this.injectDOM.appendChild(this.setupDOM.rootDOM);
|
nickjillings@1370
|
1240 var setupAttributes = setupSchema.getAllElementsByTagName('xs:attribute');
|
nickjillings@1370
|
1241 for (var i=0; i<setupAttributes.length; i++)
|
nickjillings@1370
|
1242 {
|
nickjillings@1370
|
1243 var attributeName = setupAttributes[i].getAttribute('name');
|
nickjillings@1370
|
1244 var attrObject = this.convertAttributeToDOM(specification,setupAttributes[i]);
|
nickjillings@1370
|
1245 this.setupDOM.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
1246 this.setupDOM.attributes.push(attrObject);
|
nickjillings@1370
|
1247 }
|
nickjillings@1370
|
1248
|
nickjillings@1370
|
1249 // Now we must build the interface Node
|
nickjillings@1370
|
1250 this.interfaceDOM = new this.interfaceNode(this,specification.interfaces);
|
nickjillings@1370
|
1251 this.interfaceDOM.build("Interface","setup-interface",this.setupDOM.rootDOM);
|
nickjillings@1370
|
1252
|
nickjillings@1370
|
1253 // Now build the Metrics selection node
|
nickjillings@2114
|
1254 var metric = this.createGeneralNodeDOM("Session Metrics","setup-metric",this.setupDOM);
|
nickjillings@1370
|
1255 metric.rootDOM.removeChild(metric.attributeDOM);
|
nickjillings@1370
|
1256 this.setupDOM.children.push(metric);
|
nickjillings@1370
|
1257 this.setupDOM.childrenDOM.appendChild(metric.rootDOM);
|
nickjillings@1370
|
1258 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1259 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
1260 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1261 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
1262 testXML = testXML.getAllElementsByTagName("metrics");
|
nickjillings@1370
|
1263 for (var i=0; i<interfaceXML.children.length; i++)
|
nickjillings@1370
|
1264 {
|
nickjillings@1370
|
1265 var obj = {
|
nickjillings@1370
|
1266 input: document.createElement('input'),
|
nickjillings@1370
|
1267 root: document.createElement('div'),
|
nickjillings@1370
|
1268 text: document.createElement('span'),
|
nickjillings@1370
|
1269 specification: specification.metrics.enabled,
|
nickjillings@1370
|
1270 name: interfaceXML.children[i].getAttribute("name"),
|
nickjillings@1370
|
1271 handleEvent: function()
|
nickjillings@1370
|
1272 {
|
nickjillings@1370
|
1273 for (var i=0; i<this.specification.length; i++)
|
nickjillings@1370
|
1274 {
|
nickjillings@1370
|
1275 if (this.specification[i] == this.name)
|
nickjillings@1370
|
1276 {
|
nickjillings@1370
|
1277 var options = this.specification;
|
nickjillings@1370
|
1278 if (this.input.checked == false) {
|
nickjillings@1370
|
1279 if (i == options.length)
|
nickjillings@1370
|
1280 {options = options.slice(0,i);}
|
nickjillings@1370
|
1281 else {
|
nickjillings@1370
|
1282 options = options.slice(0,i).concat(options.slice(i+1));
|
nickjillings@1370
|
1283 }
|
nickjillings@1370
|
1284 } else {
|
nickjillings@1370
|
1285 return;
|
nickjillings@1370
|
1286 }
|
nickjillings@1370
|
1287 this.specification = options;
|
nickjillings@1370
|
1288 break;
|
nickjillings@1370
|
1289 }
|
nickjillings@1370
|
1290 }
|
nickjillings@1370
|
1291 if (this.input.checked) {
|
nickjillings@1370
|
1292 this.specification.push(this.name);
|
nickjillings@1370
|
1293 }
|
nickjillings@1370
|
1294 }
|
nickjillings@1370
|
1295 };
|
nickjillings@1370
|
1296 obj.root.className = "attribute";
|
nickjillings@1370
|
1297 obj.input.type = "checkbox";
|
nickjillings@1370
|
1298 obj.root.appendChild(obj.text);
|
nickjillings@1370
|
1299 obj.root.appendChild(obj.input);
|
nickjillings@1370
|
1300 obj.text.textContent = checkText.children[i].textContent;
|
nickjillings@1370
|
1301 metric.children.push(obj);
|
nickjillings@1370
|
1302 metric.childrenDOM.appendChild(obj.root);
|
nickjillings@1314
|
1303 for (var j=0; j<specification.metrics.enabled.length; j++)
|
nickjillings@1370
|
1304 {
|
nickjillings@1314
|
1305 if (specification.metrics.enabled[j] == obj.name)
|
nickjillings@1370
|
1306 {
|
nickjillings@1370
|
1307 obj.input.checked = true;
|
nickjillings@1370
|
1308 break;
|
nickjillings@1370
|
1309 }
|
nickjillings@1370
|
1310 }
|
nickjillings@1370
|
1311 }
|
nickjillings@1370
|
1312
|
nickjillings@1370
|
1313 // Now both before and after surveys
|
nickjillings@1370
|
1314 if (specification.preTest == undefined){
|
nickjillings@1370
|
1315 specification.preTest = new specification.surveyNode();
|
nickjillings@1370
|
1316 specification.preTest.location = "pre";
|
nickjillings@1370
|
1317 }
|
nickjillings@1370
|
1318 if (specification.postTest == undefined){
|
nickjillings@1370
|
1319 specification.postTest = new specification.surveyNode();
|
nickjillings@1370
|
1320 specification.postTest.location = "post";
|
nickjillings@1370
|
1321 }
|
nickjillings@1370
|
1322 var surveyBefore = new this.surveyNode(this,specification.preTest,"Pre");
|
nickjillings@1370
|
1323 var surveyAfter = new this.surveyNode(this,specification.postTest,"Post");
|
nickjillings@1370
|
1324 this.setupDOM.children.push(surveyBefore);
|
nickjillings@1370
|
1325 this.setupDOM.children.push(surveyAfter);
|
nickjillings@1370
|
1326 this.setupDOM.childrenDOM.appendChild(surveyBefore.rootDOM);
|
nickjillings@1370
|
1327 this.setupDOM.childrenDOM.appendChild(surveyAfter.rootDOM);
|
nickjillings@1370
|
1328
|
nickjillings@1370
|
1329 // Add in the page creator button
|
nickjillings@1370
|
1330 this.addPage = {
|
nickjillings@1370
|
1331 root: document.createElement("button"),
|
nickjillings@1370
|
1332 parent: this,
|
nickjillings@1370
|
1333 handleEvent: function()
|
nickjillings@1370
|
1334 {
|
nickjillings@1370
|
1335 var pageObj = new specification.page();
|
nickjillings@1370
|
1336 specification.pages.push(pageObj);
|
nickjillings@1370
|
1337 var newPage = new this.parent.pageNode(this.parent,pageObj);
|
nickjillings@1370
|
1338 this.parent.injectDOM.appendChild(newPage.rootDOM);
|
nickjillings@1370
|
1339 this.parent.pages.push(newPage);
|
nickjillings@1370
|
1340 }
|
nickjillings@1370
|
1341 }
|
nickjillings@1370
|
1342 this.addPage.root.textContent = "Add Page";
|
nickjillings@1370
|
1343 this.addPage.root.addEventListener("click",this.addPage,false);
|
nickjillings@1370
|
1344 this.injectDOM.appendChild(this.addPage.root);
|
nickjillings@1374
|
1345
|
nickjillings@1374
|
1346 // Build each page
|
nickjillings@1374
|
1347 for (var page of specification.pages)
|
nickjillings@1374
|
1348 {
|
nickjillings@1374
|
1349 var newPage = new this.pageNode(this,page);
|
nickjillings@1374
|
1350 this.injectDOM.appendChild(newPage.rootDOM);
|
nickjillings@1374
|
1351 this.pages.push(newPage);
|
nickjillings@1374
|
1352 }
|
nickjillings@1370
|
1353 }
|
nickjillings@1370
|
1354
|
nickjillings@1370
|
1355 this.interfaceNode = function(parent,rootObject)
|
nickjillings@1370
|
1356 {
|
nickjillings@1375
|
1357 this.type = "interfaceNode";
|
nickjillings@1370
|
1358 this.rootDOM;
|
nickjillings@1370
|
1359 this.titleDOM;
|
nickjillings@1370
|
1360 this.attributeDOM;
|
nickjillings@1370
|
1361 this.attributes = [];
|
nickjillings@1370
|
1362 this.childrenDOM;
|
nickjillings@1370
|
1363 this.children = [];
|
nickjillings@1370
|
1364 this.buttonDOM;
|
nickjillings@1370
|
1365 this.parent = parent;
|
nickjillings@1370
|
1366 this.HTMLPoint;
|
nickjillings@1370
|
1367 this.specification = rootObject;
|
nickjillings@1370
|
1368 this.schema = specification.schema.getAllElementsByName("interface")[1];
|
nickjillings@1370
|
1369
|
nickjillings@1370
|
1370 this.createIOasAttr = function(name,specification,parent,type) {
|
nickjillings@1370
|
1371 this.root = document.createElement('div');
|
nickjillings@1370
|
1372 this.input = document.createElement("input");
|
nickjillings@1370
|
1373 this.name = name;
|
nickjillings@1370
|
1374 this.type = type;
|
nickjillings@1370
|
1375 this.parent = parent;
|
nickjillings@1370
|
1376 this.specification = specification;
|
nickjillings@1370
|
1377 this.handleEvent = function(event) {
|
nickjillings@1370
|
1378 for (var i=0; i<this.specification.options.length; i++)
|
nickjillings@1370
|
1379 {
|
nickjillings@1370
|
1380 if (this.specification.options[i].name == this.name)
|
nickjillings@1370
|
1381 {
|
nickjillings@1370
|
1382 var options = this.specification.options;
|
nickjillings@1370
|
1383 if (this.input.checked == false) {
|
nickjillings@1370
|
1384 if (i == options.length)
|
nickjillings@1370
|
1385 {options = options.slice(0,i);}
|
nickjillings@1370
|
1386 else {
|
nickjillings@1370
|
1387 options = options.slice(0,i).concat(options.slice(i+1));
|
nickjillings@1370
|
1388 }
|
nickjillings@1370
|
1389 } else {
|
nickjillings@1370
|
1390 return;
|
nickjillings@1370
|
1391 }
|
nickjillings@1370
|
1392 this.specification.options = options;
|
nickjillings@1370
|
1393 break;
|
nickjillings@1370
|
1394 }
|
nickjillings@1370
|
1395 }
|
nickjillings@1370
|
1396 if (this.input.checked) {
|
nickjillings@1370
|
1397 var obj = {
|
nickjillings@1370
|
1398 name: this.name,
|
nickjillings@1370
|
1399 type: this.type
|
nickjillings@1370
|
1400 };
|
nickjillings@1370
|
1401 this.specification.options.push(obj);
|
nickjillings@1370
|
1402 }
|
nickjillings@1370
|
1403 if (this.parent.HTMLPoint.id == "setup")
|
nickjillings@1370
|
1404 {
|
nickjillings@1370
|
1405 // We've changed a global setting, must update all child 'interfaces' and disable them
|
nickjillings@1370
|
1406 for (pages of convert.pages)
|
nickjillings@1370
|
1407 {
|
nickjillings@1370
|
1408 for (interface of pages.interfaces)
|
nickjillings@1370
|
1409 {
|
nickjillings@1370
|
1410 if (this.type == "check")
|
nickjillings@1370
|
1411 {
|
nickjillings@1370
|
1412 for (node of interface.children[0].attributes)
|
nickjillings@1370
|
1413 {
|
nickjillings@1370
|
1414 if (node.name == this.name) {
|
nickjillings@1370
|
1415 if (this.input.checked) {
|
nickjillings@1370
|
1416 node.input.disabled = true;
|
nickjillings@1370
|
1417 node.input.checked = false;
|
nickjillings@1370
|
1418 } else {
|
nickjillings@1370
|
1419 node.input.disabled = false;
|
nickjillings@1370
|
1420 }
|
nickjillings@1370
|
1421 break;
|
nickjillings@1370
|
1422 }
|
nickjillings@1370
|
1423 }
|
nickjillings@1370
|
1424 } else if (this.type == "show")
|
nickjillings@1370
|
1425 {
|
nickjillings@1370
|
1426 for (node of interface.children[1].attributes)
|
nickjillings@1370
|
1427 {
|
nickjillings@1370
|
1428 if (node.name == this.name) {
|
nickjillings@1370
|
1429 if (this.input.checked) {
|
nickjillings@1370
|
1430 node.input.disabled = true;
|
nickjillings@1370
|
1431 } else {
|
nickjillings@1370
|
1432 node.input.disabled = false;
|
nickjillings@1370
|
1433 }
|
nickjillings@1370
|
1434 break;
|
nickjillings@1370
|
1435 }
|
nickjillings@1370
|
1436 }
|
nickjillings@1370
|
1437 }
|
nickjillings@1370
|
1438 }
|
nickjillings@1370
|
1439 }
|
nickjillings@1370
|
1440 }
|
nickjillings@1370
|
1441 };
|
nickjillings@1370
|
1442 this.findIndex = function(element,index,array){
|
nickjillings@1370
|
1443 if (element.name == this.name)
|
nickjillings@1370
|
1444 return true;
|
nickjillings@1370
|
1445 else
|
nickjillings@1370
|
1446 return false;
|
nickjillings@1370
|
1447 };
|
nickjillings@1370
|
1448 this.findNode = function(element,index,array){
|
nickjillings@1370
|
1449 if (element.name == this.name)
|
nickjillings@1370
|
1450 return true;
|
nickjillings@1370
|
1451 else
|
nickjillings@1370
|
1452 return false;
|
nickjillings@1370
|
1453 };
|
nickjillings@1370
|
1454 this.input.type = "checkbox";
|
nickjillings@1370
|
1455 this.input.setAttribute("name",name);
|
nickjillings@1370
|
1456 this.input.addEventListener("change",this,false);
|
nickjillings@1370
|
1457 this.root.appendChild(this.input);
|
nickjillings@1370
|
1458 this.root.className = "attribute";
|
nickjillings@1370
|
1459 return this;
|
nickjillings@1370
|
1460 }
|
nickjillings@1370
|
1461
|
nickjillings@1370
|
1462 this.build = function(name,id,parent)
|
nickjillings@1370
|
1463 {
|
nickjillings@1370
|
1464 var obj = this.parent.createGeneralNodeDOM(name,id,parent);
|
nickjillings@1370
|
1465
|
nickjillings@1370
|
1466 this.rootDOM = obj.rootDOM;
|
nickjillings@1370
|
1467 this.titleDOM = obj.titleDOM;
|
nickjillings@1370
|
1468 this.attributeDOM = obj.attributeDOM;
|
nickjillings@1370
|
1469 this.childrenDOM = obj.childrenDOM;
|
nickjillings@1370
|
1470 this.buttonDOM = obj.buttonsDOM;
|
nickjillings@1370
|
1471 this.HTMLPoint = parent;
|
nickjillings@1370
|
1472 this.rootDOM.removeChild(this.attributeDOM);
|
nickjillings@1370
|
1473 // Put in the check / show options as individual children
|
nickjillings@1370
|
1474 var checks = this.parent.createGeneralNodeDOM("Checks","setup-interface-checks",this);
|
nickjillings@1370
|
1475
|
nickjillings@1370
|
1476 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1477 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
1478 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1479 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
1480 testXML = testXML.getAllElementsByTagName("checks");
|
nickjillings@1370
|
1481 for (var i=0; i<interfaceXML.children.length; i++)
|
nickjillings@1370
|
1482 {
|
nickjillings@1370
|
1483 var obj = new this.createIOasAttr(interfaceXML.children[i].getAttribute("name"),this.specification,this,"check");
|
nickjillings@1370
|
1484 for (var option of this.specification.options)
|
nickjillings@1370
|
1485 {
|
nickjillings@1370
|
1486 if (option.name == obj.name)
|
nickjillings@1370
|
1487 {
|
nickjillings@1370
|
1488 obj.input.checked = true;
|
nickjillings@1370
|
1489 break;
|
nickjillings@1370
|
1490 }
|
nickjillings@1370
|
1491 }
|
nickjillings@1370
|
1492 if (parent.id != "setup") {
|
nickjillings@1370
|
1493 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
|
nickjillings@1381
|
1494 if (node != undefined) {
|
nickjillings@1381
|
1495 if (node.input.checked) {
|
nickjillings@1381
|
1496 obj.input.checked = false;
|
nickjillings@1381
|
1497 obj.input.disabled = true;
|
nickjillings@1381
|
1498 }
|
nickjillings@1370
|
1499 }
|
nickjillings@1370
|
1500 }
|
nickjillings@1370
|
1501 var text = document.createElement('span');
|
nickjillings@1370
|
1502 text.textContent = checkText.children[i].textContent;
|
nickjillings@1370
|
1503 obj.root.appendChild(text);
|
nickjillings@1370
|
1504 checks.attributeDOM.appendChild(obj.root);
|
nickjillings@1370
|
1505 checks.attributes.push(obj);
|
nickjillings@1370
|
1506 }
|
nickjillings@1370
|
1507 this.children.push(checks);
|
nickjillings@1370
|
1508 this.childrenDOM.appendChild(checks.rootDOM);
|
nickjillings@1370
|
1509
|
nickjillings@1370
|
1510 var show = this.parent.createGeneralNodeDOM("Show","setup-interface-show",this);
|
nickjillings@1370
|
1511 interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1512 checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
1513 testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1514 interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
1515 testXML = testXML.getAllElementsByTagName("show");
|
nickjillings@1370
|
1516 for (var i=0; i<interfaceXML.children.length; i++)
|
nickjillings@1370
|
1517 {
|
nickjillings@1370
|
1518 var obj = new this.createIOasAttr(interfaceXML.children[i].getAttribute("name"),this.specification,this,"show");
|
nickjillings@1370
|
1519 for (var option of this.specification.options)
|
nickjillings@1370
|
1520 {
|
nickjillings@1370
|
1521 if (option.name == obj.name)
|
nickjillings@1370
|
1522 {
|
nickjillings@1370
|
1523 obj.input.checked = true;
|
nickjillings@1370
|
1524 break;
|
nickjillings@1370
|
1525 }
|
nickjillings@1370
|
1526 }
|
nickjillings@1370
|
1527 if (parent.id != "setup") {
|
nickjillings@1370
|
1528 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
|
nickjillings@1381
|
1529 if (node != undefined) {
|
nickjillings@1381
|
1530 if (node.input.checked) {
|
nickjillings@1381
|
1531 obj.input.checked = false;
|
nickjillings@1381
|
1532 obj.input.disabled = true;
|
nickjillings@1381
|
1533 }
|
nickjillings@1370
|
1534 }
|
nickjillings@1370
|
1535 }
|
nickjillings@1370
|
1536 var text = document.createElement('span');
|
nickjillings@1370
|
1537 text.textContent = checkText.children[i].textContent;
|
nickjillings@1370
|
1538 obj.root.appendChild(text);
|
nickjillings@1370
|
1539 show.attributeDOM.appendChild(obj.root);
|
nickjillings@1370
|
1540 show.attributes.push(obj);
|
nickjillings@1370
|
1541 }
|
nickjillings@1370
|
1542 this.children.push(show);
|
nickjillings@1370
|
1543 this.childrenDOM.appendChild(show.rootDOM);
|
nickjillings@1370
|
1544
|
nickjillings@1370
|
1545 if (parent.id == "setup")
|
nickjillings@1370
|
1546 {
|
nickjillings@1370
|
1547 } else {
|
nickjillings@1370
|
1548 var nameAttr = this.parent.convertAttributeToDOM(this,specification.schema.getAllElementsByName("name")[0]);
|
nickjillings@1370
|
1549 this.attributeDOM.appendChild(nameAttr.holder);
|
nickjillings@1370
|
1550 this.attributes.push(nameAttr);
|
nickjillings@1385
|
1551 var scales = new this.scalesNode(this,this.specification);
|
nickjillings@1385
|
1552 this.children.push(scales);
|
nickjillings@1385
|
1553 this.childrenDOM.appendChild(scales.rootDOM);
|
nickjillings@1370
|
1554 }
|
nickjillings@1370
|
1555 if (parent != undefined)
|
nickjillings@1370
|
1556 {
|
nickjillings@1370
|
1557 parent.appendChild(this.rootDOM);
|
nickjillings@1370
|
1558 }
|
nickjillings@1370
|
1559 }
|
nickjillings@1385
|
1560
|
nickjillings@1385
|
1561 this.scalesNode = function(parent,rootObject)
|
nickjillings@1385
|
1562 {
|
nickjillings@1385
|
1563 this.type = "scalesNode";
|
nickjillings@1385
|
1564 this.rootDOM = document.createElement("div");
|
nickjillings@1385
|
1565 this.titleDOM = document.createElement("span");
|
nickjillings@1385
|
1566 this.attributeDOM = document.createElement("div");
|
nickjillings@1385
|
1567 this.attributes = [];
|
nickjillings@1385
|
1568 this.childrenDOM = document.createElement("div");
|
nickjillings@1385
|
1569 this.children = [];
|
nickjillings@1385
|
1570 this.buttonDOM = document.createElement("div");
|
nickjillings@1385
|
1571 this.parent = parent;
|
nickjillings@1385
|
1572 this.specification = rootObject;
|
nickjillings@1385
|
1573 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1385
|
1574 this.rootDOM.className = "node";
|
nickjillings@1385
|
1575
|
nickjillings@1385
|
1576 var titleDiv = document.createElement('div');
|
nickjillings@1385
|
1577 titleDiv.className = "node-title";
|
nickjillings@1385
|
1578 this.titleDOM.className = "node-title";
|
nickjillings@1385
|
1579 this.titleDOM.textContent = "Interface Scales";
|
nickjillings@1385
|
1580 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1385
|
1581
|
nickjillings@1385
|
1582 this.attributeDOM.className = "node-attributes";
|
nickjillings@1385
|
1583 this.childrenDOM.className = "node-children";
|
nickjillings@1385
|
1584 this.buttonDOM.className = "node-buttons";
|
nickjillings@1385
|
1585
|
nickjillings@1385
|
1586 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1385
|
1587 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1385
|
1588 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1385
|
1589 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1385
|
1590
|
nickjillings@1385
|
1591 this.editButton = {
|
nickjillings@1385
|
1592 button: document.createElement("button"),
|
nickjillings@1385
|
1593 parent: this,
|
nickjillings@1385
|
1594 handleEvent: function(event) {
|
nickjillings@1385
|
1595 popupObject.show();
|
nickjillings@1385
|
1596 popupObject.postNode(popupStateNodes.state[6]);
|
nickjillings@1385
|
1597 popupStateNodes.state[6].generate(this.parent.specification,this.parent);
|
nickjillings@1385
|
1598 }
|
nickjillings@1385
|
1599 };
|
nickjillings@1385
|
1600 this.editButton.button.textContent = "Edit Scales/Markers";
|
nickjillings@1385
|
1601 this.editButton.button.addEventListener("click",this.editButton,false);
|
nickjillings@1385
|
1602 this.buttonDOM.appendChild(this.editButton.button);
|
nickjillings@1385
|
1603 }
|
nickjillings@1370
|
1604 }
|
nickjillings@1370
|
1605
|
nickjillings@1370
|
1606 this.surveyNode = function(parent,rootObject,location)
|
nickjillings@1370
|
1607 {
|
nickjillings@1375
|
1608 this.type = "surveyNode";
|
nickjillings@1370
|
1609 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1610 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1611 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1612 this.attributes = [];
|
nickjillings@1370
|
1613 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1614 this.children = [];
|
nickjillings@1370
|
1615 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1616 this.parent = parent;
|
nickjillings@1370
|
1617 this.specification = rootObject;
|
nickjillings@1370
|
1618 this.schema = specification.schema.getAllElementsByName("survey")[1];
|
nickjillings@1370
|
1619 this.rootDOM.className = "node";
|
nickjillings@1370
|
1620
|
nickjillings@1370
|
1621 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1622 titleDiv.className = "node-title";
|
nickjillings@1370
|
1623 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1624 this.titleDOM.textContent = "Survey";
|
nickjillings@1370
|
1625 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1626
|
nickjillings@1370
|
1627 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1628 var locationAttr = document.createElement("span");
|
nickjillings@1370
|
1629 this.attributeDOM.appendChild(locationAttr);
|
nickjillings@1370
|
1630 if (location == "Pre" || location == "pre") {
|
nickjillings@1370
|
1631 locationAttr.textContent = "Location: Before";
|
nickjillings@1370
|
1632 } else {
|
nickjillings@1370
|
1633 locationAttr.textContent = "Location: After";
|
nickjillings@1370
|
1634 }
|
nickjillings@1370
|
1635 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1636 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1637
|
nickjillings@1370
|
1638 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1639 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1640 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1641 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1642
|
nickjillings@1370
|
1643 this.surveyEntryNode = function(parent,rootObject)
|
nickjillings@1370
|
1644 {
|
nickjillings@1375
|
1645 this.type = "surveyEntryNode";
|
nickjillings@1370
|
1646 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1647 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1648 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1649 this.attributes = [];
|
nickjillings@1370
|
1650 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1651 this.children = [];
|
nickjillings@1370
|
1652 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1653 this.parent = parent;
|
nickjillings@1370
|
1654 this.specification = rootObject;
|
nickjillings@1370
|
1655 this.schema = specification.schema.getAllElementsByName("surveyentry")[1];
|
nickjillings@1370
|
1656
|
nickjillings@1370
|
1657 this.rootDOM.className = "node";
|
nickjillings@1370
|
1658 this.rootDOM.style.minWidth = "50%";
|
nickjillings@1370
|
1659
|
nickjillings@1370
|
1660 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1661 titleDiv.className = "node-title";
|
nickjillings@1370
|
1662 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1663 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1664
|
nickjillings@1370
|
1665 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1666 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1667 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1668
|
nickjillings@1370
|
1669 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1670 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1671 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1672 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1673
|
nickjillings@1375
|
1674 this.build = function()
|
nickjillings@1375
|
1675 {
|
nickjillings@1375
|
1676 this.attributeDOM.innerHTML = null;
|
nickjillings@1375
|
1677 this.childrenDOM.innerHTML = null;
|
nickjillings@1375
|
1678 var statementRoot = document.createElement("div");
|
nickjillings@1375
|
1679 var statement = document.createElement("span");
|
nickjillings@1375
|
1680 statement.textContent = "Statement / Question: "+this.specification.statement;
|
nickjillings@1375
|
1681 statementRoot.appendChild(statement);
|
nickjillings@1375
|
1682 this.children.push(statementRoot);
|
nickjillings@1375
|
1683 this.childrenDOM.appendChild(statementRoot);
|
nickjillings@1375
|
1684 switch(this.specification.type)
|
nickjillings@1375
|
1685 {
|
nickjillings@1375
|
1686 case "statement":
|
nickjillings@1375
|
1687 this.titleDOM.textContent = "Statement";
|
nickjillings@1375
|
1688 break;
|
nickjillings@1375
|
1689 case "question":
|
nickjillings@1375
|
1690 this.titleDOM.textContent = "Question";
|
nickjillings@1375
|
1691 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1692 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
|
nickjillings@1375
|
1693 var boxsize = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("boxsize")[0]);
|
nickjillings@1375
|
1694 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1695 this.attributes.push(id);
|
nickjillings@1375
|
1696 this.attributeDOM.appendChild(mandatory.holder);
|
nickjillings@1375
|
1697 this.attributes.push(mandatory);
|
nickjillings@1375
|
1698 this.attributeDOM.appendChild(boxsize.holder);
|
nickjillings@1375
|
1699 this.attributes.push(boxsize);
|
nickjillings@1375
|
1700 break;
|
nickjillings@1375
|
1701 case "number":
|
nickjillings@1375
|
1702 this.titleDOM.textContent = "Number";
|
nickjillings@1375
|
1703 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1704 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
|
nickjillings@1375
|
1705 var min = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("min")[0]);
|
nickjillings@1375
|
1706 var max = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("max")[0]);
|
nickjillings@1375
|
1707 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1708 this.attributes.push(id);
|
nickjillings@1375
|
1709 this.attributeDOM.appendChild(min.holder);
|
nickjillings@1375
|
1710 this.attributes.push(min);
|
nickjillings@1375
|
1711 this.attributeDOM.appendChild(max.holder);
|
nickjillings@1375
|
1712 this.attributes.push(max);
|
nickjillings@1375
|
1713 break;
|
nickjillings@1375
|
1714 case "checkbox":
|
nickjillings@1375
|
1715 this.titleDOM.textContent = "Checkbox";
|
nickjillings@1375
|
1716 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1717 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1718 this.attributes.push(id);
|
nickjillings@1375
|
1719 break;
|
nickjillings@1375
|
1720 case "radio":
|
nickjillings@1375
|
1721 this.titleDOM.textContent = "Radio";
|
nickjillings@1375
|
1722 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1723 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1724 this.attributes.push(id);
|
nickjillings@1375
|
1725 break;
|
nickjillings@1375
|
1726 }
|
nickjillings@1370
|
1727 }
|
nickjillings@1375
|
1728 this.build();
|
nickjillings@1370
|
1729
|
nickjillings@1370
|
1730 this.editNode = {
|
nickjillings@1370
|
1731 root: document.createElement("button"),
|
nickjillings@1370
|
1732 parent: this,
|
nickjillings@1370
|
1733 handleEvent: function()
|
nickjillings@1370
|
1734 {
|
nickjillings@1370
|
1735 popupObject.show();
|
nickjillings@1375
|
1736 popupStateNodes.state[5].generate(this.parent.specification,this.parent);
|
nickjillings@1370
|
1737 popupObject.postNode(popupStateNodes.state[5]);
|
nickjillings@1370
|
1738 }
|
nickjillings@1370
|
1739 }
|
nickjillings@1370
|
1740 this.editNode.root.textContent = "Edit Entry";
|
nickjillings@1370
|
1741 this.editNode.root.addEventListener("click",this.editNode,false);
|
nickjillings@1370
|
1742 this.buttonDOM.appendChild(this.editNode.root);
|
nickjillings@1370
|
1743
|
nickjillings@1370
|
1744 this.deleteNode = {
|
nickjillings@1370
|
1745 root: document.createElement("button"),
|
nickjillings@1370
|
1746 parent: this,
|
nickjillings@1370
|
1747 handleEvent: function()
|
nickjillings@1370
|
1748 {
|
nickjillings@1370
|
1749 var optionList = this.parent.parent.specification.options;
|
nickjillings@1370
|
1750 var childList = this.parent.parent.children;
|
nickjillings@1370
|
1751 for (var i=0; i <this.parent.parent.specification.options.length; i++)
|
nickjillings@1370
|
1752 {
|
nickjillings@1370
|
1753 var option = this.parent.parent.specification.options[i];
|
nickjillings@1370
|
1754 if (option == this.parent.specification)
|
nickjillings@1370
|
1755 {
|
nickjillings@1370
|
1756 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
|
nickjillings@1370
|
1757 if (i == this.parent.parent.specification.options.length-1)
|
nickjillings@1370
|
1758 {
|
nickjillings@1370
|
1759 optionList = optionList.slice(0,i);
|
nickjillings@1370
|
1760 childList = childList.slice(0,i);
|
nickjillings@1370
|
1761 }
|
nickjillings@1370
|
1762 else {
|
nickjillings@1370
|
1763 optionList = optionList.slice(0,i).concat(optionList.slice(i+1));
|
nickjillings@1370
|
1764 childList = childList.slice(0,i).concat(childList.slice(i+1));
|
nickjillings@1370
|
1765 }
|
nickjillings@1370
|
1766 this.parent.parent.specification.options = optionList;
|
nickjillings@1370
|
1767 this.parent.parent.children = childList;
|
nickjillings@1370
|
1768 }
|
nickjillings@1370
|
1769 }
|
nickjillings@1370
|
1770 }
|
nickjillings@1370
|
1771 }
|
nickjillings@1370
|
1772 this.deleteNode.root.textContent = "Delete Entry";
|
nickjillings@1370
|
1773 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
|
nickjillings@1370
|
1774 this.buttonDOM.appendChild(this.deleteNode.root);
|
nickjillings@1370
|
1775 }
|
nickjillings@1370
|
1776 this.addNode = {
|
nickjillings@1370
|
1777 root: document.createElement("button"),
|
nickjillings@1370
|
1778 parent: this,
|
nickjillings@1370
|
1779 handleEvent: function()
|
nickjillings@1370
|
1780 {
|
nickjillings@1370
|
1781 var newNode = new this.parent.specification.OptionNode();
|
nickjillings@1370
|
1782 this.parent.specification.options.push(newNode);
|
nickjillings@1370
|
1783 popupObject.show();
|
nickjillings@1370
|
1784 popupStateNodes.state[5].generate(newNode,this.parent);
|
nickjillings@1370
|
1785 popupObject.postNode(popupStateNodes.state[5]);
|
nickjillings@1370
|
1786 }
|
nickjillings@1370
|
1787 }
|
nickjillings@1370
|
1788 this.addNode.root.textContent = "Add Survey Entry";
|
nickjillings@1370
|
1789 this.addNode.root.addEventListener("click",this.addNode,false);
|
nickjillings@1370
|
1790 this.buttonDOM.appendChild(this.addNode.root);
|
nickjillings@1370
|
1791
|
nickjillings@1370
|
1792 for (var option of this.specification.options)
|
nickjillings@1370
|
1793 {
|
nickjillings@1370
|
1794 var newNode = new this.surveyEntryNode(this,option);
|
nickjillings@1370
|
1795 this.children.push(newNode);
|
nickjillings@1370
|
1796 this.childrenDOM.appendChild(newNode.rootDOM);
|
nickjillings@1370
|
1797 }
|
nickjillings@1370
|
1798 }
|
nickjillings@1370
|
1799
|
nickjillings@1370
|
1800 this.pageNode = function(parent,rootObject)
|
nickjillings@1370
|
1801 {
|
nickjillings@1375
|
1802 this.type = "pageNode";
|
nickjillings@1370
|
1803 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1804 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1805 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1806 this.attributes = [];
|
nickjillings@1370
|
1807 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1808 this.children = [];
|
nickjillings@1370
|
1809 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1810 this.parent = parent;
|
nickjillings@1370
|
1811 this.specification = rootObject;
|
nickjillings@1370
|
1812 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1370
|
1813 this.rootDOM.className = "node";
|
nickjillings@1370
|
1814
|
nickjillings@1370
|
1815 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1816 titleDiv.className = "node-title";
|
nickjillings@1370
|
1817 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1818 this.titleDOM.textContent = "Test Page";
|
nickjillings@1370
|
1819 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1820
|
nickjillings@1370
|
1821 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1822 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1823 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1824
|
nickjillings@1370
|
1825 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1826 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1827 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1828 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1829
|
nickjillings@1370
|
1830 // Do the comment prefix node
|
nickjillings@1370
|
1831 var cpn = this.parent.createGeneralNodeDOM("Comment Prefix",""+this.specification.id+"-commentprefix",this.parent);
|
nickjillings@1370
|
1832 cpn.rootDOM.removeChild(cpn.attributeDOM);
|
nickjillings@1370
|
1833 var obj = {
|
nickjillings@1370
|
1834 root: document.createElement("div"),
|
nickjillings@1370
|
1835 input: document.createElement("input"),
|
nickjillings@1370
|
1836 parent: this,
|
nickjillings@1370
|
1837 handleEvent: function()
|
nickjillings@1370
|
1838 {
|
nickjillings@1370
|
1839 this.parent.specification.commentBoxPrefix = event.currentTarget.value;
|
nickjillings@1370
|
1840 }
|
nickjillings@1370
|
1841 }
|
nickjillings@1370
|
1842 cpn.children.push(obj);
|
nickjillings@1370
|
1843 cpn.childrenDOM.appendChild(obj.root);
|
nickjillings@1370
|
1844 obj.root.appendChild(obj.input);
|
nickjillings@1370
|
1845 obj.input.addEventListener("change",obj,false);
|
nickjillings@1370
|
1846 obj.input.value = this.specification.commentBoxPrefix;
|
nickjillings@1370
|
1847 this.childrenDOM.appendChild(cpn.rootDOM);
|
nickjillings@1370
|
1848 this.children.push(cpn);
|
nickjillings@1370
|
1849
|
nickjillings@1370
|
1850 // Now both before and after surveys
|
nickjillings@1370
|
1851 if (this.specification.preTest == undefined){
|
nickjillings@1370
|
1852 this.specification.preTest = new specification.surveyNode();
|
nickjillings@1370
|
1853 this.specification.preTest.location = "pre";
|
nickjillings@1370
|
1854 }
|
nickjillings@1370
|
1855 if (this.specification.postTest == undefined){
|
nickjillings@1370
|
1856 this.specification.postTest = new specification.surveyNode();
|
nickjillings@1370
|
1857 this.specification.postTest.location = "post";
|
nickjillings@1370
|
1858 }
|
nickjillings@1370
|
1859 var surveyBefore = new this.parent.surveyNode(this,this.specification.preTest,"Pre");
|
nickjillings@1370
|
1860 var surveyAfter = new this.parent.surveyNode(this,this.specification.postTest,"Post");
|
nickjillings@1370
|
1861 this.children.push(surveyBefore);
|
nickjillings@1370
|
1862 this.children.push(surveyAfter);
|
nickjillings@1370
|
1863 this.childrenDOM.appendChild(surveyBefore.rootDOM);
|
nickjillings@1370
|
1864 this.childrenDOM.appendChild(surveyAfter.rootDOM);
|
nickjillings@1370
|
1865
|
nickjillings@1370
|
1866 // Build the attributes
|
nickjillings@1370
|
1867 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
|
nickjillings@1370
|
1868 for (var i=0; i<attributeList.length; i++)
|
nickjillings@1370
|
1869 {
|
nickjillings@1370
|
1870 var attributeName = attributeList[i].getAttribute('name');
|
nickjillings@1370
|
1871 var attrObject = this.parent.convertAttributeToDOM(rootObject,attributeList[i]);
|
nickjillings@1370
|
1872 this.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
1873 this.attributes.push(attrObject);
|
nickjillings@1370
|
1874 }
|
nickjillings@1370
|
1875
|
nickjillings@1370
|
1876 this.interfaces = [];
|
nickjillings@1370
|
1877
|
nickjillings@1370
|
1878 this.audioElementNode = function(parent,rootObject)
|
nickjillings@1370
|
1879 {
|
nickjillings@1375
|
1880 this.type = "audioElementNode";
|
nickjillings@1370
|
1881 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1882 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1883 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1884 this.attributes = [];
|
nickjillings@1370
|
1885 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1886 this.children = [];
|
nickjillings@1370
|
1887 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1888 this.parent = parent;
|
nickjillings@1370
|
1889 this.specification = rootObject;
|
nickjillings@1370
|
1890 this.schema = specification.schema.getAllElementsByName("audioelement")[0];
|
nickjillings@1370
|
1891 this.rootDOM.className = "node";
|
nickjillings@1370
|
1892
|
nickjillings@1370
|
1893 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1894 titleDiv.className = "node-title";
|
nickjillings@1370
|
1895 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1896 this.titleDOM.textContent = "Audio Element";
|
nickjillings@1370
|
1897 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1898
|
nickjillings@1370
|
1899 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1900 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1901 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1902
|
nickjillings@1370
|
1903 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1904 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1905 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1906 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1907
|
nickjillings@1370
|
1908 // Build the attributes
|
nickjillings@1370
|
1909 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
|
nickjillings@1370
|
1910 for (var i=0; i<attributeList.length; i++)
|
nickjillings@1370
|
1911 {
|
nickjillings@1370
|
1912 var attributeName = attributeList[i].getAttribute('name');
|
nickjillings@1370
|
1913 var attrObject = this.parent.parent.convertAttributeToDOM(rootObject,attributeList[i]);
|
nickjillings@1370
|
1914 this.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
1915 this.attributes.push(attrObject);
|
nickjillings@1370
|
1916 }
|
nickjillings@1370
|
1917
|
nickjillings@1370
|
1918 this.deleteNode = {
|
nickjillings@1370
|
1919 root: document.createElement("button"),
|
nickjillings@1370
|
1920 parent: this,
|
nickjillings@1370
|
1921 handleEvent: function()
|
nickjillings@1370
|
1922 {
|
nickjillings@1370
|
1923 var i = this.parent.parent.specification.audioElements.findIndex(this.findNode,this);
|
nickjillings@1370
|
1924 if (i >= 0) {
|
nickjillings@1370
|
1925 var aeList = this.parent.parent.specification.audioElements;
|
nickjillings@1370
|
1926 if (i < aeList.length-1) {
|
nickjillings@1370
|
1927 aeList = aeList.slice(0,i).concat(aeList.slice(i+1));
|
nickjillings@1370
|
1928 } else {
|
nickjillings@1370
|
1929 aeList = aeList.slice(0,i);
|
nickjillings@1370
|
1930 }
|
nickjillings@1370
|
1931 }
|
nickjillings@1370
|
1932 i = this.parent.parent.children.findIndex(function(element,index,array){
|
nickjillings@1370
|
1933 if (element == this.parent)
|
nickjillings@1370
|
1934 return true;
|
nickjillings@1370
|
1935 else
|
nickjillings@1370
|
1936 return false;
|
nickjillings@1370
|
1937 },this);
|
nickjillings@1370
|
1938 if (i >= 0) {
|
nickjillings@1370
|
1939 var childList = this.parent.children;
|
nickjillings@1370
|
1940 if (i < aeList.length-1) {
|
nickjillings@1370
|
1941 childList = childList.slice(0,i).concat(childList.slice(i+1));
|
nickjillings@1370
|
1942 } else {
|
nickjillings@1370
|
1943 childList = childList.slice(0,i);
|
nickjillings@1370
|
1944 }
|
nickjillings@1370
|
1945 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
|
nickjillings@1370
|
1946 }
|
nickjillings@1370
|
1947 },
|
nickjillings@1370
|
1948 findNode: function(element,index,array){
|
nickjillings@1370
|
1949 if (element == this.parent.specification)
|
nickjillings@1370
|
1950 return true;
|
nickjillings@1370
|
1951 else
|
nickjillings@1370
|
1952 return false;
|
nickjillings@1370
|
1953 }
|
nickjillings@1370
|
1954 }
|
nickjillings@1370
|
1955 this.deleteNode.root.textContent = "Delete Entry";
|
nickjillings@1370
|
1956 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
|
nickjillings@1370
|
1957 this.buttonDOM.appendChild(this.deleteNode.root);
|
nickjillings@1370
|
1958 }
|
nickjillings@1370
|
1959
|
nickjillings@1370
|
1960 this.commentQuestionNode = function(parent,rootObject)
|
nickjillings@1370
|
1961 {
|
nickjillings@1375
|
1962 this.type = "commentQuestionNode";
|
nickjillings@1370
|
1963 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1964 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1965 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1966 this.attributes = [];
|
nickjillings@1370
|
1967 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1968 this.children = [];
|
nickjillings@1370
|
1969 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1970 this.parent = parent;
|
nickjillings@1370
|
1971 this.specification = rootObject;
|
nickjillings@1370
|
1972 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1370
|
1973 this.rootDOM.className = "node";
|
nickjillings@1370
|
1974
|
nickjillings@1370
|
1975 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1976 titleDiv.className = "node-title";
|
nickjillings@1370
|
1977 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1978 this.titleDOM.textContent = "Test Page";
|
nickjillings@1370
|
1979 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1980
|
nickjillings@1370
|
1981 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1982 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1983 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1984
|
nickjillings@1370
|
1985 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1986 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1987 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1988 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1989
|
nickjillings@1370
|
1990 }
|
nickjillings@1370
|
1991
|
nickjillings@1374
|
1992 // Build the components
|
nickjillings@1310
|
1993 if (this.specification.interfaces.length == 0) {
|
nickjillings@1310
|
1994 this.specification.interfaces.push(new specification.interfaceNode());
|
nickjillings@1310
|
1995 }
|
nickjillings@1381
|
1996 for (var interfaceObj of this.specification.interfaces)
|
nickjillings@1381
|
1997 {
|
nickjillings@1381
|
1998 var newInterface = new this.parent.interfaceNode(this.parent,interfaceObj);
|
nickjillings@1381
|
1999 newInterface.build("Interface",""+this.specification.id+"-interface",this.childrenDOM);
|
nickjillings@1381
|
2000 this.children.push(newInterface);
|
nickjillings@1381
|
2001 this.interfaces.push(newInterface);
|
nickjillings@1381
|
2002 }
|
nickjillings@1381
|
2003
|
nickjillings@1374
|
2004 for (var elements of this.specification.audioElements)
|
nickjillings@1374
|
2005 {
|
nickjillings@1374
|
2006 var audioElementDOM = new this.audioElementNode(this,elements);
|
nickjillings@1374
|
2007 this.children.push(audioElementDOM);
|
nickjillings@1374
|
2008 this.childrenDOM.appendChild(audioElementDOM.rootDOM);
|
nickjillings@1374
|
2009 }
|
nickjillings@1374
|
2010
|
nickjillings@1370
|
2011 this.addInterface = {
|
nickjillings@1370
|
2012 root: document.createElement("button"),
|
nickjillings@1370
|
2013 parent: this,
|
nickjillings@1370
|
2014 handleEvent: function() {
|
nickjillings@1370
|
2015 var InterfaceObj = new specification.interfaceNode();
|
nickjillings@1370
|
2016 var newInterface = new this.parent.parent.interfaceNode(this.parent.parent,InterfaceObj);
|
nickjillings@1370
|
2017 newInterface.build("Interface",""+this.parent.specification.id+"-interface",this.parent.childrenDOM);
|
nickjillings@1370
|
2018 this.parent.children.push(newInterface);
|
nickjillings@1370
|
2019 this.parent.specification.interfaces.push(InterfaceObj);
|
nickjillings@1370
|
2020 this.parent.interfaces.push(newInterface);
|
nickjillings@1370
|
2021 }
|
nickjillings@1370
|
2022 }
|
nickjillings@1370
|
2023 this.addInterface.root.textContent = "Add Interface";
|
nickjillings@1370
|
2024 this.addInterface.root.addEventListener("click",this.addInterface,false);
|
nickjillings@1370
|
2025 this.buttonDOM.appendChild(this.addInterface.root);
|
nickjillings@1370
|
2026
|
nickjillings@1370
|
2027 this.addAudioElement = {
|
nickjillings@1370
|
2028 root: document.createElement("button"),
|
nickjillings@1370
|
2029 parent: this,
|
nickjillings@1370
|
2030 handleEvent: function() {
|
nickjillings@1370
|
2031 var audioElementObject = new this.parent.specification.audioElementNode();
|
nickjillings@1370
|
2032 var audioElementDOM = new this.parent.audioElementNode(this.parent,audioElementObject);
|
nickjillings@1370
|
2033 this.parent.specification.audioElements.push(audioElementObject);
|
nickjillings@1370
|
2034 this.parent.children.push(audioElementDOM);
|
nickjillings@1370
|
2035 this.parent.childrenDOM.appendChild(audioElementDOM.rootDOM);
|
nickjillings@1370
|
2036 }
|
nickjillings@1370
|
2037 }
|
nickjillings@1370
|
2038 this.addAudioElement.root.textContent = "Add Audio Element";
|
nickjillings@1370
|
2039 this.addAudioElement.root.addEventListener("click",this.addAudioElement,false);
|
nickjillings@1370
|
2040 this.buttonDOM.appendChild(this.addAudioElement.root);
|
nickjillings@1370
|
2041 }
|
nickjillings@1370
|
2042 } |