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