New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

optiscroll

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

optiscroll - npm Package Compare versions

Comparing version 3.0.0 to 3.1.0

.editorconfig

2

bower.json
{
"name": "optiscroll",
"version": "3.0.0",
"version": "3.1.0",
"homepage": "https://github.com/albertogasparin/Optiscroll",

@@ -5,0 +5,0 @@ "authors": [

/*!
* Optiscroll.js v3.0.0
* Optiscroll.js v3.1.0
* https://github.com/wilsonfletcher/Optiscroll/

@@ -13,2 +13,3 @@ *

/**

@@ -25,3 +26,3 @@ * Optiscroll, use this to create instances

var GS = Optiscroll.globalSettings = {

@@ -50,3 +51,3 @@ scrollMinUpdateInterval: 1000 / 40, // 40 FPS

// instance variables
this.element = element;
this.element = element;
this.settings = _extend(_extend({}, Optiscroll.defaults), options || {});

@@ -57,3 +58,3 @@ if (typeof options.rtl !== 'boolean') {

this.cache = {};
this.init();

@@ -71,5 +72,5 @@ };

shouldCreateScrollbars = false;
var scrollEl = this.scrollEl = settings.wrapContent
? Utils.createWrapper(element)
var scrollEl = this.scrollEl = settings.wrapContent
? Utils.createWrapper(element)
: element.firstElementChild;

@@ -81,3 +82,3 @@

// initialize scrollbars
this.scrollbars = {
this.scrollbars = {
v: Scrollbar('v', this),

@@ -90,3 +91,3 @@ h: Scrollbar('h', this),

shouldCreateScrollbars = Utils.hideNativeScrollbars(scrollEl, settings.rtl);
}
}

@@ -119,4 +120,4 @@ if(shouldCreateScrollbars) {

bind: function () {

@@ -154,6 +155,6 @@ var listeners = this.listeners = {},

cW = scrollEl.clientWidth;
if(sH !== cache.scrollH || cH !== cache.clientH ||
if(sH !== cache.scrollH || cH !== cache.clientH ||
sW !== cache.scrollW || cW !== cache.clientW) {
cache.scrollH = sH;

@@ -198,3 +199,3 @@ cache.clientH = cH;

startY = this.scrollEl.scrollTop;
endX = +destX;

@@ -212,3 +213,3 @@ if(destX === 'left') { endX = 0; }

this.animateScroll(startX, endX, startY, endY, +duration);
},

@@ -252,3 +253,3 @@

bottomEdge = offsetY + eDim.height - this.cache.clientH + (delta.bottom || 0);
if(leftEdge < startX) { endX = leftEdge; }

@@ -286,7 +287,7 @@ if(rightEdge > startX) { endX = rightEdge; }

}
(function animate () {
var time = Math.min(1, ((Date.now() - startTime) / duration)),
easedTime = Utils.easingFunction(time);
if(endY !== startY) {

@@ -300,3 +301,3 @@ scrollEl.scrollTop = ~~(easedTime * (endY - startY)) + startY;

self.scrollAnimation = time < 1 ? window.requestAnimationFrame(animate) : null;
}(this));
}());
},

@@ -354,3 +355,3 @@

eventData;
eventData = {

@@ -375,3 +376,3 @@ // scrollbars data

var event;
if (CustomEvent === 'function') {
if (typeof CustomEvent === 'function') {
event = new CustomEvent(eventName, { detail: eventData });

@@ -393,3 +394,3 @@ } else { // IE does not support CustomEvent

scroll: function (ev) {
if (!G.pauseCheck) {

@@ -399,3 +400,3 @@ this.fireCustomEvent('scrollstart');

G.pauseCheck = true;
this.scrollbars.v.update();

@@ -405,3 +406,3 @@ this.scrollbars.h.update();

this.fireCustomEvent('scroll');
clearTimeout(this.cache.timerStop);

@@ -416,3 +417,3 @@ this.cache.timerStop = setTimeout(Events.scrollStop.bind(this), this.settings.scrollStopDelay);

this.scrollbars.h.update();
Events.wheel.call(this, ev);

@@ -437,3 +438,3 @@ },

var cache = this.cache,
cacheV = cache.v,
cacheV = cache.v,
cacheH = cache.h,

@@ -443,3 +444,3 @@ preventScroll = this.settings.preventParentScroll && G.isTouch;

window.cancelAnimationFrame(this.scrollAnimation);
if(preventScroll && cacheV.enabled && cacheV.percent % 100 === 0) {

@@ -470,3 +471,4 @@ this.scrollEl.scrollTop = cacheV.percent ? (cache.scrollH - cache.clientH - 1) : 1;

scrollProp = isVertical ? 'scrollTop' : 'scrollLeft',
evNames = isVertical ? ['top','bottom'] : ['left','right'],
evSuffixes = isVertical ? ['top','bottom'] : ['left','right'],
evTypesMatcher = /^(mouse|touch|pointer)/,

@@ -482,5 +484,6 @@ rtlMode = G.scrollbarSpec.rtl,

dragStart: function (ev) {
ev.preventDefault();
var evData = ev.touches ? ev.touches[0] : ev;
events.dragData = { x: evData.pageX, y: evData.pageY, scroll: scrollEl[scrollProp] };
events.bind(true);
events.bind(true, ev.type.match(evTypesMatcher)[1]);
},

@@ -492,25 +495,27 @@

delta, deltaRatio;
ev.preventDefault();
delta = isVertical ? evData.pageY - events.dragData.y : evData.pageX - events.dragData.x;
deltaRatio = delta / cache[clientSize];
scrollEl[scrollProp] = events.dragData.scroll + deltaRatio * cache[scrollSize] * dragMode;
},
dragEnd: function () {
dragEnd: function (ev) {
events.dragData = null;
events.bind(false);
events.bind(false, ev.type.match(evTypesMatcher)[1]);
},
bind: function (on) {
bind: function (on, type) {
var method = (on ? 'add' : 'remove') + 'EventListener',
type = G.isTouch ? ['touchmove', 'touchend'] : ['mousemove', 'mouseup'];
moveEv = type + 'move',
upEv = type + (type === 'touch' ? 'end' : 'up');
document[method](type[0], events.dragMove);
document[method](type[1], events.dragEnd);
document[method](moveEv, events.dragMove);
document[method](upEv, events.dragEnd);
document[method](type + 'cancel', events.dragEnd);
},
};
return {

@@ -532,3 +537,2 @@

create: function () {
var evType = G.isTouch ? 'touchstart' : 'mousedown';
scrollbarEl = document.createElement('div');

@@ -543,3 +547,6 @@ trackEl = document.createElement('b');

if(settings.draggableTracks) {
trackEl.addEventListener(evType, events.dragStart);
var evTypes = window.PointerEvent ? ['pointerdown'] : ['touchstart', 'mousedown'];
evTypes.forEach(function (evType) {
trackEl.addEventListener(evType, events.dragStart);
});
}

@@ -582,3 +589,3 @@ },

}
},

@@ -594,4 +601,4 @@

}
trackEl.style[G.cssTransform] = 'translate(' +
(isVertical ? '0%,' + newRelPos + '%' : newRelPos + '%' + ',0%')
trackEl.style[G.cssTransform] = 'translate(' +
(isVertical ? '0%,' + newRelPos + '%' : newRelPos + '%' + ',0%')
+ ')';

@@ -603,8 +610,8 @@ },

var position = scrollEl[scrollProp],
viewS = cache[clientSize],
scrollS = cache[scrollSize],
viewS = cache[clientSize],
scrollS = cache[scrollSize],
sizeRatio = viewS / scrollS,
sizeDiff = scrollS - viewS,
positionRatio, percent;
if(sizeRatio >= 1 || !scrollS) { // no scrollbars needed

@@ -619,8 +626,8 @@ return { position: 0, size: 1, percent: 0 };

// prevent overscroll effetcs (negative percent)
// prevent overscroll effetcs (negative percent)
// and keep 1px tolerance near the edges
if(position <= 1) { percent = 0; }
if(position >= sizeDiff - 1) { percent = 100; }
// Capped size based on min/max track percentage
// Capped size based on min/max track percentage
sizeRatio = Math.max(sizeRatio, settings.minTrackSize / 100);

@@ -640,3 +647,3 @@ sizeRatio = Math.min(sizeRatio, settings.maxTrackSize / 100);

instance.fireCustomEvent('scrollreachedge');
instance.fireCustomEvent('scrollreach' + evNames[percent / 100]);
instance.fireCustomEvent('scrollreach' + evSuffixes[percent / 100]);
}

@@ -688,3 +695,3 @@

document.head.appendChild(styleSheet);
}
}
try {

@@ -710,3 +717,3 @@ styleSheet.sheet.insertRule(selector + ' {' + rules + '}', 0);

checkLoop: function () {
if(!G.instances.length) {

@@ -720,3 +727,3 @@ G.checkTimer = null;

}
if(GS.checkFrequency) {

@@ -731,4 +738,4 @@ G.checkTimer = setTimeout(function () {

// easeOutCubic function
easingFunction: function (t) {
return (--t) * t * t + 1;
easingFunction: function (t) {
return (--t) * t * t + 1;
},

@@ -769,7 +776,7 @@

width = outerEl.offsetWidth - outerEl.clientWidth;
if (outerEl.scrollLeft > 0) {
if (outerEl.scrollLeft > 0) {
rtl = 0; // webkit is default
} else {
outerEl.scrollLeft = 1;
if (outerEl.scrollLeft === 0) {
if (outerEl.scrollLeft === 0) {
rtl = -1; // firefox is negative

@@ -779,3 +786,3 @@ }

htmlEl.removeChild(outerEl);
return { width: width, rtl: rtl };

@@ -800,3 +807,3 @@ }

props = [prop, 'Webkit' + ucProp];
for (var i in props) {

@@ -813,3 +820,3 @@ if(el.style[props[i]] !== undefined) { return props[i]; }

index = classes.indexOf(value);
if(bool) {

@@ -879,3 +886,3 @@ ~index || classes.push(value);

}
// commonjs export

@@ -885,3 +892,3 @@ if(typeof module !== 'undefined' && module.exports) {

}
window.Optiscroll = Optiscroll;

@@ -891,2 +898,3 @@

/**

@@ -905,3 +913,3 @@ * jQuery plugin

(function ($) {
var pluginName = 'optiscroll';

@@ -911,3 +919,3 @@

var method, args;
if(typeof options === 'string') {

@@ -927,3 +935,3 @@ args = Array.prototype.slice.call(arguments);

}
// allow exec method on instance
// allow exec method on instance
else if(inst && typeof method === 'string') {

@@ -930,0 +938,0 @@ inst[method].apply(inst, args);

/*!
* Optiscroll.js v3.0.0
* Optiscroll.js v3.1.0
* https://github.com/wilsonfletcher/Optiscroll/

@@ -8,2 +8,2 @@ *

*/
!function(a,b,c,d){"use strict";function e(){var a,c,d=b.documentElement,e=0,f=1;return a=b.createElement("div"),a.style.cssText="overflow:scroll;width:50px;height:50px;position:absolute;left:-100px;direction:rtl",c=b.createElement("div"),c.style.cssText="width:100px;height:100px",a.appendChild(c),d.appendChild(a),e=a.offsetWidth-a.clientWidth,a.scrollLeft>0?f=0:(a.scrollLeft=1,0===a.scrollLeft&&(f=-1)),d.removeChild(a),{width:e,rtl:f}}function f(){var b=!1,c=Object.defineProperty({},"passive",{get:function(){b=!0}});return a.addEventListener("test",null,c),!!b&&{capture:!1,passive:!0}}function g(a){var c=a.charAt(0).toUpperCase()+a.slice(1),e=b.createElement("test"),f=[a,"Webkit"+c];for(var g in f)if(e.style[f[g]]!==d)return f[g];return""}function h(a,b,c){var d=a.className.split(/\s+/),e=d.indexOf(b);c?~e||d.push(b):~e&&d.splice(e,1),a.className=d.join(" ")}function i(a,b,c){for(var e in b)!b.hasOwnProperty(e)||a[e]!==d&&c||(a[e]=b[e]);return a}function j(a,b,c){var d,e;if(a.length)for(d=0,e=a.length;d<e;d++)a[d][b].apply(a[d],c);else for(d in a)a[d][b].apply(a[d],c)}function k(a,b){var c,d;return function(){var e=this,f=Date.now(),g=arguments;c&&f<c+b?(clearTimeout(d),d=setTimeout(function(){c=f,a.apply(e,g)},b)):(c=f,a.apply(e,g))}}var l=function a(b,c){return new a.Instance(b,c||{})},m=l.globalSettings={scrollMinUpdateInterval:25,checkFrequency:1e3,pauseCheck:!1};l.defaults={preventParentScroll:!1,forceScrollbars:!1,scrollStopDelay:300,maxTrackSize:95,minTrackSize:5,draggableTracks:!0,autoUpdate:!0,classPrefix:"optiscroll-",wrapContent:!0,rtl:!1},l.Instance=function(b,c){this.element=b,this.settings=i(i({},l.defaults),c||{}),"boolean"!=typeof c.rtl&&(this.settings.rtl="rtl"===a.getComputedStyle(b).direction),this.cache={},this.init()},l.Instance.prototype={init:function(){var a=this.element,b=this.settings,c=!1,d=this.scrollEl=b.wrapContent?p.createWrapper(a):a.firstElementChild;h(d,b.classPrefix+"content",!0),h(a,"is-enabled"+(b.rtl?" is-rtl":""),!0),this.scrollbars={v:o("v",this),h:o("h",this)},(q.scrollbarSpec.width||b.forceScrollbars)&&(c=p.hideNativeScrollbars(d,b.rtl)),c&&j(this.scrollbars,"create"),q.isTouch&&b.preventParentScroll&&h(a,b.classPrefix+"prevent",!0),this.update(),this.bind(),b.autoUpdate&&q.instances.push(this),b.autoUpdate&&!q.checkTimer&&p.checkLoop()},bind:function(){var a=this.listeners={},b=this.scrollEl;a.scroll=k(n.scroll.bind(this),m.scrollMinUpdateInterval),q.isTouch&&(a.touchstart=n.touchstart.bind(this),a.touchend=n.touchend.bind(this)),a.mousewheel=a.wheel=n.wheel.bind(this);for(var c in a)b.addEventListener(c,a[c],q.passiveEvent)},update:function(){var a=this.scrollEl,c=this.cache,e=c.clientH,f=a.scrollHeight,g=a.clientHeight,h=a.scrollWidth,i=a.clientWidth;if(f!==c.scrollH||g!==c.clientH||h!==c.scrollW||i!==c.clientW){if(c.scrollH=f,c.clientH=g,c.scrollW=h,c.clientW=i,e!==d){if(0===f&&0===g&&!b.body.contains(this.element))return this.destroy(),!1;this.fireCustomEvent("sizechange")}j(this.scrollbars,"update")}},scrollTo:function(a,b,c){var d,e,f,g,h=this.cache;q.pauseCheck=!0,this.update(),d=this.scrollEl.scrollLeft,e=this.scrollEl.scrollTop,f=+a,"left"===a&&(f=0),"right"===a&&(f=h.scrollW-h.clientW),a===!1&&(f=d),g=+b,"top"===b&&(g=0),"bottom"===b&&(g=h.scrollH-h.clientH),b===!1&&(g=e),this.animateScroll(d,f,e,g,+c)},scrollIntoView:function(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p=this.scrollEl;q.pauseCheck=!0,this.update(),"string"==typeof a?a=p.querySelector(a):a.length&&a.jquery&&(a=a[0]),"number"==typeof c&&(c={top:c,right:c,bottom:c,left:c}),c=c||{},d=a.getBoundingClientRect(),e=p.getBoundingClientRect(),l=n=p.scrollLeft,m=o=p.scrollTop,j=l+d.left-e.left,k=m+d.top-e.top,f=j-(c.left||0),g=k-(c.top||0),h=j+d.width-this.cache.clientW+(c.right||0),i=k+d.height-this.cache.clientH+(c.bottom||0),f<l&&(n=f),h>l&&(n=h),g<m&&(o=g),i>m&&(o=i),this.animateScroll(l,n,m,o,+b)},animateScroll:function(b,d,e,f,g){var h=this,i=this.scrollEl,j=Date.now();if(d!==b||f!==e){if(0===g)return i.scrollLeft=d,void(i.scrollTop=f);isNaN(g)&&(g=15*c.pow(c.max(c.abs(d-b),c.abs(f-e)),.54)),function k(){var l=c.min(1,(Date.now()-j)/g),m=p.easingFunction(l);f!==e&&(i.scrollTop=~~(m*(f-e))+e),d!==b&&(i.scrollLeft=~~(m*(d-b))+b),h.scrollAnimation=l<1?a.requestAnimationFrame(k):null}()}},destroy:function(){var b,c=this,d=this.element,e=this.scrollEl,f=this.listeners;if(this.scrollEl){for(var g in f)e.removeEventListener(g,f[g]);if(j(this.scrollbars,"remove"),!this.settings.contentElement){for(;b=e.childNodes[0];)d.insertBefore(b,e);d.removeChild(e),this.scrollEl=null}h(d,this.settings.classPrefix+"prevent",!1),h(d,"is-enabled",!1),a.requestAnimationFrame(function(){var a=q.instances.indexOf(c);a>-1&&q.instances.splice(a,1)})}},fireCustomEvent:function(a){var c,d=this.cache,e=d.scrollH,f=d.scrollW;c={scrollbarV:i({},d.v),scrollbarH:i({},d.h),scrollTop:d.v.position*e,scrollLeft:d.h.position*f,scrollBottom:(1-d.v.position-d.v.size)*e,scrollRight:(1-d.h.position-d.h.size)*f,scrollWidth:f,scrollHeight:e,clientWidth:d.clientW,clientHeight:d.clientH};var g;"function"===CustomEvent?g=new CustomEvent(a,{detail:c}):(g=b.createEvent("CustomEvent"),g.initCustomEvent(a,!1,!1,c)),this.element.dispatchEvent(g)}};var n={scroll:function(a){q.pauseCheck||this.fireCustomEvent("scrollstart"),q.pauseCheck=!0,this.scrollbars.v.update(),this.scrollbars.h.update(),this.fireCustomEvent("scroll"),clearTimeout(this.cache.timerStop),this.cache.timerStop=setTimeout(n.scrollStop.bind(this),this.settings.scrollStopDelay)},touchstart:function(a){q.pauseCheck=!1,this.scrollbars.v.update(),this.scrollbars.h.update(),n.wheel.call(this,a)},touchend:function(a){clearTimeout(this.cache.timerStop)},scrollStop:function(){this.fireCustomEvent("scrollstop"),q.pauseCheck=!1},wheel:function(b){var c=this.cache,d=c.v,e=c.h,f=this.settings.preventParentScroll&&q.isTouch;a.cancelAnimationFrame(this.scrollAnimation),f&&d.enabled&&d.percent%100==0&&(this.scrollEl.scrollTop=d.percent?c.scrollH-c.clientH-1:1),f&&e.enabled&&e.percent%100==0&&(this.scrollEl.scrollLeft=e.percent?c.scrollW-c.clientW-1:1)}},o=function(a,d){var e="v"===a,f=d.element,g=d.scrollEl,j=d.settings,k=d.cache,l=k[a]={},m=e?"H":"W",n="client"+m,o="scroll"+m,p=e?"scrollTop":"scrollLeft",r=e?["top","bottom"]:["left","right"],s=q.scrollbarSpec.rtl,t=!1,u=null,v=null,w={dragData:null,dragStart:function(a){var b=a.touches?a.touches[0]:a;w.dragData={x:b.pageX,y:b.pageY,scroll:g[p]},w.bind(!0)},dragMove:function(a){var b,c,d=a.touches?a.touches[0]:a,f=j.rtl&&1===s&&!e?-1:1;a.preventDefault(),b=e?d.pageY-w.dragData.y:d.pageX-w.dragData.x,c=b/k[n],g[p]=w.dragData.scroll+c*k[o]*f},dragEnd:function(){w.dragData=null,w.bind(!1)},bind:function(a){var c=(a?"add":"remove")+"EventListener",d=q.isTouch?["touchmove","touchend"]:["mousemove","mouseup"];b[c](d[0],w.dragMove),b[c](d[1],w.dragEnd)}};return{toggle:function(b){t=b,v&&h(f,"has-"+a+"track",t),l.enabled=t},create:function(){var c=q.isTouch?"touchstart":"mousedown";u=b.createElement("div"),v=b.createElement("b"),u.className=j.classPrefix+a,v.className=j.classPrefix+a+"track",u.appendChild(v),f.appendChild(u),j.draggableTracks&&v.addEventListener(c,w.dragStart)},update:function(){var a,b,d,e,f;(t||k[n]!==k[o])&&(d=this.calc(),a=d.size,b=l.size,e=1/a*d.position*100,f=c.abs(d.position-(l.position||0))*k[n],1===a&&t&&this.toggle(!1),a<1&&!t&&this.toggle(!0),v&&t&&this.style(e,f,a,b),l=i(l,d),t&&this.fireEdgeEv())},style:function(a,b,c,d){c!==d&&(v.style[e?"height":"width"]=100*c+"%",j.rtl&&!e&&(v.style.marginRight=100*(1-c)+"%")),v.style[q.cssTransform]="translate("+(e?"0%,"+a+"%":a+"%,0%")+")"},calc:function(){var a,b,d=g[p],f=k[n],h=k[o],i=f/h,l=h-f;return i>=1||!h?{position:0,size:1,percent:0}:(!e&&j.rtl&&s&&(d=l-d*s),b=100*d/l,d<=1&&(b=0),d>=l-1&&(b=100),i=c.max(i,j.minTrackSize/100),i=c.min(i,j.maxTrackSize/100),a=b/100*(1-i),{position:a,size:i,percent:b})},fireEdgeEv:function(){var a=l.percent;l.was!==a&&a%100==0&&(d.fireCustomEvent("scrollreachedge"),d.fireCustomEvent("scrollreach"+r[a/100])),l.was=a},remove:function(){this.toggle(!1),u&&(u.parentNode.removeChild(u),u=null)}}},p={hideNativeScrollbars:function(a,b){var c=q.scrollbarSpec.width,d=a.style;if(0===c){var e=Date.now();return a.setAttribute("data-scroll",e),p.addCssRule('[data-scroll="'+e+'"]::-webkit-scrollbar',"display:none;width:0;height:0;")}return d[b?"left":"right"]=-c+"px",d.bottom=-c+"px",!0},addCssRule:function(a,c){var d=b.getElementById("scroll-sheet");d||(d=b.createElement("style"),d.id="scroll-sheet",d.appendChild(b.createTextNode("")),b.head.appendChild(d));try{return d.sheet.insertRule(a+" {"+c+"}",0),!0}catch(a){return}},createWrapper:function(a,c){for(var d,e=b.createElement("div");d=a.childNodes[0];)e.appendChild(d);return a.appendChild(e)},checkLoop:function(){if(!q.instances.length)return void(q.checkTimer=null);q.pauseCheck||j(q.instances,"update"),m.checkFrequency&&(q.checkTimer=setTimeout(function(){p.checkLoop()},m.checkFrequency))},easingFunction:function(a){return--a*a*a+1}},q=l.G={isTouch:"ontouchstart"in a,cssTransition:g("transition"),cssTransform:g("transform"),scrollbarSpec:e(),passiveEvent:f(),instances:[],checkTimer:null,pauseCheck:!1};"function"==typeof define&&define.amd&&define(function(){return l}),"undefined"!=typeof module&&module.exports&&(module.exports=l),a.Optiscroll=l}(window,document,Math),function(a){var b="optiscroll";a.fn[b]=function(c){var d,e;return"string"==typeof c&&(e=Array.prototype.slice.call(arguments),d=e.shift()),this.each(function(){var f=a(this),g=f.data(b);g?g&&"string"==typeof d&&(g[d].apply(g,e),"destroy"===d&&f.removeData(b)):(g=new window.Optiscroll(this,c||{}),f.data(b,g))})}}(jQuery||Zepto);
!function(a,b,c,d){"use strict";function e(){var a,c,d=b.documentElement,e=0,f=1;return a=b.createElement("div"),a.style.cssText="overflow:scroll;width:50px;height:50px;position:absolute;left:-100px;direction:rtl",c=b.createElement("div"),c.style.cssText="width:100px;height:100px",a.appendChild(c),d.appendChild(a),e=a.offsetWidth-a.clientWidth,a.scrollLeft>0?f=0:(a.scrollLeft=1,0===a.scrollLeft&&(f=-1)),d.removeChild(a),{width:e,rtl:f}}function f(){var b=!1,c=Object.defineProperty({},"passive",{get:function(){b=!0}});return a.addEventListener("test",null,c),!!b&&{capture:!1,passive:!0}}function g(a){var c=a.charAt(0).toUpperCase()+a.slice(1),e=b.createElement("test"),f=[a,"Webkit"+c];for(var g in f)if(e.style[f[g]]!==d)return f[g];return""}function h(a,b,c){var d=a.className.split(/\s+/),e=d.indexOf(b);c?~e||d.push(b):~e&&d.splice(e,1),a.className=d.join(" ")}function i(a,b,c){for(var e in b)!b.hasOwnProperty(e)||a[e]!==d&&c||(a[e]=b[e]);return a}function j(a,b,c){var d,e;if(a.length)for(d=0,e=a.length;d<e;d++)a[d][b].apply(a[d],c);else for(d in a)a[d][b].apply(a[d],c)}function k(a,b){var c,d;return function(){var e=this,f=Date.now(),g=arguments;c&&f<c+b?(clearTimeout(d),d=setTimeout(function(){c=f,a.apply(e,g)},b)):(c=f,a.apply(e,g))}}var l=function a(b,c){return new a.Instance(b,c||{})},m=l.globalSettings={scrollMinUpdateInterval:25,checkFrequency:1e3,pauseCheck:!1};l.defaults={preventParentScroll:!1,forceScrollbars:!1,scrollStopDelay:300,maxTrackSize:95,minTrackSize:5,draggableTracks:!0,autoUpdate:!0,classPrefix:"optiscroll-",wrapContent:!0,rtl:!1},l.Instance=function(b,c){this.element=b,this.settings=i(i({},l.defaults),c||{}),"boolean"!=typeof c.rtl&&(this.settings.rtl="rtl"===a.getComputedStyle(b).direction),this.cache={},this.init()},l.Instance.prototype={init:function(){var a=this.element,b=this.settings,c=!1,d=this.scrollEl=b.wrapContent?p.createWrapper(a):a.firstElementChild;h(d,b.classPrefix+"content",!0),h(a,"is-enabled"+(b.rtl?" is-rtl":""),!0),this.scrollbars={v:o("v",this),h:o("h",this)},(q.scrollbarSpec.width||b.forceScrollbars)&&(c=p.hideNativeScrollbars(d,b.rtl)),c&&j(this.scrollbars,"create"),q.isTouch&&b.preventParentScroll&&h(a,b.classPrefix+"prevent",!0),this.update(),this.bind(),b.autoUpdate&&q.instances.push(this),b.autoUpdate&&!q.checkTimer&&p.checkLoop()},bind:function(){var a=this.listeners={},b=this.scrollEl;a.scroll=k(n.scroll.bind(this),m.scrollMinUpdateInterval),q.isTouch&&(a.touchstart=n.touchstart.bind(this),a.touchend=n.touchend.bind(this)),a.mousewheel=a.wheel=n.wheel.bind(this);for(var c in a)b.addEventListener(c,a[c],q.passiveEvent)},update:function(){var a=this.scrollEl,c=this.cache,e=c.clientH,f=a.scrollHeight,g=a.clientHeight,h=a.scrollWidth,i=a.clientWidth;if(f!==c.scrollH||g!==c.clientH||h!==c.scrollW||i!==c.clientW){if(c.scrollH=f,c.clientH=g,c.scrollW=h,c.clientW=i,e!==d){if(0===f&&0===g&&!b.body.contains(this.element))return this.destroy(),!1;this.fireCustomEvent("sizechange")}j(this.scrollbars,"update")}},scrollTo:function(a,b,c){var d,e,f,g,h=this.cache;q.pauseCheck=!0,this.update(),d=this.scrollEl.scrollLeft,e=this.scrollEl.scrollTop,f=+a,"left"===a&&(f=0),"right"===a&&(f=h.scrollW-h.clientW),a===!1&&(f=d),g=+b,"top"===b&&(g=0),"bottom"===b&&(g=h.scrollH-h.clientH),b===!1&&(g=e),this.animateScroll(d,f,e,g,+c)},scrollIntoView:function(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p=this.scrollEl;q.pauseCheck=!0,this.update(),"string"==typeof a?a=p.querySelector(a):a.length&&a.jquery&&(a=a[0]),"number"==typeof c&&(c={top:c,right:c,bottom:c,left:c}),c=c||{},d=a.getBoundingClientRect(),e=p.getBoundingClientRect(),l=n=p.scrollLeft,m=o=p.scrollTop,j=l+d.left-e.left,k=m+d.top-e.top,f=j-(c.left||0),g=k-(c.top||0),h=j+d.width-this.cache.clientW+(c.right||0),i=k+d.height-this.cache.clientH+(c.bottom||0),f<l&&(n=f),h>l&&(n=h),g<m&&(o=g),i>m&&(o=i),this.animateScroll(l,n,m,o,+b)},animateScroll:function(b,d,e,f,g){var h=this,i=this.scrollEl,j=Date.now();if(d!==b||f!==e){if(0===g)return i.scrollLeft=d,void(i.scrollTop=f);isNaN(g)&&(g=15*c.pow(c.max(c.abs(d-b),c.abs(f-e)),.54)),function k(){var l=c.min(1,(Date.now()-j)/g),m=p.easingFunction(l);f!==e&&(i.scrollTop=~~(m*(f-e))+e),d!==b&&(i.scrollLeft=~~(m*(d-b))+b),h.scrollAnimation=l<1?a.requestAnimationFrame(k):null}()}},destroy:function(){var b,c=this,d=this.element,e=this.scrollEl,f=this.listeners;if(this.scrollEl){for(var g in f)e.removeEventListener(g,f[g]);if(j(this.scrollbars,"remove"),!this.settings.contentElement){for(;b=e.childNodes[0];)d.insertBefore(b,e);d.removeChild(e),this.scrollEl=null}h(d,this.settings.classPrefix+"prevent",!1),h(d,"is-enabled",!1),a.requestAnimationFrame(function(){var a=q.instances.indexOf(c);a>-1&&q.instances.splice(a,1)})}},fireCustomEvent:function(a){var c,d=this.cache,e=d.scrollH,f=d.scrollW;c={scrollbarV:i({},d.v),scrollbarH:i({},d.h),scrollTop:d.v.position*e,scrollLeft:d.h.position*f,scrollBottom:(1-d.v.position-d.v.size)*e,scrollRight:(1-d.h.position-d.h.size)*f,scrollWidth:f,scrollHeight:e,clientWidth:d.clientW,clientHeight:d.clientH};var g;"function"==typeof CustomEvent?g=new CustomEvent(a,{detail:c}):(g=b.createEvent("CustomEvent"),g.initCustomEvent(a,!1,!1,c)),this.element.dispatchEvent(g)}};var n={scroll:function(a){q.pauseCheck||this.fireCustomEvent("scrollstart"),q.pauseCheck=!0,this.scrollbars.v.update(),this.scrollbars.h.update(),this.fireCustomEvent("scroll"),clearTimeout(this.cache.timerStop),this.cache.timerStop=setTimeout(n.scrollStop.bind(this),this.settings.scrollStopDelay)},touchstart:function(a){q.pauseCheck=!1,this.scrollbars.v.update(),this.scrollbars.h.update(),n.wheel.call(this,a)},touchend:function(a){clearTimeout(this.cache.timerStop)},scrollStop:function(){this.fireCustomEvent("scrollstop"),q.pauseCheck=!1},wheel:function(b){var c=this.cache,d=c.v,e=c.h,f=this.settings.preventParentScroll&&q.isTouch;a.cancelAnimationFrame(this.scrollAnimation),f&&d.enabled&&d.percent%100==0&&(this.scrollEl.scrollTop=d.percent?c.scrollH-c.clientH-1:1),f&&e.enabled&&e.percent%100==0&&(this.scrollEl.scrollLeft=e.percent?c.scrollW-c.clientW-1:1)}},o=function(d,e){var f="v"===d,g=e.element,j=e.scrollEl,k=e.settings,l=e.cache,m=l[d]={},n=f?"H":"W",o="client"+n,p="scroll"+n,r=f?"scrollTop":"scrollLeft",s=f?["top","bottom"]:["left","right"],t=/^(mouse|touch|pointer)/,u=q.scrollbarSpec.rtl,v=!1,w=null,x=null,y={dragData:null,dragStart:function(a){a.preventDefault();var b=a.touches?a.touches[0]:a;y.dragData={x:b.pageX,y:b.pageY,scroll:j[r]},y.bind(!0,a.type.match(t)[1])},dragMove:function(a){var b,c,d=a.touches?a.touches[0]:a,e=k.rtl&&1===u&&!f?-1:1;a.preventDefault(),b=f?d.pageY-y.dragData.y:d.pageX-y.dragData.x,c=b/l[o],j[r]=y.dragData.scroll+c*l[p]*e},dragEnd:function(a){y.dragData=null,y.bind(!1,a.type.match(t)[1])},bind:function(a,c){var d=(a?"add":"remove")+"EventListener",e=c+"move",f=c+("touch"===c?"end":"up");b[d](e,y.dragMove),b[d](f,y.dragEnd),b[d](c+"cancel",y.dragEnd)}};return{toggle:function(a){v=a,x&&h(g,"has-"+d+"track",v),m.enabled=v},create:function(){if(w=b.createElement("div"),x=b.createElement("b"),w.className=k.classPrefix+d,x.className=k.classPrefix+d+"track",w.appendChild(x),g.appendChild(w),k.draggableTracks){(a.PointerEvent?["pointerdown"]:["touchstart","mousedown"]).forEach(function(a){x.addEventListener(a,y.dragStart)})}},update:function(){var a,b,d,e,f;(v||l[o]!==l[p])&&(d=this.calc(),a=d.size,b=m.size,e=1/a*d.position*100,f=c.abs(d.position-(m.position||0))*l[o],1===a&&v&&this.toggle(!1),a<1&&!v&&this.toggle(!0),x&&v&&this.style(e,f,a,b),m=i(m,d),v&&this.fireEdgeEv())},style:function(a,b,c,d){c!==d&&(x.style[f?"height":"width"]=100*c+"%",k.rtl&&!f&&(x.style.marginRight=100*(1-c)+"%")),x.style[q.cssTransform]="translate("+(f?"0%,"+a+"%":a+"%,0%")+")"},calc:function(){var a,b,d=j[r],e=l[o],g=l[p],h=e/g,i=g-e;return h>=1||!g?{position:0,size:1,percent:0}:(!f&&k.rtl&&u&&(d=i-d*u),b=100*d/i,d<=1&&(b=0),d>=i-1&&(b=100),h=c.max(h,k.minTrackSize/100),h=c.min(h,k.maxTrackSize/100),a=b/100*(1-h),{position:a,size:h,percent:b})},fireEdgeEv:function(){var a=m.percent;m.was!==a&&a%100==0&&(e.fireCustomEvent("scrollreachedge"),e.fireCustomEvent("scrollreach"+s[a/100])),m.was=a},remove:function(){this.toggle(!1),w&&(w.parentNode.removeChild(w),w=null)}}},p={hideNativeScrollbars:function(a,b){var c=q.scrollbarSpec.width,d=a.style;if(0===c){var e=Date.now();return a.setAttribute("data-scroll",e),p.addCssRule('[data-scroll="'+e+'"]::-webkit-scrollbar',"display:none;width:0;height:0;")}return d[b?"left":"right"]=-c+"px",d.bottom=-c+"px",!0},addCssRule:function(a,c){var d=b.getElementById("scroll-sheet");d||(d=b.createElement("style"),d.id="scroll-sheet",d.appendChild(b.createTextNode("")),b.head.appendChild(d));try{return d.sheet.insertRule(a+" {"+c+"}",0),!0}catch(a){return}},createWrapper:function(a,c){for(var d,e=b.createElement("div");d=a.childNodes[0];)e.appendChild(d);return a.appendChild(e)},checkLoop:function(){if(!q.instances.length)return void(q.checkTimer=null);q.pauseCheck||j(q.instances,"update"),m.checkFrequency&&(q.checkTimer=setTimeout(function(){p.checkLoop()},m.checkFrequency))},easingFunction:function(a){return--a*a*a+1}},q=l.G={isTouch:"ontouchstart"in a,cssTransition:g("transition"),cssTransform:g("transform"),scrollbarSpec:e(),passiveEvent:f(),instances:[],checkTimer:null,pauseCheck:!1};"function"==typeof define&&define.amd&&define(function(){return l}),"undefined"!=typeof module&&module.exports&&(module.exports=l),a.Optiscroll=l}(window,document,Math),function(a){var b="optiscroll";a.fn[b]=function(c){var d,e;return"string"==typeof c&&(e=Array.prototype.slice.call(arguments),d=e.shift()),this.each(function(){var f=a(this),g=f.data(b);g?g&&"string"==typeof d&&(g[d].apply(g,e),"destroy"===d&&f.removeData(b)):(g=new window.Optiscroll(this,c||{}),f.data(b,g))})}}(jQuery||Zepto);
/*!
* Optiscroll.js v3.0.0
* Optiscroll.js v3.1.0
* https://github.com/wilsonfletcher/Optiscroll/

@@ -13,2 +13,3 @@ *

/**

@@ -25,3 +26,3 @@ * Optiscroll, use this to create instances

var GS = Optiscroll.globalSettings = {

@@ -50,3 +51,3 @@ scrollMinUpdateInterval: 1000 / 40, // 40 FPS

// instance variables
this.element = element;
this.element = element;
this.settings = _extend(_extend({}, Optiscroll.defaults), options || {});

@@ -57,3 +58,3 @@ if (typeof options.rtl !== 'boolean') {

this.cache = {};
this.init();

@@ -71,5 +72,5 @@ };

shouldCreateScrollbars = false;
var scrollEl = this.scrollEl = settings.wrapContent
? Utils.createWrapper(element)
var scrollEl = this.scrollEl = settings.wrapContent
? Utils.createWrapper(element)
: element.firstElementChild;

@@ -81,3 +82,3 @@

// initialize scrollbars
this.scrollbars = {
this.scrollbars = {
v: Scrollbar('v', this),

@@ -90,3 +91,3 @@ h: Scrollbar('h', this),

shouldCreateScrollbars = Utils.hideNativeScrollbars(scrollEl, settings.rtl);
}
}

@@ -119,4 +120,4 @@ if(shouldCreateScrollbars) {

bind: function () {

@@ -154,6 +155,6 @@ var listeners = this.listeners = {},

cW = scrollEl.clientWidth;
if(sH !== cache.scrollH || cH !== cache.clientH ||
if(sH !== cache.scrollH || cH !== cache.clientH ||
sW !== cache.scrollW || cW !== cache.clientW) {
cache.scrollH = sH;

@@ -198,3 +199,3 @@ cache.clientH = cH;

startY = this.scrollEl.scrollTop;
endX = +destX;

@@ -212,3 +213,3 @@ if(destX === 'left') { endX = 0; }

this.animateScroll(startX, endX, startY, endY, +duration);
},

@@ -252,3 +253,3 @@

bottomEdge = offsetY + eDim.height - this.cache.clientH + (delta.bottom || 0);
if(leftEdge < startX) { endX = leftEdge; }

@@ -286,7 +287,7 @@ if(rightEdge > startX) { endX = rightEdge; }

}
(function animate () {
var time = Math.min(1, ((Date.now() - startTime) / duration)),
easedTime = Utils.easingFunction(time);
if(endY !== startY) {

@@ -300,3 +301,3 @@ scrollEl.scrollTop = ~~(easedTime * (endY - startY)) + startY;

self.scrollAnimation = time < 1 ? window.requestAnimationFrame(animate) : null;
}(this));
}());
},

@@ -354,3 +355,3 @@

eventData;
eventData = {

@@ -375,3 +376,3 @@ // scrollbars data

var event;
if (CustomEvent === 'function') {
if (typeof CustomEvent === 'function') {
event = new CustomEvent(eventName, { detail: eventData });

@@ -393,3 +394,3 @@ } else { // IE does not support CustomEvent

scroll: function (ev) {
if (!G.pauseCheck) {

@@ -399,3 +400,3 @@ this.fireCustomEvent('scrollstart');

G.pauseCheck = true;
this.scrollbars.v.update();

@@ -405,3 +406,3 @@ this.scrollbars.h.update();

this.fireCustomEvent('scroll');
clearTimeout(this.cache.timerStop);

@@ -416,3 +417,3 @@ this.cache.timerStop = setTimeout(Events.scrollStop.bind(this), this.settings.scrollStopDelay);

this.scrollbars.h.update();
Events.wheel.call(this, ev);

@@ -437,3 +438,3 @@ },

var cache = this.cache,
cacheV = cache.v,
cacheV = cache.v,
cacheH = cache.h,

@@ -443,3 +444,3 @@ preventScroll = this.settings.preventParentScroll && G.isTouch;

window.cancelAnimationFrame(this.scrollAnimation);
if(preventScroll && cacheV.enabled && cacheV.percent % 100 === 0) {

@@ -470,3 +471,4 @@ this.scrollEl.scrollTop = cacheV.percent ? (cache.scrollH - cache.clientH - 1) : 1;

scrollProp = isVertical ? 'scrollTop' : 'scrollLeft',
evNames = isVertical ? ['top','bottom'] : ['left','right'],
evSuffixes = isVertical ? ['top','bottom'] : ['left','right'],
evTypesMatcher = /^(mouse|touch|pointer)/,

@@ -482,5 +484,6 @@ rtlMode = G.scrollbarSpec.rtl,

dragStart: function (ev) {
ev.preventDefault();
var evData = ev.touches ? ev.touches[0] : ev;
events.dragData = { x: evData.pageX, y: evData.pageY, scroll: scrollEl[scrollProp] };
events.bind(true);
events.bind(true, ev.type.match(evTypesMatcher)[1]);
},

@@ -492,25 +495,27 @@

delta, deltaRatio;
ev.preventDefault();
delta = isVertical ? evData.pageY - events.dragData.y : evData.pageX - events.dragData.x;
deltaRatio = delta / cache[clientSize];
scrollEl[scrollProp] = events.dragData.scroll + deltaRatio * cache[scrollSize] * dragMode;
},
dragEnd: function () {
dragEnd: function (ev) {
events.dragData = null;
events.bind(false);
events.bind(false, ev.type.match(evTypesMatcher)[1]);
},
bind: function (on) {
bind: function (on, type) {
var method = (on ? 'add' : 'remove') + 'EventListener',
type = G.isTouch ? ['touchmove', 'touchend'] : ['mousemove', 'mouseup'];
moveEv = type + 'move',
upEv = type + (type === 'touch' ? 'end' : 'up');
document[method](type[0], events.dragMove);
document[method](type[1], events.dragEnd);
document[method](moveEv, events.dragMove);
document[method](upEv, events.dragEnd);
document[method](type + 'cancel', events.dragEnd);
},
};
return {

@@ -532,3 +537,2 @@

create: function () {
var evType = G.isTouch ? 'touchstart' : 'mousedown';
scrollbarEl = document.createElement('div');

@@ -543,3 +547,6 @@ trackEl = document.createElement('b');

if(settings.draggableTracks) {
trackEl.addEventListener(evType, events.dragStart);
var evTypes = window.PointerEvent ? ['pointerdown'] : ['touchstart', 'mousedown'];
evTypes.forEach(function (evType) {
trackEl.addEventListener(evType, events.dragStart);
});
}

@@ -582,3 +589,3 @@ },

}
},

@@ -594,4 +601,4 @@

}
trackEl.style[G.cssTransform] = 'translate(' +
(isVertical ? '0%,' + newRelPos + '%' : newRelPos + '%' + ',0%')
trackEl.style[G.cssTransform] = 'translate(' +
(isVertical ? '0%,' + newRelPos + '%' : newRelPos + '%' + ',0%')
+ ')';

@@ -603,8 +610,8 @@ },

var position = scrollEl[scrollProp],
viewS = cache[clientSize],
scrollS = cache[scrollSize],
viewS = cache[clientSize],
scrollS = cache[scrollSize],
sizeRatio = viewS / scrollS,
sizeDiff = scrollS - viewS,
positionRatio, percent;
if(sizeRatio >= 1 || !scrollS) { // no scrollbars needed

@@ -619,8 +626,8 @@ return { position: 0, size: 1, percent: 0 };

// prevent overscroll effetcs (negative percent)
// prevent overscroll effetcs (negative percent)
// and keep 1px tolerance near the edges
if(position <= 1) { percent = 0; }
if(position >= sizeDiff - 1) { percent = 100; }
// Capped size based on min/max track percentage
// Capped size based on min/max track percentage
sizeRatio = Math.max(sizeRatio, settings.minTrackSize / 100);

@@ -640,3 +647,3 @@ sizeRatio = Math.min(sizeRatio, settings.maxTrackSize / 100);

instance.fireCustomEvent('scrollreachedge');
instance.fireCustomEvent('scrollreach' + evNames[percent / 100]);
instance.fireCustomEvent('scrollreach' + evSuffixes[percent / 100]);
}

@@ -688,3 +695,3 @@

document.head.appendChild(styleSheet);
}
}
try {

@@ -710,3 +717,3 @@ styleSheet.sheet.insertRule(selector + ' {' + rules + '}', 0);

checkLoop: function () {
if(!G.instances.length) {

@@ -720,3 +727,3 @@ G.checkTimer = null;

}
if(GS.checkFrequency) {

@@ -731,4 +738,4 @@ G.checkTimer = setTimeout(function () {

// easeOutCubic function
easingFunction: function (t) {
return (--t) * t * t + 1;
easingFunction: function (t) {
return (--t) * t * t + 1;
},

@@ -769,7 +776,7 @@

width = outerEl.offsetWidth - outerEl.clientWidth;
if (outerEl.scrollLeft > 0) {
if (outerEl.scrollLeft > 0) {
rtl = 0; // webkit is default
} else {
outerEl.scrollLeft = 1;
if (outerEl.scrollLeft === 0) {
if (outerEl.scrollLeft === 0) {
rtl = -1; // firefox is negative

@@ -779,3 +786,3 @@ }

htmlEl.removeChild(outerEl);
return { width: width, rtl: rtl };

@@ -800,3 +807,3 @@ }

props = [prop, 'Webkit' + ucProp];
for (var i in props) {

@@ -813,3 +820,3 @@ if(el.style[props[i]] !== undefined) { return props[i]; }

index = classes.indexOf(value);
if(bool) {

@@ -879,3 +886,3 @@ ~index || classes.push(value);

}
// commonjs export

@@ -885,5 +892,5 @@ if(typeof module !== 'undefined' && module.exports) {

}
window.Optiscroll = Optiscroll;
})(window, document, Math);
})(window, document, Math);
/*!
* Optiscroll.js v3.0.0
* Optiscroll.js v3.1.0
* https://github.com/wilsonfletcher/Optiscroll/

@@ -8,2 +8,2 @@ *

*/
!function(a,b,c,d){"use strict";function e(){var a,c,d=b.documentElement,e=0,f=1;return a=b.createElement("div"),a.style.cssText="overflow:scroll;width:50px;height:50px;position:absolute;left:-100px;direction:rtl",c=b.createElement("div"),c.style.cssText="width:100px;height:100px",a.appendChild(c),d.appendChild(a),e=a.offsetWidth-a.clientWidth,a.scrollLeft>0?f=0:(a.scrollLeft=1,0===a.scrollLeft&&(f=-1)),d.removeChild(a),{width:e,rtl:f}}function f(){var b=!1,c=Object.defineProperty({},"passive",{get:function(){b=!0}});return a.addEventListener("test",null,c),!!b&&{capture:!1,passive:!0}}function g(a){var c=a.charAt(0).toUpperCase()+a.slice(1),e=b.createElement("test"),f=[a,"Webkit"+c];for(var g in f)if(e.style[f[g]]!==d)return f[g];return""}function h(a,b,c){var d=a.className.split(/\s+/),e=d.indexOf(b);c?~e||d.push(b):~e&&d.splice(e,1),a.className=d.join(" ")}function i(a,b,c){for(var e in b)!b.hasOwnProperty(e)||a[e]!==d&&c||(a[e]=b[e]);return a}function j(a,b,c){var d,e;if(a.length)for(d=0,e=a.length;d<e;d++)a[d][b].apply(a[d],c);else for(d in a)a[d][b].apply(a[d],c)}function k(a,b){var c,d;return function(){var e=this,f=Date.now(),g=arguments;c&&f<c+b?(clearTimeout(d),d=setTimeout(function(){c=f,a.apply(e,g)},b)):(c=f,a.apply(e,g))}}var l=function a(b,c){return new a.Instance(b,c||{})},m=l.globalSettings={scrollMinUpdateInterval:25,checkFrequency:1e3,pauseCheck:!1};l.defaults={preventParentScroll:!1,forceScrollbars:!1,scrollStopDelay:300,maxTrackSize:95,minTrackSize:5,draggableTracks:!0,autoUpdate:!0,classPrefix:"optiscroll-",wrapContent:!0,rtl:!1},l.Instance=function(b,c){this.element=b,this.settings=i(i({},l.defaults),c||{}),"boolean"!=typeof c.rtl&&(this.settings.rtl="rtl"===a.getComputedStyle(b).direction),this.cache={},this.init()},l.Instance.prototype={init:function(){var a=this.element,b=this.settings,c=!1,d=this.scrollEl=b.wrapContent?p.createWrapper(a):a.firstElementChild;h(d,b.classPrefix+"content",!0),h(a,"is-enabled"+(b.rtl?" is-rtl":""),!0),this.scrollbars={v:o("v",this),h:o("h",this)},(q.scrollbarSpec.width||b.forceScrollbars)&&(c=p.hideNativeScrollbars(d,b.rtl)),c&&j(this.scrollbars,"create"),q.isTouch&&b.preventParentScroll&&h(a,b.classPrefix+"prevent",!0),this.update(),this.bind(),b.autoUpdate&&q.instances.push(this),b.autoUpdate&&!q.checkTimer&&p.checkLoop()},bind:function(){var a=this.listeners={},b=this.scrollEl;a.scroll=k(n.scroll.bind(this),m.scrollMinUpdateInterval),q.isTouch&&(a.touchstart=n.touchstart.bind(this),a.touchend=n.touchend.bind(this)),a.mousewheel=a.wheel=n.wheel.bind(this);for(var c in a)b.addEventListener(c,a[c],q.passiveEvent)},update:function(){var a=this.scrollEl,c=this.cache,e=c.clientH,f=a.scrollHeight,g=a.clientHeight,h=a.scrollWidth,i=a.clientWidth;if(f!==c.scrollH||g!==c.clientH||h!==c.scrollW||i!==c.clientW){if(c.scrollH=f,c.clientH=g,c.scrollW=h,c.clientW=i,e!==d){if(0===f&&0===g&&!b.body.contains(this.element))return this.destroy(),!1;this.fireCustomEvent("sizechange")}j(this.scrollbars,"update")}},scrollTo:function(a,b,c){var d,e,f,g,h=this.cache;q.pauseCheck=!0,this.update(),d=this.scrollEl.scrollLeft,e=this.scrollEl.scrollTop,f=+a,"left"===a&&(f=0),"right"===a&&(f=h.scrollW-h.clientW),a===!1&&(f=d),g=+b,"top"===b&&(g=0),"bottom"===b&&(g=h.scrollH-h.clientH),b===!1&&(g=e),this.animateScroll(d,f,e,g,+c)},scrollIntoView:function(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p=this.scrollEl;q.pauseCheck=!0,this.update(),"string"==typeof a?a=p.querySelector(a):a.length&&a.jquery&&(a=a[0]),"number"==typeof c&&(c={top:c,right:c,bottom:c,left:c}),c=c||{},d=a.getBoundingClientRect(),e=p.getBoundingClientRect(),l=n=p.scrollLeft,m=o=p.scrollTop,j=l+d.left-e.left,k=m+d.top-e.top,f=j-(c.left||0),g=k-(c.top||0),h=j+d.width-this.cache.clientW+(c.right||0),i=k+d.height-this.cache.clientH+(c.bottom||0),f<l&&(n=f),h>l&&(n=h),g<m&&(o=g),i>m&&(o=i),this.animateScroll(l,n,m,o,+b)},animateScroll:function(b,d,e,f,g){var h=this,i=this.scrollEl,j=Date.now();if(d!==b||f!==e){if(0===g)return i.scrollLeft=d,void(i.scrollTop=f);isNaN(g)&&(g=15*c.pow(c.max(c.abs(d-b),c.abs(f-e)),.54)),function k(){var l=c.min(1,(Date.now()-j)/g),m=p.easingFunction(l);f!==e&&(i.scrollTop=~~(m*(f-e))+e),d!==b&&(i.scrollLeft=~~(m*(d-b))+b),h.scrollAnimation=l<1?a.requestAnimationFrame(k):null}()}},destroy:function(){var b,c=this,d=this.element,e=this.scrollEl,f=this.listeners;if(this.scrollEl){for(var g in f)e.removeEventListener(g,f[g]);if(j(this.scrollbars,"remove"),!this.settings.contentElement){for(;b=e.childNodes[0];)d.insertBefore(b,e);d.removeChild(e),this.scrollEl=null}h(d,this.settings.classPrefix+"prevent",!1),h(d,"is-enabled",!1),a.requestAnimationFrame(function(){var a=q.instances.indexOf(c);a>-1&&q.instances.splice(a,1)})}},fireCustomEvent:function(a){var c,d=this.cache,e=d.scrollH,f=d.scrollW;c={scrollbarV:i({},d.v),scrollbarH:i({},d.h),scrollTop:d.v.position*e,scrollLeft:d.h.position*f,scrollBottom:(1-d.v.position-d.v.size)*e,scrollRight:(1-d.h.position-d.h.size)*f,scrollWidth:f,scrollHeight:e,clientWidth:d.clientW,clientHeight:d.clientH};var g;"function"===CustomEvent?g=new CustomEvent(a,{detail:c}):(g=b.createEvent("CustomEvent"),g.initCustomEvent(a,!1,!1,c)),this.element.dispatchEvent(g)}};var n={scroll:function(a){q.pauseCheck||this.fireCustomEvent("scrollstart"),q.pauseCheck=!0,this.scrollbars.v.update(),this.scrollbars.h.update(),this.fireCustomEvent("scroll"),clearTimeout(this.cache.timerStop),this.cache.timerStop=setTimeout(n.scrollStop.bind(this),this.settings.scrollStopDelay)},touchstart:function(a){q.pauseCheck=!1,this.scrollbars.v.update(),this.scrollbars.h.update(),n.wheel.call(this,a)},touchend:function(a){clearTimeout(this.cache.timerStop)},scrollStop:function(){this.fireCustomEvent("scrollstop"),q.pauseCheck=!1},wheel:function(b){var c=this.cache,d=c.v,e=c.h,f=this.settings.preventParentScroll&&q.isTouch;a.cancelAnimationFrame(this.scrollAnimation),f&&d.enabled&&d.percent%100==0&&(this.scrollEl.scrollTop=d.percent?c.scrollH-c.clientH-1:1),f&&e.enabled&&e.percent%100==0&&(this.scrollEl.scrollLeft=e.percent?c.scrollW-c.clientW-1:1)}},o=function(a,d){var e="v"===a,f=d.element,g=d.scrollEl,j=d.settings,k=d.cache,l=k[a]={},m=e?"H":"W",n="client"+m,o="scroll"+m,p=e?"scrollTop":"scrollLeft",r=e?["top","bottom"]:["left","right"],s=q.scrollbarSpec.rtl,t=!1,u=null,v=null,w={dragData:null,dragStart:function(a){var b=a.touches?a.touches[0]:a;w.dragData={x:b.pageX,y:b.pageY,scroll:g[p]},w.bind(!0)},dragMove:function(a){var b,c,d=a.touches?a.touches[0]:a,f=j.rtl&&1===s&&!e?-1:1;a.preventDefault(),b=e?d.pageY-w.dragData.y:d.pageX-w.dragData.x,c=b/k[n],g[p]=w.dragData.scroll+c*k[o]*f},dragEnd:function(){w.dragData=null,w.bind(!1)},bind:function(a){var c=(a?"add":"remove")+"EventListener",d=q.isTouch?["touchmove","touchend"]:["mousemove","mouseup"];b[c](d[0],w.dragMove),b[c](d[1],w.dragEnd)}};return{toggle:function(b){t=b,v&&h(f,"has-"+a+"track",t),l.enabled=t},create:function(){var c=q.isTouch?"touchstart":"mousedown";u=b.createElement("div"),v=b.createElement("b"),u.className=j.classPrefix+a,v.className=j.classPrefix+a+"track",u.appendChild(v),f.appendChild(u),j.draggableTracks&&v.addEventListener(c,w.dragStart)},update:function(){var a,b,d,e,f;(t||k[n]!==k[o])&&(d=this.calc(),a=d.size,b=l.size,e=1/a*d.position*100,f=c.abs(d.position-(l.position||0))*k[n],1===a&&t&&this.toggle(!1),a<1&&!t&&this.toggle(!0),v&&t&&this.style(e,f,a,b),l=i(l,d),t&&this.fireEdgeEv())},style:function(a,b,c,d){c!==d&&(v.style[e?"height":"width"]=100*c+"%",j.rtl&&!e&&(v.style.marginRight=100*(1-c)+"%")),v.style[q.cssTransform]="translate("+(e?"0%,"+a+"%":a+"%,0%")+")"},calc:function(){var a,b,d=g[p],f=k[n],h=k[o],i=f/h,l=h-f;return i>=1||!h?{position:0,size:1,percent:0}:(!e&&j.rtl&&s&&(d=l-d*s),b=100*d/l,d<=1&&(b=0),d>=l-1&&(b=100),i=c.max(i,j.minTrackSize/100),i=c.min(i,j.maxTrackSize/100),a=b/100*(1-i),{position:a,size:i,percent:b})},fireEdgeEv:function(){var a=l.percent;l.was!==a&&a%100==0&&(d.fireCustomEvent("scrollreachedge"),d.fireCustomEvent("scrollreach"+r[a/100])),l.was=a},remove:function(){this.toggle(!1),u&&(u.parentNode.removeChild(u),u=null)}}},p={hideNativeScrollbars:function(a,b){var c=q.scrollbarSpec.width,d=a.style;if(0===c){var e=Date.now();return a.setAttribute("data-scroll",e),p.addCssRule('[data-scroll="'+e+'"]::-webkit-scrollbar',"display:none;width:0;height:0;")}return d[b?"left":"right"]=-c+"px",d.bottom=-c+"px",!0},addCssRule:function(a,c){var d=b.getElementById("scroll-sheet");d||(d=b.createElement("style"),d.id="scroll-sheet",d.appendChild(b.createTextNode("")),b.head.appendChild(d));try{return d.sheet.insertRule(a+" {"+c+"}",0),!0}catch(a){return}},createWrapper:function(a,c){for(var d,e=b.createElement("div");d=a.childNodes[0];)e.appendChild(d);return a.appendChild(e)},checkLoop:function(){if(!q.instances.length)return void(q.checkTimer=null);q.pauseCheck||j(q.instances,"update"),m.checkFrequency&&(q.checkTimer=setTimeout(function(){p.checkLoop()},m.checkFrequency))},easingFunction:function(a){return--a*a*a+1}},q=l.G={isTouch:"ontouchstart"in a,cssTransition:g("transition"),cssTransform:g("transform"),scrollbarSpec:e(),passiveEvent:f(),instances:[],checkTimer:null,pauseCheck:!1};"function"==typeof define&&define.amd&&define(function(){return l}),"undefined"!=typeof module&&module.exports&&(module.exports=l),a.Optiscroll=l}(window,document,Math);
!function(a,b,c,d){"use strict";function e(){var a,c,d=b.documentElement,e=0,f=1;return a=b.createElement("div"),a.style.cssText="overflow:scroll;width:50px;height:50px;position:absolute;left:-100px;direction:rtl",c=b.createElement("div"),c.style.cssText="width:100px;height:100px",a.appendChild(c),d.appendChild(a),e=a.offsetWidth-a.clientWidth,a.scrollLeft>0?f=0:(a.scrollLeft=1,0===a.scrollLeft&&(f=-1)),d.removeChild(a),{width:e,rtl:f}}function f(){var b=!1,c=Object.defineProperty({},"passive",{get:function(){b=!0}});return a.addEventListener("test",null,c),!!b&&{capture:!1,passive:!0}}function g(a){var c=a.charAt(0).toUpperCase()+a.slice(1),e=b.createElement("test"),f=[a,"Webkit"+c];for(var g in f)if(e.style[f[g]]!==d)return f[g];return""}function h(a,b,c){var d=a.className.split(/\s+/),e=d.indexOf(b);c?~e||d.push(b):~e&&d.splice(e,1),a.className=d.join(" ")}function i(a,b,c){for(var e in b)!b.hasOwnProperty(e)||a[e]!==d&&c||(a[e]=b[e]);return a}function j(a,b,c){var d,e;if(a.length)for(d=0,e=a.length;d<e;d++)a[d][b].apply(a[d],c);else for(d in a)a[d][b].apply(a[d],c)}function k(a,b){var c,d;return function(){var e=this,f=Date.now(),g=arguments;c&&f<c+b?(clearTimeout(d),d=setTimeout(function(){c=f,a.apply(e,g)},b)):(c=f,a.apply(e,g))}}var l=function a(b,c){return new a.Instance(b,c||{})},m=l.globalSettings={scrollMinUpdateInterval:25,checkFrequency:1e3,pauseCheck:!1};l.defaults={preventParentScroll:!1,forceScrollbars:!1,scrollStopDelay:300,maxTrackSize:95,minTrackSize:5,draggableTracks:!0,autoUpdate:!0,classPrefix:"optiscroll-",wrapContent:!0,rtl:!1},l.Instance=function(b,c){this.element=b,this.settings=i(i({},l.defaults),c||{}),"boolean"!=typeof c.rtl&&(this.settings.rtl="rtl"===a.getComputedStyle(b).direction),this.cache={},this.init()},l.Instance.prototype={init:function(){var a=this.element,b=this.settings,c=!1,d=this.scrollEl=b.wrapContent?p.createWrapper(a):a.firstElementChild;h(d,b.classPrefix+"content",!0),h(a,"is-enabled"+(b.rtl?" is-rtl":""),!0),this.scrollbars={v:o("v",this),h:o("h",this)},(q.scrollbarSpec.width||b.forceScrollbars)&&(c=p.hideNativeScrollbars(d,b.rtl)),c&&j(this.scrollbars,"create"),q.isTouch&&b.preventParentScroll&&h(a,b.classPrefix+"prevent",!0),this.update(),this.bind(),b.autoUpdate&&q.instances.push(this),b.autoUpdate&&!q.checkTimer&&p.checkLoop()},bind:function(){var a=this.listeners={},b=this.scrollEl;a.scroll=k(n.scroll.bind(this),m.scrollMinUpdateInterval),q.isTouch&&(a.touchstart=n.touchstart.bind(this),a.touchend=n.touchend.bind(this)),a.mousewheel=a.wheel=n.wheel.bind(this);for(var c in a)b.addEventListener(c,a[c],q.passiveEvent)},update:function(){var a=this.scrollEl,c=this.cache,e=c.clientH,f=a.scrollHeight,g=a.clientHeight,h=a.scrollWidth,i=a.clientWidth;if(f!==c.scrollH||g!==c.clientH||h!==c.scrollW||i!==c.clientW){if(c.scrollH=f,c.clientH=g,c.scrollW=h,c.clientW=i,e!==d){if(0===f&&0===g&&!b.body.contains(this.element))return this.destroy(),!1;this.fireCustomEvent("sizechange")}j(this.scrollbars,"update")}},scrollTo:function(a,b,c){var d,e,f,g,h=this.cache;q.pauseCheck=!0,this.update(),d=this.scrollEl.scrollLeft,e=this.scrollEl.scrollTop,f=+a,"left"===a&&(f=0),"right"===a&&(f=h.scrollW-h.clientW),a===!1&&(f=d),g=+b,"top"===b&&(g=0),"bottom"===b&&(g=h.scrollH-h.clientH),b===!1&&(g=e),this.animateScroll(d,f,e,g,+c)},scrollIntoView:function(a,b,c){var d,e,f,g,h,i,j,k,l,m,n,o,p=this.scrollEl;q.pauseCheck=!0,this.update(),"string"==typeof a?a=p.querySelector(a):a.length&&a.jquery&&(a=a[0]),"number"==typeof c&&(c={top:c,right:c,bottom:c,left:c}),c=c||{},d=a.getBoundingClientRect(),e=p.getBoundingClientRect(),l=n=p.scrollLeft,m=o=p.scrollTop,j=l+d.left-e.left,k=m+d.top-e.top,f=j-(c.left||0),g=k-(c.top||0),h=j+d.width-this.cache.clientW+(c.right||0),i=k+d.height-this.cache.clientH+(c.bottom||0),f<l&&(n=f),h>l&&(n=h),g<m&&(o=g),i>m&&(o=i),this.animateScroll(l,n,m,o,+b)},animateScroll:function(b,d,e,f,g){var h=this,i=this.scrollEl,j=Date.now();if(d!==b||f!==e){if(0===g)return i.scrollLeft=d,void(i.scrollTop=f);isNaN(g)&&(g=15*c.pow(c.max(c.abs(d-b),c.abs(f-e)),.54)),function k(){var l=c.min(1,(Date.now()-j)/g),m=p.easingFunction(l);f!==e&&(i.scrollTop=~~(m*(f-e))+e),d!==b&&(i.scrollLeft=~~(m*(d-b))+b),h.scrollAnimation=l<1?a.requestAnimationFrame(k):null}()}},destroy:function(){var b,c=this,d=this.element,e=this.scrollEl,f=this.listeners;if(this.scrollEl){for(var g in f)e.removeEventListener(g,f[g]);if(j(this.scrollbars,"remove"),!this.settings.contentElement){for(;b=e.childNodes[0];)d.insertBefore(b,e);d.removeChild(e),this.scrollEl=null}h(d,this.settings.classPrefix+"prevent",!1),h(d,"is-enabled",!1),a.requestAnimationFrame(function(){var a=q.instances.indexOf(c);a>-1&&q.instances.splice(a,1)})}},fireCustomEvent:function(a){var c,d=this.cache,e=d.scrollH,f=d.scrollW;c={scrollbarV:i({},d.v),scrollbarH:i({},d.h),scrollTop:d.v.position*e,scrollLeft:d.h.position*f,scrollBottom:(1-d.v.position-d.v.size)*e,scrollRight:(1-d.h.position-d.h.size)*f,scrollWidth:f,scrollHeight:e,clientWidth:d.clientW,clientHeight:d.clientH};var g;"function"==typeof CustomEvent?g=new CustomEvent(a,{detail:c}):(g=b.createEvent("CustomEvent"),g.initCustomEvent(a,!1,!1,c)),this.element.dispatchEvent(g)}};var n={scroll:function(a){q.pauseCheck||this.fireCustomEvent("scrollstart"),q.pauseCheck=!0,this.scrollbars.v.update(),this.scrollbars.h.update(),this.fireCustomEvent("scroll"),clearTimeout(this.cache.timerStop),this.cache.timerStop=setTimeout(n.scrollStop.bind(this),this.settings.scrollStopDelay)},touchstart:function(a){q.pauseCheck=!1,this.scrollbars.v.update(),this.scrollbars.h.update(),n.wheel.call(this,a)},touchend:function(a){clearTimeout(this.cache.timerStop)},scrollStop:function(){this.fireCustomEvent("scrollstop"),q.pauseCheck=!1},wheel:function(b){var c=this.cache,d=c.v,e=c.h,f=this.settings.preventParentScroll&&q.isTouch;a.cancelAnimationFrame(this.scrollAnimation),f&&d.enabled&&d.percent%100==0&&(this.scrollEl.scrollTop=d.percent?c.scrollH-c.clientH-1:1),f&&e.enabled&&e.percent%100==0&&(this.scrollEl.scrollLeft=e.percent?c.scrollW-c.clientW-1:1)}},o=function(d,e){var f="v"===d,g=e.element,j=e.scrollEl,k=e.settings,l=e.cache,m=l[d]={},n=f?"H":"W",o="client"+n,p="scroll"+n,r=f?"scrollTop":"scrollLeft",s=f?["top","bottom"]:["left","right"],t=/^(mouse|touch|pointer)/,u=q.scrollbarSpec.rtl,v=!1,w=null,x=null,y={dragData:null,dragStart:function(a){a.preventDefault();var b=a.touches?a.touches[0]:a;y.dragData={x:b.pageX,y:b.pageY,scroll:j[r]},y.bind(!0,a.type.match(t)[1])},dragMove:function(a){var b,c,d=a.touches?a.touches[0]:a,e=k.rtl&&1===u&&!f?-1:1;a.preventDefault(),b=f?d.pageY-y.dragData.y:d.pageX-y.dragData.x,c=b/l[o],j[r]=y.dragData.scroll+c*l[p]*e},dragEnd:function(a){y.dragData=null,y.bind(!1,a.type.match(t)[1])},bind:function(a,c){var d=(a?"add":"remove")+"EventListener",e=c+"move",f=c+("touch"===c?"end":"up");b[d](e,y.dragMove),b[d](f,y.dragEnd),b[d](c+"cancel",y.dragEnd)}};return{toggle:function(a){v=a,x&&h(g,"has-"+d+"track",v),m.enabled=v},create:function(){if(w=b.createElement("div"),x=b.createElement("b"),w.className=k.classPrefix+d,x.className=k.classPrefix+d+"track",w.appendChild(x),g.appendChild(w),k.draggableTracks){(a.PointerEvent?["pointerdown"]:["touchstart","mousedown"]).forEach(function(a){x.addEventListener(a,y.dragStart)})}},update:function(){var a,b,d,e,f;(v||l[o]!==l[p])&&(d=this.calc(),a=d.size,b=m.size,e=1/a*d.position*100,f=c.abs(d.position-(m.position||0))*l[o],1===a&&v&&this.toggle(!1),a<1&&!v&&this.toggle(!0),x&&v&&this.style(e,f,a,b),m=i(m,d),v&&this.fireEdgeEv())},style:function(a,b,c,d){c!==d&&(x.style[f?"height":"width"]=100*c+"%",k.rtl&&!f&&(x.style.marginRight=100*(1-c)+"%")),x.style[q.cssTransform]="translate("+(f?"0%,"+a+"%":a+"%,0%")+")"},calc:function(){var a,b,d=j[r],e=l[o],g=l[p],h=e/g,i=g-e;return h>=1||!g?{position:0,size:1,percent:0}:(!f&&k.rtl&&u&&(d=i-d*u),b=100*d/i,d<=1&&(b=0),d>=i-1&&(b=100),h=c.max(h,k.minTrackSize/100),h=c.min(h,k.maxTrackSize/100),a=b/100*(1-h),{position:a,size:h,percent:b})},fireEdgeEv:function(){var a=m.percent;m.was!==a&&a%100==0&&(e.fireCustomEvent("scrollreachedge"),e.fireCustomEvent("scrollreach"+s[a/100])),m.was=a},remove:function(){this.toggle(!1),w&&(w.parentNode.removeChild(w),w=null)}}},p={hideNativeScrollbars:function(a,b){var c=q.scrollbarSpec.width,d=a.style;if(0===c){var e=Date.now();return a.setAttribute("data-scroll",e),p.addCssRule('[data-scroll="'+e+'"]::-webkit-scrollbar',"display:none;width:0;height:0;")}return d[b?"left":"right"]=-c+"px",d.bottom=-c+"px",!0},addCssRule:function(a,c){var d=b.getElementById("scroll-sheet");d||(d=b.createElement("style"),d.id="scroll-sheet",d.appendChild(b.createTextNode("")),b.head.appendChild(d));try{return d.sheet.insertRule(a+" {"+c+"}",0),!0}catch(a){return}},createWrapper:function(a,c){for(var d,e=b.createElement("div");d=a.childNodes[0];)e.appendChild(d);return a.appendChild(e)},checkLoop:function(){if(!q.instances.length)return void(q.checkTimer=null);q.pauseCheck||j(q.instances,"update"),m.checkFrequency&&(q.checkTimer=setTimeout(function(){p.checkLoop()},m.checkFrequency))},easingFunction:function(a){return--a*a*a+1}},q=l.G={isTouch:"ontouchstart"in a,cssTransition:g("transition"),cssTransform:g("transform"),scrollbarSpec:e(),passiveEvent:f(),instances:[],checkTimer:null,pauseCheck:!1};"function"==typeof define&&define.amd&&define(function(){return l}),"undefined"!=typeof module&&module.exports&&(module.exports=l),a.Optiscroll=l}(window,document,Math);

@@ -9,3 +9,3 @@ {

],
"version": "3.0.0",
"version": "3.1.0",
"homepage": "https://github.com/wilsonfletcher/optiscroll",

@@ -12,0 +12,0 @@ "repository": {

var Events = {
scroll: function (ev) {
if (!G.pauseCheck) {

@@ -9,3 +9,3 @@ this.fireCustomEvent('scrollstart');

G.pauseCheck = true;
this.scrollbars.v.update();

@@ -15,3 +15,3 @@ this.scrollbars.h.update();

this.fireCustomEvent('scroll');
clearTimeout(this.cache.timerStop);

@@ -26,3 +26,3 @@ this.cache.timerStop = setTimeout(Events.scrollStop.bind(this), this.settings.scrollStopDelay);

this.scrollbars.h.update();
Events.wheel.call(this, ev);

@@ -47,3 +47,3 @@ },

var cache = this.cache,
cacheV = cache.v,
cacheV = cache.v,
cacheH = cache.h,

@@ -53,3 +53,3 @@ preventScroll = this.settings.preventParentScroll && G.isTouch;

window.cancelAnimationFrame(this.scrollAnimation);
if(preventScroll && cacheV.enabled && cacheV.percent % 100 === 0) {

@@ -56,0 +56,0 @@ this.scrollEl.scrollTop = cacheV.percent ? (cache.scrollH - cache.clientH - 1) : 1;

@@ -30,7 +30,7 @@

width = outerEl.offsetWidth - outerEl.clientWidth;
if (outerEl.scrollLeft > 0) {
if (outerEl.scrollLeft > 0) {
rtl = 0; // webkit is default
} else {
outerEl.scrollLeft = 1;
if (outerEl.scrollLeft === 0) {
if (outerEl.scrollLeft === 0) {
rtl = -1; // firefox is negative

@@ -40,3 +40,3 @@ }

htmlEl.removeChild(outerEl);
return { width: width, rtl: rtl };

@@ -61,3 +61,3 @@ }

props = [prop, 'Webkit' + ucProp];
for (var i in props) {

@@ -74,3 +74,3 @@ if(el.style[props[i]] !== undefined) { return props[i]; }

index = classes.indexOf(value);
if(bool) {

@@ -77,0 +77,0 @@ ~index || classes.push(value);

;(function ( window, document, Math, undefined ) {
'use strict';
'use strict';

@@ -14,3 +14,3 @@ /**

(function ($) {
var pluginName = 'optiscroll';

@@ -20,3 +20,3 @@

var method, args;
if(typeof options === 'string') {

@@ -36,3 +36,3 @@ args = Array.prototype.slice.call(arguments);

}
// allow exec method on instance
// allow exec method on instance
else if(inst && typeof method === 'string') {

@@ -39,0 +39,0 @@ inst[method].apply(inst, args);

@@ -13,3 +13,3 @@

var GS = Optiscroll.globalSettings = {

@@ -38,3 +38,3 @@ scrollMinUpdateInterval: 1000 / 40, // 40 FPS

// instance variables
this.element = element;
this.element = element;
this.settings = _extend(_extend({}, Optiscroll.defaults), options || {});

@@ -45,3 +45,3 @@ if (typeof options.rtl !== 'boolean') {

this.cache = {};
this.init();

@@ -59,5 +59,5 @@ };

shouldCreateScrollbars = false;
var scrollEl = this.scrollEl = settings.wrapContent
? Utils.createWrapper(element)
var scrollEl = this.scrollEl = settings.wrapContent
? Utils.createWrapper(element)
: element.firstElementChild;

@@ -69,3 +69,3 @@

// initialize scrollbars
this.scrollbars = {
this.scrollbars = {
v: Scrollbar('v', this),

@@ -78,3 +78,3 @@ h: Scrollbar('h', this),

shouldCreateScrollbars = Utils.hideNativeScrollbars(scrollEl, settings.rtl);
}
}

@@ -107,4 +107,4 @@ if(shouldCreateScrollbars) {

bind: function () {

@@ -142,6 +142,6 @@ var listeners = this.listeners = {},

cW = scrollEl.clientWidth;
if(sH !== cache.scrollH || cH !== cache.clientH ||
if(sH !== cache.scrollH || cH !== cache.clientH ||
sW !== cache.scrollW || cW !== cache.clientW) {
cache.scrollH = sH;

@@ -186,3 +186,3 @@ cache.clientH = cH;

startY = this.scrollEl.scrollTop;
endX = +destX;

@@ -200,3 +200,3 @@ if(destX === 'left') { endX = 0; }

this.animateScroll(startX, endX, startY, endY, +duration);
},

@@ -240,3 +240,3 @@

bottomEdge = offsetY + eDim.height - this.cache.clientH + (delta.bottom || 0);
if(leftEdge < startX) { endX = leftEdge; }

@@ -274,7 +274,7 @@ if(rightEdge > startX) { endX = rightEdge; }

}
(function animate () {
var time = Math.min(1, ((Date.now() - startTime) / duration)),
easedTime = Utils.easingFunction(time);
if(endY !== startY) {

@@ -288,3 +288,3 @@ scrollEl.scrollTop = ~~(easedTime * (endY - startY)) + startY;

self.scrollAnimation = time < 1 ? window.requestAnimationFrame(animate) : null;
}(this));
}());
},

@@ -342,3 +342,3 @@

eventData;
eventData = {

@@ -363,3 +363,3 @@ // scrollbars data

var event;
if (CustomEvent === 'function') {
if (typeof CustomEvent === 'function') {
event = new CustomEvent(eventName, { detail: eventData });

@@ -366,0 +366,0 @@ } else { // IE does not support CustomEvent

@@ -7,3 +7,3 @@ // AMD export

}
// commonjs export

@@ -13,5 +13,5 @@ if(typeof module !== 'undefined' && module.exports) {

}
window.Optiscroll = Optiscroll;
})(window, document, Math);
})(window, document, Math);

@@ -14,3 +14,4 @@ var Scrollbar = function (which, instance) {

scrollProp = isVertical ? 'scrollTop' : 'scrollLeft',
evNames = isVertical ? ['top','bottom'] : ['left','right'],
evSuffixes = isVertical ? ['top','bottom'] : ['left','right'],
evTypesMatcher = /^(mouse|touch|pointer)/,

@@ -26,5 +27,6 @@ rtlMode = G.scrollbarSpec.rtl,

dragStart: function (ev) {
ev.preventDefault();
var evData = ev.touches ? ev.touches[0] : ev;
events.dragData = { x: evData.pageX, y: evData.pageY, scroll: scrollEl[scrollProp] };
events.bind(true);
events.bind(true, ev.type.match(evTypesMatcher)[1]);
},

@@ -36,25 +38,27 @@

delta, deltaRatio;
ev.preventDefault();
delta = isVertical ? evData.pageY - events.dragData.y : evData.pageX - events.dragData.x;
deltaRatio = delta / cache[clientSize];
scrollEl[scrollProp] = events.dragData.scroll + deltaRatio * cache[scrollSize] * dragMode;
},
dragEnd: function () {
dragEnd: function (ev) {
events.dragData = null;
events.bind(false);
events.bind(false, ev.type.match(evTypesMatcher)[1]);
},
bind: function (on) {
bind: function (on, type) {
var method = (on ? 'add' : 'remove') + 'EventListener',
type = G.isTouch ? ['touchmove', 'touchend'] : ['mousemove', 'mouseup'];
moveEv = type + 'move',
upEv = type + (type === 'touch' ? 'end' : 'up');
document[method](type[0], events.dragMove);
document[method](type[1], events.dragEnd);
document[method](moveEv, events.dragMove);
document[method](upEv, events.dragEnd);
document[method](type + 'cancel', events.dragEnd);
},
};
return {

@@ -76,3 +80,2 @@

create: function () {
var evType = G.isTouch ? 'touchstart' : 'mousedown';
scrollbarEl = document.createElement('div');

@@ -87,3 +90,6 @@ trackEl = document.createElement('b');

if(settings.draggableTracks) {
trackEl.addEventListener(evType, events.dragStart);
var evTypes = window.PointerEvent ? ['pointerdown'] : ['touchstart', 'mousedown'];
evTypes.forEach(function (evType) {
trackEl.addEventListener(evType, events.dragStart);
});
}

@@ -126,3 +132,3 @@ },

}
},

@@ -138,4 +144,4 @@

}
trackEl.style[G.cssTransform] = 'translate(' +
(isVertical ? '0%,' + newRelPos + '%' : newRelPos + '%' + ',0%')
trackEl.style[G.cssTransform] = 'translate(' +
(isVertical ? '0%,' + newRelPos + '%' : newRelPos + '%' + ',0%')
+ ')';

@@ -147,8 +153,8 @@ },

var position = scrollEl[scrollProp],
viewS = cache[clientSize],
scrollS = cache[scrollSize],
viewS = cache[clientSize],
scrollS = cache[scrollSize],
sizeRatio = viewS / scrollS,
sizeDiff = scrollS - viewS,
positionRatio, percent;
if(sizeRatio >= 1 || !scrollS) { // no scrollbars needed

@@ -163,8 +169,8 @@ return { position: 0, size: 1, percent: 0 };

// prevent overscroll effetcs (negative percent)
// prevent overscroll effetcs (negative percent)
// and keep 1px tolerance near the edges
if(position <= 1) { percent = 0; }
if(position >= sizeDiff - 1) { percent = 100; }
// Capped size based on min/max track percentage
// Capped size based on min/max track percentage
sizeRatio = Math.max(sizeRatio, settings.minTrackSize / 100);

@@ -184,3 +190,3 @@ sizeRatio = Math.min(sizeRatio, settings.maxTrackSize / 100);

instance.fireCustomEvent('scrollreachedge');
instance.fireCustomEvent('scrollreach' + evNames[percent / 100]);
instance.fireCustomEvent('scrollreach' + evSuffixes[percent / 100]);
}

@@ -187,0 +193,0 @@

@@ -26,3 +26,3 @@ var Utils = {

document.head.appendChild(styleSheet);
}
}
try {

@@ -48,3 +48,3 @@ styleSheet.sheet.insertRule(selector + ' {' + rules + '}', 0);

checkLoop: function () {
if(!G.instances.length) {

@@ -58,3 +58,3 @@ G.checkTimer = null;

}
if(GS.checkFrequency) {

@@ -69,4 +69,4 @@ G.checkTimer = setTimeout(function () {

// easeOutCubic function
easingFunction: function (t) {
return (--t) * t * t + 1;
easingFunction: function (t) {
return (--t) * t * t + 1;
},

@@ -73,0 +73,0 @@

@@ -30,3 +30,3 @@ /* eslint-env qunit */

os.destroy();
setTimeout(function () {

@@ -33,0 +33,0 @@ // check DOM elements style

@@ -18,3 +18,3 @@ /* eslint-env qunit */

os.scrollEl.scrollTop = 0;
os.element.addEventListener('scrollstart', function (ev) {

@@ -32,3 +32,3 @@ equal(ev.type, 'scrollstart');

}, 50);
});

@@ -69,3 +69,3 @@

}, 50);
});

@@ -91,3 +91,3 @@

}, 50);
});

@@ -113,3 +113,3 @@

}, 50);
});

@@ -135,3 +135,3 @@

}, 50);
});

@@ -138,0 +138,0 @@

@@ -36,3 +36,3 @@ /* eslint-env qunit */

ok(os.element.querySelector('.optiscroll-h'), 'Horizontal scrollbar element created');
// Classes

@@ -70,3 +70,3 @@ notEqual(os.element.className.indexOf('has-vtrack'), -1);

}, 100);
});

@@ -78,12 +78,6 @@

var vTrack = os.element.querySelector('.optiscroll-vtrack');
os.scrollEl.scrollTop = 0;
// usign both jquery.simulate and Syn.js to make drag work across all browsers
$(vTrack).simulate('mousedown', {
clientX: $(vTrack).offset().left + $(vTrack).outerWidth() / 2,
clientY: $(vTrack).offset().top + $(vTrack).outerHeight() / 2,
});
Syn.drag('+0 +25', vTrack, function () {
window.syn.drag('+0 +25', vTrack, function () {
setTimeout(function () {

@@ -97,3 +91,3 @@ equal(os.scrollEl.scrollTop, 50);

});
});

@@ -107,9 +101,3 @@

// usign both jquery.simulate and Syn.js to make drag work across all browsers
$(hTrack).simulate('mousedown', {
clientX: $(hTrack).offset().left + $(hTrack).outerWidth() / 2,
clientY: $(hTrack).offset().top + $(hTrack).outerHeight() / 2,
});
Syn.drag('+25 +0', hTrack, function () {
window.syn.drag('+25 +0', hTrack, function () {
setTimeout(function () {

@@ -128,3 +116,3 @@ equal(os.scrollEl.scrollLeft, 50);

expect(4);
os.scrollEl.scrollTop = 100;

@@ -134,3 +122,3 @@ os.scrollEl.scrollLeft = 10;

os.element.style.height = '150px';
setTimeout(function () {

@@ -147,3 +135,3 @@ os.update();

}, 100);
});

@@ -154,3 +142,3 @@

expect(2);
var content = document.querySelector('.test');

@@ -163,3 +151,3 @@ content.style.width = '400px';

});
setTimeout(function () {

@@ -170,3 +158,3 @@ equal(os.cache.v.size, 0.25);

}, 100);
});

@@ -177,3 +165,3 @@

expect(4);
os.element.style.height = '300px';

@@ -194,3 +182,3 @@ os.update();

expect(4);
os.element.style.width = '300px';

@@ -206,4 +194,4 @@ os.update();

}, 50);
});

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc