Files
2025-11-07 11:31:06 +00:00

1 line
6.4 KiB
JavaScript

if(!Control)var Control={};Control.Slider=Class.create({initialize:function(e,t,i){var n=this;this.handles=Object.isArray(e)?e.collect(function(e){return $(e)}):[$(e)],this.track=$(t),this.options=i||{},this.axis=this.options.axis||"horizontal",this.increment=this.options.increment||1,this.step=parseInt(this.options.step||"1"),this.range=this.options.range||$R(0,1),this.value=0,this.values=this.handles.map(function(){return 0}),this.spans=this.options.spans?this.options.spans.map(function(e){return $(e)}):!1,this.options.startSpan=$(this.options.startSpan||null),this.options.endSpan=$(this.options.endSpan||null),this.restricted=this.options.restricted||!1,this.maximum=this.options.maximum||this.range.end,this.minimum=this.options.minimum||this.range.start,this.alignX=parseInt(this.options.alignX||"0"),this.alignY=parseInt(this.options.alignY||"0"),this.trackLength=this.maximumOffset()-this.minimumOffset(),this.handleLength=this.isVertical()?0!=this.handles[0].offsetHeight?this.handles[0].offsetHeight:this.handles[0].style.height.replace(/px$/,""):0!=this.handles[0].offsetWidth?this.handles[0].offsetWidth:this.handles[0].style.width.replace(/px$/,""),this.active=!1,this.dragging=!1,this.disabled=!1,this.options.disabled&&this.setDisabled(),this.allowedValues=this.options.values?this.options.values.sortBy(Prototype.K):!1,this.allowedValues&&(this.minimum=this.allowedValues.min(),this.maximum=this.allowedValues.max()),this.eventMouseDown=this.startDrag.bindAsEventListener(this),this.eventMouseUp=this.endDrag.bindAsEventListener(this),this.eventMouseMove=this.update.bindAsEventListener(this),this.handles.each(function(e,t){t=n.handles.length-1-t,n.setValue(parseFloat((Object.isArray(n.options.sliderValue)?n.options.sliderValue[t]:n.options.sliderValue)||n.range.start),t),e.makePositioned().observe("mousedown",n.eventMouseDown)}),this.track.observe("mousedown",this.eventMouseDown),document.observe("mouseup",this.eventMouseUp),document.observe("mousemove",this.eventMouseMove),this.initialized=!0},dispose:function(){var e=this;Event.stopObserving(this.track,"mousedown",this.eventMouseDown),Event.stopObserving(document,"mouseup",this.eventMouseUp),Event.stopObserving(document,"mousemove",this.eventMouseMove),this.handles.each(function(t){Event.stopObserving(t,"mousedown",e.eventMouseDown)})},setDisabled:function(){this.disabled=!0},setEnabled:function(){this.disabled=!1},getNearestValue:function(e){if(this.allowedValues){if(e>=this.allowedValues.max())return this.allowedValues.max();if(this.allowedValues.min()>=e)return this.allowedValues.min();var t=Math.abs(this.allowedValues[0]-e),i=this.allowedValues[0];return this.allowedValues.each(function(n){var r=Math.abs(n-e);t>=r&&(i=n,t=r)}),i}return e>this.range.end?this.range.end:this.range.start>e?this.range.start:e},setValue:function(e,t){this.active||(this.activeHandleIdx=t||0,this.activeHandle=this.handles[this.activeHandleIdx],this.updateStyles()),t=t||this.activeHandleIdx||0,this.initialized&&this.restricted&&(t>0&&this.values[t-1]>e&&(e=this.values[t-1]),this.handles.length-1>t&&e>this.values[t+1]&&(e=this.values[t+1])),e=this.getNearestValue(e),this.values[t]=e,this.value=this.values[0],this.handles[t].style[this.isVertical()?"top":"left"]=this.translateToPx(e),this.drawSpans(),this.dragging&&this.event||this.updateFinished()},setValueBy:function(e,t){this.setValue(this.values[t||this.activeHandleIdx||0]+e,t||this.activeHandleIdx||0)},translateToPx:function(e){return Math.round((this.trackLength-this.handleLength)/(this.range.end-this.range.start)*(e-this.range.start))+"px"},translateToValue:function(e){return e/(this.trackLength-this.handleLength)*(this.range.end-this.range.start)+this.range.start},getRange:function(e){var t=this.values.sortBy(Prototype.K);return e=e||0,$R(t[e],t[e+1])},minimumOffset:function(){return this.isVertical()?this.alignY:this.alignX},maximumOffset:function(){return this.isVertical()?(0!=this.track.offsetHeight?this.track.offsetHeight:this.track.style.height.replace(/px$/,""))-this.alignY:(0!=this.track.offsetWidth?this.track.offsetWidth:this.track.style.width.replace(/px$/,""))-this.alignX},isVertical:function(){return"vertical"==this.axis},drawSpans:function(){var e=this;this.spans&&$R(0,this.spans.length-1).each(function(t){e.setSpan(e.spans[t],e.getRange(t))}),this.options.startSpan&&this.setSpan(this.options.startSpan,$R(0,this.values.length>1?this.getRange(0).min():this.value)),this.options.endSpan&&this.setSpan(this.options.endSpan,$R(this.values.length>1?this.getRange(this.spans.length-1).max():this.value,this.maximum))},setSpan:function(e,t){this.isVertical()?(e.style.top=this.translateToPx(t.start),e.style.height=this.translateToPx(t.end-t.start+this.range.start)):(e.style.left=this.translateToPx(t.start),e.style.width=this.translateToPx(t.end-t.start+this.range.start))},updateStyles:function(){this.handles.each(function(e){Element.removeClassName(e,"selected")}),Element.addClassName(this.activeHandle,"selected")},startDrag:function(e){if(Event.isLeftClick(e)){if(!this.disabled){this.active=!0;var t=Event.element(e),i=[Event.pointerX(e),Event.pointerY(e)],n=t;if(n==this.track){var r=this.track.cumulativeOffset();this.event=e,this.setValue(this.translateToValue((this.isVertical()?i[1]-r[1]:i[0]-r[0])-this.handleLength/2));var r=this.activeHandle.cumulativeOffset();this.offsetX=i[0]-r[0],this.offsetY=i[1]-r[1]}else{for(;-1==this.handles.indexOf(t)&&t.parentNode;)t=t.parentNode;if(-1!=this.handles.indexOf(t)){this.activeHandle=t,this.activeHandleIdx=this.handles.indexOf(this.activeHandle),this.updateStyles();var r=this.activeHandle.cumulativeOffset();this.offsetX=i[0]-r[0],this.offsetY=i[1]-r[1]}}}Event.stop(e)}},update:function(e){this.active&&(this.dragging||(this.dragging=!0),this.draw(e),Prototype.Browser.WebKit&&window.scrollBy(0,0),Event.stop(e))},draw:function(e){var t=[Event.pointerX(e),Event.pointerY(e)],i=this.track.cumulativeOffset();t[0]-=this.offsetX+i[0],t[1]-=this.offsetY+i[1],this.event=e,this.setValue(this.translateToValue(this.isVertical()?t[1]:t[0])),this.initialized&&this.options.onSlide&&this.options.onSlide(this.values.length>1?this.values:this.value,this)},endDrag:function(e){this.active&&this.dragging&&(this.finishDrag(e,!0),Event.stop(e)),this.active=!1,this.dragging=!1},finishDrag:function(){this.active=!1,this.dragging=!1,this.updateFinished()},updateFinished:function(){this.initialized&&this.options.onChange&&this.options.onChange(this.values.length>1?this.values:this.value,this),this.event=null}});