From 6d6a9f72fa10483d8b0f915a54a55e0f2debea3d Mon Sep 17 00:00:00 2001
From: e-cloud
Date: Thu, 9 Apr 2015 00:03:44 +0800
Subject: [PATCH 01/32] ### basic 1. add umd wrapper to the plugin 2. improve
angular support (no test yet) 3. wrap the updateScrollbars function into IIEF
---
jquery.scrollbar.js | 159 ++++++++++++++++++++++++++------------------
1 file changed, 94 insertions(+), 65 deletions(-)
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index 53d095a..89946a5 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -11,10 +11,22 @@
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-;
-(function($, doc, win){
+
+// just use the umd declaration mode and remove the explicit global exports
+;(function(root, factory){
+ if(typeof define === 'function' && define.amd){
+ // AMD. Register as an anonymous module.
+ define(['jquery', 'angular'], factory);
+ } else {
+ factory(root.jQuery, root.angular, root, root.document);
+ }
+}(this, function($, angular, doc, win){
'use strict';
+ if(doc === undefined || win === undefined){
+ win = window;
+ doc = win.document;
+ }
// init flags & variables
var debug = false;
var lmb = 1, px = "px";
@@ -135,7 +147,6 @@
},
-
getScrollbar: function(d){
var scrollbar = this.options["scroll" + d];
@@ -187,7 +198,6 @@
},
-
init: function(options){
// init variables
@@ -608,70 +618,49 @@
*/
$.fn.scrollbar.options = defaults;
- /**
- * Extend AngularJS as UI directive
- *
- *
- */
- if(win.angular){
- (function(angular){
- var app = angular.module('jQueryScrollbar', []);
- app.directive('jqueryScrollbar', function(){
- return {
- "link": function(scope, element){
- element.scrollbar(scope.options).on('$destroy', function(){
- element.scrollbar('destroy');
- });
- },
- "restring": "AC",
- "scope": {
- "options": "=jqueryScrollbar"
- }
- };
- });
- })(win.angular);
- }
/**
* Check if scroll content/container size is changed
*/
- var timer = 0, timerCounter = 0;
- var updateScrollbars = function(force){
- var i, c, o, s, w, x, y;
- for( i = 0; i < browser.scrolls.length; i++){
- s = browser.scrolls[i];
- c = s.container;
- o = s.options;
- w = s.wrapper;
- x = s.scrollx;
- y = s.scrolly;
- if(force || (o.autoUpdate && w && w.is(":visible") &&
- (c.prop("scrollWidth") != x.size
- || c.prop("scrollHeight") != y.size
- || w.width() != x.visible
- || w.height() != y.visible
- ))){
- s.init();
-
- if(debug){
- browser.log({
- "scrollHeight": c.prop("scrollHeight") + ":" + s.scrolly.size,
- "scrollWidth": c.prop("scrollWidth") + ":" + s.scrollx.size,
- "visibleHeight": w.height() + ":" + s.scrolly.visible,
- "visibleWidth": w.width() + ":" + s.scrollx.visible
- }, true);
- timerCounter++;
+
+ var updateScrollbars = (function(){
+ var timer = 0,
+ timerCounter = 0;
+
+ return function(force){
+ var i, container, options, scroll, wrapper, scrollx, scrolly;
+ for (i = 0; i < browser.scrolls.length; i++){
+ scroll = browser.scrolls[i];
+ container = scroll.container;
+ options = scroll.options;
+ wrapper = scroll.wrapper;
+ scrollx = scroll.scrollx;
+ scrolly = scroll.scrolly;
+ if(force || (options.autoUpdate && wrapper && wrapper.is(":visible") &&
+ (container.prop("scrollWidth") != scrollx.size || container.prop("scrollHeight") != scrolly.size || wrapper.width() != scrollx.visible || wrapper.height() != scrolly.visible))){
+ scroll.init();
+
+ if(debug){
+ browser.log({
+ "scrollHeight": container.prop("scrollHeight") + ":" + scroll.scrolly.size,
+ "scrollWidth": container.prop("scrollWidth") + ":" + scroll.scrollx.size,
+ "visibleHeight": wrapper.height() + ":" + scroll.scrolly.visible,
+ "visibleWidth": wrapper.width() + ":" + scroll.scrollx.visible
+ }, true);
+ timerCounter++;
+ }
}
}
- }
- if(debug && timerCounter > 10){
- browser.log("Scroll updates exceed 10");
- updateScrollbars = function(){};
- } else {
- clearTimeout(timer);
- timer = setTimeout(updateScrollbars, 300);
- }
- };
+ if(debug && timerCounter > 10){
+ browser.log("Scroll updates exceed 10");
+ updateScrollbars = function(){
+ };
+ } else {
+ clearTimeout(timer);
+ timer = setTimeout(updateScrollbars, 300);
+ }
+ };
+ })();
/* ADDITIONAL FUNCTIONS */
/**
@@ -752,11 +741,51 @@
function isVerticalScroll(event){
var e = event.originalEvent;
- if (e.axis && e.axis === e.HORIZONTAL_AXIS)
+ if(e.axis && e.axis === e.HORIZONTAL_AXIS)
return false;
- if (e.wheelDeltaX)
+ if(e.wheelDeltaX)
return false;
return true;
}
-})(jQuery, document, window);
\ No newline at end of file
+
+ /**
+ * Extend AngularJS as UI directive
+ * and expose a provider for override default config
+ *
+ */
+ if(angular){
+ angular.module('jQueryScrollbar', [])
+ .provider('jQueryScrollbar', function(){
+ var defaultOptions = defaults;
+
+ return {
+ setOptions: function(options){
+ angular.extend(defaultOptions, options);
+ },
+ $get: function(){
+ return {
+ options: angular.copy(defaultOptions)
+ };
+ }
+ };
+ })
+ .directive('jqueryScrollbar', function(jQueryScrollbar){
+ return {
+ "restrict": "AC",
+ "link": function(scope, element, attrs){
+
+ var model = $parse(attrs.ngMyDirective),
+ options = model(scope);
+
+ element.scrollbar(options || jQueryScrollbar.options)
+ .on('$destroy', function(){
+ element.scrollbar('destroy');
+ });
+ }
+ };
+ });
+ }
+
+
+}));
\ No newline at end of file
From 35c04fbc6c387123240e0f22c810d9c9085b6afa Mon Sep 17 00:00:00 2001
From: e-cloud
Date: Thu, 9 Apr 2015 20:22:36 +0800
Subject: [PATCH 02/32] 1. fix argument order bug 2. remove angular dependency(
i have a test: angular always expose an object to window)
---
jquery.scrollbar.js | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index 89946a5..4c0ab92 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -16,14 +16,14 @@
;(function(root, factory){
if(typeof define === 'function' && define.amd){
// AMD. Register as an anonymous module.
- define(['jquery', 'angular'], factory);
+ define(['jquery'], factory);
} else {
- factory(root.jQuery, root.angular, root, root.document);
+ factory(root.jQuery, root, root.document);
}
-}(this, function($, angular, doc, win){
+}(this, function($, win, doc){
'use strict';
- if(doc === undefined || win === undefined){
+ if(win === undefined || doc === undefined){
win = window;
doc = win.document;
}
@@ -754,8 +754,9 @@
* and expose a provider for override default config
*
*/
- if(angular){
- angular.module('jQueryScrollbar', [])
+ if(win.angular){
+ (function(angular){
+ angular.module('jQueryScrollbar', [])
.provider('jQueryScrollbar', function(){
var defaultOptions = defaults;
@@ -770,12 +771,12 @@
}
};
})
- .directive('jqueryScrollbar', function(jQueryScrollbar){
+ .directive('jqueryScrollbar', function(jQueryScrollbar, $parse){
return {
"restrict": "AC",
"link": function(scope, element, attrs){
- var model = $parse(attrs.ngMyDirective),
+ var model = $parse(attrs.jqueryScrollbar),
options = model(scope);
element.scrollbar(options || jQueryScrollbar.options)
@@ -785,7 +786,7 @@
}
};
});
+ })(win.angular)
}
-
}));
\ No newline at end of file
From f87611bd14cb642d72dd93c15775bc4efb5ced72 Mon Sep 17 00:00:00 2001
From: Aaron Roberson
Date: Fri, 15 May 2015 09:47:16 -0700
Subject: [PATCH 03/32] Added npm package.json
---
package.json | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
create mode 100644 package.json
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..be36cc2
--- /dev/null
+++ b/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "jquery.scrollbar",
+ "version": "0.2.7",
+ "description": "Cross-browser CSS customizable scrollbar",
+ "main": "jquery.scrollbar.min.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/gromo/jquery.scrollbar.git"
+ },
+ "keywords": [
+ "jquery",
+ "scrollbar",
+ "angular",
+ "textarea"
+ ],
+ "author": "Yuriy Khabarov",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/gromo/jquery.scrollbar/issues"
+ },
+ "homepage": "https://github.com/gromo/jquery.scrollbar"
+}
From 622973b048176836e56f877bbbb44f34e65f99e7 Mon Sep 17 00:00:00 2001
From: Aaron Roberson
Date: Fri, 15 May 2015 10:08:03 -0700
Subject: [PATCH 04/32] Added angular module jQueryScrollbar to exports
---
index.js | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 index.js
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..68e57d8
--- /dev/null
+++ b/index.js
@@ -0,0 +1,3 @@
+require('./jquery.scrollbar');
+module.exports = 'jQueryScrollbar');
+
From 44ed5330596c9beda401c5265f1d160734ecfe0f Mon Sep 17 00:00:00 2001
From: Aaron Roberson
Date: Mon, 18 May 2015 11:35:54 -0700
Subject: [PATCH 05/32] Updated main to point to the new index.js for npm
Sorry about the second PR, but in order to take advantage of the module.exports the main in package.json needs to point to index.js
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index be36cc2..0717f54 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "jquery.scrollbar",
"version": "0.2.7",
"description": "Cross-browser CSS customizable scrollbar",
- "main": "jquery.scrollbar.min.js",
+ "main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
From b2dc0ede7837b52f6008d16944c835ed286c269a Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Wed, 22 Jul 2015 19:46:48 +0500
Subject: [PATCH 06/32] fix issue #50 when removed content does not update
container height
---
jquery.scrollbar.css | 4 +-
jquery.scrollbar.js | 533 +++++++++++++++++++---------------------
jquery.scrollbar.min.js | 8 +-
3 files changed, 258 insertions(+), 287 deletions(-)
diff --git a/jquery.scrollbar.css b/jquery.scrollbar.css
index be51fc1..492c2e3 100644
--- a/jquery.scrollbar.css
+++ b/jquery.scrollbar.css
@@ -9,10 +9,10 @@
.scroll-wrapper > .scroll-content {
border: none !important;
box-sizing: content-box !important;
- height: auto;
+ height: auto !important;
left: 0;
margin: 0;
- max-height: none !important;
+ max-height: none;
max-width: none !important;
overflow: scroll !important;
padding: 0;
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index 4c0ab92..eacd382 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -1,62 +1,39 @@
/**
* jQuery CSS Customizable Scrollbar
*
- * Copyright 2014, Yuriy Khabarov
+ * Copyright 2015, Yuriy Khabarov
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* If you found bug, please contact me via email <13real008@gmail.com>
*
* @author Yuriy Khabarov aka Gromo
- * @version 0.2.6
+ * @version 0.2.8
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-// just use the umd declaration mode and remove the explicit global exports
-;(function(root, factory){
- if(typeof define === 'function' && define.amd){
- // AMD. Register as an anonymous module.
+;
+(function (root, factory) {
+ if (typeof define === 'function' && define.amd) {
define(['jquery'], factory);
} else {
- factory(root.jQuery, root, root.document);
+ factory(root.jQuery);
}
-}(this, function($, win, doc){
+}(this, function ($) {
'use strict';
- if(win === undefined || doc === undefined){
- win = window;
- doc = win.document;
- }
// init flags & variables
var debug = false;
var lmb = 1, px = "px";
var browser = {
"data": {},
- "macosx": win.navigator.platform.toLowerCase().indexOf('mac') !== -1,
- "mobile": /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(win.navigator.userAgent),
+ "macosx": navigator.platform.toLowerCase().indexOf('mac') !== -1,
+ "mobile": /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),
"overlay": null,
"scroll": null,
"scrolls": [],
- "webkit": /WebKit/.test(win.navigator.userAgent),
-
- "log": debug ? function(data, toString){
- var output = data;
- if(toString && typeof data != "string"){
- output = [];
- $.each(data, function(i, v){
- output.push('"' + i + '": ' + v);
- });
- output = output.join(", ");
- }
- if(win.console && win.console.log){
- win.console.log(output);
- } else {
- alert(output);
- }
- } : function(){
-
- }
+ "webkit": /WebKit/.test(navigator.userAgent)
};
var defaults = {
@@ -70,7 +47,7 @@
"scrollStep": 30, // scroll step for scrollbar arrows
"showArrows": false, // add class to show arrows
"stepScrolling": true, // when scrolling to scrollbar mousedown position
- "type":"simple", // [advanced|simple] scrollbar html type
+ "type": "simple", // [advanced|simple] scrollbar html type
"scrollx": null, // horizontal scroll element
"scrolly": null, // vertical scroll element
@@ -82,19 +59,18 @@
};
- var customScrollbar = function(container, options){
+ var customScrollbar = function (container, options) {
- if(!browser.scroll){
- browser.log("Init jQuery Scrollbar v0.2.6");
+ if (!browser.scroll) {
browser.overlay = isScrollOverlaysContent();
browser.scroll = getBrowserScrollSize();
updateScrollbars();
- $(win).resize(function(){
+ $(window).resize(function () {
var forceUpdate = false;
- if(browser.scroll && (browser.scroll.height || browser.scroll.width)){
+ if (browser.scroll && (browser.scroll.height || browser.scroll.width)) {
var scroll = getBrowserScrollSize();
- if(scroll.height != browser.scroll.height || scroll.width != browser.scroll.width){
+ if (scroll.height != browser.scroll.height || scroll.width != browser.scroll.width) {
browser.scroll = scroll;
forceUpdate = true; // handle page zoom
}
@@ -104,7 +80,7 @@
}
this.container = container;
- this.options = $.extend({}, defaults, win.jQueryScrollbarOptions || {});
+ this.options = $.extend({}, defaults, window.jQueryScrollbarOptions || {});
this.scrollTo = null;
this.scrollx = {};
this.scrolly = {};
@@ -113,75 +89,71 @@
};
customScrollbar.prototype = {
+ destroy: function () {
- destroy: function(){
-
- if(!this.wrapper){
+ if (!this.wrapper) {
return;
}
// init variables
var scrollLeft = this.container.scrollLeft();
- var scrollTop = this.container.scrollTop();
+ var scrollTop = this.container.scrollTop();
this.container.insertBefore(this.wrapper).css({
- "height":"",
- "margin":""
+ "margin": "",
+ "max-height": ""
})
- .removeClass("scroll-content")
- .removeClass("scroll-scrollx_visible")
- .removeClass("scroll-scrolly_visible")
- .off(".scrollbar")
- .scrollLeft(scrollLeft)
- .scrollTop(scrollTop);
+ .removeClass("scroll-content")
+ .removeClass("scroll-scrollx_visible")
+ .removeClass("scroll-scrolly_visible")
+ .off(".scrollbar")
+ .scrollLeft(scrollLeft)
+ .scrollTop(scrollTop);
this.scrollx.scrollbar.removeClass("scroll-scrollx_visible").find("div").andSelf().off(".scrollbar");
this.scrolly.scrollbar.removeClass("scroll-scrolly_visible").find("div").andSelf().off(".scrollbar");
this.wrapper.remove();
- $(doc).add("body").off(".scrollbar");
+ $(document).add("body").off(".scrollbar");
- if($.isFunction(this.options.onDestroy))
+ if ($.isFunction(this.options.onDestroy))
this.options.onDestroy.apply(this, [this.container]);
},
-
-
- getScrollbar: function(d){
+ getScrollbar: function (d) {
var scrollbar = this.options["scroll" + d];
var html = {
"advanced":
- '' +
- '' +
- '' +
- '',
-
+ '' +
+ '' +
+ '' +
+ '',
"simple":
- ''
+ ''
};
var type = html[this.options.type] ? this.options.type : "advanced";
- if(scrollbar){
- if(typeof(scrollbar) == "string"){
+ if (scrollbar) {
+ if (typeof (scrollbar) == "string") {
scrollbar = $(scrollbar).appendTo(this.wrapper);
} else {
scrollbar = $(scrollbar);
@@ -190,15 +162,13 @@
scrollbar = $("").addClass("scroll-element").html(html[type]).appendTo(this.wrapper);
}
- if(this.options.showArrows){
+ if (this.options.showArrows) {
scrollbar.addClass("scroll-element_arrows_visible");
}
return scrollbar.addClass("scroll-" + d);
},
-
-
- init: function(options){
+ init: function (options) {
// init variables
var S = this;
@@ -219,31 +189,31 @@
// do not init if in ignorable browser
if ((browser.mobile && o.ignoreMobile)
- || (browser.overlay && o.ignoreOverlay)
- || (browser.macosx && !browser.webkit) // still required to ignore nonWebKit browsers on Mac
- ) {
+ || (browser.overlay && o.ignoreOverlay)
+ || (browser.macosx && !browser.webkit) // still required to ignore nonWebKit browsers on Mac
+ ) {
return false;
}
// init scroll container
- if(!w){
+ if (!w) {
this.wrapper = w = $('
').addClass('scroll-wrapper').addClass(c.attr('class'))
- .css('position', c.css('position') == 'absolute' ? 'absolute' : 'relative')
- .insertBefore(c).append(c);
+ .css('position', c.css('position') == 'absolute' ? 'absolute' : 'relative')
+ .insertBefore(c).append(c);
- if(c.is('textarea')){
+ if (c.is('textarea')) {
this.containerWrapper = cw = $('
').insertBefore(c).append(c);
w.addClass('scroll-textarea');
}
cw.addClass("scroll-content").css({
- "height":"",
"margin-bottom": browser.scroll.height * -1 + px,
- "margin-right": browser.scroll.width * -1 + px
+ "margin-right": browser.scroll.width * -1 + px,
+ "max-height": ""
});
- c.on("scroll.scrollbar", function(event){
- if($.isFunction(o.onScroll)){
+ c.on("scroll.scrollbar", function (event) {
+ if ($.isFunction(o.onScroll)) {
o.onScroll.call(S, {
"maxScroll": s.y.maxScrollOffset,
"scroll": c.scrollTop(),
@@ -257,27 +227,27 @@
});
}
s.x.isVisible && s.x.scroller.css("left", c.scrollLeft() * s.x.kx + px);
- s.y.isVisible && s.y.scroller.css("top", c.scrollTop() * s.y.kx + px);
+ s.y.isVisible && s.y.scroller.css("top", c.scrollTop() * s.y.kx + px);
});
/* prevent native scrollbars to be visible on #anchor click */
- w.on("scroll", function(){
+ w.on("scroll", function () {
w.scrollTop(0).scrollLeft(0);
});
- if(o.disableBodyScroll){
- var handleMouseScroll = function(event){
+ if (o.disableBodyScroll) {
+ var handleMouseScroll = function (event) {
isVerticalScroll(event) ?
- s.y.isVisible && s.y.mousewheel(event) :
- s.x.isVisible && s.x.mousewheel(event);
+ s.y.isVisible && s.y.mousewheel(event) :
+ s.x.isVisible && s.x.mousewheel(event);
};
w.on({
"MozMousePixelScroll.scrollbar": handleMouseScroll,
"mousewheel.scrollbar": handleMouseScroll
});
- if(browser.mobile){
- w.on("touchstart.scrollbar", function(event){
+ if (browser.mobile) {
+ w.on("touchstart.scrollbar", function (event) {
var touch = event.originalEvent.touches && event.originalEvent.touches[0] || event;
var originalTouch = {
"pageX": touch.pageX,
@@ -287,61 +257,61 @@
"left": c.scrollLeft(),
"top": c.scrollTop()
};
- $(doc).on({
- "touchmove.scrollbar": function(event){
+ $(document).on({
+ "touchmove.scrollbar": function (event) {
var touch = event.originalEvent.targetTouches && event.originalEvent.targetTouches[0] || event;
c.scrollLeft(originalScroll.left + originalTouch.pageX - touch.pageX);
c.scrollTop(originalScroll.top + originalTouch.pageY - touch.pageY);
event.preventDefault();
},
- "touchend.scrollbar": function(){
- $(doc).off(".scrollbar");
+ "touchend.scrollbar": function () {
+ $(document).off(".scrollbar");
}
});
});
}
}
- if($.isFunction(o.onInit))
+ if ($.isFunction(o.onInit))
o.onInit.apply(this, [c]);
} else {
cw.css({
- "height":"",
"margin-bottom": browser.scroll.height * -1 + px,
- "margin-right": browser.scroll.width * -1 + px
+ "margin-right": browser.scroll.width * -1 + px,
+ "max-height": ""
});
}
// init scrollbars & recalculate sizes
- $.each(s, function(d, scrollx){
+ $.each(s, function (d, scrollx) {
var scrollCallback = null;
var scrollForward = 1;
var scrollOffset = (d == "x") ? "scrollLeft" : "scrollTop";
var scrollStep = o.scrollStep;
- var scrollTo = function(){
+ var scrollTo = function () {
var currentOffset = c[scrollOffset]();
c[scrollOffset](currentOffset + scrollStep);
- if(scrollForward == 1 && (currentOffset + scrollStep) >= scrollToValue)
+ if (scrollForward == 1 && (currentOffset + scrollStep) >= scrollToValue)
currentOffset = c[scrollOffset]();
- if(scrollForward == -1 && (currentOffset + scrollStep) <= scrollToValue)
+ if (scrollForward == -1 && (currentOffset + scrollStep) <= scrollToValue)
currentOffset = c[scrollOffset]();
- if(c[scrollOffset]() == currentOffset && scrollCallback){
+ if (c[scrollOffset]() == currentOffset && scrollCallback) {
scrollCallback();
}
}
var scrollToValue = 0;
- if(!scrollx.scrollbar){
+ if (!scrollx.scrollbar) {
scrollx.scrollbar = S.getScrollbar(d);
scrollx.scroller = scrollx.scrollbar.find(".scroll-bar");
- scrollx.mousewheel = function(event){
+ scrollx.mousewheel = function (event) {
- if(!scrollx.isVisible || (d == 'x' && isVerticalScroll(event))){
+ if (!scrollx.isVisible || (d == 'x' && isVerticalScroll(event))) {
return true;
}
- if(d == 'y' && !isVerticalScroll(event)){
+ if (d == 'y' && !isVerticalScroll(event)) {
s.x.mousewheel(event);
return true;
}
@@ -349,18 +319,18 @@
var delta = event.originalEvent.wheelDelta * -1 || event.originalEvent.detail;
var maxScrollValue = scrollx.size - scrollx.visible - scrollx.offset;
- if(!((scrollToValue <= 0 && delta < 0) || (scrollToValue >= maxScrollValue && delta > 0))){
+ if (!((scrollToValue <= 0 && delta < 0) || (scrollToValue >= maxScrollValue && delta > 0))) {
scrollToValue = scrollToValue + delta;
- if(scrollToValue < 0)
+ if (scrollToValue < 0)
scrollToValue = 0;
- if(scrollToValue > maxScrollValue)
+ if (scrollToValue > maxScrollValue)
scrollToValue = maxScrollValue;
S.scrollTo = S.scrollTo || {};
S.scrollTo[scrollOffset] = scrollToValue;
- setTimeout(function(){
- if(S.scrollTo){
- c.stop().animate(S.scrollTo, 240, 'linear', function(){
+ setTimeout(function () {
+ if (S.scrollTo) {
+ c.stop().animate(S.scrollTo, 240, 'linear', function () {
scrollToValue = c[scrollOffset]();
});
S.scrollTo = null;
@@ -375,85 +345,85 @@
scrollx.scrollbar.on({
"MozMousePixelScroll.scrollbar": scrollx.mousewheel,
"mousewheel.scrollbar": scrollx.mousewheel,
- "mouseenter.scrollbar": function(){
+ "mouseenter.scrollbar": function () {
scrollToValue = c[scrollOffset]();
}
});
// handle arrows & scroll inner mousedown event
scrollx.scrollbar.find(".scroll-arrow, .scroll-element_track")
- .on("mousedown.scrollbar", function(event){
+ .on("mousedown.scrollbar", function (event) {
- if(event.which != lmb)
- return true;
-
- scrollForward = 1;
-
- var data = {
- "eventOffset": event[(d == "x") ? "pageX" : "pageY"],
- "maxScrollValue": scrollx.size - scrollx.visible - scrollx.offset,
- "scrollbarOffset": scrollx.scroller.offset()[(d == "x") ? "left" : "top"],
- "scrollbarSize": scrollx.scroller[(d == "x") ? "outerWidth" : "outerHeight"]()
- };
- var timeout = 0, timer = 0;
-
- if($(this).hasClass('scroll-arrow')){
- scrollForward = $(this).hasClass("scroll-arrow_more") ? 1 : -1;
- scrollStep = o.scrollStep * scrollForward;
- scrollToValue = scrollForward > 0 ? data.maxScrollValue : 0;
- } else {
- scrollForward = (data.eventOffset > (data.scrollbarOffset + data.scrollbarSize) ? 1
- : (data.eventOffset < data.scrollbarOffset ? -1 : 0));
- scrollStep = Math.round(scrollx.visible * 0.75) * scrollForward;
- scrollToValue = (data.eventOffset - data.scrollbarOffset -
- (o.stepScrolling ? (scrollForward == 1 ? data.scrollbarSize : 0)
- : Math.round(data.scrollbarSize / 2)));
- scrollToValue = c[scrollOffset]() + (scrollToValue / scrollx.kx);
- }
+ if (event.which != lmb)
+ return true;
- S.scrollTo = S.scrollTo || {};
- S.scrollTo[scrollOffset] = o.stepScrolling ? c[scrollOffset]() + scrollStep : scrollToValue;
+ scrollForward = 1;
- if(o.stepScrolling){
- scrollCallback = function(){
- scrollToValue = c[scrollOffset]();
- clearInterval(timer);
- clearTimeout(timeout);
- timeout = 0;
- timer = 0;
+ var data = {
+ "eventOffset": event[(d == "x") ? "pageX" : "pageY"],
+ "maxScrollValue": scrollx.size - scrollx.visible - scrollx.offset,
+ "scrollbarOffset": scrollx.scroller.offset()[(d == "x") ? "left" : "top"],
+ "scrollbarSize": scrollx.scroller[(d == "x") ? "outerWidth" : "outerHeight"]()
};
- timeout = setTimeout(function(){
- timer = setInterval(scrollTo, 40);
- }, o.duration + 100);
- }
+ var timeout = 0, timer = 0;
+
+ if ($(this).hasClass('scroll-arrow')) {
+ scrollForward = $(this).hasClass("scroll-arrow_more") ? 1 : -1;
+ scrollStep = o.scrollStep * scrollForward;
+ scrollToValue = scrollForward > 0 ? data.maxScrollValue : 0;
+ } else {
+ scrollForward = (data.eventOffset > (data.scrollbarOffset + data.scrollbarSize) ? 1
+ : (data.eventOffset < data.scrollbarOffset ? -1 : 0));
+ scrollStep = Math.round(scrollx.visible * 0.75) * scrollForward;
+ scrollToValue = (data.eventOffset - data.scrollbarOffset -
+ (o.stepScrolling ? (scrollForward == 1 ? data.scrollbarSize : 0)
+ : Math.round(data.scrollbarSize / 2)));
+ scrollToValue = c[scrollOffset]() + (scrollToValue / scrollx.kx);
+ }
- setTimeout(function(){
- if(S.scrollTo){
- c.animate(S.scrollTo, o.duration);
- S.scrollTo = null;
+ S.scrollTo = S.scrollTo || {};
+ S.scrollTo[scrollOffset] = o.stepScrolling ? c[scrollOffset]() + scrollStep : scrollToValue;
+
+ if (o.stepScrolling) {
+ scrollCallback = function () {
+ scrollToValue = c[scrollOffset]();
+ clearInterval(timer);
+ clearTimeout(timeout);
+ timeout = 0;
+ timer = 0;
+ };
+ timeout = setTimeout(function () {
+ timer = setInterval(scrollTo, 40);
+ }, o.duration + 100);
}
- }, 1);
- return handleMouseDown(scrollCallback, event);
- });
+ setTimeout(function () {
+ if (S.scrollTo) {
+ c.animate(S.scrollTo, o.duration);
+ S.scrollTo = null;
+ }
+ }, 1);
+
+ return handleMouseDown(scrollCallback, event);
+ });
// handle scrollbar drag'n'drop
- scrollx.scroller.on("mousedown.scrollbar", function(event){
+ scrollx.scroller.on("mousedown.scrollbar", function (event) {
- if(event.which != lmb)
+ if (event.which != lmb)
return true;
- var eventPosition = event[(d == "x")? "pageX" : "pageY"];
+ var eventPosition = event[(d == "x") ? "pageX" : "pageY"];
var initOffset = c[scrollOffset]();
scrollx.scrollbar.addClass("scroll-draggable");
- $(doc).on("mousemove.scrollbar", function(event){
- var diff = parseInt((event[(d == "x")? "pageX" : "pageY"] - eventPosition) / scrollx.kx, 10);
+ $(document).on("mousemove.scrollbar", function (event) {
+ var diff = parseInt((event[(d == "x") ? "pageX" : "pageY"] - eventPosition) / scrollx.kx, 10);
c[scrollOffset](initOffset + diff);
});
- return handleMouseDown(function(){
+ return handleMouseDown(function () {
scrollx.scrollbar.removeClass("scroll-draggable");
scrollToValue = c[scrollOffset]();
}, event);
@@ -462,7 +432,7 @@
});
// remove classes & reset applied styles
- $.each(s, function(d, scrollx){
+ $.each(s, function (d, scrollx) {
var scrollClass = "scroll-scroll" + d + "_visible";
var scrolly = (d == "x") ? s.y : s.x;
@@ -472,7 +442,7 @@
});
// calculate init sizes
- $.each(s, function(d, scrollx){
+ $.each(s, function (d, scrollx) {
$.extend(scrollx, (d == "x") ? {
"offset": parseInt(c.css("left"), 10) || 0,
"size": c.prop("scrollWidth"),
@@ -485,7 +455,7 @@
});
- var updateScroll = function(d, scrollx){
+ var updateScroll = function (d, scrollx) {
var scrollClass = "scroll-scroll" + d + "_visible";
var scrolly = (d == "x") ? s.y : s.x;
@@ -495,7 +465,7 @@
var AreaVisible = scrollx.visible + offset;
scrollx.isVisible = (AreaSize - AreaVisible) > 1; // bug in IE9/11 with 1px diff
- if(scrollx.isVisible){
+ if (scrollx.isVisible) {
scrollx.scrollbar.addClass(scrollClass);
scrolly.scrollbar.addClass(scrollClass);
cw.addClass(scrollClass);
@@ -505,18 +475,18 @@
cw.removeClass(scrollClass);
}
- if(d == "y" && (scrollx.isVisible || scrollx.size < scrollx.visible)){
- cw.css("height", (AreaVisible + browser.scroll.height) + px);
+ if (d == "y" && (scrollx.isVisible || scrollx.size < scrollx.visible)) {
+ cw.css("max-height", (AreaVisible + browser.scroll.height) + px);
}
- if(s.x.size != c.prop("scrollWidth")
+ if (s.x.size != c.prop("scrollWidth")
|| s.y.size != c.prop("scrollHeight")
|| s.x.visible != w.width()
|| s.y.visible != w.height()
- || s.x.offset != (parseInt(c.css("left"), 10) || 0)
- || s.y.offset != (parseInt(c.css("top"), 10) || 0)
- ){
- $.each(s, function(d, scrollx){
+ || s.x.offset != (parseInt(c.css("left"), 10) || 0)
+ || s.y.offset != (parseInt(c.css("top"), 10) || 0)
+ ) {
+ $.each(s, function (d, scrollx) {
$.extend(scrollx, (d == "x") ? {
"offset": parseInt(c.css("left"), 10) || 0,
"size": c.prop("scrollWidth"),
@@ -532,11 +502,11 @@
};
$.each(s, updateScroll);
- if($.isFunction(o.onUpdate))
+ if ($.isFunction(o.onUpdate))
o.onUpdate.apply(this, [c]);
// calculate scroll size
- $.each(s, function(d, scrollx){
+ $.each(s, function (d, scrollx) {
var cssOffset = (d == "x") ? "left" : "top";
var cssFullSize = (d == "x") ? "outerWidth" : "outerHeight";
@@ -549,7 +519,7 @@
var scrollSize = scrollx.scrollbar.find(".scroll-element_size");
scrollSize = scrollSize[cssFullSize]() + (parseInt(scrollSize.css(cssOffset), 10) || 0);
- if(o.autoScrollSize){
+ if (o.autoScrollSize) {
scrollx.scrollbarSize = parseInt(scrollSize * AreaVisible / AreaSize, 10);
scrollx.scroller.css(cssSize, scrollx.scrollbarSize + px);
}
@@ -569,25 +539,25 @@
* @param {object|string} options or command to execute
* @param {object|array} args additional arguments as array []
*/
- $.fn.scrollbar = function(options, args){
+ $.fn.scrollbar = function (options, args) {
var toReturn = this;
- if(options === "get")
+ if (options === "get")
toReturn = null;
- this.each(function() {
+ this.each(function () {
var container = $(this);
- if(container.hasClass("scroll-wrapper")
- || container.get(0).nodeName == "body"){
+ if (container.hasClass("scroll-wrapper")
+ || container.get(0).nodeName == "body") {
return true;
}
var instance = container.data("scrollbar");
- if(instance){
- if(options === "get"){
+ if (instance) {
+ if (options === "get") {
toReturn = instance;
return false;
}
@@ -595,13 +565,13 @@
var func = (typeof options == "string" && instance[options]) ? options : "init";
instance[func].apply(instance, $.isArray(args) ? args : []);
- if(options === "destroy"){
+ if (options === "destroy") {
container.removeData("scrollbar");
- while($.inArray(instance, browser.scrolls) >= 0)
+ while ($.inArray(instance, browser.scrolls) >= 0)
browser.scrolls.splice($.inArray(instance, browser.scrolls), 1);
}
} else {
- if(typeof options != "string"){
+ if (typeof options != "string") {
instance = new customScrollbar(container, options);
container.data("scrollbar", instance);
browser.scrolls.push(instance);
@@ -623,37 +593,37 @@
* Check if scroll content/container size is changed
*/
- var updateScrollbars = (function(){
- var timer = 0,
+ var updateScrollbars = (function () {
+ var timer = 0,
timerCounter = 0;
- return function(force){
+ return function (force) {
var i, container, options, scroll, wrapper, scrollx, scrolly;
- for (i = 0; i < browser.scrolls.length; i++){
- scroll = browser.scrolls[i];
+ for (i = 0; i < browser.scrolls.length; i++) {
+ scroll = browser.scrolls[i];
container = scroll.container;
- options = scroll.options;
- wrapper = scroll.wrapper;
- scrollx = scroll.scrollx;
- scrolly = scroll.scrolly;
- if(force || (options.autoUpdate && wrapper && wrapper.is(":visible") &&
- (container.prop("scrollWidth") != scrollx.size || container.prop("scrollHeight") != scrolly.size || wrapper.width() != scrollx.visible || wrapper.height() != scrolly.visible))){
+ options = scroll.options;
+ wrapper = scroll.wrapper;
+ scrollx = scroll.scrollx;
+ scrolly = scroll.scrolly;
+ if (force || (options.autoUpdate && wrapper && wrapper.is(":visible") &&
+ (container.prop("scrollWidth") != scrollx.size || container.prop("scrollHeight") != scrolly.size || wrapper.width() != scrollx.visible || wrapper.height() != scrolly.visible))) {
scroll.init();
- if(debug){
- browser.log({
- "scrollHeight": container.prop("scrollHeight") + ":" + scroll.scrolly.size,
- "scrollWidth": container.prop("scrollWidth") + ":" + scroll.scrollx.size,
+ if (debug) {
+ window.console && console.log({
+ "scrollHeight": container.prop("scrollHeight") + ":" + scroll.scrolly.size,
+ "scrollWidth": container.prop("scrollWidth") + ":" + scroll.scrollx.size,
"visibleHeight": wrapper.height() + ":" + scroll.scrolly.visible,
- "visibleWidth": wrapper.width() + ":" + scroll.scrollx.visible
+ "visibleWidth": wrapper.width() + ":" + scroll.scrollx.visible
}, true);
timerCounter++;
}
}
}
- if(debug && timerCounter > 10){
- browser.log("Scroll updates exceed 10");
- updateScrollbars = function(){
+ if (debug && timerCounter > 10) {
+ window.console && console.log("Scroll updates exceed 10");
+ updateScrollbars = function () {
};
} else {
clearTimeout(timer);
@@ -669,30 +639,30 @@
* @param {Boolean} actual size or CSS size, default - CSS size
* @returns {Object} with height, width
*/
- function getBrowserScrollSize(actualSize){
+ function getBrowserScrollSize(actualSize) {
- if(browser.webkit && !actualSize){
+ if (browser.webkit && !actualSize) {
return {
"height": 0,
"width": 0
};
}
- if(!browser.data.outer){
+ if (!browser.data.outer) {
var css = {
- "border": "none",
+ "border": "none",
"box-sizing": "content-box",
- "height": "200px",
- "margin": "0",
+ "height": "200px",
+ "margin": "0",
"padding": "0",
- "width": "200px"
+ "width": "200px"
};
browser.data.inner = $("
").css($.extend({}, css));
browser.data.outer = $("
").css($.extend({
- "left": "-1000px",
- "overflow": "scroll",
- "position": "absolute",
- "top": "-1000px"
+ "left": "-1000px",
+ "overflow": "scroll",
+ "position": "absolute",
+ "top": "-1000px"
}, css)).append(browser.data.inner).appendTo("body");
}
@@ -704,23 +674,23 @@
};
}
- function handleMouseDown(callback, event){
- $(doc).on({
- "blur.scrollbar": function(){
- $(doc).add('body').off('.scrollbar');
+ function handleMouseDown(callback, event) {
+ $(document).on({
+ "blur.scrollbar": function () {
+ $(document).add('body').off('.scrollbar');
callback && callback();
},
- "dragstart.scrollbar": function(event){
+ "dragstart.scrollbar": function (event) {
event.preventDefault();
return false;
},
- "mouseup.scrollbar": function(){
- $(doc).add('body').off('.scrollbar');
+ "mouseup.scrollbar": function () {
+ $(document).add('body').off('.scrollbar');
callback && callback();
}
});
$("body").on({
- "selectstart.scrollbar": function(event){
+ "selectstart.scrollbar": function (event) {
event.preventDefault();
return false;
}
@@ -734,16 +704,16 @@
*
* @returns {Boolean}
*/
- function isScrollOverlaysContent(){
+ function isScrollOverlaysContent() {
var scrollSize = getBrowserScrollSize(true);
return !(scrollSize.height || scrollSize.width);
}
- function isVerticalScroll(event){
+ function isVerticalScroll(event) {
var e = event.originalEvent;
- if(e.axis && e.axis === e.HORIZONTAL_AXIS)
+ if (e.axis && e.axis === e.HORIZONTAL_AXIS)
return false;
- if(e.wheelDeltaX)
+ if (e.wheelDeltaX)
return false;
return true;
}
@@ -754,39 +724,38 @@
* and expose a provider for override default config
*
*/
- if(win.angular){
- (function(angular){
+ if (window.angular) {
+ (function (angular) {
angular.module('jQueryScrollbar', [])
- .provider('jQueryScrollbar', function(){
- var defaultOptions = defaults;
-
- return {
- setOptions: function(options){
- angular.extend(defaultOptions, options);
- },
- $get: function(){
- return {
- options: angular.copy(defaultOptions)
- };
- }
- };
- })
- .directive('jqueryScrollbar', function(jQueryScrollbar, $parse){
- return {
- "restrict": "AC",
- "link": function(scope, element, attrs){
-
- var model = $parse(attrs.jqueryScrollbar),
- options = model(scope);
-
- element.scrollbar(options || jQueryScrollbar.options)
- .on('$destroy', function(){
- element.scrollbar('destroy');
- });
- }
- };
- });
- })(win.angular)
+ .provider('jQueryScrollbar', function () {
+ var defaultOptions = defaults;
+
+ return {
+ setOptions: function (options) {
+ angular.extend(defaultOptions, options);
+ },
+ $get: function () {
+ return {
+ options: angular.copy(defaultOptions)
+ };
+ }
+ };
+ })
+ .directive('jqueryScrollbar', function (jQueryScrollbar, $parse) {
+ return {
+ "restrict": "AC",
+ "link": function (scope, element, attrs) {
+
+ var model = $parse(attrs.jqueryScrollbar),
+ options = model(scope);
+
+ element.scrollbar(options || jQueryScrollbar.options)
+ .on('$destroy', function () {
+ element.scrollbar('destroy');
+ });
+ }
+ };
+ });
+ })(window.angular);
}
-
}));
\ No newline at end of file
diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js
index 5d1d89e..134bdb4 100644
--- a/jquery.scrollbar.min.js
+++ b/jquery.scrollbar.min.js
@@ -1,14 +1,16 @@
/**
* jQuery CSS Customizable Scrollbar
*
- * Copyright 2014, Yuriy Khabarov
+ * Copyright 2015, Yuriy Khabarov
* Dual licensed under the MIT or GPL Version 2 licenses.
*
* If you found bug, please contact me via email <13real008@gmail.com>
*
+ * Compressed by http://jscompress.com/
+ *
* @author Yuriy Khabarov aka Gromo
- * @version 0.2.6
+ * @version 0.2.8
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-(function(e,t,n){"use strict";function h(t){if(o.webkit&&!t){return{height:0,width:0}}if(!o.data.outer){var n={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};o.data.inner=e("
").css(e.extend({},n));o.data.outer=e("
").css(e.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},n)).append(o.data.inner).appendTo("body")}o.data.outer.scrollLeft(1e3).scrollTop(1e3);return{height:Math.ceil(o.data.outer.offset().top-o.data.inner.offset().top||0),width:Math.ceil(o.data.outer.offset().left-o.data.inner.offset().left||0)}}function p(n,r){e(t).on({"blur.scrollbar":function(){e(t).add("body").off(".scrollbar");n&&n()},"dragstart.scrollbar":function(e){e.preventDefault();return false},"mouseup.scrollbar":function(){e(t).add("body").off(".scrollbar");n&&n()}});e("body").on({"selectstart.scrollbar":function(e){e.preventDefault();return false}});r&&r.preventDefault();return false}function d(){var e=h(true);return!(e.height||e.width)}function v(e){var t=e.originalEvent;if(t.axis&&t.axis===t.HORIZONTAL_AXIS)return false;if(t.wheelDeltaX)return false;return true}var r=false;var i=1,s="px";var o={data:{},macosx:n.navigator.platform.toLowerCase().indexOf("mac")!==-1,mobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(n.navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/WebKit/.test(n.navigator.userAgent),log:r?function(t,r){var i=t;if(r&&typeof t!="string"){i=[];e.each(t,function(e,t){i.push('"'+e+'": '+t)});i=i.join(", ")}if(n.console&&n.console.log){n.console.log(i)}else{alert(i)}}:function(){}};var u={autoScrollSize:true,autoUpdate:true,debug:false,disableBodyScroll:false,duration:200,ignoreMobile:true,ignoreOverlay:true,scrollStep:30,showArrows:false,stepScrolling:true,type:"simple",scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null};var a=function(t,r){if(!o.scroll){o.log("Init jQuery Scrollbar v0.2.6");o.overlay=d();o.scroll=h();c();e(n).resize(function(){var e=false;if(o.scroll&&(o.scroll.height||o.scroll.width)){var t=h();if(t.height!=o.scroll.height||t.width!=o.scroll.width){o.scroll=t;e=true}}c(e)})}this.container=t;this.options=e.extend({},u,n.jQueryScrollbarOptions||{});this.scrollTo=null;this.scrollx={};this.scrolly={};this.init(r)};a.prototype={destroy:function(){if(!this.wrapper){return}var n=this.container.scrollLeft();var r=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:""}).removeClass("scroll-content").removeClass("scroll-scrollx_visible").removeClass("scroll-scrolly_visible").off(".scrollbar").scrollLeft(n).scrollTop(r);this.scrollx.scrollbar.removeClass("scroll-scrollx_visible").find("div").andSelf().off(".scrollbar");this.scrolly.scrollbar.removeClass("scroll-scrolly_visible").find("div").andSelf().off(".scrollbar");this.wrapper.remove();e(t).add("body").off(".scrollbar");if(e.isFunction(this.options.onDestroy))this.options.onDestroy.apply(this,[this.container])},getScrollbar:function(t){var n=this.options["scroll"+t];var r={advanced:'
'+'
'+'
'+'
",simple:'
"};var i=r[this.options.type]?this.options.type:"advanced";if(n){if(typeof n=="string"){n=e(n).appendTo(this.wrapper)}else{n=e(n)}}else{n=e("
").addClass("scroll-element").html(r[i]).appendTo(this.wrapper)}if(this.options.showArrows){n.addClass("scroll-element_arrows_visible")}return n.addClass("scroll-"+t)},init:function(n){var r=this;var u=this.container;var a=this.containerWrapper||u;var f=e.extend(this.options,n||{});var l={x:this.scrollx,y:this.scrolly};var c=this.wrapper;var h={scrollLeft:u.scrollLeft(),scrollTop:u.scrollTop()};if(o.mobile&&f.ignoreMobile||o.overlay&&f.ignoreOverlay||o.macosx&&!o.webkit){return false}if(!c){this.wrapper=c=e("
").addClass("scroll-wrapper").addClass(u.attr("class")).css("position",u.css("position")=="absolute"?"absolute":"relative").insertBefore(u).append(u);if(u.is("textarea")){this.containerWrapper=a=e("
").insertBefore(u).append(u);c.addClass("scroll-textarea")}a.addClass("scroll-content").css({height:"","margin-bottom":o.scroll.height*-1+s,"margin-right":o.scroll.width*-1+s});u.on("scroll.scrollbar",function(t){if(e.isFunction(f.onScroll)){f.onScroll.call(r,{maxScroll:l.y.maxScrollOffset,scroll:u.scrollTop(),size:l.y.size,visible:l.y.visible},{maxScroll:l.x.maxScrollOffset,scroll:u.scrollLeft(),size:l.x.size,visible:l.x.visible})}l.x.isVisible&&l.x.scroller.css("left",u.scrollLeft()*l.x.kx+s);l.y.isVisible&&l.y.scroller.css("top",u.scrollTop()*l.y.kx+s)});c.on("scroll",function(){c.scrollTop(0).scrollLeft(0)});if(f.disableBodyScroll){var d=function(e){v(e)?l.y.isVisible&&l.y.mousewheel(e):l.x.isVisible&&l.x.mousewheel(e)};c.on({"MozMousePixelScroll.scrollbar":d,"mousewheel.scrollbar":d});if(o.mobile){c.on("touchstart.scrollbar",function(n){var r=n.originalEvent.touches&&n.originalEvent.touches[0]||n;var i={pageX:r.pageX,pageY:r.pageY};var s={left:u.scrollLeft(),top:u.scrollTop()};e(t).on({"touchmove.scrollbar":function(e){var t=e.originalEvent.targetTouches&&e.originalEvent.targetTouches[0]||e;u.scrollLeft(s.left+i.pageX-t.pageX);u.scrollTop(s.top+i.pageY-t.pageY);e.preventDefault()},"touchend.scrollbar":function(){e(t).off(".scrollbar")}})})}}if(e.isFunction(f.onInit))f.onInit.apply(this,[u])}else{a.css({height:"","margin-bottom":o.scroll.height*-1+s,"margin-right":o.scroll.width*-1+s})}e.each(l,function(n,s){var o=null;var a=1;var c=n=="x"?"scrollLeft":"scrollTop";var h=f.scrollStep;var d=function(){var e=u[c]();u[c](e+h);if(a==1&&e+h>=m)e=u[c]();if(a==-1&&e+h<=m)e=u[c]();if(u[c]()==e&&o){o()}};var m=0;if(!s.scrollbar){s.scrollbar=r.getScrollbar(n);s.scroller=s.scrollbar.find(".scroll-bar");s.mousewheel=function(e){if(!s.isVisible||n=="x"&&v(e)){return true}if(n=="y"&&!v(e)){l.x.mousewheel(e);return true}var t=e.originalEvent.wheelDelta*-1||e.originalEvent.detail;var i=s.size-s.visible-s.offset;if(!(m<=0&&t<0||m>=i&&t>0)){m=m+t;if(m<0)m=0;if(m>i)m=i;r.scrollTo=r.scrollTo||{};r.scrollTo[c]=m;setTimeout(function(){if(r.scrollTo){u.stop().animate(r.scrollTo,240,"linear",function(){m=u[c]()});r.scrollTo=null}},1)}e.preventDefault();return false};s.scrollbar.on({"MozMousePixelScroll.scrollbar":s.mousewheel,"mousewheel.scrollbar":s.mousewheel,"mouseenter.scrollbar":function(){m=u[c]()}});s.scrollbar.find(".scroll-arrow, .scroll-element_track").on("mousedown.scrollbar",function(t){if(t.which!=i)return true;a=1;var l={eventOffset:t[n=="x"?"pageX":"pageY"],maxScrollValue:s.size-s.visible-s.offset,scrollbarOffset:s.scroller.offset()[n=="x"?"left":"top"],scrollbarSize:s.scroller[n=="x"?"outerWidth":"outerHeight"]()};var v=0,g=0;if(e(this).hasClass("scroll-arrow")){a=e(this).hasClass("scroll-arrow_more")?1:-1;h=f.scrollStep*a;m=a>0?l.maxScrollValue:0}else{a=l.eventOffset>l.scrollbarOffset+l.scrollbarSize?1:l.eventOffset
1;if(n.isVisible){n.scrollbar.addClass(r);i.scrollbar.addClass(r);a.addClass(r)}else{n.scrollbar.removeClass(r);i.scrollbar.removeClass(r);a.removeClass(r)}if(t=="y"&&(n.isVisible||n.size=0)o.scrolls.splice(e.inArray(s,o.scrolls),1)}}else{if(typeof t!="string"){s=new a(i,t);i.data("scrollbar",s);o.scrolls.push(s)}}return true});return r};e.fn.scrollbar.options=u;if(n.angular){(function(e){var t=e.module("jQueryScrollbar",[]);t.directive("jqueryScrollbar",function(){return{link:function(e,t){t.scrollbar(e.options).on("$destroy",function(){t.scrollbar("destroy")})},restring:"AC",scope:{options:"=jqueryScrollbar"}}})})(n.angular)}var f=0,l=0;var c=function(e){var t,n,i,s,u,a,h;for(t=0;t10){o.log("Scroll updates exceed 10");c=function(){}}else{clearTimeout(f);f=setTimeout(c,300)}}})(jQuery,document,window);
\ No newline at end of file
+!function(l,r){"function"==typeof define&&define.amd?define(["jquery"],r):r(l.jQuery)}(this,function(l){"use strict";function r(r){if(n.webkit&&!r)return{height:0,width:0};if(!n.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};n.data.inner=l("").css(l.extend({},o)),n.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(n.data.inner).appendTo("body")}return n.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(n.data.outer.offset().top-n.data.inner.offset().top||0),width:Math.ceil(n.data.outer.offset().left-n.data.inner.offset().left||0)}}function o(r,o){return l(document).on({"blur.scrollbar":function(){l(document).add("body").off(".scrollbar"),r&&r()},"dragstart.scrollbar":function(l){return l.preventDefault(),!1},"mouseup.scrollbar":function(){l(document).add("body").off(".scrollbar"),r&&r()}}),l("body").on({"selectstart.scrollbar":function(l){return l.preventDefault(),!1}}),o&&o.preventDefault(),!1}function e(){var l=r(!0);return!(l.height||l.width)}function s(l){var r=l.originalEvent;return r.axis&&r.axis===r.HORIZONTAL_AXIS?!1:r.wheelDeltaX?!1:!0}var t=!1,i=1,c="px",n={data:{},macosx:-1!==navigator.platform.toLowerCase().indexOf("mac"),mobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/WebKit/.test(navigator.userAgent)},a={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!0,ignoreOverlay:!0,scrollStep:30,showArrows:!1,stepScrolling:!0,type:"simple",scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null},d=function(o,s){n.scroll||(n.overlay=e(),n.scroll=r(),f(),l(window).resize(function(){var l=!1;if(n.scroll&&(n.scroll.height||n.scroll.width)){var o=r();(o.height!=n.scroll.height||o.width!=n.scroll.width)&&(n.scroll=o,l=!0)}f(l)})),this.container=o,this.options=l.extend({},a,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},this.init(s)};d.prototype={destroy:function(){if(this.wrapper){var r=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({margin:"","max-height":""}).removeClass("scroll-content").removeClass("scroll-scrollx_visible").removeClass("scroll-scrolly_visible").off(".scrollbar").scrollLeft(r).scrollTop(o),this.scrollx.scrollbar.removeClass("scroll-scrollx_visible").find("div").andSelf().off(".scrollbar"),this.scrolly.scrollbar.removeClass("scroll-scrolly_visible").find("div").andSelf().off(".scrollbar"),this.wrapper.remove(),l(document).add("body").off(".scrollbar"),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},getScrollbar:function(r){var o=this.options["scroll"+r],e={advanced:'
',simple:'
'},s=e[this.options.type]?this.options.type:"advanced";return o=o?"string"==typeof o?l(o).appendTo(this.wrapper):l(o):l("
").addClass("scroll-element").html(e[s]).appendTo(this.wrapper),this.options.showArrows&&o.addClass("scroll-element_arrows_visible"),o.addClass("scroll-"+r)},init:function(r){var e=this,t=this.container,a=this.containerWrapper||t,d=l.extend(this.options,r||{}),f={x:this.scrollx,y:this.scrolly},u=this.wrapper,p={scrollLeft:t.scrollLeft(),scrollTop:t.scrollTop()};if(n.mobile&&d.ignoreMobile||n.overlay&&d.ignoreOverlay||n.macosx&&!n.webkit)return!1;if(u)a.css({"margin-bottom":-1*n.scroll.height+c,"margin-right":-1*n.scroll.width+c,"max-height":""});else{if(this.wrapper=u=l("
").addClass("scroll-wrapper").addClass(t.attr("class")).css("position","absolute"==t.css("position")?"absolute":"relative").insertBefore(t).append(t),t.is("textarea")&&(this.containerWrapper=a=l("
").insertBefore(t).append(t),u.addClass("scroll-textarea")),a.addClass("scroll-content").css({"margin-bottom":-1*n.scroll.height+c,"margin-right":-1*n.scroll.width+c,"max-height":""}),t.on("scroll.scrollbar",function(){l.isFunction(d.onScroll)&&d.onScroll.call(e,{maxScroll:f.y.maxScrollOffset,scroll:t.scrollTop(),size:f.y.size,visible:f.y.visible},{maxScroll:f.x.maxScrollOffset,scroll:t.scrollLeft(),size:f.x.size,visible:f.x.visible}),f.x.isVisible&&f.x.scroller.css("left",t.scrollLeft()*f.x.kx+c),f.y.isVisible&&f.y.scroller.css("top",t.scrollTop()*f.y.kx+c)}),u.on("scroll",function(){u.scrollTop(0).scrollLeft(0)}),d.disableBodyScroll){var h=function(l){s(l)?f.y.isVisible&&f.y.mousewheel(l):f.x.isVisible&&f.x.mousewheel(l)};u.on({"MozMousePixelScroll.scrollbar":h,"mousewheel.scrollbar":h}),n.mobile&&u.on("touchstart.scrollbar",function(r){var o=r.originalEvent.touches&&r.originalEvent.touches[0]||r,e={pageX:o.pageX,pageY:o.pageY},s={left:t.scrollLeft(),top:t.scrollTop()};l(document).on({"touchmove.scrollbar":function(l){var r=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;t.scrollLeft(s.left+e.pageX-r.pageX),t.scrollTop(s.top+e.pageY-r.pageY),l.preventDefault()},"touchend.scrollbar":function(){l(document).off(".scrollbar")}})})}l.isFunction(d.onInit)&&d.onInit.apply(this,[t])}l.each(f,function(r,c){var n=null,a=1,u="x"==r?"scrollLeft":"scrollTop",p=d.scrollStep,h=function(){var l=t[u]();t[u](l+p),1==a&&l+p>=v&&(l=t[u]()),-1==a&&v>=l+p&&(l=t[u]()),t[u]()==l&&n&&n()},v=0;c.scrollbar||(c.scrollbar=e.getScrollbar(r),c.scroller=c.scrollbar.find(".scroll-bar"),c.mousewheel=function(l){if(!c.isVisible||"x"==r&&s(l))return!0;if("y"==r&&!s(l))return f.x.mousewheel(l),!0;var o=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,i=c.size-c.visible-c.offset;return 0>=v&&0>o||v>=i&&o>0||(v+=o,0>v&&(v=0),v>i&&(v=i),e.scrollTo=e.scrollTo||{},e.scrollTo[u]=v,setTimeout(function(){e.scrollTo&&(t.stop().animate(e.scrollTo,240,"linear",function(){v=t[u]()}),e.scrollTo=null)},1)),l.preventDefault(),!1},c.scrollbar.on({"MozMousePixelScroll.scrollbar":c.mousewheel,"mousewheel.scrollbar":c.mousewheel,"mouseenter.scrollbar":function(){v=t[u]()}}),c.scrollbar.find(".scroll-arrow, .scroll-element_track").on("mousedown.scrollbar",function(s){if(s.which!=i)return!0;a=1;var f={eventOffset:s["x"==r?"pageX":"pageY"],maxScrollValue:c.size-c.visible-c.offset,scrollbarOffset:c.scroller.offset()["x"==r?"left":"top"],scrollbarSize:c.scroller["x"==r?"outerWidth":"outerHeight"]()},b=0,g=0;return l(this).hasClass("scroll-arrow")?(a=l(this).hasClass("scroll-arrow_more")?1:-1,p=d.scrollStep*a,v=a>0?f.maxScrollValue:0):(a=f.eventOffset>f.scrollbarOffset+f.scrollbarSize?1:f.eventOffset
1,o.isVisible?(o.scrollbar.addClass(e),s.scrollbar.addClass(e),a.addClass(e)):(o.scrollbar.removeClass(e),s.scrollbar.removeClass(e),a.removeClass(e)),"y"==r&&(o.isVisible||o.size=0;)n.scrolls.splice(l.inArray(t,n.scrolls),1)}else"string"!=typeof r&&(t=new d(s,r),s.data("scrollbar",t),n.scrolls.push(t));return!0}),e},l.fn.scrollbar.options=a;var f=function(){var l=0,r=0;return function(o){var e,s,i,c,a,d,u;for(e=0;e10?(window.console&&console.log("Scroll updates exceed 10"),f=function(){}):(clearTimeout(l),l=setTimeout(f,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var r=a;return{setOptions:function(o){l.extend(r,o)},$get:function(){return{options:l.copy(r)}}}}).directive("jqueryScrollbar",function(l,r){return{restrict:"AC",link:function(o,e,s){var t=r(s.jqueryScrollbar),i=t(o);e.scrollbar(i||l.options).on("$destroy",function(){e.scrollbar("destroy")})}}})}(window.angular)});
\ No newline at end of file
From 17eaa790c115c4844db2873411078abec872509b Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Wed, 22 Jul 2015 19:47:29 +0500
Subject: [PATCH 07/32] update version to 0.2.8
---
bower.json | 2 +-
index.js | 2 +-
package.json | 2 +-
scrollbar.jquery.json | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/bower.json b/bower.json
index 90e48c5..61388ff 100644
--- a/bower.json
+++ b/bower.json
@@ -1,6 +1,6 @@
{
"name": "jquery.scrollbar",
- "version": "0.2.7",
+ "version": "0.2.8",
"main": [
"./jquery.scrollbar.js",
"./jquery.scrollbar.css"
diff --git a/index.js b/index.js
index 68e57d8..adbe1d9 100644
--- a/index.js
+++ b/index.js
@@ -1,3 +1,3 @@
require('./jquery.scrollbar');
-module.exports = 'jQueryScrollbar');
+module.exports = 'jQueryScrollbar';
diff --git a/package.json b/package.json
index be36cc2..592d713 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "jquery.scrollbar",
- "version": "0.2.7",
+ "version": "0.2.8",
"description": "Cross-browser CSS customizable scrollbar",
"main": "jquery.scrollbar.min.js",
"scripts": {
diff --git a/scrollbar.jquery.json b/scrollbar.jquery.json
index baa4884..1da2dd2 100644
--- a/scrollbar.jquery.json
+++ b/scrollbar.jquery.json
@@ -6,7 +6,7 @@
"scroll",
"scrollbar"
],
- "version": "0.2.7",
+ "version": "0.2.8",
"author": {
"name": "Yuriy Khabarov",
"email": "13real008@gmail.com"
From 89ac4da31799f5e025c1a8427d53bfd197bf46bd Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Thu, 23 Jul 2015 18:47:24 +0500
Subject: [PATCH 08/32] fix bug with textarea; js refactoring
---
jquery.scrollbar.css | 2 +-
jquery.scrollbar.js | 496 ++++++++++++++++++++--------------------
jquery.scrollbar.min.js | 2 +-
3 files changed, 252 insertions(+), 248 deletions(-)
diff --git a/jquery.scrollbar.css b/jquery.scrollbar.css
index 492c2e3..9f4e5ba 100644
--- a/jquery.scrollbar.css
+++ b/jquery.scrollbar.css
@@ -9,7 +9,7 @@
.scroll-wrapper > .scroll-content {
border: none !important;
box-sizing: content-box !important;
- height: auto !important;
+ height: auto;
left: 0;
margin: 0;
max-height: none;
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index eacd382..77a2807 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -11,7 +11,6 @@
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-
;
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
@@ -24,16 +23,28 @@
// init flags & variables
var debug = false;
- var lmb = 1, px = "px";
var browser = {
- "data": {},
- "macosx": navigator.platform.toLowerCase().indexOf('mac') !== -1,
- "mobile": /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),
- "overlay": null,
- "scroll": null,
- "scrolls": [],
- "webkit": /WebKit/.test(navigator.userAgent)
+ data: {
+ index: 0,
+ name: 'scrollbar'
+ },
+ macosx: navigator.platform.toLowerCase().indexOf('mac') !== -1,
+ mobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),
+ overlay: null,
+ scroll: null,
+ scrolls: [],
+ webkit: /WebKit/.test(navigator.userAgent)
+ };
+
+ browser.scrolls.add = function (instance) {
+ this.remove(instance).push(instance);
+ };
+ browser.scrolls.remove = function (instance) {
+ while ($.inArray(instance, this) >= 0) {
+ this.splice($.inArray(instance, this), 1);
+ }
+ return this;
};
var defaults = {
@@ -42,12 +53,11 @@
"debug": false, // debug mode
"disableBodyScroll": false, // disable body scroll if mouse over container
"duration": 200, // scroll animate duration in ms
- "ignoreMobile": true, // ignore mobile devices
- "ignoreOverlay": true, // ignore browsers with overlay scrollbars (mobile, MacOS)
+ "ignoreMobile": false, // ignore mobile devices
+ "ignoreOverlay": false, // ignore browsers with overlay scrollbars (mobile, MacOS)
"scrollStep": 30, // scroll step for scrollbar arrows
"showArrows": false, // add class to show arrows
"stepScrolling": true, // when scrolling to scrollbar mousedown position
- "type": "simple", // [advanced|simple] scrollbar html type
"scrollx": null, // horizontal scroll element
"scrolly": null, // vertical scroll element
@@ -59,7 +69,7 @@
};
- var customScrollbar = function (container, options) {
+ var CustomScrollbar = function (container) {
if (!browser.scroll) {
browser.overlay = isScrollOverlaysContent();
@@ -70,7 +80,7 @@
var forceUpdate = false;
if (browser.scroll && (browser.scroll.height || browser.scroll.width)) {
var scroll = getBrowserScrollSize();
- if (scroll.height != browser.scroll.height || scroll.width != browser.scroll.width) {
+ if (scroll.height !== browser.scroll.height || scroll.width !== browser.scroll.width) {
browser.scroll = scroll;
forceUpdate = true; // handle page zoom
}
@@ -80,107 +90,62 @@
}
this.container = container;
+ this.namespace = '.scrollbar_' + browser.data.index++;
this.options = $.extend({}, defaults, window.jQueryScrollbarOptions || {});
this.scrollTo = null;
this.scrollx = {};
this.scrolly = {};
- this.init(options);
+ container.data(browser.data.name, this);
+ browser.scrolls.add(this);
};
- customScrollbar.prototype = {
+ CustomScrollbar.prototype = {
+
destroy: function () {
if (!this.wrapper) {
return;
}
+ this.container.removeData(browser.data.name);
+ browser.scrolls.remove(this);
+
// init variables
var scrollLeft = this.container.scrollLeft();
var scrollTop = this.container.scrollTop();
this.container.insertBefore(this.wrapper).css({
+ "height": "",
"margin": "",
"max-height": ""
})
- .removeClass("scroll-content")
- .removeClass("scroll-scrollx_visible")
- .removeClass("scroll-scrolly_visible")
- .off(".scrollbar")
+ .removeClass('scroll-content scroll-scrollx_visible scroll-scrolly_visible')
+ .off(this.namespace)
.scrollLeft(scrollLeft)
.scrollTop(scrollTop);
- this.scrollx.scrollbar.removeClass("scroll-scrollx_visible").find("div").andSelf().off(".scrollbar");
- this.scrolly.scrollbar.removeClass("scroll-scrolly_visible").find("div").andSelf().off(".scrollbar");
+ this.scrollx.scroll.removeClass('scroll-scrollx_visible').find('div').andSelf().off(this.namespace);
+ this.scrolly.scroll.removeClass('scroll-scrolly_visible').find('div').andSelf().off(this.namespace);
this.wrapper.remove();
- $(document).add("body").off(".scrollbar");
+ $(document).add('body').off(this.namespace);
- if ($.isFunction(this.options.onDestroy))
+ if ($.isFunction(this.options.onDestroy)){
this.options.onDestroy.apply(this, [this.container]);
- },
- getScrollbar: function (d) {
-
- var scrollbar = this.options["scroll" + d];
- var html = {
- "advanced":
- '' +
- '' +
- '' +
- '',
- "simple":
- ''
- };
- var type = html[this.options.type] ? this.options.type : "advanced";
-
- if (scrollbar) {
- if (typeof (scrollbar) == "string") {
- scrollbar = $(scrollbar).appendTo(this.wrapper);
- } else {
- scrollbar = $(scrollbar);
- }
- } else {
- scrollbar = $("").addClass("scroll-element").html(html[type]).appendTo(this.wrapper);
- }
-
- if (this.options.showArrows) {
- scrollbar.addClass("scroll-element_arrows_visible");
}
-
- return scrollbar.addClass("scroll-" + d);
},
init: function (options) {
// init variables
- var S = this;
-
- var c = this.container;
- var cw = this.containerWrapper || c;
- var o = $.extend(this.options, options || {});
- var s = {
- "x": this.scrollx,
- "y": this.scrolly
- };
- var w = this.wrapper;
+ var S = this,
+ c = this.container,
+ cw = this.containerWrapper || c,
+ namespace = this.namespace,
+ o = $.extend(this.options, options || {}),
+ s = {x: this.scrollx, y: this.scrolly},
+ w = this.wrapper;
var initScroll = {
"scrollLeft": c.scrollLeft(),
@@ -206,13 +171,14 @@
w.addClass('scroll-textarea');
}
- cw.addClass("scroll-content").css({
- "margin-bottom": browser.scroll.height * -1 + px,
- "margin-right": browser.scroll.width * -1 + px,
+ cw.addClass('scroll-content').css({
+ "height": "auto",
+ "margin-bottom": browser.scroll.height * -1 + 'px',
+ "margin-right": browser.scroll.width * -1 + 'px',
"max-height": ""
});
- c.on("scroll.scrollbar", function (event) {
+ c.on('scroll' + namespace, function (event) {
if ($.isFunction(o.onScroll)) {
o.onScroll.call(S, {
"maxScroll": s.y.maxScrollOffset,
@@ -226,12 +192,12 @@
"visible": s.x.visible
});
}
- s.x.isVisible && s.x.scroller.css("left", c.scrollLeft() * s.x.kx + px);
- s.y.isVisible && s.y.scroller.css("top", c.scrollTop() * s.y.kx + px);
+ s.x.isVisible && s.x.scroll.bar.css('left', c.scrollLeft() * s.x.kx + 'px');
+ s.y.isVisible && s.y.scroll.bar.css('top', c.scrollTop() * s.y.kx + 'px');
});
/* prevent native scrollbars to be visible on #anchor click */
- w.on("scroll", function () {
+ w.on('scroll' + namespace, function () {
w.scrollTop(0).scrollLeft(0);
});
@@ -241,13 +207,11 @@
s.y.isVisible && s.y.mousewheel(event) :
s.x.isVisible && s.x.mousewheel(event);
};
- w.on({
- "MozMousePixelScroll.scrollbar": handleMouseScroll,
- "mousewheel.scrollbar": handleMouseScroll
- });
+ w.on('MozMousePixelScroll' + namespace, handleMouseScroll);
+ w.on('mousewheel' + namespace, handleMouseScroll);
if (browser.mobile) {
- w.on("touchstart.scrollbar", function (event) {
+ w.on('touchstart' + namespace, function (event) {
var touch = event.originalEvent.touches && event.originalEvent.touches[0] || event;
var originalTouch = {
"pageX": touch.pageX,
@@ -257,26 +221,26 @@
"left": c.scrollLeft(),
"top": c.scrollTop()
};
- $(document).on({
- "touchmove.scrollbar": function (event) {
- var touch = event.originalEvent.targetTouches && event.originalEvent.targetTouches[0] || event;
- c.scrollLeft(originalScroll.left + originalTouch.pageX - touch.pageX);
- c.scrollTop(originalScroll.top + originalTouch.pageY - touch.pageY);
- event.preventDefault();
- },
- "touchend.scrollbar": function () {
- $(document).off(".scrollbar");
- }
+ $(document).on('touchmove' + namespace, function (event) {
+ var touch = event.originalEvent.targetTouches && event.originalEvent.targetTouches[0] || event;
+ c.scrollLeft(originalScroll.left + originalTouch.pageX - touch.pageX);
+ c.scrollTop(originalScroll.top + originalTouch.pageY - touch.pageY);
+ event.preventDefault();
+ });
+ $(document).on('touchend' + namespace, function () {
+ $(document).off(namespace);
});
});
}
}
- if ($.isFunction(o.onInit))
+ if ($.isFunction(o.onInit)){
o.onInit.apply(this, [c]);
+ }
} else {
cw.css({
- "margin-bottom": browser.scroll.height * -1 + px,
- "margin-right": browser.scroll.width * -1 + px,
+ "height": "auto",
+ "margin-bottom": browser.scroll.height * -1 + 'px',
+ "margin-right": browser.scroll.width * -1 + 'px',
"max-height": ""
});
}
@@ -286,7 +250,7 @@
var scrollCallback = null;
var scrollForward = 1;
- var scrollOffset = (d == "x") ? "scrollLeft" : "scrollTop";
+ var scrollOffset = (d === 'x') ? 'scrollLeft' : 'scrollTop';
var scrollStep = o.scrollStep;
var scrollTo = function () {
var currentOffset = c[scrollOffset]();
@@ -301,17 +265,20 @@
}
var scrollToValue = 0;
- if (!scrollx.scrollbar) {
+ if (!scrollx.scroll) {
+
+ scrollx.scroll = S._getScroll(o['scroll' + d]).addClass('scroll-' + d);
- scrollx.scrollbar = S.getScrollbar(d);
- scrollx.scroller = scrollx.scrollbar.find(".scroll-bar");
+ if(o.showArrows){
+ scrollx.scroll.addClass('scroll-element_arrows_visible');
+ }
scrollx.mousewheel = function (event) {
- if (!scrollx.isVisible || (d == 'x' && isVerticalScroll(event))) {
+ if (!scrollx.isVisible || (d === 'x' && isVerticalScroll(event))) {
return true;
}
- if (d == 'y' && !isVerticalScroll(event)) {
+ if (d === 'y' && !isVerticalScroll(event)) {
s.x.mousewheel(event);
return true;
}
@@ -319,7 +286,7 @@
var delta = event.originalEvent.wheelDelta * -1 || event.originalEvent.detail;
var maxScrollValue = scrollx.size - scrollx.visible - scrollx.offset;
- if (!((scrollToValue <= 0 && delta < 0) || (scrollToValue >= maxScrollValue && delta > 0))) {
+ if ((delta > 0 && scrollToValue < maxScrollValue) || (delta < 0 && scrollToValue > 0)) {
scrollToValue = scrollToValue + delta;
if (scrollToValue < 0)
scrollToValue = 0;
@@ -342,28 +309,27 @@
return false;
};
- scrollx.scrollbar.on({
- "MozMousePixelScroll.scrollbar": scrollx.mousewheel,
- "mousewheel.scrollbar": scrollx.mousewheel,
- "mouseenter.scrollbar": function () {
+ scrollx.scroll
+ .on('MozMousePixelScroll' + namespace, scrollx.mousewheel)
+ .on('mousewheel' + namespace, scrollx.mousewheel)
+ .on('mouseenter' + namespace, function () {
scrollToValue = c[scrollOffset]();
- }
- });
+ });
// handle arrows & scroll inner mousedown event
- scrollx.scrollbar.find(".scroll-arrow, .scroll-element_track")
- .on("mousedown.scrollbar", function (event) {
+ scrollx.scroll.find('.scroll-arrow, .scroll-element_track')
+ .on('mousedown' + namespace, function (event) {
- if (event.which != lmb)
+ if (event.which != 1) // lmb
return true;
scrollForward = 1;
var data = {
- "eventOffset": event[(d == "x") ? "pageX" : "pageY"],
+ "eventOffset": event[(d === 'x') ? 'pageX' : 'pageY'],
"maxScrollValue": scrollx.size - scrollx.visible - scrollx.offset,
- "scrollbarOffset": scrollx.scroller.offset()[(d == "x") ? "left" : "top"],
- "scrollbarSize": scrollx.scroller[(d == "x") ? "outerWidth" : "outerHeight"]()
+ "scrollbarOffset": scrollx.scroll.bar.offset()[(d === 'x') ? 'left' : 'top'],
+ "scrollbarSize": scrollx.scroll.bar[(d === 'x') ? 'outerWidth' : 'outerHeight']()
};
var timeout = 0, timer = 0;
@@ -404,27 +370,27 @@
}
}, 1);
- return handleMouseDown(scrollCallback, event);
+ return S._handleMouseDown(scrollCallback, event);
});
// handle scrollbar drag'n'drop
- scrollx.scroller.on("mousedown.scrollbar", function (event) {
+ scrollx.scroll.bar.on('mousedown' + namespace, function (event) {
- if (event.which != lmb)
+ if (event.which != 1) // lmb
return true;
- var eventPosition = event[(d == "x") ? "pageX" : "pageY"];
+ var eventPosition = event[(d === 'x') ? 'pageX' : 'pageY'];
var initOffset = c[scrollOffset]();
- scrollx.scrollbar.addClass("scroll-draggable");
+ scrollx.scroll.addClass('scroll-draggable');
- $(document).on("mousemove.scrollbar", function (event) {
- var diff = parseInt((event[(d == "x") ? "pageX" : "pageY"] - eventPosition) / scrollx.kx, 10);
+ $(document).on('mousemove' + namespace, function (event) {
+ var diff = parseInt((event[(d === 'x') ? 'pageX' : 'pageY'] - eventPosition) / scrollx.kx, 10);
c[scrollOffset](initOffset + diff);
});
- return handleMouseDown(function () {
- scrollx.scrollbar.removeClass("scroll-draggable");
+ return S._handleMouseDown(function () {
+ scrollx.scroll.removeClass('scroll-draggable');
scrollToValue = c[scrollOffset]();
}, event);
});
@@ -433,23 +399,23 @@
// remove classes & reset applied styles
$.each(s, function (d, scrollx) {
- var scrollClass = "scroll-scroll" + d + "_visible";
+ var scrollClass = 'scroll-scroll' + d + '_visible';
var scrolly = (d == "x") ? s.y : s.x;
- scrollx.scrollbar.removeClass(scrollClass);
- scrolly.scrollbar.removeClass(scrollClass);
+ scrollx.scroll.removeClass(scrollClass);
+ scrolly.scroll.removeClass(scrollClass);
cw.removeClass(scrollClass);
});
// calculate init sizes
$.each(s, function (d, scrollx) {
$.extend(scrollx, (d == "x") ? {
- "offset": parseInt(c.css("left"), 10) || 0,
- "size": c.prop("scrollWidth"),
+ "offset": parseInt(c.css('left'), 10) || 0,
+ "size": c.prop('scrollWidth'),
"visible": w.width()
} : {
- "offset": parseInt(c.css("top"), 10) || 0,
- "size": c.prop("scrollHeight"),
+ "offset": parseInt(c.css('top'), 10) || 0,
+ "size": c.prop('scrollHeight'),
"visible": w.height()
});
});
@@ -457,47 +423,48 @@
var updateScroll = function (d, scrollx) {
- var scrollClass = "scroll-scroll" + d + "_visible";
- var scrolly = (d == "x") ? s.y : s.x;
- var offset = parseInt(c.css((d == "x") ? "left" : "top"), 10) || 0;
+ var scrollClass = 'scroll-scroll' + d + '_visible';
+ var scrolly = (d === 'x') ? s.y : s.x;
+ var offset = parseInt(c.css((d === 'x') ? 'left' : 'top'), 10) || 0;
var AreaSize = scrollx.size;
var AreaVisible = scrollx.visible + offset;
scrollx.isVisible = (AreaSize - AreaVisible) > 1; // bug in IE9/11 with 1px diff
if (scrollx.isVisible) {
- scrollx.scrollbar.addClass(scrollClass);
- scrolly.scrollbar.addClass(scrollClass);
+ scrollx.scroll.addClass(scrollClass);
+ scrolly.scroll.addClass(scrollClass);
cw.addClass(scrollClass);
} else {
- scrollx.scrollbar.removeClass(scrollClass);
- scrolly.scrollbar.removeClass(scrollClass);
+ scrollx.scroll.removeClass(scrollClass);
+ scrolly.scroll.removeClass(scrollClass);
cw.removeClass(scrollClass);
}
- if (d == "y" && (scrollx.isVisible || scrollx.size < scrollx.visible)) {
- cw.css("max-height", (AreaVisible + browser.scroll.height) + px);
+ if (d === 'y' && (scrollx.isVisible || scrollx.size < scrollx.visible)) {
+ cw.css('max-height', (AreaVisible + browser.scroll.height) + 'px');
+ c.is('textarea') && cw.css('height', cw.css('max-height'));
}
- if (s.x.size != c.prop("scrollWidth")
- || s.y.size != c.prop("scrollHeight")
+ if (s.x.size != c.prop('scrollWidth')
+ || s.y.size != c.prop('scrollHeight')
|| s.x.visible != w.width()
|| s.y.visible != w.height()
- || s.x.offset != (parseInt(c.css("left"), 10) || 0)
- || s.y.offset != (parseInt(c.css("top"), 10) || 0)
+ || s.x.offset != (parseInt(c.css('left'), 10) || 0)
+ || s.y.offset != (parseInt(c.css('top'), 10) || 0)
) {
$.each(s, function (d, scrollx) {
- $.extend(scrollx, (d == "x") ? {
- "offset": parseInt(c.css("left"), 10) || 0,
- "size": c.prop("scrollWidth"),
+ $.extend(scrollx, (d === 'x') ? {
+ "offset": parseInt(c.css('left'), 10) || 0,
+ "size": c.prop('scrollWidth'),
"visible": w.width()
} : {
- "offset": parseInt(c.css("top"), 10) || 0,
- "size": c.prop("scrollHeight"),
+ "offset": parseInt(c.css('top'), 10) || 0,
+ "size": c.prop('scrollHeight'),
"visible": w.height()
});
});
- updateScroll(d == "x" ? "y" : "x", scrolly);
+ updateScroll(d === 'x' ? 'y' : 'x', scrolly);
}
};
$.each(s, updateScroll);
@@ -508,79 +475,145 @@
// calculate scroll size
$.each(s, function (d, scrollx) {
- var cssOffset = (d == "x") ? "left" : "top";
- var cssFullSize = (d == "x") ? "outerWidth" : "outerHeight";
- var cssSize = (d == "x") ? "width" : "height";
+ var cssOffset = (d === 'x') ? 'left' : 'top';
+ var cssFullSize = (d === 'x') ? 'outerWidth' : 'outerHeight';
+ var cssSize = (d === 'x') ? 'width' : 'height';
var offset = parseInt(c.css(cssOffset), 10) || 0;
var AreaSize = scrollx.size;
var AreaVisible = scrollx.visible + offset;
- var scrollSize = scrollx.scrollbar.find(".scroll-element_size");
- scrollSize = scrollSize[cssFullSize]() + (parseInt(scrollSize.css(cssOffset), 10) || 0);
+ var scrollSize = scrollx.scroll.size[cssFullSize]() + (parseInt(scrollx.scroll.size.css(cssOffset), 10) || 0);
if (o.autoScrollSize) {
scrollx.scrollbarSize = parseInt(scrollSize * AreaVisible / AreaSize, 10);
- scrollx.scroller.css(cssSize, scrollx.scrollbarSize + px);
+ scrollx.scroll.bar.css(cssSize, scrollx.scrollbarSize + 'px');
}
- scrollx.scrollbarSize = scrollx.scroller[cssFullSize]();
+ scrollx.scrollbarSize = scrollx.scroll.bar[cssFullSize]();
scrollx.kx = ((scrollSize - scrollx.scrollbarSize) / (AreaSize - AreaVisible)) || 1;
scrollx.maxScrollOffset = AreaSize - AreaVisible;
});
- c.scrollLeft(initScroll.scrollLeft).scrollTop(initScroll.scrollTop).trigger("scroll");
+ c.scrollLeft(initScroll.scrollLeft).scrollTop(initScroll.scrollTop).trigger('scroll');
+ },
+
+ /**
+ * Get scrollx/scrolly object
+ *
+ * @param {Mixed} scroll
+ * @returns {jQuery} scroll object
+ */
+ _getScroll: function (scroll) {
+ var types = {
+ advanced: [
+ '
'
+ ].join(''),
+ simple: [
+ '
'
+ ].join('')
+ };
+ if (types[scroll]) {
+ scroll = types[scroll];
+ }
+ if (!scroll) {
+ scroll = types['simple'];
+ }
+ if (typeof (scroll) == 'string') {
+ scroll = $(scroll).appendTo(this.wrapper);
+ } else {
+ scroll = $(scroll);
+ }
+ $.extend(scroll, {
+ bar: scroll.find('.scroll-bar'),
+ size: scroll.find('.scroll-element_size'),
+ track: scroll.find('.scroll-element_track')
+ });
+ return scroll;
+ },
+
+ _handleMouseDown: function(callback, event) {
+
+ var namespace = this.namespace;
+
+ $(document).on('blur' + namespace, function () {
+ $(document).add('body').off(namespace);
+ callback && callback();
+ });
+ $(document).on('dragstart' + namespace, function (event) {
+ event.preventDefault();
+ return false;
+ });
+ $(document).on('mouseup' + namespace, function () {
+ $(document).add('body').off(namespace);
+ callback && callback();
+ });
+ $('body').on('selectstart' + namespace, function (event) {
+ event.preventDefault();
+ return false;
+ });
+
+ event && event.preventDefault();
+ return false;
}
};
/*
* Extend jQuery as plugin
*
- * @param {object|string} options or command to execute
- * @param {object|array} args additional arguments as array []
+ * @param {Mixed} command to execute
+ * @param {Mixed} arguments as Array
+ * @return {jQuery}
*/
- $.fn.scrollbar = function (options, args) {
-
- var toReturn = this;
-
- if (options === "get")
- toReturn = null;
-
- this.each(function () {
-
- var container = $(this);
-
- if (container.hasClass("scroll-wrapper")
- || container.get(0).nodeName == "body") {
- return true;
- }
-
- var instance = container.data("scrollbar");
- if (instance) {
- if (options === "get") {
- toReturn = instance;
- return false;
- }
-
- var func = (typeof options == "string" && instance[options]) ? options : "init";
- instance[func].apply(instance, $.isArray(args) ? args : []);
-
- if (options === "destroy") {
- container.removeData("scrollbar");
- while ($.inArray(instance, browser.scrolls) >= 0)
- browser.scrolls.splice($.inArray(instance, browser.scrolls), 1);
+ $.fn.scrollbar = function (command, args) {
+ if (typeof command !== 'string') {
+ args = command;
+ command = 'init';
+ }
+ if (typeof args === 'undefined') {
+ args = [];
+ }
+ if (!$.isArray(args)) {
+ args = [args];
+ }
+ this.not('body, .scroll-wrapper').each(function () {
+ var element = $(this),
+ instance = element.data(browser.data.name);
+ if (instance || command === 'init') {
+ if (!instance) {
+ instance = new CustomScrollbar(element);
}
- } else {
- if (typeof options != "string") {
- instance = new customScrollbar(container, options);
- container.data("scrollbar", instance);
- browser.scrolls.push(instance);
+ if (instance[command]) {
+ instance[command].apply(instance, args);
}
}
- return true;
});
-
- return toReturn;
+ return this;
};
/**
@@ -606,25 +639,24 @@
wrapper = scroll.wrapper;
scrollx = scroll.scrollx;
scrolly = scroll.scrolly;
- if (force || (options.autoUpdate && wrapper && wrapper.is(":visible") &&
- (container.prop("scrollWidth") != scrollx.size || container.prop("scrollHeight") != scrolly.size || wrapper.width() != scrollx.visible || wrapper.height() != scrolly.visible))) {
+ if (force || (options.autoUpdate && wrapper && wrapper.is(':visible') &&
+ (container.prop('scrollWidth') != scrollx.size || container.prop('scrollHeight') != scrolly.size || wrapper.width() != scrollx.visible || wrapper.height() != scrolly.visible))) {
scroll.init();
- if (debug) {
+ if (options.debug) {
window.console && console.log({
- "scrollHeight": container.prop("scrollHeight") + ":" + scroll.scrolly.size,
- "scrollWidth": container.prop("scrollWidth") + ":" + scroll.scrollx.size,
- "visibleHeight": wrapper.height() + ":" + scroll.scrolly.visible,
- "visibleWidth": wrapper.width() + ":" + scroll.scrollx.visible
+ scrollHeight: container.prop('scrollHeight') + ':' + scroll.scrolly.size,
+ scrollWidth: container.prop('scrollWidth') + ':' + scroll.scrollx.size,
+ visibleHeight: wrapper.height() + ':' + scroll.scrolly.visible,
+ visibleWidth: wrapper.width() + ':' + scroll.scrollx.visible
}, true);
timerCounter++;
}
}
}
if (debug && timerCounter > 10) {
- window.console && console.log("Scroll updates exceed 10");
- updateScrollbars = function () {
- };
+ window.console && console.log('Scroll updates exceed 10');
+ updateScrollbars = function () {};
} else {
clearTimeout(timer);
timer = setTimeout(updateScrollbars, 300);
@@ -674,31 +706,6 @@
};
}
- function handleMouseDown(callback, event) {
- $(document).on({
- "blur.scrollbar": function () {
- $(document).add('body').off('.scrollbar');
- callback && callback();
- },
- "dragstart.scrollbar": function (event) {
- event.preventDefault();
- return false;
- },
- "mouseup.scrollbar": function () {
- $(document).add('body').off('.scrollbar');
- callback && callback();
- }
- });
- $("body").on({
- "selectstart.scrollbar": function (event) {
- event.preventDefault();
- return false;
- }
- });
- event && event.preventDefault();
- return false;
- }
-
/**
* Check if native browser scrollbars overlay content
*
@@ -729,7 +736,6 @@
angular.module('jQueryScrollbar', [])
.provider('jQueryScrollbar', function () {
var defaultOptions = defaults;
-
return {
setOptions: function (options) {
angular.extend(defaultOptions, options);
@@ -745,10 +751,8 @@
return {
"restrict": "AC",
"link": function (scope, element, attrs) {
-
var model = $parse(attrs.jqueryScrollbar),
options = model(scope);
-
element.scrollbar(options || jQueryScrollbar.options)
.on('$destroy', function () {
element.scrollbar('destroy');
diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js
index 134bdb4..552f6ff 100644
--- a/jquery.scrollbar.min.js
+++ b/jquery.scrollbar.min.js
@@ -13,4 +13,4 @@
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-!function(l,r){"function"==typeof define&&define.amd?define(["jquery"],r):r(l.jQuery)}(this,function(l){"use strict";function r(r){if(n.webkit&&!r)return{height:0,width:0};if(!n.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};n.data.inner=l("
").css(l.extend({},o)),n.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(n.data.inner).appendTo("body")}return n.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(n.data.outer.offset().top-n.data.inner.offset().top||0),width:Math.ceil(n.data.outer.offset().left-n.data.inner.offset().left||0)}}function o(r,o){return l(document).on({"blur.scrollbar":function(){l(document).add("body").off(".scrollbar"),r&&r()},"dragstart.scrollbar":function(l){return l.preventDefault(),!1},"mouseup.scrollbar":function(){l(document).add("body").off(".scrollbar"),r&&r()}}),l("body").on({"selectstart.scrollbar":function(l){return l.preventDefault(),!1}}),o&&o.preventDefault(),!1}function e(){var l=r(!0);return!(l.height||l.width)}function s(l){var r=l.originalEvent;return r.axis&&r.axis===r.HORIZONTAL_AXIS?!1:r.wheelDeltaX?!1:!0}var t=!1,i=1,c="px",n={data:{},macosx:-1!==navigator.platform.toLowerCase().indexOf("mac"),mobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/WebKit/.test(navigator.userAgent)},a={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!0,ignoreOverlay:!0,scrollStep:30,showArrows:!1,stepScrolling:!0,type:"simple",scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null},d=function(o,s){n.scroll||(n.overlay=e(),n.scroll=r(),f(),l(window).resize(function(){var l=!1;if(n.scroll&&(n.scroll.height||n.scroll.width)){var o=r();(o.height!=n.scroll.height||o.width!=n.scroll.width)&&(n.scroll=o,l=!0)}f(l)})),this.container=o,this.options=l.extend({},a,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},this.init(s)};d.prototype={destroy:function(){if(this.wrapper){var r=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({margin:"","max-height":""}).removeClass("scroll-content").removeClass("scroll-scrollx_visible").removeClass("scroll-scrolly_visible").off(".scrollbar").scrollLeft(r).scrollTop(o),this.scrollx.scrollbar.removeClass("scroll-scrollx_visible").find("div").andSelf().off(".scrollbar"),this.scrolly.scrollbar.removeClass("scroll-scrolly_visible").find("div").andSelf().off(".scrollbar"),this.wrapper.remove(),l(document).add("body").off(".scrollbar"),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},getScrollbar:function(r){var o=this.options["scroll"+r],e={advanced:'
',simple:'
'},s=e[this.options.type]?this.options.type:"advanced";return o=o?"string"==typeof o?l(o).appendTo(this.wrapper):l(o):l("
").addClass("scroll-element").html(e[s]).appendTo(this.wrapper),this.options.showArrows&&o.addClass("scroll-element_arrows_visible"),o.addClass("scroll-"+r)},init:function(r){var e=this,t=this.container,a=this.containerWrapper||t,d=l.extend(this.options,r||{}),f={x:this.scrollx,y:this.scrolly},u=this.wrapper,p={scrollLeft:t.scrollLeft(),scrollTop:t.scrollTop()};if(n.mobile&&d.ignoreMobile||n.overlay&&d.ignoreOverlay||n.macosx&&!n.webkit)return!1;if(u)a.css({"margin-bottom":-1*n.scroll.height+c,"margin-right":-1*n.scroll.width+c,"max-height":""});else{if(this.wrapper=u=l("
").addClass("scroll-wrapper").addClass(t.attr("class")).css("position","absolute"==t.css("position")?"absolute":"relative").insertBefore(t).append(t),t.is("textarea")&&(this.containerWrapper=a=l("
").insertBefore(t).append(t),u.addClass("scroll-textarea")),a.addClass("scroll-content").css({"margin-bottom":-1*n.scroll.height+c,"margin-right":-1*n.scroll.width+c,"max-height":""}),t.on("scroll.scrollbar",function(){l.isFunction(d.onScroll)&&d.onScroll.call(e,{maxScroll:f.y.maxScrollOffset,scroll:t.scrollTop(),size:f.y.size,visible:f.y.visible},{maxScroll:f.x.maxScrollOffset,scroll:t.scrollLeft(),size:f.x.size,visible:f.x.visible}),f.x.isVisible&&f.x.scroller.css("left",t.scrollLeft()*f.x.kx+c),f.y.isVisible&&f.y.scroller.css("top",t.scrollTop()*f.y.kx+c)}),u.on("scroll",function(){u.scrollTop(0).scrollLeft(0)}),d.disableBodyScroll){var h=function(l){s(l)?f.y.isVisible&&f.y.mousewheel(l):f.x.isVisible&&f.x.mousewheel(l)};u.on({"MozMousePixelScroll.scrollbar":h,"mousewheel.scrollbar":h}),n.mobile&&u.on("touchstart.scrollbar",function(r){var o=r.originalEvent.touches&&r.originalEvent.touches[0]||r,e={pageX:o.pageX,pageY:o.pageY},s={left:t.scrollLeft(),top:t.scrollTop()};l(document).on({"touchmove.scrollbar":function(l){var r=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;t.scrollLeft(s.left+e.pageX-r.pageX),t.scrollTop(s.top+e.pageY-r.pageY),l.preventDefault()},"touchend.scrollbar":function(){l(document).off(".scrollbar")}})})}l.isFunction(d.onInit)&&d.onInit.apply(this,[t])}l.each(f,function(r,c){var n=null,a=1,u="x"==r?"scrollLeft":"scrollTop",p=d.scrollStep,h=function(){var l=t[u]();t[u](l+p),1==a&&l+p>=v&&(l=t[u]()),-1==a&&v>=l+p&&(l=t[u]()),t[u]()==l&&n&&n()},v=0;c.scrollbar||(c.scrollbar=e.getScrollbar(r),c.scroller=c.scrollbar.find(".scroll-bar"),c.mousewheel=function(l){if(!c.isVisible||"x"==r&&s(l))return!0;if("y"==r&&!s(l))return f.x.mousewheel(l),!0;var o=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,i=c.size-c.visible-c.offset;return 0>=v&&0>o||v>=i&&o>0||(v+=o,0>v&&(v=0),v>i&&(v=i),e.scrollTo=e.scrollTo||{},e.scrollTo[u]=v,setTimeout(function(){e.scrollTo&&(t.stop().animate(e.scrollTo,240,"linear",function(){v=t[u]()}),e.scrollTo=null)},1)),l.preventDefault(),!1},c.scrollbar.on({"MozMousePixelScroll.scrollbar":c.mousewheel,"mousewheel.scrollbar":c.mousewheel,"mouseenter.scrollbar":function(){v=t[u]()}}),c.scrollbar.find(".scroll-arrow, .scroll-element_track").on("mousedown.scrollbar",function(s){if(s.which!=i)return!0;a=1;var f={eventOffset:s["x"==r?"pageX":"pageY"],maxScrollValue:c.size-c.visible-c.offset,scrollbarOffset:c.scroller.offset()["x"==r?"left":"top"],scrollbarSize:c.scroller["x"==r?"outerWidth":"outerHeight"]()},b=0,g=0;return l(this).hasClass("scroll-arrow")?(a=l(this).hasClass("scroll-arrow_more")?1:-1,p=d.scrollStep*a,v=a>0?f.maxScrollValue:0):(a=f.eventOffset>f.scrollbarOffset+f.scrollbarSize?1:f.eventOffset
1,o.isVisible?(o.scrollbar.addClass(e),s.scrollbar.addClass(e),a.addClass(e)):(o.scrollbar.removeClass(e),s.scrollbar.removeClass(e),a.removeClass(e)),"y"==r&&(o.isVisible||o.size=0;)n.scrolls.splice(l.inArray(t,n.scrolls),1)}else"string"!=typeof r&&(t=new d(s,r),s.data("scrollbar",t),n.scrolls.push(t));return!0}),e},l.fn.scrollbar.options=a;var f=function(){var l=0,r=0;return function(o){var e,s,i,c,a,d,u;for(e=0;e10?(window.console&&console.log("Scroll updates exceed 10"),f=function(){}):(clearTimeout(l),l=setTimeout(f,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var r=a;return{setOptions:function(o){l.extend(r,o)},$get:function(){return{options:l.copy(r)}}}}).directive("jqueryScrollbar",function(l,r){return{restrict:"AC",link:function(o,e,s){var t=r(s.jqueryScrollbar),i=t(o);e.scrollbar(i||l.options).on("$destroy",function(){e.scrollbar("destroy")})}}})}(window.angular)});
\ No newline at end of file
+!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return e.axis&&e.axis===e.HORIZONTAL_AXIS?!1:e.wheelDeltaX?!1:!0}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:-1!==navigator.platform.toLowerCase().indexOf("mac"),mobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/WebKit/.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),c(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();(o.height!==t.scroll.height||o.width!==t.scroll.width)&&(t.scroll=o,l=!0)}c(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,u={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay||t.macosx&&!t.webkit)return!1;if(d)i.css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"==r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""}),r.on("scroll"+n,function(){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var f=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,f),d.on("mousewheel"+n,f),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,u="x"===e?"scrollLeft":"scrollTop",f=c.scrollStep,h=function(){var l=r[u]();r[u](l+f),1==d&&l+f>=p&&(l=r[u]()),-1==d&&p>=l+f&&(l=r[u]()),r[u]()==l&&i&&i()},p=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=t.size-t.visible-t.offset;return(i>0&&n>p||0>i&&p>0)&&(p+=i,0>p&&(p=0),p>n&&(p=n),o.scrollTo=o.scrollTo||{},o.scrollTo[u]=p,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){p=r[u]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){p=r[u]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,f=c.scrollStep*d,p=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
1,o.isVisible?(o.scroll.addClass(s),n.scroll.addClass(s),i.addClass(s)):(o.scroll.removeClass(s),n.scroll.removeClass(s),i.removeClass(s)),"y"===e&&(o.isVisible||o.size','','','','",""].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1}},l.fn.scrollbar=function(e,o){return"string"!=typeof e&&(o=e,e="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var s=l(this),r=s.data(t.data.name);(r||"init"===e)&&(r||(r=new n(s)),r[e]&&r[e].apply(r,o))}),this},l.fn.scrollbar.options=i;var c=function(){var l=0,e=0;return function(o){var s,i,n,a,d,u,f;for(s=0;s
10?(window.console&&console.log("Scroll updates exceed 10"),c=function(){}):(clearTimeout(l),l=setTimeout(c,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}})}(window.angular)});
\ No newline at end of file
From 11ab30f7ab202e7704ad5df9b72f942ca66167b6 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Fri, 24 Jul 2015 12:28:56 +0500
Subject: [PATCH 09/32] add note about changes in CSS
---
README.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/README.md b/README.md
index 3c88d05..44c0da5 100644
--- a/README.md
+++ b/README.md
@@ -21,3 +21,6 @@ Cross-browser CSS customizable scrollbar with advanced features:
+
+Please note that CSS was updated in version 0.2.8.
+Please update section /*************** SCROLLBAR BASE CSS ***************/ in your CSS file.
From 8f0213bee00118acd92caa855383906c03d24f15 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Fri, 24 Jul 2015 15:52:55 +0500
Subject: [PATCH 10/32] fix bug with visible native scrollbar when height:100%
---
jquery.scrollbar.js | 118 +++++++++++++++++++++++-----------------
jquery.scrollbar.min.js | 2 +-
2 files changed, 68 insertions(+), 52 deletions(-)
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index 77a2807..c97419a 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -69,7 +69,7 @@
};
- var CustomScrollbar = function (container) {
+ var BaseScrollbar = function (container) {
if (!browser.scroll) {
browser.overlay = isScrollOverlaysContent();
@@ -100,7 +100,7 @@
browser.scrolls.add(this);
};
- CustomScrollbar.prototype = {
+ BaseScrollbar.prototype = {
destroy: function () {
@@ -420,57 +420,13 @@
});
});
+ // update scrollbar visibility/dimensions
+ this._updateScroll('x', this.scrollx);
+ this._updateScroll('y', this.scrolly);
- var updateScroll = function (d, scrollx) {
-
- var scrollClass = 'scroll-scroll' + d + '_visible';
- var scrolly = (d === 'x') ? s.y : s.x;
- var offset = parseInt(c.css((d === 'x') ? 'left' : 'top'), 10) || 0;
-
- var AreaSize = scrollx.size;
- var AreaVisible = scrollx.visible + offset;
-
- scrollx.isVisible = (AreaSize - AreaVisible) > 1; // bug in IE9/11 with 1px diff
- if (scrollx.isVisible) {
- scrollx.scroll.addClass(scrollClass);
- scrolly.scroll.addClass(scrollClass);
- cw.addClass(scrollClass);
- } else {
- scrollx.scroll.removeClass(scrollClass);
- scrolly.scroll.removeClass(scrollClass);
- cw.removeClass(scrollClass);
- }
-
- if (d === 'y' && (scrollx.isVisible || scrollx.size < scrollx.visible)) {
- cw.css('max-height', (AreaVisible + browser.scroll.height) + 'px');
- c.is('textarea') && cw.css('height', cw.css('max-height'));
- }
-
- if (s.x.size != c.prop('scrollWidth')
- || s.y.size != c.prop('scrollHeight')
- || s.x.visible != w.width()
- || s.y.visible != w.height()
- || s.x.offset != (parseInt(c.css('left'), 10) || 0)
- || s.y.offset != (parseInt(c.css('top'), 10) || 0)
- ) {
- $.each(s, function (d, scrollx) {
- $.extend(scrollx, (d === 'x') ? {
- "offset": parseInt(c.css('left'), 10) || 0,
- "size": c.prop('scrollWidth'),
- "visible": w.width()
- } : {
- "offset": parseInt(c.css('top'), 10) || 0,
- "size": c.prop('scrollHeight'),
- "visible": w.height()
- });
- });
- updateScroll(d === 'x' ? 'y' : 'x', scrolly);
- }
- };
- $.each(s, updateScroll);
-
- if ($.isFunction(o.onUpdate))
+ if ($.isFunction(o.onUpdate)){
o.onUpdate.apply(this, [c]);
+ }
// calculate scroll size
$.each(s, function (d, scrollx) {
@@ -580,9 +536,69 @@
event && event.preventDefault();
return false;
+ },
+
+ _updateScroll: function (d, scrollx) {
+
+ var container = this.container,
+ containerWrapper = this.containerWrapper || container,
+ scrollClass = 'scroll-scroll' + d + '_visible',
+ scrolly = (d === 'x') ? this.scrolly : this.scrollx,
+ offset = parseInt(this.container.css((d === 'x') ? 'left' : 'top'), 10) || 0,
+ wrapper = this.wrapper;
+
+ var AreaSize = scrollx.size;
+ var AreaVisible = scrollx.visible + offset;
+
+ scrollx.isVisible = (AreaSize - AreaVisible) > 1; // bug in IE9/11 with 1px diff
+ if (scrollx.isVisible) {
+ scrollx.scroll.addClass(scrollClass);
+ scrolly.scroll.addClass(scrollClass);
+ containerWrapper.addClass(scrollClass);
+ } else {
+ scrollx.scroll.removeClass(scrollClass);
+ scrolly.scroll.removeClass(scrollClass);
+ containerWrapper.removeClass(scrollClass);
+ }
+
+ if (d === 'y') {
+ if(container.is('textarea') || AreaSize < AreaVisible){
+ containerWrapper.css({
+ "height": (AreaVisible + browser.scroll.height) + 'px',
+ "max-height": "none"
+ });
+ } else {
+ containerWrapper.css({
+ //"height": "auto", // do not reset height value: issue with height:100%!
+ "max-height": (AreaVisible + browser.scroll.height) + 'px'
+ });
+ }
+ }
+
+ if (scrollx.size != container.prop('scrollWidth')
+ || scrolly.size != container.prop('scrollHeight')
+ || scrollx.visible != wrapper.width()
+ || scrolly.visible != wrapper.height()
+ || scrollx.offset != (parseInt(container.css('left'), 10) || 0)
+ || scrolly.offset != (parseInt(container.css('top'), 10) || 0)
+ ) {
+ $.extend(this.scrollx, {
+ "offset": parseInt(container.css('left'), 10) || 0,
+ "size": container.prop('scrollWidth'),
+ "visible": wrapper.width()
+ });
+ $.extend(this.scrolly, {
+ "offset": parseInt(container.css('top'), 10) || 0,
+ "size": this.container.prop('scrollHeight'),
+ "visible": wrapper.height()
+ });
+ this._updateScroll(d === 'x' ? 'y' : 'x', scrolly);
+ }
}
};
+ var CustomScrollbar = BaseScrollbar;
+
/*
* Extend jQuery as plugin
*
diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js
index 552f6ff..8b84c15 100644
--- a/jquery.scrollbar.min.js
+++ b/jquery.scrollbar.min.js
@@ -13,4 +13,4 @@
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return e.axis&&e.axis===e.HORIZONTAL_AXIS?!1:e.wheelDeltaX?!1:!0}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:-1!==navigator.platform.toLowerCase().indexOf("mac"),mobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/WebKit/.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),c(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();(o.height!==t.scroll.height||o.width!==t.scroll.width)&&(t.scroll=o,l=!0)}c(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,u={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay||t.macosx&&!t.webkit)return!1;if(d)i.css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"==r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""}),r.on("scroll"+n,function(){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var f=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,f),d.on("mousewheel"+n,f),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,u="x"===e?"scrollLeft":"scrollTop",f=c.scrollStep,h=function(){var l=r[u]();r[u](l+f),1==d&&l+f>=p&&(l=r[u]()),-1==d&&p>=l+f&&(l=r[u]()),r[u]()==l&&i&&i()},p=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=t.size-t.visible-t.offset;return(i>0&&n>p||0>i&&p>0)&&(p+=i,0>p&&(p=0),p>n&&(p=n),o.scrollTo=o.scrollTo||{},o.scrollTo[u]=p,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){p=r[u]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){p=r[u]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,f=c.scrollStep*d,p=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
1,o.isVisible?(o.scroll.addClass(s),n.scroll.addClass(s),i.addClass(s)):(o.scroll.removeClass(s),n.scroll.removeClass(s),i.removeClass(s)),"y"===e&&(o.isVisible||o.size','','','','",""].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1}},l.fn.scrollbar=function(e,o){return"string"!=typeof e&&(o=e,e="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var s=l(this),r=s.data(t.data.name);(r||"init"===e)&&(r||(r=new n(s)),r[e]&&r[e].apply(r,o))}),this},l.fn.scrollbar.options=i;var c=function(){var l=0,e=0;return function(o){var s,i,n,a,d,u,f;for(s=0;s
10?(window.console&&console.log("Scroll updates exceed 10"),c=function(){}):(clearTimeout(l),l=setTimeout(c,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}})}(window.angular)});
\ No newline at end of file
+!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return e.axis&&e.axis===e.HORIZONTAL_AXIS?!1:e.wheelDeltaX?!1:!0}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:-1!==navigator.platform.toLowerCase().indexOf("mac"),mobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/WebKit/.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),a(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();(o.height!==t.scroll.height||o.width!==t.scroll.width)&&(t.scroll=o,l=!0)}a(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,h={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay||t.macosx&&!t.webkit)return!1;if(d)i.css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"==r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""}),r.on("scroll"+n,function(){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var u=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,u),d.on("mousewheel"+n,u),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,h="x"===e?"scrollLeft":"scrollTop",u=c.scrollStep,p=function(){var l=r[h]();r[h](l+u),1==d&&l+u>=f&&(l=r[h]()),-1==d&&f>=l+u&&(l=r[h]()),r[h]()==l&&i&&i()},f=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=t.size-t.visible-t.offset;return(i>0&&n>f||0>i&&f>0)&&(f+=i,0>f&&(f=0),f>n&&(f=n),o.scrollTo=o.scrollTo||{},o.scrollTo[h]=f,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){f=r[h]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){f=r[h]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,u=c.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
','','','','",""].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1},_updateScroll:function(e,o){var s=this.container,r=this.containerWrapper||s,i="scroll-scroll"+e+"_visible",n="x"===e?this.scrolly:this.scrollx,c=parseInt(this.container.css("x"===e?"left":"top"),10)||0,a=this.wrapper,d=o.size,h=o.visible+c;o.isVisible=d-h>1,o.isVisible?(o.scroll.addClass(i),n.scroll.addClass(i),r.addClass(i)):(o.scroll.removeClass(i),n.scroll.removeClass(i),r.removeClass(i)),"y"===e&&r.css(s.is("textarea")||h>d?{height:h+t.scroll.height+"px","max-height":"none"}:{"max-height":h+t.scroll.height+"px"}),(o.size!=s.prop("scrollWidth")||n.size!=s.prop("scrollHeight")||o.visible!=a.width()||n.visible!=a.height()||o.offset!=(parseInt(s.css("left"),10)||0)||n.offset!=(parseInt(s.css("top"),10)||0))&&(l.extend(this.scrollx,{offset:parseInt(s.css("left"),10)||0,size:s.prop("scrollWidth"),visible:a.width()}),l.extend(this.scrolly,{offset:parseInt(s.css("top"),10)||0,size:this.container.prop("scrollHeight"),visible:a.height()}),this._updateScroll("x"===e?"y":"x",n))}};var c=n;l.fn.scrollbar=function(e,o){return"string"!=typeof e&&(o=e,e="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var s=l(this),r=s.data(t.data.name);(r||"init"===e)&&(r||(r=new c(s)),r[e]&&r[e].apply(r,o))}),this},l.fn.scrollbar.options=i;var a=function(){var l=0,e=0;return function(o){var s,i,n,c,d,h,u;for(s=0;s
10?(window.console&&console.log("Scroll updates exceed 10"),a=function(){}):(clearTimeout(l),l=setTimeout(a,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}})}(window.angular)});
\ No newline at end of file
From 033816379571ab2c112b4f561351ad0752ba34bd Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Mon, 27 Jul 2015 13:37:29 +0500
Subject: [PATCH 11/32] refactore code to 0.3.0 beta
---
jquery.scrollbar.js | 469 +++++++++++++++++++++-----------------------
1 file changed, 223 insertions(+), 246 deletions(-)
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index c97419a..f4098b4 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -7,7 +7,7 @@
* If you found bug, please contact me via email <13real008@gmail.com>
*
* @author Yuriy Khabarov aka Gromo
- * @version 0.2.8
+ * @version 0.3.0 beta
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
@@ -21,20 +21,18 @@
}(this, function ($) {
'use strict';
- // init flags & variables
- var debug = false;
-
var browser = {
data: {
index: 0,
- name: 'scrollbar'
+ name: 'scrollbar',
+ updateTimer: 0
},
- macosx: navigator.platform.toLowerCase().indexOf('mac') !== -1,
- mobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),
- overlay: null,
+ isWebkit: /WebKit/.test(navigator.userAgent),
+ isMac: navigator.platform.toLowerCase().indexOf('mac') !== -1,
+ isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),
+ isOverlay: null,
scroll: null,
- scrolls: [],
- webkit: /WebKit/.test(navigator.userAgent)
+ scrolls: []
};
browser.scrolls.add = function (instance) {
@@ -46,52 +44,49 @@
}
return this;
};
+ browser.scrolls.update = function(force){
+ for (var i = 0; i < browser.scrolls.length; i++) {
+ browser.scrolls[i].update(force);
+ }
+ clearTimeout(browser.data.updateTimer);
+ browser.data.updateTimer = setTimeout(browser.scrolls.update, 300);
+ };
- var defaults = {
- "autoScrollSize": true, // automatically calculate scrollsize
- "autoUpdate": true, // update scrollbar if content/container size changed
- "debug": false, // debug mode
- "disableBodyScroll": false, // disable body scroll if mouse over container
- "duration": 200, // scroll animate duration in ms
- "ignoreMobile": false, // ignore mobile devices
- "ignoreOverlay": false, // ignore browsers with overlay scrollbars (mobile, MacOS)
- "scrollStep": 30, // scroll step for scrollbar arrows
- "showArrows": false, // add class to show arrows
- "stepScrolling": true, // when scrolling to scrollbar mousedown position
-
- "scrollx": null, // horizontal scroll element
- "scrolly": null, // vertical scroll element
-
- "onDestroy": null, // callback function on destroy,
- "onInit": null, // callback function on first initialization
- "onScroll": null, // callback function on content scrolling
- "onUpdate": null // callback function on init/resize (before scrollbar size calculation)
+ var defaultOptions = {
+ autoScrollSize: true, // automatically calculate scrollsize
+ autoUpdate: true, // update scrollbar if content/container size changed
+ debug: false, // debug mode
+ disableBodyScroll: false, // disable body scroll if mouse over container
+ duration: 200, // scroll animate duration in ms
+ ignoreMobile: false, // ignore mobile devices
+ ignoreOverlay: false, // ignore browsers with overlay scrollbars (mobile, MacOS)
+ scrollStep: 30, // scroll step for scrollbar arrows
+ showArrows: false, // add class to show arrows
+ stepScrolling: true, // when scrolling to scrollbar mousedown position
+
+ scrollx: null, // horizontal scroll element
+ scrolly: null, // vertical scroll element
+
+ onDestroy: null, // callback function on destroy,
+ onInit: null, // callback function on first initialization
+ onScroll: null, // callback function on content scrolling
+ onUpdate: null // callback function on init/resize (before scrollbar size calculation)
};
var BaseScrollbar = function (container) {
if (!browser.scroll) {
- browser.overlay = isScrollOverlaysContent();
- browser.scroll = getBrowserScrollSize();
- updateScrollbars();
-
- $(window).resize(function () {
- var forceUpdate = false;
- if (browser.scroll && (browser.scroll.height || browser.scroll.width)) {
- var scroll = getBrowserScrollSize();
- if (scroll.height !== browser.scroll.height || scroll.width !== browser.scroll.width) {
- browser.scroll = scroll;
- forceUpdate = true; // handle page zoom
- }
- }
- updateScrollbars(forceUpdate);
- });
+ browser.scroll = this._getBrowserScrollSize();
+ browser.isOverlay = (browser.scroll.height === 0 && browser.scroll.width === 0);
+ browser.scrolls.update(); // run interval check
}
this.container = container;
+ this.dimensions = {};
+ this.isRtl = container.css('direction') === 'rtl';
this.namespace = '.scrollbar_' + browser.data.index++;
- this.options = $.extend({}, defaults, window.jQueryScrollbarOptions || {});
+ this.options = $.extend({}, defaultOptions, window.jQueryScrollbarOptions || {});
this.scrollTo = null;
this.scrollx = {};
this.scrolly = {};
@@ -108,12 +103,15 @@
return;
}
+ // unregister scroll instance
this.container.removeData(browser.data.name);
browser.scrolls.remove(this);
// init variables
- var scrollLeft = this.container.scrollLeft();
- var scrollTop = this.container.scrollTop();
+ var currentScroll = {
+ "left": this.container.scrollLeft(),
+ "top": this.container.scrollTop()
+ };
this.container.insertBefore(this.wrapper).css({
"height": "",
@@ -122,8 +120,8 @@
})
.removeClass('scroll-content scroll-scrollx_visible scroll-scrolly_visible')
.off(this.namespace)
- .scrollLeft(scrollLeft)
- .scrollTop(scrollTop);
+ .scrollLeft(currentScroll.left)
+ .scrollTop(currentScroll.top);
this.scrollx.scroll.removeClass('scroll-scrollx_visible').find('div').andSelf().off(this.namespace);
this.scrolly.scroll.removeClass('scroll-scrolly_visible').find('div').andSelf().off(this.namespace);
@@ -153,9 +151,9 @@
};
// do not init if in ignorable browser
- if ((browser.mobile && o.ignoreMobile)
- || (browser.overlay && o.ignoreOverlay)
- || (browser.macosx && !browser.webkit) // still required to ignore nonWebKit browsers on Mac
+ if ((browser.isMobile && o.ignoreMobile)
+ || (browser.isOverlay && o.ignoreOverlay)
+ || (browser.isMac && !browser.isWebkit) // still required to ignore nonWebKit browsers on Mac
) {
return false;
}
@@ -171,30 +169,23 @@
w.addClass('scroll-textarea');
}
- cw.addClass('scroll-content').css({
- "height": "auto",
- "margin-bottom": browser.scroll.height * -1 + 'px',
- "margin-right": browser.scroll.width * -1 + 'px',
- "max-height": ""
- });
+ cw.addClass('scroll-content');
- c.on('scroll' + namespace, function (event) {
- if ($.isFunction(o.onScroll)) {
- o.onScroll.call(S, {
- "maxScroll": s.y.maxScrollOffset,
- "scroll": c.scrollTop(),
- "size": s.y.size,
- "visible": s.y.visible
+ c.on('scroll' + namespace, $.proxy(function () {
+ if ($.isFunction(this.options.onScroll)) {
+ this.options.onScroll.call(this, {
+ scroll: this.container.scrollTop(),
+ size: this.dimensions.scrollHeight,
+ visible: this.dimensions.visibleHeight
}, {
- "maxScroll": s.x.maxScrollOffset,
- "scroll": c.scrollLeft(),
- "size": s.x.size,
- "visible": s.x.visible
+ scroll: this.container.scrollLeft(),
+ size: this.dimensions.scrollWidth,
+ visible: this.dimensions.visibleWidth
});
}
- s.x.isVisible && s.x.scroll.bar.css('left', c.scrollLeft() * s.x.kx + 'px');
- s.y.isVisible && s.y.scroll.bar.css('top', c.scrollTop() * s.y.kx + 'px');
- });
+ this.scrollx.isVisible && this.scrollx.scroll.bar.css('left', c.scrollLeft() * this.scrollx.kx + 'px');
+ this.scrolly.isVisible && this.scrolly.scroll.bar.css('top', c.scrollTop() * this.scrolly.kx + 'px');
+ }, this));
/* prevent native scrollbars to be visible on #anchor click */
w.on('scroll' + namespace, function () {
@@ -210,12 +201,12 @@
w.on('MozMousePixelScroll' + namespace, handleMouseScroll);
w.on('mousewheel' + namespace, handleMouseScroll);
- if (browser.mobile) {
+ if (browser.isMobile) {
w.on('touchstart' + namespace, function (event) {
var touch = event.originalEvent.touches && event.originalEvent.touches[0] || event;
var originalTouch = {
- "pageX": touch.pageX,
- "pageY": touch.pageY
+ pageX: touch.pageX,
+ pageY: touch.pageY
};
var originalScroll = {
"left": c.scrollLeft(),
@@ -236,15 +227,15 @@
if ($.isFunction(o.onInit)){
o.onInit.apply(this, [c]);
}
- } else {
- cw.css({
- "height": "auto",
- "margin-bottom": browser.scroll.height * -1 + 'px',
- "margin-right": browser.scroll.width * -1 + 'px',
- "max-height": ""
- });
}
+ cw.css({
+ "height": "auto",
+ "margin-bottom": browser.scroll.height * -1 + 'px',
+ "margin-right": browser.scroll.width * -1 + 'px',
+ "max-height": ""
+ });
+
// init scrollbars & recalculate sizes
$.each(s, function (d, scrollx) {
@@ -398,27 +389,10 @@
});
// remove classes & reset applied styles
- $.each(s, function (d, scrollx) {
- var scrollClass = 'scroll-scroll' + d + '_visible';
- var scrolly = (d == "x") ? s.y : s.x;
-
- scrollx.scroll.removeClass(scrollClass);
- scrolly.scroll.removeClass(scrollClass);
- cw.removeClass(scrollClass);
- });
+ cw.add(this.scrollx.scroll).add(this.scrolly.scroll).removeClass('scroll-scrollx_visible scroll-scrolly_visible');
// calculate init sizes
- $.each(s, function (d, scrollx) {
- $.extend(scrollx, (d == "x") ? {
- "offset": parseInt(c.css('left'), 10) || 0,
- "size": c.prop('scrollWidth'),
- "visible": w.width()
- } : {
- "offset": parseInt(c.css('top'), 10) || 0,
- "size": c.prop('scrollHeight'),
- "visible": w.height()
- });
- });
+ this.dimensions = this._getDimensions();
// update scrollbar visibility/dimensions
this._updateScroll('x', this.scrollx);
@@ -429,29 +403,50 @@
}
// calculate scroll size
- $.each(s, function (d, scrollx) {
-
- var cssOffset = (d === 'x') ? 'left' : 'top';
- var cssFullSize = (d === 'x') ? 'outerWidth' : 'outerHeight';
- var cssSize = (d === 'x') ? 'width' : 'height';
- var offset = parseInt(c.css(cssOffset), 10) || 0;
-
- var AreaSize = scrollx.size;
- var AreaVisible = scrollx.visible + offset;
+ this._updateScrollSize('x', this.scrollx);
+ this._updateScrollSize('y', this.scrolly);
- var scrollSize = scrollx.scroll.size[cssFullSize]() + (parseInt(scrollx.scroll.size.css(cssOffset), 10) || 0);
+ c.scrollLeft(initScroll.scrollLeft).scrollTop(initScroll.scrollTop).trigger('scroll');
+ },
- if (o.autoScrollSize) {
- scrollx.scrollbarSize = parseInt(scrollSize * AreaVisible / AreaSize, 10);
- scrollx.scroll.bar.css(cssSize, scrollx.scrollbarSize + 'px');
- }
+ update: function(force){
+ if (force || (this.options.autoUpdate && this.wrapper && this.wrapper.is(':visible') && this._isChanged())) {
+ this.init();
+ }
+ },
- scrollx.scrollbarSize = scrollx.scroll.bar[cssFullSize]();
- scrollx.kx = ((scrollSize - scrollx.scrollbarSize) / (AreaSize - AreaVisible)) || 1;
- scrollx.maxScrollOffset = AreaSize - AreaVisible;
- });
+ /**
+ * Calculate browser native scrollbar height/width
+ *
+ * @returns {Object} {"height", "width"}
+ */
+ _getBrowserScrollSize: function () {
+ if (!browser.data.outer) {
+ browser.data.outer = $('').prependTo('body')
+ .attr('style', 'border:none;margin:0;padding:0;height:100px;width:100px;position:absolute;overflow:scroll;left:-1000px;top:-1000px;');
+ browser.data.inner = $('
').appendTo(browser.data.outer)
+ .attr('style', 'border:none;margin:0;padding:0;height:100%;width:100%;position:absolute;');
+ }
+ return {
+ height: browser.data.outer.height() - browser.data.inner.height(),
+ width: browser.data.outer.width() - browser.data.inner.width()
+ };
+ },
- c.scrollLeft(initScroll.scrollLeft).scrollTop(initScroll.scrollTop).trigger('scroll');
+ /**
+ * Get element's dimensions: scrollHeight, scrollWidth, visibleHeight, visibleWidth
+ *
+ * @returns {Object} element dimensions
+ */
+ _getDimensions: function () {
+ var element = this.container,
+ wrapper = this.wrapper;
+ return {
+ scrollHeight: element.prop('scrollHeight'),
+ scrollWidth: element.prop('scrollWidth'),
+ visibleHeight: wrapper.height() + (parseInt(element.css('top'), 10) || 0),
+ visibleWidth: wrapper.width() + (parseInt(element.css('left'), 10) || 0)
+ };
},
/**
@@ -538,28 +533,44 @@
return false;
},
+ /**
+ * Check if element dimensions were changed
+ * + update current dimensions
+ *
+ * @returns {Boolean} is changed
+ */
+ _isChanged: function () {
+ var isChanged = false,
+ newDimensions = this._getDimensions(),
+ oldDimensions = this.dimensions;
+ $.each(newDimensions, function (key, newValue) {
+ if (oldDimensions[key] !== newValue) {
+ isChanged = true;
+ return false;
+ }
+ });
+ this.dimensions = newDimensions;
+
+ if (isChanged && this.options.debug) {
+ window.console && console.log(this.dimensions);
+ }
+
+ return isChanged;
+ },
+
_updateScroll: function (d, scrollx) {
var container = this.container,
containerWrapper = this.containerWrapper || container,
scrollClass = 'scroll-scroll' + d + '_visible',
scrolly = (d === 'x') ? this.scrolly : this.scrollx,
- offset = parseInt(this.container.css((d === 'x') ? 'left' : 'top'), 10) || 0,
wrapper = this.wrapper;
- var AreaSize = scrollx.size;
- var AreaVisible = scrollx.visible + offset;
+ var AreaSize = this.dimensions[d === 'x' ? 'scrollWidth' : 'scrollHeight'],
+ AreaVisible = this.dimensions[d === 'x' ? 'visibleWidth' : 'visibleHeight'];
scrollx.isVisible = (AreaSize - AreaVisible) > 1; // bug in IE9/11 with 1px diff
- if (scrollx.isVisible) {
- scrollx.scroll.addClass(scrollClass);
- scrolly.scroll.addClass(scrollClass);
- containerWrapper.addClass(scrollClass);
- } else {
- scrollx.scroll.removeClass(scrollClass);
- scrolly.scroll.removeClass(scrollClass);
- containerWrapper.removeClass(scrollClass);
- }
+ containerWrapper.add(scrollx.scroll).add(scrolly.scroll)[scrollx.isVisible ? 'addClass' : 'removeClass'](scrollClass);
if (d === 'y') {
if(container.is('textarea') || AreaSize < AreaVisible){
@@ -575,34 +586,94 @@
}
}
- if (scrollx.size != container.prop('scrollWidth')
- || scrolly.size != container.prop('scrollHeight')
- || scrollx.visible != wrapper.width()
- || scrolly.visible != wrapper.height()
- || scrollx.offset != (parseInt(container.css('left'), 10) || 0)
- || scrolly.offset != (parseInt(container.css('top'), 10) || 0)
- ) {
- $.extend(this.scrollx, {
- "offset": parseInt(container.css('left'), 10) || 0,
- "size": container.prop('scrollWidth'),
- "visible": wrapper.width()
- });
- $.extend(this.scrolly, {
- "offset": parseInt(container.css('top'), 10) || 0,
- "size": this.container.prop('scrollHeight'),
- "visible": wrapper.height()
- });
+ if(this._isChanged()){
this._updateScroll(d === 'x' ? 'y' : 'x', scrolly);
}
+ },
+
+ _updateScrollSize: function (d, scrollx) {
+
+ var cssOffset = (d === 'x') ? 'left' : 'top',
+ cssFullSize = (d === 'x') ? 'outerWidth' : 'outerHeight',
+ cssSize = (d === 'x') ? 'width' : 'height';
+
+ var AreaSize = this.dimensions[d === 'x' ? 'scrollWidth' : 'scrollHeight'],
+ AreaVisible = this.dimensions[d === 'x' ? 'visibleWidth' : 'visibleHeight'];
+
+ var scrollSize = scrollx.scroll.size[cssFullSize]() + (parseInt(scrollx.scroll.size.css(cssOffset), 10) || 0);
+
+ if (this.options.autoScrollSize) {
+ scrollx.scrollbarSize = parseInt(scrollSize * AreaVisible / AreaSize, 10);
+ scrollx.scroll.bar.css(cssSize, scrollx.scrollbarSize + 'px');
+ }
+
+ scrollx.scrollbarSize = scrollx.scroll.bar[cssFullSize]();
+ scrollx.kx = ((scrollSize - scrollx.scrollbarSize) / (AreaSize - AreaVisible)) || 1;
+ }
+ };
+
+ var BaseVisibleScrollbar = function(){
+
+ // handle page zoom & scrollbars resizing
+ if(!browser.scroll){
+ $(window).resize($.proxy(function () {
+ var forceUpdate = false;
+ if (browser.scroll && !browser.isOverlay) {
+ var scroll = this._getBrowserScrollSize();
+ if (scroll.height !== browser.scroll.height || scroll.width !== browser.scroll.width) {
+ browser.scroll = scroll;
+ forceUpdate = true; // handle page zoom
+ }
+ }
+ browser.scrolls.update(forceUpdate);
+ }, this));
}
+
+ BaseScrollbar.apply(this, arguments);
+ };
+
+ BaseVisibleScrollbar.prototype = $.extend({}, BaseScrollbar.prototype, {
+
+ });
+
+ var FirefoxScrollbar = function () {
+ BaseVisibleScrollbar.apply(this, arguments);
+ };
+
+ FirefoxScrollbar.prototype = $.extend({}, BaseVisibleScrollbar.prototype, {
+ });
+
+ var MsieScrollbar = function () {
+ BaseVisibleScrollbar.apply(this, arguments);
+ };
+
+ MsieScrollbar.prototype = $.extend({}, BaseVisibleScrollbar.prototype, {
+ });
+
+ var WebkitScrollbar = function () {
+ BaseScrollbar.apply(this, arguments);
};
- var CustomScrollbar = BaseScrollbar;
+ WebkitScrollbar.prototype = $.extend({}, BaseScrollbar.prototype, {
+ });
+
+ var CustomScrollbar = BaseVisibleScrollbar;
+ switch (true) {
+ case browser.isFF:
+ CustomScrollbar = FirefoxScrollbar;
+ break;
+ case browser.isIE:
+ CustomScrollbar = MsieScrollbar;
+ break;
+ case browser.isWebkit:
+ CustomScrollbar = WebkitScrollbar;
+ break;
+ }
/*
* Extend jQuery as plugin
*
- * @param {Mixed} command to execute
+ * @param {Mixed} command to execute or options to init
* @param {Mixed} arguments as Array
* @return {jQuery}
*/
@@ -635,103 +706,10 @@
/**
* Connect default options to global object
*/
- $.fn.scrollbar.options = defaults;
+ $.fn.scrollbar.options = defaultOptions;
- /**
- * Check if scroll content/container size is changed
- */
-
- var updateScrollbars = (function () {
- var timer = 0,
- timerCounter = 0;
-
- return function (force) {
- var i, container, options, scroll, wrapper, scrollx, scrolly;
- for (i = 0; i < browser.scrolls.length; i++) {
- scroll = browser.scrolls[i];
- container = scroll.container;
- options = scroll.options;
- wrapper = scroll.wrapper;
- scrollx = scroll.scrollx;
- scrolly = scroll.scrolly;
- if (force || (options.autoUpdate && wrapper && wrapper.is(':visible') &&
- (container.prop('scrollWidth') != scrollx.size || container.prop('scrollHeight') != scrolly.size || wrapper.width() != scrollx.visible || wrapper.height() != scrolly.visible))) {
- scroll.init();
-
- if (options.debug) {
- window.console && console.log({
- scrollHeight: container.prop('scrollHeight') + ':' + scroll.scrolly.size,
- scrollWidth: container.prop('scrollWidth') + ':' + scroll.scrollx.size,
- visibleHeight: wrapper.height() + ':' + scroll.scrolly.visible,
- visibleWidth: wrapper.width() + ':' + scroll.scrollx.visible
- }, true);
- timerCounter++;
- }
- }
- }
- if (debug && timerCounter > 10) {
- window.console && console.log('Scroll updates exceed 10');
- updateScrollbars = function () {};
- } else {
- clearTimeout(timer);
- timer = setTimeout(updateScrollbars, 300);
- }
- };
- })();
-
/* ADDITIONAL FUNCTIONS */
- /**
- * Get native browser scrollbar size (height/width)
- *
- * @param {Boolean} actual size or CSS size, default - CSS size
- * @returns {Object} with height, width
- */
- function getBrowserScrollSize(actualSize) {
-
- if (browser.webkit && !actualSize) {
- return {
- "height": 0,
- "width": 0
- };
- }
-
- if (!browser.data.outer) {
- var css = {
- "border": "none",
- "box-sizing": "content-box",
- "height": "200px",
- "margin": "0",
- "padding": "0",
- "width": "200px"
- };
- browser.data.inner = $("
").css($.extend({}, css));
- browser.data.outer = $("
").css($.extend({
- "left": "-1000px",
- "overflow": "scroll",
- "position": "absolute",
- "top": "-1000px"
- }, css)).append(browser.data.inner).appendTo("body");
- }
-
- browser.data.outer.scrollLeft(1000).scrollTop(1000);
-
- return {
- "height": Math.ceil((browser.data.outer.offset().top - browser.data.inner.offset().top) || 0),
- "width": Math.ceil((browser.data.outer.offset().left - browser.data.inner.offset().left) || 0)
- };
- }
-
- /**
- * Check if native browser scrollbars overlay content
- *
- * @returns {Boolean}
- */
- function isScrollOverlaysContent() {
- var scrollSize = getBrowserScrollSize(true);
- return !(scrollSize.height || scrollSize.width);
- }
-
function isVerticalScroll(event) {
var e = event.originalEvent;
if (e.axis && e.axis === e.HORIZONTAL_AXIS)
@@ -751,7 +729,6 @@
(function (angular) {
angular.module('jQueryScrollbar', [])
.provider('jQueryScrollbar', function () {
- var defaultOptions = defaults;
return {
setOptions: function (options) {
angular.extend(defaultOptions, options);
From e05c6044343c7361241f41f8a36aa57ee5498683 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Fri, 31 Jul 2015 15:38:53 +0500
Subject: [PATCH 12/32] update webkit browser detectin
---
jquery.scrollbar.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index f4098b4..7ff3c85 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -27,7 +27,7 @@
name: 'scrollbar',
updateTimer: 0
},
- isWebkit: /WebKit/.test(navigator.userAgent),
+ isWebkit: 'WebkitAppearance' in document.documentElement.style,
isMac: navigator.platform.toLowerCase().indexOf('mac') !== -1,
isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),
isOverlay: null,
From ba106c8048fa98017aee5a98e155d5db030c2c62 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Fri, 31 Jul 2015 16:44:28 +0500
Subject: [PATCH 13/32] ignore MS Edge browser
---
jquery.scrollbar.js | 6 +++---
jquery.scrollbar.min.js | 4 ++--
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index 7ff3c85..b384169 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -27,9 +27,9 @@
name: 'scrollbar',
updateTimer: 0
},
- isWebkit: 'WebkitAppearance' in document.documentElement.style,
- isMac: navigator.platform.toLowerCase().indexOf('mac') !== -1,
- isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),
+ isWebkit: /webkit/i.test(navigator.userAgent) && !/edge\/\d+/i.test(navigator.userAgent),
+ isMac: /mac/i.test(navigator.platform),
+ isMobile: /android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),
isOverlay: null,
scroll: null,
scrolls: []
diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js
index 8b84c15..3adce6e 100644
--- a/jquery.scrollbar.min.js
+++ b/jquery.scrollbar.min.js
@@ -9,8 +9,8 @@
* Compressed by http://jscompress.com/
*
* @author Yuriy Khabarov aka Gromo
- * @version 0.2.8
+ * @version 0.3.0 beta
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("
").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return e.axis&&e.axis===e.HORIZONTAL_AXIS?!1:e.wheelDeltaX?!1:!0}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:-1!==navigator.platform.toLowerCase().indexOf("mac"),mobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/WebKit/.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),a(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();(o.height!==t.scroll.height||o.width!==t.scroll.width)&&(t.scroll=o,l=!0)}a(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,h={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay||t.macosx&&!t.webkit)return!1;if(d)i.css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"==r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""}),r.on("scroll"+n,function(){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var u=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,u),d.on("mousewheel"+n,u),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,h="x"===e?"scrollLeft":"scrollTop",u=c.scrollStep,p=function(){var l=r[h]();r[h](l+u),1==d&&l+u>=f&&(l=r[h]()),-1==d&&f>=l+u&&(l=r[h]()),r[h]()==l&&i&&i()},f=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=t.size-t.visible-t.offset;return(i>0&&n>f||0>i&&f>0)&&(f+=i,0>f&&(f=0),f>n&&(f=n),o.scrollTo=o.scrollTo||{},o.scrollTo[h]=f,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){f=r[h]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){f=r[h]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,u=c.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
','','','','",""].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1},_updateScroll:function(e,o){var s=this.container,r=this.containerWrapper||s,i="scroll-scroll"+e+"_visible",n="x"===e?this.scrolly:this.scrollx,c=parseInt(this.container.css("x"===e?"left":"top"),10)||0,a=this.wrapper,d=o.size,h=o.visible+c;o.isVisible=d-h>1,o.isVisible?(o.scroll.addClass(i),n.scroll.addClass(i),r.addClass(i)):(o.scroll.removeClass(i),n.scroll.removeClass(i),r.removeClass(i)),"y"===e&&r.css(s.is("textarea")||h>d?{height:h+t.scroll.height+"px","max-height":"none"}:{"max-height":h+t.scroll.height+"px"}),(o.size!=s.prop("scrollWidth")||n.size!=s.prop("scrollHeight")||o.visible!=a.width()||n.visible!=a.height()||o.offset!=(parseInt(s.css("left"),10)||0)||n.offset!=(parseInt(s.css("top"),10)||0))&&(l.extend(this.scrollx,{offset:parseInt(s.css("left"),10)||0,size:s.prop("scrollWidth"),visible:a.width()}),l.extend(this.scrolly,{offset:parseInt(s.css("top"),10)||0,size:this.container.prop("scrollHeight"),visible:a.height()}),this._updateScroll("x"===e?"y":"x",n))}};var c=n;l.fn.scrollbar=function(e,o){return"string"!=typeof e&&(o=e,e="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var s=l(this),r=s.data(t.data.name);(r||"init"===e)&&(r||(r=new c(s)),r[e]&&r[e].apply(r,o))}),this},l.fn.scrollbar.options=i;var a=function(){var l=0,e=0;return function(o){var s,i,n,c,d,h,u;for(s=0;s
10?(window.console&&console.log("Scroll updates exceed 10"),a=function(){}):(clearTimeout(l),l=setTimeout(a,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}})}(window.angular)});
\ No newline at end of file
+!function(l,s){"function"==typeof define&&define.amd?define(["jquery"],s):s(l.jQuery)}(this,function(l){"use strict";function s(l){var s=l.originalEvent;return s.axis&&s.axis===s.HORIZONTAL_AXIS?!1:s.wheelDeltaX?!1:!0}var e={data:{index:0,name:"scrollbar",updateTimer:0},isWebkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent),isMac:/mac/i.test(navigator.platform),isMobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),isOverlay:null,scroll:null,scrolls:[]};e.scrolls.add=function(l){this.remove(l).push(l)},e.scrolls.remove=function(s){for(;l.inArray(s,this)>=0;)this.splice(l.inArray(s,this),1);return this},e.scrolls.update=function(l){for(var s=0;s").addClass("scroll-wrapper").addClass(i.attr("class")).css("position","absolute"==i.css("position")?"absolute":"relative").insertBefore(i).append(i),i.is("textarea")&&(this.containerWrapper=r=l("").insertBefore(i).append(i),d.addClass("scroll-textarea")),r.addClass("scroll-content"),i.on("scroll"+n,l.proxy(function(){l.isFunction(this.options.onScroll)&&this.options.onScroll.call(this,{scroll:this.container.scrollTop(),size:this.dimensions.scrollHeight,visible:this.dimensions.visibleHeight},{scroll:this.container.scrollLeft(),size:this.dimensions.scrollWidth,visible:this.dimensions.visibleWidth}),this.scrollx.isVisible&&this.scrollx.scroll.bar.css("left",i.scrollLeft()*this.scrollx.kx+"px"),this.scrolly.isVisible&&this.scrolly.scroll.bar.css("top",i.scrollTop()*this.scrolly.kx+"px")},this)),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),a.disableBodyScroll){var p=function(l){s(l)?c.y.isVisible&&c.y.mousewheel(l):c.x.isVisible&&c.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,p),d.on("mousewheel"+n,p),e.isMobile&&d.on("touchstart"+n,function(s){var e=s.originalEvent.touches&&s.originalEvent.touches[0]||s,o={pageX:e.pageX,pageY:e.pageY},t={left:i.scrollLeft(),top:i.scrollTop()};l(document).on("touchmove"+n,function(l){var s=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;i.scrollLeft(t.left+o.pageX-s.pageX),i.scrollTop(t.top+o.pageY-s.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(a.onInit)&&a.onInit.apply(this,[i])}r.css({height:"auto","margin-bottom":-1*e.scroll.height+"px","margin-right":-1*e.scroll.width+"px","max-height":""}),l.each(c,function(e,o){var r=null,d=1,h="x"===e?"scrollLeft":"scrollTop",p=a.scrollStep,u=function(){var l=i[h]();i[h](l+p),1==d&&l+p>=f&&(l=i[h]()),-1==d&&f>=l+p&&(l=i[h]()),i[h]()==l&&r&&r()},f=0;o.scroll||(o.scroll=t._getScroll(a["scroll"+e]).addClass("scroll-"+e),a.showArrows&&o.scroll.addClass("scroll-element_arrows_visible"),o.mousewheel=function(l){if(!o.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return c.x.mousewheel(l),!0;var r=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=o.size-o.visible-o.offset;return(r>0&&n>f||0>r&&f>0)&&(f+=r,0>f&&(f=0),f>n&&(f=n),t.scrollTo=t.scrollTo||{},t.scrollTo[h]=f,setTimeout(function(){t.scrollTo&&(i.stop().animate(t.scrollTo,240,"linear",function(){f=i[h]()}),t.scrollTo=null)},1)),l.preventDefault(),!1},o.scroll.on("MozMousePixelScroll"+n,o.mousewheel).on("mousewheel"+n,o.mousewheel).on("mouseenter"+n,function(){f=i[h]()}),o.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:o.size-o.visible-o.offset,scrollbarOffset:o.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:o.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},c=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,p=a.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
").prependTo("body").attr("style","border:none;margin:0;padding:0;height:100px;width:100px;position:absolute;overflow:scroll;left:-1000px;top:-1000px;"),e.data.inner=l("").appendTo(e.data.outer).attr("style","border:none;margin:0;padding:0;height:100%;width:100%;position:absolute;")),{height:e.data.outer.height()-e.data.inner.height(),width:e.data.outer.width()-e.data.inner.width()}},_getDimensions:function(){var l=this.container,s=this.wrapper;return{scrollHeight:l.prop("scrollHeight"),scrollWidth:l.prop("scrollWidth"),visibleHeight:s.height()+(parseInt(l.css("top"),10)||0),visibleWidth:s.width()+(parseInt(l.css("left"),10)||0)}},_getScroll:function(s){var e={advanced:['
"].join(""),simple:['
"].join("")};return e[s]&&(s=e[s]),s||(s=e.simple),s="string"==typeof s?l(s).appendTo(this.wrapper):l(s),l.extend(s,{bar:s.find(".scroll-bar"),size:s.find(".scroll-element_size"),track:s.find(".scroll-element_track")}),s},_handleMouseDown:function(s,e){var o=this.namespace;return l(document).on("blur"+o,function(){l(document).add("body").off(o),s&&s()}),l(document).on("dragstart"+o,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+o,function(){l(document).add("body").off(o),s&&s()}),l("body").on("selectstart"+o,function(l){return l.preventDefault(),!1}),e&&e.preventDefault(),!1},_isChanged:function(){var s=!1,e=this._getDimensions(),o=this.dimensions;return l.each(e,function(l,e){return o[l]!==e?(s=!0,!1):void 0}),this.dimensions=e,s&&this.options.debug&&window.console&&console.log(this.dimensions),s},_updateScroll:function(l,s){var o=this.container,t=this.containerWrapper||o,i="scroll-scroll"+l+"_visible",r="x"===l?this.scrolly:this.scrollx,n=(this.wrapper,this.dimensions["x"===l?"scrollWidth":"scrollHeight"]),a=this.dimensions["x"===l?"visibleWidth":"visibleHeight"];s.isVisible=n-a>1,t.add(s.scroll).add(r.scroll)[s.isVisible?"addClass":"removeClass"](i),"y"===l&&t.css(o.is("textarea")||a>n?{height:a+e.scroll.height+"px","max-height":"none"}:{"max-height":a+e.scroll.height+"px"}),this._isChanged()&&this._updateScroll("x"===l?"y":"x",r)},_updateScrollSize:function(l,s){var e="x"===l?"left":"top",o="x"===l?"outerWidth":"outerHeight",t="x"===l?"width":"height",i=this.dimensions["x"===l?"scrollWidth":"scrollHeight"],r=this.dimensions["x"===l?"visibleWidth":"visibleHeight"],n=s.scroll.size[o]()+(parseInt(s.scroll.size.css(e),10)||0);this.options.autoScrollSize&&(s.scrollbarSize=parseInt(n*r/i,10),s.scroll.bar.css(t,s.scrollbarSize+"px")),s.scrollbarSize=s.scroll.bar[o](),s.kx=(n-s.scrollbarSize)/(i-r)||1}};var i=function(){e.scroll||l(window).resize(l.proxy(function(){var l=!1;if(e.scroll&&!e.isOverlay){var s=this._getBrowserScrollSize();(s.height!==e.scroll.height||s.width!==e.scroll.width)&&(e.scroll=s,l=!0)}e.scrolls.update(l)},this)),t.apply(this,arguments)};i.prototype=l.extend({},t.prototype,{});var r=function(){i.apply(this,arguments)};r.prototype=l.extend({},i.prototype,{});var n=function(){i.apply(this,arguments)};n.prototype=l.extend({},i.prototype,{});var a=function(){t.apply(this,arguments)};a.prototype=l.extend({},t.prototype,{});var c=i;switch(!0){case e.isFF:c=r;break;case e.isIE:c=n;break;case e.isWebkit:c=a}l.fn.scrollbar=function(s,o){return"string"!=typeof s&&(o=s,s="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var t=l(this),i=t.data(e.data.name);(i||"init"===s)&&(i||(i=new c(t)),i[s]&&i[s].apply(i,o))}),this},l.fn.scrollbar.options=o,window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){return{setOptions:function(s){l.extend(o,s)},$get:function(){return{options:l.copy(o)}}}}).directive("jqueryScrollbar",function(l,s){return{restrict:"AC",link:function(e,o,t){var i=s(t.jqueryScrollbar),r=i(e);o.scrollbar(r||l.options).on("$destroy",function(){o.scrollbar("destroy")})}}})}(window.angular)});
\ No newline at end of file
From 44f79ea56ea867ec2bf104cf78e41f265f2a41b1 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Mon, 3 Aug 2015 13:51:37 +0500
Subject: [PATCH 14/32] add changelog
---
CHANGELOG.md | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 66 insertions(+)
create mode 100644 CHANGELOG.md
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..ea4f463
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,66 @@
+v0.3.0 beta
+Code refactoring to support class-based structure
+
+v0.2.8 (20150723)
+Add Meteor/Node modules support
+Fix bug when removed content does not update element's height
+Fix bug with textarea in non-webkit browsers
+Update webkit-based browser detection to ignore Microsoft Edge browser
+
+v0.2.7 (20150122)
+Small fixes
+
+v0.2.6 (20141124)
+Re-register plugin in jQuery plugins repository
+
+v0.2.5 (20141119)
+Add option ignoreOverlay
+Fix webkit-based browser detection
+Ignore Firefox in Mac OS (cannot hide native scrollbars)
+
+v0.2.4 (20140715)
+Add textarea support
+
+v0.2.3 (20140703)
+Default options can be overwritten via default global object
+Fix bug with visible native scrollbars when page is zoomed
+Add onScroll callback
+Add Angular.JS directive
+
+v0.2.2 (20140411)
+Fix default options issue with multiple scrollbars initialization
+
+v0.2.1 (20140323)
+Update CSS classes for custom scroll elements
+Set option ignoreMobile to true by default
+Small CSS/JS fixes
+
+v0.2.0 (20140312)
+Add onUpdate callback
+Manage scrollbar visibility via CSS classes
+
+v0.1.9 (20140310)
+Fix bug with inner div height 100%
+Add option autoUpdate
+
+v0.1.8 (20140308)
+Fix bug with visible horizontal scrollbar if content height is less than container height
+
+v0.1.7 (20140307)
+Add hack for IE9-11 with 1px diff between visible and scrollable height
+Fix bug with second-time plugin initialization
+Remove warnings from IDE
+
+v0.1.4 (20130430)
+Add horizontal scrollbar handler
+Add option disableBodyScroll
+
+v0.1.3 (20130423)
+Improve scroll simulation
+Fix webkit bug with text selection
+
+v0.1.2 (20130422)
+Handle mousedown instead of click on scrollbar track/arrows
+
+v0.0.2 (20130413)
+First beta version
\ No newline at end of file
From 53d017dac39d5e709943f8f613dea594c053fc8a Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Mon, 3 Aug 2015 13:57:21 +0500
Subject: [PATCH 15/32] add tags to changelog.md
---
CHANGELOG.md | 100 +++++++++++++++++++++++++--------------------------
1 file changed, 50 insertions(+), 50 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ea4f463..b6ae630 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,66 +1,66 @@
-v0.3.0 beta
-Code refactoring to support class-based structure
+
v0.3.0 beta
+Code refactoring to support class-based structure
-v0.2.8 (20150723)
-Add Meteor/Node modules support
-Fix bug when removed content does not update element's height
-Fix bug with textarea in non-webkit browsers
-Update webkit-based browser detection to ignore Microsoft Edge browser
+
v0.2.8 (20150723)
+Add Meteor/Node modules support
+Fix bug when removed content does not update element's height
+Fix bug with textarea in non-webkit browsers
+Update webkit-based browser detection to ignore Microsoft Edge browser
-v0.2.7 (20150122)
-Small fixes
+
v0.2.7 (20150122)
+Small fixes
-v0.2.6 (20141124)
-Re-register plugin in jQuery plugins repository
+
v0.2.6 (20141124)
+Re-register plugin in jQuery plugins repository
-v0.2.5 (20141119)
-Add option ignoreOverlay
-Fix webkit-based browser detection
-Ignore Firefox in Mac OS (cannot hide native scrollbars)
+
v0.2.5 (20141119)
+Add option ignoreOverlay
+Fix webkit-based browser detection
+Ignore Firefox in Mac OS (cannot hide native scrollbars)
-v0.2.4 (20140715)
-Add textarea support
+
v0.2.4 (20140715)
+Add textarea support
-v0.2.3 (20140703)
-Default options can be overwritten via default global object
-Fix bug with visible native scrollbars when page is zoomed
-Add onScroll callback
-Add Angular.JS directive
+
v0.2.3 (20140703)
+Default options can be overwritten via default global object
+Fix bug with visible native scrollbars when page is zoomed
+Add onScroll callback
+Add Angular.JS directive
-v0.2.2 (20140411)
-Fix default options issue with multiple scrollbars initialization
+
v0.2.2 (20140411)
+Fix default options issue with multiple scrollbars initialization
-v0.2.1 (20140323)
-Update CSS classes for custom scroll elements
-Set option ignoreMobile to true by default
-Small CSS/JS fixes
+
v0.2.1 (20140323)
+Update CSS classes for custom scroll elements
+Set option ignoreMobile to true by default
+Small CSS/JS fixes
-v0.2.0 (20140312)
-Add onUpdate callback
-Manage scrollbar visibility via CSS classes
+
v0.2.0 (20140312)
+Add onUpdate callback
+Manage scrollbar visibility via CSS classes
-v0.1.9 (20140310)
-Fix bug with inner div height 100%
-Add option autoUpdate
+
v0.1.9 (20140310)
+Fix bug with inner div height 100%
+Add option autoUpdate
-v0.1.8 (20140308)
-Fix bug with visible horizontal scrollbar if content height is less than container height
+
v0.1.8 (20140308)
+Fix bug with visible horizontal scrollbar if content height is less than container height
-v0.1.7 (20140307)
-Add hack for IE9-11 with 1px diff between visible and scrollable height
-Fix bug with second-time plugin initialization
-Remove warnings from IDE
+
v0.1.7 (20140307)
+Add hack for IE9-11 with 1px diff between visible and scrollable height
+Fix bug with second-time plugin initialization
+Remove warnings from IDE
-v0.1.4 (20130430)
-Add horizontal scrollbar handler
-Add option disableBodyScroll
+
v0.1.4 (20130430)
+Add horizontal scrollbar handler
+Add option disableBodyScroll
-v0.1.3 (20130423)
-Improve scroll simulation
-Fix webkit bug with text selection
+
v0.1.3 (20130423)
+Improve scroll simulation
+Fix webkit bug with text selection
-v0.1.2 (20130422)
-Handle mousedown instead of click on scrollbar track/arrows
+
v0.1.2 (20130422)
+Handle mousedown instead of click on scrollbar track/arrows
-v0.0.2 (20130413)
-First beta version
\ No newline at end of file
+
v0.0.2 (20130413)
+First version
\ No newline at end of file
From c7326aaaa664a4e4468e856dcc3283901674a984 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Mon, 3 Aug 2015 14:00:29 +0500
Subject: [PATCH 16/32] update documentation
---
CHANGELOG.md | 2 +-
README.md | 5 +++--
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b6ae630..e252025 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,4 @@
-
v0.3.0 beta
+
v0.3.0 beta (not stable)
Code refactoring to support class-based structure
v0.2.8 (20150723)
diff --git a/README.md b/README.md
index 44c0da5..fac3633 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,8 @@ Cross-browser CSS customizable scrollbar with advanced features:
+
-Please note that CSS was updated in version 0.2.8.
-Please update section /*************** SCROLLBAR BASE CSS ***************/ in your CSS file.
+
+Please download stable version from link above. Current version 0.3.0 is not stable.
From 41bd50780c91da012556d79778b44993b0ec4fbe Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Fri, 21 Aug 2015 16:21:06 +0500
Subject: [PATCH 17/32] move current development verstion to new branch
---
CHANGELOG.md | 3 -
README.md | 3 -
jquery.scrollbar.js | 469 +++++++++++++++++++++-------------------
jquery.scrollbar.min.js | 4 +-
4 files changed, 248 insertions(+), 231 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e252025..7880512 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,3 @@
-
v0.3.0 beta (not stable)
-Code refactoring to support class-based structure
-
v0.2.8 (20150723)
Add Meteor/Node modules support
Fix bug when removed content does not update element's height
diff --git a/README.md b/README.md
index fac3633..09b2cfd 100644
--- a/README.md
+++ b/README.md
@@ -22,6 +22,3 @@ Cross-browser CSS customizable scrollbar with advanced features:
-
-
-Please download stable version from link above. Current version 0.3.0 is not stable.
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index b384169..f78962b 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -7,7 +7,7 @@
* If you found bug, please contact me via email <13real008@gmail.com>
*
* @author Yuriy Khabarov aka Gromo
- * @version 0.3.0 beta
+ * @version 0.2.8
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
@@ -21,18 +21,20 @@
}(this, function ($) {
'use strict';
+ // init flags & variables
+ var debug = false;
+
var browser = {
data: {
index: 0,
- name: 'scrollbar',
- updateTimer: 0
+ name: 'scrollbar'
},
- isWebkit: /webkit/i.test(navigator.userAgent) && !/edge\/\d+/i.test(navigator.userAgent),
- isMac: /mac/i.test(navigator.platform),
- isMobile: /android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),
- isOverlay: null,
+ macosx: /mac/i.test(navigator.platform),
+ mobile: /android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),
+ overlay: null,
scroll: null,
- scrolls: []
+ scrolls: [],
+ webkit: /webkit/i.test(navigator.userAgent) && !/edge\/\d+/i.test(navigator.userAgent)
};
browser.scrolls.add = function (instance) {
@@ -44,49 +46,52 @@
}
return this;
};
- browser.scrolls.update = function(force){
- for (var i = 0; i < browser.scrolls.length; i++) {
- browser.scrolls[i].update(force);
- }
- clearTimeout(browser.data.updateTimer);
- browser.data.updateTimer = setTimeout(browser.scrolls.update, 300);
- };
- var defaultOptions = {
- autoScrollSize: true, // automatically calculate scrollsize
- autoUpdate: true, // update scrollbar if content/container size changed
- debug: false, // debug mode
- disableBodyScroll: false, // disable body scroll if mouse over container
- duration: 200, // scroll animate duration in ms
- ignoreMobile: false, // ignore mobile devices
- ignoreOverlay: false, // ignore browsers with overlay scrollbars (mobile, MacOS)
- scrollStep: 30, // scroll step for scrollbar arrows
- showArrows: false, // add class to show arrows
- stepScrolling: true, // when scrolling to scrollbar mousedown position
-
- scrollx: null, // horizontal scroll element
- scrolly: null, // vertical scroll element
-
- onDestroy: null, // callback function on destroy,
- onInit: null, // callback function on first initialization
- onScroll: null, // callback function on content scrolling
- onUpdate: null // callback function on init/resize (before scrollbar size calculation)
+ var defaults = {
+ "autoScrollSize": true, // automatically calculate scrollsize
+ "autoUpdate": true, // update scrollbar if content/container size changed
+ "debug": false, // debug mode
+ "disableBodyScroll": false, // disable body scroll if mouse over container
+ "duration": 200, // scroll animate duration in ms
+ "ignoreMobile": false, // ignore mobile devices
+ "ignoreOverlay": false, // ignore browsers with overlay scrollbars (mobile, MacOS)
+ "scrollStep": 30, // scroll step for scrollbar arrows
+ "showArrows": false, // add class to show arrows
+ "stepScrolling": true, // when scrolling to scrollbar mousedown position
+
+ "scrollx": null, // horizontal scroll element
+ "scrolly": null, // vertical scroll element
+
+ "onDestroy": null, // callback function on destroy,
+ "onInit": null, // callback function on first initialization
+ "onScroll": null, // callback function on content scrolling
+ "onUpdate": null // callback function on init/resize (before scrollbar size calculation)
};
var BaseScrollbar = function (container) {
if (!browser.scroll) {
- browser.scroll = this._getBrowserScrollSize();
- browser.isOverlay = (browser.scroll.height === 0 && browser.scroll.width === 0);
- browser.scrolls.update(); // run interval check
+ browser.overlay = isScrollOverlaysContent();
+ browser.scroll = getBrowserScrollSize();
+ updateScrollbars();
+
+ $(window).resize(function () {
+ var forceUpdate = false;
+ if (browser.scroll && (browser.scroll.height || browser.scroll.width)) {
+ var scroll = getBrowserScrollSize();
+ if (scroll.height !== browser.scroll.height || scroll.width !== browser.scroll.width) {
+ browser.scroll = scroll;
+ forceUpdate = true; // handle page zoom
+ }
+ }
+ updateScrollbars(forceUpdate);
+ });
}
this.container = container;
- this.dimensions = {};
- this.isRtl = container.css('direction') === 'rtl';
this.namespace = '.scrollbar_' + browser.data.index++;
- this.options = $.extend({}, defaultOptions, window.jQueryScrollbarOptions || {});
+ this.options = $.extend({}, defaults, window.jQueryScrollbarOptions || {});
this.scrollTo = null;
this.scrollx = {};
this.scrolly = {};
@@ -103,15 +108,12 @@
return;
}
- // unregister scroll instance
this.container.removeData(browser.data.name);
browser.scrolls.remove(this);
// init variables
- var currentScroll = {
- "left": this.container.scrollLeft(),
- "top": this.container.scrollTop()
- };
+ var scrollLeft = this.container.scrollLeft();
+ var scrollTop = this.container.scrollTop();
this.container.insertBefore(this.wrapper).css({
"height": "",
@@ -120,8 +122,8 @@
})
.removeClass('scroll-content scroll-scrollx_visible scroll-scrolly_visible')
.off(this.namespace)
- .scrollLeft(currentScroll.left)
- .scrollTop(currentScroll.top);
+ .scrollLeft(scrollLeft)
+ .scrollTop(scrollTop);
this.scrollx.scroll.removeClass('scroll-scrollx_visible').find('div').andSelf().off(this.namespace);
this.scrolly.scroll.removeClass('scroll-scrolly_visible').find('div').andSelf().off(this.namespace);
@@ -151,9 +153,9 @@
};
// do not init if in ignorable browser
- if ((browser.isMobile && o.ignoreMobile)
- || (browser.isOverlay && o.ignoreOverlay)
- || (browser.isMac && !browser.isWebkit) // still required to ignore nonWebKit browsers on Mac
+ if ((browser.mobile && o.ignoreMobile)
+ || (browser.overlay && o.ignoreOverlay)
+ || (browser.macosx && !browser.webkit) // still required to ignore nonWebKit browsers on Mac
) {
return false;
}
@@ -169,23 +171,30 @@
w.addClass('scroll-textarea');
}
- cw.addClass('scroll-content');
+ cw.addClass('scroll-content').css({
+ "height": "auto",
+ "margin-bottom": browser.scroll.height * -1 + 'px',
+ "margin-right": browser.scroll.width * -1 + 'px',
+ "max-height": ""
+ });
- c.on('scroll' + namespace, $.proxy(function () {
- if ($.isFunction(this.options.onScroll)) {
- this.options.onScroll.call(this, {
- scroll: this.container.scrollTop(),
- size: this.dimensions.scrollHeight,
- visible: this.dimensions.visibleHeight
+ c.on('scroll' + namespace, function (event) {
+ if ($.isFunction(o.onScroll)) {
+ o.onScroll.call(S, {
+ "maxScroll": s.y.maxScrollOffset,
+ "scroll": c.scrollTop(),
+ "size": s.y.size,
+ "visible": s.y.visible
}, {
- scroll: this.container.scrollLeft(),
- size: this.dimensions.scrollWidth,
- visible: this.dimensions.visibleWidth
+ "maxScroll": s.x.maxScrollOffset,
+ "scroll": c.scrollLeft(),
+ "size": s.x.size,
+ "visible": s.x.visible
});
}
- this.scrollx.isVisible && this.scrollx.scroll.bar.css('left', c.scrollLeft() * this.scrollx.kx + 'px');
- this.scrolly.isVisible && this.scrolly.scroll.bar.css('top', c.scrollTop() * this.scrolly.kx + 'px');
- }, this));
+ s.x.isVisible && s.x.scroll.bar.css('left', c.scrollLeft() * s.x.kx + 'px');
+ s.y.isVisible && s.y.scroll.bar.css('top', c.scrollTop() * s.y.kx + 'px');
+ });
/* prevent native scrollbars to be visible on #anchor click */
w.on('scroll' + namespace, function () {
@@ -201,12 +210,12 @@
w.on('MozMousePixelScroll' + namespace, handleMouseScroll);
w.on('mousewheel' + namespace, handleMouseScroll);
- if (browser.isMobile) {
+ if (browser.mobile) {
w.on('touchstart' + namespace, function (event) {
var touch = event.originalEvent.touches && event.originalEvent.touches[0] || event;
var originalTouch = {
- pageX: touch.pageX,
- pageY: touch.pageY
+ "pageX": touch.pageX,
+ "pageY": touch.pageY
};
var originalScroll = {
"left": c.scrollLeft(),
@@ -227,15 +236,15 @@
if ($.isFunction(o.onInit)){
o.onInit.apply(this, [c]);
}
+ } else {
+ cw.css({
+ "height": "auto",
+ "margin-bottom": browser.scroll.height * -1 + 'px',
+ "margin-right": browser.scroll.width * -1 + 'px',
+ "max-height": ""
+ });
}
- cw.css({
- "height": "auto",
- "margin-bottom": browser.scroll.height * -1 + 'px',
- "margin-right": browser.scroll.width * -1 + 'px',
- "max-height": ""
- });
-
// init scrollbars & recalculate sizes
$.each(s, function (d, scrollx) {
@@ -389,10 +398,27 @@
});
// remove classes & reset applied styles
- cw.add(this.scrollx.scroll).add(this.scrolly.scroll).removeClass('scroll-scrollx_visible scroll-scrolly_visible');
+ $.each(s, function (d, scrollx) {
+ var scrollClass = 'scroll-scroll' + d + '_visible';
+ var scrolly = (d == "x") ? s.y : s.x;
+
+ scrollx.scroll.removeClass(scrollClass);
+ scrolly.scroll.removeClass(scrollClass);
+ cw.removeClass(scrollClass);
+ });
// calculate init sizes
- this.dimensions = this._getDimensions();
+ $.each(s, function (d, scrollx) {
+ $.extend(scrollx, (d == "x") ? {
+ "offset": parseInt(c.css('left'), 10) || 0,
+ "size": c.prop('scrollWidth'),
+ "visible": w.width()
+ } : {
+ "offset": parseInt(c.css('top'), 10) || 0,
+ "size": c.prop('scrollHeight'),
+ "visible": w.height()
+ });
+ });
// update scrollbar visibility/dimensions
this._updateScroll('x', this.scrollx);
@@ -403,50 +429,29 @@
}
// calculate scroll size
- this._updateScrollSize('x', this.scrollx);
- this._updateScrollSize('y', this.scrolly);
+ $.each(s, function (d, scrollx) {
- c.scrollLeft(initScroll.scrollLeft).scrollTop(initScroll.scrollTop).trigger('scroll');
- },
+ var cssOffset = (d === 'x') ? 'left' : 'top';
+ var cssFullSize = (d === 'x') ? 'outerWidth' : 'outerHeight';
+ var cssSize = (d === 'x') ? 'width' : 'height';
+ var offset = parseInt(c.css(cssOffset), 10) || 0;
- update: function(force){
- if (force || (this.options.autoUpdate && this.wrapper && this.wrapper.is(':visible') && this._isChanged())) {
- this.init();
- }
- },
+ var AreaSize = scrollx.size;
+ var AreaVisible = scrollx.visible + offset;
- /**
- * Calculate browser native scrollbar height/width
- *
- * @returns {Object} {"height", "width"}
- */
- _getBrowserScrollSize: function () {
- if (!browser.data.outer) {
- browser.data.outer = $('
').prependTo('body')
- .attr('style', 'border:none;margin:0;padding:0;height:100px;width:100px;position:absolute;overflow:scroll;left:-1000px;top:-1000px;');
- browser.data.inner = $('
').appendTo(browser.data.outer)
- .attr('style', 'border:none;margin:0;padding:0;height:100%;width:100%;position:absolute;');
- }
- return {
- height: browser.data.outer.height() - browser.data.inner.height(),
- width: browser.data.outer.width() - browser.data.inner.width()
- };
- },
+ var scrollSize = scrollx.scroll.size[cssFullSize]() + (parseInt(scrollx.scroll.size.css(cssOffset), 10) || 0);
- /**
- * Get element's dimensions: scrollHeight, scrollWidth, visibleHeight, visibleWidth
- *
- * @returns {Object} element dimensions
- */
- _getDimensions: function () {
- var element = this.container,
- wrapper = this.wrapper;
- return {
- scrollHeight: element.prop('scrollHeight'),
- scrollWidth: element.prop('scrollWidth'),
- visibleHeight: wrapper.height() + (parseInt(element.css('top'), 10) || 0),
- visibleWidth: wrapper.width() + (parseInt(element.css('left'), 10) || 0)
- };
+ if (o.autoScrollSize) {
+ scrollx.scrollbarSize = parseInt(scrollSize * AreaVisible / AreaSize, 10);
+ scrollx.scroll.bar.css(cssSize, scrollx.scrollbarSize + 'px');
+ }
+
+ scrollx.scrollbarSize = scrollx.scroll.bar[cssFullSize]();
+ scrollx.kx = ((scrollSize - scrollx.scrollbarSize) / (AreaSize - AreaVisible)) || 1;
+ scrollx.maxScrollOffset = AreaSize - AreaVisible;
+ });
+
+ c.scrollLeft(initScroll.scrollLeft).scrollTop(initScroll.scrollTop).trigger('scroll');
},
/**
@@ -533,44 +538,28 @@
return false;
},
- /**
- * Check if element dimensions were changed
- * + update current dimensions
- *
- * @returns {Boolean} is changed
- */
- _isChanged: function () {
- var isChanged = false,
- newDimensions = this._getDimensions(),
- oldDimensions = this.dimensions;
- $.each(newDimensions, function (key, newValue) {
- if (oldDimensions[key] !== newValue) {
- isChanged = true;
- return false;
- }
- });
- this.dimensions = newDimensions;
-
- if (isChanged && this.options.debug) {
- window.console && console.log(this.dimensions);
- }
-
- return isChanged;
- },
-
_updateScroll: function (d, scrollx) {
var container = this.container,
containerWrapper = this.containerWrapper || container,
scrollClass = 'scroll-scroll' + d + '_visible',
scrolly = (d === 'x') ? this.scrolly : this.scrollx,
+ offset = parseInt(this.container.css((d === 'x') ? 'left' : 'top'), 10) || 0,
wrapper = this.wrapper;
- var AreaSize = this.dimensions[d === 'x' ? 'scrollWidth' : 'scrollHeight'],
- AreaVisible = this.dimensions[d === 'x' ? 'visibleWidth' : 'visibleHeight'];
+ var AreaSize = scrollx.size;
+ var AreaVisible = scrollx.visible + offset;
scrollx.isVisible = (AreaSize - AreaVisible) > 1; // bug in IE9/11 with 1px diff
- containerWrapper.add(scrollx.scroll).add(scrolly.scroll)[scrollx.isVisible ? 'addClass' : 'removeClass'](scrollClass);
+ if (scrollx.isVisible) {
+ scrollx.scroll.addClass(scrollClass);
+ scrolly.scroll.addClass(scrollClass);
+ containerWrapper.addClass(scrollClass);
+ } else {
+ scrollx.scroll.removeClass(scrollClass);
+ scrolly.scroll.removeClass(scrollClass);
+ containerWrapper.removeClass(scrollClass);
+ }
if (d === 'y') {
if(container.is('textarea') || AreaSize < AreaVisible){
@@ -586,94 +575,34 @@
}
}
- if(this._isChanged()){
+ if (scrollx.size != container.prop('scrollWidth')
+ || scrolly.size != container.prop('scrollHeight')
+ || scrollx.visible != wrapper.width()
+ || scrolly.visible != wrapper.height()
+ || scrollx.offset != (parseInt(container.css('left'), 10) || 0)
+ || scrolly.offset != (parseInt(container.css('top'), 10) || 0)
+ ) {
+ $.extend(this.scrollx, {
+ "offset": parseInt(container.css('left'), 10) || 0,
+ "size": container.prop('scrollWidth'),
+ "visible": wrapper.width()
+ });
+ $.extend(this.scrolly, {
+ "offset": parseInt(container.css('top'), 10) || 0,
+ "size": this.container.prop('scrollHeight'),
+ "visible": wrapper.height()
+ });
this._updateScroll(d === 'x' ? 'y' : 'x', scrolly);
}
- },
-
- _updateScrollSize: function (d, scrollx) {
-
- var cssOffset = (d === 'x') ? 'left' : 'top',
- cssFullSize = (d === 'x') ? 'outerWidth' : 'outerHeight',
- cssSize = (d === 'x') ? 'width' : 'height';
-
- var AreaSize = this.dimensions[d === 'x' ? 'scrollWidth' : 'scrollHeight'],
- AreaVisible = this.dimensions[d === 'x' ? 'visibleWidth' : 'visibleHeight'];
-
- var scrollSize = scrollx.scroll.size[cssFullSize]() + (parseInt(scrollx.scroll.size.css(cssOffset), 10) || 0);
-
- if (this.options.autoScrollSize) {
- scrollx.scrollbarSize = parseInt(scrollSize * AreaVisible / AreaSize, 10);
- scrollx.scroll.bar.css(cssSize, scrollx.scrollbarSize + 'px');
- }
-
- scrollx.scrollbarSize = scrollx.scroll.bar[cssFullSize]();
- scrollx.kx = ((scrollSize - scrollx.scrollbarSize) / (AreaSize - AreaVisible)) || 1;
- }
- };
-
- var BaseVisibleScrollbar = function(){
-
- // handle page zoom & scrollbars resizing
- if(!browser.scroll){
- $(window).resize($.proxy(function () {
- var forceUpdate = false;
- if (browser.scroll && !browser.isOverlay) {
- var scroll = this._getBrowserScrollSize();
- if (scroll.height !== browser.scroll.height || scroll.width !== browser.scroll.width) {
- browser.scroll = scroll;
- forceUpdate = true; // handle page zoom
- }
- }
- browser.scrolls.update(forceUpdate);
- }, this));
}
-
- BaseScrollbar.apply(this, arguments);
- };
-
- BaseVisibleScrollbar.prototype = $.extend({}, BaseScrollbar.prototype, {
-
- });
-
- var FirefoxScrollbar = function () {
- BaseVisibleScrollbar.apply(this, arguments);
- };
-
- FirefoxScrollbar.prototype = $.extend({}, BaseVisibleScrollbar.prototype, {
- });
-
- var MsieScrollbar = function () {
- BaseVisibleScrollbar.apply(this, arguments);
- };
-
- MsieScrollbar.prototype = $.extend({}, BaseVisibleScrollbar.prototype, {
- });
-
- var WebkitScrollbar = function () {
- BaseScrollbar.apply(this, arguments);
};
- WebkitScrollbar.prototype = $.extend({}, BaseScrollbar.prototype, {
- });
-
- var CustomScrollbar = BaseVisibleScrollbar;
- switch (true) {
- case browser.isFF:
- CustomScrollbar = FirefoxScrollbar;
- break;
- case browser.isIE:
- CustomScrollbar = MsieScrollbar;
- break;
- case browser.isWebkit:
- CustomScrollbar = WebkitScrollbar;
- break;
- }
+ var CustomScrollbar = BaseScrollbar;
/*
* Extend jQuery as plugin
*
- * @param {Mixed} command to execute or options to init
+ * @param {Mixed} command to execute
* @param {Mixed} arguments as Array
* @return {jQuery}
*/
@@ -706,10 +635,103 @@
/**
* Connect default options to global object
*/
- $.fn.scrollbar.options = defaultOptions;
+ $.fn.scrollbar.options = defaults;
+ /**
+ * Check if scroll content/container size is changed
+ */
+
+ var updateScrollbars = (function () {
+ var timer = 0,
+ timerCounter = 0;
+
+ return function (force) {
+ var i, container, options, scroll, wrapper, scrollx, scrolly;
+ for (i = 0; i < browser.scrolls.length; i++) {
+ scroll = browser.scrolls[i];
+ container = scroll.container;
+ options = scroll.options;
+ wrapper = scroll.wrapper;
+ scrollx = scroll.scrollx;
+ scrolly = scroll.scrolly;
+ if (force || (options.autoUpdate && wrapper && wrapper.is(':visible') &&
+ (container.prop('scrollWidth') != scrollx.size || container.prop('scrollHeight') != scrolly.size || wrapper.width() != scrollx.visible || wrapper.height() != scrolly.visible))) {
+ scroll.init();
+
+ if (options.debug) {
+ window.console && console.log({
+ scrollHeight: container.prop('scrollHeight') + ':' + scroll.scrolly.size,
+ scrollWidth: container.prop('scrollWidth') + ':' + scroll.scrollx.size,
+ visibleHeight: wrapper.height() + ':' + scroll.scrolly.visible,
+ visibleWidth: wrapper.width() + ':' + scroll.scrollx.visible
+ }, true);
+ timerCounter++;
+ }
+ }
+ }
+ if (debug && timerCounter > 10) {
+ window.console && console.log('Scroll updates exceed 10');
+ updateScrollbars = function () {};
+ } else {
+ clearTimeout(timer);
+ timer = setTimeout(updateScrollbars, 300);
+ }
+ };
+ })();
+
/* ADDITIONAL FUNCTIONS */
+ /**
+ * Get native browser scrollbar size (height/width)
+ *
+ * @param {Boolean} actual size or CSS size, default - CSS size
+ * @returns {Object} with height, width
+ */
+ function getBrowserScrollSize(actualSize) {
+
+ if (browser.webkit && !actualSize) {
+ return {
+ "height": 0,
+ "width": 0
+ };
+ }
+
+ if (!browser.data.outer) {
+ var css = {
+ "border": "none",
+ "box-sizing": "content-box",
+ "height": "200px",
+ "margin": "0",
+ "padding": "0",
+ "width": "200px"
+ };
+ browser.data.inner = $("
").css($.extend({}, css));
+ browser.data.outer = $("
").css($.extend({
+ "left": "-1000px",
+ "overflow": "scroll",
+ "position": "absolute",
+ "top": "-1000px"
+ }, css)).append(browser.data.inner).appendTo("body");
+ }
+
+ browser.data.outer.scrollLeft(1000).scrollTop(1000);
+
+ return {
+ "height": Math.ceil((browser.data.outer.offset().top - browser.data.inner.offset().top) || 0),
+ "width": Math.ceil((browser.data.outer.offset().left - browser.data.inner.offset().left) || 0)
+ };
+ }
+
+ /**
+ * Check if native browser scrollbars overlay content
+ *
+ * @returns {Boolean}
+ */
+ function isScrollOverlaysContent() {
+ var scrollSize = getBrowserScrollSize(true);
+ return !(scrollSize.height || scrollSize.width);
+ }
+
function isVerticalScroll(event) {
var e = event.originalEvent;
if (e.axis && e.axis === e.HORIZONTAL_AXIS)
@@ -729,6 +751,7 @@
(function (angular) {
angular.module('jQueryScrollbar', [])
.provider('jQueryScrollbar', function () {
+ var defaultOptions = defaults;
return {
setOptions: function (options) {
angular.extend(defaultOptions, options);
diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js
index 3adce6e..9e81163 100644
--- a/jquery.scrollbar.min.js
+++ b/jquery.scrollbar.min.js
@@ -9,8 +9,8 @@
* Compressed by http://jscompress.com/
*
* @author Yuriy Khabarov aka Gromo
- * @version 0.3.0 beta
+ * @version 0.2.8
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-!function(l,s){"function"==typeof define&&define.amd?define(["jquery"],s):s(l.jQuery)}(this,function(l){"use strict";function s(l){var s=l.originalEvent;return s.axis&&s.axis===s.HORIZONTAL_AXIS?!1:s.wheelDeltaX?!1:!0}var e={data:{index:0,name:"scrollbar",updateTimer:0},isWebkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent),isMac:/mac/i.test(navigator.platform),isMobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),isOverlay:null,scroll:null,scrolls:[]};e.scrolls.add=function(l){this.remove(l).push(l)},e.scrolls.remove=function(s){for(;l.inArray(s,this)>=0;)this.splice(l.inArray(s,this),1);return this},e.scrolls.update=function(l){for(var s=0;s
").addClass("scroll-wrapper").addClass(i.attr("class")).css("position","absolute"==i.css("position")?"absolute":"relative").insertBefore(i).append(i),i.is("textarea")&&(this.containerWrapper=r=l("").insertBefore(i).append(i),d.addClass("scroll-textarea")),r.addClass("scroll-content"),i.on("scroll"+n,l.proxy(function(){l.isFunction(this.options.onScroll)&&this.options.onScroll.call(this,{scroll:this.container.scrollTop(),size:this.dimensions.scrollHeight,visible:this.dimensions.visibleHeight},{scroll:this.container.scrollLeft(),size:this.dimensions.scrollWidth,visible:this.dimensions.visibleWidth}),this.scrollx.isVisible&&this.scrollx.scroll.bar.css("left",i.scrollLeft()*this.scrollx.kx+"px"),this.scrolly.isVisible&&this.scrolly.scroll.bar.css("top",i.scrollTop()*this.scrolly.kx+"px")},this)),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),a.disableBodyScroll){var p=function(l){s(l)?c.y.isVisible&&c.y.mousewheel(l):c.x.isVisible&&c.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,p),d.on("mousewheel"+n,p),e.isMobile&&d.on("touchstart"+n,function(s){var e=s.originalEvent.touches&&s.originalEvent.touches[0]||s,o={pageX:e.pageX,pageY:e.pageY},t={left:i.scrollLeft(),top:i.scrollTop()};l(document).on("touchmove"+n,function(l){var s=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;i.scrollLeft(t.left+o.pageX-s.pageX),i.scrollTop(t.top+o.pageY-s.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(a.onInit)&&a.onInit.apply(this,[i])}r.css({height:"auto","margin-bottom":-1*e.scroll.height+"px","margin-right":-1*e.scroll.width+"px","max-height":""}),l.each(c,function(e,o){var r=null,d=1,h="x"===e?"scrollLeft":"scrollTop",p=a.scrollStep,u=function(){var l=i[h]();i[h](l+p),1==d&&l+p>=f&&(l=i[h]()),-1==d&&f>=l+p&&(l=i[h]()),i[h]()==l&&r&&r()},f=0;o.scroll||(o.scroll=t._getScroll(a["scroll"+e]).addClass("scroll-"+e),a.showArrows&&o.scroll.addClass("scroll-element_arrows_visible"),o.mousewheel=function(l){if(!o.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return c.x.mousewheel(l),!0;var r=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=o.size-o.visible-o.offset;return(r>0&&n>f||0>r&&f>0)&&(f+=r,0>f&&(f=0),f>n&&(f=n),t.scrollTo=t.scrollTo||{},t.scrollTo[h]=f,setTimeout(function(){t.scrollTo&&(i.stop().animate(t.scrollTo,240,"linear",function(){f=i[h]()}),t.scrollTo=null)},1)),l.preventDefault(),!1},o.scroll.on("MozMousePixelScroll"+n,o.mousewheel).on("mousewheel"+n,o.mousewheel).on("mouseenter"+n,function(){f=i[h]()}),o.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:o.size-o.visible-o.offset,scrollbarOffset:o.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:o.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},c=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,p=a.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
").prependTo("body").attr("style","border:none;margin:0;padding:0;height:100px;width:100px;position:absolute;overflow:scroll;left:-1000px;top:-1000px;"),e.data.inner=l("").appendTo(e.data.outer).attr("style","border:none;margin:0;padding:0;height:100%;width:100%;position:absolute;")),{height:e.data.outer.height()-e.data.inner.height(),width:e.data.outer.width()-e.data.inner.width()}},_getDimensions:function(){var l=this.container,s=this.wrapper;return{scrollHeight:l.prop("scrollHeight"),scrollWidth:l.prop("scrollWidth"),visibleHeight:s.height()+(parseInt(l.css("top"),10)||0),visibleWidth:s.width()+(parseInt(l.css("left"),10)||0)}},_getScroll:function(s){var e={advanced:['
"].join(""),simple:['
"].join("")};return e[s]&&(s=e[s]),s||(s=e.simple),s="string"==typeof s?l(s).appendTo(this.wrapper):l(s),l.extend(s,{bar:s.find(".scroll-bar"),size:s.find(".scroll-element_size"),track:s.find(".scroll-element_track")}),s},_handleMouseDown:function(s,e){var o=this.namespace;return l(document).on("blur"+o,function(){l(document).add("body").off(o),s&&s()}),l(document).on("dragstart"+o,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+o,function(){l(document).add("body").off(o),s&&s()}),l("body").on("selectstart"+o,function(l){return l.preventDefault(),!1}),e&&e.preventDefault(),!1},_isChanged:function(){var s=!1,e=this._getDimensions(),o=this.dimensions;return l.each(e,function(l,e){return o[l]!==e?(s=!0,!1):void 0}),this.dimensions=e,s&&this.options.debug&&window.console&&console.log(this.dimensions),s},_updateScroll:function(l,s){var o=this.container,t=this.containerWrapper||o,i="scroll-scroll"+l+"_visible",r="x"===l?this.scrolly:this.scrollx,n=(this.wrapper,this.dimensions["x"===l?"scrollWidth":"scrollHeight"]),a=this.dimensions["x"===l?"visibleWidth":"visibleHeight"];s.isVisible=n-a>1,t.add(s.scroll).add(r.scroll)[s.isVisible?"addClass":"removeClass"](i),"y"===l&&t.css(o.is("textarea")||a>n?{height:a+e.scroll.height+"px","max-height":"none"}:{"max-height":a+e.scroll.height+"px"}),this._isChanged()&&this._updateScroll("x"===l?"y":"x",r)},_updateScrollSize:function(l,s){var e="x"===l?"left":"top",o="x"===l?"outerWidth":"outerHeight",t="x"===l?"width":"height",i=this.dimensions["x"===l?"scrollWidth":"scrollHeight"],r=this.dimensions["x"===l?"visibleWidth":"visibleHeight"],n=s.scroll.size[o]()+(parseInt(s.scroll.size.css(e),10)||0);this.options.autoScrollSize&&(s.scrollbarSize=parseInt(n*r/i,10),s.scroll.bar.css(t,s.scrollbarSize+"px")),s.scrollbarSize=s.scroll.bar[o](),s.kx=(n-s.scrollbarSize)/(i-r)||1}};var i=function(){e.scroll||l(window).resize(l.proxy(function(){var l=!1;if(e.scroll&&!e.isOverlay){var s=this._getBrowserScrollSize();(s.height!==e.scroll.height||s.width!==e.scroll.width)&&(e.scroll=s,l=!0)}e.scrolls.update(l)},this)),t.apply(this,arguments)};i.prototype=l.extend({},t.prototype,{});var r=function(){i.apply(this,arguments)};r.prototype=l.extend({},i.prototype,{});var n=function(){i.apply(this,arguments)};n.prototype=l.extend({},i.prototype,{});var a=function(){t.apply(this,arguments)};a.prototype=l.extend({},t.prototype,{});var c=i;switch(!0){case e.isFF:c=r;break;case e.isIE:c=n;break;case e.isWebkit:c=a}l.fn.scrollbar=function(s,o){return"string"!=typeof s&&(o=s,s="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var t=l(this),i=t.data(e.data.name);(i||"init"===s)&&(i||(i=new c(t)),i[s]&&i[s].apply(i,o))}),this},l.fn.scrollbar.options=o,window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){return{setOptions:function(s){l.extend(o,s)},$get:function(){return{options:l.copy(o)}}}}).directive("jqueryScrollbar",function(l,s){return{restrict:"AC",link:function(e,o,t){var i=s(t.jqueryScrollbar),r=i(e);o.scrollbar(r||l.options).on("$destroy",function(){o.scrollbar("destroy")})}}})}(window.angular)});
\ No newline at end of file
+!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("
").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return e.axis&&e.axis===e.HORIZONTAL_AXIS?!1:e.wheelDeltaX?!1:!0}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:/mac/i.test(navigator.platform),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),a(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();(o.height!==t.scroll.height||o.width!==t.scroll.width)&&(t.scroll=o,l=!0)}a(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,h={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay||t.macosx&&!t.webkit)return!1;if(d)i.css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"==r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""}),r.on("scroll"+n,function(){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var p=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,p),d.on("mousewheel"+n,p),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,h="x"===e?"scrollLeft":"scrollTop",p=c.scrollStep,u=function(){var l=r[h]();r[h](l+p),1==d&&l+p>=f&&(l=r[h]()),-1==d&&f>=l+p&&(l=r[h]()),r[h]()==l&&i&&i()},f=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=t.size-t.visible-t.offset;return(i>0&&n>f||0>i&&f>0)&&(f+=i,0>f&&(f=0),f>n&&(f=n),o.scrollTo=o.scrollTo||{},o.scrollTo[h]=f,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){f=r[h]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){f=r[h]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,p=c.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
','','','','",""].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1},_updateScroll:function(e,o){var s=this.container,r=this.containerWrapper||s,i="scroll-scroll"+e+"_visible",n="x"===e?this.scrolly:this.scrollx,c=parseInt(this.container.css("x"===e?"left":"top"),10)||0,a=this.wrapper,d=o.size,h=o.visible+c;o.isVisible=d-h>1,o.isVisible?(o.scroll.addClass(i),n.scroll.addClass(i),r.addClass(i)):(o.scroll.removeClass(i),n.scroll.removeClass(i),r.removeClass(i)),"y"===e&&r.css(s.is("textarea")||h>d?{height:h+t.scroll.height+"px","max-height":"none"}:{"max-height":h+t.scroll.height+"px"}),(o.size!=s.prop("scrollWidth")||n.size!=s.prop("scrollHeight")||o.visible!=a.width()||n.visible!=a.height()||o.offset!=(parseInt(s.css("left"),10)||0)||n.offset!=(parseInt(s.css("top"),10)||0))&&(l.extend(this.scrollx,{offset:parseInt(s.css("left"),10)||0,size:s.prop("scrollWidth"),visible:a.width()}),l.extend(this.scrolly,{offset:parseInt(s.css("top"),10)||0,size:this.container.prop("scrollHeight"),visible:a.height()}),this._updateScroll("x"===e?"y":"x",n))}};var c=n;l.fn.scrollbar=function(e,o){return"string"!=typeof e&&(o=e,e="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var s=l(this),r=s.data(t.data.name);(r||"init"===e)&&(r||(r=new c(s)),r[e]&&r[e].apply(r,o))}),this},l.fn.scrollbar.options=i;var a=function(){var l=0,e=0;return function(o){var s,i,n,c,d,h,p;for(s=0;s
10?(window.console&&console.log("Scroll updates exceed 10"),a=function(){}):(clearTimeout(l),l=setTimeout(a,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}})}(window.angular)});
\ No newline at end of file
From 1330b66b0393ef114895b3ea49695c91db5c281c Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Tue, 8 Sep 2015 23:08:31 +0500
Subject: [PATCH 18/32] update changelog: note changes in default values
---
CHANGELOG.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7880512..ee3cf48 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@ Add Meteor/Node modules support
Fix bug when removed content does not update element's height
Fix bug with textarea in non-webkit browsers
Update webkit-based browser detection to ignore Microsoft Edge browser
+Change default values for ignoreMobile/ignoreOverlay to false
v0.2.7 (20150122)
Small fixes
@@ -11,7 +12,7 @@ Small fixes
Re-register plugin in jQuery plugins repository
v0.2.5 (20141119)
-Add option ignoreOverlay
+Add option ignoreOverlay with default value true
Fix webkit-based browser detection
Ignore Firefox in Mac OS (cannot hide native scrollbars)
From 7babd29085f85e53a570f8554156dee0138b1c93 Mon Sep 17 00:00:00 2001
From: Leonidas Arvanitis
Date: Fri, 9 Oct 2015 14:15:27 +0300
Subject: [PATCH 19/32] Fix minification of angular directive
Explicitly set injectables in `jqueryScrollbar` directive so that it survives after variable mangling minification (uglify etc.).
---
jquery.scrollbar.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index f78962b..bd82315 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -763,7 +763,7 @@
}
};
})
- .directive('jqueryScrollbar', function (jQueryScrollbar, $parse) {
+ .directive('jqueryScrollbar', ['jQueryScrollbar', '$parse', function (jQueryScrollbar, $parse) {
return {
"restrict": "AC",
"link": function (scope, element, attrs) {
@@ -775,7 +775,7 @@
});
}
};
- });
+ }]);
})(window.angular);
}
-}));
\ No newline at end of file
+}));
From 8cbc3af60a494878337684a6f1f4a1cd14c4fd36 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Thu, 22 Oct 2015 08:32:18 +0500
Subject: [PATCH 20/32] increase version to update bower repository
---
CHANGELOG.md | 3 +++
bower.json | 2 +-
jquery.scrollbar.js | 2 +-
jquery.scrollbar.min.js | 2 +-
package.json | 2 +-
scrollbar.jquery.json | 2 +-
6 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ee3cf48..5eb365c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+v0.2.9 (20151022)
+Increase version to update bower repository
+
v0.2.8 (20150723)
Add Meteor/Node modules support
Fix bug when removed content does not update element's height
diff --git a/bower.json b/bower.json
index 61388ff..f49d292 100644
--- a/bower.json
+++ b/bower.json
@@ -1,6 +1,6 @@
{
"name": "jquery.scrollbar",
- "version": "0.2.8",
+ "version": "0.2.9",
"main": [
"./jquery.scrollbar.js",
"./jquery.scrollbar.css"
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index f78962b..a877a3f 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -7,7 +7,7 @@
* If you found bug, please contact me via email <13real008@gmail.com>
*
* @author Yuriy Khabarov aka Gromo
- * @version 0.2.8
+ * @version 0.2.9
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js
index 9e81163..f778396 100644
--- a/jquery.scrollbar.min.js
+++ b/jquery.scrollbar.min.js
@@ -9,7 +9,7 @@
* Compressed by http://jscompress.com/
*
* @author Yuriy Khabarov aka Gromo
- * @version 0.2.8
+ * @version 0.2.9
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
diff --git a/package.json b/package.json
index 34dd50b..563d2cc 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "jquery.scrollbar",
- "version": "0.2.8",
+ "version": "0.2.9",
"description": "Cross-browser CSS customizable scrollbar",
"main": "index.js",
"scripts": {
diff --git a/scrollbar.jquery.json b/scrollbar.jquery.json
index 1da2dd2..50473b8 100644
--- a/scrollbar.jquery.json
+++ b/scrollbar.jquery.json
@@ -6,7 +6,7 @@
"scroll",
"scrollbar"
],
- "version": "0.2.8",
+ "version": "0.2.9",
"author": {
"name": "Yuriy Khabarov",
"email": "13real008@gmail.com"
From 4dfb0701a9b23bad9d07df4af425d7f9f575f5e5 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Fri, 11 Dec 2015 09:24:32 +0500
Subject: [PATCH 21/32] add Angular directive dependencies as string to
minified version
---
jquery.scrollbar.min.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js
index f778396..464abbb 100644
--- a/jquery.scrollbar.min.js
+++ b/jquery.scrollbar.min.js
@@ -13,4 +13,4 @@
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return e.axis&&e.axis===e.HORIZONTAL_AXIS?!1:e.wheelDeltaX?!1:!0}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:/mac/i.test(navigator.platform),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),a(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();(o.height!==t.scroll.height||o.width!==t.scroll.width)&&(t.scroll=o,l=!0)}a(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,h={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay||t.macosx&&!t.webkit)return!1;if(d)i.css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"==r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""}),r.on("scroll"+n,function(){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var p=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,p),d.on("mousewheel"+n,p),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,h="x"===e?"scrollLeft":"scrollTop",p=c.scrollStep,u=function(){var l=r[h]();r[h](l+p),1==d&&l+p>=f&&(l=r[h]()),-1==d&&f>=l+p&&(l=r[h]()),r[h]()==l&&i&&i()},f=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=t.size-t.visible-t.offset;return(i>0&&n>f||0>i&&f>0)&&(f+=i,0>f&&(f=0),f>n&&(f=n),o.scrollTo=o.scrollTo||{},o.scrollTo[h]=f,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){f=r[h]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){f=r[h]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,p=c.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
','','','','",""].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1},_updateScroll:function(e,o){var s=this.container,r=this.containerWrapper||s,i="scroll-scroll"+e+"_visible",n="x"===e?this.scrolly:this.scrollx,c=parseInt(this.container.css("x"===e?"left":"top"),10)||0,a=this.wrapper,d=o.size,h=o.visible+c;o.isVisible=d-h>1,o.isVisible?(o.scroll.addClass(i),n.scroll.addClass(i),r.addClass(i)):(o.scroll.removeClass(i),n.scroll.removeClass(i),r.removeClass(i)),"y"===e&&r.css(s.is("textarea")||h>d?{height:h+t.scroll.height+"px","max-height":"none"}:{"max-height":h+t.scroll.height+"px"}),(o.size!=s.prop("scrollWidth")||n.size!=s.prop("scrollHeight")||o.visible!=a.width()||n.visible!=a.height()||o.offset!=(parseInt(s.css("left"),10)||0)||n.offset!=(parseInt(s.css("top"),10)||0))&&(l.extend(this.scrollx,{offset:parseInt(s.css("left"),10)||0,size:s.prop("scrollWidth"),visible:a.width()}),l.extend(this.scrolly,{offset:parseInt(s.css("top"),10)||0,size:this.container.prop("scrollHeight"),visible:a.height()}),this._updateScroll("x"===e?"y":"x",n))}};var c=n;l.fn.scrollbar=function(e,o){return"string"!=typeof e&&(o=e,e="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var s=l(this),r=s.data(t.data.name);(r||"init"===e)&&(r||(r=new c(s)),r[e]&&r[e].apply(r,o))}),this},l.fn.scrollbar.options=i;var a=function(){var l=0,e=0;return function(o){var s,i,n,c,d,h,p;for(s=0;s
10?(window.console&&console.log("Scroll updates exceed 10"),a=function(){}):(clearTimeout(l),l=setTimeout(a,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}})}(window.angular)});
\ No newline at end of file
+!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return e.axis&&e.axis===e.HORIZONTAL_AXIS?!1:e.wheelDeltaX?!1:!0}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:/mac/i.test(navigator.platform),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),a(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();(o.height!==t.scroll.height||o.width!==t.scroll.width)&&(t.scroll=o,l=!0)}a(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,h={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay||t.macosx&&!t.webkit)return!1;if(d)i.css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"==r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""}),r.on("scroll"+n,function(e){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var p=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,p),d.on("mousewheel"+n,p),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,h="x"===e?"scrollLeft":"scrollTop",p=c.scrollStep,u=function(){var l=r[h]();r[h](l+p),1==d&&l+p>=f&&(l=r[h]()),-1==d&&f>=l+p&&(l=r[h]()),r[h]()==l&&i&&i()},f=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=t.size-t.visible-t.offset;return(i>0&&n>f||0>i&&f>0)&&(f+=i,0>f&&(f=0),f>n&&(f=n),o.scrollTo=o.scrollTo||{},o.scrollTo[h]=f,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){f=r[h]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){f=r[h]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,p=c.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
','','','','",""].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1},_updateScroll:function(e,o){var s=this.container,r=this.containerWrapper||s,i="scroll-scroll"+e+"_visible",n="x"===e?this.scrolly:this.scrollx,c=parseInt(this.container.css("x"===e?"left":"top"),10)||0,a=this.wrapper,d=o.size,h=o.visible+c;o.isVisible=d-h>1,o.isVisible?(o.scroll.addClass(i),n.scroll.addClass(i),r.addClass(i)):(o.scroll.removeClass(i),n.scroll.removeClass(i),r.removeClass(i)),"y"===e&&(s.is("textarea")||h>d?r.css({height:h+t.scroll.height+"px","max-height":"none"}):r.css({"max-height":h+t.scroll.height+"px"})),(o.size!=s.prop("scrollWidth")||n.size!=s.prop("scrollHeight")||o.visible!=a.width()||n.visible!=a.height()||o.offset!=(parseInt(s.css("left"),10)||0)||n.offset!=(parseInt(s.css("top"),10)||0))&&(l.extend(this.scrollx,{offset:parseInt(s.css("left"),10)||0,size:s.prop("scrollWidth"),visible:a.width()}),l.extend(this.scrolly,{offset:parseInt(s.css("top"),10)||0,size:this.container.prop("scrollHeight"),visible:a.height()}),this._updateScroll("x"===e?"y":"x",n))}};var c=n;l.fn.scrollbar=function(e,o){return"string"!=typeof e&&(o=e,e="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var s=l(this),r=s.data(t.data.name);(r||"init"===e)&&(r||(r=new c(s)),r[e]&&r[e].apply(r,o))}),this},l.fn.scrollbar.options=i;var a=function(){var l=0,e=0;return function(o){var s,i,n,c,d,h,p;for(s=0;s
10?(window.console&&console.log("Scroll updates exceed 10"),a=function(){}):(clearTimeout(l),l=setTimeout(a,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",["jQueryScrollbar","$parse",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}}])}(window.angular)});
\ No newline at end of file
From 058c143d6623f8d39cd45becc1205b9aee325246 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Wed, 16 Dec 2015 09:54:27 +0500
Subject: [PATCH 22/32] increase version to update bower repository
---
CHANGELOG.md | 3 +++
bower.json | 2 +-
jquery.scrollbar.js | 2 +-
jquery.scrollbar.min.js | 2 +-
package.js | 2 +-
package.json | 2 +-
scrollbar.jquery.json | 2 +-
7 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5eb365c..8cad711 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+v0.2.10 (20151216)
+Increase version to update bower repository
+
v0.2.9 (20151022)
Increase version to update bower repository
diff --git a/bower.json b/bower.json
index f49d292..5acf670 100644
--- a/bower.json
+++ b/bower.json
@@ -1,6 +1,6 @@
{
"name": "jquery.scrollbar",
- "version": "0.2.9",
+ "version": "0.2.10",
"main": [
"./jquery.scrollbar.js",
"./jquery.scrollbar.css"
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index 87e95b2..0f7e3d9 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -7,7 +7,7 @@
* If you found bug, please contact me via email <13real008@gmail.com>
*
* @author Yuriy Khabarov aka Gromo
- * @version 0.2.9
+ * @version 0.2.10
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js
index 464abbb..14031fd 100644
--- a/jquery.scrollbar.min.js
+++ b/jquery.scrollbar.min.js
@@ -9,7 +9,7 @@
* Compressed by http://jscompress.com/
*
* @author Yuriy Khabarov aka Gromo
- * @version 0.2.9
+ * @version 0.2.10
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
diff --git a/package.js b/package.js
index dc31481..f5d26cf 100644
--- a/package.js
+++ b/package.js
@@ -6,7 +6,7 @@ var where = 'client'; // where to install: 'client' or 'server'. For both, pass
Package.describe({
name: packageName,
- version: '0.0.1',
+ version: '0.2.10',
// Brief, one-line summary of the package.
summary: 'Cross-browser CSS customizable scrollbar with advanced features.',
// URL to the Git repository containing the source code for this package.
diff --git a/package.json b/package.json
index 563d2cc..6ac22cf 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "jquery.scrollbar",
- "version": "0.2.9",
+ "version": "0.2.10",
"description": "Cross-browser CSS customizable scrollbar",
"main": "index.js",
"scripts": {
diff --git a/scrollbar.jquery.json b/scrollbar.jquery.json
index 50473b8..01e3941 100644
--- a/scrollbar.jquery.json
+++ b/scrollbar.jquery.json
@@ -6,7 +6,7 @@
"scroll",
"scrollbar"
],
- "version": "0.2.9",
+ "version": "0.2.10",
"author": {
"name": "Yuriy Khabarov",
"email": "13real008@gmail.com"
From 03646e85728f3c2c1eef6acdcf070c485545b923 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Wed, 10 Feb 2016 00:34:47 +0500
Subject: [PATCH 23/32] Add note about ignoring FF on Apple
---
README.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 09b2cfd..c4b58f5 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@ Cross-browser CSS customizable scrollbar with advanced features:
Vertical, horizontal or both scrollbars
Automatically reinitialize scrollbar
External scrollbars support
- Browser support: IE7+, Firefox, Opera, Chrome, Safari
+ Browser support: IE7+, Firefox1, Opera, Chrome, Safari
jQuery Scrollbar as Angular.JS directive
Textarea scrollbar
@@ -22,3 +22,5 @@ Cross-browser CSS customizable scrollbar with advanced features:
+
+1 There is known issue that native browser scrollbar cannot be hidden in Firefox on Apple devices, so this plugin is not initialized and you will see native scrollbars.
From 5ddddd860b07f72aa95690df1f885181ec9ae877 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Wed, 17 Feb 2016 09:11:08 +0500
Subject: [PATCH 24/32] Update download link in README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index c4b58f5..dd18a9b 100644
--- a/README.md
+++ b/README.md
@@ -21,6 +21,6 @@ Cross-browser CSS customizable scrollbar with advanced features:
-
+
1 There is known issue that native browser scrollbar cannot be hidden in Firefox on Apple devices, so this plugin is not initialized and you will see native scrollbars.
From a4d6310150945ded43c839140df637a07ea12305 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Thu, 7 Apr 2016 09:36:26 +0500
Subject: [PATCH 25/32] add onFallback callback
---
jquery.scrollbar.js | 6 +++++-
jquery.scrollbar.min.js | 2 +-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index 0f7e3d9..5e13f6f 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -63,6 +63,7 @@
"scrolly": null, // vertical scroll element
"onDestroy": null, // callback function on destroy,
+ "onFallback": null, // callback function if scrollbar is not initialized
"onInit": null, // callback function on first initialization
"onScroll": null, // callback function on content scrolling
"onUpdate": null // callback function on init/resize (before scrollbar size calculation)
@@ -157,13 +158,16 @@
|| (browser.overlay && o.ignoreOverlay)
|| (browser.macosx && !browser.webkit) // still required to ignore nonWebKit browsers on Mac
) {
+ if ($.isFunction(o.onFallback)){
+ o.onFallback.apply(this, [c]);
+ }
return false;
}
// init scroll container
if (!w) {
this.wrapper = w = $('').addClass('scroll-wrapper').addClass(c.attr('class'))
- .css('position', c.css('position') == 'absolute' ? 'absolute' : 'relative')
+ .css('position', c.css('position') === 'absolute' ? 'absolute' : 'relative')
.insertBefore(c).append(c);
if (c.is('textarea')) {
diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js
index 14031fd..2bc8ab0 100644
--- a/jquery.scrollbar.min.js
+++ b/jquery.scrollbar.min.js
@@ -13,4 +13,4 @@
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("
").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return e.axis&&e.axis===e.HORIZONTAL_AXIS?!1:e.wheelDeltaX?!1:!0}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:/mac/i.test(navigator.platform),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),a(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();(o.height!==t.scroll.height||o.width!==t.scroll.width)&&(t.scroll=o,l=!0)}a(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,h={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay||t.macosx&&!t.webkit)return!1;if(d)i.css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"==r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""}),r.on("scroll"+n,function(e){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var p=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,p),d.on("mousewheel"+n,p),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,h="x"===e?"scrollLeft":"scrollTop",p=c.scrollStep,u=function(){var l=r[h]();r[h](l+p),1==d&&l+p>=f&&(l=r[h]()),-1==d&&f>=l+p&&(l=r[h]()),r[h]()==l&&i&&i()},f=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=t.size-t.visible-t.offset;return(i>0&&n>f||0>i&&f>0)&&(f+=i,0>f&&(f=0),f>n&&(f=n),o.scrollTo=o.scrollTo||{},o.scrollTo[h]=f,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){f=r[h]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){f=r[h]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,p=c.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
','','','','",""].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1},_updateScroll:function(e,o){var s=this.container,r=this.containerWrapper||s,i="scroll-scroll"+e+"_visible",n="x"===e?this.scrolly:this.scrollx,c=parseInt(this.container.css("x"===e?"left":"top"),10)||0,a=this.wrapper,d=o.size,h=o.visible+c;o.isVisible=d-h>1,o.isVisible?(o.scroll.addClass(i),n.scroll.addClass(i),r.addClass(i)):(o.scroll.removeClass(i),n.scroll.removeClass(i),r.removeClass(i)),"y"===e&&(s.is("textarea")||h>d?r.css({height:h+t.scroll.height+"px","max-height":"none"}):r.css({"max-height":h+t.scroll.height+"px"})),(o.size!=s.prop("scrollWidth")||n.size!=s.prop("scrollHeight")||o.visible!=a.width()||n.visible!=a.height()||o.offset!=(parseInt(s.css("left"),10)||0)||n.offset!=(parseInt(s.css("top"),10)||0))&&(l.extend(this.scrollx,{offset:parseInt(s.css("left"),10)||0,size:s.prop("scrollWidth"),visible:a.width()}),l.extend(this.scrolly,{offset:parseInt(s.css("top"),10)||0,size:this.container.prop("scrollHeight"),visible:a.height()}),this._updateScroll("x"===e?"y":"x",n))}};var c=n;l.fn.scrollbar=function(e,o){return"string"!=typeof e&&(o=e,e="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var s=l(this),r=s.data(t.data.name);(r||"init"===e)&&(r||(r=new c(s)),r[e]&&r[e].apply(r,o))}),this},l.fn.scrollbar.options=i;var a=function(){var l=0,e=0;return function(o){var s,i,n,c,d,h,p;for(s=0;s
10?(window.console&&console.log("Scroll updates exceed 10"),a=function(){}):(clearTimeout(l),l=setTimeout(a,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",["jQueryScrollbar","$parse",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}}])}(window.angular)});
\ No newline at end of file
+!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return e.axis&&e.axis===e.HORIZONTAL_AXIS?!1:e.wheelDeltaX?!1:!0}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:/mac/i.test(navigator.platform),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onFallback:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),a(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();(o.height!==t.scroll.height||o.width!==t.scroll.width)&&(t.scroll=o,l=!0)}a(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,h={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay||t.macosx&&!t.webkit)return l.isFunction(c.onFallback)&&c.onFallback.apply(this,[r]),!1;if(d)i.css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"===r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""}),r.on("scroll"+n,function(e){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var p=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,p),d.on("mousewheel"+n,p),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,h="x"===e?"scrollLeft":"scrollTop",p=c.scrollStep,u=function(){var l=r[h]();r[h](l+p),1==d&&l+p>=f&&(l=r[h]()),-1==d&&f>=l+p&&(l=r[h]()),r[h]()==l&&i&&i()},f=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=t.size-t.visible-t.offset;return(i>0&&n>f||0>i&&f>0)&&(f+=i,0>f&&(f=0),f>n&&(f=n),o.scrollTo=o.scrollTo||{},o.scrollTo[h]=f,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){f=r[h]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){f=r[h]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,p=c.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
','','','','",""].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1},_updateScroll:function(e,o){var s=this.container,r=this.containerWrapper||s,i="scroll-scroll"+e+"_visible",n="x"===e?this.scrolly:this.scrollx,c=parseInt(this.container.css("x"===e?"left":"top"),10)||0,a=this.wrapper,d=o.size,h=o.visible+c;o.isVisible=d-h>1,o.isVisible?(o.scroll.addClass(i),n.scroll.addClass(i),r.addClass(i)):(o.scroll.removeClass(i),n.scroll.removeClass(i),r.removeClass(i)),"y"===e&&(s.is("textarea")||h>d?r.css({height:h+t.scroll.height+"px","max-height":"none"}):r.css({"max-height":h+t.scroll.height+"px"})),(o.size!=s.prop("scrollWidth")||n.size!=s.prop("scrollHeight")||o.visible!=a.width()||n.visible!=a.height()||o.offset!=(parseInt(s.css("left"),10)||0)||n.offset!=(parseInt(s.css("top"),10)||0))&&(l.extend(this.scrollx,{offset:parseInt(s.css("left"),10)||0,size:s.prop("scrollWidth"),visible:a.width()}),l.extend(this.scrolly,{offset:parseInt(s.css("top"),10)||0,size:this.container.prop("scrollHeight"),visible:a.height()}),this._updateScroll("x"===e?"y":"x",n))}};var c=n;l.fn.scrollbar=function(e,o){return"string"!=typeof e&&(o=e,e="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var s=l(this),r=s.data(t.data.name);(r||"init"===e)&&(r||(r=new c(s)),r[e]&&r[e].apply(r,o))}),this},l.fn.scrollbar.options=i;var a=function(){var l=0,e=0;return function(o){var s,i,n,c,d,h,p;for(s=0;s
10?(window.console&&console.log("Scroll updates exceed 10"),a=function(){}):(clearTimeout(l),l=setTimeout(a,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",["jQueryScrollbar","$parse",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}}])}(window.angular)});
\ No newline at end of file
From dc6939f772d1f1c00a04e4b4c4eab97fddf6b098 Mon Sep 17 00:00:00 2001
From: Serhii P
Date: Wed, 3 Aug 2016 18:26:40 +0300
Subject: [PATCH 26/32] fix mozilla FF with disableBodyScroll
---
jquery.scrollbar.js | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index 5e13f6f..d0fef7d 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -290,6 +290,15 @@
var delta = event.originalEvent.wheelDelta * -1 || event.originalEvent.detail;
var maxScrollValue = scrollx.size - scrollx.visible - scrollx.offset;
+ // fix new mozilla
+ if (!delta) {
+ if (d === 'x' && !!event.originalEvent.deltaX) {
+ delta = event.originalEvent.deltaX * 40;
+ } else if (d === 'y' && !!event.originalEvent.deltaY) {
+ delta = event.originalEvent.deltaY * 40;
+ }
+ }
+
if ((delta > 0 && scrollToValue < maxScrollValue) || (delta < 0 && scrollToValue > 0)) {
scrollToValue = scrollToValue + delta;
if (scrollToValue < 0)
From bb79b8bd905e8e95cbb66164cfe11136ec66b6c6 Mon Sep 17 00:00:00 2001
From: Serhii P
Date: Wed, 3 Aug 2016 18:34:22 +0300
Subject: [PATCH 27/32] update version
---
CHANGELOG.md | 5 ++++-
bower.json | 2 +-
jquery.scrollbar.js | 2 +-
jquery.scrollbar.min.js | 4 ++--
package.js | 2 +-
package.json | 2 +-
scrollbar.jquery.json | 2 +-
7 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8cad711..c0a6748 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+v0.2.11 (20160803)
+Fix bug with Mozilla FireFox
+
v0.2.10 (20151216)
Increase version to update bower repository
@@ -67,4 +70,4 @@ Fix webkit bug with text selection
Handle mousedown instead of click on scrollbar track/arrows
v0.0.2 (20130413)
-First version
\ No newline at end of file
+First version
diff --git a/bower.json b/bower.json
index 5acf670..36deb3a 100644
--- a/bower.json
+++ b/bower.json
@@ -1,6 +1,6 @@
{
"name": "jquery.scrollbar",
- "version": "0.2.10",
+ "version": "0.2.11",
"main": [
"./jquery.scrollbar.js",
"./jquery.scrollbar.css"
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index d0fef7d..c8cfb72 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -7,7 +7,7 @@
* If you found bug, please contact me via email <13real008@gmail.com>
*
* @author Yuriy Khabarov aka Gromo
- * @version 0.2.10
+ * @version 0.2.11
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js
index 2bc8ab0..9187107 100644
--- a/jquery.scrollbar.min.js
+++ b/jquery.scrollbar.min.js
@@ -9,8 +9,8 @@
* Compressed by http://jscompress.com/
*
* @author Yuriy Khabarov aka Gromo
- * @version 0.2.10
+ * @version 0.2.11
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return e.axis&&e.axis===e.HORIZONTAL_AXIS?!1:e.wheelDeltaX?!1:!0}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:/mac/i.test(navigator.platform),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onFallback:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),a(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();(o.height!==t.scroll.height||o.width!==t.scroll.width)&&(t.scroll=o,l=!0)}a(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,h={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay||t.macosx&&!t.webkit)return l.isFunction(c.onFallback)&&c.onFallback.apply(this,[r]),!1;if(d)i.css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"===r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":-1*t.scroll.height+"px","margin-right":-1*t.scroll.width+"px","max-height":""}),r.on("scroll"+n,function(e){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var p=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,p),d.on("mousewheel"+n,p),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,h="x"===e?"scrollLeft":"scrollTop",p=c.scrollStep,u=function(){var l=r[h]();r[h](l+p),1==d&&l+p>=f&&(l=r[h]()),-1==d&&f>=l+p&&(l=r[h]()),r[h]()==l&&i&&i()},f=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=-1*l.originalEvent.wheelDelta||l.originalEvent.detail,n=t.size-t.visible-t.offset;return(i>0&&n>f||0>i&&f>0)&&(f+=i,0>f&&(f=0),f>n&&(f=n),o.scrollTo=o.scrollTo||{},o.scrollTo[h]=f,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){f=r[h]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){f=r[h]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,p=c.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset
','','','','",""].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1},_updateScroll:function(e,o){var s=this.container,r=this.containerWrapper||s,i="scroll-scroll"+e+"_visible",n="x"===e?this.scrolly:this.scrollx,c=parseInt(this.container.css("x"===e?"left":"top"),10)||0,a=this.wrapper,d=o.size,h=o.visible+c;o.isVisible=d-h>1,o.isVisible?(o.scroll.addClass(i),n.scroll.addClass(i),r.addClass(i)):(o.scroll.removeClass(i),n.scroll.removeClass(i),r.removeClass(i)),"y"===e&&(s.is("textarea")||h>d?r.css({height:h+t.scroll.height+"px","max-height":"none"}):r.css({"max-height":h+t.scroll.height+"px"})),(o.size!=s.prop("scrollWidth")||n.size!=s.prop("scrollHeight")||o.visible!=a.width()||n.visible!=a.height()||o.offset!=(parseInt(s.css("left"),10)||0)||n.offset!=(parseInt(s.css("top"),10)||0))&&(l.extend(this.scrollx,{offset:parseInt(s.css("left"),10)||0,size:s.prop("scrollWidth"),visible:a.width()}),l.extend(this.scrolly,{offset:parseInt(s.css("top"),10)||0,size:this.container.prop("scrollHeight"),visible:a.height()}),this._updateScroll("x"===e?"y":"x",n))}};var c=n;l.fn.scrollbar=function(e,o){return"string"!=typeof e&&(o=e,e="init"),"undefined"==typeof o&&(o=[]),l.isArray(o)||(o=[o]),this.not("body, .scroll-wrapper").each(function(){var s=l(this),r=s.data(t.data.name);(r||"init"===e)&&(r||(r=new c(s)),r[e]&&r[e].apply(r,o))}),this},l.fn.scrollbar.options=i;var a=function(){var l=0,e=0;return function(o){var s,i,n,c,d,h,p;for(s=0;s
10?(window.console&&console.log("Scroll updates exceed 10"),a=function(){}):(clearTimeout(l),l=setTimeout(a,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",["jQueryScrollbar","$parse",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}}])}(window.angular)});
\ No newline at end of file
+!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return(!e.axis||e.axis!==e.HORIZONTAL_AXIS)&&!e.wheelDeltaX}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:/mac/i.test(navigator.platform),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onFallback:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),a(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();o.height===t.scroll.height&&o.width===t.scroll.width||(t.scroll=o,l=!0)}a(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,h={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay||t.macosx&&!t.webkit)return l.isFunction(c.onFallback)&&c.onFallback.apply(this,[r]),!1;if(d)i.css({height:"auto","margin-bottom":t.scroll.height*-1+"px","margin-right":t.scroll.width*-1+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"===r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":t.scroll.height*-1+"px","margin-right":t.scroll.width*-1+"px","max-height":""}),r.on("scroll"+n,function(e){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var p=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,p),d.on("mousewheel"+n,p),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,h="x"===e?"scrollLeft":"scrollTop",p=c.scrollStep,u=function(){var l=r[h]();r[h](l+p),1==d&&l+p>=f&&(l=r[h]()),d==-1&&l+p<=f&&(l=r[h]()),r[h]()==l&&i&&i()},f=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=l.originalEvent.wheelDelta*-1||l.originalEvent.detail,n=t.size-t.visible-t.offset;return i||("x"===e&&l.originalEvent.deltaX?i=40*l.originalEvent.deltaX:"y"===e&&l.originalEvent.deltaY&&(i=40*l.originalEvent.deltaY)),(i>0&&f
<0&&f>0)&&(f+=i,f<0&&(f=0),f>n&&(f=n),o.scrollTo=o.scrollTo||{},o.scrollTo[h]=f,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){f=r[h]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){f=r[h]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,p=c.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset','','','','",""].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1},_updateScroll:function(e,o){var s=this.container,r=this.containerWrapper||s,i="scroll-scroll"+e+"_visible",n="x"===e?this.scrolly:this.scrollx,c=parseInt(this.container.css("x"===e?"left":"top"),10)||0,a=this.wrapper,d=o.size,h=o.visible+c;o.isVisible=d-h>1,o.isVisible?(o.scroll.addClass(i),n.scroll.addClass(i),r.addClass(i)):(o.scroll.removeClass(i),n.scroll.removeClass(i),r.removeClass(i)),"y"===e&&(s.is("textarea")||d
10?(window.console&&console.log("Scroll updates exceed 10"),a=function(){}):(clearTimeout(l),l=setTimeout(a,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",["jQueryScrollbar","$parse",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}}])}(window.angular)});
\ No newline at end of file
diff --git a/package.js b/package.js
index f5d26cf..6a5ad53 100644
--- a/package.js
+++ b/package.js
@@ -6,7 +6,7 @@ var where = 'client'; // where to install: 'client' or 'server'. For both, pass
Package.describe({
name: packageName,
- version: '0.2.10',
+ version: '0.2.11',
// Brief, one-line summary of the package.
summary: 'Cross-browser CSS customizable scrollbar with advanced features.',
// URL to the Git repository containing the source code for this package.
diff --git a/package.json b/package.json
index 6ac22cf..3d7ba2a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "jquery.scrollbar",
- "version": "0.2.10",
+ "version": "0.2.11",
"description": "Cross-browser CSS customizable scrollbar",
"main": "index.js",
"scripts": {
diff --git a/scrollbar.jquery.json b/scrollbar.jquery.json
index 01e3941..fa0156b 100644
--- a/scrollbar.jquery.json
+++ b/scrollbar.jquery.json
@@ -6,7 +6,7 @@
"scroll",
"scrollbar"
],
- "version": "0.2.10",
+ "version": "0.2.11",
"author": {
"name": "Yuriy Khabarov",
"email": "13real008@gmail.com"
From 5c31cf9b418ec361fee9ad8c07917f7f7119946f Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Sun, 14 Aug 2016 23:36:45 +0500
Subject: [PATCH 28/32] add isRtl support: step 1
---
.gitignore | 4 +
jquery.scrollbar.css | 1099 ++++++++++++++++++++----------------
jquery.scrollbar.js | 190 ++++---
sass/Gruntfile.js | 22 +
sass/config.rb | 2 +
sass/jquery.scrollbar.scss | 793 ++++++++++++++++++++++++++
sass/package.json | 9 +
7 files changed, 1541 insertions(+), 578 deletions(-)
create mode 100644 .gitignore
create mode 100644 sass/Gruntfile.js
create mode 100644 sass/config.rb
create mode 100644 sass/jquery.scrollbar.scss
create mode 100644 sass/package.json
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5818f63
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.netbeans.xml
+.sass-cache
+node_modules
+nbproject
\ No newline at end of file
diff --git a/jquery.scrollbar.css b/jquery.scrollbar.css
index 9f4e5ba..e0a7df5 100644
--- a/jquery.scrollbar.css
+++ b/jquery.scrollbar.css
@@ -1,791 +1,904 @@
/*************** SCROLLBAR BASE CSS ***************/
-
.scroll-wrapper {
- overflow: hidden !important;
- padding: 0 !important;
- position: relative;
+ overflow: hidden !important;
+ padding: 0 !important;
+ position: relative;
}
-
.scroll-wrapper > .scroll-content {
- border: none !important;
- box-sizing: content-box !important;
- height: auto;
- left: 0;
- margin: 0;
- max-height: none;
- max-width: none !important;
- overflow: scroll !important;
- padding: 0;
- position: relative !important;
- top: 0;
- width: auto !important;
+ border: none !important;
+ box-sizing: content-box !important;
+ height: auto;
+ left: 0;
+ margin: 0;
+ max-height: none;
+ max-width: none !important;
+ overflow: scroll !important;
+ padding: 0;
+ position: relative !important;
+ top: 0;
+ width: auto !important;
}
-
.scroll-wrapper > .scroll-content::-webkit-scrollbar {
- height: 0;
- width: 0;
+ height: 0;
+ width: 0;
+}
+.scroll-wrapper.scroll--rtl {
+ direction: rtl;
}
.scroll-element {
- display: none;
-}
-.scroll-element, .scroll-element div {
- box-sizing: content-box;
+ box-sizing: content-box;
+ display: none;
}
-
-.scroll-element.scroll-x.scroll-scrollx_visible,
-.scroll-element.scroll-y.scroll-scrolly_visible {
- display: block;
+.scroll-element div {
+ box-sizing: content-box;
}
-
.scroll-element .scroll-bar,
.scroll-element .scroll-arrow {
- cursor: default;
+ cursor: default;
+}
+.scroll-element.scroll-x.scroll-scrollx_visible, .scroll-element.scroll-y.scroll-scrolly_visible {
+ display: block;
}
.scroll-textarea {
- border: 1px solid #cccccc;
- border-top-color: #999999;
+ border: 1px solid #cccccc;
+ border-top-color: #999999;
}
.scroll-textarea > .scroll-content {
- overflow: hidden !important;
+ overflow: hidden !important;
}
.scroll-textarea > .scroll-content > textarea {
- border: none !important;
- box-sizing: border-box;
- height: 100% !important;
- margin: 0;
- max-height: none !important;
- max-width: none !important;
- overflow: scroll !important;
- outline: none;
- padding: 2px;
- position: relative !important;
- top: 0;
- width: 100% !important;
+ border: none !important;
+ box-sizing: border-box;
+ height: 100% !important;
+ margin: 0;
+ max-height: none !important;
+ max-width: none !important;
+ overflow: scroll !important;
+ outline: none;
+ padding: 2px;
+ position: relative !important;
+ top: 0;
+ width: 100% !important;
}
.scroll-textarea > .scroll-content > textarea::-webkit-scrollbar {
- height: 0;
- width: 0;
+ height: 0;
+ width: 0;
}
-
-
-
-
-
-
-
-
/*************** SIMPLE INNER SCROLLBAR ***************/
-
.scrollbar-inner > .scroll-element,
-.scrollbar-inner > .scroll-element div
-{
- border: none;
- margin: 0;
- padding: 0;
- position: absolute;
- z-index: 10;
+.scrollbar-inner > .scroll-element div {
+ border: none;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
}
.scrollbar-inner > .scroll-element div {
- display: block;
- height: 100%;
- left: 0;
- top: 0;
- width: 100%;
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
}
.scrollbar-inner > .scroll-element.scroll-x {
- bottom: 2px;
- height: 8px;
- left: 0;
- width: 100%;
+ bottom: 2px;
+ height: 8px;
+ left: 0;
+ width: 100%;
}
.scrollbar-inner > .scroll-element.scroll-y {
- height: 100%;
- right: 2px;
- top: 0;
- width: 8px;
+ height: 100%;
+ right: 2px;
+ top: 0;
+ width: 8px;
}
.scrollbar-inner > .scroll-element .scroll-element_outer {
- overflow: hidden;
+ overflow: hidden;
}
.scrollbar-inner > .scroll-element .scroll-element_outer,
.scrollbar-inner > .scroll-element .scroll-element_track,
.scrollbar-inner > .scroll-element .scroll-bar {
- -webkit-border-radius: 8px;
- -moz-border-radius: 8px;
- border-radius: 8px;
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
}
.scrollbar-inner > .scroll-element .scroll-element_track,
.scrollbar-inner > .scroll-element .scroll-bar {
- -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
- filter: alpha(opacity=40);
- opacity: 0.4;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
+ filter: alpha(opacity=40);
+ opacity: 0.4;
}
-.scrollbar-inner > .scroll-element .scroll-element_track { background-color: #e0e0e0; }
-.scrollbar-inner > .scroll-element .scroll-bar { background-color: #c2c2c2; }
-.scrollbar-inner > .scroll-element:hover .scroll-bar { background-color: #919191; }
-.scrollbar-inner > .scroll-element.scroll-draggable .scroll-bar { background-color: #919191; }
-
-
-/* update scrollbar offset if both scrolls are visible */
-
-.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -12px; }
-.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -12px; }
-
-
-.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -12px; }
-.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -12px; }
-
-
+.scrollbar-inner > .scroll-element .scroll-element_track {
+ background-color: #e0e0e0;
+}
+.scrollbar-inner > .scroll-element .scroll-bar {
+ background-color: #c2c2c2;
+}
+.scrollbar-inner > .scroll-element:hover .scroll-bar {
+ background-color: #919191;
+}
+.scrollbar-inner > .scroll-element.scroll-draggable .scroll-bar {
+ background-color: #919191;
+}
+/* update scrollbar offset if both scrolls are visible */
+.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track {
+ left: -12px;
+}
+.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track {
+ top: -12px;
+}
+.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size {
+ left: -12px;
+}
+.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size {
+ top: -12px;
+}
/*************** SIMPLE OUTER SCROLLBAR ***************/
-
.scrollbar-outer > .scroll-element,
-.scrollbar-outer > .scroll-element div
-{
- border: none;
- margin: 0;
- padding: 0;
- position: absolute;
- z-index: 10;
+.scrollbar-outer > .scroll-element div {
+ border: none;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
}
.scrollbar-outer > .scroll-element {
- background-color: #ffffff;
+ background-color: #ffffff;
}
.scrollbar-outer > .scroll-element div {
- display: block;
- height: 100%;
- left: 0;
- top: 0;
- width: 100%;
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
}
.scrollbar-outer > .scroll-element.scroll-x {
- bottom: 0;
- height: 12px;
- left: 0;
- width: 100%;
+ bottom: 0;
+ height: 12px;
+ left: 0;
+ width: 100%;
}
.scrollbar-outer > .scroll-element.scroll-y {
- height: 100%;
- right: 0;
- top: 0;
- width: 12px;
+ height: 100%;
+ right: 0;
+ top: 0;
+ width: 12px;
+}
+
+.scrollbar-outer > .scroll-element.scroll-x .scroll-element_outer {
+ height: 8px;
+ top: 2px;
}
-.scrollbar-outer > .scroll-element.scroll-x .scroll-element_outer { height: 8px; top: 2px; }
-.scrollbar-outer > .scroll-element.scroll-y .scroll-element_outer { left: 2px; width: 8px; }
+.scrollbar-outer > .scroll-element.scroll-y .scroll-element_outer {
+ left: 2px;
+ width: 8px;
+}
-.scrollbar-outer > .scroll-element .scroll-element_outer { overflow: hidden; }
-.scrollbar-outer > .scroll-element .scroll-element_track { background-color: #eeeeee; }
+.scrollbar-outer > .scroll-element .scroll-element_outer {
+ overflow: hidden;
+}
+
+.scrollbar-outer > .scroll-element .scroll-element_track {
+ background-color: #eeeeee;
+}
.scrollbar-outer > .scroll-element .scroll-element_outer,
.scrollbar-outer > .scroll-element .scroll-element_track,
.scrollbar-outer > .scroll-element .scroll-bar {
- -webkit-border-radius: 8px;
- -moz-border-radius: 8px;
- border-radius: 8px;
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
}
-.scrollbar-outer > .scroll-element .scroll-bar { background-color: #d9d9d9; }
-.scrollbar-outer > .scroll-element .scroll-bar:hover { background-color: #c2c2c2; }
-.scrollbar-outer > .scroll-element.scroll-draggable .scroll-bar { background-color: #919191; }
+.scrollbar-outer > .scroll-element .scroll-bar {
+ background-color: #d9d9d9;
+}
+.scrollbar-outer > .scroll-element .scroll-bar:hover {
+ background-color: #c2c2c2;
+}
+
+.scrollbar-outer > .scroll-element.scroll-draggable .scroll-bar {
+ background-color: #919191;
+}
/* scrollbar height/width & offset from container borders */
+.scrollbar-outer > .scroll-content.scroll-scrolly_visible {
+ left: -12px;
+ margin-left: 12px;
+}
-.scrollbar-outer > .scroll-content.scroll-scrolly_visible { left: -12px; margin-left: 12px; }
-.scrollbar-outer > .scroll-content.scroll-scrollx_visible { top: -12px; margin-top: 12px; }
+.scrollbar-outer > .scroll-content.scroll-scrollx_visible {
+ top: -12px;
+ margin-top: 12px;
+}
-.scrollbar-outer > .scroll-element.scroll-x .scroll-bar { min-width: 10px; }
-.scrollbar-outer > .scroll-element.scroll-y .scroll-bar { min-height: 10px; }
+.scrollbar-outer > .scroll-element.scroll-x .scroll-bar {
+ min-width: 10px;
+}
+.scrollbar-outer > .scroll-element.scroll-y .scroll-bar {
+ min-height: 10px;
+}
/* update scrollbar offset if both scrolls are visible */
+.scrollbar-outer > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track {
+ left: -14px;
+}
-.scrollbar-outer > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -14px; }
-.scrollbar-outer > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -14px; }
-
-.scrollbar-outer > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -14px; }
-.scrollbar-outer > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -14px; }
-
-
-
-
-
-
-
+.scrollbar-outer > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track {
+ top: -14px;
+}
+.scrollbar-outer > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size {
+ left: -14px;
+}
+.scrollbar-outer > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size {
+ top: -14px;
+}
/*************** SCROLLBAR MAC OS X ***************/
-
.scrollbar-macosx > .scroll-element,
-.scrollbar-macosx > .scroll-element div
-{
- background: none;
- border: none;
- margin: 0;
- padding: 0;
- position: absolute;
- z-index: 10;
+.scrollbar-macosx > .scroll-element div {
+ background: none;
+ border: none;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
}
.scrollbar-macosx > .scroll-element div {
- display: block;
- height: 100%;
- left: 0;
- top: 0;
- width: 100%;
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
}
-.scrollbar-macosx > .scroll-element .scroll-element_track { display: none; }
-.scrollbar-macosx > .scroll-element .scroll-bar {
- background-color: #6C6E71;
- display: block;
-
- -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
- filter: alpha(opacity=0);
- opacity: 0;
-
- -webkit-border-radius: 7px;
- -moz-border-radius: 7px;
- border-radius: 7px;
+.scrollbar-macosx > .scroll-element .scroll-element_track {
+ display: none;
+}
- -webkit-transition: opacity 0.2s linear;
- -moz-transition: opacity 0.2s linear;
- -o-transition: opacity 0.2s linear;
- -ms-transition: opacity 0.2s linear;
- transition: opacity 0.2s linear;
+.scrollbar-macosx > .scroll-element .scroll-bar {
+ background-color: #6C6E71;
+ display: block;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ opacity: 0;
+ -webkit-border-radius: 7px;
+ -moz-border-radius: 7px;
+ border-radius: 7px;
+ -webkit-transition: opacity 0.2s linear;
+ -moz-transition: opacity 0.2s linear;
+ -o-transition: opacity 0.2s linear;
+ -ms-transition: opacity 0.2s linear;
+ transition: opacity 0.2s linear;
}
+
.scrollbar-macosx:hover > .scroll-element .scroll-bar,
.scrollbar-macosx > .scroll-element.scroll-draggable .scroll-bar {
- -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
- filter: alpha(opacity=70);
- opacity: 0.7;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
+ filter: alpha(opacity=70);
+ opacity: 0.7;
}
-
.scrollbar-macosx > .scroll-element.scroll-x {
- bottom: 0px;
- height: 0px;
- left: 0;
- min-width: 100%;
- overflow: visible;
- width: 100%;
+ bottom: 0px;
+ height: 0px;
+ left: 0;
+ min-width: 100%;
+ overflow: visible;
+ width: 100%;
}
.scrollbar-macosx > .scroll-element.scroll-y {
- height: 100%;
- min-height: 100%;
- right: 0px;
- top: 0;
- width: 0px;
+ height: 100%;
+ min-height: 100%;
+ right: 0px;
+ top: 0;
+ width: 0px;
}
/* scrollbar height/width & offset from container borders */
-.scrollbar-macosx > .scroll-element.scroll-x .scroll-bar { height: 7px; min-width: 10px; top: -9px; }
-.scrollbar-macosx > .scroll-element.scroll-y .scroll-bar { left: -9px; min-height: 10px; width: 7px; }
-
-.scrollbar-macosx > .scroll-element.scroll-x .scroll-element_outer { left: 2px; }
-.scrollbar-macosx > .scroll-element.scroll-x .scroll-element_size { left: -4px; }
-
-.scrollbar-macosx > .scroll-element.scroll-y .scroll-element_outer { top: 2px; }
-.scrollbar-macosx > .scroll-element.scroll-y .scroll-element_size { top: -4px; }
-
-/* update scrollbar offset if both scrolls are visible */
-.scrollbar-macosx > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -11px; }
-.scrollbar-macosx > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -11px; }
-
-
+.scrollbar-macosx > .scroll-element.scroll-x .scroll-bar {
+ height: 7px;
+ min-width: 10px;
+ top: -9px;
+}
+.scrollbar-macosx > .scroll-element.scroll-y .scroll-bar {
+ left: -9px;
+ min-height: 10px;
+ width: 7px;
+}
+.scrollbar-macosx > .scroll-element.scroll-x .scroll-element_outer {
+ left: 2px;
+}
+.scrollbar-macosx > .scroll-element.scroll-x .scroll-element_size {
+ left: -4px;
+}
+.scrollbar-macosx > .scroll-element.scroll-y .scroll-element_outer {
+ top: 2px;
+}
+.scrollbar-macosx > .scroll-element.scroll-y .scroll-element_size {
+ top: -4px;
+}
+/* update scrollbar offset if both scrolls are visible */
+.scrollbar-macosx > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size {
+ left: -11px;
+}
+.scrollbar-macosx > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size {
+ top: -11px;
+}
/*************** SCROLLBAR LIGHT ***************/
-
.scrollbar-light > .scroll-element,
.scrollbar-light > .scroll-element div {
- border: none;
- margin: 0;
- overflow: hidden;
- padding: 0;
- position: absolute;
- z-index: 10;
+ border: none;
+ margin: 0;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
}
.scrollbar-light > .scroll-element {
- background-color: #ffffff;
+ background-color: #ffffff;
}
.scrollbar-light > .scroll-element div {
- display: block;
- height: 100%;
- left: 0;
- top: 0;
- width: 100%;
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
}
.scrollbar-light > .scroll-element .scroll-element_outer {
- -webkit-border-radius: 10px;
- -moz-border-radius: 10px;
- border-radius: 10px;
+ -webkit-border-radius: 10px;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
}
.scrollbar-light > .scroll-element .scroll-element_size {
- background: #dbdbdb;
- background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RiZGJkYiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlOGU4ZTgiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+');
- background: -moz-linear-gradient(left, #dbdbdb 0%, #e8e8e8 100%);
- background: -webkit-gradient(linear, left top, right top, color-stop(0%,#dbdbdb), color-stop(100%,#e8e8e8));
- background: -webkit-linear-gradient(left, #dbdbdb 0%,#e8e8e8 100%);
- background: -o-linear-gradient(left, #dbdbdb 0%,#e8e8e8 100%);
- background: -ms-linear-gradient(left, #dbdbdb 0%,#e8e8e8 100%);
- background: linear-gradient(to right, #dbdbdb 0%,#e8e8e8 100%);
-
- -webkit-border-radius: 10px;
- -moz-border-radius: 10px;
- border-radius: 10px;
+ background: #dbdbdb;
+ background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RiZGJkYiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlOGU4ZTgiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+");
+ background: -moz-linear-gradient(left, #dbdbdb 0%, #e8e8e8 100%);
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%, #dbdbdb), color-stop(100%, #e8e8e8));
+ background: -webkit-linear-gradient(left, #dbdbdb 0%, #e8e8e8 100%);
+ background: -o-linear-gradient(left, #dbdbdb 0%, #e8e8e8 100%);
+ background: -ms-linear-gradient(left, #dbdbdb 0%, #e8e8e8 100%);
+ background: linear-gradient(to right, #dbdbdb 0%, #e8e8e8 100%);
+ -webkit-border-radius: 10px;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
}
.scrollbar-light > .scroll-element.scroll-x {
- bottom: 0;
- height: 17px;
- left: 0;
- min-width: 100%;
- width: 100%;
+ bottom: 0;
+ height: 17px;
+ left: 0;
+ min-width: 100%;
+ width: 100%;
}
.scrollbar-light > .scroll-element.scroll-y {
- height: 100%;
- min-height: 100%;
- right: 0;
- top: 0;
- width: 17px;
+ height: 100%;
+ min-height: 100%;
+ right: 0;
+ top: 0;
+ width: 17px;
}
.scrollbar-light > .scroll-element .scroll-bar {
- background: #fefefe;
- background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZlZmVmZSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNWY1ZjUiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+');
- background: -moz-linear-gradient(left, #fefefe 0%, #f5f5f5 100%);
- background: -webkit-gradient(linear, left top, right top, color-stop(0%,#fefefe), color-stop(100%,#f5f5f5));
- background: -webkit-linear-gradient(left, #fefefe 0%,#f5f5f5 100%);
- background: -o-linear-gradient(left, #fefefe 0%,#f5f5f5 100%);
- background: -ms-linear-gradient(left, #fefefe 0%,#f5f5f5 100%);
- background: linear-gradient(to right, #fefefe 0%,#f5f5f5 100%);
-
- border: 1px solid #dbdbdb;
- -webkit-border-radius: 10px;
- -moz-border-radius: 10px;
- border-radius: 10px;
+ background: #fefefe;
+ background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZlZmVmZSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNWY1ZjUiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+");
+ background: -moz-linear-gradient(left, #fefefe 0%, #f5f5f5 100%);
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%, #fefefe), color-stop(100%, #f5f5f5));
+ background: -webkit-linear-gradient(left, #fefefe 0%, #f5f5f5 100%);
+ background: -o-linear-gradient(left, #fefefe 0%, #f5f5f5 100%);
+ background: -ms-linear-gradient(left, #fefefe 0%, #f5f5f5 100%);
+ background: linear-gradient(to right, #fefefe 0%, #f5f5f5 100%);
+ border: 1px solid #dbdbdb;
+ -webkit-border-radius: 10px;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
}
/* scrollbar height/width & offset from container borders */
+.scrollbar-light > .scroll-content.scroll-scrolly_visible {
+ left: -17px;
+ margin-left: 17px;
+}
-.scrollbar-light > .scroll-content.scroll-scrolly_visible { left: -17px; margin-left: 17px; }
-.scrollbar-light > .scroll-content.scroll-scrollx_visible { top: -17px; margin-top: 17px; }
-
-.scrollbar-light > .scroll-element.scroll-x .scroll-bar { height: 10px; min-width: 10px; top: 0px; }
-.scrollbar-light > .scroll-element.scroll-y .scroll-bar { left: 0px; min-height: 10px; width: 10px; }
-
-.scrollbar-light > .scroll-element.scroll-x .scroll-element_outer { height: 12px; left: 2px; top: 2px; }
-.scrollbar-light > .scroll-element.scroll-x .scroll-element_size { left: -4px; }
-
-.scrollbar-light > .scroll-element.scroll-y .scroll-element_outer { left: 2px; top: 2px; width: 12px; }
-.scrollbar-light > .scroll-element.scroll-y .scroll-element_size { top: -4px; }
-
-/* update scrollbar offset if both scrolls are visible */
-
-.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -19px; }
-.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -19px; }
+.scrollbar-light > .scroll-content.scroll-scrollx_visible {
+ top: -17px;
+ margin-top: 17px;
+}
-.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -19px; }
-.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -19px; }
+.scrollbar-light > .scroll-element.scroll-x .scroll-bar {
+ height: 10px;
+ min-width: 10px;
+ top: 0px;
+}
+.scrollbar-light > .scroll-element.scroll-y .scroll-bar {
+ left: 0px;
+ min-height: 10px;
+ width: 10px;
+}
+.scrollbar-light > .scroll-element.scroll-x .scroll-element_outer {
+ height: 12px;
+ left: 2px;
+ top: 2px;
+}
+.scrollbar-light > .scroll-element.scroll-x .scroll-element_size {
+ left: -4px;
+}
+.scrollbar-light > .scroll-element.scroll-y .scroll-element_outer {
+ left: 2px;
+ top: 2px;
+ width: 12px;
+}
+.scrollbar-light > .scroll-element.scroll-y .scroll-element_size {
+ top: -4px;
+}
+/* update scrollbar offset if both scrolls are visible */
+.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size {
+ left: -19px;
+}
+.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size {
+ top: -19px;
+}
+.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track {
+ left: -19px;
+}
+.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track {
+ top: -19px;
+}
/*************** SCROLLBAR RAIL ***************/
-
.scrollbar-rail > .scroll-element,
-.scrollbar-rail > .scroll-element div
-{
- border: none;
- margin: 0;
- overflow: hidden;
- padding: 0;
- position: absolute;
- z-index: 10;
+.scrollbar-rail > .scroll-element div {
+ border: none;
+ margin: 0;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
}
.scrollbar-rail > .scroll-element {
- background-color: #ffffff;
+ background-color: #ffffff;
}
.scrollbar-rail > .scroll-element div {
- display: block;
- height: 100%;
- left: 0;
- top: 0;
- width: 100%;
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
}
.scrollbar-rail > .scroll-element .scroll-element_size {
- background-color: #999;
- background-color: rgba(0, 0, 0, 0.3);
+ background-color: #999;
+ background-color: rgba(0, 0, 0, 0.3);
}
.scrollbar-rail > .scroll-element .scroll-element_outer:hover .scroll-element_size {
- background-color: #666;
- background-color: rgba(0, 0, 0, 0.5);
+ background-color: #666;
+ background-color: rgba(0, 0, 0, 0.5);
}
.scrollbar-rail > .scroll-element.scroll-x {
- bottom: 0;
- height: 12px;
- left: 0;
- min-width: 100%;
- padding: 3px 0 2px;
- width: 100%;
+ bottom: 0;
+ height: 12px;
+ left: 0;
+ min-width: 100%;
+ padding: 3px 0 2px;
+ width: 100%;
}
.scrollbar-rail > .scroll-element.scroll-y {
- height: 100%;
- min-height: 100%;
- padding: 0 2px 0 3px;
- right: 0;
- top: 0;
- width: 12px;
+ height: 100%;
+ min-height: 100%;
+ padding: 0 2px 0 3px;
+ right: 0;
+ top: 0;
+ width: 12px;
}
.scrollbar-rail > .scroll-element .scroll-bar {
- background-color: #d0b9a0;
-
- -webkit-border-radius: 2px;
- -moz-border-radius: 2px;
- border-radius: 2px;
-
- box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5);
+ background-color: #d0b9a0;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+ box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5);
}
.scrollbar-rail > .scroll-element .scroll-element_outer:hover .scroll-bar {
- box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.6);
+ box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.6);
}
/* scrollbar height/width & offset from container borders */
+.scrollbar-rail > .scroll-content.scroll-scrolly_visible {
+ left: -17px;
+ margin-left: 17px;
+}
-.scrollbar-rail > .scroll-content.scroll-scrolly_visible { left: -17px; margin-left: 17px; }
-.scrollbar-rail > .scroll-content.scroll-scrollx_visible { margin-top: 17px; top: -17px; }
-
-.scrollbar-rail > .scroll-element.scroll-x .scroll-bar { height: 10px; min-width: 10px; top: 1px; }
-.scrollbar-rail > .scroll-element.scroll-y .scroll-bar { left: 1px; min-height: 10px; width: 10px; }
-
-.scrollbar-rail > .scroll-element.scroll-x .scroll-element_outer { height: 15px; left: 5px; }
-.scrollbar-rail > .scroll-element.scroll-x .scroll-element_size { height: 2px; left: -10px; top: 5px; }
-
-.scrollbar-rail > .scroll-element.scroll-y .scroll-element_outer { top: 5px; width: 15px; }
-.scrollbar-rail > .scroll-element.scroll-y .scroll-element_size { left: 5px; top: -10px; width: 2px; }
-
-/* update scrollbar offset if both scrolls are visible */
-
-.scrollbar-rail > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -25px; }
-.scrollbar-rail > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -25px; }
+.scrollbar-rail > .scroll-content.scroll-scrollx_visible {
+ margin-top: 17px;
+ top: -17px;
+}
-.scrollbar-rail > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -25px; }
-.scrollbar-rail > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -25px; }
+.scrollbar-rail > .scroll-element.scroll-x .scroll-bar {
+ height: 10px;
+ min-width: 10px;
+ top: 1px;
+}
+.scrollbar-rail > .scroll-element.scroll-y .scroll-bar {
+ left: 1px;
+ min-height: 10px;
+ width: 10px;
+}
+.scrollbar-rail > .scroll-element.scroll-x .scroll-element_outer {
+ height: 15px;
+ left: 5px;
+}
+.scrollbar-rail > .scroll-element.scroll-x .scroll-element_size {
+ height: 2px;
+ left: -10px;
+ top: 5px;
+}
+.scrollbar-rail > .scroll-element.scroll-y .scroll-element_outer {
+ top: 5px;
+ width: 15px;
+}
+.scrollbar-rail > .scroll-element.scroll-y .scroll-element_size {
+ left: 5px;
+ top: -10px;
+ width: 2px;
+}
+/* update scrollbar offset if both scrolls are visible */
+.scrollbar-rail > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size {
+ left: -25px;
+}
+.scrollbar-rail > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size {
+ top: -25px;
+}
+.scrollbar-rail > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track {
+ left: -25px;
+}
+.scrollbar-rail > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track {
+ top: -25px;
+}
/*************** SCROLLBAR DYNAMIC ***************/
-
.scrollbar-dynamic > .scroll-element,
-.scrollbar-dynamic > .scroll-element div
-{
- background: none;
- border: none;
- margin: 0;
- padding: 0;
- position: absolute;
- z-index: 10;
+.scrollbar-dynamic > .scroll-element div {
+ background: none;
+ border: none;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
}
.scrollbar-dynamic > .scroll-element div {
- display: block;
- height: 100%;
- left: 0;
- top: 0;
- width: 100%;
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
}
.scrollbar-dynamic > .scroll-element.scroll-x {
- bottom: 2px;
- height: 7px;
- left: 0;
- min-width: 100%;
- width: 100%;
+ bottom: 2px;
+ height: 7px;
+ left: 0;
+ min-width: 100%;
+ width: 100%;
}
.scrollbar-dynamic > .scroll-element.scroll-y {
- height: 100%;
- min-height: 100%;
- right: 2px;
- top: 0;
- width: 7px;
+ height: 100%;
+ min-height: 100%;
+ right: 2px;
+ top: 0;
+ width: 7px;
}
.scrollbar-dynamic > .scroll-element .scroll-element_outer {
- opacity: 0.3;
-
- -webkit-border-radius: 12px;
- -moz-border-radius: 12px;
- border-radius: 12px;
+ opacity: 0.3;
+ -webkit-border-radius: 12px;
+ -moz-border-radius: 12px;
+ border-radius: 12px;
}
-.scrollbar-dynamic > .scroll-element .scroll-element_size {
- background-color: #cccccc;
- opacity: 0;
- -webkit-border-radius: 12px;
- -moz-border-radius: 12px;
- border-radius: 12px;
-
- -webkit-transition: opacity 0.2s;
- -moz-transition: opacity 0.2s;
- -o-transition: opacity 0.2s;
- -ms-transition: opacity 0.2s;
- transition: opacity 0.2s;
+.scrollbar-dynamic > .scroll-element .scroll-element_size {
+ background-color: #cccccc;
+ opacity: 0;
+ -webkit-border-radius: 12px;
+ -moz-border-radius: 12px;
+ border-radius: 12px;
+ -webkit-transition: opacity 0.2s;
+ -moz-transition: opacity 0.2s;
+ -o-transition: opacity 0.2s;
+ -ms-transition: opacity 0.2s;
+ transition: opacity 0.2s;
}
.scrollbar-dynamic > .scroll-element .scroll-bar {
- background-color: #6c6e71;
-
- -webkit-border-radius: 7px;
- -moz-border-radius: 7px;
- border-radius: 7px;
+ background-color: #6c6e71;
+ -webkit-border-radius: 7px;
+ -moz-border-radius: 7px;
+ border-radius: 7px;
}
/* scrollbar height/width & offset from container borders */
-
.scrollbar-dynamic > .scroll-element.scroll-x .scroll-bar {
- bottom: 0;
- height: 7px;
- min-width: 24px;
- top: auto;
+ bottom: 0;
+ height: 7px;
+ min-width: 24px;
+ top: auto;
}
+
.scrollbar-dynamic > .scroll-element.scroll-y .scroll-bar {
- left: auto;
- min-height: 24px;
- right: 0;
- width: 7px;
+ left: auto;
+ min-height: 24px;
+ right: 0;
+ width: 7px;
}
.scrollbar-dynamic > .scroll-element.scroll-x .scroll-element_outer {
- bottom: 0;
- top: auto;
- left: 2px;
-
- -webkit-transition: height 0.2s;
- -moz-transition: height 0.2s;
- -o-transition: height 0.2s;
- -ms-transition: height 0.2s;
- transition: height 0.2s;
+ bottom: 0;
+ top: auto;
+ left: 2px;
+ -webkit-transition: height 0.2s;
+ -moz-transition: height 0.2s;
+ -o-transition: height 0.2s;
+ -ms-transition: height 0.2s;
+ transition: height 0.2s;
}
.scrollbar-dynamic > .scroll-element.scroll-y .scroll-element_outer {
- left: auto;
- right: 0;
- top: 2px;
-
- -webkit-transition: width 0.2s;
- -moz-transition: width 0.2s;
- -o-transition: width 0.2s;
- -ms-transition: width 0.2s;
- transition: width 0.2s;
+ left: auto;
+ right: 0;
+ top: 2px;
+ -webkit-transition: width 0.2s;
+ -moz-transition: width 0.2s;
+ -o-transition: width 0.2s;
+ -ms-transition: width 0.2s;
+ transition: width 0.2s;
}
-.scrollbar-dynamic > .scroll-element.scroll-x .scroll-element_size { left: -4px; }
-.scrollbar-dynamic > .scroll-element.scroll-y .scroll-element_size { top: -4px; }
+.scrollbar-dynamic > .scroll-element.scroll-x .scroll-element_size {
+ left: -4px;
+}
+.scrollbar-dynamic > .scroll-element.scroll-y .scroll-element_size {
+ top: -4px;
+}
/* update scrollbar offset if both scrolls are visible */
+.scrollbar-dynamic > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size {
+ left: -11px;
+}
-.scrollbar-dynamic > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -11px; }
-.scrollbar-dynamic > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -11px; }
-
+.scrollbar-dynamic > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size {
+ top: -11px;
+}
/* hover & drag */
-
.scrollbar-dynamic > .scroll-element:hover .scroll-element_outer,
.scrollbar-dynamic > .scroll-element.scroll-draggable .scroll-element_outer {
- overflow: hidden;
-
- -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
- filter: alpha(opacity=70);
- opacity: 0.7;
+ overflow: hidden;
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
+ filter: alpha(opacity=70);
+ opacity: 0.7;
}
+
.scrollbar-dynamic > .scroll-element:hover .scroll-element_outer .scroll-element_size,
.scrollbar-dynamic > .scroll-element.scroll-draggable .scroll-element_outer .scroll-element_size {
- opacity: 1;
+ opacity: 1;
}
+
.scrollbar-dynamic > .scroll-element:hover .scroll-element_outer .scroll-bar,
.scrollbar-dynamic > .scroll-element.scroll-draggable .scroll-element_outer .scroll-bar {
- height: 100%;
- width: 100%;
-
- -webkit-border-radius: 12px;
- -moz-border-radius: 12px;
- border-radius: 12px;
+ height: 100%;
+ width: 100%;
+ -webkit-border-radius: 12px;
+ -moz-border-radius: 12px;
+ border-radius: 12px;
}
.scrollbar-dynamic > .scroll-element.scroll-x:hover .scroll-element_outer,
.scrollbar-dynamic > .scroll-element.scroll-x.scroll-draggable .scroll-element_outer {
- height: 20px;
- min-height: 7px;
+ height: 20px;
+ min-height: 7px;
}
+
.scrollbar-dynamic > .scroll-element.scroll-y:hover .scroll-element_outer,
.scrollbar-dynamic > .scroll-element.scroll-y.scroll-draggable .scroll-element_outer {
- min-width: 7px;
- width: 20px;
+ min-width: 7px;
+ width: 20px;
}
-
-
-
-
-
-
-
-
-
/*************** SCROLLBAR GOOGLE CHROME ***************/
-
.scrollbar-chrome > .scroll-element,
-.scrollbar-chrome > .scroll-element div
-{
- border: none;
- margin: 0;
- overflow: hidden;
- padding: 0;
- position: absolute;
- z-index: 10;
+.scrollbar-chrome > .scroll-element div {
+ border: none;
+ margin: 0;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
}
.scrollbar-chrome > .scroll-element {
- background-color: #ffffff;
+ background-color: #ffffff;
}
.scrollbar-chrome > .scroll-element div {
- display: block;
- height: 100%;
- left: 0;
- top: 0;
- width: 100%;
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
}
-.scrollbar-chrome > .scroll-element .scroll-element_outer {}
-
.scrollbar-chrome > .scroll-element .scroll-element_track {
- background: #f1f1f1;
- border: 1px solid #dbdbdb;
+ background: #f1f1f1;
+ border: 1px solid #dbdbdb;
}
.scrollbar-chrome > .scroll-element.scroll-x {
- bottom: 0;
- height: 16px;
- left: 0;
- min-width: 100%;
- width: 100%;
+ bottom: 0;
+ height: 16px;
+ left: 0;
+ min-width: 100%;
+ width: 100%;
}
.scrollbar-chrome > .scroll-element.scroll-y {
- height: 100%;
- min-height: 100%;
- right: 0;
- top: 0;
- width: 16px;
+ height: 100%;
+ min-height: 100%;
+ right: 0;
+ top: 0;
+ width: 16px;
}
.scrollbar-chrome > .scroll-element .scroll-bar {
- background-color: #d9d9d9;
- border: 1px solid #bdbdbd;
- cursor: default;
-
- -webkit-border-radius: 2px;
- -moz-border-radius: 2px;
- border-radius: 2px;
+ background-color: #d9d9d9;
+ border: 1px solid #bdbdbd;
+ cursor: default;
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
}
.scrollbar-chrome > .scroll-element .scroll-bar:hover {
- background-color: #c2c2c2;
- border-color: #a9a9a9;
+ background-color: #c2c2c2;
+ border-color: #a9a9a9;
}
.scrollbar-chrome > .scroll-element.scroll-draggable .scroll-bar {
- background-color: #919191;
- border-color: #7e7e7e;
+ background-color: #919191;
+ border-color: #7e7e7e;
}
/* scrollbar height/width & offset from container borders */
+.scrollbar-chrome > .scroll-content.scroll-scrolly_visible {
+ left: -16px;
+ margin-left: 16px;
+}
-.scrollbar-chrome > .scroll-content.scroll-scrolly_visible { left: -16px; margin-left: 16px; }
-.scrollbar-chrome > .scroll-content.scroll-scrollx_visible { top: -16px; margin-top: 16px; }
-
-.scrollbar-chrome > .scroll-element.scroll-x .scroll-bar { height: 8px; min-width: 10px; top: 3px; }
-.scrollbar-chrome > .scroll-element.scroll-y .scroll-bar { left: 3px; min-height: 10px; width: 8px; }
+.scrollbar-chrome > .scroll-content.scroll-scrollx_visible {
+ top: -16px;
+ margin-top: 16px;
+}
-.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_outer { border-left: 1px solid #dbdbdb; }
-.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_track { height: 14px; left: -3px; }
-.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_size { height: 14px; left: -4px; }
+.scrollbar-chrome > .scroll-element.scroll-x .scroll-bar {
+ height: 8px;
+ min-width: 10px;
+ top: 3px;
+}
-.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_outer { border-top: 1px solid #dbdbdb; }
-.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_track { top: -3px; width: 14px; }
-.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_size { top: -4px; width: 14px; }
+.scrollbar-chrome > .scroll-element.scroll-y .scroll-bar {
+ left: 3px;
+ min-height: 10px;
+ width: 8px;
+}
-/* update scrollbar offset if both scrolls are visible */
+.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_outer {
+ border-left: 1px solid #dbdbdb;
+}
-.scrollbar-chrome > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -19px; }
-.scrollbar-chrome > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -19px; }
+.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_track {
+ height: 14px;
+ left: -3px;
+}
-.scrollbar-chrome > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -19px; }
-.scrollbar-chrome > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -19px; }
+.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_size {
+ height: 14px;
+ left: -4px;
+}
+.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_outer {
+ border-top: 1px solid #dbdbdb;
+}
+.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_track {
+ top: -3px;
+ width: 14px;
+}
+.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_size {
+ top: -4px;
+ width: 14px;
+}
+/* update scrollbar offset if both scrolls are visible */
+.scrollbar-chrome > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size {
+ left: -19px;
+}
+.scrollbar-chrome > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size {
+ top: -19px;
+}
+.scrollbar-chrome > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track {
+ left: -19px;
+}
+.scrollbar-chrome > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track {
+ top: -19px;
+}
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index c8cfb72..754f03a 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -29,7 +29,9 @@
index: 0,
name: 'scrollbar'
},
+ firefox: /firefox/i.test(navigator.userAgent),
macosx: /mac/i.test(navigator.platform),
+ msie: /(msie|trident)/i.test(navigator.userAgent),
mobile: /android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),
overlay: null,
scroll: null,
@@ -48,25 +50,26 @@
};
var defaults = {
- "autoScrollSize": true, // automatically calculate scrollsize
- "autoUpdate": true, // update scrollbar if content/container size changed
- "debug": false, // debug mode
- "disableBodyScroll": false, // disable body scroll if mouse over container
- "duration": 200, // scroll animate duration in ms
- "ignoreMobile": false, // ignore mobile devices
- "ignoreOverlay": false, // ignore browsers with overlay scrollbars (mobile, MacOS)
- "scrollStep": 30, // scroll step for scrollbar arrows
- "showArrows": false, // add class to show arrows
- "stepScrolling": true, // when scrolling to scrollbar mousedown position
-
- "scrollx": null, // horizontal scroll element
- "scrolly": null, // vertical scroll element
-
- "onDestroy": null, // callback function on destroy,
- "onFallback": null, // callback function if scrollbar is not initialized
- "onInit": null, // callback function on first initialization
- "onScroll": null, // callback function on content scrolling
- "onUpdate": null // callback function on init/resize (before scrollbar size calculation)
+ autoScrollSize: true, // automatically calculate scrollsize
+ autoUpdate: true, // update scrollbar if content/container size changed
+ debug: false, // debug mode
+ disableBodyScroll: false, // disable body scroll if mouse over container
+ duration: 200, // scroll animate duration in ms
+ ignoreMobile: false, // ignore mobile devices
+ ignoreOverlay: false, // ignore browsers with overlay scrollbars (mobile, MacOS)
+ isRtl: false, // is RTL
+ scrollStep: 30, // scroll step for scrollbar arrows
+ showArrows: false, // add class to show arrows
+ stepScrolling: true, // when scrolling to scrollbar mousedown position
+
+ scrollx: null, // horizontal scroll element
+ scrolly: null, // vertical scroll element
+
+ onDestroy: null, // callback function on destroy,
+ onFallback: null, // callback function if scrollbar is not initialized
+ onInit: null, // callback function on first initialization
+ onScroll: null, // callback function on content scrolling
+ onUpdate: null // callback function on init/resize (before scrollbar size calculation)
};
@@ -102,7 +105,6 @@
};
BaseScrollbar.prototype = {
-
destroy: function () {
if (!this.wrapper) {
@@ -133,7 +135,7 @@
$(document).add('body').off(this.namespace);
- if ($.isFunction(this.options.onDestroy)){
+ if ($.isFunction(this.options.onDestroy)) {
this.options.onDestroy.apply(this, [this.container]);
}
},
@@ -146,11 +148,12 @@
namespace = this.namespace,
o = $.extend(this.options, options || {}),
s = {x: this.scrollx, y: this.scrolly},
- w = this.wrapper;
+ w = this.wrapper,
+ cssOptions = {};
var initScroll = {
- "scrollLeft": c.scrollLeft(),
- "scrollTop": c.scrollTop()
+ scrollLeft: c.scrollLeft(),
+ scrollTop: c.scrollTop()
};
// do not init if in ignorable browser
@@ -158,7 +161,7 @@
|| (browser.overlay && o.ignoreOverlay)
|| (browser.macosx && !browser.webkit) // still required to ignore nonWebKit browsers on Mac
) {
- if ($.isFunction(o.onFallback)){
+ if ($.isFunction(o.onFallback)) {
o.onFallback.apply(this, [c]);
}
return false;
@@ -170,34 +173,51 @@
.css('position', c.css('position') === 'absolute' ? 'absolute' : 'relative')
.insertBefore(c).append(c);
+ if (o.isRtl) {
+ w.addClass('scroll--rtl');
+ }
+
if (c.is('textarea')) {
this.containerWrapper = cw = $('').insertBefore(c).append(c);
w.addClass('scroll-textarea');
}
- cw.addClass('scroll-content').css({
+ cssOptions = {
"height": "auto",
"margin-bottom": browser.scroll.height * -1 + 'px',
- "margin-right": browser.scroll.width * -1 + 'px',
"max-height": ""
- });
+ };
+ cssOptions[o.isRtl ? 'margin-left' : 'margin-right'] = browser.scroll.width * -1 + 'px';
+
+ cw.addClass('scroll-content').css(cssOptions);
c.on('scroll' + namespace, function (event) {
+ var scrollLeft = c.scrollLeft();
+ var scrollTop = c.scrollTop();
+ if (o.isRtl) {
+ switch (true) {
+ case browser.firefox:
+ scrollLeft = Math.abs(scrollLeft);
+ case browser.msie:
+ scrollLeft = c[0].scrollWidth - c[0].clientWidth - scrollLeft;
+ break;
+ }
+ }
if ($.isFunction(o.onScroll)) {
o.onScroll.call(S, {
- "maxScroll": s.y.maxScrollOffset,
- "scroll": c.scrollTop(),
- "size": s.y.size,
- "visible": s.y.visible
+ maxScroll: s.y.maxScrollOffset,
+ scroll: scrollTop,
+ size: s.y.size,
+ visible: s.y.visible
}, {
- "maxScroll": s.x.maxScrollOffset,
- "scroll": c.scrollLeft(),
- "size": s.x.size,
- "visible": s.x.visible
+ maxScroll: s.x.maxScrollOffset,
+ scroll: scrollLeft,
+ size: s.x.size,
+ visible: s.x.visible
});
}
- s.x.isVisible && s.x.scroll.bar.css('left', c.scrollLeft() * s.x.kx + 'px');
- s.y.isVisible && s.y.scroll.bar.css('top', c.scrollTop() * s.y.kx + 'px');
+ s.x.isVisible && s.x.scroll.bar.css('left', scrollLeft * s.x.kx + 'px');
+ s.y.isVisible && s.y.scroll.bar.css('top', scrollTop * s.y.kx + 'px');
});
/* prevent native scrollbars to be visible on #anchor click */
@@ -218,12 +238,12 @@
w.on('touchstart' + namespace, function (event) {
var touch = event.originalEvent.touches && event.originalEvent.touches[0] || event;
var originalTouch = {
- "pageX": touch.pageX,
- "pageY": touch.pageY
+ pageX: touch.pageX,
+ pageY: touch.pageY
};
var originalScroll = {
- "left": c.scrollLeft(),
- "top": c.scrollTop()
+ left: c.scrollLeft(),
+ top: c.scrollTop()
};
$(document).on('touchmove' + namespace, function (event) {
var touch = event.originalEvent.targetTouches && event.originalEvent.targetTouches[0] || event;
@@ -237,16 +257,17 @@
});
}
}
- if ($.isFunction(o.onInit)){
+ if ($.isFunction(o.onInit)) {
o.onInit.apply(this, [c]);
}
} else {
- cw.css({
+ cssOptions = {
"height": "auto",
"margin-bottom": browser.scroll.height * -1 + 'px',
- "margin-right": browser.scroll.width * -1 + 'px',
"max-height": ""
- });
+ };
+ cssOptions[o.isRtl ? 'margin-left' : 'margin-right'] = browser.scroll.width * -1 + 'px';
+ cw.css(cssOptions);
}
// init scrollbars & recalculate sizes
@@ -273,7 +294,7 @@
scrollx.scroll = S._getScroll(o['scroll' + d]).addClass('scroll-' + d);
- if(o.showArrows){
+ if (o.showArrows) {
scrollx.scroll.addClass('scroll-element_arrows_visible');
}
@@ -339,10 +360,10 @@
scrollForward = 1;
var data = {
- "eventOffset": event[(d === 'x') ? 'pageX' : 'pageY'],
- "maxScrollValue": scrollx.size - scrollx.visible - scrollx.offset,
- "scrollbarOffset": scrollx.scroll.bar.offset()[(d === 'x') ? 'left' : 'top'],
- "scrollbarSize": scrollx.scroll.bar[(d === 'x') ? 'outerWidth' : 'outerHeight']()
+ eventOffset: event[(d === 'x') ? 'pageX' : 'pageY'],
+ maxScrollValue: scrollx.size - scrollx.visible - scrollx.offset,
+ scrollbarOffset: scrollx.scroll.bar.offset()[(d === 'x') ? 'left' : 'top'],
+ scrollbarSize: scrollx.scroll.bar[(d === 'x') ? 'outerWidth' : 'outerHeight']()
};
var timeout = 0, timer = 0;
@@ -399,6 +420,8 @@
$(document).on('mousemove' + namespace, function (event) {
var diff = parseInt((event[(d === 'x') ? 'pageX' : 'pageY'] - eventPosition) / scrollx.kx, 10);
+ if (d === 'x' && o.isRtl && browser.msie)
+ diff = diff * -1;
c[scrollOffset](initOffset + diff);
});
@@ -423,13 +446,13 @@
// calculate init sizes
$.each(s, function (d, scrollx) {
$.extend(scrollx, (d == "x") ? {
- "offset": parseInt(c.css('left'), 10) || 0,
- "size": c.prop('scrollWidth'),
- "visible": w.width()
+ offset: parseInt(c.css('left'), 10) || 0,
+ size: c.prop('scrollWidth'),
+ visible: w.width()
} : {
- "offset": parseInt(c.css('top'), 10) || 0,
- "size": c.prop('scrollHeight'),
- "visible": w.height()
+ offset: parseInt(c.css('top'), 10) || 0,
+ size: c.prop('scrollHeight'),
+ visible: w.height()
});
});
@@ -437,7 +460,7 @@
this._updateScroll('x', this.scrollx);
this._updateScroll('y', this.scrolly);
- if ($.isFunction(o.onUpdate)){
+ if ($.isFunction(o.onUpdate)) {
o.onUpdate.apply(this, [c]);
}
@@ -466,7 +489,6 @@
c.scrollLeft(initScroll.scrollLeft).scrollTop(initScroll.scrollTop).trigger('scroll');
},
-
/**
* Get scrollx/scrolly object
*
@@ -525,8 +547,7 @@
});
return scroll;
},
-
- _handleMouseDown: function(callback, event) {
+ _handleMouseDown: function (callback, event) {
var namespace = this.namespace;
@@ -550,7 +571,6 @@
event && event.preventDefault();
return false;
},
-
_updateScroll: function (d, scrollx) {
var container = this.container,
@@ -575,7 +595,7 @@
}
if (d === 'y') {
- if(container.is('textarea') || AreaSize < AreaVisible){
+ if (container.is('textarea') || AreaSize < AreaVisible) {
containerWrapper.css({
"height": (AreaVisible + browser.scroll.height) + 'px',
"max-height": "none"
@@ -596,14 +616,14 @@
|| scrolly.offset != (parseInt(container.css('top'), 10) || 0)
) {
$.extend(this.scrollx, {
- "offset": parseInt(container.css('left'), 10) || 0,
- "size": container.prop('scrollWidth'),
- "visible": wrapper.width()
+ offset: parseInt(container.css('left'), 10) || 0,
+ size: container.prop('scrollWidth'),
+ visible: wrapper.width()
});
$.extend(this.scrolly, {
- "offset": parseInt(container.css('top'), 10) || 0,
- "size": this.container.prop('scrollHeight'),
- "visible": wrapper.height()
+ offset: parseInt(container.css('top'), 10) || 0,
+ size: this.container.prop('scrollHeight'),
+ visible: wrapper.height()
});
this._updateScroll(d === 'x' ? 'y' : 'x', scrolly);
}
@@ -704,8 +724,8 @@
if (browser.webkit && !actualSize) {
return {
- "height": 0,
- "width": 0
+ height: 0,
+ width: 0
};
}
@@ -730,8 +750,8 @@
browser.data.outer.scrollLeft(1000).scrollTop(1000);
return {
- "height": Math.ceil((browser.data.outer.offset().top - browser.data.inner.offset().top) || 0),
- "width": Math.ceil((browser.data.outer.offset().left - browser.data.inner.offset().left) || 0)
+ height: Math.ceil((browser.data.outer.offset().top - browser.data.inner.offset().top) || 0),
+ width: Math.ceil((browser.data.outer.offset().left - browser.data.inner.offset().left) || 0)
};
}
@@ -777,18 +797,18 @@
};
})
.directive('jqueryScrollbar', ['jQueryScrollbar', '$parse', function (jQueryScrollbar, $parse) {
- return {
- "restrict": "AC",
- "link": function (scope, element, attrs) {
- var model = $parse(attrs.jqueryScrollbar),
- options = model(scope);
- element.scrollbar(options || jQueryScrollbar.options)
- .on('$destroy', function () {
- element.scrollbar('destroy');
- });
- }
- };
- }]);
+ return {
+ restrict: "AC",
+ link: function (scope, element, attrs) {
+ var model = $parse(attrs.jqueryScrollbar),
+ options = model(scope);
+ element.scrollbar(options || jQueryScrollbar.options)
+ .on('$destroy', function () {
+ element.scrollbar('destroy');
+ });
+ }
+ };
+ }]);
})(window.angular);
}
}));
diff --git a/sass/Gruntfile.js b/sass/Gruntfile.js
new file mode 100644
index 0000000..a983423
--- /dev/null
+++ b/sass/Gruntfile.js
@@ -0,0 +1,22 @@
+module.exports = function (grunt) {
+ grunt.initConfig({
+ pkg: grunt.file.readJSON('package.json'),
+ compass: {
+ auto: {
+ options: {
+ sassDir: './',
+ cssDir: '../'
+ }
+ }
+ },
+ watch: {
+ scss: {
+ files: ['./**/*.scss'],
+ tasks: ['compass']
+ }
+ }
+ });
+ grunt.loadNpmTasks('grunt-contrib-compass');
+ grunt.loadNpmTasks('grunt-contrib-watch');
+ grunt.registerTask('default', ['watch']);
+};
\ No newline at end of file
diff --git a/sass/config.rb b/sass/config.rb
new file mode 100644
index 0000000..eb6e6e4
--- /dev/null
+++ b/sass/config.rb
@@ -0,0 +1,2 @@
+require 'compass/import-once/activate'
+line_comments = false
diff --git a/sass/jquery.scrollbar.scss b/sass/jquery.scrollbar.scss
new file mode 100644
index 0000000..118d29a
--- /dev/null
+++ b/sass/jquery.scrollbar.scss
@@ -0,0 +1,793 @@
+/*************** SCROLLBAR BASE CSS ***************/
+
+.scroll-wrapper {
+ overflow: hidden !important;
+ padding: 0 !important;
+ position: relative;
+
+ & > .scroll-content {
+ border: none !important;
+ box-sizing: content-box !important;
+ height: auto;
+ left: 0;
+ margin: 0;
+ max-height: none;
+ max-width: none !important;
+ overflow: scroll !important;
+ padding: 0;
+ position: relative !important;
+ top: 0;
+ width: auto !important;
+
+ &::-webkit-scrollbar {
+ height: 0;
+ width: 0;
+ }
+ }
+ &.scroll--rtl {
+ direction: rtl;
+ }
+}
+
+.scroll-element {
+ box-sizing: content-box;
+ display: none;
+
+ div {
+ box-sizing: content-box;
+ }
+ .scroll-bar,
+ .scroll-arrow {
+ cursor: default;
+ }
+
+ &.scroll-x.scroll-scrollx_visible,
+ &.scroll-y.scroll-scrolly_visible {
+ display: block;
+ }
+}
+
+.scroll-textarea {
+ border: 1px solid #cccccc;
+ border-top-color: #999999;
+
+ & > .scroll-content {
+ overflow: hidden !important;
+
+ & > textarea {
+ border: none !important;
+ box-sizing: border-box;
+ height: 100% !important;
+ margin: 0;
+ max-height: none !important;
+ max-width: none !important;
+ overflow: scroll !important;
+ outline: none;
+ padding: 2px;
+ position: relative !important;
+ top: 0;
+ width: 100% !important;
+
+ &::-webkit-scrollbar {
+ height: 0;
+ width: 0;
+ }
+ }
+ }
+}
+
+
+
+
+/*************** SIMPLE INNER SCROLLBAR ***************/
+
+.scrollbar-inner > .scroll-element,
+.scrollbar-inner > .scroll-element div
+{
+ border: none;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+}
+
+.scrollbar-inner > .scroll-element div {
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
+}
+
+.scrollbar-inner > .scroll-element.scroll-x {
+ bottom: 2px;
+ height: 8px;
+ left: 0;
+ width: 100%;
+}
+
+.scrollbar-inner > .scroll-element.scroll-y {
+ height: 100%;
+ right: 2px;
+ top: 0;
+ width: 8px;
+}
+
+.scrollbar-inner > .scroll-element .scroll-element_outer {
+ overflow: hidden;
+}
+
+.scrollbar-inner > .scroll-element .scroll-element_outer,
+.scrollbar-inner > .scroll-element .scroll-element_track,
+.scrollbar-inner > .scroll-element .scroll-bar {
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+}
+
+.scrollbar-inner > .scroll-element .scroll-element_track,
+.scrollbar-inner > .scroll-element .scroll-bar {
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)";
+ filter: alpha(opacity=40);
+ opacity: 0.4;
+}
+
+.scrollbar-inner > .scroll-element .scroll-element_track { background-color: #e0e0e0; }
+.scrollbar-inner > .scroll-element .scroll-bar { background-color: #c2c2c2; }
+.scrollbar-inner > .scroll-element:hover .scroll-bar { background-color: #919191; }
+.scrollbar-inner > .scroll-element.scroll-draggable .scroll-bar { background-color: #919191; }
+
+
+/* update scrollbar offset if both scrolls are visible */
+
+.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -12px; }
+.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -12px; }
+
+
+.scrollbar-inner > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -12px; }
+.scrollbar-inner > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -12px; }
+
+
+
+
+
+
+
+
+
+
+/*************** SIMPLE OUTER SCROLLBAR ***************/
+
+.scrollbar-outer > .scroll-element,
+.scrollbar-outer > .scroll-element div
+{
+ border: none;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+}
+
+.scrollbar-outer > .scroll-element {
+ background-color: #ffffff;
+}
+
+.scrollbar-outer > .scroll-element div {
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
+}
+
+.scrollbar-outer > .scroll-element.scroll-x {
+ bottom: 0;
+ height: 12px;
+ left: 0;
+ width: 100%;
+}
+
+.scrollbar-outer > .scroll-element.scroll-y {
+ height: 100%;
+ right: 0;
+ top: 0;
+ width: 12px;
+}
+
+.scrollbar-outer > .scroll-element.scroll-x .scroll-element_outer { height: 8px; top: 2px; }
+.scrollbar-outer > .scroll-element.scroll-y .scroll-element_outer { left: 2px; width: 8px; }
+
+.scrollbar-outer > .scroll-element .scroll-element_outer { overflow: hidden; }
+.scrollbar-outer > .scroll-element .scroll-element_track { background-color: #eeeeee; }
+
+.scrollbar-outer > .scroll-element .scroll-element_outer,
+.scrollbar-outer > .scroll-element .scroll-element_track,
+.scrollbar-outer > .scroll-element .scroll-bar {
+ -webkit-border-radius: 8px;
+ -moz-border-radius: 8px;
+ border-radius: 8px;
+}
+
+.scrollbar-outer > .scroll-element .scroll-bar { background-color: #d9d9d9; }
+.scrollbar-outer > .scroll-element .scroll-bar:hover { background-color: #c2c2c2; }
+.scrollbar-outer > .scroll-element.scroll-draggable .scroll-bar { background-color: #919191; }
+
+
+/* scrollbar height/width & offset from container borders */
+
+.scrollbar-outer > .scroll-content.scroll-scrolly_visible { left: -12px; margin-left: 12px; }
+.scrollbar-outer > .scroll-content.scroll-scrollx_visible { top: -12px; margin-top: 12px; }
+
+.scrollbar-outer > .scroll-element.scroll-x .scroll-bar { min-width: 10px; }
+.scrollbar-outer > .scroll-element.scroll-y .scroll-bar { min-height: 10px; }
+
+
+/* update scrollbar offset if both scrolls are visible */
+
+.scrollbar-outer > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -14px; }
+.scrollbar-outer > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -14px; }
+
+.scrollbar-outer > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -14px; }
+.scrollbar-outer > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -14px; }
+
+
+
+
+
+
+
+
+
+
+/*************** SCROLLBAR MAC OS X ***************/
+
+.scrollbar-macosx > .scroll-element,
+.scrollbar-macosx > .scroll-element div
+{
+ background: none;
+ border: none;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+}
+
+.scrollbar-macosx > .scroll-element div {
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
+}
+
+.scrollbar-macosx > .scroll-element .scroll-element_track { display: none; }
+.scrollbar-macosx > .scroll-element .scroll-bar {
+ background-color: #6C6E71;
+ display: block;
+
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+ filter: alpha(opacity=0);
+ opacity: 0;
+
+ -webkit-border-radius: 7px;
+ -moz-border-radius: 7px;
+ border-radius: 7px;
+
+ -webkit-transition: opacity 0.2s linear;
+ -moz-transition: opacity 0.2s linear;
+ -o-transition: opacity 0.2s linear;
+ -ms-transition: opacity 0.2s linear;
+ transition: opacity 0.2s linear;
+}
+.scrollbar-macosx:hover > .scroll-element .scroll-bar,
+.scrollbar-macosx > .scroll-element.scroll-draggable .scroll-bar {
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
+ filter: alpha(opacity=70);
+ opacity: 0.7;
+}
+
+
+.scrollbar-macosx > .scroll-element.scroll-x {
+ bottom: 0px;
+ height: 0px;
+ left: 0;
+ min-width: 100%;
+ overflow: visible;
+ width: 100%;
+}
+
+.scrollbar-macosx > .scroll-element.scroll-y {
+ height: 100%;
+ min-height: 100%;
+ right: 0px;
+ top: 0;
+ width: 0px;
+}
+
+/* scrollbar height/width & offset from container borders */
+.scrollbar-macosx > .scroll-element.scroll-x .scroll-bar { height: 7px; min-width: 10px; top: -9px; }
+.scrollbar-macosx > .scroll-element.scroll-y .scroll-bar { left: -9px; min-height: 10px; width: 7px; }
+
+.scrollbar-macosx > .scroll-element.scroll-x .scroll-element_outer { left: 2px; }
+.scrollbar-macosx > .scroll-element.scroll-x .scroll-element_size { left: -4px; }
+
+.scrollbar-macosx > .scroll-element.scroll-y .scroll-element_outer { top: 2px; }
+.scrollbar-macosx > .scroll-element.scroll-y .scroll-element_size { top: -4px; }
+
+/* update scrollbar offset if both scrolls are visible */
+.scrollbar-macosx > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -11px; }
+.scrollbar-macosx > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -11px; }
+
+
+
+
+
+
+
+
+
+
+/*************** SCROLLBAR LIGHT ***************/
+
+.scrollbar-light > .scroll-element,
+.scrollbar-light > .scroll-element div {
+ border: none;
+ margin: 0;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+}
+
+.scrollbar-light > .scroll-element {
+ background-color: #ffffff;
+}
+
+.scrollbar-light > .scroll-element div {
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
+}
+
+.scrollbar-light > .scroll-element .scroll-element_outer {
+ -webkit-border-radius: 10px;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
+}
+
+.scrollbar-light > .scroll-element .scroll-element_size {
+ background: #dbdbdb;
+ background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2RiZGJkYiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNlOGU4ZTgiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+');
+ background: -moz-linear-gradient(left, #dbdbdb 0%, #e8e8e8 100%);
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%,#dbdbdb), color-stop(100%,#e8e8e8));
+ background: -webkit-linear-gradient(left, #dbdbdb 0%,#e8e8e8 100%);
+ background: -o-linear-gradient(left, #dbdbdb 0%,#e8e8e8 100%);
+ background: -ms-linear-gradient(left, #dbdbdb 0%,#e8e8e8 100%);
+ background: linear-gradient(to right, #dbdbdb 0%,#e8e8e8 100%);
+
+ -webkit-border-radius: 10px;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
+}
+
+.scrollbar-light > .scroll-element.scroll-x {
+ bottom: 0;
+ height: 17px;
+ left: 0;
+ min-width: 100%;
+ width: 100%;
+}
+
+.scrollbar-light > .scroll-element.scroll-y {
+ height: 100%;
+ min-height: 100%;
+ right: 0;
+ top: 0;
+ width: 17px;
+}
+
+.scrollbar-light > .scroll-element .scroll-bar {
+ background: #fefefe;
+ background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZlZmVmZSIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmNWY1ZjUiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+');
+ background: -moz-linear-gradient(left, #fefefe 0%, #f5f5f5 100%);
+ background: -webkit-gradient(linear, left top, right top, color-stop(0%,#fefefe), color-stop(100%,#f5f5f5));
+ background: -webkit-linear-gradient(left, #fefefe 0%,#f5f5f5 100%);
+ background: -o-linear-gradient(left, #fefefe 0%,#f5f5f5 100%);
+ background: -ms-linear-gradient(left, #fefefe 0%,#f5f5f5 100%);
+ background: linear-gradient(to right, #fefefe 0%,#f5f5f5 100%);
+
+ border: 1px solid #dbdbdb;
+ -webkit-border-radius: 10px;
+ -moz-border-radius: 10px;
+ border-radius: 10px;
+}
+
+/* scrollbar height/width & offset from container borders */
+
+.scrollbar-light > .scroll-content.scroll-scrolly_visible { left: -17px; margin-left: 17px; }
+.scrollbar-light > .scroll-content.scroll-scrollx_visible { top: -17px; margin-top: 17px; }
+
+.scrollbar-light > .scroll-element.scroll-x .scroll-bar { height: 10px; min-width: 10px; top: 0px; }
+.scrollbar-light > .scroll-element.scroll-y .scroll-bar { left: 0px; min-height: 10px; width: 10px; }
+
+.scrollbar-light > .scroll-element.scroll-x .scroll-element_outer { height: 12px; left: 2px; top: 2px; }
+.scrollbar-light > .scroll-element.scroll-x .scroll-element_size { left: -4px; }
+
+.scrollbar-light > .scroll-element.scroll-y .scroll-element_outer { left: 2px; top: 2px; width: 12px; }
+.scrollbar-light > .scroll-element.scroll-y .scroll-element_size { top: -4px; }
+
+/* update scrollbar offset if both scrolls are visible */
+
+.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -19px; }
+.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -19px; }
+
+.scrollbar-light > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -19px; }
+.scrollbar-light > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -19px; }
+
+
+
+
+
+
+
+
+
+
+/*************** SCROLLBAR RAIL ***************/
+
+.scrollbar-rail > .scroll-element,
+.scrollbar-rail > .scroll-element div
+{
+ border: none;
+ margin: 0;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+}
+
+.scrollbar-rail > .scroll-element {
+ background-color: #ffffff;
+}
+
+.scrollbar-rail > .scroll-element div {
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
+}
+
+.scrollbar-rail > .scroll-element .scroll-element_size {
+ background-color: #999;
+ background-color: rgba(0, 0, 0, 0.3);
+}
+
+.scrollbar-rail > .scroll-element .scroll-element_outer:hover .scroll-element_size {
+ background-color: #666;
+ background-color: rgba(0, 0, 0, 0.5);
+}
+
+.scrollbar-rail > .scroll-element.scroll-x {
+ bottom: 0;
+ height: 12px;
+ left: 0;
+ min-width: 100%;
+ padding: 3px 0 2px;
+ width: 100%;
+}
+
+.scrollbar-rail > .scroll-element.scroll-y {
+ height: 100%;
+ min-height: 100%;
+ padding: 0 2px 0 3px;
+ right: 0;
+ top: 0;
+ width: 12px;
+}
+
+.scrollbar-rail > .scroll-element .scroll-bar {
+ background-color: #d0b9a0;
+
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+
+ box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.5);
+}
+
+.scrollbar-rail > .scroll-element .scroll-element_outer:hover .scroll-bar {
+ box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.6);
+}
+
+/* scrollbar height/width & offset from container borders */
+
+.scrollbar-rail > .scroll-content.scroll-scrolly_visible { left: -17px; margin-left: 17px; }
+.scrollbar-rail > .scroll-content.scroll-scrollx_visible { margin-top: 17px; top: -17px; }
+
+.scrollbar-rail > .scroll-element.scroll-x .scroll-bar { height: 10px; min-width: 10px; top: 1px; }
+.scrollbar-rail > .scroll-element.scroll-y .scroll-bar { left: 1px; min-height: 10px; width: 10px; }
+
+.scrollbar-rail > .scroll-element.scroll-x .scroll-element_outer { height: 15px; left: 5px; }
+.scrollbar-rail > .scroll-element.scroll-x .scroll-element_size { height: 2px; left: -10px; top: 5px; }
+
+.scrollbar-rail > .scroll-element.scroll-y .scroll-element_outer { top: 5px; width: 15px; }
+.scrollbar-rail > .scroll-element.scroll-y .scroll-element_size { left: 5px; top: -10px; width: 2px; }
+
+/* update scrollbar offset if both scrolls are visible */
+
+.scrollbar-rail > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -25px; }
+.scrollbar-rail > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -25px; }
+
+.scrollbar-rail > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -25px; }
+.scrollbar-rail > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -25px; }
+
+
+
+
+
+
+
+
+
+
+/*************** SCROLLBAR DYNAMIC ***************/
+
+.scrollbar-dynamic > .scroll-element,
+.scrollbar-dynamic > .scroll-element div
+{
+ background: none;
+ border: none;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+}
+
+.scrollbar-dynamic > .scroll-element div {
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
+}
+
+.scrollbar-dynamic > .scroll-element.scroll-x {
+ bottom: 2px;
+ height: 7px;
+ left: 0;
+ min-width: 100%;
+ width: 100%;
+}
+
+.scrollbar-dynamic > .scroll-element.scroll-y {
+ height: 100%;
+ min-height: 100%;
+ right: 2px;
+ top: 0;
+ width: 7px;
+}
+
+.scrollbar-dynamic > .scroll-element .scroll-element_outer {
+ opacity: 0.3;
+
+ -webkit-border-radius: 12px;
+ -moz-border-radius: 12px;
+ border-radius: 12px;
+}
+.scrollbar-dynamic > .scroll-element .scroll-element_size {
+ background-color: #cccccc;
+ opacity: 0;
+
+ -webkit-border-radius: 12px;
+ -moz-border-radius: 12px;
+ border-radius: 12px;
+
+ -webkit-transition: opacity 0.2s;
+ -moz-transition: opacity 0.2s;
+ -o-transition: opacity 0.2s;
+ -ms-transition: opacity 0.2s;
+ transition: opacity 0.2s;
+}
+
+.scrollbar-dynamic > .scroll-element .scroll-bar {
+ background-color: #6c6e71;
+
+ -webkit-border-radius: 7px;
+ -moz-border-radius: 7px;
+ border-radius: 7px;
+}
+
+/* scrollbar height/width & offset from container borders */
+
+.scrollbar-dynamic > .scroll-element.scroll-x .scroll-bar {
+ bottom: 0;
+ height: 7px;
+ min-width: 24px;
+ top: auto;
+}
+.scrollbar-dynamic > .scroll-element.scroll-y .scroll-bar {
+ left: auto;
+ min-height: 24px;
+ right: 0;
+ width: 7px;
+}
+
+.scrollbar-dynamic > .scroll-element.scroll-x .scroll-element_outer {
+ bottom: 0;
+ top: auto;
+ left: 2px;
+
+ -webkit-transition: height 0.2s;
+ -moz-transition: height 0.2s;
+ -o-transition: height 0.2s;
+ -ms-transition: height 0.2s;
+ transition: height 0.2s;
+}
+
+.scrollbar-dynamic > .scroll-element.scroll-y .scroll-element_outer {
+ left: auto;
+ right: 0;
+ top: 2px;
+
+ -webkit-transition: width 0.2s;
+ -moz-transition: width 0.2s;
+ -o-transition: width 0.2s;
+ -ms-transition: width 0.2s;
+ transition: width 0.2s;
+}
+
+.scrollbar-dynamic > .scroll-element.scroll-x .scroll-element_size { left: -4px; }
+.scrollbar-dynamic > .scroll-element.scroll-y .scroll-element_size { top: -4px; }
+
+
+/* update scrollbar offset if both scrolls are visible */
+
+.scrollbar-dynamic > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -11px; }
+.scrollbar-dynamic > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -11px; }
+
+
+/* hover & drag */
+
+.scrollbar-dynamic > .scroll-element:hover .scroll-element_outer,
+.scrollbar-dynamic > .scroll-element.scroll-draggable .scroll-element_outer {
+ overflow: hidden;
+
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
+ filter: alpha(opacity=70);
+ opacity: 0.7;
+}
+.scrollbar-dynamic > .scroll-element:hover .scroll-element_outer .scroll-element_size,
+.scrollbar-dynamic > .scroll-element.scroll-draggable .scroll-element_outer .scroll-element_size {
+ opacity: 1;
+}
+.scrollbar-dynamic > .scroll-element:hover .scroll-element_outer .scroll-bar,
+.scrollbar-dynamic > .scroll-element.scroll-draggable .scroll-element_outer .scroll-bar {
+ height: 100%;
+ width: 100%;
+
+ -webkit-border-radius: 12px;
+ -moz-border-radius: 12px;
+ border-radius: 12px;
+}
+
+.scrollbar-dynamic > .scroll-element.scroll-x:hover .scroll-element_outer,
+.scrollbar-dynamic > .scroll-element.scroll-x.scroll-draggable .scroll-element_outer {
+ height: 20px;
+ min-height: 7px;
+}
+.scrollbar-dynamic > .scroll-element.scroll-y:hover .scroll-element_outer,
+.scrollbar-dynamic > .scroll-element.scroll-y.scroll-draggable .scroll-element_outer {
+ min-width: 7px;
+ width: 20px;
+}
+
+
+
+
+
+
+
+
+
+
+/*************** SCROLLBAR GOOGLE CHROME ***************/
+
+.scrollbar-chrome > .scroll-element,
+.scrollbar-chrome > .scroll-element div
+{
+ border: none;
+ margin: 0;
+ overflow: hidden;
+ padding: 0;
+ position: absolute;
+ z-index: 10;
+}
+
+.scrollbar-chrome > .scroll-element {
+ background-color: #ffffff;
+}
+
+.scrollbar-chrome > .scroll-element div {
+ display: block;
+ height: 100%;
+ left: 0;
+ top: 0;
+ width: 100%;
+}
+
+.scrollbar-chrome > .scroll-element .scroll-element_outer {}
+
+.scrollbar-chrome > .scroll-element .scroll-element_track {
+ background: #f1f1f1;
+ border: 1px solid #dbdbdb;
+}
+
+.scrollbar-chrome > .scroll-element.scroll-x {
+ bottom: 0;
+ height: 16px;
+ left: 0;
+ min-width: 100%;
+ width: 100%;
+}
+
+.scrollbar-chrome > .scroll-element.scroll-y {
+ height: 100%;
+ min-height: 100%;
+ right: 0;
+ top: 0;
+ width: 16px;
+}
+
+.scrollbar-chrome > .scroll-element .scroll-bar {
+ background-color: #d9d9d9;
+ border: 1px solid #bdbdbd;
+ cursor: default;
+
+ -webkit-border-radius: 2px;
+ -moz-border-radius: 2px;
+ border-radius: 2px;
+}
+
+.scrollbar-chrome > .scroll-element .scroll-bar:hover {
+ background-color: #c2c2c2;
+ border-color: #a9a9a9;
+}
+
+.scrollbar-chrome > .scroll-element.scroll-draggable .scroll-bar {
+ background-color: #919191;
+ border-color: #7e7e7e;
+}
+
+/* scrollbar height/width & offset from container borders */
+
+.scrollbar-chrome > .scroll-content.scroll-scrolly_visible { left: -16px; margin-left: 16px; }
+.scrollbar-chrome > .scroll-content.scroll-scrollx_visible { top: -16px; margin-top: 16px; }
+
+.scrollbar-chrome > .scroll-element.scroll-x .scroll-bar { height: 8px; min-width: 10px; top: 3px; }
+.scrollbar-chrome > .scroll-element.scroll-y .scroll-bar { left: 3px; min-height: 10px; width: 8px; }
+
+.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_outer { border-left: 1px solid #dbdbdb; }
+.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_track { height: 14px; left: -3px; }
+.scrollbar-chrome > .scroll-element.scroll-x .scroll-element_size { height: 14px; left: -4px; }
+
+.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_outer { border-top: 1px solid #dbdbdb; }
+.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_track { top: -3px; width: 14px; }
+.scrollbar-chrome > .scroll-element.scroll-y .scroll-element_size { top: -4px; width: 14px; }
+
+/* update scrollbar offset if both scrolls are visible */
+
+.scrollbar-chrome > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_size { left: -19px; }
+.scrollbar-chrome > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_size { top: -19px; }
+
+.scrollbar-chrome > .scroll-element.scroll-x.scroll-scrolly_visible .scroll-element_track { left: -19px; }
+.scrollbar-chrome > .scroll-element.scroll-y.scroll-scrollx_visible .scroll-element_track { top: -19px; }
+
+
+
+
+
+
+
diff --git a/sass/package.json b/sass/package.json
new file mode 100644
index 0000000..cf2ff61
--- /dev/null
+++ b/sass/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "jquery.scrollbar",
+ "version": "0.2.10",
+ "devDependencies": {
+ "grunt": "~0.4.1",
+ "grunt-contrib-compass": "^1.0.4",
+ "grunt-contrib-watch": "~0.6.1"
+ }
+}
From 9b51ea405f6d634db1c85510db7b4a62c9be8a38 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Mon, 15 Aug 2016 22:36:07 +0500
Subject: [PATCH 29/32] RTL support: step 2 - js hacky support
---
README.md | 2 ++
jquery.scrollbar.js | 19 +++++++++++++++++--
jquery.scrollbar.min.js | 2 +-
sass/package.json | 2 +-
4 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index dd18a9b..e0c576d 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,7 @@ Cross-browser CSS customizable scrollbar with advanced features:
Browser support: IE7+, Firefox1, Opera, Chrome, Safari
jQuery Scrollbar as Angular.JS directive
Textarea scrollbar
+
RTL support2
@@ -24,3 +25,4 @@ Cross-browser CSS customizable scrollbar with advanced features:
1 There is known issue that native browser scrollbar cannot be hidden in Firefox on Apple devices, so this plugin is not initialized and you will see native scrollbars.
+
2 Experimental support in master branch, styles for scrollbars are not updated
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index 754f03a..cf9ccc1 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -31,6 +31,7 @@
},
firefox: /firefox/i.test(navigator.userAgent),
macosx: /mac/i.test(navigator.platform),
+ msedge: /edge\/\d+/i.test(navigator.userAgent),
msie: /(msie|trident)/i.test(navigator.userAgent),
mobile: /android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),
overlay: null,
@@ -195,10 +196,13 @@
var scrollLeft = c.scrollLeft();
var scrollTop = c.scrollTop();
if (o.isRtl) {
+ // webkit 0:100
+ // ie/edge 100:0
+ // firefox -100:0
switch (true) {
case browser.firefox:
scrollLeft = Math.abs(scrollLeft);
- case browser.msie:
+ case browser.msedge || browser.msie:
scrollLeft = c[0].scrollWidth - c[0].clientWidth - scrollLeft;
break;
}
@@ -371,9 +375,20 @@
scrollForward = $(this).hasClass("scroll-arrow_more") ? 1 : -1;
scrollStep = o.scrollStep * scrollForward;
scrollToValue = scrollForward > 0 ? data.maxScrollValue : 0;
+ if (o.isRtl) {
+ switch(true){
+ case browser.firefox:
+ scrollToValue = scrollForward > 0 ? 0: data.maxScrollValue * -1;
+ break;
+ case browser.msie || browser.msedge:
+ break;
+ }
+ }
} else {
scrollForward = (data.eventOffset > (data.scrollbarOffset + data.scrollbarSize) ? 1
: (data.eventOffset < data.scrollbarOffset ? -1 : 0));
+ if(d === 'x' && o.isRtl && (browser.msie || browser.msedge))
+ scrollForward = scrollForward * -1;
scrollStep = Math.round(scrollx.visible * 0.75) * scrollForward;
scrollToValue = (data.eventOffset - data.scrollbarOffset -
(o.stepScrolling ? (scrollForward == 1 ? data.scrollbarSize : 0)
@@ -420,7 +435,7 @@
$(document).on('mousemove' + namespace, function (event) {
var diff = parseInt((event[(d === 'x') ? 'pageX' : 'pageY'] - eventPosition) / scrollx.kx, 10);
- if (d === 'x' && o.isRtl && browser.msie)
+ if (d === 'x' && o.isRtl && (browser.msie || browser.msedge))
diff = diff * -1;
c[scrollOffset](initOffset + diff);
});
diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js
index 9187107..b07c087 100644
--- a/jquery.scrollbar.min.js
+++ b/jquery.scrollbar.min.js
@@ -13,4 +13,4 @@
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-!function(l,e){"function"==typeof define&&define.amd?define(["jquery"],e):e(l.jQuery)}(this,function(l){"use strict";function e(e){if(t.webkit&&!e)return{height:0,width:0};if(!t.data.outer){var o={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};t.data.inner=l("
").css(l.extend({},o)),t.data.outer=l("
").css(l.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},o)).append(t.data.inner).appendTo("body")}return t.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(t.data.outer.offset().top-t.data.inner.offset().top||0),width:Math.ceil(t.data.outer.offset().left-t.data.inner.offset().left||0)}}function o(){var l=e(!0);return!(l.height||l.width)}function s(l){var e=l.originalEvent;return(!e.axis||e.axis!==e.HORIZONTAL_AXIS)&&!e.wheelDeltaX}var r=!1,t={data:{index:0,name:"scrollbar"},macosx:/mac/i.test(navigator.platform),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};t.scrolls.add=function(l){this.remove(l).push(l)},t.scrolls.remove=function(e){for(;l.inArray(e,this)>=0;)this.splice(l.inArray(e,this),1);return this};var i={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onFallback:null,onInit:null,onScroll:null,onUpdate:null},n=function(s){t.scroll||(t.overlay=o(),t.scroll=e(),a(),l(window).resize(function(){var l=!1;if(t.scroll&&(t.scroll.height||t.scroll.width)){var o=e();o.height===t.scroll.height&&o.width===t.scroll.width||(t.scroll=o,l=!0)}a(l)})),this.container=s,this.namespace=".scrollbar_"+t.data.index++,this.options=l.extend({},i,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},s.data(t.data.name,this),t.scrolls.add(this)};n.prototype={destroy:function(){if(this.wrapper){this.container.removeData(t.data.name),t.scrolls.remove(this);var e=this.container.scrollLeft(),o=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(e).scrollTop(o),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),l(document).add("body").off(this.namespace),l.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(e){var o=this,r=this.container,i=this.containerWrapper||r,n=this.namespace,c=l.extend(this.options,e||{}),a={x:this.scrollx,y:this.scrolly},d=this.wrapper,h={scrollLeft:r.scrollLeft(),scrollTop:r.scrollTop()};if(t.mobile&&c.ignoreMobile||t.overlay&&c.ignoreOverlay||t.macosx&&!t.webkit)return l.isFunction(c.onFallback)&&c.onFallback.apply(this,[r]),!1;if(d)i.css({height:"auto","margin-bottom":t.scroll.height*-1+"px","margin-right":t.scroll.width*-1+"px","max-height":""});else{if(this.wrapper=d=l("
").addClass("scroll-wrapper").addClass(r.attr("class")).css("position","absolute"===r.css("position")?"absolute":"relative").insertBefore(r).append(r),r.is("textarea")&&(this.containerWrapper=i=l("
").insertBefore(r).append(r),d.addClass("scroll-textarea")),i.addClass("scroll-content").css({height:"auto","margin-bottom":t.scroll.height*-1+"px","margin-right":t.scroll.width*-1+"px","max-height":""}),r.on("scroll"+n,function(e){l.isFunction(c.onScroll)&&c.onScroll.call(o,{maxScroll:a.y.maxScrollOffset,scroll:r.scrollTop(),size:a.y.size,visible:a.y.visible},{maxScroll:a.x.maxScrollOffset,scroll:r.scrollLeft(),size:a.x.size,visible:a.x.visible}),a.x.isVisible&&a.x.scroll.bar.css("left",r.scrollLeft()*a.x.kx+"px"),a.y.isVisible&&a.y.scroll.bar.css("top",r.scrollTop()*a.y.kx+"px")}),d.on("scroll"+n,function(){d.scrollTop(0).scrollLeft(0)}),c.disableBodyScroll){var p=function(l){s(l)?a.y.isVisible&&a.y.mousewheel(l):a.x.isVisible&&a.x.mousewheel(l)};d.on("MozMousePixelScroll"+n,p),d.on("mousewheel"+n,p),t.mobile&&d.on("touchstart"+n,function(e){var o=e.originalEvent.touches&&e.originalEvent.touches[0]||e,s={pageX:o.pageX,pageY:o.pageY},t={left:r.scrollLeft(),top:r.scrollTop()};l(document).on("touchmove"+n,function(l){var e=l.originalEvent.targetTouches&&l.originalEvent.targetTouches[0]||l;r.scrollLeft(t.left+s.pageX-e.pageX),r.scrollTop(t.top+s.pageY-e.pageY),l.preventDefault()}),l(document).on("touchend"+n,function(){l(document).off(n)})})}l.isFunction(c.onInit)&&c.onInit.apply(this,[r])}l.each(a,function(e,t){var i=null,d=1,h="x"===e?"scrollLeft":"scrollTop",p=c.scrollStep,u=function(){var l=r[h]();r[h](l+p),1==d&&l+p>=f&&(l=r[h]()),d==-1&&l+p<=f&&(l=r[h]()),r[h]()==l&&i&&i()},f=0;t.scroll||(t.scroll=o._getScroll(c["scroll"+e]).addClass("scroll-"+e),c.showArrows&&t.scroll.addClass("scroll-element_arrows_visible"),t.mousewheel=function(l){if(!t.isVisible||"x"===e&&s(l))return!0;if("y"===e&&!s(l))return a.x.mousewheel(l),!0;var i=l.originalEvent.wheelDelta*-1||l.originalEvent.detail,n=t.size-t.visible-t.offset;return i||("x"===e&&l.originalEvent.deltaX?i=40*l.originalEvent.deltaX:"y"===e&&l.originalEvent.deltaY&&(i=40*l.originalEvent.deltaY)),(i>0&&f
<0&&f>0)&&(f+=i,f<0&&(f=0),f>n&&(f=n),o.scrollTo=o.scrollTo||{},o.scrollTo[h]=f,setTimeout(function(){o.scrollTo&&(r.stop().animate(o.scrollTo,240,"linear",function(){f=r[h]()}),o.scrollTo=null)},1)),l.preventDefault(),!1},t.scroll.on("MozMousePixelScroll"+n,t.mousewheel).on("mousewheel"+n,t.mousewheel).on("mouseenter"+n,function(){f=r[h]()}),t.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+n,function(s){if(1!=s.which)return!0;d=1;var n={eventOffset:s["x"===e?"pageX":"pageY"],maxScrollValue:t.size-t.visible-t.offset,scrollbarOffset:t.scroll.bar.offset()["x"===e?"left":"top"],scrollbarSize:t.scroll.bar["x"===e?"outerWidth":"outerHeight"]()},a=0,v=0;return l(this).hasClass("scroll-arrow")?(d=l(this).hasClass("scroll-arrow_more")?1:-1,p=c.scrollStep*d,f=d>0?n.maxScrollValue:0):(d=n.eventOffset>n.scrollbarOffset+n.scrollbarSize?1:n.eventOffset','','','','",""].join(""),simple:['
"].join("")};return o[e]&&(e=o[e]),e||(e=o.simple),e="string"==typeof e?l(e).appendTo(this.wrapper):l(e),l.extend(e,{bar:e.find(".scroll-bar"),size:e.find(".scroll-element_size"),track:e.find(".scroll-element_track")}),e},_handleMouseDown:function(e,o){var s=this.namespace;return l(document).on("blur"+s,function(){l(document).add("body").off(s),e&&e()}),l(document).on("dragstart"+s,function(l){return l.preventDefault(),!1}),l(document).on("mouseup"+s,function(){l(document).add("body").off(s),e&&e()}),l("body").on("selectstart"+s,function(l){return l.preventDefault(),!1}),o&&o.preventDefault(),!1},_updateScroll:function(e,o){var s=this.container,r=this.containerWrapper||s,i="scroll-scroll"+e+"_visible",n="x"===e?this.scrolly:this.scrollx,c=parseInt(this.container.css("x"===e?"left":"top"),10)||0,a=this.wrapper,d=o.size,h=o.visible+c;o.isVisible=d-h>1,o.isVisible?(o.scroll.addClass(i),n.scroll.addClass(i),r.addClass(i)):(o.scroll.removeClass(i),n.scroll.removeClass(i),r.removeClass(i)),"y"===e&&(s.is("textarea")||d
10?(window.console&&console.log("Scroll updates exceed 10"),a=function(){}):(clearTimeout(l),l=setTimeout(a,300))}}();window.angular&&!function(l){l.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var e=i;return{setOptions:function(o){l.extend(e,o)},$get:function(){return{options:l.copy(e)}}}}).directive("jqueryScrollbar",["jQueryScrollbar","$parse",function(l,e){return{restrict:"AC",link:function(o,s,r){var t=e(r.jqueryScrollbar),i=t(o);s.scrollbar(i||l.options).on("$destroy",function(){s.scrollbar("destroy")})}}}])}(window.angular)});
\ No newline at end of file
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):b(a.jQuery)}(this,function(a){"use strict";function h(b){if(c.webkit&&!b)return{height:0,width:0};if(!c.data.outer){var d={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};c.data.inner=a("").css(a.extend({},d)),c.data.outer=a("
").css(a.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},d)).append(c.data.inner).appendTo("body")}return c.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(c.data.outer.offset().top-c.data.inner.offset().top||0),width:Math.ceil(c.data.outer.offset().left-c.data.inner.offset().left||0)}}function i(){var a=h(!0);return!(a.height||a.width)}function j(a){var b=a.originalEvent;return(!b.axis||b.axis!==b.HORIZONTAL_AXIS)&&!b.wheelDeltaX}var b=!1,c={data:{index:0,name:"scrollbar"},firefox:/firefox/i.test(navigator.userAgent),macosx:/mac/i.test(navigator.platform),msedge:/edge\/\d+/i.test(navigator.userAgent),msie:/(msie|trident)/i.test(navigator.userAgent),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};c.scrolls.add=function(a){this.remove(a).push(a)},c.scrolls.remove=function(b){for(;a.inArray(b,this)>=0;)this.splice(a.inArray(b,this),1);return this};var d={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,isRtl:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onFallback:null,onInit:null,onScroll:null,onUpdate:null},e=function(b){c.scroll||(c.overlay=i(),c.scroll=h(),g(),a(window).resize(function(){var a=!1;if(c.scroll&&(c.scroll.height||c.scroll.width)){var b=h();b.height===c.scroll.height&&b.width===c.scroll.width||(c.scroll=b,a=!0)}g(a)})),this.container=b,this.namespace=".scrollbar_"+c.data.index++,this.options=a.extend({},d,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},b.data(c.data.name,this),c.scrolls.add(this)};e.prototype={destroy:function(){if(this.wrapper){this.container.removeData(c.data.name),c.scrolls.remove(this);var b=this.container.scrollLeft(),d=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(b).scrollTop(d),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),a(document).add("body").off(this.namespace),a.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(b){var d=this,e=this.container,f=this.containerWrapper||e,g=this.namespace,h=a.extend(this.options,b||{}),i={x:this.scrollx,y:this.scrolly},k=this.wrapper,l={},m={scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop()};if(c.mobile&&h.ignoreMobile||c.overlay&&h.ignoreOverlay||c.macosx&&!c.webkit)return a.isFunction(h.onFallback)&&h.onFallback.apply(this,[e]),!1;if(k)l={height:"auto","margin-bottom":c.scroll.height*-1+"px","max-height":""},l[h.isRtl?"margin-left":"margin-right"]=c.scroll.width*-1+"px",f.css(l);else{if(this.wrapper=k=a("
").addClass("scroll-wrapper").addClass(e.attr("class")).css("position","absolute"===e.css("position")?"absolute":"relative").insertBefore(e).append(e),h.isRtl&&k.addClass("scroll--rtl"),e.is("textarea")&&(this.containerWrapper=f=a("
").insertBefore(e).append(e),k.addClass("scroll-textarea")),l={height:"auto","margin-bottom":c.scroll.height*-1+"px","max-height":""},l[h.isRtl?"margin-left":"margin-right"]=c.scroll.width*-1+"px",f.addClass("scroll-content").css(l),e.on("scroll"+g,function(b){var f=e.scrollLeft(),g=e.scrollTop();if(h.isRtl)switch(!0){case c.firefox:f=Math.abs(f);case c.msedge||c.msie:f=e[0].scrollWidth-e[0].clientWidth-f}a.isFunction(h.onScroll)&&h.onScroll.call(d,{maxScroll:i.y.maxScrollOffset,scroll:g,size:i.y.size,visible:i.y.visible},{maxScroll:i.x.maxScrollOffset,scroll:f,size:i.x.size,visible:i.x.visible}),i.x.isVisible&&i.x.scroll.bar.css("left",f*i.x.kx+"px"),i.y.isVisible&&i.y.scroll.bar.css("top",g*i.y.kx+"px")}),k.on("scroll"+g,function(){k.scrollTop(0).scrollLeft(0)}),h.disableBodyScroll){var n=function(a){j(a)?i.y.isVisible&&i.y.mousewheel(a):i.x.isVisible&&i.x.mousewheel(a)};k.on("MozMousePixelScroll"+g,n),k.on("mousewheel"+g,n),c.mobile&&k.on("touchstart"+g,function(b){var c=b.originalEvent.touches&&b.originalEvent.touches[0]||b,d={pageX:c.pageX,pageY:c.pageY},f={left:e.scrollLeft(),top:e.scrollTop()};a(document).on("touchmove"+g,function(a){var b=a.originalEvent.targetTouches&&a.originalEvent.targetTouches[0]||a;e.scrollLeft(f.left+d.pageX-b.pageX),e.scrollTop(f.top+d.pageY-b.pageY),a.preventDefault()}),a(document).on("touchend"+g,function(){a(document).off(g)})})}a.isFunction(h.onInit)&&h.onInit.apply(this,[e])}a.each(i,function(b,f){var k=null,l=1,m="x"===b?"scrollLeft":"scrollTop",n=h.scrollStep,o=function(){var a=e[m]();e[m](a+n),1==l&&a+n>=p&&(a=e[m]()),l==-1&&a+n<=p&&(a=e[m]()),e[m]()==a&&k&&k()},p=0;f.scroll||(f.scroll=d._getScroll(h["scroll"+b]).addClass("scroll-"+b),h.showArrows&&f.scroll.addClass("scroll-element_arrows_visible"),f.mousewheel=function(a){if(!f.isVisible||"x"===b&&j(a))return!0;if("y"===b&&!j(a))return i.x.mousewheel(a),!0;var c=a.originalEvent.wheelDelta*-1||a.originalEvent.detail,g=f.size-f.visible-f.offset;return c||("x"===b&&a.originalEvent.deltaX?c=40*a.originalEvent.deltaX:"y"===b&&a.originalEvent.deltaY&&(c=40*a.originalEvent.deltaY)),(c>0&&p
<0&&p>0)&&(p+=c,p<0&&(p=0),p>g&&(p=g),d.scrollTo=d.scrollTo||{},d.scrollTo[m]=p,setTimeout(function(){d.scrollTo&&(e.stop().animate(d.scrollTo,240,"linear",function(){p=e[m]()}),d.scrollTo=null)},1)),a.preventDefault(),!1},f.scroll.on("MozMousePixelScroll"+g,f.mousewheel).on("mousewheel"+g,f.mousewheel).on("mouseenter"+g,function(){p=e[m]()}),f.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+g,function(g){if(1!=g.which)return!0;l=1;var i={eventOffset:g["x"===b?"pageX":"pageY"],maxScrollValue:f.size-f.visible-f.offset,scrollbarOffset:f.scroll.bar.offset()["x"===b?"left":"top"],scrollbarSize:f.scroll.bar["x"===b?"outerWidth":"outerHeight"]()},j=0,q=0;if(a(this).hasClass("scroll-arrow")){if(l=a(this).hasClass("scroll-arrow_more")?1:-1,n=h.scrollStep*l,p=l>0?i.maxScrollValue:0,h.isRtl)switch(!0){case c.firefox:p=l>0?0:i.maxScrollValue*-1;break;case c.msie||c.msedge:}}else l=i.eventOffset>i.scrollbarOffset+i.scrollbarSize?1:i.eventOffset','','','','",""].join(""),simple:['
"].join("")};return c[b]&&(b=c[b]),b||(b=c.simple),b="string"==typeof b?a(b).appendTo(this.wrapper):a(b),a.extend(b,{bar:b.find(".scroll-bar"),size:b.find(".scroll-element_size"),track:b.find(".scroll-element_track")}),b},_handleMouseDown:function(b,c){var d=this.namespace;return a(document).on("blur"+d,function(){a(document).add("body").off(d),b&&b()}),a(document).on("dragstart"+d,function(a){return a.preventDefault(),!1}),a(document).on("mouseup"+d,function(){a(document).add("body").off(d),b&&b()}),a("body").on("selectstart"+d,function(a){return a.preventDefault(),!1}),c&&c.preventDefault(),!1},_updateScroll:function(b,d){var e=this.container,f=this.containerWrapper||e,g="scroll-scroll"+b+"_visible",h="x"===b?this.scrolly:this.scrollx,i=parseInt(this.container.css("x"===b?"left":"top"),10)||0,j=this.wrapper,k=d.size,l=d.visible+i;d.isVisible=k-l>1,d.isVisible?(d.scroll.addClass(g),h.scroll.addClass(g),f.addClass(g)):(d.scroll.removeClass(g),h.scroll.removeClass(g),f.removeClass(g)),"y"===b&&(e.is("textarea")||k
10?(window.console&&console.log("Scroll updates exceed 10"),g=function(){}):(clearTimeout(a),a=setTimeout(g,300))}}();window.angular&&!function(a){a.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var b=d;return{setOptions:function(c){a.extend(b,c)},$get:function(){return{options:a.copy(b)}}}}).directive("jqueryScrollbar",["jQueryScrollbar","$parse",function(a,b){return{restrict:"AC",link:function(c,d,e){var f=b(e.jqueryScrollbar),g=f(c);d.scrollbar(g||a.options).on("$destroy",function(){d.scrollbar("destroy")})}}}])}(window.angular)});
\ No newline at end of file
diff --git a/sass/package.json b/sass/package.json
index cf2ff61..fd871d6 100644
--- a/sass/package.json
+++ b/sass/package.json
@@ -1,6 +1,6 @@
{
"name": "jquery.scrollbar",
- "version": "0.2.10",
+ "version": "0.2.11",
"devDependencies": {
"grunt": "~0.4.1",
"grunt-contrib-compass": "^1.0.4",
From 74b62cc9a77045381e235d76af75d28e3610e302 Mon Sep 17 00:00:00 2001
From: Yuriy Khabarov <13real008@gmail.com>
Date: Tue, 30 Aug 2016 00:00:53 +0500
Subject: [PATCH 30/32] fix destroy: andSelf => addBack
---
jquery.scrollbar.js | 4 ++--
jquery.scrollbar.min.js | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index cf9ccc1..454219b 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -129,8 +129,8 @@
.scrollLeft(scrollLeft)
.scrollTop(scrollTop);
- this.scrollx.scroll.removeClass('scroll-scrollx_visible').find('div').andSelf().off(this.namespace);
- this.scrolly.scroll.removeClass('scroll-scrolly_visible').find('div').andSelf().off(this.namespace);
+ this.scrollx.scroll.removeClass('scroll-scrollx_visible').find('div').addBack().off(this.namespace);
+ this.scrolly.scroll.removeClass('scroll-scrolly_visible').find('div').addBack().off(this.namespace);
this.wrapper.remove();
diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js
index b07c087..cb557ee 100644
--- a/jquery.scrollbar.min.js
+++ b/jquery.scrollbar.min.js
@@ -13,4 +13,4 @@
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):b(a.jQuery)}(this,function(a){"use strict";function h(b){if(c.webkit&&!b)return{height:0,width:0};if(!c.data.outer){var d={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};c.data.inner=a("").css(a.extend({},d)),c.data.outer=a("
").css(a.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},d)).append(c.data.inner).appendTo("body")}return c.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(c.data.outer.offset().top-c.data.inner.offset().top||0),width:Math.ceil(c.data.outer.offset().left-c.data.inner.offset().left||0)}}function i(){var a=h(!0);return!(a.height||a.width)}function j(a){var b=a.originalEvent;return(!b.axis||b.axis!==b.HORIZONTAL_AXIS)&&!b.wheelDeltaX}var b=!1,c={data:{index:0,name:"scrollbar"},firefox:/firefox/i.test(navigator.userAgent),macosx:/mac/i.test(navigator.platform),msedge:/edge\/\d+/i.test(navigator.userAgent),msie:/(msie|trident)/i.test(navigator.userAgent),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};c.scrolls.add=function(a){this.remove(a).push(a)},c.scrolls.remove=function(b){for(;a.inArray(b,this)>=0;)this.splice(a.inArray(b,this),1);return this};var d={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,isRtl:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onFallback:null,onInit:null,onScroll:null,onUpdate:null},e=function(b){c.scroll||(c.overlay=i(),c.scroll=h(),g(),a(window).resize(function(){var a=!1;if(c.scroll&&(c.scroll.height||c.scroll.width)){var b=h();b.height===c.scroll.height&&b.width===c.scroll.width||(c.scroll=b,a=!0)}g(a)})),this.container=b,this.namespace=".scrollbar_"+c.data.index++,this.options=a.extend({},d,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},b.data(c.data.name,this),c.scrolls.add(this)};e.prototype={destroy:function(){if(this.wrapper){this.container.removeData(c.data.name),c.scrolls.remove(this);var b=this.container.scrollLeft(),d=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(b).scrollTop(d),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").andSelf().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").andSelf().off(this.namespace),this.wrapper.remove(),a(document).add("body").off(this.namespace),a.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(b){var d=this,e=this.container,f=this.containerWrapper||e,g=this.namespace,h=a.extend(this.options,b||{}),i={x:this.scrollx,y:this.scrolly},k=this.wrapper,l={},m={scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop()};if(c.mobile&&h.ignoreMobile||c.overlay&&h.ignoreOverlay||c.macosx&&!c.webkit)return a.isFunction(h.onFallback)&&h.onFallback.apply(this,[e]),!1;if(k)l={height:"auto","margin-bottom":c.scroll.height*-1+"px","max-height":""},l[h.isRtl?"margin-left":"margin-right"]=c.scroll.width*-1+"px",f.css(l);else{if(this.wrapper=k=a("
").addClass("scroll-wrapper").addClass(e.attr("class")).css("position","absolute"===e.css("position")?"absolute":"relative").insertBefore(e).append(e),h.isRtl&&k.addClass("scroll--rtl"),e.is("textarea")&&(this.containerWrapper=f=a("
").insertBefore(e).append(e),k.addClass("scroll-textarea")),l={height:"auto","margin-bottom":c.scroll.height*-1+"px","max-height":""},l[h.isRtl?"margin-left":"margin-right"]=c.scroll.width*-1+"px",f.addClass("scroll-content").css(l),e.on("scroll"+g,function(b){var f=e.scrollLeft(),g=e.scrollTop();if(h.isRtl)switch(!0){case c.firefox:f=Math.abs(f);case c.msedge||c.msie:f=e[0].scrollWidth-e[0].clientWidth-f}a.isFunction(h.onScroll)&&h.onScroll.call(d,{maxScroll:i.y.maxScrollOffset,scroll:g,size:i.y.size,visible:i.y.visible},{maxScroll:i.x.maxScrollOffset,scroll:f,size:i.x.size,visible:i.x.visible}),i.x.isVisible&&i.x.scroll.bar.css("left",f*i.x.kx+"px"),i.y.isVisible&&i.y.scroll.bar.css("top",g*i.y.kx+"px")}),k.on("scroll"+g,function(){k.scrollTop(0).scrollLeft(0)}),h.disableBodyScroll){var n=function(a){j(a)?i.y.isVisible&&i.y.mousewheel(a):i.x.isVisible&&i.x.mousewheel(a)};k.on("MozMousePixelScroll"+g,n),k.on("mousewheel"+g,n),c.mobile&&k.on("touchstart"+g,function(b){var c=b.originalEvent.touches&&b.originalEvent.touches[0]||b,d={pageX:c.pageX,pageY:c.pageY},f={left:e.scrollLeft(),top:e.scrollTop()};a(document).on("touchmove"+g,function(a){var b=a.originalEvent.targetTouches&&a.originalEvent.targetTouches[0]||a;e.scrollLeft(f.left+d.pageX-b.pageX),e.scrollTop(f.top+d.pageY-b.pageY),a.preventDefault()}),a(document).on("touchend"+g,function(){a(document).off(g)})})}a.isFunction(h.onInit)&&h.onInit.apply(this,[e])}a.each(i,function(b,f){var k=null,l=1,m="x"===b?"scrollLeft":"scrollTop",n=h.scrollStep,o=function(){var a=e[m]();e[m](a+n),1==l&&a+n>=p&&(a=e[m]()),l==-1&&a+n<=p&&(a=e[m]()),e[m]()==a&&k&&k()},p=0;f.scroll||(f.scroll=d._getScroll(h["scroll"+b]).addClass("scroll-"+b),h.showArrows&&f.scroll.addClass("scroll-element_arrows_visible"),f.mousewheel=function(a){if(!f.isVisible||"x"===b&&j(a))return!0;if("y"===b&&!j(a))return i.x.mousewheel(a),!0;var c=a.originalEvent.wheelDelta*-1||a.originalEvent.detail,g=f.size-f.visible-f.offset;return c||("x"===b&&a.originalEvent.deltaX?c=40*a.originalEvent.deltaX:"y"===b&&a.originalEvent.deltaY&&(c=40*a.originalEvent.deltaY)),(c>0&&p
<0&&p>0)&&(p+=c,p<0&&(p=0),p>g&&(p=g),d.scrollTo=d.scrollTo||{},d.scrollTo[m]=p,setTimeout(function(){d.scrollTo&&(e.stop().animate(d.scrollTo,240,"linear",function(){p=e[m]()}),d.scrollTo=null)},1)),a.preventDefault(),!1},f.scroll.on("MozMousePixelScroll"+g,f.mousewheel).on("mousewheel"+g,f.mousewheel).on("mouseenter"+g,function(){p=e[m]()}),f.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+g,function(g){if(1!=g.which)return!0;l=1;var i={eventOffset:g["x"===b?"pageX":"pageY"],maxScrollValue:f.size-f.visible-f.offset,scrollbarOffset:f.scroll.bar.offset()["x"===b?"left":"top"],scrollbarSize:f.scroll.bar["x"===b?"outerWidth":"outerHeight"]()},j=0,q=0;if(a(this).hasClass("scroll-arrow")){if(l=a(this).hasClass("scroll-arrow_more")?1:-1,n=h.scrollStep*l,p=l>0?i.maxScrollValue:0,h.isRtl)switch(!0){case c.firefox:p=l>0?0:i.maxScrollValue*-1;break;case c.msie||c.msedge:}}else l=i.eventOffset>i.scrollbarOffset+i.scrollbarSize?1:i.eventOffset','','','','",""].join(""),simple:['
"].join("")};return c[b]&&(b=c[b]),b||(b=c.simple),b="string"==typeof b?a(b).appendTo(this.wrapper):a(b),a.extend(b,{bar:b.find(".scroll-bar"),size:b.find(".scroll-element_size"),track:b.find(".scroll-element_track")}),b},_handleMouseDown:function(b,c){var d=this.namespace;return a(document).on("blur"+d,function(){a(document).add("body").off(d),b&&b()}),a(document).on("dragstart"+d,function(a){return a.preventDefault(),!1}),a(document).on("mouseup"+d,function(){a(document).add("body").off(d),b&&b()}),a("body").on("selectstart"+d,function(a){return a.preventDefault(),!1}),c&&c.preventDefault(),!1},_updateScroll:function(b,d){var e=this.container,f=this.containerWrapper||e,g="scroll-scroll"+b+"_visible",h="x"===b?this.scrolly:this.scrollx,i=parseInt(this.container.css("x"===b?"left":"top"),10)||0,j=this.wrapper,k=d.size,l=d.visible+i;d.isVisible=k-l>1,d.isVisible?(d.scroll.addClass(g),h.scroll.addClass(g),f.addClass(g)):(d.scroll.removeClass(g),h.scroll.removeClass(g),f.removeClass(g)),"y"===b&&(e.is("textarea")||k
10?(window.console&&console.log("Scroll updates exceed 10"),g=function(){}):(clearTimeout(a),a=setTimeout(g,300))}}();window.angular&&!function(a){a.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var b=d;return{setOptions:function(c){a.extend(b,c)},$get:function(){return{options:a.copy(b)}}}}).directive("jqueryScrollbar",["jQueryScrollbar","$parse",function(a,b){return{restrict:"AC",link:function(c,d,e){var f=b(e.jqueryScrollbar),g=f(c);d.scrollbar(g||a.options).on("$destroy",function(){d.scrollbar("destroy")})}}}])}(window.angular)});
\ No newline at end of file
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):b(a.jQuery)}(this,function(a){"use strict";function h(b){if(c.webkit&&!b)return{height:0,width:0};if(!c.data.outer){var d={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};c.data.inner=a("").css(a.extend({},d)),c.data.outer=a("
").css(a.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},d)).append(c.data.inner).appendTo("body")}return c.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(c.data.outer.offset().top-c.data.inner.offset().top||0),width:Math.ceil(c.data.outer.offset().left-c.data.inner.offset().left||0)}}function i(){var a=h(!0);return!(a.height||a.width)}function j(a){var b=a.originalEvent;return(!b.axis||b.axis!==b.HORIZONTAL_AXIS)&&!b.wheelDeltaX}var b=!1,c={data:{index:0,name:"scrollbar"},firefox:/firefox/i.test(navigator.userAgent),macosx:/mac/i.test(navigator.platform),msedge:/edge\/\d+/i.test(navigator.userAgent),msie:/(msie|trident)/i.test(navigator.userAgent),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};c.scrolls.add=function(a){this.remove(a).push(a)},c.scrolls.remove=function(b){for(;a.inArray(b,this)>=0;)this.splice(a.inArray(b,this),1);return this};var d={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,isRtl:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onFallback:null,onInit:null,onScroll:null,onUpdate:null},e=function(b){c.scroll||(c.overlay=i(),c.scroll=h(),g(),a(window).resize(function(){var a=!1;if(c.scroll&&(c.scroll.height||c.scroll.width)){var b=h();b.height===c.scroll.height&&b.width===c.scroll.width||(c.scroll=b,a=!0)}g(a)})),this.container=b,this.namespace=".scrollbar_"+c.data.index++,this.options=a.extend({},d,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},b.data(c.data.name,this),c.scrolls.add(this)};e.prototype={destroy:function(){if(this.wrapper){this.container.removeData(c.data.name),c.scrolls.remove(this);var b=this.container.scrollLeft(),d=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(b).scrollTop(d),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").addBack().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").addBack().off(this.namespace),this.wrapper.remove(),a(document).add("body").off(this.namespace),a.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(b){var d=this,e=this.container,f=this.containerWrapper||e,g=this.namespace,h=a.extend(this.options,b||{}),i={x:this.scrollx,y:this.scrolly},k=this.wrapper,l={},m={scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop()};if(c.mobile&&h.ignoreMobile||c.overlay&&h.ignoreOverlay||c.macosx&&!c.webkit)return a.isFunction(h.onFallback)&&h.onFallback.apply(this,[e]),!1;if(k)l={height:"auto","margin-bottom":c.scroll.height*-1+"px","max-height":""},l[h.isRtl?"margin-left":"margin-right"]=c.scroll.width*-1+"px",f.css(l);else{if(this.wrapper=k=a("
").addClass("scroll-wrapper").addClass(e.attr("class")).css("position","absolute"===e.css("position")?"absolute":"relative").insertBefore(e).append(e),h.isRtl&&k.addClass("scroll--rtl"),e.is("textarea")&&(this.containerWrapper=f=a("
").insertBefore(e).append(e),k.addClass("scroll-textarea")),l={height:"auto","margin-bottom":c.scroll.height*-1+"px","max-height":""},l[h.isRtl?"margin-left":"margin-right"]=c.scroll.width*-1+"px",f.addClass("scroll-content").css(l),e.on("scroll"+g,function(b){var f=e.scrollLeft(),g=e.scrollTop();if(h.isRtl)switch(!0){case c.firefox:f=Math.abs(f);case c.msedge||c.msie:f=e[0].scrollWidth-e[0].clientWidth-f}a.isFunction(h.onScroll)&&h.onScroll.call(d,{maxScroll:i.y.maxScrollOffset,scroll:g,size:i.y.size,visible:i.y.visible},{maxScroll:i.x.maxScrollOffset,scroll:f,size:i.x.size,visible:i.x.visible}),i.x.isVisible&&i.x.scroll.bar.css("left",f*i.x.kx+"px"),i.y.isVisible&&i.y.scroll.bar.css("top",g*i.y.kx+"px")}),k.on("scroll"+g,function(){k.scrollTop(0).scrollLeft(0)}),h.disableBodyScroll){var n=function(a){j(a)?i.y.isVisible&&i.y.mousewheel(a):i.x.isVisible&&i.x.mousewheel(a)};k.on("MozMousePixelScroll"+g,n),k.on("mousewheel"+g,n),c.mobile&&k.on("touchstart"+g,function(b){var c=b.originalEvent.touches&&b.originalEvent.touches[0]||b,d={pageX:c.pageX,pageY:c.pageY},f={left:e.scrollLeft(),top:e.scrollTop()};a(document).on("touchmove"+g,function(a){var b=a.originalEvent.targetTouches&&a.originalEvent.targetTouches[0]||a;e.scrollLeft(f.left+d.pageX-b.pageX),e.scrollTop(f.top+d.pageY-b.pageY),a.preventDefault()}),a(document).on("touchend"+g,function(){a(document).off(g)})})}a.isFunction(h.onInit)&&h.onInit.apply(this,[e])}a.each(i,function(b,f){var k=null,l=1,m="x"===b?"scrollLeft":"scrollTop",n=h.scrollStep,o=function(){var a=e[m]();e[m](a+n),1==l&&a+n>=p&&(a=e[m]()),l==-1&&a+n<=p&&(a=e[m]()),e[m]()==a&&k&&k()},p=0;f.scroll||(f.scroll=d._getScroll(h["scroll"+b]).addClass("scroll-"+b),h.showArrows&&f.scroll.addClass("scroll-element_arrows_visible"),f.mousewheel=function(a){if(!f.isVisible||"x"===b&&j(a))return!0;if("y"===b&&!j(a))return i.x.mousewheel(a),!0;var c=a.originalEvent.wheelDelta*-1||a.originalEvent.detail,g=f.size-f.visible-f.offset;return c||("x"===b&&a.originalEvent.deltaX?c=40*a.originalEvent.deltaX:"y"===b&&a.originalEvent.deltaY&&(c=40*a.originalEvent.deltaY)),(c>0&&p
<0&&p>0)&&(p+=c,p<0&&(p=0),p>g&&(p=g),d.scrollTo=d.scrollTo||{},d.scrollTo[m]=p,setTimeout(function(){d.scrollTo&&(e.stop().animate(d.scrollTo,240,"linear",function(){p=e[m]()}),d.scrollTo=null)},1)),a.preventDefault(),!1},f.scroll.on("MozMousePixelScroll"+g,f.mousewheel).on("mousewheel"+g,f.mousewheel).on("mouseenter"+g,function(){p=e[m]()}),f.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+g,function(g){if(1!=g.which)return!0;l=1;var i={eventOffset:g["x"===b?"pageX":"pageY"],maxScrollValue:f.size-f.visible-f.offset,scrollbarOffset:f.scroll.bar.offset()["x"===b?"left":"top"],scrollbarSize:f.scroll.bar["x"===b?"outerWidth":"outerHeight"]()},j=0,q=0;if(a(this).hasClass("scroll-arrow")){if(l=a(this).hasClass("scroll-arrow_more")?1:-1,n=h.scrollStep*l,p=l>0?i.maxScrollValue:0,h.isRtl)switch(!0){case c.firefox:p=l>0?0:i.maxScrollValue*-1;break;case c.msie||c.msedge:}}else l=i.eventOffset>i.scrollbarOffset+i.scrollbarSize?1:i.eventOffset','','','','",""].join(""),simple:['
"].join("")};return c[b]&&(b=c[b]),b||(b=c.simple),b="string"==typeof b?a(b).appendTo(this.wrapper):a(b),a.extend(b,{bar:b.find(".scroll-bar"),size:b.find(".scroll-element_size"),track:b.find(".scroll-element_track")}),b},_handleMouseDown:function(b,c){var d=this.namespace;return a(document).on("blur"+d,function(){a(document).add("body").off(d),b&&b()}),a(document).on("dragstart"+d,function(a){return a.preventDefault(),!1}),a(document).on("mouseup"+d,function(){a(document).add("body").off(d),b&&b()}),a("body").on("selectstart"+d,function(a){return a.preventDefault(),!1}),c&&c.preventDefault(),!1},_updateScroll:function(b,d){var e=this.container,f=this.containerWrapper||e,g="scroll-scroll"+b+"_visible",h="x"===b?this.scrolly:this.scrollx,i=parseInt(this.container.css("x"===b?"left":"top"),10)||0,j=this.wrapper,k=d.size,l=d.visible+i;d.isVisible=k-l>1,d.isVisible?(d.scroll.addClass(g),h.scroll.addClass(g),f.addClass(g)):(d.scroll.removeClass(g),h.scroll.removeClass(g),f.removeClass(g)),"y"===b&&(e.is("textarea")||k
10?(window.console&&console.log("Scroll updates exceed 10"),g=function(){}):(clearTimeout(a),a=setTimeout(g,300))}}();window.angular&&!function(a){a.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var b=d;return{setOptions:function(c){a.extend(b,c)},$get:function(){return{options:a.copy(b)}}}}).directive("jqueryScrollbar",["jQueryScrollbar","$parse",function(a,b){return{restrict:"AC",link:function(c,d,e){var f=b(e.jqueryScrollbar),g=f(c);d.scrollbar(g||a.options).on("$destroy",function(){d.scrollbar("destroy")})}}}])}(window.angular)});
\ No newline at end of file
From 143ae43ca329d8b38ac1c33a0a8ebc817806e509 Mon Sep 17 00:00:00 2001
From: Chris Parton
Date: Tue, 6 Sep 2016 10:42:41 +1000
Subject: [PATCH 31/32] Add require() support
---
jquery.scrollbar.js | 2 ++
jquery.scrollbar.min.js | 2 +-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index 454219b..0883fd3 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -15,6 +15,8 @@
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(['jquery'], factory);
+ } else if (typeof exports !== "undefined") {
+ factory(require('jquery'));
} else {
factory(root.jQuery);
}
diff --git a/jquery.scrollbar.min.js b/jquery.scrollbar.min.js
index cb557ee..5a86f9a 100644
--- a/jquery.scrollbar.min.js
+++ b/jquery.scrollbar.min.js
@@ -13,4 +13,4 @@
* @url https://github.com/gromo/jquery.scrollbar/
*
*/
-!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):b(a.jQuery)}(this,function(a){"use strict";function h(b){if(c.webkit&&!b)return{height:0,width:0};if(!c.data.outer){var d={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};c.data.inner=a("").css(a.extend({},d)),c.data.outer=a("
").css(a.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},d)).append(c.data.inner).appendTo("body")}return c.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(c.data.outer.offset().top-c.data.inner.offset().top||0),width:Math.ceil(c.data.outer.offset().left-c.data.inner.offset().left||0)}}function i(){var a=h(!0);return!(a.height||a.width)}function j(a){var b=a.originalEvent;return(!b.axis||b.axis!==b.HORIZONTAL_AXIS)&&!b.wheelDeltaX}var b=!1,c={data:{index:0,name:"scrollbar"},firefox:/firefox/i.test(navigator.userAgent),macosx:/mac/i.test(navigator.platform),msedge:/edge\/\d+/i.test(navigator.userAgent),msie:/(msie|trident)/i.test(navigator.userAgent),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};c.scrolls.add=function(a){this.remove(a).push(a)},c.scrolls.remove=function(b){for(;a.inArray(b,this)>=0;)this.splice(a.inArray(b,this),1);return this};var d={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,isRtl:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onFallback:null,onInit:null,onScroll:null,onUpdate:null},e=function(b){c.scroll||(c.overlay=i(),c.scroll=h(),g(),a(window).resize(function(){var a=!1;if(c.scroll&&(c.scroll.height||c.scroll.width)){var b=h();b.height===c.scroll.height&&b.width===c.scroll.width||(c.scroll=b,a=!0)}g(a)})),this.container=b,this.namespace=".scrollbar_"+c.data.index++,this.options=a.extend({},d,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},b.data(c.data.name,this),c.scrolls.add(this)};e.prototype={destroy:function(){if(this.wrapper){this.container.removeData(c.data.name),c.scrolls.remove(this);var b=this.container.scrollLeft(),d=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(b).scrollTop(d),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").addBack().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").addBack().off(this.namespace),this.wrapper.remove(),a(document).add("body").off(this.namespace),a.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(b){var d=this,e=this.container,f=this.containerWrapper||e,g=this.namespace,h=a.extend(this.options,b||{}),i={x:this.scrollx,y:this.scrolly},k=this.wrapper,l={},m={scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop()};if(c.mobile&&h.ignoreMobile||c.overlay&&h.ignoreOverlay||c.macosx&&!c.webkit)return a.isFunction(h.onFallback)&&h.onFallback.apply(this,[e]),!1;if(k)l={height:"auto","margin-bottom":c.scroll.height*-1+"px","max-height":""},l[h.isRtl?"margin-left":"margin-right"]=c.scroll.width*-1+"px",f.css(l);else{if(this.wrapper=k=a("
").addClass("scroll-wrapper").addClass(e.attr("class")).css("position","absolute"===e.css("position")?"absolute":"relative").insertBefore(e).append(e),h.isRtl&&k.addClass("scroll--rtl"),e.is("textarea")&&(this.containerWrapper=f=a("
").insertBefore(e).append(e),k.addClass("scroll-textarea")),l={height:"auto","margin-bottom":c.scroll.height*-1+"px","max-height":""},l[h.isRtl?"margin-left":"margin-right"]=c.scroll.width*-1+"px",f.addClass("scroll-content").css(l),e.on("scroll"+g,function(b){var f=e.scrollLeft(),g=e.scrollTop();if(h.isRtl)switch(!0){case c.firefox:f=Math.abs(f);case c.msedge||c.msie:f=e[0].scrollWidth-e[0].clientWidth-f}a.isFunction(h.onScroll)&&h.onScroll.call(d,{maxScroll:i.y.maxScrollOffset,scroll:g,size:i.y.size,visible:i.y.visible},{maxScroll:i.x.maxScrollOffset,scroll:f,size:i.x.size,visible:i.x.visible}),i.x.isVisible&&i.x.scroll.bar.css("left",f*i.x.kx+"px"),i.y.isVisible&&i.y.scroll.bar.css("top",g*i.y.kx+"px")}),k.on("scroll"+g,function(){k.scrollTop(0).scrollLeft(0)}),h.disableBodyScroll){var n=function(a){j(a)?i.y.isVisible&&i.y.mousewheel(a):i.x.isVisible&&i.x.mousewheel(a)};k.on("MozMousePixelScroll"+g,n),k.on("mousewheel"+g,n),c.mobile&&k.on("touchstart"+g,function(b){var c=b.originalEvent.touches&&b.originalEvent.touches[0]||b,d={pageX:c.pageX,pageY:c.pageY},f={left:e.scrollLeft(),top:e.scrollTop()};a(document).on("touchmove"+g,function(a){var b=a.originalEvent.targetTouches&&a.originalEvent.targetTouches[0]||a;e.scrollLeft(f.left+d.pageX-b.pageX),e.scrollTop(f.top+d.pageY-b.pageY),a.preventDefault()}),a(document).on("touchend"+g,function(){a(document).off(g)})})}a.isFunction(h.onInit)&&h.onInit.apply(this,[e])}a.each(i,function(b,f){var k=null,l=1,m="x"===b?"scrollLeft":"scrollTop",n=h.scrollStep,o=function(){var a=e[m]();e[m](a+n),1==l&&a+n>=p&&(a=e[m]()),l==-1&&a+n<=p&&(a=e[m]()),e[m]()==a&&k&&k()},p=0;f.scroll||(f.scroll=d._getScroll(h["scroll"+b]).addClass("scroll-"+b),h.showArrows&&f.scroll.addClass("scroll-element_arrows_visible"),f.mousewheel=function(a){if(!f.isVisible||"x"===b&&j(a))return!0;if("y"===b&&!j(a))return i.x.mousewheel(a),!0;var c=a.originalEvent.wheelDelta*-1||a.originalEvent.detail,g=f.size-f.visible-f.offset;return c||("x"===b&&a.originalEvent.deltaX?c=40*a.originalEvent.deltaX:"y"===b&&a.originalEvent.deltaY&&(c=40*a.originalEvent.deltaY)),(c>0&&p
<0&&p>0)&&(p+=c,p<0&&(p=0),p>g&&(p=g),d.scrollTo=d.scrollTo||{},d.scrollTo[m]=p,setTimeout(function(){d.scrollTo&&(e.stop().animate(d.scrollTo,240,"linear",function(){p=e[m]()}),d.scrollTo=null)},1)),a.preventDefault(),!1},f.scroll.on("MozMousePixelScroll"+g,f.mousewheel).on("mousewheel"+g,f.mousewheel).on("mouseenter"+g,function(){p=e[m]()}),f.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+g,function(g){if(1!=g.which)return!0;l=1;var i={eventOffset:g["x"===b?"pageX":"pageY"],maxScrollValue:f.size-f.visible-f.offset,scrollbarOffset:f.scroll.bar.offset()["x"===b?"left":"top"],scrollbarSize:f.scroll.bar["x"===b?"outerWidth":"outerHeight"]()},j=0,q=0;if(a(this).hasClass("scroll-arrow")){if(l=a(this).hasClass("scroll-arrow_more")?1:-1,n=h.scrollStep*l,p=l>0?i.maxScrollValue:0,h.isRtl)switch(!0){case c.firefox:p=l>0?0:i.maxScrollValue*-1;break;case c.msie||c.msedge:}}else l=i.eventOffset>i.scrollbarOffset+i.scrollbarSize?1:i.eventOffset','','','','",""].join(""),simple:['
"].join("")};return c[b]&&(b=c[b]),b||(b=c.simple),b="string"==typeof b?a(b).appendTo(this.wrapper):a(b),a.extend(b,{bar:b.find(".scroll-bar"),size:b.find(".scroll-element_size"),track:b.find(".scroll-element_track")}),b},_handleMouseDown:function(b,c){var d=this.namespace;return a(document).on("blur"+d,function(){a(document).add("body").off(d),b&&b()}),a(document).on("dragstart"+d,function(a){return a.preventDefault(),!1}),a(document).on("mouseup"+d,function(){a(document).add("body").off(d),b&&b()}),a("body").on("selectstart"+d,function(a){return a.preventDefault(),!1}),c&&c.preventDefault(),!1},_updateScroll:function(b,d){var e=this.container,f=this.containerWrapper||e,g="scroll-scroll"+b+"_visible",h="x"===b?this.scrolly:this.scrollx,i=parseInt(this.container.css("x"===b?"left":"top"),10)||0,j=this.wrapper,k=d.size,l=d.visible+i;d.isVisible=k-l>1,d.isVisible?(d.scroll.addClass(g),h.scroll.addClass(g),f.addClass(g)):(d.scroll.removeClass(g),h.scroll.removeClass(g),f.removeClass(g)),"y"===b&&(e.is("textarea")||k
10?(window.console&&console.log("Scroll updates exceed 10"),g=function(){}):(clearTimeout(a),a=setTimeout(g,300))}}();window.angular&&!function(a){a.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var b=d;return{setOptions:function(c){a.extend(b,c)},$get:function(){return{options:a.copy(b)}}}}).directive("jqueryScrollbar",["jQueryScrollbar","$parse",function(a,b){return{restrict:"AC",link:function(c,d,e){var f=b(e.jqueryScrollbar),g=f(c);d.scrollbar(g||a.options).on("$destroy",function(){d.scrollbar("destroy")})}}}])}(window.angular)});
\ No newline at end of file
+!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):b("undefined"!=typeof exports?require("jquery"):a.jQuery)}(this,function(a){"use strict";function h(b){if(c.webkit&&!b)return{height:0,width:0};if(!c.data.outer){var d={border:"none","box-sizing":"content-box",height:"200px",margin:"0",padding:"0",width:"200px"};c.data.inner=a("").css(a.extend({},d)),c.data.outer=a("
").css(a.extend({left:"-1000px",overflow:"scroll",position:"absolute",top:"-1000px"},d)).append(c.data.inner).appendTo("body")}return c.data.outer.scrollLeft(1e3).scrollTop(1e3),{height:Math.ceil(c.data.outer.offset().top-c.data.inner.offset().top||0),width:Math.ceil(c.data.outer.offset().left-c.data.inner.offset().left||0)}}function i(){var a=h(!0);return!(a.height||a.width)}function j(a){var b=a.originalEvent;return(!b.axis||b.axis!==b.HORIZONTAL_AXIS)&&!b.wheelDeltaX}var b=!1,c={data:{index:0,name:"scrollbar"},firefox:/firefox/i.test(navigator.userAgent),macosx:/mac/i.test(navigator.platform),msedge:/edge\/\d+/i.test(navigator.userAgent),msie:/(msie|trident)/i.test(navigator.userAgent),mobile:/android|webos|iphone|ipad|ipod|blackberry/i.test(navigator.userAgent),overlay:null,scroll:null,scrolls:[],webkit:/webkit/i.test(navigator.userAgent)&&!/edge\/\d+/i.test(navigator.userAgent)};c.scrolls.add=function(a){this.remove(a).push(a)},c.scrolls.remove=function(b){for(;a.inArray(b,this)>=0;)this.splice(a.inArray(b,this),1);return this};var d={autoScrollSize:!0,autoUpdate:!0,debug:!1,disableBodyScroll:!1,duration:200,ignoreMobile:!1,ignoreOverlay:!1,isRtl:!1,scrollStep:30,showArrows:!1,stepScrolling:!0,scrollx:null,scrolly:null,onDestroy:null,onFallback:null,onInit:null,onScroll:null,onUpdate:null},e=function(b){c.scroll||(c.overlay=i(),c.scroll=h(),g(),a(window).resize(function(){var a=!1;if(c.scroll&&(c.scroll.height||c.scroll.width)){var b=h();b.height===c.scroll.height&&b.width===c.scroll.width||(c.scroll=b,a=!0)}g(a)})),this.container=b,this.namespace=".scrollbar_"+c.data.index++,this.options=a.extend({},d,window.jQueryScrollbarOptions||{}),this.scrollTo=null,this.scrollx={},this.scrolly={},b.data(c.data.name,this),c.scrolls.add(this)};e.prototype={destroy:function(){if(this.wrapper){this.container.removeData(c.data.name),c.scrolls.remove(this);var b=this.container.scrollLeft(),d=this.container.scrollTop();this.container.insertBefore(this.wrapper).css({height:"",margin:"","max-height":""}).removeClass("scroll-content scroll-scrollx_visible scroll-scrolly_visible").off(this.namespace).scrollLeft(b).scrollTop(d),this.scrollx.scroll.removeClass("scroll-scrollx_visible").find("div").addBack().off(this.namespace),this.scrolly.scroll.removeClass("scroll-scrolly_visible").find("div").addBack().off(this.namespace),this.wrapper.remove(),a(document).add("body").off(this.namespace),a.isFunction(this.options.onDestroy)&&this.options.onDestroy.apply(this,[this.container])}},init:function(b){var d=this,e=this.container,f=this.containerWrapper||e,g=this.namespace,h=a.extend(this.options,b||{}),i={x:this.scrollx,y:this.scrolly},k=this.wrapper,l={},m={scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop()};if(c.mobile&&h.ignoreMobile||c.overlay&&h.ignoreOverlay||c.macosx&&!c.webkit)return a.isFunction(h.onFallback)&&h.onFallback.apply(this,[e]),!1;if(k)l={height:"auto","margin-bottom":c.scroll.height*-1+"px","max-height":""},l[h.isRtl?"margin-left":"margin-right"]=c.scroll.width*-1+"px",f.css(l);else{if(this.wrapper=k=a("
").addClass("scroll-wrapper").addClass(e.attr("class")).css("position","absolute"===e.css("position")?"absolute":"relative").insertBefore(e).append(e),h.isRtl&&k.addClass("scroll--rtl"),e.is("textarea")&&(this.containerWrapper=f=a("
").insertBefore(e).append(e),k.addClass("scroll-textarea")),l={height:"auto","margin-bottom":c.scroll.height*-1+"px","max-height":""},l[h.isRtl?"margin-left":"margin-right"]=c.scroll.width*-1+"px",f.addClass("scroll-content").css(l),e.on("scroll"+g,function(b){var f=e.scrollLeft(),g=e.scrollTop();if(h.isRtl)switch(!0){case c.firefox:f=Math.abs(f);case c.msedge||c.msie:f=e[0].scrollWidth-e[0].clientWidth-f}a.isFunction(h.onScroll)&&h.onScroll.call(d,{maxScroll:i.y.maxScrollOffset,scroll:g,size:i.y.size,visible:i.y.visible},{maxScroll:i.x.maxScrollOffset,scroll:f,size:i.x.size,visible:i.x.visible}),i.x.isVisible&&i.x.scroll.bar.css("left",f*i.x.kx+"px"),i.y.isVisible&&i.y.scroll.bar.css("top",g*i.y.kx+"px")}),k.on("scroll"+g,function(){k.scrollTop(0).scrollLeft(0)}),h.disableBodyScroll){var n=function(a){j(a)?i.y.isVisible&&i.y.mousewheel(a):i.x.isVisible&&i.x.mousewheel(a)};k.on("MozMousePixelScroll"+g,n),k.on("mousewheel"+g,n),c.mobile&&k.on("touchstart"+g,function(b){var c=b.originalEvent.touches&&b.originalEvent.touches[0]||b,d={pageX:c.pageX,pageY:c.pageY},f={left:e.scrollLeft(),top:e.scrollTop()};a(document).on("touchmove"+g,function(a){var b=a.originalEvent.targetTouches&&a.originalEvent.targetTouches[0]||a;e.scrollLeft(f.left+d.pageX-b.pageX),e.scrollTop(f.top+d.pageY-b.pageY),a.preventDefault()}),a(document).on("touchend"+g,function(){a(document).off(g)})})}a.isFunction(h.onInit)&&h.onInit.apply(this,[e])}a.each(i,function(b,f){var k=null,l=1,m="x"===b?"scrollLeft":"scrollTop",n=h.scrollStep,o=function(){var a=e[m]();e[m](a+n),1==l&&a+n>=p&&(a=e[m]()),l==-1&&a+n<=p&&(a=e[m]()),e[m]()==a&&k&&k()},p=0;f.scroll||(f.scroll=d._getScroll(h["scroll"+b]).addClass("scroll-"+b),h.showArrows&&f.scroll.addClass("scroll-element_arrows_visible"),f.mousewheel=function(a){if(!f.isVisible||"x"===b&&j(a))return!0;if("y"===b&&!j(a))return i.x.mousewheel(a),!0;var c=a.originalEvent.wheelDelta*-1||a.originalEvent.detail,g=f.size-f.visible-f.offset;return c||("x"===b&&a.originalEvent.deltaX?c=40*a.originalEvent.deltaX:"y"===b&&a.originalEvent.deltaY&&(c=40*a.originalEvent.deltaY)),(c>0&&p
<0&&p>0)&&(p+=c,p<0&&(p=0),p>g&&(p=g),d.scrollTo=d.scrollTo||{},d.scrollTo[m]=p,setTimeout(function(){d.scrollTo&&(e.stop().animate(d.scrollTo,240,"linear",function(){p=e[m]()}),d.scrollTo=null)},1)),a.preventDefault(),!1},f.scroll.on("MozMousePixelScroll"+g,f.mousewheel).on("mousewheel"+g,f.mousewheel).on("mouseenter"+g,function(){p=e[m]()}),f.scroll.find(".scroll-arrow, .scroll-element_track").on("mousedown"+g,function(g){if(1!=g.which)return!0;l=1;var i={eventOffset:g["x"===b?"pageX":"pageY"],maxScrollValue:f.size-f.visible-f.offset,scrollbarOffset:f.scroll.bar.offset()["x"===b?"left":"top"],scrollbarSize:f.scroll.bar["x"===b?"outerWidth":"outerHeight"]()},j=0,q=0;if(a(this).hasClass("scroll-arrow")){if(l=a(this).hasClass("scroll-arrow_more")?1:-1,n=h.scrollStep*l,p=l>0?i.maxScrollValue:0,h.isRtl)switch(!0){case c.firefox:p=l>0?0:i.maxScrollValue*-1;break;case c.msie||c.msedge:}}else l=i.eventOffset>i.scrollbarOffset+i.scrollbarSize?1:i.eventOffset','','','','",""].join(""),simple:['
"].join("")};return c[b]&&(b=c[b]),b||(b=c.simple),b="string"==typeof b?a(b).appendTo(this.wrapper):a(b),a.extend(b,{bar:b.find(".scroll-bar"),size:b.find(".scroll-element_size"),track:b.find(".scroll-element_track")}),b},_handleMouseDown:function(b,c){var d=this.namespace;return a(document).on("blur"+d,function(){a(document).add("body").off(d),b&&b()}),a(document).on("dragstart"+d,function(a){return a.preventDefault(),!1}),a(document).on("mouseup"+d,function(){a(document).add("body").off(d),b&&b()}),a("body").on("selectstart"+d,function(a){return a.preventDefault(),!1}),c&&c.preventDefault(),!1},_updateScroll:function(b,d){var e=this.container,f=this.containerWrapper||e,g="scroll-scroll"+b+"_visible",h="x"===b?this.scrolly:this.scrollx,i=parseInt(this.container.css("x"===b?"left":"top"),10)||0,j=this.wrapper,k=d.size,l=d.visible+i;d.isVisible=k-l>1,d.isVisible?(d.scroll.addClass(g),h.scroll.addClass(g),f.addClass(g)):(d.scroll.removeClass(g),h.scroll.removeClass(g),f.removeClass(g)),"y"===b&&(e.is("textarea")||k
10?(window.console&&console.log("Scroll updates exceed 10"),g=function(){}):(clearTimeout(a),a=setTimeout(g,300))}}();window.angular&&!function(a){a.module("jQueryScrollbar",[]).provider("jQueryScrollbar",function(){var b=d;return{setOptions:function(c){a.extend(b,c)},$get:function(){return{options:a.copy(b)}}}}).directive("jqueryScrollbar",["jQueryScrollbar","$parse",function(a,b){return{restrict:"AC",link:function(c,d,e){var f=b(e.jqueryScrollbar),g=f(c);d.scrollbar(g||a.options).on("$destroy",function(){d.scrollbar("destroy")})}}}])}(window.angular)});
\ No newline at end of file
From c3573421224b0ec7cf47f8335577dc519b1c36ef Mon Sep 17 00:00:00 2001
From: Vlad
Date: Wed, 27 Dec 2017 09:58:39 +0300
Subject: [PATCH 32/32] fix factory jquery
---
jquery.scrollbar.js | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/jquery.scrollbar.js b/jquery.scrollbar.js
index 0883fd3..c3b8a75 100644
--- a/jquery.scrollbar.js
+++ b/jquery.scrollbar.js
@@ -13,12 +13,13 @@
*/
;
(function (root, factory) {
+ 'use strict';
if (typeof define === 'function' && define.amd) {
define(['jquery'], factory);
- } else if (typeof exports !== "undefined") {
- factory(require('jquery'));
+ } else if (typeof exports !== 'undefined') {
+ module.exports = factory(require('jquery'));
} else {
- factory(root.jQuery);
+ factory(jQuery);
}
}(this, function ($) {
'use strict';