{"version":3,"sources":["webpack://lazy-line-painter/webpack/universalModuleDefinition","webpack://lazy-line-painter/webpack/bootstrap","webpack://lazy-line-painter/./src/easing.js","webpack://lazy-line-painter/./src/events.js","webpack://lazy-line-painter/./src/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","easeLinear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","Math","cos","PI","easeOutSine","sin","easeInOutSine","easeInExpo","pow","easeOutExpo","easeInOutExpo","easeInCirc","sqrt","easeOutCirc","easeInOutCirc","easeInBounce","this","easeOutBounce","easeInOutBounce","EventEmitter","callback","_eventEmitterCallbacks","push","addListener","on","off","indexOf","splice","removeListener","emit","evt","_iteratorNormalCompletion","_didIteratorError","_iteratorError","undefined","_step","_iterator","iterator","next","done","err","return","trigger","_events","_interopRequireDefault","_easing","LazyLinePainter","el","config","_this","_classCallCheck","_defineProperty","document","hidden","pause","resume","classList","add","assign","strokeWidth","strokeDash","strokeColor","strokeOverColor","strokeCap","strokeJoin","strokeOpacity","delay","ease","drawSequential","speedMultiplier","reverse","paused","progress","repeat","longestDuration","log","offset","getBoundingClientRect","Events","__raf","__paths","_generatePaths","_parseDataAttrs","_updateDuration","_setupPaths","addEventListener","_onVisibilityChange","paths","Boolean","dataset","llpComposed","querySelectorAll","_uncomposed","length","path","id","replace","llpId","llpDuration","llpDelay","console","erase","_paint","cancelAnimationFrame","_this2","requestAnimationFrame","adjustStartTime","startTime","elapsedTime","onStrokeCompleteDone","style","strokeDashoffset","onStrokeStartDone","remove","prop","_setProgress","_setDelay","_setReverse","_setEase","_setRepeat","_getProgress","_updatePaths","totalDuration","_getTotalDuration","_getLongestDuration","_calcPathDurations","duration","startProgress","durationProgress","positions","_getPathPoints","_updatePosition","Number","llpReverse","llpEase","llpStrokeDash","_setStyleAttrs","llpStrokeColor","stroke","llpStrokeOpacity","llpStrokeWidth","llpStrokeCap","strokeLinecap","llpStrokeJoin","strokeLinejoin","index","_getPathLength","strokeDasharray","_getStrokeDashArray","_this3","timestamp","performance","now","_this4","linearProgress","paint","pathProgress","_getElapsedProgress","_setLine","_updateStrokeCallbacks","elapsedProgress","Easing","round","position","x","left","y","top","pathDelay","pathTotalDuration","_getTotalLength","p1","p2","getAttribute","rx","parseInt","ry","h","_getDistance","previousPos","points","totalLength","numberOfItems","currentPos","getItem","_getPolylineLength","tagName","toLowerCase","_getCircleLength","_getRectLength","_getLineLength","_getPolygonLength","getTotalLength","arr","getPointAtLength","_getStrokeDashString","dashArray","strokeDashNum","strokeDashRemainder","strokeDashString","strokeDashArray","split","strokeDashTotal","floor","join"],"mappings":"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","file":"lazy-line-painter-1.9.6.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"lazy-line-painter\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"lazy-line-painter\"] = factory();\n\telse\n\t\troot[\"lazy-line-painter\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","\nlet Easing = {\n\n easeLinear(n) {\n return n;\n },\n\n easeInQuad(n) {\n return n * n;\n },\n\n easeOutQuad(n) {\n return n * (2 - n);\n },\n\n easeInOutQuad(n) {\n n *= 2;\n if (n < 1) return 0.5 * n * n;\n return -0.5 * (--n * (n - 2) - 1);\n },\n\n easeInCubic(n) {\n return n * n * n;\n },\n\n easeOutCubic(n) {\n return --n * n * n + 1;\n },\n\n easeInOutCubic(n) {\n n *= 2;\n if (n < 1) return 0.5 * n * n * n;\n return 0.5 * ((n -= 2) * n * n + 2);\n },\n\n easeInQuart(n) {\n return n * n * n * n;\n },\n\n easeOutQuart(n) {\n return 1 - --n * n * n * n;\n },\n\n easeInOutQuart(n) {\n n *= 2;\n if (n < 1) return 0.5 * n * n * n * n;\n return -0.5 * ((n -= 2) * n * n * n - 2);\n },\n\n easeInQuint(n) {\n return n * n * n * n * n;\n },\n\n easeOutQuint(n) {\n return --n * n * n * n * n + 1;\n },\n\n easeInOutQuint(n) {\n n *= 2;\n if (n < 1) return 0.5 * n * n * n * n * n;\n return 0.5 * ((n -= 2) * n * n * n * n + 2);\n },\n\n easeInSine(n) {\n return 1 - Math.cos(n * Math.PI / 2);\n },\n\n easeOutSine(n) {\n return Math.sin(n * Math.PI / 2);\n },\n\n easeInOutSine(n) {\n return 0.5 * (1 - Math.cos(Math.PI * n));\n },\n\n easeInExpo(n) {\n return n === 0 ? 0 : Math.pow(1024, n - 1);\n },\n\n easeOutExpo(n) {\n return n === 1 ? n : 1 - Math.pow(2, -10 * n);\n },\n\n easeInOutExpo(n) {\n if (n === 0) return 0;\n if (n === 1) return 1;\n if ((n *= 2) < 1) return 0.5 * Math.pow(1024, n - 1);\n return 0.5 * (-Math.pow(2, -10 * (n - 1)) + 2);\n },\n\n easeInCirc(n) {\n return 1 - Math.sqrt(1 - n * n);\n },\n\n easeOutCirc(n) {\n return Math.sqrt(1 - --n * n);\n },\n\n easeInOutCirc(n) {\n n *= 2;\n if (n < 1) return -0.5 * (Math.sqrt(1 - n * n) - 1);\n return 0.5 * (Math.sqrt(1 - (n -= 2) * n) + 1);\n },\n\n easeInBounce(n) {\n return 1 - this.easeOutBounce(1 - n);\n },\n\n easeOutBounce(n) {\n if (n < 1 / 2.75) {\n return 7.5625 * n * n;\n } else if (n < 2 / 2.75) {\n return 7.5625 * (n -= 1.5 / 2.75) * n + 0.75;\n } else if (n < 2.5 / 2.75) {\n return 7.5625 * (n -= 2.25 / 2.75) * n + 0.9375;\n }\n return 7.5625 * (n -= 2.625 / 2.75) * n + 0.984375;\n\n },\n\n easeInOutBounce(n) {\n if (n < 0.5) return this.easeInBounce(n * 2) * 0.5;\n return this.easeOutBounce(n * 2 - 1) * 0.5 + 0.5;\n }\n};\n\nexport default Easing;\n\n","let EventEmitter = {};\n\nEventEmitter.on = function (name, callback) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n this._eventEmitterCallbacks[name] = this._eventEmitterCallbacks[name] || [];\n this._eventEmitterCallbacks[name].push(callback);\n};\nEventEmitter.addListener = EventEmitter.on;\n\nEventEmitter.off = function (name, callback) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n if (!(name in this._eventEmitterCallbacks)) return;\n const i = this._eventEmitterCallbacks[name].indexOf(callback);\n\n if (i < 0) return;\n this._eventEmitterCallbacks[name].splice(i, 1);\n};\nEventEmitter.removeListener = EventEmitter.off;\n\nEventEmitter.emit = function (name, evt) {\n this._eventEmitterCallbacks = this._eventEmitterCallbacks || {};\n if (!(name in this._eventEmitterCallbacks)) return;\n for (let callback of this._eventEmitterCallbacks[name]) {\n if (typeof callback !== 'function') return;\n callback(evt);\n }\n};\nEventEmitter.trigger = EventEmitter.emit;\n\nexport default EventEmitter;\n","/*\n * Lazy Line Painter\n * SVG Stroke animation.\n *\n * https://github.com/camoconnell/lazy-line-painter\n * http://www.camoconnell.com\n *\n * Copyright 2013-2019 Cam O'Connell\n * All rights reserved.\n *\n * Licensed under the MIT license.\n *\n */\n\nimport Events from './events';\nimport Easing from './easing';\n\nclass LazyLinePainter {\n\n /**\n * init\n * Responsible for caching user options,\n * @public\n * @param {object} opts user defined options\n */\n\n constructor(el, config) {\n\n this.el = el;\n this.el.classList.add('lazy-line-painter');\n\n this.config = Object.assign({\n\n strokeWidth: null,\n strokeDash: null,\n strokeColor: null,\n strokeOverColor: null,\n strokeCap: null,\n strokeJoin: null,\n strokeOpacity: null,\n\n delay: 0,\n ease: null,\n drawSequential: false,\n speedMultiplier: 1,\n reverse: false,\n paused: false,\n progress: 0,\n repeat: 0,\n\n longestDuration: 0,\n log: true,\n offset: this.el.getBoundingClientRect()\n\n }, config, {});\n\n Object.assign(this, Events, {});\n\n this.__raf = null;\n this.__paths = [];\n\n this._generatePaths();\n this._parseDataAttrs();\n this._updateDuration();\n this._setupPaths();\n\n document.addEventListener('visibilitychange', this._onVisibilityChange);\n }\n\n _generatePaths() {\n\n let paths;\n let composed = Boolean(this.el.dataset.llpComposed);\n\n if (composed) {\n paths = this.el.querySelectorAll('[data-llp-id]');\n } else {\n paths = this._uncomposed();\n }\n\n for (let i = 0; i < paths.length; i++) {\n\n let path = {\n el: paths[i]\n };\n\n this.__paths.push(path);\n }\n }\n\n _uncomposed() {\n let paths = this.el.querySelectorAll('path, polygon, circle, ellipse, polyline, line, rect');\n let i;\n\n for (i = 0; i < paths.length; i++) {\n let id = this.el.id.replace(/ /g, '');\n\n id = id.replace('.', '');\n id = id.replace('-', '');\n paths[i].dataset.llpId = id + '-' + i;\n\n if (!paths[i].dataset.llpDuration) {\n paths[i].dataset.llpDuration = 1000;\n }\n if (!paths[i].dataset.llpDuration) {\n paths[i].dataset.llpDelay = 0;\n }\n }\n\n if (this.config.log) {\n console.log('This lazy line is uncomposed! Visit http://lazylinepainter.info to compose your masterpiece!');\n }\n\n return paths;\n }\n\n /**\n * paint\n * Responsible for drawing path.\n * @public\n */\n\n paint(config) {\n\n // update playback arguments\n Object.assign(this.config, config);\n this._updateDuration();\n\n this.erase();\n\n // begin animation\n this._paint();\n\n // fire start callback\n this.emit('start');\n }\n\n /**\n * pause\n * Responsible for pausing path animation.\n * @public\n */\n pause() {\n if (this.config) {\n this.config.paused = true;\n }\n cancelAnimationFrame(this.__raf);\n this.emit('pause');\n }\n\n /**\n * resume\n * Responsible for resuming path animation.\n * @public\n */\n resume() {\n if (this.config && this.config.paused) {\n requestAnimationFrame(() => {\n this.adjustStartTime();\n });\n this.config.paused = false;\n this.emit('resume');\n }\n }\n\n /**\n * erase\n * Responsible for clearing path,\n * paint can still be called on the element after it has been erased.\n * @public\n */\n erase() {\n\n // reset / cancel rAF\n this.config.startTime = null;\n this.config.elapsedTime = null;\n cancelAnimationFrame(this.__raf);\n\n // reset callback\n this.config.onStrokeCompleteDone = false;\n\n // reset paused\n this.config.paused = false;\n\n // empty contents of svg\n for (let i = 0; i < this.__paths.length; i++) {\n let path = this.__paths[i];\n\n path.el.style.strokeDashoffset = path.length;\n path.onStrokeCompleteDone = false;\n path.onStrokeStartDone = false;\n }\n\n this.emit('erase');\n }\n\n /**\n * destroy\n * Responsible for removing lazyline data and element from DOM\n * @public\n */\n destroy() {\n\n // retrieve / remove data object\n this.config = null;\n\n // empty container element\n this.el.remove();\n this.el = null;\n\n }\n\n /**\n * set\n * @public\n */\n set(prop, value) {\n switch (prop) {\n case 'progress':\n this._setProgress(value);\n break;\n case 'delay':\n this._setDelay(value);\n break;\n case 'reverse':\n this._setReverse(value);\n break;\n case 'ease':\n this._setEase(value);\n break;\n case 'repeat':\n this._setRepeat(value);\n break;\n default:\n if (this.config.log) {\n console.log('property ' + prop + ' can not be set');\n }\n }\n }\n\n _setRepeat(repeat) {\n this.config.repeat = repeat;\n }\n\n _setEase(ease) {\n this.config.ease = ease;\n }\n\n _setProgress(progress) {\n this.pause();\n this.config.progress = this._getProgress(progress, this.config.ease);\n this._updatePaths();\n this.config.elapsedTime = this.config.progress * this.config.totalDuration;\n }\n\n _setDelay(delay) {\n this.config.delay = delay;\n this._updateDuration();\n }\n\n _setReverse(reverse) {\n this.config.reverse = reverse;\n this._updateDuration();\n }\n\n _updateDuration() {\n\n let totalDuration = this._getTotalDuration();\n let longestDuration = this._getLongestDuration();\n\n this.config.totalDuration = this.config.drawSequential ? totalDuration : longestDuration;\n this.config.totalDuration += this.config.delay;\n\n this._calcPathDurations();\n }\n\n _calcPathDurations() {\n\n for (let i = 0; i < this.__paths.length; i++) {\n\n let path = this.__paths[i];\n let startTime;\n\n path.progress = 0;\n\n if (this.config.reverse) {\n if (this.config.drawSequential) {\n startTime = 0;\n } else {\n startTime = this.config.totalDuration - (path.delay + path.duration);\n }\n } else {\n if (this.config.drawSequential) {\n startTime = 0;\n } else {\n startTime = this.config.delay + path.delay;\n }\n }\n\n path.startTime = startTime;\n path.startProgress = (path.startTime / this.config.totalDuration);\n path.durationProgress = (path.duration / this.config.totalDuration);\n }\n }\n\n /**\n * get\n * @public\n */\n get() {\n return this.config;\n }\n\n /**\n * resize\n * @public\n */\n resize() {\n\n this.config.offset = this.el.getBoundingClientRect();\n // this.config.scale = this.config.offset.width / this.config.width;\n\n for (let i = 0; i < this.__paths.length; i++) {\n let path = this.__paths[i];\n\n path.el.getBoundingClientRect();\n path.positions = this._getPathPoints(path.el, path.length);\n this._updatePosition(path);\n }\n }\n\n _parseDataAttrs() {\n for (let i = 0; i < this.__paths.length; i++) {\n let path = this.__paths[i];\n\n path.id = path.el.dataset.llpId;\n path.delay = Number(path.el.dataset.llpDelay) || 0;\n path.duration = Number(path.el.dataset.llpDuration) || 0;\n path.reverse = Boolean(path.el.dataset.llpReverse) || false;\n path.ease = Number(path.el.dataset.llpEase) || null;\n path.strokeDash = path.el.dataset.llpStrokeDash || null;\n path.delay *= this.config.speedMultiplier;\n path.duration *= this.config.speedMultiplier;\n\n this._setStyleAttrs(path);\n }\n }\n\n _setStyleAttrs(path) {\n\n path.strokeColor = (path.el.dataset.llpStrokeColor || this.config.strokeColor);\n if (path.strokeColor) {\n path.el.style.stroke = path.strokeColor;\n }\n\n path.strokeOpacity = (path.el.dataset.llpStrokeOpacity || this.config.strokeOpacity);\n if (path.strokeOpacity) {\n path.el.style.strokeOpacity = path.strokeOpacity;\n }\n\n path.strokeWidth = (path.el.dataset.llpStrokeWidth || this.config.strokeWidth);\n if (path.strokeWidth) {\n path.el.style.strokeWidth = path.strokeWidth;\n }\n\n path.strokeCap = (path.el.dataset.llpStrokeCap || this.config.strokeCap);\n if (path.strokeCap) {\n path.el.style.strokeLinecap = path.strokeCap;\n }\n\n path.strokeJoin = (path.el.dataset.llpStrokeJoin || this.config.strokeJoin);\n if (path.strokeJoin) {\n path.el.style.strokeLinejoin = path.strokeJoin;\n }\n }\n\n _setupPaths() {\n\n for (let i = 0; i < this.__paths.length; i++) {\n\n let path = this.__paths[i];\n\n path.index = i;\n path.length = this._getPathLength(path.el);\n path.positions = this._getPathPoints(path.el, path.length);\n\n path.el.style.strokeDasharray = this._getStrokeDashArray(path, path.length);\n path.el.style.strokeDashoffset = path.length;\n\n path.onStrokeStartDone = false;\n path.onStrokeCompleteDone = false;\n }\n };\n\n /**\n * adjustStartTime\n * Responsible for managing time.\n * @private\n * @param {number} timestamp identifies current time\n * @param {object} data contains options set on init() and paint()\n */\n adjustStartTime() {\n let timestamp = performance.now();\n\n this.config.startTime = timestamp - this.config.elapsedTime;\n requestAnimationFrame(() => {\n this._paint();\n });\n }\n\n /**\n * _paint\n * Responsible for animating paths.\n * Path incrementation is performed using requestAnimationFrame.\n * @private\n * @param {number} timestamp identifies current time\n * @param {object} data contains options set on init() and paint()\n */\n _paint() {\n\n if (!this.config) {\n return;\n }\n\n // set startTime\n if (!this.config.startTime) {\n this.config.startTime = performance.now(); // new Date()\n }\n\n this.emit('update');\n\n // set elapsedTime\n let timestamp = performance.now();\n\n this.config.elapsedTime = (timestamp - this.config.startTime);\n this.config.linearProgress = (this.config.elapsedTime / this.config.totalDuration);\n\n this.config.progress = this._getProgress(this.config.linearProgress, this.config.ease);\n // console.log(this.config.elapsedTime, ' ', this.config.totalDuration);\n\n this._updatePaths();\n\n if (this.config.linearProgress >= 0 && this.config.linearProgress <= 1) {\n this.__raf = requestAnimationFrame(() => {\n this._paint();\n });\n } else {\n if (this.config.repeat > 0) {\n this.config.repeat--;\n this.paint();\n } else if (this.config.repeat === -1) {\n this.paint();\n } else {\n this.emit('complete');\n }\n }\n }\n\n _updatePaths() {\n\n for (let i = 0; i < this.__paths.length; i++) {\n let path = this.__paths[i];\n let pathProgress = this._getElapsedProgress(path);\n\n path.progress = this._getProgress(pathProgress, path.ease);\n this._setLine(path);\n this._updatePosition(path);\n this._updateStrokeCallbacks(path);\n }\n }\n\n _getElapsedProgress(path) {\n\n let elapsedProgress;\n\n if (\n this.config.progress >= path.startProgress &&\n this.config.progress <= (path.startProgress + path.durationProgress)\n ) {\n elapsedProgress = (this.config.progress - path.startProgress) / path.durationProgress;\n } else if (this.config.progress >= (path.startProgress + path.durationProgress)) {\n elapsedProgress = 1;\n } else if (this.config.progress <= path.startProgress) {\n elapsedProgress = 0;\n }\n\n return elapsedProgress;\n }\n\n _getProgress(linearProgress, ease) {\n\n let progress = linearProgress;\n\n if (ease) {\n progress = Easing[ease](linearProgress);\n }\n return progress;\n }\n\n _setLine(path) {\n\n let el = path.el;\n let length = path.progress * path.length;\n\n if (path.reverse) {\n el.style.strokeDashoffset = -path.length + length;\n } else if (this.config.reverse) {\n el.style.strokeDashoffset = -path.length + length;\n } else {\n el.style.strokeDashoffset = (path.length - length);\n }\n }\n\n _updateStrokeCallbacks(path) {\n\n if (path.progress === 1) {\n\n if (!path.onStrokeCompleteDone) {\n path.onStrokeCompleteDone = true;\n\n this.emit('complete:' + path.id, path);\n this.emit('complete:all', path);\n }\n\n } else if (path.progress > 0.00001) {\n\n if (!path.onStrokeStartDone) {\n this.emit('start:' + path.id, path);\n this.emit('start:all', path);\n path.onStrokeStartDone = true;\n }\n\n this.emit('update:' + path.id, path);\n this.emit('update:all', path);\n }\n }\n\n /**\n * _updatePosition\n * Responsible for updating the paths x / y position.\n * @private\n */\n _updatePosition(path) {\n let index = Math.round((path.progress * (path.length - 1)));\n let position = path.positions[index];\n\n if (position) {\n path.position = {\n x: this.config.offset.left + position.x,\n y: this.config.offset.top + position.y\n };\n }\n\n }\n\n _getTotalDuration() {\n\n let totalDuration = 0;\n let paths = this.__paths;\n\n for (let i = 0; i < paths.length; i++) {\n let pathDelay = paths[i].delay || 0;\n\n totalDuration += (paths[i].duration + pathDelay);\n }\n\n return totalDuration;\n }\n\n _getLongestDuration() {\n\n let longestDuration = 0;\n let paths = this.__paths;\n\n for (let i = 0; i < paths.length; i++) {\n let pathTotalDuration = paths[i].delay + paths[i].duration;\n\n if (pathTotalDuration > longestDuration) {\n longestDuration = pathTotalDuration;\n }\n }\n\n return longestDuration;\n };\n\n /**\n * _getPathLength\n * Responsible for returning a svg path length.\n * @return {number} path length\n */\n _getPathLength(el) {\n return this._getTotalLength(el); // el.getTotalLength());\n }\n\n _getDistance(p1, p2) {\n return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n }\n\n _getCircleLength(el) {\n return Math.PI * 2 * el.getAttribute('r');\n }\n\n _getEllipseLength(el) {\n let rx = parseInt(el.getAttribute('rx'), 1);\n let ry = parseInt(el.getAttribute('ry'), 1);\n let h = Math.pow((rx - ry), 2) / Math.pow((rx + ry), 2);\n let totalLength = (Math.PI * (rx + ry)) * (1 + ((3 * h) / (Math.sqrt(4 - (3 * h)))));\n\n return totalLength;\n }\n\n _getRectLength(el) {\n return (el.getAttribute('width') * 2) + (el.getAttribute('height') * 2);\n }\n\n _getLineLength(el) {\n return this._getDistance(\n {\n x: el.getAttribute('x1'),\n y: el.getAttribute('y1')\n },\n {\n x: el.getAttribute('x2'),\n y: el.getAttribute('y2')\n }\n );\n }\n\n _getPolylineLength(el) {\n const points = el.points;\n let totalLength = 0;\n let previousPos;\n\n for (let i = 0 ; i < points.numberOfItems; i++) {\n const currentPos = points.getItem(i);\n\n if (i > 0) {\n totalLength += this._getDistance(previousPos, currentPos);\n }\n previousPos = currentPos;\n }\n return totalLength;\n }\n\n _getPolygonLength(el) {\n const points = el.points;\n\n return this._getPolylineLength(el) + this._getDistance(points.getItem(points.numberOfItems - 1), points.getItem(0));\n }\n\n _getTotalLength(el) {\n\n let length;\n\n let tagName = el.tagName.toLowerCase();\n\n switch (tagName) {\n case 'circle':\n length = this._getCircleLength(el);\n break;\n case 'rect':\n length = this._getRectLength(el);\n break;\n case 'line':\n length = this._getLineLength(el);\n break;\n case 'polyline':\n length = this._getPolylineLength(el);\n break;\n case 'polygon':\n length = this._getPolygonLength(el);\n break;\n default:\n length = el.getTotalLength();\n }\n\n return length;\n }\n\n /**\n * _getPathPoints\n * Responsible for returning a svg path coords.\n * @return {array} path coords\n */\n _getPathPoints(el, length) {\n\n let arr = [];\n\n for (let i = 0; i < length; i++) {\n let position = el.getPointAtLength(i);\n\n arr.push({\n x: position.x,\n y: position.y\n });\n };\n return arr;\n }\n\n /**\n * _getStrokeDashArray\n * @private\n */\n _getStrokeDashArray(path, length) {\n let strokeDash;\n\n if (path.strokeDash) {\n strokeDash = this._getStrokeDashString(path.strokeDash, length);\n } else if (this.config.strokeDash) {\n strokeDash = this._getStrokeDashString(this.config.strokeDash, length);\n } else {\n strokeDash = length + ' ' + length;\n };\n return strokeDash;\n }\n\n /**\n * _getStrokeDashString\n * @private\n */\n _getStrokeDashString(dashArray, length) {\n let strokeDashString = '';\n let strokeDashArray = dashArray.split(',');\n\n let strokeDashTotal = 0;\n let strokeDashNum;\n let strokeDashRemainder;\n\n for (let i = strokeDashArray.length - 1; i >= 0; i--) {\n strokeDashTotal += Number(strokeDashArray[i]);\n };\n strokeDashNum = Math.floor(length / strokeDashTotal);\n strokeDashRemainder = length - (strokeDashNum * strokeDashTotal);\n for (let i = 0; i < strokeDashNum ; i++) {\n strokeDashString += (dashArray + ', ');\n };\n let preArray = strokeDashString + strokeDashRemainder + ', ' + (length + 2);\n\n return preArray.split(',').join('px,') + 'px';\n }\n\n _onVisibilityChange = () => {\n if (document.hidden) {\n this.pause();\n } else {\n this.resume();\n }\n }\n\n}\nwindow.LazyLinePainter = LazyLinePainter;\nexport default LazyLinePainter;\n"],"sourceRoot":""}