UNPKG

focus-components-v3

Version:

Focus web components to build applications (based on Material Design)

90 lines (68 loc) 9.04 kB
'use strict'; 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=