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@1370
|
139 this.proceedButton.textContent = "Next";
|
nickjillings@1370
|
140 this.proceedButton.onclick = function()
|
nickjillings@1370
|
141 {
|
nickjillings@1370
|
142 popupObject.popupContent.innerHTML = null;
|
nickjillings@1370
|
143 popupObject.shownObject.continue();
|
nickjillings@1370
|
144 };
|
nickjillings@1370
|
145 this.object.appendChild(this.proceedButton);
|
nickjillings@1370
|
146
|
nickjillings@1370
|
147 this.shownObject;
|
nickjillings@1370
|
148
|
nickjillings@1370
|
149 this.resize = function()
|
nickjillings@1370
|
150 {
|
nickjillings@1370
|
151 var w = window.innerWidth;
|
nickjillings@1370
|
152 var h = window.innerHeight;
|
nickjillings@1370
|
153 this.object.style.left = Math.floor((w-750)/2) + 'px';
|
nickjillings@1370
|
154 this.object.style.top = Math.floor((h-500)/2) + 'px';
|
nickjillings@1370
|
155 }
|
nickjillings@1370
|
156
|
nickjillings@1370
|
157 this.show = function()
|
nickjillings@1370
|
158 {
|
nickjillings@1370
|
159 this.object.style.visibility = "visible";
|
nickjillings@1370
|
160 this.blanket.style.visibility = "visible";
|
nickjillings@1370
|
161 }
|
nickjillings@1370
|
162
|
nickjillings@1370
|
163 this.hide = function()
|
nickjillings@1370
|
164 {
|
nickjillings@1370
|
165 this.object.style.visibility = "hidden";
|
nickjillings@1370
|
166 this.blanket.style.visibility = "hidden";
|
nickjillings@1370
|
167 }
|
nickjillings@1370
|
168
|
nickjillings@1370
|
169 this.postNode = function(postObject)
|
nickjillings@1370
|
170 {
|
nickjillings@1370
|
171 this.show();
|
nickjillings@1370
|
172 //Passed object must have the following:
|
nickjillings@1370
|
173 // Title: text to show in the title
|
nickjillings@1370
|
174 // Content: HTML DOM to show on the page
|
nickjillings@1370
|
175 // On complete this HTML DOM is destroyed so make sure it is referenced elsewhere for processing
|
nickjillings@1370
|
176 this.titleDOM.textContent = postObject.title;
|
nickjillings@1370
|
177 this.popupContent.appendChild(postObject.content);
|
nickjillings@1370
|
178 this.shownObject = postObject;
|
nickjillings@1370
|
179 }
|
nickjillings@1370
|
180
|
nickjillings@1370
|
181 this.resize();
|
nickjillings@1370
|
182 this.hide();
|
nickjillings@1370
|
183 };
|
nickjillings@1370
|
184
|
nickjillings@1370
|
185 popupStateNodes = new function()
|
nickjillings@1370
|
186 {
|
nickjillings@1370
|
187 // This defines the several popup states wanted
|
nickjillings@1370
|
188 this.state = [];
|
nickjillings@1370
|
189 this.state[0] = new function()
|
nickjillings@1370
|
190 {
|
nickjillings@1370
|
191 this.title = "Welcome";
|
nickjillings@1370
|
192 this.content = document.createElement("div");
|
nickjillings@1370
|
193 this.content.id = "state-0";
|
nickjillings@1370
|
194 var span = document.createElement("span");
|
nickjillings@1370
|
195 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
|
196 this.content.appendChild(span);
|
nickjillings@1370
|
197 this.dragArea = document.createElement("div");
|
nickjillings@1373
|
198 this.dragArea.className = "drag-area";
|
nickjillings@1373
|
199 this.dragArea.id = "project-drop";
|
nickjillings@1370
|
200 this.content.appendChild(this.dragArea);
|
nickjillings@1373
|
201
|
nickjillings@1373
|
202 this.dragArea.addEventListener('dragenter',function(e){
|
nickjillings@1373
|
203 e.stopPropagation();
|
nickjillings@1373
|
204 e.preventDefault();
|
nickjillings@1373
|
205 e.dataTransfer.dropEffect = 'copy';
|
nickjillings@1373
|
206 e.currentTarget.className = "drag-area drag-over";
|
nickjillings@1373
|
207 });
|
nickjillings@1373
|
208
|
nickjillings@1373
|
209 this.dragArea.addEventListener('dragexit',function(e){
|
nickjillings@1373
|
210 e.stopPropagation();
|
nickjillings@1373
|
211 e.preventDefault();
|
nickjillings@1373
|
212 e.dataTransfer.dropEffect = 'copy';
|
nickjillings@1373
|
213 e.currentTarget.className = "drag-area";
|
nickjillings@1373
|
214 });
|
nickjillings@1373
|
215
|
nickjillings@1373
|
216 this.dragArea.addEventListener('drop',function(e){
|
nickjillings@1373
|
217 e.stopPropagation();
|
nickjillings@1373
|
218 e.preventDefault();
|
nickjillings@1373
|
219 e.currentTarget.className = "drag-area drag-dropped";
|
nickjillings@1373
|
220 var files = e.dataTransfer.files[0];
|
nickjillings@1373
|
221
|
nickjillings@1373
|
222 });
|
nickjillings@1373
|
223
|
nickjillings@1370
|
224
|
nickjillings@1370
|
225 this.continue = function()
|
nickjillings@1370
|
226 {
|
nickjillings@1370
|
227 popupObject.postNode(popupStateNodes.state[1]);
|
nickjillings@1370
|
228 }
|
nickjillings@1370
|
229 }
|
nickjillings@1370
|
230 this.state[1] = new function()
|
nickjillings@1370
|
231 {
|
nickjillings@1370
|
232 this.title = "Select your interface";
|
nickjillings@1370
|
233 this.content = document.createElement("div");
|
nickjillings@1370
|
234 this.content.id = "state-1";
|
nickjillings@1370
|
235 var spnH = document.createElement('div');
|
nickjillings@1370
|
236 var span = document.createElement("span");
|
nickjillings@1370
|
237 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
|
238 spnH.appendChild(span);
|
nickjillings@1370
|
239 this.content.appendChild(spnH);
|
nickjillings@1370
|
240 this.select = document.createElement("select");
|
nickjillings@1370
|
241 this.testsXML = interfaceSpecs.getElementsByTagName('tests')[0].children;
|
nickjillings@1370
|
242 for (var i=0; i<this.testsXML.length; i++)
|
nickjillings@1370
|
243 {
|
nickjillings@1370
|
244 var option = document.createElement('option');
|
nickjillings@1370
|
245 option.value = this.testsXML[i].getAttribute('name');
|
nickjillings@1370
|
246 option.textContent = this.testsXML[i].getAttribute('name');
|
nickjillings@1370
|
247 this.select.appendChild(option);
|
nickjillings@1370
|
248 }
|
nickjillings@1370
|
249 this.content.appendChild(this.select);
|
nickjillings@1370
|
250 this.continue = function()
|
nickjillings@1370
|
251 {
|
nickjillings@1370
|
252 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(this.select.value)[0];
|
nickjillings@1370
|
253 specification.interface = testXML.getAttribute("interface");
|
nickjillings@1370
|
254 popupStateNodes.state[2].generate();
|
nickjillings@1370
|
255 popupObject.postNode(popupStateNodes.state[2]);
|
nickjillings@1370
|
256 }
|
nickjillings@1370
|
257 }
|
nickjillings@1370
|
258 this.state[2] = new function()
|
nickjillings@1370
|
259 {
|
nickjillings@1370
|
260 this.title = "Test Checks & Restrictions";
|
nickjillings@1370
|
261 this.content = document.createElement("div");
|
nickjillings@1370
|
262 this.content.id = "state-1";
|
nickjillings@1370
|
263 var spnH = document.createElement('div');
|
nickjillings@1370
|
264 var span = document.createElement("span");
|
nickjillings@1370
|
265 span.textContent = "Select your test checks and restrictions. Greyed out items are fixed by the test/interface and cannot be changed";
|
nickjillings@1370
|
266 spnH.appendChild(span);
|
nickjillings@1370
|
267 this.content.appendChild(spnH);
|
nickjillings@1370
|
268 var holder = document.createElement("div");
|
nickjillings@1370
|
269 this.options = [];
|
nickjillings@1370
|
270 this.testXML = null;
|
nickjillings@1370
|
271 this.interfaceXML = null;
|
nickjillings@1370
|
272 this.generate = function()
|
nickjillings@1370
|
273 {
|
nickjillings@1370
|
274 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
275 this.checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
276 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
277 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
278 this.testXML = this.testXML.getAllElementsByTagName("checks");
|
nickjillings@1370
|
279 for (var i=0; i<this.interfaceXML.children.length; i++)
|
nickjillings@1370
|
280 {
|
nickjillings@1370
|
281 var interfaceNode = this.interfaceXML.children[i];
|
nickjillings@1370
|
282 var checkName = interfaceNode.getAttribute('name');
|
nickjillings@1370
|
283 var testNode
|
nickjillings@1370
|
284 if (this.testXML.length > 0)
|
nickjillings@1370
|
285 {
|
nickjillings@1370
|
286 testNode = this.testXML[0].getAllElementsByName(checkName);
|
nickjillings@1370
|
287 if(testNode.length != 0) {testNode = testNode[0];}
|
nickjillings@1370
|
288 else {testNode = undefined;}
|
nickjillings@1370
|
289 } else {
|
nickjillings@1370
|
290 testNode = undefined;
|
nickjillings@1370
|
291 }
|
nickjillings@1370
|
292 var optH = document.createElement('div');
|
nickjillings@1370
|
293 optH.className = "popup-checkbox";
|
nickjillings@1370
|
294 var checkbox = document.createElement('input');
|
nickjillings@1370
|
295 checkbox.type = "checkbox";
|
nickjillings@1370
|
296 var text = document.createElement('span');
|
nickjillings@1370
|
297 checkbox.setAttribute('name',checkName);
|
nickjillings@1370
|
298 if (interfaceNode.getAttribute('default') == 'on')
|
nickjillings@1370
|
299 {
|
nickjillings@1370
|
300 checkbox.checked = true;
|
nickjillings@1370
|
301 }
|
nickjillings@1370
|
302 if (interfaceNode.getAttribute('support') == "none")
|
nickjillings@1370
|
303 {
|
nickjillings@1370
|
304 checkbox.disabled = true;
|
nickjillings@1370
|
305 checkbox.checked = false;
|
nickjillings@1370
|
306 optH.className = "popup-checkbox disabled";
|
nickjillings@1370
|
307 } else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@1370
|
308 {
|
nickjillings@1370
|
309 checkbox.disabled = true;
|
nickjillings@1370
|
310 checkbox.checked = true;
|
nickjillings@1370
|
311 optH.className = "popup-checkbox disabled";
|
nickjillings@1370
|
312 }
|
nickjillings@1370
|
313 if(testNode != undefined)
|
nickjillings@1370
|
314 {
|
nickjillings@1370
|
315 if (interfaceNode.getAttribute('default') == 'on')
|
nickjillings@1370
|
316 {
|
nickjillings@1370
|
317 checkbox.checked = true;
|
nickjillings@1370
|
318 }
|
nickjillings@1370
|
319 if (testNode.getAttribute('support') == "none")
|
nickjillings@1370
|
320 {
|
nickjillings@1370
|
321 checkbox.disabled = true;
|
nickjillings@1370
|
322 checkbox.checked = false;
|
nickjillings@1370
|
323 optH.className = "popup-checkbox disabled";
|
nickjillings@1370
|
324 }else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@1370
|
325 {
|
nickjillings@1370
|
326 checkbox.disabled = true;
|
nickjillings@1370
|
327 checkbox.checked = true;
|
nickjillings@1370
|
328 optH.className = "popup-checkbox disabled";
|
nickjillings@1370
|
329 }
|
nickjillings@1370
|
330 }
|
nickjillings@1370
|
331 text.textContent = popupStateNodes.state[2].checkText.getAllElementsByName(checkName)[0].textContent;
|
nickjillings@1370
|
332 optH.appendChild(checkbox);
|
nickjillings@1370
|
333 optH.appendChild(text);
|
nickjillings@1370
|
334 this.options.push(optH);
|
nickjillings@1370
|
335 this.content.appendChild(optH);
|
nickjillings@1370
|
336 }
|
nickjillings@1370
|
337 }
|
nickjillings@1370
|
338 this.continue = function()
|
nickjillings@1370
|
339 {
|
nickjillings@1370
|
340 if (specification.interfaces == null)
|
nickjillings@1370
|
341 {
|
nickjillings@1370
|
342 specification.interfaces = new specification.interfaceNode();
|
nickjillings@1370
|
343 }
|
nickjillings@1370
|
344 for (var object of this.options)
|
nickjillings@1370
|
345 {
|
nickjillings@1370
|
346 var checkbox = object.children[0];
|
nickjillings@1370
|
347 if (checkbox.checked)
|
nickjillings@1370
|
348 {
|
nickjillings@1370
|
349 var option = {
|
nickjillings@1370
|
350 type: "check",
|
nickjillings@1370
|
351 name: checkbox.getAttribute('name')
|
nickjillings@1370
|
352 };
|
nickjillings@1370
|
353 specification.interfaces.options.push(option);
|
nickjillings@1370
|
354 }
|
nickjillings@1370
|
355 }
|
nickjillings@1370
|
356 popupStateNodes.state[3].generate();
|
nickjillings@1370
|
357 popupObject.postNode(popupStateNodes.state[3]);
|
nickjillings@1370
|
358 }
|
nickjillings@1370
|
359 }
|
nickjillings@1370
|
360 this.state[3] = new function()
|
nickjillings@1370
|
361 {
|
nickjillings@1370
|
362 this.title = "Test Metrics";
|
nickjillings@1370
|
363 this.content = document.createElement("div");
|
nickjillings@1370
|
364 this.content.id = "state-1";
|
nickjillings@1370
|
365 var spnH = document.createElement('div');
|
nickjillings@1370
|
366 var span = document.createElement("span");
|
nickjillings@1370
|
367 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
|
368 spnH.appendChild(span);
|
nickjillings@1370
|
369 this.content.appendChild(spnH);
|
nickjillings@1370
|
370 this.options = [];
|
nickjillings@1370
|
371 this.checkText;
|
nickjillings@1370
|
372 this.testXML;
|
nickjillings@1370
|
373 this.interfaceXML;
|
nickjillings@1370
|
374 this.generate = function()
|
nickjillings@1370
|
375 {
|
nickjillings@1370
|
376 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
377 this.checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
378 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
379 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
380 this.testXML = this.testXML.getAllElementsByTagName("metrics");
|
nickjillings@1370
|
381 for (var i=0; i<this.interfaceXML.children.length; i++)
|
nickjillings@1370
|
382 {
|
nickjillings@1370
|
383 var interfaceNode = this.interfaceXML.children[i];
|
nickjillings@1370
|
384 var checkName = interfaceNode.getAttribute('name');
|
nickjillings@1370
|
385 var testNode
|
nickjillings@1370
|
386 if (this.testXML.length > 0)
|
nickjillings@1370
|
387 {
|
nickjillings@1370
|
388 testNode = this.testXML[0].getAllElementsByName(checkName);
|
nickjillings@1370
|
389 if(testNode.length != 0) {testNode = testNode[0];}
|
nickjillings@1370
|
390 else {testNode = undefined;}
|
nickjillings@1370
|
391 } else {
|
nickjillings@1370
|
392 testNode = undefined;
|
nickjillings@1370
|
393 }
|
nickjillings@1370
|
394 var optH = document.createElement('div');
|
nickjillings@1370
|
395 optH.className = "popup-checkbox";
|
nickjillings@1370
|
396 var checkbox = document.createElement('input');
|
nickjillings@1370
|
397 checkbox.type = "checkbox";
|
nickjillings@1370
|
398 var text = document.createElement('span');
|
nickjillings@1370
|
399 checkbox.setAttribute('name',checkName);
|
nickjillings@1370
|
400 if (interfaceNode.getAttribute('default') == 'on')
|
nickjillings@1370
|
401 {
|
nickjillings@1370
|
402 checkbox.checked = true;
|
nickjillings@1370
|
403 }
|
nickjillings@1370
|
404 if (interfaceNode.getAttribute('support') == "none")
|
nickjillings@1370
|
405 {
|
nickjillings@1370
|
406 checkbox.disabled = true;
|
nickjillings@1370
|
407 checkbox.checked = false;
|
nickjillings@1370
|
408 optH.className = "popup-checkbox disabled";
|
nickjillings@1370
|
409 } else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@1370
|
410 {
|
nickjillings@1370
|
411 checkbox.disabled = true;
|
nickjillings@1370
|
412 checkbox.checked = true;
|
nickjillings@1370
|
413 optH.className = "popup-checkbox disabled";
|
nickjillings@1370
|
414 }
|
nickjillings@1370
|
415 if(testNode != undefined)
|
nickjillings@1370
|
416 {
|
nickjillings@1370
|
417 if (interfaceNode.getAttribute('default') == 'on')
|
nickjillings@1370
|
418 {
|
nickjillings@1370
|
419 checkbox.checked = true;
|
nickjillings@1370
|
420 }
|
nickjillings@1370
|
421 if (testNode.getAttribute('support') == "none")
|
nickjillings@1370
|
422 {
|
nickjillings@1370
|
423 checkbox.disabled = true;
|
nickjillings@1370
|
424 checkbox.checked = false;
|
nickjillings@1370
|
425 optH.className = "popup-checkbox disabled";
|
nickjillings@1370
|
426 }else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@1370
|
427 {
|
nickjillings@1370
|
428 checkbox.disabled = true;
|
nickjillings@1370
|
429 checkbox.checked = true;
|
nickjillings@1370
|
430 optH.className = "popup-checkbox disabled";
|
nickjillings@1370
|
431 }
|
nickjillings@1370
|
432 }
|
nickjillings@1370
|
433 text.textContent = popupStateNodes.state[3].checkText.getAllElementsByName(checkName)[0].textContent;
|
nickjillings@1370
|
434 optH.appendChild(checkbox);
|
nickjillings@1370
|
435 optH.appendChild(text);
|
nickjillings@1370
|
436 this.options.push(optH);
|
nickjillings@1370
|
437 this.content.appendChild(optH);
|
nickjillings@1370
|
438 }
|
nickjillings@1370
|
439 }
|
nickjillings@1370
|
440 this.continue = function()
|
nickjillings@1370
|
441 {
|
nickjillings@1370
|
442 if (specification.metrics == null) {
|
nickjillings@1370
|
443 specification.metrics = new specification.metricNode();
|
nickjillings@1370
|
444 }
|
nickjillings@1370
|
445 for (var object of this.options)
|
nickjillings@1370
|
446 {
|
nickjillings@1370
|
447 var checkbox = object.children[0];
|
nickjillings@1370
|
448 if (checkbox.checked)
|
nickjillings@1370
|
449 {
|
nickjillings@1370
|
450 specification.metrics.enabled.push(checkbox.getAttribute('name'));
|
nickjillings@1370
|
451 }
|
nickjillings@1370
|
452 }
|
nickjillings@1370
|
453 popupStateNodes.state[4].generate();
|
nickjillings@1370
|
454 popupObject.postNode(popupStateNodes.state[4]);
|
nickjillings@1370
|
455 }
|
nickjillings@1370
|
456 }
|
nickjillings@1370
|
457 this.state[4] = new function()
|
nickjillings@1370
|
458 {
|
nickjillings@1370
|
459 this.title = "Test Visuals";
|
nickjillings@1370
|
460 this.content = document.createElement("div");
|
nickjillings@1370
|
461 this.content.id = "state-1";
|
nickjillings@1370
|
462 var spnH = document.createElement('div');
|
nickjillings@1370
|
463 var span = document.createElement("span");
|
nickjillings@1370
|
464 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
|
465 spnH.appendChild(span);
|
nickjillings@1370
|
466 this.content.appendChild(spnH);
|
nickjillings@1370
|
467 this.options = [];
|
nickjillings@1370
|
468 this.checkText;
|
nickjillings@1370
|
469 this.testXML;
|
nickjillings@1370
|
470 this.interfaceXML;
|
nickjillings@1370
|
471 this.generate = function()
|
nickjillings@1370
|
472 {
|
nickjillings@1370
|
473 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
474 this.checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
475 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
476 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
477 this.testXML = this.testXML.getAllElementsByTagName("metrics");
|
nickjillings@1370
|
478 for (var i=0; i<this.interfaceXML.children.length; i++)
|
nickjillings@1370
|
479 {
|
nickjillings@1370
|
480 var interfaceNode = this.interfaceXML.children[i];
|
nickjillings@1370
|
481 var checkName = interfaceNode.getAttribute('name');
|
nickjillings@1370
|
482 var testNode
|
nickjillings@1370
|
483 if (this.testXML.length > 0)
|
nickjillings@1370
|
484 {
|
nickjillings@1370
|
485 testNode = this.testXML[0].getAllElementsByName(checkName);
|
nickjillings@1370
|
486 if(testNode.length != 0) {testNode = testNode[0];}
|
nickjillings@1370
|
487 else {testNode = undefined;}
|
nickjillings@1370
|
488 } else {
|
nickjillings@1370
|
489 testNode = undefined;
|
nickjillings@1370
|
490 }
|
nickjillings@1370
|
491 var optH = document.createElement('div');
|
nickjillings@1370
|
492 optH.className = "popup-checkbox";
|
nickjillings@1370
|
493 var checkbox = document.createElement('input');
|
nickjillings@1370
|
494 checkbox.type = "checkbox";
|
nickjillings@1370
|
495 var text = document.createElement('span');
|
nickjillings@1370
|
496 checkbox.setAttribute('name',checkName);
|
nickjillings@1370
|
497 if (interfaceNode.getAttribute('default') == 'on')
|
nickjillings@1370
|
498 {
|
nickjillings@1370
|
499 checkbox.checked = true;
|
nickjillings@1370
|
500 }
|
nickjillings@1370
|
501 if (interfaceNode.getAttribute('support') == "none")
|
nickjillings@1370
|
502 {
|
nickjillings@1370
|
503 checkbox.disabled = true;
|
nickjillings@1370
|
504 checkbox.checked = false;
|
nickjillings@1370
|
505 optH.className = "popup-checkbox disabled";
|
nickjillings@1370
|
506 } else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@1370
|
507 {
|
nickjillings@1370
|
508 checkbox.disabled = true;
|
nickjillings@1370
|
509 checkbox.checked = true;
|
nickjillings@1370
|
510 optH.className = "popup-checkbox disabled";
|
nickjillings@1370
|
511 }
|
nickjillings@1370
|
512 if(testNode != undefined)
|
nickjillings@1370
|
513 {
|
nickjillings@1370
|
514 if (interfaceNode.getAttribute('default') == 'on')
|
nickjillings@1370
|
515 {
|
nickjillings@1370
|
516 checkbox.checked = true;
|
nickjillings@1370
|
517 }
|
nickjillings@1370
|
518 if (testNode.getAttribute('support') == "none")
|
nickjillings@1370
|
519 {
|
nickjillings@1370
|
520 checkbox.disabled = true;
|
nickjillings@1370
|
521 checkbox.checked = false;
|
nickjillings@1370
|
522 optH.className = "popup-checkbox disabled";
|
nickjillings@1370
|
523 }else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@1370
|
524 {
|
nickjillings@1370
|
525 checkbox.disabled = true;
|
nickjillings@1370
|
526 checkbox.checked = true;
|
nickjillings@1370
|
527 optH.className = "popup-checkbox disabled";
|
nickjillings@1370
|
528 }
|
nickjillings@1370
|
529 }
|
nickjillings@1370
|
530 text.textContent = this.checkText.getAllElementsByName(checkName)[0].textContent;
|
nickjillings@1370
|
531 optH.appendChild(checkbox);
|
nickjillings@1370
|
532 optH.appendChild(text);
|
nickjillings@1370
|
533 this.options.push(optH);
|
nickjillings@1370
|
534 this.content.appendChild(optH);
|
nickjillings@1370
|
535 }
|
nickjillings@1370
|
536 }
|
nickjillings@1370
|
537 this.continue = function()
|
nickjillings@1370
|
538 {
|
nickjillings@1370
|
539 if (specification.interfaces == null)
|
nickjillings@1370
|
540 {
|
nickjillings@1370
|
541 specification.interfaces = new specification.interfaceNode();
|
nickjillings@1370
|
542 }
|
nickjillings@1370
|
543 for (var object of this.options)
|
nickjillings@1370
|
544 {
|
nickjillings@1370
|
545 var checkbox = object.children[0];
|
nickjillings@1370
|
546 if (checkbox.checked)
|
nickjillings@1370
|
547 {
|
nickjillings@1370
|
548 var option = {
|
nickjillings@1370
|
549 type: "show",
|
nickjillings@1370
|
550 name: checkbox.getAttribute('name')
|
nickjillings@1370
|
551 };
|
nickjillings@1370
|
552 specification.interfaces.options.push(option);
|
nickjillings@1370
|
553 }
|
nickjillings@1370
|
554 }
|
nickjillings@1370
|
555 popupObject.hide();
|
nickjillings@1370
|
556 convert.convert(document.getElementById('content'));
|
nickjillings@1370
|
557 }
|
nickjillings@1370
|
558 }
|
nickjillings@1370
|
559 this.state[5] = new function() {
|
nickjillings@1370
|
560 this.title = "Add/Edit Survey Element";
|
nickjillings@1370
|
561 this.content = document.createElement("div");
|
nickjillings@1370
|
562 this.content.id = "state-1";
|
nickjillings@1370
|
563 var spnH = document.createElement('div');
|
nickjillings@1370
|
564 var span = document.createElement("span");
|
nickjillings@1370
|
565 span.textContent = "You can configure your survey element here. Press 'Continue' to complete your changes.";
|
nickjillings@1370
|
566 spnH.appendChild(span);
|
nickjillings@1370
|
567 this.content.appendChild(spnH);
|
nickjillings@1370
|
568 this.dynamic = document.createElement("div");
|
nickjillings@1370
|
569 this.option = null;
|
nickjillings@1370
|
570 this.parent = null;
|
nickjillings@1370
|
571 var select = document.createElement("select");
|
nickjillings@1370
|
572 select.setAttribute("name","type");
|
nickjillings@1370
|
573 select.addEventListener("change",this,false);
|
nickjillings@1370
|
574 this.content.appendChild(select);
|
nickjillings@1370
|
575 this.content.appendChild(this.dynamic);
|
nickjillings@1370
|
576 this.generate = function(option, parent)
|
nickjillings@1370
|
577 {
|
nickjillings@1370
|
578 this.option = option;
|
nickjillings@1370
|
579 this.parent = parent;
|
nickjillings@1370
|
580 var optionList = specification.schema.getAllElementsByName("survey")[0].getAllElementsByName("type")[0].getAllElementsByTagName("xs:enumeration");
|
nickjillings@1370
|
581 for (var i=0; i<optionList.length; i++)
|
nickjillings@1370
|
582 {
|
nickjillings@1370
|
583 var selectOption = document.createElement("option");
|
nickjillings@1370
|
584 selectOption.value = optionList[i].getAttribute("value");
|
nickjillings@1370
|
585 selectOption.textContent = selectOption.value;
|
nickjillings@1370
|
586 select.appendChild(selectOption);
|
nickjillings@1370
|
587 }
|
nickjillings@1370
|
588 if (this.option.type != undefined){
|
nickjillings@1370
|
589 select.value = this.option.type
|
nickjillings@1370
|
590 } else {
|
nickjillings@1370
|
591 select.value = "statement";
|
nickjillings@1370
|
592 this.option.type = "statement";
|
nickjillings@1370
|
593 }
|
nickjillings@1370
|
594
|
nickjillings@1370
|
595 this.dynamic.innerHTML = null;
|
nickjillings@1370
|
596 var statement = document.createElement("div");
|
nickjillings@1370
|
597 var statementText = document.createElement("span");
|
nickjillings@1370
|
598 var statementEntry = document.createElement("textarea");
|
nickjillings@1370
|
599 statement.appendChild(statementText);
|
nickjillings@1370
|
600 statement.appendChild(statementEntry);
|
nickjillings@1370
|
601 statementText.textContent = "Statement/Question";
|
nickjillings@1370
|
602 statementEntry.addEventListener("change",this,false);
|
nickjillings@1370
|
603 statementEntry.setAttribute("name","statement");
|
nickjillings@1370
|
604 statementEntry.value = this.option.statement;
|
nickjillings@1370
|
605 this.dynamic.appendChild(statement);
|
nickjillings@1370
|
606 switch(this.option.type)
|
nickjillings@1370
|
607 {
|
nickjillings@1370
|
608 case "statement":
|
nickjillings@1370
|
609 break;
|
nickjillings@1370
|
610 case "question":
|
nickjillings@1370
|
611 var boxsizeSelect = document.createElement("select");
|
nickjillings@1370
|
612 var optionList = specification.schema.getAllElementsByName("survey")[0].getAllElementsByName("boxsize")[0].getAllElementsByTagName("xs:enumeration");
|
nickjillings@1370
|
613 for (var i=0; i<optionList.length; i++)
|
nickjillings@1370
|
614 {
|
nickjillings@1370
|
615 var selectOption = document.createElement("option");
|
nickjillings@1370
|
616 selectOption.value = optionList[i].getAttribute("value");
|
nickjillings@1370
|
617 selectOption.textContent = selectOption.value;
|
nickjillings@1370
|
618 boxsizeSelect.appendChild(selectOption);
|
nickjillings@1370
|
619 }
|
nickjillings@1370
|
620 if(this.option.boxsize != undefined) {
|
nickjillings@1370
|
621 boxsizeSelect.value = this.option.boxsize;
|
nickjillings@1370
|
622 } else {
|
nickjillings@1370
|
623 boxsizeSelect.value = "normal";
|
nickjillings@1370
|
624 this.option.boxsize = "normal";
|
nickjillings@1370
|
625 }
|
nickjillings@1370
|
626 boxsizeSelect.setAttribute("name","boxsize");
|
nickjillings@1370
|
627 boxsizeSelect.addEventListener("change",this,false);
|
nickjillings@1370
|
628 var boxsize = document.createElement("div");
|
nickjillings@1370
|
629 var boxsizeText = document.createElement("span");
|
nickjillings@1370
|
630 boxsizeText.textContent = "Entry Size: ";
|
nickjillings@1370
|
631 boxsize.appendChild(boxsizeText);
|
nickjillings@1370
|
632 boxsize.appendChild(boxsizeSelect);
|
nickjillings@1370
|
633 this.dynamic.appendChild(boxsize);
|
nickjillings@1370
|
634
|
nickjillings@1370
|
635 var mandatory = document.createElement("div");
|
nickjillings@1370
|
636 var mandatoryInput = document.createElement("input");
|
nickjillings@1370
|
637 var mandatoryText = document.createElement("span");
|
nickjillings@1370
|
638 mandatoryText.textContent = "Mandatory: ";
|
nickjillings@1370
|
639 mandatory.appendChild(mandatoryText);
|
nickjillings@1370
|
640 mandatory.appendChild(mandatoryInput);
|
nickjillings@1370
|
641 mandatoryInput.type = "checkbox";
|
nickjillings@1370
|
642 if (this.option.mandatory) {mandatoryInput.checked = true;} else {mandatoryInput.checked = false;}
|
nickjillings@1370
|
643 mandatoryInput.setAttribute("name","mandatory");
|
nickjillings@1370
|
644 mandatoryInput.addEventListener("change",this,false);
|
nickjillings@1370
|
645 mandatory.appendChild(mandatoryText);
|
nickjillings@1370
|
646 mandatory.appendChild(mandatoryInput);
|
nickjillings@1370
|
647 this.dynamic.appendChild(mandatory);
|
nickjillings@1370
|
648 break;
|
nickjillings@1370
|
649 }
|
nickjillings@1370
|
650 }
|
nickjillings@1370
|
651 this.handleEvent = function()
|
nickjillings@1370
|
652 {
|
nickjillings@1370
|
653 var name = event.currentTarget.getAttribute("name");
|
nickjillings@1370
|
654 switch(name) {
|
nickjillings@1370
|
655 case "type":
|
nickjillings@1370
|
656 // If type has changed, we may need to rebuild the entire state node
|
nickjillings@1370
|
657 if (event.currentTarget.value != this.option.name)
|
nickjillings@1370
|
658 {
|
nickjillings@1370
|
659 this.option.type = event.currentTarget.value;
|
nickjillings@1370
|
660 this.generate(this.option,this.parent);
|
nickjillings@1370
|
661 }
|
nickjillings@1370
|
662 break;
|
nickjillings@1370
|
663 case "mandatory":
|
nickjillings@1370
|
664 this.option.mandatory = event.currentTarget.checked;
|
nickjillings@1370
|
665 break;
|
nickjillings@1370
|
666 case "boxsize":
|
nickjillings@1370
|
667 this.option.boxsize = event.currentTarget.value;
|
nickjillings@1370
|
668 break;
|
nickjillings@1370
|
669 case "statement":
|
nickjillings@1370
|
670 this.option.statement = event.currentTarget.value;
|
nickjillings@1370
|
671 break;
|
nickjillings@1370
|
672 }
|
nickjillings@1370
|
673 }
|
nickjillings@1370
|
674 this.continue = function()
|
nickjillings@1370
|
675 {
|
nickjillings@1370
|
676 var newNode = new this.parent.surveyEntryNode(this.parent,this.option);
|
nickjillings@1370
|
677 this.parent.children.push(newNode);
|
nickjillings@1370
|
678 this.parent.childrenDOM.appendChild(newNode.rootDOM);
|
nickjillings@1370
|
679 popupObject.hide();
|
nickjillings@1370
|
680 }
|
nickjillings@1370
|
681 }
|
nickjillings@1370
|
682 }
|
nickjillings@1370
|
683 }
|
nickjillings@1370
|
684
|
nickjillings@1370
|
685 function SpecificationToHTML()
|
nickjillings@1370
|
686 {
|
nickjillings@1370
|
687 // This takes the specification node and converts it to an on-page HTML object
|
nickjillings@1370
|
688 // Each Specification Node is given its own JS object which listens to the XSD for instant verification
|
nickjillings@1370
|
689 // Once generated, it directly binds into the specification object to update with changes
|
nickjillings@1370
|
690 // Fixed DOM entries
|
nickjillings@1370
|
691 this.injectDOM;
|
nickjillings@1370
|
692 this.setupDOM;
|
nickjillings@1370
|
693 this.pages = [];
|
nickjillings@1370
|
694
|
nickjillings@1370
|
695 // Self-contained generators
|
nickjillings@1370
|
696 this.createGeneralNodeDOM = function(name,id,parent)
|
nickjillings@1370
|
697 {
|
nickjillings@1370
|
698 var root = document.createElement('div');
|
nickjillings@1370
|
699 root.id = id;
|
nickjillings@1370
|
700 root.className = "node";
|
nickjillings@1370
|
701
|
nickjillings@1370
|
702 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
703 titleDiv.className = "node-title";
|
nickjillings@1370
|
704 var title = document.createElement('span');
|
nickjillings@1370
|
705 title.className = "node-title";
|
nickjillings@1370
|
706 title.textContent = name;
|
nickjillings@1370
|
707 titleDiv.appendChild(title);
|
nickjillings@1370
|
708
|
nickjillings@1370
|
709 var attributeDiv = document.createElement('div');
|
nickjillings@1370
|
710 attributeDiv.className = "node-attributes";
|
nickjillings@1370
|
711
|
nickjillings@1370
|
712 var childrenDiv = document.createElement('div');
|
nickjillings@1370
|
713 childrenDiv.className = "node-children";
|
nickjillings@1370
|
714
|
nickjillings@1370
|
715 var buttonsDiv = document.createElement('div');
|
nickjillings@1370
|
716 buttonsDiv.className = "node-buttons";
|
nickjillings@1370
|
717
|
nickjillings@1370
|
718 root.appendChild(titleDiv);
|
nickjillings@1370
|
719 root.appendChild(attributeDiv);
|
nickjillings@1370
|
720 root.appendChild(childrenDiv);
|
nickjillings@1370
|
721 root.appendChild(buttonsDiv);
|
nickjillings@1370
|
722
|
nickjillings@1370
|
723 var obj = {
|
nickjillings@1370
|
724 rootDOM: root,
|
nickjillings@1370
|
725 titleDOM: title,
|
nickjillings@1370
|
726 attributeDOM: attributeDiv,
|
nickjillings@1370
|
727 attributes: [],
|
nickjillings@1370
|
728 childrenDOM: childrenDiv,
|
nickjillings@1370
|
729 children: [],
|
nickjillings@1370
|
730 buttonDOM: buttonsDiv,
|
nickjillings@1370
|
731 parent: parent
|
nickjillings@1370
|
732 }
|
nickjillings@1370
|
733 return obj;
|
nickjillings@1370
|
734 }
|
nickjillings@1370
|
735
|
nickjillings@1370
|
736 this.convertAttributeToDOM = function(node,schema)
|
nickjillings@1370
|
737 {
|
nickjillings@1370
|
738 // This takes an attribute schema node and returns an object with the input node and any bindings
|
nickjillings@1370
|
739 if (schema.getAttribute('name') == undefined && schema.getAttribute('ref') != undefined)
|
nickjillings@1370
|
740 {
|
nickjillings@1370
|
741 schema = specification.schema.getAllElementsByName(schema.getAttribute('ref'))[0];
|
nickjillings@1370
|
742 }
|
nickjillings@1370
|
743 var obj = new function()
|
nickjillings@1370
|
744 {
|
nickjillings@1370
|
745 this.input;
|
nickjillings@1370
|
746 this.name;
|
nickjillings@1370
|
747 this.owner;
|
nickjillings@1370
|
748 this.holder;
|
nickjillings@1370
|
749
|
nickjillings@1370
|
750 this.name = schema.getAttribute('name');
|
nickjillings@1370
|
751 this.default = schema.getAttribute('default');
|
nickjillings@1370
|
752 this.dataType = schema.getAttribute('type');
|
nickjillings@1370
|
753 if (typeof this.dataType == "string") { this.dataType = this.dataType.substr(3);}
|
nickjillings@1370
|
754 else {this.dataType = "string";}
|
nickjillings@1370
|
755 var minVar = undefined;
|
nickjillings@1370
|
756 var maxVar = undefined;
|
nickjillings@1370
|
757 switch(this.dataType)
|
nickjillings@1370
|
758 {
|
nickjillings@1370
|
759 case "negativeInteger":
|
nickjillings@1370
|
760 maxVar = -1;
|
nickjillings@1370
|
761 break;
|
nickjillings@1370
|
762 case "positiveInteger":
|
nickjillings@1370
|
763 minVar = 1;
|
nickjillings@1370
|
764 break;
|
nickjillings@1370
|
765 case "nonNegativeInteger":
|
nickjillings@1370
|
766 minVar = 0;
|
nickjillings@1370
|
767 break;
|
nickjillings@1370
|
768 case "nonPositiveInteger":
|
nickjillings@1370
|
769 maxVar = 0;
|
nickjillings@1370
|
770 break;
|
nickjillings@1370
|
771 case "byte":
|
nickjillings@1370
|
772 minVar = 0;
|
nickjillings@1370
|
773 maxVar = 256;
|
nickjillings@1370
|
774 break;
|
nickjillings@1370
|
775 case "short":
|
nickjillings@1370
|
776 minVar = 0;
|
nickjillings@1370
|
777 maxVar = 65536;
|
nickjillings@1370
|
778 break;
|
nickjillings@1370
|
779 default:
|
nickjillings@1370
|
780 break;
|
nickjillings@1370
|
781 }
|
nickjillings@1370
|
782
|
nickjillings@1370
|
783 this.input = document.createElement('input');
|
nickjillings@1370
|
784 switch(this.dataType)
|
nickjillings@1370
|
785 {
|
nickjillings@1370
|
786 case "boolean":
|
nickjillings@1370
|
787 this.input.type = "checkbox";
|
nickjillings@1370
|
788 break;
|
nickjillings@1370
|
789 case "negativeInteger":
|
nickjillings@1370
|
790 case "positiveInteger":
|
nickjillings@1370
|
791 case "nonNegativeInteger":
|
nickjillings@1370
|
792 case "nonPositiveInteger":
|
nickjillings@1370
|
793 case "integer":
|
nickjillings@1370
|
794 case "short":
|
nickjillings@1370
|
795 case "byte":
|
nickjillings@1370
|
796 this.input.step = 1;
|
nickjillings@1370
|
797 case "decimal":
|
nickjillings@1370
|
798 this.input.type = "number";
|
nickjillings@1370
|
799 this.input.min = minVar;
|
nickjillings@1370
|
800 this.input.max = maxVar;
|
nickjillings@1370
|
801 break;
|
nickjillings@1370
|
802 default:
|
nickjillings@1370
|
803 break;
|
nickjillings@1370
|
804 }
|
nickjillings@1370
|
805 var value;
|
nickjillings@1373
|
806 eval("value = node."+this.name)
|
nickjillings@1370
|
807 if (value != undefined)
|
nickjillings@1370
|
808 {
|
nickjillings@1370
|
809 this.input.value = value;
|
nickjillings@1370
|
810 } else if (this.default != undefined)
|
nickjillings@1370
|
811 {
|
nickjillings@1370
|
812 this.input.value = this.default;
|
nickjillings@1370
|
813 }
|
nickjillings@1370
|
814 this.handleEvent = function(event)
|
nickjillings@1370
|
815 {
|
nickjillings@1370
|
816 var value;
|
nickjillings@1370
|
817 switch(this.input.type)
|
nickjillings@1370
|
818 {
|
nickjillings@1370
|
819 case "checkbox":
|
nickjillings@1370
|
820 value = event.currentTarget.checked;
|
nickjillings@1370
|
821 break;
|
nickjillings@1370
|
822 case "number":
|
nickjillings@1370
|
823 value = Number(event.currentTarget.value);
|
nickjillings@1370
|
824 break;
|
nickjillings@1370
|
825 default:
|
nickjillings@1370
|
826 value = event.currentTarget.value;
|
nickjillings@1370
|
827 break;
|
nickjillings@1370
|
828 }
|
nickjillings@1370
|
829 eval("this.owner."+this.name+" = value");
|
nickjillings@1370
|
830 }
|
nickjillings@1370
|
831 this.holder = document.createElement('div');
|
nickjillings@1370
|
832 this.holder.className = "attribute";
|
nickjillings@1370
|
833 this.holder.setAttribute('name',this.name);
|
nickjillings@1370
|
834 var text = document.createElement('span');
|
nickjillings@1370
|
835 eval("text.textContent = attributeText."+this.name+"+': '");
|
nickjillings@1370
|
836 this.holder.appendChild(text);
|
nickjillings@1370
|
837 this.holder.appendChild(this.input);
|
nickjillings@1370
|
838 this.owner = node;
|
nickjillings@1370
|
839 this.input.addEventListener("change",this,false);
|
nickjillings@1370
|
840 }
|
nickjillings@1370
|
841 if (obj.attribute != null)
|
nickjillings@1370
|
842 {
|
nickjillings@1370
|
843 obj.input.value = obj.attribute;
|
nickjillings@1370
|
844 }
|
nickjillings@1370
|
845 return obj;
|
nickjillings@1370
|
846 }
|
nickjillings@1370
|
847
|
nickjillings@1370
|
848 this.convert = function(root)
|
nickjillings@1370
|
849 {
|
nickjillings@1370
|
850 //Performs the actual conversion using the given root DOM as the root
|
nickjillings@1370
|
851 this.injectDOM = root;
|
nickjillings@1370
|
852
|
nickjillings@1373
|
853 // Build the export button
|
nickjillings@1373
|
854 var exportButton = document.createElement("button");
|
nickjillings@1373
|
855 exportButton.textContent = "Export to XML";
|
nickjillings@1373
|
856 exportButton.onclick = function()
|
nickjillings@1373
|
857 {
|
nickjillings@1373
|
858 var doc = specification.encode();
|
nickjillings@1373
|
859 var obj = {};
|
nickjillings@1373
|
860 obj.title = "Export";
|
nickjillings@1373
|
861 obj.content = document.createElement("div");
|
nickjillings@1373
|
862 obj.content.id = "finish";
|
nickjillings@1373
|
863 var span = document.createElement("span");
|
nickjillings@1373
|
864 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
|
865 obj.content.appendChild(span);
|
nickjillings@1373
|
866 var link = document.createElement("div");
|
nickjillings@1373
|
867 link.appendChild(doc.children[0]);
|
nickjillings@1373
|
868 var file = [link.innerHTML];
|
nickjillings@1373
|
869 var bb = new Blob(file,{type : 'application/xml'});
|
nickjillings@1373
|
870 var dnlk = window.URL.createObjectURL(bb);
|
nickjillings@1373
|
871 var a = document.createElement("a");
|
nickjillings@1373
|
872 a.hidden = '';
|
nickjillings@1373
|
873 a.href = dnlk;
|
nickjillings@1373
|
874 a.download = "project-specification.xml";
|
nickjillings@1373
|
875 a.textContent = "Save File";
|
nickjillings@1373
|
876 obj.content.appendChild(a);
|
nickjillings@1373
|
877 popupObject.show();
|
nickjillings@1373
|
878 popupObject.postNode(obj);
|
nickjillings@1373
|
879 }
|
nickjillings@1373
|
880 this.injectDOM.appendChild(exportButton);
|
nickjillings@1373
|
881
|
nickjillings@1370
|
882 // First perform the setupNode;
|
nickjillings@1370
|
883 var setupSchema = specification.schema.getAllElementsByName('setup')[0];
|
nickjillings@1370
|
884 this.setupDOM = new this.createGeneralNodeDOM('setup','setup',null);
|
nickjillings@1370
|
885 this.injectDOM.appendChild(this.setupDOM.rootDOM);
|
nickjillings@1370
|
886 var setupAttributes = setupSchema.getAllElementsByTagName('xs:attribute');
|
nickjillings@1370
|
887 for (var i=0; i<setupAttributes.length; i++)
|
nickjillings@1370
|
888 {
|
nickjillings@1370
|
889 var attributeName = setupAttributes[i].getAttribute('name');
|
nickjillings@1370
|
890 var attrObject = this.convertAttributeToDOM(specification,setupAttributes[i]);
|
nickjillings@1370
|
891 this.setupDOM.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
892 this.setupDOM.attributes.push(attrObject);
|
nickjillings@1370
|
893 }
|
nickjillings@1370
|
894
|
nickjillings@1370
|
895 // Now we must build the interface Node
|
nickjillings@1370
|
896 this.interfaceDOM = new this.interfaceNode(this,specification.interfaces);
|
nickjillings@1370
|
897 this.interfaceDOM.build("Interface","setup-interface",this.setupDOM.rootDOM);
|
nickjillings@1370
|
898
|
nickjillings@1370
|
899 // Now build the Metrics selection node
|
nickjillings@1370
|
900 var metric = this.createGeneralNodeDOM("metrics","setup-metric",this.setupDOM);
|
nickjillings@1370
|
901 metric.rootDOM.removeChild(metric.attributeDOM);
|
nickjillings@1370
|
902 this.setupDOM.children.push(metric);
|
nickjillings@1370
|
903 this.setupDOM.childrenDOM.appendChild(metric.rootDOM);
|
nickjillings@1370
|
904 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
905 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
906 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
907 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
908 testXML = testXML.getAllElementsByTagName("metrics");
|
nickjillings@1370
|
909 for (var i=0; i<interfaceXML.children.length; i++)
|
nickjillings@1370
|
910 {
|
nickjillings@1370
|
911 var obj = {
|
nickjillings@1370
|
912 input: document.createElement('input'),
|
nickjillings@1370
|
913 root: document.createElement('div'),
|
nickjillings@1370
|
914 text: document.createElement('span'),
|
nickjillings@1370
|
915 specification: specification.metrics.enabled,
|
nickjillings@1370
|
916 name: interfaceXML.children[i].getAttribute("name"),
|
nickjillings@1370
|
917 handleEvent: function()
|
nickjillings@1370
|
918 {
|
nickjillings@1370
|
919 for (var i=0; i<this.specification.length; i++)
|
nickjillings@1370
|
920 {
|
nickjillings@1370
|
921 if (this.specification[i] == this.name)
|
nickjillings@1370
|
922 {
|
nickjillings@1370
|
923 var options = this.specification;
|
nickjillings@1370
|
924 if (this.input.checked == false) {
|
nickjillings@1370
|
925 if (i == options.length)
|
nickjillings@1370
|
926 {options = options.slice(0,i);}
|
nickjillings@1370
|
927 else {
|
nickjillings@1370
|
928 options = options.slice(0,i).concat(options.slice(i+1));
|
nickjillings@1370
|
929 }
|
nickjillings@1370
|
930 } else {
|
nickjillings@1370
|
931 return;
|
nickjillings@1370
|
932 }
|
nickjillings@1370
|
933 this.specification = options;
|
nickjillings@1370
|
934 break;
|
nickjillings@1370
|
935 }
|
nickjillings@1370
|
936 }
|
nickjillings@1370
|
937 if (this.input.checked) {
|
nickjillings@1370
|
938 this.specification.push(this.name);
|
nickjillings@1370
|
939 }
|
nickjillings@1370
|
940 }
|
nickjillings@1370
|
941 };
|
nickjillings@1370
|
942 obj.root.className = "attribute";
|
nickjillings@1370
|
943 obj.input.type = "checkbox";
|
nickjillings@1370
|
944 obj.root.appendChild(obj.text);
|
nickjillings@1370
|
945 obj.root.appendChild(obj.input);
|
nickjillings@1370
|
946 obj.text.textContent = checkText.children[i].textContent;
|
nickjillings@1370
|
947 metric.children.push(obj);
|
nickjillings@1370
|
948 metric.childrenDOM.appendChild(obj.root);
|
nickjillings@1370
|
949 for (var i=0; i<specification.metrics.enabled.length; i++)
|
nickjillings@1370
|
950 {
|
nickjillings@1370
|
951 if (specification.metrics.enabled[i] == obj.name)
|
nickjillings@1370
|
952 {
|
nickjillings@1370
|
953 obj.input.checked = true;
|
nickjillings@1370
|
954 break;
|
nickjillings@1370
|
955 }
|
nickjillings@1370
|
956 }
|
nickjillings@1370
|
957 }
|
nickjillings@1370
|
958
|
nickjillings@1370
|
959 // Now both before and after surveys
|
nickjillings@1370
|
960 if (specification.preTest == undefined){
|
nickjillings@1370
|
961 specification.preTest = new specification.surveyNode();
|
nickjillings@1370
|
962 specification.preTest.location = "pre";
|
nickjillings@1370
|
963 }
|
nickjillings@1370
|
964 if (specification.postTest == undefined){
|
nickjillings@1370
|
965 specification.postTest = new specification.surveyNode();
|
nickjillings@1370
|
966 specification.postTest.location = "post";
|
nickjillings@1370
|
967 }
|
nickjillings@1370
|
968 var surveyBefore = new this.surveyNode(this,specification.preTest,"Pre");
|
nickjillings@1370
|
969 var surveyAfter = new this.surveyNode(this,specification.postTest,"Post");
|
nickjillings@1370
|
970 this.setupDOM.children.push(surveyBefore);
|
nickjillings@1370
|
971 this.setupDOM.children.push(surveyAfter);
|
nickjillings@1370
|
972 this.setupDOM.childrenDOM.appendChild(surveyBefore.rootDOM);
|
nickjillings@1370
|
973 this.setupDOM.childrenDOM.appendChild(surveyAfter.rootDOM);
|
nickjillings@1370
|
974
|
nickjillings@1370
|
975 // Add in the page creator button
|
nickjillings@1370
|
976 this.addPage = {
|
nickjillings@1370
|
977 root: document.createElement("button"),
|
nickjillings@1370
|
978 parent: this,
|
nickjillings@1370
|
979 handleEvent: function()
|
nickjillings@1370
|
980 {
|
nickjillings@1370
|
981 var pageObj = new specification.page();
|
nickjillings@1370
|
982 specification.pages.push(pageObj);
|
nickjillings@1370
|
983 var newPage = new this.parent.pageNode(this.parent,pageObj);
|
nickjillings@1370
|
984 this.parent.injectDOM.appendChild(newPage.rootDOM);
|
nickjillings@1370
|
985 this.parent.pages.push(newPage);
|
nickjillings@1370
|
986 }
|
nickjillings@1370
|
987 }
|
nickjillings@1370
|
988 this.addPage.root.textContent = "Add Page";
|
nickjillings@1370
|
989 this.addPage.root.addEventListener("click",this.addPage,false);
|
nickjillings@1370
|
990 this.injectDOM.appendChild(this.addPage.root);
|
nickjillings@1370
|
991 }
|
nickjillings@1370
|
992
|
nickjillings@1370
|
993 this.interfaceNode = function(parent,rootObject)
|
nickjillings@1370
|
994 {
|
nickjillings@1370
|
995 this.rootDOM;
|
nickjillings@1370
|
996 this.titleDOM;
|
nickjillings@1370
|
997 this.attributeDOM;
|
nickjillings@1370
|
998 this.attributes = [];
|
nickjillings@1370
|
999 this.childrenDOM;
|
nickjillings@1370
|
1000 this.children = [];
|
nickjillings@1370
|
1001 this.buttonDOM;
|
nickjillings@1370
|
1002 this.parent = parent;
|
nickjillings@1370
|
1003 this.HTMLPoint;
|
nickjillings@1370
|
1004 this.specification = rootObject;
|
nickjillings@1370
|
1005 this.schema = specification.schema.getAllElementsByName("interface")[1];
|
nickjillings@1370
|
1006
|
nickjillings@1370
|
1007 this.createIOasAttr = function(name,specification,parent,type) {
|
nickjillings@1370
|
1008 this.root = document.createElement('div');
|
nickjillings@1370
|
1009 this.input = document.createElement("input");
|
nickjillings@1370
|
1010 this.name = name;
|
nickjillings@1370
|
1011 this.type = type;
|
nickjillings@1370
|
1012 this.parent = parent;
|
nickjillings@1370
|
1013 this.specification = specification;
|
nickjillings@1370
|
1014 this.handleEvent = function(event) {
|
nickjillings@1370
|
1015 for (var i=0; i<this.specification.options.length; i++)
|
nickjillings@1370
|
1016 {
|
nickjillings@1370
|
1017 if (this.specification.options[i].name == this.name)
|
nickjillings@1370
|
1018 {
|
nickjillings@1370
|
1019 var options = this.specification.options;
|
nickjillings@1370
|
1020 if (this.input.checked == false) {
|
nickjillings@1370
|
1021 if (i == options.length)
|
nickjillings@1370
|
1022 {options = options.slice(0,i);}
|
nickjillings@1370
|
1023 else {
|
nickjillings@1370
|
1024 options = options.slice(0,i).concat(options.slice(i+1));
|
nickjillings@1370
|
1025 }
|
nickjillings@1370
|
1026 } else {
|
nickjillings@1370
|
1027 return;
|
nickjillings@1370
|
1028 }
|
nickjillings@1370
|
1029 this.specification.options = options;
|
nickjillings@1370
|
1030 break;
|
nickjillings@1370
|
1031 }
|
nickjillings@1370
|
1032 }
|
nickjillings@1370
|
1033 if (this.input.checked) {
|
nickjillings@1370
|
1034 var obj = {
|
nickjillings@1370
|
1035 name: this.name,
|
nickjillings@1370
|
1036 type: this.type
|
nickjillings@1370
|
1037 };
|
nickjillings@1370
|
1038 this.specification.options.push(obj);
|
nickjillings@1370
|
1039 }
|
nickjillings@1370
|
1040 if (this.parent.HTMLPoint.id == "setup")
|
nickjillings@1370
|
1041 {
|
nickjillings@1370
|
1042 // We've changed a global setting, must update all child 'interfaces' and disable them
|
nickjillings@1370
|
1043 for (pages of convert.pages)
|
nickjillings@1370
|
1044 {
|
nickjillings@1370
|
1045 for (interface of pages.interfaces)
|
nickjillings@1370
|
1046 {
|
nickjillings@1370
|
1047 if (this.type == "check")
|
nickjillings@1370
|
1048 {
|
nickjillings@1370
|
1049 for (node of interface.children[0].attributes)
|
nickjillings@1370
|
1050 {
|
nickjillings@1370
|
1051 if (node.name == this.name) {
|
nickjillings@1370
|
1052 if (this.input.checked) {
|
nickjillings@1370
|
1053 node.input.disabled = true;
|
nickjillings@1370
|
1054 node.input.checked = false;
|
nickjillings@1370
|
1055 } else {
|
nickjillings@1370
|
1056 node.input.disabled = false;
|
nickjillings@1370
|
1057 }
|
nickjillings@1370
|
1058 break;
|
nickjillings@1370
|
1059 }
|
nickjillings@1370
|
1060 }
|
nickjillings@1370
|
1061 } else if (this.type == "show")
|
nickjillings@1370
|
1062 {
|
nickjillings@1370
|
1063 for (node of interface.children[1].attributes)
|
nickjillings@1370
|
1064 {
|
nickjillings@1370
|
1065 if (node.name == this.name) {
|
nickjillings@1370
|
1066 if (this.input.checked) {
|
nickjillings@1370
|
1067 node.input.disabled = true;
|
nickjillings@1370
|
1068 } else {
|
nickjillings@1370
|
1069 node.input.disabled = false;
|
nickjillings@1370
|
1070 }
|
nickjillings@1370
|
1071 break;
|
nickjillings@1370
|
1072 }
|
nickjillings@1370
|
1073 }
|
nickjillings@1370
|
1074 }
|
nickjillings@1370
|
1075 }
|
nickjillings@1370
|
1076 }
|
nickjillings@1370
|
1077 }
|
nickjillings@1370
|
1078 };
|
nickjillings@1370
|
1079 this.findIndex = function(element,index,array){
|
nickjillings@1370
|
1080 if (element.name == this.name)
|
nickjillings@1370
|
1081 return true;
|
nickjillings@1370
|
1082 else
|
nickjillings@1370
|
1083 return false;
|
nickjillings@1370
|
1084 };
|
nickjillings@1370
|
1085 this.findNode = function(element,index,array){
|
nickjillings@1370
|
1086 if (element.name == this.name)
|
nickjillings@1370
|
1087 return true;
|
nickjillings@1370
|
1088 else
|
nickjillings@1370
|
1089 return false;
|
nickjillings@1370
|
1090 };
|
nickjillings@1370
|
1091 this.input.type = "checkbox";
|
nickjillings@1370
|
1092 this.input.setAttribute("name",name);
|
nickjillings@1370
|
1093 this.input.addEventListener("change",this,false);
|
nickjillings@1370
|
1094 this.root.appendChild(this.input);
|
nickjillings@1370
|
1095 this.root.className = "attribute";
|
nickjillings@1370
|
1096 return this;
|
nickjillings@1370
|
1097 }
|
nickjillings@1370
|
1098
|
nickjillings@1370
|
1099 this.build = function(name,id,parent)
|
nickjillings@1370
|
1100 {
|
nickjillings@1370
|
1101 var obj = this.parent.createGeneralNodeDOM(name,id,parent);
|
nickjillings@1370
|
1102
|
nickjillings@1370
|
1103 this.rootDOM = obj.rootDOM;
|
nickjillings@1370
|
1104 this.titleDOM = obj.titleDOM;
|
nickjillings@1370
|
1105 this.attributeDOM = obj.attributeDOM;
|
nickjillings@1370
|
1106 this.childrenDOM = obj.childrenDOM;
|
nickjillings@1370
|
1107 this.buttonDOM = obj.buttonsDOM;
|
nickjillings@1370
|
1108 this.HTMLPoint = parent;
|
nickjillings@1370
|
1109 this.rootDOM.removeChild(this.attributeDOM);
|
nickjillings@1370
|
1110 // Put in the check / show options as individual children
|
nickjillings@1370
|
1111 var checks = this.parent.createGeneralNodeDOM("Checks","setup-interface-checks",this);
|
nickjillings@1370
|
1112
|
nickjillings@1370
|
1113 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1114 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
1115 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1116 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
1117 testXML = testXML.getAllElementsByTagName("checks");
|
nickjillings@1370
|
1118 for (var i=0; i<interfaceXML.children.length; i++)
|
nickjillings@1370
|
1119 {
|
nickjillings@1370
|
1120 var obj = new this.createIOasAttr(interfaceXML.children[i].getAttribute("name"),this.specification,this,"check");
|
nickjillings@1370
|
1121 for (var option of this.specification.options)
|
nickjillings@1370
|
1122 {
|
nickjillings@1370
|
1123 if (option.name == obj.name)
|
nickjillings@1370
|
1124 {
|
nickjillings@1370
|
1125 obj.input.checked = true;
|
nickjillings@1370
|
1126 break;
|
nickjillings@1370
|
1127 }
|
nickjillings@1370
|
1128 }
|
nickjillings@1370
|
1129 if (parent.id != "setup") {
|
nickjillings@1370
|
1130 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
|
nickjillings@1370
|
1131 if (node.input.checked) {
|
nickjillings@1370
|
1132 obj.input.checked = false;
|
nickjillings@1370
|
1133 obj.input.disable = true;
|
nickjillings@1370
|
1134 }
|
nickjillings@1370
|
1135 }
|
nickjillings@1370
|
1136 var text = document.createElement('span');
|
nickjillings@1370
|
1137 text.textContent = checkText.children[i].textContent;
|
nickjillings@1370
|
1138 obj.root.appendChild(text);
|
nickjillings@1370
|
1139 checks.attributeDOM.appendChild(obj.root);
|
nickjillings@1370
|
1140 checks.attributes.push(obj);
|
nickjillings@1370
|
1141 }
|
nickjillings@1370
|
1142 this.children.push(checks);
|
nickjillings@1370
|
1143 this.childrenDOM.appendChild(checks.rootDOM);
|
nickjillings@1370
|
1144
|
nickjillings@1370
|
1145 var show = this.parent.createGeneralNodeDOM("Show","setup-interface-show",this);
|
nickjillings@1370
|
1146 interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1147 checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
1148 testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1149 interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
1150 testXML = testXML.getAllElementsByTagName("show");
|
nickjillings@1370
|
1151 for (var i=0; i<interfaceXML.children.length; i++)
|
nickjillings@1370
|
1152 {
|
nickjillings@1370
|
1153 var obj = new this.createIOasAttr(interfaceXML.children[i].getAttribute("name"),this.specification,this,"show");
|
nickjillings@1370
|
1154 for (var option of this.specification.options)
|
nickjillings@1370
|
1155 {
|
nickjillings@1370
|
1156 if (option.name == obj.name)
|
nickjillings@1370
|
1157 {
|
nickjillings@1370
|
1158 obj.input.checked = true;
|
nickjillings@1370
|
1159 break;
|
nickjillings@1370
|
1160 }
|
nickjillings@1370
|
1161 }
|
nickjillings@1370
|
1162 if (parent.id != "setup") {
|
nickjillings@1370
|
1163 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
|
nickjillings@1370
|
1164 if (node.input.checked) {
|
nickjillings@1370
|
1165 obj.input.checked = false;
|
nickjillings@1370
|
1166 obj.input.disable = true;
|
nickjillings@1370
|
1167 }
|
nickjillings@1370
|
1168 }
|
nickjillings@1370
|
1169 var text = document.createElement('span');
|
nickjillings@1370
|
1170 text.textContent = checkText.children[i].textContent;
|
nickjillings@1370
|
1171 obj.root.appendChild(text);
|
nickjillings@1370
|
1172 show.attributeDOM.appendChild(obj.root);
|
nickjillings@1370
|
1173 show.attributes.push(obj);
|
nickjillings@1370
|
1174 }
|
nickjillings@1370
|
1175 this.children.push(show);
|
nickjillings@1370
|
1176 this.childrenDOM.appendChild(show.rootDOM);
|
nickjillings@1370
|
1177
|
nickjillings@1370
|
1178 if (parent.id == "setup")
|
nickjillings@1370
|
1179 {
|
nickjillings@1370
|
1180 } else {
|
nickjillings@1370
|
1181 var nameAttr = this.parent.convertAttributeToDOM(this,specification.schema.getAllElementsByName("name")[0]);
|
nickjillings@1370
|
1182 this.attributeDOM.appendChild(nameAttr.holder);
|
nickjillings@1370
|
1183 this.attributes.push(nameAttr);
|
nickjillings@1370
|
1184 }
|
nickjillings@1370
|
1185 if (parent != undefined)
|
nickjillings@1370
|
1186 {
|
nickjillings@1370
|
1187 parent.appendChild(this.rootDOM);
|
nickjillings@1370
|
1188 }
|
nickjillings@1370
|
1189 }
|
nickjillings@1370
|
1190 }
|
nickjillings@1370
|
1191
|
nickjillings@1370
|
1192 this.surveyNode = function(parent,rootObject,location)
|
nickjillings@1370
|
1193 {
|
nickjillings@1370
|
1194 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1195 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1196 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1197 this.attributes = [];
|
nickjillings@1370
|
1198 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1199 this.children = [];
|
nickjillings@1370
|
1200 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1201 this.parent = parent;
|
nickjillings@1370
|
1202 this.specification = rootObject;
|
nickjillings@1370
|
1203 this.schema = specification.schema.getAllElementsByName("survey")[1];
|
nickjillings@1370
|
1204 this.rootDOM.className = "node";
|
nickjillings@1370
|
1205
|
nickjillings@1370
|
1206 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1207 titleDiv.className = "node-title";
|
nickjillings@1370
|
1208 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1209 this.titleDOM.textContent = "Survey";
|
nickjillings@1370
|
1210 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1211
|
nickjillings@1370
|
1212 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1213 var locationAttr = document.createElement("span");
|
nickjillings@1370
|
1214 this.attributeDOM.appendChild(locationAttr);
|
nickjillings@1370
|
1215 if (location == "Pre" || location == "pre") {
|
nickjillings@1370
|
1216 locationAttr.textContent = "Location: Before";
|
nickjillings@1370
|
1217 } else {
|
nickjillings@1370
|
1218 locationAttr.textContent = "Location: After";
|
nickjillings@1370
|
1219 }
|
nickjillings@1370
|
1220 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1221 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1222
|
nickjillings@1370
|
1223 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1224 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1225 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1226 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1227
|
nickjillings@1370
|
1228 this.surveyEntryNode = function(parent,rootObject)
|
nickjillings@1370
|
1229 {
|
nickjillings@1370
|
1230 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1231 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1232 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1233 this.attributes = [];
|
nickjillings@1370
|
1234 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1235 this.children = [];
|
nickjillings@1370
|
1236 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1237 this.parent = parent;
|
nickjillings@1370
|
1238 this.specification = rootObject;
|
nickjillings@1370
|
1239 this.schema = specification.schema.getAllElementsByName("surveyentry")[1];
|
nickjillings@1370
|
1240
|
nickjillings@1370
|
1241 this.rootDOM.id = id;
|
nickjillings@1370
|
1242 this.rootDOM.className = "node";
|
nickjillings@1370
|
1243 this.rootDOM.style.minWidth = "50%";
|
nickjillings@1370
|
1244
|
nickjillings@1370
|
1245 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1246 titleDiv.className = "node-title";
|
nickjillings@1370
|
1247 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1248 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1249
|
nickjillings@1370
|
1250 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1251 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1252 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1253
|
nickjillings@1370
|
1254 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1255 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1256 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1257 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1258
|
nickjillings@1370
|
1259 var statement = {};
|
nickjillings@1370
|
1260 statement.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1261 statement.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1262 statement.titleDOM.textContent = "Statement/Question";
|
nickjillings@1370
|
1263 statement.input = document.createElement("textarea");
|
nickjillings@1370
|
1264 statement.input.value = this.specification.statement;
|
nickjillings@1370
|
1265 statement.specification = this.specification;
|
nickjillings@1370
|
1266 statement.handleEvent = function() {
|
nickjillings@1370
|
1267 this.specification.statement = this.input.value;
|
nickjillings@1370
|
1268 }
|
nickjillings@1370
|
1269 statement.input.addEventListener("change",statement,false);
|
nickjillings@1370
|
1270 statement.rootDOM.appendChild(statement.titleDOM);
|
nickjillings@1370
|
1271 statement.rootDOM.appendChild(statement.input);
|
nickjillings@1370
|
1272 this.children.push(statement);
|
nickjillings@1370
|
1273 this.childrenDOM.appendChild(statement.rootDOM);
|
nickjillings@1370
|
1274 switch(this.specification.type)
|
nickjillings@1370
|
1275 {
|
nickjillings@1370
|
1276 case "statement":
|
nickjillings@1370
|
1277 this.titleDOM.textContent = "Statement";
|
nickjillings@1370
|
1278 this.rootDOM.removeChild(this.attributeDOM);
|
nickjillings@1370
|
1279 break;
|
nickjillings@1370
|
1280 case "question":
|
nickjillings@1370
|
1281 var id = convert.convertAttributeToDOM(this.specification.id,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1370
|
1282 var mandatory = convert.convertAttributeToDOM(this.specification.mandatory,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1370
|
1283 var boxsize = convert.convertAttributeToDOM(this.specification.mandatory,specification.schema.getAllElementsByName("boxsize")[0]);
|
nickjillings@1370
|
1284 break;
|
nickjillings@1370
|
1285 }
|
nickjillings@1370
|
1286
|
nickjillings@1370
|
1287 this.editNode = {
|
nickjillings@1370
|
1288 root: document.createElement("button"),
|
nickjillings@1370
|
1289 parent: this,
|
nickjillings@1370
|
1290 handleEvent: function()
|
nickjillings@1370
|
1291 {
|
nickjillings@1370
|
1292 popupObject.show();
|
nickjillings@1370
|
1293 popupStateNodes.state[5].generate(this,this.parent);
|
nickjillings@1370
|
1294 popupObject.postNode(popupStateNodes.state[5]);
|
nickjillings@1370
|
1295 }
|
nickjillings@1370
|
1296 }
|
nickjillings@1370
|
1297 this.editNode.root.textContent = "Edit Entry";
|
nickjillings@1370
|
1298 this.editNode.root.addEventListener("click",this.editNode,false);
|
nickjillings@1370
|
1299 this.buttonDOM.appendChild(this.editNode.root);
|
nickjillings@1370
|
1300
|
nickjillings@1370
|
1301 this.deleteNode = {
|
nickjillings@1370
|
1302 root: document.createElement("button"),
|
nickjillings@1370
|
1303 parent: this,
|
nickjillings@1370
|
1304 handleEvent: function()
|
nickjillings@1370
|
1305 {
|
nickjillings@1370
|
1306 var optionList = this.parent.parent.specification.options;
|
nickjillings@1370
|
1307 var childList = this.parent.parent.children;
|
nickjillings@1370
|
1308 for (var i=0; i <this.parent.parent.specification.options.length; i++)
|
nickjillings@1370
|
1309 {
|
nickjillings@1370
|
1310 var option = this.parent.parent.specification.options[i];
|
nickjillings@1370
|
1311 if (option == this.parent.specification)
|
nickjillings@1370
|
1312 {
|
nickjillings@1370
|
1313 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
|
nickjillings@1370
|
1314 if (i == this.parent.parent.specification.options.length-1)
|
nickjillings@1370
|
1315 {
|
nickjillings@1370
|
1316 optionList = optionList.slice(0,i);
|
nickjillings@1370
|
1317 childList = childList.slice(0,i);
|
nickjillings@1370
|
1318 }
|
nickjillings@1370
|
1319 else {
|
nickjillings@1370
|
1320 optionList = optionList.slice(0,i).concat(optionList.slice(i+1));
|
nickjillings@1370
|
1321 childList = childList.slice(0,i).concat(childList.slice(i+1));
|
nickjillings@1370
|
1322 }
|
nickjillings@1370
|
1323 this.parent.parent.specification.options = optionList;
|
nickjillings@1370
|
1324 this.parent.parent.children = childList;
|
nickjillings@1370
|
1325 }
|
nickjillings@1370
|
1326 }
|
nickjillings@1370
|
1327 }
|
nickjillings@1370
|
1328 }
|
nickjillings@1370
|
1329 this.deleteNode.root.textContent = "Delete Entry";
|
nickjillings@1370
|
1330 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
|
nickjillings@1370
|
1331 this.buttonDOM.appendChild(this.deleteNode.root);
|
nickjillings@1370
|
1332 }
|
nickjillings@1370
|
1333 this.addNode = {
|
nickjillings@1370
|
1334 root: document.createElement("button"),
|
nickjillings@1370
|
1335 parent: this,
|
nickjillings@1370
|
1336 handleEvent: function()
|
nickjillings@1370
|
1337 {
|
nickjillings@1370
|
1338 var newNode = new this.parent.specification.OptionNode();
|
nickjillings@1370
|
1339 this.parent.specification.options.push(newNode);
|
nickjillings@1370
|
1340 popupObject.show();
|
nickjillings@1370
|
1341 popupStateNodes.state[5].generate(newNode,this.parent);
|
nickjillings@1370
|
1342 popupObject.postNode(popupStateNodes.state[5]);
|
nickjillings@1370
|
1343 }
|
nickjillings@1370
|
1344 }
|
nickjillings@1370
|
1345 this.addNode.root.textContent = "Add Survey Entry";
|
nickjillings@1370
|
1346 this.addNode.root.addEventListener("click",this.addNode,false);
|
nickjillings@1370
|
1347 this.buttonDOM.appendChild(this.addNode.root);
|
nickjillings@1370
|
1348
|
nickjillings@1370
|
1349 for (var option of this.specification.options)
|
nickjillings@1370
|
1350 {
|
nickjillings@1370
|
1351 var newNode = new this.surveyEntryNode(this,option);
|
nickjillings@1370
|
1352 this.children.push(newNode);
|
nickjillings@1370
|
1353 this.childrenDOM.appendChild(newNode.rootDOM);
|
nickjillings@1370
|
1354 }
|
nickjillings@1370
|
1355 }
|
nickjillings@1370
|
1356
|
nickjillings@1370
|
1357 this.pageNode = function(parent,rootObject)
|
nickjillings@1370
|
1358 {
|
nickjillings@1370
|
1359 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1360 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1361 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1362 this.attributes = [];
|
nickjillings@1370
|
1363 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1364 this.children = [];
|
nickjillings@1370
|
1365 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1366 this.parent = parent;
|
nickjillings@1370
|
1367 this.specification = rootObject;
|
nickjillings@1370
|
1368 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1370
|
1369 this.rootDOM.className = "node";
|
nickjillings@1370
|
1370
|
nickjillings@1370
|
1371 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1372 titleDiv.className = "node-title";
|
nickjillings@1370
|
1373 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1374 this.titleDOM.textContent = "Test Page";
|
nickjillings@1370
|
1375 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1376
|
nickjillings@1370
|
1377 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1378 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1379 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1380
|
nickjillings@1370
|
1381 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1382 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1383 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1384 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1385
|
nickjillings@1370
|
1386 // Do the comment prefix node
|
nickjillings@1370
|
1387 var cpn = this.parent.createGeneralNodeDOM("Comment Prefix",""+this.specification.id+"-commentprefix",this.parent);
|
nickjillings@1370
|
1388 cpn.rootDOM.removeChild(cpn.attributeDOM);
|
nickjillings@1370
|
1389 var obj = {
|
nickjillings@1370
|
1390 root: document.createElement("div"),
|
nickjillings@1370
|
1391 input: document.createElement("input"),
|
nickjillings@1370
|
1392 parent: this,
|
nickjillings@1370
|
1393 handleEvent: function()
|
nickjillings@1370
|
1394 {
|
nickjillings@1370
|
1395 this.parent.specification.commentBoxPrefix = event.currentTarget.value;
|
nickjillings@1370
|
1396 }
|
nickjillings@1370
|
1397 }
|
nickjillings@1370
|
1398 cpn.children.push(obj);
|
nickjillings@1370
|
1399 cpn.childrenDOM.appendChild(obj.root);
|
nickjillings@1370
|
1400 obj.root.appendChild(obj.input);
|
nickjillings@1370
|
1401 obj.input.addEventListener("change",obj,false);
|
nickjillings@1370
|
1402 obj.input.value = this.specification.commentBoxPrefix;
|
nickjillings@1370
|
1403 this.childrenDOM.appendChild(cpn.rootDOM);
|
nickjillings@1370
|
1404 this.children.push(cpn);
|
nickjillings@1370
|
1405
|
nickjillings@1370
|
1406 // Now both before and after surveys
|
nickjillings@1370
|
1407 if (this.specification.preTest == undefined){
|
nickjillings@1370
|
1408 this.specification.preTest = new specification.surveyNode();
|
nickjillings@1370
|
1409 this.specification.preTest.location = "pre";
|
nickjillings@1370
|
1410 }
|
nickjillings@1370
|
1411 if (this.specification.postTest == undefined){
|
nickjillings@1370
|
1412 this.specification.postTest = new specification.surveyNode();
|
nickjillings@1370
|
1413 this.specification.postTest.location = "post";
|
nickjillings@1370
|
1414 }
|
nickjillings@1370
|
1415 var surveyBefore = new this.parent.surveyNode(this,this.specification.preTest,"Pre");
|
nickjillings@1370
|
1416 var surveyAfter = new this.parent.surveyNode(this,this.specification.postTest,"Post");
|
nickjillings@1370
|
1417 this.children.push(surveyBefore);
|
nickjillings@1370
|
1418 this.children.push(surveyAfter);
|
nickjillings@1370
|
1419 this.childrenDOM.appendChild(surveyBefore.rootDOM);
|
nickjillings@1370
|
1420 this.childrenDOM.appendChild(surveyAfter.rootDOM);
|
nickjillings@1370
|
1421
|
nickjillings@1370
|
1422 // Build the attributes
|
nickjillings@1370
|
1423 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
|
nickjillings@1370
|
1424 for (var i=0; i<attributeList.length; i++)
|
nickjillings@1370
|
1425 {
|
nickjillings@1370
|
1426 var attributeName = attributeList[i].getAttribute('name');
|
nickjillings@1370
|
1427 var attrObject = this.parent.convertAttributeToDOM(rootObject,attributeList[i]);
|
nickjillings@1370
|
1428 this.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
1429 this.attributes.push(attrObject);
|
nickjillings@1370
|
1430 }
|
nickjillings@1370
|
1431
|
nickjillings@1370
|
1432 this.interfaces = [];
|
nickjillings@1370
|
1433
|
nickjillings@1370
|
1434 this.audioElementNode = function(parent,rootObject)
|
nickjillings@1370
|
1435 {
|
nickjillings@1370
|
1436 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1437 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1438 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1439 this.attributes = [];
|
nickjillings@1370
|
1440 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1441 this.children = [];
|
nickjillings@1370
|
1442 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1443 this.parent = parent;
|
nickjillings@1370
|
1444 this.specification = rootObject;
|
nickjillings@1370
|
1445 this.schema = specification.schema.getAllElementsByName("audioelement")[0];
|
nickjillings@1370
|
1446 this.rootDOM.className = "node";
|
nickjillings@1370
|
1447
|
nickjillings@1370
|
1448 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1449 titleDiv.className = "node-title";
|
nickjillings@1370
|
1450 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1451 this.titleDOM.textContent = "Audio Element";
|
nickjillings@1370
|
1452 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1453
|
nickjillings@1370
|
1454 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1455 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1456 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1457
|
nickjillings@1370
|
1458 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1459 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1460 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1461 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1462
|
nickjillings@1370
|
1463 // Build the attributes
|
nickjillings@1370
|
1464 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
|
nickjillings@1370
|
1465 for (var i=0; i<attributeList.length; i++)
|
nickjillings@1370
|
1466 {
|
nickjillings@1370
|
1467 var attributeName = attributeList[i].getAttribute('name');
|
nickjillings@1370
|
1468 var attrObject = this.parent.parent.convertAttributeToDOM(rootObject,attributeList[i]);
|
nickjillings@1370
|
1469 this.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
1470 this.attributes.push(attrObject);
|
nickjillings@1370
|
1471 }
|
nickjillings@1370
|
1472
|
nickjillings@1370
|
1473 this.deleteNode = {
|
nickjillings@1370
|
1474 root: document.createElement("button"),
|
nickjillings@1370
|
1475 parent: this,
|
nickjillings@1370
|
1476 handleEvent: function()
|
nickjillings@1370
|
1477 {
|
nickjillings@1370
|
1478 var i = this.parent.parent.specification.audioElements.findIndex(this.findNode,this);
|
nickjillings@1370
|
1479 if (i >= 0) {
|
nickjillings@1370
|
1480 var aeList = this.parent.parent.specification.audioElements;
|
nickjillings@1370
|
1481 if (i < aeList.length-1) {
|
nickjillings@1370
|
1482 aeList = aeList.slice(0,i).concat(aeList.slice(i+1));
|
nickjillings@1370
|
1483 } else {
|
nickjillings@1370
|
1484 aeList = aeList.slice(0,i);
|
nickjillings@1370
|
1485 }
|
nickjillings@1370
|
1486 }
|
nickjillings@1370
|
1487 i = this.parent.parent.children.findIndex(function(element,index,array){
|
nickjillings@1370
|
1488 if (element == this.parent)
|
nickjillings@1370
|
1489 return true;
|
nickjillings@1370
|
1490 else
|
nickjillings@1370
|
1491 return false;
|
nickjillings@1370
|
1492 },this);
|
nickjillings@1370
|
1493 if (i >= 0) {
|
nickjillings@1370
|
1494 var childList = this.parent.children;
|
nickjillings@1370
|
1495 if (i < aeList.length-1) {
|
nickjillings@1370
|
1496 childList = childList.slice(0,i).concat(childList.slice(i+1));
|
nickjillings@1370
|
1497 } else {
|
nickjillings@1370
|
1498 childList = childList.slice(0,i);
|
nickjillings@1370
|
1499 }
|
nickjillings@1370
|
1500 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
|
nickjillings@1370
|
1501 }
|
nickjillings@1370
|
1502 },
|
nickjillings@1370
|
1503 findNode: function(element,index,array){
|
nickjillings@1370
|
1504 if (element == this.parent.specification)
|
nickjillings@1370
|
1505 return true;
|
nickjillings@1370
|
1506 else
|
nickjillings@1370
|
1507 return false;
|
nickjillings@1370
|
1508 }
|
nickjillings@1370
|
1509 }
|
nickjillings@1370
|
1510 this.deleteNode.root.textContent = "Delete Entry";
|
nickjillings@1370
|
1511 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
|
nickjillings@1370
|
1512 this.buttonDOM.appendChild(this.deleteNode.root);
|
nickjillings@1370
|
1513 }
|
nickjillings@1370
|
1514
|
nickjillings@1370
|
1515 this.commentQuestionNode = function(parent,rootObject)
|
nickjillings@1370
|
1516 {
|
nickjillings@1370
|
1517 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1518 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1519 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1520 this.attributes = [];
|
nickjillings@1370
|
1521 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1522 this.children = [];
|
nickjillings@1370
|
1523 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1524 this.parent = parent;
|
nickjillings@1370
|
1525 this.specification = rootObject;
|
nickjillings@1370
|
1526 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1370
|
1527 this.rootDOM.className = "node";
|
nickjillings@1370
|
1528
|
nickjillings@1370
|
1529 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1530 titleDiv.className = "node-title";
|
nickjillings@1370
|
1531 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1532 this.titleDOM.textContent = "Test Page";
|
nickjillings@1370
|
1533 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1534
|
nickjillings@1370
|
1535 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1536 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1537 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1538
|
nickjillings@1370
|
1539 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1540 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1541 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1542 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1543
|
nickjillings@1370
|
1544 }
|
nickjillings@1370
|
1545
|
nickjillings@1370
|
1546 this.addInterface = {
|
nickjillings@1370
|
1547 root: document.createElement("button"),
|
nickjillings@1370
|
1548 parent: this,
|
nickjillings@1370
|
1549 handleEvent: function() {
|
nickjillings@1370
|
1550 var InterfaceObj = new specification.interfaceNode();
|
nickjillings@1370
|
1551 var newInterface = new this.parent.parent.interfaceNode(this.parent.parent,InterfaceObj);
|
nickjillings@1370
|
1552 newInterface.build("Interface",""+this.parent.specification.id+"-interface",this.parent.childrenDOM);
|
nickjillings@1370
|
1553 this.parent.children.push(newInterface);
|
nickjillings@1370
|
1554 this.parent.specification.interfaces.push(InterfaceObj);
|
nickjillings@1370
|
1555 this.parent.interfaces.push(newInterface);
|
nickjillings@1370
|
1556 }
|
nickjillings@1370
|
1557 }
|
nickjillings@1370
|
1558 this.addInterface.root.textContent = "Add Interface";
|
nickjillings@1370
|
1559 this.addInterface.root.addEventListener("click",this.addInterface,false);
|
nickjillings@1370
|
1560 this.buttonDOM.appendChild(this.addInterface.root);
|
nickjillings@1370
|
1561
|
nickjillings@1370
|
1562 this.addAudioElement = {
|
nickjillings@1370
|
1563 root: document.createElement("button"),
|
nickjillings@1370
|
1564 parent: this,
|
nickjillings@1370
|
1565 handleEvent: function() {
|
nickjillings@1370
|
1566 var audioElementObject = new this.parent.specification.audioElementNode();
|
nickjillings@1370
|
1567 var audioElementDOM = new this.parent.audioElementNode(this.parent,audioElementObject);
|
nickjillings@1370
|
1568 this.parent.specification.audioElements.push(audioElementObject);
|
nickjillings@1370
|
1569 this.parent.children.push(audioElementDOM);
|
nickjillings@1370
|
1570 this.parent.childrenDOM.appendChild(audioElementDOM.rootDOM);
|
nickjillings@1370
|
1571 }
|
nickjillings@1370
|
1572 }
|
nickjillings@1370
|
1573 this.addAudioElement.root.textContent = "Add Audio Element";
|
nickjillings@1370
|
1574 this.addAudioElement.root.addEventListener("click",this.addAudioElement,false);
|
nickjillings@1370
|
1575 this.buttonDOM.appendChild(this.addAudioElement.root);
|
nickjillings@1370
|
1576 }
|
nickjillings@1370
|
1577 } |