UNPKG

ispin

Version:

vanilla javascript number spinner

3 lines (2 loc) 5.64 kB
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.ISpin=e()}(this,function(){"use strict";function t(t,e){for(var n=0;n<e.length;n++){var s=e[n];s.enumerable=s.enumerable||!1,s.configurable=!0,"value"in s&&(s.writable=!0),Object.defineProperty(t,s.key,s)}}function e(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function n(){return(n=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(t[s]=n[s])}return t}).apply(this,arguments)}function s(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e<t.length;e++)n[e]=t[e];return n}}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}var i=function(){function i(t,e){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,i),this.el=t,this.options={},this._onKeyDown=this._onKeyDown.bind(this),this._onMouseDown=this._onMouseDown.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onMouseLeave=this._onMouseLeave.bind(this),this._onWheel=this._onWheel.bind(this),this.build(),this.update(e)}var r,a,p;return r=i,(a=[{key:"build",value:function(){var t=this;this._wrapper=document.createElement("div"),this.el.parentNode&&this.el.parentNode.replaceChild(this._wrapper,this.el),this._wrapper.appendChild(this.el),this._buttons={inc:document.createElement("button"),dec:document.createElement("button")},Object.keys(this._buttons).forEach(function(e){var n=t._buttons[e];t._wrapper.appendChild(n),n.setAttribute("type","button"),n.addEventListener("mousedown",t._onMouseDown),n.addEventListener("mouseup",t._onMouseUp),n.addEventListener("mouseleave",t._onMouseLeave)}),this.el.addEventListener("keydown",this._onKeyDown),this.el.addEventListener("wheel",this._onWheel)}},{key:"update",value:function(t){var s=this;(t=function(t){for(var n=1;n<arguments.length;n++){var s=null!=arguments[n]?arguments[n]:{},i=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(s).filter(function(t){return Object.getOwnPropertyDescriptor(s,t).enumerable}))),i.forEach(function(n){e(t,n,s[n])})}return t}({},i.DEFAULTS,this.options,t)).wrapperClass!==this.options.wrapperClass&&(this.options.wrapperClass&&this._wrapper.classList.remove(this.options.wrapperClass),t.wrapperClass&&this._wrapper.classList.add(t.wrapperClass)),t.buttonsClass!==this.options.buttonsClass&&(this.options.buttonsClass&&Object.keys(this._buttons).forEach(function(t){s._buttons[t].classList.remove(s.options.buttonsClass),s._buttons[t].classList.remove(s.options.buttonsClass+"-"+t)}),t.buttonsClass&&Object.keys(this._buttons).forEach(function(e){s._buttons[e].classList.add(t.buttonsClass),s._buttons[e].classList.add(t.buttonsClass+"-"+e)})),this.disabled=t.disabled,n(this.options,t)}},{key:"destroy",value:function(){this._wrapper.parentNode&&this._wrapper.parentNode.replaceChild(this.el,this._wrapper),delete this.el,delete this._wrapper,delete this._buttons}},{key:"_onKeyDown",value:function(t){switch(t.keyCode){case 38:return t.preventDefault(),this.spin(this.options.step);case 40:return t.preventDefault(),this.spin(-this.options.step);case 33:return t.preventDefault(),this.spin(this.options.pageStep);case 34:return t.preventDefault(),this.spin(-this.options.pageStep)}}},{key:"_onMouseDown",value:function(t){t.preventDefault();var e=t.currentTarget===this._buttons.inc?1:-1;this.spin(e*this.options.step),this.el.focus(),this._startSpinning(e)}},{key:"_onMouseUp",value:function(t){this._stopSpinning()}},{key:"_onMouseLeave",value:function(t){this._stopSpinning()}},{key:"_startSpinning",value:function(t){var e=this;this._stopSpinning(),this._spinTimer=setInterval(function(){return e.spin(t*e.options.step)},this.options.repeatInterval)}},{key:"_stopSpinning",value:function(){clearInterval(this._spinTimer)}},{key:"_onWheel",value:function(t){if(document.activeElement===this.el){t.preventDefault();var e=t.deltaY>0?-1:1;this.spin(e*this.options.step)}}},{key:"adjustValue",value:function(t){return t=Number(t.toFixed(this.precision)),null!=this.options.max&&t>this.options.max&&(t=this.options.max),null!=this.options.min&&t<this.options.min&&(t=this.options.min),t}},{key:"wrapValue",value:function(t){return this.options.wrapOverflow&&null!=this.options.max&&null!=this.options.min&&(t<this.options.min?t=this.options.max:t>this.options.max&&(t=this.options.min)),t}},{key:"spin",value:function(t){this.value=this.adjustValue(this.wrapValue(this.value+t))}},{key:"value",get:function(){return this.options.parse(this.el.value)||0},set:function(t){var e=this.options.format(this.options.parse(String(t)));this.el.value=e,this.options.onChange&&this.options.onChange(e)}},{key:"disabled",get:function(){return this._buttons.inc.disabled},set:function(t){this.disabled!==t&&(this._buttons.inc.disabled=this._buttons.dec.disabled=t)}},{key:"precision",get:function(){return Math.max.apply(Math,s([this.options.step,this.options.min].filter(function(t){return null!=t}).map(o)))}}])&&t(r.prototype,a),p&&t(r,p),i}();function o(t){return(String(t).split(".")[1]||"").length}return i.DEFAULTS={wrapperClass:"ispin-wrapper",buttonsClass:"ispin-button",step:1,pageStep:10,disabled:!1,repeatInterval:200,wrapOverflow:!1,parse:Number,format:String},i}); //# sourceMappingURL=ispin.min.js.map