annotate test_create/test_create.html @ 1477:6703e0137cfc

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