summaryrefslogtreecommitdiff
blob: ea3bd24f06da2a336995368f9795c3fd585b7ec3 (plain)
1
!function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof exports?e(require("jquery")):e(jQuery)}(function(e){"use strict";var t,o={wheelSpeed:10,wheelPropagation:!1,minScrollbarLength:null,useBothWheelAxes:!1,useKeyboard:!0,suppressScrollX:!1,suppressScrollY:!1,scrollXMarginOffset:0,scrollYMarginOffset:0,includePadding:!1},r=(t=0,function(){var e=t;return t+=1,".perfect-scrollbar-"+e});e.fn.perfectScrollbar=function(t,n){return this.each(function(){var l=e.extend(!0,{},o),s=e(this);if("object"==typeof t?e.extend(!0,l,t):n=t,"update"===n)return s.data("perfect-scrollbar-update")&&s.data("perfect-scrollbar-update")(),s;if("destroy"===n)return s.data("perfect-scrollbar-destroy")&&s.data("perfect-scrollbar-destroy")(),s;if(s.data("perfect-scrollbar"))return s.data("perfect-scrollbar");s.addClass("ps-container");var a,c,i,p,u,d,f,h,b,v,g,m,w,T,L,y,I,S,C,P,X,Y,k=e("<div class='ps-scrollbar-x-rail'></div>").appendTo(s),x=e("<div class='ps-scrollbar-y-rail'></div>").appendTo(s),D=e("<div class='ps-scrollbar-x'></div>").appendTo(k),M=e("<div class='ps-scrollbar-y'></div>").appendTo(x),W=parseInt(k.css("bottom"),10),j=W==W,E=j?null:parseInt(k.css("top"),10),O=parseInt(x.css("right"),10),q=O==O,A=q?null:parseInt(x.css("left"),10),B="rtl"===s.css("direction"),F=r(),H=function(e){return l.minScrollbarLength&&(e=Math.max(e,l.minScrollbarLength)),e},K=function(){var e={width:i,display:a?"inherit":"none"};e.left=B?s.scrollLeft()+i-u:s.scrollLeft(),j?e.bottom=W-s.scrollTop():e.top=E+s.scrollTop(),k.css(e);var t={top:s.scrollTop(),height:p,display:c?"inherit":"none"};q?t.right=B?u-s.scrollLeft()-O-M.outerWidth():O-s.scrollLeft():t.left=B?s.scrollLeft()+2*i-u-A-M.outerWidth():A+s.scrollLeft(),x.css(t),D.css({left:h,width:f}),M.css({top:v,height:b})},z=function(){i=l.includePadding?s.innerWidth():s.width(),p=l.includePadding?s.innerHeight():s.height(),u=s.prop("scrollWidth"),d=s.prop("scrollHeight"),!l.suppressScrollX&&i+l.scrollXMarginOffset<u?(a=!0,f=H(parseInt(i*i/u,10)),h=parseInt(s.scrollLeft()*(i-f)/(u-i),10)):(a=!1,f=0,h=0,s.scrollLeft(0)),!l.suppressScrollY&&p+l.scrollYMarginOffset<d?(c=!0,b=H(parseInt(p*p/d,10)),v=parseInt(s.scrollTop()*(p-b)/(d-p),10)):(c=!1,b=0,v=0,s.scrollTop(0)),v>=p-b&&(v=p-b),h>=i-f&&(h=i-f),K()},Q=function(){var t,o;D.bind("mousedown"+F,function(e){o=e.pageX,t=D.position().left,k.addClass("in-scrolling"),e.stopPropagation(),e.preventDefault()}),e(document).bind("mousemove"+F,function(e){k.hasClass("in-scrolling")&&(!function(e,t){var o=e+t,r=i-f;h=o<0?0:o>r?r:o;var n=parseInt(h*(u-i)/(i-f),10);s.scrollLeft(n),q?x.css({right:O-n}):x.css({left:A+n})}(t,e.pageX-o),e.stopPropagation(),e.preventDefault())}),e(document).bind("mouseup"+F,function(e){k.hasClass("in-scrolling")&&k.removeClass("in-scrolling")}),t=o=null},G=function(){var t,o;M.bind("mousedown"+F,function(e){o=e.pageY,t=M.position().top,x.addClass("in-scrolling"),e.stopPropagation(),e.preventDefault()}),e(document).bind("mousemove"+F,function(e){x.hasClass("in-scrolling")&&(!function(e,t){var o=e+t,r=p-b;v=o<0?0:o>r?r:o;var n=parseInt(v*(d-p)/(p-b),10);s.scrollTop(n),j?k.css({bottom:W-n}):k.css({top:E+n})}(t,e.pageY-o),e.stopPropagation(),e.preventDefault())}),e(document).bind("mouseup"+F,function(e){x.hasClass("in-scrolling")&&x.removeClass("in-scrolling")}),t=o=null},J=function(e,t){var o=s.scrollTop();if(0===e){if(!c)return!1;if(0===o&&t>0||o>=d-p&&t<0)return!l.wheelPropagation}var r=s.scrollLeft();if(0===t){if(!a)return!1;if(0===r&&e<0||r>=u-i&&e>0)return!l.wheelPropagation}return!0},N=function(){s.unbind(F),e(window).unbind(F),e(document).unbind(F),s.data("perfect-scrollbar",null),s.data("perfect-scrollbar-update",null),s.data("perfect-scrollbar-destroy",null),D.remove(),M.remove(),k.remove(),x.remove(),k=x=D=M=a=c=i=p=u=d=f=h=W=j=E=b=v=O=q=A=B=F=null},R="ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch;return(S=navigator.userAgent.toLowerCase().match(/(msie) ([\w.]+)/))&&"msie"===S[1]&&(P=parseInt(S[2],10),s.addClass("ie").addClass("ie"+P),6===P&&(X=function(){e(this).addClass("hover")},Y=function(){e(this).removeClass("hover")},s.bind("mouseenter"+F,X).bind("mouseleave"+F,Y),k.bind("mouseenter"+F,X).bind("mouseleave"+F,Y),x.bind("mouseenter"+F,X).bind("mouseleave"+F,Y),D.bind("mouseenter"+F,X).bind("mouseleave"+F,Y),M.bind("mouseenter"+F,X).bind("mouseleave"+F,Y),K=function(){var e={left:h+s.scrollLeft(),width:f};j?e.bottom=W:e.top=E,D.css(e);var t={top:v+s.scrollTop(),height:b};q?t.right=O:t.left=A,M.css(t),D.hide().show(),M.hide().show()})),z(),s.bind("scroll"+F,function(e){z()}),Q(),G(),g=function(e){e.stopPropagation()},M.bind("click"+F,g),x.bind("click"+F,function(e){var t=parseInt(b/2,10),o=(e.pageY-x.offset().top-t)/(p-b);o<0?o=0:o>1&&(o=1),s.scrollTop((d-p)*o)}),D.bind("click"+F,g),k.bind("click"+F,function(e){var t=parseInt(f/2,10),o=(e.pageX-k.offset().left-t)/(i-f);o<0?o=0:o>1&&(o=1),s.scrollLeft((u-i)*o)}),R&&(m=function(e,t){s.scrollTop(s.scrollTop()-t),s.scrollLeft(s.scrollLeft()-e),z()},w={},T=0,L={},y=null,I=!1,e(window).bind("touchstart"+F,function(e){I=!0}),e(window).bind("touchend"+F,function(e){I=!1}),s.bind("touchstart"+F,function(e){var t=e.originalEvent.targetTouches[0];w.pageX=t.pageX,w.pageY=t.pageY,T=(new Date).getTime(),null!==y&&clearInterval(y),e.stopPropagation()}),s.bind("touchmove"+F,function(e){if(!I&&1===e.originalEvent.targetTouches.length){var t=e.originalEvent.targetTouches[0],o={};o.pageX=t.pageX,o.pageY=t.pageY;var r=o.pageX-w.pageX,n=o.pageY-w.pageY;m(r,n),w=o;var l=(new Date).getTime(),s=l-T;s>0&&(L.x=r/s,L.y=n/s,T=l),e.preventDefault()}}),s.bind("touchend"+F,function(e){clearInterval(y),y=setInterval(function(){Math.abs(L.x)<.01&&Math.abs(L.y)<.01?clearInterval(y):(m(30*L.x,30*L.y),L.x*=.8,L.y*=.8)},10)})),s.mousewheel&&function(){l.wheelSpeed/=10;var e=!1;s.bind("mousewheel"+F,function(t,o,r,n){var i=t.deltaX*t.deltaFactor||r,p=t.deltaY*t.deltaFactor||n;e=!1,l.useBothWheelAxes?c&&!a?(p?s.scrollTop(s.scrollTop()-p*l.wheelSpeed):s.scrollTop(s.scrollTop()+i*l.wheelSpeed),e=!0):a&&!c&&(i?s.scrollLeft(s.scrollLeft()+i*l.wheelSpeed):s.scrollLeft(s.scrollLeft()-p*l.wheelSpeed),e=!0):(s.scrollTop(s.scrollTop()-p*l.wheelSpeed),s.scrollLeft(s.scrollLeft()+i*l.wheelSpeed)),z(),(e=e||J(i,p))&&(t.stopPropagation(),t.preventDefault())}),s.bind("MozMousePixelScroll"+F,function(t){e&&t.preventDefault()})}(),l.useKeyboard&&(C=!1,s.bind("mouseenter"+F,function(e){C=!0}),s.bind("mouseleave"+F,function(e){C=!1}),e(document).bind("keydown"+F,function(t){if(C&&!e(document.activeElement).is(":input,[contenteditable]")){var o=0,r=0;switch(t.which){case 37:o=-30;break;case 38:r=30;break;case 39:o=30;break;case 40:r=-30;break;case 33:r=90;break;case 32:case 34:r=-90;break;case 35:r=-p;break;case 36:r=p;break;default:return}s.scrollTop(s.scrollTop()-r),s.scrollLeft(s.scrollLeft()+o),J(o,r)&&t.preventDefault()}})),s.data("perfect-scrollbar",s),s.data("perfect-scrollbar-update",z),s.data("perfect-scrollbar-destroy",N),s})}});