UNPKG

ts-ion-rangeslider

Version:

Cool, comfortable and easily customizable range slider with many options and skin support without jQuery dependency

2 lines (1 loc) 40.9 kB
var d;(u=>{let f=0;class m{constructor(t,i){this.plugin_count=0;this.current_plugin=0;this.calc_count=0;this.update_tm=0;this.old_from=0;this.old_to=0;this.old_min_interval=null;this.raf_id=null;this.dragging=!1;this.force_redraw=!1;this.no_diapason=!1;this.has_tab_index=!0;this.is_key=!1;this.is_update=!1;this.is_start=!0;this.is_finish=!1;this.is_active=!1;this.is_resize=!1;this.is_click=!1;this.base_html='<span class="irs"><span class="irs-line" tabindex="0"></span><span class="irs-min">0</span><span class="irs-max">1</span><span class="irs-from">0</span><span class="irs-to">0</span><span class="irs-single">0</span></span><span class="irs-grid"></span>';this.single_html='<span class="irs-bar irs-bar--single"></span><span class="irs-shadow shadow-single"></span><span class="irs-handle single"><i></i><i></i><i></i></span>';this.double_html='<span class="irs-bar"></span><span class="irs-shadow shadow-from"></span><span class="irs-shadow shadow-to"></span><span class="irs-handle from"><i></i><i></i><i></i></span><span class="irs-handle to"><i></i><i></i><i></i></span>';this.disable_html='<span class="irs-disable-mask"></span>';this.rangeSlider(t,i)}getIsOldIe(){let t=navigator.userAgent,i=/msie\s\d+/i,s;return t.search(i)>0&&(s=i.exec(t).toString(),s=s.split(" ")[1],parseFloat(s)<9)?(document.querySelector("html").classList.add("lt-ie9"),!0):!1}rangeSlider(t,i){this.input=t,this.plugin_count=f++,i=i||{},this.cache={win:window,body:document.body,input:t,cont:null,rs:null,min:null,max:null,from:null,to:null,single:null,bar:null,line:null,s_single:null,s_from:null,s_to:null,shad_single:null,shad_from:null,shad_to:null,edge:null,grid:null,grid_labels:[]},this.coords={x_gap:0,x_pointer:0,w_rs:0,w_rs_old:0,w_handle:0,p_gap:0,p_gap_left:0,p_gap_right:0,p_step:0,p_pointer:0,p_handle:0,p_single_fake:0,p_single_real:0,p_from_fake:0,p_from_real:0,p_to_fake:0,p_to_real:0,p_bar_x:0,p_bar_w:0,grid_gap:0,big_num:0,big:[],big_w:[],big_p:[],big_x:[]},this.labels={w_min:0,w_max:0,w_from:0,w_to:0,w_single:0,p_min:0,p_max:0,p_from_fake:0,p_from_left:0,p_to_fake:0,p_to_left:0,p_single_fake:0,p_single_left:0};let s=this.cache.input,e=s.value,o;o={skin:"flat",type:"single",min:10,max:100,from:null,to:null,step:1,min_interval:0,max_interval:0,drag_interval:!1,values:[],p_values:[],from_fixed:!1,from_min:null,from_max:null,from_shadow:!1,to_fixed:!1,to_min:null,to_max:null,to_shadow:!1,prettify_enabled:!0,prettify_separator:" ",prettify:null,force_edges:!1,keyboard:!0,grid:!1,grid_margin:!0,grid_num:4,grid_snap:!1,hide_min_max:!1,hide_from_to:!1,prefix:"",postfix:"",max_postfix:"",decorate_both:!0,values_separator:" \u2014 ",input_values_separator:";",disable:!1,block:!1,extra_classes:"",scope:null,onStart:null,onChange:null,onFinish:null,onUpdate:null},s.nodeName!=="INPUT"&&console.warn("Base element should be <input>!",s[0]),e!==void 0&&e!==""&&(e=e.split(i.input_values_separator||";"),e[0]&&e[0]===+e[0]&&(e[0]=+e[0]),e[1]&&e[1]===+e[1]&&(e[1]=+e[1]),i&&i.values&&i.values.length?(o.from=e[0]&&i.values.indexOf(e[0]),o.to=e[1]&&i.values.indexOf(e[1])):(o.from=e[0]&&+e[0],o.to=e[1]&&+e[1])),o=Object.assign({},o,i),this.options=o,this.update_check={},this.validate(),this.result={input:this.cache.input,slider:null,min:this.options.min,max:this.options.max,from:this.options.from,from_percent:0,from_value:null,to:this.options.to,to_percent:0,to_value:null},this.init()}init(t){this.no_diapason=!1,this.coords.p_step=this.convertToPercent(this.options.step,!0),this.target="base",this.toggleInput(),this.append(),this.setMinMax(),t?(this.force_redraw=!0,this.calc(!0),this.callOnUpdate()):(this.force_redraw=!0,this.calc(!0),this.callOnStart()),this.updateScene()}append(){let t='<span class="irs irs--'+this.options.skin+" js-irs-"+this.plugin_count+" "+this.options.extra_classes+'"></span>';this.cache.input.insertAdjacentHTML("beforebegin",t),this.cache.input.readOnly=!0,this.cache.cont=this.cache.input.previousElementSibling,this.result.slider=this.cache.cont,this.cache.cont.innerHTML=this.base_html,this.cache.rs=this.cache.cont.querySelector(".irs"),this.cache.min=this.cache.cont.querySelector(".irs-min"),this.cache.max=this.cache.cont.querySelector(".irs-max"),this.cache.from=this.cache.cont.querySelector(".irs-from"),this.cache.to=this.cache.cont.querySelector(".irs-to"),this.cache.single=this.cache.cont.querySelector(".irs-single"),this.cache.line=this.cache.cont.querySelector(".irs-line"),this.cache.grid=this.cache.cont.querySelector(".irs-grid"),this.options.type==="single"?(this.cache.cont.insertAdjacentHTML("beforeend",this.single_html),this.cache.bar=this.cache.cont.querySelector(".irs-bar"),this.cache.edge=this.cache.cont.querySelector(".irs-bar-edge"),this.cache.s_single=this.cache.cont.querySelector(".single"),this.cache.from.style.visibility="hidden",this.cache.to.style.visibility="hidden",this.cache.shad_single=this.cache.cont.querySelector(".shadow-single")):(this.cache.cont.insertAdjacentHTML("beforeend",this.double_html),this.cache.bar=this.cache.cont.querySelector(".irs-bar"),this.cache.s_from=this.cache.cont.querySelector(".from"),this.cache.s_to=this.cache.cont.querySelector(".to"),this.cache.shad_from=this.cache.cont.querySelector(".shadow-from"),this.cache.shad_to=this.cache.cont.querySelector(".shadow-to"),this.setTopHandler()),this.options.hide_from_to&&(this.cache.from.style.display="none",this.cache.to.style.display="none",this.cache.single.style.display="none"),this.appendGrid(),this.options.disable?(this.appendDisableMask(),this.cache.input.disabled=!0):(this.cache.input.disabled=!1,this.removeDisableMask(),this.bindEvents()),this.options.disable||(this.options.block?this.appendDisableMask():this.removeDisableMask()),this.options.drag_interval&&(this.cache.bar.style.cursor="ew-resize")}setTopHandler(){let t=this.options.min,i=this.options.max,s=this.options.from,e=this.options.to;s>t&&e===i?this.cache.s_from.classList.add("type_last"):e<i&&this.cache.s_to.classList.add("type_last")}changeLevel(t){switch(t){case"single":this.coords.p_gap=this.toFixed(this.coords.p_pointer-this.coords.p_single_fake),this.cache.s_single.classList.add("state_hover");break;case"from":this.coords.p_gap=this.toFixed(this.coords.p_pointer-this.coords.p_from_fake),this.cache.s_from.classList.add("state_hover"),this.cache.s_from.classList.add("type_last"),this.cache.s_to.classList.remove("type_last");break;case"to":this.coords.p_gap=this.toFixed(this.coords.p_pointer-this.coords.p_to_fake),this.cache.s_to.classList.add("state_hover"),this.cache.s_to.classList.add("type_last"),this.cache.s_from.classList.remove("type_last");break;case"both":this.coords.p_gap_left=this.toFixed(this.coords.p_pointer-this.coords.p_from_fake),this.coords.p_gap_right=this.toFixed(this.coords.p_to_fake-this.coords.p_pointer),this.cache.s_to.classList.remove("type_last"),this.cache.s_from.classList.remove("type_last");break}}appendDisableMask(){this.cache.cont.innerHTML=this.disable_html,this.cache.cont.classList.add("irs-disabled")}removeDisableMask(){this.removeElement(this.cache.cont.querySelector(".irs-disable-mask")),this.cache.cont.classList.remove("irs-disabled")}removeElement(t){t&&t.parentNode.removeChild(t)}remove(){this.removeElement(this.cache.cont),this.cache.cont=null,this.unbindEvens(),this.cache.grid_labels=[],this.coords.big=[],this.coords.big_w=[],this.coords.big_p=[],this.coords.big_x=[],cancelAnimationFrame(this.raf_id)}bindEvents(){this.no_diapason||(this.cache.body.addEventListener("touchmove",t=>this.pointerMove(t)),this.cache.body.addEventListener("mousemove",t=>this.pointerMove(t)),this.cache.win.addEventListener("touchend",t=>this.pointerUp(t)),this.cache.win.addEventListener("mouseup",t=>this.pointerUp(t)),this.cache.line.addEventListener("touchstart",t=>this.pointerClick("click",t)),this.cache.line.addEventListener("mousedown",t=>this.pointerClick("click",t)),this.cache.line.addEventListener("focus",t=>this.pointerFocus(t)),this.options.drag_interval&&this.options.type==="double"?(this.cache.bar.addEventListener("touchstart",t=>this.pointerDown("both",t)),this.cache.bar.addEventListener("mousedown",t=>this.pointerDown("both",t))):(this.cache.bar.addEventListener("touchstart",t=>this.pointerClick("click",t)),this.cache.bar.addEventListener("mousedown",t=>this.pointerClick("click",t))),this.options.type==="single"?(this.cache.single.addEventListener("touchstart",t=>this.pointerDown("single",t)),this.cache.s_single.addEventListener("touchstart",t=>this.pointerDown("single",t)),this.cache.shad_single.addEventListener("touchstart",t=>this.pointerClick("click",t)),this.cache.single.addEventListener("mousedown",t=>this.pointerDown("single",t)),this.cache.s_single.addEventListener("mousedown",t=>this.pointerDown("single",t)),this.cache.shad_single.addEventListener("mousedown",t=>this.pointerClick.bind("click",t)),this.cache.edge&&this.cache.edge.addEventListener("mousedown",t=>this.pointerClick("click",t))):(this.cache.single.addEventListener("touchstart",t=>this.pointerDown(null,t)),this.cache.single.addEventListener("mousedown",t=>this.pointerDown(null,t)),this.cache.from.addEventListener("touchstart",t=>this.pointerDown("from",t)),this.cache.s_from.addEventListener("touchstart",t=>this.pointerDown("from",t)),this.cache.to.addEventListener("touchstart",t=>this.pointerDown("to",t)),this.cache.s_to.addEventListener("touchstart",t=>this.pointerDown("to",t)),this.cache.shad_from.addEventListener("touchstart",t=>this.pointerClick("click",t)),this.cache.shad_to.addEventListener("touchstart",t=>this.pointerClick("click",t)),this.cache.from.addEventListener("mousedown",t=>this.pointerDown("from",t)),this.cache.s_from.addEventListener("mousedown",t=>this.pointerDown("from",t)),this.cache.to.addEventListener("mousedown",t=>this.pointerDown("to",t)),this.cache.s_to.addEventListener("mousedown",t=>this.pointerDown("to",t)),this.cache.shad_from.addEventListener("mousedown",t=>this.pointerClick("click",t)),this.cache.shad_to.addEventListener("mousedown",t=>this.pointerClick("click",t))),this.options.keyboard&&this.cache.line.addEventListener("keydown",t=>this.key("keyboard",t)),this.getIsOldIe()&&(this.cache.body.addEventListener("mouseup",t=>this.pointerUp(t)),this.cache.body.addEventListener("mouseleave",t=>this.pointerUp(t))))}pointerFocus(t){if(!this.target){let i,s;this.options.type==="single"?s=this.cache.single:s=this.cache.from,i=this.getOffset(s).left,i+=s.width()/2-1,this.pointerClick("single",{preventDefault:function(){},pageX:i})}}getOffset(t){let i=t.getBoundingClientRect();return{top:i.top+window.scrollY,left:i.left+window.scrollX}}pointerMove(t){if(!this.dragging)return;let i=t.pageX||t.originalEvent.touches&&t.originalEvent.touches[0].pageX;this.coords.x_pointer=i-this.coords.x_gap,this.calc()}pointerUp(t){if(this.current_plugin===this.plugin_count){if(this.is_active)this.is_active=!1;else return;this.removeClass(this.cache.cont.querySelector(".state_hover"),"state_hover"),this.force_redraw=!0,this.updateScene(),this.restoreOriginalMinInterval(),(this.contains(this.cache.cont[0],t.target)||this.dragging)&&this.callOnFinish(),this.dragging=!1}}removeClass(t,i){t&&t.classList&&t.classList.remove(i)}contains(t,i){let s=document.querySelectorAll(t);return[].filter.call(s,e=>RegExp(i).test(e.textContent))}pointerDown(t,i){i.preventDefault();let s=i.pageX||i.originalEvent.touches&&i.originalEvent.touches[0].pageX;i.button!==2&&(t==="both"&&this.setTempMinInterval(),t||(t=this.target||"from"),this.current_plugin=this.plugin_count,this.target=t,this.is_active=!0,this.dragging=!0,this.coords.x_gap=this.getOffset(this.cache.rs).left,this.coords.x_pointer=s-this.coords.x_gap,this.calcPointerPercent(),this.changeLevel(t),this.trigger("focus",this.cache.line),this.updateScene())}pointerClick(t,i){i.preventDefault();let s=i.pageX||i.originalEvent.touches&&i.originalEvent.touches[0].pageX;i.button!==2&&(this.current_plugin=this.plugin_count,this.target=t,this.is_click=!0,this.coords.x_gap=this.getOffset(this.cache.rs).left,this.coords.x_pointer=+(s-this.coords.x_gap).toFixed(),this.force_redraw=!0,this.calc(),this.trigger("focus",this.cache.line))}trigger(t,i){let s=document.createEvent("HTMLEvents");s.initEvent(t,!0,!0),i.dispatchEvent(s)}key(t,i){if(!(this.current_plugin!==this.plugin_count||i.altKey||i.ctrlKey||i.shiftKey||i.metaKey)){switch(i.which){case 83:case 65:case 40:case 37:i.preventDefault(),this.moveByKey(!1);break;case 87:case 68:case 38:case 39:i.preventDefault(),this.moveByKey(!0);break}return!0}}moveByKey(t){let i=this.coords.p_pointer,s=(this.options.max-this.options.min)/100;s=this.options.step/s,t?i+=s:i-=s,this.coords.x_pointer=this.toFixed(this.coords.w_rs/100*i),this.is_key=!0,this.calc()}setMinMax(){if(!!this.options){if(this.options.hide_min_max){this.cache.min.style.display="none",this.cache.max.style.display="none";return}if(this.options.values.length)this.cache.min.innerHTML=this.decorate(this.options.p_values[this.options.min]),this.cache.max.innerHTML=this.decorate(this.options.p_values[this.options.max]);else{let t=this._prettify(this.options.min),i=this._prettify(this.options.max);this.result.min_pretty=t,this.result.max_pretty=i,this.cache.min.innerHTML=this.decorate(t,this.options.min),this.cache.max.innerHTML=this.decorate(i,this.options.max)}this.labels.w_min=this.outerWidth(this.cache.min),this.labels.w_max=this.outerWidth(this.cache.max)}}outerWidth(t,i=!1){let s=t.offsetWidth;if(i){let e=getComputedStyle(t);s+=parseInt(e.marginLeft,10)+parseInt(e.marginRight,10)}return s}setTempMinInterval(){let t=this.result.to-this.result.from;this.old_min_interval===null&&(this.old_min_interval=this.options.min_interval),this.options.min_interval=t}restoreOriginalMinInterval(){this.old_min_interval!==null&&(this.options.min_interval=this.old_min_interval,this.old_min_interval=null)}calc(t=!1){if(!this.options||(this.calc_count++,(this.calc_count===10||t)&&(this.calc_count=0,this.coords.w_rs=this.outerWidth(this.cache.rs,!1),this.calcHandlePercent()),!this.coords.w_rs))return;this.calcPointerPercent();let i=this.getHandleX();switch(this.target==="both"&&(this.coords.p_gap=0,i=this.getHandleX()),this.target==="click"&&(this.coords.p_gap=this.coords.p_handle/2,i=this.getHandleX(),this.options.drag_interval?this.target="both_one":this.target=this.chooseHandle(i)),this.target){case"base":let s=(this.options.max-this.options.min)/100,e=(this.result.from-this.options.min)/s,o=(this.result.to-this.options.min)/s;this.coords.p_single_real=this.toFixed(e),this.coords.p_from_real=this.toFixed(e),this.coords.p_to_real=this.toFixed(o),this.coords.p_single_real=this.checkDiapason(this.coords.p_single_real,this.options.from_min,this.options.from_max),this.coords.p_from_real=this.checkDiapason(this.coords.p_from_real,this.options.from_min,this.options.from_max),this.coords.p_to_real=this.checkDiapason(this.coords.p_to_real,this.options.to_min,this.options.to_max),this.coords.p_single_fake=this.convertToFakePercent(this.coords.p_single_real),this.coords.p_from_fake=this.convertToFakePercent(this.coords.p_from_real),this.coords.p_to_fake=this.convertToFakePercent(this.coords.p_to_real),this.target=null;break;case"single":if(this.options.from_fixed)break;this.coords.p_single_real=this.convertToRealPercent(i),this.coords.p_single_real=this.calcWithStep(this.coords.p_single_real),this.coords.p_single_real=this.checkDiapason(this.coords.p_single_real,this.options.from_min,this.options.from_max),this.coords.p_single_fake=this.convertToFakePercent(this.coords.p_single_real);break;case"from":if(this.options.from_fixed)break;this.coords.p_from_real=this.convertToRealPercent(i),this.coords.p_from_real=this.calcWithStep(this.coords.p_from_real),this.coords.p_from_real>this.coords.p_to_real&&(this.coords.p_from_real=this.coords.p_to_real),this.coords.p_from_real=this.checkDiapason(this.coords.p_from_real,this.options.from_min,this.options.from_max),this.coords.p_from_real=this.checkMinInterval(this.coords.p_from_real,this.coords.p_to_real,"from"),this.coords.p_from_real=this.checkMaxInterval(this.coords.p_from_real,this.coords.p_to_real,"from"),this.coords.p_from_fake=this.convertToFakePercent(this.coords.p_from_real);break;case"to":if(this.options.to_fixed)break;this.coords.p_to_real=this.convertToRealPercent(i),this.coords.p_to_real=this.calcWithStep(this.coords.p_to_real),this.coords.p_to_real<this.coords.p_from_real&&(this.coords.p_to_real=this.coords.p_from_real),this.coords.p_to_real=this.checkDiapason(this.coords.p_to_real,this.options.to_min,this.options.to_max),this.coords.p_to_real=this.checkMinInterval(this.coords.p_to_real,this.coords.p_from_real,"to"),this.coords.p_to_real=this.checkMaxInterval(this.coords.p_to_real,this.coords.p_from_real,"to"),this.coords.p_to_fake=this.convertToFakePercent(this.coords.p_to_real);break;case"both":if(this.options.from_fixed||this.options.to_fixed)break;i=this.toFixed(i+this.coords.p_handle*.001),this.coords.p_from_real=this.convertToRealPercent(i)-this.coords.p_gap_left,this.coords.p_from_real=this.calcWithStep(this.coords.p_from_real),this.coords.p_from_real=this.checkDiapason(this.coords.p_from_real,this.options.from_min,this.options.from_max),this.coords.p_from_real=this.checkMinInterval(this.coords.p_from_real,this.coords.p_to_real,"from"),this.coords.p_from_fake=this.convertToFakePercent(this.coords.p_from_real),this.coords.p_to_real=this.convertToRealPercent(i)+this.coords.p_gap_right,this.coords.p_to_real=this.calcWithStep(this.coords.p_to_real),this.coords.p_to_real=this.checkDiapason(this.coords.p_to_real,this.options.to_min,this.options.to_max),this.coords.p_to_real=this.checkMinInterval(this.coords.p_to_real,this.coords.p_from_real,"to"),this.coords.p_to_fake=this.convertToFakePercent(this.coords.p_to_real);break;case"both_one":if(this.options.from_fixed||this.options.to_fixed)break;let r=this.convertToRealPercent(i),n=this.result.from_percent,l=this.result.to_percent,a=l-n,h=a/2,c=r-h,p=r+h;c<0&&(c=0,p=c+a),p>100&&(p=100,c=p-a),this.coords.p_from_real=this.calcWithStep(c),this.coords.p_from_real=this.checkDiapason(this.coords.p_from_real,this.options.from_min,this.options.from_max),this.coords.p_from_fake=this.convertToFakePercent(this.coords.p_from_real),this.coords.p_to_real=this.calcWithStep(p),this.coords.p_to_real=this.checkDiapason(this.coords.p_to_real,this.options.to_min,this.options.to_max),this.coords.p_to_fake=this.convertToFakePercent(this.coords.p_to_real);break}this.options.type==="single"?(this.coords.p_bar_x=this.coords.p_handle/2,this.coords.p_bar_w=this.coords.p_single_fake,this.result.from_percent=this.coords.p_single_real,this.result.from=this.convertToValue(this.coords.p_single_real),this.result.from_pretty=this._prettify(this.result.from),this.options.values.length&&(this.result.from_value=this.options.values[this.result.from])):(this.coords.p_bar_x=this.toFixed(this.coords.p_from_fake+this.coords.p_handle/2),this.coords.p_bar_w=this.toFixed(this.coords.p_to_fake-this.coords.p_from_fake),this.result.from_percent=this.coords.p_from_real,this.result.from=this.convertToValue(this.coords.p_from_real),this.result.from_pretty=this._prettify(this.result.from),this.result.to_percent=this.coords.p_to_real,this.result.to=this.convertToValue(this.coords.p_to_real),this.result.to_pretty=this._prettify(this.result.to),this.options.values.length&&(this.result.from_value=this.options.values[this.result.from],this.result.to_value=this.options.values[this.result.to])),this.calcMinMax(),this.calcLabels()}calcPointerPercent(){if(!this.coords.w_rs){this.coords.p_pointer=0;return}this.coords.x_pointer<0||isNaN(this.coords.x_pointer)?this.coords.x_pointer=0:this.coords.x_pointer>this.coords.w_rs&&(this.coords.x_pointer=this.coords.w_rs),this.coords.p_pointer=this.toFixed(this.coords.x_pointer/this.coords.w_rs*100)}convertToRealPercent(t){let i=100-this.coords.p_handle;return t/i*100}convertToFakePercent(t){let i=100-this.coords.p_handle;return t/100*i}getHandleX(){let t=100-this.coords.p_handle,i=this.toFixed(this.coords.p_pointer-this.coords.p_gap);return i<0?i=0:i>t&&(i=t),i}calcHandlePercent(){this.options.type==="single"?this.coords.w_handle=this.outerWidth(this.cache.s_single,!1):this.coords.w_handle=this.outerWidth(this.cache.s_from,!1),this.coords.p_handle=this.toFixed(this.coords.w_handle/this.coords.w_rs*100)}chooseHandle(t){if(this.options.type==="single")return"single";{let i=this.coords.p_from_real+(this.coords.p_to_real-this.coords.p_from_real)/2;return t>=i?this.options.to_fixed?"from":"to":this.options.from_fixed?"to":"from"}}calcMinMax(){!this.coords.w_rs||(this.labels.p_min=this.labels.w_min/this.coords.w_rs*100,this.labels.p_max=this.labels.w_max/this.coords.w_rs*100)}calcLabels(){!this.coords.w_rs||this.options.hide_from_to||(this.options.type==="single"?(this.labels.w_single=this.outerWidth(this.cache.single,!1),this.labels.p_single_fake=this.labels.w_single/this.coords.w_rs*100,this.labels.p_single_left=this.coords.p_single_fake+this.coords.p_handle/2-this.labels.p_single_fake/2,this.labels.p_single_left=this.checkEdges(this.labels.p_single_left,this.labels.p_single_fake)):(this.labels.w_from=this.outerWidth(this.cache.from,!1),this.labels.p_from_fake=this.labels.w_from/this.coords.w_rs*100,this.labels.p_from_left=this.coords.p_from_fake+this.coords.p_handle/2-this.labels.p_from_fake/2,this.labels.p_from_left=this.toFixed(this.labels.p_from_left),this.labels.p_from_left=this.checkEdges(this.labels.p_from_left,this.labels.p_from_fake),this.labels.w_to=this.outerWidth(this.cache.to,!1),this.labels.p_to_fake=this.labels.w_to/this.coords.w_rs*100,this.labels.p_to_left=this.coords.p_to_fake+this.coords.p_handle/2-this.labels.p_to_fake/2,this.labels.p_to_left=this.toFixed(this.labels.p_to_left),this.labels.p_to_left=this.checkEdges(this.labels.p_to_left,this.labels.p_to_fake),this.labels.w_single=this.outerWidth(this.cache.single,!1),this.labels.p_single_fake=this.labels.w_single/this.coords.w_rs*100,this.labels.p_single_left=(this.labels.p_from_left+this.labels.p_to_left+this.labels.p_to_fake)/2-this.labels.p_single_fake/2,this.labels.p_single_left=this.toFixed(this.labels.p_single_left),this.labels.p_single_left=this.checkEdges(this.labels.p_single_left,this.labels.p_single_fake)))}updateScene(){this.raf_id&&(cancelAnimationFrame(this.raf_id),this.raf_id=null),clearTimeout(this.update_tm),this.update_tm=null,this.options&&(this.drawHandles(),this.is_active?this.raf_id=requestAnimationFrame(this.updateScene.bind(this)):this.update_tm=setTimeout(this.updateScene.bind(this),300))}drawHandles(){this.coords.w_rs=this.outerWidth(this.cache.rs,!1),this.coords.w_rs&&(this.coords.w_rs!==this.coords.w_rs_old&&(this.target="base",this.is_resize=!0),(this.coords.w_rs!==this.coords.w_rs_old||this.force_redraw)&&(this.setMinMax(),this.calc(!0),this.drawLabels(),this.options.grid&&(this.calcGridMargin(),this.calcGridLabels()),this.force_redraw=!0,this.coords.w_rs_old=this.coords.w_rs,this.drawShadow()),this.coords.w_rs&&(!this.dragging&&!this.force_redraw&&!this.is_key||((this.old_from!==this.result.from||this.old_to!==this.result.to||this.force_redraw||this.is_key)&&(this.drawLabels(),this.cache.bar.style.left=this.coords.p_bar_x+"%",this.cache.bar.style.width=this.coords.p_bar_w+"%",this.options.type==="single"?(this.cache.bar.style.left=0,this.cache.bar.style.width=this.coords.p_bar_w+this.coords.p_bar_x+"%",this.cache.s_single.style.left=this.coords.p_single_fake+"%",this.cache.single.style.left=this.labels.p_single_left+"%"):(this.cache.s_from.style.left=this.coords.p_from_fake+"%",this.cache.s_to.style.left=this.coords.p_to_fake+"%",(this.old_from!==this.result.from||this.force_redraw)&&(this.cache.from.style.left=this.labels.p_from_left+"%"),(this.old_to!==this.result.to||this.force_redraw)&&(this.cache.to.style.left=this.labels.p_to_left+"%"),this.cache.single.style.left=this.labels.p_single_left+"%"),this.writeToInput(),(this.old_from!==this.result.from||this.old_to!==this.result.to)&&!this.is_start&&this.trigger("input",this.cache.input),this.old_from=this.result.from,this.old_to=this.result.to,!this.is_resize&&!this.is_update&&!this.is_start&&!this.is_finish&&this.callOnChange(),(this.is_key||this.is_click)&&(this.is_key=!1,this.is_click=!1,this.callOnFinish()),this.is_update=!1,this.is_resize=!1,this.is_finish=!1),this.is_start=!1,this.is_key=!1,this.is_click=!1,this.force_redraw=!1)))}drawLabels(){if(!this.options)return;let t=this.options.values.length,i=this.options.p_values,s,e,o,r,n;if(!this.options.hide_from_to)if(this.options.type==="single")t?(s=this.decorate(i[this.result.from]),this.cache.single.innerHTML=s):(r=this._prettify(this.result.from),s=this.decorate(r,this.result.from),this.cache.single.innerHTML=s),this.calcLabels(),this.labels.p_single_left<this.labels.p_min+1?this.cache.min.style.visibility="hidden":this.cache.min.style.visibility="visible",this.labels.p_single_left+this.labels.p_single_fake>100-this.labels.p_max-1?this.cache.max.style.visibility="hidden":this.cache.max.style.visibility="visible";else{t?(this.options.decorate_both?(s=this.decorate(i[this.result.from]),s+=this.options.values_separator,s+=this.decorate(i[this.result.to])):s=this.decorate(i[this.result.from]+this.options.values_separator+i[this.result.to]),e=this.decorate(i[this.result.from]),o=this.decorate(i[this.result.to]),this.cache.single.innerHTML=s,this.cache.from.innerHTML=e,this.cache.to.innerHTML=o):(r=this._prettify(this.result.from),n=this._prettify(this.result.to),this.options.decorate_both?(s=this.decorate(r,this.result.from),s+=this.options.values_separator,s+=this.decorate(n,this.result.to)):s=this.decorate(r+this.options.values_separator+n,this.result.to),e=this.decorate(r,this.result.from),o=this.decorate(n,this.result.to),this.cache.single.innerHTML=s,this.cache.from.innerHTML=e,this.cache.to.innerHTML=o),this.calcLabels();let l=Math.min(this.labels.p_single_left,this.labels.p_from_left),a=this.labels.p_single_left+this.labels.p_single_fake,h=this.labels.p_to_left+this.labels.p_to_fake,c=Math.max(a,h);this.labels.p_from_left+this.labels.p_from_fake>=this.labels.p_to_left?(this.cache.from.style.visibility="hidden",this.cache.to.style.visibility="hidden",this.cache.single.style.visibility="visible",this.result.from===this.result.to?(this.target==="from"?this.cache.from.style.visibility="visible":this.target==="to"?this.cache.to.style.visibility="visible":this.target||(this.cache.from.style.visibility="visible"),this.cache.single.style.visibility="hidden",c=h):(this.cache.from.style.visibility="hidden",this.cache.to.style.visibility="hidden",this.cache.single.style.visibility="visible",c=Math.max(a,h))):(this.cache.from.style.visibility="visible",this.cache.to.style.visibility="visible",this.cache.single.style.visibility="hidden"),l<this.labels.p_min+1?this.cache.min.style.visibility="hidden":this.cache.min.style.visibility="visible",c>100-this.labels.p_max-1?this.cache.max.style.visibility="hidden":this.cache.max.style.visibility="visible"}}drawShadow(){let t=this.options,i=this.cache,s=typeof t.from_min=="number"&&!isNaN(t.from_min),e=typeof t.from_max=="number"&&!isNaN(t.from_max),o=typeof t.to_min=="number"&&!isNaN(t.to_min),r=typeof t.to_max=="number"&&!isNaN(t.to_max),n,l,a,h;t.type==="single"?t.from_shadow&&(s||e)?(n=this.convertToPercent(s?t.from_min:t.min),l=this.convertToPercent(e?t.from_max:t.max)-n,n=this.toFixed(n-this.coords.p_handle/100*n),l=this.toFixed(l-this.coords.p_handle/100*l),n=n+this.coords.p_handle/2,i.shad_single.style.display="block",i.shad_single.style.left=n+"%",i.shad_single.style.width=l+"%"):i.shad_single.style.display="none":(t.from_shadow&&(s||e)?(n=this.convertToPercent(s?t.from_min:t.min),l=this.convertToPercent(e?t.from_max:t.max)-n,n=this.toFixed(n-this.coords.p_handle/100*n),l=this.toFixed(l-this.coords.p_handle/100*l),n=n+this.coords.p_handle/2,i.shad_from.style.display="block",i.shad_from.style.left=n+"%",i.shad_from.style.width=l+"%"):i.shad_from.style.display="none",t.to_shadow&&(o||r)?(a=this.convertToPercent(o?t.to_min:t.min),h=this.convertToPercent(r?t.to_max:t.max)-a,a=this.toFixed(a-this.coords.p_handle/100*a),h=this.toFixed(h-this.coords.p_handle/100*h),a=a+this.coords.p_handle/2,i.shad_to.style.display="block",i.shad_to.style.left=a+"%",i.shad_to.style.width=h+"%"):i.shad_to.style.display="none")}writeToInput(){this.options.type==="single"?(this.options.values.length?this.cache.input.value=this.result.from_value:this.cache.input.value=this.result.from,this.cache.input.dataset.from=this.result.from):(this.options.values.length?this.cache.input.value=this.result.from_value+this.options.input_values_separator+this.result.to_value:this.cache.input.value=this.result.from+this.options.input_values_separator+this.result.to,this.cache.input.dataset.from=this.result.from,this.cache.input.dataset.to=this.result.to)}callOnStart(){this.writeToInput(),this.options.onStart&&typeof this.options.onStart=="function"&&(this.options.scope?this.options.onStart.call(this.options.scope,this.result):this.options.onStart(this.result))}callOnChange(){this.writeToInput(),this.options.onChange&&typeof this.options.onChange=="function"&&(this.options.scope?this.options.onChange.call(this.options.scope,this.result):this.options.onChange(this.result))}callOnFinish(){this.writeToInput(),this.options.onFinish&&typeof this.options.onFinish=="function"&&(this.options.scope?this.options.onFinish.call(this.options.scope,this.result):this.options.onFinish(this.result))}callOnUpdate(){this.writeToInput(),this.options.onUpdate&&typeof this.options.onUpdate=="function"&&(this.options.scope?this.options.onUpdate.call(this.options.scope,this.result):this.options.onUpdate(this.result))}toggleInput(){this.cache.input.classList.toggle("irs-hidden-input"),this.has_tab_index?this.cache.input.tabindex=-1:this.cache.input.removeAttribute("tabindex"),this.has_tab_index=!this.has_tab_index}convertToPercent(t,i=!1){let s=this.options.max-this.options.min,e=s/100,o,r;return s?(i?o=t:o=t-this.options.min,r=o/e,this.toFixed(r)):(this.no_diapason=!0,0)}convertToValue(t){let i=this.options.min,s=this.options.max,e,o,r=0,n=0,l=i.toString().split(".")[1],a=s.toString().split(".")[1];if(t===0)return this.options.min;if(t===100)return this.options.max;l&&(e=l.length,r=e),a&&(o=a.length,r=o),e&&o&&(r=e>=o?e:o),i<0&&(n=Math.abs(i),i=+(i+n).toFixed(r),s=+(s+n).toFixed(r));let h=(s-i)/100*t+i,c,p=this.options.step.toString().split(".")[1];return p?h=+h.toFixed(p.length):(h=h/this.options.step,h=h*this.options.step,h=+h.toFixed(0)),n&&(h-=n),p?c=+h.toFixed(p.length):c=this.toFixed(h),c<this.options.min?c=this.options.min:c>this.options.max&&(c=this.options.max),c}calcWithStep(t){let i=Math.round(t/this.coords.p_step)*this.coords.p_step;return i>100&&(i=100),t===100&&(i=100),this.toFixed(i)}checkMinInterval(t,i,s){let e=this.options,o,r;return e.min_interval?(o=this.convertToValue(t),r=this.convertToValue(i),s==="from"?r-o<e.min_interval&&(o=r-e.min_interval):o-r<e.min_interval&&(o=r+e.min_interval),this.convertToPercent(o)):t}checkMaxInterval(t,i,s){let e=this.options,o,r;return e.max_interval?(o=this.convertToValue(t),r=this.convertToValue(i),s==="from"?r-o>e.max_interval&&(o=r-e.max_interval):o-r>e.max_interval&&(o=r+e.max_interval),this.convertToPercent(o)):t}checkDiapason(t,i,s){let e=this.convertToValue(t),o=this.options;return typeof i!="number"&&(i=o.min),typeof s!="number"&&(s=o.max),e<i&&(e=i),e>s&&(e=s),this.convertToPercent(e)}toFixed(t){return t=t.toFixed(20),+t}_prettify(t){return this.options.prettify_enabled?this.options.prettify&&typeof this.options.prettify=="function"?this.options.prettify(t):this.prettify(t):t.toString()}prettify(t){return t.toString().replace(/(\d{1,3}(?=(?:\d\d\d)+(?!\d)))/g,"$1"+this.options.prettify_separator)}checkEdges(t,i){return this.options.force_edges?(t<0?t=0:t>100-i&&(t=100-i),this.toFixed(t)):this.toFixed(t)}validate(){let t=this.options,i=this.result,s=t.values,e=s.length,o,r;if(typeof t.min=="string"&&(t.min=+t.min),typeof t.max=="string"&&(t.max=+t.max),typeof t.from=="string"&&(t.from=+t.from),typeof t.to=="string"&&(t.to=+t.to),typeof t.step=="string"&&(t.step=+t.step),typeof t.from_min=="string"&&(t.from_min=+t.from_min),typeof t.from_max=="string"&&(t.from_max=+t.from_max),typeof t.to_min=="string"&&(t.to_min=+t.to_min),typeof t.to_max=="string"&&(t.to_max=+t.to_max),typeof t.grid_num=="string"&&(t.grid_num=+t.grid_num),t.max<t.min&&(t.max=t.min),e)for(t.p_values=[],t.min=0,t.max=e-1,t.step=1,t.grid_num=t.max,t.grid_snap=!0,r=0;r<e;r++)o=+s[r],isNaN(o)?o=s[r]:(console.log({v:s,i:r,value:o}),s[r]=o,o=this._prettify(o)),t.p_values.push(o);(typeof t.from!="number"||isNaN(t.from))&&(t.from=t.min),(typeof t.to!="number"||isNaN(t.to))&&(t.to=t.max),t.type==="single"?(t.from<t.min&&(t.from=t.min),t.from>t.max&&(t.from=t.max)):(t.from<t.min&&(t.from=t.min),t.from>t.max&&(t.from=t.max),t.to<t.min&&(t.to=t.min),t.to>t.max&&(t.to=t.max),this.update_check.from&&(this.update_check.from!==t.from&&t.from>t.to&&(t.from=t.to),this.update_check.to!==t.to&&t.to<t.from&&(t.to=t.from)),t.from>t.to&&(t.from=t.to),t.to<t.from&&(t.to=t.from)),(typeof t.step!="number"||isNaN(t.step)||!t.step||t.step<0)&&(t.step=1),typeof t.from_min=="number"&&t.from<t.from_min&&(t.from=t.from_min),typeof t.from_max=="number"&&t.from>t.from_max&&(t.from=t.from_max),typeof t.to_min=="number"&&t.to<t.to_min&&(t.to=t.to_min),typeof t.to_max=="number"&&t.from>t.to_max&&(t.to=t.to_max),i&&(i.min!==t.min&&(i.min=t.min),i.max!==t.max&&(i.max=t.max),(i.from<i.min||i.from>i.max)&&(i.from=t.from),(i.to<i.min||i.to>i.max)&&(i.to=t.to)),(typeof t.min_interval!="number"||isNaN(t.min_interval)||!t.min_interval||t.min_interval<0)&&(t.min_interval=0),(typeof t.max_interval!="number"||isNaN(t.max_interval)||!t.max_interval||t.max_interval<0)&&(t.max_interval=0),t.min_interval&&t.min_interval>t.max-t.min&&(t.min_interval=t.max-t.min),t.max_interval&&t.max_interval>t.max-t.min&&(t.max_interval=t.max-t.min)}decorate(t,i){let s="",e=this.options;return e.prefix&&(s+=e.prefix),s+=t,e.max_postfix&&(e.values.length&&t===e.p_values[e.max]||i===e.max)&&(s+=e.max_postfix,e.postfix&&(s+=" ")),e.postfix&&(s+=e.postfix),s}updateFrom(){this.result.from=this.options.from,this.result.from_percent=this.convertToPercent(this.result.from),this.result.from_pretty=this._prettify(this.result.from),this.options.values&&(this.result.from_value=this.options.values[this.result.from])}updateTo(){this.result.to=this.options.to,this.result.to_percent=this.convertToPercent(this.result.to),this.result.to_pretty=this._prettify(this.result.to),this.options.values&&(this.result.to_value=this.options.values[this.result.to])}updateResult(){this.result.min=this.options.min,this.result.max=this.options.max,this.updateFrom(),this.updateTo()}appendGrid(){if(!this.options.grid)return;let t=this.options,i=t.max-t.min,s=t.grid_num,e=0,o=4,r=0,n=0,l="",a,h,c,p,_;for(this.calcGridMargin(),t.grid_snap&&(s=i/t.step),s>50&&(s=50),e=this.toFixed(100/s),s>4&&(o=3),s>7&&(o=2),s>14&&(o=1),s>28&&(o=0),a=0;a<s+1;a++){for(c=o,r=this.toFixed(e*a),r>100&&(r=100),this.coords.big[a]=r,p=(r-e*(a-1))/(c+1),h=1;h<=c&&r!==0;h++)n=this.toFixed(r-p*h),l+='<span class="irs-grid-pol small" style="left: '+n+'%"></span>';l+='<span class="irs-grid-pol" style="left: '+r+'%"></span>',_=this.convertToValue(r),t.values.length?_=t.p_values[_]:_=this._prettify(_),l+='<span class="irs-grid-text js-grid-text-'+a+'" style="left: '+r+'%">'+_+"</span>"}this.coords.big_num=Math.ceil(s+1),this.cache.cont.classList.toggle("irs-with-grid"),this.cache.grid.innerHTML=l,this.cacheGridLabels()}cacheGridLabels(){let t,i,s=this.coords.big_num;for(i=0;i<s;i++)t=this.cache.grid.querySelector(".js-grid-text-"+i),this.cache.grid_labels.push(t);this.calcGridLabels()}calcGridLabels(){let t=[],i=[],s=this.coords.big_num,e,o;for(o=0;o<s;o++)this.coords.big_w[o]=this.outerWidth(this.cache.grid_labels[o],!1),this.coords.big_p[o]=this.toFixed(this.coords.big_w[o]/this.coords.w_rs*100),this.coords.big_x[o]=this.toFixed(this.coords.big_p[o]/2),t[o]=this.toFixed(this.coords.big[o]-this.coords.big_x[o]),i[o]=this.toFixed(t[o]+this.coords.big_p[o]);for(this.options.force_edges&&(t[0]<-this.coords.grid_gap&&(t[0]=-this.coords.grid_gap,i[0]=this.toFixed(t[0]+this.coords.big_p[0]),this.coords.big_x[0]=this.coords.grid_gap),i[s-1]>100+this.coords.grid_gap&&(i[s-1]=100+this.coords.grid_gap,t[s-1]=this.toFixed(i[s-1]-this.coords.big_p[s-1]),this.coords.big_x[s-1]=this.toFixed(this.coords.big_p[s-1]-this.coords.grid_gap))),this.calcGridCollision(2,t,i),this.calcGridCollision(4,t,i),o=0;o<s;o++)e=this.cache.grid_labels[o],this.coords.big_x[o]!==Number.POSITIVE_INFINITY&&(e.style.marginLeft=-this.coords.big_x[o]+"%")}calcGridCollision(t,i,s){let e,o,r,n=this.coords.big_num;for(e=0;e<n&&(o=e+t/2,!(o>=n));e+=t)r=this.cache.grid_labels[o],s[e]<=i[o]?r.style.visibility="visible":r.style.visibility="hidden"}calcGridMargin(){!this.options.grid_margin||(this.coords.w_rs=this.outerWidth(this.cache.rs,!1),this.coords.w_rs&&(this.options.type==="single"?this.coords.w_handle=this.outerWidth(this.cache.s_single,!1):this.coords.w_handle=this.outerWidth(this.cache.s_from,!1),this.coords.p_handle=this.toFixed(this.coords.w_handle/this.coords.w_rs*100),this.coords.grid_gap=this.toFixed(this.coords.p_handle/2-.1),this.cache.grid.style.width=this.toFixed(100-this.coords.p_handle)+"%",this.cache.grid.style.left=this.coords.grid_gap+"%"))}update(t){!this.input||(this.is_update=!0,this.options.from=this.result.from,this.options.to=this.result.to,this.update_check.from=this.result.from,this.update_check.to=this.result.to,this.options=Object.assign({},this.options,t),this.validate(),this.updateResult(),this.toggleInput(),this.remove(),this.init(!0))}reset(){!this.input||(this.updateResult(),this.update())}destroy(){!this.input||(this.toggleInput(),this.cache.input.readonly=!1,this.remove(),this.input=null,this.options=null)}unbindEvens(){this.no_diapason||(this.cache.body.removeEventListener("touchmove",t=>this.pointerMove(t)),this.cache.body.removeEventListener("mousemove",t=>this.pointerMove(t)),this.cache.win.removeEventListener("touchend",t=>this.pointerUp(t)),this.cache.win.removeEventListener("mouseup",t=>this.pointerUp(t)),this.cache.line.removeEventListener("touchstart",t=>this.pointerClick("click",t)),this.cache.line.removeEventListener("mousedown",t=>this.pointerClick("click",t)),this.cache.line.removeEventListener("focus",t=>this.pointerFocus(t)),this.options.drag_interval&&this.options.type==="double"?(this.cache.bar.removeEventListener("touchstart",t=>this.pointerDown("both",t)),this.cache.bar.removeEventListener("mousedown",t=>this.pointerDown("both",t))):(this.cache.bar.removeEventListener("touchstart",t=>this.pointerClick("click",t)),this.cache.bar.removeEventListener("mousedown",t=>this.pointerClick("click",t))),this.options.type==="single"?(this.cache.single.removeEventListener("touchstart",t=>this.pointerDown("single",t)),this.cache.s_single.removeEventListener("touchstart",t=>this.pointerDown("single",t)),this.cache.shad_single.removeEventListener("touchstart",t=>this.pointerClick("click",t)),this.cache.single.removeEventListener("mousedown",t=>this.pointerDown("single",t)),this.cache.s_single.removeEventListener("mousedown",t=>this.pointerDown("single",t)),this.cache.shad_single.removeEventListener("mousedown",t=>this.pointerClick.bind("click",t)),this.cache.edge&&this.cache.edge.removeEventListener("mousedown",t=>this.pointerClick("click",t))):(this.cache.single.removeEventListener("touchstart",t=>this.pointerDown(null,t)),this.cache.single.removeEventListener("mousedown",t=>this.pointerDown(null,t)),this.cache.from.removeEventListener("touchstart",t=>this.pointerDown("from",t)),this.cache.s_from.removeEventListener("touchstart",t=>this.pointerDown("from",t)),this.cache.to.removeEventListener("touchstart",t=>this.pointerDown("to",t)),this.cache.s_to.removeEventListener("touchstart",t=>this.pointerDown("to",t)),this.cache.shad_from.removeEventListener("touchstart",t=>this.pointerClick("click",t)),this.cache.shad_to.removeEventListener("touchstart",t=>this.pointerClick("click",t)),this.cache.from.removeEventListener("mousedown",t=>this.pointerDown("from",t)),this.cache.s_from.removeEventListener("mousedown",t=>this.pointerDown("from",t)),this.cache.to.removeEventListener("mousedown",t=>this.pointerDown("to",t)),this.cache.s_to.removeEventListener("mousedown",t=>this.pointerDown("to",t)),this.cache.shad_from.removeEventListener("mousedown",t=>this.pointerClick("click",t)),this.cache.shad_to.removeEventListener("mousedown",t=>this.pointerClick("click",t))),this.options.keyboard&&this.cache.line.removeEventListener("keydown",t=>this.key("keyboard",t)),this.getIsOldIe()&&(this.cache.body.removeEventListener("mouseup",t=>this.pointerUp(t)),this.cache.body.removeEventListener("mouseleave",t=>this.pointerUp(t))))}}u.Slider=m})(d||(d={}));var x=d;export{x as default};