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