adui
Version:
<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>
221 lines (220 loc) • 44.4 kB
JavaScript
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var React = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _shallowequal = _interopRequireDefault(require("shallowequal"));
var _addEventListener = _interopRequireDefault(require("rc-util/lib/Dom/addEventListener"));
var _omit = _interopRequireDefault(require("../_util/omit"));
var _resizeObserver = _interopRequireDefault(require("../resize-observer"));
require("./style");
var _excluded = ["children", "className", "style", "width"];
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
var prefix = "adui-affix";
var Affix = exports["default"] = function (_React$Component) {
function Affix(_props) {
var _this;
_classCallCheck(this, Affix);
_this = _callSuper(this, Affix, [_props]);
_this.fixedNode = void 0;
_this.placeholderNode = void 0;
_this.scrollEventHandler = void 0;
_this.componentDidMount = function () {
var getTarget = _this.props.getTarget;
var target = getTarget ? getTarget() : window;
_this.scrollEventHandler = (0, _addEventListener["default"])(target, "scroll", _this.updatePosition);
_this.updatePosition();
_this.syncPlaceholderStyle();
};
_this.componentWillUnmount = function () {
if (_this.scrollEventHandler) {
_this.scrollEventHandler.remove();
}
};
_this.setAffixStyle = function (newAffixStyle) {
var onChange = _this.props.onChange;
var affixStyle = _this.state.affixStyle;
if (!(0, _shallowequal["default"])(affixStyle, newAffixStyle)) {
_this.setState({
affixStyle: newAffixStyle
});
}
if (!!affixStyle !== !!newAffixStyle && onChange) {
onChange(!!newAffixStyle);
}
};
_this.updatePosition = function () {
var _this2 = _this,
fixedNode = _this2.fixedNode,
placeholderNode = _this2.placeholderNode,
props = _this2.props;
var getContainer = props.getContainer,
getTarget = props.getTarget,
offsetBottom = props.offsetBottom,
offsetTop = props.offsetTop;
var target = getTarget ? getTarget() : window;
if (target && placeholderNode && fixedNode) {
var documentRect = document.body.getBoundingClientRect();
var placeholderRect = placeholderNode.getBoundingClientRect();
var fixedRect = fixedNode.getBoundingClientRect();
var targetRect = getTarget ? getTarget().getBoundingClientRect() : documentRect;
var documentRectLeft = documentRect.left;
var placeholderRectLeft = placeholderRect.left;
var targetTop = getTarget ? targetRect.top : 0;
var targetHeight = getTarget ? targetRect.height : window.innerHeight;
var affixStyle = {
left: documentRectLeft + placeholderRectLeft,
position: "fixed",
width: fixedRect.width
};
if (offsetBottom !== null && offsetBottom !== undefined && !isNaN(offsetBottom)) {
setTimeout(function () {
placeholderRect = placeholderNode.getBoundingClientRect();
if (placeholderRect.bottom > targetHeight - offsetBottom + targetTop) {
if (getContainer && getContainer()) {
var containerRect = getContainer().getBoundingClientRect();
var bottom = targetHeight - containerRect.top - placeholderRect.height + targetTop;
if (bottom <= offsetBottom) {
if (placeholderRect.height) {
affixStyle.bottom = bottom + placeholderRect.height < 0 ? -placeholderRect.height : bottom;
}
} else {
affixStyle.bottom = offsetBottom + window.innerHeight - targetTop - targetHeight;
}
} else {
affixStyle.bottom = offsetBottom + window.innerHeight - targetTop - targetHeight;
}
_this.setAffixStyle(affixStyle);
} else {
_this.setAffixStyle(null);
}
}, 0);
} else if (placeholderRect.top < (offsetTop || 0) + targetTop) {
if (getContainer && getContainer()) {
var containerRect = getContainer().getBoundingClientRect();
var top = containerRect.height + containerRect.top - placeholderRect.height - targetTop;
if (offsetTop !== undefined && top <= offsetTop) {
affixStyle.top = top + placeholderRect.height < 0 ? -placeholderRect.height : top;
} else {
affixStyle.top = targetTop + (offsetTop || 0);
}
} else {
affixStyle.top = targetTop + (offsetTop || 0);
}
_this.setAffixStyle(affixStyle);
} else {
_this.setAffixStyle(null);
}
}
};
_this.syncPlaceholderStyle = function () {
_this.updatePosition();
var affixStyle = _this.state.affixStyle;
if (_this.placeholderNode && affixStyle) {
var widthPrev = _this.placeholderNode.style.width;
_this.placeholderNode.style.width = "";
var width = _this.placeholderNode.offsetWidth;
_this.setAffixStyle(_objectSpread(_objectSpread({}, affixStyle), {}, {
width: width
}));
if (!width) {
_this.placeholderNode.style.width = widthPrev;
}
}
};
_this.savePlaceholderNode = function (node) {
_this.placeholderNode = node;
};
_this.saveFixedNode = function (node) {
_this.fixedNode = node;
};
_this.state = {
affixStyle: undefined
};
return _this;
}
_inherits(Affix, _React$Component);
return _createClass(Affix, [{
key: "render",
value: function render() {
var _this3 = this;
var _this$props = this.props,
children = _this$props.children,
className = _this$props.className,
style = _this$props.style,
widthProp = _this$props.width,
otherProps = _objectWithoutProperties(_this$props, _excluded);
var restProps = (0, _omit["default"])(otherProps, ["getContainer", "getTarget", "offsetBottom", "offsetTop", "onChange"]);
var affixStyle = this.state.affixStyle;
var classSet = (0, _classnames["default"])(className, "".concat(prefix, "-base"));
return React.createElement("div", {
ref: this.savePlaceholderNode,
style: {
width: widthProp
}
}, React.createElement(_resizeObserver["default"], {
onResize: function onResize(_ref) {
var width = _ref.width,
height = _ref.height;
_this3.updatePosition();
_this3.syncPlaceholderStyle();
if (_this3.placeholderNode && width && height) {
if (!widthProp) {
_this3.placeholderNode.style.width = "".concat(width, "px");
}
_this3.placeholderNode.style.height = "".concat(height, "px");
}
}
}, React.createElement("div", _extends({
className: classSet,
ref: this.saveFixedNode,
style: _objectSpread(_objectSpread({}, affixStyle), style)
}, restProps), children)));
}
}]);
}(React.Component);
Affix.propTypes = {
children: _propTypes["default"].node,
className: _propTypes["default"].string,
getContainer: _propTypes["default"].func,
getTarget: _propTypes["default"].func,
offsetBottom: _propTypes["default"].number,
offsetTop: _propTypes["default"].number,
onChange: _propTypes["default"].func,
style: _propTypes["default"].object
};
Affix.defaultProps = {
children: "",
className: undefined,
getContainer: null,
getTarget: null,
offsetBottom: null,
offsetTop: 0,
onChange: null,
style: {}
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9wcm9wVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NsYXNzbmFtZXMiLCJfc2hhbGxvd2VxdWFsIiwiX2FkZEV2ZW50TGlzdGVuZXIiLCJfb21pdCIsIl9yZXNpemVPYnNlcnZlciIsIl9leGNsdWRlZCIsImUiLCJfX2VzTW9kdWxlIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiV2Vha01hcCIsInIiLCJ0IiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9leHRlbmRzIiwiYXNzaWduIiwiYmluZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFwcGx5IiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwibyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwicyIsImluY2x1ZGVzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJvd25LZXlzIiwia2V5cyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiX29iamVjdFNwcmVhZCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwidmFsdWUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9jbGFzc0NhbGxDaGVjayIsIlR5cGVFcnJvciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwia2V5IiwiX2NyZWF0ZUNsYXNzIiwicHJvdG90eXBlIiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIlJlZmVyZW5jZUVycm9yIiwiQm9vbGVhbiIsInZhbHVlT2YiLCJzZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiX2luaGVyaXRzIiwiY3JlYXRlIiwiX3NldFByb3RvdHlwZU9mIiwicHJlZml4IiwiQWZmaXgiLCJleHBvcnRzIiwiX1JlYWN0JENvbXBvbmVudCIsInByb3BzIiwiX3RoaXMiLCJmaXhlZE5vZGUiLCJwbGFjZWhvbGRlck5vZGUiLCJzY3JvbGxFdmVudEhhbmRsZXIiLCJjb21wb25lbnREaWRNb3VudCIsImdldFRhcmdldCIsInRhcmdldCIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJ1cGRhdGVQb3NpdGlvbiIsInN5bmNQbGFjZWhvbGRlclN0eWxlIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW1vdmUiLCJzZXRBZmZpeFN0eWxlIiwibmV3QWZmaXhTdHlsZSIsIm9uQ2hhbmdlIiwiYWZmaXhTdHlsZSIsInN0YXRlIiwic2hhbGxvd2VxdWFsIiwic2V0U3RhdGUiLCJfdGhpczIiLCJnZXRDb250YWluZXIiLCJvZmZzZXRCb3R0b20iLCJvZmZzZXRUb3AiLCJkb2N1bWVudFJlY3QiLCJkb2N1bWVudCIsImJvZHkiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJwbGFjZWhvbGRlclJlY3QiLCJmaXhlZFJlY3QiLCJ0YXJnZXRSZWN0IiwiZG9jdW1lbnRSZWN0TGVmdCIsImxlZnQiLCJwbGFjZWhvbGRlclJlY3RMZWZ0IiwidGFyZ2V0VG9wIiwidG9wIiwidGFyZ2V0SGVpZ2h0IiwiaGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJwb3NpdGlvbiIsIndpZHRoIiwidW5kZWZpbmVkIiwiaXNOYU4iLCJzZXRUaW1lb3V0IiwiYm90dG9tIiwiY29udGFpbmVyUmVjdCIsIndpZHRoUHJldiIsInN0eWxlIiwib2Zmc2V0V2lkdGgiLCJzYXZlUGxhY2Vob2xkZXJOb2RlIiwibm9kZSIsInNhdmVGaXhlZE5vZGUiLCJyZW5kZXIiLCJfdGhpczMiLCJfdGhpcyRwcm9wcyIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwid2lkdGhQcm9wIiwib3RoZXJQcm9wcyIsInJlc3RQcm9wcyIsIm9taXQiLCJjbGFzc1NldCIsImNsYXNzTmFtZXMiLCJjb25jYXQiLCJjcmVhdGVFbGVtZW50IiwicmVmIiwib25SZXNpemUiLCJfcmVmIiwiQ29tcG9uZW50IiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiZnVuYyIsIm51bWJlciIsIm9iamVjdCIsImRlZmF1bHRQcm9wcyJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvYWZmaXgvQWZmaXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWZmaXgg57uE5Lu25bCG5LiN5Lya5L+u5pS55oiQIEZ1bmN0aW9uQ29tcG9uZW5077yMXG4gKiDlm6DkuLrmiJHvvIhZaWppZe+8ieWwneivlei/h+WPkeeOsOS8muS4gOebtOinpuWPkSBvbkNoYW5nZSwgYWZmaXhTdHlsZSDmmI7mmI7mnInvvIzkvYbmmK/lnKggb25DaGFuZ2Ug5pe25LiA55u05pivIHVuZGVmaW5lZFxuICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgc2hhbGxvd2VxdWFsIGZyb20gXCJzaGFsbG93ZXF1YWxcIlxuaW1wb3J0IGFkZEV2ZW50TGlzdGVuZXIgZnJvbSBcInJjLXV0aWwvbGliL0RvbS9hZGRFdmVudExpc3RlbmVyXCJcbmltcG9ydCBvbWl0IGZyb20gXCIuLi9fdXRpbC9vbWl0XCJcbmltcG9ydCBSZXNpemVPYnNlcnZlciBmcm9tIFwiLi4vcmVzaXplLW9ic2VydmVyXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktYWZmaXhcIlxuXG5leHBvcnQgaW50ZXJmYWNlIElBZmZpeFByb3BzIHtcbiAgW2tleTogc3RyaW5nXTogYW55XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBnZXRDb250YWluZXI/OiAoKCkgPT4gSFRNTEVsZW1lbnQpIHwgbnVsbFxuICBnZXRUYXJnZXQ/OiAoKCkgPT4gSFRNTEVsZW1lbnQpIHwgbnVsbFxuICBvZmZzZXRCb3R0b20/OiBudW1iZXIgfCBudWxsXG4gIG9mZnNldFRvcD86IG51bWJlclxuICBvbkNoYW5nZT86ICgoYWZmaXhlZDogYm9vbGVhbikgPT4gdm9pZCkgfCBudWxsXG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllc1xuICAvLyAyMDI0MDcwMSDlop7liqAgd2lkdGggcHJvcO+8jOWmguaenOWklumDqOaMh+WumuS6hiB3aWR0aO+8jOWImeS4jeWGjeWcqOWGhemDqOWKqOaAgeiuoeeul+WuveW6plxuICB3aWR0aD86IFJlYWN0LkNTU1Byb3BlcnRpZXNbXCJ3aWR0aFwiXVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElBZmZpeFN0YXRlIHtcbiAgYWZmaXhTdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCBudWxsXG59XG5cbi8qKlxuICog5Zu66ZKJXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFmZml4IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PElBZmZpeFByb3BzLCBJQWZmaXhTdGF0ZT4ge1xuICBwdWJsaWMgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAvKipcbiAgICAgKiDlrZDoioLngrlcbiAgICAgKi9cbiAgICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gICAgLyoqXG4gICAgICog6ZmE5Yqg57G75ZCNXG4gICAgICovXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIC8qKlxuICAgICAqICgpID0+IEhUTUxFbGVtZW50IOWbuumSieeahOaYvuekuuWMuuWfn++8jOawuOi/nOS8muWcqOatpOaWueazleS8oOWbnueahOWFg+e0oOWGhVxuICAgICAqL1xuICAgIGdldENvbnRhaW5lcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgLyoqXG4gICAgICogKCkgPT4gSFRNTEVsZW1lbnQg55uR5ZCs5rua5Yqo55qE5YWD57Sg77yM6buY6K6k5ZyoIHdpbmRvdyDkuIpcbiAgICAgKi9cbiAgICBnZXRUYXJnZXQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIC8qKlxuICAgICAqIOi3neemu+eql+WPo+mhtumDqOi+vuWIsOaMh+WumuWBj+enu+mHj+WQjuinpuWPke+8jOWmguaenOS8oOWFpeS6hiBvZmZzZXRCb3R0b23vvIxBZmZpeCDkvJrlv73nlaUgb2Zmc2V0VG9wXG4gICAgICovXG4gICAgb2Zmc2V0Qm90dG9tOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIC8qKlxuICAgICAqIOi3neemu+eql+WPo+mhtumDqOi+vuWIsOaMh+WumuWBj+enu+mHj+WQjuinpuWPkVxuICAgICAqL1xuICAgIG9mZnNldFRvcDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAvKipcbiAgICAgKiDlm7rlrprnirbmgIHmlLnlj5jml7bnmoQgaGFuZGxlclxuICAgICAqL1xuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAvKipcbiAgICAgKiDpmYTliqDmoLflvI9cbiAgICAgKi9cbiAgICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZGVmYXVsdFByb3BzOiBJQWZmaXhQcm9wcyA9IHtcbiAgICBjaGlsZHJlbjogXCJcIixcbiAgICBjbGFzc05hbWU6IHVuZGVmaW5lZCxcbiAgICBnZXRDb250YWluZXI6IG51bGwsXG4gICAgZ2V0VGFyZ2V0OiBudWxsLFxuICAgIG9mZnNldEJvdHRvbTogbnVsbCxcbiAgICBvZmZzZXRUb3A6IDAsXG4gICAgb25DaGFuZ2U6IG51bGwsXG4gICAgc3R5bGU6IHt9LFxuICB9XG5cbiAgcHVibGljIGZpeGVkTm9kZTogSFRNTERpdkVsZW1lbnRcblxuICBwdWJsaWMgcGxhY2Vob2xkZXJOb2RlOiBIVE1MRGl2RWxlbWVudFxuXG4gIHByaXZhdGUgc2Nyb2xsRXZlbnRIYW5kbGVyOiBhbnlcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSUFmZml4UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcylcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgYWZmaXhTdHlsZTogdW5kZWZpbmVkLFxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjb21wb25lbnREaWRNb3VudCA9ICgpID0+IHtcbiAgICBjb25zdCB7IGdldFRhcmdldCB9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHRhcmdldCA9IGdldFRhcmdldCA/IGdldFRhcmdldCgpIDogd2luZG93XG4gICAgdGhpcy5zY3JvbGxFdmVudEhhbmRsZXIgPSBhZGRFdmVudExpc3RlbmVyKFxuICAgICAgdGFyZ2V0LFxuICAgICAgXCJzY3JvbGxcIixcbiAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25cbiAgICApXG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbigpXG4gICAgdGhpcy5zeW5jUGxhY2Vob2xkZXJTdHlsZSgpXG4gIH1cblxuICBwdWJsaWMgY29tcG9uZW50V2lsbFVubW91bnQgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuc2Nyb2xsRXZlbnRIYW5kbGVyKSB7XG4gICAgICB0aGlzLnNjcm9sbEV2ZW50SGFuZGxlci5yZW1vdmUoKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRBZmZpeFN0eWxlID0gKG5ld0FmZml4U3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCBudWxsKSA9PiB7XG4gICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHsgYWZmaXhTdHlsZSB9ID0gdGhpcy5zdGF0ZVxuICAgIGlmICghc2hhbGxvd2VxdWFsKGFmZml4U3R5bGUsIG5ld0FmZml4U3R5bGUpKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgYWZmaXhTdHlsZTogbmV3QWZmaXhTdHlsZSB9KVxuICAgIH1cbiAgICBpZiAoISFhZmZpeFN0eWxlICE9PSAhIW5ld0FmZml4U3R5bGUgJiYgb25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKCEhbmV3QWZmaXhTdHlsZSlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlUG9zaXRpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgeyBmaXhlZE5vZGUsIHBsYWNlaG9sZGVyTm9kZSwgcHJvcHMgfSA9IHRoaXNcbiAgICBjb25zdCB7IGdldENvbnRhaW5lciwgZ2V0VGFyZ2V0LCBvZmZzZXRCb3R0b20sIG9mZnNldFRvcCB9ID0gcHJvcHNcbiAgICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXQgPyBnZXRUYXJnZXQoKSA6IHdpbmRvd1xuXG4gICAgLy8g5q+P5qyh5L2/55SoIHJlZiDpg73opoHov5vooYzliKTmlq1cbiAgICBpZiAodGFyZ2V0ICYmIHBsYWNlaG9sZGVyTm9kZSAmJiBmaXhlZE5vZGUpIHtcbiAgICAgIC8vIGRvY3VtZW50UmVjdCDmmK/kuIDlrprpnIDopoHnmoTvvIzkuLrkuoborr7nva7mraPnoa7nmoQgbGVmdCDlgLxcbiAgICAgIGNvbnN0IGRvY3VtZW50UmVjdCA9IGRvY3VtZW50LmJvZHkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGxldCBwbGFjZWhvbGRlclJlY3QgPSBwbGFjZWhvbGRlck5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGZpeGVkUmVjdCA9IGZpeGVkTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuXG4gICAgICAvLyDliKTmlq3mmK/lkKbmmK8gd2luZG93XG4gICAgICBjb25zdCB0YXJnZXRSZWN0ID0gZ2V0VGFyZ2V0XG4gICAgICAgID8gZ2V0VGFyZ2V0KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgOiBkb2N1bWVudFJlY3RcbiAgICAgIGNvbnN0IGRvY3VtZW50UmVjdExlZnQgPSBkb2N1bWVudFJlY3QubGVmdFxuICAgICAgY29uc3QgcGxhY2Vob2xkZXJSZWN0TGVmdCA9IHBsYWNlaG9sZGVyUmVjdC5sZWZ0XG5cbiAgICAgIGNvbnN0IHRhcmdldFRvcCA9IGdldFRhcmdldCA/IHRhcmdldFJlY3QudG9wIDogMFxuICAgICAgY29uc3QgdGFyZ2V0SGVpZ2h0ID0gZ2V0VGFyZ2V0ID8gdGFyZ2V0UmVjdC5oZWlnaHQgOiB3aW5kb3cuaW5uZXJIZWlnaHRcblxuICAgICAgY29uc3QgYWZmaXhTdHlsZTogUmVhY3QuQ1NTUHJvcGVydGllcyA9IHtcbiAgICAgICAgbGVmdDogZG9jdW1lbnRSZWN0TGVmdCArIHBsYWNlaG9sZGVyUmVjdExlZnQsXG4gICAgICAgIHBvc2l0aW9uOiBcImZpeGVkXCIsXG4gICAgICAgIHdpZHRoOiBmaXhlZFJlY3Qud2lkdGgsXG4gICAgICB9XG5cbiAgICAgIC8vIOWmguaenOS8oOWFpeS6hiBvZmZzZXRCb3R0b23vvIzliJnkvJrlv73nlaUgb2Zmc2V0VG9wXG4gICAgICBpZiAoXG4gICAgICAgIG9mZnNldEJvdHRvbSAhPT0gbnVsbCAmJlxuICAgICAgICBvZmZzZXRCb3R0b20gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAhaXNOYU4ob2Zmc2V0Qm90dG9tKVxuICAgICAgKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHBsYWNlaG9sZGVyUmVjdCA9IHBsYWNlaG9sZGVyTm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyUmVjdC5ib3R0b20gPlxuICAgICAgICAgICAgdGFyZ2V0SGVpZ2h0IC0gb2Zmc2V0Qm90dG9tICsgdGFyZ2V0VG9wXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoZ2V0Q29udGFpbmVyICYmIGdldENvbnRhaW5lcigpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBnZXRDb250YWluZXIoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgICAgICBjb25zdCBib3R0b20gPVxuICAgICAgICAgICAgICAgIHRhcmdldEhlaWdodCAtXG4gICAgICAgICAgICAgICAgY29udGFpbmVyUmVjdC50b3AgLVxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyUmVjdC5oZWlnaHQgK1xuICAgICAgICAgICAgICAgIHRhcmdldFRvcFxuICAgICAgICAgICAgICBpZiAoYm90dG9tIDw9IG9mZnNldEJvdHRvbSkge1xuICAgICAgICAgICAgICAgIGlmIChwbGFjZWhvbGRlclJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICBhZmZpeFN0eWxlLmJvdHRvbSA9XG4gICAgICAgICAgICAgICAgICAgIGJvdHRvbSArIHBsYWNlaG9sZGVyUmVjdC5oZWlnaHQgPCAwXG4gICAgICAgICAgICAgICAgICAgICAgPyAtcGxhY2Vob2xkZXJSZWN0LmhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgIDogYm90dG9tXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFmZml4U3R5bGUuYm90dG9tID1cbiAgICAgICAgICAgICAgICAgIG9mZnNldEJvdHRvbSArIHdpbmRvdy5pbm5lckhlaWdodCAtIHRhcmdldFRvcCAtIHRhcmdldEhlaWdodFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhZmZpeFN0eWxlLmJvdHRvbSA9XG4gICAgICAgICAgICAgICAgb2Zmc2V0Qm90dG9tICsgd2luZG93LmlubmVySGVpZ2h0IC0gdGFyZ2V0VG9wIC0gdGFyZ2V0SGVpZ2h0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldEFmZml4U3R5bGUoYWZmaXhTdHlsZSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRBZmZpeFN0eWxlKG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICB9LCAwKVxuICAgICAgfSBlbHNlIGlmIChwbGFjZWhvbGRlclJlY3QudG9wIDwgKG9mZnNldFRvcCB8fCAwKSArIHRhcmdldFRvcCkge1xuICAgICAgICBpZiAoZ2V0Q29udGFpbmVyICYmIGdldENvbnRhaW5lcigpKSB7XG4gICAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IGdldENvbnRhaW5lcigpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICAgICAgY29uc3QgdG9wID1cbiAgICAgICAgICAgIGNvbnRhaW5lclJlY3QuaGVpZ2h0ICtcbiAgICAgICAgICAgIGNvbnRhaW5lclJlY3QudG9wIC1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyUmVjdC5oZWlnaHQgLVxuICAgICAgICAgICAgdGFyZ2V0VG9wXG4gICAgICAgICAgaWYgKG9mZnNldFRvcCAhPT0gdW5kZWZpbmVkICYmIHRvcCA8PSBvZmZzZXRUb3ApIHtcbiAgICAgICAgICAgIGFmZml4U3R5bGUudG9wID1cbiAgICAgICAgICAgICAgdG9wICsgcGxhY2Vob2xkZXJSZWN0LmhlaWdodCA8IDAgPyAtcGxhY2Vob2xkZXJSZWN0LmhlaWdodCA6IHRvcFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZmZpeFN0eWxlLnRvcCA9IHRhcmdldFRvcCArIChvZmZzZXRUb3AgfHwgMClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWZmaXhTdHlsZS50b3AgPSB0YXJnZXRUb3AgKyAob2Zmc2V0VG9wIHx8IDApXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRBZmZpeFN0eWxlKGFmZml4U3R5bGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldEFmZml4U3R5bGUobnVsbClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3luY1BsYWNlaG9sZGVyU3R5bGUgPSAoKSA9PiB7XG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbigpXG4gICAgY29uc3QgeyBhZmZpeFN0eWxlIH0gPSB0aGlzLnN0YXRlXG4gICAgLy8g5p2h5Lu25Yik5pat77yaXG4gICAgLy8gMS4g5q+P5qyh5L2/55SoIHJlZiDpg73opoHov5vooYzliKTmlq0gMi4g5Yik5pat5pyJIGFmZml4U3R5bGUg6K+05piO546w5Zyo5q2j5aSE5LqO5Zu65a6a54q25oCB5LitXG4gICAgaWYgKHRoaXMucGxhY2Vob2xkZXJOb2RlICYmIGFmZml4U3R5bGUpIHtcbiAgICAgIGNvbnN0IHdpZHRoUHJldiA9IHRoaXMucGxhY2Vob2xkZXJOb2RlLnN0eWxlLndpZHRoXG4gICAgICB0aGlzLnBsYWNlaG9sZGVyTm9kZS5zdHlsZS53aWR0aCA9IFwiXCJcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5wbGFjZWhvbGRlck5vZGUub2Zmc2V0V2lkdGhcbiAgICAgIHRoaXMuc2V0QWZmaXhTdHlsZSh7XG4gICAgICAgIC4uLmFmZml4U3R5bGUsXG4gICAgICAgIHdpZHRoLFxuICAgICAgfSlcbiAgICAgIGlmICghd2lkdGgpIHtcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlck5vZGUuc3R5bGUud2lkdGggPSB3aWR0aFByZXZcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2F2ZVBsYWNlaG9sZGVyTm9kZSA9IChub2RlOiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgIHRoaXMucGxhY2Vob2xkZXJOb2RlID0gbm9kZVxuICB9XG5cbiAgcHVibGljIHNhdmVGaXhlZE5vZGUgPSAobm9kZTogSFRNTERpdkVsZW1lbnQpID0+IHtcbiAgICB0aGlzLmZpeGVkTm9kZSA9IG5vZGVcbiAgfVxuXG4gIHB1YmxpYyByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBzdHlsZSxcbiAgICAgIHdpZHRoOiB3aWR0aFByb3AsXG4gICAgICAuLi5vdGhlclByb3BzXG4gICAgfSA9IHRoaXMucHJvcHNcblxuICAgIGNvbnN0IHJlc3RQcm9wcyA9IG9taXQob3RoZXJQcm9wcywgW1xuICAgICAgXCJnZXRDb250YWluZXJcIixcbiAgICAgIFwiZ2V0VGFyZ2V0XCIsXG4gICAgICBcIm9mZnNldEJvdHRvbVwiLFxuICAgICAgXCJvZmZzZXRUb3BcIixcbiAgICAgIFwib25DaGFuZ2VcIixcbiAgICBdKVxuXG4gICAgY29uc3QgeyBhZmZpeFN0eWxlIH0gPSB0aGlzLnN0YXRlXG5cbiAgICBjb25zdCBjbGFzc1NldCA9IGNsYXNzTmFtZXMoY2xhc3NOYW1lLCBgJHtwcmVmaXh9LWJhc2VgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXt0aGlzLnNhdmVQbGFjZWhvbGRlck5vZGV9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgd2lkdGg6IHdpZHRoUHJvcCxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPFJlc2l6ZU9ic2VydmVyXG4gICAgICAgICAgb25SZXNpemU9eyh7IHdpZHRoLCBoZWlnaHQgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbigpXG4gICAgICAgICAgICB0aGlzLnN5bmNQbGFjZWhvbGRlclN0eWxlKClcbiAgICAgICAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyTm9kZSAmJiB3aWR0aCAmJiBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgaWYgKCF3aWR0aFByb3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyTm9kZS5zdHlsZS53aWR0aCA9IGAke3dpZHRofXB4YFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJOb2RlLnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc1NldH1cbiAgICAgICAgICAgIHJlZj17dGhpcy5zYXZlRml4ZWROb2RlfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgLi4uYWZmaXhTdHlsZSxcbiAgICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvUmVzaXplT2JzZXJ2ZXI+XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUlBLElBQUFBLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFdBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLGFBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLGlCQUFBLEdBQUFILHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTSxLQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxlQUFBLEdBQUFMLHNCQUFBLENBQUFGLE9BQUE7QUFDQUEsT0FBQTtBQUFnQixJQUFBUSxTQUFBO0FBQUEsU0FBQU4sdUJBQUFPLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxnQkFBQUEsQ0FBQTtBQUFBLFNBQUFFLHlCQUFBRixDQUFBLDZCQUFBRyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFELHdCQUFBLFlBQUFBLHlCQUFBRixDQUFBLFdBQUFBLENBQUEsR0FBQUssQ0FBQSxHQUFBRCxDQUFBLEtBQUFKLENBQUE7QUFBQSxTQUFBVix3QkFBQVUsQ0FBQSxFQUFBSSxDQUFBLFNB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
;