1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062 |
- "use strict";
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
- var windowIsDefined = (typeof window === "undefined" ? "undefined" : _typeof(window)) === "object";
- (function (factory) {
- if (typeof define === "function" && define.amd) {
- define(["jquery"], factory);
- } else if ((typeof module === "undefined" ? "undefined" : _typeof(module)) === "object" && module.exports) {
- var jQuery;
- try {
- jQuery = require("jquery");
- } catch (err) {
- jQuery = null;
- }
- module.exports = factory(jQuery);
- } else if (window) {
- window.Slider = factory(window.jQuery);
- }
- })(function ($) {
-
- var NAMESPACE_MAIN = 'slider';
- var NAMESPACE_ALTERNATE = 'bootstrapSlider';
-
- if (windowIsDefined && !window.console) {
- window.console = {};
- }
- if (windowIsDefined && !window.console.log) {
- window.console.log = function () {};
- }
- if (windowIsDefined && !window.console.warn) {
- window.console.warn = function () {};
- }
-
- var Slider;
- (function ($) {
- 'use strict';
-
- var slice = Array.prototype.slice;
- function noop() {}
-
- function defineBridget($) {
-
- if (!$) {
- return;
- }
-
-
- function addOptionMethod(PluginClass) {
-
- if (PluginClass.prototype.option) {
- return;
- }
-
- PluginClass.prototype.option = function (opts) {
-
- if (!$.isPlainObject(opts)) {
- return;
- }
- this.options = $.extend(true, this.options, opts);
- };
- }
-
-
-
- var logError = typeof console === 'undefined' ? noop : function (message) {
- console.error(message);
- };
-
- function bridge(namespace, PluginClass) {
-
- $.fn[namespace] = function (options) {
- if (typeof options === 'string') {
-
-
- var args = slice.call(arguments, 1);
- for (var i = 0, len = this.length; i < len; i++) {
- var elem = this[i];
- var instance = $.data(elem, namespace);
- if (!instance) {
- logError("cannot call methods on " + namespace + " prior to initialization; " + "attempted to call '" + options + "'");
- continue;
- }
- if (!$.isFunction(instance[options]) || options.charAt(0) === '_') {
- logError("no such method '" + options + "' for " + namespace + " instance");
- continue;
- }
-
- var returnValue = instance[options].apply(instance, args);
-
- if (returnValue !== undefined && returnValue !== instance) {
- return returnValue;
- }
- }
-
- return this;
- } else {
- var objects = this.map(function () {
- var instance = $.data(this, namespace);
- if (instance) {
-
- instance.option(options);
- instance._init();
- } else {
-
- instance = new PluginClass(this, options);
- $.data(this, namespace, instance);
- }
- return $(this);
- });
- if (objects.length === 1) {
- return objects[0];
- }
- return objects;
- }
- };
- }
-
-
- $.bridget = function (namespace, PluginClass) {
- addOptionMethod(PluginClass);
- bridge(namespace, PluginClass);
- };
- return $.bridget;
- }
-
- defineBridget($);
- })($);
-
- (function ($) {
- var autoRegisterNamespace = void 0;
- var ErrorMsgs = {
- formatInvalidInputErrorMsg: function formatInvalidInputErrorMsg(input) {
- return "Invalid input value '" + input + "' passed in";
- },
- callingContextNotSliderInstance: "Calling context element does not have instance of Slider bound to it. Check your code to make sure the JQuery object returned from the call to the slider() initializer is calling the method"
- };
- var SliderScale = {
- linear: {
- getValue: function getValue(value, options) {
- if (value < options.min) {
- return options.min;
- } else if (value > options.max) {
- return options.max;
- } else {
- return value;
- }
- },
- toValue: function toValue(percentage) {
- var rawValue = percentage / 100 * (this.options.max - this.options.min);
- var shouldAdjustWithBase = true;
- if (this.options.ticks_positions.length > 0) {
- var minv,
- maxv,
- minp,
- maxp = 0;
- for (var i = 1; i < this.options.ticks_positions.length; i++) {
- if (percentage <= this.options.ticks_positions[i]) {
- minv = this.options.ticks[i - 1];
- minp = this.options.ticks_positions[i - 1];
- maxv = this.options.ticks[i];
- maxp = this.options.ticks_positions[i];
- break;
- }
- }
- var partialPercentage = (percentage - minp) / (maxp - minp);
- rawValue = minv + partialPercentage * (maxv - minv);
- shouldAdjustWithBase = false;
- }
- var adjustment = shouldAdjustWithBase ? this.options.min : 0;
- var value = adjustment + Math.round(rawValue / this.options.step) * this.options.step;
- return SliderScale.linear.getValue(value, this.options);
- },
- toPercentage: function toPercentage(value) {
- if (this.options.max === this.options.min) {
- return 0;
- }
- if (this.options.ticks_positions.length > 0) {
- var minv,
- maxv,
- minp,
- maxp = 0;
- for (var i = 0; i < this.options.ticks.length; i++) {
- if (value <= this.options.ticks[i]) {
- minv = i > 0 ? this.options.ticks[i - 1] : 0;
- minp = i > 0 ? this.options.ticks_positions[i - 1] : 0;
- maxv = this.options.ticks[i];
- maxp = this.options.ticks_positions[i];
- break;
- }
- }
- if (i > 0) {
- var partialPercentage = (value - minv) / (maxv - minv);
- return minp + partialPercentage * (maxp - minp);
- }
- }
- return 100 * (value - this.options.min) / (this.options.max - this.options.min);
- }
- },
- logarithmic: {
-
- toValue: function toValue(percentage) {
- var offset = 1 - this.options.min;
- var min = Math.log(this.options.min + offset);
- var max = Math.log(this.options.max + offset);
- var value = Math.exp(min + (max - min) * percentage / 100) - offset;
- if (Math.round(value) === max) {
- return max;
- }
- value = this.options.min + Math.round((value - this.options.min) / this.options.step) * this.options.step;
-
- return SliderScale.linear.getValue(value, this.options);
- },
- toPercentage: function toPercentage(value) {
- if (this.options.max === this.options.min) {
- return 0;
- } else {
- var offset = 1 - this.options.min;
- var max = Math.log(this.options.max + offset);
- var min = Math.log(this.options.min + offset);
- var v = Math.log(value + offset);
- return 100 * (v - min) / (max - min);
- }
- }
- }
- };
-
- Slider = function Slider(element, options) {
- createNewSlider.call(this, element, options);
- return this;
- };
- function createNewSlider(element, options) {
-
- this._state = {
- value: null,
- enabled: null,
- offset: null,
- size: null,
- percentage: null,
- inDrag: false,
- over: false,
- tickIndex: null
- };
-
- this.ticksCallbackMap = {};
- this.handleCallbackMap = {};
- if (typeof element === "string") {
- this.element = document.querySelector(element);
- } else if (element instanceof HTMLElement) {
- this.element = element;
- }
-
- options = options ? options : {};
- var optionTypes = Object.keys(this.defaultOptions);
- var isMinSet = options.hasOwnProperty('min');
- var isMaxSet = options.hasOwnProperty('max');
- for (var i = 0; i < optionTypes.length; i++) {
- var optName = optionTypes[i];
-
- var val = options[optName];
-
- val = typeof val !== 'undefined' ? val : getDataAttrib(this.element, optName);
-
- val = val !== null ? val : this.defaultOptions[optName];
-
- if (!this.options) {
- this.options = {};
- }
- this.options[optName] = val;
- }
- this.ticksAreValid = Array.isArray(this.options.ticks) && this.options.ticks.length > 0;
-
- if (!this.ticksAreValid) {
- this.options.lock_to_ticks = false;
- }
-
- if (this.options.rtl === 'auto') {
- var computedStyle = window.getComputedStyle(this.element);
- if (computedStyle != null) {
- this.options.rtl = computedStyle.direction === 'rtl';
- } else {
-
-
-
- this.options.rtl = this.element.style.direction === 'rtl';
- }
- }
-
- if (this.options.orientation === "vertical" && (this.options.tooltip_position === "top" || this.options.tooltip_position === "bottom")) {
- if (this.options.rtl) {
- this.options.tooltip_position = "left";
- } else {
- this.options.tooltip_position = "right";
- }
- } else if (this.options.orientation === "horizontal" && (this.options.tooltip_position === "left" || this.options.tooltip_position === "right")) {
- this.options.tooltip_position = "top";
- }
- function getDataAttrib(element, optName) {
- var dataName = "data-slider-" + optName.replace(/_/g, '-');
- var dataValString = element.getAttribute(dataName);
- try {
- return JSON.parse(dataValString);
- } catch (err) {
- return dataValString;
- }
- }
-
- var origWidth = this.element.style.width;
- var updateSlider = false;
- var parent = this.element.parentNode;
- var sliderTrackSelection;
- var sliderTrackLow, sliderTrackHigh;
- var sliderMinHandle;
- var sliderMaxHandle;
- if (this.sliderElem) {
- updateSlider = true;
- } else {
-
- this.sliderElem = document.createElement("div");
- this.sliderElem.className = "slider";
-
- var sliderTrack = document.createElement("div");
- sliderTrack.className = "slider-track";
- sliderTrackLow = document.createElement("div");
- sliderTrackLow.className = "slider-track-low";
- sliderTrackSelection = document.createElement("div");
- sliderTrackSelection.className = "slider-selection";
- sliderTrackHigh = document.createElement("div");
- sliderTrackHigh.className = "slider-track-high";
- sliderMinHandle = document.createElement("div");
- sliderMinHandle.className = "slider-handle min-slider-handle";
- sliderMinHandle.setAttribute('role', 'slider');
- sliderMinHandle.setAttribute('aria-valuemin', this.options.min);
- sliderMinHandle.setAttribute('aria-valuemax', this.options.max);
- sliderMaxHandle = document.createElement("div");
- sliderMaxHandle.className = "slider-handle max-slider-handle";
- sliderMaxHandle.setAttribute('role', 'slider');
- sliderMaxHandle.setAttribute('aria-valuemin', this.options.min);
- sliderMaxHandle.setAttribute('aria-valuemax', this.options.max);
- sliderTrack.appendChild(sliderTrackLow);
- sliderTrack.appendChild(sliderTrackSelection);
- sliderTrack.appendChild(sliderTrackHigh);
-
- this.rangeHighlightElements = [];
- var rangeHighlightsOpts = this.options.rangeHighlights;
- if (Array.isArray(rangeHighlightsOpts) && rangeHighlightsOpts.length > 0) {
- for (var j = 0; j < rangeHighlightsOpts.length; j++) {
- var rangeHighlightElement = document.createElement("div");
- var customClassString = rangeHighlightsOpts[j].class || "";
- rangeHighlightElement.className = "slider-rangeHighlight slider-selection " + customClassString;
- this.rangeHighlightElements.push(rangeHighlightElement);
- sliderTrack.appendChild(rangeHighlightElement);
- }
- }
-
- var isLabelledbyArray = Array.isArray(this.options.labelledby);
- if (isLabelledbyArray && this.options.labelledby[0]) {
- sliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby[0]);
- }
- if (isLabelledbyArray && this.options.labelledby[1]) {
- sliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby[1]);
- }
- if (!isLabelledbyArray && this.options.labelledby) {
- sliderMinHandle.setAttribute('aria-labelledby', this.options.labelledby);
- sliderMaxHandle.setAttribute('aria-labelledby', this.options.labelledby);
- }
-
- this.ticks = [];
- if (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {
- this.ticksContainer = document.createElement('div');
- this.ticksContainer.className = 'slider-tick-container';
- for (i = 0; i < this.options.ticks.length; i++) {
- var tick = document.createElement('div');
- tick.className = 'slider-tick';
- if (this.options.ticks_tooltip) {
- var tickListenerReference = this._addTickListener();
- var enterCallback = tickListenerReference.addMouseEnter(this, tick, i);
- var leaveCallback = tickListenerReference.addMouseLeave(this, tick);
- this.ticksCallbackMap[i] = {
- mouseEnter: enterCallback,
- mouseLeave: leaveCallback
- };
- }
- this.ticks.push(tick);
- this.ticksContainer.appendChild(tick);
- }
- sliderTrackSelection.className += " tick-slider-selection";
- }
- this.tickLabels = [];
- if (Array.isArray(this.options.ticks_labels) && this.options.ticks_labels.length > 0) {
- this.tickLabelContainer = document.createElement('div');
- this.tickLabelContainer.className = 'slider-tick-label-container';
- for (i = 0; i < this.options.ticks_labels.length; i++) {
- var label = document.createElement('div');
- var noTickPositionsSpecified = this.options.ticks_positions.length === 0;
- var tickLabelsIndex = this.options.reversed && noTickPositionsSpecified ? this.options.ticks_labels.length - (i + 1) : i;
- label.className = 'slider-tick-label';
- label.innerHTML = this.options.ticks_labels[tickLabelsIndex];
- this.tickLabels.push(label);
- this.tickLabelContainer.appendChild(label);
- }
- }
- var createAndAppendTooltipSubElements = function createAndAppendTooltipSubElements(tooltipElem) {
- var arrow = document.createElement("div");
- arrow.className = "arrow";
- var inner = document.createElement("div");
- inner.className = "tooltip-inner";
- tooltipElem.appendChild(arrow);
- tooltipElem.appendChild(inner);
- };
-
- var sliderTooltip = document.createElement("div");
- sliderTooltip.className = "tooltip tooltip-main";
- sliderTooltip.setAttribute('role', 'presentation');
- createAndAppendTooltipSubElements(sliderTooltip);
- var sliderTooltipMin = document.createElement("div");
- sliderTooltipMin.className = "tooltip tooltip-min";
- sliderTooltipMin.setAttribute('role', 'presentation');
- createAndAppendTooltipSubElements(sliderTooltipMin);
- var sliderTooltipMax = document.createElement("div");
- sliderTooltipMax.className = "tooltip tooltip-max";
- sliderTooltipMax.setAttribute('role', 'presentation');
- createAndAppendTooltipSubElements(sliderTooltipMax);
-
- this.sliderElem.appendChild(sliderTrack);
- this.sliderElem.appendChild(sliderTooltip);
- this.sliderElem.appendChild(sliderTooltipMin);
- this.sliderElem.appendChild(sliderTooltipMax);
- if (this.tickLabelContainer) {
- this.sliderElem.appendChild(this.tickLabelContainer);
- }
- if (this.ticksContainer) {
- this.sliderElem.appendChild(this.ticksContainer);
- }
- this.sliderElem.appendChild(sliderMinHandle);
- this.sliderElem.appendChild(sliderMaxHandle);
-
- parent.insertBefore(this.sliderElem, this.element);
-
- this.element.style.display = "none";
- }
-
- if ($) {
- this.$element = $(this.element);
- this.$sliderElem = $(this.sliderElem);
- }
-
- this.eventToCallbackMap = {};
- this.sliderElem.id = this.options.id;
- this.touchCapable = 'ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch;
- this.touchX = 0;
- this.touchY = 0;
- this.tooltip = this.sliderElem.querySelector('.tooltip-main');
- this.tooltipInner = this.tooltip.querySelector('.tooltip-inner');
- this.tooltip_min = this.sliderElem.querySelector('.tooltip-min');
- this.tooltipInner_min = this.tooltip_min.querySelector('.tooltip-inner');
- this.tooltip_max = this.sliderElem.querySelector('.tooltip-max');
- this.tooltipInner_max = this.tooltip_max.querySelector('.tooltip-inner');
- if (SliderScale[this.options.scale]) {
- this.options.scale = SliderScale[this.options.scale];
- }
- if (updateSlider === true) {
-
- this._removeClass(this.sliderElem, 'slider-horizontal');
- this._removeClass(this.sliderElem, 'slider-vertical');
- this._removeClass(this.sliderElem, 'slider-rtl');
- this._removeClass(this.tooltip, 'hide');
- this._removeClass(this.tooltip_min, 'hide');
- this._removeClass(this.tooltip_max, 'hide');
-
- ["left", "right", "top", "width", "height"].forEach(function (prop) {
- this._removeProperty(this.trackLow, prop);
- this._removeProperty(this.trackSelection, prop);
- this._removeProperty(this.trackHigh, prop);
- }, this);
-
- [this.handle1, this.handle2].forEach(function (handle) {
- this._removeProperty(handle, 'left');
- this._removeProperty(handle, 'right');
- this._removeProperty(handle, 'top');
- }, this);
-
- [this.tooltip, this.tooltip_min, this.tooltip_max].forEach(function (tooltip) {
- this._removeProperty(tooltip, 'bs-tooltip-left');
- this._removeProperty(tooltip, 'bs-tooltip-right');
- this._removeProperty(tooltip, 'bs-tooltip-top');
- this._removeClass(tooltip, 'bs-tooltip-right');
- this._removeClass(tooltip, 'bs-tooltip-left');
- this._removeClass(tooltip, 'bs-tooltip-top');
- }, this);
- }
- if (this.options.orientation === 'vertical') {
- this._addClass(this.sliderElem, 'slider-vertical');
- this.stylePos = 'top';
- this.mousePos = 'pageY';
- this.sizePos = 'offsetHeight';
- } else {
- this._addClass(this.sliderElem, 'slider-horizontal');
- this.sliderElem.style.width = origWidth;
- this.options.orientation = 'horizontal';
- if (this.options.rtl) {
- this.stylePos = 'right';
- } else {
- this.stylePos = 'left';
- }
- this.mousePos = 'clientX';
- this.sizePos = 'offsetWidth';
- }
-
- if (this.options.rtl) {
- this._addClass(this.sliderElem, 'slider-rtl');
- }
- this._setTooltipPosition();
-
- if (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {
- if (!isMaxSet) {
- this.options.max = Math.max.apply(Math, this.options.ticks);
- }
- if (!isMinSet) {
- this.options.min = Math.min.apply(Math, this.options.ticks);
- }
- }
- if (Array.isArray(this.options.value)) {
- this.options.range = true;
- this._state.value = this.options.value;
- } else if (this.options.range) {
-
- this._state.value = [this.options.value, this.options.max];
- } else {
- this._state.value = this.options.value;
- }
- this.trackLow = sliderTrackLow || this.trackLow;
- this.trackSelection = sliderTrackSelection || this.trackSelection;
- this.trackHigh = sliderTrackHigh || this.trackHigh;
- if (this.options.selection === 'none') {
- this._addClass(this.trackLow, 'hide');
- this._addClass(this.trackSelection, 'hide');
- this._addClass(this.trackHigh, 'hide');
- } else if (this.options.selection === 'after' || this.options.selection === 'before') {
- this._removeClass(this.trackLow, 'hide');
- this._removeClass(this.trackSelection, 'hide');
- this._removeClass(this.trackHigh, 'hide');
- }
- this.handle1 = sliderMinHandle || this.handle1;
- this.handle2 = sliderMaxHandle || this.handle2;
- if (updateSlider === true) {
-
- this._removeClass(this.handle1, 'round triangle');
- this._removeClass(this.handle2, 'round triangle hide');
- for (i = 0; i < this.ticks.length; i++) {
- this._removeClass(this.ticks[i], 'round triangle hide');
- }
- }
- var availableHandleModifiers = ['round', 'triangle', 'custom'];
- var isValidHandleType = availableHandleModifiers.indexOf(this.options.handle) !== -1;
- if (isValidHandleType) {
- this._addClass(this.handle1, this.options.handle);
- this._addClass(this.handle2, this.options.handle);
- for (i = 0; i < this.ticks.length; i++) {
- this._addClass(this.ticks[i], this.options.handle);
- }
- }
- this._state.offset = this._offset(this.sliderElem);
- this._state.size = this.sliderElem[this.sizePos];
- this.setValue(this._state.value);
-
-
- this.handle1Keydown = this._keydown.bind(this, 0);
- this.handle1.addEventListener("keydown", this.handle1Keydown, false);
- this.handle2Keydown = this._keydown.bind(this, 1);
- this.handle2.addEventListener("keydown", this.handle2Keydown, false);
- this.mousedown = this._mousedown.bind(this);
- this.touchstart = this._touchstart.bind(this);
- this.touchmove = this._touchmove.bind(this);
- if (this.touchCapable) {
- this.sliderElem.addEventListener("touchstart", this.touchstart, false);
- this.sliderElem.addEventListener("touchmove", this.touchmove, false);
- }
- this.sliderElem.addEventListener("mousedown", this.mousedown, false);
-
- this.resize = this._resize.bind(this);
- window.addEventListener("resize", this.resize, false);
-
- if (this.options.tooltip === 'hide') {
- this._addClass(this.tooltip, 'hide');
- this._addClass(this.tooltip_min, 'hide');
- this._addClass(this.tooltip_max, 'hide');
- } else if (this.options.tooltip === 'always') {
- this._showTooltip();
- this._alwaysShowTooltip = true;
- } else {
- this.showTooltip = this._showTooltip.bind(this);
- this.hideTooltip = this._hideTooltip.bind(this);
- if (this.options.ticks_tooltip) {
- var callbackHandle = this._addTickListener();
-
- var mouseEnter = callbackHandle.addMouseEnter(this, this.handle1);
- var mouseLeave = callbackHandle.addMouseLeave(this, this.handle1);
- this.handleCallbackMap.handle1 = {
- mouseEnter: mouseEnter,
- mouseLeave: mouseLeave
- };
-
- mouseEnter = callbackHandle.addMouseEnter(this, this.handle2);
- mouseLeave = callbackHandle.addMouseLeave(this, this.handle2);
- this.handleCallbackMap.handle2 = {
- mouseEnter: mouseEnter,
- mouseLeave: mouseLeave
- };
- } else {
- this.sliderElem.addEventListener("mouseenter", this.showTooltip, false);
- this.sliderElem.addEventListener("mouseleave", this.hideTooltip, false);
- if (this.touchCapable) {
- this.sliderElem.addEventListener("touchstart", this.showTooltip, false);
- this.sliderElem.addEventListener("touchmove", this.showTooltip, false);
- this.sliderElem.addEventListener("touchend", this.hideTooltip, false);
- }
- }
- this.handle1.addEventListener("focus", this.showTooltip, false);
- this.handle1.addEventListener("blur", this.hideTooltip, false);
- this.handle2.addEventListener("focus", this.showTooltip, false);
- this.handle2.addEventListener("blur", this.hideTooltip, false);
- if (this.touchCapable) {
- this.handle1.addEventListener("touchstart", this.showTooltip, false);
- this.handle1.addEventListener("touchmove", this.showTooltip, false);
- this.handle1.addEventListener("touchend", this.hideTooltip, false);
- this.handle2.addEventListener("touchstart", this.showTooltip, false);
- this.handle2.addEventListener("touchmove", this.showTooltip, false);
- this.handle2.addEventListener("touchend", this.hideTooltip, false);
- }
- }
- if (this.options.enabled) {
- this.enable();
- } else {
- this.disable();
- }
- }
-
- Slider.prototype = {
- _init: function _init() {},
- constructor: Slider,
- defaultOptions: {
- id: "",
- min: 0,
- max: 10,
- step: 1,
- precision: 0,
- orientation: 'horizontal',
- value: 5,
- range: false,
- selection: 'before',
- tooltip: 'show',
- tooltip_split: false,
- lock_to_ticks: false,
- handle: 'round',
- reversed: false,
- rtl: 'auto',
- enabled: true,
- formatter: function formatter(val) {
- if (Array.isArray(val)) {
- return val[0] + " : " + val[1];
- } else {
- return val;
- }
- },
- natural_arrow_keys: false,
- ticks: [],
- ticks_positions: [],
- ticks_labels: [],
- ticks_snap_bounds: 0,
- ticks_tooltip: false,
- scale: 'linear',
- focus: false,
- tooltip_position: null,
- labelledby: null,
- rangeHighlights: []
- },
- getElement: function getElement() {
- return this.sliderElem;
- },
- getValue: function getValue() {
- if (this.options.range) {
- return this._state.value;
- } else {
- return this._state.value[0];
- }
- },
- setValue: function setValue(val, triggerSlideEvent, triggerChangeEvent) {
- if (!val) {
- val = 0;
- }
- var oldValue = this.getValue();
- this._state.value = this._validateInputValue(val);
- var applyPrecision = this._applyPrecision.bind(this);
- if (this.options.range) {
- this._state.value[0] = applyPrecision(this._state.value[0]);
- this._state.value[1] = applyPrecision(this._state.value[1]);
- if (this.ticksAreValid && this.options.lock_to_ticks) {
- this._state.value[0] = this.options.ticks[this._getClosestTickIndex(this._state.value[0])];
- this._state.value[1] = this.options.ticks[this._getClosestTickIndex(this._state.value[1])];
- }
- this._state.value[0] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[0]));
- this._state.value[1] = Math.max(this.options.min, Math.min(this.options.max, this._state.value[1]));
- } else {
- this._state.value = applyPrecision(this._state.value);
- if (this.ticksAreValid && this.options.lock_to_ticks) {
- this._state.value = this.options.ticks[this._getClosestTickIndex(this._state.value)];
- }
- this._state.value = [Math.max(this.options.min, Math.min(this.options.max, this._state.value))];
- this._addClass(this.handle2, 'hide');
- if (this.options.selection === 'after') {
- this._state.value[1] = this.options.max;
- } else {
- this._state.value[1] = this.options.min;
- }
- }
-
- this._setTickIndex();
- if (this.options.max > this.options.min) {
- this._state.percentage = [this._toPercentage(this._state.value[0]), this._toPercentage(this._state.value[1]), this.options.step * 100 / (this.options.max - this.options.min)];
- } else {
- this._state.percentage = [0, 0, 100];
- }
- this._layout();
- var newValue = this.options.range ? this._state.value : this._state.value[0];
- this._setDataVal(newValue);
- if (triggerSlideEvent === true) {
- this._trigger('slide', newValue);
- }
- var hasChanged = false;
- if (Array.isArray(newValue)) {
- hasChanged = oldValue[0] !== newValue[0] || oldValue[1] !== newValue[1];
- } else {
- hasChanged = oldValue !== newValue;
- }
- if (hasChanged && triggerChangeEvent === true) {
- this._trigger('change', {
- oldValue: oldValue,
- newValue: newValue
- });
- }
- return this;
- },
- destroy: function destroy() {
-
- this._removeSliderEventHandlers();
-
- this.sliderElem.parentNode.removeChild(this.sliderElem);
-
- this.element.style.display = "";
-
- this._cleanUpEventCallbacksMap();
-
- this.element.removeAttribute("data");
-
- if ($) {
- this._unbindJQueryEventHandlers();
- if (autoRegisterNamespace === NAMESPACE_MAIN) {
- this.$element.removeData(autoRegisterNamespace);
- }
- this.$element.removeData(NAMESPACE_ALTERNATE);
- }
- },
- disable: function disable() {
- this._state.enabled = false;
- this.handle1.removeAttribute("tabindex");
- this.handle2.removeAttribute("tabindex");
- this._addClass(this.sliderElem, 'slider-disabled');
- this._trigger('slideDisabled');
- return this;
- },
- enable: function enable() {
- this._state.enabled = true;
- this.handle1.setAttribute("tabindex", 0);
- this.handle2.setAttribute("tabindex", 0);
- this._removeClass(this.sliderElem, 'slider-disabled');
- this._trigger('slideEnabled');
- return this;
- },
- toggle: function toggle() {
- if (this._state.enabled) {
- this.disable();
- } else {
- this.enable();
- }
- return this;
- },
- isEnabled: function isEnabled() {
- return this._state.enabled;
- },
- on: function on(evt, callback) {
- this._bindNonQueryEventHandler(evt, callback);
- return this;
- },
- off: function off(evt, callback) {
- if ($) {
- this.$element.off(evt, callback);
- this.$sliderElem.off(evt, callback);
- } else {
- this._unbindNonQueryEventHandler(evt, callback);
- }
- },
- getAttribute: function getAttribute(attribute) {
- if (attribute) {
- return this.options[attribute];
- } else {
- return this.options;
- }
- },
- setAttribute: function setAttribute(attribute, value) {
- this.options[attribute] = value;
- return this;
- },
- refresh: function refresh(options) {
- var currentValue = this.getValue();
- this._removeSliderEventHandlers();
- createNewSlider.call(this, this.element, this.options);
-
- if (options && options.useCurrentValue === true) {
- this.setValue(currentValue);
- }
- if ($) {
-
- if (autoRegisterNamespace === NAMESPACE_MAIN) {
- $.data(this.element, NAMESPACE_MAIN, this);
- $.data(this.element, NAMESPACE_ALTERNATE, this);
- } else {
- $.data(this.element, NAMESPACE_ALTERNATE, this);
- }
- }
- return this;
- },
- relayout: function relayout() {
- this._resize();
- return this;
- },
-
- _removeTooltipListener: function _removeTooltipListener(event, handler) {
- this.handle1.removeEventListener(event, handler, false);
- this.handle2.removeEventListener(event, handler, false);
- },
- _removeSliderEventHandlers: function _removeSliderEventHandlers() {
-
- this.handle1.removeEventListener("keydown", this.handle1Keydown, false);
- this.handle2.removeEventListener("keydown", this.handle2Keydown, false);
-
- if (this.options.ticks_tooltip) {
- var ticks = this.ticksContainer.getElementsByClassName('slider-tick');
- for (var i = 0; i < ticks.length; i++) {
- ticks[i].removeEventListener('mouseenter', this.ticksCallbackMap[i].mouseEnter, false);
- ticks[i].removeEventListener('mouseleave', this.ticksCallbackMap[i].mouseLeave, false);
- }
- if (this.handleCallbackMap.handle1 && this.handleCallbackMap.handle2) {
- this.handle1.removeEventListener('mouseenter', this.handleCallbackMap.handle1.mouseEnter, false);
- this.handle2.removeEventListener('mouseenter', this.handleCallbackMap.handle2.mouseEnter, false);
- this.handle1.removeEventListener('mouseleave', this.handleCallbackMap.handle1.mouseLeave, false);
- this.handle2.removeEventListener('mouseleave', this.handleCallbackMap.handle2.mouseLeave, false);
- }
- }
- this.handleCallbackMap = null;
- this.ticksCallbackMap = null;
- if (this.showTooltip) {
- this._removeTooltipListener("focus", this.showTooltip);
- }
- if (this.hideTooltip) {
- this._removeTooltipListener("blur", this.hideTooltip);
- }
-
- if (this.showTooltip) {
- this.sliderElem.removeEventListener("mouseenter", this.showTooltip, false);
- }
- if (this.hideTooltip) {
- this.sliderElem.removeEventListener("mouseleave", this.hideTooltip, false);
- }
- this.sliderElem.removeEventListener("mousedown", this.mousedown, false);
- if (this.touchCapable) {
-
- if (this.showTooltip) {
- this.handle1.removeEventListener("touchstart", this.showTooltip, false);
- this.handle1.removeEventListener("touchmove", this.showTooltip, false);
- this.handle2.removeEventListener("touchstart", this.showTooltip, false);
- this.handle2.removeEventListener("touchmove", this.showTooltip, false);
- }
- if (this.hideTooltip) {
- this.handle1.removeEventListener("touchend", this.hideTooltip, false);
- this.handle2.removeEventListener("touchend", this.hideTooltip, false);
- }
-
- if (this.showTooltip) {
- this.sliderElem.removeEventListener("touchstart", this.showTooltip, false);
- this.sliderElem.removeEventListener("touchmove", this.showTooltip, false);
- }
- if (this.hideTooltip) {
- this.sliderElem.removeEventListener("touchend", this.hideTooltip, false);
- }
- this.sliderElem.removeEventListener("touchstart", this.touchstart, false);
- this.sliderElem.removeEventListener("touchmove", this.touchmove, false);
- }
-
- window.removeEventListener("resize", this.resize, false);
- },
- _bindNonQueryEventHandler: function _bindNonQueryEventHandler(evt, callback) {
- if (this.eventToCallbackMap[evt] === undefined) {
- this.eventToCallbackMap[evt] = [];
- }
- this.eventToCallbackMap[evt].push(callback);
- },
- _unbindNonQueryEventHandler: function _unbindNonQueryEventHandler(evt, callback) {
- var callbacks = this.eventToCallbackMap[evt];
- if (callbacks !== undefined) {
- for (var i = 0; i < callbacks.length; i++) {
- if (callbacks[i] === callback) {
- callbacks.splice(i, 1);
- break;
- }
- }
- }
- },
- _cleanUpEventCallbacksMap: function _cleanUpEventCallbacksMap() {
- var eventNames = Object.keys(this.eventToCallbackMap);
- for (var i = 0; i < eventNames.length; i++) {
- var eventName = eventNames[i];
- delete this.eventToCallbackMap[eventName];
- }
- },
- _showTooltip: function _showTooltip() {
- if (this.options.tooltip_split === false) {
- this._addClass(this.tooltip, 'show');
- this.tooltip_min.style.display = 'none';
- this.tooltip_max.style.display = 'none';
- } else {
- this._addClass(this.tooltip_min, 'show');
- this._addClass(this.tooltip_max, 'show');
- this.tooltip.style.display = 'none';
- }
- this._state.over = true;
- },
- _hideTooltip: function _hideTooltip() {
- if (this._state.inDrag === false && this._alwaysShowTooltip !== true) {
- this._removeClass(this.tooltip, 'show');
- this._removeClass(this.tooltip_min, 'show');
- this._removeClass(this.tooltip_max, 'show');
- }
- this._state.over = false;
- },
- _setToolTipOnMouseOver: function _setToolTipOnMouseOver(tempState) {
- var self = this;
- var formattedTooltipVal = this.options.formatter(!tempState ? this._state.value[0] : tempState.value[0]);
- var positionPercentages = !tempState ? getPositionPercentages(this._state, this.options.reversed) : getPositionPercentages(tempState, this.options.reversed);
- this._setText(this.tooltipInner, formattedTooltipVal);
- this.tooltip.style[this.stylePos] = positionPercentages[0] + "%";
- function getPositionPercentages(state, reversed) {
- if (reversed) {
- return [100 - state.percentage[0], self.options.range ? 100 - state.percentage[1] : state.percentage[1]];
- }
- return [state.percentage[0], state.percentage[1]];
- }
- },
- _copyState: function _copyState() {
- return {
- value: [this._state.value[0], this._state.value[1]],
- enabled: this._state.enabled,
- offset: this._state.offset,
- size: this._state.size,
- percentage: [this._state.percentage[0], this._state.percentage[1], this._state.percentage[2]],
- inDrag: this._state.inDrag,
- over: this._state.over,
-
- dragged: this._state.dragged,
- keyCtrl: this._state.keyCtrl
- };
- },
- _addTickListener: function _addTickListener() {
- return {
- addMouseEnter: function addMouseEnter(reference, element, index) {
- var enter = function enter() {
- var tempState = reference._copyState();
-
- var val = element === reference.handle1 ? tempState.value[0] : tempState.value[1];
- var per = void 0;
-
- if (index !== undefined) {
- val = reference.options.ticks[index];
- per = reference.options.ticks_positions.length > 0 && reference.options.ticks_positions[index] || reference._toPercentage(reference.options.ticks[index]);
- } else {
- per = reference._toPercentage(val);
- }
- tempState.value[0] = val;
- tempState.percentage[0] = per;
- reference._setToolTipOnMouseOver(tempState);
- reference._showTooltip();
- };
- element.addEventListener("mouseenter", enter, false);
- return enter;
- },
- addMouseLeave: function addMouseLeave(reference, element) {
- var leave = function leave() {
- reference._hideTooltip();
- };
- element.addEventListener("mouseleave", leave, false);
- return leave;
- }
- };
- },
- _layout: function _layout() {
- var positionPercentages;
- var formattedValue;
- if (this.options.reversed) {
- positionPercentages = [100 - this._state.percentage[0], this.options.range ? 100 - this._state.percentage[1] : this._state.percentage[1]];
- } else {
- positionPercentages = [this._state.percentage[0], this._state.percentage[1]];
- }
- this.handle1.style[this.stylePos] = positionPercentages[0] + "%";
- this.handle1.setAttribute('aria-valuenow', this._state.value[0]);
- formattedValue = this.options.formatter(this._state.value[0]);
- if (isNaN(formattedValue)) {
- this.handle1.setAttribute('aria-valuetext', formattedValue);
- } else {
- this.handle1.removeAttribute('aria-valuetext');
- }
- this.handle2.style[this.stylePos] = positionPercentages[1] + "%";
- this.handle2.setAttribute('aria-valuenow', this._state.value[1]);
- formattedValue = this.options.formatter(this._state.value[1]);
- if (isNaN(formattedValue)) {
- this.handle2.setAttribute('aria-valuetext', formattedValue);
- } else {
- this.handle2.removeAttribute('aria-valuetext');
- }
-
- if (this.rangeHighlightElements.length > 0 && Array.isArray(this.options.rangeHighlights) && this.options.rangeHighlights.length > 0) {
- for (var _i = 0; _i < this.options.rangeHighlights.length; _i++) {
- var startPercent = this._toPercentage(this.options.rangeHighlights[_i].start);
- var endPercent = this._toPercentage(this.options.rangeHighlights[_i].end);
- if (this.options.reversed) {
- var sp = 100 - endPercent;
- endPercent = 100 - startPercent;
- startPercent = sp;
- }
- var currentRange = this._createHighlightRange(startPercent, endPercent);
- if (currentRange) {
- if (this.options.orientation === 'vertical') {
- this.rangeHighlightElements[_i].style.top = currentRange.start + "%";
- this.rangeHighlightElements[_i].style.height = currentRange.size + "%";
- } else {
- if (this.options.rtl) {
- this.rangeHighlightElements[_i].style.right = currentRange.start + "%";
- } else {
- this.rangeHighlightElements[_i].style.left = currentRange.start + "%";
- }
- this.rangeHighlightElements[_i].style.width = currentRange.size + "%";
- }
- } else {
- this.rangeHighlightElements[_i].style.display = "none";
- }
- }
- }
-
- if (Array.isArray(this.options.ticks) && this.options.ticks.length > 0) {
- var styleSize = this.options.orientation === 'vertical' ? 'height' : 'width';
- var styleMargin;
- if (this.options.orientation === 'vertical') {
- styleMargin = 'marginTop';
- } else {
- if (this.options.rtl) {
- styleMargin = 'marginRight';
- } else {
- styleMargin = 'marginLeft';
- }
- }
- var labelSize = this._state.size / (this.options.ticks.length - 1);
- if (this.tickLabelContainer) {
- var extraMargin = 0;
- if (this.options.ticks_positions.length === 0) {
- if (this.options.orientation !== 'vertical') {
- this.tickLabelContainer.style[styleMargin] = -labelSize / 2 + "px";
- }
- extraMargin = this.tickLabelContainer.offsetHeight;
- } else {
-
- for (i = 0; i < this.tickLabelContainer.childNodes.length; i++) {
- if (this.tickLabelContainer.childNodes[i].offsetHeight > extraMargin) {
- extraMargin = this.tickLabelContainer.childNodes[i].offsetHeight;
- }
- }
- }
- if (this.options.orientation === 'horizontal') {
- this.sliderElem.style.marginBottom = extraMargin + "px";
- }
- }
- for (var i = 0; i < this.options.ticks.length; i++) {
- var percentage = this.options.ticks_positions[i] || this._toPercentage(this.options.ticks[i]);
- if (this.options.reversed) {
- percentage = 100 - percentage;
- }
- this.ticks[i].style[this.stylePos] = percentage + "%";
-
- this._removeClass(this.ticks[i], 'in-selection');
- if (!this.options.range) {
- if (this.options.selection === 'after' && percentage >= positionPercentages[0]) {
- this._addClass(this.ticks[i], 'in-selection');
- } else if (this.options.selection === 'before' && percentage <= positionPercentages[0]) {
- this._addClass(this.ticks[i], 'in-selection');
- }
- } else if (percentage >= positionPercentages[0] && percentage <= positionPercentages[1]) {
- this._addClass(this.ticks[i], 'in-selection');
- }
- if (this.tickLabels[i]) {
- this.tickLabels[i].style[styleSize] = labelSize + "px";
- if (this.options.orientation !== 'vertical' && this.options.ticks_positions[i] !== undefined) {
- this.tickLabels[i].style.position = 'absolute';
- this.tickLabels[i].style[this.stylePos] = percentage + "%";
- this.tickLabels[i].style[styleMargin] = -labelSize / 2 + 'px';
- } else if (this.options.orientation === 'vertical') {
- if (this.options.rtl) {
- this.tickLabels[i].style['marginRight'] = this.sliderElem.offsetWidth + "px";
- } else {
- this.tickLabels[i].style['marginLeft'] = this.sliderElem.offsetWidth + "px";
- }
- this.tickLabelContainer.style[styleMargin] = this.sliderElem.offsetWidth / 2 * -1 + 'px';
- }
-
- this._removeClass(this.tickLabels[i], 'label-in-selection label-is-selection');
- if (!this.options.range) {
- if (this.options.selection === 'after' && percentage >= positionPercentages[0]) {
- this._addClass(this.tickLabels[i], 'label-in-selection');
- } else if (this.options.selection === 'before' && percentage <= positionPercentages[0]) {
- this._addClass(this.tickLabels[i], 'label-in-selection');
- }
- if (percentage === positionPercentages[0]) {
- this._addClass(this.tickLabels[i], 'label-is-selection');
- }
- } else if (percentage >= positionPercentages[0] && percentage <= positionPercentages[1]) {
- this._addClass(this.tickLabels[i], 'label-in-selection');
- if (percentage === positionPercentages[0] || positionPercentages[1]) {
- this._addClass(this.tickLabels[i], 'label-is-selection');
- }
- }
- }
- }
- }
- var formattedTooltipVal;
- if (this.options.range) {
- formattedTooltipVal = this.options.formatter(this._state.value);
- this._setText(this.tooltipInner, formattedTooltipVal);
- this.tooltip.style[this.stylePos] = (positionPercentages[1] + positionPercentages[0]) / 2 + "%";
- var innerTooltipMinText = this.options.formatter(this._state.value[0]);
- this._setText(this.tooltipInner_min, innerTooltipMinText);
- var innerTooltipMaxText = this.options.formatter(this._state.value[1]);
- this._setText(this.tooltipInner_max, innerTooltipMaxText);
- this.tooltip_min.style[this.stylePos] = positionPercentages[0] + "%";
- this.tooltip_max.style[this.stylePos] = positionPercentages[1] + "%";
- } else {
- formattedTooltipVal = this.options.formatter(this._state.value[0]);
- this._setText(this.tooltipInner, formattedTooltipVal);
- this.tooltip.style[this.stylePos] = positionPercentages[0] + "%";
- }
- if (this.options.orientation === 'vertical') {
- this.trackLow.style.top = '0';
- this.trackLow.style.height = Math.min(positionPercentages[0], positionPercentages[1]) + '%';
- this.trackSelection.style.top = Math.min(positionPercentages[0], positionPercentages[1]) + '%';
- this.trackSelection.style.height = Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';
- this.trackHigh.style.bottom = '0';
- this.trackHigh.style.height = 100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';
- } else {
- if (this.stylePos === 'right') {
- this.trackLow.style.right = '0';
- } else {
- this.trackLow.style.left = '0';
- }
- this.trackLow.style.width = Math.min(positionPercentages[0], positionPercentages[1]) + '%';
- if (this.stylePos === 'right') {
- this.trackSelection.style.right = Math.min(positionPercentages[0], positionPercentages[1]) + '%';
- } else {
- this.trackSelection.style.left = Math.min(positionPercentages[0], positionPercentages[1]) + '%';
- }
- this.trackSelection.style.width = Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';
- if (this.stylePos === 'right') {
- this.trackHigh.style.left = '0';
- } else {
- this.trackHigh.style.right = '0';
- }
- this.trackHigh.style.width = 100 - Math.min(positionPercentages[0], positionPercentages[1]) - Math.abs(positionPercentages[0] - positionPercentages[1]) + '%';
- var offset_min = this.tooltip_min.getBoundingClientRect();
- var offset_max = this.tooltip_max.getBoundingClientRect();
- if (this.options.tooltip_position === 'bottom') {
- if (offset_min.right > offset_max.left) {
- this._removeClass(this.tooltip_max, 'bs-tooltip-bottom');
- this._addClass(this.tooltip_max, 'bs-tooltip-top');
- this.tooltip_max.style.top = '';
- this.tooltip_max.style.bottom = 22 + 'px';
- } else {
- this._removeClass(this.tooltip_max, 'bs-tooltip-top');
- this._addClass(this.tooltip_max, 'bs-tooltip-bottom');
- this.tooltip_max.style.top = this.tooltip_min.style.top;
- this.tooltip_max.style.bottom = '';
- }
- } else {
- if (offset_min.right > offset_max.left) {
- this._removeClass(this.tooltip_max, 'bs-tooltip-top');
- this._addClass(this.tooltip_max, 'bs-tooltip-bottom');
- this.tooltip_max.style.top = 18 + 'px';
- } else {
- this._removeClass(this.tooltip_max, 'bs-tooltip-bottom');
- this._addClass(this.tooltip_max, 'bs-tooltip-top');
- this.tooltip_max.style.top = this.tooltip_min.style.top;
- }
- }
- }
- },
- _createHighlightRange: function _createHighlightRange(start, end) {
- if (this._isHighlightRange(start, end)) {
- if (start > end) {
- return { 'start': end, 'size': start - end };
- }
- return { 'start': start, 'size': end - start };
- }
- return null;
- },
- _isHighlightRange: function _isHighlightRange(start, end) {
- if (0 <= start && start <= 100 && 0 <= end && end <= 100) {
- return true;
- } else {
- return false;
- }
- },
- _resize: function _resize(ev) {
-
- this._state.offset = this._offset(this.sliderElem);
- this._state.size = this.sliderElem[this.sizePos];
- this._layout();
- },
- _removeProperty: function _removeProperty(element, prop) {
- if (element.style.removeProperty) {
- element.style.removeProperty(prop);
- } else {
- element.style.removeAttribute(prop);
- }
- },
- _mousedown: function _mousedown(ev) {
- if (!this._state.enabled) {
- return false;
- }
- if (ev.preventDefault) {
- ev.preventDefault();
- }
- this._state.offset = this._offset(this.sliderElem);
- this._state.size = this.sliderElem[this.sizePos];
- var percentage = this._getPercentage(ev);
- if (this.options.range) {
- var diff1 = Math.abs(this._state.percentage[0] - percentage);
- var diff2 = Math.abs(this._state.percentage[1] - percentage);
- this._state.dragged = diff1 < diff2 ? 0 : 1;
- this._adjustPercentageForRangeSliders(percentage);
- } else {
- this._state.dragged = 0;
- }
- this._state.percentage[this._state.dragged] = percentage;
- if (this.touchCapable) {
- document.removeEventListener("touchmove", this.mousemove, false);
- document.removeEventListener("touchend", this.mouseup, false);
- }
- if (this.mousemove) {
- document.removeEventListener("mousemove", this.mousemove, false);
- }
- if (this.mouseup) {
- document.removeEventListener("mouseup", this.mouseup, false);
- }
- this.mousemove = this._mousemove.bind(this);
- this.mouseup = this._mouseup.bind(this);
- if (this.touchCapable) {
-
- document.addEventListener("touchmove", this.mousemove, false);
- document.addEventListener("touchend", this.mouseup, false);
- }
-
- document.addEventListener("mousemove", this.mousemove, false);
- document.addEventListener("mouseup", this.mouseup, false);
- this._state.inDrag = true;
- var newValue = this._calculateValue();
- this._trigger('slideStart', newValue);
- this.setValue(newValue, false, true);
- ev.returnValue = false;
- if (this.options.focus) {
- this._triggerFocusOnHandle(this._state.dragged);
- }
- return true;
- },
- _touchstart: function _touchstart(ev) {
- this._mousedown(ev);
- },
- _triggerFocusOnHandle: function _triggerFocusOnHandle(handleIdx) {
- if (handleIdx === 0) {
- this.handle1.focus();
- }
- if (handleIdx === 1) {
- this.handle2.focus();
- }
- },
- _keydown: function _keydown(handleIdx, ev) {
- if (!this._state.enabled) {
- return false;
- }
- var dir;
- switch (ev.keyCode) {
- case 37:
- case 40:
-
- dir = -1;
- break;
- case 39:
- case 38:
-
- dir = 1;
- break;
- }
- if (!dir) {
- return;
- }
-
- if (this.options.natural_arrow_keys) {
- var isHorizontal = this.options.orientation === 'horizontal';
- var isVertical = this.options.orientation === 'vertical';
- var isRTL = this.options.rtl;
- var isReversed = this.options.reversed;
- if (isHorizontal) {
- if (isRTL) {
- if (!isReversed) {
- dir = -dir;
- }
- } else {
- if (isReversed) {
- dir = -dir;
- }
- }
- } else if (isVertical) {
- if (!isReversed) {
- dir = -dir;
- }
- }
- }
- var val;
- if (this.ticksAreValid && this.options.lock_to_ticks) {
- var index = void 0;
-
- index = this.options.ticks.indexOf(this._state.value[handleIdx]);
- if (index === -1) {
-
- index = 0;
- window.console.warn('(lock_to_ticks) _keydown: index should not be -1');
- }
- index += dir;
- index = Math.max(0, Math.min(this.options.ticks.length - 1, index));
- val = this.options.ticks[index];
- } else {
- val = this._state.value[handleIdx] + dir * this.options.step;
- }
- var percentage = this._toPercentage(val);
- this._state.keyCtrl = handleIdx;
- if (this.options.range) {
- this._adjustPercentageForRangeSliders(percentage);
- var val1 = !this._state.keyCtrl ? val : this._state.value[0];
- var val2 = this._state.keyCtrl ? val : this._state.value[1];
-
- val = [Math.max(this.options.min, Math.min(this.options.max, val1)), Math.max(this.options.min, Math.min(this.options.max, val2))];
- } else {
- val = Math.max(this.options.min, Math.min(this.options.max, val));
- }
- this._trigger('slideStart', val);
- this.setValue(val, true, true);
- this._trigger('slideStop', val);
- this._pauseEvent(ev);
- delete this._state.keyCtrl;
- return false;
- },
- _pauseEvent: function _pauseEvent(ev) {
- if (ev.stopPropagation) {
- ev.stopPropagation();
- }
- if (ev.preventDefault) {
- ev.preventDefault();
- }
- ev.cancelBubble = true;
- ev.returnValue = false;
- },
- _mousemove: function _mousemove(ev) {
- if (!this._state.enabled) {
- return false;
- }
- var percentage = this._getPercentage(ev);
- this._adjustPercentageForRangeSliders(percentage);
- this._state.percentage[this._state.dragged] = percentage;
- var val = this._calculateValue(true);
- this.setValue(val, true, true);
- return false;
- },
- _touchmove: function _touchmove(ev) {
- if (ev.changedTouches === undefined) {
- return;
- }
-
- if (ev.preventDefault) {
- ev.preventDefault();
- }
- },
- _adjustPercentageForRangeSliders: function _adjustPercentageForRangeSliders(percentage) {
- if (this.options.range) {
- var precision = this._getNumDigitsAfterDecimalPlace(percentage);
- precision = precision ? precision - 1 : 0;
- var percentageWithAdjustedPrecision = this._applyToFixedAndParseFloat(percentage, precision);
- if (this._state.dragged === 0 && this._applyToFixedAndParseFloat(this._state.percentage[1], precision) < percentageWithAdjustedPrecision) {
- this._state.percentage[0] = this._state.percentage[1];
- this._state.dragged = 1;
- } else if (this._state.dragged === 1 && this._applyToFixedAndParseFloat(this._state.percentage[0], precision) > percentageWithAdjustedPrecision) {
- this._state.percentage[1] = this._state.percentage[0];
- this._state.dragged = 0;
- } else if (this._state.keyCtrl === 0 && this._toPercentage(this._state.value[1]) < percentage) {
- this._state.percentage[0] = this._state.percentage[1];
- this._state.keyCtrl = 1;
- this.handle2.focus();
- } else if (this._state.keyCtrl === 1 && this._toPercentage(this._state.value[0]) > percentage) {
- this._state.percentage[1] = this._state.percentage[0];
- this._state.keyCtrl = 0;
- this.handle1.focus();
- }
- }
- },
- _mouseup: function _mouseup(ev) {
- if (!this._state.enabled) {
- return false;
- }
- var percentage = this._getPercentage(ev);
- this._adjustPercentageForRangeSliders(percentage);
- this._state.percentage[this._state.dragged] = percentage;
- if (this.touchCapable) {
-
- document.removeEventListener("touchmove", this.mousemove, false);
- document.removeEventListener("touchend", this.mouseup, false);
- }
-
- document.removeEventListener("mousemove", this.mousemove, false);
- document.removeEventListener("mouseup", this.mouseup, false);
- this._state.inDrag = false;
- if (this._state.over === false) {
- this._hideTooltip();
- }
- var val = this._calculateValue(true);
- this.setValue(val, false, true);
- this._trigger('slideStop', val);
-
- this._state.dragged = null;
- return false;
- },
- _setValues: function _setValues(index, val) {
- var comp = 0 === index ? 0 : 100;
- if (this._state.percentage[index] !== comp) {
- val.data[index] = this._toValue(this._state.percentage[index]);
- val.data[index] = this._applyPrecision(val.data[index]);
- }
- },
- _calculateValue: function _calculateValue(snapToClosestTick) {
- var val = {};
- if (this.options.range) {
- val.data = [this.options.min, this.options.max];
- this._setValues(0, val);
- this._setValues(1, val);
- if (snapToClosestTick) {
- val.data[0] = this._snapToClosestTick(val.data[0]);
- val.data[1] = this._snapToClosestTick(val.data[1]);
- }
- } else {
- val.data = this._toValue(this._state.percentage[0]);
- val.data = parseFloat(val.data);
- val.data = this._applyPrecision(val.data);
- if (snapToClosestTick) {
- val.data = this._snapToClosestTick(val.data);
- }
- }
- return val.data;
- },
- _snapToClosestTick: function _snapToClosestTick(val) {
- var min = [val, Infinity];
- for (var i = 0; i < this.options.ticks.length; i++) {
- var diff = Math.abs(this.options.ticks[i] - val);
- if (diff <= min[1]) {
- min = [this.options.ticks[i], diff];
- }
- }
- if (min[1] <= this.options.ticks_snap_bounds) {
- return min[0];
- }
- return val;
- },
- _applyPrecision: function _applyPrecision(val) {
- var precision = this.options.precision || this._getNumDigitsAfterDecimalPlace(this.options.step);
- return this._applyToFixedAndParseFloat(val, precision);
- },
- _getNumDigitsAfterDecimalPlace: function _getNumDigitsAfterDecimalPlace(num) {
- var match = ('' + num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
- if (!match) {
- return 0;
- }
- return Math.max(0, (match[1] ? match[1].length : 0) - (match[2] ? +match[2] : 0));
- },
- _applyToFixedAndParseFloat: function _applyToFixedAndParseFloat(num, toFixedInput) {
- var truncatedNum = num.toFixed(toFixedInput);
- return parseFloat(truncatedNum);
- },
-
- _getPercentage: function _getPercentage(ev) {
- if (this.touchCapable && (ev.type === 'touchstart' || ev.type === 'touchmove' || ev.type === 'touchend')) {
- ev = ev.changedTouches[0];
- }
- var eventPosition = ev[this.mousePos];
- var sliderOffset = this._state.offset[this.stylePos];
- var distanceToSlide = eventPosition - sliderOffset;
- if (this.stylePos === 'right') {
- distanceToSlide = -distanceToSlide;
- }
-
- var percentage = distanceToSlide / this._state.size * 100;
- percentage = Math.round(percentage / this._state.percentage[2]) * this._state.percentage[2];
- if (this.options.reversed) {
- percentage = 100 - percentage;
- }
-
-
-
- return Math.max(0, Math.min(100, percentage));
- },
- _validateInputValue: function _validateInputValue(val) {
- if (!isNaN(+val)) {
- return +val;
- } else if (Array.isArray(val)) {
- this._validateArray(val);
- return val;
- } else {
- throw new Error(ErrorMsgs.formatInvalidInputErrorMsg(val));
- }
- },
- _validateArray: function _validateArray(val) {
- for (var i = 0; i < val.length; i++) {
- var input = val[i];
- if (typeof input !== 'number') {
- throw new Error(ErrorMsgs.formatInvalidInputErrorMsg(input));
- }
- }
- },
- _setDataVal: function _setDataVal(val) {
- this.element.setAttribute('data-value', val);
- this.element.setAttribute('value', val);
- this.element.value = val;
- },
- _trigger: function _trigger(evt, val) {
- val = val || val === 0 ? val : undefined;
- var callbackFnArray = this.eventToCallbackMap[evt];
- if (callbackFnArray && callbackFnArray.length) {
- for (var i = 0; i < callbackFnArray.length; i++) {
- var callbackFn = callbackFnArray[i];
- callbackFn(val);
- }
- }
-
- if ($) {
- this._triggerJQueryEvent(evt, val);
- }
- },
- _triggerJQueryEvent: function _triggerJQueryEvent(evt, val) {
- var eventData = {
- type: evt,
- value: val
- };
- this.$element.trigger(eventData);
- this.$sliderElem.trigger(eventData);
- },
- _unbindJQueryEventHandlers: function _unbindJQueryEventHandlers() {
- this.$element.off();
- this.$sliderElem.off();
- },
- _setText: function _setText(element, text) {
- if (typeof element.textContent !== "undefined") {
- element.textContent = text;
- } else if (typeof element.innerText !== "undefined") {
- element.innerText = text;
- }
- },
- _removeClass: function _removeClass(element, classString) {
- var classes = classString.split(" ");
- var newClasses = element.className;
- for (var i = 0; i < classes.length; i++) {
- var classTag = classes[i];
- var regex = new RegExp("(?:\\s|^)" + classTag + "(?:\\s|$)");
- newClasses = newClasses.replace(regex, " ");
- }
- element.className = newClasses.trim();
- },
- _addClass: function _addClass(element, classString) {
- var classes = classString.split(" ");
- var newClasses = element.className;
- for (var i = 0; i < classes.length; i++) {
- var classTag = classes[i];
- var regex = new RegExp("(?:\\s|^)" + classTag + "(?:\\s|$)");
- var ifClassExists = regex.test(newClasses);
- if (!ifClassExists) {
- newClasses += " " + classTag;
- }
- }
- element.className = newClasses.trim();
- },
- _offsetLeft: function _offsetLeft(obj) {
- return obj.getBoundingClientRect().left;
- },
- _offsetRight: function _offsetRight(obj) {
- return obj.getBoundingClientRect().right;
- },
- _offsetTop: function _offsetTop(obj) {
- var offsetTop = obj.offsetTop;
- while ((obj = obj.offsetParent) && !isNaN(obj.offsetTop)) {
- offsetTop += obj.offsetTop;
- if (obj.tagName !== 'BODY') {
- offsetTop -= obj.scrollTop;
- }
- }
- return offsetTop;
- },
- _offset: function _offset(obj) {
- return {
- left: this._offsetLeft(obj),
- right: this._offsetRight(obj),
- top: this._offsetTop(obj)
- };
- },
- _css: function _css(elementRef, styleName, value) {
- if ($) {
- $.style(elementRef, styleName, value);
- } else {
- var style = styleName.replace(/^-ms-/, "ms-").replace(/-([\da-z])/gi, function (all, letter) {
- return letter.toUpperCase();
- });
- elementRef.style[style] = value;
- }
- },
- _toValue: function _toValue(percentage) {
- return this.options.scale.toValue.apply(this, [percentage]);
- },
- _toPercentage: function _toPercentage(value) {
- return this.options.scale.toPercentage.apply(this, [value]);
- },
- _setTooltipPosition: function _setTooltipPosition() {
- var tooltips = [this.tooltip, this.tooltip_min, this.tooltip_max];
- if (this.options.orientation === 'vertical') {
- var tooltipPos;
- if (this.options.tooltip_position) {
- tooltipPos = this.options.tooltip_position;
- } else {
- if (this.options.rtl) {
- tooltipPos = 'left';
- } else {
- tooltipPos = 'right';
- }
- }
- var oppositeSide = tooltipPos === 'left' ? 'right' : 'left';
- tooltips.forEach(function (tooltip) {
- this._addClass(tooltip, 'bs-tooltip-' + tooltipPos);
- tooltip.style[oppositeSide] = '100%';
- }.bind(this));
- } else if (this.options.tooltip_position === 'bottom') {
- tooltips.forEach(function (tooltip) {
- this._addClass(tooltip, 'bs-tooltip-bottom');
- tooltip.style.top = 22 + 'px';
- }.bind(this));
- } else {
- tooltips.forEach(function (tooltip) {
- this._addClass(tooltip, 'bs-tooltip-top');
- tooltip.style.top = -this.tooltip.outerHeight - 14 + 'px';
- }.bind(this));
- }
- },
- _getClosestTickIndex: function _getClosestTickIndex(val) {
- var difference = Math.abs(val - this.options.ticks[0]);
- var index = 0;
- for (var i = 0; i < this.options.ticks.length; ++i) {
- var d = Math.abs(val - this.options.ticks[i]);
- if (d < difference) {
- difference = d;
- index = i;
- }
- }
- return index;
- },
-
- _setTickIndex: function _setTickIndex() {
- if (this.ticksAreValid) {
- this._state.tickIndex = [this.options.ticks.indexOf(this._state.value[0]), this.options.ticks.indexOf(this._state.value[1])];
- }
- }
- };
-
- if ($ && $.fn) {
- if (!$.fn.slider) {
- $.bridget(NAMESPACE_MAIN, Slider);
- autoRegisterNamespace = NAMESPACE_MAIN;
- } else {
- if (windowIsDefined) {
- window.console.warn("bootstrap-slider.js - WARNING: $.fn.slider namespace is already bound. Use the $.fn.bootstrapSlider namespace instead.");
- }
- autoRegisterNamespace = NAMESPACE_ALTERNATE;
- }
- $.bridget(NAMESPACE_ALTERNATE, Slider);
-
- $(function () {
- $("input[data-provide=slider]")[autoRegisterNamespace]();
- });
- }
- })($);
- return Slider;
- });
|