UNPKG

rangeslider.js-mini

Version:

Simple, small(er) and fast JavaScript/jQuery polyfill for the HTML5 <input type="range"> slider element

2 lines 4.12 kB
/*! rangeslider.js-mini - v0.2.1 | (c) 2016 @andreruffert | MIT license | https://github.com/MCProHosting/rangeslider.js-mini */ !function(a){"use strict";"function"==typeof define&&define.amd?define([],a):"object"==typeof exports?module.exports=a():window.rangeslider=a()}(function(){"use strict";function a(){var a=document.createElement("input");return a.setAttribute("type","range"),"text"!==a.type}function b(){}function c(a){return a&&(0===a.offsetWidth||0===a.offsetHeight||a.open===!1)}function d(a){for(var b=[],d=a.parentNode;c(d);)b.push(d),d=d.parentNode;return b}function e(a,b){for(var c in b)a.style[c]=b[c]}function f(a,b){function c(a){"undefined"!=typeof a.open&&(a.open=a.open?!1:!0)}var f=d(a),g=f.length,h=[],i=a[b];if(g){for(var j=0;g>j;j++)h[j]=f[j].style.cssText,e(f[j],{display:"block",height:"0",overflow:"hidden",visibility:"hidden"}),c(f[j]);i=a[b];for(var k=0;g>k;k++)f[k].style.cssText=h[k],c(f[k])}return i}function g(){for(var a=1;a<arguments.length;a++){var b=arguments[a];if(b)for(var c in b)arguments[0][c]=b[c]}return arguments[0]}function h(a,b,c){b.forEach(function(b){a.addEventListener(b,c)})}function i(a,b,c){b.forEach(function(b){a.removeEventListener(b,c)})}function j(a,b){var c=document.createElement(a);for(var d in b)c.setAttribute(d,b[d]);return c}function k(a){return void 0===a}function l(a,b,c){return b>a?b:a>c?c:a}var m=a(),n="rangeslider",o={polyfill:!0,rangeClass:"rangeslider",disabledClass:"rangeslider--disabled",fillClass:"rangeslider__fill",extraBarClass:"rangeslider__extra-bar",handleClass:"rangeslider__handle",startEvent:["mousedown","touchstart","pointerdown"],moveEvent:["mousemove","touchmove","pointermove"],endEvent:["mouseup","touchend","pointerup"],changeEvent:["change","input"],onInit:b,onSlide:b,onSlideStart:b,onSlideEnd:b};return function(a,b){function c(c,d){var e=H;c===!0&&(H=parseFloat(a.getAttribute("min")||0),G=parseFloat(a.getAttribute("max")||100),J=parseFloat(a.value||H+(G-H)/2),e=parseFloat(a.extraBar||a.getAttribute("extra-bar")||H),I=parseFloat(a.getAttribute("step")||1)),F=f(A,"offsetWidth"),K=f(z,"offsetWidth"),E=K-F,D=F/2,M=(I+"").replace(".","").length-1,a.disabled?z.classList.add(b.disabledClass):z.classList.remove(b.disabledClass),u(s(J),d),v(s(l(e,H,G)))}function d(a){a.preventDefault();var b=q(a);z.classList.add("rangeslider__focus"),u((b-D)/E)}function p(a){a&&a.preventDefault(),z.classList.remove("rangeslider__focus"),i(document,b.moveEvent,d),i(document,b.endEvent,p),b.onSlideEnd(L,J)}function q(a){var b=z.getBoundingClientRect().left,c=0;return k(a.pageX)?k(a.clientX)?a.touches&&a.touches[0]&&!k(a.touches[0].clientX)?c=a.touches[0].clientX:a.currentPoint&&!k(a.currentPoint.x)&&(c=a.currentPoint.x):c=a.clientX:c=a.pageX,c-b}function r(a){for(var b=0;null!==a;)b+=a.offsetLeft,a=a.offsetParent;return b}function s(a){return(a-H)/(G-H)}function t(a){var b;return b=I*Math.round(a*(G-H)/I)+H,+b.toFixed(M)}function u(a,c){var d;d=t(l(a,0,1)),a=s(d),B.style.width=A.style.left=100*a+"%",w(d,c),J=d,L=a,b.onSlide(a,d)}function v(a){C.style.width=100*a+"%"}function w(c,d){c!==J&&(a.value=c,d||b.changeEvent.forEach(function(b){var c=document.createEvent("HTMLEvents");c.initEvent(b,!0,!0),c.origin=n,a.dispatchEvent(c)}))}function x(b){b.origin!==n&&u(s(a.value),!0)}function y(){p(),window.removeEventListener("resize",c),i(a,b.changeEvent,x),a.removeAttribute("style"),z.parentNode.removeChild(z)}if(b=g({},o,b),!b.polyfill||!m){var z=j("div",{"class":b.rangeClass},"afterend"),A=j("div",{"class":b.handleClass}),B=j("div",{"class":b.fillClass}),C=j("div",{"class":b.extraBarClass});z.appendChild(C),z.appendChild(B),z.appendChild(A),a.parentNode.insertBefore(z,a);var D,E,F,G,H,I,J,K,L,M;return e(a,{position:"absolute",width:"1px",height:"1px",overflow:"hidden",opacity:"0"}),window.addEventListener("resize",c),h(a,b.changeEvent,x),h(z,b.startEvent,function(c){if(c.preventDefault(),!a.disabled){h(document,b.moveEvent,d),h(document,b.endEvent,p);var e=q(c),f=a.getBoundingClientRect().left,g=r(A)-f;u((e-D)/E),e>=g&&g+F>e&&(D=e-g),b.onSlideStart()}}),c(!0),a.value=J,b.onInit(),{update:c,destroy:y}}}});