react-sortable-hoc
Version:
Set of higher-order components to turn any list into a sortable, touch-friendly, animated list
1,642 lines (1,333 loc) • 211 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("react"), require("react-dom"));
else if(typeof define === 'function' && define.amd)
define(["react", "react-dom"], factory);
else if(typeof exports === 'object')
exports["SortableHOC"] = factory(require("react"), require("react-dom"));
else
root["SortableHOC"] = factory(root["React"], root["ReactDOM"]);
})(this, function(__WEBPACK_EXTERNAL_MODULE_112__, __WEBPACK_EXTERNAL_MODULE_113__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(1);
/***/ },
/* 1 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.arrayMove = exports.SortableHandle = exports.SortableElement = exports.SortableContainer = undefined;
var _utils = __webpack_require__(2);
Object.defineProperty(exports, 'arrayMove', {
enumerable: true,
get: function get() {
return _utils.arrayMove;
}
});
var _SortableContainer2 = __webpack_require__(3);
var _SortableContainer3 = _interopRequireDefault(_SortableContainer2);
var _SortableElement2 = __webpack_require__(248);
var _SortableElement3 = _interopRequireDefault(_SortableElement2);
var _SortableHandle2 = __webpack_require__(249);
var _SortableHandle3 = _interopRequireDefault(_SortableHandle2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.SortableContainer = _SortableContainer3.default;
exports.SortableElement = _SortableElement3.default;
exports.SortableHandle = _SortableHandle3.default;
/***/ },
/* 2 */
/***/ function(module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.arrayMove = arrayMove;
exports.closest = closest;
exports.limit = limit;
exports.getElementMargin = getElementMargin;
function arrayMove(arr, previousIndex, newIndex) {
var array = arr.slice(0);
if (newIndex >= array.length) {
var k = newIndex - array.length;
while (k-- + 1) {
array.push(undefined);
}
}
array.splice(newIndex, 0, array.splice(previousIndex, 1)[0]);
return array;
}
var events = exports.events = {
start: ['touchstart', 'mousedown'],
move: ['touchmove', 'mousemove'],
end: ['touchend', 'mouseup']
};
var vendorPrefix = exports.vendorPrefix = function () {
if (typeof window === 'undefined' || typeof document === 'undefined') return ''; // server environment
var styles = window.getComputedStyle(document.documentElement, '');
var pre = (Array.prototype.slice.call(styles).join('').match(/-(moz|webkit|ms)-/) || styles.OLink === '' && ['', 'o'])[1];
switch (pre) {
case 'ms':
return 'ms';
default:
return pre && pre.length ? pre[0].toUpperCase() + pre.substr(1) : '';
}
}();
function closest(el, fn) {
while (el) {
if (fn(el)) return el;
el = el.parentNode;
}
}
function limit(min, max, value) {
if (value < min) {
return min;
}
if (value > max) {
return max;
}
return value;
}
function getCSSPixelValue(stringValue) {
if (stringValue.substr(-2) === 'px') {
return parseFloat(stringValue);
}
return 0;
}
function getElementMargin(element) {
var style = window.getComputedStyle(element);
return {
top: getCSSPixelValue(style.marginTop),
right: getCSSPixelValue(style.marginRight),
bottom: getCSSPixelValue(style.marginBottom),
left: getCSSPixelValue(style.marginLeft)
};
}
/***/ },
/* 3 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _extends2 = __webpack_require__(4);
var _extends3 = _interopRequireDefault(_extends2);
var _slicedToArray2 = __webpack_require__(42);
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _toConsumableArray2 = __webpack_require__(68);
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _getPrototypeOf = __webpack_require__(76);
var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);
var _classCallCheck2 = __webpack_require__(80);
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = __webpack_require__(81);
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = __webpack_require__(85);
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = __webpack_require__(104);
var _inherits3 = _interopRequireDefault(_inherits2);
exports.default = SortableContainer;
var _react = __webpack_require__(112);
var _react2 = _interopRequireDefault(_react);
var _reactDom = __webpack_require__(113);
var _reactDom2 = _interopRequireDefault(_reactDom);
var _Manager = __webpack_require__(114);
var _Manager2 = _interopRequireDefault(_Manager);
var _utils = __webpack_require__(2);
var _invariant = __webpack_require__(246);
var _invariant2 = _interopRequireDefault(_invariant);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// Export Higher Order Sortable Container Component
function SortableContainer(WrappedComponent) {
var _class, _temp;
var config = arguments.length <= 1 || arguments[1] === undefined ? { withRef: false } : arguments[1];
return _temp = _class = function (_Component) {
(0, _inherits3.default)(_class, _Component);
function _class(props) {
(0, _classCallCheck3.default)(this, _class);
var _this = (0, _possibleConstructorReturn3.default)(this, (0, _getPrototypeOf2.default)(_class).call(this));
_this.state = {};
_this.handleStart = function (e) {
var _this$props = _this.props;
var distance = _this$props.distance;
var shouldCancelStart = _this$props.shouldCancelStart;
if (e.button === 2 || shouldCancelStart(e)) {
return false;
}
_this._touched = true;
_this._pos = {
x: e.clientX,
y: e.clientY
};
var node = (0, _utils.closest)(e.target, function (el) {
return el.sortableInfo != null;
});
if (node && !_this.state.sorting && node.sortableInfo) {
var useDragHandle = _this.props.useDragHandle;
var _node$sortableInfo = node.sortableInfo;
var index = _node$sortableInfo.index;
var collection = _node$sortableInfo.collection;
if (useDragHandle && !(0, _utils.closest)(e.target, function (el) {
return el.sortableHandle != null;
})) return;
_this.manager.active = { index: index, collection: collection };
if (!distance) {
_this.pressTimer = setTimeout(function () {
return _this.handlePress(e);
}, _this.props.pressDelay);
}
}
};
_this.handleMove = function (e) {
var distance = _this.props.distance;
if (!_this.state.sorting && _this._touched) {
_this._delta = {
x: _this._pos.x - e.clientX,
y: _this._pos.y - e.clientY
};
var delta = Math.abs(_this._delta.x) + Math.abs(_this._delta.y);
if (!distance) {
_this.cancel();
} else if (delta >= distance) {
_this.handlePress(e);
}
}
};
_this.handleEnd = function () {
var distance = _this.props.distance;
_this._touched = false;
if (!distance) {
_this.cancel();
}
};
_this.cancel = function () {
if (!_this.state.sorting) {
clearTimeout(_this.pressTimer);
_this.manager.active = null;
}
};
_this.handlePress = function (e) {
var active = _this.manager.getActive();
if (active) {
var _this$props2 = _this.props;
var axis = _this$props2.axis;
var onSortStart = _this$props2.onSortStart;
var helperClass = _this$props2.helperClass;
var hideSortableGhost = _this$props2.hideSortableGhost;
var useWindowAsScrollContainer = _this$props2.useWindowAsScrollContainer;
var node = active.node;
var collection = active.collection;
var index = node.sortableInfo.index;
var margin = (0, _utils.getElementMargin)(node);
var containerBoundingRect = _this.container.getBoundingClientRect();
_this.node = node;
_this.margin = margin;
_this.width = node.offsetWidth;
_this.height = node.offsetHeight;
_this.dimension = axis == 'x' ? _this.width : _this.height;
_this.marginOffset = {
x: _this.margin.left + _this.margin.right,
y: Math.max(_this.margin.top, _this.margin.bottom)
};
_this.boundingClientRect = node.getBoundingClientRect();
_this.index = index;
_this.newIndex = index;
var edge = _this.edge = axis == 'x' ? 'Left' : 'Top';
_this.offsetEdge = _this.getEdgeOffset(edge, node);
_this.initialOffset = _this.getOffset(e);
_this.initialScroll = _this.scrollContainer['scroll' + edge];
_this.helper = _this.document.body.appendChild(node.cloneNode(true));
_this.helper.style.position = 'fixed';
_this.helper.style.top = _this.boundingClientRect.top - margin.top + 'px';
_this.helper.style.left = _this.boundingClientRect.left - margin.left + 'px';
_this.helper.style.width = _this.width + 'px';
_this.helper.style.boxSizing = 'border-box';
if (hideSortableGhost) {
_this.sortableGhost = node;
node.style.visibility = 'hidden';
}
if (axis == 'x') {
_this.minTranslate = (useWindowAsScrollContainer ? 0 : containerBoundingRect.left) - _this.boundingClientRect.left - _this.width / 2;
_this.maxTranslate = (useWindowAsScrollContainer ? _this.contentWindow.innerWidth : containerBoundingRect.left + containerBoundingRect.width) - _this.boundingClientRect.left - _this.width / 2;
} else {
_this.minTranslate = (useWindowAsScrollContainer ? 0 : containerBoundingRect.top) - _this.boundingClientRect.top - _this.height / 2;
_this.maxTranslate = (useWindowAsScrollContainer ? _this.contentWindow.innerHeight : containerBoundingRect.top + containerBoundingRect.height) - _this.boundingClientRect.top - _this.height / 2;
}
if (helperClass) {
var _this$helper$classLis;
(_this$helper$classLis = _this.helper.classList).add.apply(_this$helper$classLis, (0, _toConsumableArray3.default)(helperClass.split(' ')));
}
_this.listenerNode = e.touches ? node : _this.contentWindow;
_utils.events.move.forEach(function (eventName) {
return _this.listenerNode.addEventListener(eventName, _this.handleSortMove, false);
});
_utils.events.end.forEach(function (eventName) {
return _this.listenerNode.addEventListener(eventName, _this.handleSortEnd, false);
});
_this.setState({
sorting: true,
sortingIndex: index
});
if (onSortStart) onSortStart({ node: node, index: index, collection: collection }, e);
}
};
_this.handleSortMove = function (e) {
var onSortMove = _this.props.onSortMove;
e.preventDefault(); // Prevent scrolling on mobile
_this.updatePosition(e);
_this.animateNodes();
_this.autoscroll();
if (onSortMove) onSortMove(e);
};
_this.handleSortEnd = function (e) {
var _this$props3 = _this.props;
var hideSortableGhost = _this$props3.hideSortableGhost;
var onSortEnd = _this$props3.onSortEnd;
var collection = _this.manager.active.collection;
// Remove the event listeners if the node is still in the DOM
if (_this.listenerNode) {
_utils.events.move.forEach(function (eventName) {
return _this.listenerNode.removeEventListener(eventName, _this.handleSortMove);
});
_utils.events.end.forEach(function (eventName) {
return _this.listenerNode.removeEventListener(eventName, _this.handleSortEnd);
});
}
// Remove the helper from the DOM
_this.helper.parentNode.removeChild(_this.helper);
if (hideSortableGhost && _this.sortableGhost) {
_this.sortableGhost.style.visibility = '';
}
var nodes = _this.manager.refs[collection];
for (var i = 0, len = nodes.length; i < len; i++) {
var node = nodes[i];
var el = node.node;
// Clear the cached offsetTop / offsetLeft value
node.edgeOffset = null;
// Remove the transforms / transitions
el.style[_utils.vendorPrefix + 'Transform'] = '';
el.style[_utils.vendorPrefix + 'TransitionDuration'] = '';
}
if (typeof onSortEnd == 'function') {
onSortEnd({
oldIndex: _this.index,
newIndex: _this.newIndex,
collection: collection
}, e);
}
// Stop autoscroll
clearInterval(_this.autoscrollInterval);
_this.autoscrollInterval = null;
// Update state
_this.manager.active = null;
_this.setState({
sorting: false,
sortingIndex: null
});
_this._touched = false;
};
_this.autoscroll = function () {
var translate = _this.translate;
var direction = void 0;
var speed = 1;
var acceleration = 10;
if (translate >= _this.maxTranslate - _this.dimension / 2) {
direction = 1; // Scroll Down
speed = acceleration * Math.abs((_this.maxTranslate - _this.dimension / 2 - translate) / _this.dimension);
} else if (translate <= _this.minTranslate + _this.dimension / 2) {
direction = -1; // Scroll Up
speed = acceleration * Math.abs((translate - _this.dimension / 2 - _this.minTranslate) / _this.dimension);
}
if (_this.autoscrollInterval) {
clearTimeout(_this.autoscrollInterval);
_this.autoscrollInterval = null;
_this.isAutoScrolling = false;
}
if (direction) {
_this.autoscrollInterval = setInterval(function () {
_this.isAutoScrolling = true;
var offset = 1 * speed * direction;
_this.scrollContainer['scroll' + _this.edge] += offset;
_this.translate += offset;
_this.animateNodes();
}, 5);
}
};
_this.manager = new _Manager2.default();
_this.events = {
start: _this.handleStart,
move: _this.handleMove,
end: _this.handleEnd
};
(0, _invariant2.default)(!(props.distance && props.pressDelay), 'Attempted to set both `pressDelay` and `distance` on SortableContainer, you may only use one or the other, not both at the same time.');
return _this;
}
(0, _createClass3.default)(_class, [{
key: 'getChildContext',
value: function getChildContext() {
return {
manager: this.manager
};
}
}, {
key: 'componentDidMount',
value: function componentDidMount() {
var _this2 = this;
var _props = this.props;
var contentWindow = _props.contentWindow;
var getContainer = _props.getContainer;
this.container = typeof getContainer == 'function' ? getContainer(this.getWrappedInstance()) : _reactDom2.default.findDOMNode(this);
this.document = this.container.ownerDocument || document;
this.scrollContainer = this.props.useWindowAsScrollContainer ? this.document.body : this.container;
this.contentWindow = typeof contentWindow == 'function' ? contentWindow() : contentWindow;
var _loop = function _loop(key) {
_utils.events[key].forEach(function (eventName) {
return _this2.container.addEventListener(eventName, _this2.events[key], false);
});
};
for (var key in this.events) {
_loop(key);
}
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
var _this3 = this;
var _loop2 = function _loop2(key) {
_utils.events[key].forEach(function (eventName) {
return _this3.container.removeEventListener(eventName, _this3.events[key]);
});
};
for (var key in this.events) {
_loop2(key);
}
}
}, {
key: 'getEdgeOffset',
value: function getEdgeOffset(edge, node) {
var offset = arguments.length <= 2 || arguments[2] === undefined ? 0 : arguments[2];
// Get the actual offsetTop / offsetLeft value, no matter how deep the node is nested
if (node) {
if (node.parentNode !== this.container) {
return this.getEdgeOffset(edge, node.parentNode, offset + node['offset' + edge]);
} else {
return node['offset' + edge] + offset;
}
}
}
}, {
key: 'getOffset',
value: function getOffset(e) {
return {
x: e.touches ? e.touches[0].clientX : e.clientX,
y: e.touches ? e.touches[0].clientY : e.clientY
};
}
}, {
key: 'getLockPixelOffsets',
value: function getLockPixelOffsets() {
var lockOffset = this.props.lockOffset;
if (!Array.isArray(lockOffset)) {
lockOffset = [lockOffset, lockOffset];
}
(0, _invariant2.default)(lockOffset.length === 2, 'lockOffset prop of SortableContainer should be a single ' + 'value or an array of exactly two values. Given %s', lockOffset);
var _lockOffset = lockOffset;
var _lockOffset2 = (0, _slicedToArray3.default)(_lockOffset, 2);
var minLockOffset = _lockOffset2[0];
var maxLockOffset = _lockOffset2[1];
return [this.getLockPixelOffset(minLockOffset), this.getLockPixelOffset(maxLockOffset)];
}
}, {
key: 'getLockPixelOffset',
value: function getLockPixelOffset(lockOffset) {
var offset = lockOffset;
var unit = 'px';
if (typeof lockOffset === 'string') {
var match = /^[+-]?\d*(?:\.\d*)?(px|%)$/.exec(lockOffset);
(0, _invariant2.default)(match !== null, 'lockOffset value should be a number or a string of a ' + 'number followed by "px" or "%". Given %s', lockOffset);
offset = parseFloat(lockOffset);
unit = match[1];
}
(0, _invariant2.default)(isFinite(offset), 'lockOffset value should be a finite. Given %s', lockOffset);
if (unit === '%') {
offset = offset * this.dimension / 100;
}
return offset;
}
}, {
key: 'updatePosition',
value: function updatePosition(e) {
var _props2 = this.props;
var axis = _props2.axis;
var lockAxis = _props2.lockAxis;
var lockToContainerEdges = _props2.lockToContainerEdges;
var offset = this.getOffset(e);
var translate = {
x: offset.x - this.initialOffset.x,
y: offset.y - this.initialOffset.y
};
this.translate = translate[axis];
if (lockToContainerEdges) {
var _getLockPixelOffsets = this.getLockPixelOffsets();
var _getLockPixelOffsets2 = (0, _slicedToArray3.default)(_getLockPixelOffsets, 2);
var minLockOffset = _getLockPixelOffsets2[0];
var maxLockOffset = _getLockPixelOffsets2[1];
var minOffset = this.dimension / 2 - minLockOffset;
var maxOffset = this.dimension / 2 - maxLockOffset;
translate[axis] = (0, _utils.limit)(this.minTranslate + minOffset, this.maxTranslate - maxOffset, translate[axis]);
}
switch (lockAxis) {
case 'x':
translate.y = 0;
break;
case 'y':
translate.x = 0;
break;
}
this.helper.style[_utils.vendorPrefix + 'Transform'] = 'translate3d(' + translate.x + 'px,' + translate.y + 'px, 0)';
}
}, {
key: 'animateNodes',
value: function animateNodes() {
var _props3 = this.props;
var axis = _props3.axis;
var transitionDuration = _props3.transitionDuration;
var hideSortableGhost = _props3.hideSortableGhost;
var nodes = this.manager.getOrderedRefs();
var deltaScroll = this.scrollContainer['scroll' + this.edge] - this.initialScroll;
var sortingOffset = this.offsetEdge + this.translate + deltaScroll;
this.newIndex = null;
for (var i = 0, len = nodes.length; i < len; i++) {
var _nodes$i = nodes[i];
var node = _nodes$i.node;
var edgeOffset = _nodes$i.edgeOffset;
var index = node.sortableInfo.index;
var dimension = axis == 'x' ? node.offsetWidth : node.offsetHeight;
var offset = this.dimension > dimension ? dimension / 2 : this.dimension / 2;
var translate = 0;
var translateX = 0;
var translateY = 0;
// If we haven't cached the node's offsetTop / offsetLeft value
if (edgeOffset == null) {
nodes[i].edgeOffset = edgeOffset = this.getEdgeOffset(this.edge, node);
}
// If the node is the one we're currently animating, skip it
if (index === this.index) {
if (hideSortableGhost) {
/*
* With windowing libraries such as `react-virtualized`, the sortableGhost
* node may change while scrolling down and then back up (or vice-versa),
* so we need to update the reference to the new node just to be safe.
*/
this.sortableGhost = node;
node.style.visibility = 'hidden';
}
continue;
}
if (transitionDuration) {
node.style[_utils.vendorPrefix + 'TransitionDuration'] = transitionDuration + 'ms';
}
if (index > this.index && sortingOffset + offset >= edgeOffset) {
translate = -(this.dimension + this.marginOffset[axis]);
this.newIndex = index;
} else if (index < this.index && sortingOffset <= edgeOffset + offset) {
translate = this.dimension + this.marginOffset[axis];
if (this.newIndex == null) {
this.newIndex = index;
}
}
if (axis == 'x') {
translateX = translate;
} else {
translateY = translate;
}
node.style[_utils.vendorPrefix + 'Transform'] = 'translate3d(' + translateX + 'px,' + translateY + 'px,0)';
}
if (this.newIndex == null) {
this.newIndex = this.index;
}
}
}, {
key: 'getWrappedInstance',
value: function getWrappedInstance() {
(0, _invariant2.default)(config.withRef, 'To access the wrapped instance, you need to pass in {withRef: true} as the second argument of the SortableContainer() call');
return this.refs.wrappedInstance;
}
}, {
key: 'render',
value: function render() {
var ref = config.withRef ? 'wrappedInstance' : null;
return _react2.default.createElement(WrappedComponent, (0, _extends3.default)({ ref: ref }, this.props, this.state));
}
}]);
return _class;
}(_react.Component), _class.displayName = WrappedComponent.displayName ? 'SortableList(' + WrappedComponent.displayName + ')' : 'SortableList', _class.WrappedComponent = WrappedComponent, _class.defaultProps = {
axis: 'y',
transitionDuration: 300,
pressDelay: 0,
distance: 0,
useWindowAsScrollContainer: false,
hideSortableGhost: true,
contentWindow: typeof window !== 'undefined' ? window : null,
shouldCancelStart: function shouldCancelStart(e) {
// Cancel sorting if the event target is an `input`, `textarea`, `select` or `option`
if (['input', 'textarea', 'select', 'option'].indexOf(e.target.tagName.toLowerCase()) !== -1) {
return true; // Return true to cancel sorting
}
},
lockToContainerEdges: false,
lockOffset: '50%'
}, _class.propTypes = {
axis: _react.PropTypes.oneOf(['x', 'y']),
distance: _react.PropTypes.number,
lockAxis: _react.PropTypes.string,
helperClass: _react.PropTypes.string,
transitionDuration: _react.PropTypes.number,
contentWindow: _react.PropTypes.any,
onSortStart: _react.PropTypes.func,
onSortMove: _react.PropTypes.func,
onSortEnd: _react.PropTypes.func,
shouldCancelStart: _react.PropTypes.func,
pressDelay: _react.PropTypes.number,
useDragHandle: _react.PropTypes.bool,
useWindowAsScrollContainer: _react.PropTypes.bool,
hideSortableGhost: _react.PropTypes.bool,
lockToContainerEdges: _react.PropTypes.bool,
lockOffset: _react.PropTypes.oneOfType([_react.PropTypes.number, _react.PropTypes.string, _react.PropTypes.arrayOf(_react.PropTypes.oneOfType([_react.PropTypes.number, _react.PropTypes.string]))]),
getContainer: _react.PropTypes.func
}, _class.childContextTypes = {
manager: _react.PropTypes.object.isRequired
}, _temp;
}
/***/ },
/* 4 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var _assign = __webpack_require__(5);
var _assign2 = _interopRequireDefault(_assign);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = _assign2.default || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
/***/ },
/* 5 */
/***/ function(module, exports, __webpack_require__) {
module.exports = { "default": __webpack_require__(6), __esModule: true };
/***/ },
/* 6 */
/***/ function(module, exports, __webpack_require__) {
__webpack_require__(7);
module.exports = __webpack_require__(10).Object.assign;
/***/ },
/* 7 */
/***/ function(module, exports, __webpack_require__) {
// 19.1.3.1 Object.assign(target, source)
var $export = __webpack_require__(8);
$export($export.S + $export.F, 'Object', {assign: __webpack_require__(23)});
/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) {
var global = __webpack_require__(9)
, core = __webpack_require__(10)
, ctx = __webpack_require__(11)
, hide = __webpack_require__(13)
, PROTOTYPE = 'prototype';
var $export = function(type, name, source){
var IS_FORCED = type & $export.F
, IS_GLOBAL = type & $export.G
, IS_STATIC = type & $export.S
, IS_PROTO = type & $export.P
, IS_BIND = type & $export.B
, IS_WRAP = type & $export.W
, exports = IS_GLOBAL ? core : core[name] || (core[name] = {})
, expProto = exports[PROTOTYPE]
, target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
, key, own, out;
if(IS_GLOBAL)source = name;
for(key in source){
// contains in native
own = !IS_FORCED && target && target[key] !== undefined;
if(own && key in exports)continue;
// export native or passed
out = own ? target[key] : source[key];
// prevent global pollution for namespaces
exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
// bind timers to global for call from export context
: IS_BIND && own ? ctx(out, global)
// wrap global constructors for prevent change them in library
: IS_WRAP && target[key] == out ? (function(C){
var F = function(a, b, c){
if(this instanceof C){
switch(arguments.length){
case 0: return new C;
case 1: return new C(a);
case 2: return new C(a, b);
} return new C(a, b, c);
} return C.apply(this, arguments);
};
F[PROTOTYPE] = C[PROTOTYPE];
return F;
// make static versions for prototype methods
})(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
// export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
if(IS_PROTO){
(exports.virtual || (exports.virtual = {}))[key] = out;
// export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
}
}
};
// type bitmap
$export.F = 1; // forced
$export.G = 2; // global
$export.S = 4; // static
$export.P = 8; // proto
$export.B = 16; // bind
$export.W = 32; // wrap
$export.U = 64; // safe
$export.R = 128; // real proto method for `library`
module.exports = $export;
/***/ },
/* 9 */
/***/ function(module, exports) {
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
var global = module.exports = typeof window != 'undefined' && window.Math == Math
? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
/***/ },
/* 10 */
/***/ function(module, exports) {
var core = module.exports = {version: '2.4.0'};
if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
/***/ },
/* 11 */
/***/ function(module, exports, __webpack_require__) {
// optional / simple context binding
var aFunction = __webpack_require__(12);
module.exports = function(fn, that, length){
aFunction(fn);
if(that === undefined)return fn;
switch(length){
case 1: return function(a){
return fn.call(that, a);
};
case 2: return function(a, b){
return fn.call(that, a, b);
};
case 3: return function(a, b, c){
return fn.call(that, a, b, c);
};
}
return function(/* ...args */){
return fn.apply(that, arguments);
};
};
/***/ },
/* 12 */
/***/ function(module, exports) {
module.exports = function(it){
if(typeof it != 'function')throw TypeError(it + ' is not a function!');
return it;
};
/***/ },
/* 13 */
/***/ function(module, exports, __webpack_require__) {
var dP = __webpack_require__(14)
, createDesc = __webpack_require__(22);
module.exports = __webpack_require__(18) ? function(object, key, value){
return dP.f(object, key, createDesc(1, value));
} : function(object, key, value){
object[key] = value;
return object;
};
/***/ },
/* 14 */
/***/ function(module, exports, __webpack_require__) {
var anObject = __webpack_require__(15)
, IE8_DOM_DEFINE = __webpack_require__(17)
, toPrimitive = __webpack_require__(21)
, dP = Object.defineProperty;
exports.f = __webpack_require__(18) ? Object.defineProperty : function defineProperty(O, P, Attributes){
anObject(O);
P = toPrimitive(P, true);
anObject(Attributes);
if(IE8_DOM_DEFINE)try {
return dP(O, P, Attributes);
} catch(e){ /* empty */ }
if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
if('value' in Attributes)O[P] = Attributes.value;
return O;
};
/***/ },
/* 15 */
/***/ function(module, exports, __webpack_require__) {
var isObject = __webpack_require__(16);
module.exports = function(it){
if(!isObject(it))throw TypeError(it + ' is not an object!');
return it;
};
/***/ },
/* 16 */
/***/ function(module, exports) {
module.exports = function(it){
return typeof it === 'object' ? it !== null : typeof it === 'function';
};
/***/ },
/* 17 */
/***/ function(module, exports, __webpack_require__) {
module.exports = !__webpack_require__(18) && !__webpack_require__(19)(function(){
return Object.defineProperty(__webpack_require__(20)('div'), 'a', {get: function(){ return 7; }}).a != 7;
});
/***/ },
/* 18 */
/***/ function(module, exports, __webpack_require__) {
// Thank's IE8 for his funny defineProperty
module.exports = !__webpack_require__(19)(function(){
return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
});
/***/ },
/* 19 */
/***/ function(module, exports) {
module.exports = function(exec){
try {
return !!exec();
} catch(e){
return true;
}
};
/***/ },
/* 20 */
/***/ function(module, exports, __webpack_require__) {
var isObject = __webpack_require__(16)
, document = __webpack_require__(9).document
// in old IE typeof document.createElement is 'object'
, is = isObject(document) && isObject(document.createElement);
module.exports = function(it){
return is ? document.createElement(it) : {};
};
/***/ },
/* 21 */
/***/ function(module, exports, __webpack_require__) {
// 7.1.1 ToPrimitive(input [, PreferredType])
var isObject = __webpack_require__(16);
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
module.exports = function(it, S){
if(!isObject(it))return it;
var fn, val;
if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
throw TypeError("Can't convert object to primitive value");
};
/***/ },
/* 22 */
/***/ function(module, exports) {
module.exports = function(bitmap, value){
return {
enumerable : !(bitmap & 1),
configurable: !(bitmap & 2),
writable : !(bitmap & 4),
value : value
};
};
/***/ },
/* 23 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
// 19.1.2.1 Object.assign(target, source, ...)
var getKeys = __webpack_require__(24)
, gOPS = __webpack_require__(39)
, pIE = __webpack_require__(40)
, toObject = __webpack_require__(41)
, IObject = __webpack_require__(28)
, $assign = Object.assign;
// should work with symbols and should have deterministic property order (V8 bug)
module.exports = !$assign || __webpack_require__(19)(function(){
var A = {}
, B = {}
, S = Symbol()
, K = 'abcdefghijklmnopqrst';
A[S] = 7;
K.split('').forEach(function(k){ B[k] = k; });
return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
}) ? function assign(target, source){ // eslint-disable-line no-unused-vars
var T = toObject(target)
, aLen = arguments.length
, index = 1
, getSymbols = gOPS.f
, isEnum = pIE.f;
while(aLen > index){
var S = IObject(arguments[index++])
, keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
, length = keys.length
, j = 0
, key;
while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
} return T;
} : $assign;
/***/ },
/* 24 */
/***/ function(module, exports, __webpack_require__) {
// 19.1.2.14 / 15.2.3.14 Object.keys(O)
var $keys = __webpack_require__(25)
, enumBugKeys = __webpack_require__(38);
module.exports = Object.keys || function keys(O){
return $keys(O, enumBugKeys);
};
/***/ },
/* 25 */
/***/ function(module, exports, __webpack_require__) {
var has = __webpack_require__(26)
, toIObject = __webpack_require__(27)
, arrayIndexOf = __webpack_require__(31)(false)
, IE_PROTO = __webpack_require__(35)('IE_PROTO');
module.exports = function(object, names){
var O = toIObject(object)
, i = 0
, result = []
, key;
for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
// Don't enum bug & hidden keys
while(names.length > i)if(has(O, key = names[i++])){
~arrayIndexOf(result, key) || result.push(key);
}
return result;
};
/***/ },
/* 26 */
/***/ function(module, exports) {
var hasOwnProperty = {}.hasOwnProperty;
module.exports = function(it, key){
return hasOwnProperty.call(it, key);
};
/***/ },
/* 27 */
/***/ function(module, exports, __webpack_require__) {
// to indexed object, toObject with fallback for non-array-like ES3 strings
var IObject = __webpack_require__(28)
, defined = __webpack_require__(30);
module.exports = function(it){
return IObject(defined(it));
};
/***/ },
/* 28 */
/***/ function(module, exports, __webpack_require__) {
// fallback for non-array-like ES3 and non-enumerable old V8 strings
var cof = __webpack_require__(29);
module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
return cof(it) == 'String' ? it.split('') : Object(it);
};
/***/ },
/* 29 */
/***/ function(module, exports) {
var toString = {}.toString;
module.exports = function(it){
return toString.call(it).slice(8, -1);
};
/***/ },
/* 30 */
/***/ function(module, exports) {
// 7.2.1 RequireObjectCoercible(argument)
module.exports = function(it){
if(it == undefined)throw TypeError("Can't call method on " + it);
return it;
};
/***/ },
/* 31 */
/***/ function(module, exports, __webpack_require__) {
// false -> Array#indexOf
// true -> Array#includes
var toIObject = __webpack_require__(27)
, toLength = __webpack_require__(32)
, toIndex = __webpack_require__(34);
module.exports = function(IS_INCLUDES){
return function($this, el, fromIndex){
var O = toIObject($this)
, length = toLength(O.length)
, index = toIndex(fromIndex, length)
, value;
// Array#includes uses SameValueZero equality algorithm
if(IS_INCLUDES && el != el)while(length > index){
value = O[index++];
if(value != value)return true;
// Array#toIndex ignores holes, Array#includes - not
} else for(;length > index; index++)if(IS_INCLUDES || index in O){
if(O[index] === el)return IS_INCLUDES || index || 0;
} return !IS_INCLUDES && -1;
};
};
/***/ },
/* 32 */
/***/ function(module, exports, __webpack_require__) {
// 7.1.15 ToLength
var toInteger = __webpack_require__(33)
, min = Math.min;
module.exports = function(it){
return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
};
/***/ },
/* 33 */
/***/ function(module, exports) {
// 7.1.4 ToInteger
var ceil = Math.ceil
, floor = Math.floor;
module.exports = function(it){
return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
};
/***/ },
/* 34 */
/***/ function(module, exports, __webpack_require__) {
var toInteger = __webpack_require__(33)
, max = Math.max
, min = Math.min;
module.exports = function(index, length){
index = toInteger(index);
return index < 0 ? max(index + length, 0) : min(index, length);
};
/***/ },
/* 35 */
/***/ function(module, exports, __webpack_require__) {
var shared = __webpack_require__(36)('keys')
, uid = __webpack_require__(37);
module.exports = function(key){
return shared[key] || (shared[key] = uid(key));
};
/***/ },
/* 36 */
/***/ function(module, exports, __webpack_require__) {
var global = __webpack_require__(9)
, SHARED = '__core-js_shared__'
, store = global[SHARED] || (global[SHARED] = {});
module.exports = function(key){
return store[key] || (store[key] = {});
};
/***/ },
/* 37 */
/***/ function(module, exports) {
var id = 0
, px = Math.random();
module.exports = function(key){
return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
};
/***/ },
/* 38 */
/***/ function(module, exports) {
// IE 8- don't enum bug keys
module.exports = (
'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
).split(',');
/***/ },
/* 39 */
/***/ function(module, exports) {
exports.f = Object.getOwnPropertySymbols;
/***/ },
/* 40 */
/***/ function(module, exports) {
exports.f = {}.propertyIsEnumerable;
/***/ },
/* 41 */
/***/ function(module, exports, __webpack_require__) {
// 7.1.13 ToObject(argument)
var defined = __webpack_require__(30);
module.exports = function(it){
return Object(defined(it));
};
/***/ },
/* 42 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
var _isIterable2 = __webpack_require__(43);
var _isIterable3 = _interopRequireDefault(_isIterable2);
var _getIterator2 = __webpack_require__(64);
var _getIterator3 = _interopRequireDefault(_getIterator2);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = function () {
function sliceIterator(arr, i) {
var _arr = [];
var _n = true;
var _d = false;
var _e = undefined;
try {
for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) {
_arr.push(_s.value);
if (i && _arr.length === i) break;
}
} catch (err) {
_d = true;
_e = err;
} finally {
try {
if (!_n && _i["return"]) _i["return"]();
} finally {
if (_d) throw _e;
}
}
return _arr;
}
return function (arr, i) {
if (Array.isArray(arr)) {
return arr;
} else if ((0, _isIterable3.default)(Object(arr))) {
return sliceIterator(arr, i);
} else {
throw new TypeError("Invalid attempt to destructure non-iterable instance");
}
};
}();
/***/ },
/* 43 */
/***/ function(module, exports, __webpack_require__) {
module.exports = { "default": __webpack_require__(44), __esModule: true };
/***/ },
/* 44 */
/***/ function(module, exports, __webpack_require__) {
__webpack_require__(45);
__webpack_require__(60);
module.exports = __webpack_require__(62);
/***/ },
/* 45 */
/***/ function(module, exports, __webpack_require__) {
__webpack_require__(46);
var global = __webpack_require__(9)
, hide = __webpack_require__(13)
, Iterators = __webpack_require__(49)
, TO_STRING_TAG = __webpack_require__(58)('toStringTag');
for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){
var NAME = collections[i]
, Collection = global[NAME]
, proto = Collection && Collection.prototype;
if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);
Iterators[NAME] = Iterators.Array;
}
/***/ },
/* 46 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var addToUnscopables = __webpack_require__(47)
, step = __webpack_require__(48)
, Iterators = __webpack_require__(49)
, toIObject = __webpack_require__(27);
// 22.1.3.4 Array.prototype.entries()
// 22.1.3.13 Array.prototype.keys()
// 22.1.3.29 Array.prototype.values()
// 22.1.3.30 Array.prototype[@@iterator]()
module.exports = __webpack_require__(50)(Array, 'Array', function(iterated, kind){
this._t = toIObject(iterated); // target
this._i = 0; // next index
this._k = kind; // kind
// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
}, function(){
var O = this._t
, kind = this._k
, index = this._i++;
if(!O || index >= O.length){
this._t = undefined;
return step(1);
}
if(kind == 'keys' )return step(0, index);
if(kind == 'values')return step(0, O[index]);
return step(0, [index, O[index]]);
}, 'values');
// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
Iterators.Arguments = Iterators.Array;
addToUnscopables('keys');
addToUnscopables('values');
addToUnscopables('entries');
/***/ },
/* 47 */
/***/ function(module, exports) {
module.exports = function(){ /* empty */ };
/***/ },
/* 48 */
/***/ function(module, exports) {
module.exports = function(done, value){
return {value: value, done: !!done};
};
/***/ },
/* 49 */
/***/ function(module, exports) {
module.exports = {};
/***/ },
/* 50 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var LIBRARY = __webpack_require__(51)
, $export = __webpack_require__(8)
, redefine = __webpack_require__(52)
, hide = __webpack_require__(13)
, has = __webpack_require__(26)
, Iterators = __webpack_require__(49)
, $iterCreate = __webpack_require__(53)
, setToStringTag = __webpack_require__(57)
, getPrototypeOf = __webpack_require__(59)
, ITERATOR = __webpack_require__(58)('iterator')
, BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`
, FF_ITERATOR = '@@iterator'
, KEYS = 'keys'
, VALUES = 'values';
var returnThis = function(){ return this; };
module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){
$iterCreate(Constructor, NAME, next);
var getMethod = function(kind){
if(!BUGGY && kind in proto)return proto[kind];
switch(kind){
case KEYS: return function keys(){ return new Constructor(this, kind); };
case VALUES: return function values(){ return new Constructor(this, kind); };
} return function entries(){ return new Constructor(this, kind); };
};
var TAG = NAME + ' Iterator'
, DEF_VALUES = DEFAULT == VALUES
, VALUES_BUG = false
, proto = Base.prototype
, $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]
, $default = $native || getMethod(DEFAULT)
, $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined
, $anyNative = NAME == 'Array' ? proto.entries || $native : $native
, methods, key, IteratorPrototype;
// Fix native
if($anyNative){
IteratorPrototype = getPrototypeOf($anyNative.call(new Base));
if(IteratorPrototype !== Object.prototype){
// Set @@toStringTag to native iterators
setToStringTag(IteratorPrototype, TAG, true);
// fix for some old engines
if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);
}
}
// fix Array#{values, @@iterator}.name in V8 / FF
if(DEF_VALUES && $native && $native.name !== VALUES){
VALUES_BUG = true;
$default = function values(){ return $native.call(this); };
}
// Define iterator
if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){
hide(proto, ITERATOR, $default);
}
// Plug for library
Iterators[NAME] = $default;
Iterators[TAG] = returnThis;
if(DEFAULT){
methods = {
values: DEF_VALUES ? $default : getMethod(VALUES),
keys: IS_SET ? $default : getMethod(KEYS),
entries: $entries
};
if(FORCED)for(key in methods){
if(!(key in proto))redefine(proto, key, methods[key]);
} else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
}
return methods;
};
/***/ },
/* 51 */
/***/ function(module, exports) {
module.exports = true;
/***/ },
/* 52 */
/***/ function(module, exports, __webpack_require__) {
module.exports = __webpack_require__(13);
/***/ },
/* 53 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var create = __webpack_require__(54)
, descriptor = __webpack_require__(22)
, setToStringTag = __webpack_require__(57)
, IteratorPrototype = {};
// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
__webpack_require__(13)(IteratorPrototype, __webpack_require__(58)('iterator'), function(){ return this; });
module.exports = function(Constructor, NAME, next){
Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});
setToStringTag(Constructor, NAME + ' Iterator');
};
/***/ },
/* 54 */
/***/ function(module, exports, __webpack_require__) {
// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
var anObject = __webpack_require__(15)
, dPs = __webpack_require__(55)
, enumBugKeys = __webpack_require__(38)
, IE_PROTO = __webpack_require__(35)('IE_PROTO')
, Empty = function(){ /* empty */ }
, PROTOTYPE = 'prototype';
// Create object with fake `null` prototype: use iframe Object with cleared prototype
var createDict = function(){
// Thrash, waste and sodomy: IE GC bug
var iframe = __webpack_require__(20)('iframe')
, i = enumBugKeys.length
, gt = '>'
, iframeDocument;
iframe.style.display = 'none';
__webpack_require__(56).appendChild(iframe);
iframe.src = 'javascript:'; // eslint-disable-line no-script-url
// createDict = iframe.contentWindow.Object;
// html.removeChild(iframe);
iframeDocument = iframe.contentWindow.document;
iframeDocument.open();
iframeDocument.write('<script>document.F=Object</script' + gt);
iframeDocument.close();
createDict = iframeDocument.F;
while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];
return createDict();
};
module.exports = Object.create || function create(O, Properties){
var result;
if(O !== null){
Empty[PROTOTYPE] = anObject(O);
result = new Empty;
Empty[PROTOTYPE] = null;
// add "__proto__" for Object.getPrototypeOf polyfill
result[IE_PROTO] = O;
} else result = createDict();
return Properties === undefined ? result : dPs(result, Properties);
};
/***/ },
/* 55 */
/***/ function(module, exports, __webpack_require__) {
var dP = __webpack_require__(14)
, anObject = __webpack_require__(15)
, getKeys = __webpack_req