var generateMediaControls = function(videoElement) { if (!(videoElement instanceof HTMLVideoElement) || !videoElement.tracks) return null; var tableFragment = document.createDocumentFragment(); // Set up table structure var table = document.createElement("table"); var thead = document.createElement("thead"); var tbody = document.createElement("tbody"); table.className = "trackSelector"; thead.innerHTML = "" + " Kind" + " Label" + " Language (srclang/language)" + " Ready State (readyState)" + " Visibility Mode (mode)" + " Enabled" + ""; // Our functions that do most of the work var createRowHeader = function(headerText) { var tmpRowHeader = document.createElement("tr"); tmpRowHeader.innerHTML = "" + headerText + ""; tbody.appendChild(tmpRowHeader); }; var createRowsForTrackList = function(trackList) { if (!trackList) return null; if (trackList.length) { for (trackIndex in trackList) { if (trackList.hasOwnProperty(trackIndex)) { (function() { var readyStateTD, modeTD, toggleTD, trackToggle; var currentTrack = trackList[trackIndex]; var trackRow = document.createElement("tr"); console.log(currentTrack.readyState); console.dir(currentTrack.readyState); trackRow.innerHTML ="" + currentTrack.kind + "" + "" + currentTrack.label + "" + "" + currentTrack.language + "" + "" + ["Not Loaded","Loading","Loaded","Error"][currentTrack.readyState] + "" + "" + ["Not Showing","Hidden","Showing"][currentTrack.mode] + "" + ""; readyStateTD = trackRow.childNodes[trackRow.childNodes.length-3]; modeTD = trackRow.childNodes[trackRow.childNodes.length-2]; toggleTD = trackRow.childNodes[trackRow.childNodes.length-1]; trackToggle = document.createElement("input"); trackToggle.type = "checkbox"; trackToggle.title = "Toggle track visibility"; if (currentTrack.mode === 2) { trackToggle.checked = true; } toggleTD.appendChild(trackToggle); trackToggle.addEventListener("change",function(eventData) { currentTrack.mode = [0,2][Number(this.checked)]; modeTD.innerHTML = ["Not Showing","Hidden","Showing"][currentTrack.mode]; },false); currentTrack.onload = function(eventData) { readyStateTD.innerHTML = ["Not Loaded","Loading","Loaded","Error"][currentTrack.readyState]; modeTD.innerHTML = ["Not Showing","Hidden","Showing"][currentTrack.mode]; }; currentTrack.onerror = currentTrack.onload; tbody.appendChild(trackRow); })(); } } } }; // Now make them go! createRowHeader("Text Tracks"); createRowsForTrackList(videoElement.tracks); // MediaTrack functionality is under re-construction ;) // createRowHeader("Media Tracks"); // createRowsForTrackList(videoElement.mediaTracks); table.appendChild(thead); table.appendChild(tbody); tableFragment.appendChild(table); table.border = 1; table.cellPadding = 4; return tableFragment; }; function loadVideo () { captionator.captionify(null,null,{debugMode:!!window.location.search.match(/debug/i)}); var videoObject = document.getElementsByTagName("video")[0]; document.getElementsByClassName("demo")[0].appendChild(generateMediaControls(videoObject)); } if (window.addEventListener) { window.addEventListener("load",loadVideo,false); } else if (window.attachEvent) { window.attachEvent("load",loadVideo); }