@fernandomg/streak-counter
Version:
This is a basic streak counter - inspired by Duolingo - written in TypeScript and ment for the browser (uses `localStorage`).
3 lines (2 loc) • 1.12 kB
JavaScript
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e((t||self).streakCounter={})}(this,function(t){function e(){return e=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},e.apply(this,arguments)}var r="streak";function n(t){return t.toLocaleDateString("en-US")}function a(t,r){return e({},{currentCount:1,startDate:n(t),lastLoginDate:n(t)},r)}function o(t,e){t.setItem(r,JSON.stringify(e))}t.streakCounter=function(t,e){var n,i,s,u,f=t.getItem(r);if(f)try{var c=JSON.parse(f),l=(n=e,i=new Date(c.lastLoginDate),s=Math.abs(n.getTime()-i.getTime()),0===(u=Math.ceil(s/864e5))?"none":1===u?"increment":"reset"),p="reset"===l;if("increment"===l){var g=a(e,{currentCount:c.currentCount+1,startDate:c.startDate});return o(t,g),g}if(p){var d=a(e);return o(t,d),d}return c}catch(t){console.error("Failed to parse streak from localStorage")}var h=a(e);return o(t,h),h}});
//# sourceMappingURL=index.umd.js.map