diff --git a/bower.json b/bower.json index 4a03c86..8c1ff97 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "rangeslider-pure", - "version": "0.4.8", + "version": "0.4.9", "homepage": "https://github.com/Stryzhevskyi/rangeSlider", "authors": [ "André Ruffert ", diff --git a/dist/range-slider.js b/dist/range-slider.js index 277a0ee..4116a69 100644 --- a/dist/range-slider.js +++ b/dist/range-slider.js @@ -757,7 +757,7 @@ var RangeSlider = function () { exports.default = RangeSlider; -RangeSlider.version = "0.4.8"; +RangeSlider.version = "0.4.9"; RangeSlider.dom = dom; RangeSlider.functions = func; module.exports = exports['default']; diff --git a/dist/range-slider.min.js b/dist/range-slider.min.js index b587427..3613d5c 100644 --- a/dist/range-slider.min.js +++ b/dist/range-slider.min.js @@ -1,2 +1,2 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("rangeSlider",[],e):"object"==typeof exports?exports.rangeSlider=e():t.rangeSlider=e()}(window,function(){return n={},s.m=i=[function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.uuid=function(){function t(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}return t()+t()+"-"+t()+"-"+t()+"-"+t()+"-"+t()+t()+t()},e.delay=function(t,e){for(var i=arguments.length,n=Array(2 {\n const s4 = () => Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n};\n\n/**\n * Delays a function for the given number of milliseconds, and then calls\n * it with the arguments supplied.\n *\n * @param {Function} fn function\n * @param {Number} wait delay\n * @param {Number} args arguments\n * @return {Function}\n */\nexport const delay = (fn, wait, ...args) => setTimeout(() => fn.apply(null, args), wait);\n\n/**\n * Returns a debounced function that will make sure the given\n * function is not triggered too much.\n *\n * @param {Function} fn Function to debounce.\n * @param {Number} debounceDuration OPTIONAL. The amount of time in milliseconds for which we will debounce the\n * function. (defaults to 100ms)\n * @return {Function}\n */\nexport const debounce = (fn, debounceDuration = 100) => (...args) => {\n if (!fn.debouncing) {\n fn.lastReturnVal = fn.apply(window, args);\n fn.debouncing = true;\n }\n clearTimeout(fn.debounceTimeout);\n fn.debounceTimeout = setTimeout(() => {\n fn.debouncing = false;\n }, debounceDuration);\n return fn.lastReturnVal;\n};\n\nexport const isString = obj => obj === '' + obj;\n\nexport const isArray = obj => Object.prototype.toString.call(obj) === '[object Array]';\n\nexport const isNumberLike = (obj) =>\n (obj !== null && obj !== undefined && ((isString(obj) && isFinite(parseFloat(obj))) || (isFinite(obj))));\n\nexport const getFirsNumberLike = (...args) => {\n if (!args.length) {\n return null;\n }\n\n for (let i = 0, len = args.length; i < len; i++) {\n if (isNumberLike(args[i])) {\n return args[i];\n }\n }\n\n return null;\n};\n\nexport const isObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]';\n\nexport const simpleExtend = (defaultOpt, options) => {\n const opt = {};\n\n for (let key in defaultOpt) {\n opt[key] = defaultOpt[key];\n }\n for (let key in options) {\n opt[key] = options[key];\n }\n\n return opt;\n};\n\nexport const between = (pos, min, max) => {\n if (pos < min) {\n return min;\n }\n if (pos > max) {\n return max;\n }\n return pos;\n};\n","import * as dom from './utils/dom';\nimport * as func from './utils/functions';\nimport './range-slider.css';\n\nconst newLineAndTabRegexp = new RegExp('/[\\\\n\\\\t]/', 'g');\nconst MAX_SET_BY_DEFAULT = 100;\nconst HANDLE_RESIZE_DELAY = 300;\nconst HANDLE_RESIZE_DEBOUNCE = 50;\n\nconst pluginName = 'rangeSlider';\nconst inputrange = dom.supportsRange();\nconst defaults = {\n polyfill: true,\n root: document,\n rangeClass: 'rangeSlider',\n disabledClass: 'rangeSlider--disabled',\n fillClass: 'rangeSlider__fill',\n bufferClass: 'rangeSlider__buffer',\n handleClass: 'rangeSlider__handle',\n startEvent: ['mousedown', 'touchstart', 'pointerdown'],\n moveEvent: ['mousemove', 'touchmove', 'pointermove'],\n endEvent: ['mouseup', 'touchend', 'pointerup'],\n min: null,\n max: null,\n step: null,\n value: null,\n buffer: null,\n stick: null,\n borderRadius: 10,\n vertical: false\n};\n\n/**\n * Plugin\n * @param {HTMLElement} element\n * @param {this} options\n */\nexport default class RangeSlider {\n constructor(element, options) {\n let minSetByDefault;\n let maxSetByDefault;\n let stepSetByDefault;\n let stickAttribute;\n let stickValues;\n\n this.element = element;\n this.options = func.simpleExtend(defaults, options);\n this.polyfill = this.options.polyfill;\n this.vertical = this.options.vertical;\n this.onInit = this.options.onInit;\n this.onSlide = this.options.onSlide;\n this.onSlideStart = this.options.onSlideStart;\n this.onSlideEnd = this.options.onSlideEnd;\n this.onSlideEventsCount = -1;\n this.isInteractsNow = false;\n this.needTriggerEvents = false;\n\n // Plugin should only be used as a polyfill\n if (!this.polyfill) {\n // Input range support?\n if (inputrange) {\n return;\n }\n }\n\n this.options.buffer = this.options.buffer || parseFloat(this.element.getAttribute('data-buffer'));\n\n this.identifier = 'js-' + pluginName + '-' + func.uuid();\n\n this.min = func.getFirsNumberLike(\n this.options.min,\n parseFloat(this.element.getAttribute('min')),\n (minSetByDefault = 0)\n );\n\n this.max = func.getFirsNumberLike(\n this.options.max,\n parseFloat(this.element.getAttribute('max')),\n (maxSetByDefault = MAX_SET_BY_DEFAULT)\n );\n\n this.value = func.getFirsNumberLike(this.options.value, this.element.value,\n parseFloat(this.element.value || this.min + (this.max - this.min) / 2));\n\n this.step = func.getFirsNumberLike(this.options.step,\n parseFloat(this.element.getAttribute('step')) || (stepSetByDefault = 1));\n\n this.percent = null;\n\n if (func.isArray(this.options.stick) && this.options.stick.length >= 1) {\n this.stick = this.options.stick;\n } else if ((stickAttribute = this.element.getAttribute('stick'))) {\n stickValues = stickAttribute.split(' ');\n if (stickValues.length >= 1) {\n this.stick = stickValues.map(parseFloat);\n }\n }\n if (this.stick && this.stick.length === 1) {\n this.stick.push(this.step * 1.5);\n }\n this._updatePercentFromValue();\n\n this.toFixed = this._toFixed(this.step);\n\n let directionClass;\n\n this.container = document.createElement('div');\n dom.addClass(this.container, this.options.fillClass);\n\n directionClass = this.vertical ? this.options.fillClass + '__vertical' : this.options.fillClass + '__horizontal';\n dom.addClass(this.container, directionClass);\n\n this.handle = document.createElement('div');\n dom.addClass(this.handle, this.options.handleClass);\n\n directionClass = this.vertical ?\n this.options.handleClass + '__vertical' :\n this.options.handleClass + '__horizontal';\n dom.addClass(this.handle, directionClass);\n\n this.range = document.createElement('div');\n dom.addClass(this.range, this.options.rangeClass);\n this.range.id = this.identifier;\n\n if (this.options.bufferClass) {\n this.buffer = document.createElement('div');\n dom.addClass(this.buffer, this.options.bufferClass);\n this.range.appendChild(this.buffer);\n\n directionClass = this.vertical ?\n this.options.bufferClass + '__vertical' :\n this.options.bufferClass + '__horizontal';\n dom.addClass(this.buffer, directionClass);\n }\n\n this.range.appendChild(this.container);\n this.range.appendChild(this.handle);\n\n directionClass = this.vertical ? this.options.rangeClass + '__vertical' : this.options.rangeClass + '__horizontal';\n dom.addClass(this.range, directionClass);\n\n if (func.isNumberLike(this.options.value)) {\n this._setValue(this.options.value, true);\n this.element.value = this.options.value;\n }\n\n if (func.isNumberLike(this.options.buffer)) {\n this.element.setAttribute('data-buffer', this.options.buffer);\n }\n\n if (func.isNumberLike(this.options.min) || minSetByDefault) {\n this.element.setAttribute('min', '' + this.min);\n }\n\n if (func.isNumberLike(this.options.max) || maxSetByDefault) {\n this.element.setAttribute('max', '' + this.max);\n }\n\n if (func.isNumberLike(this.options.step) || stepSetByDefault) {\n this.element.setAttribute('step', '' + this.step);\n }\n\n dom.insertAfter(this.element, this.range);\n\n // hide the input visually\n dom.setCss(this.element, {\n 'position': 'absolute',\n 'width': '1px',\n 'height': '1px',\n 'overflow': 'hidden',\n 'opacity': '0'\n });\n\n // Store context\n this._handleDown = this._handleDown.bind(this);\n this._handleMove = this._handleMove.bind(this);\n this._handleEnd = this._handleEnd.bind(this);\n this._startEventListener = this._startEventListener.bind(this);\n this._changeEventListener = this._changeEventListener.bind(this);\n this._handleResize = this._handleResize.bind(this);\n\n this._init();\n\n // Attach Events\n window.addEventListener('resize', this._handleResize, false);\n\n dom.addEventListeners(this.options.root, this.options.startEvent, this._startEventListener);\n\n // Listen to programmatic value changes\n this.element.addEventListener('change', this._changeEventListener, false);\n }\n\n /* public methods */\n\n /**\n * @param {Object} obj like {min : Number, max : Number, value : Number, step : Number, buffer : [String|Number]}\n * @param {Boolean} triggerEvents\n * @returns {RangeSlider}\n */\n update(obj, triggerEvents) {\n if (triggerEvents) {\n this.needTriggerEvents = true;\n }\n if (func.isObject(obj)) {\n if (func.isNumberLike(obj.min)) {\n this.element.setAttribute('min', '' + obj.min);\n this.min = obj.min;\n }\n\n if (func.isNumberLike(obj.max)) {\n this.element.setAttribute('max', '' + obj.max);\n this.max = obj.max;\n }\n\n if (func.isNumberLike(obj.step)) {\n this.element.setAttribute('step', '' + obj.step);\n this.step = obj.step;\n this.toFixed = this._toFixed(obj.step);\n }\n\n if (func.isNumberLike(obj.buffer)) {\n this._setBufferPosition(obj.buffer);\n }\n\n if (func.isNumberLike(obj.value)) {\n this._setValue(obj.value);\n }\n }\n this._update();\n this.onSlideEventsCount = 0;\n this.needTriggerEvents = false;\n return this;\n };\n\n destroy() {\n dom.removeAllListenersFromEl(this, this.options.root);\n window.removeEventListener('resize', this._handleResize, false);\n this.element.removeEventListener('change', this._changeEventListener, false);\n\n this.element.style.cssText = '';\n delete this.element[pluginName];\n\n // Remove the generated markup\n if (this.range) {\n this.range.parentNode.removeChild(this.range);\n }\n }\n\n /**\n * A lightweight plugin wrapper around the constructor,preventing against multiple instantiations\n * @param {Element} el\n * @param {Object} options\n */\n static create(el, options) {\n const createInstance = (el) => {\n let data = el[pluginName];\n\n // Create a new instance.\n if (!data) {\n data = new RangeSlider(el, options);\n el[pluginName] = data;\n }\n };\n\n if (el.length) {\n Array.prototype.slice.call(el).forEach(function (el) {\n createInstance(el);\n });\n } else {\n createInstance(el);\n }\n }\n\n /* private methods */\n\n _toFixed(step) {\n return (step + '').replace('.', '').length - 1;\n }\n\n _init() {\n if (this.onInit && typeof this.onInit === 'function') {\n this.onInit();\n }\n this._update(false);\n }\n\n _updatePercentFromValue() {\n this.percent = (this.value - this.min) / (this.max - this.min);\n }\n\n /**\n * This method check if this.identifier exists in ev.target's ancestors\n * @param ev\n * @param data\n */\n _startEventListener(ev, data) {\n const el = ev.target;\n let isEventOnSlider = false;\n\n if (ev.which !== 1 && !('touches' in ev)) {\n return;\n }\n\n dom.forEachAncestors(\n el,\n el => (isEventOnSlider = el.id === this.identifier && !dom.hasClass(el, this.options.disabledClass)),\n true\n );\n\n if (isEventOnSlider) {\n this._handleDown(ev, data);\n }\n }\n\n _changeEventListener(ev, data) {\n if (data && data.origin === this.identifier) {\n return;\n }\n\n const value = ev.target.value;\n const pos = this._getPositionFromValue(value);\n\n this._setPosition(pos);\n }\n\n _update(triggerEvent) {\n const sizeProperty = this.vertical ? 'offsetHeight' : 'offsetWidth';\n\n this.handleSize = dom.getDimension(this.handle, sizeProperty);\n this.rangeSize = dom.getDimension(this.range, sizeProperty);\n this.maxHandleX = this.rangeSize - this.handleSize;\n this.grabX = this.handleSize / 2;\n this.position = this._getPositionFromValue(this.value);\n\n // Consider disabled state\n if (this.element.disabled) {\n dom.addClass(this.range, this.options.disabledClass);\n } else {\n dom.removeClass(this.range, this.options.disabledClass);\n }\n\n this._setPosition(this.position);\n if (this.options.bufferClass && this.options.buffer) {\n this._setBufferPosition(this.options.buffer);\n }\n this._updatePercentFromValue();\n if (triggerEvent !== false) {\n dom.triggerEvent(this.element, 'change', { origin: this.identifier });\n }\n }\n\n _handleResize() {\n return func.debounce(() => {\n // Simulate resizeEnd event.\n func.delay(() => {\n this._update();\n }, HANDLE_RESIZE_DELAY);\n }, HANDLE_RESIZE_DEBOUNCE)();\n }\n\n _handleDown(e) {\n this.isInteractsNow = true;\n e.preventDefault();\n dom.addEventListeners(this.options.root, this.options.moveEvent, this._handleMove);\n dom.addEventListeners(this.options.root, this.options.endEvent, this._handleEnd);\n\n // If we click on the handle don't set the new position\n if ((' ' + e.target.className + ' ').replace(newLineAndTabRegexp, ' ').indexOf(this.options.handleClass) > -1) {\n return;\n }\n\n const boundingClientRect = this.range.getBoundingClientRect();\n\n const posX = this._getRelativePosition(e);\n const rangeX = this.vertical ? boundingClientRect.bottom : boundingClientRect.left;\n const handleX = this._getPositionFromNode(this.handle) - rangeX;\n const position = posX - this.grabX;\n\n this._setPosition(position);\n\n if (posX >= handleX && posX < handleX + this.options.borderRadius * 2) {\n this.grabX = posX - handleX;\n }\n this._updatePercentFromValue();\n }\n\n _handleMove(e) {\n const posX = this._getRelativePosition(e);\n\n this.isInteractsNow = true;\n e.preventDefault();\n this._setPosition(posX - this.grabX);\n }\n\n _handleEnd(e) {\n e.preventDefault();\n dom.removeEventListeners(this.options.root, this.options.moveEvent, this._handleMove);\n dom.removeEventListeners(this.options.root, this.options.endEvent, this._handleEnd);\n\n // Ok we're done fire the change event\n dom.triggerEvent(this.element, 'change', { origin: this.identifier });\n\n if (this.isInteractsNow || this.needTriggerEvents) {\n if (this.onSlideEnd && typeof this.onSlideEnd === 'function') {\n this.onSlideEnd(this.value, this.percent, this.position);\n }\n }\n this.onSlideEventsCount = 0;\n this.isInteractsNow = false;\n }\n\n _setPosition(pos) {\n let position;\n let stickRadius;\n let restFromValue;\n let stickTo;\n\n // Snapping steps\n let value = this._getValueFromPosition(func.between(pos, 0, this.maxHandleX));\n\n // Stick to stick[0] in radius stick[1]\n if (this.stick) {\n stickTo = this.stick[0];\n stickRadius = this.stick[1] || 0.1;\n restFromValue = value % stickTo;\n if (restFromValue < stickRadius) {\n value = value - restFromValue;\n } else if (Math.abs(stickTo - restFromValue) < stickRadius) {\n value = value - restFromValue + stickTo;\n }\n }\n position = this._getPositionFromValue(value);\n\n // Update ui\n if (this.vertical) {\n this.container.style.height = (position + this.grabX) + 'px';\n this.handle.style['webkitTransform'] = 'translateY(-' + position + 'px)';\n this.handle.style['msTransform'] = 'translateY(-' + position + 'px)';\n this.handle.style.transform = 'translateY(-' + position + 'px)';\n } else {\n this.container.style.width = (position + this.grabX) + 'px';\n this.handle.style['webkitTransform'] = 'translateX(' + position + 'px)';\n this.handle.style['msTransform'] = 'translateX(' + position + 'px)';\n this.handle.style.transform = 'translateX(' + position + 'px)';\n }\n\n this._setValue(value);\n\n // Update globals\n this.position = position;\n this.value = value;\n this._updatePercentFromValue();\n\n if (this.isInteractsNow || this.needTriggerEvents) {\n if (this.onSlideStart && typeof this.onSlideStart === 'function' && this.onSlideEventsCount === 0) {\n this.onSlideStart(this.value, this.percent, this.position);\n }\n\n if (this.onSlide && typeof this.onSlide === 'function') {\n this.onSlide(this.value, this.percent, this.position);\n }\n }\n\n this.onSlideEventsCount++;\n }\n\n _setBufferPosition(pos) {\n let isPercent = true;\n\n if (isFinite(pos)) {\n pos = parseFloat(pos);\n } else if (func.isString(pos)) {\n if (pos.indexOf('px') > 0) {\n isPercent = false;\n }\n pos = parseFloat(pos);\n } else {\n console.warn('New position must be XXpx or XX%');\n return;\n }\n\n if (isNaN(pos)) {\n console.warn('New position is NaN');\n return;\n }\n if (!this.options.bufferClass) {\n console.warn('You disabled buffer, it\\'s className is empty');\n return;\n }\n let bufferSize = isPercent ? pos : (pos / this.rangeSize * 100);\n\n if (bufferSize < 0) {\n bufferSize = 0;\n }\n if (bufferSize > 100) {\n bufferSize = 100;\n }\n this.options.buffer = bufferSize;\n\n let paddingSize = this.options.borderRadius / this.rangeSize * 100;\n let bufferSizeWithPadding = bufferSize - paddingSize;\n\n if (bufferSizeWithPadding < 0) {\n bufferSizeWithPadding = 0;\n }\n\n if (this.vertical) {\n this.buffer.style.height = bufferSizeWithPadding + '%';\n this.buffer.style.bottom = paddingSize * 0.5 + '%';\n } else {\n this.buffer.style.width = bufferSizeWithPadding + '%';\n this.buffer.style.left = paddingSize * 0.5 + '%';\n }\n\n this.element.setAttribute('data-buffer', bufferSize);\n }\n\n /**\n *\n * @param {Element} node\n * @returns {*} Returns element position relative to the parent\n * @private\n */\n _getPositionFromNode(node) {\n let i = this.vertical ? this.maxHandleX : 0;\n\n while (node !== null) {\n i += this.vertical ? node.offsetTop : node.offsetLeft;\n node = node.offsetParent;\n }\n return i;\n }\n\n /**\n *\n * @param {(MouseEvent|TouchEvent)}e\n * @returns {number}\n */\n _getRelativePosition(e) {\n const boundingClientRect = this.range.getBoundingClientRect();\n\n // Get the offset relative to the viewport\n const rangeSize = this.vertical ? boundingClientRect.bottom : boundingClientRect.left;\n let pageOffset = 0;\n\n const pagePositionProperty = this.vertical ? 'pageY' : 'pageX';\n\n if (typeof e[pagePositionProperty] !== 'undefined') {\n pageOffset = (e.touches && e.touches.length) ? e.touches[0][pagePositionProperty] : e[pagePositionProperty];\n } else if (typeof e.originalEvent !== 'undefined') {\n if (typeof e.originalEvent[pagePositionProperty] !== 'undefined') {\n pageOffset = e.originalEvent[pagePositionProperty];\n } else if (e.originalEvent.touches && e.originalEvent.touches[0] &&\n typeof e.originalEvent.touches[0][pagePositionProperty] !== 'undefined') {\n pageOffset = e.originalEvent.touches[0][pagePositionProperty];\n }\n } else if (e.touches && e.touches[0] && typeof e.touches[0][pagePositionProperty] !== 'undefined') {\n pageOffset = e.touches[0][pagePositionProperty];\n } else if (e.currentPoint && (typeof e.currentPoint.x !== 'undefined' || typeof e.currentPoint.y !== 'undefined')) {\n pageOffset = this.vertical ? e.currentPoint.y : e.currentPoint.x;\n }\n\n if (this.vertical) {\n pageOffset -= window.pageYOffset;\n }\n\n return this.vertical ? rangeSize - pageOffset : pageOffset - rangeSize;\n }\n\n _getPositionFromValue(value) {\n const percentage = (value - this.min) / (this.max - this.min);\n const pos = percentage * this.maxHandleX;\n\n return isNaN(pos) ? 0 : pos;\n }\n\n _getValueFromPosition(pos) {\n const percentage = ((pos) / (this.maxHandleX || 1));\n const value = this.step * Math.round(percentage * (this.max - this.min) / this.step) + this.min;\n\n return Number((value).toFixed(this.toFixed));\n }\n\n _setValue(value, force) {\n if (value === this.value && !force) {\n return;\n }\n\n // Set the new value and fire the `input` event\n this.element.value = value;\n this.value = value;\n dom.triggerEvent(this.element, 'input', { origin: this.identifier });\n }\n}\n\nRangeSlider.version = VERSION;\nRangeSlider.dom = dom;\nRangeSlider.functions = func;\n","import * as func from './functions';\n\nconst EVENT_LISTENER_LIST = 'eventListenerList';\n\nexport const detectIE = () => {\n const ua = window.navigator.userAgent;\n const msie = ua.indexOf('MSIE ');\n\n if (msie > 0) {\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n const trident = ua.indexOf('Trident/');\n\n if (trident > 0) {\n const rv = ua.indexOf('rv:');\n\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n const edge = ua.indexOf('Edge/');\n\n if (edge > 0) {\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n }\n\n return false;\n};\n\nconst ieVersion = detectIE();\nconst eventCaptureParams = window.PointerEvent && !ieVersion ? {passive: false} : false;\n\n/**\n * Check if a `element` is visible in the DOM\n *\n * @param {Element} element\n * @return {Boolean}\n */\nexport const isHidden = (element) => (\n element.offsetWidth === 0 || element.offsetHeight === 0 || element.open === false\n);\n\n/**\n * Get hidden parentNodes of an `element`\n *\n * @param {Element} element\n * @return {Element[]}\n */\nexport const getHiddenParentNodes = (element) => {\n const parents = [];\n let node = element.parentNode;\n\n while (node && isHidden(node)) {\n parents.push(node);\n node = node.parentNode;\n }\n return parents;\n};\n\n/**\n * Returns dimensions for an element even if it is not visible in the DOM.\n *\n * @param {Element} element\n * @param {string} key (e.g. offsetWidth …)\n * @return {Number}\n */\nexport const getDimension = (element, key) => {\n const hiddenParentNodes = getHiddenParentNodes(element);\n const hiddenParentNodesLength = hiddenParentNodes.length;\n const hiddenParentNodesStyle = [];\n let dimension = element[key];\n\n // Used for native `
` elements\n const toggleOpenProperty = (element) => {\n if (typeof element.open !== 'undefined') {\n element.open = !element.open;\n }\n };\n\n if (hiddenParentNodesLength) {\n for (let i = 0; i < hiddenParentNodesLength; i++) {\n // Cache the styles to restore then later.\n hiddenParentNodesStyle.push({\n display: hiddenParentNodes[i].style.display,\n height: hiddenParentNodes[i].style.height,\n overflow: hiddenParentNodes[i].style.overflow,\n visibility: hiddenParentNodes[i].style.visibility\n });\n\n hiddenParentNodes[i].style.display = 'block';\n hiddenParentNodes[i].style.height = '0';\n hiddenParentNodes[i].style.overflow = 'hidden';\n hiddenParentNodes[i].style.visibility = 'hidden';\n toggleOpenProperty(hiddenParentNodes[i]);\n }\n\n dimension = element[key];\n\n for (let j = 0; j < hiddenParentNodesLength; j++) {\n toggleOpenProperty(hiddenParentNodes[j]);\n hiddenParentNodes[j].style.display = hiddenParentNodesStyle[j].display;\n hiddenParentNodes[j].style.height = hiddenParentNodesStyle[j].height;\n hiddenParentNodes[j].style.overflow = hiddenParentNodesStyle[j].overflow;\n hiddenParentNodes[j].style.visibility = hiddenParentNodesStyle[j].visibility;\n }\n }\n return dimension;\n};\n\n/**\n *\n * @param {HTMLElement} el\n * @param {Object} cssObj\n * @returns {*}\n */\nexport const setCss = (el, cssObj) => {\n for (const key in cssObj) {\n el.style[key] = cssObj[key];\n }\n return el.style;\n};\n\n/**\n *\n * @param {HTMLElement} elem\n * @param {string} className\n */\nexport const hasClass = (elem, className) => new RegExp(' ' + className + ' ').test(' ' + elem.className + ' ');\n\n/**\n *\n * @param {HTMLElement} elem\n * @param {string} className\n */\nexport const addClass = (elem, className) => {\n if (!hasClass(elem, className)) {\n elem.className += ' ' + className;\n }\n};\n\n/**\n *\n * @param {HTMLElement} elem\n * @param {string} className\n */\nexport const removeClass = (elem, className) => {\n let newClass = ' ' + elem.className.replace(/[\\t\\r\\n]/g, ' ') + ' ';\n\n if (hasClass(elem, className)) {\n while (newClass.indexOf(' ' + className + ' ') >= 0) {\n newClass = newClass.replace(' ' + className + ' ', ' ');\n }\n elem.className = newClass.replace(/^\\s+|\\s+$/g, '');\n }\n};\n\n/**\n *\n * @param {HTMLElement} el\n * @param {Function} callback\n * @param {boolean} andForElement - apply callback for el\n * @returns {HTMLElement}\n */\nexport const forEachAncestors = (el, callback, andForElement) => {\n if (andForElement) {\n callback(el);\n }\n\n while (el.parentNode && !callback(el)) {\n el = el.parentNode;\n }\n\n return el;\n};\n\n/**\n *\n * @param {HTMLElement} el\n * @param {string} name event name\n * @param {Object} data\n */\nexport const triggerEvent = (el, name, data) => {\n if (!func.isString(name)) {\n throw new TypeError('event name must be String');\n }\n if (!(el instanceof HTMLElement)) {\n throw new TypeError('element must be HTMLElement');\n }\n name = name.trim();\n const event = document.createEvent('CustomEvent');\n\n event.initCustomEvent(name, false, false, data);\n el.dispatchEvent(event);\n};\n\n/**\n * @param {Object} referenceNode after this\n * @param {Object} newNode insert this\n */\nexport const insertAfter = (referenceNode, newNode) =>\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n\n/**\n * Add event listeners and push them to el[EVENT_LISTENER_LIST]\n * @param {HTMLElement|Node|Document} el DOM element\n * @param {Array} events\n * @param {Function} listener\n */\nexport const addEventListeners = (el, events, listener) => {\n events.forEach((eventName) => {\n if (!el[EVENT_LISTENER_LIST]) {\n el[EVENT_LISTENER_LIST] = {};\n }\n if (!el[EVENT_LISTENER_LIST][eventName]) {\n el[EVENT_LISTENER_LIST][eventName] = [];\n }\n\n el.addEventListener(\n eventName,\n listener,\n eventCaptureParams\n );\n if (el[EVENT_LISTENER_LIST][eventName].indexOf(listener) < 0) {\n el[EVENT_LISTENER_LIST][eventName].push(listener);\n }\n });\n};\n\n/**\n * Remove event listeners and remove them from el[EVENT_LISTENER_LIST]\n * @param {HTMLElement} el DOM element\n * @param {Array} events\n * @param {Function} listener\n */\nexport const removeEventListeners = (el, events, listener) => {\n events.forEach((eventName) => {\n let index;\n\n el.removeEventListener(\n eventName,\n listener,\n false\n );\n\n if (el[EVENT_LISTENER_LIST] && el[EVENT_LISTENER_LIST][eventName] &&\n (index = el[EVENT_LISTENER_LIST][eventName].indexOf(listener)) > -1\n ) {\n el[EVENT_LISTENER_LIST][eventName].splice(index, 1);\n }\n });\n};\n\n/**\n * Remove ALL event listeners which exists in el[EVENT_LISTENER_LIST]\n * @param {RangeSlider} instance\n * @param {HTMLElement} el DOM element\n */\nexport const removeAllListenersFromEl = (instance, el) => {\n if (!el[EVENT_LISTENER_LIST]) {\n return;\n }\n\n /* jshint ignore:start */\n\n /**\n *\n * @callback listener\n * @this {Object} event name\n */\n function rm(listener) {\n if (listener === instance._startEventListener) {\n this.el.removeEventListener(this.eventName, listener, false);\n }\n }\n\n for (const eventName in el[EVENT_LISTENER_LIST]) {\n el[EVENT_LISTENER_LIST][eventName].forEach(rm, {eventName: eventName, el: el});\n }\n\n el[EVENT_LISTENER_LIST] = {};\n /* jshint ignore:end */\n};\n\n/**\n * Range feature detection\n * @return {Boolean}\n */\nexport const supportsRange = () => {\n const input = document.createElement('input');\n\n input.setAttribute('type', 'range');\n return input.type !== 'text';\n};\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://rangeSlider/webpack/universalModuleDefinition","webpack://rangeSlider/webpack/bootstrap","webpack://rangeSlider/./src/utils/functions.js","webpack://rangeSlider/./src/range-slider.js","webpack://rangeSlider/./src/utils/dom.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","uuid","s4","Math","floor","random","toString","substring","delay","fn","wait","_len","arguments","length","args","Array","_key","setTimeout","apply","debounce","debounceDuration","undefined","_len2","_key2","debouncing","lastReturnVal","clearTimeout","debounceTimeout","isString","obj","isNumberLike","isArray","isFinite","parseFloat","getFirsNumberLike","_len3","_key3","len","isObject","simpleExtend","defaultOpt","options","opt","between","pos","min","max","dom","func","newLineAndTabRegexp","RegExp","pluginName","inputrange","supportsRange","defaults","polyfill","document","rangeClass","disabledClass","fillClass","bufferClass","handleClass","startEvent","moveEvent","endEvent","step","buffer","stick","borderRadius","vertical","RangeSlider","element","_classCallCheck","this","stepSetByDefault","stickAttribute","stickValues","onInit","onSlide","onSlideStart","onSlideEnd","onSlideEventsCount","isInteractsNow","needTriggerEvents","getAttribute","identifier","percent","split","map","push","_updatePercentFromValue","toFixed","_toFixed","directionClass","container","createElement","addClass","handle","range","id","appendChild","_setValue","setAttribute","insertAfter","setCss","position","width","height","overflow","opacity","_handleDown","_handleMove","_handleEnd","_startEventListener","_changeEventListener","_handleResize","_init","addEventListener","addEventListeners","triggerEvents","_setBufferPosition","_update","removeAllListenersFromEl","removeEventListener","style","cssText","parentNode","removeChild","replace","ev","data","_this","el","target","isEventOnSlider","which","forEachAncestors","hasClass","origin","_getPositionFromValue","_setPosition","triggerEvent","sizeProperty","handleSize","getDimension","rangeSize","maxHandleX","grabX","disabled","removeClass","_this2","e","preventDefault","className","indexOf","boundingClientRect","getBoundingClientRect","posX","_getRelativePosition","rangeX","bottom","left","handleX","_getPositionFromNode","removeEventListeners","stickRadius","restFromValue","stickTo","_getValueFromPosition","abs","transform","isPercent","console","warn","isNaN","bufferSize","paddingSize","bufferSizeWithPadding","node","offsetTop","offsetLeft","offsetParent","pageOffset","pagePositionProperty","touches","originalEvent","currentPoint","x","y","pageYOffset","percentage","round","Number","force","createInstance","slice","forEach","version","VERSION","functions","EVENT_LISTENER_LIST","ieVersion","detectIE","ua","navigator","userAgent","msie","parseInt","rv","edge","eventCaptureParams","PointerEvent","passive","isHidden","offsetWidth","offsetHeight","open","getHiddenParentNodes","parents","hiddenParentNodes","hiddenParentNodesLength","hiddenParentNodesStyle","dimension","toggleOpenProperty","display","visibility","j","cssObj","elem","test","newClass","callback","andForElement","TypeError","HTMLElement","trim","event","createEvent","initCustomEvent","dispatchEvent","referenceNode","newNode","insertBefore","nextSibling","events","listener","eventName","index","splice","instance","rm","input","type"],"mappings":"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","file":"range-slider.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"rangeSlider\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"rangeSlider\"] = factory();\n\telse\n\t\troot[\"rangeSlider\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","/**\n * Create a random uuid\n */\nexport const uuid = () => {\n const s4 = () => Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n};\n\n/**\n * Delays a function for the given number of milliseconds, and then calls\n * it with the arguments supplied.\n *\n * @param {Function} fn function\n * @param {Number} wait delay\n * @param {Number} args arguments\n * @return {Function}\n */\nexport const delay = (fn, wait, ...args) => setTimeout(() => fn.apply(null, args), wait);\n\n/**\n * Returns a debounced function that will make sure the given\n * function is not triggered too much.\n *\n * @param {Function} fn Function to debounce.\n * @param {Number} debounceDuration OPTIONAL. The amount of time in milliseconds for which we will debounce the\n * function. (defaults to 100ms)\n * @return {Function}\n */\nexport const debounce = (fn, debounceDuration = 100) => (...args) => {\n if (!fn.debouncing) {\n fn.lastReturnVal = fn.apply(window, args);\n fn.debouncing = true;\n }\n clearTimeout(fn.debounceTimeout);\n fn.debounceTimeout = setTimeout(() => {\n fn.debouncing = false;\n }, debounceDuration);\n return fn.lastReturnVal;\n};\n\nexport const isString = obj => obj === '' + obj;\n\nexport const isArray = obj => Object.prototype.toString.call(obj) === '[object Array]';\n\nexport const isNumberLike = (obj) =>\n (obj !== null && obj !== undefined && ((isString(obj) && isFinite(parseFloat(obj))) || (isFinite(obj))));\n\nexport const getFirsNumberLike = (...args) => {\n if (!args.length) {\n return null;\n }\n\n for (let i = 0, len = args.length; i < len; i++) {\n if (isNumberLike(args[i])) {\n return args[i];\n }\n }\n\n return null;\n};\n\nexport const isObject = (obj) => Object.prototype.toString.call(obj) === '[object Object]';\n\nexport const simpleExtend = (defaultOpt, options) => {\n const opt = {};\n\n for (let key in defaultOpt) {\n opt[key] = defaultOpt[key];\n }\n for (let key in options) {\n opt[key] = options[key];\n }\n\n return opt;\n};\n\nexport const between = (pos, min, max) => {\n if (pos < min) {\n return min;\n }\n if (pos > max) {\n return max;\n }\n return pos;\n};\n","import * as dom from './utils/dom';\nimport * as func from './utils/functions';\nimport './range-slider.css';\n\nconst newLineAndTabRegexp = new RegExp('/[\\\\n\\\\t]/', 'g');\nconst MAX_SET_BY_DEFAULT = 100;\nconst HANDLE_RESIZE_DELAY = 300;\nconst HANDLE_RESIZE_DEBOUNCE = 50;\n\nconst pluginName = 'rangeSlider';\nconst inputrange = dom.supportsRange();\nconst defaults = {\n polyfill: true,\n root: document,\n rangeClass: 'rangeSlider',\n disabledClass: 'rangeSlider--disabled',\n fillClass: 'rangeSlider__fill',\n bufferClass: 'rangeSlider__buffer',\n handleClass: 'rangeSlider__handle',\n startEvent: ['mousedown', 'touchstart', 'pointerdown'],\n moveEvent: ['mousemove', 'touchmove', 'pointermove'],\n endEvent: ['mouseup', 'touchend', 'pointerup'],\n min: null,\n max: null,\n step: null,\n value: null,\n buffer: null,\n stick: null,\n borderRadius: 10,\n vertical: false\n};\n\n/**\n * Plugin\n * @param {HTMLElement} element\n * @param {this} options\n */\nexport default class RangeSlider {\n constructor(element, options) {\n let minSetByDefault;\n let maxSetByDefault;\n let stepSetByDefault;\n let stickAttribute;\n let stickValues;\n\n this.element = element;\n this.options = func.simpleExtend(defaults, options);\n this.polyfill = this.options.polyfill;\n this.vertical = this.options.vertical;\n this.onInit = this.options.onInit;\n this.onSlide = this.options.onSlide;\n this.onSlideStart = this.options.onSlideStart;\n this.onSlideEnd = this.options.onSlideEnd;\n this.onSlideEventsCount = -1;\n this.isInteractsNow = false;\n this.needTriggerEvents = false;\n\n // Plugin should only be used as a polyfill\n if (!this.polyfill) {\n // Input range support?\n if (inputrange) {\n return;\n }\n }\n\n this.options.buffer = this.options.buffer || parseFloat(this.element.getAttribute('data-buffer'));\n\n this.identifier = 'js-' + pluginName + '-' + func.uuid();\n\n this.min = func.getFirsNumberLike(\n this.options.min,\n parseFloat(this.element.getAttribute('min')),\n (minSetByDefault = 0)\n );\n\n this.max = func.getFirsNumberLike(\n this.options.max,\n parseFloat(this.element.getAttribute('max')),\n (maxSetByDefault = MAX_SET_BY_DEFAULT)\n );\n\n this.value = func.getFirsNumberLike(this.options.value, this.element.value,\n parseFloat(this.element.value || this.min + (this.max - this.min) / 2));\n\n this.step = func.getFirsNumberLike(this.options.step,\n parseFloat(this.element.getAttribute('step')) || (stepSetByDefault = 1));\n\n this.percent = null;\n\n if (func.isArray(this.options.stick) && this.options.stick.length >= 1) {\n this.stick = this.options.stick;\n } else if ((stickAttribute = this.element.getAttribute('stick'))) {\n stickValues = stickAttribute.split(' ');\n if (stickValues.length >= 1) {\n this.stick = stickValues.map(parseFloat);\n }\n }\n if (this.stick && this.stick.length === 1) {\n this.stick.push(this.step * 1.5);\n }\n this._updatePercentFromValue();\n\n this.toFixed = this._toFixed(this.step);\n\n let directionClass;\n\n this.container = document.createElement('div');\n dom.addClass(this.container, this.options.fillClass);\n\n directionClass = this.vertical ? this.options.fillClass + '__vertical' : this.options.fillClass + '__horizontal';\n dom.addClass(this.container, directionClass);\n\n this.handle = document.createElement('div');\n dom.addClass(this.handle, this.options.handleClass);\n\n directionClass = this.vertical ?\n this.options.handleClass + '__vertical' :\n this.options.handleClass + '__horizontal';\n dom.addClass(this.handle, directionClass);\n\n this.range = document.createElement('div');\n dom.addClass(this.range, this.options.rangeClass);\n this.range.id = this.identifier;\n\n if (this.options.bufferClass) {\n this.buffer = document.createElement('div');\n dom.addClass(this.buffer, this.options.bufferClass);\n this.range.appendChild(this.buffer);\n\n directionClass = this.vertical ?\n this.options.bufferClass + '__vertical' :\n this.options.bufferClass + '__horizontal';\n dom.addClass(this.buffer, directionClass);\n }\n\n this.range.appendChild(this.container);\n this.range.appendChild(this.handle);\n\n directionClass = this.vertical ? this.options.rangeClass + '__vertical' : this.options.rangeClass + '__horizontal';\n dom.addClass(this.range, directionClass);\n\n if (func.isNumberLike(this.options.value)) {\n this._setValue(this.options.value, true);\n this.element.value = this.options.value;\n }\n\n if (func.isNumberLike(this.options.buffer)) {\n this.element.setAttribute('data-buffer', this.options.buffer);\n }\n\n if (func.isNumberLike(this.options.min) || minSetByDefault) {\n this.element.setAttribute('min', '' + this.min);\n }\n\n if (func.isNumberLike(this.options.max) || maxSetByDefault) {\n this.element.setAttribute('max', '' + this.max);\n }\n\n if (func.isNumberLike(this.options.step) || stepSetByDefault) {\n this.element.setAttribute('step', '' + this.step);\n }\n\n dom.insertAfter(this.element, this.range);\n\n // hide the input visually\n dom.setCss(this.element, {\n 'position': 'absolute',\n 'width': '1px',\n 'height': '1px',\n 'overflow': 'hidden',\n 'opacity': '0'\n });\n\n // Store context\n this._handleDown = this._handleDown.bind(this);\n this._handleMove = this._handleMove.bind(this);\n this._handleEnd = this._handleEnd.bind(this);\n this._startEventListener = this._startEventListener.bind(this);\n this._changeEventListener = this._changeEventListener.bind(this);\n this._handleResize = this._handleResize.bind(this);\n\n this._init();\n\n // Attach Events\n window.addEventListener('resize', this._handleResize, false);\n\n dom.addEventListeners(this.options.root, this.options.startEvent, this._startEventListener);\n\n // Listen to programmatic value changes\n this.element.addEventListener('change', this._changeEventListener, false);\n }\n\n /* public methods */\n\n /**\n * @param {Object} obj like {min : Number, max : Number, value : Number, step : Number, buffer : [String|Number]}\n * @param {Boolean} triggerEvents\n * @returns {RangeSlider}\n */\n update(obj, triggerEvents) {\n if (triggerEvents) {\n this.needTriggerEvents = true;\n }\n if (func.isObject(obj)) {\n if (func.isNumberLike(obj.min)) {\n this.element.setAttribute('min', '' + obj.min);\n this.min = obj.min;\n }\n\n if (func.isNumberLike(obj.max)) {\n this.element.setAttribute('max', '' + obj.max);\n this.max = obj.max;\n }\n\n if (func.isNumberLike(obj.step)) {\n this.element.setAttribute('step', '' + obj.step);\n this.step = obj.step;\n this.toFixed = this._toFixed(obj.step);\n }\n\n if (func.isNumberLike(obj.buffer)) {\n this._setBufferPosition(obj.buffer);\n }\n\n if (func.isNumberLike(obj.value)) {\n this._setValue(obj.value);\n }\n }\n this._update();\n this.onSlideEventsCount = 0;\n this.needTriggerEvents = false;\n return this;\n };\n\n destroy() {\n dom.removeAllListenersFromEl(this, this.options.root);\n window.removeEventListener('resize', this._handleResize, false);\n this.element.removeEventListener('change', this._changeEventListener, false);\n\n this.element.style.cssText = '';\n delete this.element[pluginName];\n\n // Remove the generated markup\n if (this.range) {\n this.range.parentNode.removeChild(this.range);\n }\n }\n\n /**\n * A lightweight plugin wrapper around the constructor,preventing against multiple instantiations\n * @param {Element} el\n * @param {Object} options\n */\n static create(el, options) {\n const createInstance = (el) => {\n let data = el[pluginName];\n\n // Create a new instance.\n if (!data) {\n data = new RangeSlider(el, options);\n el[pluginName] = data;\n }\n };\n\n if (el.length) {\n Array.prototype.slice.call(el).forEach(function (el) {\n createInstance(el);\n });\n } else {\n createInstance(el);\n }\n }\n\n /* private methods */\n\n _toFixed(step) {\n return (step + '').replace('.', '').length - 1;\n }\n\n _init() {\n if (this.onInit && typeof this.onInit === 'function') {\n this.onInit();\n }\n this._update(false);\n }\n\n _updatePercentFromValue() {\n this.percent = (this.value - this.min) / (this.max - this.min);\n }\n\n /**\n * This method check if this.identifier exists in ev.target's ancestors\n * @param ev\n * @param data\n */\n _startEventListener(ev, data) {\n const el = ev.target;\n let isEventOnSlider = false;\n\n if (ev.which !== 1 && !('touches' in ev)) {\n return;\n }\n\n dom.forEachAncestors(\n el,\n el => (isEventOnSlider = el.id === this.identifier && !dom.hasClass(el, this.options.disabledClass)),\n true\n );\n\n if (isEventOnSlider) {\n this._handleDown(ev, data);\n }\n }\n\n _changeEventListener(ev, data) {\n if (data && data.origin === this.identifier) {\n return;\n }\n\n const value = ev.target.value;\n const pos = this._getPositionFromValue(value);\n\n this._setPosition(pos);\n }\n\n _update(triggerEvent) {\n const sizeProperty = this.vertical ? 'offsetHeight' : 'offsetWidth';\n\n this.handleSize = dom.getDimension(this.handle, sizeProperty);\n this.rangeSize = dom.getDimension(this.range, sizeProperty);\n this.maxHandleX = this.rangeSize - this.handleSize;\n this.grabX = this.handleSize / 2;\n this.position = this._getPositionFromValue(this.value);\n\n // Consider disabled state\n if (this.element.disabled) {\n dom.addClass(this.range, this.options.disabledClass);\n } else {\n dom.removeClass(this.range, this.options.disabledClass);\n }\n\n this._setPosition(this.position);\n if (this.options.bufferClass && this.options.buffer) {\n this._setBufferPosition(this.options.buffer);\n }\n this._updatePercentFromValue();\n if (triggerEvent !== false) {\n dom.triggerEvent(this.element, 'change', { origin: this.identifier });\n }\n }\n\n _handleResize() {\n return func.debounce(() => {\n // Simulate resizeEnd event.\n func.delay(() => {\n this._update();\n }, HANDLE_RESIZE_DELAY);\n }, HANDLE_RESIZE_DEBOUNCE)();\n }\n\n _handleDown(e) {\n this.isInteractsNow = true;\n e.preventDefault();\n dom.addEventListeners(this.options.root, this.options.moveEvent, this._handleMove);\n dom.addEventListeners(this.options.root, this.options.endEvent, this._handleEnd);\n\n // If we click on the handle don't set the new position\n if ((' ' + e.target.className + ' ').replace(newLineAndTabRegexp, ' ').indexOf(this.options.handleClass) > -1) {\n return;\n }\n\n const boundingClientRect = this.range.getBoundingClientRect();\n\n const posX = this._getRelativePosition(e);\n const rangeX = this.vertical ? boundingClientRect.bottom : boundingClientRect.left;\n const handleX = this._getPositionFromNode(this.handle) - rangeX;\n const position = posX - this.grabX;\n\n this._setPosition(position);\n\n if (posX >= handleX && posX < handleX + this.options.borderRadius * 2) {\n this.grabX = posX - handleX;\n }\n this._updatePercentFromValue();\n }\n\n _handleMove(e) {\n const posX = this._getRelativePosition(e);\n\n this.isInteractsNow = true;\n e.preventDefault();\n this._setPosition(posX - this.grabX);\n }\n\n _handleEnd(e) {\n e.preventDefault();\n dom.removeEventListeners(this.options.root, this.options.moveEvent, this._handleMove);\n dom.removeEventListeners(this.options.root, this.options.endEvent, this._handleEnd);\n\n // Ok we're done fire the change event\n dom.triggerEvent(this.element, 'change', { origin: this.identifier });\n\n if (this.isInteractsNow || this.needTriggerEvents) {\n if (this.onSlideEnd && typeof this.onSlideEnd === 'function') {\n this.onSlideEnd(this.value, this.percent, this.position);\n }\n }\n this.onSlideEventsCount = 0;\n this.isInteractsNow = false;\n }\n\n _setPosition(pos) {\n let position;\n let stickRadius;\n let restFromValue;\n let stickTo;\n\n // Snapping steps\n let value = this._getValueFromPosition(func.between(pos, 0, this.maxHandleX));\n\n // Stick to stick[0] in radius stick[1]\n if (this.stick) {\n stickTo = this.stick[0];\n stickRadius = this.stick[1] || 0.1;\n restFromValue = value % stickTo;\n if (restFromValue < stickRadius) {\n value = value - restFromValue;\n } else if (Math.abs(stickTo - restFromValue) < stickRadius) {\n value = value - restFromValue + stickTo;\n }\n }\n position = this._getPositionFromValue(value);\n\n // Update ui\n if (this.vertical) {\n this.container.style.height = (position + this.grabX) + 'px';\n this.handle.style['webkitTransform'] = 'translateY(-' + position + 'px)';\n this.handle.style['msTransform'] = 'translateY(-' + position + 'px)';\n this.handle.style.transform = 'translateY(-' + position + 'px)';\n } else {\n this.container.style.width = (position + this.grabX) + 'px';\n this.handle.style['webkitTransform'] = 'translateX(' + position + 'px)';\n this.handle.style['msTransform'] = 'translateX(' + position + 'px)';\n this.handle.style.transform = 'translateX(' + position + 'px)';\n }\n\n this._setValue(value);\n\n // Update globals\n this.position = position;\n this.value = value;\n this._updatePercentFromValue();\n\n if (this.isInteractsNow || this.needTriggerEvents) {\n if (this.onSlideStart && typeof this.onSlideStart === 'function' && this.onSlideEventsCount === 0) {\n this.onSlideStart(this.value, this.percent, this.position);\n }\n\n if (this.onSlide && typeof this.onSlide === 'function') {\n this.onSlide(this.value, this.percent, this.position);\n }\n }\n\n this.onSlideEventsCount++;\n }\n\n _setBufferPosition(pos) {\n let isPercent = true;\n\n if (isFinite(pos)) {\n pos = parseFloat(pos);\n } else if (func.isString(pos)) {\n if (pos.indexOf('px') > 0) {\n isPercent = false;\n }\n pos = parseFloat(pos);\n } else {\n console.warn('New position must be XXpx or XX%');\n return;\n }\n\n if (isNaN(pos)) {\n console.warn('New position is NaN');\n return;\n }\n if (!this.options.bufferClass) {\n console.warn('You disabled buffer, it\\'s className is empty');\n return;\n }\n let bufferSize = isPercent ? pos : (pos / this.rangeSize * 100);\n\n if (bufferSize < 0) {\n bufferSize = 0;\n }\n if (bufferSize > 100) {\n bufferSize = 100;\n }\n this.options.buffer = bufferSize;\n\n let paddingSize = this.options.borderRadius / this.rangeSize * 100;\n let bufferSizeWithPadding = bufferSize - paddingSize;\n\n if (bufferSizeWithPadding < 0) {\n bufferSizeWithPadding = 0;\n }\n\n if (this.vertical) {\n this.buffer.style.height = bufferSizeWithPadding + '%';\n this.buffer.style.bottom = paddingSize * 0.5 + '%';\n } else {\n this.buffer.style.width = bufferSizeWithPadding + '%';\n this.buffer.style.left = paddingSize * 0.5 + '%';\n }\n\n this.element.setAttribute('data-buffer', bufferSize);\n }\n\n /**\n *\n * @param {Element} node\n * @returns {*} Returns element position relative to the parent\n * @private\n */\n _getPositionFromNode(node) {\n let i = this.vertical ? this.maxHandleX : 0;\n\n while (node !== null) {\n i += this.vertical ? node.offsetTop : node.offsetLeft;\n node = node.offsetParent;\n }\n return i;\n }\n\n /**\n *\n * @param {(MouseEvent|TouchEvent)}e\n * @returns {number}\n */\n _getRelativePosition(e) {\n const boundingClientRect = this.range.getBoundingClientRect();\n\n // Get the offset relative to the viewport\n const rangeSize = this.vertical ? boundingClientRect.bottom : boundingClientRect.left;\n let pageOffset = 0;\n\n const pagePositionProperty = this.vertical ? 'pageY' : 'pageX';\n\n if (typeof e[pagePositionProperty] !== 'undefined') {\n pageOffset = (e.touches && e.touches.length) ? e.touches[0][pagePositionProperty] : e[pagePositionProperty];\n } else if (typeof e.originalEvent !== 'undefined') {\n if (typeof e.originalEvent[pagePositionProperty] !== 'undefined') {\n pageOffset = e.originalEvent[pagePositionProperty];\n } else if (e.originalEvent.touches && e.originalEvent.touches[0] &&\n typeof e.originalEvent.touches[0][pagePositionProperty] !== 'undefined') {\n pageOffset = e.originalEvent.touches[0][pagePositionProperty];\n }\n } else if (e.touches && e.touches[0] && typeof e.touches[0][pagePositionProperty] !== 'undefined') {\n pageOffset = e.touches[0][pagePositionProperty];\n } else if (e.currentPoint && (typeof e.currentPoint.x !== 'undefined' || typeof e.currentPoint.y !== 'undefined')) {\n pageOffset = this.vertical ? e.currentPoint.y : e.currentPoint.x;\n }\n\n if (this.vertical) {\n pageOffset -= window.pageYOffset;\n }\n\n return this.vertical ? rangeSize - pageOffset : pageOffset - rangeSize;\n }\n\n _getPositionFromValue(value) {\n const percentage = (value - this.min) / (this.max - this.min);\n const pos = percentage * this.maxHandleX;\n\n return isNaN(pos) ? 0 : pos;\n }\n\n _getValueFromPosition(pos) {\n const percentage = ((pos) / (this.maxHandleX || 1));\n const value = this.step * Math.round(percentage * (this.max - this.min) / this.step) + this.min;\n\n return Number((value).toFixed(this.toFixed));\n }\n\n _setValue(value, force) {\n if (value === this.value && !force) {\n return;\n }\n\n // Set the new value and fire the `input` event\n this.element.value = value;\n this.value = value;\n dom.triggerEvent(this.element, 'input', { origin: this.identifier });\n }\n}\n\nRangeSlider.version = VERSION;\nRangeSlider.dom = dom;\nRangeSlider.functions = func;\n","import * as func from './functions';\n\nconst EVENT_LISTENER_LIST = 'eventListenerList';\n\nexport const detectIE = () => {\n const ua = window.navigator.userAgent;\n const msie = ua.indexOf('MSIE ');\n\n if (msie > 0) {\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n const trident = ua.indexOf('Trident/');\n\n if (trident > 0) {\n const rv = ua.indexOf('rv:');\n\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n const edge = ua.indexOf('Edge/');\n\n if (edge > 0) {\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n }\n\n return false;\n};\n\nconst ieVersion = detectIE();\nconst eventCaptureParams = window.PointerEvent && !ieVersion ? {passive: false} : false;\n\n/**\n * Check if a `element` is visible in the DOM\n *\n * @param {Element} element\n * @return {Boolean}\n */\nexport const isHidden = (element) => (\n element.offsetWidth === 0 || element.offsetHeight === 0 || element.open === false\n);\n\n/**\n * Get hidden parentNodes of an `element`\n *\n * @param {Element} element\n * @return {Element[]}\n */\nexport const getHiddenParentNodes = (element) => {\n const parents = [];\n let node = element.parentNode;\n\n while (node && isHidden(node)) {\n parents.push(node);\n node = node.parentNode;\n }\n return parents;\n};\n\n/**\n * Returns dimensions for an element even if it is not visible in the DOM.\n *\n * @param {Element} element\n * @param {string} key (e.g. offsetWidth …)\n * @return {Number}\n */\nexport const getDimension = (element, key) => {\n const hiddenParentNodes = getHiddenParentNodes(element);\n const hiddenParentNodesLength = hiddenParentNodes.length;\n const hiddenParentNodesStyle = [];\n let dimension = element[key];\n\n // Used for native `
` elements\n const toggleOpenProperty = (element) => {\n if (typeof element.open !== 'undefined') {\n element.open = !element.open;\n }\n };\n\n if (hiddenParentNodesLength) {\n for (let i = 0; i < hiddenParentNodesLength; i++) {\n // Cache the styles to restore then later.\n hiddenParentNodesStyle.push({\n display: hiddenParentNodes[i].style.display,\n height: hiddenParentNodes[i].style.height,\n overflow: hiddenParentNodes[i].style.overflow,\n visibility: hiddenParentNodes[i].style.visibility\n });\n\n hiddenParentNodes[i].style.display = 'block';\n hiddenParentNodes[i].style.height = '0';\n hiddenParentNodes[i].style.overflow = 'hidden';\n hiddenParentNodes[i].style.visibility = 'hidden';\n toggleOpenProperty(hiddenParentNodes[i]);\n }\n\n dimension = element[key];\n\n for (let j = 0; j < hiddenParentNodesLength; j++) {\n toggleOpenProperty(hiddenParentNodes[j]);\n hiddenParentNodes[j].style.display = hiddenParentNodesStyle[j].display;\n hiddenParentNodes[j].style.height = hiddenParentNodesStyle[j].height;\n hiddenParentNodes[j].style.overflow = hiddenParentNodesStyle[j].overflow;\n hiddenParentNodes[j].style.visibility = hiddenParentNodesStyle[j].visibility;\n }\n }\n return dimension;\n};\n\n/**\n *\n * @param {HTMLElement} el\n * @param {Object} cssObj\n * @returns {*}\n */\nexport const setCss = (el, cssObj) => {\n for (const key in cssObj) {\n el.style[key] = cssObj[key];\n }\n return el.style;\n};\n\n/**\n *\n * @param {HTMLElement} elem\n * @param {string} className\n */\nexport const hasClass = (elem, className) => new RegExp(' ' + className + ' ').test(' ' + elem.className + ' ');\n\n/**\n *\n * @param {HTMLElement} elem\n * @param {string} className\n */\nexport const addClass = (elem, className) => {\n if (!hasClass(elem, className)) {\n elem.className += ' ' + className;\n }\n};\n\n/**\n *\n * @param {HTMLElement} elem\n * @param {string} className\n */\nexport const removeClass = (elem, className) => {\n let newClass = ' ' + elem.className.replace(/[\\t\\r\\n]/g, ' ') + ' ';\n\n if (hasClass(elem, className)) {\n while (newClass.indexOf(' ' + className + ' ') >= 0) {\n newClass = newClass.replace(' ' + className + ' ', ' ');\n }\n elem.className = newClass.replace(/^\\s+|\\s+$/g, '');\n }\n};\n\n/**\n *\n * @param {HTMLElement} el\n * @param {Function} callback\n * @param {boolean} andForElement - apply callback for el\n * @returns {HTMLElement}\n */\nexport const forEachAncestors = (el, callback, andForElement) => {\n if (andForElement) {\n callback(el);\n }\n\n while (el.parentNode && !callback(el)) {\n el = el.parentNode;\n }\n\n return el;\n};\n\n/**\n *\n * @param {HTMLElement} el\n * @param {string} name event name\n * @param {Object} data\n */\nexport const triggerEvent = (el, name, data) => {\n if (!func.isString(name)) {\n throw new TypeError('event name must be String');\n }\n if (!(el instanceof HTMLElement)) {\n throw new TypeError('element must be HTMLElement');\n }\n name = name.trim();\n const event = document.createEvent('CustomEvent');\n\n event.initCustomEvent(name, false, false, data);\n el.dispatchEvent(event);\n};\n\n/**\n * @param {Object} referenceNode after this\n * @param {Object} newNode insert this\n */\nexport const insertAfter = (referenceNode, newNode) =>\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n\n/**\n * Add event listeners and push them to el[EVENT_LISTENER_LIST]\n * @param {HTMLElement|Node|Document} el DOM element\n * @param {Array} events\n * @param {Function} listener\n */\nexport const addEventListeners = (el, events, listener) => {\n events.forEach((eventName) => {\n if (!el[EVENT_LISTENER_LIST]) {\n el[EVENT_LISTENER_LIST] = {};\n }\n if (!el[EVENT_LISTENER_LIST][eventName]) {\n el[EVENT_LISTENER_LIST][eventName] = [];\n }\n\n el.addEventListener(\n eventName,\n listener,\n eventCaptureParams\n );\n if (el[EVENT_LISTENER_LIST][eventName].indexOf(listener) < 0) {\n el[EVENT_LISTENER_LIST][eventName].push(listener);\n }\n });\n};\n\n/**\n * Remove event listeners and remove them from el[EVENT_LISTENER_LIST]\n * @param {HTMLElement} el DOM element\n * @param {Array} events\n * @param {Function} listener\n */\nexport const removeEventListeners = (el, events, listener) => {\n events.forEach((eventName) => {\n let index;\n\n el.removeEventListener(\n eventName,\n listener,\n false\n );\n\n if (el[EVENT_LISTENER_LIST] && el[EVENT_LISTENER_LIST][eventName] &&\n (index = el[EVENT_LISTENER_LIST][eventName].indexOf(listener)) > -1\n ) {\n el[EVENT_LISTENER_LIST][eventName].splice(index, 1);\n }\n });\n};\n\n/**\n * Remove ALL event listeners which exists in el[EVENT_LISTENER_LIST]\n * @param {RangeSlider} instance\n * @param {HTMLElement} el DOM element\n */\nexport const removeAllListenersFromEl = (instance, el) => {\n if (!el[EVENT_LISTENER_LIST]) {\n return;\n }\n\n /* jshint ignore:start */\n\n /**\n *\n * @callback listener\n * @this {Object} event name\n */\n function rm(listener) {\n if (listener === instance._startEventListener) {\n this.el.removeEventListener(this.eventName, listener, false);\n }\n }\n\n for (const eventName in el[EVENT_LISTENER_LIST]) {\n el[EVENT_LISTENER_LIST][eventName].forEach(rm, {eventName: eventName, el: el});\n }\n\n el[EVENT_LISTENER_LIST] = {};\n /* jshint ignore:end */\n};\n\n/**\n * Range feature detection\n * @return {Boolean}\n */\nexport const supportsRange = () => {\n const input = document.createElement('input');\n\n input.setAttribute('type', 'range');\n return input.type !== 'text';\n};\n"],"sourceRoot":""} \ No newline at end of file diff --git a/package.json b/package.json index 10ddc39..8be1cce 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "rangeslider-pure", "title": "range-slider", "description": "Simple, small and fast vanilla JavaScript polyfill for the HTML5 slider element", - "version": "0.4.8", + "version": "0.4.9", "main": "dist/range-slider.js", "scripts": { "dev": "cross-env NODE_ENV=development webpack-dev-server --no-inline --watch-content-base",