annotate test_create/test_create.html @ 1753:070c56725b60

Merge from the default branch
author Nicholas Jillings <nickjillings@users.noreply.github.com>
date Wed, 03 Jun 2015 11:19:32 +0100
parents bb6ca547a992 cdc9ace6fe0e
children 9ad0ee1430de
rev   line source
nickjillings@1749 1 <!DOCTYPE html>
nickjillings@1749 2 <html lang="en">
nickjillings@1749 3 <head>
nickjillings@1749 4 <meta charset="utf-8">
nickjillings@1749 5
nickjillings@1749 6 <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame
nickjillings@1749 7 Remove this if you use the .htaccess -->
nickjillings@1749 8 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
nickjillings@1749 9
nickjillings@1749 10 <title>WAET Create Test</title>
nickjillings@1749 11 <meta name="description" content="">
nickjillings@1749 12 <meta name="author" content="">
nickjillings@1749 13
nickjillings@1749 14 <meta name="viewport" content="width=device-width; initial-scale=1.0">
nickjillings@1591 15
nickjillings@1591 16 <script type="text/javascript">
nickjillings@1591 17 // To aid 'one-page set-up' all scripts and CSS must be included directly in this file!
nickjillings@1591 18 var topLevel;
nickjillings@1591 19 window.onload = function() {
nickjillings@1591 20 // Initialise page
nickjillings@1591 21 topLevel = document.getElementById('topLevelBody');
nickjillings@1591 22 var setup = document.createElement('div');
nickjillings@1591 23 setup.id = 'setupTagDiv';
nickjillings@1591 24
nickjillings@1591 25 };
nickjillings@1591 26
nickjillings@1594 27 function attributePair(string, type, mandatory){
nickjillings@1591 28 var id = document.createElement("span");
nickjillings@1591 29 id.textContent = string;
nickjillings@1591 30 var input = document.createElement("input");
nickjillings@1591 31 input.type = type;
nickjillings@1594 32 if (type == 'text') {
nickjillings@1594 33 if (mandatory == true) {
nickjillings@1594 34 input.setAttribute('mandatory','true');
nickjillings@1594 35 }
nickjillings@1594 36 else {
nickjillings@1594 37 input.setAttribute('mandatory','false');
nickjillings@1594 38 }
nickjillings@1594 39 }
nickjillings@1591 40 return [id, input];
nickjillings@1591 41 }
nickjillings@1591 42
nickjillings@1592 43 function removeNode(event) {
nickjillings@1592 44 event.srcElement.parentElement.parentElement.removeChild(event.srcElement.parentElement);
nickjillings@1592 45 }
nickjillings@1592 46
nickjillings@1594 47 function buttonClickedValidate() {
nickjillings@1594 48 var ready = validate();
nickjillings@1594 49 if (ready == false) {
nickjillings@1594 50 var errMsg = document.getElementById('errorMessage');
nickjillings@1595 51 errMsg.textContent = "There were some errors with your XML. Any input boxes highlighted in red are invalid because they are empty or because its ID matches another elements ID. Please fill these in correctly. Any boxes which are yellow are not-invalid but will use the default value.";
nickjillings@1594 52 errMsg.style.visibility = 'visible';
nickjillings@1594 53 document.getElementById('createXML').disabled = true;
nickjillings@1594 54
nickjillings@1594 55 } else {
nickjillings@1594 56 var errMsg = document.getElementById('errorMessage');
nickjillings@1594 57 errMsg.textContent = "";
nickjillings@1594 58 errMsg.style.visiblity = 'hidden';
nickjillings@1594 59 document.getElementById('createXML').disabled = false;
nickjillings@1594 60 }
nickjillings@1594 61 }
nickjillings@1594 62
nickjillings@1595 63 function buttonClickedSubmit() {
nickjillings@1595 64 var ready = validate();
nickjillings@1595 65 if (ready == true) {
nickjillings@1595 66 var xmlDoc = document.createElement('BrowserEvalProjectDocument');
nickjillings@1595 67 var setup = document.createElement('setup');
nickjillings@1595 68 setup.setAttribute('interface',document.getElementById('interface').value);
nickjillings@1595 69 if (document.getElementById('projectReturn').value == "") {
nickjillings@1595 70 setup.setAttribute('projectReturn',"null");
nickjillings@1595 71 } else {
nickjillings@1595 72 setup.setAttribute('projectReturn',document.getElementById('projectReturn').value);
nickjillings@1595 73 }
nickjillings@1595 74 setup.setAttribute('randomiseOrder',document.getElementById('randomisePageOrder').checked);
nickjillings@1595 75 setup.setAttribute('collectMetrics',document.getElementById('collectMetrics').checked);
nickjillings@1595 76
nickjillings@1595 77 var globalPreTest = document.createElement('preTest');
nickjillings@1595 78 var options = document.getElementById('globalPreTest').getElementsByClassName('head');
nickjillings@1595 79 constructPrePost(globalPreTest, options);
nickjillings@1595 80
nickjillings@1595 81 var globalPostTest = document.createElement('postTest');
nickjillings@1595 82 options = document.getElementById('globalPostTest').getElementsByClassName('head');
nickjillings@1595 83 constructPrePost(globalPostTest, options);
nickjillings@1595 84
nickjillings@1595 85 var globalMetrics = document.createElement('metric');
nickjillings@1595 86 options = document.getElementById('globalMetric').getElementsByClassName('attrib')[0].getElementsByTagName('input');
nickjillings@1595 87 for (var i=0; i<options.length; i++) {
nickjillings@1595 88 if (options[i].checked) {
nickjillings@1595 89 var metric = document.createElement('metricEnable');
nickjillings@1595 90 metric.textContent = options[i].id;
nickjillings@1595 91 globalMetrics.appendChild(metric);
nickjillings@1595 92 }
nickjillings@1595 93 }
nickjillings@1595 94
nickjillings@1595 95 }
nickjillings@1595 96 }
nickjillings@1595 97
nickjillings@1595 98 function constructPrePost(parent, options) {
nickjillings@1595 99 for (var i=0; i<options.length; i++) {
nickjillings@1595 100 var elem = options[i];
nickjillings@1595 101 var attributes = elem.getElementsByClassName('attrib')[0].getElementsByTagName('input');
nickjillings@1595 102 if (elem.getAttribute('name') == 'question-node') {
nickjillings@1595 103 var node = document.createElement('question');
nickjillings@1595 104 node.setAttribute('id',attributes[0].value);
nickjillings@1595 105 node.textContent = attributes[1].value;
nickjillings@1595 106 } else if (elem.getAttribute('name') == 'statement-node') {
nickjillings@1595 107 var node = document.createElement('statment');
nickjillings@1595 108 node.textContent = attributes[0].value;
nickjillings@1595 109 }
nickjillings@1595 110 parent.appendChild(node);
nickjillings@1595 111 }
nickjillings@1595 112 }
nickjillings@1595 113
nickjillings@1594 114 function validate() {
nickjillings@1594 115 var canExport = true;
nickjillings@1594 116 // Checks if the XML can be created from the given entries
nickjillings@1594 117 var inputs = document.getElementsByTagName('input');
nickjillings@1594 118 for (var i=0; i<inputs.length; i++) {
nickjillings@1594 119 if (inputs[i].type == 'text') {
nickjillings@1594 120 if (inputs[i].value == "") {
nickjillings@1594 121 var mandatory = inputs[i].getAttribute('mandatory');
nickjillings@1594 122 if (mandatory == "true") {
nickjillings@1594 123 errorInput(inputs[i]);
nickjillings@1594 124 canExport = false;
nickjillings@1594 125 } else {
nickjillings@1594 126 warningInput(inputs[i]);
nickjillings@1594 127 }
nickjillings@1594 128 } else {
nickjillings@1594 129 goodInput(inputs[i]);
nickjillings@1594 130 }
nickjillings@1594 131 }
nickjillings@1594 132 }
nickjillings@1595 133
nickjillings@1595 134 var audioHolders = document.getElementsByName('audio-holder');
nickjillings@1595 135 for (var i=0; i<audioHolders.length; i++) {
nickjillings@1595 136 var divs = audioHolders[i].getElementsByClassName('head');
nickjillings@1595 137 var IDs = [];
nickjillings@1595 138 for (var j=0; j<divs.length; j++) {
nickjillings@1595 139 if (divs[j].getAttribute('name') == 'audio-element') {
nickjillings@1595 140 var obj = divs[j].getElementsByClassName('attrib')[0].children[1];
nickjillings@1595 141 var aeID = obj.value;
nickjillings@1595 142 if (aeID != "") {
nickjillings@1595 143 var unique = true;
nickjillings@1595 144 for (var k=0; k<IDs.length; k++) {
nickjillings@1595 145 if (aeID == IDs[k]) {
nickjillings@1595 146 unique = false;
nickjillings@1595 147 break;
nickjillings@1595 148 }
nickjillings@1595 149 }
nickjillings@1595 150 if (unique == true) {
nickjillings@1595 151 IDs.push(aeID);
nickjillings@1595 152 } else {
nickjillings@1595 153 errorInput(obj);
nickjillings@1595 154 canExport = false;
nickjillings@1595 155 }
nickjillings@1595 156 }
nickjillings@1595 157 }
nickjillings@1595 158 }
nickjillings@1595 159 }
nickjillings@1594 160 return canExport;
nickjillings@1594 161 };
nickjillings@1594 162
nickjillings@1594 163 function errorInput(node) {
nickjillings@1594 164 node.style.backgroundColor = "#FF0000";
nickjillings@1594 165 }
nickjillings@1594 166
nickjillings@1594 167 function warningInput(node) {
nickjillings@1594 168 node.style.backgroundColor = "#FFFF00";
nickjillings@1594 169 }
nickjillings@1594 170
nickjillings@1594 171 function goodInput(node) {
nickjillings@1594 172 node.style.backgroundColor = "#FFFFFF";
nickjillings@1594 173 }
nickjillings@1594 174
nickjillings@1591 175 function questionNode() {
nickjillings@1591 176 var node = document.createElement("div");
nickjillings@1591 177 node.setAttribute('class','head');
nickjillings@1591 178 node.setAttribute('name','question-node');
nickjillings@1591 179 var nodeTitle = document.createElement("span");
nickjillings@1591 180 nodeTitle.textContent = "Question";
nickjillings@1591 181 var attributes = document.createElement("div");
nickjillings@1591 182 attributes.setAttribute('class','attrib');
nickjillings@1594 183 var id = attributePair("ID:","text", true);
nickjillings@1594 184 var question = attributePair("Question:","text", false);
nickjillings@1591 185 node.appendChild(nodeTitle);
nickjillings@1591 186 id.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1591 187 question.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1591 188 node.appendChild(attributes);
nickjillings@1592 189
nickjillings@1592 190 var removeButton = document.createElement("button");
nickjillings@1592 191 removeButton.textContent = "Remove";
nickjillings@1592 192 removeButton.onclick = removeNode;
nickjillings@1592 193 node.appendChild(removeButton);
nickjillings@1591 194 return node;
nickjillings@1591 195 }
nickjillings@1591 196
nickjillings@1591 197 function statementNode() {
nickjillings@1591 198 var node = document.createElement("div");
nickjillings@1591 199 node.setAttribute('class','head');
nickjillings@1594 200 node.setAttribute('name','statement-node');
nickjillings@1591 201 var nodeTitle = document.createElement("span");
nickjillings@1591 202 nodeTitle.textContent = "Statement";
nickjillings@1591 203 var attributes = document.createElement("div");
nickjillings@1591 204 attributes.setAttribute('class','attrib');
nickjillings@1594 205 var statement = attributePair("Statement:","text",false);
nickjillings@1591 206 node.appendChild(nodeTitle);
nickjillings@1591 207 statement.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1591 208 node.appendChild(attributes);
nickjillings@1592 209
nickjillings@1592 210 var removeButton = document.createElement("button");
nickjillings@1592 211 removeButton.textContent = "Remove";
nickjillings@1592 212 removeButton.onclick = removeNode;
nickjillings@1592 213 node.appendChild(removeButton);
nickjillings@1591 214 return node;
nickjillings@1591 215 }
nickjillings@1591 216
nickjillings@1591 217 function audioHolderNode() {
nickjillings@1591 218 var audioHolderCounts = document.getElementsByName("audio-holder").length;
nickjillings@1591 219 var node = document.createElement("div");
nickjillings@1591 220 node.setAttribute("class","head");
nickjillings@1591 221 node.setAttribute("name","audio-holder");
nickjillings@1592 222 node.setAttribute("id","audio-holder-"+audioHolderCounts);
nickjillings@1591 223 var nodeTitle = document.createElement("span");
nickjillings@1592 224 nodeTitle.textContent = "Audio Holder "+(audioHolderCounts+1);
nickjillings@1591 225
nickjillings@1591 226 var attributes = document.createElement("div");
nickjillings@1591 227 attributes.setAttribute('class','attrib');
nickjillings@1594 228 var id = attributePair("ID:","text",true);
nickjillings@1592 229 id[1].value=audioHolderCounts;
nickjillings@1594 230 var hostURL = attributePair("Host URL:", "text",false);
nickjillings@1594 231 var sampleRate = attributePair("Sample Rate:","text",false);
nickjillings@1592 232 var randomiseOrder = attributePair("Randomise Element Order:","checkbox");
nickjillings@1592 233 var repeatCount = attributePair("Repeat Page Count:","number");
nickjillings@1592 234 repeatCount[1].value = 0;
nickjillings@1592 235 var loop = attributePair("Loop Element Playback","checkbox");
nickjillings@1592 236 var elementComments = attributePair("Enable Comment Boxes","checkbox");
nickjillings@1592 237 id.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1592 238 hostURL.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1592 239 sampleRate.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1592 240 hostURL.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1592 241 randomiseOrder.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1592 242 repeatCount.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1592 243 loop.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1592 244 elementComments.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1592 245
nickjillings@1592 246 node.appendChild(nodeTitle);
nickjillings@1592 247 node.appendChild(attributes);
nickjillings@1592 248
nickjillings@1592 249 var pretest = document.createElement("div");
nickjillings@1592 250 pretest.setAttribute('class','head');
nickjillings@1592 251 pretest.setAttribute('name','pre-test');
nickjillings@1592 252 var pretestTitle = document.createElement("h4");
nickjillings@1592 253 pretestTitle.textContent = "Pre Test";
nickjillings@1592 254 var buttonAddQ = document.createElement("button");
nickjillings@1592 255 buttonAddQ.textContent = "Add Pre Test Question";
nickjillings@1592 256 buttonAddQ.onclick = function(){event.srcElement.parentElement.appendChild(questionNode());};
nickjillings@1592 257 var buttonAddS = document.createElement("button");
nickjillings@1592 258 buttonAddS.textContent = "Add Pre Test Statement";
nickjillings@1592 259 buttonAddS.onclick = function(){event.srcElement.parentElement.appendChild(statementNode());};
nickjillings@1592 260 pretest.appendChild(pretestTitle);
nickjillings@1592 261 pretest.appendChild(buttonAddQ);
nickjillings@1592 262 pretest.appendChild(buttonAddS);
nickjillings@1592 263
nickjillings@1592 264 var posttest = document.createElement("div");
nickjillings@1592 265 posttest.setAttribute('class','head');
nickjillings@1592 266 posttest.setAttribute('name','post-test');
nickjillings@1592 267 var posttestTitle = document.createElement("h4");
nickjillings@1592 268 posttestTitle.textContent = "Post Test";
nickjillings@1592 269 var buttonAddQ = document.createElement("button");
nickjillings@1592 270 buttonAddQ.textContent = "Add Post Test Question";
nickjillings@1592 271 buttonAddQ.onclick = function(){event.srcElement.parentElement.appendChild(questionNode());};
nickjillings@1592 272 var buttonAddS = document.createElement("button");
nickjillings@1592 273 buttonAddS.textContent = "Add Post Test Statement";
nickjillings@1592 274 buttonAddS.onclick = function(){event.srcElement.parentElement.appendChild(statementNode());};
nickjillings@1592 275 posttest.appendChild(posttestTitle);
nickjillings@1592 276 posttest.appendChild(buttonAddQ);
nickjillings@1592 277 posttest.appendChild(buttonAddS);
nickjillings@1592 278
nickjillings@1592 279 node.appendChild(pretest);
nickjillings@1592 280 node.appendChild(posttest);
nickjillings@1592 281
nickjillings@1592 282 var newAudioElementButton = document.createElement("button");
nickjillings@1592 283 newAudioElementButton.textContent = "Add audio element";
nickjillings@1592 284 newAudioElementButton.onclick = function(){
nickjillings@1592 285 event.srcElement.parentElement.appendChild(audioElementNode());
nickjillings@1592 286 };
nickjillings@1592 287 node.appendChild(newAudioElementButton);
nickjillings@1592 288
nickjillings@1592 289 var newCommentButton = document.createElement("button");
nickjillings@1592 290 newCommentButton.textContent = "Add Comment Box";
nickjillings@1592 291 newCommentButton.onclick = function() {
nickjillings@1592 292 event.srcElement.parentElement.appendChild(commentBox());
nickjillings@1592 293 };
nickjillings@1592 294 node.appendChild(newCommentButton);
nickjillings@1592 295
nickjillings@1592 296 var removeButton = document.createElement("button");
nickjillings@1592 297 removeButton.textContent = "Remove Audio Holder";
nickjillings@1592 298 removeButton.onclick = removeNode;
nickjillings@1592 299 node.appendChild(removeButton);
nickjillings@1592 300 return node;
nickjillings@1592 301 }
nickjillings@1592 302
nickjillings@1592 303 function audioElementNode() {
nickjillings@1592 304 var parentStructure = event.srcElement.parentElement.childNodes;
nickjillings@1592 305 var audioElemCounts = 0;
nickjillings@1592 306 for (var i=0; i<parentStructure.length; i++) {
nickjillings@1592 307 if (parentStructure[i].getAttribute('name') == "audio-element")
nickjillings@1592 308 {audioElemCounts++;}
nickjillings@1592 309 }
nickjillings@1592 310 var node = document.createElement('div');
nickjillings@1592 311 node.setAttribute('class','head');
nickjillings@1592 312 node.setAttribute('name','audio-element');
nickjillings@1592 313 var nodeTitle = document.createElement('span');
nickjillings@1592 314 nodeTitle.textContent = 'Audio Element '+(audioElemCounts+1);
nickjillings@1592 315
nickjillings@1592 316 var attributes = document.createElement("div");
nickjillings@1592 317 attributes.setAttribute('class','attrib');
nickjillings@1594 318 var id = attributePair("ID:","text",true);
nickjillings@1592 319 id[1].value = audioElemCounts;
nickjillings@1594 320 var url = attributePair("URL:","text",true);
nickjillings@1592 321 id.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1592 322 url.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1592 323
nickjillings@1592 324 node.appendChild(nodeTitle);
nickjillings@1592 325 node.appendChild(attributes);
nickjillings@1592 326
nickjillings@1592 327 var removeButton = document.createElement("button");
nickjillings@1592 328 removeButton.textContent = "Remove Audio Element";
nickjillings@1592 329 removeButton.onclick = removeNode;
nickjillings@1592 330 node.appendChild(removeButton);
nickjillings@1592 331 return node;
nickjillings@1592 332 }
nickjillings@1592 333
nickjillings@1592 334 function commentBox() {
nickjillings@1592 335 var node = document.createElement('div');
nickjillings@1592 336 node.setAttribute('class','head');
nickjillings@1592 337 node.setAttribute('name','comment-question');
nickjillings@1592 338 var nodeTitle = document.createElement('h4');
nickjillings@1592 339 nodeTitle.textContent = "Comment Box";
nickjillings@1592 340
nickjillings@1592 341 var attributes = document.createElement('div');
nickjillings@1592 342 attributes.setAttribute('class','attrib');
nickjillings@1594 343 var id = attributePair("ID:",'text',true);
nickjillings@1594 344 var question = attributePair("Question:",'text',true);
nickjillings@1592 345 id.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1592 346 question.forEach(function(item){attributes.appendChild(item);},false);
nickjillings@1592 347
nickjillings@1592 348 var removeButton = document.createElement("button");
nickjillings@1592 349 removeButton.textContent = "Remove Comment Box";
nickjillings@1592 350 removeButton.onclick = removeNode;
nickjillings@1592 351
nickjillings@1592 352 node.appendChild(nodeTitle);
nickjillings@1592 353 node.appendChild(attributes);
nickjillings@1592 354 node.appendChild(removeButton);
nickjillings@1592 355 return node;
nickjillings@1591 356 }
nickjillings@1591 357 </script>
nickjillings@1591 358 <style>
nickjillings@1591 359 div {
nickjillings@1591 360 padding: 2px;
nickjillings@1591 361 margin-top: 2px;
nickjillings@1591 362 margin-bottom: 2px;
nickjillings@1591 363 }
nickjillings@1591 364 div.head{
nickjillings@1591 365 margin-left: 10px;
nickjillings@1591 366 border: black;
nickjillings@1591 367 border-width: 2px;
nickjillings@1591 368 border-style: solid;
nickjillings@1591 369 }
nickjillings@1591 370 div.attrib{
nickjillings@1591 371 margin-left:25px;
nickjillings@1591 372 border: black;
nickjillings@1591 373 border-width: 2px;
nickjillings@1591 374 border-style: dashed;
nickjillings@1591 375 margin-bottom: 10px;
nickjillings@1591 376 }
nickjillings@1591 377 </style>
nickjillings@1591 378
nickjillings@1749 379 </head>
nickjillings@1749 380
nickjillings@1749 381 <body>
nickjillings@1591 382 <h1>Create Test Setup XML</h1>
nickjillings@1594 383 <button id="validateXML" onclick="buttonClickedValidate();">Validate</button>
nickjillings@1594 384 <button id="createXML" onclick="buttonClickedValidate();" disabled>Submit</button>
nickjillings@1594 385 <span id="errorMessage" visibility="hidden"></span>
nickjillings@1591 386 <div id="topLevelBody" align="left">
nickjillings@1749 387 <!-- Interface goes here -->
nickjillings@1591 388 <div name='test-setup'>
nickjillings@1591 389 <div id="setup" class="head">
nickjillings@1591 390 <h2>Setup Tag</h2>
nickjillings@1591 391 <div id="setup-attribs" class="attrib">
nickjillings@1591 392 <span>Interface</span>
nickjillings@1591 393 <select id="interface">
nickjillings@1591 394 <option value='APE'>APE</option>
nickjillings@1591 395 </select>
nickjillings@1591 396 <span>Project Return</span>
nickjillings@1594 397 <input type="text" id="projectReturn" mandatory="false">
nickjillings@1591 398 <span>Randomise Test Page Order</span>
nickjillings@1591 399 <input id="randomisePageOrder" type="checkbox" value="false">
nickjillings@1591 400 <span>Collect Session Metrics</span>
nickjillings@1591 401 <input id="collectMetrics" type="checkbox">
nickjillings@1591 402 </div>
nickjillings@1591 403 <div id="globalPreTest" class="head">
nickjillings@1591 404 <h3>Pre Test</h3>
nickjillings@1591 405 <button id="addPreTestQ" onclick="event.srcElement.parentElement.appendChild(questionNode());">Add Pre Test Question</button>
nickjillings@1591 406 <button id="addPreTestS" onclick="event.srcElement.parentElement.appendChild(statementNode());">Add Pre Test Statement</button>
nickjillings@1591 407 </div>
nickjillings@1591 408 <div id="globalPostTest" class="head">
nickjillings@1591 409 <h3>Post Test</h3>
nickjillings@1591 410 <button id="addPreTestQ" onclick="event.srcElement.parentElement.appendChild(questionNode());">Add Post Test Question</button>
nickjillings@1591 411 <button id="addPreTestS" onclick="event.srcElement.parentElement.appendChild(statementNode());">Add Post Test Statement</button>
nickjillings@1591 412 </div>
nickjillings@1591 413 <div id="globalMetric" class="head">
nickjillings@1591 414 <h3>Global Metrics</h3>
nickjillings@1591 415 <div id="globalMetric-attrib" class="attrib">
nickjillings@1591 416 <span>Test Timer</span>
nickjillings@1591 417 <input type="checkbox" id="testTimer" />
nickjillings@1591 418 <span>Element Playback Timer</span>
nickjillings@1591 419 <input type="checkbox" id="elementTimer" />
nickjillings@1591 420 <span>Element Initial Position</span>
nickjillings@1591 421 <input type="checkbox" id="elementInitialPosition" />
nickjillings@1591 422 <span>Element Tracker</span>
nickjillings@1591 423 <input type="checkbox" id="elementTracker" />
nickjillings@1591 424 <span>Element Flag Listened To</span>
nickjillings@1595 425 <input type="checkbox" id="elementFlagListenedTo" />
nickjillings@1591 426 <span>Element Flag Moved</span>
nickjillings@1591 427 <input type="checkbox" id="elementFlagMoved" />
nickjillings@1591 428 </div>
nickjillings@1591 429 </div>
nickjillings@1592 430 <button id="addAudioHolder" onclick="event.srcElement.parentElement.appendChild(audioHolderNode());">Add AudioHolder / Test Page</button>
nickjillings@1591 431 </div>
nickjillings@1591 432 </div>
nickjillings@1749 433 </div>
nickjillings@1749 434 </body>
nickjillings@1749 435 </html>