light-odometer 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.d.ts +3 -3
- package/dist/main.js +1 -1
- package/package.json +1 -1
package/dist/main.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @property {string} [selector] - The selector for the odometer elements.
|
|
5
5
|
* @property {boolean} [auto] - Whether to automatically initialize odometers.
|
|
6
6
|
*/
|
|
7
|
-
interface
|
|
7
|
+
interface LightOdometerGlobalOptions {
|
|
8
8
|
selector?: string;
|
|
9
9
|
auto?: boolean;
|
|
10
10
|
}
|
|
@@ -38,7 +38,7 @@ interface FormatObject {
|
|
|
38
38
|
}
|
|
39
39
|
declare global {
|
|
40
40
|
interface Window extends WindowOrWorkerGlobalScope {
|
|
41
|
-
odometerOptions?:
|
|
41
|
+
odometerOptions?: LightOdometerGlobalOptions;
|
|
42
42
|
}
|
|
43
43
|
interface HTMLElement {
|
|
44
44
|
odometer?: LightOdometer;
|
|
@@ -47,7 +47,7 @@ declare global {
|
|
|
47
47
|
//#endregion
|
|
48
48
|
//#region src/core/odometer.d.ts
|
|
49
49
|
declare class LightOdometer {
|
|
50
|
-
static options:
|
|
50
|
+
static options: LightOdometerGlobalOptions;
|
|
51
51
|
options: LightOdometerOptions;
|
|
52
52
|
el: HTMLElement;
|
|
53
53
|
value: number;
|
package/dist/main.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=/^\(?([^)]*)\)?(?:(.)(d+))?$/;function t(e){"@babel/helpers - typeof";return t=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},t(e)}function n(e,n){if(t(e)!=`object`||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,n||`default`);if(t(i)!=`object`)return i;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(n===`string`?String:Number)(e)}function r(e){var r=n(e,`string`);return t(r)==`symbol`?r:r+``}function i(e,t,n){return(t=r(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?a(Object(n),!0).forEach(function(t){i(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function s(e){let t=document.createElement(`div`);if(t.innerHTML=e,!(t.firstElementChild instanceof HTMLElement))throw Error(`Invalid HTML: No valid root element found.`);return t.firstElementChild}function c(e,t){return e.className=e.className.replace(RegExp(`(^| )${t.split(` `).join(`|`)}( |$)`,`gi`),` `),e.className}function l(e,t){return c(e,t),e.className+=` ${t}`}function u(e,t){let n=new CustomEvent(t,{bubbles:!0,cancelable:!0});e.dispatchEvent(n)}function d(){var e,t;let n=(e=window.performance)==null||(t=e.now)==null?void 0:t.call(e);return n==null?+new Date:n}function f(e,t){return t!=null||(t=0),t?(e*=10**t,e+=.5,e=Math.floor(e),e/=10**t):Math.round(e)}function p(e){return e<0?Math.ceil(e):Math.floor(e)}function m(e){setTimeout(()=>{window.odometerOptions&&(e.options=o(o({},e.options),window.odometerOptions))},0)}function h(e){document.addEventListener(`DOMContentLoaded`,function(){e.options.auto!==!1&&e.init()},!1)}var g,_=class t{constructor(e){var n,r;if(i(this,`options`,void 0),i(this,`el`,void 0),i(this,`value`,0),i(this,`inside`,void 0),i(this,`observer`,void 0),i(this,`watchMutations`,!1),i(this,`transitionEndBound`,!1),i(this,`format`,{repeating:``,precision:0}),i(this,`MAX_VALUES`,void 0),i(this,`digits`,[]),i(this,`ribbons`,{}),this.options=e,this.el=this.options.el,this.el.odometer)return this.el.odometer;this.el.odometer=this,this.options=o(o({},t.options),this.options),
|
|
1
|
+
const e=/^\(?([^)]*)\)?(?:(.)(d+))?$/;function t(e){"@babel/helpers - typeof";return t=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},t(e)}function n(e,n){if(t(e)!=`object`||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,n||`default`);if(t(i)!=`object`)return i;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(n===`string`?String:Number)(e)}function r(e){var r=n(e,`string`);return t(r)==`symbol`?r:r+``}function i(e,t,n){return(t=r(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function o(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?a(Object(n),!0).forEach(function(t){i(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):a(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function s(e){let t=document.createElement(`div`);if(t.innerHTML=e,!(t.firstElementChild instanceof HTMLElement))throw Error(`Invalid HTML: No valid root element found.`);return t.firstElementChild}function c(e,t){return e.className=e.className.replace(RegExp(`(^| )${t.split(` `).join(`|`)}( |$)`,`gi`),` `),e.className}function l(e,t){return c(e,t),e.className+=` ${t}`}function u(e,t){let n=new CustomEvent(t,{bubbles:!0,cancelable:!0});e.dispatchEvent(n)}function d(){var e,t;let n=(e=window.performance)==null||(t=e.now)==null?void 0:t.call(e);return n==null?+new Date:n}function f(e,t){return t!=null||(t=0),t?(e*=10**t,e+=.5,e=Math.floor(e),e/=10**t):Math.round(e)}function p(e){return e<0?Math.ceil(e):Math.floor(e)}function m(e){setTimeout(()=>{window.odometerOptions&&(e.options=o(o({},e.options),window.odometerOptions))},0)}function h(e){document.addEventListener(`DOMContentLoaded`,function(){e.options.auto!==!1&&e.init()},!1)}var g,_=class t{constructor(e){var n,r;if(i(this,`options`,void 0),i(this,`el`,void 0),i(this,`value`,0),i(this,`inside`,void 0),i(this,`observer`,void 0),i(this,`watchMutations`,!1),i(this,`transitionEndBound`,!1),i(this,`format`,{repeating:``,precision:0}),i(this,`MAX_VALUES`,void 0),i(this,`digits`,[]),i(this,`ribbons`,{}),this.options=e,this.el=this.options.el,this.el.odometer)return this.el.odometer;this.el.odometer=this,this.options=o(o({},t.options),this.options),(n=this.options).duration!=null||(n.duration=2e3),this.MAX_VALUES=this.options.duration/33.333333333333336/2|0,this.resetFormat(),this.value=this.cleanValue((r=this.options.value)==null?``:r),this.renderInside(),this.render();try{for(let e of[`innerHTML`,`innerText`,`textContent`])this.el[e]&&Object.defineProperty(this.el,e,{get:()=>{if(e===`innerHTML`)return this.inside.outerHTML;var t,n;return(t=(n=this.inside.innerText)==null?this.inside.textContent:n)==null?``:t},set:e=>this.update(e)})}catch(e){this.watchForMutations()}}renderInside(){this.inside=document.createElement(`div`),this.inside.className=`odometer-inside`,this.el.innerHTML=``,this.el.appendChild(this.inside)}watchForMutations(){try{this.observer!=null||(this.observer=new MutationObserver(e=>{let t=this.el.innerText||``;this.renderInside(),this.render(this.value),this.update(t)})),this.watchMutations=!0,this.startWatchingMutations()}catch(e){}}startWatchingMutations(){if(this.watchMutations){var e;(e=this.observer)==null||e.observe(this.el,{childList:!0})}}stopWatchingMutations(){var e;(e=this.observer)==null||e.disconnect()}cleanValue(e){if(typeof e==`string`){var t;e=e.replace((t=this.format.radix)==null?`.`:t,`<radix>`),e=e.replace(/[.,]/g,``),e=e.replace(`<radix>`,`.`),e=parseFloat(e)||0}return f(e,this.format.precision)}bindTransitionEnd(){if(this.transitionEndBound)return;this.transitionEndBound=!0;let e=!1;this.el.addEventListener(`transitionend`,()=>e?!0:(e=!0,setTimeout(()=>{this.render(),e=!1,u(this.el,`odometerdone`)},0),!0),!1)}resetFormat(){var t;let n=(t=this.options.format)==null?`(,ddd).dd`:t;n=n||`d`;let r=e.exec(n);if(!r)throw Error(`LightOdometer: Unparsable digit format`);let[i,a,o,s]=r,c=(s==null?void 0:s.length)||0;this.format={repeating:a,radix:o,precision:c}}render(e){e!=null||(e=this.value),this.stopWatchingMutations(),this.resetFormat(),this.inside.innerHTML=``;let t=this.el.className.split(` `),n=[];for(let e of t)if(e.length){if(/^odometer(-|$)/.test(e))continue;n.push(e)}n.push(`odometer`,`odometer-auto-theme`),this.el.className=n.join(` `),this.ribbons={},this.formatDigits(e),this.startWatchingMutations()}formatDigits(e){if(this.digits=[],this.options.formatFunction){let t=this.options.formatFunction(e);for(let e of t.split(``).toReversed())if(e.match(/0-9/)){let t=this.renderDigit();t.querySelector(`.odometer-value`).innerHTML=e,this.digits.push(t),this.insertDigit(t)}else this.addSpacer(e)}else{let t=this.preservePrecision(e),n=!this.format.precision;for(let e of t.split(``).toReversed())e===`.`&&(n=!0),this.addDigit(e,n)}}preservePrecision(e){let t=e.toString();if(this.format.precision){let e=t.split(`.`);e.length===1&&(t+=`.`,e[1]=``);for(let n=0;n<this.format.precision;n++)e[1][n]||(t+=`0`)}return t}update(e){e=this.cleanValue(e);let t=e-this.value;return t?(c(this.el,`odometer-animating-up odometer-animating-down odometer-animating`),t>0?l(this.el,`odometer-animating-up`):l(this.el,`odometer-animating-down`),this.stopWatchingMutations(),this.animate(e),this.startWatchingMutations(),setTimeout(()=>{this.el.offsetHeight,l(this.el,`odometer-animating`)},0),this.value=e,this.value):this.value}renderDigit(){return s(`<span class="odometer-digit"><span class="odometer-digit-spacer">8</span><span class="odometer-digit-inner"><span class="odometer-ribbon"><span class="odometer-ribbon-inner"><span class="odometer-value"></span></span></span></span></span>`)}insertDigit(e,t){return t?this.inside.insertBefore(e,t):this.inside.children.length?this.inside.insertBefore(e,this.inside.children[0]):this.inside.appendChild(e)}addSpacer(e,t,n){let r=s(`<span class="odometer-formatting-mark"></span>`);return r.innerHTML=e,n&&l(r,n),this.insertDigit(r,t)}addDigit(e,t){if(t!=null||(t=!0),e===`-`)return this.addSpacer(e,null,`odometer-negation-mark`);if(e===`.`){var n;return this.addSpacer((n=this.format.radix)==null?`.`:n,null,`odometer-radix-mark`)}if(t){let e=!1;for(;;){if(!this.format.repeating.length){if(e)throw Error(`Bad odometer format without digits`);this.resetFormat(),e=!0}let t=this.format.repeating[this.format.repeating.length-1];if(this.format.repeating=this.format.repeating.substring(0,this.format.repeating.length-1),t===`d`)break;this.addSpacer(t)}}let r=this.renderDigit();return r.querySelector(`.odometer-value`).innerHTML=e,this.digits.push(r),this.insertDigit(r)}animate(e){this.options.animation===`count`?this.animateCount(e):this.animateSlide(e)}animateCount(e){let t=e-this.value;if(!t)return;let n=d(),r=n,i=this.value,a=()=>{if(d()-n>(this.options.duration||0)){this.value=e,this.render(),u(this.el,`odometerdone`);return}let o=d()-r;if(o>50){r=d();let e=o/(this.options.duration||0),n=t*e;i+=n,this.render(Math.round(i))}requestAnimationFrame(a)};a()}getDigitCount(...e){for(let t=0;t<e.length;t++)e[t]=Math.abs(e[t]);let t=Math.max(...e);return Math.ceil(Math.log(t+1)/Math.log(10))}getFractionalDigitCount(...e){let t=/^-?\d*\.(\d*?)0*$/;for(let n=0;n<e.length;n++){let r=e[n].toString(),i=t.exec(r);e[n]=i?i[1].length:0}return Math.max(...e)}resetDigits(){this.digits=[],this.ribbons={},this.inside.innerHTML=``,this.resetFormat()}createRange(e,t,n){let r=e<t,i=Math.abs(t-e)+(n?1:0);return Array.from({length:i},(t,n)=>r?e+n:e-n)}animateSlide(e){let t=this.value,n=this.format.precision;n&&(e*=10**n,t*=10**n);let r=e-t;if(!r)return;this.bindTransitionEnd();let i=[],a=this.getDigitCount(t,e),o=0,s=t;for(let n=0;n<a;n++){s=p(t/10**(a-n-1));let r=p(e/10**(a-n-1)),c=r-s,l;if(Math.abs(c)>this.MAX_VALUES){l=[];let e=this.MAX_VALUES*(1+o*.5),t=c/e,n=s;for(;c>0&&n<r||c<0&&n>r;)l.push(Math.round(n)),n+=t;l[l.length-1]!==r&&l.push(r),o++}else l=this.createRange(s,r,!0);for(let e=0;e<l.length;e++)l[e]=Math.abs(l[e]%10);i.push(l)}this.resetDigits();let c=i.toReversed();for(let e=0;e<c.length;e++){let t=c[e];if(this.digits[e]||this.addDigit(` `,e>=n),this.ribbons[e]===void 0){let t=this.digits[e].querySelector(`.odometer-ribbon-inner`);t&&(this.ribbons[e]=t)}this.ribbons[e].innerHTML=``,r<0&&(t=t.toReversed());for(let n=0;n<t.length;n++){let r=t[n],i=document.createElement(`div`);i.className=`odometer-value`,i.innerHTML=r.toString(),this.ribbons[e].appendChild(i),n===t.length-1&&l(i,`odometer-last-value`),n===0&&l(i,`odometer-first-value`)}}s<0&&this.addDigit(`-`);let u=this.inside.querySelector(`.odometer-radix-mark`);if(u&&u.parentNode.removeChild(u),n){var d;this.addSpacer((d=this.format.radix)==null?`.`:d,this.digits[n-1],`odometer-radix-mark`)}}static init(){let e=document.querySelectorAll(t.options.selector||`.odometer`);return Array.from(e,e=>{var n;return e.odometer=new t({el:e,value:(n=e.innerText)==null?e.textContent:n})})}};i(_,`options`,(g=window.odometerOptions)==null?{}:g),m(_),h(_);export{_ as LightOdometer};
|