UNPKG

matrix-react-sdk

Version:
200 lines (163 loc) 24.2 kB
"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