{"version":3,"sources":["webpack:///./node_modules/_videojs-vtt.js@0.12.6@videojs-vtt.js/lib/vttregion.js","webpack:///./node_modules/_videojs-vtt.js@0.12.6@videojs-vtt.js/lib/vtt.js","webpack:///./node_modules/_videojs-vtt.js@0.12.6@videojs-vtt.js/lib/vttcue.js","webpack:///./node_modules/_videojs-vtt.js@0.12.6@videojs-vtt.js/lib/browser-index.js"],"names":["scrollSetting","isValidPercentValue","value","module","exports","_width","_lines","_regionAnchorX","_regionAnchorY","_viewportAnchorX","_viewportAnchorY","_scroll","Object","defineProperties","this","enumerable","get","set","Error","TypeError","setting","toLowerCase","findScrollSetting","SyntaxError","_objCreate","create","F","o","arguments","length","prototype","ParsingError","errorData","message","name","code","parseTimeStamp","input","computeSeconds","h","m","s","f","match","replace","Settings","values","parseOptions","callback","keyValueDelim","groupDelim","groups","split","i","kv","parseCue","cue","regionList","oInput","consumeTimeStamp","ts","Errors","BadTimeStamp","skipWhitespace","startTime","substr","endTime","settings","k","v","id","region","alt","vals","vals0","integer","percent","vertical","line","lineAlign","snapToLines","size","align","position","start","left","middle","end","right","positionAlign","consumeCueSettings","constructor","BadSignature","dflt","defaultKey","has","a","n","test","parseInt","parseFloat","ESCAPE","TAG_NAME","c","b","u","ruby","rt","lang","TAG_ANNOTATION","NEEDS_PARENT","parseContent","window","nextToken","result","unescape1","e","unescape","shouldAdd","current","element","localName","createElement","type","annotation","tagName","document","trim","t","rootDiv","tagStack","appendChild","createTextNode","pop","parentNode","node","createProcessingInstruction","className","push","strongRTLRanges","isStrongRTLChar","charCode","currentRange","StyleBox","CueStyleBox","styleOptions","isIE8","navigator","userAgent","color","backgroundColor","call","cueDiv","text","styles","top","bottom","display","writingMode","unicodeBidi","applyStyles","div","textAlign","font","whiteSpace","direction","nodeStack","childNodes","pushNodes","nextTextNode","textContent","innerText","charCodeAt","determineBidi","stylesunicodeBidi","textPos","formatStyle","width","height","move","box","BoxPosition","obj","lh","offsetHeight","offsetWidth","offsetTop","rects","getClientRects","getBoundingClientRect","Math","max","lineHeight","undefined","moveBoxToLinePosition","styleBox","containerBox","boxPositions","boxPosition","linePos","track","textTrackList","mediaElement","trackList","count","mode","computeLinePos","axis","step","round","maxPosition","initialAxis","abs","ceil","reverse","calculatedPercentage","bestPosition","specifiedPosition","percentage","overlapsOppositeAxis","within","overlapsAny","p","intersectPercentage","findBestPosition","toCSSCompatValues","WebVTT","prop","hasOwnProperty","style","val","unit","toMove","overlaps","b2","boxes","container","min","reference","getSimpleBoxPosition","StringDecoder","decode","data","decodeURIComponent","encodeURIComponent","convertCueToDOMTree","cuetext","processCues","cues","overlay","firstChild","removeChild","paddedOverlay","margin","hasBeenReset","displayState","shouldCompute","fontSize","Parser","vttjs","decoder","state","buffer","TextDecoder","reportOrThrowError","onparsingerror","parse","self","collectNextLine","pos","parseHeader","ontimestampmap","parseTimestampMap","xy","anchor","VTTRegion","lines","regionAnchorX","regionAnchorY","viewportAnchorX","viewportAnchorY","scroll","onregion","parseRegion","stream","alreadyCollectedLine","VTTCue","indexOf","hasSubstring","oncue","flush","onflush","directionSetting","alignSetting","findAlignSetting","extend","cobj","baseObj","_id","_pauseOnExit","_startTime","_endTime","_text","_region","_vertical","_snapToLines","_line","_lineAlign","_position","_positionAlign","_size","_align","defineProperty","findDirectionSetting","getCueAsHTML","cueShim","regionShim","nativeVTTCue","nativeVTTRegion","shim","restore"],"mappings":"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","file":"js/npm._videojs-vtt.js0.12.6@videojs-vtt.js.75d91c8b.js","sourcesContent":["/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar scrollSetting = {\n \"\": true,\n \"up\": true\n};\n\nfunction findScrollSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var scroll = scrollSetting[value.toLowerCase()];\n return scroll ? value.toLowerCase() : false;\n}\n\nfunction isValidPercentValue(value) {\n return typeof value === \"number\" && (value >= 0 && value <= 100);\n}\n\n// VTTRegion shim http://dev.w3.org/html5/webvtt/#vttregion-interface\nfunction VTTRegion() {\n var _width = 100;\n var _lines = 3;\n var _regionAnchorX = 0;\n var _regionAnchorY = 100;\n var _viewportAnchorX = 0;\n var _viewportAnchorY = 100;\n var _scroll = \"\";\n\n Object.defineProperties(this, {\n \"width\": {\n enumerable: true,\n get: function() {\n return _width;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"Width must be between 0 and 100.\");\n }\n _width = value;\n }\n },\n \"lines\": {\n enumerable: true,\n get: function() {\n return _lines;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Lines must be set to a number.\");\n }\n _lines = value;\n }\n },\n \"regionAnchorY\": {\n enumerable: true,\n get: function() {\n return _regionAnchorY;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorX must be between 0 and 100.\");\n }\n _regionAnchorY = value;\n }\n },\n \"regionAnchorX\": {\n enumerable: true,\n get: function() {\n return _regionAnchorX;\n },\n set: function(value) {\n if(!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorY must be between 0 and 100.\");\n }\n _regionAnchorX = value;\n }\n },\n \"viewportAnchorY\": {\n enumerable: true,\n get: function() {\n return _viewportAnchorY;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorY must be between 0 and 100.\");\n }\n _viewportAnchorY = value;\n }\n },\n \"viewportAnchorX\": {\n enumerable: true,\n get: function() {\n return _viewportAnchorX;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorX must be between 0 and 100.\");\n }\n _viewportAnchorX = value;\n }\n },\n \"scroll\": {\n enumerable: true,\n get: function() {\n return _scroll;\n },\n set: function(value) {\n var setting = findScrollSetting(value);\n // Have to check for false as an empty string is a legal value.\n if (setting === false) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _scroll = setting;\n }\n }\n });\n}\n\nmodule.exports = VTTRegion;\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\nvar _objCreate = Object.create || (function() {\n function F() {}\n return function(o) {\n if (arguments.length !== 1) {\n throw new Error('Object.create shim only accepts one parameter.');\n }\n F.prototype = o;\n return new F();\n };\n})();\n\n// Creates a new ParserError object from an errorData object. The errorData\n// object should have default code and message properties. The default message\n// property can be overriden by passing in a message parameter.\n// See ParsingError.Errors below for acceptable errors.\nfunction ParsingError(errorData, message) {\n this.name = \"ParsingError\";\n this.code = errorData.code;\n this.message = message || errorData.message;\n}\nParsingError.prototype = _objCreate(Error.prototype);\nParsingError.prototype.constructor = ParsingError;\n\n// ParsingError metadata for acceptable ParsingErrors.\nParsingError.Errors = {\n BadSignature: {\n code: 0,\n message: \"Malformed WebVTT signature.\"\n },\n BadTimeStamp: {\n code: 1,\n message: \"Malformed time stamp.\"\n }\n};\n\n// Try to parse input as a time stamp.\nfunction parseTimeStamp(input) {\n\n function computeSeconds(h, m, s, f) {\n return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + (f | 0) / 1000;\n }\n\n var m = input.match(/^(\\d+):(\\d{2})(:\\d{2})?\\.(\\d{3})/);\n if (!m) {\n return null;\n }\n\n if (m[3]) {\n // Timestamp takes the form of [hours]:[minutes]:[seconds].[milliseconds]\n return computeSeconds(m[1], m[2], m[3].replace(\":\", \"\"), m[4]);\n } else if (m[1] > 59) {\n // Timestamp takes the form of [hours]:[minutes].[milliseconds]\n // First position is hours as it's over 59.\n return computeSeconds(m[1], m[2], 0, m[4]);\n } else {\n // Timestamp takes the form of [minutes]:[seconds].[milliseconds]\n return computeSeconds(0, m[1], m[2], m[4]);\n }\n}\n\n// A settings object holds key/value pairs and will ignore anything but the first\n// assignment to a specific key.\nfunction Settings() {\n this.values = _objCreate(null);\n}\n\nSettings.prototype = {\n // Only accept the first assignment to any key.\n set: function(k, v) {\n if (!this.get(k) && v !== \"\") {\n this.values[k] = v;\n }\n },\n // Return the value for a key, or a default value.\n // If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n // a number of possible default values as properties where 'defaultKey' is\n // the key of the property that will be chosen; otherwise it's assumed to be\n // a single value.\n get: function(k, dflt, defaultKey) {\n if (defaultKey) {\n return this.has(k) ? this.values[k] : dflt[defaultKey];\n }\n return this.has(k) ? this.values[k] : dflt;\n },\n // Check whether we have a value for a key.\n has: function(k) {\n return k in this.values;\n },\n // Accept a setting if its one of the given alternatives.\n alt: function(k, v, a) {\n for (var n = 0; n < a.length; ++n) {\n if (v === a[n]) {\n this.set(k, v);\n break;\n }\n }\n },\n // Accept a setting if its a valid (signed) integer.\n integer: function(k, v) {\n if (/^-?\\d+$/.test(v)) { // integer\n this.set(k, parseInt(v, 10));\n }\n },\n // Accept a setting if its a valid percentage.\n percent: function(k, v) {\n var m;\n if ((m = v.match(/^([\\d]{1,3})(\\.[\\d]*)?%$/))) {\n v = parseFloat(v);\n if (v >= 0 && v <= 100) {\n this.set(k, v);\n return true;\n }\n }\n return false;\n }\n};\n\n// Helper function to parse input into groups separated by 'groupDelim', and\n// interprete each group as a key/value pair separated by 'keyValueDelim'.\nfunction parseOptions(input, callback, keyValueDelim, groupDelim) {\n var groups = groupDelim ? input.split(groupDelim) : [input];\n for (var i in groups) {\n if (typeof groups[i] !== \"string\") {\n continue;\n }\n var kv = groups[i].split(keyValueDelim);\n if (kv.length !== 2) {\n continue;\n }\n var k = kv[0];\n var v = kv[1];\n callback(k, v);\n }\n}\n\nfunction parseCue(input, cue, regionList) {\n // Remember the original input if we need to throw an error.\n var oInput = input;\n // 4.1 WebVTT timestamp\n function consumeTimeStamp() {\n var ts = parseTimeStamp(input);\n if (ts === null) {\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed timestamp: \" + oInput);\n }\n // Remove time stamp from input.\n input = input.replace(/^[^\\sa-zA-Z-]+/, \"\");\n return ts;\n }\n\n // 4.4.2 WebVTT cue settings\n function consumeCueSettings(input, cue) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"region\":\n // Find the last region we parsed with the same region id.\n for (var i = regionList.length - 1; i >= 0; i--) {\n if (regionList[i].id === v) {\n settings.set(k, regionList[i].region);\n break;\n }\n }\n break;\n case \"vertical\":\n settings.alt(k, v, [\"rl\", \"lr\"]);\n break;\n case \"line\":\n var vals = v.split(\",\"),\n vals0 = vals[0];\n settings.integer(k, vals0);\n settings.percent(k, vals0) ? settings.set(\"snapToLines\", false) : null;\n settings.alt(k, vals0, [\"auto\"]);\n if (vals.length === 2) {\n settings.alt(\"lineAlign\", vals[1], [\"start\", \"middle\", \"end\"]);\n }\n break;\n case \"position\":\n vals = v.split(\",\");\n settings.percent(k, vals[0]);\n if (vals.length === 2) {\n settings.alt(\"positionAlign\", vals[1], [\"start\", \"middle\", \"end\"]);\n }\n break;\n case \"size\":\n settings.percent(k, v);\n break;\n case \"align\":\n settings.alt(k, v, [\"start\", \"middle\", \"end\", \"left\", \"right\"]);\n break;\n }\n }, /:/, /\\s/);\n\n // Apply default values for any missing fields.\n cue.region = settings.get(\"region\", null);\n cue.vertical = settings.get(\"vertical\", \"\");\n cue.line = settings.get(\"line\", \"auto\");\n cue.lineAlign = settings.get(\"lineAlign\", \"start\");\n cue.snapToLines = settings.get(\"snapToLines\", true);\n cue.size = settings.get(\"size\", 100);\n cue.align = settings.get(\"align\", \"middle\");\n cue.position = settings.get(\"position\", {\n start: 0,\n left: 0,\n middle: 50,\n end: 100,\n right: 100\n }, cue.align);\n cue.positionAlign = settings.get(\"positionAlign\", {\n start: \"start\",\n left: \"start\",\n middle: \"middle\",\n end: \"end\",\n right: \"end\"\n }, cue.align);\n }\n\n function skipWhitespace() {\n input = input.replace(/^\\s+/, \"\");\n }\n\n // 4.1 WebVTT cue timings.\n skipWhitespace();\n cue.startTime = consumeTimeStamp(); // (1) collect cue start time\n skipWhitespace();\n if (input.substr(0, 3) !== \"-->\") { // (3) next characters must match \"-->\"\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed time stamp (time stamps must be separated by '-->'): \" +\n oInput);\n }\n input = input.substr(3);\n skipWhitespace();\n cue.endTime = consumeTimeStamp(); // (5) collect cue end time\n\n // 4.1 WebVTT cue settings list.\n skipWhitespace();\n consumeCueSettings(input, cue);\n}\n\nvar ESCAPE = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n \"‎\": \"\\u200e\",\n \"‏\": \"\\u200f\",\n \" \": \"\\u00a0\"\n};\n\nvar TAG_NAME = {\n c: \"span\",\n i: \"i\",\n b: \"b\",\n u: \"u\",\n ruby: \"ruby\",\n rt: \"rt\",\n v: \"span\",\n lang: \"span\"\n};\n\nvar TAG_ANNOTATION = {\n v: \"title\",\n lang: \"lang\"\n};\n\nvar NEEDS_PARENT = {\n rt: \"ruby\"\n};\n\n// Parse content into a document fragment.\nfunction parseContent(window, input) {\n function nextToken() {\n // Check for end-of-string.\n if (!input) {\n return null;\n }\n\n // Consume 'n' characters from the input.\n function consume(result) {\n input = input.substr(result.length);\n return result;\n }\n\n var m = input.match(/^([^<]*)(<[^>]*>?)?/);\n // If there is some text before the next tag, return it, otherwise return\n // the tag.\n return consume(m[1] ? m[1] : m[2]);\n }\n\n // Unescape a string 's'.\n function unescape1(e) {\n return ESCAPE[e];\n }\n function unescape(s) {\n while ((m = s.match(/&(amp|lt|gt|lrm|rlm|nbsp);/))) {\n s = s.replace(m[0], unescape1);\n }\n return s;\n }\n\n function shouldAdd(current, element) {\n return !NEEDS_PARENT[element.localName] ||\n NEEDS_PARENT[element.localName] === current.localName;\n }\n\n // Create an element for this tag.\n function createElement(type, annotation) {\n var tagName = TAG_NAME[type];\n if (!tagName) {\n return null;\n }\n var element = window.document.createElement(tagName);\n element.localName = tagName;\n var name = TAG_ANNOTATION[type];\n if (name && annotation) {\n element[name] = annotation.trim();\n }\n return element;\n }\n\n var rootDiv = window.document.createElement(\"div\"),\n current = rootDiv,\n t,\n tagStack = [];\n\n while ((t = nextToken()) !== null) {\n if (t[0] === '<') {\n if (t[1] === \"/\") {\n // If the closing tag matches, move back up to the parent node.\n if (tagStack.length &&\n tagStack[tagStack.length - 1] === t.substr(2).replace(\">\", \"\")) {\n tagStack.pop();\n current = current.parentNode;\n }\n // Otherwise just ignore the end tag.\n continue;\n }\n var ts = parseTimeStamp(t.substr(1, t.length - 2));\n var node;\n if (ts) {\n // Timestamps are lead nodes as well.\n node = window.document.createProcessingInstruction(\"timestamp\", ts);\n current.appendChild(node);\n continue;\n }\n var m = t.match(/^<([^.\\s/0-9>]+)(\\.[^\\s\\\\>]+)?([^>\\\\]+)?(\\\\?)>?$/);\n // If we can't parse the tag, skip to the next tag.\n if (!m) {\n continue;\n }\n // Try to construct an element, and ignore the tag if we couldn't.\n node = createElement(m[1], m[3]);\n if (!node) {\n continue;\n }\n // Determine if the tag should be added based on the context of where it\n // is placed in the cuetext.\n if (!shouldAdd(current, node)) {\n continue;\n }\n // Set the class list (as a list of classes, separated by space).\n if (m[2]) {\n node.className = m[2].substr(1).replace('.', ' ');\n }\n // Append the node to the current node, and enter the scope of the new\n // node.\n tagStack.push(m[1]);\n current.appendChild(node);\n current = node;\n continue;\n }\n\n // Text nodes are leaf nodes.\n current.appendChild(window.document.createTextNode(unescape(t)));\n }\n\n return rootDiv;\n}\n\n// This is a list of all the Unicode characters that have a strong\n// right-to-left category. What this means is that these characters are\n// written right-to-left for sure. It was generated by pulling all the strong\n// right-to-left characters out of the Unicode data table. That table can\n// found at: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\nvar strongRTLRanges = [[0x5be, 0x5be], [0x5c0, 0x5c0], [0x5c3, 0x5c3], [0x5c6, 0x5c6],\n [0x5d0, 0x5ea], [0x5f0, 0x5f4], [0x608, 0x608], [0x60b, 0x60b], [0x60d, 0x60d],\n [0x61b, 0x61b], [0x61e, 0x64a], [0x66d, 0x66f], [0x671, 0x6d5], [0x6e5, 0x6e6],\n [0x6ee, 0x6ef], [0x6fa, 0x70d], [0x70f, 0x710], [0x712, 0x72f], [0x74d, 0x7a5],\n [0x7b1, 0x7b1], [0x7c0, 0x7ea], [0x7f4, 0x7f5], [0x7fa, 0x7fa], [0x800, 0x815],\n [0x81a, 0x81a], [0x824, 0x824], [0x828, 0x828], [0x830, 0x83e], [0x840, 0x858],\n [0x85e, 0x85e], [0x8a0, 0x8a0], [0x8a2, 0x8ac], [0x200f, 0x200f],\n [0xfb1d, 0xfb1d], [0xfb1f, 0xfb28], [0xfb2a, 0xfb36], [0xfb38, 0xfb3c],\n [0xfb3e, 0xfb3e], [0xfb40, 0xfb41], [0xfb43, 0xfb44], [0xfb46, 0xfbc1],\n [0xfbd3, 0xfd3d], [0xfd50, 0xfd8f], [0xfd92, 0xfdc7], [0xfdf0, 0xfdfc],\n [0xfe70, 0xfe74], [0xfe76, 0xfefc], [0x10800, 0x10805], [0x10808, 0x10808],\n [0x1080a, 0x10835], [0x10837, 0x10838], [0x1083c, 0x1083c], [0x1083f, 0x10855],\n [0x10857, 0x1085f], [0x10900, 0x1091b], [0x10920, 0x10939], [0x1093f, 0x1093f],\n [0x10980, 0x109b7], [0x109be, 0x109bf], [0x10a00, 0x10a00], [0x10a10, 0x10a13],\n [0x10a15, 0x10a17], [0x10a19, 0x10a33], [0x10a40, 0x10a47], [0x10a50, 0x10a58],\n [0x10a60, 0x10a7f], [0x10b00, 0x10b35], [0x10b40, 0x10b55], [0x10b58, 0x10b72],\n [0x10b78, 0x10b7f], [0x10c00, 0x10c48], [0x1ee00, 0x1ee03], [0x1ee05, 0x1ee1f],\n [0x1ee21, 0x1ee22], [0x1ee24, 0x1ee24], [0x1ee27, 0x1ee27], [0x1ee29, 0x1ee32],\n [0x1ee34, 0x1ee37], [0x1ee39, 0x1ee39], [0x1ee3b, 0x1ee3b], [0x1ee42, 0x1ee42],\n [0x1ee47, 0x1ee47], [0x1ee49, 0x1ee49], [0x1ee4b, 0x1ee4b], [0x1ee4d, 0x1ee4f],\n [0x1ee51, 0x1ee52], [0x1ee54, 0x1ee54], [0x1ee57, 0x1ee57], [0x1ee59, 0x1ee59],\n [0x1ee5b, 0x1ee5b], [0x1ee5d, 0x1ee5d], [0x1ee5f, 0x1ee5f], [0x1ee61, 0x1ee62],\n [0x1ee64, 0x1ee64], [0x1ee67, 0x1ee6a], [0x1ee6c, 0x1ee72], [0x1ee74, 0x1ee77],\n [0x1ee79, 0x1ee7c], [0x1ee7e, 0x1ee7e], [0x1ee80, 0x1ee89], [0x1ee8b, 0x1ee9b],\n [0x1eea1, 0x1eea3], [0x1eea5, 0x1eea9], [0x1eeab, 0x1eebb], [0x10fffd, 0x10fffd]];\n\nfunction isStrongRTLChar(charCode) {\n for (var i = 0; i < strongRTLRanges.length; i++) {\n var currentRange = strongRTLRanges[i];\n if (charCode >= currentRange[0] && charCode <= currentRange[1]) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction determineBidi(cueDiv) {\n var nodeStack = [],\n text = \"\",\n charCode;\n\n if (!cueDiv || !cueDiv.childNodes) {\n return \"ltr\";\n }\n\n function pushNodes(nodeStack, node) {\n for (var i = node.childNodes.length - 1; i >= 0; i--) {\n nodeStack.push(node.childNodes[i]);\n }\n }\n\n function nextTextNode(nodeStack) {\n if (!nodeStack || !nodeStack.length) {\n return null;\n }\n\n var node = nodeStack.pop(),\n text = node.textContent || node.innerText;\n if (text) {\n // TODO: This should match all unicode type B characters (paragraph\n // separator characters). See issue #115.\n var m = text.match(/^.*(\\n|\\r)/);\n if (m) {\n nodeStack.length = 0;\n return m[0];\n }\n return text;\n }\n if (node.tagName === \"ruby\") {\n return nextTextNode(nodeStack);\n }\n if (node.childNodes) {\n pushNodes(nodeStack, node);\n return nextTextNode(nodeStack);\n }\n }\n\n pushNodes(nodeStack, cueDiv);\n while ((text = nextTextNode(nodeStack))) {\n for (var i = 0; i < text.length; i++) {\n charCode = text.charCodeAt(i);\n if (isStrongRTLChar(charCode)) {\n return \"rtl\";\n }\n }\n }\n return \"ltr\";\n}\n\nfunction computeLinePos(cue) {\n if (typeof cue.line === \"number\" &&\n (cue.snapToLines || (cue.line >= 0 && cue.line <= 100))) {\n return cue.line;\n }\n if (!cue.track || !cue.track.textTrackList ||\n !cue.track.textTrackList.mediaElement) {\n return -1;\n }\n var track = cue.track,\n trackList = track.textTrackList,\n count = 0;\n for (var i = 0; i < trackList.length && trackList[i] !== track; i++) {\n if (trackList[i].mode === \"showing\") {\n count++;\n }\n }\n return ++count * -1;\n}\n\nfunction StyleBox() {\n}\n\n// Apply styles to a div. If there is no div passed then it defaults to the\n// div on 'this'.\nStyleBox.prototype.applyStyles = function(styles, div) {\n div = div || this.div;\n for (var prop in styles) {\n if (styles.hasOwnProperty(prop)) {\n div.style[prop] = styles[prop];\n }\n }\n};\n\nStyleBox.prototype.formatStyle = function(val, unit) {\n return val === 0 ? 0 : val + unit;\n};\n\n// Constructs the computed display state of the cue (a div). Places the div\n// into the overlay which should be a block level element (usually a div).\nfunction CueStyleBox(window, cue, styleOptions) {\n var isIE8 = (/MSIE\\s8\\.0/).test(navigator.userAgent);\n var color = \"rgba(255, 255, 255, 1)\";\n var backgroundColor = \"rgba(0, 0, 0, 0.8)\";\n\n if (isIE8) {\n color = \"rgb(255, 255, 255)\";\n backgroundColor = \"rgb(0, 0, 0)\";\n }\n\n StyleBox.call(this);\n this.cue = cue;\n\n // Parse our cue's text into a DOM tree rooted at 'cueDiv'. This div will\n // have inline positioning and will function as the cue background box.\n this.cueDiv = parseContent(window, cue.text);\n var styles = {\n color: color,\n backgroundColor: backgroundColor,\n position: \"relative\",\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: \"inline\"\n };\n\n if (!isIE8) {\n styles.writingMode = cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\";\n styles.unicodeBidi = \"plaintext\";\n }\n this.applyStyles(styles, this.cueDiv);\n\n // Create an absolutely positioned div that will be used to position the cue\n // div. Note, all WebVTT cue-setting alignments are equivalent to the CSS\n // mirrors of them except \"middle\" which is \"center\" in CSS.\n this.div = window.document.createElement(\"div\");\n styles = {\n textAlign: cue.align === \"middle\" ? \"center\" : cue.align,\n font: styleOptions.font,\n whiteSpace: \"pre-line\",\n position: \"absolute\"\n };\n\n if (!isIE8) {\n styles.direction = determineBidi(this.cueDiv);\n styles.writingMode = cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\".\n stylesunicodeBidi = \"plaintext\";\n }\n\n this.applyStyles(styles);\n\n this.div.appendChild(this.cueDiv);\n\n // Calculate the distance from the reference edge of the viewport to the text\n // position of the cue box. The reference edge will be resolved later when\n // the box orientation styles are applied.\n var textPos = 0;\n switch (cue.positionAlign) {\n case \"start\":\n textPos = cue.position;\n break;\n case \"middle\":\n textPos = cue.position - (cue.size / 2);\n break;\n case \"end\":\n textPos = cue.position - cue.size;\n break;\n }\n\n // Horizontal box orientation; textPos is the distance from the left edge of the\n // area to the left edge of the box and cue.size is the distance extending to\n // the right from there.\n if (cue.vertical === \"\") {\n this.applyStyles({\n left: this.formatStyle(textPos, \"%\"),\n width: this.formatStyle(cue.size, \"%\")\n });\n // Vertical box orientation; textPos is the distance from the top edge of the\n // area to the top edge of the box and cue.size is the height extending\n // downwards from there.\n } else {\n this.applyStyles({\n top: this.formatStyle(textPos, \"%\"),\n height: this.formatStyle(cue.size, \"%\")\n });\n }\n\n this.move = function(box) {\n this.applyStyles({\n top: this.formatStyle(box.top, \"px\"),\n bottom: this.formatStyle(box.bottom, \"px\"),\n left: this.formatStyle(box.left, \"px\"),\n right: this.formatStyle(box.right, \"px\"),\n height: this.formatStyle(box.height, \"px\"),\n width: this.formatStyle(box.width, \"px\")\n });\n };\n}\nCueStyleBox.prototype = _objCreate(StyleBox.prototype);\nCueStyleBox.prototype.constructor = CueStyleBox;\n\n// Represents the co-ordinates of an Element in a way that we can easily\n// compute things with such as if it overlaps or intersects with another Element.\n// Can initialize it with either a StyleBox or another BoxPosition.\nfunction BoxPosition(obj) {\n var isIE8 = (/MSIE\\s8\\.0/).test(navigator.userAgent);\n\n // Either a BoxPosition was passed in and we need to copy it, or a StyleBox\n // was passed in and we need to copy the results of 'getBoundingClientRect'\n // as the object returned is readonly. All co-ordinate values are in reference\n // to the viewport origin (top left).\n var lh, height, width, top;\n if (obj.div) {\n height = obj.div.offsetHeight;\n width = obj.div.offsetWidth;\n top = obj.div.offsetTop;\n\n var rects = (rects = obj.div.childNodes) && (rects = rects[0]) &&\n rects.getClientRects && rects.getClientRects();\n obj = obj.div.getBoundingClientRect();\n // In certain cases the outter div will be slightly larger then the sum of\n // the inner div's lines. This could be due to bold text, etc, on some platforms.\n // In this case we should get the average line height and use that. This will\n // result in the desired behaviour.\n lh = rects ? Math.max((rects[0] && rects[0].height) || 0, obj.height / rects.length)\n : 0;\n\n }\n this.left = obj.left;\n this.right = obj.right;\n this.top = obj.top || top;\n this.height = obj.height || height;\n this.bottom = obj.bottom || (top + (obj.height || height));\n this.width = obj.width || width;\n this.lineHeight = lh !== undefined ? lh : obj.lineHeight;\n\n if (isIE8 && !this.lineHeight) {\n this.lineHeight = 13;\n }\n}\n\n// Move the box along a particular axis. Optionally pass in an amount to move\n// the box. If no amount is passed then the default is the line height of the\n// box.\nBoxPosition.prototype.move = function(axis, toMove) {\n toMove = toMove !== undefined ? toMove : this.lineHeight;\n switch (axis) {\n case \"+x\":\n this.left += toMove;\n this.right += toMove;\n break;\n case \"-x\":\n this.left -= toMove;\n this.right -= toMove;\n break;\n case \"+y\":\n this.top += toMove;\n this.bottom += toMove;\n break;\n case \"-y\":\n this.top -= toMove;\n this.bottom -= toMove;\n break;\n }\n};\n\n// Check if this box overlaps another box, b2.\nBoxPosition.prototype.overlaps = function(b2) {\n return this.left < b2.right &&\n this.right > b2.left &&\n this.top < b2.bottom &&\n this.bottom > b2.top;\n};\n\n// Check if this box overlaps any other boxes in boxes.\nBoxPosition.prototype.overlapsAny = function(boxes) {\n for (var i = 0; i < boxes.length; i++) {\n if (this.overlaps(boxes[i])) {\n return true;\n }\n }\n return false;\n};\n\n// Check if this box is within another box.\nBoxPosition.prototype.within = function(container) {\n return this.top >= container.top &&\n this.bottom <= container.bottom &&\n this.left >= container.left &&\n this.right <= container.right;\n};\n\n// Check if this box is entirely within the container or it is overlapping\n// on the edge opposite of the axis direction passed. For example, if \"+x\" is\n// passed and the box is overlapping on the left edge of the container, then\n// return true.\nBoxPosition.prototype.overlapsOppositeAxis = function(container, axis) {\n switch (axis) {\n case \"+x\":\n return this.left < container.left;\n case \"-x\":\n return this.right > container.right;\n case \"+y\":\n return this.top < container.top;\n case \"-y\":\n return this.bottom > container.bottom;\n }\n};\n\n// Find the percentage of the area that this box is overlapping with another\n// box.\nBoxPosition.prototype.intersectPercentage = function(b2) {\n var x = Math.max(0, Math.min(this.right, b2.right) - Math.max(this.left, b2.left)),\n y = Math.max(0, Math.min(this.bottom, b2.bottom) - Math.max(this.top, b2.top)),\n intersectArea = x * y;\n return intersectArea / (this.height * this.width);\n};\n\n// Convert the positions from this box to CSS compatible positions using\n// the reference container's positions. This has to be done because this\n// box's positions are in reference to the viewport origin, whereas, CSS\n// values are in referecne to their respective edges.\nBoxPosition.prototype.toCSSCompatValues = function(reference) {\n return {\n top: this.top - reference.top,\n bottom: reference.bottom - this.bottom,\n left: this.left - reference.left,\n right: reference.right - this.right,\n height: this.height,\n width: this.width\n };\n};\n\n// Get an object that represents the box's position without anything extra.\n// Can pass a StyleBox, HTMLElement, or another BoxPositon.\nBoxPosition.getSimpleBoxPosition = function(obj) {\n var height = obj.div ? obj.div.offsetHeight : obj.tagName ? obj.offsetHeight : 0;\n var width = obj.div ? obj.div.offsetWidth : obj.tagName ? obj.offsetWidth : 0;\n var top = obj.div ? obj.div.offsetTop : obj.tagName ? obj.offsetTop : 0;\n\n obj = obj.div ? obj.div.getBoundingClientRect() :\n obj.tagName ? obj.getBoundingClientRect() : obj;\n var ret = {\n left: obj.left,\n right: obj.right,\n top: obj.top || top,\n height: obj.height || height,\n bottom: obj.bottom || (top + (obj.height || height)),\n width: obj.width || width\n };\n return ret;\n};\n\n// Move a StyleBox to its specified, or next best, position. The containerBox\n// is the box that contains the StyleBox, such as a div. boxPositions are\n// a list of other boxes that the styleBox can't overlap with.\nfunction moveBoxToLinePosition(window, styleBox, containerBox, boxPositions) {\n\n // Find the best position for a cue box, b, on the video. The axis parameter\n // is a list of axis, the order of which, it will move the box along. For example:\n // Passing [\"+x\", \"-x\"] will move the box first along the x axis in the positive\n // direction. If it doesn't find a good position for it there it will then move\n // it along the x axis in the negative direction.\n function findBestPosition(b, axis) {\n var bestPosition,\n specifiedPosition = new BoxPosition(b),\n percentage = 1; // Highest possible so the first thing we get is better.\n\n for (var i = 0; i < axis.length; i++) {\n while (b.overlapsOppositeAxis(containerBox, axis[i]) ||\n (b.within(containerBox) && b.overlapsAny(boxPositions))) {\n b.move(axis[i]);\n }\n // We found a spot where we aren't overlapping anything. This is our\n // best position.\n if (b.within(containerBox)) {\n return b;\n }\n var p = b.intersectPercentage(containerBox);\n // If we're outside the container box less then we were on our last try\n // then remember this position as the best position.\n if (percentage > p) {\n bestPosition = new BoxPosition(b);\n percentage = p;\n }\n // Reset the box position to the specified position.\n b = new BoxPosition(specifiedPosition);\n }\n return bestPosition || specifiedPosition;\n }\n\n var boxPosition = new BoxPosition(styleBox),\n cue = styleBox.cue,\n linePos = computeLinePos(cue),\n axis = [];\n\n // If we have a line number to align the cue to.\n if (cue.snapToLines) {\n var size;\n switch (cue.vertical) {\n case \"\":\n axis = [ \"+y\", \"-y\" ];\n size = \"height\";\n break;\n case \"rl\":\n axis = [ \"+x\", \"-x\" ];\n size = \"width\";\n break;\n case \"lr\":\n axis = [ \"-x\", \"+x\" ];\n size = \"width\";\n break;\n }\n\n var step = boxPosition.lineHeight,\n position = step * Math.round(linePos),\n maxPosition = containerBox[size] + step,\n initialAxis = axis[0];\n\n // If the specified intial position is greater then the max position then\n // clamp the box to the amount of steps it would take for the box to\n // reach the max position.\n if (Math.abs(position) > maxPosition) {\n position = position < 0 ? -1 : 1;\n position *= Math.ceil(maxPosition / step) * step;\n }\n\n // If computed line position returns negative then line numbers are\n // relative to the bottom of the video instead of the top. Therefore, we\n // need to increase our initial position by the length or width of the\n // video, depending on the writing direction, and reverse our axis directions.\n if (linePos < 0) {\n position += cue.vertical === \"\" ? containerBox.height : containerBox.width;\n axis = axis.reverse();\n }\n\n // Move the box to the specified position. This may not be its best\n // position.\n boxPosition.move(initialAxis, position);\n\n } else {\n // If we have a percentage line value for the cue.\n var calculatedPercentage = (boxPosition.lineHeight / containerBox.height) * 100;\n\n switch (cue.lineAlign) {\n case \"middle\":\n linePos -= (calculatedPercentage / 2);\n break;\n case \"end\":\n linePos -= calculatedPercentage;\n break;\n }\n\n // Apply initial line position to the cue box.\n switch (cue.vertical) {\n case \"\":\n styleBox.applyStyles({\n top: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"rl\":\n styleBox.applyStyles({\n left: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"lr\":\n styleBox.applyStyles({\n right: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n }\n\n axis = [ \"+y\", \"-x\", \"+x\", \"-y\" ];\n\n // Get the box position again after we've applied the specified positioning\n // to it.\n boxPosition = new BoxPosition(styleBox);\n }\n\n var bestPosition = findBestPosition(boxPosition, axis);\n styleBox.move(bestPosition.toCSSCompatValues(containerBox));\n}\n\nfunction WebVTT() {\n // Nothing\n}\n\n// Helper to allow strings to be decoded instead of the default binary utf8 data.\nWebVTT.StringDecoder = function() {\n return {\n decode: function(data) {\n if (!data) {\n return \"\";\n }\n if (typeof data !== \"string\") {\n throw new Error(\"Error - expected string data.\");\n }\n return decodeURIComponent(encodeURIComponent(data));\n }\n };\n};\n\nWebVTT.convertCueToDOMTree = function(window, cuetext) {\n if (!window || !cuetext) {\n return null;\n }\n return parseContent(window, cuetext);\n};\n\nvar FONT_SIZE_PERCENT = 0.05;\nvar FONT_STYLE = \"sans-serif\";\nvar CUE_BACKGROUND_PADDING = \"1.5%\";\n\n// Runs the processing model over the cues and regions passed to it.\n// @param overlay A block level element (usually a div) that the computed cues\n// and regions will be placed into.\nWebVTT.processCues = function(window, cues, overlay) {\n if (!window || !cues || !overlay) {\n return null;\n }\n\n // Remove all previous children.\n while (overlay.firstChild) {\n overlay.removeChild(overlay.firstChild);\n }\n\n var paddedOverlay = window.document.createElement(\"div\");\n paddedOverlay.style.position = \"absolute\";\n paddedOverlay.style.left = \"0\";\n paddedOverlay.style.right = \"0\";\n paddedOverlay.style.top = \"0\";\n paddedOverlay.style.bottom = \"0\";\n paddedOverlay.style.margin = CUE_BACKGROUND_PADDING;\n overlay.appendChild(paddedOverlay);\n\n // Determine if we need to compute the display states of the cues. This could\n // be the case if a cue's state has been changed since the last computation or\n // if it has not been computed yet.\n function shouldCompute(cues) {\n for (var i = 0; i < cues.length; i++) {\n if (cues[i].hasBeenReset || !cues[i].displayState) {\n return true;\n }\n }\n return false;\n }\n\n // We don't need to recompute the cues' display states. Just reuse them.\n if (!shouldCompute(cues)) {\n for (var i = 0; i < cues.length; i++) {\n paddedOverlay.appendChild(cues[i].displayState);\n }\n return;\n }\n\n var boxPositions = [],\n containerBox = BoxPosition.getSimpleBoxPosition(paddedOverlay),\n fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100;\n var styleOptions = {\n font: fontSize + \"px \" + FONT_STYLE\n };\n\n (function() {\n var styleBox, cue;\n\n for (var i = 0; i < cues.length; i++) {\n cue = cues[i];\n\n // Compute the intial position and styles of the cue div.\n styleBox = new CueStyleBox(window, cue, styleOptions);\n paddedOverlay.appendChild(styleBox.div);\n\n // Move the cue div to it's correct line position.\n moveBoxToLinePosition(window, styleBox, containerBox, boxPositions);\n\n // Remember the computed div so that we don't have to recompute it later\n // if we don't have too.\n cue.displayState = styleBox.div;\n\n boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox));\n }\n })();\n};\n\nWebVTT.Parser = function(window, vttjs, decoder) {\n if (!decoder) {\n decoder = vttjs;\n vttjs = {};\n }\n if (!vttjs) {\n vttjs = {};\n }\n\n this.window = window;\n this.vttjs = vttjs;\n this.state = \"INITIAL\";\n this.buffer = \"\";\n this.decoder = decoder || new TextDecoder(\"utf8\");\n this.regionList = [];\n};\n\nWebVTT.Parser.prototype = {\n // If the error is a ParsingError then report it to the consumer if\n // possible. If it's not a ParsingError then throw it like normal.\n reportOrThrowError: function(e) {\n if (e instanceof ParsingError) {\n this.onparsingerror && this.onparsingerror(e);\n } else {\n throw e;\n }\n },\n parse: function (data) {\n var self = this;\n\n // If there is no data then we won't decode it, but will just try to parse\n // whatever is in buffer already. This may occur in circumstances, for\n // example when flush() is called.\n if (data) {\n // Try to decode the data that we received.\n self.buffer += self.decoder.decode(data, {stream: true});\n }\n\n function collectNextLine() {\n var buffer = self.buffer;\n var pos = 0;\n while (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n ++pos;\n }\n var line = buffer.substr(0, pos);\n // Advance the buffer early in case we fail below.\n if (buffer[pos] === '\\r') {\n ++pos;\n }\n if (buffer[pos] === '\\n') {\n ++pos;\n }\n self.buffer = buffer.substr(pos);\n return line;\n }\n\n // 3.4 WebVTT region and WebVTT region settings syntax\n function parseRegion(input) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"id\":\n settings.set(k, v);\n break;\n case \"width\":\n settings.percent(k, v);\n break;\n case \"lines\":\n settings.integer(k, v);\n break;\n case \"regionanchor\":\n case \"viewportanchor\":\n var xy = v.split(',');\n if (xy.length !== 2) {\n break;\n }\n // We have to make sure both x and y parse, so use a temporary\n // settings object here.\n var anchor = new Settings();\n anchor.percent(\"x\", xy[0]);\n anchor.percent(\"y\", xy[1]);\n if (!anchor.has(\"x\") || !anchor.has(\"y\")) {\n break;\n }\n settings.set(k + \"X\", anchor.get(\"x\"));\n settings.set(k + \"Y\", anchor.get(\"y\"));\n break;\n case \"scroll\":\n settings.alt(k, v, [\"up\"]);\n break;\n }\n }, /=/, /\\s/);\n\n // Create the region, using default values for any values that were not\n // specified.\n if (settings.has(\"id\")) {\n var region = new (self.vttjs.VTTRegion || self.window.VTTRegion)();\n region.width = settings.get(\"width\", 100);\n region.lines = settings.get(\"lines\", 3);\n region.regionAnchorX = settings.get(\"regionanchorX\", 0);\n region.regionAnchorY = settings.get(\"regionanchorY\", 100);\n region.viewportAnchorX = settings.get(\"viewportanchorX\", 0);\n region.viewportAnchorY = settings.get(\"viewportanchorY\", 100);\n region.scroll = settings.get(\"scroll\", \"\");\n // Register the region.\n self.onregion && self.onregion(region);\n // Remember the VTTRegion for later in case we parse any VTTCues that\n // reference it.\n self.regionList.push({\n id: settings.get(\"id\"),\n region: region\n });\n }\n }\n\n // draft-pantos-http-live-streaming-20\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-20#section-3.5\n // 3.5 WebVTT\n function parseTimestampMap(input) {\n var settings = new Settings();\n\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"MPEGT\":\n settings.integer(k + 'S', v);\n break;\n case \"LOCA\":\n settings.set(k + 'L', parseTimeStamp(v));\n break;\n }\n }, /[^\\d]:/, /,/);\n\n self.ontimestampmap && self.ontimestampmap({\n \"MPEGTS\": settings.get(\"MPEGTS\"),\n \"LOCAL\": settings.get(\"LOCAL\")\n });\n }\n\n // 3.2 WebVTT metadata header syntax\n function parseHeader(input) {\n if (input.match(/X-TIMESTAMP-MAP/)) {\n // This line contains HLS X-TIMESTAMP-MAP metadata\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"X-TIMESTAMP-MAP\":\n parseTimestampMap(v);\n break;\n }\n }, /=/);\n } else {\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"Region\":\n // 3.3 WebVTT region metadata header syntax\n parseRegion(v);\n break;\n }\n }, /:/);\n }\n\n }\n\n // 5.1 WebVTT file parsing.\n try {\n var line;\n if (self.state === \"INITIAL\") {\n // We can't start parsing until we have the first line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n line = collectNextLine();\n\n var m = line.match(/^WEBVTT([ \\t].*)?$/);\n if (!m || !m[0]) {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n\n self.state = \"HEADER\";\n }\n\n var alreadyCollectedLine = false;\n while (self.buffer) {\n // We can't parse a line until we have the full line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n if (!alreadyCollectedLine) {\n line = collectNextLine();\n } else {\n alreadyCollectedLine = false;\n }\n\n switch (self.state) {\n case \"HEADER\":\n // 13-18 - Allow a header (metadata) under the WEBVTT line.\n if (/:/.test(line)) {\n parseHeader(line);\n } else if (!line) {\n // An empty line terminates the header and starts the body (cues).\n self.state = \"ID\";\n }\n continue;\n case \"NOTE\":\n // Ignore NOTE blocks.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n case \"ID\":\n // Check for the start of NOTE blocks.\n if (/^NOTE($|[ \\t])/.test(line)) {\n self.state = \"NOTE\";\n break;\n }\n // 19-29 - Allow any number of line terminators, then initialize new cue values.\n if (!line) {\n continue;\n }\n self.cue = new (self.vttjs.VTTCue || self.window.VTTCue)(0, 0, \"\");\n self.state = \"CUE\";\n // 30-39 - Check if self line contains an optional identifier or timing data.\n if (line.indexOf(\"-->\") === -1) {\n self.cue.id = line;\n continue;\n }\n // Process line as start of a cue.\n /*falls through*/\n case \"CUE\":\n // 40 - Collect cue timings and settings.\n try {\n parseCue(line, self.cue, self.regionList);\n } catch (e) {\n self.reportOrThrowError(e);\n // In case of an error ignore rest of the cue.\n self.cue = null;\n self.state = \"BADCUE\";\n continue;\n }\n self.state = \"CUETEXT\";\n continue;\n case \"CUETEXT\":\n var hasSubstring = line.indexOf(\"-->\") !== -1;\n // 34 - If we have an empty line then report the cue.\n // 35 - If we have the special substring '-->' then report the cue,\n // but do not collect the line as we need to process the current\n // one as a new cue.\n if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n // We are done parsing self cue.\n self.oncue && self.oncue(self.cue);\n self.cue = null;\n self.state = \"ID\";\n continue;\n }\n if (self.cue.text) {\n self.cue.text += \"\\n\";\n }\n self.cue.text += line;\n continue;\n case \"BADCUE\": // BADCUE\n // 54-62 - Collect and discard the remaining cue.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n }\n }\n } catch (e) {\n self.reportOrThrowError(e);\n\n // If we are currently parsing a cue, report what we have.\n if (self.state === \"CUETEXT\" && self.cue && self.oncue) {\n self.oncue(self.cue);\n }\n self.cue = null;\n // Enter BADWEBVTT state if header was not parsed correctly otherwise\n // another exception occurred so enter BADCUE state.\n self.state = self.state === \"INITIAL\" ? \"BADWEBVTT\" : \"BADCUE\";\n }\n return this;\n },\n flush: function () {\n var self = this;\n try {\n // Finish decoding the stream.\n self.buffer += self.decoder.decode();\n // Synthesize the end of the current cue or region.\n if (self.cue || self.state === \"HEADER\") {\n self.buffer += \"\\n\\n\";\n self.parse();\n }\n // If we've flushed, parsed, and we're still on the INITIAL state then\n // that means we don't have enough of the stream to parse the first\n // line.\n if (self.state === \"INITIAL\") {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n } catch(e) {\n self.reportOrThrowError(e);\n }\n self.onflush && self.onflush();\n return this;\n }\n};\n\nmodule.exports = WebVTT;\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar autoKeyword = \"auto\";\nvar directionSetting = {\n \"\": true,\n \"lr\": true,\n \"rl\": true\n};\nvar alignSetting = {\n \"start\": true,\n \"middle\": true,\n \"end\": true,\n \"left\": true,\n \"right\": true\n};\n\nfunction findDirectionSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var dir = directionSetting[value.toLowerCase()];\n return dir ? value.toLowerCase() : false;\n}\n\nfunction findAlignSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var align = alignSetting[value.toLowerCase()];\n return align ? value.toLowerCase() : false;\n}\n\nfunction extend(obj) {\n var i = 1;\n for (; i < arguments.length; i++) {\n var cobj = arguments[i];\n for (var p in cobj) {\n obj[p] = cobj[p];\n }\n }\n\n return obj;\n}\n\nfunction VTTCue(startTime, endTime, text) {\n var cue = this;\n var isIE8 = (/MSIE\\s8\\.0/).test(navigator.userAgent);\n var baseObj = {};\n\n if (isIE8) {\n cue = document.createElement('custom');\n } else {\n baseObj.enumerable = true;\n }\n\n /**\n * Shim implementation specific properties. These properties are not in\n * the spec.\n */\n\n // Lets us know when the VTTCue's data has changed in such a way that we need\n // to recompute its display state. This lets us compute its display state\n // lazily.\n cue.hasBeenReset = false;\n\n /**\n * VTTCue and TextTrackCue properties\n * http://dev.w3.org/html5/webvtt/#vttcue-interface\n */\n\n var _id = \"\";\n var _pauseOnExit = false;\n var _startTime = startTime;\n var _endTime = endTime;\n var _text = text;\n var _region = null;\n var _vertical = \"\";\n var _snapToLines = true;\n var _line = \"auto\";\n var _lineAlign = \"start\";\n var _position = 50;\n var _positionAlign = \"middle\";\n var _size = 50;\n var _align = \"middle\";\n\n Object.defineProperty(cue,\n \"id\", extend({}, baseObj, {\n get: function() {\n return _id;\n },\n set: function(value) {\n _id = \"\" + value;\n }\n }));\n\n Object.defineProperty(cue,\n \"pauseOnExit\", extend({}, baseObj, {\n get: function() {\n return _pauseOnExit;\n },\n set: function(value) {\n _pauseOnExit = !!value;\n }\n }));\n\n Object.defineProperty(cue,\n \"startTime\", extend({}, baseObj, {\n get: function() {\n return _startTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Start time must be set to a number.\");\n }\n _startTime = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"endTime\", extend({}, baseObj, {\n get: function() {\n return _endTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"End time must be set to a number.\");\n }\n _endTime = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"text\", extend({}, baseObj, {\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = \"\" + value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"region\", extend({}, baseObj, {\n get: function() {\n return _region;\n },\n set: function(value) {\n _region = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"vertical\", extend({}, baseObj, {\n get: function() {\n return _vertical;\n },\n set: function(value) {\n var setting = findDirectionSetting(value);\n // Have to check for false because the setting an be an empty string.\n if (setting === false) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _vertical = setting;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"snapToLines\", extend({}, baseObj, {\n get: function() {\n return _snapToLines;\n },\n set: function(value) {\n _snapToLines = !!value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"line\", extend({}, baseObj, {\n get: function() {\n return _line;\n },\n set: function(value) {\n if (typeof value !== \"number\" && value !== autoKeyword) {\n throw new SyntaxError(\"An invalid number or illegal string was specified.\");\n }\n _line = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"lineAlign\", extend({}, baseObj, {\n get: function() {\n return _lineAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _lineAlign = setting;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"position\", extend({}, baseObj, {\n get: function() {\n return _position;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Position must be between 0 and 100.\");\n }\n _position = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"positionAlign\", extend({}, baseObj, {\n get: function() {\n return _positionAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _positionAlign = setting;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"size\", extend({}, baseObj, {\n get: function() {\n return _size;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Size must be between 0 and 100.\");\n }\n _size = value;\n this.hasBeenReset = true;\n }\n }));\n\n Object.defineProperty(cue,\n \"align\", extend({}, baseObj, {\n get: function() {\n return _align;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"An invalid or illegal string was specified.\");\n }\n _align = setting;\n this.hasBeenReset = true;\n }\n }));\n\n /**\n * Other spec defined properties\n */\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state\n cue.displayState = undefined;\n\n if (isIE8) {\n return cue;\n }\n}\n\n/**\n * VTTCue methods\n */\n\nVTTCue.prototype.getCueAsHTML = function() {\n // Assume WebVTT.convertCueToDOMTree is on the global.\n return WebVTT.convertCueToDOMTree(window, this.text);\n};\n\nmodule.exports = VTTCue;\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Default exports for Node. Export the extended versions of VTTCue and\n// VTTRegion in Node since we likely want the capability to convert back and\n// forth between JSON. If we don't then it's not that big of a deal since we're\n// off browser.\n\nvar window = require('global/window');\n\nvar vttjs = module.exports = {\n WebVTT: require(\"./vtt.js\"),\n VTTCue: require(\"./vttcue.js\"),\n VTTRegion: require(\"./vttregion.js\")\n};\n\nwindow.vttjs = vttjs;\nwindow.WebVTT = vttjs.WebVTT;\n\nvar cueShim = vttjs.VTTCue;\nvar regionShim = vttjs.VTTRegion;\nvar nativeVTTCue = window.VTTCue;\nvar nativeVTTRegion = window.VTTRegion;\n\nvttjs.shim = function() {\n window.VTTCue = cueShim;\n window.VTTRegion = regionShim;\n};\n\nvttjs.restore = function() {\n window.VTTCue = nativeVTTCue;\n window.VTTRegion = nativeVTTRegion;\n};\n\nif (!window.VTTCue) {\n vttjs.shim();\n}\n"],"sourceRoot":""}