UNPKG

matrix-react-sdk

Version:
157 lines (125 loc) 19.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.Alignment = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _reactDom = _interopRequireDefault(require("react-dom")); var _classnames = _interopRequireDefault(require("classnames")); var _replaceableComponent = require("../../../utils/replaceableComponent"); var _dec, _class, _class2, _temp; const MIN_TOOLTIP_HEIGHT = 25; let Alignment; exports.Alignment = Alignment; (function (Alignment) { Alignment[Alignment["Natural"] = 0] = "Natural"; Alignment[Alignment["Left"] = 1] = "Left"; Alignment[Alignment["Right"] = 2] = "Right"; Alignment[Alignment["Top"] = 3] = "Top"; Alignment[Alignment["Bottom"] = 4] = "Bottom"; })(Alignment || (exports.Alignment = Alignment = {})); let Tooltip = (_dec = (0, _replaceableComponent.replaceableComponent)("views.elements.Tooltip"), _dec(_class = (_temp = _class2 = class Tooltip extends _react.default.Component /*:: <IProps>*/ { constructor(...args) { super(...args); (0, _defineProperty2.default)(this, "tooltipContainer", void 0); (0, _defineProperty2.default)(this, "tooltip", void 0); (0, _defineProperty2.default)(this, "parent", void 0); (0, _defineProperty2.default)(this, "renderTooltip", () => { // Add the parent's position to the tooltips, so it's correctly // positioned, also taking into account any window zoom // NOTE: The additional 6 pixels for the left position, is to take account of the // tooltips chevron const style = this.updatePosition({}); // Hide the entire container when not visible. This prevents flashing of the tooltip // if it is not meant to be visible on first mount. style.display = this.props.visible ? "block" : "none"; const tooltipClasses = (0, _classnames.default)("mx_Tooltip", this.props.tooltipClassName, { "mx_Tooltip_visible": this.props.visible, "mx_Tooltip_invisible": !this.props.visible }); const tooltip = /*#__PURE__*/_react.default.createElement("div", { className: tooltipClasses, style: style }, /*#__PURE__*/_react.default.createElement("div", { className: "mx_Tooltip_chevron" }), this.props.label); // Render the tooltip manually, as we wish it not to be rendered within the parent this.tooltip = _reactDom.default.render(tooltip, this.tooltipContainer); }); } // Create a wrapper for the tooltip outside the parent and attach it to the body element componentDidMount() { this.tooltipContainer = document.createElement("div"); this.tooltipContainer.className = "mx_Tooltip_wrapper"; document.body.appendChild(this.tooltipContainer); window.addEventListener('scroll', this.renderTooltip, true); this.parent = _reactDom.default.findDOMNode(this).parentNode; this.renderTooltip(); } componentDidUpdate() { this.renderTooltip(); } // Remove the wrapper element, as the tooltip has finished using it componentWillUnmount() { _reactDom.default.unmountComponentAtNode(this.tooltipContainer); document.body.removeChild(this.tooltipContainer); window.removeEventListener('scroll', this.renderTooltip, true); } updatePosition(style /*: CSSProperties*/ ) { const parentBox = this.parent.getBoundingClientRect(); let offset = 0; if (parentBox.height > MIN_TOOLTIP_HEIGHT) { offset = Math.floor((parentBox.height - MIN_TOOLTIP_HEIGHT) / 2); } else { // The tooltip is larger than the parent height: figure out what offset // we need so that we're still centered. offset = Math.floor(parentBox.height - MIN_TOOLTIP_HEIGHT); } const baseTop = parentBox.top - 2 + this.props.yOffset + window.pageYOffset; const top = baseTop + offset; const right = window.innerWidth - parentBox.right - window.pageXOffset - 16; const left = parentBox.right + window.pageXOffset + 6; const horizontalCenter = parentBox.right - window.pageXOffset - parentBox.width / 2; switch (this.props.alignment) { case Alignment.Natural: if (parentBox.right > window.innerWidth / 2) { style.right = right; style.top = top; break; } // fall through to Right case Alignment.Right: style.left = left; style.top = top; break; case Alignment.Left: style.right = right; style.top = top; break; case Alignment.Top: style.top = baseTop - 16; style.left = horizontalCenter; break; case Alignment.Bottom: style.top = baseTop + parentBox.height; style.left = horizontalCenter; break; } return style; } render() { // Render a placeholder return /*#__PURE__*/_react.default.createElement("div", { className: this.props.className }); } }, (0, _defineProperty2.default)(_class2, "Alignment", Alignment), (0, _defineProperty2.default)(_class2, "defaultProps", { visible: true, yOffset: 0, alignment: Alignment.Natural }), _temp)) || _class); exports.default = Tooltip; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL2VsZW1lbnRzL1Rvb2x0aXAudHN4Il0sIm5hbWVzIjpbIk1JTl9UT09MVElQX0hFSUdIVCIsIkFsaWdubWVudCIsIlRvb2x0aXAiLCJSZWFjdCIsIkNvbXBvbmVudCIsInN0eWxlIiwidXBkYXRlUG9zaXRpb24iLCJkaXNwbGF5IiwicHJvcHMiLCJ2aXNpYmxlIiwidG9vbHRpcENsYXNzZXMiLCJ0b29sdGlwQ2xhc3NOYW1lIiwidG9vbHRpcCIsImxhYmVsIiwiUmVhY3RET00iLCJyZW5kZXIiLCJ0b29sdGlwQ29udGFpbmVyIiwiY29tcG9uZW50RGlkTW91bnQiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwicmVuZGVyVG9vbHRpcCIsInBhcmVudCIsImZpbmRET01Ob2RlIiwicGFyZW50Tm9kZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsInJlbW92ZUNoaWxkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInBhcmVudEJveCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIm9mZnNldCIsImhlaWdodCIsIk1hdGgiLCJmbG9vciIsImJhc2VUb3AiLCJ0b3AiLCJ5T2Zmc2V0IiwicGFnZVlPZmZzZXQiLCJyaWdodCIsImlubmVyV2lkdGgiLCJwYWdlWE9mZnNldCIsImxlZnQiLCJob3Jpem9udGFsQ2VudGVyIiwid2lkdGgiLCJhbGlnbm1lbnQiLCJOYXR1cmFsIiwiUmlnaHQiLCJMZWZ0IiwiVG9wIiwiQm90dG9tIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQW9CQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVBLE1BQU1BLGtCQUFrQixHQUFHLEVBQTNCO0lBRVlDLFM7OztXQUFBQSxTO0FBQUFBLEVB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Q0osV0FBS3hDLFNBQVMsQ0FBQ3FELEdBQWY7QUFDSWpELFFBQUFBLEtBQUssQ0FBQ29DLEdBQU4sR0FBWUQsT0FBTyxHQUFHLEVBQXRCO0FBQ0FuQyxRQUFBQSxLQUFLLENBQUMwQyxJQUFOLEdBQWFDLGdCQUFiO0FBQ0E7O0FBQ0osV0FBSy9DLFNBQVMsQ0FBQ3NELE1BQWY7QUFDSWxELFFBQUFBLEtBQUssQ0FBQ29DLEdBQU4sR0FBWUQsT0FBTyxHQUFHTixTQUFTLENBQUNHLE1BQWhDO0FBQ0FoQyxRQUFBQSxLQUFLLENBQUMwQyxJQUFOLEdBQWFDLGdCQUFiO0FBQ0E7QUF2QlI7O0FBMEJBLFdBQU8zQyxLQUFQO0FBQ0g7O0FBNEJNVSxFQUFBQSxNQUFQLEdBQWdCO0FBQ1o7QUFDQSx3QkFDSTtBQUFLLE1BQUEsU0FBUyxFQUFFLEtBQUtQLEtBQUwsQ0FBV1k7QUFBM0IsTUFESjtBQUlIOztBQW5Id0QsQyxzREFPdEJuQixTLDBEQUVHO0FBQ2xDUSxFQUFBQSxPQUFPLEVBQUUsSUFEeUI7QUFFbENpQyxFQUFBQSxPQUFPLEVBQUUsQ0FGeUI7QUFHbENRLEVBQUFBLFNBQVMsRUFBRWpELFNBQVMsQ0FBQ2tEO0FBSGEsQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAxNSwgMjAxNiBPcGVuTWFya2V0IEx0ZFxuQ29weXJpZ2h0IDIwMTkgTmV3IFZlY3RvciBMdGRcbkNvcHlyaWdodCAyMDE5IE1pY2hhZWwgVGVsYXR5bnNraSA8N3QzY2hndXlAZ21haWwuY29tPlxuQ29weXJpZ2h0IDIwMTksIDIwMjAgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbnlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbllvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cblVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbmRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbldJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxubGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5cbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgQ1NTUHJvcGVydGllc30gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCB7cmVwbGFjZWFibGVDb21wb25lbnR9IGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXBsYWNlYWJsZUNvbXBvbmVudFwiO1xuXG5jb25zdCBNSU5fVE9PTFRJUF9IRUlHSFQgPSAyNTtcblxuZXhwb3J0IGVudW0gQWxpZ25tZW50IHtcbiAgICBOYXR1cmFsLCAvLyBQaWNrIGxlZnQgb3IgcmlnaHRcbiAgICBMZWZ0LFxuICAgIFJpZ2h0LFxuICAgIFRvcCwgLy8gQ2VudGVyZWRcbiAgICBCb3R0b20sIC8vIENlbnRlcmVkXG59XG5cbmludGVyZmFjZSBJUHJvcHMge1xuICAgICAgICAvLyBDbGFzcyBhcHBsaWVkIHRvIHRoZSBlbGVtZW50IHVzZWQgdG8gcG9zaXRpb24gdGhlIHRvb2x0aXBcbiAgICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgICAvLyBDbGFzcyBhcHBsaWVkIHRvIHRoZSB0b29sdGlwIGl0c2VsZlxuICAgICAgICB0b29sdGlwQ2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgICAvLyBXaGV0aGVyIHRoZSB0b29sdGlwIGlzIHZpc2libGUgb3IgaGlkZGVuLlxuICAgICAgICAvLyBUaGUgaGlkZGVuIHN0YXRlIGFsbG93cyBhbmltYXRpbmcgdGhlIHRvb2x0aXAgYXdheSB2aWEgQ1NTLlxuICAgICAgICAvLyBEZWZhdWx0cyB0byB2aXNpYmxlIGlmIHVuc2V0LlxuICAgICAgICB2aXNpYmxlPzogYm9vbGVhbjtcbiAgICAgICAgLy8gdGhlIHJlYWN0IGVsZW1lbnQgdG8gcHV0IGludG8gdGhlIHRvb2x0aXBcbiAgICAgICAgbGFiZWw6IFJlYWN0LlJlYWN0Tm9kZTtcbiAgICAgICAgYWxpZ25tZW50PzogQWxpZ25tZW50OyAvLyBkZWZhdWx0cyB0byBOYXR1cmFsXG4gICAgICAgIHlPZmZzZXQ/OiBudW1iZXI7XG59XG5cbkByZXBsYWNlYWJsZUNvbXBvbmVudChcInZpZXdzLmVsZW1lbnRzLlRvb2x0aXBcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvb2x0aXAgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SVByb3BzPiB7XG4gICAgcHJpdmF0ZSB0b29sdGlwQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIHRvb2x0aXA6IHZvaWQgfCBFbGVtZW50IHwgQ29tcG9uZW50PEVsZW1lbnQsIGFueSwgYW55PjtcbiAgICBwcml2YXRlIHBhcmVudDogRWxlbWVudDtcblxuICAgIC8vIFhYWDogVGhpcyBpcyBiZWNhdXNlIHNvbWUgY29tcG9uZW50cyAoRmllbGQpIGFyZSB1bmFibGUgdG8gYGltcG9ydGAgdGhlIFRvb2x0aXAgY2xhc3MsXG4gICAgLy8gc28gd2UgZXhwb3NlIHRoZSBBbGlnbm1lbnQgb3B0aW9ucyBvZmYgb2YgdXMgc3RhdGljYWxseS5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFsaWdubWVudCA9IEFsaWdubWVudDtcblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZGVmYXVsdFByb3BzID0ge1xuICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICB5T2Zmc2V0OiAwLFxuICAgICAgICBhbGlnbm1lbnQ6IEFsaWdubWVudC5OYXR1cmFsLFxuICAgIH07XG5cbiAgICAvLyBDcmVhdGUgYSB3cmFwcGVyIGZvciB0aGUgdG9vbHRpcCBvdXRzaWRlIHRoZSBwYXJlbnQgYW5kIGF0dGFjaCBpdCB0byB0aGUgYm9keSBlbGVtZW50XG4gICAgcHVibGljIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICB0aGlzLnRvb2x0aXBDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0aGlzLnRvb2x0aXBDb250YWluZXIuY2xhc3NOYW1lID0gXCJteF9Ub29sdGlwX3dyYXBwZXJcIjtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLnRvb2x0aXBDb250YWluZXIpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5yZW5kZXJUb29sdGlwLCB0cnVlKTtcblxuICAgICAgICB0aGlzLnBhcmVudCA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpLnBhcmVudE5vZGUgYXMgRWxlbWVudDtcblxuICAgICAgICB0aGlzLnJlbmRlclRvb2x0aXAoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgICB0aGlzLnJlbmRlclRvb2x0aXAoKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIHdyYXBwZXIgZWxlbWVudCwgYXMgdGhlIHRvb2x0aXAgaGFzIGZpbmlzaGVkIHVzaW5nIGl0XG4gICAgcHVibGljIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKHRoaXMudG9vbHRpcENvbnRhaW5lcik7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy50b29sdGlwQ29udGFpbmVyKTtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMucmVuZGVyVG9vbHRpcCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQb3NpdGlvbihzdHlsZTogQ1NTUHJvcGVydGllcykge1xuICAgICAgICBjb25zdCBwYXJlbnRCb3ggPSB0aGlzLnBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIGlmIChwYXJlbnRCb3guaGVpZ2h0ID4gTUlOX1RPT0xUSVBfSEVJR0hUKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSBNYXRoLmZsb29yKChwYXJlbnRCb3guaGVpZ2h0IC0gTUlOX1RPT0xUSVBfSEVJR0hUKSAvIDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gVGhlIHRvb2x0aXAgaXMgbGFyZ2VyIHRoYW4gdGhlIHBhcmVudCBoZWlnaHQ6IGZpZ3VyZSBvdXQgd2hhdCBvZmZzZXRcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgc28gdGhhdCB3ZSdyZSBzdGlsbCBjZW50ZXJlZC5cbiAgICAgICAgICAgIG9mZnNldCA9IE1hdGguZmxvb3IocGFyZW50Qm94LmhlaWdodCAtIE1JTl9UT09MVElQX0hFSUdIVCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiYXNlVG9wID0gKHBhcmVudEJveC50b3AgLSAyICsgdGhpcy5wcm9wcy55T2Zmc2V0KSArIHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICAgICAgY29uc3QgdG9wID0gYmFzZVRvcCArIG9mZnNldDtcbiAgICAgICAgY29uc3QgcmlnaHQgPSB3aW5kb3cuaW5uZXJXaWR0aCAtIHBhcmVudEJveC5yaWdodCAtIHdpbmRvdy5wYWdlWE9mZnNldCAtIDE2O1xuICAgICAgICBjb25zdCBsZWZ0ID0gcGFyZW50Qm94LnJpZ2h0ICsgd2luZG93LnBhZ2VYT2Zmc2V0ICsgNjtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbENlbnRlciA9IHBhcmVudEJveC5yaWdodCAtIHdpbmRvdy5wYWdlWE9mZnNldCAtIChwYXJlbnRCb3gud2lkdGggLyAyKTtcbiAgICAgICAgc3dpdGNoICh0aGlzLnByb3BzLmFsaWdubWVudCkge1xuICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuTmF0dXJhbDpcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Qm94LnJpZ2h0ID4gd2luZG93LmlubmVyV2lkdGggLyAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLnJpZ2h0ID0gcmlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlLnRvcCA9IHRvcDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaCB0byBSaWdodFxuICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuUmlnaHQ6XG4gICAgICAgICAgICAgICAgc3R5bGUubGVmdCA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgc3R5bGUudG9wID0gdG9wO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBbGlnbm1lbnQuTGVmdDpcbiAgICAgICAgICAgICAgICBzdHlsZS5yaWdodCA9IHJpZ2h0O1xuICAgICAgICAgICAgICAgIHN0eWxlLnRvcCA9IHRvcDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQWxpZ25tZW50LlRvcDpcbiAgICAgICAgICAgICAgICBzdHlsZS50b3AgPSBiYXNlVG9wIC0gMTY7XG4gICAgICAgICAgICAgICAgc3R5bGUubGVmdCA9IGhvcml6b250YWxDZW50ZXI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEFsaWdubWVudC5Cb3R0b206XG4gICAgICAgICAgICAgICAgc3R5bGUudG9wID0gYmFzZVRvcCArIHBhcmVudEJveC5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgc3R5bGUubGVmdCA9IGhvcml6b250YWxDZW50ZXI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW5kZXJUb29sdGlwID0gKCkgPT4ge1xuICAgICAgICAvLyBBZGQgdGhlIHBhcmVudCdzIHBvc2l0aW9uIHRvIHRoZSB0b29sdGlwcywgc28gaXQncyBjb3JyZWN0bHlcbiAgICAgICAgLy8gcG9zaXRpb25lZCwgYWxzbyB0YWtpbmcgaW50byBhY2NvdW50IGFueSB3aW5kb3cgem9vbVxuICAgICAgICAvLyBOT1RFOiBUaGUgYWRkaXRpb25hbCA2IHBpeGVscyBmb3IgdGhlIGxlZnQgcG9zaXRpb24sIGlzIHRvIHRha2UgYWNjb3VudCBvZiB0aGVcbiAgICAgICAgLy8gdG9vbHRpcHMgY2hldnJvblxuICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMudXBkYXRlUG9zaXRpb24oe30pO1xuICAgICAgICAvLyBIaWRlIHRoZSBlbnRpcmUgY29udGFpbmVyIHdoZW4gbm90IHZpc2libGUuIFRoaXMgcHJldmVudHMgZmxhc2hpbmcgb2YgdGhlIHRvb2x0aXBcbiAgICAgICAgLy8gaWYgaXQgaXMgbm90IG1lYW50IHRvIGJlIHZpc2libGUgb24gZmlyc3QgbW91bnQuXG4gICAgICAgIHN0eWxlLmRpc3BsYXkgPSB0aGlzLnByb3BzLnZpc2libGUgPyBcImJsb2NrXCIgOiBcIm5vbmVcIjtcblxuICAgICAgICBjb25zdCB0b29sdGlwQ2xhc3NlcyA9IGNsYXNzTmFtZXMoXCJteF9Ub29sdGlwXCIsIHRoaXMucHJvcHMudG9vbHRpcENsYXNzTmFtZSwge1xuICAgICAgICAgICAgXCJteF9Ub29sdGlwX3Zpc2libGVcIjogdGhpcy5wcm9wcy52aXNpYmxlLFxuICAgICAgICAgICAgXCJteF9Ub29sdGlwX2ludmlzaWJsZVwiOiAhdGhpcy5wcm9wcy52aXNpYmxlLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB0b29sdGlwID0gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3Rvb2x0aXBDbGFzc2VzfSBzdHlsZT17c3R5bGV9PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfVG9vbHRpcF9jaGV2cm9uXCIgLz5cbiAgICAgICAgICAgICAgICB7IHRoaXMucHJvcHMubGFiZWwgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gUmVuZGVyIHRoZSB0b29sdGlwIG1hbnVhbGx5LCBhcyB3ZSB3aXNoIGl0IG5vdCB0byBiZSByZW5kZXJlZCB3aXRoaW4gdGhlIHBhcmVudFxuICAgICAgICB0aGlzLnRvb2x0aXAgPSBSZWFjdERPTS5yZW5kZXI8RWxlbWVudD4odG9vbHRpcCwgdGhpcy50b29sdGlwQ29udGFpbmVyKTtcbiAgICB9O1xuXG4gICAgcHVibGljIHJlbmRlcigpIHtcbiAgICAgICAgLy8gUmVuZGVyIGEgcGxhY2Vob2xkZXJcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXt0aGlzLnByb3BzLmNsYXNzTmFtZX0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=