diff --git a/plugins/slimScroll/jquery.slimscroll.js_old b/plugins/slimScroll/jquery.slimscroll.js old mode 100644 new mode 100755 similarity index 52% rename from plugins/slimScroll/jquery.slimscroll.js_old rename to plugins/slimScroll/jquery.slimscroll.js index e9127d313..90caed348 --- a/plugins/slimScroll/jquery.slimscroll.js_old +++ b/plugins/slimScroll/jquery.slimscroll.js @@ -2,71 +2,93 @@ * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. * - * Version: 1.3.3 + * Version: 1.3.8 * */ -(function ($) { +(function($) { $.fn.extend({ - slimScroll: function (options) { + slimScroll: function(options) { var defaults = { + // width in pixels of the visible scroll area - width: 'auto', + width : 'auto', + // height in pixels of the visible scroll area - height: '250px', + height : '250px', + // width in pixels of the scrollbar and rail - size: '7px', + size : '7px', + // scrollbar color, accepts any hex/color value color: '#000', + // scrollbar position - left/right - position: 'right', + position : 'right', + // distance in pixels between the side edge and the scrollbar - distance: '1px', + distance : '1px', + // default scroll position on load - top / bottom / $('selector') - start: 'top', + start : 'top', + // sets scrollbar opacity - opacity: .4, + opacity : .4, + // enables always-on mode for the scrollbar - alwaysVisible: false, + alwaysVisible : false, + // check if we should hide the scrollbar when user is hovering over - disableFadeOut: false, + disableFadeOut : false, + // sets visibility of the rail - railVisible: false, + railVisible : false, + // sets rail color - railColor: '#333', + railColor : '#333', + // sets rail opacity - railOpacity: .2, + railOpacity : .2, + // whether we should use jQuery UI Draggable to enable bar dragging - railDraggable: true, + railDraggable : true, + // defautlt CSS class of the slimscroll rail - railClass: 'slimScrollRail', + railClass : 'slimScrollRail', + // defautlt CSS class of the slimscroll bar - barClass: 'slimScrollBar', + barClass : 'slimScrollBar', + // defautlt CSS class of the slimscroll wrapper - wrapperClass: 'slimScrollDiv', + wrapperClass : 'slimScrollDiv', + // check if mousewheel should scroll the window if we reach top/bottom - allowPageScroll: false, + allowPageScroll : false, + // scroll amount applied to each mouse wheel step - wheelStep: 20, + wheelStep : 20, + // scroll amount applied when user is using gestures - touchScrollStep: 200, + touchScrollStep : 200, + // sets border radius borderRadius: '7px', + // sets border radius of the rail - railBorderRadius: '7px' + railBorderRadius : '7px' }; var o = $.extend(defaults, options); // do it for every element that matches selector - this.each(function () { + this.each(function(){ - var isOverPanel, isOverBar, isDragg, queueHide, touchDif, - barHeight, percentScroll, lastScroll, - divS = '
', - minBarHeight = 30, - releaseScroll = false; + var isOverPanel, isOverBar, isDragg, queueHide, touchDif, + barHeight, percentScroll, lastScroll, + divS = '
', + minBarHeight = 30, + releaseScroll = false; // used in event handlers and for better minification var me = $(this); @@ -74,58 +96,62 @@ // ensure we are not binding it again if (me.parent().hasClass(o.wrapperClass)) { - // start from last bar position - var offset = me.scrollTop(); - - // find bar and rail - bar = me.parent().find('.' + o.barClass); - rail = me.parent().find('.' + o.railClass); + // start from last bar position + var offset = me.scrollTop(); - getBarHeight(); + // find bar and rail + bar = me.siblings('.' + o.barClass); + rail = me.siblings('.' + o.railClass); - // check if we should scroll existing instance - if ($.isPlainObject(options)) - { - // Pass height: auto to an existing slimscroll object to force a resize after contents have changed - if ('height' in options && options.height == 'auto') { - me.parent().css('height', 'auto'); - me.css('height', 'auto'); - var height = me.parent().parent().height(); - me.parent().css('height', height); - me.css('height', height); - } + getBarHeight(); - if ('scrollTo' in options) + // check if we should scroll existing instance + if ($.isPlainObject(options)) { - // jump to a static point - offset = parseInt(o.scrollTo); - } - else if ('scrollBy' in options) - { - // jump by value pixels - offset += parseInt(o.scrollBy); - } - else if ('destroy' in options) - { - // remove slimscroll elements - bar.remove(); - rail.remove(); - me.unwrap(); - return; - } + // Pass height: auto to an existing slimscroll object to force a resize after contents have changed + if ( 'height' in options && options.height == 'auto' ) { + me.parent().css('height', 'auto'); + me.css('height', 'auto'); + var height = me.parent().parent().height(); + me.parent().css('height', height); + me.css('height', height); + } else if ('height' in options) { + var h = options.height; + me.parent().css('height', h); + me.css('height', h); + } - // scroll content by the given offset - scrollContent(offset, false, true); - } + if ('scrollTo' in options) + { + // jump to a static point + offset = parseInt(o.scrollTo); + } + else if ('scrollBy' in options) + { + // jump by value pixels + offset += parseInt(o.scrollBy); + } + else if ('destroy' in options) + { + // remove slimscroll elements + bar.remove(); + rail.remove(); + me.unwrap(); + return; + } - return; + // scroll content by the given offset + scrollContent(offset, false, true); + } + + return; } else if ($.isPlainObject(options)) { - if ('destroy' in options) - { - return; - } + if ('destroy' in options) + { + return; + } } // optionally set height to the parent's height @@ -133,57 +159,55 @@ // wrap content var wrapper = $(divS) - .addClass(o.wrapperClass) - .css({ - position: 'relative', - overflow: 'hidden', - width: o.width, - height: o.height - }); + .addClass(o.wrapperClass) + .css({ + position: 'relative', + overflow: 'hidden', + width: o.width, + height: o.height + }); // update style for the div me.css({ overflow: 'hidden', width: o.width, - height: o.height, - //Fix for IE10 - "-ms-touch-action": "none" + height: o.height }); // create scrollbar rail var rail = $(divS) - .addClass(o.railClass) - .css({ - width: o.size, - height: '100%', - position: 'absolute', - top: 0, - display: (o.alwaysVisible && o.railVisible) ? 'block' : 'none', - 'border-radius': o.railBorderRadius, - background: o.railColor, - opacity: o.railOpacity, - zIndex: 90 - }); + .addClass(o.railClass) + .css({ + width: o.size, + height: '100%', + position: 'absolute', + top: 0, + display: (o.alwaysVisible && o.railVisible) ? 'block' : 'none', + 'border-radius': o.railBorderRadius, + background: o.railColor, + opacity: o.railOpacity, + zIndex: 90 + }); // create scrollbar var bar = $(divS) - .addClass(o.barClass) - .css({ - background: o.color, - width: o.size, - position: 'absolute', - top: 0, - opacity: o.opacity, - display: o.alwaysVisible ? 'block' : 'none', - 'border-radius': o.borderRadius, - BorderRadius: o.borderRadius, - MozBorderRadius: o.borderRadius, - WebkitBorderRadius: o.borderRadius, - zIndex: 99 - }); + .addClass(o.barClass) + .css({ + background: o.color, + width: o.size, + position: 'absolute', + top: 0, + opacity: o.opacity, + display: o.alwaysVisible ? 'block' : 'none', + 'border-radius' : o.borderRadius, + BorderRadius: o.borderRadius, + MozBorderRadius: o.borderRadius, + WebkitBorderRadius: o.borderRadius, + zIndex: 99 + }); // set position - var posCss = (o.position == 'right') ? {right: o.distance} : {left: o.distance}; + var posCss = (o.position == 'right') ? { right: o.distance } : { left: o.distance }; rail.css(posCss); bar.css(posCss); @@ -195,26 +219,25 @@ me.parent().append(rail); // make it draggable and no longer dependent on the jqueryUI - if (o.railDraggable) { - bar.bind("mousedown", function (e) { + if (o.railDraggable){ + bar.bind("mousedown", function(e) { var $doc = $(document); isDragg = true; t = parseFloat(bar.css('top')); pageY = e.pageY; - $doc.bind("mousemove.slimscroll", function (e) { + $doc.bind("mousemove.slimscroll", function(e){ currTop = t + e.pageY - pageY; bar.css('top', currTop); scrollContent(0, bar.position().top, false);// scroll content }); - $doc.bind("mouseup.slimscroll", function (e) { - isDragg = false; - hideBar(); + $doc.bind("mouseup.slimscroll", function(e) { + isDragg = false;hideBar(); $doc.unbind('.slimscroll'); }); return false; - }).bind("selectstart.slimscroll", function (e) { + }).bind("selectstart.slimscroll", function(e){ e.stopPropagation(); e.preventDefault(); return false; @@ -222,78 +245,53 @@ } // on rail over - rail.hover(function () { + rail.hover(function(){ showBar(); - }, function () { + }, function(){ hideBar(); }); // on bar over - bar.hover(function () { + bar.hover(function(){ isOverBar = true; - }, function () { + }, function(){ isOverBar = false; }); // show on parent mouseover - me.hover(function () { + me.hover(function(){ isOverPanel = true; showBar(); hideBar(); - }, function () { + }, function(){ isOverPanel = false; hideBar(); }); - if (window.navigator.msPointerEnabled) { - // support for mobile - me.bind('MSPointerDown', function (e, b) { - if (e.originalEvent.targetTouches.length) - { - // record where touch started - touchDif = e.originalEvent.targetTouches[0].pageY; - } - }); - - me.bind('MSPointerMove', function (e) { - // prevent scrolling the page if necessary - e.originalEvent.preventDefault(); - if (e.originalEvent.targetTouches.length) - { - // see how far user swiped - var diff = (touchDif - e.originalEvent.targetTouches[0].pageY) / o.touchScrollStep; - // scroll content - scrollContent(diff, true); - touchDif = e.originalEvent.targetTouches[0].pageY; - - } - }); - } else { - // support for mobile - me.bind('touchstart', function (e, b) { - if (e.originalEvent.touches.length) - { - // record where touch started - touchDif = e.originalEvent.touches[0].pageY; - } - }); + // support for mobile + me.bind('touchstart', function(e,b){ + if (e.originalEvent.touches.length) + { + // record where touch started + touchDif = e.originalEvent.touches[0].pageY; + } + }); - me.bind('touchmove', function (e) { - // prevent scrolling the page if necessary - if (!releaseScroll) - { - e.originalEvent.preventDefault(); - } - if (e.originalEvent.touches.length) - { - // see how far user swiped - var diff = (touchDif - e.originalEvent.touches[0].pageY) / o.touchScrollStep; - // scroll content - scrollContent(diff, true); - touchDif = e.originalEvent.touches[0].pageY; - } - }); - } + me.bind('touchmove', function(e){ + // prevent scrolling the page if necessary + if(!releaseScroll) + { + e.originalEvent.preventDefault(); + } + if (e.originalEvent.touches.length) + { + // see how far user swiped + var diff = (touchDif - e.originalEvent.touches[0].pageY) / o.touchScrollStep; + // scroll content + scrollContent(diff, true); + touchDif = e.originalEvent.touches[0].pageY; + } + }); // set up initial height getBarHeight(); @@ -302,7 +300,7 @@ if (o.start === 'bottom') { // scroll content to bottom - bar.css({top: me.outerHeight() - bar.outerHeight()}); + bar.css({ top: me.outerHeight() - bar.outerHeight() }); scrollContent(0, true); } else if (o.start !== 'top') @@ -311,30 +309,22 @@ scrollContent($(o.start).position().top, null, true); // make sure bar stays hidden - if (!o.alwaysVisible) { - bar.hide(); - } + if (!o.alwaysVisible) { bar.hide(); } } // attach scroll events - attachWheel(); + attachWheel(this); function _onWheel(e) { // use mouse wheel only when mouse is over - if (!isOverPanel) { - return; - } + if (!isOverPanel) { return; } var e = e || window.event; var delta = 0; - if (e.wheelDelta) { - delta = -e.wheelDelta / 120; - } - if (e.detail) { - delta = e.detail / 3; - } + if (e.wheelDelta) { delta = -e.wheelDelta/120; } + if (e.detail) { delta = e.detail / 3; } var target = e.target || e.srcTarget || e.srcElement; if ($(target).closest('.' + o.wrapperClass).is(me.parent())) { @@ -343,12 +333,8 @@ } // stop window scroll - if (e.preventDefault && !releaseScroll) { - e.preventDefault(); - } - if (!releaseScroll) { - e.returnValue = false; - } + if (e.preventDefault && !releaseScroll) { e.preventDefault(); } + if (!releaseScroll) { e.returnValue = false; } } function scrollContent(y, isWheel, isJump) @@ -372,7 +358,7 @@ delta = (y > 0) ? Math.ceil(delta) : Math.floor(delta); // scroll the scrollbar - bar.css({top: delta + 'px'}); + bar.css({ top: delta + 'px' }); } // calculate actual scroll amount @@ -384,7 +370,7 @@ delta = y; var offsetTop = delta / me[0].scrollHeight * me.outerHeight(); offsetTop = Math.min(Math.max(offsetTop, 0), maxTop); - bar.css({top: offsetTop + 'px'}); + bar.css({ top: offsetTop + 'px' }); } // scroll content @@ -400,12 +386,12 @@ hideBar(); } - function attachWheel() + function attachWheel(target) { if (window.addEventListener) { - this.addEventListener('DOMMouseScroll', _onWheel, false); - this.addEventListener('mousewheel', _onWheel, false); + target.addEventListener('DOMMouseScroll', _onWheel, false ); + target.addEventListener('mousewheel', _onWheel, false ); } else { @@ -417,11 +403,11 @@ { // calculate scrollbar height and make sure it is not too small barHeight = Math.max((me.outerHeight() / me[0].scrollHeight) * me.outerHeight(), minBarHeight); - bar.css({height: barHeight + 'px'}); + bar.css({ height: barHeight + 'px' }); // hide scrollbar if content is not long enough var display = barHeight == me.outerHeight() ? 'none' : 'block'; - bar.css({display: display}); + bar.css({ display: display }); } function showBar() @@ -439,8 +425,8 @@ // publish approporiate event if (lastScroll != percentScroll) { - var msg = (~~percentScroll == 0) ? 'top' : 'bottom'; - me.trigger('slimscroll', msg); + var msg = (~~percentScroll == 0) ? 'top' : 'bottom'; + me.trigger('slimscroll', msg); } } else @@ -450,15 +436,13 @@ lastScroll = percentScroll; // show only when required - if (barHeight >= me.outerHeight()) { + if(barHeight >= me.outerHeight()) { //allow window scroll releaseScroll = true; return; } - bar.stop(true, true).fadeIn('fast'); - if (o.railVisible) { - rail.stop(true, true).fadeIn('fast'); - } + bar.stop(true,true).fadeIn('fast'); + if (o.railVisible) { rail.stop(true,true).fadeIn('fast'); } } function hideBar() @@ -466,7 +450,7 @@ // only hide when options allow it if (!o.alwaysVisible) { - queueHide = setTimeout(function () { + queueHide = setTimeout(function(){ if (!(o.disableFadeOut && isOverPanel) && !isOverBar && !isDragg) { bar.fadeOut('slow'); diff --git a/plugins/slimScroll/jquery.slimscroll.min.js b/plugins/slimScroll/jquery.slimscroll.min.js new file mode 100755 index 000000000..7531ab35f --- /dev/null +++ b/plugins/slimScroll/jquery.slimscroll.min.js @@ -0,0 +1,16 @@ +/*! Copyright (c) 2011 Piotr Rochala (http://rocha.la) + * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) + * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. + * + * Version: 1.3.8 + * + */ +(function(e){e.fn.extend({slimScroll:function(f){var a=e.extend({width:"auto",height:"250px",size:"7px",color:"#000",position:"right",distance:"1px",start:"top",opacity:.4,alwaysVisible:!1,disableFadeOut:!1,railVisible:!1,railColor:"#333",railOpacity:.2,railDraggable:!0,railClass:"slimScrollRail",barClass:"slimScrollBar",wrapperClass:"slimScrollDiv",allowPageScroll:!1,wheelStep:20,touchScrollStep:200,borderRadius:"7px",railBorderRadius:"7px"},f);this.each(function(){function v(d){if(r){d=d||window.event; +var c=0;d.wheelDelta&&(c=-d.wheelDelta/120);d.detail&&(c=d.detail/3);e(d.target||d.srcTarget||d.srcElement).closest("."+a.wrapperClass).is(b.parent())&&n(c,!0);d.preventDefault&&!k&&d.preventDefault();k||(d.returnValue=!1)}}function n(d,g,e){k=!1;var f=b.outerHeight()-c.outerHeight();g&&(g=parseInt(c.css("top"))+d*parseInt(a.wheelStep)/100*c.outerHeight(),g=Math.min(Math.max(g,0),f),g=0=b.outerHeight()?k=!0:(c.stop(!0, +!0).fadeIn("fast"),a.railVisible&&m.stop(!0,!0).fadeIn("fast"))}function p(){a.alwaysVisible||(B=setTimeout(function(){a.disableFadeOut&&r||y||z||(c.fadeOut("slow"),m.fadeOut("slow"))},1E3))}var r,y,z,B,A,u,l,C,k=!1,b=e(this);if(b.parent().hasClass(a.wrapperClass)){var q=b.scrollTop(),c=b.siblings("."+a.barClass),m=b.siblings("."+a.railClass);x();if(e.isPlainObject(f)){if("height"in f&&"auto"==f.height){b.parent().css("height","auto");b.css("height","auto");var h=b.parent().parent().height();b.parent().css("height", +h);b.css("height",h)}else"height"in f&&(h=f.height,b.parent().css("height",h),b.css("height",h));if("scrollTo"in f)q=parseInt(a.scrollTo);else if("scrollBy"in f)q+=parseInt(a.scrollBy);else if("destroy"in f){c.remove();m.remove();b.unwrap();return}n(q,!1,!0)}}else if(!(e.isPlainObject(f)&&"destroy"in f)){a.height="auto"==a.height?b.parent().height():a.height;q=e("
").addClass(a.wrapperClass).css({position:"relative",overflow:"hidden",width:a.width,height:a.height});b.css({overflow:"hidden", +width:a.width,height:a.height});var m=e("
").addClass(a.railClass).css({width:a.size,height:"100%",position:"absolute",top:0,display:a.alwaysVisible&&a.railVisible?"block":"none","border-radius":a.railBorderRadius,background:a.railColor,opacity:a.railOpacity,zIndex:90}),c=e("
").addClass(a.barClass).css({background:a.color,width:a.size,position:"absolute",top:0,opacity:a.opacity,display:a.alwaysVisible?"block":"none","border-radius":a.borderRadius,BorderRadius:a.borderRadius,MozBorderRadius:a.borderRadius, +WebkitBorderRadius:a.borderRadius,zIndex:99}),h="right"==a.position?{right:a.distance}:{left:a.distance};m.css(h);c.css(h);b.wrap(q);b.parent().append(c);b.parent().append(m);a.railDraggable&&c.bind("mousedown",function(a){var b=e(document);z=!0;t=parseFloat(c.css("top"));pageY=a.pageY;b.bind("mousemove.slimscroll",function(a){currTop=t+a.pageY-pageY;c.css("top",currTop);n(0,c.position().top,!1)});b.bind("mouseup.slimscroll",function(a){z=!1;p();b.unbind(".slimscroll")});return!1}).bind("selectstart.slimscroll", +function(a){a.stopPropagation();a.preventDefault();return!1});m.hover(function(){w()},function(){p()});c.hover(function(){y=!0},function(){y=!1});b.hover(function(){r=!0;w();p()},function(){r=!1;p()});b.bind("touchstart",function(a,b){a.originalEvent.touches.length&&(A=a.originalEvent.touches[0].pageY)});b.bind("touchmove",function(b){k||b.originalEvent.preventDefault();b.originalEvent.touches.length&&(n((A-b.originalEvent.touches[0].pageY)/a.touchScrollStep,!0),A=b.originalEvent.touches[0].pageY)}); +x();"bottom"===a.start?(c.css({top:b.outerHeight()-c.outerHeight()}),n(0,!0)):"top"!==a.start&&(n(e(a.start).position().top,null,!0),a.alwaysVisible||c.hide());window.addEventListener?(this.addEventListener("DOMMouseScroll",v,!1),this.addEventListener("mousewheel",v,!1)):document.attachEvent("onmousewheel",v)}});return this}});e.fn.extend({slimscroll:e.fn.slimScroll})})(jQuery); \ No newline at end of file diff --git a/plugins/slimScroll/jquery.slimscroll.min.js_old b/plugins/slimScroll/jquery.slimscroll.min.js_old deleted file mode 100644 index 298aa1cd2..000000000 --- a/plugins/slimScroll/jquery.slimscroll.min.js_old +++ /dev/null @@ -1 +0,0 @@ -(function($){$.fn.extend({slimScroll:function(options){var defaults={width:"auto",height:"250px",size:"7px",color:"#000",position:"right",distance:"1px",start:"top",opacity:.4,alwaysVisible:false,disableFadeOut:false,railVisible:false,railColor:"#333",railOpacity:.2,railDraggable:true,railClass:"slimScrollRail",barClass:"slimScrollBar",wrapperClass:"slimScrollDiv",allowPageScroll:false,wheelStep:20,touchScrollStep:200,borderRadius:"7px",railBorderRadius:"7px"};var o=$.extend(defaults,options);this.each(function(){var isOverPanel,isOverBar,isDragg,queueHide,touchDif,barHeight,percentScroll,lastScroll,divS="
",minBarHeight=30,releaseScroll=false;var me=$(this);if(me.parent().hasClass(o.wrapperClass)){var offset=me.scrollTop();bar=me.parent().find("."+o.barClass);rail=me.parent().find("."+o.railClass);getBarHeight();if($.isPlainObject(options)){if("height"in options&&options.height=="auto"){me.parent().css("height","auto");me.css("height","auto");var height=me.parent().parent().height();me.parent().css("height",height);me.css("height",height)}if("scrollTo"in options){offset=parseInt(o.scrollTo)}else if("scrollBy"in options){offset+=parseInt(o.scrollBy)}else if("destroy"in options){bar.remove();rail.remove();me.unwrap();return}scrollContent(offset,false,true)}return}else if($.isPlainObject(options)){if("destroy"in options){return}}o.height=o.height=="auto"?me.parent().height():o.height;var wrapper=$(divS).addClass(o.wrapperClass).css({position:"relative",overflow:"hidden",width:o.width,height:o.height});me.css({overflow:"hidden",width:o.width,height:o.height,"-ms-touch-action":"none"});var rail=$(divS).addClass(o.railClass).css({width:o.size,height:"100%",position:"absolute",top:0,display:o.alwaysVisible&&o.railVisible?"block":"none","border-radius":o.railBorderRadius,background:o.railColor,opacity:o.railOpacity,zIndex:90});var bar=$(divS).addClass(o.barClass).css({background:o.color,width:o.size,position:"absolute",top:0,opacity:o.opacity,display:o.alwaysVisible?"block":"none","border-radius":o.borderRadius,BorderRadius:o.borderRadius,MozBorderRadius:o.borderRadius,WebkitBorderRadius:o.borderRadius,zIndex:99});var posCss=o.position=="right"?{right:o.distance}:{left:o.distance};rail.css(posCss);bar.css(posCss);me.wrap(wrapper);me.parent().append(bar);me.parent().append(rail);if(o.railDraggable){bar.bind("mousedown",function(e){var $doc=$(document);isDragg=true;t=parseFloat(bar.css("top"));pageY=e.pageY;$doc.bind("mousemove.slimscroll",function(e){currTop=t+e.pageY-pageY;bar.css("top",currTop);scrollContent(0,bar.position().top,false)});$doc.bind("mouseup.slimscroll",function(e){isDragg=false;hideBar();$doc.unbind(".slimscroll")});return false}).bind("selectstart.slimscroll",function(e){e.stopPropagation();e.preventDefault();return false})}rail.hover(function(){showBar()},function(){hideBar()});bar.hover(function(){isOverBar=true},function(){isOverBar=false});me.hover(function(){isOverPanel=true;showBar();hideBar()},function(){isOverPanel=false;hideBar()});if(window.navigator.msPointerEnabled){me.bind("MSPointerDown",function(e,b){if(e.originalEvent.targetTouches.length){touchDif=e.originalEvent.targetTouches[0].pageY}});me.bind("MSPointerMove",function(e){e.originalEvent.preventDefault();if(e.originalEvent.targetTouches.length){var diff=(touchDif-e.originalEvent.targetTouches[0].pageY)/o.touchScrollStep;scrollContent(diff,true);touchDif=e.originalEvent.targetTouches[0].pageY}})}else{me.bind("touchstart",function(e,b){if(e.originalEvent.touches.length){touchDif=e.originalEvent.touches[0].pageY}});me.bind("touchmove",function(e){if(!releaseScroll){e.originalEvent.preventDefault()}if(e.originalEvent.touches.length){var diff=(touchDif-e.originalEvent.touches[0].pageY)/o.touchScrollStep;scrollContent(diff,true);touchDif=e.originalEvent.touches[0].pageY}})}getBarHeight();if(o.start==="bottom"){bar.css({top:me.outerHeight()-bar.outerHeight()});scrollContent(0,true)}else if(o.start!=="top"){scrollContent($(o.start).position().top,null,true);if(!o.alwaysVisible){bar.hide()}}attachWheel();function _onWheel(e){if(!isOverPanel){return}var e=e||window.event;var delta=0;if(e.wheelDelta){delta=-e.wheelDelta/120}if(e.detail){delta=e.detail/3}var target=e.target||e.srcTarget||e.srcElement;if($(target).closest("."+o.wrapperClass).is(me.parent())){scrollContent(delta,true)}if(e.preventDefault&&!releaseScroll){e.preventDefault()}if(!releaseScroll){e.returnValue=false}}function scrollContent(y,isWheel,isJump){releaseScroll=false;var delta=y;var maxTop=me.outerHeight()-bar.outerHeight();if(isWheel){delta=parseInt(bar.css("top"))+y*parseInt(o.wheelStep)/100*bar.outerHeight();delta=Math.min(Math.max(delta,0),maxTop);delta=y>0?Math.ceil(delta):Math.floor(delta);bar.css({top:delta+"px"})}percentScroll=parseInt(bar.css("top"))/(me.outerHeight()-bar.outerHeight());delta=percentScroll*(me[0].scrollHeight-me.outerHeight());if(isJump){delta=y;var offsetTop=delta/me[0].scrollHeight*me.outerHeight();offsetTop=Math.min(Math.max(offsetTop,0),maxTop);bar.css({top:offsetTop+"px"})}me.scrollTop(delta);me.trigger("slimscrolling",~~delta);showBar();hideBar()}function attachWheel(){if(window.addEventListener){this.addEventListener("DOMMouseScroll",_onWheel,false);this.addEventListener("mousewheel",_onWheel,false)}else{document.attachEvent("onmousewheel",_onWheel)}}function getBarHeight(){barHeight=Math.max(me.outerHeight()/me[0].scrollHeight*me.outerHeight(),minBarHeight);bar.css({height:barHeight+"px"});var display=barHeight==me.outerHeight()?"none":"block";bar.css({display:display})}function showBar(){getBarHeight();clearTimeout(queueHide);if(percentScroll==~~percentScroll){releaseScroll=o.allowPageScroll;if(lastScroll!=percentScroll){var msg=~~percentScroll==0?"top":"bottom";me.trigger("slimscroll",msg)}}else{releaseScroll=false}lastScroll=percentScroll;if(barHeight>=me.outerHeight()){releaseScroll=true;return}bar.stop(true,true).fadeIn("fast");if(o.railVisible){rail.stop(true,true).fadeIn("fast")}}function hideBar(){if(!o.alwaysVisible){queueHide=setTimeout(function(){if(!(o.disableFadeOut&&isOverPanel)&&!isOverBar&&!isDragg){bar.fadeOut("slow");rail.fadeOut("slow")}},1e3)}}});return this}});$.fn.extend({slimscroll:$.fn.slimScroll})})(jQuery); \ No newline at end of file