Файл: static/plugins/base/js/drag_and_drop_slider.js
Строк: 119
<?php
(function($){
$.fn.schemeSwitcher = function(options) {
var $node = $(this);
var $handle = $node.find('.peep_dnd_slider_handle');
var $markers = $node.find(".peep_dnd_slider_marker");
var $activeMarker = $node.find('.peep_dnd_slider_item .current');
var markersPositionMap = [];
var moveTo = function( $toMarker ) {
prePosition = $toMarker.outerWidth() + $toMarker.position().left - ( $handle.outerWidth() / 2 ) -2;
$handle.css('left', prePosition);
};
var changeDelegate = function() {
var $this = $(this);
moveTo($this);
if ( $this.hasClass('current') ) {
return;
}
var lastMarker = $node.find('.current').removeClass('current').get(0);
$this.addClass('current');
$activeMarker = $this;
if ( options.change !== undefined ) {
var event = {
marker: this,
markerPoint: this.pointer,
lastMarker: lastMarker
};
options.change.apply($node.get(0), [event]);
}
};
var updateDelegate = function() {
if ( options.update !== undefined ) {
var event = {
marker: this
};
options.update.apply($node.get(0), [event]);
}
};
if ( ! $activeMarker.length ) {
$activeMarker = $( $markers.get(0) ).addClass('current');
}
moveTo($activeMarker);
$handle.draggable({
containment: 'parent',
axis: 'x',
start: function() {
$(this).addClass('peep_dnd_slider_in_move');
},
stop: function() {
$(this).removeClass('peep_dnd_slider_in_move');
updateDelegate.apply($activeMarker.get(0));
},
helper: function(){
return $(this).clone(false).addClass('peep_dnd_slider_helper');
}
});
$markers.droppable({
tolerance: 'touch',
accept: '.peep_dnd_slider_handle',
over: changeDelegate
});
for (var i = 0; i < $markers.length; i++) {
var $this = $($markers[i]);
var $pointer = $('<div class="peep_dnd_slider_marker_point"></div>');
$node.append($pointer);
var left = $this.position().left + $this.outerWidth() - 2;
$pointer.css('left', left);
this.pointer = $pointer.get(0);
var np = $node.position();
var markerX = left + np.left;
var nml = $markers[i+1] ? np.left + $($markers[i+1]).position().left : np.left + $node.outerWidth();
var x1, x2;
if ( i == 0) {
x1 = np.left;
} else {
x1 = markersPositionMap[i-1].x2;
}
if ($markers[i+1]) {
x2 = np.left + left + ( $($markers[i+1]).position().left - left ) / 2;
} else {
x2 = np.left + $node.outerWidth();
}
markersPositionMap.push({
x1: x1,
x2: x2,
m: $markers[i]
});
}
$node.click(function(e){
var mpm = markersPositionMap;
for( var i=0; i < mpm.length; i++ ) {
if ( e.clientX > mpm[i].x1 && e.clientX < mpm[i].x2 ) {
changeDelegate.apply(mpm[i].m);
updateDelegate.apply(mpm[i].m);
return;
}
}
});
return this;
}
})(jQuery)
?>