Open in github.dev
Open in a new github.dev tab
Permalink
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
purecounterjs/dist/purecounter_vanilla.js.map
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1 lines (1 sloc)
24.2 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{"version":3,"file":"/dist/purecounter_vanilla.js","mappings":"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","sources":["webpack://PureCounter/webpack/universalModuleDefinition","webpack://PureCounter/./js/purecounter_vanilla.js","webpack://PureCounter/webpack/bootstrap","webpack://PureCounter/webpack/startup"],"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([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"PureCounter\"] = factory();\n\telse\n\t\troot[\"PureCounter\"] = factory();\n})(self, function() {\nreturn ","/** This function is for create and merge configuration */\r\nfunction setOptions(config, baseConfig = {}) {\r\n // Create new Config object;\r\n var newConfig = {};\r\n\r\n // Loop config items to set it value into newConfig\r\n for (var key in config) {\r\n // if baseConfig is set, only accept the baseconfig property\r\n if (baseConfig != {} && !baseConfig.hasOwnProperty(key)) continue;\r\n // parse the config value\r\n var val = parseValue(config[key]);\r\n // set the newConfig property value\r\n newConfig[key] = val;\r\n // Exclusive for 'duration' or 'pulse' property, recheck the value\r\n // If it's not a boolean, just set it to milisecond unit\r\n if (key.match(/duration|pulse/)) {\r\n newConfig[key] = typeof val != \"boolean\" ? val * 1000 : val;\r\n }\r\n }\r\n\r\n // Finally, we can just merge the baseConfig (if any), with newConfig.\r\n return Object.assign({}, baseConfig, newConfig);\r\n}\r\n\r\n/** This is the the counter method */\r\nfunction startCounter(element, config) {\r\n // First, get the increments step\r\n var incrementsPerStep =\r\n (config.end - config.start) / (config.duration / config.delay);\r\n // Next, set the counter mode (Increment or Decrement)\r\n var countMode = \"inc\";\r\n\r\n // Set mode to 'decrement' and 'increment step' to minus if start is larger than end\r\n if (config.start > config.end) {\r\n countMode = \"dec\";\r\n incrementsPerStep *= -1;\r\n }\r\n\r\n // Next, determine the starting value\r\n var currentCount = parseValue(config.start);\r\n // And then print it's value to the page\r\n element.innerHTML = formatNumber(currentCount, config);\r\n\r\n // If the config 'once' is true, then set the 'duration' to 0\r\n if (config.once === true) {\r\n element.setAttribute(\"data-purecounter-duration\", 0);\r\n }\r\n\r\n // Now, start counting with counterWorker using Interval method based on delay\r\n var counterWorker = setInterval(() => {\r\n // First, determine the next value base on current value, increment value, and count mode\r\n var nextNum = nextNumber(currentCount, incrementsPerStep, countMode);\r\n // Next, print that value to the page\r\n element.innerHTML = formatNumber(nextNum, config);\r\n // Now set that value to the current value, because it's already printed\r\n currentCount = nextNum;\r\n\r\n // If the value is larger or less than the 'end' (base on mode), then print the end value and stop the Interval\r\n if (\r\n (currentCount >= config.end && countMode == \"inc\") ||\r\n (currentCount <= config.end && countMode == \"dec\")\r\n ) {\r\n element.innerHTML = formatNumber(config.end, config);\r\n // If 'pulse' is set ignore the 'once' config\r\n if (config.pulse) {\r\n // First set the 'duration' to zero\r\n element.setAttribute(\"data-purecounter-duration\", 0);\r\n // Next, use timeout to reset it duration back based on 'pulse' config\r\n setTimeout(() => {\r\n element.setAttribute(\r\n \"data-purecounter-duration\",\r\n config.duration / 1000\r\n );\r\n }, config.pulse);\r\n }\r\n clearInterval(counterWorker);\r\n }\r\n }, config.delay);\r\n}\r\n\r\n/** This function is to get the next number */\r\nfunction nextNumber(number, steps, mode = \"inc\") {\r\n // First, get the exact value from the number and step (int or float)\r\n number = parseValue(number);\r\n steps = parseValue(steps);\r\n\r\n // Last, get the next number based on current number, increment step, and count mode\r\n // Always return it as float\r\n return parseFloat(mode === \"inc\" ? number + steps : number - steps);\r\n}\r\n\r\n/** This function is to convert number into currency format */\r\nfunction convertNumber(number, config) {\r\n /** Use converter if filesizing or currency is on */\r\n if (config.filesizing || config.currency) {\r\n number = Math.abs(Number(number)); // Get the absolute value of number\r\n\r\n var baseNumber = 1000, // Base multiplying treshold\r\n symbol =\r\n config.currency && typeof config.currency === \"string\"\r\n ? config.currency\r\n : \"\", // Set the Currency Symbol (if any)\r\n limit = config.decimals || 1, // Set the decimal limit (default is 1)\r\n unit = [\"\", \"K\", \"M\", \"B\", \"T\"], // Number unit based exponent threshold\r\n value = \"\"; // Define value variable\r\n\r\n /** Changes base number and its unit for filesizing */\r\n if (config.filesizing) {\r\n baseNumber = 1024; // Use 1024 instead of 1000\r\n unit = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\"]; // Change to 'bytes' unit\r\n }\r\n\r\n /** Set value based on the threshold */\r\n for (var i = 4; i >= 0; i--) {\r\n // If the exponent is 0\r\n if (i === 0) value = `${number.toFixed(limit)} ${unit[i]}`;\r\n // If the exponent is above zero\r\n if (number >= getFilesizeThreshold(baseNumber, i)) {\r\n value = `${(number / getFilesizeThreshold(baseNumber, i)).toFixed(\r\n limit\r\n )} ${unit[i]}`;\r\n break;\r\n }\r\n }\r\n\r\n // Apply symbol before the value and return it as string\r\n return symbol + value;\r\n } else {\r\n /** Return its value as float if not using filesizing or currency*/\r\n return parseFloat(number);\r\n }\r\n}\r\n\r\n/** This function will get the given base. */\r\nfunction getFilesizeThreshold(baseNumber, index) {\r\n return Math.pow(baseNumber, index);\r\n}\r\n\r\n/** This function is to get the last formated number */\r\nfunction applySeparator(value, config) {\r\n // Get replaced value based on it's separator/symbol.\r\n function replacedValue(val, separator) {\r\n // Well this is my regExp for detecting the Thausands Separator\r\n // I use 3 groups to determine it's separator\r\n // THen the group 4 is to get the decimals value\r\n var separatorRegExp =\r\n /^(?:(\\d{1,3},(?:\\d{1,3},?)*)|(\\d{1,3}\\.(?:\\d{1,3}\\.?)*)|(\\d{1,3}(?:\\s\\d{1,3})*))([\\.,]?\\d{0,2}?)$/gi;\r\n\r\n return val.replace(separatorRegExp, function (match, g1, g2, g3, g4) {\r\n // set initial result value\r\n var result = \"\",\r\n sep = \"\";\r\n if (g1 !== undefined) {\r\n // Group 1 is using comma as thausands separator, and period as decimal separator\r\n result = g1.replace(new RegExp(/,/gi, \"gi\"), separator);\r\n sep = \",\";\r\n } else if (g2 !== undefined) {\r\n // Group 2 is using period as thausands separator, and comma as decimal separator\r\n result = g2.replace(new RegExp(/\\./gi, \"gi\"), separator);\r\n } else if (g3 !== undefined) {\r\n // Group 3 is using space as thausands separator, and comma as decimal separator\r\n result = g3.replace(new RegExp(/ /gi, \"gi\"), separator);\r\n }\r\n if (g4 !== undefined) {\r\n var decimal = sep !== \",\" ? (separator !== \",\" ? \",\" : \".\") : \".\";\r\n result +=\r\n g4 !== undefined\r\n ? g4.replace(new RegExp(/\\.|,/gi, \"gi\"), decimal)\r\n : \"\";\r\n }\r\n // Returning result value;\r\n return result;\r\n });\r\n }\r\n // If config formater is not false, then apply separator\r\n if (config.formater) {\r\n // Now get the separator symbol\r\n var symbol = config.separator // if config separator is setted\r\n ? typeof config.separator === \"string\" // Check the type of value\r\n ? config.separator // If it's type is string, then apply it's value\r\n : \",\" // If it's not string (boolean), then apply comma as default separator\r\n : \"\";\r\n // Special exception when locale is not 'en-US' but separator value is 'true'\r\n // Use it's default locale thausands separator.\r\n if (config.formater !== \"en-US\" && config.separator === true) {\r\n return value;\r\n }\r\n // Return the replaced Value based on it's symbol\r\n return replacedValue(value, symbol);\r\n }\r\n // If config formater is false, then return it's default value\r\n return value;\r\n}\r\n\r\n/** This function is to get formated number to be printed in the page */\r\nfunction formatNumber(number, config) {\r\n // This is the configuration for 'toLocaleString' method\r\n var strConfig = {\r\n minimumFractionDigits: config.decimals,\r\n maximumFractionDigits: config.decimals,\r\n };\r\n // Get locale from config formater\r\n var locale = typeof config.formater === \"string\" ? config.formater : undefined;\r\n\r\n // Set and convert the number base on its config.\r\n number = convertNumber(number, config);\r\n\r\n // Now format the number to string base on it's locale\r\n number = config.formater\r\n ? number.toLocaleString(locale, strConfig)\r\n : parseInt(number).toString();\r\n\r\n // Last, apply the number separator using number as string\r\n return applySeparator(number, config);\r\n}\r\n\r\n/** This function is to get the parsed value */\r\nfunction parseValue(data) {\r\n // If number with dot (.), will be parsed as float\r\n if (/^[0-9]+\\.[0-9]+$/.test(data)) {\r\n return parseFloat(data);\r\n }\r\n // If just number, will be parsed as integer\r\n if (/^[0-9]+$/.test(data)) {\r\n return parseInt(data);\r\n }\r\n // If it's boolean string, will be parsed as boolean\r\n if (/^true|false/i.test(data)) {\r\n return /^true/i.test(data);\r\n }\r\n // Return it's value as default\r\n return data;\r\n}\r\n\r\n// This function is to detect the element is in view or not.\r\nfunction elementIsInView(element) {\r\n var top = element.offsetTop;\r\n var left = element.offsetLeft;\r\n var width = element.offsetWidth;\r\n var height = element.offsetHeight;\r\n\r\n while (element.offsetParent) {\r\n element = element.offsetParent;\r\n top += element.offsetTop;\r\n left += element.offsetLeft;\r\n }\r\n\r\n return (\r\n top >= window.pageYOffset &&\r\n left >= window.pageXOffset &&\r\n top + height <= window.pageYOffset + window.innerHeight &&\r\n left + width <= window.pageXOffset + window.innerWidth\r\n );\r\n}\r\n\r\n/** Just some condition to check browser Intersection Support */\r\nfunction intersectionListenerSupported() {\r\n return (\r\n \"IntersectionObserver\" in window &&\r\n \"IntersectionObserverEntry\" in window &&\r\n \"intersectionRatio\" in window.IntersectionObserverEntry.prototype\r\n );\r\n}\r\n\r\n/** Initialize PureCounter */\r\nfunction PureCounter(options = {}) {\r\n var configs = {\r\n start: 0, // Starting number [uint]\r\n end: 100, // End number [uint]\r\n duration: 2000, // Count duration [milisecond]\r\n delay: 10, // Count delay [milisecond]\r\n once: true, // Counting at once or recount when scroll [boolean]\r\n pulse: false, // Pulse count for certain time [boolean|milisecond]\r\n decimals: 0, // Decimal places [uint]\r\n legacy: true, // If this is true it will use the scroll event listener on browsers\r\n filesizing: false, // Is it for filesize?\r\n currency: false, // Is it for currency? Use it for set the symbol too [boolean|char|string]\r\n separator: false, // Do you want to use thausands separator? use it for set the symbol too [boolean|char|string]\r\n formater: \"us-US\", // Number toLocaleString locale/formater, by default is \"en-US\" [string|boolean:false]\r\n selector: \".purecounter\", // HTML query selector for spesific element\r\n };\r\n var configOptions = setOptions(options, configs);\r\n\r\n function registerEventListeners() {\r\n /** Get all elements with class 'purecounter' */\r\n var elements = document.querySelectorAll(configOptions.selector);\r\n /** Return if no elements */\r\n if (elements.length === 0) {\r\n return;\r\n }\r\n\r\n /** Run animateElements base on Intersection Support */\r\n if (intersectionListenerSupported()) {\r\n var intersectObserver = new IntersectionObserver(animateElements.bind(this), {\r\n root: null,\r\n rootMargin: \"20px\",\r\n threshold: 0.5,\r\n });\r\n\r\n elements.forEach((element) => {\r\n intersectObserver.observe(element);\r\n });\r\n } else {\r\n if (window.addEventListener) {\r\n animateLegacy(elements);\r\n window.addEventListener(\r\n \"scroll\",\r\n function (e) {\r\n animateLegacy(elements);\r\n },\r\n { passive: true }\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** This legacy to make Purecounter use very lightweight & fast */\r\n function animateLegacy(elements) {\r\n elements.forEach((element) => {\r\n var config = parseConfig(element);\r\n if (config.legacy === true && elementIsInView(element)) {\r\n animateElements([element]);\r\n }\r\n });\r\n }\r\n\r\n /** Main Element Count Animation */\r\n function animateElements(elements, observer) {\r\n elements.forEach((element) => {\r\n var elm = element.target || element; // Just make sure which element will be used\r\n var elementConfig = parseConfig(elm); // Get config value on that element\r\n\r\n // If duration is less than or equal zero, just format the 'end' value\r\n if (elementConfig.duration <= 0) {\r\n return (elm.innerHTML = formatNumber(elementConfig.end, elementConfig));\r\n }\r\n\r\n if (\r\n (!observer && !elementIsInView(element)) ||\r\n (observer && element.intersectionRatio < 0.5)\r\n ) {\r\n var value =\r\n elementConfig.start > elementConfig.end\r\n ? elementConfig.end\r\n : elementConfig.start;\r\n return (elm.innerHTML = formatNumber(value, elementConfig));\r\n }\r\n\r\n // If duration is more than 0, then start the counter\r\n setTimeout(() => {\r\n return startCounter(elm, elementConfig);\r\n }, elementConfig.delay);\r\n });\r\n }\r\n\r\n /** This function is to generate the element Config */\r\n function parseConfig(element) {\r\n // First, we need to declare the base Config\r\n // This config will be used if the element doesn't have config\r\n var baseConfig = configOptions;\r\n\r\n // Next, get all 'data-precounter-*' attributes value. Store to array\r\n var configValues = [].filter.call(element.attributes, function (attr) {\r\n return /^data-purecounter-/.test(attr.name);\r\n });\r\n\r\n // Now, we create element config as an object\r\n var elementConfig =\r\n configValues.length != 0\r\n ? Object.assign(\r\n {},\r\n ...configValues.map(({ name, value }) => {\r\n var key = name.replace(\"data-purecounter-\", \"\").toLowerCase(),\r\n val = parseValue(value);\r\n\r\n return { [key]: val };\r\n })\r\n )\r\n : {};\r\n\r\n // Last setOptions and return\r\n return setOptions(elementConfig, baseConfig);\r\n }\r\n\r\n /** Run the initial function */\r\n registerEventListeners();\r\n}\r\n\r\nmodule.exports = PureCounter;\r\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(638);\n"],"names":["root","factory","exports","module","define","amd","self","setOptions","config","baseConfig","newConfig","key","hasOwnProperty","val","parseValue","match","Object","assign","startCounter","element","incrementsPerStep","end","start","duration","delay","countMode","currentCount","innerHTML","formatNumber","once","setAttribute","counterWorker","setInterval","nextNum","number","steps","mode","parseFloat","nextNumber","pulse","setTimeout","clearInterval","getFilesizeThreshold","baseNumber","index","Math","pow","strConfig","minimumFractionDigits","decimals","maximumFractionDigits","locale","formater","undefined","filesizing","currency","abs","Number","symbol","limit","unit","value","i","toFixed","convertNumber","separator","replace","g1","g2","g3","g4","result","sep","RegExp","decimal","applySeparator","toLocaleString","parseInt","toString","data","test","elementIsInView","top","offsetTop","left","offsetLeft","width","offsetWidth","height","offsetHeight","offsetParent","window","pageYOffset","pageXOffset","innerHeight","innerWidth","intersectionListenerSupported","IntersectionObserverEntry","prototype","options","configs","legacy","selector","configOptions","registerEventListeners","elements","document","querySelectorAll","length","intersectObserver","IntersectionObserver","animateElements","bind","this","rootMargin","threshold","forEach","observe","addEventListener","animateLegacy","e","passive","parseConfig","observer","elm","target","elementConfig","intersectionRatio","configValues","filter","call","attributes","attr","name","map","toLowerCase","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""} |