@ -1,16 +1,9 @@
/ * p e r f e c t - s c r o l l b a r v 0 . 6 . 1 0
*
* Copyright ( c ) 2015 Hyunje Alex Jun and other contributors
* Licensed under the MIT License
*
* Source : https : //github.com/noraesae/perfect-scrollbar
* /
/* perfect-scrollbar v0.6.15 */
( function e ( t , n , r ) { function s ( o , u ) { if ( ! n [ o ] ) { if ( ! t [ o ] ) { var a = typeof require == "function" && require ; if ( ! u && a ) return a ( o , ! 0 ) ; if ( i ) return i ( o , ! 0 ) ; var f = new Error ( "Cannot find module '" + o + "'" ) ; throw f . code = "MODULE_NOT_FOUND" , f } var l = n [ o ] = { exports : { } } ; t [ o ] [ 0 ] . call ( l . exports , function ( e ) { var n = t [ o ] [ 1 ] [ e ] ; return s ( n ? n : e ) } , l , l . exports , e , t , n , r ) } return n [ o ] . exports } var i = typeof require == "function" && require ; for ( var o = 0 ; o < r . length ; o ++ ) s ( r [ o ] ) ; return s } ) ( { 1 : [ function ( require , module , exports ) {
'use strict' ;
var ps = require ( '../main' )
, psInstances = require ( '../plugin/instances' ) ;
var ps = require ( '../main' ) ;
var psInstances = require ( '../plugin/instances' ) ;
function mountJQuery ( jQuery ) {
jQuery . fn . perfectScrollbar = function ( settingOrCommand ) {
@ -33,8 +26,6 @@ function mountJQuery(jQuery) {
ps . destroy ( this ) ;
}
}
return jQuery ( this ) ;
} ) ;
} ;
}
@ -272,20 +263,22 @@ module.exports = (function () {
} , { } ] , 6 : [ function ( require , module , exports ) {
'use strict' ;
var cls = require ( './class' )
, d = require ( './dom' ) ;
var cls = require ( './class' ) ;
var dom = require ( './dom' ) ;
exports . toInt = function ( x ) {
var toInt = exports . toInt = function ( x ) {
return parseInt ( x , 10 ) || 0 ;
} ;
exports . clone = function ( obj ) {
if ( obj === null ) {
var clone = exports . clone = function ( obj ) {
if ( ! obj ) {
return null ;
} else if ( obj . constructor === Array ) {
return obj . map ( clone ) ;
} else if ( typeof obj === 'object' ) {
var result = { } ;
for ( var key in obj ) {
result [ key ] = this . clone ( obj [ key ] ) ;
result [ key ] = clone ( obj [ key ] ) ;
}
return result ;
} else {
@ -294,18 +287,18 @@ exports.clone = function (obj) {
} ;
exports . extend = function ( original , source ) {
var result = this . clone ( original ) ;
var result = clone ( original ) ;
for ( var key in source ) {
result [ key ] = this . clone ( source [ key ] ) ;
result [ key ] = clone ( source [ key ] ) ;
}
return result ;
} ;
exports . isEditable = function ( el ) {
return d . matches ( el , "input,[contenteditable]" ) ||
d . matches ( el , "select,[contenteditable]" ) ||
d . matches ( el , "textarea,[contenteditable]" ) ||
d . matches ( el , "button,[contenteditable]" ) ;
return dom . matches ( el , "input,[contenteditable]" ) ||
dom . matches ( el , "select,[contenteditable]" ) ||
dom . matches ( el , "textarea,[contenteditable]" ) ||
dom . matches ( el , "button,[contenteditable]" ) ;
} ;
exports . removePsClasses = function ( element ) {
@ -319,11 +312,11 @@ exports.removePsClasses = function (element) {
} ;
exports . outerWidth = function ( element ) {
return this . toInt ( d . css ( element , 'width' ) ) +
this . toInt ( d . css ( element , 'paddingLeft' ) ) +
this . toInt ( d . css ( element , 'paddingRight' ) ) +
this . toInt ( d . css ( element , 'borderLeftWidth' ) ) +
this . toInt ( d . css ( element , 'borderRightWidth' ) ) ;
return toInt ( dom . css ( element , 'width' ) ) +
toInt ( dom . css ( element , 'paddingLeft' ) ) +
toInt ( dom . css ( element , 'paddingRight' ) ) +
toInt ( dom . css ( element , 'borderLeftWidth' ) ) +
toInt ( dom . css ( element , 'borderRightWidth' ) ) ;
} ;
exports . startScrolling = function ( element , axis ) {
@ -355,9 +348,9 @@ exports.env = {
} , { "./class" : 2 , "./dom" : 3 } ] , 7 : [ function ( require , module , exports ) {
'use strict' ;
var destroy = require ( './plugin/destroy' )
, initialize = require ( './plugin/initialize' )
, update = require ( './plugin/update' ) ;
var destroy = require ( './plugin/destroy' ) ;
var initialize = require ( './plugin/initialize' ) ;
var update = require ( './plugin/update' ) ;
module . exports = {
initialize : initialize ,
@ -369,17 +362,15 @@ module.exports = {
'use strict' ;
module . exports = {
handlers : [ 'click-rail' , 'drag-scrollbar' , 'keyboard' , 'wheel' , 'touch' ] ,
maxScrollbarLength : null ,
minScrollbarLength : null ,
scrollXMarginOffset : 0 ,
scrollYMarginOffset : 0 ,
stopPropagationOnClick : true ,
suppressScrollX : false ,
suppressScrollY : false ,
swipePropagation : true ,
useBothWheelAxes : false ,
useKeyboard : true ,
useSelectionScroll : false ,
wheelPropagation : false ,
wheelSpeed : 1 ,
theme : 'default'
@ -388,9 +379,9 @@ module.exports = {
} , { } ] , 9 : [ function ( require , module , exports ) {
'use strict' ;
var d = require ( '../lib/dom' )
, h = require ( '../lib/helper' )
, instances = require ( './instances' ) ;
var _ = require ( '../lib/helper' ) ;
var dom = require ( '../lib/dom' ) ;
var instances = require ( './instances' ) ;
module . exports = function ( element ) {
var i = instances . get ( element ) ;
@ -400,11 +391,11 @@ module.exports = function (element) {
}
i . event . unbindAll ( ) ;
d . remove ( i . scrollbarX ) ;
d . remove ( i . scrollbarY ) ;
d . remove ( i . scrollbarXRail ) ;
d . remove ( i . scrollbarYRail ) ;
h . removePsClasses ( element ) ;
dom . remove ( i . scrollbarX ) ;
dom . remove ( i . scrollbarY ) ;
dom . remove ( i . scrollbarXRail ) ;
dom . remove ( i . scrollbarYRail ) ;
_ . removePsClasses ( element ) ;
instances . remove ( element ) ;
} ;
@ -412,54 +403,33 @@ module.exports = function (element) {
} , { "../lib/dom" : 3 , "../lib/helper" : 6 , "./instances" : 18 } ] , 10 : [ function ( require , module , exports ) {
'use strict' ;
var h = require ( '../../lib/helper' )
, instances = require ( '../instances' )
, updateGeometry = require ( '../update-geometry' )
, updateScroll = require ( '../update-scroll' ) ;
var instances = require ( '../instances' ) ;
var updateGeometry = require ( '../update-geometry' ) ;
var updateScroll = require ( '../update-scroll' ) ;
function bindClickRailHandler ( element , i ) {
function pageOffset ( el ) {
return el . getBoundingClientRect ( ) ;
}
var stopPropagation = window . Event . prototype . stopPropagation . bind ;
var stopPropagation = function ( e ) { e . stopPropagation ( ) ; } ;
if ( i . settings . stopPropagationOnClick ) {
i . event . bind ( i . scrollbarY , 'click' , stopPropagation ) ;
}
i . event . bind ( i . scrollbarY , 'click' , stopPropagation ) ;
i . event . bind ( i . scrollbarYRail , 'click' , function ( e ) {
var halfOfScrollbarLength = h . toInt ( i . scrollbarYHeight / 2 ) ;
var positionTop = i . railYRatio * ( e . pageY - window . pageYOffset - pageOffset ( i . scrollbarYRail ) . top - halfOfScrollbarLength ) ;
var maxPositionTop = i . railYRatio * ( i . railYHeight - i . scrollbarYHeight ) ;
var positionRatio = positionTop / maxPositionTop ;
if ( positionRatio < 0 ) {
positionRatio = 0 ;
} else if ( positionRatio > 1 ) {
positionRatio = 1 ;
}
var positionTop = e . pageY - window . pageYOffset - pageOffset ( i . scrollbarYRail ) . top ;
var direction = positionTop > i . scrollbarYTop ? 1 : - 1 ;
updateScroll ( element , 'top' , ( i . contentHeight - i . containerHeight ) * positionRatio ) ;
updateScroll ( element , 'top' , element . scrollTop + direction * i . containerHeight ) ;
updateGeometry ( element ) ;
e . stopPropagation ( ) ;
} ) ;
if ( i . settings . stopPropagationOnClick ) {
i . event . bind ( i . scrollbarX , 'click' , stopPropagation ) ;
}
i . event . bind ( i . scrollbarX , 'click' , stopPropagation ) ;
i . event . bind ( i . scrollbarXRail , 'click' , function ( e ) {
var halfOfScrollbarLength = h . toInt ( i . scrollbarXWidth / 2 ) ;
var positionLeft = i . railXRatio * ( e . pageX - window . pageXOffset - pageOffset ( i . scrollbarXRail ) . left - halfOfScrollbarLength ) ;
var maxPositionLeft = i . railXRatio * ( i . railXWidth - i . scrollbarXWidth ) ;
var positionRatio = positionLeft / maxPositionLeft ;
if ( positionRatio < 0 ) {
positionRatio = 0 ;
} else if ( positionRatio > 1 ) {
positionRatio = 1 ;
}
var positionLeft = e . pageX - window . pageXOffset - pageOffset ( i . scrollbarXRail ) . left ;
var direction = positionLeft > i . scrollbarXLeft ? 1 : - 1 ;
updateScroll ( element , 'left' , ( ( i . contentWidth - i . containerWidth ) * positionRatio ) - i . negativeScrollAdjustment ) ;
updateScroll ( element , 'left' , element . scrollLeft + direction * i . containerWidth ) ;
updateGeometry ( element ) ;
e . stopPropagation ( ) ;
@ -471,14 +441,14 @@ module.exports = function (element) {
bindClickRailHandler ( element , i ) ;
} ;
} , { "../../lib/helper" : 6 , "../ instances" : 18 , "../update-geometry" : 19 , "../update-scroll" : 20 } ] , 11 : [ function ( require , module , exports ) {
} , { "../instances" : 18 , "../update-geometry" : 19 , "../update-scroll" : 20 } ] , 11 : [ function ( require , module , exports ) {
'use strict' ;
var d = require ( '../../lib/dom' )
, h = require ( '../../lib/helper' )
, instances = require ( '../instances' )
, updateGeometry = require ( '../update-geometry' )
, updateScroll = require ( '../update-scroll' ) ;
var _ = require ( '../../lib/helper' ) ;
var dom = require ( '../../lib/dom' ) ;
var instances = require ( '../instances' ) ;
var updateGeometry = require ( '../update-geometry' ) ;
var updateScroll = require ( '../update-scroll' ) ;
function bindMouseScrollXHandler ( element , i ) {
var currentLeft = null ;
@ -496,7 +466,7 @@ function bindMouseScrollXHandler(element, i) {
i . scrollbarXLeft = newLeft ;
}
var scrollLeft = h . toInt ( i . scrollbarXLeft * ( i . contentWidth - i . containerWidth ) / ( i . containerWidth - ( i . railXRatio * i . scrollbarXWidth ) ) ) - i . negativeScrollAdjustment ;
var scrollLeft = _ . toInt ( i . scrollbarXLeft * ( i . contentWidth - i . containerWidth ) / ( i . containerWidth - ( i . railXRatio * i . scrollbarXWidth ) ) ) - i . negativeScrollAdjustment ;
updateScroll ( element , 'left' , scrollLeft ) ;
}
@ -508,14 +478,14 @@ function bindMouseScrollXHandler(element, i) {
} ;
var mouseUpHandler = function ( ) {
h . stopScrolling ( element , 'x' ) ;
_ . stopScrolling ( element , 'x' ) ;
i . event . unbind ( i . ownerDocument , 'mousemove' , mouseMoveHandler ) ;
} ;
i . event . bind ( i . scrollbarX , 'mousedown' , function ( e ) {
currentPageX = e . pageX ;
currentLeft = h . toInt ( d . css ( i . scrollbarX , 'left' ) ) * i . railXRatio ;
h . startScrolling ( element , 'x' ) ;
currentLeft = _ . toInt ( dom . css ( i . scrollbarX , 'left' ) ) * i . railXRatio ;
_ . startScrolling ( element , 'x' ) ;
i . event . bind ( i . ownerDocument , 'mousemove' , mouseMoveHandler ) ;
i . event . once ( i . ownerDocument , 'mouseup' , mouseUpHandler ) ;
@ -541,7 +511,7 @@ function bindMouseScrollYHandler(element, i) {
i . scrollbarYTop = newTop ;
}
var scrollTop = h . toInt ( i . scrollbarYTop * ( i . contentHeight - i . containerHeight ) / ( i . containerHeight - ( i . railYRatio * i . scrollbarYHeight ) ) ) ;
var scrollTop = _ . toInt ( i . scrollbarYTop * ( i . contentHeight - i . containerHeight ) / ( i . containerHeight - ( i . railYRatio * i . scrollbarYHeight ) ) ) ;
updateScroll ( element , 'top' , scrollTop ) ;
}
@ -553,14 +523,14 @@ function bindMouseScrollYHandler(element, i) {
} ;
var mouseUpHandler = function ( ) {
h . stopScrolling ( element , 'y' ) ;
_ . stopScrolling ( element , 'y' ) ;
i . event . unbind ( i . ownerDocument , 'mousemove' , mouseMoveHandler ) ;
} ;
i . event . bind ( i . scrollbarY , 'mousedown' , function ( e ) {
currentPageY = e . pageY ;
currentTop = h . toInt ( d . css ( i . scrollbarY , 'top' ) ) * i . railYRatio ;
h . startScrolling ( element , 'y' ) ;
currentTop = _ . toInt ( dom . css ( i . scrollbarY , 'top' ) ) * i . railYRatio ;
_ . startScrolling ( element , 'y' ) ;
i . event . bind ( i . ownerDocument , 'mousemove' , mouseMoveHandler ) ;
i . event . once ( i . ownerDocument , 'mouseup' , mouseUpHandler ) ;
@ -579,11 +549,11 @@ module.exports = function (element) {
} , { "../../lib/dom" : 3 , "../../lib/helper" : 6 , "../instances" : 18 , "../update-geometry" : 19 , "../update-scroll" : 20 } ] , 12 : [ function ( require , module , exports ) {
'use strict' ;
var h = require ( '../../lib/helper' )
, d = require ( '../../lib/dom' )
, instances = require ( '../instances' )
, updateGeometry = require ( '../update-geometry' )
, updateScroll = require ( '../update-scroll' ) ;
var _ = require ( '../../lib/helper' ) ;
var dom = require ( '../../lib/dom' ) ;
var instances = require ( '../instances' ) ;
var updateGeometry = require ( '../update-geometry' ) ;
var updateScroll = require ( '../update-scroll' ) ;
function bindKeyboardHandler ( element , i ) {
var hovered = false ;
@ -619,12 +589,12 @@ function bindKeyboardHandler(element, i) {
}
i . event . bind ( i . ownerDocument , 'keydown' , function ( e ) {
if ( e . isDefaultPrevented && e . isDefaultPrevented ( ) ) {
if ( ( e . isDefaultPrevented && e . isDefaultPrevented ( ) ) || e . defaultPrevented ) {
return ;
}
var focused = d . matches ( i . scrollbarX , ':focus' ) ||
d . matches ( i . scrollbarY , ':focus' ) ;
var focused = dom . matches ( i . scrollbarX , ':focus' ) ||
dom . matches ( i . scrollbarY , ':focus' ) ;
if ( ! hovered && ! focused ) {
return ;
@ -632,11 +602,15 @@ function bindKeyboardHandler(element, i) {
var activeElement = document . activeElement ? document . activeElement : i . ownerDocument . activeElement ;
if ( activeElement ) {
// go deeper if element is a webcomponent
while ( activeElement . shadowRoot ) {
activeElement = activeElement . shadowRoot . activeElement ;
if ( activeElement . tagName === 'IFRAME' ) {
activeElement = activeElement . contentDocument . activeElement ;
} else {
// go deeper if element is a webcomponent
while ( activeElement . shadowRoot ) {
activeElement = activeElement . shadowRoot . activeElement ;
}
}
if ( h . isEditable ( activeElement ) ) {
if ( _ . isEditable ( activeElement ) ) {
return ;
}
}
@ -646,16 +620,40 @@ function bindKeyboardHandler(element, i) {
switch ( e . which ) {
case 37 : // left
deltaX = - 30 ;
if ( e . metaKey ) {
deltaX = - i . contentWidth ;
} else if ( e . altKey ) {
deltaX = - i . containerWidth ;
} else {
deltaX = - 30 ;
}
break ;
case 38 : // up
deltaY = 30 ;
if ( e . metaKey ) {
deltaY = i . contentHeight ;
} else if ( e . altKey ) {
deltaY = i . containerHeight ;
} else {
deltaY = 30 ;
}
break ;
case 39 : // right
deltaX = 30 ;
if ( e . metaKey ) {
deltaX = i . contentWidth ;
} else if ( e . altKey ) {
deltaX = i . containerWidth ;
} else {
deltaX = 30 ;
}
break ;
case 40 : // down
deltaY = - 30 ;
if ( e . metaKey ) {
deltaY = - i . contentHeight ;
} else if ( e . altKey ) {
deltaY = - i . containerHeight ;
} else {
deltaY = - 30 ;
}
break ;
case 33 : // page up
deltaY = 90 ;
@ -707,9 +705,9 @@ module.exports = function (element) {
} , { "../../lib/dom" : 3 , "../../lib/helper" : 6 , "../instances" : 18 , "../update-geometry" : 19 , "../update-scroll" : 20 } ] , 13 : [ function ( require , module , exports ) {
'use strict' ;
var instances = require ( '../instances' )
, updateGeometry = require ( '../update-geometry' )
, updateScroll = require ( '../update-scroll' ) ;
var instances = require ( '../instances' ) ;
var updateGeometry = require ( '../update-geometry' ) ;
var updateScroll = require ( '../update-scroll' ) ;
function bindMouseWheelHandler ( element , i ) {
var shouldPrevent = false ;
@ -759,23 +757,30 @@ function bindMouseWheelHandler(element, i) {
deltaY = e . wheelDelta ;
}
if ( e . shiftKey ) {
// reverse axis with shift key
return [ - deltaY , - deltaX ] ;
}
return [ deltaX , deltaY ] ;
}
function shouldBeConsumedByTextarea ( deltaX , deltaY ) {
var hoveredTextarea = element . querySelector ( 'textarea:hover' ) ;
if ( hoveredTextarea ) {
var maxScrollTop = hoveredTextarea . scrollHeight - hoveredTextarea . clientHeight ;
function shouldBeConsumedByChild ( deltaX , deltaY ) {
var child = element . querySelector ( 'textarea:hover, select[multiple]:hover, .ps-child:hover' ) ;
if ( child ) {
if ( ! window . getComputedStyle ( child ) . overflow . match ( /(scroll|auto)/ ) ) {
// if not scrollable
return false ;
}
var maxScrollTop = child . scrollHeight - child . clientHeight ;
if ( maxScrollTop > 0 ) {
if ( ! ( hoveredTextarea . scrollTop === 0 && deltaY > 0 ) &&
! ( hoveredTextarea . scrollTop === maxScrollTop && deltaY < 0 ) ) {
if ( ! ( child . scrollTop === 0 && deltaY > 0 ) && ! ( child . scrollTop === maxScrollTop && deltaY < 0 ) ) {
return true ;
}
}
var maxScrollLeft = hoveredTextarea . scrollLeft - hoveredTextarea . clientWidth ;
var maxScrollLeft = child . scrollLeft - child . clientWidth ;
if ( maxScrollLeft > 0 ) {
if ( ! ( hoveredTextarea . scrollLeft === 0 && deltaX < 0 ) &&
! ( hoveredTextarea . scrollLeft === maxScrollLeft && deltaX > 0 ) ) {
if ( ! ( child . scrollLeft === 0 && deltaX < 0 ) && ! ( child . scrollLeft === maxScrollLeft && deltaX > 0 ) ) {
return true ;
}
}
@ -789,7 +794,7 @@ function bindMouseWheelHandler(element, i) {
var deltaX = delta [ 0 ] ;
var deltaY = delta [ 1 ] ;
if ( shouldBeConsumedByTextarea ( deltaX , deltaY ) ) {
if ( shouldBeConsumedByChild ( deltaX , deltaY ) ) {
return ;
}
@ -843,8 +848,8 @@ module.exports = function (element) {
} , { "../instances" : 18 , "../update-geometry" : 19 , "../update-scroll" : 20 } ] , 14 : [ function ( require , module , exports ) {
'use strict' ;
var instances = require ( '../instances' )
, updateGeometry = require ( '../update-geometry' ) ;
var instances = require ( '../instances' ) ;
var updateGeometry = require ( '../update-geometry' ) ;
function bindNativeScrollHandler ( element , i ) {
i . event . bind ( element , 'scroll' , function ( ) {
@ -860,10 +865,10 @@ module.exports = function (element) {
} , { "../instances" : 18 , "../update-geometry" : 19 } ] , 15 : [ function ( require , module , exports ) {
'use strict' ;
var h = require ( '../../lib/helper' )
, instances = require ( '../instances' )
, updateGeometry = require ( '../update-geometry' )
, updateScroll = require ( '../update-scroll' ) ;
var _ = require ( '../../lib/helper' ) ;
var instances = require ( '../instances' ) ;
var updateGeometry = require ( '../update-geometry' ) ;
var updateScroll = require ( '../update-scroll' ) ;
function bindSelectionHandler ( element , i ) {
function getRangeNode ( ) {
@ -897,7 +902,7 @@ function bindSelectionHandler(element, i) {
clearInterval ( scrollingLoop ) ;
scrollingLoop = null ;
}
h . stopScrolling ( element ) ;
_ . stopScrolling ( element ) ;
}
var isSelected = false ;
@ -915,6 +920,12 @@ function bindSelectionHandler(element, i) {
stopScrolling ( ) ;
}
} ) ;
i . event . bind ( window , 'keyup' , function ( ) {
if ( isSelected ) {
isSelected = false ;
stopScrolling ( ) ;
}
} ) ;
i . event . bind ( window , 'mousemove' , function ( e ) {
if ( isSelected ) {
@ -928,10 +939,10 @@ function bindSelectionHandler(element, i) {
if ( mousePosition . x < containerGeometry . left + 3 ) {
scrollDiff . left = - 5 ;
h . startScrolling ( element , 'x' ) ;
_ . startScrolling ( element , 'x' ) ;
} else if ( mousePosition . x > containerGeometry . right - 3 ) {
scrollDiff . left = 5 ;
h . startScrolling ( element , 'x' ) ;
_ . startScrolling ( element , 'x' ) ;
} else {
scrollDiff . left = 0 ;
}
@ -942,14 +953,14 @@ function bindSelectionHandler(element, i) {
} else {
scrollDiff . top = - 20 ;
}
h . startScrolling ( element , 'y' ) ;
_ . startScrolling ( element , 'y' ) ;
} else if ( mousePosition . y > containerGeometry . bottom - 3 ) {
if ( mousePosition . y - containerGeometry . bottom + 3 < 5 ) {
scrollDiff . top = 5 ;
} else {
scrollDiff . top = 20 ;
}
h . startScrolling ( element , 'y' ) ;
_ . startScrolling ( element , 'y' ) ;
} else {
scrollDiff . top = 0 ;
}
@ -971,9 +982,10 @@ module.exports = function (element) {
} , { "../../lib/helper" : 6 , "../instances" : 18 , "../update-geometry" : 19 , "../update-scroll" : 20 } ] , 16 : [ function ( require , module , exports ) {
'use strict' ;
var instances = require ( '../instances' )
, updateGeometry = require ( '../update-geometry' )
, updateScroll = require ( '../update-scroll' ) ;
var _ = require ( '../../lib/helper' ) ;
var instances = require ( '../instances' ) ;
var updateGeometry = require ( '../update-geometry' ) ;
var updateScroll = require ( '../update-scroll' ) ;
function bindTouchHandler ( element , i , supportsTouch , supportsIePointer ) {
function shouldPreventDefault ( deltaX , deltaY ) {
@ -1058,6 +1070,9 @@ function bindTouchHandler(element, i, supportsTouch, supportsIePointer) {
}
}
function touchMove ( e ) {
if ( ! inLocalTouch && i . settings . swipePropagation ) {
touchStart ( e ) ;
}
if ( ! inGlobalTouch && inLocalTouch && shouldHandle ( e ) ) {
var touch = getTouch ( e ) ;
@ -1095,6 +1110,11 @@ function bindTouchHandler(element, i, supportsTouch, supportsIePointer) {
return ;
}
if ( ! speed . x && ! speed . y ) {
clearInterval ( easingLoop ) ;
return ;
}
if ( Math . abs ( speed . x ) < 0.01 && Math . abs ( speed . y ) < 0.01 ) {
clearInterval ( easingLoop ) ;
return ;
@ -1133,27 +1153,33 @@ function bindTouchHandler(element, i, supportsTouch, supportsIePointer) {
}
}
module . exports = function ( element , supportsTouch , supportsIePointer ) {
module . exports = function ( element ) {
if ( ! _ . env . supportsTouch && ! _ . env . supportsIePointer ) {
return ;
}
var i = instances . get ( element ) ;
bindTouchHandler ( element , i , supportsTouch , supportsIePointer ) ;
bindTouchHandler ( element , i , _ . env . supportsTouch , _ . env . supportsIePointer ) ;
} ;
} , { "../instances" : 18 , "../update-geometry" : 19 , "../update-scroll" : 20 } ] , 17 : [ function ( require , module , exports ) {
} , { "../../lib/helper" : 6 , "../ instances" : 18 , "../update-geometry" : 19 , "../update-scroll" : 20 } ] , 17 : [ function ( require , module , exports ) {
'use strict' ;
var cls = require ( '../lib/class' )
, h = require ( '../lib/helper' )
, instances = require ( './instances' )
, updateGeometry = require ( './update-geometry' ) ;
var _ = require ( '../lib/helper' ) ;
var cls = require ( '../lib/class' ) ;
var instances = require ( './instances' ) ;
var updateGeometry = require ( './update-geometry' ) ;
// Handlers
var clickRailHandler = require ( './handler/click-rail' )
, dragScrollbarHandler = require ( './handler/drag-scrollbar' )
, keyboardHandler = require ( './handler/keyboard' )
, mouseWheelHandler = require ( './handler/mouse-wheel' )
, nativeScrollHandler = require ( './handler/native-scroll' )
, selectionHandler = require ( './handler/selection' )
, touchHandler = require ( './handler/touch' ) ;
var handlers = {
'click-rail' : require ( './handler/click-rail' ) ,
'drag-scrollbar' : require ( './handler/drag-scrollbar' ) ,
'keyboard' : require ( './handler/keyboard' ) ,
'wheel' : require ( './handler/mouse-wheel' ) ,
'touch' : require ( './handler/touch' ) ,
'selection' : require ( './handler/selection' )
} ;
var nativeScrollHandler = require ( './handler/native-scroll' ) ;
module . exports = function ( element , userSettings ) {
userSettings = typeof userSettings === 'object' ? userSettings : { } ;
@ -1163,24 +1189,14 @@ module.exports = function (element, userSettings) {
// Create a plugin instance.
var i = instances . add ( element ) ;
i . settings = h . extend ( i . settings , userSettings ) ;
i . settings = _ . extend ( i . settings , userSettings ) ;
cls . add ( element , 'ps-theme-' + i . settings . theme ) ;
clickRailHandler ( element ) ;
dragScrollbarHandler ( element ) ;
mouseWheelHandler ( element ) ;
nativeScrollHandler ( element ) ;
if ( i . settings . useSelectionScroll ) {
selectionHandler ( element ) ;
}
i . settings . handlers . forEach ( function ( handlerName ) {
handlers [ handlerName ] ( element ) ;
} ) ;
if ( h . env . supportsTouch || h . env . supportsIePointer ) {
touchHandler ( element , h . env . supportsTouch , h . env . supportsIePointer ) ;
}
if ( i . settings . useKeyboard ) {
keyboardHandler ( element ) ;
}
nativeScrollHandler ( element ) ;
updateGeometry ( element ) ;
} ;
@ -1188,25 +1204,25 @@ module.exports = function (element, userSettings) {
} , { "../lib/class" : 2 , "../lib/helper" : 6 , "./handler/click-rail" : 10 , "./handler/drag-scrollbar" : 11 , "./handler/keyboard" : 12 , "./handler/mouse-wheel" : 13 , "./handler/native-scroll" : 14 , "./handler/selection" : 15 , "./handler/touch" : 16 , "./instances" : 18 , "./update-geometry" : 19 } ] , 18 : [ function ( require , module , exports ) {
'use strict' ;
var cls = require ( '../lib/class' )
, d = require ( '../lib/dom' )
, defaultSettings = require ( './default-setting' )
, EventManager = require ( '../lib/event-manager' )
, guid = require ( '../lib/guid' )
, h = require ( '../lib/helper ' ) ;
var _ = require ( '../lib/helper' ) ;
var cls = require ( '../lib/class' ) ;
var defaultSettings = require ( './default-setting' ) ;
var dom = require ( '../lib/dom' ) ;
var EventManager = require ( '../lib/event-manager' ) ;
var guid = require ( '../lib/guid ' ) ;
var instances = { } ;
function Instance ( element ) {
var i = this ;
i . settings = h . clone ( defaultSettings ) ;
i . settings = _ . clone ( defaultSettings ) ;
i . containerWidth = null ;
i . containerHeight = null ;
i . contentWidth = null ;
i . contentHeight = null ;
i . isRtl = d . css ( element , 'direction' ) === "rtl" ;
i . isRtl = dom . css ( element , 'direction' ) === "rtl" ;
i . isNegativeScroll = ( function ( ) {
var originalScrollLeft = element . scrollLeft ;
var result = null ;
@ -1227,67 +1243,55 @@ function Instance(element) {
cls . remove ( element , 'ps-focus' ) ;
}
i . scrollbarXRail = d . appendTo ( d . e ( 'div' , 'ps-scrollbar-x-rail' ) , element ) ;
i . scrollbarX = d . appendTo ( d . e ( 'div' , 'ps-scrollbar-x' ) , i . scrollbarXRail ) ;
i . scrollbarXRail = dom . appendTo ( dom . e ( 'div' , 'ps-scrollbar-x-rail' ) , element ) ;
i . scrollbarX = dom . appendTo ( dom . e ( 'div' , 'ps-scrollbar-x' ) , i . scrollbarXRail ) ;
i . scrollbarX . setAttribute ( 'tabindex' , 0 ) ;
i . event . bind ( i . scrollbarX , 'focus' , focus ) ;
i . event . bind ( i . scrollbarX , 'blur' , blur ) ;
i . scrollbarXActive = null ;
i . scrollbarXWidth = null ;
i . scrollbarXLeft = null ;
i . scrollbarXBottom = h . toInt ( d . css ( i . scrollbarXRail , 'bottom' ) ) ;
i . scrollbarXBottom = _ . toInt ( dom . css ( i . scrollbarXRail , 'bottom' ) ) ;
i . isScrollbarXUsingBottom = i . scrollbarXBottom === i . scrollbarXBottom ; // !isNaN
i . scrollbarXTop = i . isScrollbarXUsingBottom ? null : h . toInt ( d . css ( i . scrollbarXRail , 'top' ) ) ;
i . railBorderXWidth = h . toInt ( d . css ( i . scrollbarXRail , 'borderLeftWidth' ) ) + h . toInt ( d . css ( i . scrollbarXRail , 'borderRightWidth' ) ) ;
i . scrollbarXTop = i . isScrollbarXUsingBottom ? null : _ . toInt ( dom . css ( i . scrollbarXRail , 'top' ) ) ;
i . railBorderXWidth = _ . toInt ( dom . css ( i . scrollbarXRail , 'borderLeftWidth' ) ) + _ . toInt ( dom . css ( i . scrollbarXRail , 'borderRightWidth' ) ) ;
// Set rail to display:block to calculate margins
d . css ( i . scrollbarXRail , 'display' , 'block' ) ;
i . railXMarginWidth = h . toInt ( d . css ( i . scrollbarXRail , 'marginLeft' ) ) + h . toInt ( d . css ( i . scrollbarXRail , 'marginRight' ) ) ;
d . css ( i . scrollbarXRail , 'display' , '' ) ;
dom . css ( i . scrollbarXRail , 'display' , 'block' ) ;
i . railXMarginWidth = _ . toInt ( dom . css ( i . scrollbarXRail , 'marginLeft' ) ) + _ . toInt ( dom . css ( i . scrollbarXRail , 'marginRight' ) ) ;
dom . css ( i . scrollbarXRail , 'display' , '' ) ;
i . railXWidth = null ;
i . railXRatio = null ;
i . scrollbarYRail = d . appendTo ( d . e ( 'div' , 'ps-scrollbar-y-rail' ) , element ) ;
i . scrollbarY = d . appendTo ( d . e ( 'div' , 'ps-scrollbar-y' ) , i . scrollbarYRail ) ;
i . scrollbarYRail = dom . appendTo ( dom . e ( 'div' , 'ps-scrollbar-y-rail' ) , element ) ;
i . scrollbarY = dom . appendTo ( dom . e ( 'div' , 'ps-scrollbar-y' ) , i . scrollbarYRail ) ;
i . scrollbarY . setAttribute ( 'tabindex' , 0 ) ;
i . event . bind ( i . scrollbarY , 'focus' , focus ) ;
i . event . bind ( i . scrollbarY , 'blur' , blur ) ;
i . scrollbarYActive = null ;
i . scrollbarYHeight = null ;
i . scrollbarYTop = null ;
i . scrollbarYRight = h . toInt ( d . css ( i . scrollbarYRail , 'right' ) ) ;
i . scrollbarYRight = _ . toInt ( dom . css ( i . scrollbarYRail , 'right' ) ) ;
i . isScrollbarYUsingRight = i . scrollbarYRight === i . scrollbarYRight ; // !isNaN
i . scrollbarYLeft = i . isScrollbarYUsingRight ? null : h . toInt ( d . css ( i . scrollbarYRail , 'left' ) ) ;
i . scrollbarYOuterWidth = i . isRtl ? h . outerWidth ( i . scrollbarY ) : null ;
i . railBorderYWidth = h . toInt ( d . css ( i . scrollbarYRail , 'borderTopWidth' ) ) + h . toInt ( d . css ( i . scrollbarYRail , 'borderBottomWidth' ) ) ;
d . css ( i . scrollbarYRail , 'display' , 'block' ) ;
i . railYMarginHeight = h . toInt ( d . css ( i . scrollbarYRail , 'marginTop' ) ) + h . toInt ( d . css ( i . scrollbarYRail , 'marginBottom' ) ) ;
d . css ( i . scrollbarYRail , 'display' , '' ) ;
i . scrollbarYLeft = i . isScrollbarYUsingRight ? null : _ . toInt ( dom . css ( i . scrollbarYRail , 'left' ) ) ;
i . scrollbarYOuterWidth = i . isRtl ? _ . outerWidth ( i . scrollbarY ) : null ;
i . railBorderYWidth = _ . toInt ( dom . css ( i . scrollbarYRail , 'borderTopWidth' ) ) + _ . toInt ( dom . css ( i . scrollbarYRail , 'borderBottomWidth' ) ) ;
dom . css ( i . scrollbarYRail , 'display' , 'block' ) ;
i . railYMarginHeight = _ . toInt ( dom . css ( i . scrollbarYRail , 'marginTop' ) ) + _ . toInt ( dom . css ( i . scrollbarYRail , 'marginBottom' ) ) ;
dom . css ( i . scrollbarYRail , 'display' , '' ) ;
i . railYHeight = null ;
i . railYRatio = null ;
}
function getId ( element ) {
if ( typeof element . dataset === 'undefined' ) {
return element . getAttribute ( 'data-ps-id' ) ;
} else {
return element . dataset . psId ;
}
return element . getAttribute ( 'data-ps-id' ) ;
}
function setId ( element , id ) {
if ( typeof element . dataset === 'undefined' ) {
element . setAttribute ( 'data-ps-id' , id ) ;
} else {
element . dataset . psId = id ;
}
element . setAttribute ( 'data-ps-id' , id ) ;
}
function removeId ( element ) {
if ( typeof element . dataset === 'undefined' ) {
element . removeAttribute ( 'data-ps-id' ) ;
} else {
delete element . dataset . psId ;
}
element . removeAttribute ( 'data-ps-id' ) ;
}
exports . add = function ( element ) {
@ -1309,11 +1313,11 @@ exports.get = function (element) {
} , { "../lib/class" : 2 , "../lib/dom" : 3 , "../lib/event-manager" : 4 , "../lib/guid" : 5 , "../lib/helper" : 6 , "./default-setting" : 8 } ] , 19 : [ function ( require , module , exports ) {
'use strict' ;
var cls = require ( '../lib/class' )
, d = require ( '../lib/dom' )
, h = require ( '../lib/helper' )
, instances = require ( './instances' )
, updateScroll = require ( './update-scroll' ) ;
var _ = require ( '../lib/helper' ) ;
var cls = require ( '../lib/class' ) ;
var dom = require ( '../lib/dom' ) ;
var instances = require ( './instances' ) ;
var updateScroll = require ( './update-scroll' ) ;
function getThumbSize ( i , thumbSize ) {
if ( i . settings . minScrollbarLength ) {
@ -1337,7 +1341,7 @@ function updateCss(element, i) {
} else {
xRailOffset . top = i . scrollbarXTop + element . scrollTop ;
}
d . css ( i . scrollbarXRail , xRailOffset ) ;
dom . css ( i . scrollbarXRail , xRailOffset ) ;
var yRailOffset = { top : element . scrollTop , height : i . railYHeight } ;
if ( i . isScrollbarYUsingRight ) {
@ -1353,10 +1357,10 @@ function updateCss(element, i) {
yRailOffset . left = i . scrollbarYLeft + element . scrollLeft ;
}
}
d . css ( i . scrollbarYRail , yRailOffset ) ;
dom . css ( i . scrollbarYRail , yRailOffset ) ;
d . css ( i . scrollbarX , { left : i . scrollbarXLeft , width : i . scrollbarXWidth - i . railBorderXWidth } ) ;
d . css ( i . scrollbarY , { top : i . scrollbarYTop , height : i . scrollbarYHeight - i . railBorderYWidth } ) ;
dom . css ( i . scrollbarX , { left : i . scrollbarXLeft , width : i . scrollbarXWidth - i . railBorderXWidth } ) ;
dom . css ( i . scrollbarY , { top : i . scrollbarYTop , height : i . scrollbarYHeight - i . railBorderYWidth } ) ;
}
module . exports = function ( element ) {