1 | {"version":3,"file":"Html.js","sourceRoot":"","sources":["../../../../src/lib/reporters/Html.ts"],"names":[],"mappings":"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","sourcesContent":["import { Executor } from '../executors/Executor';\nimport Reporter, { eventHandler, ReporterProperties } from './Reporter';\nimport Test from '../Test';\nimport Suite from '../Suite';\nimport {\n suitesIcon,\n passIcon,\n failIcon,\n testsIcon,\n skipIcon,\n timeIcon\n} from './html/icons';\n\n// Needs a URLSearchParams polyfill\n\n/**\n * The Html reporter displays an HTML report in the browser.\n */\nexport default class Html extends Reporter implements HtmlProperties {\n document: Document;\n\n location: Location;\n\n protected _reportContainer: Element | undefined;\n\n // Div element to hold buttons above the summary table\n protected _reportControls: Element | undefined;\n\n // tbody element to append report rows to\n protected _reportNode: Element | undefined;\n\n // tr element containing summary info\n protected _summaryNode: Element | undefined;\n\n // Array of td elements in 'summaryNode'\n protected _summaryNodes: Element[] = [];\n\n // Accumulator for total number of suites\n protected _suiteCount = 0;\n\n // Accumulator for total number of tests\n protected _testCount = 0;\n\n // Tests in the current suite\n protected _testsInSuite = 0;\n\n // Current test index\n protected _testIndex = 0;\n\n // ID's of tests that have been processed\n protected _processedTests: any = {};\n\n protected _passedFilter: any = null;\n protected _skippedFilter: any = null;\n\n protected _fragment: DocumentFragment;\n\n protected _indentLevel = 0;\n\n protected _runningSuites: any = {};\n\n constructor(executor: Executor, options: HtmlOptions = {}) {\n super(executor, options);\n this.document = options.document || window.document;\n this.location = options.location || window.location;\n this._fragment = this.document.createDocumentFragment();\n }\n\n /**\n * Generate the summary header at the top of the report.\n *\n * @param suite The root suite of the test session\n */\n protected _generateSummary(suite: Suite): void {\n const document = this.document;\n\n if (this._summaryNodes.length === 0) {\n return;\n }\n\n const duration = suite.timeElapsed!;\n const numSkippedTests =\n suite.numTests - (suite.numFailedTests + suite.numPassedTests);\n const percentPassed = Math.round(\n (1 - suite.numFailedTests / suite.numTests) * 100\n );\n let rowInfo = [\n this._suiteCount,\n this._testCount,\n formatDuration(duration),\n numSkippedTests,\n suite.numFailedTests,\n percentPassed + '%'\n ];\n\n for (let i = 0; i < rowInfo.length; ++i) {\n this._summaryNodes[i].appendChild(\n document.createTextNode(<string>rowInfo[i])\n );\n }\n\n // Create a toggle to only show failed tests\n if (suite.numFailedTests > 0) {\n this._passedFilter = this._createToggleFilter(\n 'hidePassed',\n 'Hide passed tests'\n );\n }\n\n // Create a toggle to hide skipped tests\n if (suite.numSkippedTests > 0) {\n this._skippedFilter = this._createToggleFilter(\n 'hideSkipped',\n 'Hide skipped tests'\n );\n }\n }\n\n private _createToggleFilter(className: string, label: string) {\n const document = this.document;\n\n const toggleFilter = document.createElement('div');\n toggleFilter.className = `toggleFilter`;\n\n const toggle = document.createElement('input');\n toggle.type = 'checkbox';\n\n const toggleLabel = document.createElement('label');\n toggleLabel.appendChild(toggle);\n toggleLabel.appendChild(document.createTextNode(label));\n\n toggleFilter.appendChild(toggleLabel);\n\n toggle.onclick = () => {\n if (toggle.checked) {\n addClass(document.body, className);\n } else {\n removeClass(document.body, className);\n }\n };\n\n return toggleFilter;\n }\n\n protected _injectCSS() {\n const document = this.document;\n // Prevent FOUC\n const style = document.createElement('style');\n style.innerHTML = 'body { visibility: hidden; }';\n\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = `${this.executor.config.internPath}lib/reporters/html/html.css`;\n\n document.head!.appendChild(style);\n document.head!.appendChild(link);\n }\n\n protected _getIndentLevel(node: Element) {\n // second child always has a class of indentN\n const child: Element = node.children[1];\n\n // get the indentN class\n const indent = child.className.split(' ').filter(function(name: string) {\n return name.indexOf('indent') >= 0;\n })[0];\n\n return indent ? parseInt(indent.slice('indent'.length), 10) : 0;\n }\n\n /**\n * Set the collapsed state of a node and return the new state.\n *\n * @param {DOMNode} node A suite node\n * @param {boolean} collapsed Set the collapsed state, or toggle if\n * undefined\n */\n protected _setCollapsed(node: Element, shouldCollapse?: boolean) {\n let indentDelta: number;\n let initialIndent = this._getIndentLevel(node);\n\n const collapsed = containsClass(node, 'collapsed');\n if (shouldCollapse === collapsed) {\n // Don't do anything if the current collapse state is the the same\n // as the requested\n return;\n }\n\n // Use the given collapsed state or toggle the existing state\n shouldCollapse = shouldCollapse == null ? !collapsed : shouldCollapse;\n if (shouldCollapse) {\n addClass(node, 'collapsed');\n } else {\n removeClass(node, 'collapsed');\n }\n\n // node won't exist after the last test in a suite\n while ((node = <Element>node.nextSibling)) {\n indentDelta = this._getIndentLevel(node) - initialIndent;\n\n // Stop looping when we encounter a row that's not indented more\n // than the suite being updated\n if (indentDelta <= 0) {\n break;\n }\n\n // Child suites of the suite being updated should always be\n // collapsed\n if (containsClass(node, 'suite')) {\n addClass(node, 'collapsed');\n }\n\n // Only show children one level under the suite being updated when\n // expanding\n (<HTMLElement>node).style.display =\n !shouldCollapse && indentDelta === 1 ? '' : 'none';\n }\n }\n\n @eventHandler()\n error(error: Error) {\n const document = this.document;\n let htmlError = this.formatError(error)\n .replace(/&/g, '&')\n .replace(/</g, '<');\n let errorNode = document.createElement('pre');\n errorNode.style.cssText = 'color: red; font-family: sans-serif;';\n errorNode.innerHTML =\n '<h1>Fatal error</h1>' +\n '<pre style=\"padding: 1em; background-color: #f0f0f0;\">' +\n htmlError +\n '</pre>';\n document.body.appendChild(errorNode);\n }\n\n @eventHandler()\n runStart() {\n const document = this.document;\n this._reportContainer = document.createElement('div');\n const headerNode = document.createElement('h1');\n const summaryHeaders = [\n 'Suites',\n 'Tests',\n 'Duration',\n 'Skipped',\n 'Failed',\n 'Success Rate'\n ];\n const summaryIcons: { [key: string]: string } = {\n suites: suitesIcon,\n tests: testsIcon,\n duration: timeIcon,\n skipped: skipIcon,\n failed: failIcon\n };\n\n const fragment = this._fragment;\n\n // Page header\n const headerTitle = document.createElement('span');\n headerTitle.className = 'headerTitle';\n headerTitle.innerHTML = 'Intern Test Report';\n\n headerNode.className = 'reportHeader';\n const headerLogo = document.createElement('img');\n headerLogo.className = 'headerLogo';\n headerLogo.src =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIIAAACACAMAAADwF' +\n 'UHEAAADAFBMVEUAAAAAAAAAAABVVVVAQEBmZmZVVVVtbW1gYGBVVVVmZmZdXV1q' +\n 'ampiYmJtbW1mZmZwcHBpaWljY2Nra2tmZmZtbW1oaGhvb29qampwcHBsbGxoaGh' +\n 'tbW1qampvb29ra2twcHBsbGxxcXFtbW1qampubm5ra2tvb29sbGxwcHBtbW1xcX' +\n 'Fubm5sbGxvb29tbW1wcHBtbW1wcHBubm5xcXFvb29tbW1vb29tbW1wcHBubm5wc' +\n 'HBvb29xcXFvb29tbW1wcHBubm5wcHBubm5xcXFvb29xcXFvb29ubm5wcHBubm5w' +\n 'cHBvb29xcXFvb29xcXFwcHBubm5wcHBwcHBvb29xcXFvb29ubm5xcXFwcHBvb29' +\n 'wcHBwcHBvb29xcXFwcHBubm5wcHBvb29wcHBvb29xcXFvb29xcXFwcHBvb29wcH' +\n 'Bvb29wcHBvb29xcXFwcHBxcXFwcHBvb29wcHBvb29wcHBvb29xcXFwcHBxcXFwc' +\n 'HBvb29wcHBubm5wcHBwcHBwcHBxcXFwcHBvb29wcHBvb29xcXFwcHBwcHBvb29x' +\n 'cXFwcHBvb29wcHBwcHBxcXFwcHBxcXFwcHBxcXFwcHBvb29wcHBwcHBxcXFwcHB' +\n 'xcXFwcHBxcXFwcHBwcHBwcHBxcXFwcHBxcXFwcHBxcXFwcHBwcHBxcXFwcHBxcX' +\n 'FwcHBxcXFwcHBwcHBwcHBwcHBxcXFwcHBwcHBxcXFwcHBwcHBwcHBwcHBxcXFwc' +\n 'HBxcXFwcHBxcXFwcHBwcHBwcHBwcHBxcXFwcHBxcXFwcHBxcXFwcHBwcHBxcXFw' +\n 'cHBxcXFxcXFwcHBwcHBxcXFwcHBwcHBxcXFwcHBxcXFwcHBxcXFwcHBxcXFwcHB' +\n 'wcHBxcXFwcHBxcXFwcHBxcXFwcHBxcXFwcHBwcHBxcXFwcHBxcXFwcHBxcXFwcH' +\n 'BxcXFxcXFwcHBxcXFwcHBxcXFwcHBxcXFxcXFwcHBxcXFxcXFwcHBwcHBxcXFwc' +\n 'HBxcXFxcXFwcHBxcXFxcXFwcHBxcXF+cGExAAAA/3RSTlMAAQIDBAUGBwgJCgsM' +\n 'DQ4PEBESExQVFhcYGRobHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs' +\n '8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlRVVldYWFlaW11eX2BhYmNkZWZnaGlqa2' +\n 'xtbm9wcXJzdHV2d3h5ent8fX9/gIKDhIWGh4iJi4yMjY6PkJGSk5SVlpeYmZqbn' +\n 'J2en6Gio6SlpqeoqaqrrK2ur7CxsrO0tre4ubq7vL2+v8DBwsPExcbHyMnKy8zN' +\n 'ztDR0tLT1NXW19jZ2tvc3d7f4OHi4+Tl5ufo6err7O3u7/Dx8vPz9PX29/j5+fr' +\n '6+/z8/f6oCt5hAAAJJUlEQVQYGcXBC0DU9QEH8O9xgDwEM0BTYVn4thpmvpN02W' +\n 'qVpaXNYlPM0koW+cy0BepYG5Ca1lDLMrXyEenS6GFiTiSxttTIFJsvFFB5TIEdg' +\n '919+/3+/zu5x/9/AnF3nw+aI/C2qcs27T1RXlVdW1r45ZY/TxwYAi8yDF68v47O' +\n '6velPxAKrxi06iz11HyYeC08LPSJA3Sv9t27/OA5IXPPswmKpgbCMwKfOcMmOpU' +\n 'UBA8YcYTNUDwzFK2s3UoLm6c0yQ+tKfoEm2//bWhNt+xm85mXt0MrMjxZweYrfh' +\n 'StKfYrtsDWCLSiwEy2wKk70JomN7D5GlKMaEW/Y0vsikarCI0b8+zLb11kS5SNw' +\n 'M/Uc2LGJ6f4c9Q9jhbzHzhjSwlbQbofWiJk3OZLbC1b26K52ozZcImt6etOaJae' +\n 'WRVsbUe7oukGZFvoAad6oYmi11roGSW3oikMz12mx5QPxdV12E5PqhiAq+lzmp5' +\n '1IQ7uxZXS00r7wp3uF+l5xbHQF1hAbzgaBV2Z9I78UOiIrqOXfOQPbRn0mhVwEN' +\n 'StXw8jhEmPjb7nnoenv1lFz3saNuGPvvGdheSlVZG44k56Xv2dkALHf2SizXehU' +\n 'Pmn1dALyn4BXJ9eSnuzoVpH78gfsqGejrZDMY6+cwGKAvrOeUix9KHjkCbQh/ZB' +\n 'eok+9CqkDPrQBEgr6EMxkNLoO/lQzKHvzIQigT5jiYEijj6TA1VQA33lAVh9Sx8' +\n '57gerV+kjs2DzEH3jfFvYRFjoEy+h0R76QmV7NEqmL6TAToyFraD0wNbXXvj9/f' +\n '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' +\n 'wAAAABJRU5ErkJggg==';\n\n headerNode.appendChild(headerLogo);\n headerNode.appendChild(headerTitle);\n fragment.appendChild(headerNode);\n\n // Report container\n this._reportContainer.className = 'internReportContainer';\n this._fragment.appendChild(this._reportContainer);\n\n // Summary table\n const summaryTableNode = document.createElement('div');\n summaryTableNode.className = 'summary';\n this._summaryNode = document.createElement('div');\n\n for (let i = 0; i < summaryHeaders.length; i++) {\n const cellNode = document.createElement('div');\n const cellName = summaryHeaders[i]\n .toLowerCase()\n .replace(/\\s(.)/g, (_, char) => char.toUpperCase());\n cellNode.className = 'summaryContent';\n addClass(cellNode, cellName);\n\n if (summaryIcons[cellName]) {\n const cellIcon = createSvgNode(summaryIcons[cellName], cellName);\n cellNode.appendChild(cellIcon);\n }\n\n const cellTitle = document.createElement('span');\n cellTitle.className = 'summaryTitle';\n cellTitle.appendChild(document.createTextNode(summaryHeaders[i]));\n\n const cellData = document.createElement('div');\n cellData.className = 'summaryData';\n\n this._summaryNodes[i] = document.createElement('span');\n this._summaryNode.appendChild(this._summaryNodes[i]);\n\n cellData.appendChild(this._summaryNodes[i]);\n cellNode.appendChild(cellTitle);\n cellNode.appendChild(cellData);\n summaryTableNode.appendChild(cellNode);\n }\n\n this._reportContainer.appendChild(summaryTableNode);\n\n // Controls\n this._reportControls = document.createElement('div');\n this._reportControls.className = 'reportControls';\n this._reportControls.appendChild(document.createElement('div'));\n this._reportControls.appendChild(document.createElement('div'));\n this._reportContainer.appendChild(this._reportControls);\n\n // Report table\n const reportTableNode = document.createElement('table');\n reportTableNode.className = 'report';\n this._reportNode = document.createElement('tbody');\n reportTableNode.appendChild(this._reportNode);\n this._reportContainer.appendChild(reportTableNode);\n\n // Handle clicks on table rows, which will expand or collapse rows\n this._reportNode.addEventListener('click', event => {\n let target: Element | null = <Element>event.target;\n if (!target || target.tagName === 'A') {\n return;\n }\n\n while (target && target!.tagName !== 'TR') {\n target = target!.parentElement;\n }\n if (target) {\n this._setCollapsed(target);\n }\n });\n }\n\n @eventHandler()\n suiteStart(suite: Suite) {\n // There's a top-level Suite that contains all user-created suites\n // We want to skip it\n if (!suite.hasParent) {\n return;\n }\n\n this._testsInSuite = suite.tests.length;\n this._testIndex = 0;\n this._processedTests = {};\n this._suiteCount++;\n\n const document = this.document;\n const rowNode = document.createElement('tr');\n rowNode.className = 'suite';\n\n const statusCell = document.createElement('td');\n addClass(statusCell, 'column-status');\n const statusContent = document.createElement('div');\n addClass(statusContent, 'statusContent');\n statusCell.appendChild(statusContent);\n rowNode.appendChild(statusCell);\n\n const idCell = document.createElement('td');\n idCell.className = 'column-id';\n addClass(idCell, 'title');\n\n const idText = document.createElement('div');\n idText.className = 'truncateText';\n idText.appendChild(this.createLinkNode(suite));\n idCell.appendChild(idText);\n rowNode.appendChild(idCell);\n\n this._reportNode!.appendChild(rowNode);\n\n if (this._indentLevel) {\n addClass(idCell, `indent${Math.min(this._indentLevel, 5)}`);\n addClass(rowNode, 'indent');\n }\n\n this._runningSuites[suite.id] = { node: rowNode };\n ++this._indentLevel;\n }\n\n @eventHandler()\n suiteEnd(suite: Suite) {\n const document = this.document;\n\n const numTests = suite.numTests;\n const numFailedTests = suite.numFailedTests;\n const numPassedTests = suite.numPassedTests;\n const numSkippedTests = numTests - (numFailedTests + numPassedTests);\n const hasSuiteFailures = suite.numSkippedTests !== numSkippedTests;\n const allTestsSkipped = numTests === numSkippedTests;\n\n if (!suite.hasParent) {\n this._generateSummary(suite);\n\n for (let i = 0; i < document.styleSheets.length; i++) {\n document.styleSheets[i].disabled = true;\n }\n\n // Load styles via webpack\n require('./html/html.styl');\n\n document.body.innerHTML = '';\n document.body.className = '';\n document.body.appendChild(this._fragment);\n\n const expandToggle = document.createElement('div');\n expandToggle.className = 'linkButton';\n expandToggle.textContent = 'Expand/collapse all';\n\n const reportControls = this._reportControls!;\n reportControls.firstElementChild!.appendChild(expandToggle);\n\n expandToggle.addEventListener('click', () => {\n const reportNode = this._reportNode!;\n const shouldExpand = reportNode.querySelector('.collapsed') != null;\n const suites = reportNode.querySelectorAll('.suite');\n for (let i = 0; i < suites.length; i++) {\n this._setCollapsed(suites[i], !shouldExpand);\n }\n });\n\n if (this._passedFilter) {\n reportControls.lastElementChild!.appendChild(this._passedFilter);\n } else {\n const failedNode = document.querySelector('.failed')!;\n addClass(failedNode, 'success');\n }\n\n if (this._skippedFilter) {\n reportControls.lastElementChild!.appendChild(this._skippedFilter);\n }\n\n const successRateNode = document.querySelector('.successRate')!;\n\n if (suite.numFailedTests > 0) {\n const icon = createSvgNode(failIcon);\n successRateNode.insertBefore(icon, successRateNode.firstChild);\n addClass(successRateNode, 'failed');\n } else {\n const icon = createSvgNode(passIcon);\n successRateNode.insertBefore(icon, successRateNode.firstChild);\n }\n\n if (hasSuiteFailures) {\n const skippedNode = document.querySelector('.summaryContent.skipped')!;\n addClass(skippedNode, 'failed');\n }\n\n return;\n }\n\n const rowNode = this._runningSuites[suite.id].node;\n const rowStatus = allTestsSkipped\n ? 'skipped'\n : numFailedTests > 0 || hasSuiteFailures\n ? 'failed'\n : 'passed';\n\n // Mark a suite as failed if any of its child tests failed, and\n addClass(rowNode, rowStatus);\n\n const icon = createSvgNode(rowStatus === 'skipped' ? skipIcon : suitesIcon);\n const statusCell = rowNode.querySelector('.column-status');\n const statusContent = statusCell.firstElementChild;\n statusContent.appendChild(icon);\n\n // Only suites with failed tests will be initially expanded\n this._setCollapsed(rowNode, numFailedTests === 0 && !hasSuiteFailures);\n\n let cellNode = document.createElement('td');\n\n if (numPassedTests > 0) {\n cellNode.appendChild(document.createTextNode('Passed: '));\n const testsPassed = document.createElement('span');\n testsPassed.className = 'success';\n testsPassed.innerHTML = `${numPassedTests}`;\n cellNode.appendChild(testsPassed);\n }\n\n if (numFailedTests > 0) {\n cellNode.appendChild(document.createTextNode('Failed: '));\n const testsFailed = document.createElement('span');\n testsFailed.className = 'failed';\n testsFailed.innerHTML = `${numFailedTests}`;\n cellNode.appendChild(testsFailed);\n }\n\n if (numSkippedTests > 0) {\n cellNode.appendChild(document.createTextNode('Skipped: '));\n const testsSkipped = document.createElement('span');\n testsSkipped.innerHTML = `${numSkippedTests}`;\n cellNode.appendChild(testsSkipped);\n }\n\n if (suite.error) {\n const suiteError = document.createElement('span');\n suiteError.className = 'failed';\n suiteError.innerHTML = 'Suite error!';\n cellNode.appendChild(suiteError);\n }\n\n cellNode.className = 'column-info';\n rowNode.appendChild(cellNode);\n\n // Duration cell\n cellNode = document.createElement('td');\n cellNode.className = 'column-time numeric duration';\n cellNode.appendChild(\n document.createTextNode(formatDuration(suite.timeElapsed!))\n );\n rowNode.appendChild(cellNode);\n\n --this._indentLevel;\n\n // Only update the global tracking variables for top-level suites\n if (!this._indentLevel) {\n this._testCount += numTests;\n }\n\n this._runningSuites[suite.id] = null;\n }\n\n @eventHandler()\n testEnd(test: Test) {\n if (test.id in this._processedTests) {\n return;\n }\n\n this._processedTests[test.id] = true;\n\n this._testIndex++;\n\n const document = this.document;\n const rowNode = document.createElement('tr');\n rowNode.className = 'testResult';\n\n const statusCell = document.createElement('td');\n statusCell.className = 'column-status';\n const statusContent = document.createElement('div');\n statusContent.className = 'statusContent';\n statusCell.appendChild(statusContent);\n rowNode.appendChild(statusCell);\n\n const idCell = document.createElement('td');\n idCell.className = 'column-id';\n if (this._indentLevel) {\n addClass(idCell, `indent${this._indentLevel}`);\n }\n\n const idText = document.createElement('div');\n idText.className = 'truncateText';\n idText.appendChild(this.createLinkNode(test));\n idCell.appendChild(idText);\n rowNode.appendChild(idCell);\n\n const infoCell = document.createElement('td');\n infoCell.className = 'column-info';\n\n let statusIcon: Element;\n\n if (test.error) {\n addClass(rowNode, 'failed');\n\n const errorNode = document.createElement('div');\n errorNode.className = 'testError';\n const errorText = document.createElement('pre');\n addClass(errorText, 'scrollText');\n errorText.textContent = this.formatError(test.error);\n errorNode.appendChild(errorText);\n infoCell.appendChild(errorNode);\n\n statusIcon = createSvgNode(failIcon);\n } else if (test.skipped != null) {\n addClass(rowNode, 'skipped');\n infoCell.appendChild(document.createTextNode(test.skipped || ''));\n statusIcon = createSvgNode(skipIcon);\n } else {\n addClass(rowNode, 'passed');\n statusIcon = createSvgNode(passIcon);\n }\n\n statusContent.appendChild(statusIcon);\n\n if (this._testIndex === this._testsInSuite) {\n addClass(rowNode, 'lastTest');\n }\n\n rowNode.appendChild(infoCell);\n\n const timeNode = document.createElement('td');\n timeNode.className = 'numeric';\n addClass(timeNode, 'duration');\n timeNode.appendChild(\n document.createTextNode(\n test.skipped ? 'Skipped' : formatDuration(test.timeElapsed!)\n )\n );\n rowNode.appendChild(timeNode);\n\n this._reportNode!.appendChild(rowNode);\n }\n\n private createLinkNode(obj: Suite | Test) {\n const document = this.document;\n const location = this.location;\n\n const params = new URLSearchParams(location.search.slice(1) || undefined);\n params.delete('grep');\n params.append('grep', obj.id);\n\n const a = document.createElement('a');\n a.href = location.origin + location.pathname + `?${params.toString()}`;\n a.title = obj.name!;\n a.appendChild(document.createTextNode(obj.name!));\n\n return a;\n }\n}\n\nexport interface HtmlProperties extends ReporterProperties {\n document: Document;\n location: Location;\n}\n\nexport type HtmlOptions = Partial<HtmlProperties>;\n\nfunction containsClass(node: Element, cls: string) {\n const classes = node.className.split(/\\s+/);\n return classes.indexOf(cls) !== -1;\n}\n\nfunction addClass(node: Element, cls: string) {\n if (node.classList) {\n node.classList.add(cls);\n } else {\n const classes = getClassName(node).split(/\\s+/);\n if (classes.indexOf(cls) !== -1) {\n return;\n }\n\n classes.push(cls);\n setClassName(node, classes.join(' '));\n }\n}\n\nfunction removeClass(node: Element, cls: string) {\n if (node.classList) {\n node.classList.remove(cls);\n } else {\n const classes = getClassName(node).split(/\\s+/);\n const index = classes.indexOf(cls);\n if (index === -1) {\n return;\n }\n\n classes.splice(index, 1);\n setClassName(node, classes.join(' '));\n }\n}\n\nfunction getClassName(node: Element) {\n return node.getAttribute('class') || '';\n}\n\nfunction setClassName(node: Element, cls: string) {\n node.setAttribute('class', cls);\n}\n\nfunction pad(value: string | number, size: number): string {\n let padded = String(value);\n\n while (padded.length < size) {\n padded = '0' + padded;\n }\n\n return padded;\n}\n\n// Format a millisecond value to m:ss.SSS\n// If duration is greater than 60 minutes, value will be HHHH:mm:ss.SSS\n// (the hours value will not be converted to days)\nfunction formatDuration(duration: number): string {\n let hours = Math.floor(duration / 3600000);\n let minutes: string | number = Math.floor(duration / 60000) - hours * 60;\n let seconds = Math.floor(duration / 1000) - hours * 3600 - minutes * 60;\n let milliseconds =\n duration - hours * 3600000 - minutes * 60000 - seconds * 1000;\n let formattedValue = '';\n\n if (hours) {\n formattedValue = hours + ':';\n minutes = pad(minutes, 2);\n }\n\n formattedValue +=\n minutes + ':' + pad(seconds, 2) + '.' + pad(milliseconds, 3);\n\n return formattedValue;\n}\n\nfunction createSvgNode(svg: string, extraClass?: string) {\n const div = document.createElement('div');\n div.className = 'icon';\n div.innerHTML = svg;\n const icon = div.firstElementChild!;\n addClass(icon, 'icon');\n if (extraClass) {\n addClass(icon, extraClass);\n }\n return icon;\n}\n"]} |