matrix-react-sdk
Version:
SDK for matrix.org using React
200 lines (163 loc) • 24.2 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var sdk = _interopRequireWildcard(require("../../../index"));
var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher"));
var _languageHandler = require("../../../languageHandler");
var _classnames = _interopRequireDefault(require("classnames"));
var _MatrixClientPeg = require("../../../MatrixClientPeg");
var _ContextMenu = require("../../structures/ContextMenu");
var _MatrixClientContext = _interopRequireDefault(require("../../../contexts/MatrixClientContext"));
var _RovingTabIndex = require("../../../accessibility/RovingTabIndex");
var _replaceableComponent = require("../../../utils/replaceableComponent");
var _Media = require("../../../customisations/Media");
var _dec, _class, _class2, _temp;
let GroupInviteTile = ( // XXX this class copies a lot from RoomTile.js
_dec = (0, _replaceableComponent.replaceableComponent)("views.groups.GroupInviteTile"), _dec(_class = (_temp = _class2 = class GroupInviteTile extends _react.default.Component {
constructor(props, context) {
super(props, context);
(0, _defineProperty2.default)(this, "onClick", e => {
_dispatcher.default.dispatch({
action: 'view_group',
group_id: this.props.group.groupId
});
});
(0, _defineProperty2.default)(this, "onMouseEnter", () => {
const state = {
hover: true
}; // Only allow non-guests to access the context menu
if (!this.context.isGuest()) {
state.badgeHover = true;
}
this.setState(state);
});
(0, _defineProperty2.default)(this, "onMouseLeave", () => {
this.setState({
badgeHover: false,
hover: false
});
});
(0, _defineProperty2.default)(this, "onContextMenuButtonClick", e => {
// Prevent the RoomTile onClick event firing as well
e.stopPropagation();
e.preventDefault();
this._showContextMenu(e.target.getBoundingClientRect());
});
(0, _defineProperty2.default)(this, "onContextMenu", e => {
// Prevent the native context menu
e.preventDefault();
this._showContextMenu({
right: e.clientX,
top: e.clientY,
height: 0
});
});
(0, _defineProperty2.default)(this, "closeMenu", () => {
this.setState({
contextMenuPosition: null
});
});
this.state = {
hover: false,
badgeHover: false,
menuDisplayed: false,
selected: this.props.group.groupId === null // XXX: this needs linking to LoggedInView/GroupView state
};
}
_showContextMenu(boundingClientRect) {
// Only allow non-guests to access the context menu
if (_MatrixClientPeg.MatrixClientPeg.get().isGuest()) return;
const state = {
contextMenuPosition: boundingClientRect
}; // If the badge is clicked, then no longer show tooltip
if (this.props.collapsed) {
state.hover = false;
}
this.setState(state);
}
render() {
const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
const BaseAvatar = sdk.getComponent('avatars.BaseAvatar');
const groupName = this.props.group.name || this.props.group.groupId;
const httpAvatarUrl = this.props.group.avatarUrl ? (0, _Media.mediaFromMxc)(this.props.group.avatarUrl).getSquareThumbnailHttp(24) : null;
const av = /*#__PURE__*/_react.default.createElement(BaseAvatar, {
name: groupName,
width: 24,
height: 24,
url: httpAvatarUrl
});
const isMenuDisplayed = Boolean(this.state.contextMenuPosition);
const nameClasses = (0, _classnames.default)('mx_RoomTile_name mx_RoomTile_invite mx_RoomTile_badgeShown', {
'mx_RoomTile_badgeShown': this.state.badgeHover || isMenuDisplayed
}); // XXX: this is a workaround for Firefox giving this div a tabstop :( [tabIndex]
const label = /*#__PURE__*/_react.default.createElement("div", {
title: this.props.group.groupId,
className: nameClasses,
tabIndex: -1,
dir: "auto"
}, groupName);
const badgeEllipsis = this.state.badgeHover || isMenuDisplayed;
const badgeClasses = (0, _classnames.default)('mx_RoomTile_badge mx_RoomTile_highlight', {
'mx_RoomTile_badgeButton': badgeEllipsis
});
const badgeContent = badgeEllipsis ? '\u00B7\u00B7\u00B7' : '!';
let tooltip;
if (this.props.collapsed && this.state.hover) {
const Tooltip = sdk.getComponent("elements.Tooltip");
tooltip = /*#__PURE__*/_react.default.createElement(Tooltip, {
className: "mx_RoomTile_tooltip",
label: groupName,
dir: "auto"
});
}
const classes = (0, _classnames.default)('mx_RoomTile mx_RoomTile_highlight', {
'mx_RoomTile_menuDisplayed': isMenuDisplayed,
'mx_RoomTile_selected': this.state.selected,
'mx_GroupInviteTile': true
});
let contextMenu;
if (isMenuDisplayed) {
const GroupInviteTileContextMenu = sdk.getComponent('context_menus.GroupInviteTileContextMenu');
contextMenu = /*#__PURE__*/_react.default.createElement(_ContextMenu.ContextMenu, (0, _extends2.default)({}, (0, _ContextMenu.toRightOf)(this.state.contextMenuPosition), {
onFinished: this.closeMenu
}), /*#__PURE__*/_react.default.createElement(GroupInviteTileContextMenu, {
group: this.props.group,
onFinished: this.closeMenu
}));
}
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_RovingTabIndex.RovingTabIndexWrapper, null, ({
onFocus,
isActive,
ref
}) => /*#__PURE__*/_react.default.createElement(AccessibleButton, {
onFocus: onFocus,
tabIndex: isActive ? 0 : -1,
inputRef: ref,
className: classes,
onClick: this.onClick,
onMouseEnter: this.onMouseEnter,
onMouseLeave: this.onMouseLeave,
onContextMenu: this.onContextMenu
}, /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomTile_avatar"
}, av), /*#__PURE__*/_react.default.createElement("div", {
className: "mx_RoomTile_nameContainer"
}, label, /*#__PURE__*/_react.default.createElement(_ContextMenu.ContextMenuButton, {
className: badgeClasses,
onClick: this.onContextMenuButtonClick,
label: (0, _languageHandler._t)("Options"),
isExpanded: isMenuDisplayed,
tabIndex: isActive ? 0 : -1
}, badgeContent)), tooltip)), contextMenu);
}
}, (0, _defineProperty2.default)(_class2, "propTypes", void 0), (0, _defineProperty2.default)(_class2, "contextType", _MatrixClientContext.default), _temp)) || _class);
exports.default = GroupInviteTile;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2dyb3Vwcy9Hcm91cEludml0ZVRpbGUuanMiXSwibmFtZXMiOlsiR3JvdXBJbnZpdGVUaWxlIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiY29udGV4dCIsImUiLCJkaXMiLCJkaXNwYXRjaCIsImFjdGlvbiIsImdyb3VwX2lkIiwiZ3JvdXAiLCJncm91cElkIiwic3RhdGUiLCJob3ZlciIsImlzR3Vlc3QiLCJiYWRnZUhvdmVyIiwic2V0U3RhdGUiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsIl9zaG93Q29udGV4dE1lbnUiLCJ0YXJnZXQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJyaWdodCIsImNsaWVudFgiLCJ0b3AiLCJjbGllbnRZIiwiaGVpZ2h0IiwiY29udGV4dE1lbnVQb3NpdGlvbiIsIm1lbnVEaXNwbGF5ZWQiLCJzZWxlY3RlZCIsImJvdW5kaW5nQ2xpZW50UmVjdCIsIk1hdHJpeENsaWVudFBlZyIsImdldCIsImNvbGxhcHNlZCIsInJlbmRlciIsIkFjY2Vzc2libGVCdXR0b24iLCJzZGsiLCJnZXRDb21wb25lbnQiLCJCYXNlQXZhdGFyIiwiZ3JvdXBOYW1lIiwibmFtZSIsImh0dHBBdmF0YXJVcmwiLCJhdmF0YXJVcmwiLCJnZXRTcXVhcmVUaHVtYm5haWxIdHRwIiwiYXYiLCJpc01lbnVEaXNwbGF5ZWQiLCJCb29sZWFuIiwibmFtZUNsYXNzZXMiLCJsYWJlbCIsImJhZGdlRWxsaXBzaXMiLCJiYWRnZUNsYXNzZXMiLCJiYWRnZUNvbnRlbnQiLCJ0b29sdGlwIiwiVG9vbHRpcCIsImNsYXNzZXMiLCJjb250ZXh0TWVudSIsIkdyb3VwSW52aXRlVGlsZUNvbnRleHRNZW51IiwiY2xvc2VNZW51Iiwib25Gb2N1cyIsImlzQWN0aXZlIiwicmVmIiwib25DbGljayIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsIm9uQ29udGV4dE1lbnUiLCJvbkNvbnRleHRNZW51QnV0dG9uQ2xpY2siLCJNYXRyaXhDbGllbnRDb250ZXh0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFrQkE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7SUFJcUJBLGUsS0FGckI7T0FDQyxnREFBcUIsOEJBQXJCLEMsbUNBQUQsTUFDcUJBLGVBRHJCLFNBQzZDQyxlQUFNQyxTQURuRCxDQUM2RDtBQU96REMsRUFBQUEsV0FBVyxDQUFDQyxLQUFELEVBQVFDLE9BQVIsRUFBaUI7QUFDeEIsVUFBTUQsS0FBTixFQUFhQyxPQUFiO0FBRHdCLG1EQVdsQkMsQ0FBQyxJQUFJO0FBQ1hDLDBCQUFJQyxRQUFKLENBQWE7QUFDVEMsUUFBQUEsTUFBTSxFQUFFLFlBREM7QUFFVEMsUUFBQUEsUUFBUSxFQUFFLEtBQUtOLEtBQUwsQ0FBV08sS0FBWCxDQUFpQkM7QUFGbEIsT0FBYjtBQUlILEtBaEIyQjtBQUFBLHdEQWtCYixNQUFNO0FBQ2pCLFlBQU1DLEtBQUssR0FBRztBQUFDQyxRQUFBQSxLQUFLLEVBQUU7QUFBUixPQUFkLENBRGlCLENBRWpCOztBQUNBLFVBQUksQ0FBQyxLQUFLVCxPQUFMLENBQWFVLE9BQWIsRUFBTCxFQUE2QjtBQUN6QkYsUUFBQUEsS0FBSyxDQUFDRyxVQUFOLEdBQW1CLElBQW5CO0FBQ0g7O0FBQ0QsV0FBS0MsUUFBTCxDQUFjSixLQUFkO0FBQ0gsS0F6QjJCO0FBQUEsd0RBMkJiLE1BQU07QUFDakIsV0FBS0ksUUFBTCxDQUFjO0FBQ1ZELFFBQUFBLFVBQVUsRUFBRSxLQURGO0FBRVZGLFFBQUFBLEtBQUssRUFBRTtBQUZHLE9BQWQ7QUFJSCxLQWhDMkI7QUFBQSxvRUFrRERSLENBQUMsSUFBSTtBQUM1QjtBQUNBQSxNQUFBQSxDQUFDLENBQUNZLGVBQUY7QUFDQVosTUFBQUEsQ0FBQyxDQUFDYSxjQUFGOztBQUVBLFdBQUtDLGdCQUFMLENB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QyxNQUFBQSxPQUFEO0FBQVVDLE1BQUFBLFFBQVY7QUFBb0JDLE1BQUFBO0FBQXBCLEtBQUQsa0JBQ0csNkJBQUMsZ0JBQUQ7QUFDSSxNQUFBLE9BQU8sRUFBRUYsT0FEYjtBQUVJLE1BQUEsUUFBUSxFQUFFQyxRQUFRLEdBQUcsQ0FBSCxHQUFPLENBQUMsQ0FGOUI7QUFHSSxNQUFBLFFBQVEsRUFBRUMsR0FIZDtBQUlJLE1BQUEsU0FBUyxFQUFFTixPQUpmO0FBS0ksTUFBQSxPQUFPLEVBQUUsS0FBS08sT0FMbEI7QUFNSSxNQUFBLFlBQVksRUFBRSxLQUFLQyxZQU52QjtBQU9JLE1BQUEsWUFBWSxFQUFFLEtBQUtDLFlBUHZCO0FBUUksTUFBQSxhQUFhLEVBQUUsS0FBS0M7QUFSeEIsb0JBVUk7QUFBSyxNQUFBLFNBQVMsRUFBQztBQUFmLE9BQ01wQixFQUROLENBVkosZUFhSTtBQUFLLE1BQUEsU0FBUyxFQUFDO0FBQWYsT0FDTUksS0FETixlQUVJLDZCQUFDLDhCQUFEO0FBQ0ksTUFBQSxTQUFTLEVBQUVFLFlBRGY7QUFFSSxNQUFBLE9BQU8sRUFBRSxLQUFLZSx3QkFGbEI7QUFHSSxNQUFBLEtBQUssRUFBRSx5QkFBRyxTQUFILENBSFg7QUFJSSxNQUFBLFVBQVUsRUFBRXBCLGVBSmhCO0FBS0ksTUFBQSxRQUFRLEVBQUVjLFFBQVEsR0FBRyxDQUFILEdBQU8sQ0FBQztBQUw5QixPQU9NUixZQVBOLENBRkosQ0FiSixFQXlCTUMsT0F6Qk4sQ0FGUixDQURHLEVBaUNERyxXQWpDQyxDQUFQO0FBbUNIOztBQXZLd0QsQyxxSEFLcENXLDRCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDE3LCAyMDE4IE5ldyBWZWN0b3IgTHRkXG5Db3B5cmlnaHQgMjAxOCBNaWNoYWVsIFRlbGF0eW5za2kgPDd0M2NoZ3V5QGdtYWlsLmNvbT5cbkNvcHlyaWdodCAyMDE5IFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG55b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG5Zb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5Vbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG5kaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG5XSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cblNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbmxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgKiBhcyBzZGsgZnJvbSAnLi4vLi4vLi4vaW5kZXgnO1xuaW1wb3J0IGRpcyBmcm9tICcuLi8uLi8uLi9kaXNwYXRjaGVyL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHtfdH0gZnJvbSAnLi4vLi4vLi4vbGFuZ3VhZ2VIYW5kbGVyJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IHtNYXRyaXhDbGllbnRQZWd9IGZyb20gXCIuLi8uLi8uLi9NYXRyaXhDbGllbnRQZWdcIjtcbmltcG9ydCB7Q29udGV4dE1lbnUsIENvbnRleHRNZW51QnV0dG9uLCB0b1JpZ2h0T2Z9IGZyb20gXCIuLi8uLi9zdHJ1Y3R1cmVzL0NvbnRleHRNZW51XCI7XG5pbXBvcnQgTWF0cml4Q2xpZW50Q29udGV4dCBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IHtSb3ZpbmdUYWJJbmRleFdyYXBwZXJ9IGZyb20gXCIuLi8uLi8uLi9hY2Nlc3NpYmlsaXR5L1JvdmluZ1RhYkluZGV4XCI7XG5pbXBvcnQge3JlcGxhY2VhYmxlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVwbGFjZWFibGVDb21wb25lbnRcIjtcbmltcG9ydCB7bWVkaWFGcm9tTXhjfSBmcm9tIFwiLi4vLi4vLi4vY3VzdG9taXNhdGlvbnMvTWVkaWFcIjtcblxuLy8gWFhYIHRoaXMgY2xhc3MgY29waWVzIGEgbG90IGZyb20gUm9vbVRpbGUuanNcbkByZXBsYWNlYWJsZUNvbXBvbmVudChcInZpZXdzLmdyb3Vwcy5Hcm91cEludml0ZVRpbGVcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdyb3VwSW52aXRlVGlsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gICAgc3RhdGljIHByb3BUeXBlczoge1xuICAgICAgICBncm91cDogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICAgIH07XG5cbiAgICBzdGF0aWMgY29udGV4dFR5cGUgPSBNYXRyaXhDbGllbnRDb250ZXh0O1xuXG4gICAgY29uc3RydWN0b3IocHJvcHMsIGNvbnRleHQpIHtcbiAgICAgICAgc3VwZXIocHJvcHMsIGNvbnRleHQpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICAgICAgICBob3ZlcjogZmFsc2UsXG4gICAgICAgICAgICBiYWRnZUhvdmVyOiBmYWxzZSxcbiAgICAgICAgICAgIG1lbnVEaXNwbGF5ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMucHJvcHMuZ3JvdXAuZ3JvdXBJZCA9PT0gbnVsbCwgLy8gWFhYOiB0aGlzIG5lZWRzIGxpbmtpbmcgdG8gTG9nZ2VkSW5WaWV3L0dyb3VwVmlldyBzdGF0ZVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIG9uQ2xpY2sgPSBlID0+IHtcbiAgICAgICAgZGlzLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3ZpZXdfZ3JvdXAnLFxuICAgICAgICAgICAgZ3JvdXBfaWQ6IHRoaXMucHJvcHMuZ3JvdXAuZ3JvdXBJZCxcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIG9uTW91c2VFbnRlciA9ICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7aG92ZXI6IHRydWV9O1xuICAgICAgICAvLyBPbmx5IGFsbG93IG5vbi1ndWVzdHMgdG8gYWNjZXNzIHRoZSBjb250ZXh0IG1lbnVcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQuaXNHdWVzdCgpKSB7XG4gICAgICAgICAgICBzdGF0ZS5iYWRnZUhvdmVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlKTtcbiAgICB9O1xuXG4gICAgb25Nb3VzZUxlYXZlID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGJhZGdlSG92ZXI6IGZhbHNlLFxuICAgICAgICAgICAgaG92ZXI6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Nob3dDb250ZXh0TWVudShib3VuZGluZ0NsaWVudFJlY3QpIHtcbiAgICAgICAgLy8gT25seSBhbGxvdyBub24tZ3Vlc3RzIHRvIGFjY2VzcyB0aGUgY29udGV4dCBtZW51XG4gICAgICAgIGlmIChNYXRyaXhDbGllbnRQZWcuZ2V0KCkuaXNHdWVzdCgpKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgICAgICBjb250ZXh0TWVudVBvc2l0aW9uOiBib3VuZGluZ0NsaWVudFJlY3QsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gSWYgdGhlIGJhZGdlIGlzIGNsaWNrZWQsIHRoZW4gbm8gbG9uZ2VyIHNob3cgdG9vbHRpcFxuICAgICAgICBpZiAodGhpcy5wcm9wcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHN0YXRlLmhvdmVyID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlKTtcbiAgICB9XG5cbiAgICBvbkNvbnRleHRNZW51QnV0dG9uQ2xpY2sgPSBlID0+IHtcbiAgICAgICAgLy8gUHJldmVudCB0aGUgUm9vbVRpbGUgb25DbGljayBldmVudCBmaXJpbmcgYXMgd2VsbFxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgdGhpcy5fc2hvd0NvbnRleHRNZW51KGUudGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpKTtcbiAgICB9O1xuXG4gICAgb25Db250ZXh0TWVudSA9IGUgPT4ge1xuICAgICAgICAvLyBQcmV2ZW50IHRoZSBuYXRpdmUgY29udGV4dCBtZW51XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB0aGlzLl9zaG93Q29udGV4dE1lbnUoe1xuICAgICAgICAgICAgcmlnaHQ6IGUuY2xpZW50WCxcbiAgICAgICAgICAgIHRvcDogZS5jbGllbnRZLFxuICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgY2xvc2VNZW51ID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGNvbnRleHRNZW51UG9zaXRpb246IG51bGwsXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IEFjY2Vzc2libGVCdXR0b24gPSBzZGsuZ2V0Q29tcG9uZW50KCdlbGVtZW50cy5BY2Nlc3NpYmxlQnV0dG9uJyk7XG4gICAgICAgIGNvbnN0IEJhc2VBdmF0YXIgPSBzZGsuZ2V0Q29tcG9uZW50KCdhdmF0YXJzLkJhc2VBdmF0YXInKTtcblxuICAgICAgICBjb25zdCBncm91cE5hbWUgPSB0aGlzLnByb3BzLmdyb3VwLm5hbWUgfHwgdGhpcy5wcm9wcy5ncm91cC5ncm91cElkO1xuICAgICAgICBjb25zdCBodHRwQXZhdGFyVXJsID0gdGhpcy5wcm9wcy5ncm91cC5hdmF0YXJVcmxcbiAgICAgICAgICAgID8gbWVkaWFGcm9tTXhjKHRoaXMucHJvcHMuZ3JvdXAuYXZhdGFyVXJsKS5nZXRTcXVhcmVUaHVtYm5haWxIdHRwKDI0KVxuICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGF2ID0gPEJhc2VBdmF0YXIgbmFtZT17Z3JvdXBOYW1lfSB3aWR0aD17MjR9IGhlaWdodD17MjR9IHVybD17aHR0cEF2YXRhclVybH0gLz47XG5cbiAgICAgICAgY29uc3QgaXNNZW51RGlzcGxheWVkID0gQm9vbGVhbih0aGlzLnN0YXRlLmNvbnRleHRNZW51UG9zaXRpb24pO1xuICAgICAgICBjb25zdCBuYW1lQ2xhc3NlcyA9IGNsYXNzTmFtZXMoJ214X1Jvb21UaWxlX25hbWUgbXhfUm9vbVRpbGVfaW52aXRlIG14X1Jvb21UaWxlX2JhZGdlU2hvd24nLCB7XG4gICAgICAgICAgICAnbXhfUm9vbVRpbGVfYmFkZ2VTaG93bic6IHRoaXMuc3RhdGUuYmFkZ2VIb3ZlciB8fCBpc01lbnVEaXNwbGF5ZWQsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFhYWDogdGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIEZpcmVmb3ggZ2l2aW5nIHRoaXMgZGl2IGEgdGFic3RvcCA6KCBbdGFiSW5kZXhdXG4gICAgICAgIGNvbnN0IGxhYmVsID0gPGRpdiB0aXRsZT17dGhpcy5wcm9wcy5ncm91cC5ncm91cElkfSBjbGFzc05hbWU9e25hbWVDbGFzc2VzfSB0YWJJbmRleD17LTF9IGRpcj1cImF1dG9cIj5cbiAgICAgICAgICAgIHsgZ3JvdXBOYW1lIH1cbiAgICAgICAgPC9kaXY+O1xuXG4gICAgICAgIGNvbnN0IGJhZGdlRWxsaXBzaXMgPSB0aGlzLnN0YXRlLmJhZGdlSG92ZXIgfHwgaXNNZW51RGlzcGxheWVkO1xuICAgICAgICBjb25zdCBiYWRnZUNsYXNzZXMgPSBjbGFzc05hbWVzKCdteF9Sb29tVGlsZV9iYWRnZSBteF9Sb29tVGlsZV9oaWdobGlnaHQnLCB7XG4gICAgICAgICAgICAnbXhfUm9vbVRpbGVfYmFkZ2VCdXR0b24nOiBiYWRnZUVsbGlwc2lzLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBiYWRnZUNvbnRlbnQgPSBiYWRnZUVsbGlwc2lzID8gJ1xcdTAwQjdcXHUwMEI3XFx1MDBCNycgOiAnISc7XG5cbiAgICAgICAgbGV0IHRvb2x0aXA7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLmNvbGxhcHNlZCAmJiB0aGlzLnN0YXRlLmhvdmVyKSB7XG4gICAgICAgICAgICBjb25zdCBUb29sdGlwID0gc2RrLmdldENvbXBvbmVudChcImVsZW1lbnRzLlRvb2x0aXBcIik7XG4gICAgICAgICAgICB0b29sdGlwID0gPFRvb2x0aXAgY2xhc3NOYW1lPVwibXhfUm9vbVRpbGVfdG9vbHRpcFwiIGxhYmVsPXtncm91cE5hbWV9IGRpcj1cImF1dG9cIiAvPjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc05hbWVzKCdteF9Sb29tVGlsZSBteF9Sb29tVGlsZV9oaWdobGlnaHQnLCB7XG4gICAgICAgICAgICAnbXhfUm9vbVRpbGVfbWVudURpc3BsYXllZCc6IGlzTWVudURpc3BsYXllZCxcbiAgICAgICAgICAgICdteF9Sb29tVGlsZV9zZWxlY3RlZCc6IHRoaXMuc3RhdGUuc2VsZWN0ZWQsXG4gICAgICAgICAgICAnbXhfR3JvdXBJbnZpdGVUaWxlJzogdHJ1ZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGNvbnRleHRNZW51O1xuICAgICAgICBpZiAoaXNNZW51RGlzcGxheWVkKSB7XG4gICAgICAgICAgICBjb25zdCBHcm91cEludml0ZVRpbGVDb250ZXh0TWVudSA9IHNkay5nZXRDb21wb25lbnQoJ2NvbnRleHRfbWVudXMuR3JvdXBJbnZpdGVUaWxlQ29udGV4dE1lbnUnKTtcbiAgICAgICAgICAgIGNvbnRleHRNZW51ID0gKFxuICAgICAgICAgICAgICAgIDxDb250ZXh0TWVudSB7Li4udG9SaWdodE9mKHRoaXMuc3RhdGUuY29udGV4dE1lbnVQb3NpdGlvbil9IG9uRmluaXNoZWQ9e3RoaXMuY2xvc2VNZW51fT5cbiAgICAgICAgICAgICAgICAgICAgPEdyb3VwSW52aXRlVGlsZUNvbnRleHRNZW51IGdyb3VwPXt0aGlzLnByb3BzLmdyb3VwfSBvbkZpbmlzaGVkPXt0aGlzLmNsb3NlTWVudX0gLz5cbiAgICAgICAgICAgICAgICA8L0NvbnRleHRNZW51PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICA8Um92aW5nVGFiSW5kZXhXcmFwcGVyPlxuICAgICAgICAgICAgICAgIHsoe29uRm9jdXMsIGlzQWN0aXZlLCByZWZ9KSA9PlxuICAgICAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgb25Gb2N1cz17b25Gb2N1c31cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYkluZGV4PXtpc0FjdGl2ZSA/IDAgOiAtMX1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmVmPXtyZWZ9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzZXN9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLm9uQ2xpY2t9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e3RoaXMub25Nb3VzZUVudGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlPXt0aGlzLm9uTW91c2VMZWF2ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29udGV4dE1lbnU9e3RoaXMub25Db250ZXh0TWVudX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9Sb29tVGlsZV9hdmF0YXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGF2IH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJteF9Sb29tVGlsZV9uYW1lQ29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPENvbnRleHRNZW51QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YmFkZ2VDbGFzc2VzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLm9uQ29udGV4dE1lbnVCdXR0b25DbGlja31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e190KFwiT3B0aW9uc1wiKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFeHBhbmRlZD17aXNNZW51RGlzcGxheWVkfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJJbmRleD17aXNBY3RpdmUgPyAwIDogLTF9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGJhZGdlQ29udGVudCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Db250ZXh0TWVudUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgeyB0b29sdGlwIH1cbiAgICAgICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvUm92aW5nVGFiSW5kZXhXcmFwcGVyPlxuXG4gICAgICAgICAgICB7IGNvbnRleHRNZW51IH1cbiAgICAgICAgPC9SZWFjdC5GcmFnbWVudD47XG4gICAgfVxufVxuIl19