You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1928 lines
60 KiB
1928 lines
60 KiB
1 year ago
|
/* perfect-scrollbar v0.6.10 */
|
||
|
(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");
|
||
|
|
||
|
function mountJQuery(jQuery) {
|
||
|
jQuery.fn.perfectScrollbar = function (settingOrCommand) {
|
||
|
return this.each(function () {
|
||
|
if (
|
||
|
typeof settingOrCommand === "object" ||
|
||
|
typeof settingOrCommand === "undefined"
|
||
|
) {
|
||
|
// If it's an object or none, initialize.
|
||
|
var settings = settingOrCommand;
|
||
|
|
||
|
if (!psInstances.get(this)) {
|
||
|
ps.initialize(this, settings);
|
||
|
}
|
||
|
} else {
|
||
|
// Unless, it may be a command.
|
||
|
var command = settingOrCommand;
|
||
|
|
||
|
if (command === "update") {
|
||
|
ps.update(this);
|
||
|
} else if (command === "destroy") {
|
||
|
ps.destroy(this);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return jQuery(this);
|
||
|
});
|
||
|
};
|
||
|
}
|
||
|
|
||
|
if (typeof define === "function" && define.amd) {
|
||
|
// AMD. Register as an anonymous module.
|
||
|
define(["jquery"], mountJQuery);
|
||
|
} else {
|
||
|
var jq = window.jQuery ? window.jQuery : window.$;
|
||
|
if (typeof jq !== "undefined") {
|
||
|
mountJQuery(jq);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = mountJQuery;
|
||
|
},
|
||
|
{ "../main": 7, "../plugin/instances": 18 },
|
||
|
],
|
||
|
2: [
|
||
|
function (require, module, exports) {
|
||
|
"use strict";
|
||
|
|
||
|
function oldAdd(element, className) {
|
||
|
var classes = element.className.split(" ");
|
||
|
if (classes.indexOf(className) < 0) {
|
||
|
classes.push(className);
|
||
|
}
|
||
|
element.className = classes.join(" ");
|
||
|
}
|
||
|
|
||
|
function oldRemove(element, className) {
|
||
|
var classes = element.className.split(" ");
|
||
|
var idx = classes.indexOf(className);
|
||
|
if (idx >= 0) {
|
||
|
classes.splice(idx, 1);
|
||
|
}
|
||
|
element.className = classes.join(" ");
|
||
|
}
|
||
|
|
||
|
exports.add = function (element, className) {
|
||
|
if (element.classList) {
|
||
|
element.classList.add(className);
|
||
|
} else {
|
||
|
oldAdd(element, className);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
exports.remove = function (element, className) {
|
||
|
if (element.classList) {
|
||
|
element.classList.remove(className);
|
||
|
} else {
|
||
|
oldRemove(element, className);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
exports.list = function (element) {
|
||
|
if (element.classList) {
|
||
|
return Array.prototype.slice.apply(element.classList);
|
||
|
} else {
|
||
|
return element.className.split(" ");
|
||
|
}
|
||
|
};
|
||
|
},
|
||
|
{},
|
||
|
],
|
||
|
3: [
|
||
|
function (require, module, exports) {
|
||
|
"use strict";
|
||
|
|
||
|
var DOM = {};
|
||
|
|
||
|
DOM.e = function (tagName, className) {
|
||
|
var element = document.createElement(tagName);
|
||
|
element.className = className;
|
||
|
return element;
|
||
|
};
|
||
|
|
||
|
DOM.appendTo = function (child, parent) {
|
||
|
parent.appendChild(child);
|
||
|
return child;
|
||
|
};
|
||
|
|
||
|
function cssGet(element, styleName) {
|
||
|
return window.getComputedStyle(element)[styleName];
|
||
|
}
|
||
|
|
||
|
function cssSet(element, styleName, styleValue) {
|
||
|
if (typeof styleValue === "number") {
|
||
|
styleValue = styleValue.toString() + "px";
|
||
|
}
|
||
|
element.style[styleName] = styleValue;
|
||
|
return element;
|
||
|
}
|
||
|
|
||
|
function cssMultiSet(element, obj) {
|
||
|
for (var key in obj) {
|
||
|
var val = obj[key];
|
||
|
if (typeof val === "number") {
|
||
|
val = val.toString() + "px";
|
||
|
}
|
||
|
element.style[key] = val;
|
||
|
}
|
||
|
return element;
|
||
|
}
|
||
|
|
||
|
DOM.css = function (element, styleNameOrObject, styleValue) {
|
||
|
if (typeof styleNameOrObject === "object") {
|
||
|
// multiple set with object
|
||
|
return cssMultiSet(element, styleNameOrObject);
|
||
|
} else {
|
||
|
if (typeof styleValue === "undefined") {
|
||
|
return cssGet(element, styleNameOrObject);
|
||
|
} else {
|
||
|
return cssSet(element, styleNameOrObject, styleValue);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DOM.matches = function (element, query) {
|
||
|
if (typeof element.matches !== "undefined") {
|
||
|
return element.matches(query);
|
||
|
} else {
|
||
|
if (typeof element.matchesSelector !== "undefined") {
|
||
|
return element.matchesSelector(query);
|
||
|
} else if (typeof element.webkitMatchesSelector !== "undefined") {
|
||
|
return element.webkitMatchesSelector(query);
|
||
|
} else if (typeof element.mozMatchesSelector !== "undefined") {
|
||
|
return element.mozMatchesSelector(query);
|
||
|
} else if (typeof element.msMatchesSelector !== "undefined") {
|
||
|
return element.msMatchesSelector(query);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DOM.remove = function (element) {
|
||
|
if (typeof element.remove !== "undefined") {
|
||
|
element.remove();
|
||
|
} else {
|
||
|
if (element.parentNode) {
|
||
|
element.parentNode.removeChild(element);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
DOM.queryChildren = function (element, selector) {
|
||
|
return Array.prototype.filter.call(
|
||
|
element.childNodes,
|
||
|
function (child) {
|
||
|
return DOM.matches(child, selector);
|
||
|
}
|
||
|
);
|
||
|
};
|
||
|
|
||
|
module.exports = DOM;
|
||
|
},
|
||
|
{},
|
||
|
],
|
||
|
4: [
|
||
|
function (require, module, exports) {
|
||
|
"use strict";
|
||
|
|
||
|
var EventElement = function (element) {
|
||
|
this.element = element;
|
||
|
this.events = {};
|
||
|
};
|
||
|
|
||
|
EventElement.prototype.bind = function (eventName, handler) {
|
||
|
if (typeof this.events[eventName] === "undefined") {
|
||
|
this.events[eventName] = [];
|
||
|
}
|
||
|
this.events[eventName].push(handler);
|
||
|
this.element.addEventListener(eventName, handler, false);
|
||
|
};
|
||
|
|
||
|
EventElement.prototype.unbind = function (eventName, handler) {
|
||
|
var isHandlerProvided = typeof handler !== "undefined";
|
||
|
this.events[eventName] = this.events[eventName].filter(function (
|
||
|
hdlr
|
||
|
) {
|
||
|
if (isHandlerProvided && hdlr !== handler) {
|
||
|
return true;
|
||
|
}
|
||
|
this.element.removeEventListener(eventName, hdlr, false);
|
||
|
return false;
|
||
|
},
|
||
|
this);
|
||
|
};
|
||
|
|
||
|
EventElement.prototype.unbindAll = function () {
|
||
|
for (var name in this.events) {
|
||
|
this.unbind(name);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var EventManager = function () {
|
||
|
this.eventElements = [];
|
||
|
};
|
||
|
|
||
|
EventManager.prototype.eventElement = function (element) {
|
||
|
var ee = this.eventElements.filter(function (eventElement) {
|
||
|
return eventElement.element === element;
|
||
|
})[0];
|
||
|
if (typeof ee === "undefined") {
|
||
|
ee = new EventElement(element);
|
||
|
this.eventElements.push(ee);
|
||
|
}
|
||
|
return ee;
|
||
|
};
|
||
|
|
||
|
EventManager.prototype.bind = function (element, eventName, handler) {
|
||
|
this.eventElement(element).bind(eventName, handler);
|
||
|
};
|
||
|
|
||
|
EventManager.prototype.unbind = function (element, eventName, handler) {
|
||
|
this.eventElement(element).unbind(eventName, handler);
|
||
|
};
|
||
|
|
||
|
EventManager.prototype.unbindAll = function () {
|
||
|
for (var i = 0; i < this.eventElements.length; i++) {
|
||
|
this.eventElements[i].unbindAll();
|
||
|
}
|
||
|
};
|
||
|
|
||
|
EventManager.prototype.once = function (element, eventName, handler) {
|
||
|
var ee = this.eventElement(element);
|
||
|
var onceHandler = function (e) {
|
||
|
ee.unbind(eventName, onceHandler);
|
||
|
handler(e);
|
||
|
};
|
||
|
ee.bind(eventName, onceHandler);
|
||
|
};
|
||
|
|
||
|
module.exports = EventManager;
|
||
|
},
|
||
|
{},
|
||
|
],
|
||
|
5: [
|
||
|
function (require, module, exports) {
|
||
|
"use strict";
|
||
|
|
||
|
module.exports = (function () {
|
||
|
function s4() {
|
||
|
return Math.floor((1 + Math.random()) * 0x10000)
|
||
|
.toString(16)
|
||
|
.substring(1);
|
||
|
}
|
||
|
return function () {
|
||
|
return (
|
||
|
s4() +
|
||
|
s4() +
|
||
|
"-" +
|
||
|
s4() +
|
||
|
"-" +
|
||
|
s4() +
|
||
|
"-" +
|
||
|
s4() +
|
||
|
"-" +
|
||
|
s4() +
|
||
|
s4() +
|
||
|
s4()
|
||
|
);
|
||
|
};
|
||
|
})();
|
||
|
},
|
||
|
{},
|
||
|
],
|
||
|
6: [
|
||
|
function (require, module, exports) {
|
||
|
"use strict";
|
||
|
|
||
|
var cls = require("./class"),
|
||
|
d = require("./dom");
|
||
|
|
||
|
exports.toInt = function (x) {
|
||
|
return parseInt(x, 10) || 0;
|
||
|
};
|
||
|
|
||
|
exports.clone = function (obj) {
|
||
|
if (obj === null) {
|
||
|
return null;
|
||
|
} else if (typeof obj === "object") {
|
||
|
var result = {};
|
||
|
for (var key in obj) {
|
||
|
result[key] = this.clone(obj[key]);
|
||
|
}
|
||
|
return result;
|
||
|
} else {
|
||
|
return obj;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
exports.extend = function (original, source) {
|
||
|
var result = this.clone(original);
|
||
|
for (var key in source) {
|
||
|
result[key] = this.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]")
|
||
|
);
|
||
|
};
|
||
|
|
||
|
exports.removePsClasses = function (element) {
|
||
|
var clsList = cls.list(element);
|
||
|
for (var i = 0; i < clsList.length; i++) {
|
||
|
var className = clsList[i];
|
||
|
if (className.indexOf("ps-") === 0) {
|
||
|
cls.remove(element, className);
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
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"))
|
||
|
);
|
||
|
};
|
||
|
|
||
|
exports.startScrolling = function (element, axis) {
|
||
|
cls.add(element, "ps-in-scrolling");
|
||
|
if (typeof axis !== "undefined") {
|
||
|
cls.add(element, "ps-" + axis);
|
||
|
} else {
|
||
|
cls.add(element, "ps-x");
|
||
|
cls.add(element, "ps-y");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
exports.stopScrolling = function (element, axis) {
|
||
|
cls.remove(element, "ps-in-scrolling");
|
||
|
if (typeof axis !== "undefined") {
|
||
|
cls.remove(element, "ps-" + axis);
|
||
|
} else {
|
||
|
cls.remove(element, "ps-x");
|
||
|
cls.remove(element, "ps-y");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
exports.env = {
|
||
|
isWebKit: "WebkitAppearance" in document.documentElement.style,
|
||
|
supportsTouch:
|
||
|
"ontouchstart" in window ||
|
||
|
(window.DocumentTouch && document instanceof window.DocumentTouch),
|
||
|
supportsIePointer: window.navigator.msMaxTouchPoints !== null,
|
||
|
};
|
||
|
},
|
||
|
{ "./class": 2, "./dom": 3 },
|
||
|
],
|
||
|
7: [
|
||
|
function (require, module, exports) {
|
||
|
"use strict";
|
||
|
|
||
|
var destroy = require("./plugin/destroy"),
|
||
|
initialize = require("./plugin/initialize"),
|
||
|
update = require("./plugin/update");
|
||
|
|
||
|
module.exports = {
|
||
|
initialize: initialize,
|
||
|
update: update,
|
||
|
destroy: destroy,
|
||
|
};
|
||
|
},
|
||
|
{
|
||
|
"./plugin/destroy": 9,
|
||
|
"./plugin/initialize": 17,
|
||
|
"./plugin/update": 21,
|
||
|
},
|
||
|
],
|
||
|
8: [
|
||
|
function (require, module, exports) {
|
||
|
"use strict";
|
||
|
|
||
|
module.exports = {
|
||
|
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");
|
||
|
|
||
|
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);
|
||
|
|
||
|
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");
|
||
|
|
||
|
function bindClickRailHandler(element, i) {
|
||
|
function pageOffset(el) {
|
||
|
return el.getBoundingClientRect();
|
||
|
}
|
||
|
var stopPropagation = window.Event.prototype.stopPropagation.bind;
|
||
|
|
||
|
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 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;
|
||
|
}
|
||
|
|
||
|
updateScroll(
|
||
|
element,
|
||
|
"top",
|
||
|
(i.contentHeight - i.containerHeight) * positionRatio
|
||
|
);
|
||
|
updateGeometry(element);
|
||
|
|
||
|
e.stopPropagation();
|
||
|
});
|
||
|
|
||
|
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 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;
|
||
|
}
|
||
|
|
||
|
updateScroll(
|
||
|
element,
|
||
|
"left",
|
||
|
(i.contentWidth - i.containerWidth) * positionRatio -
|
||
|
i.negativeScrollAdjustment
|
||
|
);
|
||
|
updateGeometry(element);
|
||
|
|
||
|
e.stopPropagation();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
module.exports = function (element) {
|
||
|
var i = instances.get(element);
|
||
|
bindClickRailHandler(element, i);
|
||
|
};
|
||
|
},
|
||
|
{
|
||
|
"../../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");
|
||
|
|
||
|
function bindMouseScrollXHandler(element, i) {
|
||
|
var currentLeft = null;
|
||
|
var currentPageX = null;
|
||
|
|
||
|
function updateScrollLeft(deltaX) {
|
||
|
var newLeft = currentLeft + deltaX * i.railXRatio;
|
||
|
var maxLeft =
|
||
|
Math.max(0, i.scrollbarXRail.getBoundingClientRect().left) +
|
||
|
i.railXRatio * (i.railXWidth - i.scrollbarXWidth);
|
||
|
|
||
|
if (newLeft < 0) {
|
||
|
i.scrollbarXLeft = 0;
|
||
|
} else if (newLeft > maxLeft) {
|
||
|
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;
|
||
|
updateScroll(element, "left", scrollLeft);
|
||
|
}
|
||
|
|
||
|
var mouseMoveHandler = function (e) {
|
||
|
updateScrollLeft(e.pageX - currentPageX);
|
||
|
updateGeometry(element);
|
||
|
e.stopPropagation();
|
||
|
e.preventDefault();
|
||
|
};
|
||
|
|
||
|
var mouseUpHandler = function () {
|
||
|
h.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");
|
||
|
|
||
|
i.event.bind(i.ownerDocument, "mousemove", mouseMoveHandler);
|
||
|
i.event.once(i.ownerDocument, "mouseup", mouseUpHandler);
|
||
|
|
||
|
e.stopPropagation();
|
||
|
e.preventDefault();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function bindMouseScrollYHandler(element, i) {
|
||
|
var currentTop = null;
|
||
|
var currentPageY = null;
|
||
|
|
||
|
function updateScrollTop(deltaY) {
|
||
|
var newTop = currentTop + deltaY * i.railYRatio;
|
||
|
var maxTop =
|
||
|
Math.max(0, i.scrollbarYRail.getBoundingClientRect().top) +
|
||
|
i.railYRatio * (i.railYHeight - i.scrollbarYHeight);
|
||
|
|
||
|
if (newTop < 0) {
|
||
|
i.scrollbarYTop = 0;
|
||
|
} else if (newTop > maxTop) {
|
||
|
i.scrollbarYTop = maxTop;
|
||
|
} else {
|
||
|
i.scrollbarYTop = newTop;
|
||
|
}
|
||
|
|
||
|
var scrollTop = h.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);
|
||
|
updateGeometry(element);
|
||
|
e.stopPropagation();
|
||
|
e.preventDefault();
|
||
|
};
|
||
|
|
||
|
var mouseUpHandler = function () {
|
||
|
h.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");
|
||
|
|
||
|
i.event.bind(i.ownerDocument, "mousemove", mouseMoveHandler);
|
||
|
i.event.once(i.ownerDocument, "mouseup", mouseUpHandler);
|
||
|
|
||
|
e.stopPropagation();
|
||
|
e.preventDefault();
|
||
|
});
|
||
|
}
|
||
|
|
||
|
module.exports = function (element) {
|
||
|
var i = instances.get(element);
|
||
|
bindMouseScrollXHandler(element, i);
|
||
|
bindMouseScrollYHandler(element, i);
|
||
|
};
|
||
|
},
|
||
|
{
|
||
|
"../../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");
|
||
|
|
||
|
function bindKeyboardHandler(element, i) {
|
||
|
var hovered = false;
|
||
|
i.event.bind(element, "mouseenter", function () {
|
||
|
hovered = true;
|
||
|
});
|
||
|
i.event.bind(element, "mouseleave", function () {
|
||
|
hovered = false;
|
||
|
});
|
||
|
|
||
|
var shouldPrevent = false;
|
||
|
function shouldPreventDefault(deltaX, deltaY) {
|
||
|
var scrollTop = element.scrollTop;
|
||
|
if (deltaX === 0) {
|
||
|
if (!i.scrollbarYActive) {
|
||
|
return false;
|
||
|
}
|
||
|
if (
|
||
|
(scrollTop === 0 && deltaY > 0) ||
|
||
|
(scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)
|
||
|
) {
|
||
|
return !i.settings.wheelPropagation;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var scrollLeft = element.scrollLeft;
|
||
|
if (deltaY === 0) {
|
||
|
if (!i.scrollbarXActive) {
|
||
|
return false;
|
||
|
}
|
||
|
if (
|
||
|
(scrollLeft === 0 && deltaX < 0) ||
|
||
|
(scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)
|
||
|
) {
|
||
|
return !i.settings.wheelPropagation;
|
||
|
}
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
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");
|
||
|
|
||
|
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 (h.isEditable(activeElement)) {
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var deltaX = 0;
|
||
|
var deltaY = 0;
|
||
|
|
||
|
switch (e.which) {
|
||
|
case 37: // left
|
||
|
deltaX = -30;
|
||
|
break;
|
||
|
case 38: // up
|
||
|
deltaY = 30;
|
||
|
break;
|
||
|
case 39: // right
|
||
|
deltaX = 30;
|
||
|
break;
|
||
|
case 40: // down
|
||
|
deltaY = -30;
|
||
|
break;
|
||
|
case 33: // page up
|
||
|
deltaY = 90;
|
||
|
break;
|
||
|
case 32: // space bar
|
||
|
if (e.shiftKey) {
|
||
|
deltaY = 90;
|
||
|
} else {
|
||
|
deltaY = -90;
|
||
|
}
|
||
|
break;
|
||
|
case 34: // page down
|
||
|
deltaY = -90;
|
||
|
break;
|
||
|
case 35: // end
|
||
|
if (e.ctrlKey) {
|
||
|
deltaY = -i.contentHeight;
|
||
|
} else {
|
||
|
deltaY = -i.containerHeight;
|
||
|
}
|
||
|
break;
|
||
|
case 36: // home
|
||
|
if (e.ctrlKey) {
|
||
|
deltaY = element.scrollTop;
|
||
|
} else {
|
||
|
deltaY = i.containerHeight;
|
||
|
}
|
||
|
break;
|
||
|
default:
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
updateScroll(element, "top", element.scrollTop - deltaY);
|
||
|
updateScroll(element, "left", element.scrollLeft + deltaX);
|
||
|
updateGeometry(element);
|
||
|
|
||
|
shouldPrevent = shouldPreventDefault(deltaX, deltaY);
|
||
|
if (shouldPrevent) {
|
||
|
e.preventDefault();
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
module.exports = function (element) {
|
||
|
var i = instances.get(element);
|
||
|
bindKeyboardHandler(element, i);
|
||
|
};
|
||
|
},
|
||
|
{
|
||
|
"../../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");
|
||
|
|
||
|
function bindMouseWheelHandler(element, i) {
|
||
|
var shouldPrevent = false;
|
||
|
|
||
|
function shouldPreventDefault(deltaX, deltaY) {
|
||
|
var scrollTop = element.scrollTop;
|
||
|
if (deltaX === 0) {
|
||
|
if (!i.scrollbarYActive) {
|
||
|
return false;
|
||
|
}
|
||
|
if (
|
||
|
(scrollTop === 0 && deltaY > 0) ||
|
||
|
(scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)
|
||
|
) {
|
||
|
return !i.settings.wheelPropagation;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var scrollLeft = element.scrollLeft;
|
||
|
if (deltaY === 0) {
|
||
|
if (!i.scrollbarXActive) {
|
||
|
return false;
|
||
|
}
|
||
|
if (
|
||
|
(scrollLeft === 0 && deltaX < 0) ||
|
||
|
(scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)
|
||
|
) {
|
||
|
return !i.settings.wheelPropagation;
|
||
|
}
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
function getDeltaFromEvent(e) {
|
||
|
var deltaX = e.deltaX;
|
||
|
var deltaY = -1 * e.deltaY;
|
||
|
|
||
|
if (
|
||
|
typeof deltaX === "undefined" ||
|
||
|
typeof deltaY === "undefined"
|
||
|
) {
|
||
|
// OS X Safari
|
||
|
deltaX = (-1 * e.wheelDeltaX) / 6;
|
||
|
deltaY = e.wheelDeltaY / 6;
|
||
|
}
|
||
|
|
||
|
if (e.deltaMode && e.deltaMode === 1) {
|
||
|
// Firefox in deltaMode 1: Line scrolling
|
||
|
deltaX *= 10;
|
||
|
deltaY *= 10;
|
||
|
}
|
||
|
|
||
|
if (deltaX !== deltaX && deltaY !== deltaY /* NaN checks */) {
|
||
|
// IE in some mouse drivers
|
||
|
deltaX = 0;
|
||
|
deltaY = e.wheelDelta;
|
||
|
}
|
||
|
|
||
|
return [deltaX, deltaY];
|
||
|
}
|
||
|
|
||
|
function shouldBeConsumedByTextarea(deltaX, deltaY) {
|
||
|
var hoveredTextarea = element.querySelector("textarea:hover");
|
||
|
if (hoveredTextarea) {
|
||
|
var maxScrollTop =
|
||
|
hoveredTextarea.scrollHeight - hoveredTextarea.clientHeight;
|
||
|
if (maxScrollTop > 0) {
|
||
|
if (
|
||
|
!(hoveredTextarea.scrollTop === 0 && deltaY > 0) &&
|
||
|
!(hoveredTextarea.scrollTop === maxScrollTop && deltaY < 0)
|
||
|
) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
var maxScrollLeft =
|
||
|
hoveredTextarea.scrollLeft - hoveredTextarea.clientWidth;
|
||
|
if (maxScrollLeft > 0) {
|
||
|
if (
|
||
|
!(hoveredTextarea.scrollLeft === 0 && deltaX < 0) &&
|
||
|
!(hoveredTextarea.scrollLeft === maxScrollLeft && deltaX > 0)
|
||
|
) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
function mousewheelHandler(e) {
|
||
|
var delta = getDeltaFromEvent(e);
|
||
|
|
||
|
var deltaX = delta[0];
|
||
|
var deltaY = delta[1];
|
||
|
|
||
|
if (shouldBeConsumedByTextarea(deltaX, deltaY)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
shouldPrevent = false;
|
||
|
if (!i.settings.useBothWheelAxes) {
|
||
|
// deltaX will only be used for horizontal scrolling and deltaY will
|
||
|
// only be used for vertical scrolling - this is the default
|
||
|
updateScroll(
|
||
|
element,
|
||
|
"top",
|
||
|
element.scrollTop - deltaY * i.settings.wheelSpeed
|
||
|
);
|
||
|
updateScroll(
|
||
|
element,
|
||
|
"left",
|
||
|
element.scrollLeft + deltaX * i.settings.wheelSpeed
|
||
|
);
|
||
|
} else if (i.scrollbarYActive && !i.scrollbarXActive) {
|
||
|
// only vertical scrollbar is active and useBothWheelAxes option is
|
||
|
// active, so let's scroll vertical bar using both mouse wheel axes
|
||
|
if (deltaY) {
|
||
|
updateScroll(
|
||
|
element,
|
||
|
"top",
|
||
|
element.scrollTop - deltaY * i.settings.wheelSpeed
|
||
|
);
|
||
|
} else {
|
||
|
updateScroll(
|
||
|
element,
|
||
|
"top",
|
||
|
element.scrollTop + deltaX * i.settings.wheelSpeed
|
||
|
);
|
||
|
}
|
||
|
shouldPrevent = true;
|
||
|
} else if (i.scrollbarXActive && !i.scrollbarYActive) {
|
||
|
// useBothWheelAxes and only horizontal bar is active, so use both
|
||
|
// wheel axes for horizontal bar
|
||
|
if (deltaX) {
|
||
|
updateScroll(
|
||
|
element,
|
||
|
"left",
|
||
|
element.scrollLeft + deltaX * i.settings.wheelSpeed
|
||
|
);
|
||
|
} else {
|
||
|
updateScroll(
|
||
|
element,
|
||
|
"left",
|
||
|
element.scrollLeft - deltaY * i.settings.wheelSpeed
|
||
|
);
|
||
|
}
|
||
|
shouldPrevent = true;
|
||
|
}
|
||
|
|
||
|
updateGeometry(element);
|
||
|
|
||
|
shouldPrevent =
|
||
|
shouldPrevent || shouldPreventDefault(deltaX, deltaY);
|
||
|
if (shouldPrevent) {
|
||
|
e.stopPropagation();
|
||
|
e.preventDefault();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (typeof window.onwheel !== "undefined") {
|
||
|
i.event.bind(element, "wheel", mousewheelHandler);
|
||
|
} else if (typeof window.onmousewheel !== "undefined") {
|
||
|
i.event.bind(element, "mousewheel", mousewheelHandler);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = function (element) {
|
||
|
var i = instances.get(element);
|
||
|
bindMouseWheelHandler(element, i);
|
||
|
};
|
||
|
},
|
||
|
{ "../instances": 18, "../update-geometry": 19, "../update-scroll": 20 },
|
||
|
],
|
||
|
14: [
|
||
|
function (require, module, exports) {
|
||
|
"use strict";
|
||
|
|
||
|
var instances = require("../instances"),
|
||
|
updateGeometry = require("../update-geometry");
|
||
|
|
||
|
function bindNativeScrollHandler(element, i) {
|
||
|
i.event.bind(element, "scroll", function () {
|
||
|
updateGeometry(element);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
module.exports = function (element) {
|
||
|
var i = instances.get(element);
|
||
|
bindNativeScrollHandler(element, i);
|
||
|
};
|
||
|
},
|
||
|
{ "../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");
|
||
|
|
||
|
function bindSelectionHandler(element, i) {
|
||
|
function getRangeNode() {
|
||
|
var selection = window.getSelection
|
||
|
? window.getSelection()
|
||
|
: document.getSelection
|
||
|
? document.getSelection()
|
||
|
: "";
|
||
|
if (selection.toString().length === 0) {
|
||
|
return null;
|
||
|
} else {
|
||
|
return selection.getRangeAt(0).commonAncestorContainer;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var scrollingLoop = null;
|
||
|
var scrollDiff = { top: 0, left: 0 };
|
||
|
function startScrolling() {
|
||
|
if (!scrollingLoop) {
|
||
|
scrollingLoop = setInterval(function () {
|
||
|
if (!instances.get(element)) {
|
||
|
clearInterval(scrollingLoop);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
updateScroll(
|
||
|
element,
|
||
|
"top",
|
||
|
element.scrollTop + scrollDiff.top
|
||
|
);
|
||
|
updateScroll(
|
||
|
element,
|
||
|
"left",
|
||
|
element.scrollLeft + scrollDiff.left
|
||
|
);
|
||
|
updateGeometry(element);
|
||
|
}, 50); // every .1 sec
|
||
|
}
|
||
|
}
|
||
|
function stopScrolling() {
|
||
|
if (scrollingLoop) {
|
||
|
clearInterval(scrollingLoop);
|
||
|
scrollingLoop = null;
|
||
|
}
|
||
|
h.stopScrolling(element);
|
||
|
}
|
||
|
|
||
|
var isSelected = false;
|
||
|
i.event.bind(i.ownerDocument, "selectionchange", function () {
|
||
|
if (element.contains(getRangeNode())) {
|
||
|
isSelected = true;
|
||
|
} else {
|
||
|
isSelected = false;
|
||
|
stopScrolling();
|
||
|
}
|
||
|
});
|
||
|
i.event.bind(window, "mouseup", function () {
|
||
|
if (isSelected) {
|
||
|
isSelected = false;
|
||
|
stopScrolling();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
i.event.bind(window, "mousemove", function (e) {
|
||
|
if (isSelected) {
|
||
|
var mousePosition = { x: e.pageX, y: e.pageY };
|
||
|
var containerGeometry = {
|
||
|
left: element.offsetLeft,
|
||
|
right: element.offsetLeft + element.offsetWidth,
|
||
|
top: element.offsetTop,
|
||
|
bottom: element.offsetTop + element.offsetHeight,
|
||
|
};
|
||
|
|
||
|
if (mousePosition.x < containerGeometry.left + 3) {
|
||
|
scrollDiff.left = -5;
|
||
|
h.startScrolling(element, "x");
|
||
|
} else if (mousePosition.x > containerGeometry.right - 3) {
|
||
|
scrollDiff.left = 5;
|
||
|
h.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");
|
||
|
} 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");
|
||
|
} else {
|
||
|
scrollDiff.top = 0;
|
||
|
}
|
||
|
|
||
|
if (scrollDiff.top === 0 && scrollDiff.left === 0) {
|
||
|
stopScrolling();
|
||
|
} else {
|
||
|
startScrolling();
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
module.exports = function (element) {
|
||
|
var i = instances.get(element);
|
||
|
bindSelectionHandler(element, i);
|
||
|
};
|
||
|
},
|
||
|
{
|
||
|
"../../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");
|
||
|
|
||
|
function bindTouchHandler(
|
||
|
element,
|
||
|
i,
|
||
|
supportsTouch,
|
||
|
supportsIePointer
|
||
|
) {
|
||
|
function shouldPreventDefault(deltaX, deltaY) {
|
||
|
var scrollTop = element.scrollTop;
|
||
|
var scrollLeft = element.scrollLeft;
|
||
|
var magnitudeX = Math.abs(deltaX);
|
||
|
var magnitudeY = Math.abs(deltaY);
|
||
|
|
||
|
if (magnitudeY > magnitudeX) {
|
||
|
// user is perhaps trying to swipe up/down the page
|
||
|
|
||
|
if (
|
||
|
(deltaY < 0 &&
|
||
|
scrollTop === i.contentHeight - i.containerHeight) ||
|
||
|
(deltaY > 0 && scrollTop === 0)
|
||
|
) {
|
||
|
return !i.settings.swipePropagation;
|
||
|
}
|
||
|
} else if (magnitudeX > magnitudeY) {
|
||
|
// user is perhaps trying to swipe left/right across the page
|
||
|
|
||
|
if (
|
||
|
(deltaX < 0 &&
|
||
|
scrollLeft === i.contentWidth - i.containerWidth) ||
|
||
|
(deltaX > 0 && scrollLeft === 0)
|
||
|
) {
|
||
|
return !i.settings.swipePropagation;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
function applyTouchMove(differenceX, differenceY) {
|
||
|
updateScroll(element, "top", element.scrollTop - differenceY);
|
||
|
updateScroll(element, "left", element.scrollLeft - differenceX);
|
||
|
|
||
|
updateGeometry(element);
|
||
|
}
|
||
|
|
||
|
var startOffset = {};
|
||
|
var startTime = 0;
|
||
|
var speed = {};
|
||
|
var easingLoop = null;
|
||
|
var inGlobalTouch = false;
|
||
|
var inLocalTouch = false;
|
||
|
|
||
|
function globalTouchStart() {
|
||
|
inGlobalTouch = true;
|
||
|
}
|
||
|
function globalTouchEnd() {
|
||
|
inGlobalTouch = false;
|
||
|
}
|
||
|
|
||
|
function getTouch(e) {
|
||
|
if (e.targetTouches) {
|
||
|
return e.targetTouches[0];
|
||
|
} else {
|
||
|
// Maybe IE pointer
|
||
|
return e;
|
||
|
}
|
||
|
}
|
||
|
function shouldHandle(e) {
|
||
|
if (e.targetTouches && e.targetTouches.length === 1) {
|
||
|
return true;
|
||
|
}
|
||
|
if (
|
||
|
e.pointerType &&
|
||
|
e.pointerType !== "mouse" &&
|
||
|
e.pointerType !== e.MSPOINTER_TYPE_MOUSE
|
||
|
) {
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
function touchStart(e) {
|
||
|
if (shouldHandle(e)) {
|
||
|
inLocalTouch = true;
|
||
|
|
||
|
var touch = getTouch(e);
|
||
|
|
||
|
startOffset.pageX = touch.pageX;
|
||
|
startOffset.pageY = touch.pageY;
|
||
|
|
||
|
startTime = new Date().getTime();
|
||
|
|
||
|
if (easingLoop !== null) {
|
||
|
clearInterval(easingLoop);
|
||
|
}
|
||
|
|
||
|
e.stopPropagation();
|
||
|
}
|
||
|
}
|
||
|
function touchMove(e) {
|
||
|
if (!inGlobalTouch && inLocalTouch && shouldHandle(e)) {
|
||
|
var touch = getTouch(e);
|
||
|
|
||
|
var currentOffset = { pageX: touch.pageX, pageY: touch.pageY };
|
||
|
|
||
|
var differenceX = currentOffset.pageX - startOffset.pageX;
|
||
|
var differenceY = currentOffset.pageY - startOffset.pageY;
|
||
|
|
||
|
applyTouchMove(differenceX, differenceY);
|
||
|
startOffset = currentOffset;
|
||
|
|
||
|
var currentTime = new Date().getTime();
|
||
|
|
||
|
var timeGap = currentTime - startTime;
|
||
|
if (timeGap > 0) {
|
||
|
speed.x = differenceX / timeGap;
|
||
|
speed.y = differenceY / timeGap;
|
||
|
startTime = currentTime;
|
||
|
}
|
||
|
|
||
|
if (shouldPreventDefault(differenceX, differenceY)) {
|
||
|
e.stopPropagation();
|
||
|
e.preventDefault();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
function touchEnd() {
|
||
|
if (!inGlobalTouch && inLocalTouch) {
|
||
|
inLocalTouch = false;
|
||
|
|
||
|
clearInterval(easingLoop);
|
||
|
easingLoop = setInterval(function () {
|
||
|
if (!instances.get(element)) {
|
||
|
clearInterval(easingLoop);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {
|
||
|
clearInterval(easingLoop);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
applyTouchMove(speed.x * 30, speed.y * 30);
|
||
|
|
||
|
speed.x *= 0.8;
|
||
|
speed.y *= 0.8;
|
||
|
}, 10);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (supportsTouch) {
|
||
|
i.event.bind(window, "touchstart", globalTouchStart);
|
||
|
i.event.bind(window, "touchend", globalTouchEnd);
|
||
|
i.event.bind(element, "touchstart", touchStart);
|
||
|
i.event.bind(element, "touchmove", touchMove);
|
||
|
i.event.bind(element, "touchend", touchEnd);
|
||
|
}
|
||
|
|
||
|
if (supportsIePointer) {
|
||
|
if (window.PointerEvent) {
|
||
|
i.event.bind(window, "pointerdown", globalTouchStart);
|
||
|
i.event.bind(window, "pointerup", globalTouchEnd);
|
||
|
i.event.bind(element, "pointerdown", touchStart);
|
||
|
i.event.bind(element, "pointermove", touchMove);
|
||
|
i.event.bind(element, "pointerup", touchEnd);
|
||
|
} else if (window.MSPointerEvent) {
|
||
|
i.event.bind(window, "MSPointerDown", globalTouchStart);
|
||
|
i.event.bind(window, "MSPointerUp", globalTouchEnd);
|
||
|
i.event.bind(element, "MSPointerDown", touchStart);
|
||
|
i.event.bind(element, "MSPointerMove", touchMove);
|
||
|
i.event.bind(element, "MSPointerUp", touchEnd);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = function (element, supportsTouch, supportsIePointer) {
|
||
|
var i = instances.get(element);
|
||
|
bindTouchHandler(element, i, supportsTouch, supportsIePointer);
|
||
|
};
|
||
|
},
|
||
|
{ "../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");
|
||
|
|
||
|
// 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");
|
||
|
|
||
|
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);
|
||
|
cls.add(element, "ps-theme-" + i.settings.theme);
|
||
|
|
||
|
clickRailHandler(element);
|
||
|
dragScrollbarHandler(element);
|
||
|
mouseWheelHandler(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 instances = {};
|
||
|
|
||
|
function Instance(element) {
|
||
|
var i = this;
|
||
|
|
||
|
i.settings = h.clone(defaultSettings);
|
||
|
i.containerWidth = null;
|
||
|
i.containerHeight = null;
|
||
|
i.contentWidth = null;
|
||
|
i.contentHeight = null;
|
||
|
|
||
|
i.isRtl = d.css(element, "direction") === "rtl";
|
||
|
i.isNegativeScroll = (function () {
|
||
|
var originalScrollLeft = element.scrollLeft;
|
||
|
var result = null;
|
||
|
element.scrollLeft = -1;
|
||
|
result = element.scrollLeft < 0;
|
||
|
element.scrollLeft = originalScrollLeft;
|
||
|
return result;
|
||
|
})();
|
||
|
i.negativeScrollAdjustment = i.isNegativeScroll
|
||
|
? element.scrollWidth - element.clientWidth
|
||
|
: 0;
|
||
|
i.event = new EventManager();
|
||
|
i.ownerDocument = element.ownerDocument || document;
|
||
|
|
||
|
function focus() {
|
||
|
cls.add(element, "ps-focus");
|
||
|
}
|
||
|
|
||
|
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.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.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"));
|
||
|
// 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", "");
|
||
|
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.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.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.railYHeight = null;
|
||
|
i.railYRatio = null;
|
||
|
}
|
||
|
|
||
|
function getId(element) {
|
||
|
if (typeof element.dataset === "undefined") {
|
||
|
return element.getAttribute("data-ps-id");
|
||
|
} else {
|
||
|
return element.dataset.psId;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function setId(element, id) {
|
||
|
if (typeof element.dataset === "undefined") {
|
||
|
element.setAttribute("data-ps-id", id);
|
||
|
} else {
|
||
|
element.dataset.psId = id;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function removeId(element) {
|
||
|
if (typeof element.dataset === "undefined") {
|
||
|
element.removeAttribute("data-ps-id");
|
||
|
} else {
|
||
|
delete element.dataset.psId;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
exports.add = function (element) {
|
||
|
var newId = guid();
|
||
|
setId(element, newId);
|
||
|
instances[newId] = new Instance(element);
|
||
|
return instances[newId];
|
||
|
};
|
||
|
|
||
|
exports.remove = function (element) {
|
||
|
delete instances[getId(element)];
|
||
|
removeId(element);
|
||
|
};
|
||
|
|
||
|
exports.get = function (element) {
|
||
|
return instances[getId(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");
|
||
|
|
||
|
function getThumbSize(i, thumbSize) {
|
||
|
if (i.settings.minScrollbarLength) {
|
||
|
thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);
|
||
|
}
|
||
|
if (i.settings.maxScrollbarLength) {
|
||
|
thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);
|
||
|
}
|
||
|
return thumbSize;
|
||
|
}
|
||
|
|
||
|
function updateCss(element, i) {
|
||
|
var xRailOffset = { width: i.railXWidth };
|
||
|
if (i.isRtl) {
|
||
|
xRailOffset.left =
|
||
|
i.negativeScrollAdjustment +
|
||
|
element.scrollLeft +
|
||
|
i.containerWidth -
|
||
|
i.contentWidth;
|
||
|
} else {
|
||
|
xRailOffset.left = element.scrollLeft;
|
||
|
}
|
||
|
if (i.isScrollbarXUsingBottom) {
|
||
|
xRailOffset.bottom = i.scrollbarXBottom - element.scrollTop;
|
||
|
} else {
|
||
|
xRailOffset.top = i.scrollbarXTop + element.scrollTop;
|
||
|
}
|
||
|
d.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;
|
||
|
} else {
|
||
|
yRailOffset.right = i.scrollbarYRight - element.scrollLeft;
|
||
|
}
|
||
|
} else {
|
||
|
if (i.isRtl) {
|
||
|
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);
|
||
|
|
||
|
d.css(i.scrollbarX, {
|
||
|
left: i.scrollbarXLeft,
|
||
|
width: i.scrollbarXWidth - i.railBorderXWidth,
|
||
|
});
|
||
|
d.css(i.scrollbarY, {
|
||
|
top: i.scrollbarYTop,
|
||
|
height: i.scrollbarYHeight - i.railBorderYWidth,
|
||
|
});
|
||
|
}
|
||
|
|
||
|
module.exports = function (element) {
|
||
|
var i = instances.get(element);
|
||
|
|
||
|
i.containerWidth = element.clientWidth;
|
||
|
i.containerHeight = element.clientHeight;
|
||
|
i.contentWidth = element.scrollWidth;
|
||
|
i.contentHeight = element.scrollHeight;
|
||
|
|
||
|
var existingRails;
|
||
|
if (!element.contains(i.scrollbarXRail)) {
|
||
|
existingRails = d.queryChildren(element, ".ps-scrollbar-x-rail");
|
||
|
if (existingRails.length > 0) {
|
||
|
existingRails.forEach(function (rail) {
|
||
|
d.remove(rail);
|
||
|
});
|
||
|
}
|
||
|
d.appendTo(i.scrollbarXRail, element);
|
||
|
}
|
||
|
if (!element.contains(i.scrollbarYRail)) {
|
||
|
existingRails = d.queryChildren(element, ".ps-scrollbar-y-rail");
|
||
|
if (existingRails.length > 0) {
|
||
|
existingRails.forEach(function (rail) {
|
||
|
d.remove(rail);
|
||
|
});
|
||
|
}
|
||
|
d.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)
|
||
|
);
|
||
|
} 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)
|
||
|
);
|
||
|
} else {
|
||
|
i.scrollbarYActive = false;
|
||
|
}
|
||
|
|
||
|
if (i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {
|
||
|
i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;
|
||
|
}
|
||
|
if (i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {
|
||
|
i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;
|
||
|
}
|
||
|
|
||
|
updateCss(element, i);
|
||
|
|
||
|
if (i.scrollbarXActive) {
|
||
|
cls.add(element, "ps-active-x");
|
||
|
} else {
|
||
|
cls.remove(element, "ps-active-x");
|
||
|
i.scrollbarXWidth = 0;
|
||
|
i.scrollbarXLeft = 0;
|
||
|
updateScroll(element, "left", 0);
|
||
|
}
|
||
|
if (i.scrollbarYActive) {
|
||
|
cls.add(element, "ps-active-y");
|
||
|
} else {
|
||
|
cls.remove(element, "ps-active-y");
|
||
|
i.scrollbarYHeight = 0;
|
||
|
i.scrollbarYTop = 0;
|
||
|
updateScroll(element, "top", 0);
|
||
|
}
|
||
|
};
|
||
|
},
|
||
|
{
|
||
|
"../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;
|
||
|
|
||
|
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);
|
||
|
yEvent.initEvent("ps-scroll-y", true, true);
|
||
|
xEvent.initEvent("ps-scroll-x", true, true);
|
||
|
xStartEvent.initEvent("ps-x-reach-start", true, true);
|
||
|
xEndEvent.initEvent("ps-x-reach-end", true, true);
|
||
|
yStartEvent.initEvent("ps-y-reach-start", true, true);
|
||
|
yEndEvent.initEvent("ps-y-reach-end", true, true);
|
||
|
|
||
|
module.exports = function (element, axis, value) {
|
||
|
if (typeof element === "undefined") {
|
||
|
throw "You must provide an element to the update-scroll function";
|
||
|
}
|
||
|
|
||
|
if (typeof axis === "undefined") {
|
||
|
throw "You must provide an axis to the update-scroll function";
|
||
|
}
|
||
|
|
||
|
if (typeof value === "undefined") {
|
||
|
throw "You must provide a value to the update-scroll function";
|
||
|
}
|
||
|
|
||
|
if (axis === "top" && value <= 0) {
|
||
|
element.scrollTop = value = 0; // don't allow negative scroll
|
||
|
element.dispatchEvent(yStartEvent);
|
||
|
}
|
||
|
|
||
|
if (axis === "left" && value <= 0) {
|
||
|
element.scrollLeft = value = 0; // don't allow negative scroll
|
||
|
element.dispatchEvent(xStartEvent);
|
||
|
}
|
||
|
|
||
|
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
|
||
|
element.dispatchEvent(yEndEvent);
|
||
|
}
|
||
|
|
||
|
if (axis === "left" && value >= i.contentWidth - i.containerWidth) {
|
||
|
element.scrollLeft = value = i.contentWidth - i.containerWidth; // don't allow scroll past container
|
||
|
element.dispatchEvent(xEndEvent);
|
||
|
}
|
||
|
|
||
|
if (!lastTop) {
|
||
|
lastTop = element.scrollTop;
|
||
|
}
|
||
|
|
||
|
if (!lastLeft) {
|
||
|
lastLeft = element.scrollLeft;
|
||
|
}
|
||
|
|
||
|
if (axis === "top" && value < lastTop) {
|
||
|
element.dispatchEvent(upEvent);
|
||
|
}
|
||
|
|
||
|
if (axis === "top" && value > lastTop) {
|
||
|
element.dispatchEvent(downEvent);
|
||
|
}
|
||
|
|
||
|
if (axis === "left" && value < lastLeft) {
|
||
|
element.dispatchEvent(leftEvent);
|
||
|
}
|
||
|
|
||
|
if (axis === "left" && value > lastLeft) {
|
||
|
element.dispatchEvent(rightEvent);
|
||
|
}
|
||
|
|
||
|
if (axis === "top") {
|
||
|
element.scrollTop = lastTop = value;
|
||
|
element.dispatchEvent(yEvent);
|
||
|
}
|
||
|
|
||
|
if (axis === "left") {
|
||
|
element.scrollLeft = lastLeft = value;
|
||
|
element.dispatchEvent(xEvent);
|
||
|
}
|
||
|
};
|
||
|
},
|
||
|
{ "./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");
|
||
|
|
||
|
module.exports = function (element) {
|
||
|
var i = instances.get(element);
|
||
|
|
||
|
if (!i) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// 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"));
|
||
|
|
||
|
// Hide scrollbars not to affect scrollWidth and scrollHeight
|
||
|
d.css(i.scrollbarXRail, "display", "none");
|
||
|
d.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", "");
|
||
|
};
|
||
|
},
|
||
|
{
|
||
|
"../lib/dom": 3,
|
||
|
"../lib/helper": 6,
|
||
|
"./instances": 18,
|
||
|
"./update-geometry": 19,
|
||
|
"./update-scroll": 20,
|
||
|
},
|
||
|
],
|
||
|
},
|
||
|
{},
|
||
|
[1]
|
||
|
);
|