annotate test_create/test_create.html @ 753:66d732c2bc14

Index page now links to example APE project, example MUSHRA project, test creator, analysis page, citing info, GNU license, and instructions. Instructions and example project contain info on checkboxes.
author Brecht De Man <BrechtDeMan@users.noreply.github.com>
date Fri, 18 Dec 2015 18:26:46 +0000
parents
children 43801b3d6131 2cd9f09455a5
rev   line source
BrechtDeMan@753 1 <!DOCTYPE html>
BrechtDeMan@753 2 <html lang="en">
BrechtDeMan@753 3 <head>
BrechtDeMan@753 4 <meta charset="utf-8">
BrechtDeMan@753 5
BrechtDeMan@753 6 <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
BrechtDeMan@753 7 Remove this if you use the .htaccess -->
BrechtDeMan@753 8 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
BrechtDeMan@753 9
BrechtDeMan@753 10 <title>WAET: Test Creator</title>
BrechtDeMan@753 11
BrechtDeMan@753 12 <meta name="viewport" content="width=device-width; initial-scale=1.0">
BrechtDeMan@753 13 <script type="text/javascript">
BrechtDeMan@753 14
BrechtDeMan@753 15 var APEInterfaceOptions = [["playhead","page-count"],["Show the playhead/scrubber bar", "Show test page count"]];
BrechtDeMan@753 16 var APEInterfaceChecks = [["fragmentPlayed","fragmentFullPlayback","fragmentMoved","fragmentComments"],["All Fragments Played","All Fragments Played in entirety","All sliders moved","All fragments have comments"]];
BrechtDeMan@753 17 var APEInterfaceMetrics = [["testTimer","elementTimer","elementTracker","elementTrackerFull","elementFlagListenedTo","elementFlagMoved","elementFlagComments"],["Test Duration","Total time each fragment was listened to","Return initialised position of marker","Fragment movement tracker with timestamps","Flag if fragment listened to","Flag if fragment moved","Flag if fragment has comments"]];
BrechtDeMan@753 18 var MUSHRAInterfaceOptions = [[],[]];
BrechtDeMan@753 19 var MUSHRAInterfaceChecks = [["fragmentPlayed","fragmentMoved","fragmentComments"],["All Fragments Played","All sliders moved","All fragments have comments"]];
BrechtDeMan@753 20 var MUSHRAInterfaceMetrics = [["testTimer","elementTimer","elementTracker","elementTrackerFull","elementFlagListenedTo","elementFlagMoved","elementFlagComments"],["Test Duration","Total time each fragment was listened to","Return initialised position of marker","Fragment movement tracker with timestamps","Flag if fragment listened to","Flag if fragment moved","Flag if fragment has comments"]];
BrechtDeMan@753 21 var popupInstance;
BrechtDeMan@753 22 var specificationNode;
BrechtDeMan@753 23 var audioContext;
BrechtDeMan@753 24 var audioObjects = [];
BrechtDeMan@753 25 window.onload = function()
BrechtDeMan@753 26 {
BrechtDeMan@753 27 var AudioContext = window.AudioContext || window.webkitAudioContext;
BrechtDeMan@753 28 audioContext = new AudioContext;
BrechtDeMan@753 29 popupInstance = new popup();
BrechtDeMan@753 30 popupInstance.advanceState();
BrechtDeMan@753 31 specificationNode = new Specification();
BrechtDeMan@753 32 specificationNode.projectReturn = "null";
BrechtDeMan@753 33 };
BrechtDeMan@753 34
BrechtDeMan@753 35 function popup()
BrechtDeMan@753 36 {
BrechtDeMan@753 37 var x = window.innerWidth;
BrechtDeMan@753 38 var y = window.innerHeight;
BrechtDeMan@753 39 this.popupHolder = document.createElement('div');
BrechtDeMan@753 40 this.popupHolder.style.visibility = 'hidden';
BrechtDeMan@753 41 this.popupContent = document.createElement('div');
BrechtDeMan@753 42 this.popupTitle = document.createElement('div');
BrechtDeMan@753 43 this.popupBody = document.createElement('div');
BrechtDeMan@753 44 this.popupFooter = document.createElement('div');
BrechtDeMan@753 45 this.popupTitleText = document.createElement('span');
BrechtDeMan@753 46 this.popupTitle.appendChild(this.popupTitleText);
BrechtDeMan@753 47
BrechtDeMan@753 48 this.popupHolder.className = "popup";
BrechtDeMan@753 49 this.popupHolder.style.left = (x-500)/2 +'px';
BrechtDeMan@753 50 this.popupHolder.style.top = (y-400)/2 + 'px';
BrechtDeMan@753 51 this.popupContent.style.padding = "20px";
BrechtDeMan@753 52 this.popupHolder.appendChild(this.popupContent);
BrechtDeMan@753 53
BrechtDeMan@753 54 this.popupTitle.style.width = "100%";
BrechtDeMan@753 55 this.popupTitle.style.height = "50px";
BrechtDeMan@753 56 this.popupTitle.style.fontSize = "xx-large";
BrechtDeMan@753 57 this.popupContent.appendChild(this.popupTitle);
BrechtDeMan@753 58
BrechtDeMan@753 59 this.popupBody.style.width = "100%";
BrechtDeMan@753 60 this.popupBody.style.height = "280px";
BrechtDeMan@753 61 this.popupContent.appendChild(this.popupBody);
BrechtDeMan@753 62
BrechtDeMan@753 63 this.popupFooter.style.width = "100%";
BrechtDeMan@753 64 this.popupFooter.style.height = "30px";
BrechtDeMan@753 65 this.popupContent.appendChild(this.popupFooter);
BrechtDeMan@753 66 var body = document.getElementsByTagName('body')[0];
BrechtDeMan@753 67 body.appendChild(this.popupHolder);
BrechtDeMan@753 68
BrechtDeMan@753 69 this.pageBlank = document.createElement('div');
BrechtDeMan@753 70 body.appendChild(this.pageBlank);
BrechtDeMan@753 71 this.pageBlank.style.width = "100%";
BrechtDeMan@753 72 this.pageBlank.style.height = "100%";
BrechtDeMan@753 73 this.pageBlank.style.position = "absolute";
BrechtDeMan@753 74 this.pageBlank.style.left = "0px";
BrechtDeMan@753 75 this.pageBlank.style.top = "0px";
BrechtDeMan@753 76 this.pageBlank.style.backgroundColor = "rgba(0,0,0,0.5)";
BrechtDeMan@753 77 this.pageBlank.style.visibility = 'hidden';
BrechtDeMan@753 78
BrechtDeMan@753 79 this.state = 0;
BrechtDeMan@753 80 this.dataTransfer = null;
BrechtDeMan@753 81
BrechtDeMan@753 82 this.showPopup = function()
BrechtDeMan@753 83 {
BrechtDeMan@753 84 this.popupHolder.style.visibility = 'visible';
BrechtDeMan@753 85 this.popupHolder.style.zIndex = "3";
BrechtDeMan@753 86 this.pageBlank.style.visibility = 'visible';
BrechtDeMan@753 87 this.pageBlank.style.zIndex = "2";
BrechtDeMan@753 88 };
BrechtDeMan@753 89
BrechtDeMan@753 90 this.hidePopup = function()
BrechtDeMan@753 91 {
BrechtDeMan@753 92 this.popupHolder.style.visibility = 'hidden';
BrechtDeMan@753 93 this.popupHolder.style.zIndex = "-1";
BrechtDeMan@753 94 this.pageBlank.style.visibility = 'hidden';
BrechtDeMan@753 95 this.pageBlank.style.zIndex = "-2";
BrechtDeMan@753 96 };
BrechtDeMan@753 97
BrechtDeMan@753 98 this.init = function()
BrechtDeMan@753 99 {
BrechtDeMan@753 100 this.popupTitleText.textContent = "Welcome";
BrechtDeMan@753 101 var text = document.createElement('span');
BrechtDeMan@753 102 text.textContent = "Thank you for downloading the Web Audio Evaluation Toolbox. This page will help guide you through creating the documents required to run a test. If you have an existing XML file you wish to edit, please drag and drop it into the box below";
BrechtDeMan@753 103 var dnd = document.createElement('div');
BrechtDeMan@753 104 dnd.style.width = "100%";
BrechtDeMan@753 105 dnd.style.height = "50px";
BrechtDeMan@753 106 dnd.className = "dragndrop";
BrechtDeMan@753 107 dnd.ondragover = function(e) {
BrechtDeMan@753 108 e.stopPropagation();
BrechtDeMan@753 109 e.preventDefault();
BrechtDeMan@753 110 };
BrechtDeMan@753 111 dnd.ondragenter = function(e) {
BrechtDeMan@753 112 e.stopPropagation();
BrechtDeMan@753 113 e.preventDefault();
BrechtDeMan@753 114 this.style.backgroundColor = '#AAFFAA';
BrechtDeMan@753 115 };
BrechtDeMan@753 116 dnd.ondragleave = function(e) {
BrechtDeMan@753 117 e.stopPropagation();
BrechtDeMan@753 118 e.preventDefault();
BrechtDeMan@753 119 this.style.backgroundColor = "#FFFFFF";
BrechtDeMan@753 120 };
BrechtDeMan@753 121 dnd.ondrop = function(e) {
BrechtDeMan@753 122 e.stopPropagation();
BrechtDeMan@753 123 e.preventDefault();
BrechtDeMan@753 124
BrechtDeMan@753 125 var file = e.dataTransfer.files[0];
BrechtDeMan@753 126
BrechtDeMan@753 127 // Uses HTML5 FileAPI - https://w3c.github.io/FileAPI/#filereader-interface
BrechtDeMan@753 128 var reader = new FileReader();
BrechtDeMan@753 129 reader.onload = function() {
BrechtDeMan@753 130 var parse = new DOMParser();
BrechtDeMan@753 131 var xml = parse.parseFromString(reader.result,'text/xml');
BrechtDeMan@753 132 specificationNode.decode(xml);
BrechtDeMan@753 133 popupInstance.hidePopup();
BrechtDeMan@753 134 SpecificationToHTML();
BrechtDeMan@753 135 };
BrechtDeMan@753 136 reader.readAsText(file);
BrechtDeMan@753 137
BrechtDeMan@753 138 };
BrechtDeMan@753 139 this.popupBody.appendChild(text);
BrechtDeMan@753 140 this.popupBody.appendChild(dnd);
BrechtDeMan@753 141 this.showPopup();
BrechtDeMan@753 142
BrechtDeMan@753 143 var button = document.createElement('button');
BrechtDeMan@753 144 button.className = "popupButton";
BrechtDeMan@753 145 button.textContent = "New File";
BrechtDeMan@753 146 button.onclick = function(event) {
BrechtDeMan@753 147 popupInstance.advanceState();
BrechtDeMan@753 148 };
BrechtDeMan@753 149 this.popupFooter.appendChild(button);
BrechtDeMan@753 150 };
BrechtDeMan@753 151
BrechtDeMan@753 152 this.advanceState = function()
BrechtDeMan@753 153 {
BrechtDeMan@753 154 this.popupBody.innerHTML = null;
BrechtDeMan@753 155 this.popupFooter.innerHTML = null;
BrechtDeMan@753 156 this.popupTitleText.textContent = null;
BrechtDeMan@753 157 switch(this.state)
BrechtDeMan@753 158 {
BrechtDeMan@753 159 case 0:
BrechtDeMan@753 160 this.init();
BrechtDeMan@753 161 break;
BrechtDeMan@753 162 case 1:
BrechtDeMan@753 163 this.popupTitleText.textContent = "Test Type";
BrechtDeMan@753 164 var text = document.createElement("span");
BrechtDeMan@753 165 text.textContent = "What type of test would you like to use. Currently APE (Audio Perceptual Evaluation) and MUSHRA style interfaces are available";
BrechtDeMan@753 166 this.popupBody.appendChild(text);
BrechtDeMan@753 167 var select = document.createElement("select");
BrechtDeMan@753 168 select.id="interface-select";
BrechtDeMan@753 169 var opt1 = document.createElement("option");
BrechtDeMan@753 170 opt1.value = "APE";
BrechtDeMan@753 171 opt1.textContent = "APE";
BrechtDeMan@753 172 select.appendChild(opt1);
BrechtDeMan@753 173 var opt2 = document.createElement("option");
BrechtDeMan@753 174 opt2.value = "MUSHRA";
BrechtDeMan@753 175 opt2.textContent = "MUSHRA";
BrechtDeMan@753 176 select.appendChild(opt2);
BrechtDeMan@753 177 this.popupBody.appendChild(select);
BrechtDeMan@753 178
BrechtDeMan@753 179 var button = document.createElement('button');
BrechtDeMan@753 180 button.className = "popupButton";
BrechtDeMan@753 181 button.textContent = "Submit";
BrechtDeMan@753 182 button.onclick = function(event) {
BrechtDeMan@753 183 var select = document.getElementById("interface-select");
BrechtDeMan@753 184 specificationNode.interfaceType = select.value;
BrechtDeMan@753 185 specificationNode.collectMetrics = true;
BrechtDeMan@753 186 popupInstance.advanceState();
BrechtDeMan@753 187 };
BrechtDeMan@753 188 this.popupFooter.appendChild(button);
BrechtDeMan@753 189 break;
BrechtDeMan@753 190 case 2:
BrechtDeMan@753 191 this.popupTitleText.textContent = "Test Options";
BrechtDeMan@753 192 var holder = document.createElement('div');
BrechtDeMan@753 193 holder.style.margin = "5px";
BrechtDeMan@753 194 var checkbox = document.createElement('input');
BrechtDeMan@753 195 checkbox.type = 'checkbox';
BrechtDeMan@753 196 checkbox.id = "Randomise-Page";
BrechtDeMan@753 197 var text = document.createElement('span');
BrechtDeMan@753 198 text.textContent = "Randomise Page Order";
BrechtDeMan@753 199 holder.appendChild(checkbox);
BrechtDeMan@753 200 holder.appendChild(text);
BrechtDeMan@753 201 this.popupBody.appendChild(holder);
BrechtDeMan@753 202 switch(specificationNode.interfaceType)
BrechtDeMan@753 203 {
BrechtDeMan@753 204 case "APE":
BrechtDeMan@753 205 for (var i=0; i<APEInterfaceOptions[0].length; i++)
BrechtDeMan@753 206 {
BrechtDeMan@753 207 holder = document.createElement('div');
BrechtDeMan@753 208 holder.style.margin = "5px";
BrechtDeMan@753 209 checkbox = document.createElement('input');
BrechtDeMan@753 210 checkbox.type = 'checkbox';
BrechtDeMan@753 211 checkbox.setAttribute("name","option");
BrechtDeMan@753 212 checkbox.id = APEInterfaceOptions[0][i];
BrechtDeMan@753 213 text = document.createElement('span');
BrechtDeMan@753 214 text.textContent = APEInterfaceOptions[1][i];
BrechtDeMan@753 215 holder.appendChild(checkbox);
BrechtDeMan@753 216 holder.appendChild(text);
BrechtDeMan@753 217 this.popupBody.appendChild(holder);
BrechtDeMan@753 218 }
BrechtDeMan@753 219 for (var i=0; i<APEInterfaceChecks[0].length; i++)
BrechtDeMan@753 220 {
BrechtDeMan@753 221 holder = document.createElement('div');
BrechtDeMan@753 222 holder.style.margin = "5px";
BrechtDeMan@753 223 checkbox = document.createElement('input');
BrechtDeMan@753 224 checkbox.type = 'checkbox';
BrechtDeMan@753 225 checkbox.setAttribute("name","check");
BrechtDeMan@753 226 checkbox.id = APEInterfaceChecks[0][i];
BrechtDeMan@753 227 text = document.createElement('span');
BrechtDeMan@753 228 text.textContent = APEInterfaceChecks[1][i];
BrechtDeMan@753 229 holder.appendChild(checkbox);
BrechtDeMan@753 230 holder.appendChild(text);
BrechtDeMan@753 231 this.popupBody.appendChild(holder);
BrechtDeMan@753 232 }
BrechtDeMan@753 233 break;
BrechtDeMan@753 234 case "MUSHRA":
BrechtDeMan@753 235 for (var i=0; i<MUSHRAInterfaceOptions[0].length; i++)
BrechtDeMan@753 236 {
BrechtDeMan@753 237 holder = document.createElement('div');
BrechtDeMan@753 238 holder.style.margin = "5px";
BrechtDeMan@753 239 checkbox = document.createElement('input');
BrechtDeMan@753 240 checkbox.type = 'checkbox';
BrechtDeMan@753 241 checkbox.setAttribute("name","option");
BrechtDeMan@753 242 checkbox.id = MUSHRAInterfaceOptions[0][i];
BrechtDeMan@753 243 text = document.createElement('span');
BrechtDeMan@753 244 text.textContent = MUSHRAInterfaceOptions[1][i];
BrechtDeMan@753 245 holder.appendChild(checkbox);
BrechtDeMan@753 246 holder.appendChild(text);
BrechtDeMan@753 247 this.popupBody.appendChild(holder);
BrechtDeMan@753 248 }
BrechtDeMan@753 249 for (var i=0; i<MUSHRAInterfaceChecks[0].length; i++)
BrechtDeMan@753 250 {
BrechtDeMan@753 251 holder = document.createElement('div');
BrechtDeMan@753 252 holder.style.margin = "5px";
BrechtDeMan@753 253 checkbox = document.createElement('input');
BrechtDeMan@753 254 checkbox.type = 'checkbox';
BrechtDeMan@753 255 checkbox.setAttribute("name","check");
BrechtDeMan@753 256 checkbox.id = MUSHRAInterfaceChecks[0][i];
BrechtDeMan@753 257 text = document.createElement('span');
BrechtDeMan@753 258 text.textContent = MUSHRAInterfaceChecks[1][i];
BrechtDeMan@753 259 holder.appendChild(checkbox);
BrechtDeMan@753 260 holder.appendChild(text);
BrechtDeMan@753 261 this.popupBody.appendChild(holder);
BrechtDeMan@753 262 }
BrechtDeMan@753 263 }
BrechtDeMan@753 264 var button = document.createElement('button');
BrechtDeMan@753 265 button.className = "popupButton";
BrechtDeMan@753 266 button.textContent = "Submit";
BrechtDeMan@753 267 button.onclick = function(event) {
BrechtDeMan@753 268 var optHold = popupInstance.popupBody;
BrechtDeMan@753 269 var opt = optHold.firstChild;
BrechtDeMan@753 270 var input = opt.getElementsByTagName('input')[0];
BrechtDeMan@753 271 specificationNode.randomiseOrder = input.checked;
BrechtDeMan@753 272 while(opt.nextSibling != null)
BrechtDeMan@753 273 {
BrechtDeMan@753 274 opt = opt.nextSibling;
BrechtDeMan@753 275 input = opt.getElementsByTagName('input')[0];
BrechtDeMan@753 276 if (input.checked)
BrechtDeMan@753 277 {
BrechtDeMan@753 278 specificationNode.commonInterface.options.push(new specificationNode.commonInterface.optionNode(input));
BrechtDeMan@753 279 }
BrechtDeMan@753 280
BrechtDeMan@753 281 }
BrechtDeMan@753 282 popupInstance.advanceState();
BrechtDeMan@753 283 };
BrechtDeMan@753 284 this.popupFooter.appendChild(button);
BrechtDeMan@753 285 break;
BrechtDeMan@753 286 case 3:
BrechtDeMan@753 287 audioObjects = [];
BrechtDeMan@753 288 this.popupTitleText.textContent = "Test Page";
BrechtDeMan@753 289 var span = document.createElement('span');
BrechtDeMan@753 290 span.textContent = "Drag and drop your audio files into the box below to add them to a test page";
BrechtDeMan@753 291 this.popupBody.appendChild(span);
BrechtDeMan@753 292 var dnd = document.createElement('div');
BrechtDeMan@753 293 dnd.id = "audio-holder-drop";
BrechtDeMan@753 294 dnd.style.width = "100%";
BrechtDeMan@753 295 dnd.style.minHeight = "50px";
BrechtDeMan@753 296 dnd.style.maxHeight = "220px";
BrechtDeMan@753 297 dnd.style.overflow = 'auto';
BrechtDeMan@753 298 dnd.className = "dragndrop";
BrechtDeMan@753 299 dnd.ondragover = function(e) {
BrechtDeMan@753 300 if(e.preventDefault) {e.preventDefault();}
BrechtDeMan@753 301 return false;
BrechtDeMan@753 302 };
BrechtDeMan@753 303 dnd.ondragenter = function(e) {
BrechtDeMan@753 304 if(e.preventDefault) {e.preventDefault();}
BrechtDeMan@753 305 return false;
BrechtDeMan@753 306 };
BrechtDeMan@753 307 dnd.ondrop = function(e) {
BrechtDeMan@753 308 if(e.preventDefault) {e.preventDefault();}
BrechtDeMan@753 309 var dt = e.dataTransfer;
BrechtDeMan@753 310 var body = document.getElementById("audio-holder-drop");
BrechtDeMan@753 311 var files = dt.files;
BrechtDeMan@753 312 for (var i = 0, f; f = files[i]; i++)
BrechtDeMan@753 313 {
BrechtDeMan@753 314 var ao = new audioObject();
BrechtDeMan@753 315 ao.constructTrack(f);
BrechtDeMan@753 316 audioObjects.push(ao);
BrechtDeMan@753 317 var dndHeader = document.createElement('div');
BrechtDeMan@753 318 dndHeader.style.width = "100%";
BrechtDeMan@753 319 dndHeader.style.height = "20px";
BrechtDeMan@753 320 dndHeader.style.borderBottom = "#DDD";
BrechtDeMan@753 321 dndHeader.style.borderBottomWidth = "1px";
BrechtDeMan@753 322 dndHeader.style.borderBottomStyle = "solid";
BrechtDeMan@753 323 dndHeader.setAttribute('aoID',audioObjects.length-1);
BrechtDeMan@753 324 var dndHInclude = document.createElement('div');
BrechtDeMan@753 325 dndHInclude.style.width = "30px";
BrechtDeMan@753 326 dndHInclude.className = "dndheaderelement";
BrechtDeMan@753 327 var includeCheck = document.createElement('input');
BrechtDeMan@753 328 includeCheck.type = "checkbox";
BrechtDeMan@753 329 includeCheck.name = "include-check";
BrechtDeMan@753 330 includeCheck.checked = true;
BrechtDeMan@753 331 includeCheck.onchange = function()
BrechtDeMan@753 332 {
BrechtDeMan@753 333 var i = event.currentTarget.parentElement.parentElement.getAttribute('aoID');
BrechtDeMan@753 334 audioObjects[i].include = event.currentTarget.checked;
BrechtDeMan@753 335 };
BrechtDeMan@753 336 dndHInclude.appendChild(includeCheck);
BrechtDeMan@753 337 dndHeader.appendChild(dndHInclude);
BrechtDeMan@753 338 var dndHTitle = document.createElement('div');
BrechtDeMan@753 339 dndHTitle.style.width = "180px";
BrechtDeMan@753 340 dndHTitle.className = "dndheaderelement";
BrechtDeMan@753 341 var text = document.createElement('span');
BrechtDeMan@753 342 text.textContent = f.name;
BrechtDeMan@753 343 dndHTitle.appendChild(text);
BrechtDeMan@753 344 dndHeader.appendChild(dndHTitle);
BrechtDeMan@753 345 var dndHID = document.createElement('div');
BrechtDeMan@753 346 dndHID.style.width = "100px";
BrechtDeMan@753 347 dndHID.className = "dndheaderelement";
BrechtDeMan@753 348 var IDInput = document.createElement('input');
BrechtDeMan@753 349 IDInput.name = "audio-fragment-ID";
BrechtDeMan@753 350 IDInput.value = f.name.split('.')[0];
BrechtDeMan@753 351 IDInput.onchange = function()
BrechtDeMan@753 352 {
BrechtDeMan@753 353 var allIDInput = document.getElementsByName("audio-fragment-ID");
BrechtDeMan@753 354 var isCopy = new Array(allIDInput.length);
BrechtDeMan@753 355 isCopy.fill(0,0,this.length);
BrechtDeMan@753 356 if (allIDInput.length > 1)
BrechtDeMan@753 357 {
BrechtDeMan@753 358 for (var j=0; j<allIDInput.length; j++)
BrechtDeMan@753 359 {
BrechtDeMan@753 360 var textCompare1 = allIDInput[j].value;
BrechtDeMan@753 361 for (var k=j+1; k<allIDInput.length; k++)
BrechtDeMan@753 362 {
BrechtDeMan@753 363 var textCompare2 = allIDInput[k].value;
BrechtDeMan@753 364 if (textCompare1 == textCompare2)
BrechtDeMan@753 365 {
BrechtDeMan@753 366 isCopy[j] = 1;
BrechtDeMan@753 367 isCopy[k] = 1;
BrechtDeMan@753 368 }
BrechtDeMan@753 369 }
BrechtDeMan@753 370 }
BrechtDeMan@753 371 }
BrechtDeMan@753 372 var button = document.getElementById('submit');
BrechtDeMan@753 373 button.disabled = false;
BrechtDeMan@753 374 for (var j=0; j<allIDInput.length; j++)
BrechtDeMan@753 375 {
BrechtDeMan@753 376 if (isCopy[j] == 1)
BrechtDeMan@753 377 {
BrechtDeMan@753 378 allIDInput[j].style.backgroundColor = '#F22';
BrechtDeMan@753 379 button.disabled = true;
BrechtDeMan@753 380 }
BrechtDeMan@753 381 else
BrechtDeMan@753 382 {
BrechtDeMan@753 383 allIDInput[j].style.backgroundColor = '#FFF';
BrechtDeMan@753 384 audioObjects[j].id = allIDInput[j].value;
BrechtDeMan@753 385 }
BrechtDeMan@753 386 }
BrechtDeMan@753 387 };
BrechtDeMan@753 388 IDInput.style.width = "96px";
BrechtDeMan@753 389 dndHID.appendChild(IDInput);
BrechtDeMan@753 390 dndHeader.appendChild(dndHID);
BrechtDeMan@753 391 var dndHPlay = document.createElement('div');
BrechtDeMan@753 392 dndHPlay.style.width = "100px";
BrechtDeMan@753 393 dndHPlay.className = "dndheaderelement";
BrechtDeMan@753 394 var audio = document.createElement('button');
BrechtDeMan@753 395 audio.textContent = 'Play';
BrechtDeMan@753 396 audio.className = "popupButton";
BrechtDeMan@753 397 audio.style.height = "inherit";
BrechtDeMan@753 398 audio.onclick = function()
BrechtDeMan@753 399 {
BrechtDeMan@753 400 var i = event.currentTarget.parentElement.parentElement.getAttribute('aoID');
BrechtDeMan@753 401 audioObjects[i].play();
BrechtDeMan@753 402 };
BrechtDeMan@753 403 dndHPlay.appendChild(audio);
BrechtDeMan@753 404 dndHeader.appendChild(dndHPlay);
BrechtDeMan@753 405 dnd.appendChild(dndHeader);
BrechtDeMan@753 406 IDInput.onchange();
BrechtDeMan@753 407 }
BrechtDeMan@753 408 };
BrechtDeMan@753 409 var dndHeader = document.createElement('div');
BrechtDeMan@753 410 dndHeader.style.width = "100%";
BrechtDeMan@753 411 dndHeader.style.height = "15px";
BrechtDeMan@753 412 dndHeader.style.borderBottom = "#DDD";
BrechtDeMan@753 413 dndHeader.style.borderBottomWidth = "1px";
BrechtDeMan@753 414 dndHeader.style.borderBottomStyle = "solid";
BrechtDeMan@753 415 var dndHInclude = document.createElement('div');
BrechtDeMan@753 416 dndHInclude.style.width = "30px";
BrechtDeMan@753 417 dndHInclude.className = "dndheaderelement";
BrechtDeMan@753 418 var text = document.createElement('span');
BrechtDeMan@753 419 text.textContent = "Inc.";
BrechtDeMan@753 420 dndHInclude.appendChild(text);
BrechtDeMan@753 421 dndHeader.appendChild(dndHInclude);
BrechtDeMan@753 422 var dndHTitle = document.createElement('div');
BrechtDeMan@753 423 dndHTitle.style.width = "180px";
BrechtDeMan@753 424 dndHTitle.className = "dndheaderelement";
BrechtDeMan@753 425 text = document.createElement('span');
BrechtDeMan@753 426 text.textContent = "File Name";
BrechtDeMan@753 427 dndHTitle.appendChild(text);
BrechtDeMan@753 428 dndHeader.appendChild(dndHTitle);
BrechtDeMan@753 429 var dndHID = document.createElement('div');
BrechtDeMan@753 430 dndHID.style.width = "100px";
BrechtDeMan@753 431 dndHID.className = "dndheaderelement";
BrechtDeMan@753 432 text = document.createElement('span');
BrechtDeMan@753 433 text.textContent = "ID";
BrechtDeMan@753 434 dndHID.appendChild(text);
BrechtDeMan@753 435 dndHeader.appendChild(dndHID);
BrechtDeMan@753 436 var dndHPlay = document.createElement('div');
BrechtDeMan@753 437 dndHPlay.style.width = "100px";
BrechtDeMan@753 438 dndHPlay.className = "dndheaderelement";
BrechtDeMan@753 439 text = document.createElement('span');
BrechtDeMan@753 440 text.textContent = "Sample";
BrechtDeMan@753 441 dndHPlay.appendChild(text);
BrechtDeMan@753 442 dndHeader.appendChild(dndHPlay);
BrechtDeMan@753 443 dnd.appendChild(dndHeader);
BrechtDeMan@753 444 this.popupBody.appendChild(dnd);
BrechtDeMan@753 445 var button = document.createElement('button');
BrechtDeMan@753 446 button.id = 'submit';
BrechtDeMan@753 447 button.className = "popupButton";
BrechtDeMan@753 448 button.textContent = "Submit";
BrechtDeMan@753 449 button.onclick = function(event)
BrechtDeMan@753 450 {
BrechtDeMan@753 451 // Construct the audio-holder nodes;
BrechtDeMan@753 452 for (var i=0; i<audioObjects.length; i++)
BrechtDeMan@753 453 {
BrechtDeMan@753 454 if (!audioObjects[i].include)
BrechtDeMan@753 455 {
BrechtDeMan@753 456 audioObjects.pop(audioObjects[i]);
BrechtDeMan@753 457 }
BrechtDeMan@753 458 }
BrechtDeMan@753 459 if (audioObjects.length != 0)
BrechtDeMan@753 460 {
BrechtDeMan@753 461 popupInstance.advanceState();
BrechtDeMan@753 462 }
BrechtDeMan@753 463 };
BrechtDeMan@753 464 this.popupFooter.appendChild(button);
BrechtDeMan@753 465 break;
BrechtDeMan@753 466 case 4:
BrechtDeMan@753 467 this.popupTitleText.textContent = "Test Page - Options";
BrechtDeMan@753 468 var span = document.createElement('span');
BrechtDeMan@753 469 span.textContent = "Set your test page options here";
BrechtDeMan@753 470 this.popupBody.appendChild(span);
BrechtDeMan@753 471 var pair = document.createElement('div');
BrechtDeMan@753 472 pair.style.margin = '5px';
BrechtDeMan@753 473 var text = document.createElement('span');
BrechtDeMan@753 474 text.textContent = "Page ID:";
BrechtDeMan@753 475 var input = document.createElement('input');
BrechtDeMan@753 476 input.value = specificationNode.audioHolders.length;
BrechtDeMan@753 477 input.id = "id";
BrechtDeMan@753 478 pair.appendChild(text);
BrechtDeMan@753 479 pair.appendChild(input);
BrechtDeMan@753 480 this.popupBody.appendChild(pair);
BrechtDeMan@753 481 pair = document.createElement('div');
BrechtDeMan@753 482 pair.style.margin = '5px';
BrechtDeMan@753 483 text = document.createElement('span');
BrechtDeMan@753 484 text.textContent = "Randomise Fragment Order";
BrechtDeMan@753 485 input = document.createElement('input');
BrechtDeMan@753 486 input.type = "checkbox";
BrechtDeMan@753 487 input.id = "randomiseOrder";
BrechtDeMan@753 488 pair.appendChild(input);
BrechtDeMan@753 489 pair.appendChild(text);
BrechtDeMan@753 490 this.popupBody.appendChild(pair);
BrechtDeMan@753 491 pair = document.createElement('div');
BrechtDeMan@753 492 pair.style.margin = '5px';
BrechtDeMan@753 493 text = document.createElement('span');
BrechtDeMan@753 494 text.textContent = "Loop Fragment Playback";
BrechtDeMan@753 495 input = document.createElement('input');
BrechtDeMan@753 496 input.type = "checkbox";
BrechtDeMan@753 497 input.id = "loop";
BrechtDeMan@753 498 pair.appendChild(input);
BrechtDeMan@753 499 pair.appendChild(text);
BrechtDeMan@753 500 this.popupBody.appendChild(pair);
BrechtDeMan@753 501 pair = document.createElement('div');
BrechtDeMan@753 502 pair.style.margin = '5px';
BrechtDeMan@753 503 text = document.createElement('span');
BrechtDeMan@753 504 text.textContent = "Show fragment comment boxes";
BrechtDeMan@753 505 input = document.createElement('input');
BrechtDeMan@753 506 input.type = "checkbox";
BrechtDeMan@753 507 input.id = "elementComments";
BrechtDeMan@753 508 pair.appendChild(input);
BrechtDeMan@753 509 pair.appendChild(text);
BrechtDeMan@753 510 this.popupBody.appendChild(pair);
BrechtDeMan@753 511 var button = document.createElement('button');
BrechtDeMan@753 512 button.id = 'submit';
BrechtDeMan@753 513 button.className = "popupButton";
BrechtDeMan@753 514 button.textContent = "Next";
BrechtDeMan@753 515 button.onclick = function(event)
BrechtDeMan@753 516 {
BrechtDeMan@753 517 var ah = new specificationNode.audioHolderNode(specificationNode);
BrechtDeMan@753 518 ah.id = document.getElementById('id').value;
BrechtDeMan@753 519 ah.presentedId = specificationNode.audioHolders.length;
BrechtDeMan@753 520 ah.hostURL = ah.id+'/';
BrechtDeMan@753 521 ah.randomiseOrder = document.getElementById('randomiseOrder').checked;
BrechtDeMan@753 522 ah.loop = document.getElementById('loop').checked;
BrechtDeMan@753 523 ah.elementComments = document.getElementById('elementComments').checked;
BrechtDeMan@753 524 for (var i=0; i<audioObjects.length; i++)
BrechtDeMan@753 525 {
BrechtDeMan@753 526 ah.audioElements.push(new ah.audioElementNode(ah,audioObjects[i]));
BrechtDeMan@753 527 }
BrechtDeMan@753 528 specificationNode.audioHolders.push(ah);
BrechtDeMan@753 529 popupInstance.advanceState();
BrechtDeMan@753 530 };
BrechtDeMan@753 531 this.popupFooter.appendChild(button);
BrechtDeMan@753 532 break;
BrechtDeMan@753 533 case 5:
BrechtDeMan@753 534 this.dataTransfer = null;
BrechtDeMan@753 535 this.popupTitleText.textContent = "Test Page - Pre/Post Survey";
BrechtDeMan@753 536 var span = document.createElement('span');
BrechtDeMan@753 537 span.textContent = "Add your pre test page options here";
BrechtDeMan@753 538 this.popupBody.appendChild(span);
BrechtDeMan@753 539 var preHolder = document.createElement('div');
BrechtDeMan@753 540 preHolder.id = "preHolder";
BrechtDeMan@753 541 preHolder.style.width = "460px";
BrechtDeMan@753 542 preHolder.style.minHeight = "100px";
BrechtDeMan@753 543 preHolder.style.maxHeight = "220px";
BrechtDeMan@753 544 preHolder.style.overflow = 'auto';
BrechtDeMan@753 545 preHolder.style.border = "black";
BrechtDeMan@753 546 preHolder.style.borderStyle = "solid";
BrechtDeMan@753 547 preHolder.style.borderWidth = "1px";
BrechtDeMan@753 548 this.popupBody.appendChild(preHolder);
BrechtDeMan@753 549 var audioHolder = specificationNode.audioHolders[specificationNode.audioHolders.length-1];
BrechtDeMan@753 550 var preHeaderHolder = document.createElement('div');
BrechtDeMan@753 551 preHeaderHolder.style.width = "456px";
BrechtDeMan@753 552 preHeaderHolder.style.height= "20px";
BrechtDeMan@753 553 preHeaderHolder.style.margin= "2px";
BrechtDeMan@753 554 preHeaderHolder.style.borderBottom = "#DDD";
BrechtDeMan@753 555 preHeaderHolder.style.borderBottomWidth = "1px";
BrechtDeMan@753 556 preHeaderHolder.style.borderBottomStyle = "solid";
BrechtDeMan@753 557 var mvH = document.createElement('div');
BrechtDeMan@753 558 mvH.className = "dndheaderelement";
BrechtDeMan@753 559 mvH.style.width = "50px";
BrechtDeMan@753 560 var text = document.createElement('span');
BrechtDeMan@753 561 text.textContent = "Order";
BrechtDeMan@753 562 mvH.appendChild(text);
BrechtDeMan@753 563 preHeaderHolder.appendChild(mvH);
BrechtDeMan@753 564 var idH = document.createElement('div');
BrechtDeMan@753 565 idH.className = "dndheaderelement";
BrechtDeMan@753 566 idH.style.width = "150px";
BrechtDeMan@753 567 text = document.createElement('span');
BrechtDeMan@753 568 text.textContent = "ID";
BrechtDeMan@753 569 idH.appendChild(text);
BrechtDeMan@753 570 preHeaderHolder.appendChild(idH);
BrechtDeMan@753 571 var tH = document.createElement('div');
BrechtDeMan@753 572 tH.className = "dndheaderelement";
BrechtDeMan@753 573 tH.style.width = "150px";
BrechtDeMan@753 574 text = document.createElement('span');
BrechtDeMan@753 575 text.textContent = "Type";
BrechtDeMan@753 576 tH.appendChild(text);
BrechtDeMan@753 577 preHeaderHolder.appendChild(tH);
BrechtDeMan@753 578 var editH = document.createElement('div');
BrechtDeMan@753 579 editH.className = "dndheaderelement";
BrechtDeMan@753 580 editH.style.width = "50px";
BrechtDeMan@753 581 text = document.createElement('span');
BrechtDeMan@753 582 text.textContent = "Edit";
BrechtDeMan@753 583 editH.appendChild(text);
BrechtDeMan@753 584 preHeaderHolder.appendChild(editH);
BrechtDeMan@753 585 var deleteH = document.createElement('div');
BrechtDeMan@753 586 deleteH.className = "dndheaderelement";
BrechtDeMan@753 587 deleteH.style.width = "50px";
BrechtDeMan@753 588 text = document.createElement('span');
BrechtDeMan@753 589 text.textContent = "Delete";
BrechtDeMan@753 590 deleteH.appendChild(text);
BrechtDeMan@753 591 preHeaderHolder.appendChild(deleteH);
BrechtDeMan@753 592 preHolder.appendChild(preHeaderHolder);
BrechtDeMan@753 593
BrechtDeMan@753 594
BrechtDeMan@753 595 for (var i=0; i<audioHolder.preTest.options.length; i++)
BrechtDeMan@753 596 {
BrechtDeMan@753 597 var optionNode = audioHolder.preTest.options[i];
BrechtDeMan@753 598 var entry = document.createElement('div');
BrechtDeMan@753 599 entry.style.width = "456px";
BrechtDeMan@753 600 entry.style.height= "20px";
BrechtDeMan@753 601 entry.style.margin= "2px";
BrechtDeMan@753 602 entry.style.borderBottom = "#DDD";
BrechtDeMan@753 603 entry.style.borderBottomWidth = "1px";
BrechtDeMan@753 604 entry.style.borderBottomStyle = "solid";
BrechtDeMan@753 605 entry.setAttribute("node-id",i);
BrechtDeMan@753 606 var node = audioHolder.preTest.options[i];
BrechtDeMan@753 607 var mvH = document.createElement('div');
BrechtDeMan@753 608 mvH.className = "dndheaderelement";
BrechtDeMan@753 609 mvH.style.width = "50px";
BrechtDeMan@753 610 var mvup = document.createElement("button");
BrechtDeMan@753 611 mvup.textContent = "Up";
BrechtDeMan@753 612 mvup.style.width = "25px";
BrechtDeMan@753 613 mvup.style.padding = "1px 0px";
BrechtDeMan@753 614 mvup.onclick = function()
BrechtDeMan@753 615 {
BrechtDeMan@753 616 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 617 if (i != 0)
BrechtDeMan@753 618 {
BrechtDeMan@753 619 var next = audioHolder.preTest.options[i-1];
BrechtDeMan@753 620 var cur = audioHolder.preTest.options[i];
BrechtDeMan@753 621 audioHolder.preTest.options[i-1] = cur;
BrechtDeMan@753 622 audioHolder.preTest.options[i] = next;
BrechtDeMan@753 623 popupInstance.state = 5;
BrechtDeMan@753 624 popupInstance.advanceState();
BrechtDeMan@753 625 }
BrechtDeMan@753 626 };
BrechtDeMan@753 627 mvH.appendChild(mvup);
BrechtDeMan@753 628 var mvdn = document.createElement("button");
BrechtDeMan@753 629 mvdn.textContent = "Dn";
BrechtDeMan@753 630 mvdn.style.width = "25px";
BrechtDeMan@753 631 mvdn.style.padding = "1px 0px";
BrechtDeMan@753 632 mvdn.onclick = function()
BrechtDeMan@753 633 {
BrechtDeMan@753 634 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 635 if (i != audioHolder.preTest.options.length-1)
BrechtDeMan@753 636 {
BrechtDeMan@753 637 var next = audioHolder.preTest.options[i+1];
BrechtDeMan@753 638 var cur = audioHolder.preTest.options[i];
BrechtDeMan@753 639 audioHolder.preTest.options[i+1] = cur;
BrechtDeMan@753 640 audioHolder.preTest.options[i] = next;
BrechtDeMan@753 641 popupInstance.state = 5;
BrechtDeMan@753 642 popupInstance.advanceState();
BrechtDeMan@753 643 }
BrechtDeMan@753 644 };
BrechtDeMan@753 645 mvH.appendChild(mvdn);
BrechtDeMan@753 646 entry.appendChild(mvH);
BrechtDeMan@753 647 var idH = document.createElement('div');
BrechtDeMan@753 648 idH.className = "dndheaderelement";
BrechtDeMan@753 649 idH.style.width = "150px";
BrechtDeMan@753 650 if (optionNode.type != "statement")
BrechtDeMan@753 651 {
BrechtDeMan@753 652 var span = document.createElement('span');
BrechtDeMan@753 653 span.textContent = optionNode.id;
BrechtDeMan@753 654 idH.appendChild(span);
BrechtDeMan@753 655 }
BrechtDeMan@753 656 entry.appendChild(idH);
BrechtDeMan@753 657 var typeH = document.createElement('div');
BrechtDeMan@753 658 typeH.className = "dndheaderelement";
BrechtDeMan@753 659 typeH.style.width = "150px";
BrechtDeMan@753 660 var span = document.createElement('span');
BrechtDeMan@753 661 span.textContent = optionNode.type;
BrechtDeMan@753 662 typeH.appendChild(span);
BrechtDeMan@753 663 entry.appendChild(typeH);
BrechtDeMan@753 664 var editH = document.createElement('div');
BrechtDeMan@753 665 editH.className = "dndheaderelement";
BrechtDeMan@753 666 editH.style.width = "50px";
BrechtDeMan@753 667 var editButton = document.createElement("button");
BrechtDeMan@753 668 editButton.textContent = "Edit";
BrechtDeMan@753 669 editButton.style.width = "48px";
BrechtDeMan@753 670 editButton.style.padding = "1px 0px";
BrechtDeMan@753 671 editButton.onclick = function()
BrechtDeMan@753 672 {
BrechtDeMan@753 673 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 674 popupInstance.dataTransfer = new function() {
BrechtDeMan@753 675 this.title = "Edit Test Node";
BrechtDeMan@753 676 this.parent = specificationNode.audioHolders[specificationNode.audioHolders.length-1].preTest;
BrechtDeMan@753 677 this.node = this.parent.options[i];
BrechtDeMan@753 678 this.previousState = 5;
BrechtDeMan@753 679 };
BrechtDeMan@753 680 popupInstance.advanceState();
BrechtDeMan@753 681 };
BrechtDeMan@753 682 editH.appendChild(editButton);
BrechtDeMan@753 683 entry.appendChild(editH);
BrechtDeMan@753 684 var deleteH = document.createElement('div');
BrechtDeMan@753 685 deleteH.className = "dndheaderelement";
BrechtDeMan@753 686 deleteH.style.width = "50px";
BrechtDeMan@753 687 var deleteButton = document.createElement("button");
BrechtDeMan@753 688 deleteButton.textContent = "Del";
BrechtDeMan@753 689 deleteButton.style.width = "48px";
BrechtDeMan@753 690 deleteButton.style.padding = "1px 0px";
BrechtDeMan@753 691 deleteButton.onclick = function()
BrechtDeMan@753 692 {
BrechtDeMan@753 693 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 694 var j = i+1;
BrechtDeMan@753 695 while(j < audioHolder.preTest.options.length)
BrechtDeMan@753 696 {
BrechtDeMan@753 697 audioHolder.preTest.options[i] = audioHolder.preTest.options[j];
BrechtDeMan@753 698 j++;
BrechtDeMan@753 699 i++;
BrechtDeMan@753 700 }
BrechtDeMan@753 701 audioHolder.preTest.options.pop();
BrechtDeMan@753 702 popupInstance.state = 5;
BrechtDeMan@753 703 popupInstance.advanceState();
BrechtDeMan@753 704 };
BrechtDeMan@753 705 deleteH.appendChild(deleteButton);
BrechtDeMan@753 706 entry.appendChild(deleteH);
BrechtDeMan@753 707 preHolder.appendChild(entry);
BrechtDeMan@753 708 }
BrechtDeMan@753 709 var entry = document.createElement('div');
BrechtDeMan@753 710 entry.style.width = "456px";
BrechtDeMan@753 711 entry.style.height= "20px";
BrechtDeMan@753 712 entry.style.margin= "2px";
BrechtDeMan@753 713 entry.style.borderBottom = "#DDD";
BrechtDeMan@753 714 entry.style.borderBottomWidth = "1px";
BrechtDeMan@753 715 entry.style.borderBottomStyle = "solid";
BrechtDeMan@753 716 entry.align = "center";
BrechtDeMan@753 717 var addPre = document.createElement('button');
BrechtDeMan@753 718 addPre.className = "popupButton";
BrechtDeMan@753 719 addPre.textContent = "Add New Entry";
BrechtDeMan@753 720 addPre.style.height = "20px";
BrechtDeMan@753 721 addPre.onclick = function()
BrechtDeMan@753 722 {
BrechtDeMan@753 723 popupInstance.dataTransfer = new function() {
BrechtDeMan@753 724 this.title = "New Pre Test Node";
BrechtDeMan@753 725 this.parent = specificationNode.audioHolders[specificationNode.audioHolders.length-1].preTest;
BrechtDeMan@753 726 this.node = null;
BrechtDeMan@753 727 this.previousState = 5;
BrechtDeMan@753 728 };
BrechtDeMan@753 729 popupInstance.advanceState();
BrechtDeMan@753 730 };
BrechtDeMan@753 731 entry.appendChild(addPre);
BrechtDeMan@753 732 preHolder.appendChild(entry);
BrechtDeMan@753 733
BrechtDeMan@753 734 var span = document.createElement('span');
BrechtDeMan@753 735 span.textContent = "Add your post test page options here";
BrechtDeMan@753 736 this.popupBody.appendChild(span);
BrechtDeMan@753 737 var postHolder = document.createElement('div');
BrechtDeMan@753 738 postHolder.id = "preHolder";
BrechtDeMan@753 739 postHolder.style.width = "100%";
BrechtDeMan@753 740 postHolder.style.minHeight = "100px";
BrechtDeMan@753 741 postHolder.style.maxHeight = "220px";
BrechtDeMan@753 742 postHolder.style.overflow = 'auto';
BrechtDeMan@753 743 postHolder.style.border = "black";
BrechtDeMan@753 744 postHolder.style.borderStyle = "solid";
BrechtDeMan@753 745 postHolder.style.borderWidth = "1px";
BrechtDeMan@753 746 this.popupBody.appendChild(postHolder);
BrechtDeMan@753 747 var postHeaderHolder = document.createElement('div');
BrechtDeMan@753 748 postHeaderHolder.style.width = "456px";
BrechtDeMan@753 749 postHeaderHolder.style.height= "20px";
BrechtDeMan@753 750 postHeaderHolder.style.margin= "2px";
BrechtDeMan@753 751 postHeaderHolder.style.borderBottom = "#DDD";
BrechtDeMan@753 752 postHeaderHolder.style.borderBottomWidth = "1px";
BrechtDeMan@753 753 postHeaderHolder.style.borderBottomStyle = "solid";
BrechtDeMan@753 754 var mvH = document.createElement('div');
BrechtDeMan@753 755 mvH.className = "dndheaderelement";
BrechtDeMan@753 756 mvH.style.width = "50px";
BrechtDeMan@753 757 var text = document.createElement('span');
BrechtDeMan@753 758 text.textContent = "Order";
BrechtDeMan@753 759 mvH.appendChild(text);
BrechtDeMan@753 760 postHeaderHolder.appendChild(mvH);
BrechtDeMan@753 761 var idH = document.createElement('div');
BrechtDeMan@753 762 idH.className = "dndheaderelement";
BrechtDeMan@753 763 idH.style.width = "150px";
BrechtDeMan@753 764 text = document.createElement('span');
BrechtDeMan@753 765 text.textContent = "ID";
BrechtDeMan@753 766 idH.appendChild(text);
BrechtDeMan@753 767 postHeaderHolder.appendChild(idH);
BrechtDeMan@753 768 var tH = document.createElement('div');
BrechtDeMan@753 769 tH.className = "dndheaderelement";
BrechtDeMan@753 770 tH.style.width = "150px";
BrechtDeMan@753 771 text = document.createElement('span');
BrechtDeMan@753 772 text.textContent = "Type";
BrechtDeMan@753 773 tH.appendChild(text);
BrechtDeMan@753 774 postHeaderHolder.appendChild(tH);
BrechtDeMan@753 775 var editH = document.createElement('div');
BrechtDeMan@753 776 editH.className = "dndheaderelement";
BrechtDeMan@753 777 editH.style.width = "50px";
BrechtDeMan@753 778 text = document.createElement('span');
BrechtDeMan@753 779 text.textContent = "Edit";
BrechtDeMan@753 780 editH.appendChild(text);
BrechtDeMan@753 781 postHeaderHolder.appendChild(editH);
BrechtDeMan@753 782 var deleteH = document.createElement('div');
BrechtDeMan@753 783 deleteH.className = "dndheaderelement";
BrechtDeMan@753 784 deleteH.style.width = "50px";
BrechtDeMan@753 785 text = document.createElement('span');
BrechtDeMan@753 786 text.textContent = "Delete";
BrechtDeMan@753 787 deleteH.appendChild(text);
BrechtDeMan@753 788 postHeaderHolder.appendChild(deleteH);
BrechtDeMan@753 789 postHolder.appendChild(postHeaderHolder);
BrechtDeMan@753 790
BrechtDeMan@753 791 for (var i=0; i<audioHolder.postTest.options.length; i++)
BrechtDeMan@753 792 {
BrechtDeMan@753 793 var optionNode = audioHolder.postTest.options[i];
BrechtDeMan@753 794 var entry = document.createElement('div');
BrechtDeMan@753 795 entry.style.width = "456px";
BrechtDeMan@753 796 entry.style.height= "20px";
BrechtDeMan@753 797 entry.style.margin= "2px";
BrechtDeMan@753 798 entry.style.borderBottom = "#DDD";
BrechtDeMan@753 799 entry.style.borderBottomWidth = "1px";
BrechtDeMan@753 800 entry.style.borderBottomStyle = "solid";
BrechtDeMan@753 801 entry.setAttribute("node-id",i);
BrechtDeMan@753 802 var node = audioHolder.postTest.options[i];
BrechtDeMan@753 803 var mvH = document.createElement('div');
BrechtDeMan@753 804 mvH.className = "dndheaderelement";
BrechtDeMan@753 805 mvH.style.width = "50px";
BrechtDeMan@753 806 var mvup = document.createElement("button");
BrechtDeMan@753 807 mvup.textContent = "Up";
BrechtDeMan@753 808 mvup.style.width = "25px";
BrechtDeMan@753 809 mvup.style.padding = "1px 0px";
BrechtDeMan@753 810 mvup.onclick = function()
BrechtDeMan@753 811 {
BrechtDeMan@753 812 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 813 if (i != 0)
BrechtDeMan@753 814 {
BrechtDeMan@753 815 var next = audioHolder.postTest.options[i-1];
BrechtDeMan@753 816 var cur = audioHolder.postTest.options[i];
BrechtDeMan@753 817 audioHolder.postTest.options[i-1] = cur;
BrechtDeMan@753 818 audioHolder.postTest.options[i] = next;
BrechtDeMan@753 819 popupInstance.state = 5;
BrechtDeMan@753 820 popupInstance.advanceState();
BrechtDeMan@753 821 }
BrechtDeMan@753 822 };
BrechtDeMan@753 823 mvH.appendChild(mvup);
BrechtDeMan@753 824 var mvdn = document.createElement("button");
BrechtDeMan@753 825 mvdn.textContent = "Dn";
BrechtDeMan@753 826 mvdn.style.width = "25px";
BrechtDeMan@753 827 mvdn.style.padding = "1px 0px";
BrechtDeMan@753 828 mvdn.onclick = function()
BrechtDeMan@753 829 {
BrechtDeMan@753 830 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 831 if (i != audioHolder.postTest.options.length-1)
BrechtDeMan@753 832 {
BrechtDeMan@753 833 var next = audioHolder.postTest.options[i+1];
BrechtDeMan@753 834 var cur = audioHolder.postTest.options[i];
BrechtDeMan@753 835 audioHolder.postTest.options[i+1] = cur;
BrechtDeMan@753 836 audioHolder.postTest.options[i] = next;
BrechtDeMan@753 837 popupInstance.state = 5;
BrechtDeMan@753 838 popupInstance.advanceState();
BrechtDeMan@753 839 }
BrechtDeMan@753 840 };
BrechtDeMan@753 841 mvH.appendChild(mvdn);
BrechtDeMan@753 842 entry.appendChild(mvH);
BrechtDeMan@753 843 var idH = document.createElement('div');
BrechtDeMan@753 844 idH.className = "dndheaderelement";
BrechtDeMan@753 845 idH.style.width = "150px";
BrechtDeMan@753 846 if (optionNode.type != "statement")
BrechtDeMan@753 847 {
BrechtDeMan@753 848 var span = document.createElement('span');
BrechtDeMan@753 849 span.textContent = optionNode.id;
BrechtDeMan@753 850 idH.appendChild(span);
BrechtDeMan@753 851 }
BrechtDeMan@753 852 entry.appendChild(idH);
BrechtDeMan@753 853 var typeH = document.createElement('div');
BrechtDeMan@753 854 typeH.className = "dndheaderelement";
BrechtDeMan@753 855 typeH.style.width = "150px";
BrechtDeMan@753 856 var span = document.createElement('span');
BrechtDeMan@753 857 span.textContent = optionNode.type;
BrechtDeMan@753 858 typeH.appendChild(span);
BrechtDeMan@753 859 entry.appendChild(typeH);
BrechtDeMan@753 860 var editH = document.createElement('div');
BrechtDeMan@753 861 editH.className = "dndheaderelement";
BrechtDeMan@753 862 editH.style.width = "50px";
BrechtDeMan@753 863 var editButton = document.createElement("button");
BrechtDeMan@753 864 editButton.textContent = "Edit";
BrechtDeMan@753 865 editButton.style.width = "48px";
BrechtDeMan@753 866 editButton.style.padding = "1px 0px";
BrechtDeMan@753 867 editButton.onclick = function()
BrechtDeMan@753 868 {
BrechtDeMan@753 869 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 870 popupInstance.dataTransfer = new function() {
BrechtDeMan@753 871 this.title = "Edit Test Node";
BrechtDeMan@753 872 this.parent = specificationNode.audioHolders[specificationNode.audioHolders.length-1].postTest;
BrechtDeMan@753 873 this.node = this.parent.options[i];
BrechtDeMan@753 874 this.previousState = 5;
BrechtDeMan@753 875 };
BrechtDeMan@753 876 popupInstance.advanceState();
BrechtDeMan@753 877 };
BrechtDeMan@753 878 editH.appendChild(editButton);
BrechtDeMan@753 879 entry.appendChild(editH);
BrechtDeMan@753 880 var deleteH = document.createElement('div');
BrechtDeMan@753 881 deleteH.className = "dndheaderelement";
BrechtDeMan@753 882 deleteH.style.width = "50px";
BrechtDeMan@753 883 var deleteButton = document.createElement("button");
BrechtDeMan@753 884 deleteButton.textContent = "Del";
BrechtDeMan@753 885 deleteButton.style.width = "48px";
BrechtDeMan@753 886 deleteButton.style.padding = "1px 0px";
BrechtDeMan@753 887 deleteButton.onclick = function()
BrechtDeMan@753 888 {
BrechtDeMan@753 889 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 890 var j = i+1;
BrechtDeMan@753 891 while(j < audioHolder.postTest.options.length)
BrechtDeMan@753 892 {
BrechtDeMan@753 893 audioHolder.postTest.options[i] = audioHolder.postTest.options[j];
BrechtDeMan@753 894 j++;
BrechtDeMan@753 895 i++;
BrechtDeMan@753 896 }
BrechtDeMan@753 897 audioHolder.postTest.options.pop();
BrechtDeMan@753 898 popupInstance.state = 5;
BrechtDeMan@753 899 popupInstance.advanceState();
BrechtDeMan@753 900 };
BrechtDeMan@753 901 deleteH.appendChild(deleteButton);
BrechtDeMan@753 902 entry.appendChild(deleteH);
BrechtDeMan@753 903 postHolder.appendChild(entry);
BrechtDeMan@753 904 }
BrechtDeMan@753 905
BrechtDeMan@753 906 var entry = document.createElement('div');
BrechtDeMan@753 907 entry.style.width = "456px";
BrechtDeMan@753 908 entry.style.height= "20px";
BrechtDeMan@753 909 entry.style.margin= "2px";
BrechtDeMan@753 910 entry.style.borderBottom = "#DDD";
BrechtDeMan@753 911 entry.style.borderBottomWidth = "1px";
BrechtDeMan@753 912 entry.style.borderBottomStyle = "solid";
BrechtDeMan@753 913 entry.align = "center";
BrechtDeMan@753 914 var addPost = document.createElement('button');
BrechtDeMan@753 915 addPost.className = "popupButton";
BrechtDeMan@753 916 addPost.textContent = "Add New Entry";
BrechtDeMan@753 917 addPost.style.height = "20px";
BrechtDeMan@753 918 addPost.onclick = function()
BrechtDeMan@753 919 {
BrechtDeMan@753 920 popupInstance.dataTransfer = new function() {
BrechtDeMan@753 921 this.title = "New Pre Test Node";
BrechtDeMan@753 922 this.parent = specificationNode.audioHolders[specificationNode.audioHolders.length-1].postTest;
BrechtDeMan@753 923 this.node = null;
BrechtDeMan@753 924 this.previousState = 5;
BrechtDeMan@753 925 };
BrechtDeMan@753 926 popupInstance.advanceState();
BrechtDeMan@753 927 };
BrechtDeMan@753 928 entry.appendChild(addPost);
BrechtDeMan@753 929 postHolder.appendChild(entry);
BrechtDeMan@753 930
BrechtDeMan@753 931 var button = document.createElement('button');
BrechtDeMan@753 932 button.id = 'submit';
BrechtDeMan@753 933 button.className = "popupButton";
BrechtDeMan@753 934 button.textContent = "Finish";
BrechtDeMan@753 935 button.onclick = function(event)
BrechtDeMan@753 936 {
BrechtDeMan@753 937 popupInstance.state = 7;
BrechtDeMan@753 938 popupInstance.advanceState();
BrechtDeMan@753 939 };
BrechtDeMan@753 940 this.popupFooter.appendChild(button);
BrechtDeMan@753 941 button = document.createElement('button');
BrechtDeMan@753 942 button.id = 'submit';
BrechtDeMan@753 943 button.className = "popupButton";
BrechtDeMan@753 944 button.textContent = "Add Another Page";
BrechtDeMan@753 945 button.onclick = function(event)
BrechtDeMan@753 946 {
BrechtDeMan@753 947 popupInstance.state = 3;
BrechtDeMan@753 948 popupInstance.advanceState();
BrechtDeMan@753 949 };
BrechtDeMan@753 950 this.popupFooter.appendChild(button);
BrechtDeMan@753 951 break;
BrechtDeMan@753 952 case 6:
BrechtDeMan@753 953 this.popupTitleText.textContent = this.dataTransfer.title;
BrechtDeMan@753 954 var span = document.createElement('span');
BrechtDeMan@753 955 span.textContent = "Select survey settings here";
BrechtDeMan@753 956 this.popupBody.appendChild(span);
BrechtDeMan@753 957 var div = document.createElement('div');
BrechtDeMan@753 958 span = document.createElement("span");
BrechtDeMan@753 959 span.textContent = "Survey Type";
BrechtDeMan@753 960 var select = document.createElement("select");
BrechtDeMan@753 961 select.id="survey-select";
BrechtDeMan@753 962 var option = document.createElement('option');
BrechtDeMan@753 963 option.textContent = "Statement";
BrechtDeMan@753 964 option.value = "statement";
BrechtDeMan@753 965 select.appendChild(option);
BrechtDeMan@753 966 option = document.createElement('option');
BrechtDeMan@753 967 option.textContent = "Question";
BrechtDeMan@753 968 option.value = "question";
BrechtDeMan@753 969 select.appendChild(option);
BrechtDeMan@753 970 option = document.createElement('option');
BrechtDeMan@753 971 option.textContent = "Number";
BrechtDeMan@753 972 option.value = "number";
BrechtDeMan@753 973 select.appendChild(option);
BrechtDeMan@753 974 option = document.createElement('option');
BrechtDeMan@753 975 option.textContent = "Radio";
BrechtDeMan@753 976 option.value = "radio";
BrechtDeMan@753 977 select.appendChild(option);
BrechtDeMan@753 978 option = document.createElement('option');
BrechtDeMan@753 979 option.textContent = "Checkbox";
BrechtDeMan@753 980 option.value = "checkbox";
BrechtDeMan@753 981 select.appendChild(option);
BrechtDeMan@753 982 this.popupBody.appendChild(select);
BrechtDeMan@753 983 var options = document.createElement('div');
BrechtDeMan@753 984 options.id = "survey-options";
BrechtDeMan@753 985 this.popupBody.appendChild(options);
BrechtDeMan@753 986 var button = document.createElement('button');
BrechtDeMan@753 987 button.id = 'submit';
BrechtDeMan@753 988 button.className = "popupButton";
BrechtDeMan@753 989 button.textContent = "Add";
BrechtDeMan@753 990 button.onclick = function(event)
BrechtDeMan@753 991 {
BrechtDeMan@753 992 var parent = popupInstance.dataTransfer.parent;
BrechtDeMan@753 993 if (popupInstance.dataTransfer.node == null)
BrechtDeMan@753 994 {
BrechtDeMan@753 995 var node = new parent.OptionNode();
BrechtDeMan@753 996 } else
BrechtDeMan@753 997 {
BrechtDeMan@753 998 var node = popupInstance.dataTransfer.node;
BrechtDeMan@753 999 }
BrechtDeMan@753 1000 node.type = document.getElementById("survey-select").value;
BrechtDeMan@753 1001 switch(node.type)
BrechtDeMan@753 1002 {
BrechtDeMan@753 1003 case "statement":
BrechtDeMan@753 1004 node.statement = document.getElementById("statement").value;
BrechtDeMan@753 1005 break;
BrechtDeMan@753 1006 case "question":
BrechtDeMan@753 1007 node.question = document.getElementById("question").value;
BrechtDeMan@753 1008 node.id = document.getElementById("ID").value;
BrechtDeMan@753 1009 node.mandatory = document.getElementById("mandatory").checked;
BrechtDeMan@753 1010 node.boxsize = document.getElementById("boxsize").value;
BrechtDeMan@753 1011 break;
BrechtDeMan@753 1012 }
BrechtDeMan@753 1013 if (popupInstance.dataTransfer.node == null)
BrechtDeMan@753 1014 {parent.options.push(node);}
BrechtDeMan@753 1015 popupInstance.state = popupInstance.dataTransfer.previousState;
BrechtDeMan@753 1016 popupInstance.advanceState();
BrechtDeMan@753 1017 };
BrechtDeMan@753 1018 this.popupFooter.appendChild(button);
BrechtDeMan@753 1019 select.onchange = function()
BrechtDeMan@753 1020 {
BrechtDeMan@753 1021 var options = document.getElementById("survey-options");
BrechtDeMan@753 1022 options.innerHTML = null;
BrechtDeMan@753 1023 switch(this.value)
BrechtDeMan@753 1024 {
BrechtDeMan@753 1025 case "statement":
BrechtDeMan@753 1026 var span = document.createElement('span');
BrechtDeMan@753 1027 span.textContent = "Enter Statement";
BrechtDeMan@753 1028 var tA = document.createElement('textarea');
BrechtDeMan@753 1029 tA.id = "statement";
BrechtDeMan@753 1030 tA.style.width = "460px";
BrechtDeMan@753 1031 tA.style.height = "96px";
BrechtDeMan@753 1032 if (popupInstance.dataTransfer.node != null)
BrechtDeMan@753 1033 {tA.value = this.dataTransfer.node.statement;}
BrechtDeMan@753 1034 options.appendChild(span);
BrechtDeMan@753 1035 options.appendChild(tA);
BrechtDeMan@753 1036 break;
BrechtDeMan@753 1037 case "question":
BrechtDeMan@753 1038 var span = document.createElement('span');
BrechtDeMan@753 1039 span.textContent = "Enter Question";
BrechtDeMan@753 1040 var tA = document.createElement('textarea');
BrechtDeMan@753 1041 tA.style.width = "460px";
BrechtDeMan@753 1042 tA.style.height = "54px";
BrechtDeMan@753 1043 tA.id = "question";
BrechtDeMan@753 1044 options.appendChild(span);
BrechtDeMan@753 1045 options.appendChild(tA);
BrechtDeMan@753 1046 var div = document.createElement('div');
BrechtDeMan@753 1047 var input = document.createElement('input');
BrechtDeMan@753 1048 input.id = "ID";
BrechtDeMan@753 1049 span = document.createElement('span');
BrechtDeMan@753 1050 span.textContent = "ID:";
BrechtDeMan@753 1051 div.appendChild(span);
BrechtDeMan@753 1052 div.appendChild(input);
BrechtDeMan@753 1053 options.appendChild(div);
BrechtDeMan@753 1054 div = document.createElement('div');
BrechtDeMan@753 1055 input = document.createElement('input');
BrechtDeMan@753 1056 input.type = "checkbox";
BrechtDeMan@753 1057 input.id = "mandatory";
BrechtDeMan@753 1058 span = document.createElement('span');
BrechtDeMan@753 1059 span.textContent = "Mandatory";
BrechtDeMan@753 1060 div.appendChild(span);
BrechtDeMan@753 1061 div.appendChild(input);
BrechtDeMan@753 1062 options.appendChild(div);
BrechtDeMan@753 1063 div = document.createElement('div');
BrechtDeMan@753 1064 var boxsize = document.createElement("select");
BrechtDeMan@753 1065 boxsize.id = "boxsize";
BrechtDeMan@753 1066 var selOpt = document.createElement("option");
BrechtDeMan@753 1067 selOpt.value = "normal";
BrechtDeMan@753 1068 selOpt.textContent = "Normal";
BrechtDeMan@753 1069 boxsize.appendChild(selOpt);
BrechtDeMan@753 1070 selOpt = document.createElement("option");
BrechtDeMan@753 1071 selOpt.value = "small";
BrechtDeMan@753 1072 selOpt.textContent = "Small";
BrechtDeMan@753 1073 boxsize.appendChild(selOpt);
BrechtDeMan@753 1074 selOpt = document.createElement("option");
BrechtDeMan@753 1075 selOpt.value = "large";
BrechtDeMan@753 1076 selOpt.textContent = "Large";
BrechtDeMan@753 1077 boxsize.appendChild(selOpt);
BrechtDeMan@753 1078 selOpt = document.createElement("option");
BrechtDeMan@753 1079 selOpt.value = "huge";
BrechtDeMan@753 1080 selOpt.textContent = "Huge";
BrechtDeMan@753 1081 boxsize.appendChild(selOpt);
BrechtDeMan@753 1082 span = document.createElement('span');
BrechtDeMan@753 1083 span.textContent = "Response Text Area";
BrechtDeMan@753 1084 div.appendChild(span);
BrechtDeMan@753 1085 div.appendChild(boxsize);
BrechtDeMan@753 1086 options.appendChild(div);
BrechtDeMan@753 1087 if (popupInstance.dataTransfer.node != null)
BrechtDeMan@753 1088 {
BrechtDeMan@753 1089 tA.value = popupInstance.dataTransfer.node.question;
BrechtDeMan@753 1090 document.getElementById("ID").value = popupInstance.dataTransfer.node.id;
BrechtDeMan@753 1091 document.getElementById("mandatory").value = popupInstance.dataTransfer.node.mandatory;
BrechtDeMan@753 1092 document.getElementById("boxsize").value = popupInstance.dataTransfer.node.boxsize;
BrechtDeMan@753 1093 }
BrechtDeMan@753 1094 break;
BrechtDeMan@753 1095 case "number":
BrechtDeMan@753 1096 var span = document.createElement('span');
BrechtDeMan@753 1097 span.textContent = "Enter Question";
BrechtDeMan@753 1098 var tA = document.createElement('textarea');
BrechtDeMan@753 1099 tA.style.width = "460px";
BrechtDeMan@753 1100 tA.style.height = "54px";
BrechtDeMan@753 1101 tA.id = "question";
BrechtDeMan@753 1102 options.appendChild(span);
BrechtDeMan@753 1103 options.appendChild(tA);
BrechtDeMan@753 1104 var div = document.createElement('div');
BrechtDeMan@753 1105 var input = document.createElement('input');
BrechtDeMan@753 1106 input.id = "ID";
BrechtDeMan@753 1107 span = document.createElement('span');
BrechtDeMan@753 1108 span.textContent = "ID:";
BrechtDeMan@753 1109 div.appendChild(span);
BrechtDeMan@753 1110 div.appendChild(input);
BrechtDeMan@753 1111 options.appendChild(div);
BrechtDeMan@753 1112 div = document.createElement('div');
BrechtDeMan@753 1113 input = document.createElement('input');
BrechtDeMan@753 1114 input.type = "checkbox";
BrechtDeMan@753 1115 input.id = "mandatory";
BrechtDeMan@753 1116 span = document.createElement('span');
BrechtDeMan@753 1117 span.textContent = "Mandatory";
BrechtDeMan@753 1118 div.appendChild(span);
BrechtDeMan@753 1119 div.appendChild(input);
BrechtDeMan@753 1120 options.appendChild(div);
BrechtDeMan@753 1121 div = document.createElement('div');
BrechtDeMan@753 1122 break;
BrechtDeMan@753 1123 }
BrechtDeMan@753 1124 };
BrechtDeMan@753 1125 if (this.dataTransfer.node != null)
BrechtDeMan@753 1126 {
BrechtDeMan@753 1127 select.value = this.dataTransfer.node.type;
BrechtDeMan@753 1128 }
BrechtDeMan@753 1129 select.onchange();
BrechtDeMan@753 1130 break;
BrechtDeMan@753 1131 case 7:
BrechtDeMan@753 1132 this.dataTransfer = null;
BrechtDeMan@753 1133 this.popupTitleText.textContent = "Test Session - Pre/Post Survey";
BrechtDeMan@753 1134 var span = document.createElement('span');
BrechtDeMan@753 1135 span.textContent = "Add your pre test session and post test session survey options here";
BrechtDeMan@753 1136 this.popupBody.appendChild(span);
BrechtDeMan@753 1137 var preHolder = document.createElement('div');
BrechtDeMan@753 1138 preHolder.id = "preHolder";
BrechtDeMan@753 1139 preHolder.style.width = "460px";
BrechtDeMan@753 1140 preHolder.style.minHeight = "100px";
BrechtDeMan@753 1141 preHolder.style.maxHeight = "220px";
BrechtDeMan@753 1142 preHolder.style.overflow = 'auto';
BrechtDeMan@753 1143 preHolder.style.border = "black";
BrechtDeMan@753 1144 preHolder.style.borderStyle = "solid";
BrechtDeMan@753 1145 preHolder.style.borderWidth = "1px";
BrechtDeMan@753 1146 this.popupBody.appendChild(preHolder);
BrechtDeMan@753 1147 var preHeaderHolder = document.createElement('div');
BrechtDeMan@753 1148 preHeaderHolder.style.width = "456px";
BrechtDeMan@753 1149 preHeaderHolder.style.height= "20px";
BrechtDeMan@753 1150 preHeaderHolder.style.margin= "2px";
BrechtDeMan@753 1151 preHeaderHolder.style.borderBottom = "#DDD";
BrechtDeMan@753 1152 preHeaderHolder.style.borderBottomWidth = "1px";
BrechtDeMan@753 1153 preHeaderHolder.style.borderBottomStyle = "solid";
BrechtDeMan@753 1154 var mvH = document.createElement('div');
BrechtDeMan@753 1155 mvH.className = "dndheaderelement";
BrechtDeMan@753 1156 mvH.style.width = "50px";
BrechtDeMan@753 1157 var text = document.createElement('span');
BrechtDeMan@753 1158 text.textContent = "Order";
BrechtDeMan@753 1159 mvH.appendChild(text);
BrechtDeMan@753 1160 preHeaderHolder.appendChild(mvH);
BrechtDeMan@753 1161 var idH = document.createElement('div');
BrechtDeMan@753 1162 idH.className = "dndheaderelement";
BrechtDeMan@753 1163 idH.style.width = "150px";
BrechtDeMan@753 1164 text = document.createElement('span');
BrechtDeMan@753 1165 text.textContent = "ID";
BrechtDeMan@753 1166 idH.appendChild(text);
BrechtDeMan@753 1167 preHeaderHolder.appendChild(idH);
BrechtDeMan@753 1168 var tH = document.createElement('div');
BrechtDeMan@753 1169 tH.className = "dndheaderelement";
BrechtDeMan@753 1170 tH.style.width = "150px";
BrechtDeMan@753 1171 text = document.createElement('span');
BrechtDeMan@753 1172 text.textContent = "Type";
BrechtDeMan@753 1173 tH.appendChild(text);
BrechtDeMan@753 1174 preHeaderHolder.appendChild(tH);
BrechtDeMan@753 1175 var editH = document.createElement('div');
BrechtDeMan@753 1176 editH.className = "dndheaderelement";
BrechtDeMan@753 1177 editH.style.width = "50px";
BrechtDeMan@753 1178 text = document.createElement('span');
BrechtDeMan@753 1179 text.textContent = "Edit";
BrechtDeMan@753 1180 editH.appendChild(text);
BrechtDeMan@753 1181 preHeaderHolder.appendChild(editH);
BrechtDeMan@753 1182 var deleteH = document.createElement('div');
BrechtDeMan@753 1183 deleteH.className = "dndheaderelement";
BrechtDeMan@753 1184 deleteH.style.width = "50px";
BrechtDeMan@753 1185 text = document.createElement('span');
BrechtDeMan@753 1186 text.textContent = "Delete";
BrechtDeMan@753 1187 deleteH.appendChild(text);
BrechtDeMan@753 1188 preHeaderHolder.appendChild(deleteH);
BrechtDeMan@753 1189 preHolder.appendChild(preHeaderHolder);
BrechtDeMan@753 1190
BrechtDeMan@753 1191
BrechtDeMan@753 1192 for (var i=0; i<specificationNode.preTest.options.length; i++)
BrechtDeMan@753 1193 {
BrechtDeMan@753 1194 var optionNode = specificationNode.preTest.options[i];
BrechtDeMan@753 1195 var entry = document.createElement('div');
BrechtDeMan@753 1196 entry.style.width = "456px";
BrechtDeMan@753 1197 entry.style.height= "20px";
BrechtDeMan@753 1198 entry.style.margin= "2px";
BrechtDeMan@753 1199 entry.style.borderBottom = "#DDD";
BrechtDeMan@753 1200 entry.style.borderBottomWidth = "1px";
BrechtDeMan@753 1201 entry.style.borderBottomStyle = "solid";
BrechtDeMan@753 1202 entry.setAttribute("node-id",i);
BrechtDeMan@753 1203 var node = specificationNode.preTest.options[i];
BrechtDeMan@753 1204 var mvH = document.createElement('div');
BrechtDeMan@753 1205 mvH.className = "dndheaderelement";
BrechtDeMan@753 1206 mvH.style.width = "50px";
BrechtDeMan@753 1207 var mvup = document.createElement("button");
BrechtDeMan@753 1208 mvup.textContent = "Up";
BrechtDeMan@753 1209 mvup.style.width = "25px";
BrechtDeMan@753 1210 mvup.style.padding = "1px 0px";
BrechtDeMan@753 1211 mvup.onclick = function()
BrechtDeMan@753 1212 {
BrechtDeMan@753 1213 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 1214 if (i != 0)
BrechtDeMan@753 1215 {
BrechtDeMan@753 1216 var next = specificationNode.preTest.options[i-1];
BrechtDeMan@753 1217 var cur = specificationNode.preTest.options[i];
BrechtDeMan@753 1218 specificationNode.preTest.options[i-1] = cur;
BrechtDeMan@753 1219 specificationNode.preTest.options[i] = next;
BrechtDeMan@753 1220 popupInstance.state = 7;
BrechtDeMan@753 1221 popupInstance.advanceState();
BrechtDeMan@753 1222 }
BrechtDeMan@753 1223 };
BrechtDeMan@753 1224 mvH.appendChild(mvup);
BrechtDeMan@753 1225 var mvdn = document.createElement("button");
BrechtDeMan@753 1226 mvdn.textContent = "Dn";
BrechtDeMan@753 1227 mvdn.style.width = "25px";
BrechtDeMan@753 1228 mvdn.style.padding = "1px 0px";
BrechtDeMan@753 1229 mvdn.onclick = function()
BrechtDeMan@753 1230 {
BrechtDeMan@753 1231 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 1232 if (i != specificationNode.preTest.options.length-1)
BrechtDeMan@753 1233 {
BrechtDeMan@753 1234 var next = specificationNode.preTest.options[i+1];
BrechtDeMan@753 1235 var cur = specificationNode.preTest.options[i];
BrechtDeMan@753 1236 specificationNode.preTest.options[i+1] = cur;
BrechtDeMan@753 1237 specificationNode.preTest.options[i] = next;
BrechtDeMan@753 1238 popupInstance.state = 7;
BrechtDeMan@753 1239 popupInstance.advanceState();
BrechtDeMan@753 1240 }
BrechtDeMan@753 1241 };
BrechtDeMan@753 1242 mvH.appendChild(mvdn);
BrechtDeMan@753 1243 entry.appendChild(mvH);
BrechtDeMan@753 1244 var idH = document.createElement('div');
BrechtDeMan@753 1245 idH.className = "dndheaderelement";
BrechtDeMan@753 1246 idH.style.width = "150px";
BrechtDeMan@753 1247 if (optionNode.type != "statement")
BrechtDeMan@753 1248 {
BrechtDeMan@753 1249 var span = document.createElement('span');
BrechtDeMan@753 1250 span.textContent = optionNode.id;
BrechtDeMan@753 1251 idH.appendChild(span);
BrechtDeMan@753 1252 }
BrechtDeMan@753 1253 entry.appendChild(idH);
BrechtDeMan@753 1254 var typeH = document.createElement('div');
BrechtDeMan@753 1255 typeH.className = "dndheaderelement";
BrechtDeMan@753 1256 typeH.style.width = "150px";
BrechtDeMan@753 1257 var span = document.createElement('span');
BrechtDeMan@753 1258 span.textContent = optionNode.type;
BrechtDeMan@753 1259 typeH.appendChild(span);
BrechtDeMan@753 1260 entry.appendChild(typeH);
BrechtDeMan@753 1261 var editH = document.createElement('div');
BrechtDeMan@753 1262 editH.className = "dndheaderelement";
BrechtDeMan@753 1263 editH.style.width = "50px";
BrechtDeMan@753 1264 var editButton = document.createElement("button");
BrechtDeMan@753 1265 editButton.textContent = "Edit";
BrechtDeMan@753 1266 editButton.style.width = "48px";
BrechtDeMan@753 1267 editButton.style.padding = "1px 0px";
BrechtDeMan@753 1268 editButton.onclick = function()
BrechtDeMan@753 1269 {
BrechtDeMan@753 1270 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 1271 popupInstance.dataTransfer = new function() {
BrechtDeMan@753 1272 this.title = "Edit Test Node";
BrechtDeMan@753 1273 this.parent = specificationNode.preTest;
BrechtDeMan@753 1274 this.node = this.parent.options[i];
BrechtDeMan@753 1275 this.previousState = 7;
BrechtDeMan@753 1276 };
BrechtDeMan@753 1277 popupInstace.state = 6;
BrechtDeMan@753 1278 popupInstance.advanceState();
BrechtDeMan@753 1279 };
BrechtDeMan@753 1280 editH.appendChild(editButton);
BrechtDeMan@753 1281 entry.appendChild(editH);
BrechtDeMan@753 1282 var deleteH = document.createElement('div');
BrechtDeMan@753 1283 deleteH.className = "dndheaderelement";
BrechtDeMan@753 1284 deleteH.style.width = "50px";
BrechtDeMan@753 1285 var deleteButton = document.createElement("button");
BrechtDeMan@753 1286 deleteButton.textContent = "Del";
BrechtDeMan@753 1287 deleteButton.style.width = "48px";
BrechtDeMan@753 1288 deleteButton.style.padding = "1px 0px";
BrechtDeMan@753 1289 deleteButton.onclick = function()
BrechtDeMan@753 1290 {
BrechtDeMan@753 1291 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 1292 var j = i+1;
BrechtDeMan@753 1293 while(j < specificationNode.preTest.options.length)
BrechtDeMan@753 1294 {
BrechtDeMan@753 1295 specificationNode.preTest.options[i] = specificationNode.preTest.options[j];
BrechtDeMan@753 1296 j++;
BrechtDeMan@753 1297 i++;
BrechtDeMan@753 1298 }
BrechtDeMan@753 1299 specificationNode.preTest.options.pop();
BrechtDeMan@753 1300 popupInstance.state = 7;
BrechtDeMan@753 1301 popupInstance.advanceState();
BrechtDeMan@753 1302 };
BrechtDeMan@753 1303 deleteH.appendChild(deleteButton);
BrechtDeMan@753 1304 entry.appendChild(deleteH);
BrechtDeMan@753 1305 preHolder.appendChild(entry);
BrechtDeMan@753 1306 }
BrechtDeMan@753 1307 var entry = document.createElement('div');
BrechtDeMan@753 1308 entry.style.width = "456px";
BrechtDeMan@753 1309 entry.style.height= "20px";
BrechtDeMan@753 1310 entry.style.margin= "2px";
BrechtDeMan@753 1311 entry.style.borderBottom = "#DDD";
BrechtDeMan@753 1312 entry.style.borderBottomWidth = "1px";
BrechtDeMan@753 1313 entry.style.borderBottomStyle = "solid";
BrechtDeMan@753 1314 entry.align = "center";
BrechtDeMan@753 1315 var addPre = document.createElement('button');
BrechtDeMan@753 1316 addPre.className = "popupButton";
BrechtDeMan@753 1317 addPre.textContent = "Add New Entry";
BrechtDeMan@753 1318 addPre.style.height = "20px";
BrechtDeMan@753 1319 addPre.onclick = function()
BrechtDeMan@753 1320 {
BrechtDeMan@753 1321 popupInstance.dataTransfer = new function() {
BrechtDeMan@753 1322 this.title = "New Pre Test Node";
BrechtDeMan@753 1323 this.parent = specificationNode.preTest;
BrechtDeMan@753 1324 this.node = null;
BrechtDeMan@753 1325 this.previousState = 7;
BrechtDeMan@753 1326 };
BrechtDeMan@753 1327 popupInstance.state = 6;
BrechtDeMan@753 1328 popupInstance.advanceState();
BrechtDeMan@753 1329 };
BrechtDeMan@753 1330 entry.appendChild(addPre);
BrechtDeMan@753 1331 preHolder.appendChild(entry);
BrechtDeMan@753 1332
BrechtDeMan@753 1333 var span = document.createElement('span');
BrechtDeMan@753 1334 span.textContent = "Add your post test page options here";
BrechtDeMan@753 1335 this.popupBody.appendChild(span);
BrechtDeMan@753 1336 var postHolder = document.createElement('div');
BrechtDeMan@753 1337 postHolder.id = "preHolder";
BrechtDeMan@753 1338 postHolder.style.width = "100%";
BrechtDeMan@753 1339 postHolder.style.minHeight = "100px";
BrechtDeMan@753 1340 postHolder.style.maxHeight = "220px";
BrechtDeMan@753 1341 postHolder.style.overflow = 'auto';
BrechtDeMan@753 1342 postHolder.style.border = "black";
BrechtDeMan@753 1343 postHolder.style.borderStyle = "solid";
BrechtDeMan@753 1344 postHolder.style.borderWidth = "1px";
BrechtDeMan@753 1345 this.popupBody.appendChild(postHolder);
BrechtDeMan@753 1346 var postHeaderHolder = document.createElement('div');
BrechtDeMan@753 1347 postHeaderHolder.style.width = "456px";
BrechtDeMan@753 1348 postHeaderHolder.style.height= "20px";
BrechtDeMan@753 1349 postHeaderHolder.style.margin= "2px";
BrechtDeMan@753 1350 postHeaderHolder.style.borderBottom = "#DDD";
BrechtDeMan@753 1351 postHeaderHolder.style.borderBottomWidth = "1px";
BrechtDeMan@753 1352 postHeaderHolder.style.borderBottomStyle = "solid";
BrechtDeMan@753 1353 var mvH = document.createElement('div');
BrechtDeMan@753 1354 mvH.className = "dndheaderelement";
BrechtDeMan@753 1355 mvH.style.width = "50px";
BrechtDeMan@753 1356 var text = document.createElement('span');
BrechtDeMan@753 1357 text.textContent = "Order";
BrechtDeMan@753 1358 mvH.appendChild(text);
BrechtDeMan@753 1359 postHeaderHolder.appendChild(mvH);
BrechtDeMan@753 1360 var idH = document.createElement('div');
BrechtDeMan@753 1361 idH.className = "dndheaderelement";
BrechtDeMan@753 1362 idH.style.width = "150px";
BrechtDeMan@753 1363 text = document.createElement('span');
BrechtDeMan@753 1364 text.textContent = "ID";
BrechtDeMan@753 1365 idH.appendChild(text);
BrechtDeMan@753 1366 postHeaderHolder.appendChild(idH);
BrechtDeMan@753 1367 var tH = document.createElement('div');
BrechtDeMan@753 1368 tH.className = "dndheaderelement";
BrechtDeMan@753 1369 tH.style.width = "150px";
BrechtDeMan@753 1370 text = document.createElement('span');
BrechtDeMan@753 1371 text.textContent = "Type";
BrechtDeMan@753 1372 tH.appendChild(text);
BrechtDeMan@753 1373 postHeaderHolder.appendChild(tH);
BrechtDeMan@753 1374 var editH = document.createElement('div');
BrechtDeMan@753 1375 editH.className = "dndheaderelement";
BrechtDeMan@753 1376 editH.style.width = "50px";
BrechtDeMan@753 1377 text = document.createElement('span');
BrechtDeMan@753 1378 text.textContent = "Edit";
BrechtDeMan@753 1379 editH.appendChild(text);
BrechtDeMan@753 1380 postHeaderHolder.appendChild(editH);
BrechtDeMan@753 1381 var deleteH = document.createElement('div');
BrechtDeMan@753 1382 deleteH.className = "dndheaderelement";
BrechtDeMan@753 1383 deleteH.style.width = "50px";
BrechtDeMan@753 1384 text = document.createElement('span');
BrechtDeMan@753 1385 text.textContent = "Delete";
BrechtDeMan@753 1386 deleteH.appendChild(text);
BrechtDeMan@753 1387 postHeaderHolder.appendChild(deleteH);
BrechtDeMan@753 1388 postHolder.appendChild(postHeaderHolder);
BrechtDeMan@753 1389
BrechtDeMan@753 1390 for (var i=0; i<specificationNode.postTest.options.length; i++)
BrechtDeMan@753 1391 {
BrechtDeMan@753 1392 var optionNode = specificationNode.postTest.options[i];
BrechtDeMan@753 1393 var entry = document.createElement('div');
BrechtDeMan@753 1394 entry.style.width = "456px";
BrechtDeMan@753 1395 entry.style.height= "20px";
BrechtDeMan@753 1396 entry.style.margin= "2px";
BrechtDeMan@753 1397 entry.style.borderBottom = "#DDD";
BrechtDeMan@753 1398 entry.style.borderBottomWidth = "1px";
BrechtDeMan@753 1399 entry.style.borderBottomStyle = "solid";
BrechtDeMan@753 1400 entry.setAttribute("node-id",i);
BrechtDeMan@753 1401 var node = specificationNode.postTest.options[i];
BrechtDeMan@753 1402 var mvH = document.createElement('div');
BrechtDeMan@753 1403 mvH.className = "dndheaderelement";
BrechtDeMan@753 1404 mvH.style.width = "50px";
BrechtDeMan@753 1405 var mvup = document.createElement("button");
BrechtDeMan@753 1406 mvup.textContent = "Up";
BrechtDeMan@753 1407 mvup.style.width = "25px";
BrechtDeMan@753 1408 mvup.style.padding = "1px 0px";
BrechtDeMan@753 1409 mvup.onclick = function()
BrechtDeMan@753 1410 {
BrechtDeMan@753 1411 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 1412 if (i != 0)
BrechtDeMan@753 1413 {
BrechtDeMan@753 1414 var next = specificationNode.postTest.options[i-1];
BrechtDeMan@753 1415 var cur = specificationNode.postTest.options[i];
BrechtDeMan@753 1416 specificationNode.postTest.options[i-1] = cur;
BrechtDeMan@753 1417 specificationNode.postTest.options[i] = next;
BrechtDeMan@753 1418 popupInstance.state = 7;
BrechtDeMan@753 1419 popupInstance.advanceState();
BrechtDeMan@753 1420 }
BrechtDeMan@753 1421 };
BrechtDeMan@753 1422 mvH.appendChild(mvup);
BrechtDeMan@753 1423 var mvdn = document.createElement("button");
BrechtDeMan@753 1424 mvdn.textContent = "Dn";
BrechtDeMan@753 1425 mvdn.style.width = "25px";
BrechtDeMan@753 1426 mvdn.style.padding = "1px 0px";
BrechtDeMan@753 1427 mvdn.onclick = function()
BrechtDeMan@753 1428 {
BrechtDeMan@753 1429 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 1430 if (i != specificationNode.postTest.options.length-1)
BrechtDeMan@753 1431 {
BrechtDeMan@753 1432 var next = specificationNode.postTest.options[i+1];
BrechtDeMan@753 1433 var cur = specificationNode.postTest.options[i];
BrechtDeMan@753 1434 specificationNode.postTest.options[i+1] = cur;
BrechtDeMan@753 1435 specificationNode.postTest.options[i] = next;
BrechtDeMan@753 1436 popupInstance.state = 7;
BrechtDeMan@753 1437 popupInstance.advanceState();
BrechtDeMan@753 1438 }
BrechtDeMan@753 1439 };
BrechtDeMan@753 1440 mvH.appendChild(mvdn);
BrechtDeMan@753 1441 entry.appendChild(mvH);
BrechtDeMan@753 1442 var idH = document.createElement('div');
BrechtDeMan@753 1443 idH.className = "dndheaderelement";
BrechtDeMan@753 1444 idH.style.width = "150px";
BrechtDeMan@753 1445 if (optionNode.type != "statement")
BrechtDeMan@753 1446 {
BrechtDeMan@753 1447 var span = document.createElement('span');
BrechtDeMan@753 1448 span.textContent = optionNode.id;
BrechtDeMan@753 1449 idH.appendChild(span);
BrechtDeMan@753 1450 }
BrechtDeMan@753 1451 entry.appendChild(idH);
BrechtDeMan@753 1452 var typeH = document.createElement('div');
BrechtDeMan@753 1453 typeH.className = "dndheaderelement";
BrechtDeMan@753 1454 typeH.style.width = "150px";
BrechtDeMan@753 1455 var span = document.createElement('span');
BrechtDeMan@753 1456 span.textContent = optionNode.type;
BrechtDeMan@753 1457 typeH.appendChild(span);
BrechtDeMan@753 1458 entry.appendChild(typeH);
BrechtDeMan@753 1459 var editH = document.createElement('div');
BrechtDeMan@753 1460 editH.className = "dndheaderelement";
BrechtDeMan@753 1461 editH.style.width = "50px";
BrechtDeMan@753 1462 var editButton = document.createElement("button");
BrechtDeMan@753 1463 editButton.textContent = "Edit";
BrechtDeMan@753 1464 editButton.style.width = "48px";
BrechtDeMan@753 1465 editButton.style.padding = "1px 0px";
BrechtDeMan@753 1466 editButton.onclick = function()
BrechtDeMan@753 1467 {
BrechtDeMan@753 1468 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 1469 popupInstance.dataTransfer = new function() {
BrechtDeMan@753 1470 this.title = "Edit Test Node";
BrechtDeMan@753 1471 this.parent = specificationNode.postTest;
BrechtDeMan@753 1472 this.node = this.parent.options[i];
BrechtDeMan@753 1473 this.previousState = 7;
BrechtDeMan@753 1474 };
BrechtDeMan@753 1475 popupInstance.state = 6;
BrechtDeMan@753 1476 popupInstance.advanceState();
BrechtDeMan@753 1477 };
BrechtDeMan@753 1478 editH.appendChild(editButton);
BrechtDeMan@753 1479 entry.appendChild(editH);
BrechtDeMan@753 1480 var deleteH = document.createElement('div');
BrechtDeMan@753 1481 deleteH.className = "dndheaderelement";
BrechtDeMan@753 1482 deleteH.style.width = "50px";
BrechtDeMan@753 1483 var deleteButton = document.createElement("button");
BrechtDeMan@753 1484 deleteButton.textContent = "Del";
BrechtDeMan@753 1485 deleteButton.style.width = "48px";
BrechtDeMan@753 1486 deleteButton.style.padding = "1px 0px";
BrechtDeMan@753 1487 deleteButton.onclick = function()
BrechtDeMan@753 1488 {
BrechtDeMan@753 1489 var i = Number(event.currentTarget.parentElement.parentElement.getAttribute("node-id"));
BrechtDeMan@753 1490 var j = i+1;
BrechtDeMan@753 1491 while(j < specificationNode.postTest.options.length)
BrechtDeMan@753 1492 {
BrechtDeMan@753 1493 specificationNode.postTest.options[i] = specificationNode.postTest.options[j];
BrechtDeMan@753 1494 j++;
BrechtDeMan@753 1495 i++;
BrechtDeMan@753 1496 }
BrechtDeMan@753 1497 audioHolder.postTest.options.pop();
BrechtDeMan@753 1498 popupInstance.state = 7;
BrechtDeMan@753 1499 popupInstance.advanceState();
BrechtDeMan@753 1500 };
BrechtDeMan@753 1501 deleteH.appendChild(deleteButton);
BrechtDeMan@753 1502 entry.appendChild(deleteH);
BrechtDeMan@753 1503 postHolder.appendChild(entry);
BrechtDeMan@753 1504 }
BrechtDeMan@753 1505
BrechtDeMan@753 1506 var entry = document.createElement('div');
BrechtDeMan@753 1507 entry.style.width = "456px";
BrechtDeMan@753 1508 entry.style.height= "20px";
BrechtDeMan@753 1509 entry.style.margin= "2px";
BrechtDeMan@753 1510 entry.style.borderBottom = "#DDD";
BrechtDeMan@753 1511 entry.style.borderBottomWidth = "1px";
BrechtDeMan@753 1512 entry.style.borderBottomStyle = "solid";
BrechtDeMan@753 1513 entry.align = "center";
BrechtDeMan@753 1514 var addPost = document.createElement('button');
BrechtDeMan@753 1515 addPost.className = "popupButton";
BrechtDeMan@753 1516 addPost.textContent = "Add New Entry";
BrechtDeMan@753 1517 addPost.style.height = "20px";
BrechtDeMan@753 1518 addPost.onclick = function()
BrechtDeMan@753 1519 {
BrechtDeMan@753 1520 popupInstance.dataTransfer = new function() {
BrechtDeMan@753 1521 this.title = "New Pre Test Node";
BrechtDeMan@753 1522 this.parent = specificationNode.postTest;
BrechtDeMan@753 1523 this.node = null;
BrechtDeMan@753 1524 this.previousState = 7;
BrechtDeMan@753 1525 };
BrechtDeMan@753 1526 popupInstance.state = 6;
BrechtDeMan@753 1527 popupInstance.advanceState();
BrechtDeMan@753 1528 };
BrechtDeMan@753 1529 entry.appendChild(addPost);
BrechtDeMan@753 1530 postHolder.appendChild(entry);
BrechtDeMan@753 1531
BrechtDeMan@753 1532 var button = document.createElement('button');
BrechtDeMan@753 1533 button.id = 'submit';
BrechtDeMan@753 1534 button.className = "popupButton";
BrechtDeMan@753 1535 button.textContent = "Finish";
BrechtDeMan@753 1536 button.onclick = function(event)
BrechtDeMan@753 1537 {
BrechtDeMan@753 1538 popupInstance.state = 8;
BrechtDeMan@753 1539 popupInstance.advanceState();
BrechtDeMan@753 1540 };
BrechtDeMan@753 1541 this.popupFooter.appendChild(button);
BrechtDeMan@753 1542 break;
BrechtDeMan@753 1543 case 8:
BrechtDeMan@753 1544 this.hidePopup();
BrechtDeMan@753 1545 this.state = 0;
BrechtDeMan@753 1546 SpecificationToHTML ();
BrechtDeMan@753 1547 }
BrechtDeMan@753 1548 this.state++;
BrechtDeMan@753 1549 };
BrechtDeMan@753 1550 };
BrechtDeMan@753 1551
BrechtDeMan@753 1552 function audioObject()
BrechtDeMan@753 1553 {
BrechtDeMan@753 1554 // Used to hold audio information in buffers for quick playback
BrechtDeMan@753 1555 this.bufferObject;
BrechtDeMan@753 1556 this.bufferNode = undefined;
BrechtDeMan@753 1557 this.state = 0;
BrechtDeMan@753 1558 this.gain = audioContext.createGain();
BrechtDeMan@753 1559 this.gain.connect(audioContext.destination);
BrechtDeMan@753 1560 this.include = true;
BrechtDeMan@753 1561 this.id = undefined;
BrechtDeMan@753 1562 this.file = undefined;
BrechtDeMan@753 1563
BrechtDeMan@753 1564 this.play = function()
BrechtDeMan@753 1565 {
BrechtDeMan@753 1566 if (this.bufferNode != undefined)
BrechtDeMan@753 1567 {
BrechtDeMan@753 1568 this.bufferNode.stop(0);
BrechtDeMan@753 1569 this.bufferNode = undefined;
BrechtDeMan@753 1570 }
BrechtDeMan@753 1571 if(this.state == 1)
BrechtDeMan@753 1572 {
BrechtDeMan@753 1573 this.bufferNode = audioContext.createBufferSource();
BrechtDeMan@753 1574 this.bufferNode.connect(this.gain);
BrechtDeMan@753 1575 this.bufferNode.buffer = this.bufferObject;
BrechtDeMan@753 1576 this.bufferNode.onended = function(event) {
BrechtDeMan@753 1577 // Safari does not like using 'this' to reference the calling object!
BrechtDeMan@753 1578 event.currentTarget = undefined;
BrechtDeMan@753 1579 };
BrechtDeMan@753 1580 this.bufferNode.start(audioContext.currentTime);
BrechtDeMan@753 1581 this.bufferNode.stop(audioContext.currentTime+3);
BrechtDeMan@753 1582 }
BrechtDeMan@753 1583 };
BrechtDeMan@753 1584
BrechtDeMan@753 1585 this.constructTrack = function(file) {
BrechtDeMan@753 1586 var reader = new FileReader();
BrechtDeMan@753 1587 this.file = file;
BrechtDeMan@753 1588 var audioObj = this;
BrechtDeMan@753 1589 // Create callback to decode the data asynchronously
BrechtDeMan@753 1590 reader.onloadend = function() {
BrechtDeMan@753 1591 audioContext.decodeAudioData(reader.result, function(decodedData) {
BrechtDeMan@753 1592 audioObj.bufferObject = decodedData;
BrechtDeMan@753 1593 audioObj.state = 1;
BrechtDeMan@753 1594 }, function(){});
BrechtDeMan@753 1595 };
BrechtDeMan@753 1596 reader.readAsArrayBuffer(file);
BrechtDeMan@753 1597 };
BrechtDeMan@753 1598 };
BrechtDeMan@753 1599
BrechtDeMan@753 1600 function Specification() {
BrechtDeMan@753 1601 // Handles the decoding of the project specification XML into a simple JavaScript Object.
BrechtDeMan@753 1602
BrechtDeMan@753 1603 this.interfaceType = null;
BrechtDeMan@753 1604 this.commonInterface = new function()
BrechtDeMan@753 1605 {
BrechtDeMan@753 1606 this.options = [];
BrechtDeMan@753 1607 this.optionNode = function(input)
BrechtDeMan@753 1608 {
BrechtDeMan@753 1609 var name = input.getAttribute('name');
BrechtDeMan@753 1610 this.type = name;
BrechtDeMan@753 1611 if(this.type == "option")
BrechtDeMan@753 1612 {
BrechtDeMan@753 1613 this.name = input.id;
BrechtDeMan@753 1614 } else if (this.type == "check")
BrechtDeMan@753 1615 {
BrechtDeMan@753 1616 this.check = input.id;
BrechtDeMan@753 1617 }
BrechtDeMan@753 1618 };
BrechtDeMan@753 1619 };
BrechtDeMan@753 1620
BrechtDeMan@753 1621 this.randomiseOrder = function(input)
BrechtDeMan@753 1622 {
BrechtDeMan@753 1623 // This takes an array of information and randomises the order
BrechtDeMan@753 1624 var N = input.length;
BrechtDeMan@753 1625
BrechtDeMan@753 1626 var inputSequence = []; // For safety purposes: keep track of randomisation
BrechtDeMan@753 1627 for (var counter = 0; counter < N; ++counter)
BrechtDeMan@753 1628 inputSequence.push(counter) // Fill array
BrechtDeMan@753 1629 var inputSequenceClone = inputSequence.slice(0);
BrechtDeMan@753 1630
BrechtDeMan@753 1631 var holdArr = [];
BrechtDeMan@753 1632 var outputSequence = [];
BrechtDeMan@753 1633 for (var n=0; n<N; n++)
BrechtDeMan@753 1634 {
BrechtDeMan@753 1635 // First pick a random number
BrechtDeMan@753 1636 var r = Math.random();
BrechtDeMan@753 1637 // Multiply and floor by the number of elements left
BrechtDeMan@753 1638 r = Math.floor(r*input.length);
BrechtDeMan@753 1639 // Pick out that element and delete from the array
BrechtDeMan@753 1640 holdArr.push(input.splice(r,1)[0]);
BrechtDeMan@753 1641 // Do the same with sequence
BrechtDeMan@753 1642 outputSequence.push(inputSequence.splice(r,1)[0]);
BrechtDeMan@753 1643 }
BrechtDeMan@753 1644 console.log(inputSequenceClone.toString()); // print original array to console
BrechtDeMan@753 1645 console.log(outputSequence.toString()); // print randomised array to console
BrechtDeMan@753 1646 return holdArr;
BrechtDeMan@753 1647 };
BrechtDeMan@753 1648 this.projectReturn = null;
BrechtDeMan@753 1649 this.randomiseOrder = null;
BrechtDeMan@753 1650 this.collectMetrics = null;
BrechtDeMan@753 1651 this.testPages = null;
BrechtDeMan@753 1652 this.audioHolders = [];
BrechtDeMan@753 1653 this.metrics = [];
BrechtDeMan@753 1654
BrechtDeMan@753 1655 this.decode = function(projectXML) {
BrechtDeMan@753 1656 // projectXML - DOM Parsed document
BrechtDeMan@753 1657 this.projectXML = projectXML.childNodes[0];
BrechtDeMan@753 1658 var setupNode = projectXML.getElementsByTagName('setup')[0];
BrechtDeMan@753 1659 this.interfaceType = setupNode.getAttribute('interface');
BrechtDeMan@753 1660 this.projectReturn = setupNode.getAttribute('projectReturn');
BrechtDeMan@753 1661 this.testPages = setupNode.getAttribute('testPages');
BrechtDeMan@753 1662 if (setupNode.getAttribute('randomiseOrder') == "true") {
BrechtDeMan@753 1663 this.randomiseOrder = true;
BrechtDeMan@753 1664 } else {this.randomiseOrder = false;}
BrechtDeMan@753 1665 if (setupNode.getAttribute('collectMetrics') == "true") {
BrechtDeMan@753 1666 this.collectMetrics = true;
BrechtDeMan@753 1667 } else {this.collectMetrics = false;}
BrechtDeMan@753 1668 if (isNaN(Number(this.testPages)) || this.testPages == undefined)
BrechtDeMan@753 1669 {
BrechtDeMan@753 1670 this.testPages = null;
BrechtDeMan@753 1671 } else {
BrechtDeMan@753 1672 this.testPages = Number(this.testPages);
BrechtDeMan@753 1673 if (this.testPages == 0) {this.testPages = null;}
BrechtDeMan@753 1674 }
BrechtDeMan@753 1675 var metricCollection = setupNode.getElementsByTagName('Metric');
BrechtDeMan@753 1676
BrechtDeMan@753 1677 var setupPreTestNode = setupNode.getElementsByTagName('PreTest');
BrechtDeMan@753 1678 if (setupPreTestNode.length != 0)
BrechtDeMan@753 1679 {
BrechtDeMan@753 1680 setupPreTestNode = setupPreTestNode[0];
BrechtDeMan@753 1681 this.preTest.construct(setupPreTestNode);
BrechtDeMan@753 1682 }
BrechtDeMan@753 1683
BrechtDeMan@753 1684 var setupPostTestNode = setupNode.getElementsByTagName('PostTest');
BrechtDeMan@753 1685 if (setupPostTestNode.length != 0)
BrechtDeMan@753 1686 {
BrechtDeMan@753 1687 setupPostTestNode = setupPostTestNode[0];
BrechtDeMan@753 1688 this.postTest.construct(setupPostTestNode);
BrechtDeMan@753 1689 }
BrechtDeMan@753 1690
BrechtDeMan@753 1691 if (metricCollection.length > 0) {
BrechtDeMan@753 1692 metricCollection = metricCollection[0].getElementsByTagName('metricEnable');
BrechtDeMan@753 1693 for (var i=0; i<metricCollection.length; i++) {
BrechtDeMan@753 1694 this.metrics.push(new this.metricNode(metricCollection[i].textContent));
BrechtDeMan@753 1695 }
BrechtDeMan@753 1696 }
BrechtDeMan@753 1697
BrechtDeMan@753 1698 var commonInterfaceNode = setupNode.getElementsByTagName('interface');
BrechtDeMan@753 1699 if (commonInterfaceNode.length > 0) {
BrechtDeMan@753 1700 commonInterfaceNode = commonInterfaceNode[0];
BrechtDeMan@753 1701 } else {
BrechtDeMan@753 1702 commonInterfaceNode = undefined;
BrechtDeMan@753 1703 }
BrechtDeMan@753 1704
BrechtDeMan@753 1705 this.commonInterface = new function() {
BrechtDeMan@753 1706 this.OptionNode = function(child) {
BrechtDeMan@753 1707 this.type = child.nodeName;
BrechtDeMan@753 1708 if (this.type == 'option')
BrechtDeMan@753 1709 {
BrechtDeMan@753 1710 this.name = child.getAttribute('name');
BrechtDeMan@753 1711 }
BrechtDeMan@753 1712 else if (this.type == 'check') {
BrechtDeMan@753 1713 this.check = child.getAttribute('name');
BrechtDeMan@753 1714 if (this.check == 'scalerange') {
BrechtDeMan@753 1715 this.min = child.getAttribute('min');
BrechtDeMan@753 1716 this.max = child.getAttribute('max');
BrechtDeMan@753 1717 if (this.min == null) {this.min = 1;}
BrechtDeMan@753 1718 else if (Number(this.min) > 1 && this.min != null) {
BrechtDeMan@753 1719 this.min = Number(this.min)/100;
BrechtDeMan@753 1720 } else {
BrechtDeMan@753 1721 this.min = Number(this.min);
BrechtDeMan@753 1722 }
BrechtDeMan@753 1723 if (this.max == null) {this.max = 0;}
BrechtDeMan@753 1724 else if (Number(this.max) > 1 && this.max != null) {
BrechtDeMan@753 1725 this.max = Number(this.max)/100;
BrechtDeMan@753 1726 } else {
BrechtDeMan@753 1727 this.max = Number(this.max);
BrechtDeMan@753 1728 }
BrechtDeMan@753 1729 }
BrechtDeMan@753 1730 } else if (this.type == 'anchor' || this.type == 'reference') {
BrechtDeMan@753 1731 this.value = Number(child.textContent);
BrechtDeMan@753 1732 this.enforce = child.getAttribute('enforce');
BrechtDeMan@753 1733 if (this.enforce == 'true') {this.enforce = true;}
BrechtDeMan@753 1734 else {this.enforce = false;}
BrechtDeMan@753 1735 }
BrechtDeMan@753 1736 };
BrechtDeMan@753 1737 this.options = [];
BrechtDeMan@753 1738 if (commonInterfaceNode != undefined) {
BrechtDeMan@753 1739 var child = commonInterfaceNode.firstElementChild;
BrechtDeMan@753 1740 while (child != undefined) {
BrechtDeMan@753 1741 this.options.push(new this.OptionNode(child));
BrechtDeMan@753 1742 child = child.nextElementSibling;
BrechtDeMan@753 1743 }
BrechtDeMan@753 1744 }
BrechtDeMan@753 1745 };
BrechtDeMan@753 1746
BrechtDeMan@753 1747 var audioHolders = projectXML.getElementsByTagName('audioHolder');
BrechtDeMan@753 1748 for (var i=0; i<audioHolders.length; i++) {
BrechtDeMan@753 1749 var node = new this.audioHolderNode(this);
BrechtDeMan@753 1750 node.decode(this,audioHolders[i]);
BrechtDeMan@753 1751 this.audioHolders.push(node);
BrechtDeMan@753 1752 }
BrechtDeMan@753 1753
BrechtDeMan@753 1754 // New check if we need to randomise the test order
BrechtDeMan@753 1755 if (this.randomiseOrder && typeof randomiseOrder === "function")
BrechtDeMan@753 1756 {
BrechtDeMan@753 1757 this.audioHolders = randomiseOrder(this.audioHolders);
BrechtDeMan@753 1758 for (var i=0; i<this.audioHolders.length; i++)
BrechtDeMan@753 1759 {
BrechtDeMan@753 1760 this.audioHolders[i].presentedId = i;
BrechtDeMan@753 1761 }
BrechtDeMan@753 1762 }
BrechtDeMan@753 1763
BrechtDeMan@753 1764 if (this.testPages != null || this.testPages != undefined)
BrechtDeMan@753 1765 {
BrechtDeMan@753 1766 if (this.testPages > audioHolders.length)
BrechtDeMan@753 1767 {
BrechtDeMan@753 1768 console.log('Warning: You have specified '+audioHolders.length+' tests but requested '+this.testPages+' be completed!');
BrechtDeMan@753 1769 this.testPages = audioHolders.length;
BrechtDeMan@753 1770 }
BrechtDeMan@753 1771 var aH = this.audioHolders;
BrechtDeMan@753 1772 this.audioHolders = [];
BrechtDeMan@753 1773 for (var i=0; i<this.testPages; i++)
BrechtDeMan@753 1774 {
BrechtDeMan@753 1775 this.audioHolders.push(aH[i]);
BrechtDeMan@753 1776 }
BrechtDeMan@753 1777 }
BrechtDeMan@753 1778 };
BrechtDeMan@753 1779
BrechtDeMan@753 1780 this.encode = function()
BrechtDeMan@753 1781 {
BrechtDeMan@753 1782 var root = document.implementation.createDocument(null,"BrowserEvalProjectDocument");
BrechtDeMan@753 1783 // First get all the <setup> tag compiled
BrechtDeMan@753 1784 var setupNode = root.createElement("setup");
BrechtDeMan@753 1785 setupNode.setAttribute('interface',this.interfaceType);
BrechtDeMan@753 1786 setupNode.setAttribute('projectReturn',this.projectReturn);
BrechtDeMan@753 1787 setupNode.setAttribute('randomiseOrder',this.randomiseOrder);
BrechtDeMan@753 1788 setupNode.setAttribute('collectMetrics',this.collectMetrics);
BrechtDeMan@753 1789 setupNode.setAttribute('testPages',this.testPages);
BrechtDeMan@753 1790
BrechtDeMan@753 1791 var setupPreTest = root.createElement("PreTest");
BrechtDeMan@753 1792 for (var i=0; i<this.preTest.options.length; i++)
BrechtDeMan@753 1793 {
BrechtDeMan@753 1794 setupPreTest.appendChild(this.preTest.options[i].exportXML(root));
BrechtDeMan@753 1795 }
BrechtDeMan@753 1796
BrechtDeMan@753 1797 var setupPostTest = root.createElement("PostTest");
BrechtDeMan@753 1798 for (var i=0; i<this.postTest.options.length; i++)
BrechtDeMan@753 1799 {
BrechtDeMan@753 1800 setupPostTest.appendChild(this.postTest.options[i].exportXML(root));
BrechtDeMan@753 1801 }
BrechtDeMan@753 1802
BrechtDeMan@753 1803 setupNode.appendChild(setupPreTest);
BrechtDeMan@753 1804 setupNode.appendChild(setupPostTest);
BrechtDeMan@753 1805
BrechtDeMan@753 1806 // <Metric> tag
BrechtDeMan@753 1807 var Metric = root.createElement("Metric");
BrechtDeMan@753 1808 for (var i=0; i<this.metrics.length; i++)
BrechtDeMan@753 1809 {
BrechtDeMan@753 1810 var metricEnable = root.createElement("metricEnable");
BrechtDeMan@753 1811 metricEnable.textContent = this.metrics[i].enabled;
BrechtDeMan@753 1812 Metric.appendChild(metricEnable);
BrechtDeMan@753 1813 }
BrechtDeMan@753 1814 setupNode.appendChild(Metric);
BrechtDeMan@753 1815
BrechtDeMan@753 1816 // <interface> tag
BrechtDeMan@753 1817 var CommonInterface = root.createElement("interface");
BrechtDeMan@753 1818 for (var i=0; i<this.commonInterface.options.length; i++)
BrechtDeMan@753 1819 {
BrechtDeMan@753 1820 var CIObj = this.commonInterface.options[i];
BrechtDeMan@753 1821 var CINode = root.createElement(CIObj.type);
BrechtDeMan@753 1822 if (CIObj.type == "check") {CINode.setAttribute("name",CIObj.check);}
BrechtDeMan@753 1823 else {CINode.setAttribute("name",CIObj.name);}
BrechtDeMan@753 1824 CommonInterface.appendChild(CINode);
BrechtDeMan@753 1825 }
BrechtDeMan@753 1826 setupNode.appendChild(CommonInterface);
BrechtDeMan@753 1827
BrechtDeMan@753 1828 root.getElementsByTagName("BrowserEvalProjectDocument")[0].appendChild(setupNode);
BrechtDeMan@753 1829 // Time for the <audioHolder> tags
BrechtDeMan@753 1830 for (var ahIndex = 0; ahIndex < this.audioHolders.length; ahIndex++)
BrechtDeMan@753 1831 {
BrechtDeMan@753 1832 var node = this.audioHolders[ahIndex].encode(root);
BrechtDeMan@753 1833 root.getElementsByTagName("BrowserEvalProjectDocument")[0].appendChild(node);
BrechtDeMan@753 1834 }
BrechtDeMan@753 1835 return root;
BrechtDeMan@753 1836 };
BrechtDeMan@753 1837
BrechtDeMan@753 1838 this.prepostNode = function(type) {
BrechtDeMan@753 1839 this.type = type;
BrechtDeMan@753 1840 this.options = [];
BrechtDeMan@753 1841
BrechtDeMan@753 1842 this.OptionNode = function() {
BrechtDeMan@753 1843
BrechtDeMan@753 1844 this.childOption = function() {
BrechtDeMan@753 1845 this.type = 'option';
BrechtDeMan@753 1846 this.id = null;
BrechtDeMan@753 1847 this.name = undefined;
BrechtDeMan@753 1848 this.text = null;
BrechtDeMan@753 1849 };
BrechtDeMan@753 1850
BrechtDeMan@753 1851 this.type = undefined;
BrechtDeMan@753 1852 this.id = undefined;
BrechtDeMan@753 1853 this.mandatory = undefined;
BrechtDeMan@753 1854 this.question = undefined;
BrechtDeMan@753 1855 this.statement = undefined;
BrechtDeMan@753 1856 this.boxsize = undefined;
BrechtDeMan@753 1857 this.options = [];
BrechtDeMan@753 1858 this.min = undefined;
BrechtDeMan@753 1859 this.max = undefined;
BrechtDeMan@753 1860 this.step = undefined;
BrechtDeMan@753 1861
BrechtDeMan@753 1862 this.decode = function(child)
BrechtDeMan@753 1863 {
BrechtDeMan@753 1864 this.type = child.nodeName;
BrechtDeMan@753 1865 if (child.nodeName == "question") {
BrechtDeMan@753 1866 this.id = child.id;
BrechtDeMan@753 1867 this.mandatory;
BrechtDeMan@753 1868 if (child.getAttribute('mandatory') == "true") {this.mandatory = true;}
BrechtDeMan@753 1869 else {this.mandatory = false;}
BrechtDeMan@753 1870 this.question = child.textContent;
BrechtDeMan@753 1871 if (child.getAttribute('boxsize') == null) {
BrechtDeMan@753 1872 this.boxsize = 'normal';
BrechtDeMan@753 1873 } else {
BrechtDeMan@753 1874 this.boxsize = child.getAttribute('boxsize');
BrechtDeMan@753 1875 }
BrechtDeMan@753 1876 } else if (child.nodeName == "statement") {
BrechtDeMan@753 1877 this.statement = child.textContent;
BrechtDeMan@753 1878 } else if (child.nodeName == "checkbox" || child.nodeName == "radio") {
BrechtDeMan@753 1879 var element = child.firstElementChild;
BrechtDeMan@753 1880 this.id = child.id;
BrechtDeMan@753 1881 if (element == null) {
BrechtDeMan@753 1882 console.log('Malformed' +child.nodeName+ 'entry');
BrechtDeMan@753 1883 this.statement = 'Malformed' +child.nodeName+ 'entry';
BrechtDeMan@753 1884 this.type = 'statement';
BrechtDeMan@753 1885 } else {
BrechtDeMan@753 1886 this.options = [];
BrechtDeMan@753 1887 while (element != null) {
BrechtDeMan@753 1888 if (element.nodeName == 'statement' && this.statement == undefined){
BrechtDeMan@753 1889 this.statement = element.textContent;
BrechtDeMan@753 1890 } else if (element.nodeName == 'option') {
BrechtDeMan@753 1891 var node = new this.childOption();
BrechtDeMan@753 1892 node.id = element.id;
BrechtDeMan@753 1893 node.name = element.getAttribute('name');
BrechtDeMan@753 1894 node.text = element.textContent;
BrechtDeMan@753 1895 this.options.push(node);
BrechtDeMan@753 1896 }
BrechtDeMan@753 1897 element = element.nextElementSibling;
BrechtDeMan@753 1898 }
BrechtDeMan@753 1899 }
BrechtDeMan@753 1900 } else if (child.nodeName == "number") {
BrechtDeMan@753 1901 this.statement = child.textContent;
BrechtDeMan@753 1902 this.id = child.id;
BrechtDeMan@753 1903 this.min = child.getAttribute('min');
BrechtDeMan@753 1904 this.max = child.getAttribute('max');
BrechtDeMan@753 1905 this.step = child.getAttribute('step');
BrechtDeMan@753 1906 }
BrechtDeMan@753 1907 };
BrechtDeMan@753 1908
BrechtDeMan@753 1909 this.exportXML = function(root)
BrechtDeMan@753 1910 {
BrechtDeMan@753 1911 var node = root.createElement(this.type);
BrechtDeMan@753 1912 switch(this.type)
BrechtDeMan@753 1913 {
BrechtDeMan@753 1914 case "statement":
BrechtDeMan@753 1915 node.textContent = this.statement;
BrechtDeMan@753 1916 break;
BrechtDeMan@753 1917 case "question":
BrechtDeMan@753 1918 node.id = this.id;
BrechtDeMan@753 1919 node.setAttribute("mandatory",this.mandatory);
BrechtDeMan@753 1920 node.setAttribute("boxsize",this.boxsize);
BrechtDeMan@753 1921 node.textContent = this.question;
BrechtDeMan@753 1922 break;
BrechtDeMan@753 1923 case "number":
BrechtDeMan@753 1924 node.id = this.id;
BrechtDeMan@753 1925 node.setAttribute("mandatory",this.mandatory);
BrechtDeMan@753 1926 node.setAttribute("min", this.min);
BrechtDeMan@753 1927 node.setAttribute("max", this.max);
BrechtDeMan@753 1928 node.setAttribute("step", this.step);
BrechtDeMan@753 1929 node.textContent = this.statement;
BrechtDeMan@753 1930 break;
BrechtDeMan@753 1931 case "checkbox":
BrechtDeMan@753 1932 node.id = this.id;
BrechtDeMan@753 1933 var statement = root.createElement("statement");
BrechtDeMan@753 1934 statement.textContent = this.statement;
BrechtDeMan@753 1935 node.appendChild(statement);
BrechtDeMan@753 1936 for (var i=0; i<this.options.length; i++)
BrechtDeMan@753 1937 {
BrechtDeMan@753 1938 var option = this.options[i];
BrechtDeMan@753 1939 var optionNode = root.createElement("option");
BrechtDeMan@753 1940 optionNode.id = option.id;
BrechtDeMan@753 1941 optionNode.textContent = option.text;
BrechtDeMan@753 1942 node.appendChild(optionNode);
BrechtDeMan@753 1943 }
BrechtDeMan@753 1944 break;
BrechtDeMan@753 1945 case "radio":
BrechtDeMan@753 1946 node.id = this.id;
BrechtDeMan@753 1947 var statement = root.createElement("statement");
BrechtDeMan@753 1948 statement.textContent = this.statement;
BrechtDeMan@753 1949 node.appendChild(statement);
BrechtDeMan@753 1950 for (var i=0; i<this.options.length; i++)
BrechtDeMan@753 1951 {
BrechtDeMan@753 1952 var option = this.options[i];
BrechtDeMan@753 1953 var optionNode = root.createElement("option");
BrechtDeMan@753 1954 optionNode.setAttribute("name",option.name);
BrechtDeMan@753 1955 optionNode.textContent = option.text;
BrechtDeMan@753 1956 node.appendChild(optionNode);
BrechtDeMan@753 1957 }
BrechtDeMan@753 1958 break;
BrechtDeMan@753 1959 }
BrechtDeMan@753 1960 return node;
BrechtDeMan@753 1961 };
BrechtDeMan@753 1962 };
BrechtDeMan@753 1963 this.construct = function(Collection)
BrechtDeMan@753 1964 {
BrechtDeMan@753 1965 if (Collection.childElementCount != 0) {
BrechtDeMan@753 1966 var child = Collection.firstElementChild;
BrechtDeMan@753 1967 var node = new this.OptionNode();
BrechtDeMan@753 1968 node.decode(child);
BrechtDeMan@753 1969 this.options.push(node);
BrechtDeMan@753 1970 while (child.nextElementSibling != null) {
BrechtDeMan@753 1971 child = child.nextElementSibling;
BrechtDeMan@753 1972 node = new this.OptionNode();
BrechtDeMan@753 1973 node.decode(child);
BrechtDeMan@753 1974 this.options.push(node);
BrechtDeMan@753 1975 }
BrechtDeMan@753 1976 }
BrechtDeMan@753 1977 };
BrechtDeMan@753 1978 };
BrechtDeMan@753 1979 this.preTest = new this.prepostNode("pretest");
BrechtDeMan@753 1980 this.postTest = new this.prepostNode("posttest");
BrechtDeMan@753 1981
BrechtDeMan@753 1982 this.metricNode = function(name) {
BrechtDeMan@753 1983 this.enabled = name;
BrechtDeMan@753 1984 };
BrechtDeMan@753 1985
BrechtDeMan@753 1986 this.audioHolderNode = function(parent) {
BrechtDeMan@753 1987 this.type = 'audioHolder';
BrechtDeMan@753 1988 this.presentedId = undefined;
BrechtDeMan@753 1989 this.id = undefined;
BrechtDeMan@753 1990 this.hostURL = undefined;
BrechtDeMan@753 1991 this.sampleRate = undefined;
BrechtDeMan@753 1992 this.randomiseOrder = undefined;
BrechtDeMan@753 1993 this.loop = undefined;
BrechtDeMan@753 1994 this.elementComments = undefined;
BrechtDeMan@753 1995 this.outsideReference = null;
BrechtDeMan@753 1996 this.preTest = new parent.prepostNode("pretest");
BrechtDeMan@753 1997 this.postTest = new parent.prepostNode("pretest");
BrechtDeMan@753 1998 this.interfaces = [];
BrechtDeMan@753 1999 this.commentBoxPrefix = "Comment on track";
BrechtDeMan@753 2000 this.audioElements = [];
BrechtDeMan@753 2001 this.commentQuestions = [];
BrechtDeMan@753 2002
BrechtDeMan@753 2003 this.decode = function(parent,xml)
BrechtDeMan@753 2004 {
BrechtDeMan@753 2005 this.presentedId = parent.audioHolders.length;
BrechtDeMan@753 2006 this.id = xml.id;
BrechtDeMan@753 2007 this.hostURL = xml.getAttribute('hostURL');
BrechtDeMan@753 2008 this.sampleRate = xml.getAttribute('sampleRate');
BrechtDeMan@753 2009 if (xml.getAttribute('randomiseOrder') == "true") {this.randomiseOrder = true;}
BrechtDeMan@753 2010 else {this.randomiseOrder = false;}
BrechtDeMan@753 2011 this.repeatCount = xml.getAttribute('repeatCount');
BrechtDeMan@753 2012 if (xml.getAttribute('loop') == 'true') {this.loop = true;}
BrechtDeMan@753 2013 else {this.loop == false;}
BrechtDeMan@753 2014 if (xml.getAttribute('elementComments') == "true") {this.elementComments = true;}
BrechtDeMan@753 2015 else {this.elementComments = false;}
BrechtDeMan@753 2016
BrechtDeMan@753 2017 var setupPreTestNode = xml.getElementsByTagName('PreTest');
BrechtDeMan@753 2018 if (setupPreTestNode.length != 0)
BrechtDeMan@753 2019 {
BrechtDeMan@753 2020 setupPreTestNode = setupPreTestNode[0];
BrechtDeMan@753 2021 this.preTest.construct(setupPreTestNode);
BrechtDeMan@753 2022 }
BrechtDeMan@753 2023
BrechtDeMan@753 2024 var setupPostTestNode = xml.getElementsByTagName('PostTest');
BrechtDeMan@753 2025 if (setupPostTestNode.length != 0)
BrechtDeMan@753 2026 {
BrechtDeMan@753 2027 setupPostTestNode = setupPostTestNode[0];
BrechtDeMan@753 2028 this.postTest.construct(setupPostTestNode);
BrechtDeMan@753 2029 }
BrechtDeMan@753 2030
BrechtDeMan@753 2031 var interfaceDOM = xml.getElementsByTagName('interface');
BrechtDeMan@753 2032 for (var i=0; i<interfaceDOM.length; i++) {
BrechtDeMan@753 2033 var node = new this.interfaceNode();
BrechtDeMan@753 2034 node.decode(interfaceDOM[i]);
BrechtDeMan@753 2035 this.interfaces.push(node);
BrechtDeMan@753 2036 }
BrechtDeMan@753 2037 this.commentBoxPrefix = xml.getElementsByTagName('commentBoxPrefix');
BrechtDeMan@753 2038 if (this.commentBoxPrefix.length != 0) {
BrechtDeMan@753 2039 this.commentBoxPrefix = this.commentBoxPrefix[0].textContent;
BrechtDeMan@753 2040 } else {
BrechtDeMan@753 2041 this.commentBoxPrefix = "Comment on track";
BrechtDeMan@753 2042 }
BrechtDeMan@753 2043 var audioElementsDOM = xml.getElementsByTagName('audioElements');
BrechtDeMan@753 2044 for (var i=0; i<audioElementsDOM.length; i++) {
BrechtDeMan@753 2045 var node = new this.audioElementNode();
BrechtDeMan@753 2046 node.decode(this,audioElementsDOM[i]);
BrechtDeMan@753 2047 if (audioElementsDOM[i].getAttribute('type') == 'outsidereference') {
BrechtDeMan@753 2048 if (this.outsideReference == null) {
BrechtDeMan@753 2049 this.outsideReference = node;
BrechtDeMan@753 2050 } else {
BrechtDeMan@753 2051 console.log('Error only one audioelement can be of type outsidereference per audioholder');
BrechtDeMan@753 2052 this.audioElements.push(node);
BrechtDeMan@753 2053 console.log('Element id '+audioElementsDOM[i].id+' made into normal node');
BrechtDeMan@753 2054 }
BrechtDeMan@753 2055 } else {
BrechtDeMan@753 2056 this.audioElements.push(node);
BrechtDeMan@753 2057 }
BrechtDeMan@753 2058 }
BrechtDeMan@753 2059
BrechtDeMan@753 2060 if (this.randomiseOrder == true && typeof randomiseOrder === "function")
BrechtDeMan@753 2061 {
BrechtDeMan@753 2062 this.audioElements = randomiseOrder(this.audioElements);
BrechtDeMan@753 2063 }
BrechtDeMan@753 2064
BrechtDeMan@753 2065 var commentQuestionsDOM = xml.getElementsByTagName('CommentQuestion');
BrechtDeMan@753 2066 for (var i=0; i<commentQuestionsDOM.length; i++) {
BrechtDeMan@753 2067 var node = new this.commentQuestionNode();
BrechtDeMan@753 2068 node.decode(commentQuestionsDOM[i]);
BrechtDeMan@753 2069 this.commentQuestions.push(node);
BrechtDeMan@753 2070 }
BrechtDeMan@753 2071 };
BrechtDeMan@753 2072
BrechtDeMan@753 2073 this.encode = function(root)
BrechtDeMan@753 2074 {
BrechtDeMan@753 2075 var AHNode = root.createElement("audioHolder");
BrechtDeMan@753 2076 AHNode.id = this.id;
BrechtDeMan@753 2077 AHNode.setAttribute("hostURL",this.hostURL);
BrechtDeMan@753 2078 AHNode.setAttribute("sampleRate",this.sampleRate);
BrechtDeMan@753 2079 AHNode.setAttribute("randomiseOrder",this.randomiseOrder);
BrechtDeMan@753 2080 AHNode.setAttribute("repeatCount",this.repeatCount);
BrechtDeMan@753 2081 AHNode.setAttribute("loop",this.loop);
BrechtDeMan@753 2082 AHNode.setAttribute("elementComments",this.elementComments);
BrechtDeMan@753 2083
BrechtDeMan@753 2084 for (var i=0; i<this.interfaces.length; i++)
BrechtDeMan@753 2085 {
BrechtDeMan@753 2086 AHNode.appendChild(this.interfaces[i].encode(root));
BrechtDeMan@753 2087 }
BrechtDeMan@753 2088
BrechtDeMan@753 2089 for (var i=0; i<this.audioElements.length; i++) {
BrechtDeMan@753 2090 AHNode.appendChild(this.audioElements[i].encode(root));
BrechtDeMan@753 2091 }
BrechtDeMan@753 2092 // Create <CommentQuestion>
BrechtDeMan@753 2093 for (var i=0; i<this.commentQuestions.length; i++)
BrechtDeMan@753 2094 {
BrechtDeMan@753 2095 AHNode.appendChild(this.commentQuestions[i].exportXML(root));
BrechtDeMan@753 2096 }
BrechtDeMan@753 2097
BrechtDeMan@753 2098 // Create <PreTest>
BrechtDeMan@753 2099 var AHPreTest = root.createElement("PreTest");
BrechtDeMan@753 2100 for (var i=0; i<this.preTest.options.length; i++)
BrechtDeMan@753 2101 {
BrechtDeMan@753 2102 AHPreTest.appendChild(this.preTest.options[i].exportXML(root));
BrechtDeMan@753 2103 }
BrechtDeMan@753 2104
BrechtDeMan@753 2105 var AHPostTest = root.createElement("PostTest");
BrechtDeMan@753 2106 for (var i=0; i<this.postTest.options.length; i++)
BrechtDeMan@753 2107 {
BrechtDeMan@753 2108 AHPostTest.appendChild(this.postTest.options[i].exportXML(root));
BrechtDeMan@753 2109 }
BrechtDeMan@753 2110 AHNode.appendChild(AHPreTest);
BrechtDeMan@753 2111 AHNode.appendChild(AHPostTest);
BrechtDeMan@753 2112 return AHNode;
BrechtDeMan@753 2113 };
BrechtDeMan@753 2114
BrechtDeMan@753 2115 this.interfaceNode = function() {
BrechtDeMan@753 2116 this.title = undefined;
BrechtDeMan@753 2117 this.options = [];
BrechtDeMan@753 2118 this.scale = [];
BrechtDeMan@753 2119 this.name = undefined;
BrechtDeMan@753 2120 this.decode = function(DOM)
BrechtDeMan@753 2121 {
BrechtDeMan@753 2122 var title = DOM.getElementsByTagName('title');
BrechtDeMan@753 2123 if (title.length == 0) {this.title = null;}
BrechtDeMan@753 2124 else {this.title = title[0].textContent;}
BrechtDeMan@753 2125 var name = DOM.getAttribute("name");
BrechtDeMan@753 2126 if (name != undefined) {this.name = name;}
BrechtDeMan@753 2127 this.options = parent.commonInterface.options;
BrechtDeMan@753 2128 var scale = DOM.getElementsByTagName('scale');
BrechtDeMan@753 2129 this.scale = [];
BrechtDeMan@753 2130 for (var i=0; i<scale.length; i++) {
BrechtDeMan@753 2131 var arr = [null, null];
BrechtDeMan@753 2132 arr[0] = scale[i].getAttribute('position');
BrechtDeMan@753 2133 arr[1] = scale[i].textContent;
BrechtDeMan@753 2134 this.scale.push(arr);
BrechtDeMan@753 2135 }
BrechtDeMan@753 2136 };
BrechtDeMan@753 2137 this.encode = function(root)
BrechtDeMan@753 2138 {
BrechtDeMan@753 2139 var node = root.createElement("interface");
BrechtDeMan@753 2140 if (this.title != undefined)
BrechtDeMan@753 2141 {
BrechtDeMan@753 2142 var title = root.createElement("title");
BrechtDeMan@753 2143 title.textContent = this.title;
BrechtDeMan@753 2144 node.appendChild(title);
BrechtDeMan@753 2145 }
BrechtDeMan@753 2146 for (var i=0; i<this.options.length; i++)
BrechtDeMan@753 2147 {
BrechtDeMan@753 2148 var optionNode = root.createElement(this.options[i].type);
BrechtDeMan@753 2149 if (this.options[i].type == "option")
BrechtDeMan@753 2150 {
BrechtDeMan@753 2151 optionNode.setAttribute("name",this.options[i].name);
BrechtDeMan@753 2152 } else if (this.options[i].type == "check") {
BrechtDeMan@753 2153 optionNode.setAttribute("check",this.options[i].check);
BrechtDeMan@753 2154 } else if (this.options[i].type == "scalerange") {
BrechtDeMan@753 2155 optionNode.setAttribute("min",this.options[i].min*100);
BrechtDeMan@753 2156 optionNode.setAttribute("max",this.options[i].max*100);
BrechtDeMan@753 2157 }
BrechtDeMan@753 2158 node.appendChild(optionNode);
BrechtDeMan@753 2159 }
BrechtDeMan@753 2160 for (var i=0; i<this.scale.length; i++) {
BrechtDeMan@753 2161 var scale = root.createElement("scale");
BrechtDeMan@753 2162 scale.setAttribute("position",this.scale[i][0]);
BrechtDeMan@753 2163 scale.textContent = this.scale[i][1];
BrechtDeMan@753 2164 node.appendChild(scale);
BrechtDeMan@753 2165 }
BrechtDeMan@753 2166 return node;
BrechtDeMan@753 2167 };
BrechtDeMan@753 2168 };
BrechtDeMan@753 2169
BrechtDeMan@753 2170 this.audioElementNode = function() {
BrechtDeMan@753 2171 this.url = null;
BrechtDeMan@753 2172 this.id = null;
BrechtDeMan@753 2173 this.parent = null;
BrechtDeMan@753 2174 this.type = "normal";
BrechtDeMan@753 2175 this.marker = false;
BrechtDeMan@753 2176 this.enforce = false;
BrechtDeMan@753 2177 this.gain = 1.0;
BrechtDeMan@753 2178 this.decode = function(parent,xml)
BrechtDeMan@753 2179 {
BrechtDeMan@753 2180 this.url = xml.getAttribute('url');
BrechtDeMan@753 2181 this.id = xml.id;
BrechtDeMan@753 2182 this.parent = parent;
BrechtDeMan@753 2183 this.type = xml.getAttribute('type');
BrechtDeMan@753 2184 var gain = xml.getAttribute('gain');
BrechtDeMan@753 2185 if (isNaN(gain) == false && gain != null)
BrechtDeMan@753 2186 {
BrechtDeMan@753 2187 this.gain = decibelToLinear(Number(gain));
BrechtDeMan@753 2188 }
BrechtDeMan@753 2189 if (this.type == null) {this.type = "normal";}
BrechtDeMan@753 2190 if (this.type == 'anchor') {this.anchor = true;}
BrechtDeMan@753 2191 else {this.anchor = false;}
BrechtDeMan@753 2192 if (this.type == 'reference') {this.reference = true;}
BrechtDeMan@753 2193 else {this.reference = false;}
BrechtDeMan@753 2194 if (this.anchor == true || this.reference == true)
BrechtDeMan@753 2195 {
BrechtDeMan@753 2196 this.marker = xml.getAttribute('marker');
BrechtDeMan@753 2197 if (this.marker != undefined)
BrechtDeMan@753 2198 {
BrechtDeMan@753 2199 this.marker = Number(this.marker);
BrechtDeMan@753 2200 if (isNaN(this.marker) == false)
BrechtDeMan@753 2201 {
BrechtDeMan@753 2202 if (this.marker > 1)
BrechtDeMan@753 2203 { this.marker /= 100.0;}
BrechtDeMan@753 2204 if (this.marker >= 0 && this.marker <= 1)
BrechtDeMan@753 2205 {
BrechtDeMan@753 2206 this.enforce = true;
BrechtDeMan@753 2207 return;
BrechtDeMan@753 2208 } else {
BrechtDeMan@753 2209 console.log("ERROR - Marker of audioElement "+this.id+" is not between 0 and 1 (float) or 0 and 100 (integer)!");
BrechtDeMan@753 2210 console.log("ERROR - Marker not enforced!");
BrechtDeMan@753 2211 }
BrechtDeMan@753 2212 } else {
BrechtDeMan@753 2213 console.log("ERROR - Marker of audioElement "+this.id+" is not a number!");
BrechtDeMan@753 2214 console.log("ERROR - Marker not enforced!");
BrechtDeMan@753 2215 }
BrechtDeMan@753 2216 }
BrechtDeMan@753 2217 }
BrechtDeMan@753 2218 };
BrechtDeMan@753 2219 this.encode = function(root)
BrechtDeMan@753 2220 {
BrechtDeMan@753 2221 var AENode = root.createElement("audioElements");
BrechtDeMan@753 2222 AENode.id = this.id;
BrechtDeMan@753 2223 AENode.setAttribute("url",this.url);
BrechtDeMan@753 2224 AENode.setAttribute("type",this.type);
BrechtDeMan@753 2225 AENode.setAttribute("gain",linearToDecibel(this.gain));
BrechtDeMan@753 2226 if (this.marker != false)
BrechtDeMan@753 2227 {
BrechtDeMan@753 2228 AENode.setAttribute("marker",this.marker*100);
BrechtDeMan@753 2229 }
BrechtDeMan@753 2230 return AENode;
BrechtDeMan@753 2231 };
BrechtDeMan@753 2232 };
BrechtDeMan@753 2233
BrechtDeMan@753 2234 this.commentQuestionNode = function(xml) {
BrechtDeMan@753 2235 this.id = null;
BrechtDeMan@753 2236 this.type = undefined;
BrechtDeMan@753 2237 this.question = undefined;
BrechtDeMan@753 2238 this.options = [];
BrechtDeMan@753 2239 this.statement = undefined;
BrechtDeMan@753 2240
BrechtDeMan@753 2241 this.childOption = function() {
BrechtDeMan@753 2242 this.type = 'option';
BrechtDeMan@753 2243 this.name = null;
BrechtDeMan@753 2244 this.text = null;
BrechtDeMan@753 2245 };
BrechtDeMan@753 2246 this.exportXML = function(root)
BrechtDeMan@753 2247 {
BrechtDeMan@753 2248 var CQNode = root.createElement("CommentQuestion");
BrechtDeMan@753 2249 CQNode.id = this.id;
BrechtDeMan@753 2250 CQNode.setAttribute("type",this.type);
BrechtDeMan@753 2251 switch(this.type)
BrechtDeMan@753 2252 {
BrechtDeMan@753 2253 case "text":
BrechtDeMan@753 2254 CQNode.textContent = this.question;
BrechtDeMan@753 2255 break;
BrechtDeMan@753 2256 case "radio":
BrechtDeMan@753 2257 var statement = root.createElement("statement");
BrechtDeMan@753 2258 statement.textContent = this.statement;
BrechtDeMan@753 2259 CQNode.appendChild(statement);
BrechtDeMan@753 2260 for (var i=0; i<this.options.length; i++)
BrechtDeMan@753 2261 {
BrechtDeMan@753 2262 var optionNode = root.createElement("option");
BrechtDeMan@753 2263 optionNode.setAttribute("name",this.options[i].name);
BrechtDeMan@753 2264 optionNode.textContent = this.options[i].text;
BrechtDeMan@753 2265 CQNode.appendChild(optionNode);
BrechtDeMan@753 2266 }
BrechtDeMan@753 2267 break;
BrechtDeMan@753 2268 case "checkbox":
BrechtDeMan@753 2269 var statement = root.createElement("statement");
BrechtDeMan@753 2270 statement.textContent = this.statement;
BrechtDeMan@753 2271 CQNode.appendChild(statement);
BrechtDeMan@753 2272 for (var i=0; i<this.options.length; i++)
BrechtDeMan@753 2273 {
BrechtDeMan@753 2274 var optionNode = root.createElement("option");
BrechtDeMan@753 2275 optionNode.setAttribute("name",this.options[i].name);
BrechtDeMan@753 2276 optionNode.textContent = this.options[i].text;
BrechtDeMan@753 2277 CQNode.appendChild(optionNode);
BrechtDeMan@753 2278 }
BrechtDeMan@753 2279 break;
BrechtDeMan@753 2280 }
BrechtDeMan@753 2281 return CQNode;
BrechtDeMan@753 2282 };
BrechtDeMan@753 2283 this.decode = function(xml) {
BrechtDeMan@753 2284 this.id = xml.id;
BrechtDeMan@753 2285 if (xml.getAttribute('mandatory') == 'true') {this.mandatory = true;}
BrechtDeMan@753 2286 else {this.mandatory = false;}
BrechtDeMan@753 2287 this.type = xml.getAttribute('type');
BrechtDeMan@753 2288 if (this.type == undefined) {this.type = 'text';}
BrechtDeMan@753 2289 switch (this.type) {
BrechtDeMan@753 2290 case 'text':
BrechtDeMan@753 2291 this.question = xml.textContent;
BrechtDeMan@753 2292 break;
BrechtDeMan@753 2293 case 'radio':
BrechtDeMan@753 2294 var child = xml.firstElementChild;
BrechtDeMan@753 2295 this.options = [];
BrechtDeMan@753 2296 while (child != undefined) {
BrechtDeMan@753 2297 if (child.nodeName == 'statement' && this.statement == undefined) {
BrechtDeMan@753 2298 this.statement = child.textContent;
BrechtDeMan@753 2299 } else if (child.nodeName == 'option') {
BrechtDeMan@753 2300 var node = new this.childOption();
BrechtDeMan@753 2301 node.name = child.getAttribute('name');
BrechtDeMan@753 2302 node.text = child.textContent;
BrechtDeMan@753 2303 this.options.push(node);
BrechtDeMan@753 2304 }
BrechtDeMan@753 2305 child = child.nextElementSibling;
BrechtDeMan@753 2306 }
BrechtDeMan@753 2307 break;
BrechtDeMan@753 2308 case 'checkbox':
BrechtDeMan@753 2309 var child = xml.firstElementChild;
BrechtDeMan@753 2310 this.options = [];
BrechtDeMan@753 2311 while (child != undefined) {
BrechtDeMan@753 2312 if (child.nodeName == 'statement' && this.statement == undefined) {
BrechtDeMan@753 2313 this.statement = child.textContent;
BrechtDeMan@753 2314 } else if (child.nodeName == 'option') {
BrechtDeMan@753 2315 var node = new this.childOption();
BrechtDeMan@753 2316 node.name = child.getAttribute('name');
BrechtDeMan@753 2317 node.text = child.textContent;
BrechtDeMan@753 2318 this.options.push(node);
BrechtDeMan@753 2319 }
BrechtDeMan@753 2320 child = child.nextElementSibling;
BrechtDeMan@753 2321 }
BrechtDeMan@753 2322 break;
BrechtDeMan@753 2323 }
BrechtDeMan@753 2324 };
BrechtDeMan@753 2325 };
BrechtDeMan@753 2326 };
BrechtDeMan@753 2327 }
BrechtDeMan@753 2328
BrechtDeMan@753 2329 function linearToDecibel(gain)
BrechtDeMan@753 2330 {
BrechtDeMan@753 2331 return 20.0*Math.log10(gain);
BrechtDeMan@753 2332 }
BrechtDeMan@753 2333
BrechtDeMan@753 2334 function decibelToLinear(gain)
BrechtDeMan@753 2335 {
BrechtDeMan@753 2336 return Math.pow(10,gain/20.0);
BrechtDeMan@753 2337 }
BrechtDeMan@753 2338
BrechtDeMan@753 2339 function createDeleteNodeButton(node)
BrechtDeMan@753 2340 {
BrechtDeMan@753 2341 var button = document.createElement("button");
BrechtDeMan@753 2342 button.textContent = "Delete";
BrechtDeMan@753 2343 button.onclick = function(event)
BrechtDeMan@753 2344 {
BrechtDeMan@753 2345 var node = event.target.parentElement;
BrechtDeMan@753 2346 node.parentElement.removeChild(node);
BrechtDeMan@753 2347 };
BrechtDeMan@753 2348 return button;
BrechtDeMan@753 2349 }
BrechtDeMan@753 2350
BrechtDeMan@753 2351 function SpecificationToHTML()
BrechtDeMan@753 2352 {
BrechtDeMan@753 2353 // Take information from Specification Node and format it into an HTML layout
BrechtDeMan@753 2354 var destination = document.getElementById("content");
BrechtDeMan@753 2355 // Setup Header Node
BrechtDeMan@753 2356 var setupNode = document.createElement("div");
BrechtDeMan@753 2357 setupNode.className = "topLevel";
BrechtDeMan@753 2358 setupNode.name = "setup";
BrechtDeMan@753 2359 var title = document.createElement("h2");
BrechtDeMan@753 2360 title.textContent = "Setup";
BrechtDeMan@753 2361 setupNode.appendChild(title);
BrechtDeMan@753 2362 // Interface Type
BrechtDeMan@753 2363 var div = document.createElement("div");
BrechtDeMan@753 2364 div.name = "attributes";
BrechtDeMan@753 2365 div.style.margin = "5px";
BrechtDeMan@753 2366 var select = document.createElement("select");
BrechtDeMan@753 2367 select.id = "interfaceSelect";
BrechtDeMan@753 2368 select.style.margin = "5px";
BrechtDeMan@753 2369 var option = document.createElement("option");
BrechtDeMan@753 2370 option.value = "APE";
BrechtDeMan@753 2371 option.textContent = "APE";
BrechtDeMan@753 2372 select.appendChild(option);
BrechtDeMan@753 2373 option = document.createElement("option");
BrechtDeMan@753 2374 option.value = "MUSHRA";
BrechtDeMan@753 2375 option.textContent = "MUSHRA";
BrechtDeMan@753 2376 select.appendChild(option);
BrechtDeMan@753 2377 select.value = specificationNode.interfaceType;
BrechtDeMan@753 2378 select.onchange = function(event)
BrechtDeMan@753 2379 {
BrechtDeMan@753 2380 specificationNode.interfaceType = event.currentTarget.value;
BrechtDeMan@753 2381 };
BrechtDeMan@753 2382 var span = document.createElement("span");
BrechtDeMan@753 2383 span.textContent = "Interface Type";
BrechtDeMan@753 2384 div.appendChild(span);
BrechtDeMan@753 2385 div.appendChild(select);
BrechtDeMan@753 2386 // Project Return Attribute
BrechtDeMan@753 2387 span = document.createElement("span");
BrechtDeMan@753 2388 span.style.margin = "5px";
BrechtDeMan@753 2389 span.textContent = "Project Return";
BrechtDeMan@753 2390 var input = document.createElement("input");
BrechtDeMan@753 2391 input.value = specificationNode.projectReturn;
BrechtDeMan@753 2392 input.id = "projectReturn";
BrechtDeMan@753 2393 input.style.margin = "5px";
BrechtDeMan@753 2394 input.onchange = function(event) {
BrechtDeMan@753 2395 specificationNode.projectReturn = event.currentTarget.value;
BrechtDeMan@753 2396 };
BrechtDeMan@753 2397 div.appendChild(span);
BrechtDeMan@753 2398 div.appendChild(input);
BrechtDeMan@753 2399 // Randomise Order
BrechtDeMan@753 2400 span = document.createElement("span");
BrechtDeMan@753 2401 span.textContent = "Randomise Order";
BrechtDeMan@753 2402 input = document.createElement("input");
BrechtDeMan@753 2403 input.id = "randomiseOrder";
BrechtDeMan@753 2404 input.style.margin = "5px";
BrechtDeMan@753 2405 input.type = "checkbox";
BrechtDeMan@753 2406 input.checked = specificationNode.randomiseOrder;
BrechtDeMan@753 2407 input.onchange = function(event) {
BrechtDeMan@753 2408 specificationNode.randomiseOrder = event.currentTarget.checked;
BrechtDeMan@753 2409 };
BrechtDeMan@753 2410 div.appendChild(span);
BrechtDeMan@753 2411 div.appendChild(input);
BrechtDeMan@753 2412 setupNode.appendChild(div);
BrechtDeMan@753 2413
BrechtDeMan@753 2414 // Now create the common Interface Node
BrechtDeMan@753 2415 var commonInterface = document.createElement("div");
BrechtDeMan@753 2416 commonInterface.id = "interface";
BrechtDeMan@753 2417 commonInterface.className = "SecondLevel";
BrechtDeMan@753 2418 var title = document.createElement("h3");
BrechtDeMan@753 2419 title.textContent = "Common Interface";
BrechtDeMan@753 2420 commonInterface.appendChild(title);
BrechtDeMan@753 2421 var div = document.createElement("div");
BrechtDeMan@753 2422 div.name = "attributes";
BrechtDeMan@753 2423 var interfaceOptions;
BrechtDeMan@753 2424 var interfaceChecks;
BrechtDeMan@753 2425 switch(select.value)
BrechtDeMan@753 2426 {
BrechtDeMan@753 2427 case "APE":
BrechtDeMan@753 2428 interfaceOptions = APEInterfaceOptions;
BrechtDeMan@753 2429 interfaceChecks = APEInterfaceChecks;
BrechtDeMan@753 2430 break;
BrechtDeMan@753 2431 case "MUSHRA":
BrechtDeMan@753 2432 interfaceOptions = MUSHRAInterfaceOptions;
BrechtDeMan@753 2433 interfaceChecks = MUSHRAInterfaceChecks;
BrechtDeMan@753 2434 break;
BrechtDeMan@753 2435 }
BrechtDeMan@753 2436 for (var i=0; i<interfaceOptions[0].length; i++)
BrechtDeMan@753 2437 {
BrechtDeMan@753 2438 var span = document.createElement("span");
BrechtDeMan@753 2439 span.textContent = interfaceOptions[1][i];
BrechtDeMan@753 2440 var input = document.createElement("input");
BrechtDeMan@753 2441 input.type = "checkbox";
BrechtDeMan@753 2442 input.id = interfaceOptions[0][i];
BrechtDeMan@753 2443 input.setAttribute("name", "option");
BrechtDeMan@753 2444 div.appendChild(input);
BrechtDeMan@753 2445 div.appendChild(span);
BrechtDeMan@753 2446 commonInterface.appendChild(div);
BrechtDeMan@753 2447 for (var j=0; j<specificationNode.commonInterface.options.length; j++)
BrechtDeMan@753 2448 {
BrechtDeMan@753 2449 if (specificationNode.commonInterface.options[j].name == interfaceOptions[0][i])
BrechtDeMan@753 2450 {
BrechtDeMan@753 2451 input.checked = true;
BrechtDeMan@753 2452 break;
BrechtDeMan@753 2453 }
BrechtDeMan@753 2454 }
BrechtDeMan@753 2455 input.onchange = function(event) {
BrechtDeMan@753 2456 var id = event.currentTarget.id;
BrechtDeMan@753 2457 if (event.currentTarget.checked) {
BrechtDeMan@753 2458 specificationNode.commonInterface.options.push(new specificationNode.commonInterface.optionNode(event.currentTarget));
BrechtDeMan@753 2459 } else {
BrechtDeMan@753 2460 for (var j=0; j<specificationNode.commonInterface.options.length; j++)
BrechtDeMan@753 2461 {
BrechtDeMan@753 2462 if (specificationNode.commonInterface.options[j].name == event.currentTarget.id)
BrechtDeMan@753 2463 {
BrechtDeMan@753 2464 specificationNode.commonInterface.options.splice(j,1);
BrechtDeMan@753 2465 break;
BrechtDeMan@753 2466 }
BrechtDeMan@753 2467 }
BrechtDeMan@753 2468 }
BrechtDeMan@753 2469 };
BrechtDeMan@753 2470 }
BrechtDeMan@753 2471 for (var i=0; i<interfaceChecks[0].length; i++)
BrechtDeMan@753 2472 {
BrechtDeMan@753 2473 var span = document.createElement("span");
BrechtDeMan@753 2474 span.textContent = interfaceChecks[1][i];
BrechtDeMan@753 2475 var input = document.createElement("input");
BrechtDeMan@753 2476 input.type = "checkbox";
BrechtDeMan@753 2477 input.id = interfaceChecks[0][i];
BrechtDeMan@753 2478 input.setAttribute("name", "check");
BrechtDeMan@753 2479 div.appendChild(input);
BrechtDeMan@753 2480 div.appendChild(span);
BrechtDeMan@753 2481 commonInterface.appendChild(div);
BrechtDeMan@753 2482 for (var j=0; j<specificationNode.commonInterface.options.length; j++)
BrechtDeMan@753 2483 {
BrechtDeMan@753 2484 if (specificationNode.commonInterface.options[j].check == interfaceChecks[0][i])
BrechtDeMan@753 2485 {
BrechtDeMan@753 2486 input.checked = true;
BrechtDeMan@753 2487 break;
BrechtDeMan@753 2488 }
BrechtDeMan@753 2489 }
BrechtDeMan@753 2490 input.onchange = function(event) {
BrechtDeMan@753 2491 var id = event.currentTarget.id;
BrechtDeMan@753 2492 if (event.currentTarget.checked) {
BrechtDeMan@753 2493 specificationNode.commonInterface.options.push(new specificationNode.commonInterface.optionNode(event.currentTarget));
BrechtDeMan@753 2494 } else {
BrechtDeMan@753 2495 for (var j=0; j<specificationNode.commonInterface.options.length; j++)
BrechtDeMan@753 2496 {
BrechtDeMan@753 2497 if (specificationNode.commonInterface.options[j].name == event.currentTarget.id)
BrechtDeMan@753 2498 {
BrechtDeMan@753 2499 specificationNode.commonInterface.options.splice(j,1);
BrechtDeMan@753 2500 break;
BrechtDeMan@753 2501 }
BrechtDeMan@753 2502 }
BrechtDeMan@753 2503 }
BrechtDeMan@753 2504 };
BrechtDeMan@753 2505 }
BrechtDeMan@753 2506 setupNode.appendChild(commonInterface);
BrechtDeMan@753 2507 // Now the Metric Node
BrechtDeMan@753 2508 var metrics = document.createElement("div");
BrechtDeMan@753 2509 metrics.id = "metrics";
BrechtDeMan@753 2510 metrics.className = "SecondLevel";
BrechtDeMan@753 2511 var title = document.createElement("h3");
BrechtDeMan@753 2512 title.textContent = "Metric Collections";
BrechtDeMan@753 2513 metrics.appendChild(title);
BrechtDeMan@753 2514 var div = document.createElement("div");
BrechtDeMan@753 2515 div.name = "attributes";
BrechtDeMan@753 2516 metrics.appendChild(div);
BrechtDeMan@753 2517 var supportedMetrics;
BrechtDeMan@753 2518 switch(select.value)
BrechtDeMan@753 2519 {
BrechtDeMan@753 2520 case "APE":
BrechtDeMan@753 2521 supportedMetrics = APEInterfaceMetrics;
BrechtDeMan@753 2522 break;
BrechtDeMan@753 2523 case "MUSHRA":
BrechtDeMan@753 2524 supportedMetrics = MUSHRAInterfaceMetrics;
BrechtDeMan@753 2525 break;
BrechtDeMan@753 2526 }
BrechtDeMan@753 2527
BrechtDeMan@753 2528 for (var i=0; i<supportedMetrics[0].length; i++)
BrechtDeMan@753 2529 {
BrechtDeMan@753 2530 var span = document.createElement("span");
BrechtDeMan@753 2531 span.textContent = supportedMetrics[1][i];
BrechtDeMan@753 2532 var input = document.createElement("input");
BrechtDeMan@753 2533 input.type = "checkbox";
BrechtDeMan@753 2534 input.id = supportedMetrics[0][i];
BrechtDeMan@753 2535 div.appendChild(input);
BrechtDeMan@753 2536 div.appendChild(span);
BrechtDeMan@753 2537 for (var j=0; j<specificationNode.metrics.length; j++)
BrechtDeMan@753 2538 {
BrechtDeMan@753 2539 if (specificationNode.metrics[j].enabled == supportedMetrics[0][i])
BrechtDeMan@753 2540 {
BrechtDeMan@753 2541 input.checked = true;
BrechtDeMan@753 2542 }
BrechtDeMan@753 2543 }
BrechtDeMan@753 2544 input.onchange = function(event)
BrechtDeMan@753 2545 {
BrechtDeMan@753 2546 if (event.currentTarget.checked) {
BrechtDeMan@753 2547 specificationNode.metrics.push(new specificationNode.metricNode(event.currentTarget.id));
BrechtDeMan@753 2548 } else {
BrechtDeMan@753 2549 for (var j=0; j<specificationNode.metrics.length; j++)
BrechtDeMan@753 2550 {
BrechtDeMan@753 2551 if (specificationNode.metrics[j].enabled == event.currentTarget.id)
BrechtDeMan@753 2552 {
BrechtDeMan@753 2553 specificationNode.metrics.splice(j,1);
BrechtDeMan@753 2554 break;
BrechtDeMan@753 2555 }
BrechtDeMan@753 2556 }
BrechtDeMan@753 2557 }
BrechtDeMan@753 2558 };
BrechtDeMan@753 2559 }
BrechtDeMan@753 2560
BrechtDeMan@753 2561 setupNode.appendChild(metrics);
BrechtDeMan@753 2562
BrechtDeMan@753 2563 // Test Session Pre Test
BrechtDeMan@753 2564 var preTest = document.createElement("div");
BrechtDeMan@753 2565 preTest.id = "preTest";
BrechtDeMan@753 2566 preTest.className = "SecondLevel";
BrechtDeMan@753 2567 var title = document.createElement("h3");
BrechtDeMan@753 2568 title.textContent = "Pre test Survey";
BrechtDeMan@753 2569 preTest.appendChild(title);
BrechtDeMan@753 2570 var div = document.createElement("div");
BrechtDeMan@753 2571 div.name = "attributes";
BrechtDeMan@753 2572 for (var j=0; j<specificationNode.preTest.options.length; j++)
BrechtDeMan@753 2573 {
BrechtDeMan@753 2574 var node = PPSurveyToHTML(specificationNode.preTest.options[j]);
BrechtDeMan@753 2575 node.className = "SecondLevel";
BrechtDeMan@753 2576 node.id = preTest.id+"-"+j;
BrechtDeMan@753 2577 var del_button = document.createElement("button");
BrechtDeMan@753 2578 del_button.textContent = "Delete";
BrechtDeMan@753 2579 del_button.onclick = function(event) {
BrechtDeMan@753 2580 var node = event.currentTarget.parentElement;
BrechtDeMan@753 2581 var id = node.id.split("-")[1];
BrechtDeMan@753 2582 specificationNode.preTest.options.splice(id,1);
BrechtDeMan@753 2583 node.parentElement.removeChild(node);
BrechtDeMan@753 2584 };
BrechtDeMan@753 2585 node.appendChild(del_button);
BrechtDeMan@753 2586 preTest.appendChild(node);
BrechtDeMan@753 2587 }
BrechtDeMan@753 2588 setupNode.appendChild(preTest);
BrechtDeMan@753 2589
BrechtDeMan@753 2590 // Test Session Post Test
BrechtDeMan@753 2591 var postTest = document.createElement("div");
BrechtDeMan@753 2592 postTest.id = "postTest";
BrechtDeMan@753 2593 postTest.className = "SecondLevel";
BrechtDeMan@753 2594 var title = document.createElement("h3");
BrechtDeMan@753 2595 title.textContent = "Post test Survey";
BrechtDeMan@753 2596 postTest.appendChild(title);
BrechtDeMan@753 2597 var div = document.createElement("div");
BrechtDeMan@753 2598 div.name = "attributes";
BrechtDeMan@753 2599
BrechtDeMan@753 2600 for (var j=0; j<specificationNode.postTest.options.length; j++)
BrechtDeMan@753 2601 {
BrechtDeMan@753 2602 var node = PPSurveyToHTML(specificationNode.postTest.options[j]);
BrechtDeMan@753 2603 node.className = "SecondLevel";
BrechtDeMan@753 2604 node.id = postTest.id+"-"+j;
BrechtDeMan@753 2605 var del_button = document.createElement("button");
BrechtDeMan@753 2606 del_button.textContent = "Delete";
BrechtDeMan@753 2607 del_button.onclick = function(event) {
BrechtDeMan@753 2608 var node = event.currentTarget.parentElement;
BrechtDeMan@753 2609 var id = node.id.split("-")[1];
BrechtDeMan@753 2610 specificationNode.postTest.options.splice(id,1);
BrechtDeMan@753 2611 node.parentElement.removeChild(node);
BrechtDeMan@753 2612 };
BrechtDeMan@753 2613 node.appendChild(del_button);
BrechtDeMan@753 2614 postTest.appendChild(node);
BrechtDeMan@753 2615 }
BrechtDeMan@753 2616
BrechtDeMan@753 2617 setupNode.appendChild(postTest);
BrechtDeMan@753 2618
BrechtDeMan@753 2619 destination.appendChild(setupNode);
BrechtDeMan@753 2620
BrechtDeMan@753 2621 // Now we step through the AudioHolders
BrechtDeMan@753 2622 for (var i=0; i<specificationNode.audioHolders.length; i++)
BrechtDeMan@753 2623 {
BrechtDeMan@753 2624 var aH = specificationNode.audioHolders[i];
BrechtDeMan@753 2625 var aHTML = document.createElement("div");
BrechtDeMan@753 2626 aHTML.name = "audioHolder";
BrechtDeMan@753 2627 aHTML.id = "audioHolder-"+i;
BrechtDeMan@753 2628 aHTML.className = "topLevel";
BrechtDeMan@753 2629 aHTML.appendChild(createDeleteNodeButton());
BrechtDeMan@753 2630 destination.appendChild(aHTML);
BrechtDeMan@753 2631 var title = document.createElement("h2");
BrechtDeMan@753 2632 title.textContent = "Audio Holder "+aH.id;
BrechtDeMan@753 2633 aHTML.appendChild(title);
BrechtDeMan@753 2634 var attributes = document.createElement("div");
BrechtDeMan@753 2635 attributes.name = "attributes";
BrechtDeMan@753 2636 aHTML.appendChild(attributes);
BrechtDeMan@753 2637 var text = document.createElement("span");
BrechtDeMan@753 2638 text.textContent = "ID: ";
BrechtDeMan@753 2639 var input = document.createElement("input");
BrechtDeMan@753 2640 input.id = aHTML.id+"-id";
BrechtDeMan@753 2641 input.value = aH.id;
BrechtDeMan@753 2642 input.onchange = function()
BrechtDeMan@753 2643 {
BrechtDeMan@753 2644 var IDSplit = event.currentTarget.id.split('-');
BrechtDeMan@753 2645 var aholderID = IDSplit[0]+"-"+IDSplit[1];
BrechtDeMan@753 2646 var aholder = document.getElementById(aholderID);
BrechtDeMan@753 2647 title = aholder.getElementsByTagName("h2")[0];
BrechtDeMan@753 2648 title.textContent = "Audio Holder "+event.currentTarget.value;
BrechtDeMan@753 2649 specificationNode.audioHolders[IDSplit[1]].id = event.currentTarget.value;
BrechtDeMan@753 2650 };
BrechtDeMan@753 2651 text.style.margin = "5px";
BrechtDeMan@753 2652 input.style.margin = "5px";
BrechtDeMan@753 2653 attributes.appendChild(text);
BrechtDeMan@753 2654 attributes.appendChild(input);
BrechtDeMan@753 2655 text = document.createElement("span");
BrechtDeMan@753 2656 text.textContent = "Host URL: ";
BrechtDeMan@753 2657 input = document.createElement("input");
BrechtDeMan@753 2658 input.id = aHTML.id+"-hostURL";
BrechtDeMan@753 2659 input.value = aH.hostURL;
BrechtDeMan@753 2660 input.onchange = function()
BrechtDeMan@753 2661 {
BrechtDeMan@753 2662 var IDSplit = event.currentTarget.id.split('-');
BrechtDeMan@753 2663 specificationNode.audioHolders[IDSplit[1]].hostURL = event.currentTarget.value;
BrechtDeMan@753 2664 };
BrechtDeMan@753 2665 text.style.margin = "5px";
BrechtDeMan@753 2666 input.style.margin = "5px";
BrechtDeMan@753 2667 attributes.appendChild(text);
BrechtDeMan@753 2668 attributes.appendChild(input);
BrechtDeMan@753 2669 text = document.createElement("span");
BrechtDeMan@753 2670 text.textContent = "Loop Fragments: ";
BrechtDeMan@753 2671 input = document.createElement("input");
BrechtDeMan@753 2672 input.id = aHTML.id+"-loop";
BrechtDeMan@753 2673 input.type = "checkbox";
BrechtDeMan@753 2674 input.checked = aH.loop;
BrechtDeMan@753 2675 input.onchange = function()
BrechtDeMan@753 2676 {
BrechtDeMan@753 2677 var IDSplit = event.currentTarget.id.split('-');
BrechtDeMan@753 2678 specificationNode.audioHolders[IDSplit[1]].loop = event.currentTarget.checked;
BrechtDeMan@753 2679 };
BrechtDeMan@753 2680 text.style.margin = "5px";
BrechtDeMan@753 2681 input.style.margin = "5px";
BrechtDeMan@753 2682 attributes.appendChild(text);
BrechtDeMan@753 2683 attributes.appendChild(input);
BrechtDeMan@753 2684 text = document.createElement("span");
BrechtDeMan@753 2685 text.textContent = "Randomise Order: ";
BrechtDeMan@753 2686 input = document.createElement("input");
BrechtDeMan@753 2687 input.id = aHTML.id+"-randomiseOrder";
BrechtDeMan@753 2688 input.type = "checkbox";
BrechtDeMan@753 2689 input.checked = aH.randomiseOrder;
BrechtDeMan@753 2690 input.onchange = function()
BrechtDeMan@753 2691 {
BrechtDeMan@753 2692 var IDSplit = event.currentTarget.id.split('-');
BrechtDeMan@753 2693 specificationNode.audioHolders[IDSplit[1]].randomiseOrder = event.currentTarget.checked;
BrechtDeMan@753 2694 };
BrechtDeMan@753 2695 text.style.margin = "5px";
BrechtDeMan@753 2696 input.style.margin = "5px";
BrechtDeMan@753 2697 attributes.appendChild(text);
BrechtDeMan@753 2698 attributes.appendChild(input);
BrechtDeMan@753 2699 text = document.createElement("span");
BrechtDeMan@753 2700 text.textContent = "Show Fragment Comments";
BrechtDeMan@753 2701 input = document.createElement("input");
BrechtDeMan@753 2702 input.id = aHTML.id+"-elementComments";
BrechtDeMan@753 2703 input.type = "checkbox";
BrechtDeMan@753 2704 input.checked = aH.elementComments;
BrechtDeMan@753 2705 input.onchange = function()
BrechtDeMan@753 2706 {
BrechtDeMan@753 2707 var IDSplit = event.currentTarget.id.split('-');
BrechtDeMan@753 2708 specificationNode.audioHolders[IDSplit[1]].elementComments = event.currentTarget.checked;
BrechtDeMan@753 2709 };
BrechtDeMan@753 2710 text.style.margin = "5px";
BrechtDeMan@753 2711 input.style.margin = "5px";
BrechtDeMan@753 2712 attributes.appendChild(text);
BrechtDeMan@753 2713 attributes.appendChild(input);
BrechtDeMan@753 2714
BrechtDeMan@753 2715 // Test Session Pre Test
BrechtDeMan@753 2716 var preTest = document.createElement("div");
BrechtDeMan@753 2717 preTest.id = aHTML.id+"-pretest";
BrechtDeMan@753 2718 preTest.className = "SecondLevel";
BrechtDeMan@753 2719 var title = document.createElement("h3");
BrechtDeMan@753 2720 title.textContent = "Pre test Survey";
BrechtDeMan@753 2721 preTest.appendChild(title);
BrechtDeMan@753 2722 var div = document.createElement("div");
BrechtDeMan@753 2723 div.name = "attributes";
BrechtDeMan@753 2724
BrechtDeMan@753 2725 for (var j=0; j<aH.preTest.options.length; j++)
BrechtDeMan@753 2726 {
BrechtDeMan@753 2727 var node = PPSurveyToHTML(aH.preTest.options[j]);
BrechtDeMan@753 2728 node.className = "SecondLevel";
BrechtDeMan@753 2729 node.id = preTest.id+"-"+j;
BrechtDeMan@753 2730 var button_delete = document.createElement("button");
BrechtDeMan@753 2731 button_delete.textContent = "Delete";
BrechtDeMan@753 2732 button_delete.onclick = function(event)
BrechtDeMan@753 2733 {
BrechtDeMan@753 2734 var node = event.currentTarget.parentElement;
BrechtDeMan@753 2735 var IDSplit = node.id.split("-");
BrechtDeMan@753 2736 var preTest = specificationNode.audioHolders[IDSplit[1]].preTest;
BrechtDeMan@753 2737 preTest.options.splice(IDSplit[3],1);
BrechtDeMan@753 2738 node.parentElement.removeChild(node);
BrechtDeMan@753 2739 };
BrechtDeMan@753 2740 node.appendChild(button_delete);
BrechtDeMan@753 2741 preTest.appendChild(node);
BrechtDeMan@753 2742 }
BrechtDeMan@753 2743
BrechtDeMan@753 2744 aHTML.appendChild(preTest);
BrechtDeMan@753 2745
BrechtDeMan@753 2746 // Test Session Post Test
BrechtDeMan@753 2747 var postTest = document.createElement("div");
BrechtDeMan@753 2748 postTest.id = aHTML.id+"-postTest";
BrechtDeMan@753 2749 postTest.className = "SecondLevel";
BrechtDeMan@753 2750 var title = document.createElement("h3");
BrechtDeMan@753 2751 title.textContent = "Post test Survey";
BrechtDeMan@753 2752 postTest.appendChild(title);
BrechtDeMan@753 2753 var div = document.createElement("div");
BrechtDeMan@753 2754 div.name = "attributes";
BrechtDeMan@753 2755
BrechtDeMan@753 2756 for (var j=0; j<aH.postTest.options.length; j++)
BrechtDeMan@753 2757 {
BrechtDeMan@753 2758 var node = PPSurveyToHTML(aH.postTest.options[j]);
BrechtDeMan@753 2759 node.className = "SecondLevel";
BrechtDeMan@753 2760 node.id = postTest.id+"-"+j;
BrechtDeMan@753 2761 var button_delete = document.createElement("button");
BrechtDeMan@753 2762 button_delete.textContent = "Delete";
BrechtDeMan@753 2763 button_delete.onclick = function(event)
BrechtDeMan@753 2764 {
BrechtDeMan@753 2765 var node = event.currentTarget.parentElement;
BrechtDeMan@753 2766 var IDSplit = node.id.split("-");
BrechtDeMan@753 2767 var postTest = specificationNode.audioHolders[IDSplit[1]].postTest;
BrechtDeMan@753 2768 postTest.options.splice(IDSplit[3],1);
BrechtDeMan@753 2769 node.parentElement.removeChild(node);
BrechtDeMan@753 2770 };
BrechtDeMan@753 2771 node.appendChild(button_delete);
BrechtDeMan@753 2772 postTest.appendChild(node);
BrechtDeMan@753 2773 }
BrechtDeMan@753 2774
BrechtDeMan@753 2775 aHTML.appendChild(postTest);
BrechtDeMan@753 2776
BrechtDeMan@753 2777 //Audio Elements
BrechtDeMan@753 2778 var audioElems = document.createElement("div");
BrechtDeMan@753 2779 audioElems.id = aHTML.id+"-audioElements";
BrechtDeMan@753 2780 audioElems.className = "SecondLevel";
BrechtDeMan@753 2781 var title = document.createElement("h3");
BrechtDeMan@753 2782 title.textContent = "Audio Elements";
BrechtDeMan@753 2783 audioElems.appendChild(title);
BrechtDeMan@753 2784 for (var j=0; j<aH.audioElements.length; j++)
BrechtDeMan@753 2785 {
BrechtDeMan@753 2786 var entry = document.createElement("div");
BrechtDeMan@753 2787 entry.className = "SecondLevel";
BrechtDeMan@753 2788 entry.id = audioElems.id+"-"+aH.audioElements[j].id;
BrechtDeMan@753 2789 var text = document.createElement("span");
BrechtDeMan@753 2790 text.textContent = "ID:";
BrechtDeMan@753 2791 var input = document.createElement("input");
BrechtDeMan@753 2792 input.id = entry.id+"-id";
BrechtDeMan@753 2793 input.value = aH.audioElements[j].id;
BrechtDeMan@753 2794 input.onchange = function() {
BrechtDeMan@753 2795 var IDSplit = event.currentTarget.id.split("-");
BrechtDeMan@753 2796 var ahNode = specificationNode.audioHolders[IDSplit[1]];
BrechtDeMan@753 2797 ahNode.audioElements[IDSplit[3]].id = event.currentTarget.value;
BrechtDeMan@753 2798 };
BrechtDeMan@753 2799 text.style.margin = "5px";
BrechtDeMan@753 2800 input.style.margin = "5px";
BrechtDeMan@753 2801 entry.appendChild(text);
BrechtDeMan@753 2802 entry.appendChild(input);
BrechtDeMan@753 2803 text = document.createElement("span");
BrechtDeMan@753 2804 text.textContent = "URL:";
BrechtDeMan@753 2805 input = document.createElement("input");
BrechtDeMan@753 2806 input.id = entry.id+"-URL";
BrechtDeMan@753 2807 input.value = aH.audioElements[j].url;
BrechtDeMan@753 2808 input.onchange = function() {
BrechtDeMan@753 2809 var IDSplit = event.currentTarget.id.split("-");
BrechtDeMan@753 2810 var ahNode = specificationNode.audioHolders[IDSplit[1]];
BrechtDeMan@753 2811 ahNode.audioElements[IDSplit[3]].url = event.currentTarget.value;
BrechtDeMan@753 2812 };
BrechtDeMan@753 2813 text.style.margin = "5px";
BrechtDeMan@753 2814 input.style.margin = "5px";
BrechtDeMan@753 2815 entry.appendChild(text);
BrechtDeMan@753 2816 entry.appendChild(input);
BrechtDeMan@753 2817 text = document.createElement("span");
BrechtDeMan@753 2818 text.textContent = "Gain:";
BrechtDeMan@753 2819 input = document.createElement("input");
BrechtDeMan@753 2820 input.type = "range";
BrechtDeMan@753 2821 input.id = entry.id+"-gain";
BrechtDeMan@753 2822 input.value = aH.audioElements[j].gain;
BrechtDeMan@753 2823 input.min = -25;
BrechtDeMan@753 2824 input.max = 6;
BrechtDeMan@753 2825 input.step = 1;
BrechtDeMan@753 2826 input.onchange = function() {
BrechtDeMan@753 2827 var IDSplit = event.currentTarget.id.split("-");
BrechtDeMan@753 2828 var ahNode = specificationNode.audioHolders[IDSplit[1]];
BrechtDeMan@753 2829 ahNode.audioElements[IDSplit[3]].gain = decibelToLinear(Number(event.currentTarget.value));
BrechtDeMan@753 2830 var textRet = document.getElementById(event.currentTarget.id+"-ret");
BrechtDeMan@753 2831 textRet.textContent = String(event.currentTarget.value)+"dB";
BrechtDeMan@753 2832 };
BrechtDeMan@753 2833 var textRet = document.createElement("span");
BrechtDeMan@753 2834 textRet.textContent = String(linearToDecibel(aH.audioElements[j].gain))+"dB";
BrechtDeMan@753 2835 textRet.id = entry.id+"-gain-ret";
BrechtDeMan@753 2836 text.style.margin = "5px";
BrechtDeMan@753 2837 input.style.margin = "5px";
BrechtDeMan@753 2838 entry.appendChild(text);
BrechtDeMan@753 2839 entry.appendChild(input);
BrechtDeMan@753 2840 entry.appendChild(textRet);
BrechtDeMan@753 2841 var button_delete = document.createElement("button");
BrechtDeMan@753 2842 button_delete.textContent = "Delete";
BrechtDeMan@753 2843 button_delete.onclick = function() {
BrechtDeMan@753 2844 var node = event.currentTarget.parentElement;
BrechtDeMan@753 2845 var IDSplit = node.id.split("-");
BrechtDeMan@753 2846 var ahNode = specificationNode.audioHolders[IDSplit[1]];
BrechtDeMan@753 2847 ahNode.audioElements.splice(IDSplit[3],1);
BrechtDeMan@753 2848 node.parentElement.removeChild(node);
BrechtDeMan@753 2849 };
BrechtDeMan@753 2850 entry.appendChild(button_delete);
BrechtDeMan@753 2851 audioElems.appendChild(entry);
BrechtDeMan@753 2852 }
BrechtDeMan@753 2853 aHTML.appendChild(audioElems);
BrechtDeMan@753 2854 }
BrechtDeMan@753 2855
BrechtDeMan@753 2856 function PPSurveyToHTML(node)
BrechtDeMan@753 2857 {
BrechtDeMan@753 2858 var holder = document.createElement("div");
BrechtDeMan@753 2859 var title = document.createElement("h4");
BrechtDeMan@753 2860 holder.appendChild(title);
BrechtDeMan@753 2861 var attributes = document.createElement("div");
BrechtDeMan@753 2862 holder.appendChild(attributes);
BrechtDeMan@753 2863 switch(node.type)
BrechtDeMan@753 2864 {
BrechtDeMan@753 2865 case "statement":
BrechtDeMan@753 2866 title.textContent = "Statement";
BrechtDeMan@753 2867 var tA = document.createElement("textarea");
BrechtDeMan@753 2868 attributes.style.height = "150px";
BrechtDeMan@753 2869 tA.style.width = "500px";
BrechtDeMan@753 2870 tA.style.height = "100px";
BrechtDeMan@753 2871 tA.value = node.statement;
BrechtDeMan@753 2872 attributes.appendChild(tA);
BrechtDeMan@753 2873 break;
BrechtDeMan@753 2874 case "question":
BrechtDeMan@753 2875 title.textContent = "Question";
BrechtDeMan@753 2876 var text = document.createElement("span");
BrechtDeMan@753 2877 text.textContent = "ID :";
BrechtDeMan@753 2878 var input = document.createElement("input");
BrechtDeMan@753 2879 input.name = "id";
BrechtDeMan@753 2880 input.value = node.id;
BrechtDeMan@753 2881 text.style.margin = "5px";
BrechtDeMan@753 2882 input.style.margin = "5px";
BrechtDeMan@753 2883 attributes.appendChild(text);
BrechtDeMan@753 2884 attributes.appendChild(input);
BrechtDeMan@753 2885 text = document.createElement("span");
BrechtDeMan@753 2886 text.textContent = "Question";
BrechtDeMan@753 2887 input = document.createElement("input");
BrechtDeMan@753 2888 input.name = "question";
BrechtDeMan@753 2889 input.style.width = "400px";
BrechtDeMan@753 2890 input.value = node.question;
BrechtDeMan@753 2891 text.style.margin = "5px";
BrechtDeMan@753 2892 input.style.margin = "5px";
BrechtDeMan@753 2893 attributes.appendChild(text);
BrechtDeMan@753 2894 attributes.appendChild(input);
BrechtDeMan@753 2895 text = document.createElement("span");
BrechtDeMan@753 2896 text.textContent = "Mandatory";
BrechtDeMan@753 2897 input = document.createElement("input");
BrechtDeMan@753 2898 input.name = "mandatory";
BrechtDeMan@753 2899 input.type = "checkbox";
BrechtDeMan@753 2900 input.checked = node.mandatory;
BrechtDeMan@753 2901 text.style.margin = "5px";
BrechtDeMan@753 2902 input.style.margin = "5px";
BrechtDeMan@753 2903 attributes.appendChild(text);
BrechtDeMan@753 2904 attributes.appendChild(input);
BrechtDeMan@753 2905 text = document.createElement("span");
BrechtDeMan@753 2906 text.textContent = "Reply box size";
BrechtDeMan@753 2907 input = document.createElement("select");
BrechtDeMan@753 2908 input.name = "boxsize";
BrechtDeMan@753 2909 var option = document.createElement("option");
BrechtDeMan@753 2910 option.textContent = "Normal";
BrechtDeMan@753 2911 option.value = "normal";
BrechtDeMan@753 2912 input.appendChild(option);
BrechtDeMan@753 2913 option = document.createElement("option");
BrechtDeMan@753 2914 option.textContent = "Large";
BrechtDeMan@753 2915 option.value = "large";
BrechtDeMan@753 2916 input.appendChild(option);
BrechtDeMan@753 2917 option = document.createElement("option");
BrechtDeMan@753 2918 option.textContent = "Small";
BrechtDeMan@753 2919 option.value = "small";
BrechtDeMan@753 2920 input.appendChild(option);
BrechtDeMan@753 2921 option = document.createElement("option");
BrechtDeMan@753 2922 option.textContent = "Huge";
BrechtDeMan@753 2923 option.value = "huge";
BrechtDeMan@753 2924 input.appendChild(option);
BrechtDeMan@753 2925 text.style.margin = "5px";
BrechtDeMan@753 2926 input.style.margin = "5px";
BrechtDeMan@753 2927 attributes.appendChild(text);
BrechtDeMan@753 2928 attributes.appendChild(input);
BrechtDeMan@753 2929 input.value = node.boxsize;
BrechtDeMan@753 2930 break;
BrechtDeMan@753 2931 }
BrechtDeMan@753 2932 return holder;
BrechtDeMan@753 2933 }
BrechtDeMan@753 2934 }
BrechtDeMan@753 2935 function exportToXML()
BrechtDeMan@753 2936 {
BrechtDeMan@753 2937 var xmlDoc = specificationNode.encode();
BrechtDeMan@753 2938 var oSerializer = new XMLSerializer();
BrechtDeMan@753 2939 xmlDoc = oSerializer.serializeToString(xmlDoc);
BrechtDeMan@753 2940 var parent = document.createElement("div");
BrechtDeMan@753 2941 var file = [xmlDoc];
BrechtDeMan@753 2942 var bb = new Blob(file,{type : 'application/xml'});
BrechtDeMan@753 2943 var dnlk = window.URL.createObjectURL(bb);
BrechtDeMan@753 2944 var a = document.createElement("a");
BrechtDeMan@753 2945 a.hidden = '';
BrechtDeMan@753 2946 a.href = dnlk;
BrechtDeMan@753 2947 a.download = "save.xml";
BrechtDeMan@753 2948 a.textContent = "Save File";
BrechtDeMan@753 2949
BrechtDeMan@753 2950 popupInstance.showPopup();
BrechtDeMan@753 2951 popupInstance.popupBody.innerHTML = null;
BrechtDeMan@753 2952 var body = document.createElement("span");
BrechtDeMan@753 2953 body.textContent = "Right click and save the file using the link below. Place this file in your WAET directory as 'project.xml' in the example_eval/ directory. Place your media files in the location specified by the Host URL entries. If you wish to review this XML or edit it, refresh this tool and drag your XML document into the page on the welcome screen.";
BrechtDeMan@753 2954 popupInstance.popupBody.appendChild(body);
BrechtDeMan@753 2955 popupInstance.popupBody.appendChild(a);
BrechtDeMan@753 2956 popupInstance.popupTitle.innerHTML = "<span>Thank You</span>";
BrechtDeMan@753 2957 }
BrechtDeMan@753 2958 </script>
BrechtDeMan@753 2959 <style>
BrechtDeMan@753 2960 div.popup {
BrechtDeMan@753 2961 width: 500px;
BrechtDeMan@753 2962 position: absolute;
BrechtDeMan@753 2963 height: 400px;
BrechtDeMan@753 2964 background-color: #fff;
BrechtDeMan@753 2965 border-radius: 10px;
BrechtDeMan@753 2966 box-shadow: 0px 0px 50px #000;
BrechtDeMan@753 2967 z-index: 2;
BrechtDeMan@753 2968 }
BrechtDeMan@753 2969
BrechtDeMan@753 2970 button.popupButton {
BrechtDeMan@753 2971 /* Button for popup window
BrechtDeMan@753 2972 */
BrechtDeMan@753 2973 min-width: 50px;
BrechtDeMan@753 2974 height: 25px;
BrechtDeMan@753 2975 position: relative;
BrechtDeMan@753 2976 border-radius: 5px;
BrechtDeMan@753 2977 border: #444;
BrechtDeMan@753 2978 border-width: 1px;
BrechtDeMan@753 2979 border-style: solid;
BrechtDeMan@753 2980 background-color: #fff;
BrechtDeMan@753 2981 }
BrechtDeMan@753 2982
BrechtDeMan@753 2983 div.dragndrop {
BrechtDeMan@753 2984 margin-top: 10px;
BrechtDeMan@753 2985 border:#000000;
BrechtDeMan@753 2986 border-style: dashed;
BrechtDeMan@753 2987 border-width: 2px;
BrechtDeMan@753 2988 }
BrechtDeMan@753 2989 div.dndheaderelement {
BrechtDeMan@753 2990 float: left;
BrechtDeMan@753 2991 height: 100%;
BrechtDeMan@753 2992 border-right: #DDDDDD;
BrechtDeMan@753 2993 border-right-width: 1px;
BrechtDeMan@753 2994 border-right-style: solid;
BrechtDeMan@753 2995 }
BrechtDeMan@753 2996 div.dndheaderelement span{
BrechtDeMan@753 2997 padding-left: 5px;
BrechtDeMan@753 2998 }
BrechtDeMan@753 2999
BrechtDeMan@753 3000 div.topLevel {
BrechtDeMan@753 3001 border: #000;
BrechtDeMan@753 3002 border-style: solid;
BrechtDeMan@753 3003 border-width: 5px;
BrechtDeMan@753 3004 padding: 10px;
BrechtDeMan@753 3005 margin: 10px;
BrechtDeMan@753 3006 }
BrechtDeMan@753 3007
BrechtDeMan@753 3008 div.SecondLevel {
BrechtDeMan@753 3009 border: #000;
BrechtDeMan@753 3010 border-style: solid;
BrechtDeMan@753 3011 border-width: 1px;
BrechtDeMan@753 3012 padding: 10px;
BrechtDeMan@753 3013 margin: 10px;
BrechtDeMan@753 3014 }
BrechtDeMan@753 3015 </style>
BrechtDeMan@753 3016 </head>
BrechtDeMan@753 3017
BrechtDeMan@753 3018 <body>
BrechtDeMan@753 3019 <div id="export">
BrechtDeMan@753 3020 <button id="exportToXML" onclick="exportToXML();">Export XML</button>
BrechtDeMan@753 3021 </div>
BrechtDeMan@753 3022 <div id="content"></div>
BrechtDeMan@753 3023 </body>
BrechtDeMan@753 3024 </html>