{"version":3,"sources":["webpack:///./node_modules/videojs-vtt.js/lib/browser-index.js","webpack:///./node_modules/videojs-vtt.js/lib/vttcue.js","webpack:///./node_modules/videojs-vtt.js/lib/vtt.js","webpack:///./node_modules/videojs-vtt.js/lib/vttregion.js"],"names":["window","vttjs","module","exports","WebVTT","VTTCue","VTTRegion","cueShim","regionShim","nativeVTTCue","nativeVTTRegion","shim","restore","directionSetting","alignSetting","findAlignSetting","value","toLowerCase","extend","obj","i","arguments","length","cobj","p","startTime","endTime","text","cue","this","isIE8","test","navigator","userAgent","baseObj","document","createElement","enumerable","hasBeenReset","_id","_pauseOnExit","_startTime","_endTime","_text","_region","_vertical","_snapToLines","_line","_lineAlign","_position","_positionAlign","_size","_align","Object","defineProperty","get","set","TypeError","setting","findDirectionSetting","SyntaxError","Error","displayState","undefined","prototype","getCueAsHTML","convertCueToDOMTree","_objCreate","create","F","o","ParsingError","errorData","message","name","code","parseTimeStamp","input","computeSeconds","h","m","s","f","match","replace","Settings","values","parseOptions","callback","keyValueDelim","groupDelim","groups","split","kv","parseCue","regionList","oInput","consumeTimeStamp","ts","Errors","BadTimeStamp","skipWhitespace","substr","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","parseInt","parseFloat","ESCAPE","TAG_NAME","c","b","u","ruby","rt","lang","TAG_ANNOTATION","NEEDS_PARENT","parseContent","nextToken","result","unescape1","e","unescape","shouldAdd","current","element","localName","type","annotation","tagName","trim","t","rootDiv","tagStack","appendChild","createTextNode","pop","parentNode","node","createProcessingInstruction","className","push","strongRTLRanges","isStrongRTLChar","charCode","currentRange","StyleBox","CueStyleBox","styleOptions","color","backgroundColor","call","cueDiv","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","lh","offsetHeight","offsetWidth","offsetTop","rects","getClientRects","getBoundingClientRect","Math","max","lineHeight","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","intersectPercentage","findBestPosition","toCSSCompatValues","prop","hasOwnProperty","style","val","unit","toMove","overlaps","b2","boxes","container","min","reference","getSimpleBoxPosition","StringDecoder","decode","data","decodeURIComponent","encodeURIComponent","cuetext","processCues","cues","overlay","firstChild","removeChild","paddedOverlay","margin","shouldCompute","fontSize","Parser","decoder","state","buffer","TextDecoder","reportOrThrowError","onparsingerror","parse","self","collectNextLine","pos","parseHeader","ontimestampmap","parseTimestampMap","xy","anchor","lines","regionAnchorX","regionAnchorY","viewportAnchorX","viewportAnchorY","scroll","onregion","parseRegion","stream","alreadyCollectedLine","indexOf","hasSubstring","oncue","flush","onflush","scrollSetting","isValidPercentValue","_width","_lines","_regionAnchorX","_regionAnchorY","_viewportAnchorX","_viewportAnchorY","_scroll","defineProperties","findScrollSetting"],"mappings":"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","file":"js/npm.videojs-vtt.js.68af8c8e.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\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","/**\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/* -*- 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 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"],"sourceRoot":""}