slider.min.js 17 KB

1234567891011
  1. /*
  2. * # Fomantic UI - 2.8.4
  3. * https://github.com/fomantic/Fomantic-UI
  4. * http://fomantic-ui.com/
  5. *
  6. * Copyright 2014 Contributors
  7. * Released under the MIT license
  8. * http://opensource.org/licenses/MIT
  9. *
  10. */
  11. !function(U,t,X,Y){"use strict";t=void 0!==t&&t.Math==Math?t:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")(),U.fn.slider=function(A){var F,e=U(this),S=U(t),D=e.selector||"",O=(new Date).getTime(),N=[],j=A,z="string"==typeof j,I=[].slice.call(arguments,1),R=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],B=0;return e.each(function(){var f,i,u,e,v,s,t,r,g,h,b,l,n,c,o,p,d=U.isPlainObject(A)?U.extend(!0,{},U.fn.slider.settings,A):U.extend({},U.fn.slider.settings),a=d.className,m=d.metadata,k=d.namespace,V=d.error,w=d.keys,T=d.interpretLabel,y=!1,M="."+k,x="module-"+k,P=U(this),E=this,C=P.data(x),L=1;p={initialize:function(){p.debug("Initializing slider",d),o=!0,t=B+=1,n=p.setup.testOutTouch(),p.setup.layout(),p.setup.labels(),p.is.disabled()||p.bind.events(),p.read.metadata(),p.read.settings(),o=!1,p.instantiate()},instantiate:function(){p.verbose("Storing instance of slider",p),C=p,P.data(x,p)},destroy:function(){p.verbose("Destroying previous slider for",P),clearInterval(C.interval),p.unbind.events(),p.unbind.slidingEvents(),P.removeData(x),C=Y},setup:{layout:function(){P.attr("tabindex")===Y&&P.attr("tabindex",0),0==P.find(".inner").length&&P.append("<div class='inner'><div class='track'></div><div class='track-fill'></div><div class='thumb'></div></div>"),l=p.get.precision(),i=P.find(".thumb:not(.second)"),f=i,p.is.range()&&(0==P.find(".thumb.second").length&&P.find(".inner").append("<div class='thumb second'></div>"),u=P.find(".thumb.second")),e=P.find(".track"),v=P.find(".track-fill"),b=i.width()/2},labels:function(){p.is.labeled()&&(0!=(s=P.find(".labels:not(.auto)")).length?p.setup.customLabel():p.setup.autoLabel(),d.showLabelTicks&&P.addClass(a.ticked))},testOutTouch:function(){try{return X.createEvent("TouchEvent"),!0}catch(e){return!1}},customLabel:function(){var n,e=s.find(".label"),a=e.length,r=p.get.min(),o=p.get.max();e.each(function(e){var t=U(this).attr("data-value");n=t?((t=o<t?o:t<r?r:t)-r)/(o-r):(e+1)/(a+1),p.update.labelPosition(n,U(this))})},autoLabel:function(){if(0!=p.get.step()){0!=(s=P.find(".labels")).length?s.empty():s=P.append('<ul class="auto labels"></ul>').find(".labels");for(var e=0,t=p.get.numLabels();e<=t;e++){var n=p.get.label(e),a=""!==n?e%p.get.gapRatio()?U('<li class="halftick label"></li>'):U('<li class="label">'+n+"</li>"):null,r=e/t;a&&(p.update.labelPosition(r,a),s.append(a))}}}},bind:{events:function(){p.bind.globalKeyboardEvents(),p.bind.keyboardEvents(),p.bind.mouseEvents(),p.is.touch()&&p.bind.touchEvents(),d.autoAdjustLabels&&p.bind.windowEvents()},keyboardEvents:function(){p.verbose("Binding keyboard events"),P.on("keydown"+M,p.event.keydown)},globalKeyboardEvents:function(){U(X).on("keydown"+M+t,p.event.activateFocus)},mouseEvents:function(){p.verbose("Binding mouse events"),P.find(".track, .thumb, .inner").on("mousedown"+M,function(e){e.stopImmediatePropagation(),e.preventDefault(),p.event.down(e)}),P.on("mousedown"+M,p.event.down),P.on("mouseenter"+M,function(e){y=!0}),P.on("mouseleave"+M,function(e){y=!1})},touchEvents:function(){p.verbose("Binding touch events"),P.find(".track, .thumb, .inner").on("touchstart"+M,function(e){e.stopImmediatePropagation(),e.preventDefault(),p.event.down(e)}),P.on("touchstart"+M,p.event.down)},slidingEvents:function(){p.verbose("Binding page wide events while handle is being draged"),p.is.touch()?(U(X).on("touchmove"+M,p.event.move),U(X).on("touchend"+M,p.event.up)):(U(X).on("mousemove"+M,p.event.move),U(X).on("mouseup"+M,p.event.up))},windowEvents:function(){S.on("resize"+M,p.event.resize)}},unbind:{events:function(){P.find(".track, .thumb, .inner").off("mousedown"+M),P.find(".track, .thumb, .inner").off("touchstart"+M),P.off("mousedown"+M),P.off("mouseenter"+M),P.off("mouseleave"+M),P.off("touchstart"+M),P.off("keydown"+M),P.off("focusout"+M),U(X).off("keydown"+M+t,p.event.activateFocus),S.off("resize"+M)},slidingEvents:function(){p.is.touch()?(U(X).off("touchmove"+M),U(X).off("touchend"+M)):(U(X).off("mousemove"+M),U(X).off("mouseup"+M))}},event:{down:function(e){if(e.preventDefault(),p.is.range()){var t=p.determine.eventPos(e),n=p.determine.pos(t);f=d.preventCrossover&&p.is.range()&&p.thumbVal===p.secondThumbVal?(c=n,Y):p.determine.closestThumb(n)}p.is.disabled()||p.bind.slidingEvents()},move:function(e){e.preventDefault();var t=p.determine.valueFromEvent(e);if(f===Y){var n=p.determine.eventPos(e),a=p.determine.pos(n);f=a<c?i:u}if(0==p.get.step()||p.is.smooth()){var r=p.thumbVal,o=p.secondThumbVal,s=p.determine.smoothValueFromEvent(e);f.hasClass("second")?(d.preventCrossover&&p.is.range()&&(t=Math.max(r,t),s=Math.max(r,s)),o=t):(d.preventCrossover&&p.is.range()&&(t=Math.min(o,t),s=Math.min(o,s)),r=t),t=Math.abs(r-(o||0)),p.update.position(s),d.onMove.call(E,t,r,o)}else p.update.value(t,function(e,t,n){d.onMove.call(E,e,t,n)})},up:function(e){e.preventDefault();var t=p.determine.valueFromEvent(e);p.set.value(t),p.unbind.slidingEvents()},keydown:function(e,t){if(d.preventCrossover&&p.is.range()&&p.thumbVal===p.secondThumbVal&&(f=Y),p.is.focused()&&U(X).trigger(e),t||p.is.focused()){var n=p.determine.keyMovement(e);if(0!=n)switch(e.preventDefault(),n){case 1:p.takeStep();break;case 2:p.takeStep(p.get.multiplier());break;case-1:p.backStep();break;case-2:p.backStep(p.get.multiplier())}}},activateFocus:function(e){!p.is.focused()&&p.is.hover()&&0!=p.determine.keyMovement(e)&&(e.preventDefault(),p.event.keydown(e,!0),P.focus())},resize:function(e){L!=p.get.gapRatio()&&(p.setup.labels(),L=p.get.gapRatio())}},resync:function(){p.verbose("Resyncing thumb position based on value"),p.is.range()&&p.update.position(p.secondThumbVal,u),p.update.position(p.thumbVal,i),p.setup.labels()},takeStep:function(e){e=e!=Y?e:1;var t=p.get.step(),n=p.get.currentThumbValue();if(p.verbose("Taking a step"),0<t)p.set.value(n+t*e);else if(0==t){var a=p.get.precision(),r=n+e/a;p.set.value(Math.round(r*a)/a)}},backStep:function(e){e=e!=Y?e:1;var t=p.get.step(),n=p.get.currentThumbValue();if(p.verbose("Going back a step"),0<t)p.set.value(n-t*e);else if(0==t){var a=p.get.precision(),r=n-e/a;p.set.value(Math.round(r*a)/a)}},is:{range:function(){return P.hasClass(d.className.range)},hover:function(){return y},focused:function(){return P.is(":focus")},disabled:function(){return P.hasClass(d.className.disabled)},labeled:function(){return P.hasClass(d.className.labeled)},reversed:function(){return P.hasClass(d.className.reversed)},vertical:function(){return P.hasClass(d.className.vertical)},smooth:function(){return d.smooth||P.hasClass(d.className.smooth)},touch:function(){return n}},get:{trackOffset:function(){return p.is.vertical()?e.offset().top:e.offset().left},trackLength:function(){return p.is.vertical()?e.height():e.width()},trackLeft:function(){return p.is.vertical()?e.position().top:e.position().left},trackStartPos:function(){return p.is.reversed()?p.get.trackLeft()+p.get.trackLength():p.get.trackLeft()},trackEndPos:function(){return p.is.reversed()?p.get.trackLeft():p.get.trackLeft()+p.get.trackLength()},trackStartMargin:function(){return(p.is.vertical()?p.is.reversed()?P.css("padding-bottom"):P.css("padding-top"):p.is.reversed()?P.css("padding-right"):P.css("padding-left"))||"0px"},trackEndMargin:function(){return(p.is.vertical()?p.is.reversed()?P.css("padding-top"):P.css("padding-bottom"):p.is.reversed()?P.css("padding-left"):P.css("padding-right"))||"0px"},precision:function(){var e,t=p.get.step();if(0!=t){var n=String(t).split(".");e=2==n.length?n[1].length:0}else e=d.decimalPlaces;var a=Math.pow(10,e);return p.debug("Precision determined",a),a},min:function(){return d.min},max:function(){var e=p.get.step(),t=p.get.min(),n=0===e?0:Math.floor((d.max-t)/e);return 0==(0===e?0:(d.max-t)%e)?d.max:t+n*e},step:function(){return d.step},numLabels:function(){var e=Math.round((p.get.max()-p.get.min())/p.get.step());return p.debug("Determined that there should be "+e+" labels"),e},labelType:function(){return d.labelType},label:function(e){if(T)return T(e);switch(d.labelType){case d.labelTypes.number:return Math.round((e*p.get.step()+p.get.min())*l)/l;case d.labelTypes.letter:return R[e%26];default:return e}},value:function(){return r},currentThumbValue:function(){return f!==Y&&f.hasClass("second")?p.secondThumbVal:p.thumbVal},thumbValue:function(e){switch(e){case"second":if(p.is.range())return p.secondThumbVal;p.error(V.notrange);break;case"first":default:return p.thumbVal}},multiplier:function(){return d.pageMultiplier},thumbPosition:function(e){switch(e){case"second":if(p.is.range())return h;p.error(V.notrange);break;case"first":default:return g}},gapRatio:function(){var e=1;if(d.autoAdjustLabels){var t=p.get.numLabels(),n=p.get.trackLength(),a=1;if(0<n)for(;n/t*a<d.labelDistance;)t%a||(e=a),a+=1}return e}},determine:{pos:function(e){return p.is.reversed()?p.get.trackStartPos()-e+p.get.trackOffset():e-p.get.trackOffset()-p.get.trackStartPos()},closestThumb:function(e){var t=parseFloat(p.determine.thumbPos(i)),n=Math.abs(e-t),a=parseFloat(p.determine.thumbPos(u)),r=Math.abs(e-a);return n===r&&p.get.thumbValue()===p.get.min()?u:n<=r?i:u},closestThumbPos:function(e){var t=parseFloat(p.determine.thumbPos(i)),n=Math.abs(e-t),a=parseFloat(p.determine.thumbPos(u));return n<=Math.abs(e-a)?t:a},thumbPos:function(e){return p.is.vertical()?p.is.reversed()?e.css("bottom"):e.css("top"):p.is.reversed()?e.css("right"):e.css("left")},positionFromValue:function(e){var t=p.get.min(),n=p.get.max(),a=(e=n<e?n:e<t?t:e,p.get.trackLength()),r=(e-t)/(n-t),o=Math.round(r*a);return p.verbose("Determined position: "+o+" from value: "+e),o},positionFromRatio:function(e){var t=p.get.trackLength(),n=p.get.step(),a=Math.round(e*t);return 0==n?a:Math.round(a/n)*n},valueFromEvent:function(e){var t=p.determine.eventPos(e),n=p.determine.pos(t);return t<p.get.trackOffset()?p.is.reversed()?p.get.max():p.get.min():t>p.get.trackOffset()+p.get.trackLength()?p.is.reversed()?p.get.min():p.get.max():p.determine.value(n)},smoothValueFromEvent:function(e){var t,n=p.get.min(),a=p.get.max(),r=p.get.trackLength(),o=p.determine.eventPos(e)-p.get.trackOffset();return t=(o=o<0?0:r<o?r:o)/r,p.is.reversed()&&(t=1-t),t*(a-n)+n},eventPos:function(e){if(p.is.touch()){var t=e.changedTouches?e:e.originalEvent,n=t.changedTouches[0]?t.changedTouches:t.touches,a=n[0].pageY,r=n[0].pageX;return p.is.vertical()?a:r}var o=e.pageY||e.originalEvent.pageY,s=e.pageX||e.originalEvent.pageX;return p.is.vertical()?o:s},value:function(e){var t=p.is.reversed()?p.get.trackEndPos():p.get.trackStartPos(),n=(e-t)/((p.is.reversed()?p.get.trackStartPos():p.get.trackEndPos())-t),a=p.get.max()-p.get.min(),r=p.get.step(),o=n*a,s=0==r?o:Math.round(o/r)*r;return p.verbose("Determined value based upon position: "+e+" as: "+o),o!=s&&p.verbose("Rounding value to closest step: "+s),s=Math.round(s*l)/l,p.verbose("Cutting off additional decimal places"),s+p.get.min()},keyMovement:function(e){var t=e.which,n=p.is.vertical()?p.is.reversed()?w.downArrow:w.upArrow:w.downArrow,a=p.is.vertical()?p.is.reversed()?w.upArrow:w.downArrow:w.upArrow,r=p.is.vertical()?w.leftArrow:p.is.reversed()?w.rightArrow:w.leftArrow,o=p.is.vertical()?w.rightArrow:p.is.reversed()?w.leftArrow:w.rightArrow;return t==n||t==r?-1:t==a||t==o?1:t==w.pageDown?-2:t==w.pageUp?2:0}},handleNewValuePosition:function(e){var t=p.get.min(),n=p.get.max();return e<=t?e=t:n<=e&&(e=n),p.determine.positionFromValue(e)},set:{value:function(e){p.update.value(e,function(e,t,n){o&&!d.fireOnInit||(d.onChange.call(E,e,t,n),d.onMove.call(E,e,t,n))})},rangeValue:function(e,t){if(p.is.range()){var n=p.get.min(),a=p.get.max();e<=n?e=n:a<=e&&(e=a),t<=n?t=n:a<=t&&(t=a),p.thumbVal=e,p.secondThumbVal=t,r=Math.abs(p.thumbVal-p.secondThumbVal),p.update.position(p.thumbVal,i),p.update.position(p.secondThumbVal,u),o&&!d.fireOnInit||(d.onChange.call(E,r,p.thumbVal,p.secondThumbVal),d.onMove.call(E,r,p.thumbVal,p.secondThumbVal))}else p.error(V.notrange)},position:function(e,t){var n=p.determine.value(e);switch(t){case"second":p.secondThumbVal=n,p.update.position(n,u);break;default:p.thumbVal=n,p.update.position(n,i)}r=Math.abs(p.thumbVal-(p.secondThumbVal||0)),p.set.value(r)}},update:{value:function(e,t){var n=p.get.min(),a=p.get.max();e<=n?e=n:a<=e&&(e=a),p.is.range()?(f===Y&&(f=e<=p.get.currentThumbValue()?i:u),f.hasClass("second")?(d.preventCrossover&&p.is.range()&&(e=Math.max(p.thumbVal,e)),p.secondThumbVal=e):(d.preventCrossover&&p.is.range()&&(e=Math.min(p.secondThumbVal,e)),p.thumbVal=e),r=Math.abs(p.thumbVal-p.secondThumbVal)):(r=e,p.thumbVal=r),p.update.position(e),p.debug("Setting slider value to "+r),"function"==typeof t&&t(r,p.thumbVal,p.secondThumbVal)},position:function(e,t){var n=p.handleNewValuePosition(e),a=t!=Y?t:f,r=p.thumbVal||p.get.min(),o=p.secondThumbVal||p.get.min();p.is.range()&&a.hasClass("second")?(h=n,o=e):(g=n,r=e);var s,i,u=p.get.min(),l=p.get.max(),c=100*(e-u)/(l-u),d=100*(Math.min(r,o)-u)/(l-u),m=100*(1-(Math.max(r,o)-u)/(l-u));s=p.is.vertical()?p.is.reversed()?(i={bottom:"calc("+c+"% - "+b+"px)",top:"auto"},{bottom:d+"%",top:m+"%"}):(i={top:"calc("+c+"% - "+b+"px)",bottom:"auto"},{top:d+"%",bottom:m+"%"}):p.is.reversed()?(i={right:"calc("+c+"% - "+b+"px)",left:"auto"},{right:d+"%",left:m+"%"}):(i={left:"calc("+c+"% - "+b+"px)",right:"auto"},{left:d+"%",right:m+"%"}),a.css(i),v.css(s),p.debug("Setting slider position to "+n)},labelPosition:function(e,t){var n=p.get.trackStartMargin(),a=p.get.trackEndMargin(),r=p.is.vertical()?p.is.reversed()?"bottom":"top":p.is.reversed()?"right":"left",o=p.is.reversed()&&!p.is.vertical()?" - ":" + ",s="(100% - "+n+" - "+a+") * "+e;t.css(r,"calc("+s+o+n+")")}},goto:{max:function(){p.set.value(p.get.max())},min:function(){p.set.value(p.get.min())}},read:{metadata:function(){var e={thumbVal:P.data(m.thumbVal),secondThumbVal:P.data(m.secondThumbVal)};e.thumbVal&&(p.is.range()&&e.secondThumbVal?(p.debug("Current value set from metadata",e.thumbVal,e.secondThumbVal),p.set.rangeValue(e.thumbVal,e.secondThumbVal)):(p.debug("Current value set from metadata",e.thumbVal),p.set.value(e.thumbVal)))},settings:function(){!1!==d.start&&(p.is.range()?(p.debug("Start position set from settings",d.start,d.end),p.set.rangeValue(d.start,d.end)):(p.debug("Start position set from settings",d.start),p.set.value(d.start)))}},setting:function(e,t){if(p.debug("Changing setting",e,t),U.isPlainObject(e))U.extend(!0,d,e);else{if(t===Y)return d[e];U.isPlainObject(d[e])?U.extend(!0,d[e],t):d[e]=t}},internal:function(e,t){if(U.isPlainObject(e))U.extend(!0,p,e);else{if(t===Y)return p[e];p[e]=t}},debug:function(){!d.silent&&d.debug&&(d.performance?p.performance.log(arguments):(p.debug=Function.prototype.bind.call(console.info,console,d.name+":"),p.debug.apply(console,arguments)))},verbose:function(){!d.silent&&d.verbose&&d.debug&&(d.performance?p.performance.log(arguments):(p.verbose=Function.prototype.bind.call(console.info,console,d.name+":"),p.verbose.apply(console,arguments)))},error:function(){d.silent||(p.error=Function.prototype.bind.call(console.error,console,d.name+":"),p.error.apply(console,arguments))},performance:{log:function(e){var t,n;d.performance&&(n=(t=(new Date).getTime())-(O||t),O=t,N.push({Name:e[0],Arguments:[].slice.call(e,1)||"",Element:E,"Execution Time":n})),clearTimeout(p.performance.timer),p.performance.timer=setTimeout(p.performance.display,500)},display:function(){var e=d.name+":",n=0;O=!1,clearTimeout(p.performance.timer),U.each(N,function(e,t){n+=t["Execution Time"]}),e+=" "+n+"ms",D&&(e+=" '"+D+"'"),(console.group!==Y||console.table!==Y)&&0<N.length&&(console.groupCollapsed(e),console.table?console.table(N):U.each(N,function(e,t){console.log(t.Name+": "+t["Execution Time"]+"ms")}),console.groupEnd()),N=[]}},invoke:function(a,e,t){var r,o,n,s=C;return e=e||I,t=E||t,"string"==typeof a&&s!==Y&&(a=a.split(/[\. ]/),r=a.length-1,U.each(a,function(e,t){var n=e!=r?t+a[e+1].charAt(0).toUpperCase()+a[e+1].slice(1):a;if(U.isPlainObject(s[n])&&e!=r)s=s[n];else{if(s[n]!==Y)return o=s[n],!1;if(!U.isPlainObject(s[t])||e==r)return s[t]!==Y?o=s[t]:p.error(V.method,a),!1;s=s[t]}})),U.isFunction(o)?n=o.apply(t,e):o!==Y&&(n=o),U.isArray(F)?F.push(n):F!==Y?F=[F,n]:n!==Y&&(F=n),o}},z?(C===Y&&p.initialize(),p.invoke(j)):(C!==Y&&C.invoke("destroy"),p.initialize())}),F!==Y?F:this},U.fn.slider.settings={silent:!1,debug:!1,verbose:!1,performance:!0,name:"Slider",namespace:"slider",error:{method:"The method you called is not defined.",notrange:"This slider is not a range slider"},metadata:{thumbVal:"thumbVal",secondThumbVal:"secondThumbVal"},min:0,max:20,step:1,start:0,end:20,labelType:"number",showLabelTicks:!1,smooth:!1,autoAdjustLabels:!0,labelDistance:100,preventCrossover:!0,fireOnInit:!1,decimalPlaces:2,pageMultiplier:2,selector:{},className:{reversed:"reversed",disabled:"disabled",labeled:"labeled",ticked:"ticked",vertical:"vertical",range:"range",smooth:"smooth"},keys:{pageUp:33,pageDown:34,leftArrow:37,upArrow:38,rightArrow:39,downArrow:40},labelTypes:{number:"number",letter:"letter"},onChange:function(e,t,n){},onMove:function(e,t,n){}}}(jQuery,window,document);