3-js edit

perfect-scrollbar  edit

Copy
Edit
<!-- components/3-js/perfect-scrollbar.php -->
Copy
Copy
Edit
/* scss/3-js/_perfect-scrollbar.scss */ // custom w&m styles // starts scrollbar below buttons .ps__rail-y { margin: 140px 0 0 0; } // default styles /* * Container style */ .ps { overflow: hidden !important; overflow-anchor: none; -ms-overflow-style: none; touch-action: auto; -ms-touch-action: auto; } /* * Scrollbar rail styles */ .ps__rail-x { /* please don't change 'position' */ position: absolute; /* there must be 'bottom' or 'top' for ps__rail-x */ bottom: 0px; display: none; height: 15px; -webkit-transition: background-color 0.2s linear, opacity 0.2s linear; transition: background-color 0.2s linear, opacity 0.2s linear; opacity: 0; } .ps__rail-y { /* please don't change 'position' */ position: absolute; /* there must be 'right' or 'left' for ps__rail-y */ right: 0; display: none; width: 15px; -webkit-transition: background-color 0.2s linear, opacity 0.2s linear; transition: background-color 0.2s linear, opacity 0.2s linear; opacity: 0.6; } .ps--active-x > .ps__rail-x, .ps--active-y > .ps__rail-y { display: block; background-color: transparent; } .ps:hover > .ps__rail-x, .ps:hover > .ps__rail-y, .ps--focus > .ps__rail-x, .ps--focus > .ps__rail-y, .ps--scrolling-x > .ps__rail-x, .ps--scrolling-y > .ps__rail-y { opacity: 0.6; } .ps .ps__rail-x:hover, .ps .ps__rail-y:hover, .ps .ps__rail-x:focus, .ps .ps__rail-y:focus, .ps .ps__rail-x.ps--clicking, .ps .ps__rail-y.ps--clicking { opacity: 0.9; background-color: #eee; } /* * Scrollbar thumb styles */ .ps__thumb-x { /* please don't change 'position' */ position: absolute; /* there must be 'bottom' for ps__thumb-x */ bottom: 2px; height: 6px; -webkit-transition: background-color 0.2s linear, height 0.2s ease-in-out; transition: background-color 0.2s linear, height 0.2s ease-in-out; border-radius: 6px; background-color: #aaa; } .ps__thumb-y { /* please don't change 'position' */ position: absolute; /* there must be 'right' for ps__thumb-y */ right: 2px; width: 6px; -webkit-transition: background-color 0.2s linear, width 0.2s ease-in-out; transition: background-color 0.2s linear, width 0.2s ease-in-out; border-radius: 6px; background-color: #aaa; } .ps__rail-x:hover > .ps__thumb-x, .ps__rail-x:focus > .ps__thumb-x, .ps__rail-x.ps--clicking .ps__thumb-x { height: 11px; background-color: #999; } .ps__rail-y:hover > .ps__thumb-y, .ps__rail-y:focus > .ps__thumb-y, .ps__rail-y.ps--clicking .ps__thumb-y { width: 11px; background-color: #999; } /* MS supports */ @supports (-ms-overflow-style: none) { .ps { overflow: auto !important; } } @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { .ps { overflow: auto !important; } }
Copy
Edit
/* js/perfect-scrollbar.js */ /*! * perfect-scrollbar v1.4.0 * (c) 2018 Hyunje Jun * @license MIT */ !(function(t, e) { "object" == typeof exports && "undefined" != typeof module ? (module.exports = e()) : "function" == typeof define && define.amd ? define(e) : (t.PerfectScrollbar = e()); })(this, function() { "use strict"; function t(t) { return getComputedStyle(t); } function e(t, e) { for (var i in e) { var r = e[i]; "number" == typeof r && (r += "px"), (t.style[i] = r); } return t; } function i(t) { var e = document.createElement("div"); return (e.className = t), e; } function r(t, e) { if (!v) throw new Error("No element matching method supported"); return v.call(t, e); } function l(t) { t.remove ? t.remove() : t.parentNode && t.parentNode.removeChild(t); } function n(t, e) { return Array.prototype.filter.call(t.children, function(t) { return r(t, e); }); } function o(t, e) { var i = t.element.classList, r = m.state.scrolling(e); i.contains(r) ? clearTimeout(Y[e]) : i.add(r); } function s(t, e) { Y[e] = setTimeout(function() { return t.isAlive && t.element.classList.remove(m.state.scrolling(e)); }, t.settings.scrollingThreshold); } function a(t, e) { o(t, e), s(t, e); } function c(t) { if ("function" == typeof window.CustomEvent) return new CustomEvent(t); var e = document.createEvent("CustomEvent"); return e.initCustomEvent(t, !1, !1, void 0), e; } function h(t, e, i, r, l) { var n = i[0], o = i[1], s = i[2], h = i[3], u = i[4], d = i[5]; void 0 === r && (r = !0), void 0 === l && (l = !1); var f = t.element; (t.reach[h] = null), f[s] < 1 && (t.reach[h] = "start"), f[s] > t[n] - t[o] - 1 && (t.reach[h] = "end"), e && (f.dispatchEvent(c("ps-scroll-" + h)), e < 0 ? f.dispatchEvent(c("ps-scroll-" + u)) : e > 0 && f.dispatchEvent(c("ps-scroll-" + d)), r && a(t, h)), t.reach[h] && (e || l) && f.dispatchEvent(c("ps-" + h + "-reach-" + t.reach[h])); } function u(t) { return parseInt(t, 10) || 0; } function d(t) { return ( r(t, "input,[contenteditable]") || r(t, "select,[contenteditable]") || r(t, "textarea,[contenteditable]") || r(t, "button,[contenteditable]") ); } function f(e) { var i = t(e); return ( u(i.width) + u(i.paddingLeft) + u(i.paddingRight) + u(i.borderLeftWidth) + u(i.borderRightWidth) ); } function p(t, e) { return ( t.settings.minScrollbarLength && (e = Math.max(e, t.settings.minScrollbarLength)), t.settings.maxScrollbarLength && (e = Math.min(e, t.settings.maxScrollbarLength)), e ); } function b(t, i) { var r = { width: i.railXWidth }, l = Math.floor(t.scrollTop); i.isRtl ? (r.left = i.negativeScrollAdjustment + t.scrollLeft + i.containerWidth - i.contentWidth) : (r.left = t.scrollLeft), i.isScrollbarXUsingBottom ? (r.bottom = i.scrollbarXBottom - l) : (r.top = i.scrollbarXTop + l), e(i.scrollbarXRail, r); var n = { top: l, height: i.railYHeight }; i.isScrollbarYUsingRight ? i.isRtl ? (n.right = i.contentWidth - (i.negativeScrollAdjustment + t.scrollLeft) - i.scrollbarYRight - i.scrollbarYOuterWidth) : (n.right = i.scrollbarYRight - t.scrollLeft) : i.isRtl ? (n.left = i.negativeScrollAdjustment + t.scrollLeft + 2 * i.containerWidth - i.contentWidth - i.scrollbarYLeft - i.scrollbarYOuterWidth) : (n.left = i.scrollbarYLeft + t.scrollLeft), e(i.scrollbarYRail, n), e(i.scrollbarX, { left: i.scrollbarXLeft, width: i.scrollbarXWidth - i.railBorderXWidth }), e(i.scrollbarY, { top: i.scrollbarYTop, height: i.scrollbarYHeight - i.railBorderYWidth }); } function g(t, e) { function i(e) { (b[d] = g + Y * (e[a] - v)), o(t, f), R(t), e.stopPropagation(), e.preventDefault(); } function r() { s(t, f), t[p].classList.remove(m.state.clicking), t.event.unbind(t.ownerDocument, "mousemove", i); } var l = e[0], n = e[1], a = e[2], c = e[3], h = e[4], u = e[5], d = e[6], f = e[7], p = e[8], b = t.element, g = null, v = null, Y = null; t.event.bind(t[h], "mousedown", function(e) { (g = b[d]), (v = e[a]), (Y = (t[n] - t[l]) / (t[c] - t[u])), t.event.bind(t.ownerDocument, "mousemove", i), t.event.once(t.ownerDocument, "mouseup", r), t[p].classList.add(m.state.clicking), e.stopPropagation(), e.preventDefault(); }); } var v = "undefined" != typeof Element && (Element.prototype.matches || Element.prototype.webkitMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector), m = { main: "ps", element: { thumb: function(t) { return "ps__thumb-" + t; }, rail: function(t) { return "ps__rail-" + t; }, consuming: "ps__child--consume" }, state: { focus: "ps--focus", clicking: "ps--clicking", active: function(t) { return "ps--active-" + t; }, scrolling: function(t) { return "ps--scrolling-" + t; } } }, Y = { x: null, y: null }, X = function(t) { (this.element = t), (this.handlers = {}); }, w = { isEmpty: { configurable: !0 } }; (X.prototype.bind = function(t, e) { void 0 === this.handlers[t] && (this.handlers[t] = []), this.handlers[t].push(e), this.element.addEventListener(t, e, !1); }), (X.prototype.unbind = function(t, e) { var i = this; this.handlers[t] = this.handlers[t].filter(function(r) { return ( !(!e || r === e) || (i.element.removeEventListener(t, r, !1), !1) ); }); }), (X.prototype.unbindAll = function() { var t = this; for (var e in t.handlers) t.unbind(e); }), (w.isEmpty.get = function() { var t = this; return Object.keys(this.handlers).every(function(e) { return 0 === t.handlers[e].length; }); }), Object.defineProperties(X.prototype, w); var y = function() { this.eventElements = []; }; (y.prototype.eventElement = function(t) { var e = this.eventElements.filter(function(e) { return e.element === t; })[0]; return e || ((e = new X(t)), this.eventElements.push(e)), e; }), (y.prototype.bind = function(t, e, i) { this.eventElement(t).bind(e, i); }), (y.prototype.unbind = function(t, e, i) { var r = this.eventElement(t); r.unbind(e, i), r.isEmpty && this.eventElements.splice(this.eventElements.indexOf(r), 1); }), (y.prototype.unbindAll = function() { this.eventElements.forEach(function(t) { return t.unbindAll(); }), (this.eventElements = []); }), (y.prototype.once = function(t, e, i) { var r = this.eventElement(t), l = function(t) { r.unbind(e, l), i(t); }; r.bind(e, l); }); var W = function(t, e, i, r, l) { void 0 === r && (r = !0), void 0 === l && (l = !1); var n; if ("top" === e) n = [ "contentHeight", "containerHeight", "scrollTop", "y", "up", "down" ]; else { if ("left" !== e) throw new Error("A proper axis should be provided"); n = [ "contentWidth", "containerWidth", "scrollLeft", "x", "left", "right" ]; } h(t, i, n, r, l); }, L = { isWebKit: "undefined" != typeof document && "WebkitAppearance" in document.documentElement.style, supportsTouch: "undefined" != typeof window && ("ontouchstart" in window || (window.DocumentTouch && document instanceof window.DocumentTouch)), supportsIePointer: "undefined" != typeof navigator && navigator.msMaxTouchPoints, isChrome: "undefined" != typeof navigator && /Chrome/i.test(navigator && navigator.userAgent) }, R = function(t) { var e = t.element, i = Math.floor(e.scrollTop); (t.containerWidth = e.clientWidth), (t.containerHeight = e.clientHeight), (t.contentWidth = e.scrollWidth), (t.contentHeight = e.scrollHeight), e.contains(t.scrollbarXRail) || (n(e, m.element.rail("x")).forEach(function(t) { return l(t); }), e.appendChild(t.scrollbarXRail)), e.contains(t.scrollbarYRail) || (n(e, m.element.rail("y")).forEach(function(t) { return l(t); }), e.appendChild(t.scrollbarYRail)), !t.settings.suppressScrollX && t.containerWidth + t.settings.scrollXMarginOffset < t.contentWidth ? ((t.scrollbarXActive = !0), (t.railXWidth = t.containerWidth - t.railXMarginWidth), (t.railXRatio = t.containerWidth / t.railXWidth), (t.scrollbarXWidth = p( t, u((t.railXWidth * t.containerWidth) / t.contentWidth) )), (t.scrollbarXLeft = u( ((t.negativeScrollAdjustment + e.scrollLeft) * (t.railXWidth - t.scrollbarXWidth)) / (t.contentWidth - t.containerWidth) ))) : (t.scrollbarXActive = !1), !t.settings.suppressScrollY && t.containerHeight + t.settings.scrollYMarginOffset < t.contentHeight ? ((t.scrollbarYActive = !0), (t.railYHeight = t.containerHeight - t.railYMarginHeight), (t.railYRatio = t.containerHeight / t.railYHeight), (t.scrollbarYHeight = p( t, u((t.railYHeight * t.containerHeight) / t.contentHeight) )), (t.scrollbarYTop = u( (i * (t.railYHeight - t.scrollbarYHeight)) / (t.contentHeight - t.containerHeight) ))) : (t.scrollbarYActive = !1), t.scrollbarXLeft >= t.railXWidth - t.scrollbarXWidth && (t.scrollbarXLeft = t.railXWidth - t.scrollbarXWidth), t.scrollbarYTop >= t.railYHeight - t.scrollbarYHeight && (t.scrollbarYTop = t.railYHeight - t.scrollbarYHeight), b(e, t), t.scrollbarXActive ? e.classList.add(m.state.active("x")) : (e.classList.remove(m.state.active("x")), (t.scrollbarXWidth = 0), (t.scrollbarXLeft = 0), (e.scrollLeft = 0)), t.scrollbarYActive ? e.classList.add(m.state.active("y")) : (e.classList.remove(m.state.active("y")), (t.scrollbarYHeight = 0), (t.scrollbarYTop = 0), (e.scrollTop = 0)); }, T = { "click-rail": function(t) { t.event.bind(t.scrollbarY, "mousedown", function(t) { return t.stopPropagation(); }), t.event.bind(t.scrollbarYRail, "mousedown", function(e) { var i = e.pageY - window.pageYOffset - t.scrollbarYRail.getBoundingClientRect().top > t.scrollbarYTop ? 1 : -1; (t.element.scrollTop += i * t.containerHeight), R(t), e.stopPropagation(); }), t.event.bind(t.scrollbarX, "mousedown", function(t) { return t.stopPropagation(); }), t.event.bind(t.scrollbarXRail, "mousedown", function(e) { var i = e.pageX - window.pageXOffset - t.scrollbarXRail.getBoundingClientRect().left > t.scrollbarXLeft ? 1 : -1; (t.element.scrollLeft += i * t.containerWidth), R(t), e.stopPropagation(); }); }, "drag-thumb": function(t) { g(t, [ "containerWidth", "contentWidth", "pageX", "railXWidth", "scrollbarX", "scrollbarXWidth", "scrollLeft", "x", "scrollbarXRail" ]), g(t, [ "containerHeight", "contentHeight", "pageY", "railYHeight", "scrollbarY", "scrollbarYHeight", "scrollTop", "y", "scrollbarYRail" ]); }, keyboard: function(t) { function e(e, r) { var l = Math.floor(i.scrollTop); if (0 === e) { if (!t.scrollbarYActive) return !1; if ( (0 === l && r > 0) || (l >= t.contentHeight - t.containerHeight && r < 0) ) return !t.settings.wheelPropagation; } var n = i.scrollLeft; if (0 === r) { if (!t.scrollbarXActive) return !1; if ( (0 === n && e < 0) || (n >= t.contentWidth - t.containerWidth && e > 0) ) return !t.settings.wheelPropagation; } return !0; } var i = t.element, l = function() { return r(i, ":hover"); }, n = function() { return r(t.scrollbarX, ":focus") || r(t.scrollbarY, ":focus"); }; t.event.bind(t.ownerDocument, "keydown", function(r) { if ( !( (r.isDefaultPrevented && r.isDefaultPrevented()) || r.defaultPrevented ) && (l() || n()) ) { var o = document.activeElement ? document.activeElement : t.ownerDocument.activeElement; if (o) { if ("IFRAME" === o.tagName) o = o.contentDocument.activeElement; else for (; o.shadowRoot; ) o = o.shadowRoot.activeElement; if (d(o)) return; } var s = 0, a = 0; switch (r.which) { case 37: s = r.metaKey ? -t.contentWidth : r.altKey ? -t.containerWidth : -30; break; case 38: a = r.metaKey ? t.contentHeight : r.altKey ? t.containerHeight : 30; break; case 39: s = r.metaKey ? t.contentWidth : r.altKey ? t.containerWidth : 30; break; case 40: a = r.metaKey ? -t.contentHeight : r.altKey ? -t.containerHeight : -30; break; case 32: a = r.shiftKey ? t.containerHeight : -t.containerHeight; break; case 33: a = t.containerHeight; break; case 34: a = -t.containerHeight; break; case 36: a = t.contentHeight; break; case 35: a = -t.contentHeight; break; default: return; } (t.settings.suppressScrollX && 0 !== s) || (t.settings.suppressScrollY && 0 !== a) || ((i.scrollTop -= a), (i.scrollLeft += s), R(t), e(s, a) && r.preventDefault()); } }); }, wheel: function(e) { function i(t, i) { var r = Math.floor(o.scrollTop), l = 0 === o.scrollTop, n = r + o.offsetHeight === o.scrollHeight, s = 0 === o.scrollLeft, a = o.scrollLeft + o.offsetWidth === o.scrollWidth; return ( !(Math.abs(i) > Math.abs(t) ? l || n : s || a) || !e.settings.wheelPropagation ); } function r(t) { var e = t.deltaX, i = -1 * t.deltaY; return ( (void 0 !== e && void 0 !== i) || ((e = (-1 * t.wheelDeltaX) / 6), (i = t.wheelDeltaY / 6)), t.deltaMode && 1 === t.deltaMode && ((e *= 10), (i *= 10)), e !== e && i !== i && ((e = 0), (i = t.wheelDelta)), t.shiftKey ? [-i, -e] : [e, i] ); } function l(e, i, r) { if (!L.isWebKit && o.querySelector("select:focus")) return !0; if (!o.contains(e)) return !1; for (var l = e; l && l !== o; ) { if (l.classList.contains(m.element.consuming)) return !0; var n = t(l); if ( [n.overflow, n.overflowX, n.overflowY] .join("") .match(/(scroll|auto)/) ) { var s = l.scrollHeight - l.clientHeight; if ( s > 0 && !((0 === l.scrollTop && r > 0) || (l.scrollTop === s && r < 0)) ) return !0; var a = l.scrollWidth - l.clientWidth; if ( a > 0 && !( (0 === l.scrollLeft && i < 0) || (l.scrollLeft === a && i > 0) ) ) return !0; } l = l.parentNode; } return !1; } function n(t) { var n = r(t), s = n[0], a = n[1]; if (!l(t.target, s, a)) { var c = !1; e.settings.useBothWheelAxes ? e.scrollbarYActive && !e.scrollbarXActive ? (a ? (o.scrollTop -= a * e.settings.wheelSpeed) : (o.scrollTop += s * e.settings.wheelSpeed), (c = !0)) : e.scrollbarXActive && !e.scrollbarYActive && (s ? (o.scrollLeft += s * e.settings.wheelSpeed) : (o.scrollLeft -= a * e.settings.wheelSpeed), (c = !0)) : ((o.scrollTop -= a * e.settings.wheelSpeed), (o.scrollLeft += s * e.settings.wheelSpeed)), R(e), (c = c || i(s, a)) && !t.ctrlKey && (t.stopPropagation(), t.preventDefault()); } } var o = e.element; void 0 !== window.onwheel ? e.event.bind(o, "wheel", n) : void 0 !== window.onmousewheel && e.event.bind(o, "mousewheel", n); }, touch: function(e) { function i(t, i) { var r = Math.floor(h.scrollTop), l = h.scrollLeft, n = Math.abs(t), o = Math.abs(i); if (o > n) { if ( (i < 0 && r === e.contentHeight - e.containerHeight) || (i > 0 && 0 === r) ) return 0 === window.scrollY && i > 0 && L.isChrome; } else if ( n > o && ((t < 0 && l === e.contentWidth - e.containerWidth) || (t > 0 && 0 === l)) ) return !0; return !0; } function r(t, i) { (h.scrollTop -= i), (h.scrollLeft -= t), R(e); } function l(t) { return t.targetTouches ? t.targetTouches[0] : t; } function n(t) { return !( (t.pointerType && "pen" === t.pointerType && 0 === t.buttons) || ((!t.targetTouches || 1 !== t.targetTouches.length) && (!t.pointerType || "mouse" === t.pointerType || t.pointerType === t.MSPOINTER_TYPE_MOUSE)) ); } function o(t) { if (n(t)) { var e = l(t); (u.pageX = e.pageX), (u.pageY = e.pageY), (d = new Date().getTime()), null !== p && clearInterval(p); } } function s(e, i, r) { if (!h.contains(e)) return !1; for (var l = e; l && l !== h; ) { if (l.classList.contains(m.element.consuming)) return !0; var n = t(l); if ( [n.overflow, n.overflowX, n.overflowY] .join("") .match(/(scroll|auto)/) ) { var o = l.scrollHeight - l.clientHeight; if ( o > 0 && !((0 === l.scrollTop && r > 0) || (l.scrollTop === o && r < 0)) ) return !0; var s = l.scrollLeft - l.clientWidth; if ( s > 0 && !( (0 === l.scrollLeft && i < 0) || (l.scrollLeft === s && i > 0) ) ) return !0; } l = l.parentNode; } return !1; } function a(t) { if (n(t)) { var e = l(t), o = { pageX: e.pageX, pageY: e.pageY }, a = o.pageX - u.pageX, c = o.pageY - u.pageY; if (s(t.target, a, c)) return; r(a, c), (u = o); var h = new Date().getTime(), p = h - d; p > 0 && ((f.x = a / p), (f.y = c / p), (d = h)), i(a, c) && t.preventDefault(); } } function c() { e.settings.swipeEasing && (clearInterval(p), (p = setInterval(function() { e.isInitialized ? clearInterval(p) : f.x || f.y ? Math.abs(f.x) < 0.01 && Math.abs(f.y) < 0.01 ? clearInterval(p) : (r(30 * f.x, 30 * f.y), (f.x *= 0.8), (f.y *= 0.8)) : clearInterval(p); }, 10))); } if (L.supportsTouch || L.supportsIePointer) { var h = e.element, u = {}, d = 0, f = {}, p = null; L.supportsTouch ? (e.event.bind(h, "touchstart", o), e.event.bind(h, "touchmove", a), e.event.bind(h, "touchend", c)) : L.supportsIePointer && (window.PointerEvent ? (e.event.bind(h, "pointerdown", o), e.event.bind(h, "pointermove", a), e.event.bind(h, "pointerup", c)) : window.MSPointerEvent && (e.event.bind(h, "MSPointerDown", o), e.event.bind(h, "MSPointerMove", a), e.event.bind(h, "MSPointerUp", c))); } } }, H = function(r, l) { var n = this; if ( (void 0 === l && (l = {}), "string" == typeof r && (r = document.querySelector(r)), !r || !r.nodeName) ) throw new Error( "no element is specified to initialize PerfectScrollbar" ); (this.element = r), r.classList.add(m.main), (this.settings = { handlers: ["click-rail", "drag-thumb", "keyboard", "wheel", "touch"], maxScrollbarLength: null, minScrollbarLength: null, scrollingThreshold: 1e3, scrollXMarginOffset: 0, scrollYMarginOffset: 0, suppressScrollX: !1, suppressScrollY: !1, swipeEasing: !0, useBothWheelAxes: !1, wheelPropagation: !0, wheelSpeed: 1 }); for (var o in l) n.settings[o] = l[o]; (this.containerWidth = null), (this.containerHeight = null), (this.contentWidth = null), (this.contentHeight = null); var s = function() { return r.classList.add(m.state.focus); }, a = function() { return r.classList.remove(m.state.focus); }; (this.isRtl = "rtl" === t(r).direction), (this.isNegativeScroll = (function() { var t = r.scrollLeft, e = null; return ( (r.scrollLeft = -1), (e = r.scrollLeft < 0), (r.scrollLeft = t), e ); })()), (this.negativeScrollAdjustment = this.isNegativeScroll ? r.scrollWidth - r.clientWidth : 0), (this.event = new y()), (this.ownerDocument = r.ownerDocument || document), (this.scrollbarXRail = i(m.element.rail("x"))), r.appendChild(this.scrollbarXRail), (this.scrollbarX = i(m.element.thumb("x"))), this.scrollbarXRail.appendChild(this.scrollbarX), this.scrollbarX.setAttribute("tabindex", 0), this.event.bind(this.scrollbarX, "focus", s), this.event.bind(this.scrollbarX, "blur", a), (this.scrollbarXActive = null), (this.scrollbarXWidth = null), (this.scrollbarXLeft = null); var c = t(this.scrollbarXRail); (this.scrollbarXBottom = parseInt(c.bottom, 10)), isNaN(this.scrollbarXBottom) ? ((this.isScrollbarXUsingBottom = !1), (this.scrollbarXTop = u(c.top))) : (this.isScrollbarXUsingBottom = !0), (this.railBorderXWidth = u(c.borderLeftWidth) + u(c.borderRightWidth)), e(this.scrollbarXRail, { display: "block" }), (this.railXMarginWidth = u(c.marginLeft) + u(c.marginRight)), e(this.scrollbarXRail, { display: "" }), (this.railXWidth = null), (this.railXRatio = null), (this.scrollbarYRail = i(m.element.rail("y"))), r.appendChild(this.scrollbarYRail), (this.scrollbarY = i(m.element.thumb("y"))), this.scrollbarYRail.appendChild(this.scrollbarY), this.scrollbarY.setAttribute("tabindex", 0), this.event.bind(this.scrollbarY, "focus", s), this.event.bind(this.scrollbarY, "blur", a), (this.scrollbarYActive = null), (this.scrollbarYHeight = null), (this.scrollbarYTop = null); var h = t(this.scrollbarYRail); (this.scrollbarYRight = parseInt(h.right, 10)), isNaN(this.scrollbarYRight) ? ((this.isScrollbarYUsingRight = !1), (this.scrollbarYLeft = u(h.left))) : (this.isScrollbarYUsingRight = !0), (this.scrollbarYOuterWidth = this.isRtl ? f(this.scrollbarY) : null), (this.railBorderYWidth = u(h.borderTopWidth) + u(h.borderBottomWidth)), e(this.scrollbarYRail, { display: "block" }), (this.railYMarginHeight = u(h.marginTop) + u(h.marginBottom)), e(this.scrollbarYRail, { display: "" }), (this.railYHeight = null), (this.railYRatio = null), (this.reach = { x: r.scrollLeft <= 0 ? "start" : r.scrollLeft >= this.contentWidth - this.containerWidth ? "end" : null, y: r.scrollTop <= 0 ? "start" : r.scrollTop >= this.contentHeight - this.containerHeight ? "end" : null }), (this.isAlive = !0), this.settings.handlers.forEach(function(t) { return T[t](n); }), (this.lastScrollTop = Math.floor(r.scrollTop)), (this.lastScrollLeft = r.scrollLeft), this.event.bind(this.element, "scroll", function(t) { return n.onScroll(t); }), R(this); }; return ( (H.prototype.update = function() { this.isAlive && ((this.negativeScrollAdjustment = this.isNegativeScroll ? this.element.scrollWidth - this.element.clientWidth : 0), e(this.scrollbarXRail, { display: "block" }), e(this.scrollbarYRail, { display: "block" }), (this.railXMarginWidth = u(t(this.scrollbarXRail).marginLeft) + u(t(this.scrollbarXRail).marginRight)), (this.railYMarginHeight = u(t(this.scrollbarYRail).marginTop) + u(t(this.scrollbarYRail).marginBottom)), e(this.scrollbarXRail, { display: "none" }), e(this.scrollbarYRail, { display: "none" }), R(this), W(this, "top", 0, !1, !0), W(this, "left", 0, !1, !0), e(this.scrollbarXRail, { display: "" }), e(this.scrollbarYRail, { display: "" })); }), (H.prototype.onScroll = function(t) { this.isAlive && (R(this), W(this, "top", this.element.scrollTop - this.lastScrollTop), W(this, "left", this.element.scrollLeft - this.lastScrollLeft), (this.lastScrollTop = Math.floor(this.element.scrollTop)), (this.lastScrollLeft = this.element.scrollLeft)); }), (H.prototype.destroy = function() { this.isAlive && (this.event.unbindAll(), l(this.scrollbarX), l(this.scrollbarY), l(this.scrollbarXRail), l(this.scrollbarYRail), this.removePsClasses(), (this.element = null), (this.scrollbarX = null), (this.scrollbarY = null), (this.scrollbarXRail = null), (this.scrollbarYRail = null), (this.isAlive = !1)); }), (H.prototype.removePsClasses = function() { this.element.className = this.element.className .split(" ") .filter(function(t) { return !t.match(/^ps([-_].+|)$/); }) .join(" "); }), H ); });