vendor/assets/javascripts/perfect-scrollbar.js in perfect-scrollbar-rails-0.6.10 vs vendor/assets/javascripts/perfect-scrollbar.js in perfect-scrollbar-rails-0.6.11
- old
+ new
@@ -1,11 +1,11 @@
-/* perfect-scrollbar v0.6.10 */
+/* perfect-scrollbar v0.6.11 */
(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) {
return this.each(function () {
if (typeof settingOrCommand === 'object' ||
@@ -24,12 +24,10 @@
ps.update(this);
} else if (command === 'destroy') {
ps.destroy(this);
}
}
-
- return jQuery(this);
});
};
}
if (typeof define === 'function' && define.amd) {
@@ -263,44 +261,46 @@
})();
},{}],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) {
+var clone = exports.clone = function (obj) {
if (obj === null) {
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 {
return 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) {
var clsList = cls.list(element);
for (var i = 0; i < clsList.length; i++) {
@@ -310,15 +310,15 @@
}
}
};
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) {
cls.add(element, 'ps-in-scrolling');
if (typeof axis !== 'undefined') {
@@ -346,13 +346,13 @@
};
},{"./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,
update: update,
destroy: destroy
@@ -360,69 +360,68 @@
},{"./plugin/destroy":9,"./plugin/initialize":17,"./plugin/update":21}],8:[function(require,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'
};
},{}],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);
if (!i) {
return;
}
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);
};
},{"../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 _ = require('../../lib/helper');
+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.scrollbarYRail, 'click', function (e) {
- var halfOfScrollbarLength = h.toInt(i.scrollbarYHeight / 2);
+ var halfOfScrollbarLength = _.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) {
@@ -439,11 +438,11 @@
if (i.settings.stopPropagationOnClick) {
i.event.bind(i.scrollbarX, 'click', stopPropagation);
}
i.event.bind(i.scrollbarXRail, 'click', function (e) {
- var halfOfScrollbarLength = h.toInt(i.scrollbarXWidth / 2);
+ var halfOfScrollbarLength = _.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) {
@@ -465,15 +464,15 @@
};
},{"../../lib/helper":6,"../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;
var currentPageX = null;
@@ -487,11 +486,11 @@
i.scrollbarXLeft = maxLeft;
} else {
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);
}
var mouseMoveHandler = function (e) {
updateScrollLeft(e.pageX - currentPageX);
@@ -499,18 +498,18 @@
e.stopPropagation();
e.preventDefault();
};
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);
e.stopPropagation();
@@ -532,11 +531,11 @@
i.scrollbarYTop = maxTop;
} else {
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);
}
var mouseMoveHandler = function (e) {
updateScrollTop(e.pageY - currentPageY);
@@ -544,18 +543,18 @@
e.stopPropagation();
e.preventDefault();
};
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);
e.stopPropagation();
@@ -570,15 +569,15 @@
};
},{"../../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;
i.event.bind(element, 'mouseenter', function () {
hovered = true;
@@ -614,24 +613,28 @@
i.event.bind(i.ownerDocument, 'keydown', function (e) {
if (e.isDefaultPrevented && e.isDefaultPrevented()) {
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;
}
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;
}
}
var deltaX = 0;
@@ -698,13 +701,13 @@
};
},{"../../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;
function shouldPreventDefault(deltaX, deltaY) {
@@ -753,24 +756,26 @@
}
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, .ps-child:hover');
+ if (child) {
+ if (child.tagName !== 'TEXTAREA' && !window.getComputedStyle(child).overflow.match(/(scroll|auto)/)) {
+ 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;
}
}
}
return false;
@@ -780,11 +785,11 @@
var delta = getDeltaFromEvent(e);
var deltaX = delta[0];
var deltaY = delta[1];
- if (shouldBeConsumedByTextarea(deltaX, deltaY)) {
+ if (shouldBeConsumedByChild(deltaX, deltaY)) {
return;
}
shouldPrevent = false;
if (!i.settings.useBothWheelAxes) {
@@ -834,12 +839,12 @@
};
},{"../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 () {
updateGeometry(element);
});
@@ -851,14 +856,14 @@
};
},{"../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() {
var selection = window.getSelection ? window.getSelection() :
document.getSelection ? document.getSelection() : '';
@@ -888,11 +893,11 @@
function stopScrolling() {
if (scrollingLoop) {
clearInterval(scrollingLoop);
scrollingLoop = null;
}
- h.stopScrolling(element);
+ _.stopScrolling(element);
}
var isSelected = false;
i.event.bind(i.ownerDocument, 'selectionchange', function () {
if (element.contains(getRangeNode())) {
@@ -919,32 +924,32 @@
bottom: element.offsetTop + element.offsetHeight
};
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;
}
if (mousePosition.y < containerGeometry.top + 3) {
if (containerGeometry.top + 3 - mousePosition.y < 5) {
scrollDiff.top = -5;
} 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;
}
if (scrollDiff.top === 0 && scrollDiff.left === 0) {
@@ -962,13 +967,14 @@
};
},{"../../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) {
var scrollTop = element.scrollTop;
var scrollLeft = element.scrollLeft;
@@ -1049,10 +1055,13 @@
e.stopPropagation();
}
}
function touchMove(e) {
+ if (!inLocalTouch && i.settings.swipePropagation) {
+ touchStart(e);
+ }
if (!inGlobalTouch && inLocalTouch && shouldHandle(e)) {
var touch = getTouch(e);
var currentOffset = {pageX: touch.pageX, pageY: touch.pageY};
@@ -1124,84 +1133,80 @@
i.event.bind(element, 'MSPointerUp', touchEnd);
}
}
}
-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 : {};
cls.add(element, 'ps-container');
// 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);
+ i.settings.handlers.forEach(function (handlerName) {
+ handlers[handlerName](element);
+ });
+
nativeScrollHandler(element);
- if (i.settings.useSelectionScroll) {
- selectionHandler(element);
- }
-
- if (h.env.supportsTouch || h.env.supportsIePointer) {
- touchHandler(element, h.env.supportsTouch, h.env.supportsIePointer);
- }
- if (i.settings.useKeyboard) {
- keyboardHandler(element);
- }
-
updateGeometry(element);
};
},{"../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;
element.scrollLeft = -1;
result = element.scrollLeft < 0;
@@ -1218,71 +1223,59 @@
function blur() {
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) {
var newId = guid();
setId(element, newId);
@@ -1300,15 +1293,15 @@
};
},{"../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) {
thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);
}
@@ -1328,11 +1321,11 @@
if (i.isScrollbarXUsingBottom) {
xRailOffset.bottom = i.scrollbarXBottom - element.scrollTop;
} 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) {
if (i.isRtl) {
yRailOffset.right = i.contentWidth - (i.negativeScrollAdjustment + element.scrollLeft) - i.scrollbarYRight - i.scrollbarYOuterWidth;
@@ -1344,14 +1337,14 @@
yRailOffset.left = i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth * 2 - i.contentWidth - i.scrollbarYLeft - i.scrollbarYOuterWidth;
} else {
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) {
var i = instances.get(element);
@@ -1360,44 +1353,44 @@
i.contentWidth = element.scrollWidth;
i.contentHeight = element.scrollHeight;
var existingRails;
if (!element.contains(i.scrollbarXRail)) {
- existingRails = d.queryChildren(element, '.ps-scrollbar-x-rail');
+ existingRails = dom.queryChildren(element, '.ps-scrollbar-x-rail');
if (existingRails.length > 0) {
existingRails.forEach(function (rail) {
- d.remove(rail);
+ dom.remove(rail);
});
}
- d.appendTo(i.scrollbarXRail, element);
+ dom.appendTo(i.scrollbarXRail, element);
}
if (!element.contains(i.scrollbarYRail)) {
- existingRails = d.queryChildren(element, '.ps-scrollbar-y-rail');
+ existingRails = dom.queryChildren(element, '.ps-scrollbar-y-rail');
if (existingRails.length > 0) {
existingRails.forEach(function (rail) {
- d.remove(rail);
+ dom.remove(rail);
});
}
- d.appendTo(i.scrollbarYRail, element);
+ dom.appendTo(i.scrollbarYRail, element);
}
if (!i.settings.suppressScrollX && i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth) {
i.scrollbarXActive = true;
i.railXWidth = i.containerWidth - i.railXMarginWidth;
i.railXRatio = i.containerWidth / i.railXWidth;
- i.scrollbarXWidth = getThumbSize(i, h.toInt(i.railXWidth * i.containerWidth / i.contentWidth));
- i.scrollbarXLeft = h.toInt((i.negativeScrollAdjustment + element.scrollLeft) * (i.railXWidth - i.scrollbarXWidth) / (i.contentWidth - i.containerWidth));
+ i.scrollbarXWidth = getThumbSize(i, _.toInt(i.railXWidth * i.containerWidth / i.contentWidth));
+ i.scrollbarXLeft = _.toInt((i.negativeScrollAdjustment + element.scrollLeft) * (i.railXWidth - i.scrollbarXWidth) / (i.contentWidth - i.containerWidth));
} else {
i.scrollbarXActive = false;
}
if (!i.settings.suppressScrollY && i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight) {
i.scrollbarYActive = true;
i.railYHeight = i.containerHeight - i.railYMarginHeight;
i.railYRatio = i.containerHeight / i.railYHeight;
- i.scrollbarYHeight = getThumbSize(i, h.toInt(i.railYHeight * i.containerHeight / i.contentHeight));
- i.scrollbarYTop = h.toInt(element.scrollTop * (i.railYHeight - i.scrollbarYHeight) / (i.contentHeight - i.containerHeight));
+ i.scrollbarYHeight = getThumbSize(i, _.toInt(i.railYHeight * i.containerHeight / i.contentHeight));
+ i.scrollbarYTop = _.toInt(element.scrollTop * (i.railYHeight - i.scrollbarYHeight) / (i.contentHeight - i.containerHeight));
} else {
i.scrollbarYActive = false;
}
if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {
@@ -1430,22 +1423,22 @@
},{"../lib/class":2,"../lib/dom":3,"../lib/helper":6,"./instances":18,"./update-scroll":20}],20:[function(require,module,exports){
'use strict';
var instances = require('./instances');
-var upEvent = document.createEvent('Event')
- , downEvent = document.createEvent('Event')
- , leftEvent = document.createEvent('Event')
- , rightEvent = document.createEvent('Event')
- , yEvent = document.createEvent('Event')
- , xEvent = document.createEvent('Event')
- , xStartEvent = document.createEvent('Event')
- , xEndEvent = document.createEvent('Event')
- , yStartEvent = document.createEvent('Event')
- , yEndEvent = document.createEvent('Event')
- , lastTop
- , lastLeft;
+var upEvent = document.createEvent('Event');
+var downEvent = document.createEvent('Event');
+var leftEvent = document.createEvent('Event');
+var rightEvent = document.createEvent('Event');
+var yEvent = document.createEvent('Event');
+var xEvent = document.createEvent('Event');
+var xStartEvent = document.createEvent('Event');
+var xEndEvent = document.createEvent('Event');
+var yStartEvent = document.createEvent('Event');
+var yEndEvent = document.createEvent('Event');
+var lastTop;
+var lastLeft;
upEvent.initEvent('ps-scroll-up', true, true);
downEvent.initEvent('ps-scroll-down', true, true);
leftEvent.initEvent('ps-scroll-left', true, true);
rightEvent.initEvent('ps-scroll-right', true, true);
@@ -1480,16 +1473,30 @@
}
var i = instances.get(element);
if (axis === 'top' && value >= i.contentHeight - i.containerHeight) {
- element.scrollTop = value = i.contentHeight - i.containerHeight; // don't allow scroll past container
+ // don't allow scroll past container
+ value = i.contentHeight - i.containerHeight;
+ if (value - element.scrollTop <= 1) {
+ // mitigates rounding errors on non-subpixel scroll values
+ value = element.scrollTop;
+ } else {
+ element.scrollTop = value;
+ }
element.dispatchEvent(yEndEvent);
}
if (axis === 'left' && value >= i.contentWidth - i.containerWidth) {
- element.scrollLeft = value = i.contentWidth - i.containerWidth; // don't allow scroll past container
+ // don't allow scroll past container
+ value = i.contentWidth - i.containerWidth;
+ if (value - element.scrollLeft <= 1) {
+ // mitigates rounding errors on non-subpixel scroll values
+ value = element.scrollLeft;
+ } else {
+ element.scrollLeft = value;
+ }
element.dispatchEvent(xEndEvent);
}
if (!lastTop) {
lastTop = element.scrollTop;
@@ -1528,15 +1535,15 @@
};
},{"./instances":18}],21:[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');
module.exports = function (element) {
var i = instances.get(element);
if (!i) {
@@ -1545,25 +1552,25 @@
// Recalcuate negative scrollLeft adjustment
i.negativeScrollAdjustment = i.isNegativeScroll ? element.scrollWidth - element.clientWidth : 0;
// Recalculate rail margins
- d.css(i.scrollbarXRail, 'display', 'block');
- d.css(i.scrollbarYRail, 'display', 'block');
- i.railXMarginWidth = h.toInt(d.css(i.scrollbarXRail, 'marginLeft')) + h.toInt(d.css(i.scrollbarXRail, 'marginRight'));
- i.railYMarginHeight = h.toInt(d.css(i.scrollbarYRail, 'marginTop')) + h.toInt(d.css(i.scrollbarYRail, 'marginBottom'));
+ dom.css(i.scrollbarXRail, 'display', 'block');
+ dom.css(i.scrollbarYRail, 'display', 'block');
+ i.railXMarginWidth = _.toInt(dom.css(i.scrollbarXRail, 'marginLeft')) + _.toInt(dom.css(i.scrollbarXRail, 'marginRight'));
+ i.railYMarginHeight = _.toInt(dom.css(i.scrollbarYRail, 'marginTop')) + _.toInt(dom.css(i.scrollbarYRail, 'marginBottom'));
// Hide scrollbars not to affect scrollWidth and scrollHeight
- d.css(i.scrollbarXRail, 'display', 'none');
- d.css(i.scrollbarYRail, 'display', 'none');
+ dom.css(i.scrollbarXRail, 'display', 'none');
+ dom.css(i.scrollbarYRail, 'display', 'none');
updateGeometry(element);
// Update top/left scroll to trigger events
updateScroll(element, 'top', element.scrollTop);
updateScroll(element, 'left', element.scrollLeft);
- d.css(i.scrollbarXRail, 'display', '');
- d.css(i.scrollbarYRail, 'display', '');
+ dom.css(i.scrollbarXRail, 'display', '');
+ dom.css(i.scrollbarYRail, 'display', '');
};
},{"../lib/dom":3,"../lib/helper":6,"./instances":18,"./update-geometry":19,"./update-scroll":20}]},{},[1]);