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;
|
nicholas@2355
|
8 var page_lang = "en";
|
nickjillings@1370
|
9
|
nickjillings@1370
|
10 // Firefox does not have an XMLDocument.prototype.getElementsByName
|
nickjillings@1370
|
11 // and there is no searchAll style command, this custom function will
|
nickjillings@1370
|
12 // search all children recusrively for the name. Used for XSD where all
|
nickjillings@1370
|
13 // element nodes must have a name and therefore can pull the schema node
|
nickjillings@1370
|
14 XMLDocument.prototype.getAllElementsByName = function(name)
|
nickjillings@1370
|
15 {
|
nickjillings@1370
|
16 name = String(name);
|
nickjillings@1370
|
17 var selected = this.documentElement.getAllElementsByName(name);
|
nickjillings@1370
|
18 return selected;
|
nickjillings@1370
|
19 }
|
nickjillings@1370
|
20
|
nickjillings@1370
|
21 Element.prototype.getAllElementsByName = function(name)
|
nickjillings@1370
|
22 {
|
nickjillings@1370
|
23 name = String(name);
|
nickjillings@1370
|
24 var selected = [];
|
nickjillings@1370
|
25 var node = this.firstElementChild;
|
nickjillings@1370
|
26 while(node != null)
|
nickjillings@1370
|
27 {
|
nickjillings@1370
|
28 if (node.getAttribute('name') == name)
|
nickjillings@1370
|
29 {
|
nickjillings@1370
|
30 selected.push(node);
|
nickjillings@1370
|
31 }
|
nickjillings@1370
|
32 if (node.childElementCount > 0)
|
nickjillings@1370
|
33 {
|
nickjillings@1370
|
34 selected = selected.concat(node.getAllElementsByName(name));
|
nickjillings@1370
|
35 }
|
nickjillings@1370
|
36 node = node.nextElementSibling;
|
nickjillings@1370
|
37 }
|
nickjillings@1370
|
38 return selected;
|
nickjillings@1370
|
39 }
|
nickjillings@1370
|
40
|
nickjillings@1370
|
41 XMLDocument.prototype.getAllElementsByTagName = function(name)
|
nickjillings@1370
|
42 {
|
nickjillings@1370
|
43 name = String(name);
|
nickjillings@1370
|
44 var selected = this.documentElement.getAllElementsByTagName(name);
|
nickjillings@1370
|
45 return selected;
|
nickjillings@1370
|
46 }
|
nickjillings@1370
|
47
|
nickjillings@1370
|
48 Element.prototype.getAllElementsByTagName = function(name)
|
nickjillings@1370
|
49 {
|
nickjillings@1370
|
50 name = String(name);
|
nickjillings@1370
|
51 var selected = [];
|
nickjillings@1370
|
52 var node = this.firstElementChild;
|
nickjillings@1370
|
53 while(node != null)
|
nickjillings@1370
|
54 {
|
nickjillings@1370
|
55 if (node.nodeName == name)
|
nickjillings@1370
|
56 {
|
nickjillings@1370
|
57 selected.push(node);
|
nickjillings@1370
|
58 }
|
nickjillings@1370
|
59 if (node.childElementCount > 0)
|
nickjillings@1370
|
60 {
|
nickjillings@1370
|
61 selected = selected.concat(node.getAllElementsByTagName(name));
|
nickjillings@1370
|
62 }
|
nickjillings@1370
|
63 node = node.nextElementSibling;
|
nickjillings@1370
|
64 }
|
nickjillings@1370
|
65 return selected;
|
nickjillings@1370
|
66 }
|
nickjillings@1370
|
67
|
nickjillings@1370
|
68 // Firefox does not have an XMLDocument.prototype.getElementsByName
|
nickjillings@1370
|
69 if (typeof XMLDocument.prototype.getElementsByName != "function") {
|
nickjillings@1370
|
70 XMLDocument.prototype.getElementsByName = function(name)
|
nickjillings@1370
|
71 {
|
nickjillings@1370
|
72 name = String(name);
|
nickjillings@1370
|
73 var node = this.documentElement.firstElementChild;
|
nickjillings@1370
|
74 var selected = [];
|
nickjillings@1370
|
75 while(node != null)
|
nickjillings@1370
|
76 {
|
nickjillings@1370
|
77 if (node.getAttribute('name') == name)
|
nickjillings@1370
|
78 {
|
nickjillings@1370
|
79 selected.push(node);
|
nickjillings@1370
|
80 }
|
nickjillings@1370
|
81 node = node.nextElementSibling;
|
nickjillings@1370
|
82 }
|
nickjillings@1370
|
83 return selected;
|
nickjillings@1370
|
84 }
|
nickjillings@1370
|
85 }
|
nickjillings@1370
|
86
|
nickjillings@1370
|
87 window.onload = function()
|
nickjillings@1370
|
88 {
|
nickjillings@1370
|
89 specification = new Specification();
|
nickjillings@1370
|
90 convert = new SpecificationToHTML();
|
nickjillings@1370
|
91 xmlHttp = new XMLHttpRequest();
|
nicholas@2224
|
92 xmlHttp.open("GET","test_create/interface-specs.xml",true);
|
nickjillings@1370
|
93 xmlHttp.onload = function()
|
nickjillings@1370
|
94 {
|
nickjillings@1370
|
95 var parse = new DOMParser();
|
nickjillings@1370
|
96 interfaceSpecs = parse.parseFromString(xmlHttp.response,'text/xml');
|
nickjillings@1370
|
97 buildPage();
|
nickjillings@1370
|
98 popupObject.postNode(popupStateNodes.state[0])
|
nickjillings@1370
|
99 }
|
nickjillings@1370
|
100 xmlHttp.send();
|
nickjillings@1370
|
101
|
nickjillings@1370
|
102 var xsdGet = new XMLHttpRequest();
|
nicholas@2224
|
103 xsdGet.open("GET","xml/test-schema.xsd",true);
|
nickjillings@1370
|
104 xsdGet.onload = function()
|
nickjillings@1370
|
105 {
|
nickjillings@1370
|
106 var parse = new DOMParser();
|
nickjillings@1370
|
107 specification.schema = parse.parseFromString(xsdGet.response,'text/xml');;
|
nickjillings@1370
|
108 }
|
nickjillings@1370
|
109 xsdGet.send();
|
nickjillings@1370
|
110
|
nickjillings@1370
|
111 var jsonAttribute = new XMLHttpRequest();
|
nicholas@2224
|
112 jsonAttribute.open("GET","test_create/attributes.json",true);
|
nickjillings@1370
|
113 jsonAttribute.onload = function()
|
nickjillings@1370
|
114 {
|
nickjillings@1370
|
115 attributeText = JSON.parse(jsonAttribute.response)
|
nickjillings@1370
|
116 }
|
nickjillings@1370
|
117 jsonAttribute.send();
|
nickjillings@1370
|
118 }
|
nickjillings@1370
|
119
|
nickjillings@1370
|
120 function buildPage()
|
nickjillings@1370
|
121 {
|
nickjillings@1370
|
122 popupObject = new function() {
|
nickjillings@1370
|
123 this.object = document.getElementById("popupHolder");
|
nickjillings@1370
|
124 this.blanket = document.getElementById("blanket");
|
nickjillings@1370
|
125
|
nickjillings@1370
|
126 this.popupTitle = document.createElement("div");
|
nickjillings@1370
|
127 this.popupTitle.id = "popup-title-holder";
|
nickjillings@1370
|
128 this.popupTitle.align = "center";
|
nickjillings@1370
|
129 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
130 this.titleDOM.id = "popup-title";
|
nickjillings@1370
|
131 this.popupTitle.appendChild(this.titleDOM);
|
nickjillings@1370
|
132 this.object.appendChild(this.popupTitle);
|
nickjillings@1370
|
133
|
nickjillings@1370
|
134 this.popupContent = document.createElement("div");
|
nickjillings@1370
|
135 this.popupContent.id = "popup-content";
|
nickjillings@1370
|
136 this.object.appendChild(this.popupContent);
|
nickjillings@1370
|
137
|
nickjillings@1370
|
138 this.proceedButton = document.createElement("button");
|
nickjillings@1370
|
139 this.proceedButton.id = "popup-proceed";
|
nickjillings@2108
|
140 this.proceedButton.className = "popup-button";
|
nickjillings@1370
|
141 this.proceedButton.textContent = "Next";
|
nickjillings@1370
|
142 this.proceedButton.onclick = function()
|
nickjillings@1370
|
143 {
|
nickjillings@1370
|
144 popupObject.popupContent.innerHTML = null;
|
nickjillings@2110
|
145 if(typeof popupObject.shownObject.continue == "function") {
|
nickjillings@2110
|
146 popupObject.shownObject.continue();
|
nickjillings@2110
|
147 } else {
|
nickjillings@2110
|
148 popupObject.hide();
|
nickjillings@2110
|
149 }
|
nickjillings@1370
|
150 };
|
nickjillings@1370
|
151 this.object.appendChild(this.proceedButton);
|
nickjillings@1370
|
152
|
nickjillings@2108
|
153 this.backButton = document.createElement("button");
|
nickjillings@2108
|
154 this.backButton.id = "popup-back";
|
nickjillings@2108
|
155 this.backButton.className = "popup-button";
|
nickjillings@2108
|
156 this.backButton.textContent = "Back";
|
nickjillings@2108
|
157 this.backButton.onclick = function()
|
nickjillings@2108
|
158 {
|
nickjillings@2108
|
159 popupObject.popupContent.innerHTML = null;
|
nickjillings@2108
|
160 popupObject.shownObject.back();
|
nickjillings@2108
|
161 };
|
nickjillings@2108
|
162 this.object.appendChild(this.backButton);
|
nickjillings@2108
|
163
|
nickjillings@1370
|
164 this.shownObject;
|
nickjillings@1370
|
165
|
nickjillings@1370
|
166 this.resize = function()
|
nickjillings@1370
|
167 {
|
nickjillings@1370
|
168 var w = window.innerWidth;
|
nickjillings@1370
|
169 var h = window.innerHeight;
|
nickjillings@1370
|
170 this.object.style.left = Math.floor((w-750)/2) + 'px';
|
nickjillings@1370
|
171 this.object.style.top = Math.floor((h-500)/2) + 'px';
|
nickjillings@1370
|
172 }
|
nickjillings@1370
|
173
|
nickjillings@1370
|
174 this.show = function()
|
nickjillings@1370
|
175 {
|
nickjillings@1370
|
176 this.object.style.visibility = "visible";
|
nickjillings@1370
|
177 this.blanket.style.visibility = "visible";
|
nickjillings@2108
|
178 if (typeof this.shownObject.back == "function") {
|
nickjillings@2108
|
179 this.backButton.style.visibility = "visible";
|
nickjillings@2108
|
180 } else {
|
nickjillings@2108
|
181 this.backButton.style.visibility = "hidden";
|
nickjillings@2108
|
182 }
|
nickjillings@1370
|
183 }
|
nickjillings@1370
|
184
|
nickjillings@1370
|
185 this.hide = function()
|
nickjillings@1370
|
186 {
|
nickjillings@1370
|
187 this.object.style.visibility = "hidden";
|
nickjillings@1370
|
188 this.blanket.style.visibility = "hidden";
|
nickjillings@2108
|
189 this.backButton.style.visibility = "hidden";
|
nickjillings@1370
|
190 }
|
nickjillings@1370
|
191
|
nickjillings@1370
|
192 this.postNode = function(postObject)
|
nickjillings@1370
|
193 {
|
nickjillings@1370
|
194 //Passed object must have the following:
|
nickjillings@1370
|
195 // Title: text to show in the title
|
nickjillings@1370
|
196 // Content: HTML DOM to show on the page
|
nickjillings@1370
|
197 // On complete this HTML DOM is destroyed so make sure it is referenced elsewhere for processing
|
nickjillings@1370
|
198 this.titleDOM.textContent = postObject.title;
|
nickjillings@1370
|
199 this.popupContent.appendChild(postObject.content);
|
nickjillings@1370
|
200 this.shownObject = postObject;
|
nickjillings@2108
|
201 if (typeof this.shownObject.back == "function") {
|
nickjillings@2108
|
202 this.backButton.style.visibility = "visible";
|
nickjillings@2108
|
203 } else {
|
nickjillings@2108
|
204 this.backButton.style.visibility = "hidden";
|
nickjillings@2108
|
205 }
|
nickjillings@2110
|
206 if (typeof this.shownObject.continue == "function") {
|
nickjillings@2110
|
207 this.proceedButton.textContent = "Next";
|
nickjillings@2110
|
208 } else {
|
nickjillings@2110
|
209 this.proceedButton.textContent = "Finish";
|
nickjillings@2110
|
210 }
|
nickjillings@2108
|
211 this.show();
|
nickjillings@1370
|
212 }
|
nickjillings@1370
|
213
|
nickjillings@1370
|
214 this.resize();
|
nickjillings@1370
|
215 this.hide();
|
nickjillings@1370
|
216 };
|
nickjillings@1370
|
217
|
nickjillings@1370
|
218 popupStateNodes = new function()
|
nickjillings@1370
|
219 {
|
nickjillings@1370
|
220 // This defines the several popup states wanted
|
nickjillings@1370
|
221 this.state = [];
|
nickjillings@1370
|
222 this.state[0] = new function()
|
nickjillings@1370
|
223 {
|
nickjillings@1370
|
224 this.title = "Welcome";
|
nickjillings@1370
|
225 this.content = document.createElement("div");
|
nickjillings@1370
|
226 this.content.id = "state-0";
|
nickjillings@1370
|
227 var span = document.createElement("span");
|
nickjillings@1370
|
228 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
|
229 this.content.appendChild(span);
|
nickjillings@1370
|
230 this.dragArea = document.createElement("div");
|
nickjillings@1373
|
231 this.dragArea.className = "drag-area";
|
nickjillings@1373
|
232 this.dragArea.id = "project-drop";
|
nickjillings@1370
|
233 this.content.appendChild(this.dragArea);
|
nickjillings@1373
|
234
|
nickjillings@1374
|
235 this.dragArea.addEventListener('dragover',function(e){
|
nickjillings@1373
|
236 e.stopPropagation();
|
nickjillings@1373
|
237 e.preventDefault();
|
nickjillings@1373
|
238 e.dataTransfer.dropEffect = 'copy';
|
nickjillings@1373
|
239 e.currentTarget.className = "drag-area drag-over";
|
nickjillings@1373
|
240 });
|
nickjillings@1373
|
241
|
nickjillings@1373
|
242 this.dragArea.addEventListener('dragexit',function(e){
|
nickjillings@1373
|
243 e.stopPropagation();
|
nickjillings@1373
|
244 e.preventDefault();
|
nickjillings@1373
|
245 e.dataTransfer.dropEffect = 'copy';
|
nickjillings@1373
|
246 e.currentTarget.className = "drag-area";
|
nickjillings@1373
|
247 });
|
nickjillings@1373
|
248
|
nickjillings@1373
|
249 this.dragArea.addEventListener('drop',function(e){
|
nickjillings@1373
|
250 e.stopPropagation();
|
nickjillings@1373
|
251 e.preventDefault();
|
nickjillings@1373
|
252 e.currentTarget.className = "drag-area drag-dropped";
|
nickjillings@1373
|
253 var files = e.dataTransfer.files[0];
|
nickjillings@1374
|
254 var reader = new FileReader();
|
nickjillings@1374
|
255 reader.onload = function(decoded) {
|
nickjillings@1374
|
256 var parse = new DOMParser();
|
nickjillings@1374
|
257 specification.decode(parse.parseFromString(decoded.target.result,'text/xml'));
|
nickjillings@1374
|
258 popupObject.hide();
|
nickjillings@1375
|
259 popupObject.popupContent.innerHTML = null;
|
nickjillings@1374
|
260 convert.convert(document.getElementById('content'));
|
nickjillings@1374
|
261 }
|
nickjillings@1374
|
262 reader.readAsText(files);
|
nickjillings@1373
|
263 });
|
nickjillings@1373
|
264
|
nickjillings@1370
|
265
|
nickjillings@1370
|
266 this.continue = function()
|
nickjillings@1370
|
267 {
|
nickjillings@1370
|
268 popupObject.postNode(popupStateNodes.state[1]);
|
nickjillings@1370
|
269 }
|
nickjillings@1370
|
270 }
|
nickjillings@1370
|
271 this.state[1] = new function()
|
nickjillings@1370
|
272 {
|
nickjillings@1370
|
273 this.title = "Select your interface";
|
nickjillings@1370
|
274 this.content = document.createElement("div");
|
nickjillings@1370
|
275 this.content.id = "state-1";
|
nickjillings@1370
|
276 var spnH = document.createElement('div');
|
nickjillings@1370
|
277 var span = document.createElement("span");
|
nickjillings@1370
|
278 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
|
279 spnH.appendChild(span);
|
nickjillings@1370
|
280 this.content.appendChild(spnH);
|
nickjillings@1370
|
281 this.select = document.createElement("select");
|
nicholas@2355
|
282 this.content.appendChild(this.select);
|
nicholas@2355
|
283 this.description = document.createElement("p");
|
nicholas@2355
|
284 this.content.appendChild(this.description);
|
nicholas@2390
|
285 this.testsXML = interfaceSpecs.getElementsByTagName('tests')[0].getElementsByTagName('test');
|
nickjillings@1370
|
286 for (var i=0; i<this.testsXML.length; i++)
|
nickjillings@1370
|
287 {
|
nickjillings@1370
|
288 var option = document.createElement('option');
|
nickjillings@1370
|
289 option.value = this.testsXML[i].getAttribute('name');
|
nickjillings@1370
|
290 option.textContent = this.testsXML[i].getAttribute('name');
|
nickjillings@1370
|
291 this.select.appendChild(option);
|
nickjillings@1370
|
292 }
|
nicholas@2355
|
293 this.handleEvent = function(event) {
|
nicholas@2355
|
294 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(this.select.value)[0];
|
nicholas@2355
|
295 var descriptors = testXML.getAllElementsByTagName("description");
|
nicholas@2355
|
296 this.description.textContent = "";
|
nicholas@2355
|
297 for (var i=0; i<descriptors.length; i++) {
|
nicholas@2355
|
298 if (descriptors[i].getAttribute("lang") == page_lang) {
|
nicholas@2355
|
299 this.description.textContent = descriptors[i].textContent;
|
nicholas@2355
|
300 }
|
nicholas@2355
|
301 }
|
nicholas@2355
|
302 }
|
nicholas@2355
|
303 this.select.addEventListener("change",this);
|
nicholas@2355
|
304 this.handleEvent();
|
nickjillings@1370
|
305 this.continue = function()
|
nickjillings@1370
|
306 {
|
nickjillings@1370
|
307 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(this.select.value)[0];
|
nickjillings@1370
|
308 specification.interface = testXML.getAttribute("interface");
|
nickjillings@2108
|
309 if (specification.interfaces == null)
|
nickjillings@2108
|
310 {
|
nickjillings@2194
|
311 specification.interfaces = new specification.interfaceNode(specification);
|
nickjillings@2108
|
312 }
|
nickjillings@2108
|
313 if (specification.metrics == null) {
|
nickjillings@2108
|
314 specification.metrics = new specification.metricNode();
|
nickjillings@2108
|
315 }
|
nickjillings@1370
|
316 popupStateNodes.state[2].generate();
|
nickjillings@1370
|
317 popupObject.postNode(popupStateNodes.state[2]);
|
nickjillings@1370
|
318 }
|
nickjillings@2108
|
319 this.back = function() {
|
nickjillings@2108
|
320 popupObject.postNode(popupStateNodes.state[0]);
|
nickjillings@2108
|
321 }
|
nickjillings@1370
|
322 }
|
nickjillings@1370
|
323 this.state[2] = new function()
|
nickjillings@1370
|
324 {
|
nickjillings@1370
|
325 this.title = "Test Checks & Restrictions";
|
nickjillings@1370
|
326 this.content = document.createElement("div");
|
nickjillings@1370
|
327 this.content.id = "state-1";
|
nickjillings@1370
|
328 var spnH = document.createElement('div');
|
nickjillings@1370
|
329 var span = document.createElement("span");
|
nickjillings@1370
|
330 span.textContent = "Select your test checks and restrictions. Greyed out items are fixed by the test/interface and cannot be changed";
|
nickjillings@1370
|
331 spnH.appendChild(span);
|
nickjillings@1370
|
332 this.content.appendChild(spnH);
|
nickjillings@1370
|
333 var holder = document.createElement("div");
|
nickjillings@1370
|
334 this.options = [];
|
nickjillings@1370
|
335 this.testXML = null;
|
nickjillings@1370
|
336 this.interfaceXML = null;
|
nickjillings@2108
|
337 this.dynamicContent = document.createElement("div");
|
nickjillings@2108
|
338 this.content.appendChild(this.dynamicContent);
|
nickjillings@1370
|
339 this.generate = function()
|
nickjillings@1370
|
340 {
|
nickjillings@2108
|
341 this.options = [];
|
nickjillings@2108
|
342 this.dynamicContent.innerHTML = null;
|
nickjillings@1370
|
343 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
344 this.checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
345 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
346 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
347 this.testXML = this.testXML.getAllElementsByTagName("checks");
|
nicholas@2390
|
348 var interfaceXMLChildren = this.interfaceXML.getElementsByTagName('entry');
|
nicholas@2390
|
349 for (var i=0; i<interfaceXMLChildren.length; i++)
|
nickjillings@1370
|
350 {
|
nicholas@2390
|
351 var interfaceNode = interfaceXMLChildren[i];
|
nickjillings@1370
|
352 var checkName = interfaceNode.getAttribute('name');
|
nickjillings@1370
|
353 var testNode
|
nickjillings@1370
|
354 if (this.testXML.length > 0)
|
nickjillings@1370
|
355 {
|
nickjillings@1370
|
356 testNode = this.testXML[0].getAllElementsByName(checkName);
|
nickjillings@1370
|
357 if(testNode.length != 0) {testNode = testNode[0];}
|
nickjillings@1370
|
358 else {testNode = undefined;}
|
nickjillings@1370
|
359 } else {
|
nickjillings@1370
|
360 testNode = undefined;
|
nickjillings@1370
|
361 }
|
nickjillings@2108
|
362 var obj = {
|
nickjillings@2108
|
363 root: document.createElement("div"),
|
nickjillings@2109
|
364 text: document.createElement("label"),
|
nickjillings@2108
|
365 input: document.createElement("input"),
|
nickjillings@2108
|
366 parent: this,
|
nickjillings@2108
|
367 name: checkName,
|
nickjillings@2108
|
368 handleEvent: function(event) {
|
nickjillings@2108
|
369 if (this.input.checked) {
|
nickjillings@2108
|
370 // Add to specification.interfaces.option
|
nickjillings@2108
|
371 var included = specification.interfaces.options.find(function(element,index,array){
|
nickjillings@2108
|
372 if (element.name == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
373 },this);
|
nickjillings@2108
|
374 if (included == null) {
|
nickjillings@2108
|
375 specification.interfaces.options.push({type:"check",name:this.name});
|
nickjillings@2108
|
376 }
|
nickjillings@2108
|
377 } else {
|
nickjillings@2108
|
378 // Remove from specification.interfaces.option
|
nickjillings@2108
|
379 var position = specification.interfaces.options.findIndex(function(element,index,array){
|
nickjillings@2108
|
380 if (element.name == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
381 },this);
|
nickjillings@2108
|
382 if (position >= 0) {
|
nickjillings@2108
|
383 specification.interfaces.options.splice(position,1);
|
nickjillings@2108
|
384 }
|
nickjillings@2108
|
385 }
|
nickjillings@2108
|
386 }
|
nickjillings@1370
|
387 }
|
nickjillings@2108
|
388
|
nickjillings@2108
|
389 obj.input.addEventListener("click",obj);
|
nickjillings@2108
|
390 obj.root.className = "popup-checkbox";
|
nickjillings@2108
|
391 obj.input.type = "checkbox";
|
nickjillings@2109
|
392 obj.input.setAttribute('id',checkName);
|
nickjillings@2109
|
393 obj.text.setAttribute("for",checkName);
|
nickjillings@2108
|
394 obj.text.textContent = this.checkText.getAllElementsByName(checkName)[0].textContent;
|
nickjillings@2108
|
395 obj.root.appendChild(obj.input);
|
nickjillings@2108
|
396 obj.root.appendChild(obj.text);
|
nickjillings@1370
|
397 if(testNode != undefined)
|
nickjillings@1370
|
398 {
|
nickjillings@2108
|
399 if (testNode.getAttribute('default') == 'on')
|
nickjillings@1370
|
400 {
|
nickjillings@2108
|
401 obj.input.checked = true;
|
nickjillings@1370
|
402 }
|
nickjillings@1370
|
403 if (testNode.getAttribute('support') == "none")
|
nickjillings@1370
|
404 {
|
nickjillings@2108
|
405 obj.input.disabled = true;
|
nickjillings@2108
|
406 obj.input.checked = false;
|
nickjillings@2108
|
407 obj.root.className = "popup-checkbox disabled";
|
nickjillings@1370
|
408 }else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@1370
|
409 {
|
nickjillings@2108
|
410 obj.input.disabled = true;
|
nickjillings@2108
|
411 obj.input.checked = true;
|
nickjillings@2108
|
412 obj.root.className = "popup-checkbox disabled";
|
nickjillings@2108
|
413 }
|
nickjillings@2108
|
414 } else {
|
nickjillings@2108
|
415 if (interfaceNode.getAttribute('default') == 'on')
|
nickjillings@2108
|
416 {
|
nickjillings@2108
|
417 obj.input.checked = true;
|
nickjillings@2108
|
418 }
|
nickjillings@2108
|
419 if (interfaceNode.getAttribute('support') == "none")
|
nickjillings@2108
|
420 {
|
nickjillings@2108
|
421 obj.input.disabled = true;
|
nickjillings@2108
|
422 obj.input.checked = false;
|
nickjillings@2108
|
423 obj.root.className = "popup-checkbox disabled";
|
nickjillings@2108
|
424 } else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@2108
|
425 {
|
nickjillings@2108
|
426 obj.input.disabled = true;
|
nickjillings@2108
|
427 obj.input.checked = true;
|
nickjillings@2108
|
428 obj.root.className = "popup-checkbox disabled";
|
nickjillings@1370
|
429 }
|
nickjillings@1370
|
430 }
|
nickjillings@2108
|
431 var included = specification.interfaces.options.find(function(element,index,array){
|
nickjillings@2108
|
432 if (element.name == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
433 },obj);
|
nickjillings@2108
|
434 if (included != undefined) {
|
nickjillings@2108
|
435 obj.input.checked = true;
|
nickjillings@2108
|
436 }
|
nickjillings@2108
|
437 obj.handleEvent();
|
nickjillings@2108
|
438 this.options.push(obj);
|
nickjillings@2108
|
439 this.dynamicContent.appendChild(obj.root);
|
nickjillings@1370
|
440 }
|
nickjillings@1370
|
441 }
|
nickjillings@1370
|
442 this.continue = function()
|
nickjillings@1370
|
443 {
|
nickjillings@1370
|
444 popupStateNodes.state[3].generate();
|
nickjillings@1370
|
445 popupObject.postNode(popupStateNodes.state[3]);
|
nickjillings@1370
|
446 }
|
nickjillings@2108
|
447 this.back = function() {
|
nickjillings@2108
|
448 popupObject.postNode(popupStateNodes.state[1]);
|
nickjillings@2108
|
449 }
|
nickjillings@1370
|
450 }
|
nickjillings@1370
|
451 this.state[3] = new function()
|
nickjillings@1370
|
452 {
|
nickjillings@1370
|
453 this.title = "Test Metrics";
|
nickjillings@1370
|
454 this.content = document.createElement("div");
|
nickjillings@1370
|
455 this.content.id = "state-1";
|
nickjillings@1370
|
456 var spnH = document.createElement('div');
|
nickjillings@1370
|
457 var span = document.createElement("span");
|
nickjillings@1370
|
458 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
|
459 spnH.appendChild(span);
|
nickjillings@1370
|
460 this.content.appendChild(spnH);
|
nickjillings@1370
|
461 this.options = [];
|
nickjillings@1370
|
462 this.checkText;
|
nickjillings@1370
|
463 this.testXML;
|
nickjillings@1370
|
464 this.interfaceXML;
|
nickjillings@2108
|
465 this.dynamicContent = document.createElement("div");
|
nickjillings@2108
|
466 this.content.appendChild(this.dynamicContent);
|
nickjillings@1370
|
467 this.generate = function()
|
nickjillings@1370
|
468 {
|
nickjillings@2108
|
469 this.options = [];
|
nickjillings@2108
|
470 this.dynamicContent.innerHTML = null;
|
nickjillings@1370
|
471 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
472 this.checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
473 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
474 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
475 this.testXML = this.testXML.getAllElementsByTagName("metrics");
|
nicholas@2390
|
476 var interfaceXMLChildren = this.interfaceXML.getElementsByTagName('entry');
|
nicholas@2390
|
477 for (var i=0; i<interfaceXMLChildren.length; i++)
|
nickjillings@1370
|
478 {
|
nicholas@2390
|
479 var interfaceNode = interfaceXMLChildren[i];
|
nickjillings@1370
|
480 var checkName = interfaceNode.getAttribute('name');
|
nickjillings@1370
|
481 var testNode
|
nickjillings@1370
|
482 if (this.testXML.length > 0)
|
nickjillings@1370
|
483 {
|
nickjillings@1370
|
484 testNode = this.testXML[0].getAllElementsByName(checkName);
|
nickjillings@1370
|
485 if(testNode.length != 0) {testNode = testNode[0];}
|
nickjillings@1370
|
486 else {testNode = undefined;}
|
nickjillings@1370
|
487 } else {
|
nickjillings@1370
|
488 testNode = undefined;
|
nickjillings@1370
|
489 }
|
nickjillings@2108
|
490 var obj = {
|
nickjillings@2108
|
491 root: document.createElement("div"),
|
nickjillings@2109
|
492 text: document.createElement("label"),
|
nickjillings@2108
|
493 input: document.createElement("input"),
|
nickjillings@2108
|
494 parent: this,
|
nickjillings@2108
|
495 name: checkName,
|
nickjillings@2108
|
496 handleEvent: function(event) {
|
nickjillings@2108
|
497 if (this.input.checked) {
|
nickjillings@2108
|
498 // Add to specification.interfaces.option
|
nickjillings@2108
|
499 var included = specification.metrics.enabled.find(function(element,index,array){
|
nickjillings@2108
|
500 if (element == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
501 },this);
|
nickjillings@2108
|
502 if (included == null) {
|
nickjillings@2108
|
503 specification.metrics.enabled.push(this.name);
|
nickjillings@2108
|
504 }
|
nickjillings@2108
|
505 } else {
|
nickjillings@2108
|
506 // Remove from specification.interfaces.option
|
nickjillings@2108
|
507 var position = specification.metrics.enabled.findIndex(function(element,index,array){
|
nickjillings@2108
|
508 if (element == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
509 },this);
|
nickjillings@2108
|
510 if (position >= 0) {
|
nickjillings@2108
|
511 specification.metrics.enabled.splice(position,1);
|
nickjillings@2108
|
512 }
|
nickjillings@2108
|
513 }
|
nickjillings@2108
|
514 }
|
nickjillings@1370
|
515 }
|
nickjillings@2108
|
516
|
nickjillings@2108
|
517 obj.input.addEventListener("click",obj);
|
nickjillings@2108
|
518 obj.root.className = "popup-checkbox";
|
nickjillings@2108
|
519 obj.input.type = "checkbox";
|
nickjillings@2109
|
520 obj.input.setAttribute('id',checkName);
|
nickjillings@2109
|
521 obj.text.setAttribute("for",checkName);
|
nickjillings@2108
|
522 obj.text.textContent = this.checkText.getAllElementsByName(checkName)[0].textContent;
|
nickjillings@2108
|
523 obj.root.appendChild(obj.input);
|
nickjillings@2108
|
524 obj.root.appendChild(obj.text);
|
nickjillings@1370
|
525 if(testNode != undefined)
|
nickjillings@1370
|
526 {
|
nickjillings@2108
|
527 if (testNode.getAttribute('default') == 'on')
|
nickjillings@1370
|
528 {
|
nickjillings@2108
|
529 obj.input.checked = true;
|
nickjillings@1370
|
530 }
|
nickjillings@1370
|
531 if (testNode.getAttribute('support') == "none")
|
nickjillings@1370
|
532 {
|
nickjillings@2108
|
533 obj.input.disabled = true;
|
nickjillings@2108
|
534 obj.input.checked = false;
|
nickjillings@2108
|
535 obj.root.className = "popup-checkbox disabled";
|
nickjillings@1370
|
536 }else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@1370
|
537 {
|
nickjillings@2108
|
538 obj.input.disabled = true;
|
nickjillings@2108
|
539 obj.input.checked = true;
|
nickjillings@2108
|
540 obj.root.className = "popup-checkbox disabled";
|
nickjillings@2108
|
541 }
|
nickjillings@2108
|
542 } else {
|
nickjillings@2108
|
543 if (interfaceNode.getAttribute('default') == 'on')
|
nickjillings@2108
|
544 {
|
nickjillings@2108
|
545 obj.input.checked = true;
|
nickjillings@2108
|
546 }
|
nickjillings@2108
|
547 if (interfaceNode.getAttribute('support') == "none")
|
nickjillings@2108
|
548 {
|
nickjillings@2108
|
549 obj.input.disabled = true;
|
nickjillings@2108
|
550 obj.input.checked = false;
|
nickjillings@2108
|
551 obj.root.className = "popup-checkbox disabled";
|
nickjillings@2108
|
552 } else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@2108
|
553 {
|
nickjillings@2108
|
554 obj.input.disabled = true;
|
nickjillings@2108
|
555 obj.input.checked = true;
|
nickjillings@2108
|
556 obj.root.className = "popup-checkbox disabled";
|
nickjillings@1370
|
557 }
|
nickjillings@1370
|
558 }
|
nickjillings@2108
|
559 var included = specification.metrics.enabled.find(function(element,index,array){
|
nickjillings@2108
|
560 if (element == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
561 },obj);
|
nickjillings@2108
|
562 obj.handleEvent();
|
nickjillings@2108
|
563 if (included != undefined) {
|
nickjillings@2108
|
564 obj.input.checked = true;
|
nickjillings@2108
|
565 }
|
nickjillings@2108
|
566 this.options.push(obj);
|
nickjillings@2108
|
567 this.dynamicContent.appendChild(obj.root);
|
nickjillings@1370
|
568 }
|
nickjillings@1370
|
569 }
|
nickjillings@1370
|
570 this.continue = function()
|
nickjillings@1370
|
571 {
|
nickjillings@1370
|
572 popupStateNodes.state[4].generate();
|
nickjillings@1370
|
573 popupObject.postNode(popupStateNodes.state[4]);
|
nickjillings@1370
|
574 }
|
nickjillings@2108
|
575 this.back = function() {
|
nickjillings@2108
|
576 popupObject.postNode(popupStateNodes.state[2]);
|
nickjillings@2108
|
577 }
|
nickjillings@1370
|
578 }
|
nickjillings@1370
|
579 this.state[4] = new function()
|
nickjillings@1370
|
580 {
|
nickjillings@1370
|
581 this.title = "Test Visuals";
|
nickjillings@1370
|
582 this.content = document.createElement("div");
|
nickjillings@1370
|
583 this.content.id = "state-1";
|
nickjillings@1370
|
584 var spnH = document.createElement('div');
|
nickjillings@1370
|
585 var span = document.createElement("span");
|
nickjillings@1370
|
586 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
|
587 spnH.appendChild(span);
|
nickjillings@1370
|
588 this.content.appendChild(spnH);
|
nickjillings@1370
|
589 this.options = [];
|
nickjillings@1370
|
590 this.checkText;
|
nickjillings@1370
|
591 this.testXML;
|
nickjillings@1370
|
592 this.interfaceXML;
|
nickjillings@2108
|
593 this.dynamicContent = document.createElement("div");
|
nickjillings@2108
|
594 this.content.appendChild(this.dynamicContent);
|
nickjillings@1370
|
595 this.generate = function()
|
nickjillings@1370
|
596 {
|
nickjillings@2108
|
597 this.options = [];
|
nickjillings@2108
|
598 this.dynamicContent.innerHTML = null;
|
nickjillings@1370
|
599 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
600 this.checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
601 this.testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
602 this.interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(this.testXML.getAttribute("interface"))[0].getAllElementsByTagName("show")[0];
|
nickjillings@2108
|
603 this.testXML = this.testXML.getAllElementsByTagName("show");
|
nicholas@2390
|
604 var interfaceXMLChildren = this.interfaceXML.getElementsByTagName('entry');
|
nicholas@2390
|
605 for (var i=0; i<interfaceXMLChildren.length; i++)
|
nickjillings@1370
|
606 {
|
nicholas@2390
|
607 var interfaceNode = interfaceXMLChildren[i];
|
nickjillings@1370
|
608 var checkName = interfaceNode.getAttribute('name');
|
nickjillings@1370
|
609 var testNode
|
nickjillings@1370
|
610 if (this.testXML.length > 0)
|
nickjillings@1370
|
611 {
|
nickjillings@1370
|
612 testNode = this.testXML[0].getAllElementsByName(checkName);
|
nickjillings@1370
|
613 if(testNode.length != 0) {testNode = testNode[0];}
|
nickjillings@1370
|
614 else {testNode = undefined;}
|
nickjillings@1370
|
615 } else {
|
nickjillings@1370
|
616 testNode = undefined;
|
nickjillings@1370
|
617 }
|
nickjillings@2108
|
618 var obj = {
|
nickjillings@2108
|
619 root: document.createElement("div"),
|
nickjillings@2109
|
620 text: document.createElement("label"),
|
nickjillings@2108
|
621 input: document.createElement("input"),
|
nickjillings@2108
|
622 parent: this,
|
nickjillings@2108
|
623 name: checkName,
|
nickjillings@2108
|
624 handleEvent: function(event) {
|
nickjillings@2108
|
625 if (this.input.checked) {
|
nickjillings@2108
|
626 // Add to specification.interfaces.option
|
nickjillings@2108
|
627 var included = specification.interfaces.options.find(function(element,index,array){
|
nickjillings@2108
|
628 if (element.name == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
629 },this);
|
nickjillings@2108
|
630 if (included == null) {
|
nickjillings@2108
|
631 specification.interfaces.options.push({type:"show",name:this.name});
|
nickjillings@2108
|
632 }
|
nickjillings@2108
|
633 } else {
|
nickjillings@2108
|
634 // Remove from specification.interfaces.option
|
nickjillings@2108
|
635 var position = specification.interfaces.options.findIndex(function(element,index,array){
|
nickjillings@2108
|
636 if (element.name == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
637 },this);
|
nickjillings@2108
|
638 if (position >= 0) {
|
nickjillings@2108
|
639 specification.interfaces.options.splice(position,1);
|
nickjillings@2108
|
640 }
|
nickjillings@2108
|
641 }
|
nickjillings@2108
|
642 }
|
nickjillings@1370
|
643 }
|
nickjillings@2108
|
644
|
nickjillings@2108
|
645 obj.input.addEventListener("click",obj);
|
nickjillings@2108
|
646 obj.root.className = "popup-checkbox";
|
nickjillings@2108
|
647 obj.input.type = "checkbox";
|
nickjillings@2109
|
648 obj.input.setAttribute('id',checkName);
|
nickjillings@2109
|
649 obj.text.setAttribute("for",checkName);
|
nickjillings@2108
|
650 obj.text.textContent = this.checkText.getAllElementsByName(checkName)[0].textContent;
|
nickjillings@2108
|
651 obj.root.appendChild(obj.input);
|
nickjillings@2108
|
652 obj.root.appendChild(obj.text);
|
nickjillings@1370
|
653 if(testNode != undefined)
|
nickjillings@1370
|
654 {
|
nickjillings@2108
|
655 if (testNode.getAttribute('default') == 'on')
|
nickjillings@1370
|
656 {
|
nickjillings@2108
|
657 obj.input.checked = true;
|
nickjillings@1370
|
658 }
|
nickjillings@1370
|
659 if (testNode.getAttribute('support') == "none")
|
nickjillings@1370
|
660 {
|
nickjillings@2108
|
661 obj.input.disabled = true;
|
nickjillings@2108
|
662 obj.input.checked = false;
|
nickjillings@2108
|
663 obj.root.className = "popup-checkbox disabled";
|
nickjillings@1370
|
664 }else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@1370
|
665 {
|
nickjillings@2108
|
666 obj.input.disabled = true;
|
nickjillings@2108
|
667 obj.input.checked = true;
|
nickjillings@2108
|
668 obj.root.className = "popup-checkbox disabled";
|
nickjillings@2108
|
669 }
|
nickjillings@2108
|
670 } else {
|
nickjillings@2108
|
671 if (interfaceNode.getAttribute('default') == 'on')
|
nickjillings@2108
|
672 {
|
nickjillings@2108
|
673 obj.input.checked = true;
|
nickjillings@2108
|
674 }
|
nickjillings@2108
|
675 if (interfaceNode.getAttribute('support') == "none")
|
nickjillings@2108
|
676 {
|
nickjillings@2108
|
677 obj.input.disabled = true;
|
nickjillings@2108
|
678 obj.input.checked = false;
|
nickjillings@2108
|
679 obj.root.className = "popup-checkbox disabled";
|
nickjillings@2108
|
680 } else if (interfaceNode.getAttribute('support') == "mandatory")
|
nickjillings@2108
|
681 {
|
nickjillings@2108
|
682 obj.input.disabled = true;
|
nickjillings@2108
|
683 obj.input.checked = true;
|
nickjillings@2108
|
684 obj.root.className = "popup-checkbox disabled";
|
nickjillings@1370
|
685 }
|
nickjillings@1370
|
686 }
|
nickjillings@2108
|
687 var included = specification.interfaces.options.find(function(element,index,array){
|
nickjillings@2108
|
688 if (element.name == this.name) {return true;} else {return false;}
|
nickjillings@2108
|
689 },obj);
|
nickjillings@2108
|
690 if (included != undefined) {
|
nickjillings@2108
|
691 obj.input.checked = true;
|
nickjillings@2108
|
692 }
|
nickjillings@2108
|
693 obj.handleEvent();
|
nickjillings@2108
|
694 this.options.push(obj);
|
nickjillings@2108
|
695 this.dynamicContent.appendChild(obj.root);
|
nickjillings@1370
|
696 }
|
nickjillings@1370
|
697 }
|
nickjillings@1370
|
698 this.continue = function()
|
nickjillings@1370
|
699 {
|
nickjillings@1370
|
700 popupObject.hide();
|
nickjillings@1370
|
701 convert.convert(document.getElementById('content'));
|
nickjillings@1370
|
702 }
|
nickjillings@2108
|
703 this.back = function() {
|
nickjillings@2108
|
704 popupObject.postNode(popupStateNodes.state[3]);
|
nickjillings@2108
|
705 }
|
nickjillings@1370
|
706 }
|
nickjillings@1370
|
707 this.state[5] = new function() {
|
nickjillings@1370
|
708 this.title = "Add/Edit Survey Element";
|
nickjillings@1370
|
709 this.content = document.createElement("div");
|
nickjillings@1370
|
710 this.content.id = "state-1";
|
nickjillings@1370
|
711 var spnH = document.createElement('div');
|
nickjillings@1370
|
712 var span = document.createElement("span");
|
nickjillings@1370
|
713 span.textContent = "You can configure your survey element here. Press 'Continue' to complete your changes.";
|
nickjillings@1370
|
714 spnH.appendChild(span);
|
nickjillings@1370
|
715 this.content.appendChild(spnH);
|
nickjillings@1370
|
716 this.dynamic = document.createElement("div");
|
nickjillings@1370
|
717 this.option = null;
|
nickjillings@1370
|
718 this.parent = null;
|
nickjillings@1375
|
719 this.optionLists = [];
|
nickjillings@2158
|
720 this.select = document.createElement("select");
|
nickjillings@2158
|
721 this.select.setAttribute("name","type");
|
nickjillings@2158
|
722 this.select.addEventListener("change",this,false);
|
nickjillings@2158
|
723 this.content.appendChild(this.select);
|
nickjillings@1370
|
724 this.content.appendChild(this.dynamic);
|
nickjillings@1370
|
725 this.generate = function(option, parent)
|
nickjillings@1370
|
726 {
|
nickjillings@1370
|
727 this.option = option;
|
nickjillings@1370
|
728 this.parent = parent;
|
nickjillings@2158
|
729 if (this.select.childElementCount == 0) {
|
nickjillings@2158
|
730 var optionList = specification.schema.getAllElementsByName("survey")[0].getAllElementsByName("type")[0].getAllElementsByTagName("xs:enumeration");
|
nickjillings@2158
|
731 for (var i=0; i<optionList.length; i++)
|
nickjillings@2158
|
732 {
|
nickjillings@2158
|
733 var selectOption = document.createElement("option");
|
nickjillings@2158
|
734 selectOption.value = optionList[i].getAttribute("value");
|
nickjillings@2158
|
735 selectOption.textContent = selectOption.value;
|
nickjillings@2158
|
736 this.select.appendChild(selectOption);
|
nickjillings@2158
|
737 }
|
nickjillings@1370
|
738 }
|
nickjillings@1370
|
739 if (this.option.type != undefined){
|
nickjillings@2158
|
740 this.select.value = this.option.type
|
nickjillings@1370
|
741 } else {
|
nickjillings@2158
|
742 this.select.value = "statement";
|
nickjillings@1370
|
743 this.option.type = "statement";
|
nickjillings@1370
|
744 }
|
nickjillings@1370
|
745
|
nickjillings@1370
|
746 this.dynamic.innerHTML = null;
|
nickjillings@1370
|
747 var statement = document.createElement("div");
|
nickjillings@1370
|
748 var statementText = document.createElement("span");
|
nickjillings@2159
|
749 var statementEntry = document.createElement("input");
|
nickjillings@1370
|
750 statement.appendChild(statementText);
|
nickjillings@1370
|
751 statement.appendChild(statementEntry);
|
nickjillings@2159
|
752 statement.className = "survey-entry-attribute";
|
nickjillings@1370
|
753 statementText.textContent = "Statement/Question";
|
nickjillings@2159
|
754 statementEntry.style.width = "500px";
|
nickjillings@1370
|
755 statementEntry.addEventListener("change",this,false);
|
nickjillings@1370
|
756 statementEntry.setAttribute("name","statement");
|
nickjillings@1370
|
757 statementEntry.value = this.option.statement;
|
nickjillings@1370
|
758 this.dynamic.appendChild(statement);
|
nickjillings@1375
|
759
|
nickjillings@1375
|
760 var id = document.createElement("div");
|
nickjillings@1375
|
761 var idText = document.createElement("span");
|
nickjillings@1375
|
762 var idEntry = document.createElement("input");
|
nickjillings@1375
|
763 id.appendChild(idText);
|
nickjillings@1375
|
764 id.appendChild(idEntry);
|
nickjillings@2159
|
765 id.className = "survey-entry-attribute";
|
nickjillings@1375
|
766 idText.textContent = "ID: ";
|
nickjillings@1375
|
767 idEntry.addEventListener("change",this,false);
|
nickjillings@1375
|
768 idEntry.setAttribute("name","id");
|
nickjillings@1375
|
769 idEntry.value = this.option.id;
|
nickjillings@1375
|
770
|
nickjillings@2158
|
771 this.dynamic.appendChild(id);
|
nickjillings@2158
|
772
|
nickjillings@1370
|
773 switch(this.option.type)
|
nickjillings@1370
|
774 {
|
nickjillings@1370
|
775 case "statement":
|
nickjillings@1370
|
776 break;
|
nickjillings@1370
|
777 case "question":
|
nickjillings@1370
|
778 var boxsizeSelect = document.createElement("select");
|
nickjillings@1370
|
779 var optionList = specification.schema.getAllElementsByName("survey")[0].getAllElementsByName("boxsize")[0].getAllElementsByTagName("xs:enumeration");
|
nickjillings@1370
|
780 for (var i=0; i<optionList.length; i++)
|
nickjillings@1370
|
781 {
|
nickjillings@1370
|
782 var selectOption = document.createElement("option");
|
nickjillings@1370
|
783 selectOption.value = optionList[i].getAttribute("value");
|
nickjillings@1370
|
784 selectOption.textContent = selectOption.value;
|
nickjillings@1370
|
785 boxsizeSelect.appendChild(selectOption);
|
nickjillings@1370
|
786 }
|
nickjillings@1370
|
787 if(this.option.boxsize != undefined) {
|
nickjillings@1370
|
788 boxsizeSelect.value = this.option.boxsize;
|
nickjillings@1370
|
789 } else {
|
nickjillings@1370
|
790 boxsizeSelect.value = "normal";
|
nickjillings@1370
|
791 this.option.boxsize = "normal";
|
nickjillings@1370
|
792 }
|
nickjillings@1370
|
793 boxsizeSelect.setAttribute("name","boxsize");
|
nickjillings@1370
|
794 boxsizeSelect.addEventListener("change",this,false);
|
nickjillings@1370
|
795 var boxsize = document.createElement("div");
|
nickjillings@1370
|
796 var boxsizeText = document.createElement("span");
|
nickjillings@1370
|
797 boxsizeText.textContent = "Entry Size: ";
|
nickjillings@1370
|
798 boxsize.appendChild(boxsizeText);
|
nickjillings@1370
|
799 boxsize.appendChild(boxsizeSelect);
|
nickjillings@2159
|
800 boxsize.className = "survey-entry-attribute";
|
nickjillings@1370
|
801 this.dynamic.appendChild(boxsize);
|
nickjillings@1370
|
802
|
nickjillings@1370
|
803 var mandatory = document.createElement("div");
|
nickjillings@1370
|
804 var mandatoryInput = document.createElement("input");
|
nickjillings@1370
|
805 var mandatoryText = document.createElement("span");
|
nickjillings@1370
|
806 mandatoryText.textContent = "Mandatory: ";
|
nickjillings@1370
|
807 mandatory.appendChild(mandatoryText);
|
nickjillings@1370
|
808 mandatory.appendChild(mandatoryInput);
|
nickjillings@2159
|
809 mandatory.className = "survey-entry-attribute";
|
nickjillings@1370
|
810 mandatoryInput.type = "checkbox";
|
nickjillings@1370
|
811 if (this.option.mandatory) {mandatoryInput.checked = true;} else {mandatoryInput.checked = false;}
|
nickjillings@1370
|
812 mandatoryInput.setAttribute("name","mandatory");
|
nickjillings@1370
|
813 mandatoryInput.addEventListener("change",this,false);
|
nickjillings@1375
|
814 this.dynamic.appendChild(mandatory);
|
nickjillings@1375
|
815 break;
|
nickjillings@1375
|
816 case "number":
|
nickjillings@1375
|
817 this.dynamic.appendChild(id);
|
nickjillings@1375
|
818
|
nickjillings@1375
|
819 var mandatory = document.createElement("div");
|
nickjillings@1375
|
820 var mandatoryInput = document.createElement("input");
|
nickjillings@1375
|
821 var mandatoryText = document.createElement("span");
|
nickjillings@1375
|
822 mandatoryText.textContent = "Mandatory: ";
|
nickjillings@1370
|
823 mandatory.appendChild(mandatoryText);
|
nickjillings@1370
|
824 mandatory.appendChild(mandatoryInput);
|
nickjillings@2159
|
825 mandatory.className = "survey-entry-attribute";
|
nickjillings@1375
|
826 mandatoryInput.type = "checkbox";
|
nickjillings@1375
|
827 if (this.option.mandatory) {mandatoryInput.checked = true;} else {mandatoryInput.checked = false;}
|
nickjillings@1375
|
828 mandatoryInput.setAttribute("name","mandatory");
|
nickjillings@1375
|
829 mandatoryInput.addEventListener("change",this,false);
|
nickjillings@1370
|
830 this.dynamic.appendChild(mandatory);
|
nickjillings@1375
|
831
|
nickjillings@1375
|
832 var minimum = document.createElement("div");
|
nickjillings@1375
|
833 var minimumEntry = document.createElement("input");
|
nickjillings@1375
|
834 var minimumText = document.createElement("span");
|
nickjillings@1375
|
835 minimumText.textContent = "Minimum: ";
|
nickjillings@1375
|
836 minimum.appendChild(minimumText);
|
nickjillings@1375
|
837 minimum.appendChild(minimumEntry);
|
nickjillings@2159
|
838 minimum.className = "survey-entry-attribute";
|
nickjillings@1375
|
839 minimumEntry.type = "number";
|
nickjillings@1375
|
840 minimumEntry.setAttribute("name","min");
|
nickjillings@1375
|
841 minimumEntry.addEventListener("change",this,false);
|
nickjillings@1375
|
842 minimumEntry.value = this.option.min;
|
nickjillings@1375
|
843 this.dynamic.appendChild(minimum);
|
nickjillings@1375
|
844
|
nickjillings@1375
|
845 var maximum = document.createElement("div");
|
nickjillings@1375
|
846 var maximumEntry = document.createElement("input");
|
nickjillings@1375
|
847 var maximumText = document.createElement("span");
|
nickjillings@1375
|
848 maximumText.textContent = "Maximum: ";
|
nickjillings@1375
|
849 maximum.appendChild(maximumText);
|
nickjillings@1375
|
850 maximum.appendChild(maximumEntry);
|
nickjillings@2159
|
851 maximum.className = "survey-entry-attribute";
|
nickjillings@1375
|
852 maximumEntry.type = "number";
|
nickjillings@1375
|
853 maximumEntry.setAttribute("name","max");
|
nickjillings@1375
|
854 maximumEntry.addEventListener("change",this,false);
|
nickjillings@1375
|
855 maximumEntry.value = this.option.max;
|
nickjillings@1375
|
856 this.dynamic.appendChild(maximum);
|
nickjillings@1370
|
857 break;
|
nickjillings@1375
|
858 case "checkbox":
|
nickjillings@1375
|
859 case "radio":
|
nickjillings@1375
|
860 this.dynamic.appendChild(id);
|
nickjillings@1375
|
861 var optionHolder = document.createElement("div");
|
nickjillings@1375
|
862 optionHolder.className = 'node';
|
nickjillings@1375
|
863 optionHolder.id = 'popup-option-holder';
|
nickjillings@1375
|
864 var optionObject = function(parent,option) {
|
nickjillings@1375
|
865 this.rootDOM = document.createElement("div");
|
nickjillings@1375
|
866 this.rootDOM.className = "popup-option-entry";
|
nickjillings@1375
|
867 this.inputName = document.createElement("input");
|
nickjillings@1375
|
868 this.inputName.setAttribute("name","name");
|
nickjillings@1375
|
869 this.inputLabel = document.createElement("input");
|
nickjillings@1375
|
870 this.inputLabel.setAttribute("name","text");
|
nickjillings@1375
|
871 this.specification = option;
|
nickjillings@1375
|
872 this.parent = parent;
|
nickjillings@1375
|
873 this.handleEvent = function()
|
nickjillings@1375
|
874 {
|
nickjillings@1375
|
875 var target = event.currentTarget.getAttribute("name");
|
nickjillings@1375
|
876 eval("this.specification."+target+" = event.currentTarget.value");
|
nickjillings@1375
|
877 };
|
nickjillings@1375
|
878
|
nickjillings@1375
|
879 var nameText = document.createElement("span");
|
nickjillings@1375
|
880 nameText.textContent = "Name: ";
|
nickjillings@1375
|
881 var labelText = document.createElement("span");
|
nickjillings@1375
|
882 labelText.textContent = "Label: ";
|
nickjillings@1375
|
883 this.rootDOM.appendChild(nameText);
|
nickjillings@1375
|
884 this.rootDOM.appendChild(this.inputName);
|
nickjillings@1375
|
885 this.rootDOM.appendChild(labelText);
|
nickjillings@1375
|
886 this.rootDOM.appendChild(this.inputLabel);
|
nickjillings@1375
|
887 this.inputName.addEventListener("change",this,false);
|
nickjillings@1375
|
888 this.inputLabel.addEventListener("change",this,false);
|
nickjillings@1375
|
889 this.inputName.value = this.specification.name;
|
nickjillings@1375
|
890 this.inputLabel.value = this.specification.text;
|
nickjillings@2180
|
891 this.inputLabel.style.width = "350px";
|
nickjillings@1375
|
892
|
nickjillings@1375
|
893 this.deleteEntry = {
|
nickjillings@1375
|
894 root: document.createElement("button"),
|
nickjillings@1375
|
895 parent: this,
|
nickjillings@1375
|
896 handleEvent: function() {
|
nickjillings@1375
|
897 document.getElementById("popup-option-holder").removeChild(this.parent.rootDOM);
|
nickjillings@1375
|
898 var index = this.parent.parent.option.options.findIndex(function(element,index,array){
|
nickjillings@1375
|
899 if (element == this.parent.specification)
|
nickjillings@1375
|
900 return true;
|
nickjillings@1375
|
901 else
|
nickjillings@1375
|
902 return false;
|
nickjillings@1375
|
903 },this);
|
nickjillings@1375
|
904 var optionList = this.parent.parent.option.options;
|
nickjillings@1375
|
905 if (index == optionList.length-1) {
|
nickjillings@1375
|
906 optionList = optionList.slice(0,index);
|
nickjillings@1375
|
907 } else {
|
nickjillings@1375
|
908 optionList = optionList.slice(0,index).concat(optionList.slice(index+1));
|
nickjillings@1375
|
909 }
|
nickjillings@1375
|
910 this.parent.parent.option.options = optionList;
|
nickjillings@1375
|
911 }
|
nickjillings@1375
|
912 };
|
nickjillings@1375
|
913 this.deleteEntry.root.textContent = "Delete Option";
|
nickjillings@1375
|
914 this.deleteEntry.root.addEventListener("click",this.deleteEntry,false);
|
nickjillings@1375
|
915 this.rootDOM.appendChild(this.deleteEntry.root);
|
nickjillings@1375
|
916 }
|
nickjillings@2158
|
917 this.addEntry = {
|
nickjillings@2158
|
918 parent: this,
|
nickjillings@2158
|
919 root: document.createElement("button"),
|
nickjillings@2158
|
920 handleEvent: function() {
|
nickjillings@2158
|
921 var node = {name: "name", text: "text"};
|
nickjillings@2158
|
922 var optionsList = this.parent.option.options;
|
nickjillings@2158
|
923 optionsList.push(node);
|
nickjillings@2158
|
924 var obj = new optionObject(this.parent,optionsList[optionsList.length-1]);
|
nickjillings@2158
|
925 this.parent.optionLists.push(obj);
|
nickjillings@2158
|
926 document.getElementById("popup-option-holder").appendChild(obj.rootDOM);
|
nickjillings@2158
|
927 }
|
nickjillings@2158
|
928 }
|
nickjillings@2158
|
929 this.addEntry.root.textContent = "Add Option";
|
nickjillings@2158
|
930 this.addEntry.root.addEventListener("click",this.addEntry);
|
nickjillings@2158
|
931 this.dynamic.appendChild(this.addEntry.root);
|
nickjillings@1375
|
932 for (var i=0; i<this.option.options.length; i++)
|
nickjillings@1375
|
933 {
|
nickjillings@1375
|
934 var obj = new optionObject(this,this.option.options[i]);
|
nickjillings@1375
|
935 this.optionLists.push(obj);
|
nickjillings@1375
|
936 optionHolder.appendChild(obj.rootDOM);
|
nickjillings@1375
|
937 }
|
nickjillings@1375
|
938 this.dynamic.appendChild(optionHolder);
|
nickjillings@1370
|
939 }
|
nickjillings@1370
|
940 }
|
nickjillings@1370
|
941 this.handleEvent = function()
|
nickjillings@1370
|
942 {
|
nickjillings@1370
|
943 var name = event.currentTarget.getAttribute("name");
|
nickjillings@2159
|
944 var nodeName = event.currentTarget.nodeName;
|
nickjillings@2159
|
945 if (name == "type" && nodeName == "SELECT") {
|
nickjillings@2159
|
946 // If type has changed, we may need to rebuild the entire state node
|
nickjillings@2159
|
947 if (event.currentTarget.value != this.option.name)
|
nickjillings@2159
|
948 {
|
nickjillings@2159
|
949 this.option.type = event.currentTarget.value;
|
nickjillings@2159
|
950 this.generate(this.option,this.parent);
|
nickjillings@2159
|
951 }
|
nickjillings@2159
|
952 return;
|
nickjillings@2159
|
953 }
|
nickjillings@2162
|
954 switch(event.currentTarget.getAttribute("type")) {
|
nickjillings@2159
|
955 case "checkbox":
|
nickjillings@2159
|
956 eval("this.option."+name+" = event.currentTarget.checked");
|
nickjillings@1370
|
957 break;
|
nickjillings@2159
|
958 default:
|
nickjillings@2159
|
959 eval("this.option."+name+" = event.currentTarget.value");
|
nickjillings@1370
|
960 break;
|
nickjillings@1370
|
961 }
|
nickjillings@1370
|
962 }
|
nickjillings@1370
|
963 this.continue = function()
|
nickjillings@1370
|
964 {
|
nickjillings@1375
|
965 if (this.parent.type == "surveyNode")
|
nickjillings@1375
|
966 {
|
nickjillings@1375
|
967 var newNode = new this.parent.surveyEntryNode(this.parent,this.option);
|
nickjillings@1375
|
968 this.parent.children.push(newNode);
|
nickjillings@1375
|
969 this.parent.childrenDOM.appendChild(newNode.rootDOM);
|
nickjillings@1375
|
970 } else if (this.parent.type == "surveyEntryNode") {
|
nickjillings@1375
|
971 this.parent.build();
|
nickjillings@1375
|
972 }
|
nickjillings@1370
|
973 popupObject.hide();
|
nickjillings@1370
|
974 }
|
nickjillings@1370
|
975 }
|
nickjillings@1385
|
976 this.state[6] = new function() {
|
nickjillings@1385
|
977 this.title = "Edit Scale Markers";
|
nickjillings@1385
|
978 this.content = document.createElement("div");
|
nickjillings@1385
|
979 this.content.id = "state-6";
|
nickjillings@1385
|
980 var spnH = document.createElement('div');
|
nickjillings@1385
|
981 var span = document.createElement("span");
|
nickjillings@1385
|
982 span.textContent = "You can edit your scale markers here for the selected interface.";
|
nickjillings@1385
|
983 spnH.appendChild(span);
|
nickjillings@1385
|
984 this.scaleRoot;
|
nickjillings@1385
|
985 this.parent;
|
nickjillings@1385
|
986 this.markerNodes =[];
|
nickjillings@1385
|
987 this.preset = {
|
nickjillings@1385
|
988 input: document.createElement("select"),
|
nickjillings@1385
|
989 parent: this,
|
nickjillings@1385
|
990 handleEvent: function(event) {
|
nickjillings@1385
|
991 this.parent.scaleRoot.scales = [];
|
nickjillings@1385
|
992 var protoScale = interfaceSpecs.getAllElementsByTagName('scaledefinitions')[0].getAllElementsByName(event.currentTarget.value)[0];
|
nicholas@2390
|
993 var protoMarkers = protoScale.getElementsByTagName("scale");
|
nickjillings@1385
|
994 for (var i=0; i<protoMarkers.length; i++)
|
nickjillings@1385
|
995 {
|
nickjillings@1385
|
996 var marker = {
|
nickjillings@1385
|
997 position: protoMarkers[i].getAttribute("position"),
|
nickjillings@1385
|
998 text: protoMarkers[i].textContent
|
nickjillings@1385
|
999 }
|
nickjillings@1385
|
1000 this.parent.scaleRoot.scales.push(marker);
|
nickjillings@1385
|
1001 }
|
nickjillings@1385
|
1002 this.parent.buildMarkerList();
|
nickjillings@1385
|
1003 }
|
nickjillings@1385
|
1004 }
|
nickjillings@1385
|
1005 this.preset.input.addEventListener("change",this.preset);
|
nickjillings@1385
|
1006 this.content.appendChild(this.preset.input);
|
nickjillings@1385
|
1007 var optionHolder = document.createElement("div");
|
nickjillings@1385
|
1008 optionHolder.className = 'node';
|
nickjillings@1385
|
1009 optionHolder.id = 'popup-option-holder';
|
nickjillings@1385
|
1010 this.content.appendChild(optionHolder);
|
nickjillings@1385
|
1011 this.generate = function(scaleRoot,parent)
|
nickjillings@1385
|
1012 {
|
nickjillings@1385
|
1013 this.scaleRoot = scaleRoot;
|
nickjillings@1385
|
1014 this.parent = parent;
|
nickjillings@1385
|
1015
|
nickjillings@1385
|
1016 // Generate Pre-Set dropdown
|
nicholas@2390
|
1017 var protoScales = interfaceSpecs.getAllElementsByTagName('scaledefinitions')[0].getElementsByTagName("scale");
|
nickjillings@1385
|
1018 this.preset.input.innerHTML = "";
|
nickjillings@1385
|
1019
|
nickjillings@1385
|
1020 for (var i=0; i<protoScales.length; i++)
|
nickjillings@1385
|
1021 {
|
nickjillings@1385
|
1022 var selectOption = document.createElement("option");
|
nickjillings@1385
|
1023 var scaleName = protoScales[i].getAttribute("name");
|
nickjillings@1385
|
1024 selectOption.setAttribute("name",scaleName);
|
nickjillings@1385
|
1025 selectOption.textContent = scaleName;
|
nickjillings@1385
|
1026 this.preset.input.appendChild(selectOption);
|
nickjillings@1385
|
1027 }
|
nickjillings@1385
|
1028
|
nickjillings@2115
|
1029 this.addMarker = {
|
nickjillings@2115
|
1030 root: document.createElement("button"),
|
nickjillings@2115
|
1031 parent: this,
|
nickjillings@2115
|
1032 handleEvent: function() {
|
nickjillings@2115
|
1033 var marker = {
|
nickjillings@2115
|
1034 position: 0,
|
nickjillings@2115
|
1035 text: "text"
|
nickjillings@2115
|
1036 };
|
nickjillings@2115
|
1037 this.parent.scaleRoot.scales.push(marker);
|
nickjillings@2115
|
1038 var markerNode = new this.parent.buildMarkerNode(this.parent,marker);
|
nickjillings@2115
|
1039 document.getElementById("popup-option-holder").appendChild(markerNode.root);
|
nickjillings@2115
|
1040 this.parent.markerNodes.push(markerNode);
|
nickjillings@2115
|
1041 }
|
nickjillings@2115
|
1042 };
|
nickjillings@2115
|
1043 this.addMarker.root.textContent = "Add Marker";
|
nickjillings@2115
|
1044 this.addMarker.root.addEventListener("click",this.addMarker);
|
nickjillings@2115
|
1045 this.content.appendChild(this.addMarker.root);
|
nickjillings@2115
|
1046
|
nickjillings@1385
|
1047 // Create Marker List
|
nickjillings@1385
|
1048 this.buildMarkerList();
|
nickjillings@1385
|
1049 }
|
nickjillings@1385
|
1050 this.buildMarkerList = function() {
|
nickjillings@1385
|
1051 var markerInject = document.getElementById("popup-option-holder");
|
nickjillings@1385
|
1052 markerInject.innerHTML = "";
|
nickjillings@1385
|
1053 this.markerNodes = [];
|
nickjillings@1385
|
1054 for (var i=0; i<this.scaleRoot.scales.length; i++)
|
nickjillings@1385
|
1055 {
|
nickjillings@2115
|
1056 var markerNode = new this.buildMarkerNode(this,this.scaleRoot.scales[i]);
|
nickjillings@1385
|
1057 markerInject.appendChild(markerNode.root);
|
nickjillings@1385
|
1058 this.markerNodes.push(markerNode);
|
nickjillings@1385
|
1059
|
nickjillings@1385
|
1060 }
|
nickjillings@1385
|
1061 }
|
nickjillings@2115
|
1062
|
nickjillings@2115
|
1063 this.buildMarkerNode = function(parent,specification) {
|
nickjillings@2115
|
1064 this.root = document.createElement("div");
|
nickjillings@2115
|
1065 this.root.className = "popup-option-entry";
|
nickjillings@2115
|
1066 this.positionInput = document.createElement("input");
|
nickjillings@2115
|
1067 this.positionInput.min = 0;
|
nickjillings@2115
|
1068 this.positionInput.max = 100;
|
nickjillings@2115
|
1069 this.positionInput.value = specification.position;
|
nickjillings@2115
|
1070 this.positionInput.setAttribute("name","position");
|
nickjillings@2115
|
1071 this.textInput = document.createElement("input");
|
nickjillings@2115
|
1072 this.textInput.setAttribute("name","text");
|
nickjillings@2180
|
1073 this.textInput.style.width = "300px";
|
nickjillings@2115
|
1074 this.textInput.value = specification.text;
|
nickjillings@2115
|
1075 this.specification = specification;
|
nickjillings@2115
|
1076 this.parent = parent;
|
nickjillings@2115
|
1077 this.handleEvent = function(event) {
|
nickjillings@2115
|
1078 switch(event.currentTarget.getAttribute("name"))
|
nickjillings@2115
|
1079 {
|
nickjillings@2115
|
1080 case "position":
|
nickjillings@2115
|
1081 this.specification.position = Number(event.currentTarget.value);
|
nickjillings@2115
|
1082 break;
|
nickjillings@2115
|
1083 case "text":
|
nickjillings@2115
|
1084 this.specification.text = event.currentTarget.value;
|
nickjillings@2115
|
1085 break;
|
nickjillings@2115
|
1086 }
|
nickjillings@2115
|
1087 }
|
nickjillings@2115
|
1088 this.positionInput.addEventListener("change",this,false);
|
nickjillings@2115
|
1089 this.textInput.addEventListener("change",this,false);
|
nickjillings@2115
|
1090
|
nickjillings@2115
|
1091 var posText = document.createElement("span");
|
nickjillings@2115
|
1092 posText.textContent = "Position: ";
|
nickjillings@2115
|
1093 var textText = document.createElement("span");
|
nickjillings@2115
|
1094 textText.textContent = "Text: ";
|
nickjillings@2115
|
1095 this.root.appendChild(posText);
|
nickjillings@2115
|
1096 this.root.appendChild(this.positionInput);
|
nickjillings@2115
|
1097 this.root.appendChild(textText);
|
nickjillings@2115
|
1098 this.root.appendChild(this.textInput);
|
nickjillings@2115
|
1099
|
nickjillings@2115
|
1100 this.deleteMarker = {
|
nickjillings@2115
|
1101 root: document.createElement("button"),
|
nickjillings@2115
|
1102 parent: this,
|
nickjillings@2115
|
1103 handleEvent: function() {
|
nickjillings@2115
|
1104 var index = this.parent.parent.scaleRoot.scales.findIndex(function(element,index,array){
|
nickjillings@2115
|
1105 if (element == this) {return true;} else {return false;}
|
nickjillings@2115
|
1106 },this.parent.specification)
|
nickjillings@2115
|
1107 if (index >= 0) {
|
nickjillings@2115
|
1108 this.parent.parent.scaleRoot.scales.splice(index,1);
|
nickjillings@2115
|
1109 }
|
nickjillings@2115
|
1110 document.getElementById("popup-option-holder").removeChild(this.parent.root);
|
nickjillings@2115
|
1111 }
|
nickjillings@2115
|
1112 }
|
nickjillings@2115
|
1113 this.deleteMarker.root.addEventListener("click",this.deleteMarker);
|
nickjillings@2115
|
1114 this.deleteMarker.root.textContent = "Delete Marker"
|
nickjillings@2115
|
1115 this.root.appendChild(this.deleteMarker.root);
|
nickjillings@2115
|
1116 }
|
nickjillings@1385
|
1117 }
|
nickjillings@1370
|
1118 }
|
nickjillings@1370
|
1119 }
|
nickjillings@1370
|
1120
|
nickjillings@1370
|
1121 function SpecificationToHTML()
|
nickjillings@1370
|
1122 {
|
nickjillings@1370
|
1123 // This takes the specification node and converts it to an on-page HTML object
|
nickjillings@1370
|
1124 // Each Specification Node is given its own JS object which listens to the XSD for instant verification
|
nickjillings@1370
|
1125 // Once generated, it directly binds into the specification object to update with changes
|
nickjillings@1370
|
1126 // Fixed DOM entries
|
nickjillings@1370
|
1127 this.injectDOM;
|
nickjillings@1370
|
1128 this.setupDOM;
|
nickjillings@1370
|
1129 this.pages = [];
|
nickjillings@1370
|
1130
|
nickjillings@1370
|
1131 // Self-contained generators
|
nickjillings@1370
|
1132 this.createGeneralNodeDOM = function(name,id,parent)
|
nickjillings@1370
|
1133 {
|
nickjillings@1375
|
1134 this.type = name;
|
nickjillings@1370
|
1135 var root = document.createElement('div');
|
nickjillings@1370
|
1136 root.id = id;
|
nickjillings@1370
|
1137 root.className = "node";
|
nickjillings@1370
|
1138
|
nickjillings@1370
|
1139 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1140 titleDiv.className = "node-title";
|
nickjillings@1370
|
1141 var title = document.createElement('span');
|
nickjillings@1370
|
1142 title.className = "node-title";
|
nickjillings@1370
|
1143 title.textContent = name;
|
nickjillings@1370
|
1144 titleDiv.appendChild(title);
|
nickjillings@1370
|
1145
|
nickjillings@1370
|
1146 var attributeDiv = document.createElement('div');
|
nickjillings@1370
|
1147 attributeDiv.className = "node-attributes";
|
nickjillings@1370
|
1148
|
nickjillings@1370
|
1149 var childrenDiv = document.createElement('div');
|
nickjillings@1370
|
1150 childrenDiv.className = "node-children";
|
nickjillings@1370
|
1151
|
nickjillings@1370
|
1152 var buttonsDiv = document.createElement('div');
|
nickjillings@1370
|
1153 buttonsDiv.className = "node-buttons";
|
nickjillings@1370
|
1154
|
nickjillings@1370
|
1155 root.appendChild(titleDiv);
|
nickjillings@1370
|
1156 root.appendChild(attributeDiv);
|
nickjillings@1370
|
1157 root.appendChild(childrenDiv);
|
nickjillings@1370
|
1158 root.appendChild(buttonsDiv);
|
nickjillings@1370
|
1159
|
nickjillings@1370
|
1160 var obj = {
|
nickjillings@1370
|
1161 rootDOM: root,
|
nickjillings@1370
|
1162 titleDOM: title,
|
nickjillings@1370
|
1163 attributeDOM: attributeDiv,
|
nickjillings@1370
|
1164 attributes: [],
|
nickjillings@1370
|
1165 childrenDOM: childrenDiv,
|
nickjillings@1370
|
1166 children: [],
|
nickjillings@1370
|
1167 buttonDOM: buttonsDiv,
|
nickjillings@1370
|
1168 parent: parent
|
nickjillings@1370
|
1169 }
|
nickjillings@1370
|
1170 return obj;
|
nickjillings@1370
|
1171 }
|
nickjillings@1370
|
1172
|
nickjillings@1370
|
1173 this.convertAttributeToDOM = function(node,schema)
|
nickjillings@1370
|
1174 {
|
nickjillings@1370
|
1175 // This takes an attribute schema node and returns an object with the input node and any bindings
|
nickjillings@1370
|
1176 if (schema.getAttribute('name') == undefined && schema.getAttribute('ref') != undefined)
|
nickjillings@1370
|
1177 {
|
nickjillings@1370
|
1178 schema = specification.schema.getAllElementsByName(schema.getAttribute('ref'))[0];
|
nickjillings@1370
|
1179 }
|
nickjillings@1370
|
1180 var obj = new function()
|
nickjillings@1370
|
1181 {
|
nickjillings@1370
|
1182 this.input;
|
nickjillings@1370
|
1183 this.name;
|
nickjillings@1370
|
1184 this.owner;
|
nickjillings@1370
|
1185 this.holder;
|
nickjillings@1370
|
1186
|
nickjillings@1370
|
1187 this.name = schema.getAttribute('name');
|
nickjillings@1370
|
1188 this.default = schema.getAttribute('default');
|
nickjillings@1370
|
1189 this.dataType = schema.getAttribute('type');
|
nickjillings@2158
|
1190 if (this.dataType == undefined) {
|
nickjillings@2158
|
1191 if (schema.childElementCount > 0) {
|
nicholas@2390
|
1192 if (schema.firstElementChild.nodeName == "xs:simpleType") {
|
nickjillings@2158
|
1193 this.dataType = schema.getAllElementsByTagName("xs:restriction")[0].getAttribute("base");
|
nickjillings@2158
|
1194 }
|
nickjillings@2158
|
1195 }
|
nickjillings@2158
|
1196 }
|
nickjillings@1370
|
1197 if (typeof this.dataType == "string") { this.dataType = this.dataType.substr(3);}
|
nickjillings@1370
|
1198 else {this.dataType = "string";}
|
nickjillings@1370
|
1199 var minVar = undefined;
|
nickjillings@1370
|
1200 var maxVar = undefined;
|
nickjillings@1370
|
1201 switch(this.dataType)
|
nickjillings@1370
|
1202 {
|
nickjillings@1370
|
1203 case "negativeInteger":
|
nickjillings@1370
|
1204 maxVar = -1;
|
nickjillings@1370
|
1205 break;
|
nickjillings@1370
|
1206 case "positiveInteger":
|
nickjillings@1370
|
1207 minVar = 1;
|
nickjillings@1370
|
1208 break;
|
nickjillings@1370
|
1209 case "nonNegativeInteger":
|
nickjillings@1370
|
1210 minVar = 0;
|
nickjillings@1370
|
1211 break;
|
nickjillings@1370
|
1212 case "nonPositiveInteger":
|
nickjillings@1370
|
1213 maxVar = 0;
|
nickjillings@1370
|
1214 break;
|
nickjillings@1370
|
1215 case "byte":
|
nickjillings@1370
|
1216 minVar = 0;
|
nickjillings@1370
|
1217 maxVar = 256;
|
nickjillings@1370
|
1218 break;
|
nickjillings@1370
|
1219 case "short":
|
nickjillings@1370
|
1220 minVar = 0;
|
nickjillings@1370
|
1221 maxVar = 65536;
|
nickjillings@1370
|
1222 break;
|
nickjillings@1370
|
1223 default:
|
nickjillings@1370
|
1224 break;
|
nickjillings@1370
|
1225 }
|
nickjillings@2174
|
1226
|
nickjillings@2174
|
1227 this.enumeration = schema.getAllElementsByTagName("xs:enumeration");
|
nickjillings@2174
|
1228 if (this.enumeration.length == 0) {
|
nickjillings@2174
|
1229 this.input = document.createElement('input');
|
nickjillings@2174
|
1230 switch(this.dataType)
|
nickjillings@2174
|
1231 {
|
nickjillings@2174
|
1232 case "boolean":
|
nickjillings@2174
|
1233 this.input.type = "checkbox";
|
nickjillings@2174
|
1234 break;
|
nickjillings@2174
|
1235 case "negativeInteger":
|
nickjillings@2174
|
1236 case "positiveInteger":
|
nickjillings@2174
|
1237 case "nonNegativeInteger":
|
nickjillings@2174
|
1238 case "nonPositiveInteger":
|
nickjillings@2174
|
1239 case "integer":
|
nickjillings@2174
|
1240 case "short":
|
nickjillings@2174
|
1241 case "byte":
|
nickjillings@2174
|
1242 this.input.step = 1;
|
nickjillings@2174
|
1243 case "decimal":
|
nickjillings@2174
|
1244 this.input.type = "number";
|
nickjillings@2174
|
1245 this.input.min = minVar;
|
nickjillings@2174
|
1246 this.input.max = maxVar;
|
nickjillings@2174
|
1247 break;
|
nickjillings@2174
|
1248 default:
|
nickjillings@2174
|
1249 break;
|
nickjillings@2174
|
1250 }
|
nickjillings@2174
|
1251 } else {
|
nickjillings@2174
|
1252 this.input = document.createElement("select");
|
nickjillings@2174
|
1253 for (var i=0; i<this.enumeration.length; i++)
|
nickjillings@2174
|
1254 {
|
nickjillings@2174
|
1255 var option = document.createElement("option");
|
nickjillings@2174
|
1256 var value = this.enumeration[i].getAttribute("value");
|
nickjillings@2174
|
1257 option.setAttribute("value",value);
|
nickjillings@2174
|
1258 option.textContent = value;
|
nickjillings@2174
|
1259 this.input.appendChild(option);
|
nickjillings@2174
|
1260 }
|
nickjillings@1370
|
1261 }
|
nickjillings@1370
|
1262 var value;
|
nickjillings@1373
|
1263 eval("value = node."+this.name)
|
nickjillings@2174
|
1264 if (this.default != undefined && value == undefined)
|
nickjillings@1370
|
1265 {
|
nickjillings@2174
|
1266 value = this.default;
|
nickjillings@2174
|
1267 }
|
nickjillings@2174
|
1268 if (this.input.type == "checkbox") {
|
nicholas@2239
|
1269 if (value == "true" || value == "True") {this.input.checked = false;}
|
nicholas@2239
|
1270 else {this.input.checked = false;}
|
nickjillings@2174
|
1271 } else {
|
nickjillings@1370
|
1272 this.input.value = value;
|
nickjillings@1370
|
1273 }
|
nickjillings@1370
|
1274 this.handleEvent = function(event)
|
nickjillings@1370
|
1275 {
|
nickjillings@1370
|
1276 var value;
|
nickjillings@2174
|
1277 if (this.input.nodeName == "INPUT")
|
nickjillings@1370
|
1278 {
|
nickjillings@2174
|
1279 switch(this.input.type)
|
nickjillings@2174
|
1280 {
|
nickjillings@2174
|
1281 case "checkbox":
|
nickjillings@2174
|
1282 value = event.currentTarget.checked;
|
nickjillings@2174
|
1283 break;
|
nickjillings@2174
|
1284 case "number":
|
n@2423
|
1285 if (event.currentTarget.value != "") {
|
n@2423
|
1286 value = Number(event.currentTarget.value);
|
n@2423
|
1287 } else {
|
n@2423
|
1288 value = undefined;
|
n@2423
|
1289 }
|
nickjillings@2174
|
1290 break;
|
nickjillings@2174
|
1291 default:
|
n@2423
|
1292 if (event.currentTarget.value != "") {
|
n@2423
|
1293 value = event.currentTarget.value;
|
n@2423
|
1294 } else {
|
n@2423
|
1295 value = undefined;
|
n@2423
|
1296 }
|
nickjillings@2174
|
1297 break;
|
nickjillings@2174
|
1298 }
|
nickjillings@2174
|
1299 } else if (this.input.nodeName == "SELECT") {
|
nickjillings@2174
|
1300 value = event.currentTarget.value;
|
nickjillings@1370
|
1301 }
|
nickjillings@1370
|
1302 eval("this.owner."+this.name+" = value");
|
nickjillings@1370
|
1303 }
|
nickjillings@1370
|
1304 this.holder = document.createElement('div');
|
nickjillings@1370
|
1305 this.holder.className = "attribute";
|
nickjillings@1370
|
1306 this.holder.setAttribute('name',this.name);
|
nickjillings@1370
|
1307 var text = document.createElement('span');
|
nickjillings@1370
|
1308 eval("text.textContent = attributeText."+this.name+"+': '");
|
nickjillings@1370
|
1309 this.holder.appendChild(text);
|
nickjillings@1370
|
1310 this.holder.appendChild(this.input);
|
nickjillings@1370
|
1311 this.owner = node;
|
nickjillings@1370
|
1312 this.input.addEventListener("change",this,false);
|
nickjillings@1370
|
1313 }
|
nickjillings@1370
|
1314 if (obj.attribute != null)
|
nickjillings@1370
|
1315 {
|
nickjillings@1370
|
1316 obj.input.value = obj.attribute;
|
nickjillings@1370
|
1317 }
|
nickjillings@1370
|
1318 return obj;
|
nickjillings@1370
|
1319 }
|
nickjillings@1370
|
1320
|
nickjillings@1370
|
1321 this.convert = function(root)
|
nickjillings@1370
|
1322 {
|
nickjillings@1370
|
1323 //Performs the actual conversion using the given root DOM as the root
|
nickjillings@1370
|
1324 this.injectDOM = root;
|
nickjillings@1370
|
1325
|
nickjillings@1373
|
1326 // Build the export button
|
nickjillings@1373
|
1327 var exportButton = document.createElement("button");
|
nickjillings@1373
|
1328 exportButton.textContent = "Export to XML";
|
nickjillings@1373
|
1329 exportButton.onclick = function()
|
nickjillings@1373
|
1330 {
|
nickjillings@1373
|
1331 var doc = specification.encode();
|
nickjillings@1373
|
1332 var obj = {};
|
nickjillings@1373
|
1333 obj.title = "Export";
|
nickjillings@1373
|
1334 obj.content = document.createElement("div");
|
nickjillings@1373
|
1335 obj.content.id = "finish";
|
nickjillings@1373
|
1336 var span = document.createElement("span");
|
n@2405
|
1337 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."
|
n@2405
|
1338 obj.content.appendChild(span);
|
n@2405
|
1339 span = document.createElement("p");
|
n@2405
|
1340 span.textContent = "NOTE FOR SAFARI! You cannot right click on the below link and save it as a file, Safari does not like that at all. Instead click on it to open the XML, the Press Cmd+S to open the save dialogue. Make sure you have 'save as Page Source' selected on the bottom of the window. Currently Safari has no plans to support the HTML 'download' attribute which causes this problem";
|
nickjillings@1373
|
1341 obj.content.appendChild(span);
|
nickjillings@1373
|
1342 var link = document.createElement("div");
|
n@2412
|
1343 link.appendChild(doc.firstChild);
|
nickjillings@1373
|
1344 var file = [link.innerHTML];
|
nickjillings@1373
|
1345 var bb = new Blob(file,{type : 'application/xml'});
|
nickjillings@1373
|
1346 var dnlk = window.URL.createObjectURL(bb);
|
nickjillings@1373
|
1347 var a = document.createElement("a");
|
nickjillings@1373
|
1348 a.hidden = '';
|
nickjillings@1373
|
1349 a.href = dnlk;
|
nickjillings@1373
|
1350 a.download = "project-specification.xml";
|
nickjillings@1373
|
1351 a.textContent = "Save File";
|
nickjillings@1373
|
1352 obj.content.appendChild(a);
|
nickjillings@1373
|
1353 popupObject.show();
|
nickjillings@1373
|
1354 popupObject.postNode(obj);
|
nickjillings@1373
|
1355 }
|
nickjillings@1373
|
1356 this.injectDOM.appendChild(exportButton);
|
nickjillings@1373
|
1357
|
nickjillings@1370
|
1358 // First perform the setupNode;
|
nickjillings@1370
|
1359 var setupSchema = specification.schema.getAllElementsByName('setup')[0];
|
nickjillings@2114
|
1360 this.setupDOM = new this.createGeneralNodeDOM('Global Configuration','setup',null);
|
nickjillings@1370
|
1361 this.injectDOM.appendChild(this.setupDOM.rootDOM);
|
nickjillings@1370
|
1362 var setupAttributes = setupSchema.getAllElementsByTagName('xs:attribute');
|
nickjillings@1370
|
1363 for (var i=0; i<setupAttributes.length; i++)
|
nickjillings@1370
|
1364 {
|
nickjillings@1370
|
1365 var attributeName = setupAttributes[i].getAttribute('name');
|
nickjillings@1370
|
1366 var attrObject = this.convertAttributeToDOM(specification,setupAttributes[i]);
|
nickjillings@1370
|
1367 this.setupDOM.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
1368 this.setupDOM.attributes.push(attrObject);
|
nickjillings@1370
|
1369 }
|
nickjillings@1370
|
1370
|
nickjillings@2179
|
1371 // Build the exit Text node
|
nickjillings@2179
|
1372 var exitText = new this.createGeneralNodeDOM("Exit Text","exit-test",this.setupDOM);
|
nickjillings@2179
|
1373 exitText.rootDOM.removeChild(exitText.attributeDOM);
|
nickjillings@2179
|
1374 this.setupDOM.children.push(exitText);
|
nickjillings@2179
|
1375 this.setupDOM.childrenDOM.appendChild(exitText.rootDOM);
|
nickjillings@2179
|
1376 var obj = {
|
nickjillings@2179
|
1377 rootDOM: document.createElement("div"),
|
nickjillings@2179
|
1378 labelDOM: document.createElement("label"),
|
nickjillings@2179
|
1379 inputDOM: document.createElement("textarea"),
|
nickjillings@2179
|
1380 parent: exitText,
|
nickjillings@2179
|
1381 specification: specification,
|
nickjillings@2179
|
1382 handleEvent: function(event) {
|
nickjillings@2179
|
1383 this.specification.exitText = this.inputDOM.value;
|
nickjillings@2179
|
1384 }
|
nickjillings@2179
|
1385 }
|
b@2367
|
1386 var exitWarning = document.createElement("div");
|
b@2367
|
1387 obj.rootDOM.appendChild(exitWarning);
|
b@2367
|
1388 exitWarning.textContent = "Only visible when the above 'On complete redirect URL' field is empty.";
|
nickjillings@2179
|
1389 obj.rootDOM.appendChild(obj.labelDOM);
|
nickjillings@2179
|
1390 obj.rootDOM.appendChild(obj.inputDOM);
|
nickjillings@2179
|
1391 obj.labelDOM.textContent = "Text: ";
|
nickjillings@2179
|
1392 obj.inputDOM.value = obj.specification.exitText;
|
nickjillings@2179
|
1393 obj.inputDOM.addEventListener("change",obj);
|
nickjillings@2179
|
1394 exitText.children.push(obj);
|
nickjillings@2179
|
1395 exitText.childrenDOM.appendChild(obj.rootDOM);
|
nickjillings@2179
|
1396
|
nickjillings@1370
|
1397 // Now we must build the interface Node
|
nickjillings@1370
|
1398 this.interfaceDOM = new this.interfaceNode(this,specification.interfaces);
|
nickjillings@1370
|
1399 this.interfaceDOM.build("Interface","setup-interface",this.setupDOM.rootDOM);
|
nickjillings@1370
|
1400
|
nickjillings@1370
|
1401 // Now build the Metrics selection node
|
nickjillings@2114
|
1402 var metric = this.createGeneralNodeDOM("Session Metrics","setup-metric",this.setupDOM);
|
nickjillings@1370
|
1403 metric.rootDOM.removeChild(metric.attributeDOM);
|
nickjillings@1370
|
1404 this.setupDOM.children.push(metric);
|
nickjillings@1370
|
1405 this.setupDOM.childrenDOM.appendChild(metric.rootDOM);
|
nickjillings@1370
|
1406 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1407 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
1408 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1409 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("metrics")[0];
|
nickjillings@1370
|
1410 testXML = testXML.getAllElementsByTagName("metrics");
|
nicholas@2390
|
1411 var interfaceXMLChild = interfaceXML.firstElementChild;
|
nicholas@2390
|
1412 while(interfaceXMLChild)
|
nickjillings@1370
|
1413 {
|
nickjillings@1370
|
1414 var obj = {
|
nickjillings@1370
|
1415 input: document.createElement('input'),
|
nickjillings@1370
|
1416 root: document.createElement('div'),
|
nickjillings@1370
|
1417 text: document.createElement('span'),
|
nickjillings@1370
|
1418 specification: specification.metrics.enabled,
|
nicholas@2390
|
1419 name: interfaceXMLChild.getAttribute("name"),
|
nickjillings@1370
|
1420 handleEvent: function()
|
nickjillings@1370
|
1421 {
|
nickjillings@1370
|
1422 for (var i=0; i<this.specification.length; i++)
|
nickjillings@1370
|
1423 {
|
nickjillings@1370
|
1424 if (this.specification[i] == this.name)
|
nickjillings@1370
|
1425 {
|
nickjillings@1370
|
1426 var options = this.specification;
|
nickjillings@1370
|
1427 if (this.input.checked == false) {
|
nickjillings@1370
|
1428 if (i == options.length)
|
nickjillings@1370
|
1429 {options = options.slice(0,i);}
|
nickjillings@1370
|
1430 else {
|
nickjillings@1370
|
1431 options = options.slice(0,i).concat(options.slice(i+1));
|
nickjillings@1370
|
1432 }
|
nickjillings@1370
|
1433 } else {
|
nickjillings@1370
|
1434 return;
|
nickjillings@1370
|
1435 }
|
nickjillings@1370
|
1436 this.specification = options;
|
nickjillings@1370
|
1437 break;
|
nickjillings@1370
|
1438 }
|
nickjillings@1370
|
1439 }
|
nickjillings@1370
|
1440 if (this.input.checked) {
|
nickjillings@1370
|
1441 this.specification.push(this.name);
|
nickjillings@1370
|
1442 }
|
nickjillings@1370
|
1443 }
|
nickjillings@1370
|
1444 };
|
nickjillings@1370
|
1445 obj.root.className = "attribute";
|
nickjillings@1370
|
1446 obj.input.type = "checkbox";
|
nickjillings@1370
|
1447 obj.root.appendChild(obj.text);
|
nickjillings@1370
|
1448 obj.root.appendChild(obj.input);
|
nicholas@2390
|
1449 obj.text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
|
nickjillings@1370
|
1450 metric.children.push(obj);
|
nickjillings@1370
|
1451 metric.childrenDOM.appendChild(obj.root);
|
nickjillings@1314
|
1452 for (var j=0; j<specification.metrics.enabled.length; j++)
|
nickjillings@1370
|
1453 {
|
nickjillings@1314
|
1454 if (specification.metrics.enabled[j] == obj.name)
|
nickjillings@1370
|
1455 {
|
nickjillings@1370
|
1456 obj.input.checked = true;
|
nickjillings@1370
|
1457 break;
|
nickjillings@1370
|
1458 }
|
nickjillings@1370
|
1459 }
|
nicholas@2390
|
1460 interfaceXMLChild = interfaceXMLChild.nextElementSibling;
|
nickjillings@1370
|
1461 }
|
nickjillings@1370
|
1462
|
nickjillings@1370
|
1463 // Now both before and after surveys
|
nickjillings@1370
|
1464 if (specification.preTest == undefined){
|
nickjillings@2194
|
1465 specification.preTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
1466 specification.preTest.location = "pre";
|
nickjillings@1370
|
1467 }
|
nickjillings@1370
|
1468 if (specification.postTest == undefined){
|
nickjillings@2194
|
1469 specification.postTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
1470 specification.postTest.location = "post";
|
nickjillings@1370
|
1471 }
|
nickjillings@1370
|
1472 var surveyBefore = new this.surveyNode(this,specification.preTest,"Pre");
|
nickjillings@1370
|
1473 var surveyAfter = new this.surveyNode(this,specification.postTest,"Post");
|
nickjillings@1370
|
1474 this.setupDOM.children.push(surveyBefore);
|
nickjillings@1370
|
1475 this.setupDOM.children.push(surveyAfter);
|
nickjillings@1370
|
1476 this.setupDOM.childrenDOM.appendChild(surveyBefore.rootDOM);
|
nickjillings@1370
|
1477 this.setupDOM.childrenDOM.appendChild(surveyAfter.rootDOM);
|
nickjillings@1370
|
1478
|
nickjillings@1370
|
1479 // Add in the page creator button
|
nickjillings@1370
|
1480 this.addPage = {
|
nickjillings@1370
|
1481 root: document.createElement("button"),
|
nickjillings@1370
|
1482 parent: this,
|
nickjillings@1370
|
1483 handleEvent: function()
|
nickjillings@1370
|
1484 {
|
nickjillings@2194
|
1485 var pageObj = new specification.page(specification);
|
nickjillings@1370
|
1486 specification.pages.push(pageObj);
|
nickjillings@1370
|
1487 var newPage = new this.parent.pageNode(this.parent,pageObj);
|
nicholas@2315
|
1488 document.getElementById("page-holder").appendChild(newPage.rootDOM);
|
nickjillings@1370
|
1489 this.parent.pages.push(newPage);
|
nickjillings@1370
|
1490 }
|
nickjillings@1370
|
1491 }
|
nickjillings@1370
|
1492 this.addPage.root.textContent = "Add Page";
|
nicholas@2315
|
1493 this.addPage.root.id = "new-page-button";
|
nicholas@2315
|
1494 this.addPage.root.style.float = "left";
|
nickjillings@1370
|
1495 this.addPage.root.addEventListener("click",this.addPage,false);
|
nicholas@2315
|
1496
|
nicholas@2315
|
1497 var pageHolder = document.createElement("div");
|
nicholas@2315
|
1498 pageHolder.id ="page-holder";
|
nicholas@2315
|
1499 this.injectDOM.appendChild(pageHolder);
|
nickjillings@1374
|
1500
|
nickjillings@1374
|
1501 // Build each page
|
nickjillings@1374
|
1502 for (var page of specification.pages)
|
nickjillings@1374
|
1503 {
|
nickjillings@1374
|
1504 var newPage = new this.pageNode(this,page);
|
nicholas@2315
|
1505 pageHolder.appendChild(newPage.rootDOM);
|
nickjillings@1374
|
1506 this.pages.push(newPage);
|
nickjillings@1374
|
1507 }
|
nicholas@2315
|
1508
|
nicholas@2315
|
1509 this.injectDOM.appendChild(this.addPage.root);
|
nickjillings@1370
|
1510 }
|
nickjillings@1370
|
1511
|
nickjillings@1370
|
1512 this.interfaceNode = function(parent,rootObject)
|
nickjillings@1370
|
1513 {
|
nickjillings@1375
|
1514 this.type = "interfaceNode";
|
nickjillings@1370
|
1515 this.rootDOM;
|
nickjillings@1370
|
1516 this.titleDOM;
|
nickjillings@1370
|
1517 this.attributeDOM;
|
nickjillings@1370
|
1518 this.attributes = [];
|
nickjillings@1370
|
1519 this.childrenDOM;
|
nickjillings@1370
|
1520 this.children = [];
|
nickjillings@1370
|
1521 this.buttonDOM;
|
nickjillings@1370
|
1522 this.parent = parent;
|
nickjillings@1370
|
1523 this.HTMLPoint;
|
nickjillings@1370
|
1524 this.specification = rootObject;
|
nickjillings@1370
|
1525 this.schema = specification.schema.getAllElementsByName("interface")[1];
|
nickjillings@1370
|
1526
|
nickjillings@1370
|
1527 this.createIOasAttr = function(name,specification,parent,type) {
|
nickjillings@1370
|
1528 this.root = document.createElement('div');
|
nickjillings@1370
|
1529 this.input = document.createElement("input");
|
nickjillings@1370
|
1530 this.name = name;
|
nickjillings@1370
|
1531 this.type = type;
|
nickjillings@1370
|
1532 this.parent = parent;
|
nickjillings@1370
|
1533 this.specification = specification;
|
nickjillings@1370
|
1534 this.handleEvent = function(event) {
|
nickjillings@1370
|
1535 for (var i=0; i<this.specification.options.length; i++)
|
nickjillings@1370
|
1536 {
|
nickjillings@1370
|
1537 if (this.specification.options[i].name == this.name)
|
nickjillings@1370
|
1538 {
|
nickjillings@1370
|
1539 var options = this.specification.options;
|
nickjillings@1370
|
1540 if (this.input.checked == false) {
|
nickjillings@1370
|
1541 if (i == options.length)
|
nickjillings@1370
|
1542 {options = options.slice(0,i);}
|
nickjillings@1370
|
1543 else {
|
nickjillings@1370
|
1544 options = options.slice(0,i).concat(options.slice(i+1));
|
nickjillings@1370
|
1545 }
|
nickjillings@1370
|
1546 } else {
|
nickjillings@1370
|
1547 return;
|
nickjillings@1370
|
1548 }
|
nickjillings@1370
|
1549 this.specification.options = options;
|
nickjillings@1370
|
1550 break;
|
nickjillings@1370
|
1551 }
|
nickjillings@1370
|
1552 }
|
nickjillings@1370
|
1553 if (this.input.checked) {
|
nickjillings@1370
|
1554 var obj = {
|
nickjillings@1370
|
1555 name: this.name,
|
nickjillings@1370
|
1556 type: this.type
|
nickjillings@1370
|
1557 };
|
nickjillings@1370
|
1558 this.specification.options.push(obj);
|
nickjillings@1370
|
1559 }
|
nickjillings@1370
|
1560 if (this.parent.HTMLPoint.id == "setup")
|
nickjillings@1370
|
1561 {
|
nickjillings@1370
|
1562 // We've changed a global setting, must update all child 'interfaces' and disable them
|
nickjillings@1370
|
1563 for (pages of convert.pages)
|
nickjillings@1370
|
1564 {
|
nickjillings@1370
|
1565 for (interface of pages.interfaces)
|
nickjillings@1370
|
1566 {
|
nickjillings@1370
|
1567 if (this.type == "check")
|
nickjillings@1370
|
1568 {
|
nickjillings@1370
|
1569 for (node of interface.children[0].attributes)
|
nickjillings@1370
|
1570 {
|
nickjillings@1370
|
1571 if (node.name == this.name) {
|
nickjillings@1370
|
1572 if (this.input.checked) {
|
nickjillings@1370
|
1573 node.input.disabled = true;
|
nickjillings@1370
|
1574 node.input.checked = false;
|
nickjillings@1370
|
1575 } else {
|
nickjillings@1370
|
1576 node.input.disabled = false;
|
nickjillings@1370
|
1577 }
|
nickjillings@1370
|
1578 break;
|
nickjillings@1370
|
1579 }
|
nickjillings@1370
|
1580 }
|
nickjillings@1370
|
1581 } else if (this.type == "show")
|
nickjillings@1370
|
1582 {
|
nickjillings@1370
|
1583 for (node of interface.children[1].attributes)
|
nickjillings@1370
|
1584 {
|
nickjillings@1370
|
1585 if (node.name == this.name) {
|
nickjillings@1370
|
1586 if (this.input.checked) {
|
nickjillings@1370
|
1587 node.input.disabled = true;
|
nickjillings@1370
|
1588 } else {
|
nickjillings@1370
|
1589 node.input.disabled = false;
|
nickjillings@1370
|
1590 }
|
nickjillings@1370
|
1591 break;
|
nickjillings@1370
|
1592 }
|
nickjillings@1370
|
1593 }
|
nickjillings@1370
|
1594 }
|
nickjillings@1370
|
1595 }
|
nickjillings@1370
|
1596 }
|
nickjillings@1370
|
1597 }
|
nickjillings@1370
|
1598 };
|
nickjillings@1370
|
1599 this.findIndex = function(element,index,array){
|
nickjillings@1370
|
1600 if (element.name == this.name)
|
nickjillings@1370
|
1601 return true;
|
nickjillings@1370
|
1602 else
|
nickjillings@1370
|
1603 return false;
|
nickjillings@1370
|
1604 };
|
nickjillings@1370
|
1605 this.findNode = function(element,index,array){
|
nickjillings@1370
|
1606 if (element.name == this.name)
|
nickjillings@1370
|
1607 return true;
|
nickjillings@1370
|
1608 else
|
nickjillings@1370
|
1609 return false;
|
nickjillings@1370
|
1610 };
|
nickjillings@1370
|
1611 this.input.type = "checkbox";
|
nickjillings@1370
|
1612 this.input.setAttribute("name",name);
|
nickjillings@1370
|
1613 this.input.addEventListener("change",this,false);
|
nickjillings@1370
|
1614 this.root.appendChild(this.input);
|
nickjillings@1370
|
1615 this.root.className = "attribute";
|
nickjillings@1370
|
1616 return this;
|
nickjillings@1370
|
1617 }
|
nickjillings@1370
|
1618
|
nickjillings@1370
|
1619 this.build = function(name,id,parent)
|
nickjillings@1370
|
1620 {
|
nickjillings@1370
|
1621 var obj = this.parent.createGeneralNodeDOM(name,id,parent);
|
nickjillings@1370
|
1622
|
nickjillings@1370
|
1623 this.rootDOM = obj.rootDOM;
|
nickjillings@1370
|
1624 this.titleDOM = obj.titleDOM;
|
nickjillings@1370
|
1625 this.attributeDOM = obj.attributeDOM;
|
nickjillings@1370
|
1626 this.childrenDOM = obj.childrenDOM;
|
nickjillings@1370
|
1627 this.buttonDOM = obj.buttonsDOM;
|
nickjillings@1370
|
1628 this.HTMLPoint = parent;
|
nickjillings@1370
|
1629 this.rootDOM.removeChild(this.attributeDOM);
|
nicholas@2243
|
1630 if (parent.id != "setup") {
|
nicholas@2243
|
1631 // Put in the <title> node:
|
nicholas@2243
|
1632 this.titleNode = {
|
nicholas@2243
|
1633 root: document.createElement("div"),
|
nicholas@2243
|
1634 label: document.createElement("span"),
|
nicholas@2243
|
1635 input: document.createElement("input"),
|
nicholas@2243
|
1636 parent: this,
|
nicholas@2243
|
1637 handleEvent: function(event) {
|
nicholas@2243
|
1638 this.parent.specification.title = event.currentTarget.value;
|
nicholas@2243
|
1639 }
|
nicholas@2243
|
1640 }
|
nicholas@2243
|
1641 this.titleNode.label.textContent = "Axis Title:";
|
nicholas@2243
|
1642 this.titleNode.root.className = "node-children";
|
nicholas@2243
|
1643 this.titleNode.root.appendChild(this.titleNode.label);
|
nicholas@2243
|
1644 this.titleNode.root.appendChild(this.titleNode.input);
|
nicholas@2243
|
1645 this.titleNode.input.addEventListener("change",this.titleNode,false);
|
nicholas@2243
|
1646 this.titleNode.input.value = this.specification.title;
|
nicholas@2243
|
1647 this.children.push(this.titleNode);
|
nicholas@2243
|
1648 this.childrenDOM.appendChild(this.titleNode.root);
|
nicholas@2243
|
1649 }
|
nicholas@2243
|
1650
|
nickjillings@1370
|
1651 // Put in the check / show options as individual children
|
nickjillings@1370
|
1652 var checks = this.parent.createGeneralNodeDOM("Checks","setup-interface-checks",this);
|
nickjillings@1370
|
1653
|
nickjillings@1370
|
1654 var interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1655 var checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
1656 var testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1657 var interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("checks")[0];
|
nickjillings@1370
|
1658 testXML = testXML.getAllElementsByTagName("checks");
|
nicholas@2390
|
1659 var interfaceXMLChild = interfaceXML.firstElementChild;
|
nicholas@2390
|
1660 while (interfaceXMLChild)
|
nickjillings@1370
|
1661 {
|
nicholas@2390
|
1662 var obj = new this.createIOasAttr(interfaceXMLChild.getAttribute("name"),this.specification,this,"check");
|
nickjillings@1370
|
1663 for (var option of this.specification.options)
|
nickjillings@1370
|
1664 {
|
nickjillings@1370
|
1665 if (option.name == obj.name)
|
nickjillings@1370
|
1666 {
|
nickjillings@1370
|
1667 obj.input.checked = true;
|
nickjillings@1370
|
1668 break;
|
nickjillings@1370
|
1669 }
|
nickjillings@1370
|
1670 }
|
nickjillings@1370
|
1671 if (parent.id != "setup") {
|
nickjillings@1370
|
1672 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
|
nickjillings@1381
|
1673 if (node != undefined) {
|
nickjillings@1381
|
1674 if (node.input.checked) {
|
nickjillings@1381
|
1675 obj.input.checked = false;
|
nickjillings@1381
|
1676 obj.input.disabled = true;
|
nickjillings@1381
|
1677 }
|
nickjillings@1370
|
1678 }
|
nickjillings@1370
|
1679 }
|
nickjillings@1370
|
1680 var text = document.createElement('span');
|
nicholas@2390
|
1681 text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
|
nickjillings@1370
|
1682 obj.root.appendChild(text);
|
nickjillings@1370
|
1683 checks.attributeDOM.appendChild(obj.root);
|
nickjillings@1370
|
1684 checks.attributes.push(obj);
|
nicholas@2390
|
1685 interfaceXMLChild = interfaceXMLChild.nextElementSibling;
|
nickjillings@1370
|
1686 }
|
nickjillings@1370
|
1687 this.children.push(checks);
|
nickjillings@1370
|
1688 this.childrenDOM.appendChild(checks.rootDOM);
|
nickjillings@1370
|
1689
|
nickjillings@1370
|
1690 var show = this.parent.createGeneralNodeDOM("Show","setup-interface-show",this);
|
nickjillings@1370
|
1691 interfaceName = popupStateNodes.state[1].select.value;
|
nickjillings@1370
|
1692 checkText = interfaceSpecs.getElementsByTagName("global")[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
1693 testXML = interfaceSpecs.getElementsByTagName("tests")[0].getAllElementsByName(interfaceName)[0];
|
nickjillings@1370
|
1694 interfaceXML = interfaceSpecs.getAllElementsByTagName("interfaces")[0].getAllElementsByName(testXML.getAttribute("interface"))[0].getAllElementsByTagName("show")[0];
|
nickjillings@1370
|
1695 testXML = testXML.getAllElementsByTagName("show");
|
nicholas@2390
|
1696 interfaceXMLChild = interfaceXML.firstElementChild;
|
nicholas@2390
|
1697 while(interfaceXMLChild)
|
nickjillings@1370
|
1698 {
|
nicholas@2390
|
1699 var obj = new this.createIOasAttr(interfaceXMLChild.getAttribute("name"),this.specification,this,"show");
|
nickjillings@1370
|
1700 for (var option of this.specification.options)
|
nickjillings@1370
|
1701 {
|
nickjillings@1370
|
1702 if (option.name == obj.name)
|
nickjillings@1370
|
1703 {
|
nickjillings@1370
|
1704 obj.input.checked = true;
|
nickjillings@1370
|
1705 break;
|
nickjillings@1370
|
1706 }
|
nickjillings@1370
|
1707 }
|
nickjillings@1370
|
1708 if (parent.id != "setup") {
|
nickjillings@1370
|
1709 var node = convert.interfaceDOM.children[0].attributes.find(obj.findNode,obj);
|
nickjillings@1381
|
1710 if (node != undefined) {
|
nickjillings@1381
|
1711 if (node.input.checked) {
|
nickjillings@1381
|
1712 obj.input.checked = false;
|
nickjillings@1381
|
1713 obj.input.disabled = true;
|
nickjillings@1381
|
1714 }
|
nickjillings@1370
|
1715 }
|
nickjillings@1370
|
1716 }
|
nickjillings@1370
|
1717 var text = document.createElement('span');
|
nicholas@2390
|
1718 text.textContent = checkText.getAllElementsByName(interfaceXMLChild.getAttribute("name"))[0].textContent;
|
nickjillings@1370
|
1719 obj.root.appendChild(text);
|
nickjillings@1370
|
1720 show.attributeDOM.appendChild(obj.root);
|
nickjillings@1370
|
1721 show.attributes.push(obj);
|
nicholas@2390
|
1722 interfaceXMLChild = interfaceXMLChild.nextElementSibling;
|
nickjillings@1370
|
1723 }
|
nickjillings@1370
|
1724 this.children.push(show);
|
nickjillings@1370
|
1725 this.childrenDOM.appendChild(show.rootDOM);
|
nickjillings@1370
|
1726
|
nickjillings@1370
|
1727 if (parent.id == "setup")
|
nickjillings@1370
|
1728 {
|
nickjillings@1370
|
1729 } else {
|
nickjillings@1370
|
1730 var nameAttr = this.parent.convertAttributeToDOM(this,specification.schema.getAllElementsByName("name")[0]);
|
nickjillings@1370
|
1731 this.attributeDOM.appendChild(nameAttr.holder);
|
nickjillings@1370
|
1732 this.attributes.push(nameAttr);
|
nickjillings@1385
|
1733 var scales = new this.scalesNode(this,this.specification);
|
nickjillings@1385
|
1734 this.children.push(scales);
|
nickjillings@1385
|
1735 this.childrenDOM.appendChild(scales.rootDOM);
|
nickjillings@1370
|
1736 }
|
nickjillings@1370
|
1737 if (parent != undefined)
|
nickjillings@1370
|
1738 {
|
nickjillings@1370
|
1739 parent.appendChild(this.rootDOM);
|
nickjillings@1370
|
1740 }
|
nickjillings@1370
|
1741 }
|
nickjillings@1385
|
1742
|
nickjillings@1385
|
1743 this.scalesNode = function(parent,rootObject)
|
nickjillings@1385
|
1744 {
|
nickjillings@1385
|
1745 this.type = "scalesNode";
|
nickjillings@1385
|
1746 this.rootDOM = document.createElement("div");
|
nickjillings@1385
|
1747 this.titleDOM = document.createElement("span");
|
nickjillings@1385
|
1748 this.attributeDOM = document.createElement("div");
|
nickjillings@1385
|
1749 this.attributes = [];
|
nickjillings@1385
|
1750 this.childrenDOM = document.createElement("div");
|
nickjillings@1385
|
1751 this.children = [];
|
nickjillings@1385
|
1752 this.buttonDOM = document.createElement("div");
|
nickjillings@1385
|
1753 this.parent = parent;
|
nickjillings@1385
|
1754 this.specification = rootObject;
|
nickjillings@1385
|
1755 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1385
|
1756 this.rootDOM.className = "node";
|
nickjillings@1385
|
1757
|
nickjillings@1385
|
1758 var titleDiv = document.createElement('div');
|
nickjillings@1385
|
1759 titleDiv.className = "node-title";
|
nickjillings@1385
|
1760 this.titleDOM.className = "node-title";
|
nickjillings@1385
|
1761 this.titleDOM.textContent = "Interface Scales";
|
nickjillings@1385
|
1762 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1385
|
1763
|
nickjillings@1385
|
1764 this.attributeDOM.className = "node-attributes";
|
nickjillings@1385
|
1765 this.childrenDOM.className = "node-children";
|
nickjillings@1385
|
1766 this.buttonDOM.className = "node-buttons";
|
nickjillings@1385
|
1767
|
nickjillings@1385
|
1768 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1385
|
1769 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1385
|
1770 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1385
|
1771 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1385
|
1772
|
nickjillings@1385
|
1773 this.editButton = {
|
nickjillings@1385
|
1774 button: document.createElement("button"),
|
nickjillings@1385
|
1775 parent: this,
|
nickjillings@1385
|
1776 handleEvent: function(event) {
|
nickjillings@1385
|
1777 popupObject.show();
|
nickjillings@1385
|
1778 popupObject.postNode(popupStateNodes.state[6]);
|
nickjillings@1385
|
1779 popupStateNodes.state[6].generate(this.parent.specification,this.parent);
|
nickjillings@1385
|
1780 }
|
nickjillings@1385
|
1781 };
|
nickjillings@1385
|
1782 this.editButton.button.textContent = "Edit Scales/Markers";
|
nickjillings@1385
|
1783 this.editButton.button.addEventListener("click",this.editButton,false);
|
nickjillings@1385
|
1784 this.buttonDOM.appendChild(this.editButton.button);
|
nickjillings@1385
|
1785 }
|
nickjillings@1370
|
1786 }
|
nickjillings@1370
|
1787
|
nickjillings@1370
|
1788 this.surveyNode = function(parent,rootObject,location)
|
nickjillings@1370
|
1789 {
|
nickjillings@1375
|
1790 this.type = "surveyNode";
|
nickjillings@1370
|
1791 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1792 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1793 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1794 this.attributes = [];
|
nickjillings@1370
|
1795 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1796 this.children = [];
|
nickjillings@1370
|
1797 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1798 this.parent = parent;
|
nickjillings@1370
|
1799 this.specification = rootObject;
|
nickjillings@1370
|
1800 this.schema = specification.schema.getAllElementsByName("survey")[1];
|
nickjillings@1370
|
1801 this.rootDOM.className = "node";
|
nickjillings@1370
|
1802
|
nickjillings@1370
|
1803 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1804 titleDiv.className = "node-title";
|
nickjillings@1370
|
1805 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1806 this.titleDOM.textContent = "Survey";
|
nickjillings@1370
|
1807 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1808
|
nickjillings@1370
|
1809 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1810 var locationAttr = document.createElement("span");
|
nickjillings@1370
|
1811 this.attributeDOM.appendChild(locationAttr);
|
nickjillings@1370
|
1812 if (location == "Pre" || location == "pre") {
|
nickjillings@1370
|
1813 locationAttr.textContent = "Location: Before";
|
nickjillings@1370
|
1814 } else {
|
nickjillings@1370
|
1815 locationAttr.textContent = "Location: After";
|
nickjillings@1370
|
1816 }
|
nickjillings@1370
|
1817 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1818 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1819
|
nickjillings@1370
|
1820 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1821 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1822 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1823 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1824
|
nickjillings@1370
|
1825 this.surveyEntryNode = function(parent,rootObject)
|
nickjillings@1370
|
1826 {
|
nickjillings@1375
|
1827 this.type = "surveyEntryNode";
|
nickjillings@1370
|
1828 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
1829 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
1830 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
1831 this.attributes = [];
|
nickjillings@1370
|
1832 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
1833 this.children = [];
|
nickjillings@1370
|
1834 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
1835 this.parent = parent;
|
nickjillings@1370
|
1836 this.specification = rootObject;
|
nickjillings@1370
|
1837 this.schema = specification.schema.getAllElementsByName("surveyentry")[1];
|
nickjillings@1370
|
1838
|
nickjillings@1370
|
1839 this.rootDOM.className = "node";
|
nickjillings@1370
|
1840 this.rootDOM.style.minWidth = "50%";
|
nickjillings@1370
|
1841
|
nickjillings@1370
|
1842 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
1843 titleDiv.className = "node-title";
|
nickjillings@1370
|
1844 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
1845 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
1846
|
nickjillings@1370
|
1847 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
1848 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
1849 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
1850
|
nickjillings@1370
|
1851 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
1852 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
1853 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
1854 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
1855
|
nickjillings@1375
|
1856 this.build = function()
|
nickjillings@1375
|
1857 {
|
nickjillings@1375
|
1858 this.attributeDOM.innerHTML = null;
|
nickjillings@1375
|
1859 this.childrenDOM.innerHTML = null;
|
nickjillings@1375
|
1860 var statementRoot = document.createElement("div");
|
nickjillings@1375
|
1861 var statement = document.createElement("span");
|
nickjillings@1375
|
1862 statement.textContent = "Statement / Question: "+this.specification.statement;
|
nickjillings@1375
|
1863 statementRoot.appendChild(statement);
|
nickjillings@1375
|
1864 this.children.push(statementRoot);
|
nickjillings@1375
|
1865 this.childrenDOM.appendChild(statementRoot);
|
nickjillings@1375
|
1866 switch(this.specification.type)
|
nickjillings@1375
|
1867 {
|
nickjillings@1375
|
1868 case "statement":
|
nickjillings@1375
|
1869 this.titleDOM.textContent = "Statement";
|
nickjillings@1375
|
1870 break;
|
nickjillings@1375
|
1871 case "question":
|
nickjillings@1375
|
1872 this.titleDOM.textContent = "Question";
|
nickjillings@1375
|
1873 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1874 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
|
nickjillings@1375
|
1875 var boxsize = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("boxsize")[0]);
|
nickjillings@1375
|
1876 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1877 this.attributes.push(id);
|
nickjillings@1375
|
1878 this.attributeDOM.appendChild(mandatory.holder);
|
nickjillings@1375
|
1879 this.attributes.push(mandatory);
|
nickjillings@1375
|
1880 this.attributeDOM.appendChild(boxsize.holder);
|
nickjillings@1375
|
1881 this.attributes.push(boxsize);
|
nickjillings@1375
|
1882 break;
|
nickjillings@1375
|
1883 case "number":
|
nickjillings@1375
|
1884 this.titleDOM.textContent = "Number";
|
nickjillings@1375
|
1885 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1886 var mandatory = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("mandatory")[0]);
|
nickjillings@1375
|
1887 var min = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("min")[0]);
|
nickjillings@1375
|
1888 var max = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("max")[0]);
|
nickjillings@1375
|
1889 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1890 this.attributes.push(id);
|
nickjillings@1375
|
1891 this.attributeDOM.appendChild(min.holder);
|
nickjillings@1375
|
1892 this.attributes.push(min);
|
nickjillings@1375
|
1893 this.attributeDOM.appendChild(max.holder);
|
nickjillings@1375
|
1894 this.attributes.push(max);
|
nickjillings@1375
|
1895 break;
|
nickjillings@1375
|
1896 case "checkbox":
|
nickjillings@1375
|
1897 this.titleDOM.textContent = "Checkbox";
|
nickjillings@1375
|
1898 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1899 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1900 this.attributes.push(id);
|
nickjillings@1375
|
1901 break;
|
nickjillings@1375
|
1902 case "radio":
|
nickjillings@1375
|
1903 this.titleDOM.textContent = "Radio";
|
nickjillings@1375
|
1904 var id = convert.convertAttributeToDOM(this.specification,specification.schema.getAllElementsByName("id")[0]);
|
nickjillings@1375
|
1905 this.attributeDOM.appendChild(id.holder);
|
nickjillings@1375
|
1906 this.attributes.push(id);
|
nickjillings@1375
|
1907 break;
|
nickjillings@1375
|
1908 }
|
nickjillings@1370
|
1909 }
|
nickjillings@1375
|
1910 this.build();
|
nickjillings@1370
|
1911
|
nickjillings@1370
|
1912 this.editNode = {
|
nickjillings@1370
|
1913 root: document.createElement("button"),
|
nickjillings@1370
|
1914 parent: this,
|
nickjillings@1370
|
1915 handleEvent: function()
|
nickjillings@1370
|
1916 {
|
nickjillings@1370
|
1917 popupObject.show();
|
nickjillings@1375
|
1918 popupStateNodes.state[5].generate(this.parent.specification,this.parent);
|
nickjillings@1370
|
1919 popupObject.postNode(popupStateNodes.state[5]);
|
nickjillings@1370
|
1920 }
|
nickjillings@1370
|
1921 }
|
nickjillings@1370
|
1922 this.editNode.root.textContent = "Edit Entry";
|
nickjillings@1370
|
1923 this.editNode.root.addEventListener("click",this.editNode,false);
|
nickjillings@1370
|
1924 this.buttonDOM.appendChild(this.editNode.root);
|
nickjillings@1370
|
1925
|
nickjillings@1370
|
1926 this.deleteNode = {
|
nickjillings@1370
|
1927 root: document.createElement("button"),
|
nickjillings@1370
|
1928 parent: this,
|
nickjillings@1370
|
1929 handleEvent: function()
|
nickjillings@1370
|
1930 {
|
nickjillings@1370
|
1931 var optionList = this.parent.parent.specification.options;
|
nickjillings@1370
|
1932 var childList = this.parent.parent.children;
|
nickjillings@1370
|
1933 for (var i=0; i <this.parent.parent.specification.options.length; i++)
|
nickjillings@1370
|
1934 {
|
nickjillings@1370
|
1935 var option = this.parent.parent.specification.options[i];
|
nickjillings@1370
|
1936 if (option == this.parent.specification)
|
nickjillings@1370
|
1937 {
|
nickjillings@1370
|
1938 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
|
nickjillings@1370
|
1939 if (i == this.parent.parent.specification.options.length-1)
|
nickjillings@1370
|
1940 {
|
nickjillings@1370
|
1941 optionList = optionList.slice(0,i);
|
nickjillings@1370
|
1942 childList = childList.slice(0,i);
|
nickjillings@1370
|
1943 }
|
nickjillings@1370
|
1944 else {
|
nickjillings@1370
|
1945 optionList = optionList.slice(0,i).concat(optionList.slice(i+1));
|
nickjillings@1370
|
1946 childList = childList.slice(0,i).concat(childList.slice(i+1));
|
nickjillings@1370
|
1947 }
|
nickjillings@1370
|
1948 this.parent.parent.specification.options = optionList;
|
nickjillings@1370
|
1949 this.parent.parent.children = childList;
|
nickjillings@1370
|
1950 }
|
nickjillings@1370
|
1951 }
|
nickjillings@1370
|
1952 }
|
nickjillings@1370
|
1953 }
|
nickjillings@1370
|
1954 this.deleteNode.root.textContent = "Delete Entry";
|
nickjillings@1370
|
1955 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
|
nickjillings@1370
|
1956 this.buttonDOM.appendChild(this.deleteNode.root);
|
n@2414
|
1957
|
n@2416
|
1958 this.moveToPosition = function(new_index){
|
n@2416
|
1959 new_index = Math.min(new_index,this.parent.children.length);
|
n@2416
|
1960 var curr_index = this.parent.children.findIndex(function(elem){
|
n@2416
|
1961 if (elem == this) {return true;} else {return false;}
|
n@2416
|
1962 },this);
|
n@2416
|
1963 // Split at the current location to remove the node and shift all the children up
|
n@2416
|
1964 var tail = this.parent.children.splice(curr_index+1);
|
n@2416
|
1965 this.parent.children.pop();
|
n@2416
|
1966 this.parent.children = this.parent.children.concat(tail);
|
n@2416
|
1967
|
n@2416
|
1968 //Split at the new location and insert the node
|
n@2416
|
1969 tail = this.parent.children.splice(new_index);
|
n@2416
|
1970 this.parent.children.push(this);
|
n@2416
|
1971 this.parent.children = this.parent.children.concat(tail);
|
n@2416
|
1972
|
n@2416
|
1973 // Re-build the specification
|
n@2416
|
1974 this.parent.specification.options = [];
|
n@2416
|
1975 this.parent.childrenDOM.innerHTML = "";
|
n@2416
|
1976 for (var obj of this.parent.children) {
|
n@2416
|
1977 this.parent.specification.options.push(obj.specification);
|
n@2416
|
1978 this.parent.childrenDOM.appendChild(obj.rootDOM);
|
n@2416
|
1979 }
|
n@2420
|
1980 this.parent.children.forEach(function(obj,index){
|
n@2420
|
1981 obj.moveButtons.disable(index);
|
n@2420
|
1982 });
|
n@2414
|
1983 }
|
n@2420
|
1984
|
n@2420
|
1985 this.moveButtons = {
|
n@2420
|
1986 root_up: document.createElement("button"),
|
n@2420
|
1987 root_down: document.createElement("button"),
|
n@2420
|
1988 parent: this,
|
n@2420
|
1989 handleEvent: function(event) {
|
n@2420
|
1990 var index = this.parent.parent.children.indexOf(this.parent);
|
n@2420
|
1991 if (event.currentTarget.getAttribute("direction") == "up") {
|
n@2420
|
1992 index = Math.max(index-1,0);
|
n@2420
|
1993 } else if (event.currentTarget.getAttribute("direction") == "down") {
|
n@2420
|
1994 index = Math.min(index+1,this.parent.parent.children.length-1);
|
n@2420
|
1995 }
|
n@2420
|
1996 this.parent.moveToPosition(index);
|
n@2420
|
1997 this.disable(index);
|
n@2420
|
1998 },
|
n@2420
|
1999 disable: function(index) {
|
n@2420
|
2000 if (index == 0) {
|
n@2420
|
2001 this.root_up.disabled = true;
|
n@2420
|
2002 } else {
|
n@2420
|
2003 this.root_up.disabled = false;
|
n@2420
|
2004 }
|
n@2420
|
2005 if (index == this.parent.parent.children.length-1) {
|
n@2420
|
2006 this.root_down.disabled = true;
|
n@2420
|
2007 } else {
|
n@2420
|
2008 this.root_down.disabled = false;
|
n@2420
|
2009 }
|
n@2420
|
2010 }
|
n@2420
|
2011 }
|
n@2420
|
2012 this.moveButtons.root_up.setAttribute("direction","up");
|
n@2420
|
2013 this.moveButtons.root_down.setAttribute("direction","down");
|
n@2420
|
2014 this.moveButtons.root_up.addEventListener("click",this.moveButtons,false);
|
n@2420
|
2015 this.moveButtons.root_down.addEventListener("click",this.moveButtons,false);
|
n@2420
|
2016 this.moveButtons.root_up.textContent = "Move Up";
|
n@2420
|
2017 this.moveButtons.root_down.textContent = "Move Down";
|
n@2420
|
2018 this.buttonDOM.appendChild(this.moveButtons.root_up);
|
n@2420
|
2019 this.buttonDOM.appendChild(this.moveButtons.root_down);
|
nickjillings@1370
|
2020 }
|
nickjillings@1370
|
2021 this.addNode = {
|
nickjillings@1370
|
2022 root: document.createElement("button"),
|
nickjillings@1370
|
2023 parent: this,
|
nickjillings@1370
|
2024 handleEvent: function()
|
nickjillings@1370
|
2025 {
|
nickjillings@2194
|
2026 var newNode = new this.parent.specification.OptionNode(this.parent.specification);
|
nickjillings@1370
|
2027 this.parent.specification.options.push(newNode);
|
nickjillings@1370
|
2028 popupObject.show();
|
nickjillings@1370
|
2029 popupStateNodes.state[5].generate(newNode,this.parent);
|
nickjillings@1370
|
2030 popupObject.postNode(popupStateNodes.state[5]);
|
nickjillings@1370
|
2031 }
|
nickjillings@1370
|
2032 }
|
nickjillings@1370
|
2033 this.addNode.root.textContent = "Add Survey Entry";
|
nickjillings@1370
|
2034 this.addNode.root.addEventListener("click",this.addNode,false);
|
nickjillings@1370
|
2035 this.buttonDOM.appendChild(this.addNode.root);
|
nickjillings@1370
|
2036
|
nickjillings@1370
|
2037 for (var option of this.specification.options)
|
nickjillings@1370
|
2038 {
|
nickjillings@1370
|
2039 var newNode = new this.surveyEntryNode(this,option);
|
nickjillings@1370
|
2040 this.children.push(newNode);
|
nickjillings@1370
|
2041 this.childrenDOM.appendChild(newNode.rootDOM);
|
nickjillings@1370
|
2042 }
|
n@2420
|
2043
|
n@2420
|
2044 this.children.forEach(function(obj,index){
|
n@2420
|
2045 obj.moveButtons.disable(index);
|
n@2420
|
2046 });
|
nickjillings@1370
|
2047 }
|
nickjillings@1370
|
2048
|
nickjillings@1370
|
2049 this.pageNode = function(parent,rootObject)
|
nickjillings@1370
|
2050 {
|
nickjillings@1375
|
2051 this.type = "pageNode";
|
nickjillings@1370
|
2052 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
2053 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
2054 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
2055 this.attributes = [];
|
nickjillings@1370
|
2056 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
2057 this.children = [];
|
nickjillings@1370
|
2058 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
2059 this.parent = parent;
|
nickjillings@1370
|
2060 this.specification = rootObject;
|
nickjillings@1370
|
2061 this.schema = specification.schema.getAllElementsByName("page")[0];
|
nickjillings@1370
|
2062 this.rootDOM.className = "node";
|
nickjillings@1370
|
2063
|
nickjillings@1370
|
2064 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
2065 titleDiv.className = "node-title";
|
nickjillings@1370
|
2066 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
2067 this.titleDOM.textContent = "Test Page";
|
nickjillings@1370
|
2068 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
2069
|
nickjillings@1370
|
2070 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
2071 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
2072 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
2073
|
nickjillings@1370
|
2074 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
2075 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
2076 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
2077 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
2078
|
nickjillings@1370
|
2079 // Do the comment prefix node
|
nickjillings@1370
|
2080 var cpn = this.parent.createGeneralNodeDOM("Comment Prefix",""+this.specification.id+"-commentprefix",this.parent);
|
nickjillings@1370
|
2081 cpn.rootDOM.removeChild(cpn.attributeDOM);
|
nickjillings@1370
|
2082 var obj = {
|
nickjillings@1370
|
2083 root: document.createElement("div"),
|
nickjillings@1370
|
2084 input: document.createElement("input"),
|
nickjillings@1370
|
2085 parent: this,
|
nickjillings@1370
|
2086 handleEvent: function()
|
nickjillings@1370
|
2087 {
|
nickjillings@1370
|
2088 this.parent.specification.commentBoxPrefix = event.currentTarget.value;
|
nickjillings@1370
|
2089 }
|
nickjillings@1370
|
2090 }
|
nickjillings@1370
|
2091 cpn.children.push(obj);
|
nickjillings@1370
|
2092 cpn.childrenDOM.appendChild(obj.root);
|
nickjillings@1370
|
2093 obj.root.appendChild(obj.input);
|
nickjillings@1370
|
2094 obj.input.addEventListener("change",obj,false);
|
nickjillings@1370
|
2095 obj.input.value = this.specification.commentBoxPrefix;
|
nickjillings@1370
|
2096 this.childrenDOM.appendChild(cpn.rootDOM);
|
nickjillings@1370
|
2097 this.children.push(cpn);
|
nickjillings@1370
|
2098
|
nickjillings@1370
|
2099 // Now both before and after surveys
|
nickjillings@1370
|
2100 if (this.specification.preTest == undefined){
|
nickjillings@2194
|
2101 this.specification.preTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
2102 this.specification.preTest.location = "pre";
|
nickjillings@1370
|
2103 }
|
nickjillings@1370
|
2104 if (this.specification.postTest == undefined){
|
nickjillings@2194
|
2105 this.specification.postTest = new specification.surveyNode(specification);
|
nickjillings@1370
|
2106 this.specification.postTest.location = "post";
|
nickjillings@1370
|
2107 }
|
nickjillings@1370
|
2108 var surveyBefore = new this.parent.surveyNode(this,this.specification.preTest,"Pre");
|
nickjillings@1370
|
2109 var surveyAfter = new this.parent.surveyNode(this,this.specification.postTest,"Post");
|
nickjillings@1370
|
2110 this.children.push(surveyBefore);
|
nickjillings@1370
|
2111 this.children.push(surveyAfter);
|
nickjillings@1370
|
2112 this.childrenDOM.appendChild(surveyBefore.rootDOM);
|
nickjillings@1370
|
2113 this.childrenDOM.appendChild(surveyAfter.rootDOM);
|
nickjillings@1370
|
2114
|
nickjillings@1370
|
2115 // Build the attributes
|
nickjillings@1370
|
2116 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
|
nickjillings@1370
|
2117 for (var i=0; i<attributeList.length; i++)
|
nickjillings@1370
|
2118 {
|
nickjillings@1370
|
2119 var attributeName = attributeList[i].getAttribute('name');
|
nickjillings@1370
|
2120 var attrObject = this.parent.convertAttributeToDOM(rootObject,attributeList[i]);
|
nickjillings@1370
|
2121 this.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
2122 this.attributes.push(attrObject);
|
nickjillings@1370
|
2123 }
|
nickjillings@1370
|
2124
|
nickjillings@1370
|
2125 this.interfaces = [];
|
nickjillings@1370
|
2126
|
n@2421
|
2127 this.getAudioElements = function() {
|
n@2421
|
2128 var array = [];
|
n@2421
|
2129 for (var i=0; i<this.children.length; i++) {
|
n@2421
|
2130 if (this.children[i].type == "audioElementNode") {
|
n@2421
|
2131 array[array.length] = this.children[i];
|
n@2421
|
2132 }
|
n@2421
|
2133 }
|
n@2421
|
2134 return array;
|
n@2421
|
2135 }
|
n@2421
|
2136
|
n@2421
|
2137 this.redrawChildren = function() {
|
n@2421
|
2138 this.childrenDOM.innerHTML = "";
|
n@2421
|
2139 for(var child of this.children) {
|
n@2421
|
2140 this.childrenDOM.appendChild(child.rootDOM);
|
n@2421
|
2141 }
|
n@2421
|
2142 }
|
n@2421
|
2143
|
nickjillings@1370
|
2144 this.audioElementNode = function(parent,rootObject)
|
nickjillings@1370
|
2145 {
|
nickjillings@1375
|
2146 this.type = "audioElementNode";
|
nickjillings@1370
|
2147 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
2148 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
2149 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
2150 this.attributes = [];
|
nickjillings@1370
|
2151 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
2152 this.children = [];
|
nickjillings@1370
|
2153 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
2154 this.parent = parent;
|
nickjillings@1370
|
2155 this.specification = rootObject;
|
nickjillings@1370
|
2156 this.schema = specification.schema.getAllElementsByName("audioelement")[0];
|
nickjillings@1370
|
2157 this.rootDOM.className = "node";
|
nickjillings@1370
|
2158
|
nickjillings@1370
|
2159 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
2160 titleDiv.className = "node-title";
|
nickjillings@1370
|
2161 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
2162 this.titleDOM.textContent = "Audio Element";
|
nickjillings@1370
|
2163 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
2164
|
nickjillings@1370
|
2165 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
2166 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
2167 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
2168
|
nickjillings@1370
|
2169 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
2170 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
2171 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
2172 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
2173
|
nickjillings@1370
|
2174 // Build the attributes
|
nickjillings@1370
|
2175 var attributeList = this.schema.getAllElementsByTagName("xs:attribute");
|
nickjillings@1370
|
2176 for (var i=0; i<attributeList.length; i++)
|
nickjillings@1370
|
2177 {
|
nickjillings@1370
|
2178 var attributeName = attributeList[i].getAttribute('name');
|
nickjillings@1370
|
2179 var attrObject = this.parent.parent.convertAttributeToDOM(rootObject,attributeList[i]);
|
nickjillings@1370
|
2180 this.attributeDOM.appendChild(attrObject.holder);
|
nickjillings@1370
|
2181 this.attributes.push(attrObject);
|
nickjillings@1370
|
2182 }
|
nickjillings@1370
|
2183
|
nickjillings@1370
|
2184 this.deleteNode = {
|
nickjillings@1370
|
2185 root: document.createElement("button"),
|
nickjillings@1370
|
2186 parent: this,
|
nickjillings@1370
|
2187 handleEvent: function()
|
nickjillings@1370
|
2188 {
|
nickjillings@1370
|
2189 var i = this.parent.parent.specification.audioElements.findIndex(this.findNode,this);
|
nickjillings@1370
|
2190 if (i >= 0) {
|
nickjillings@1370
|
2191 var aeList = this.parent.parent.specification.audioElements;
|
nickjillings@1370
|
2192 if (i < aeList.length-1) {
|
nickjillings@1370
|
2193 aeList = aeList.slice(0,i).concat(aeList.slice(i+1));
|
nickjillings@1370
|
2194 } else {
|
nickjillings@1370
|
2195 aeList = aeList.slice(0,i);
|
nickjillings@1370
|
2196 }
|
nickjillings@1370
|
2197 }
|
nickjillings@1370
|
2198 i = this.parent.parent.children.findIndex(function(element,index,array){
|
nickjillings@1370
|
2199 if (element == this.parent)
|
nickjillings@1370
|
2200 return true;
|
nickjillings@1370
|
2201 else
|
nickjillings@1370
|
2202 return false;
|
nickjillings@1370
|
2203 },this);
|
nickjillings@1370
|
2204 if (i >= 0) {
|
nickjillings@1370
|
2205 var childList = this.parent.children;
|
nickjillings@1370
|
2206 if (i < aeList.length-1) {
|
nickjillings@1370
|
2207 childList = childList.slice(0,i).concat(childList.slice(i+1));
|
nickjillings@1370
|
2208 } else {
|
nickjillings@1370
|
2209 childList = childList.slice(0,i);
|
nickjillings@1370
|
2210 }
|
nickjillings@1370
|
2211 this.parent.parent.childrenDOM.removeChild(this.parent.rootDOM);
|
nickjillings@1370
|
2212 }
|
nickjillings@1370
|
2213 },
|
nickjillings@1370
|
2214 findNode: function(element,index,array){
|
nickjillings@1370
|
2215 if (element == this.parent.specification)
|
nickjillings@1370
|
2216 return true;
|
nickjillings@1370
|
2217 else
|
nickjillings@1370
|
2218 return false;
|
nickjillings@1370
|
2219 }
|
nickjillings@1370
|
2220 }
|
nickjillings@1370
|
2221 this.deleteNode.root.textContent = "Delete Entry";
|
nickjillings@1370
|
2222 this.deleteNode.root.addEventListener("click",this.deleteNode,false);
|
nickjillings@1370
|
2223 this.buttonDOM.appendChild(this.deleteNode.root);
|
n@2421
|
2224
|
n@2421
|
2225 this.moveButtons = {
|
n@2421
|
2226 root_up: document.createElement("button"),
|
n@2421
|
2227 root_down: document.createElement("button"),
|
n@2421
|
2228 parent: this,
|
n@2421
|
2229 handleEvent: function(event) {
|
n@2421
|
2230 var index = this.parent.parent.getAudioElements().indexOf(this.parent);
|
n@2421
|
2231 if (event.currentTarget.getAttribute("direction") == "up") {
|
n@2421
|
2232 index = Math.max(index-1,0);
|
n@2421
|
2233 } else if (event.currentTarget.getAttribute("direction") == "down") {
|
n@2421
|
2234 index = Math.min(index+1,this.parent.parent.getAudioElements().length-1);
|
n@2421
|
2235 }
|
n@2421
|
2236 this.parent.moveToPosition(index);
|
n@2421
|
2237 this.disable(index);
|
n@2421
|
2238 },
|
n@2421
|
2239 disable: function(index) {
|
n@2421
|
2240 if (index == 0) {
|
n@2421
|
2241 this.root_up.disabled = true;
|
n@2421
|
2242 } else {
|
n@2421
|
2243 this.root_up.disabled = false;
|
n@2421
|
2244 }
|
n@2421
|
2245 if (index == this.parent.parent.getAudioElements().length-1) {
|
n@2421
|
2246 this.root_down.disabled = true;
|
n@2421
|
2247 } else {
|
n@2421
|
2248 this.root_down.disabled = false;
|
n@2421
|
2249 }
|
n@2421
|
2250 }
|
n@2421
|
2251 }
|
n@2421
|
2252 this.moveButtons.root_up.setAttribute("direction","up");
|
n@2421
|
2253 this.moveButtons.root_down.setAttribute("direction","down");
|
n@2421
|
2254 this.moveButtons.root_up.addEventListener("click",this.moveButtons,false);
|
n@2421
|
2255 this.moveButtons.root_down.addEventListener("click",this.moveButtons,false);
|
n@2421
|
2256 this.moveButtons.root_up.textContent = "Move Up";
|
n@2421
|
2257 this.moveButtons.root_down.textContent = "Move Down";
|
n@2421
|
2258 this.buttonDOM.appendChild(this.moveButtons.root_up);
|
n@2421
|
2259 this.buttonDOM.appendChild(this.moveButtons.root_down);
|
n@2421
|
2260
|
n@2421
|
2261 this.moveToPosition = function(new_index) {
|
n@2421
|
2262
|
n@2421
|
2263 // Get the zero-th Object
|
n@2421
|
2264 var zero_object = this.parent.getAudioElements()[0];
|
n@2421
|
2265 var parent_children_root_index = this.parent.children.indexOf(zero_object);
|
n@2421
|
2266 // splice out the array for processing
|
n@2421
|
2267 var process_array = this.parent.children.splice(parent_children_root_index);
|
n@2421
|
2268
|
n@2421
|
2269
|
n@2421
|
2270 new_index = Math.min(new_index, process_array.length);
|
n@2421
|
2271 var curr_index = process_array.findIndex(function(elem){
|
n@2421
|
2272 if (elem == this) {return true;} else {return false;}
|
n@2421
|
2273 },this);
|
n@2421
|
2274
|
n@2421
|
2275 // Split at the current location to remove the node and shift all the children up
|
n@2421
|
2276 var tail = process_array.splice(curr_index+1);
|
n@2421
|
2277 process_array.pop();
|
n@2421
|
2278 process_array = process_array.concat(tail);
|
n@2421
|
2279
|
n@2421
|
2280 //Split at the new location and insert the node
|
n@2421
|
2281 tail = process_array.splice(new_index);
|
n@2421
|
2282 process_array.push(this);
|
n@2421
|
2283 process_array = process_array.concat(tail);
|
n@2421
|
2284
|
n@2421
|
2285 // Re-attach to the parent.children
|
n@2421
|
2286 this.parent.children = this.parent.children.concat(process_array);
|
n@2421
|
2287
|
n@2421
|
2288 // Re-build the specification
|
n@2421
|
2289 this.parent.specification.audioElements = [];
|
n@2421
|
2290 for (var obj of process_array) {
|
n@2421
|
2291 this.parent.specification.audioElements.push(obj.specification);
|
n@2421
|
2292 }
|
n@2421
|
2293 this.parent.redrawChildren();
|
n@2421
|
2294
|
n@2421
|
2295 process_array.forEach(function(obj,index){
|
n@2421
|
2296 obj.moveButtons.disable(index);
|
n@2421
|
2297 });
|
n@2421
|
2298
|
n@2421
|
2299 }
|
nickjillings@1370
|
2300 }
|
nickjillings@1370
|
2301
|
nickjillings@1370
|
2302 this.commentQuestionNode = function(parent,rootObject)
|
nickjillings@1370
|
2303 {
|
nickjillings@1375
|
2304 this.type = "commentQuestionNode";
|
nickjillings@1370
|
2305 this.rootDOM = document.createElement("div");
|
nickjillings@1370
|
2306 this.titleDOM = document.createElement("span");
|
nickjillings@1370
|
2307 this.attributeDOM = document.createElement("div");
|
nickjillings@1370
|
2308 this.attributes = [];
|
nickjillings@1370
|
2309 this.childrenDOM = document.createElement("div");
|
nickjillings@1370
|
2310 this.children = [];
|
nickjillings@1370
|
2311 this.buttonDOM = document.createElement("div");
|
nickjillings@1370
|
2312 this.parent = parent;
|
nickjillings@1370
|
2313 this.specification = rootObject;
|
nickjillings@1370
|
2314 this.schema = specification.schema.getAllElementsByName("page")[0];
|
n@2421
|
2315 this.rootDOM.className = "node audio-element";
|
nickjillings@1370
|
2316
|
nickjillings@1370
|
2317 var titleDiv = document.createElement('div');
|
nickjillings@1370
|
2318 titleDiv.className = "node-title";
|
nickjillings@1370
|
2319 this.titleDOM.className = "node-title";
|
nickjillings@1370
|
2320 this.titleDOM.textContent = "Test Page";
|
nickjillings@1370
|
2321 titleDiv.appendChild(this.titleDOM);
|
nickjillings@1370
|
2322
|
nickjillings@1370
|
2323 this.attributeDOM.className = "node-attributes";
|
nickjillings@1370
|
2324 this.childrenDOM.className = "node-children";
|
nickjillings@1370
|
2325 this.buttonDOM.className = "node-buttons";
|
nickjillings@1370
|
2326
|
nickjillings@1370
|
2327 this.rootDOM.appendChild(titleDiv);
|
nickjillings@1370
|
2328 this.rootDOM.appendChild(this.attributeDOM);
|
nickjillings@1370
|
2329 this.rootDOM.appendChild(this.childrenDOM);
|
nickjillings@1370
|
2330 this.rootDOM.appendChild(this.buttonDOM);
|
nickjillings@1370
|
2331
|
nickjillings@1370
|
2332 }
|
nickjillings@1370
|
2333
|
nickjillings@1374
|
2334 // Build the components
|
nickjillings@1310
|
2335 if (this.specification.interfaces.length == 0) {
|
nickjillings@2194
|
2336 this.specification.interfaces.push(new specification.interfaceNode(specification));
|
nickjillings@1310
|
2337 }
|
nickjillings@1381
|
2338 for (var interfaceObj of this.specification.interfaces)
|
nickjillings@1381
|
2339 {
|
nickjillings@1381
|
2340 var newInterface = new this.parent.interfaceNode(this.parent,interfaceObj);
|
nickjillings@1381
|
2341 newInterface.build("Interface",""+this.specification.id+"-interface",this.childrenDOM);
|
nickjillings@1381
|
2342 this.children.push(newInterface);
|
nickjillings@1381
|
2343 this.interfaces.push(newInterface);
|
nickjillings@1381
|
2344 }
|
nickjillings@1381
|
2345
|
nickjillings@1374
|
2346 for (var elements of this.specification.audioElements)
|
nickjillings@1374
|
2347 {
|
nickjillings@1374
|
2348 var audioElementDOM = new this.audioElementNode(this,elements);
|
nickjillings@1374
|
2349 this.children.push(audioElementDOM);
|
nickjillings@1374
|
2350 this.childrenDOM.appendChild(audioElementDOM.rootDOM);
|
nickjillings@1374
|
2351 }
|
nickjillings@1374
|
2352
|
n@2421
|
2353 this.getAudioElements().forEach(function(elem){
|
n@2421
|
2354 elem.moveButtons.disable();
|
n@2421
|
2355 });
|
n@2421
|
2356
|
nickjillings@1370
|
2357 this.addInterface = {
|
nickjillings@1370
|
2358 root: document.createElement("button"),
|
nickjillings@1370
|
2359 parent: this,
|
nickjillings@1370
|
2360 handleEvent: function() {
|
nickjillings@2194
|
2361 var InterfaceObj = new specification.interfaceNode(specification);
|
nickjillings@1370
|
2362 var newInterface = new this.parent.parent.interfaceNode(this.parent.parent,InterfaceObj);
|
nickjillings@1370
|
2363 newInterface.build("Interface",""+this.parent.specification.id+"-interface",this.parent.childrenDOM);
|
nickjillings@1370
|
2364 this.parent.children.push(newInterface);
|
nickjillings@1370
|
2365 this.parent.specification.interfaces.push(InterfaceObj);
|
nickjillings@1370
|
2366 this.parent.interfaces.push(newInterface);
|
nickjillings@1370
|
2367 }
|
nickjillings@1370
|
2368 }
|
nickjillings@1370
|
2369 this.addInterface.root.textContent = "Add Interface";
|
nickjillings@1370
|
2370 this.addInterface.root.addEventListener("click",this.addInterface,false);
|
nickjillings@1370
|
2371 this.buttonDOM.appendChild(this.addInterface.root);
|
nickjillings@1370
|
2372
|
nickjillings@1370
|
2373 this.addAudioElement = {
|
nickjillings@1370
|
2374 root: document.createElement("button"),
|
nickjillings@1370
|
2375 parent: this,
|
nickjillings@1370
|
2376 handleEvent: function() {
|
nickjillings@2194
|
2377 var audioElementObject = new this.parent.specification.audioElementNode(specification);
|
nickjillings@1370
|
2378 var audioElementDOM = new this.parent.audioElementNode(this.parent,audioElementObject);
|
nickjillings@1370
|
2379 this.parent.specification.audioElements.push(audioElementObject);
|
nickjillings@1370
|
2380 this.parent.children.push(audioElementDOM);
|
nickjillings@1370
|
2381 this.parent.childrenDOM.appendChild(audioElementDOM.rootDOM);
|
nickjillings@1370
|
2382 }
|
nickjillings@1370
|
2383 }
|
nickjillings@1370
|
2384 this.addAudioElement.root.textContent = "Add Audio Element";
|
nickjillings@1370
|
2385 this.addAudioElement.root.addEventListener("click",this.addAudioElement,false);
|
nickjillings@1370
|
2386 this.buttonDOM.appendChild(this.addAudioElement.root);
|
nickjillings@1370
|
2387 }
|
nickjillings@1370
|
2388 } |