focus-components-v3
Version:
Focus web components to build applications (based on Material Design)
90 lines (68 loc) • 9.04 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
var _isUndefined = require('lodash/isUndefined');
var _isUndefined2 = _interopRequireDefault(_isUndefined);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
var Scroll = function Scroll(Component) {
return function (_Component) {
_inherits(ScrollComponent, _Component);
function ScrollComponent(props) {
_classCallCheck(this, ScrollComponent);
return _possibleConstructorReturn(this, _Component.call(this, props));
}
/**
* Get the scroll position from the top of the screen.
*
* https://developer.mozilla.org/fr/docs/Web/API/Element/getBoundingClientRect
*
* @param {object} domNode domNoe to get the position from
* @returns {int} - The position in pixel from the top of the scroll container.
*/
ScrollComponent.prototype.scrollPosition = function scrollPosition(domNode) {
var y = window.pageYOffset || document.documentElement.scrollTop;
var x = window.pageXOffset || document.documentElement.scrollLeft;
if ((0, _isUndefined2.default)(domNode)) {
return { top: y, left: x };
}
var nodeRect = domNode.getBoundingClientRect();
return { left: nodeRect.left + x, top: nodeRect.top + y };
};
ScrollComponent.prototype.isAtPageBottom = function isAtPageBottom(domNode) {
return this.scrollPosition().top >= this._getScrollingElement().scrollHeight - window.innerHeight;
};
ScrollComponent.prototype._getScrollingElement = function _getScrollingElement() {
if (document.scrollingElement) {
return document.scrollingElement;
} else if (document.documentElement) {
return document.documentElement;
}
return document.querySelector('body');
};
/**
* Set scrollbar position with smooth animation.
* http://www.w3schools.com/jsref/prop_win_pagexoffset.asp
*
* @param {object} element element parent for the scroll
* @param {number} to position of the scroll
* @param {number} duration duration of animation
*/
ScrollComponent.prototype.scrollTo = function scrollTo(element, to) {
var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 500;
if ((0, _isUndefined2.default)(element)) {
window.scrollTo(0, to);
return;
}
element.scrollTop = to;
};
return ScrollComponent;
}(Component);
};
exports.default = Scroll;
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZyLUZSLmpzIl0sIm5hbWVzIjpbIlNjcm9sbCIsIlNjcm9sbENvbXBvbmVudCIsInByb3BzIiwic2Nyb2xsUG9zaXRpb24iLCJkb21Ob2RlIiwieSIsIndpbmRvdyIsInBhZ2VZT2Zmc2V0IiwiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJzY3JvbGxUb3AiLCJ4IiwicGFnZVhPZmZzZXQiLCJzY3JvbGxMZWZ0IiwidG9wIiwibGVmdCIsIm5vZGVSZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaXNBdFBhZ2VCb3R0b20iLCJfZ2V0U2Nyb2xsaW5nRWxlbWVudCIsInNjcm9sbEhlaWdodCIsImlubmVySGVpZ2h0Iiwic2Nyb2xsaW5nRWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJzY3JvbGxUbyIsImVsZW1lbnQiLCJ0byIsImR1cmF0aW9uIiwiQ29tcG9uZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFNQSxTQUFTLFNBQVRBLE1BQVM7QUFBQTtBQUFBLGtCQUFtQkMsZUFBbkI7O0FBQ1gsaUJBRDhCQSxlQUM5QixDQUFZQyxLQUFaLEVBQW1CO0FBQUEsa0NBRFdELGVBQ1g7O0FBQUEsb0RBQ2Ysc0JBQU1DLEtBQU4sQ0FEZTtBQUVsQjs7QUFFRDs7Ozs7Ozs7OztBQUw4QkQsdUJBQW5CLFdBYVhFLGNBYlcsMkJBYUlDLE9BYkosRUFhYTtBQUNwQixnQkFBTUMsSUFBSUMsT0FBT0MsV0FBUCxJQUFzQkMsU0FBU0MsZUFBVCxDQUF5QkMsU0FBekQ7QUFDQSxnQkFBTUMsSUFBSUwsT0FBT00sV0FBUCxJQUFzQkosU0FBU0MsZUFBVCxDQUF5QkksVUFBekQ7QUFDQSxnQkFBRywyQkFBWVQsT0FBWixDQUFILEVBQXlCO0FBQ3JCLHVCQUFPLEVBQUVVLEtBQUtULENBQVAsRUFBVVUsTUFBTUosQ0FBaEIsRUFBUDtBQUNIO0FBQ0QsZ0JBQU1LLFdBQVdaLFFBQVFhLHFCQUFSLEVBQWpCO0FBQ0EsbUJBQU8sRUFBRUYsTUFBTUMsU0FBU0QsSUFBVCxHQUFnQkosQ0FBeEIsRUFBMkJHLEtBQUtFLFNBQVNGLEdBQVQsR0FBZVQsQ0FBL0MsRUFBUDtBQUNILFNBckJVOztBQUFtQkosdUJBQW5CLFdBdUJYaUIsY0F2QlcsMkJBdUJJZCxPQXZCSixFQXVCYTtBQUNwQixtQkFBTyxLQUFLRCxjQUFMLEdBQXNCVyxHQUF0QixJQUE2QixLQUFLSyxvQkFBTCxHQUE0QkMsWUFBNUIsR0FBMkNkLE9BQU9lLFdBQXRGO0FBQ0gsU0F6QlU7O0FBQW1CcEIsdUJBQW5CLFdBMkJYa0Isb0JBM0JXLG1DQTJCWTtBQUNuQixnQkFBR1gsU0FBU2MsZ0JBQVosRUFBOEI7QUFDMUIsdUJBQU9kLFNBQVNjLGdCQUFoQjtBQUNILGFBRkQsTUFFTyxJQUFHZCxTQUFTQyxlQUFaLEVBQTZCO0FBQ2hDLHVCQUFPRCxTQUFTQyxlQUFoQjtBQUNIO0FBQ0QsbUJBQU9ELFNBQVNlLGFBQVQsQ0FBdUIsTUFBdkIsQ0FBUDtBQUNILFNBbENVOztBQW9DWDs7Ozs7Ozs7OztBQXBDOEJ0Qix1QkFBbkIsV0E0Q1h1QixRQTVDVyxxQkE0Q0ZDLE9BNUNFLEVBNENPQyxFQTVDUCxFQTRDMkI7QUFBQSxnQkFBaEJDLFFBQWdCLHVFQUFMLEdBQUs7O0FBQ2xDLGdCQUFHLDJCQUFZRixPQUFaLENBQUgsRUFBeUI7QUFDckJuQix1QkFBT2tCLFFBQVAsQ0FBZ0IsQ0FBaEIsRUFBbUJFLEVBQW5CO0FBQ0E7QUFDSDtBQUNERCxvQkFBUWYsU0FBUixHQUFvQmdCLEVBQXBCO0FBQ0gsU0FsRFU7O0FBQUEsZUFBbUJ6QixlQUFuQjtBQUFBLE1BQTJDMkIsU0FBM0M7QUFBQSxDQUFmOztrQkFzRGU1QixNIiwiZmlsZSI6ImZyLUZSLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlzVW5kZWZpbmVkIGZyb20gJ2xvZGFzaC9pc1VuZGVmaW5lZCc7XHJcblxyXG5jb25zdCBTY3JvbGwgPSBDb21wb25lbnQgPT4gY2xhc3MgU2Nyb2xsQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBHZXQgdGhlIHNjcm9sbCBwb3NpdGlvbiBmcm9tIHRoZSB0b3Agb2YgdGhlIHNjcmVlbi5cclxuICAgICpcclxuICAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvQVBJL0VsZW1lbnQvZ2V0Qm91bmRpbmdDbGllbnRSZWN0XHJcbiAgICAqXHJcbiAgICAqIEBwYXJhbSB7b2JqZWN0fSBkb21Ob2RlIGRvbU5vZSB0byBnZXQgdGhlIHBvc2l0aW9uIGZyb21cclxuICAgICogQHJldHVybnMge2ludH0gLSBUaGUgcG9zaXRpb24gaW4gcGl4ZWwgZnJvbSB0aGUgdG9wIG9mIHRoZSBzY3JvbGwgY29udGFpbmVyLlxyXG4gICAgKi9cclxuICAgIHNjcm9sbFBvc2l0aW9uKGRvbU5vZGUpIHtcclxuICAgICAgICBjb25zdCB5ID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7XHJcbiAgICAgICAgY29uc3QgeCA9IHdpbmRvdy5wYWdlWE9mZnNldCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDtcclxuICAgICAgICBpZihpc1VuZGVmaW5lZChkb21Ob2RlKSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyB0b3A6IHksIGxlZnQ6IHggfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgbm9kZVJlY3QgPSBkb21Ob2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIHJldHVybiB7IGxlZnQ6IG5vZGVSZWN0LmxlZnQgKyB4LCB0b3A6IG5vZGVSZWN0LnRvcCArIHkgfTtcclxuICAgIH1cclxuXHJcbiAgICBpc0F0UGFnZUJvdHRvbShkb21Ob2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsUG9zaXRpb24oKS50b3AgPj0gdGhpcy5fZ2V0U2Nyb2xsaW5nRWxlbWVudCgpLnNjcm9sbEhlaWdodCAtIHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0U2Nyb2xsaW5nRWxlbWVudCgpIHtcclxuICAgICAgICBpZihkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50O1xyXG4gICAgICAgIH0gZWxzZSBpZihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogU2V0IHNjcm9sbGJhciBwb3NpdGlvbiB3aXRoIHNtb290aCBhbmltYXRpb24uXHJcbiAgICAqIGh0dHA6Ly93d3cudzNzY2hvb2xzLmNvbS9qc3JlZi9wcm9wX3dpbl9wYWdleG9mZnNldC5hc3BcclxuICAgICpcclxuICAgICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnQgIGVsZW1lbnQgcGFyZW50IGZvciB0aGUgc2Nyb2xsXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSB0byAgICAgICBwb3NpdGlvbiBvZiB0aGUgc2Nyb2xsXHJcbiAgICAqIEBwYXJhbSB7bnVtYmVyfSBkdXJhdGlvbiBkdXJhdGlvbiBvZiBhbmltYXRpb25cclxuICAgICovXHJcbiAgICBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24gPSA1MDApIHtcclxuICAgICAgICBpZihpc1VuZGVmaW5lZChlbGVtZW50KSkge1xyXG4gICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgdG8pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gdG87XHJcbiAgICB9XHJcblxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgU2Nyb2xsO1xyXG4iXX0=
;