Вход Регистрация
Файл: hashtag.io-2629a1a4ea078149b002e45e2e12bb946062c2b8/public/js/perfectScrollbar.js
Строк: 2082
<?php
/* perfect-scrollbar v0.6.10 */
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
'use strict';

var 
ps = require('../main')
  , 
psInstances = require('../plugin/instances');

function 
mountJQuery(jQuery) {
  
jQuery.fn.perfectScrollbar = function (settingOrCommand) {
    return 
this.each(function () {
      if (
typeof settingOrCommand === 'object' ||
          
typeof settingOrCommand === 'undefined') {
        
// If it's an object or none, initialize.
        
var settings = settingOrCommand;

        if (!
psInstances.get(this)) {
          
ps.initialize(this, settings);
        }
      } else {
        
// Unless, it may be a command.
        
var command = settingOrCommand;

        if (
command === 'update') {
          
ps.update(this);
        } else if (
command === 'destroy') {
          
ps.destroy(this);
        }
      }

      return 
jQuery(this);
    });
  };
}

if (
typeof define === 'function' && define.amd) {
  
// AMD. Register as an anonymous module.
  
define(['jquery'], mountJQuery);
} else {
  var 
jq = window.jQuery ? window.jQuery : window.$;
  if (
typeof jq !== 'undefined') {
    
mountJQuery(jq);
  }
}

module.exports = mountJQuery;

},{
"../main":7,"../plugin/instances":18}],2:[function(require,module,exports){
'use strict';

function 
oldAdd(element, className) {
  var 
classes = element.className.split(' ');
  if (
classes.indexOf(className) < 0) {
    
classes.push(className);
  }
  
element.className = classes.join(' ');
}

function 
oldRemove(element, className) {
  var 
classes = element.className.split(' ');
  var 
idx = classes.indexOf(className);
  if (
idx >= 0) {
    
classes.splice(idx, 1);
  }
  
element.className = classes.join(' ');
}

exports.add = function (element, className) {
  if (
element.classList) {
    
element.classList.add(className);
  } else {
    
oldAdd(element, className);
  }
};

exports.remove = function (element, className) {
  if (
element.classList) {
    
element.classList.remove(className);
  } else {
    
oldRemove(element, className);
  }
};

exports.list = function (element) {
  if (
element.classList) {
    return Array.
prototype.slice.apply(element.classList);
  } else {
    return 
element.className.split(' ');
  }
};

},{}],
3:[function(require,module,exports){
'use strict';

var 
DOM = {};

DOM.e = function (tagName, className) {
  var 
element = document.createElement(tagName);
  
element.className = className;
  return 
element;
};

DOM.appendTo = function (child, parent) {
  
parent.appendChild(child);
  return 
child;
};

function 
cssGet(element, styleName) {
  return 
window.getComputedStyle(element)[styleName];
}

function 
cssSet(element, styleName, styleValue) {
  if (
typeof styleValue === 'number') {
    
styleValue = styleValue.toString() + 'px';
  }
  
element.style[styleName] = styleValue;
  return 
element;
}

function 
cssMultiSet(element, obj) {
  for (var 
key in obj) {
    var 
val = obj[key];
    if (
typeof val === 'number') {
      
val = val.toString() + 'px';
    }
    
element.style[key] = val;
  }
  return 
element;
}

DOM.css = function (element, styleNameOrObject, styleValue) {
  if (
typeof styleNameOrObject === 'object') {
    
// multiple set with object
    
return cssMultiSet(element, styleNameOrObject);
  } else {
    if (
typeof styleValue === 'undefined') {
      return 
cssGet(element, styleNameOrObject);
    } else {
      return 
cssSet(element, styleNameOrObject, styleValue);
    }
  }
};

DOM.matches = function (element, query) {
  if (
typeof element.matches !== 'undefined') {
    return 
element.matches(query);
  } else {
    if (
typeof element.matchesSelector !== 'undefined') {
      return 
element.matchesSelector(query);
    } else if (
typeof element.webkitMatchesSelector !== 'undefined') {
      return 
element.webkitMatchesSelector(query);
    } else if (
typeof element.mozMatchesSelector !== 'undefined') {
      return 
element.mozMatchesSelector(query);
    } else if (
typeof element.msMatchesSelector !== 'undefined') {
      return 
element.msMatchesSelector(query);
    }
  }
};

DOM.remove = function (element) {
  if (
typeof element.remove !== 'undefined') {
    
element.remove();
  } else {
    if (
element.parentNode) {
      
element.parentNode.removeChild(element);
    }
  }
};

DOM.queryChildren = function (element, selector) {
  return Array.
prototype.filter.call(element.childNodes, function (child) {
    return 
DOM.matches(child, selector);
  });
};

module.exports = DOM;

},{}],
4:[function(require,module,exports){
'use strict';

var 
EventElement = function (element) {
  
this.element = element;
  
this.events = {};
};

EventElement.prototype.bind = function (eventName, handler) {
  if (
typeof this.events[eventName] === 'undefined') {
    
this.events[eventName] = [];
  }
  
this.events[eventName].push(handler);
  
this.element.addEventListener(eventName, handler, false);
};

EventElement.prototype.unbind = function (eventName, handler) {
  var 
isHandlerProvided = (typeof handler !== 'undefined');
  
this.events[eventName] = this.events[eventName].filter(function (hdlr) {
    if (
isHandlerProvided && hdlr !== handler) {
      return 
true;
    }
    
this.element.removeEventListener(eventName, hdlr, false);
    return 
false;
  }, 
this);
};

EventElement.prototype.unbindAll = function () {
  for (var 
name in this.events) {
    
this.unbind(name);
  }
};

var 
EventManager = function () {
  
this.eventElements = [];
};

EventManager.prototype.eventElement = function (element) {
  var 
ee = this.eventElements.filter(function (eventElement) {
    return 
eventElement.element === element;
  })[
0];
  if (
typeof ee === 'undefined') {
    
ee = new EventElement(element);
    
this.eventElements.push(ee);
  }
  return 
ee;
};

EventManager.prototype.bind = function (element, eventName, handler) {
  
this.eventElement(element).bind(eventName, handler);
};

EventManager.prototype.unbind = function (element, eventName, handler) {
  
this.eventElement(element).unbind(eventName, handler);
};

EventManager.prototype.unbindAll = function () {
  for (var 
i = 0; i < this.eventElements.length; i++) {
    
this.eventElements[i].unbindAll();
  }
};

EventManager.prototype.once = function (element, eventName, handler) {
  var 
ee = this.eventElement(element);
  var 
onceHandler = function (e) {
    
ee.unbind(eventName, onceHandler);
    
handler(e);
  };
  
ee.bind(eventName, onceHandler);
};

module.exports = EventManager;

},{}],
5:[function(require,module,exports){
'use strict';

module.exports = (function () {
  function 
s4() {
    return 
Math.floor((1 + Math.random()) * 0x10000)
               .
toString(16)
               .
substring(1);
  }
  return function () {
    return 
s4() + s4() + '-' + s4() + '-' + s4() + '-' +
           
s4() + '-' + s4() + s4() + s4();
  };
})();

},{}],
6:[function(require,module,exports){
'use strict';

var 
cls = require('./class')
  , 
d = require('./dom');

exports.toInt = function (x) {
  return 
parseInt(x, 10) || 0;
};

exports.clone = function (obj) {
  if (
obj === null) {
    return 
null;
  } else if (
typeof obj === 'object') {
    var 
result = {};
    for (var 
key in obj) {
      
result[key] = this.clone(obj[key]);
    }
    return 
result;
  } else {
    return 
obj;
  }
};

exports.extend = function (original, source) {
  var 
result = this.clone(original);
  for (var 
key in source) {
    
result[key] = this.clone(source[key]);
  }
  return 
result;
};

exports.isEditable = function (el) {
  return 
d.matches(el, "input,[contenteditable]") ||
         
d.matches(el, "select,[contenteditable]") ||
         
d.matches(el, "textarea,[contenteditable]") ||
         
d.matches(el, "button,[contenteditable]");
};

exports.removePsClasses = function (element) {
  var 
clsList = cls.list(element);
  for (var 
i = 0; i < clsList.length; i++) {
    var 
className = clsList[i];
    if (
className.indexOf('ps-') === 0) {
      
cls.remove(element, className);
    }
  }
};

exports.outerWidth = function (element) {
  return 
this.toInt(d.css(element, 'width')) +
         
this.toInt(d.css(element, 'paddingLeft')) +
         
this.toInt(d.css(element, 'paddingRight')) +
         
this.toInt(d.css(element, 'borderLeftWidth')) +
         
this.toInt(d.css(element, 'borderRightWidth'));
};

exports.startScrolling = function (element, axis) {
  
cls.add(element, 'ps-in-scrolling');
  if (
typeof axis !== 'undefined') {
    
cls.add(element, 'ps-' + axis);
  } else {
    
cls.add(element, 'ps-x');
    
cls.add(element, 'ps-y');
  }
};

exports.stopScrolling = function (element, axis) {
  
cls.remove(element, 'ps-in-scrolling');
  if (
typeof axis !== 'undefined') {
    
cls.remove(element, 'ps-' + axis);
  } else {
    
cls.remove(element, 'ps-x');
    
cls.remove(element, 'ps-y');
  }
};

exports.env = {
  
isWebKit: 'WebkitAppearance' in document.documentElement.style,
  
supportsTouch: (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch),
  
supportsIePointer: window.navigator.msMaxTouchPoints !== null
};

},{
"./class":2,"./dom":3}],7:[function(require,module,exports){
'use strict';

var 
destroy = require('./plugin/destroy')
  , 
initialize = require('./plugin/initialize')
  , 
update = require('./plugin/update');

module.exports = {
  
initialize: initialize,
  
update: update,
  
destroy: destroy
};

},{
"./plugin/destroy":9,"./plugin/initialize":17,"./plugin/update":21}],8:[function(require,module,exports){
'use strict';

module.exports = {
  
maxScrollbarLength: null,
  
minScrollbarLength: null,
  
scrollXMarginOffset: 0,
  
scrollYMarginOffset: 0,
  
stopPropagationOnClick: true,
  
suppressScrollX: false,
  
suppressScrollY: false,
  
swipePropagation: true,
  
useBothWheelAxes: false,
  
useKeyboard: true,
  
useSelectionScroll: false,
  
wheelPropagation: false,
  
wheelSpeed: 1,
  
theme: 'default'
};

},{}],
9:[function(require,module,exports){
'use strict';

var 
d = require('../lib/dom')
  , 
h = require('../lib/helper')
  , 
instances = require('./instances');

module.exports = function (element) {
  var 
i = instances.get(element);

  if (!
i) {
    return;
  }

  
i.event.unbindAll();
  
d.remove(i.scrollbarX);
  
d.remove(i.scrollbarY);
  
d.remove(i.scrollbarXRail);
  
d.remove(i.scrollbarYRail);
  
h.removePsClasses(element);

  
instances.remove(element);
};

},{
"../lib/dom":3,"../lib/helper":6,"./instances":18}],10:[function(require,module,exports){
'use strict';

var 
h = require('../../lib/helper')
  , 
instances = require('../instances')
  , 
updateGeometry = require('../update-geometry')
  , 
updateScroll = require('../update-scroll');

function 
bindClickRailHandler(element, i) {
  function 
pageOffset(el) {
    return 
el.getBoundingClientRect();
  }
  var 
stopPropagation = window.Event.prototype.stopPropagation.bind;

  if (
i.settings.stopPropagationOnClick) {
    
i.event.bind(i.scrollbarY, 'click', stopPropagation);
  }
  
i.event.bind(i.scrollbarYRail, 'click', function (e) {
    var 
halfOfScrollbarLength = h.toInt(i.scrollbarYHeight / 2);
    var 
positionTop = i.railYRatio * (e.pageY - window.pageYOffset - pageOffset(i.scrollbarYRail).top - halfOfScrollbarLength);
    var 
maxPositionTop = i.railYRatio * (i.railYHeight - i.scrollbarYHeight);
    var 
positionRatio = positionTop / maxPositionTop;

    if (
positionRatio < 0) {
      
positionRatio = 0;
    } else if (
positionRatio > 1) {
      
positionRatio = 1;
    }

    
updateScroll(element, 'top', (i.contentHeight - i.containerHeight) * positionRatio);
    
updateGeometry(element);

    
e.stopPropagation();
  });

  if (
i.settings.stopPropagationOnClick) {
    
i.event.bind(i.scrollbarX, 'click', stopPropagation);
  }
  
i.event.bind(i.scrollbarXRail, 'click', function (e) {
    var 
halfOfScrollbarLength = h.toInt(i.scrollbarXWidth / 2);
    var 
positionLeft = i.railXRatio * (e.pageX - window.pageXOffset - pageOffset(i.scrollbarXRail).left - halfOfScrollbarLength);
    var 
maxPositionLeft = i.railXRatio * (i.railXWidth - i.scrollbarXWidth);
    var 
positionRatio = positionLeft / maxPositionLeft;

    if (
positionRatio < 0) {
      
positionRatio = 0;
    } else if (
positionRatio > 1) {
      
positionRatio = 1;
    }

    
updateScroll(element, 'left', ((i.contentWidth - i.containerWidth) * positionRatio) - i.negativeScrollAdjustment);
    
updateGeometry(element);

    
e.stopPropagation();
  });
}

module.exports = function (element) {
  var 
i = instances.get(element);
  
bindClickRailHandler(element, i);
};

},{
"../../lib/helper":6,"../instances":18,"../update-geometry":19,"../update-scroll":20}],11:[function(require,module,exports){
'use strict';

var 
d = require('../../lib/dom')
  , 
h = require('../../lib/helper')
  , 
instances = require('../instances')
  , 
updateGeometry = require('../update-geometry')
  , 
updateScroll = require('../update-scroll');

function 
bindMouseScrollXHandler(element, i) {
  var 
currentLeft = null;
  var 
currentPageX = null;

  function 
updateScrollLeft(deltaX) {
    var 
newLeft = currentLeft + (deltaX * i.railXRatio);
    var 
maxLeft = Math.max(0, i.scrollbarXRail.getBoundingClientRect().left) + (i.railXRatio * (i.railXWidth - i.scrollbarXWidth));

    if (
newLeft < 0) {
      
i.scrollbarXLeft = 0;
    } else if (
newLeft > maxLeft) {
      
i.scrollbarXLeft = maxLeft;
    } else {
      
i.scrollbarXLeft = newLeft;
    }

    var 
scrollLeft = h.toInt(i.scrollbarXLeft * (i.contentWidth - i.containerWidth) / (i.containerWidth - (i.railXRatio * i.scrollbarXWidth))) - i.negativeScrollAdjustment;
    
updateScroll(element, 'left', scrollLeft);
  }

  var 
mouseMoveHandler = function (e) {
    
updateScrollLeft(e.pageX - currentPageX);
    
updateGeometry(element);
    
e.stopPropagation();
    
e.preventDefault();
  };

  var 
mouseUpHandler = function () {
    
h.stopScrolling(element, 'x');
    
i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);
  };

  
i.event.bind(i.scrollbarX, 'mousedown', function (e) {
    
currentPageX = e.pageX;
    
currentLeft = h.toInt(d.css(i.scrollbarX, 'left')) * i.railXRatio;
    
h.startScrolling(element, 'x');

    
i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);
    
i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);

    
e.stopPropagation();
    
e.preventDefault();
  });
}

function 
bindMouseScrollYHandler(element, i) {
  var 
currentTop = null;
  var 
currentPageY = null;

  function 
updateScrollTop(deltaY) {
    var 
newTop = currentTop + (deltaY * i.railYRatio);
    var 
maxTop = Math.max(0, i.scrollbarYRail.getBoundingClientRect().top) + (i.railYRatio * (i.railYHeight - i.scrollbarYHeight));

    if (
newTop < 0) {
      
i.scrollbarYTop = 0;
    } else if (
newTop > maxTop) {
      
i.scrollbarYTop = maxTop;
    } else {
      
i.scrollbarYTop = newTop;
    }

    var 
scrollTop = h.toInt(i.scrollbarYTop * (i.contentHeight - i.containerHeight) / (i.containerHeight - (i.railYRatio * i.scrollbarYHeight)));
    
updateScroll(element, 'top', scrollTop);
  }

  var 
mouseMoveHandler = function (e) {
    
updateScrollTop(e.pageY - currentPageY);
    
updateGeometry(element);
    
e.stopPropagation();
    
e.preventDefault();
  };

  var 
mouseUpHandler = function () {
    
h.stopScrolling(element, 'y');
    
i.event.unbind(i.ownerDocument, 'mousemove', mouseMoveHandler);
  };

  
i.event.bind(i.scrollbarY, 'mousedown', function (e) {
    
currentPageY = e.pageY;
    
currentTop = h.toInt(d.css(i.scrollbarY, 'top')) * i.railYRatio;
    
h.startScrolling(element, 'y');

    
i.event.bind(i.ownerDocument, 'mousemove', mouseMoveHandler);
    
i.event.once(i.ownerDocument, 'mouseup', mouseUpHandler);

    
e.stopPropagation();
    
e.preventDefault();
  });
}

module.exports = function (element) {
  var 
i = instances.get(element);
  
bindMouseScrollXHandler(element, i);
  
bindMouseScrollYHandler(element, i);
};

},{
"../../lib/dom":3,"../../lib/helper":6,"../instances":18,"../update-geometry":19,"../update-scroll":20}],12:[function(require,module,exports){
'use strict';

var 
h = require('../../lib/helper')
  , 
d = require('../../lib/dom')
  , 
instances = require('../instances')
  , 
updateGeometry = require('../update-geometry')
  , 
updateScroll = require('../update-scroll');

function 
bindKeyboardHandler(element, i) {
  var 
hovered = false;
  
i.event.bind(element, 'mouseenter', function () {
    
hovered = true;
  });
  
i.event.bind(element, 'mouseleave', function () {
    
hovered = false;
  });

  var 
shouldPrevent = false;
  function 
shouldPreventDefault(deltaX, deltaY) {
    var 
scrollTop = element.scrollTop;
    if (
deltaX === 0) {
      if (!
i.scrollbarYActive) {
        return 
false;
      }
      if ((
scrollTop === 0 && deltaY > 0) || (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)) {
        return !
i.settings.wheelPropagation;
      }
    }

    var 
scrollLeft = element.scrollLeft;
    if (
deltaY === 0) {
      if (!
i.scrollbarXActive) {
        return 
false;
      }
      if ((
scrollLeft === 0 && deltaX < 0) || (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)) {
        return !
i.settings.wheelPropagation;
      }
    }
    return 
true;
  }

  
i.event.bind(i.ownerDocument, 'keydown', function (e) {
    if (
e.isDefaultPrevented && e.isDefaultPrevented()) {
      return;
    }

    var 
focused = d.matches(i.scrollbarX, ':focus') ||
                  
d.matches(i.scrollbarY, ':focus');

    if (!
hovered && !focused) {
      return;
    }

    var 
activeElement = document.activeElement ? document.activeElement : i.ownerDocument.activeElement;
    if (
activeElement) {
      
// go deeper if element is a webcomponent
      
while (activeElement.shadowRoot) {
        
activeElement = activeElement.shadowRoot.activeElement;
      }
      if (
h.isEditable(activeElement)) {
        return;
      }
    }

    var 
deltaX = 0;
    var 
deltaY = 0;

    switch (
e.which) {
    case 
37: // left
      
deltaX = -30;
      break;
    case 
38: // up
      
deltaY = 30;
      break;
    case 
39: // right
      
deltaX = 30;
      break;
    case 
40: // down
      
deltaY = -30;
      break;
    case 
33: // page up
      
deltaY = 90;
      break;
    case 
32: // space bar
      
if (e.shiftKey) {
        
deltaY = 90;
      } else {
        
deltaY = -90;
      }
      break;
    case 
34: // page down
      
deltaY = -90;
      break;
    case 
35: // end
      
if (e.ctrlKey) {
        
deltaY = -i.contentHeight;
      } else {
        
deltaY = -i.containerHeight;
      }
      break;
    case 
36: // home
      
if (e.ctrlKey) {
        
deltaY = element.scrollTop;
      } else {
        
deltaY = i.containerHeight;
      }
      break;
    default:
      return;
    }

    
updateScroll(element, 'top', element.scrollTop - deltaY);
    
updateScroll(element, 'left', element.scrollLeft + deltaX);
    
updateGeometry(element);

    
shouldPrevent = shouldPreventDefault(deltaX, deltaY);
    if (
shouldPrevent) {
      
e.preventDefault();
    }
  });
}

module.exports = function (element) {
  var 
i = instances.get(element);
  
bindKeyboardHandler(element, i);
};

},{
"../../lib/dom":3,"../../lib/helper":6,"../instances":18,"../update-geometry":19,"../update-scroll":20}],13:[function(require,module,exports){
'use strict';

var 
instances = require('../instances')
  , 
updateGeometry = require('../update-geometry')
  , 
updateScroll = require('../update-scroll');

function 
bindMouseWheelHandler(element, i) {
  var 
shouldPrevent = false;

  function 
shouldPreventDefault(deltaX, deltaY) {
    var 
scrollTop = element.scrollTop;
    if (
deltaX === 0) {
      if (!
i.scrollbarYActive) {
        return 
false;
      }
      if ((
scrollTop === 0 && deltaY > 0) || (scrollTop >= i.contentHeight - i.containerHeight && deltaY < 0)) {
        return !
i.settings.wheelPropagation;
      }
    }

    var 
scrollLeft = element.scrollLeft;
    if (
deltaY === 0) {
      if (!
i.scrollbarXActive) {
        return 
false;
      }
      if ((
scrollLeft === 0 && deltaX < 0) || (scrollLeft >= i.contentWidth - i.containerWidth && deltaX > 0)) {
        return !
i.settings.wheelPropagation;
      }
    }
    return 
true;
  }

  function 
getDeltaFromEvent(e) {
    var 
deltaX = e.deltaX;
    var 
deltaY = -1 * e.deltaY;

    if (
typeof deltaX === "undefined" || typeof deltaY === "undefined") {
      
// OS X Safari
      
deltaX = -1 * e.wheelDeltaX / 6;
      
deltaY = e.wheelDeltaY / 6;
    }

    if (
e.deltaMode && e.deltaMode === 1) {
      
// Firefox in deltaMode 1: Line scrolling
      
deltaX *= 10;
      
deltaY *= 10;
    }

    if (
deltaX !== deltaX && deltaY !== deltaY/* NaN checks */) {
      
// IE in some mouse drivers
      
deltaX = 0;
      
deltaY = e.wheelDelta;
    }

    return [
deltaX, deltaY];
  }

  function 
shouldBeConsumedByTextarea(deltaX, deltaY) {
    var 
hoveredTextarea = element.querySelector('textarea:hover');
    if (
hoveredTextarea) {
      var 
maxScrollTop = hoveredTextarea.scrollHeight - hoveredTextarea.clientHeight;
      if (
maxScrollTop > 0) {
        if (!(
hoveredTextarea.scrollTop === 0 && deltaY > 0) &&
            !(
hoveredTextarea.scrollTop === maxScrollTop && deltaY < 0)) {
          return 
true;
        }
      }
      var 
maxScrollLeft = hoveredTextarea.scrollLeft - hoveredTextarea.clientWidth;
      if (
maxScrollLeft > 0) {
        if (!(
hoveredTextarea.scrollLeft === 0 && deltaX < 0) &&
            !(
hoveredTextarea.scrollLeft === maxScrollLeft && deltaX > 0)) {
          return 
true;
        }
      }
    }
    return 
false;
  }

  function 
mousewheelHandler(e) {
    var 
delta = getDeltaFromEvent(e);

    var 
deltaX = delta[0];
    var 
deltaY = delta[1];

    if (
shouldBeConsumedByTextarea(deltaX, deltaY)) {
      return;
    }

    
shouldPrevent = false;
    if (!
i.settings.useBothWheelAxes) {
      
// deltaX will only be used for horizontal scrolling and deltaY will
      // only be used for vertical scrolling - this is the default
      
updateScroll(element, 'top', element.scrollTop - (deltaY * i.settings.wheelSpeed));
      
updateScroll(element, 'left', element.scrollLeft + (deltaX * i.settings.wheelSpeed));
    } else if (
i.scrollbarYActive && !i.scrollbarXActive) {
      
// only vertical scrollbar is active and useBothWheelAxes option is
      // active, so let's scroll vertical bar using both mouse wheel axes
      
if (deltaY) {
        
updateScroll(element, 'top', element.scrollTop - (deltaY * i.settings.wheelSpeed));
      } else {
        
updateScroll(element, 'top', element.scrollTop + (deltaX * i.settings.wheelSpeed));
      }
      
shouldPrevent = true;
    } else if (
i.scrollbarXActive && !i.scrollbarYActive) {
      
// useBothWheelAxes and only horizontal bar is active, so use both
      // wheel axes for horizontal bar
      
if (deltaX) {
        
updateScroll(element, 'left', element.scrollLeft + (deltaX * i.settings.wheelSpeed));
      } else {
        
updateScroll(element, 'left', element.scrollLeft - (deltaY * i.settings.wheelSpeed));
      }
      
shouldPrevent = true;
    }

    
updateGeometry(element);

    
shouldPrevent = (shouldPrevent || shouldPreventDefault(deltaX, deltaY));
    if (
shouldPrevent) {
      
e.stopPropagation();
      
e.preventDefault();
    }
  }

  if (
typeof window.onwheel !== "undefined") {
    
i.event.bind(element, 'wheel', mousewheelHandler);
  } else if (
typeof window.onmousewheel !== "undefined") {
    
i.event.bind(element, 'mousewheel', mousewheelHandler);
  }
}

module.exports = function (element) {
  var 
i = instances.get(element);
  
bindMouseWheelHandler(element, i);
};

},{
"../instances":18,"../update-geometry":19,"../update-scroll":20}],14:[function(require,module,exports){
'use strict';

var 
instances = require('../instances')
  , 
updateGeometry = require('../update-geometry');

function 
bindNativeScrollHandler(element, i) {
  
i.event.bind(element, 'scroll', function () {
    
updateGeometry(element);
  });
}

module.exports = function (element) {
  var 
i = instances.get(element);
  
bindNativeScrollHandler(element, i);
};

},{
"../instances":18,"../update-geometry":19}],15:[function(require,module,exports){
'use strict';

var 
h = require('../../lib/helper')
  , 
instances = require('../instances')
  , 
updateGeometry = require('../update-geometry')
  , 
updateScroll = require('../update-scroll');

function 
bindSelectionHandler(element, i) {
  function 
getRangeNode() {
    var 
selection = window.getSelection ? window.getSelection() :
                    
document.getSelection ? document.getSelection() : '';
    if (
selection.toString().length === 0) {
      return 
null;
    } else {
      return 
selection.getRangeAt(0).commonAncestorContainer;
    }
  }

  var 
scrollingLoop = null;
  var 
scrollDiff = {top: 0, left: 0};
  function 
startScrolling() {
    if (!
scrollingLoop) {
      
scrollingLoop = setInterval(function () {
        if (!
instances.get(element)) {
          
clearInterval(scrollingLoop);
          return;
        }

        
updateScroll(element, 'top', element.scrollTop + scrollDiff.top);
        
updateScroll(element, 'left', element.scrollLeft + scrollDiff.left);
        
updateGeometry(element);
      }, 
50); // every .1 sec
    
}
  }
  function 
stopScrolling() {
    if (
scrollingLoop) {
      
clearInterval(scrollingLoop);
      
scrollingLoop = null;
    }
    
h.stopScrolling(element);
  }

  var 
isSelected = false;
  
i.event.bind(i.ownerDocument, 'selectionchange', function () {
    if (
element.contains(getRangeNode())) {
      
isSelected = true;
    } else {
      
isSelected = false;
      
stopScrolling();
    }
  });
  
i.event.bind(window, 'mouseup', function () {
    if (
isSelected) {
      
isSelected = false;
      
stopScrolling();
    }
  });

  
i.event.bind(window, 'mousemove', function (e) {
    if (
isSelected) {
      var 
mousePosition = {x: e.pageX, y: e.pageY};
      var 
containerGeometry = {
        
left: element.offsetLeft,
        
right: element.offsetLeft + element.offsetWidth,
        
top: element.offsetTop,
        
bottom: element.offsetTop + element.offsetHeight
      
};

      if (
mousePosition.x < containerGeometry.left + 3) {
        
scrollDiff.left = -5;
        
h.startScrolling(element, 'x');
      } else if (
mousePosition.x > containerGeometry.right - 3) {
        
scrollDiff.left = 5;
        
h.startScrolling(element, 'x');
      } else {
        
scrollDiff.left = 0;
      }

      if (
mousePosition.y < containerGeometry.top + 3) {
        if (
containerGeometry.top + 3 - mousePosition.y < 5) {
          
scrollDiff.top = -5;
        } else {
          
scrollDiff.top = -20;
        }
        
h.startScrolling(element, 'y');
      } else if (
mousePosition.y > containerGeometry.bottom - 3) {
        if (
mousePosition.y - containerGeometry.bottom + 3 < 5) {
          
scrollDiff.top = 5;
        } else {
          
scrollDiff.top = 20;
        }
        
h.startScrolling(element, 'y');
      } else {
        
scrollDiff.top = 0;
      }

      if (
scrollDiff.top === 0 && scrollDiff.left === 0) {
        
stopScrolling();
      } else {
        
startScrolling();
      }
    }
  });
}

module.exports = function (element) {
  var 
i = instances.get(element);
  
bindSelectionHandler(element, i);
};

},{
"../../lib/helper":6,"../instances":18,"../update-geometry":19,"../update-scroll":20}],16:[function(require,module,exports){
'use strict';

var 
instances = require('../instances')
  , 
updateGeometry = require('../update-geometry')
  , 
updateScroll = require('../update-scroll');

function 
bindTouchHandler(element, i, supportsTouch, supportsIePointer) {
  function 
shouldPreventDefault(deltaX, deltaY) {
    var 
scrollTop = element.scrollTop;
    var 
scrollLeft = element.scrollLeft;
    var 
magnitudeX = Math.abs(deltaX);
    var 
magnitudeY = Math.abs(deltaY);

    if (
magnitudeY > magnitudeX) {
      
// user is perhaps trying to swipe up/down the page

      
if (((deltaY < 0) && (scrollTop === i.contentHeight - i.containerHeight)) ||
          ((
deltaY > 0) && (scrollTop === 0))) {
        return !
i.settings.swipePropagation;
      }
    } else if (
magnitudeX > magnitudeY) {
      
// user is perhaps trying to swipe left/right across the page

      
if (((deltaX < 0) && (scrollLeft === i.contentWidth - i.containerWidth)) ||
          ((
deltaX > 0) && (scrollLeft === 0))) {
        return !
i.settings.swipePropagation;
      }
    }

    return 
true;
  }

  function 
applyTouchMove(differenceX, differenceY) {
    
updateScroll(element, 'top', element.scrollTop - differenceY);
    
updateScroll(element, 'left', element.scrollLeft - differenceX);

    
updateGeometry(element);
  }

  var 
startOffset = {};
  var 
startTime = 0;
  var 
speed = {};
  var 
easingLoop = null;
  var 
inGlobalTouch = false;
  var 
inLocalTouch = false;

  function 
globalTouchStart() {
    
inGlobalTouch = true;
  }
  function 
globalTouchEnd() {
    
inGlobalTouch = false;
  }

  function 
getTouch(e) {
    if (
e.targetTouches) {
      return 
e.targetTouches[0];
    } else {
      
// Maybe IE pointer
      
return e;
    }
  }
  function 
shouldHandle(e) {
    if (
e.targetTouches && e.targetTouches.length === 1) {
      return 
true;
    }
    if (
e.pointerType && e.pointerType !== 'mouse' && e.pointerType !== e.MSPOINTER_TYPE_MOUSE) {
      return 
true;
    }
    return 
false;
  }
  function 
touchStart(e) {
    if (
shouldHandle(e)) {
      
inLocalTouch = true;

      var 
touch = getTouch(e);

      
startOffset.pageX = touch.pageX;
      
startOffset.pageY = touch.pageY;

      
startTime = (new Date()).getTime();

      if (
easingLoop !== null) {
        
clearInterval(easingLoop);
      }

      
e.stopPropagation();
    }
  }
  function 
touchMove(e) {
    if (!
inGlobalTouch && inLocalTouch && shouldHandle(e)) {
      var 
touch = getTouch(e);

      var 
currentOffset = {pageX: touch.pageX, pageY: touch.pageY};

      var 
differenceX = currentOffset.pageX - startOffset.pageX;
      var 
differenceY = currentOffset.pageY - startOffset.pageY;

      
applyTouchMove(differenceX, differenceY);
      
startOffset = currentOffset;

      var 
currentTime = (new Date()).getTime();

      var 
timeGap = currentTime - startTime;
      if (
timeGap > 0) {
        
speed.x = differenceX / timeGap;
        
speed.y = differenceY / timeGap;
        
startTime = currentTime;
      }

      if (
shouldPreventDefault(differenceX, differenceY)) {
        
e.stopPropagation();
        
e.preventDefault();
      }
    }
  }
  function 
touchEnd() {
    if (!
inGlobalTouch && inLocalTouch) {
      
inLocalTouch = false;

      
clearInterval(easingLoop);
      
easingLoop = setInterval(function () {
        if (!
instances.get(element)) {
          
clearInterval(easingLoop);
          return;
        }

        if (
Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {
          
clearInterval(easingLoop);
          return;
        }

        
applyTouchMove(speed.x * 30, speed.y * 30);

        
speed.x *= 0.8;
        
speed.y *= 0.8;
      }, 
10);
    }
  }

  if (
supportsTouch) {
    
i.event.bind(window, 'touchstart', globalTouchStart);
    
i.event.bind(window, 'touchend', globalTouchEnd);
    
i.event.bind(element, 'touchstart', touchStart);
    
i.event.bind(element, 'touchmove', touchMove);
    
i.event.bind(element, 'touchend', touchEnd);
  }

  if (
supportsIePointer) {
    if (
window.PointerEvent) {
      
i.event.bind(window, 'pointerdown', globalTouchStart);
      
i.event.bind(window, 'pointerup', globalTouchEnd);
      
i.event.bind(element, 'pointerdown', touchStart);
      
i.event.bind(element, 'pointermove', touchMove);
      
i.event.bind(element, 'pointerup', touchEnd);
    } else if (
window.MSPointerEvent) {
      
i.event.bind(window, 'MSPointerDown', globalTouchStart);
      
i.event.bind(window, 'MSPointerUp', globalTouchEnd);
      
i.event.bind(element, 'MSPointerDown', touchStart);
      
i.event.bind(element, 'MSPointerMove', touchMove);
      
i.event.bind(element, 'MSPointerUp', touchEnd);
    }
  }
}

module.exports = function (element, supportsTouch, supportsIePointer) {
  var 
i = instances.get(element);
  
bindTouchHandler(element, i, supportsTouch, supportsIePointer);
};

},{
"../instances":18,"../update-geometry":19,"../update-scroll":20}],17:[function(require,module,exports){
'use strict';

var 
cls = require('../lib/class')
  , 
h = require('../lib/helper')
  , 
instances = require('./instances')
  , 
updateGeometry = require('./update-geometry');

// Handlers
var clickRailHandler = require('./handler/click-rail')
  , 
dragScrollbarHandler = require('./handler/drag-scrollbar')
  , 
keyboardHandler = require('./handler/keyboard')
  , 
mouseWheelHandler = require('./handler/mouse-wheel')
  , 
nativeScrollHandler = require('./handler/native-scroll')
  , 
selectionHandler = require('./handler/selection')
  , 
touchHandler = require('./handler/touch');

module.exports = function (element, userSettings) {
  
userSettings = typeof userSettings === 'object' ? userSettings : {};

  
cls.add(element, 'ps-container');

  
// Create a plugin instance.
  
var i = instances.add(element);

  
i.settings = h.extend(i.settings, userSettings);
  
cls.add(element, 'ps-theme-' + i.settings.theme);

  
clickRailHandler(element);
  
dragScrollbarHandler(element);
  
mouseWheelHandler(element);
  
nativeScrollHandler(element);

  if (
i.settings.useSelectionScroll) {
    
selectionHandler(element);
  }

  if (
h.env.supportsTouch || h.env.supportsIePointer) {
    
touchHandler(element, h.env.supportsTouch, h.env.supportsIePointer);
  }
  if (
i.settings.useKeyboard) {
    
keyboardHandler(element);
  }

  
updateGeometry(element);
};

},{
"../lib/class":2,"../lib/helper":6,"./handler/click-rail":10,"./handler/drag-scrollbar":11,"./handler/keyboard":12,"./handler/mouse-wheel":13,"./handler/native-scroll":14,"./handler/selection":15,"./handler/touch":16,"./instances":18,"./update-geometry":19}],18:[function(require,module,exports){
'use strict';

var 
cls = require('../lib/class')
  , 
d = require('../lib/dom')
  , 
defaultSettings = require('./default-setting')
  , 
EventManager = require('../lib/event-manager')
  , 
guid = require('../lib/guid')
  , 
h = require('../lib/helper');

var 
instances = {};

function 
Instance(element) {
  var 
i = this;

  
i.settings = h.clone(defaultSettings);
  
i.containerWidth = null;
  
i.containerHeight = null;
  
i.contentWidth = null;
  
i.contentHeight = null;

  
i.isRtl = d.css(element, 'direction') === "rtl";
  
i.isNegativeScroll = (function () {
    var 
originalScrollLeft = element.scrollLeft;
    var 
result = null;
    
element.scrollLeft = -1;
    
result = element.scrollLeft < 0;
    
element.scrollLeft = originalScrollLeft;
    return 
result;
  })();
  
i.negativeScrollAdjustment = i.isNegativeScroll ? element.scrollWidth - element.clientWidth : 0;
  
i.event = new EventManager();
  
i.ownerDocument = element.ownerDocument || document;

  function 
focus() {
    
cls.add(element, 'ps-focus');
  }

  function 
blur() {
    
cls.remove(element, 'ps-focus');
  }

  
i.scrollbarXRail = d.appendTo(d.e('div', 'ps-scrollbar-x-rail'), element);
  
i.scrollbarX = d.appendTo(d.e('div', 'ps-scrollbar-x'), i.scrollbarXRail);
  
i.scrollbarX.setAttribute('tabindex', 0);
  
i.event.bind(i.scrollbarX, 'focus', focus);
  
i.event.bind(i.scrollbarX, 'blur', blur);
  
i.scrollbarXActive = null;
  
i.scrollbarXWidth = null;
  
i.scrollbarXLeft = null;
  
i.scrollbarXBottom = h.toInt(d.css(i.scrollbarXRail, 'bottom'));
  
i.isScrollbarXUsingBottom = i.scrollbarXBottom === i.scrollbarXBottom; // !isNaN
  
i.scrollbarXTop = i.isScrollbarXUsingBottom ? null : h.toInt(d.css(i.scrollbarXRail, 'top'));
  
i.railBorderXWidth = h.toInt(d.css(i.scrollbarXRail, 'borderLeftWidth')) + h.toInt(d.css(i.scrollbarXRail, 'borderRightWidth'));
  
// Set rail to display:block to calculate margins
  
d.css(i.scrollbarXRail, 'display', 'block');
  
i.railXMarginWidth = h.toInt(d.css(i.scrollbarXRail, 'marginLeft')) + h.toInt(d.css(i.scrollbarXRail, 'marginRight'));
  
d.css(i.scrollbarXRail, 'display', '');
  
i.railXWidth = null;
  
i.railXRatio = null;

  
i.scrollbarYRail = d.appendTo(d.e('div', 'ps-scrollbar-y-rail'), element);
  
i.scrollbarY = d.appendTo(d.e('div', 'ps-scrollbar-y'), i.scrollbarYRail);
  
i.scrollbarY.setAttribute('tabindex', 0);
  
i.event.bind(i.scrollbarY, 'focus', focus);
  
i.event.bind(i.scrollbarY, 'blur', blur);
  
i.scrollbarYActive = null;
  
i.scrollbarYHeight = null;
  
i.scrollbarYTop = null;
  
i.scrollbarYRight = h.toInt(d.css(i.scrollbarYRail, 'right'));
  
i.isScrollbarYUsingRight = i.scrollbarYRight === i.scrollbarYRight; // !isNaN
  
i.scrollbarYLeft = i.isScrollbarYUsingRight ? null : h.toInt(d.css(i.scrollbarYRail, 'left'));
  
i.scrollbarYOuterWidth = i.isRtl ? h.outerWidth(i.scrollbarY) : null;
  
i.railBorderYWidth = h.toInt(d.css(i.scrollbarYRail, 'borderTopWidth')) + h.toInt(d.css(i.scrollbarYRail, 'borderBottomWidth'));
  
d.css(i.scrollbarYRail, 'display', 'block');
  
i.railYMarginHeight = h.toInt(d.css(i.scrollbarYRail, 'marginTop')) + h.toInt(d.css(i.scrollbarYRail, 'marginBottom'));
  
d.css(i.scrollbarYRail, 'display', '');
  
i.railYHeight = null;
  
i.railYRatio = null;
}

function 
getId(element) {
  if (
typeof element.dataset === 'undefined') {
    return 
element.getAttribute('data-ps-id');
  } else {
    return 
element.dataset.psId;
  }
}

function 
setId(element, id) {
  if (
typeof element.dataset === 'undefined') {
    
element.setAttribute('data-ps-id', id);
  } else {
    
element.dataset.psId = id;
  }
}

function 
removeId(element) {
  if (
typeof element.dataset === 'undefined') {
    
element.removeAttribute('data-ps-id');
  } else {
    
delete element.dataset.psId;
  }
}

exports.add = function (element) {
  var 
newId = guid();
  
setId(element, newId);
  
instances[newId] = new Instance(element);
  return 
instances[newId];
};

exports.remove = function (element) {
  
delete instances[getId(element)];
  
removeId(element);
};

exports.get = function (element) {
  return 
instances[getId(element)];
};

},{
"../lib/class":2,"../lib/dom":3,"../lib/event-manager":4,"../lib/guid":5,"../lib/helper":6,"./default-setting":8}],19:[function(require,module,exports){
'use strict';

var 
cls = require('../lib/class')
  , 
d = require('../lib/dom')
  , 
h = require('../lib/helper')
  , 
instances = require('./instances')
  , 
updateScroll = require('./update-scroll');

function 
getThumbSize(i, thumbSize) {
  if (
i.settings.minScrollbarLength) {
    
thumbSize = Math.max(thumbSize, i.settings.minScrollbarLength);
  }
  if (
i.settings.maxScrollbarLength) {
    
thumbSize = Math.min(thumbSize, i.settings.maxScrollbarLength);
  }
  return 
thumbSize;
}

function 
updateCss(element, i) {
  var 
xRailOffset = {width: i.railXWidth};
  if (
i.isRtl) {
    
xRailOffset.left = i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth - i.contentWidth;
  } else {
    
xRailOffset.left = element.scrollLeft;
  }
  if (
i.isScrollbarXUsingBottom) {
    
xRailOffset.bottom = i.scrollbarXBottom - element.scrollTop;
  } else {
    
xRailOffset.top = i.scrollbarXTop + element.scrollTop;
  }
  
d.css(i.scrollbarXRail, xRailOffset);

  var 
yRailOffset = {top: element.scrollTop, height: i.railYHeight};
  if (
i.isScrollbarYUsingRight) {
    if (
i.isRtl) {
      
yRailOffset.right = i.contentWidth - (i.negativeScrollAdjustment + element.scrollLeft) - i.scrollbarYRight - i.scrollbarYOuterWidth;
    } else {
      
yRailOffset.right = i.scrollbarYRight - element.scrollLeft;
    }
  } else {
    if (
i.isRtl) {
      
yRailOffset.left = i.negativeScrollAdjustment + element.scrollLeft + i.containerWidth * 2 - i.contentWidth - i.scrollbarYLeft - i.scrollbarYOuterWidth;
    } else {
      
yRailOffset.left = i.scrollbarYLeft + element.scrollLeft;
    }
  }
  
d.css(i.scrollbarYRail, yRailOffset);

  
d.css(i.scrollbarX, {left: i.scrollbarXLeft, width: i.scrollbarXWidth - i.railBorderXWidth});
  
d.css(i.scrollbarY, {top: i.scrollbarYTop, height: i.scrollbarYHeight - i.railBorderYWidth});
}

module.exports = function (element) {
  var 
i = instances.get(element);

  
i.containerWidth = element.clientWidth;
  
i.containerHeight = element.clientHeight;
  
i.contentWidth = element.scrollWidth;
  
i.contentHeight = element.scrollHeight;

  var 
existingRails;
  if (!
element.contains(i.scrollbarXRail)) {
    
existingRails = d.queryChildren(element, '.ps-scrollbar-x-rail');
    if (
existingRails.length > 0) {
      
existingRails.forEach(function (rail) {
        
d.remove(rail);
      });
    }
    
d.appendTo(i.scrollbarXRail, element);
  }
  if (!
element.contains(i.scrollbarYRail)) {
    
existingRails = d.queryChildren(element, '.ps-scrollbar-y-rail');
    if (
existingRails.length > 0) {
      
existingRails.forEach(function (rail) {
        
d.remove(rail);
      });
    }
    
d.appendTo(i.scrollbarYRail, element);
  }

  if (!
i.settings.suppressScrollX && i.containerWidth + i.settings.scrollXMarginOffset < i.contentWidth) {
    
i.scrollbarXActive = true;
    
i.railXWidth = i.containerWidth - i.railXMarginWidth;
    
i.railXRatio = i.containerWidth / i.railXWidth;
    
i.scrollbarXWidth = getThumbSize(i, h.toInt(i.railXWidth * i.containerWidth / i.contentWidth));
    
i.scrollbarXLeft = h.toInt((i.negativeScrollAdjustment + element.scrollLeft) * (i.railXWidth - i.scrollbarXWidth) / (i.contentWidth - i.containerWidth));
  } else {
    
i.scrollbarXActive = false;
  }

  if (!
i.settings.suppressScrollY && i.containerHeight + i.settings.scrollYMarginOffset < i.contentHeight) {
    
i.scrollbarYActive = true;
    
i.railYHeight = i.containerHeight - i.railYMarginHeight;
    
i.railYRatio = i.containerHeight / i.railYHeight;
    
i.scrollbarYHeight = getThumbSize(i, h.toInt(i.railYHeight * i.containerHeight / i.contentHeight));
    
i.scrollbarYTop = h.toInt(element.scrollTop * (i.railYHeight - i.scrollbarYHeight) / (i.contentHeight - i.containerHeight));
  } else {
    
i.scrollbarYActive = false;
  }

  if (
i.scrollbarXLeft >= i.railXWidth - i.scrollbarXWidth) {
    
i.scrollbarXLeft = i.railXWidth - i.scrollbarXWidth;
  }
  if (
i.scrollbarYTop >= i.railYHeight - i.scrollbarYHeight) {
    
i.scrollbarYTop = i.railYHeight - i.scrollbarYHeight;
  }

  
updateCss(element, i);

  if (
i.scrollbarXActive) {
    
cls.add(element, 'ps-active-x');
  } else {
    
cls.remove(element, 'ps-active-x');
    
i.scrollbarXWidth = 0;
    
i.scrollbarXLeft = 0;
    
updateScroll(element, 'left', 0);
  }
  if (
i.scrollbarYActive) {
    
cls.add(element, 'ps-active-y');
  } else {
    
cls.remove(element, 'ps-active-y');
    
i.scrollbarYHeight = 0;
    
i.scrollbarYTop = 0;
    
updateScroll(element, 'top', 0);
  }
};

},{
"../lib/class":2,"../lib/dom":3,"../lib/helper":6,"./instances":18,"./update-scroll":20}],20:[function(require,module,exports){
'use strict';

var 
instances = require('./instances');

var 
upEvent = document.createEvent('Event')
  , 
downEvent = document.createEvent('Event')
  , 
leftEvent = document.createEvent('Event')
  , 
rightEvent = document.createEvent('Event')
  , 
yEvent = document.createEvent('Event')
  , 
xEvent = document.createEvent('Event')
  , 
xStartEvent = document.createEvent('Event')
  , 
xEndEvent = document.createEvent('Event')
  , 
yStartEvent = document.createEvent('Event')
  , 
yEndEvent = document.createEvent('Event')
  , 
lastTop
  
, lastLeft;

upEvent.initEvent('ps-scroll-up', true, true);
downEvent.initEvent('ps-scroll-down', true, true);
leftEvent.initEvent('ps-scroll-left', true, true);
rightEvent.initEvent('ps-scroll-right', true, true);
yEvent.initEvent('ps-scroll-y', true, true);
xEvent.initEvent('ps-scroll-x', true, true);
xStartEvent.initEvent('ps-x-reach-start', true, true);
xEndEvent.initEvent('ps-x-reach-end', true, true);
yStartEvent.initEvent('ps-y-reach-start', true, true);
yEndEvent.initEvent('ps-y-reach-end', true, true);

module.exports = function (element, axis, value) {
  if (
typeof element === 'undefined') {
    throw 
'You must provide an element to the update-scroll function';
  }

  if (
typeof axis === 'undefined') {
    throw 
'You must provide an axis to the update-scroll function';
  }

  if (
typeof value === 'undefined') {
    throw 
'You must provide a value to the update-scroll function';
  }

  if (
axis === 'top' && value <= 0) {
    
element.scrollTop = value = 0; // don't allow negative scroll
    
element.dispatchEvent(yStartEvent);
  }

  if (
axis === 'left' && value <= 0) {
    
element.scrollLeft = value = 0; // don't allow negative scroll
    
element.dispatchEvent(xStartEvent);
  }

  var 
i = instances.get(element);

  if (
axis === 'top' && value >= i.contentHeight - i.containerHeight) {
    
element.scrollTop = value = i.contentHeight - i.containerHeight; // don't allow scroll past container
    
element.dispatchEvent(yEndEvent);
  }

  if (
axis === 'left' && value >= i.contentWidth - i.containerWidth) {
    
element.scrollLeft = value = i.contentWidth - i.containerWidth; // don't allow scroll past container
    
element.dispatchEvent(xEndEvent);
  }

  if (!
lastTop) {
    
lastTop = element.scrollTop;
  }

  if (!
lastLeft) {
    
lastLeft = element.scrollLeft;
  }

  if (
axis === 'top' && value < lastTop) {
    
element.dispatchEvent(upEvent);
  }

  if (
axis === 'top' && value > lastTop) {
    
element.dispatchEvent(downEvent);
  }

  if (
axis === 'left' && value < lastLeft) {
    
element.dispatchEvent(leftEvent);
  }

  if (
axis === 'left' && value > lastLeft) {
    
element.dispatchEvent(rightEvent);
  }

  if (
axis === 'top') {
    
element.scrollTop = lastTop = value;
    
element.dispatchEvent(yEvent);
  }

  if (
axis === 'left') {
    
element.scrollLeft = lastLeft = value;
    
element.dispatchEvent(xEvent);
  }

};

},{
"./instances":18}],21:[function(require,module,exports){
'use strict';

var 
d = require('../lib/dom')
  , 
h = require('../lib/helper')
  , 
instances = require('./instances')
  , 
updateGeometry = require('./update-geometry')
  , 
updateScroll = require('./update-scroll');

module.exports = function (element) {
  var 
i = instances.get(element);

  if (!
i) {
    return;
  }

  
// Recalcuate negative scrollLeft adjustment
  
i.negativeScrollAdjustment = i.isNegativeScroll ? element.scrollWidth - element.clientWidth : 0;

  
// Recalculate rail margins
  
d.css(i.scrollbarXRail, 'display', 'block');
  
d.css(i.scrollbarYRail, 'display', 'block');
  
i.railXMarginWidth = h.toInt(d.css(i.scrollbarXRail, 'marginLeft')) + h.toInt(d.css(i.scrollbarXRail, 'marginRight'));
  
i.railYMarginHeight = h.toInt(d.css(i.scrollbarYRail, 'marginTop')) + h.toInt(d.css(i.scrollbarYRail, 'marginBottom'));

  
// Hide scrollbars not to affect scrollWidth and scrollHeight
  
d.css(i.scrollbarXRail, 'display', 'none');
  
d.css(i.scrollbarYRail, 'display', 'none');

  
updateGeometry(element);

  
// Update top/left scroll to trigger events
  
updateScroll(element, 'top', element.scrollTop);
  
updateScroll(element, 'left', element.scrollLeft);

  
d.css(i.scrollbarXRail, 'display', '');
  
d.css(i.scrollbarYRail, 'display', '');
};

},{
"../lib/dom":3,"../lib/helper":6,"./instances":18,"./update-geometry":19,"./update-scroll":20}]},{},[1]);
?>
Онлайн: 1
Реклама