{"version":3,"file":"page.js","sources":["../../src/js/page/utils.js","../../src/js/page/ui/pan-zoom.js","../../src/js/page/ui/results.js","../../node_modules/rollup-plugin-node-builtins/src/es6/events.js","../../src/js/utils/storage.js","../../src/js/page/worker-messenger.js","../../src/js/page/gzip.js","../../src/js/page/svg-file.js","../../src/js/page/ui/svg-output.js","../../src/js/page/ui/code-output.js","../../src/js/page/prism.js","../../src/js/page/ui/output.js","../../src/js/page/ui/ripple.js","../../src/js/page/ui/spinner.js","../../src/js/page/ui/floating-action-button.js","../../src/js/page/ui/download-button.js","../../src/js/page/ui/copy-button.js","../../src/js/page/ui/bg-fill-button.js","../../src/js/page/ui/material-slider.js","../../src/js/page/ui/settings.js","../../src/js/page/ui/main-menu.js","../../src/js/page/ui/toasts.js","../../src/js/page/ui/file-drop.js","../../src/js/page/ui/preloader.js","../../src/js/page/ui/changelog.js","../../src/js/page/ui/results-container.js","../../src/js/page/ui/view-toggler.js","../../src/js/page/results-cache.js","../../src/js/page/ui/main-ui.js","../../src/js/page/main-controller.js","../../src/js/page/svgo.js","../../src/js/page/index.js"],"sourcesContent":["\"use strict\";\n\nexport const domReady = new Promise(resolve => {\n function checkState() {\n if (document.readyState != 'loading') resolve();\n }\n document.addEventListener('readystatechange', checkState);\n checkState();\n});\n\nconst range = document.createRange();\nrange.selectNode(document.documentElement);\n\nexport function strToEl(str) {\n const frag = range.createContextualFragment(str);\n return frag.children[0];\n}\n\nconst entityMap = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': '"',\n \"'\": ''',\n \"/\": '/'\n};\n\nexport function escapeHTML(str) {\n return String(str).replace(/[&<>\"'\\/]/g, s => entityMap[s]);\n}\n\nexport function escapeHtmlTag(strings, ...values) {\n values = values.map(s => escapeHTML(s));\n return strings.reduce((str, val, i) => str += val + (values[i] || ''), '');\n};\n\nexport function readFileAsText(file) {\n return new Response(file).text();\n};\n\nfunction transitionClassFunc({removeClass = false}={}) {\n return function(el, className = 'active', transitionClass = 'transition') {\n if (removeClass) {\n if (!el.classList.contains(className)) return Promise.resolve();\n }\n else {\n if (el.classList.contains(className)) return Promise.resolve();\n }\n\n return new Promise(resolve => {\n const listener = event => {\n if (event.target != el) return;\n el.removeEventListener('webkitTransitionEnd', listener);\n el.removeEventListener('transitionend', listener);\n el.classList.remove(transitionClass);\n resolve();\n };\n\n el.classList.add(transitionClass);\n\n requestAnimationFrame(() => {\n el.addEventListener('webkitTransitionEnd', listener);\n el.addEventListener('transitionend', listener);\n el.classList[removeClass ? 'remove' : 'add'](className);\n });\n });\n }\n}\n\nexport const transitionToClass = transitionClassFunc();\nexport const transitionFromClass = transitionClassFunc({removeClass: true});\n\nexport function loadCss(url) {\n return new Promise((resolve, reject) => {\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = url;\n\n link.addEventListener('load', () => resolve());\n link.addEventListener('error', () => reject());\n\n document.head.appendChild(link);\n });\n};\n\nexport function trackFocusMethod() {\n var focusMethod = 'mouse';\n\n document.body.addEventListener('focus', event => {\n event.target.classList.add(focusMethod == 'key' ? 'key-focused' : 'mouse-focused');\n }, true);\n\n document.body.addEventListener('blur', event => {\n event.target.classList.remove('key-focused');\n event.target.classList.remove('mouse-focused');\n }, true);\n\n document.body.addEventListener('keydown', () => {\n focusMethod = 'key';\n }, true);\n\n document.body.addEventListener('mousedown', () => {\n focusMethod = 'mouse';\n }, true);\n};\n","function getXY(obj) {\n return {\n x: obj.pageX,\n y: obj.pageY\n };\n}\n\nfunction touchDistance(touch1, touch2) {\n const dx = Math.abs(touch2.x - touch1.x);\n const dy = Math.abs(touch2.y - touch1.y);\n return Math.sqrt(dx*dx + dy*dy);\n}\n\nfunction getMidpoint(point1, point2) {\n return {\n x: (point1.x + point2.x) / 2,\n y: (point1.y + point2.y) / 2\n };\n}\n\nfunction getPoints(event) {\n if (event.touches) {\n return Array.from(event.touches).map(t => getXY(t));\n }\n else {\n return [getXY(event)];\n }\n}\n\nexport default class PanZoom {\n constructor(target, {\n eventArea = target,\n shouldCaptureFunc = () => true\n }={}) {\n this._target = target;\n this._shouldCaptureFunc = shouldCaptureFunc;\n this._dx = 0;\n this._dy = 0;\n this._scale = 1;\n this._active = 0;\n this._lastPoints = [];\n\n // bind\n [\n '_onPointerDown',\n '_onPointerMove',\n '_onPointerUp'\n ].forEach(funcName => {\n this[funcName] = this[funcName].bind(this);\n })\n\n // bound events\n eventArea.addEventListener('mousedown', this._onPointerDown);\n eventArea.addEventListener('touchstart', this._onPointerDown);\n\n // unbonud\n eventArea.addEventListener('wheel', e => this._onWheel(e));\n }\n\n reset() {\n this._dx = 0;\n this._dy = 0;\n this._scale = 1;\n this._update();\n }\n\n _onWheel(event) {\n if (!this._shouldCaptureFunc(event.target)) return;\n event.preventDefault();\n\n const boundingRect = this._target.getBoundingClientRect();\n let delta = event.deltaY;\n\n if (event.deltaMode === 1) { // 1 is \"lines\", 0 is \"pixels\"\n // Firefox uses \"lines\" when mouse is connected\n delta *= 15;\n }\n\n // stop mouse wheel producing huge values\n delta = Math.max(Math.min(delta, 60), -60);\n\n const scaleDiff = (delta / 300) + 1;\n\n // avoid to-small values\n if (this._scale * scaleDiff < 0.05) return;\n\n this._scale *= scaleDiff;\n this._dx -= (event.pageX - boundingRect.left) * (scaleDiff - 1);\n this._dy -= (event.pageY - boundingRect.top) * (scaleDiff - 1);\n this._update();\n }\n\n _onFirstPointerDown(event) {\n document.addEventListener('mousemove', this._onPointerMove);\n document.addEventListener('mouseup', this._onPointerUp);\n document.addEventListener('touchmove', this._onPointerMove);\n document.addEventListener('touchend', this._onPointerUp);\n }\n\n _onPointerDown(event) {\n if (event.type == 'mousedown' && event.which != 1) return;\n if (!this._shouldCaptureFunc(event.target)) return;\n event.preventDefault();\n\n this._lastPoints = getPoints(event);\n this._active++;\n\n if (this._active === 1) {\n this._onFirstPointerDown(event);\n }\n }\n\n _onPointerMove(event) {\n event.preventDefault();\n const points = getPoints(event);\n const averagePoint = points.reduce(getMidpoint);\n const averageLastPoint = this._lastPoints.reduce(getMidpoint);\n const boundingRect = this._target.getBoundingClientRect();\n\n this._dx += averagePoint.x - averageLastPoint.x;\n this._dy += averagePoint.y - averageLastPoint.y;\n\n if (points[1]) {\n const scaleDiff = touchDistance(points[0], points[1]) / touchDistance(this._lastPoints[0], this._lastPoints[1]);\n this._scale *= scaleDiff;\n this._dx -= (averagePoint.x - boundingRect.left) * (scaleDiff - 1);\n this._dy -= (averagePoint.y - boundingRect.top) * (scaleDiff - 1);\n }\n\n this._update();\n this._lastPoints = points;\n }\n\n _update() {\n this._target.style.WebkitTransform = this._target.style.transform\n = `translate3d(${this._dx}px, ${this._dy}px, 0) scale(${this._scale})`;\n }\n\n _onPointerUp(event) {\n event.preventDefault();\n this._active--;\n this._lastPoints.pop();\n\n if (this._active) {\n this._lastPoints = getPoints(event);\n return;\n }\n\n document.removeEventListener('mousemove', this._onPointerMove);\n document.removeEventListener('mouseup', this._onPointerUp);\n document.removeEventListener('touchmove', this._onPointerMove);\n document.removeEventListener('touchend', this._onPointerUp);\n }\n}\n","import { strToEl } from '../utils';\n\nfunction round(num, places) {\n const mult = Math.pow(10, places);\n return Math.floor(Math.round(num * mult)) / mult;\n}\n\nfunction humanSize(bytes) {\n if (bytes < 1024) {\n return bytes + ' bytes';\n }\n else {\n return round(bytes / 1024, 2) + 'k';\n }\n}\n\nexport default class Results {\n constructor() {\n this.container = strToEl(\n '
' +\n '