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