UNPKG

matrix-react-sdk

Version:
186 lines (184 loc) 27.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _KeyboardShortcuts = require("../../../accessibility/KeyboardShortcuts"); var _KeyBindingsManager = require("../../../KeyBindingsManager"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (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; } /* Copyright 2018-2024 New Vector Ltd. Copyright 2015, 2016 OpenMarket Ltd SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ var Phases = /*#__PURE__*/function (Phases) { Phases["Display"] = "display"; Phases["Edit"] = "edit"; return Phases; }(Phases || {}); class EditableText extends _react.default.Component { constructor(props) { super(props); // we track value as an JS object field rather than in React state // as React doesn't play nice with contentEditable. (0, _defineProperty2.default)(this, "value", ""); (0, _defineProperty2.default)(this, "placeholder", false); (0, _defineProperty2.default)(this, "editableDiv", /*#__PURE__*/(0, _react.createRef)()); (0, _defineProperty2.default)(this, "showPlaceholder", show => { if (!this.editableDiv.current) return; if (show) { this.editableDiv.current.textContent = this.props.placeholder; this.editableDiv.current.setAttribute("class", this.props.className + " " + this.props.placeholderClassName); this.placeholder = true; this.value = ""; } else { this.editableDiv.current.textContent = this.value; this.editableDiv.current.setAttribute("class", this.props.className); this.placeholder = false; } }); (0, _defineProperty2.default)(this, "cancelEdit", () => { this.setState({ phase: Phases.Display }); this.value = this.props.initialValue; this.showPlaceholder(!this.value); this.onValueChanged(false); this.editableDiv.current?.blur(); }); (0, _defineProperty2.default)(this, "onValueChanged", shouldSubmit => { this.props.onValueChanged?.(this.value, shouldSubmit); }); (0, _defineProperty2.default)(this, "onKeyDown", ev => { if (this.placeholder) { this.showPlaceholder(false); } const action = (0, _KeyBindingsManager.getKeyBindingsManager)().getAccessibilityAction(ev); switch (action) { case _KeyboardShortcuts.KeyBindingAction.Enter: ev.stopPropagation(); ev.preventDefault(); break; } }); (0, _defineProperty2.default)(this, "onKeyUp", ev => { if (!ev.target.textContent) { this.showPlaceholder(true); } else if (!this.placeholder) { this.value = ev.target.textContent ?? ""; } const action = (0, _KeyBindingsManager.getKeyBindingsManager)().getAccessibilityAction(ev); switch (action) { case _KeyboardShortcuts.KeyBindingAction.Escape: this.cancelEdit(); break; case _KeyboardShortcuts.KeyBindingAction.Enter: this.onFinish(ev); break; } }); (0, _defineProperty2.default)(this, "onClickDiv", () => { if (!this.props.editable) return; this.setState({ phase: Phases.Edit }); }); (0, _defineProperty2.default)(this, "onFocus", ev => { const node = ev.target.childNodes[0]; if (node) { const range = document.createRange(); range.setStart(node, 0); range.setEnd(node, ev.target.childNodes.length); const sel = window.getSelection(); sel.removeAllRanges(); sel.addRange(range); } }); (0, _defineProperty2.default)(this, "onFinish", (ev, shouldSubmit = false) => { // eslint-disable-next-line @typescript-eslint/no-this-alias const self = this; const action = (0, _KeyBindingsManager.getKeyBindingsManager)().getAccessibilityAction(ev); const submit = action === _KeyboardShortcuts.KeyBindingAction.Enter || shouldSubmit; this.setState({ phase: Phases.Display }, () => { if (this.value !== this.props.initialValue) { self.onValueChanged(submit); } }); }); (0, _defineProperty2.default)(this, "onBlur", ev => { const sel = window.getSelection(); sel.removeAllRanges(); if (this.props.blurToCancel) { this.cancelEdit(); } else { this.onFinish(ev, this.props.blurToSubmit); } this.showPlaceholder(!this.value); }); this.state = { phase: Phases.Display }; } componentDidUpdate(prevProps) { if (prevProps.initialValue !== this.props.initialValue) { this.value = this.props.initialValue; if (this.editableDiv.current) { this.showPlaceholder(!this.value); } } } componentDidMount() { this.value = this.props.initialValue; if (this.editableDiv.current) { this.showPlaceholder(!this.value); } } render() { const { className, editable, initialValue, label, labelClassName } = this.props; let editableEl; if (!editable || this.state.phase === Phases.Display && (label || labelClassName) && !this.value) { // show the label editableEl = /*#__PURE__*/_react.default.createElement("div", { className: className + " " + labelClassName, onClick: this.onClickDiv }, label || initialValue); } else { // show the content editable div, but manually manage its contents as react and contentEditable don't play nice together editableEl = /*#__PURE__*/_react.default.createElement("div", { ref: this.editableDiv, contentEditable: true, className: className, onKeyDown: this.onKeyDown, onKeyUp: this.onKeyUp, onFocus: this.onFocus, onBlur: this.onBlur }); } return editableEl; } } exports.default = EditableText; (0, _defineProperty2.default)(EditableText, "defaultProps", { onValueChanged() {}, initialValue: "", label: "", placeholder: "", editable: true, className: "mx_EditableText", placeholderClassName: "mx_EditableText_placeholder", blurToSubmit: false }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfS2V5Ym9hcmRTaG9ydGN1dHMiLCJfS2V5QmluZGluZ3NNYW5hZ2VyIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiUGhhc2VzIiwiRWRpdGFibGVUZXh0IiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX2RlZmluZVByb3BlcnR5MiIsImNyZWF0ZVJlZiIsInNob3ciLCJlZGl0YWJsZURpdiIsImN1cnJlbnQiLCJ0ZXh0Q29udGVudCIsInBsYWNlaG9sZGVyIiwic2V0QXR0cmlidXRlIiwiY2xhc3NOYW1lIiwicGxhY2Vob2xkZXJDbGFzc05hbWUiLCJ2YWx1ZSIsInNldFN0YXRlIiwicGhhc2UiLCJEaXNwbGF5IiwiaW5pdGlhbFZhbHVlIiwic2hvd1BsYWNlaG9sZGVyIiwib25WYWx1ZUNoYW5nZWQiLCJibHVyIiwic2hvdWxkU3VibWl0IiwiZXYiLCJhY3Rpb24iLCJnZXRLZXlCaW5kaW5nc01hbmFnZXIiLCJnZXRBY2Nlc3NpYmlsaXR5QWN0aW9uIiwiS2V5QmluZGluZ0FjdGlvbiIsIkVudGVyIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudERlZmF1bHQiLCJ0YXJnZXQiLCJFc2NhcGUiLCJjYW5jZWxFZGl0Iiwib25GaW5pc2giLCJlZGl0YWJsZSIsIkVkaXQiLCJub2RlIiwiY2hpbGROb2RlcyIsInJhbmdlIiwiZG9jdW1lbnQiLCJjcmVhdGVSYW5nZSIsInNldFN0YXJ0Iiwic2V0RW5kIiwibGVuZ3RoIiwic2VsIiwid2luZG93IiwiZ2V0U2VsZWN0aW9uIiwicmVtb3ZlQWxsUmFuZ2VzIiwiYWRkUmFuZ2UiLCJzZWxmIiwic3VibWl0IiwiYmx1clRvQ2FuY2VsIiwiYmx1clRvU3VibWl0Iiwic3RhdGUiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJjb21wb25lbnREaWRNb3VudCIsInJlbmRlciIsImxhYmVsIiwibGFiZWxDbGFzc05hbWUiLCJlZGl0YWJsZUVsIiwiY3JlYXRlRWxlbWVudCIsIm9uQ2xpY2siLCJvbkNsaWNrRGl2IiwicmVmIiwiY29udGVudEVkaXRhYmxlIiwib25LZXlEb3duIiwib25LZXlVcCIsIm9uRm9jdXMiLCJvbkJsdXIiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvZWxlbWVudHMvRWRpdGFibGVUZXh0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMTgtMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDE1LCAyMDE2IE9wZW5NYXJrZXQgTHRkXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVSZWYgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgS2V5QmluZGluZ0FjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9hY2Nlc3NpYmlsaXR5L0tleWJvYXJkU2hvcnRjdXRzXCI7XG5pbXBvcnQgeyBnZXRLZXlCaW5kaW5nc01hbmFnZXIgfSBmcm9tIFwiLi4vLi4vLi4vS2V5QmluZGluZ3NNYW5hZ2VyXCI7XG5cbmVudW0gUGhhc2VzIHtcbiAgICBEaXNwbGF5ID0gXCJkaXNwbGF5XCIsXG4gICAgRWRpdCA9IFwiZWRpdFwiLFxufVxuXG5pbnRlcmZhY2UgSVByb3BzIHtcbiAgICBvblZhbHVlQ2hhbmdlZD86ICh2YWx1ZTogc3RyaW5nLCBzaG91bGRTdWJtaXQ6IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgaW5pdGlhbFZhbHVlOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgIGxhYmVsQ2xhc3NOYW1lPzogc3RyaW5nO1xuICAgIHBsYWNlaG9sZGVyQ2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgLy8gT3ZlcnJpZGVzIGJsdXJUb1N1Ym1pdCBpZiB0cnVlXG4gICAgYmx1clRvQ2FuY2VsPzogYm9vbGVhbjtcbiAgICAvLyBXaWxsIGNhdXNlIG9uVmFsdWVDaGFuZ2VkKHZhbHVlLCB0cnVlKSB0byBmaXJlIG9uIGJsdXJcbiAgICBibHVyVG9TdWJtaXQ6IGJvb2xlYW47XG4gICAgZWRpdGFibGU6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBJU3RhdGUge1xuICAgIHBoYXNlOiBQaGFzZXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkaXRhYmxlVGV4dCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJUHJvcHMsIElTdGF0ZT4ge1xuICAgIC8vIHdlIHRyYWNrIHZhbHVlIGFzIGFuIEpTIG9iamVjdCBmaWVsZCByYXRoZXIgdGhhbiBpbiBSZWFjdCBzdGF0ZVxuICAgIC8vIGFzIFJlYWN0IGRvZXNuJ3QgcGxheSBuaWNlIHdpdGggY29udGVudEVkaXRhYmxlLlxuICAgIHB1YmxpYyB2YWx1ZSA9IFwiXCI7XG4gICAgcHJpdmF0ZSBwbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgZWRpdGFibGVEaXYgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgICBwdWJsaWMgc3RhdGljIGRlZmF1bHRQcm9wczogUGFydGlhbDxJUHJvcHM+ID0ge1xuICAgICAgICBvblZhbHVlQ2hhbmdlZCgpIHt9LFxuICAgICAgICBpbml0aWFsVmFsdWU6IFwiXCIsXG4gICAgICAgIGxhYmVsOiBcIlwiLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJcIixcbiAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgIGNsYXNzTmFtZTogXCJteF9FZGl0YWJsZVRleHRcIixcbiAgICAgICAgcGxhY2Vob2xkZXJDbGFzc05hbWU6IFwibXhfRWRpdGFibGVUZXh0X3BsYWNlaG9sZGVyXCIsXG4gICAgICAgIGJsdXJUb1N1Ym1pdDogZmFsc2UsXG4gICAgfTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wczogSVByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcblxuICAgICAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgICAgICAgcGhhc2U6IFBoYXNlcy5EaXNwbGF5LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBSZWFkb25seTxJUHJvcHM+KTogdm9pZCB7XG4gICAgICAgIGlmIChwcmV2UHJvcHMuaW5pdGlhbFZhbHVlICE9PSB0aGlzLnByb3BzLmluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucHJvcHMuaW5pdGlhbFZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdGFibGVEaXYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1BsYWNlaG9sZGVyKCF0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMucHJvcHMuaW5pdGlhbFZhbHVlO1xuICAgICAgICBpZiAodGhpcy5lZGl0YWJsZURpdi5jdXJyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQbGFjZWhvbGRlcighdGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dQbGFjZWhvbGRlciA9IChzaG93OiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghdGhpcy5lZGl0YWJsZURpdi5jdXJyZW50KSByZXR1cm47XG4gICAgICAgIGlmIChzaG93KSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRhYmxlRGl2LmN1cnJlbnQudGV4dENvbnRlbnQgPSB0aGlzLnByb3BzLnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgdGhpcy5lZGl0YWJsZURpdi5jdXJyZW50LnNldEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgICBcImNsYXNzXCIsXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5jbGFzc05hbWUgKyBcIiBcIiArIHRoaXMucHJvcHMucGxhY2Vob2xkZXJDbGFzc05hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gXCJcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdGFibGVEaXYuY3VycmVudC50ZXh0Q29udGVudCA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVkaXRhYmxlRGl2LmN1cnJlbnQuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5wcm9wcy5jbGFzc05hbWUpO1xuICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgY2FuY2VsRWRpdCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBwaGFzZTogUGhhc2VzLkRpc3BsYXksXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5wcm9wcy5pbml0aWFsVmFsdWU7XG4gICAgICAgIHRoaXMuc2hvd1BsYWNlaG9sZGVyKCF0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlZChmYWxzZSk7XG4gICAgICAgIHRoaXMuZWRpdGFibGVEaXYuY3VycmVudD8uYmx1cigpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uVmFsdWVDaGFuZ2VkID0gKHNob3VsZFN1Ym1pdDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnByb3BzLm9uVmFsdWVDaGFuZ2VkPy4odGhpcy52YWx1ZSwgc2hvdWxkU3VibWl0KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbktleURvd24gPSAoZXY6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KTogdm9pZCA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQbGFjZWhvbGRlcihmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3Rpb24gPSBnZXRLZXlCaW5kaW5nc01hbmFnZXIoKS5nZXRBY2Nlc3NpYmlsaXR5QWN0aW9uKGV2KTtcbiAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgS2V5QmluZGluZ0FjdGlvbi5FbnRlcjpcbiAgICAgICAgICAgICAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25LZXlVcCA9IChldjogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCEoZXYudGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KS50ZXh0Q29udGVudCkge1xuICAgICAgICAgICAgdGhpcy5zaG93UGxhY2Vob2xkZXIodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSAoZXYudGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50KS50ZXh0Q29udGVudCA/PyBcIlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWN0aW9uID0gZ2V0S2V5QmluZGluZ3NNYW5hZ2VyKCkuZ2V0QWNjZXNzaWJpbGl0eUFjdGlvbihldik7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIEtleUJpbmRpbmdBY3Rpb24uRXNjYXBlOlxuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsRWRpdCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBLZXlCaW5kaW5nQWN0aW9uLkVudGVyOlxuICAgICAgICAgICAgICAgIHRoaXMub25GaW5pc2goZXYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25DbGlja0RpdiA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnByb3BzLmVkaXRhYmxlKSByZXR1cm47XG5cbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBwaGFzZTogUGhhc2VzLkVkaXQsXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uRm9jdXMgPSAoZXY6IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBldi50YXJnZXQuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgICAgIHJhbmdlLnNldFN0YXJ0KG5vZGUsIDApO1xuICAgICAgICAgICAgcmFuZ2Uuc2V0RW5kKG5vZGUsIGV2LnRhcmdldC5jaGlsZE5vZGVzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKSE7XG4gICAgICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgICAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25GaW5pc2ggPSAoXG4gICAgICAgIGV2OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PiB8IFJlYWN0LkZvY3VzRXZlbnQ8SFRNTERpdkVsZW1lbnQ+LFxuICAgICAgICBzaG91bGRTdWJtaXQgPSBmYWxzZSxcbiAgICApOiB2b2lkID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBnZXRLZXlCaW5kaW5nc01hbmFnZXIoKS5nZXRBY2Nlc3NpYmlsaXR5QWN0aW9uKGV2IGFzIFJlYWN0LktleWJvYXJkRXZlbnQpO1xuICAgICAgICBjb25zdCBzdWJtaXQgPSBhY3Rpb24gPT09IEtleUJpbmRpbmdBY3Rpb24uRW50ZXIgfHwgc2hvdWxkU3VibWl0O1xuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBoYXNlOiBQaGFzZXMuRGlzcGxheSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgIT09IHRoaXMucHJvcHMuaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYub25WYWx1ZUNoYW5nZWQoc3VibWl0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uQmx1ciA9IChldjogUmVhY3QuRm9jdXNFdmVudDxIVE1MRGl2RWxlbWVudD4pOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpITtcbiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpO1xuXG4gICAgICAgIGlmICh0aGlzLnByb3BzLmJsdXJUb0NhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uRmluaXNoKGV2LCB0aGlzLnByb3BzLmJsdXJUb1N1Ym1pdCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dQbGFjZWhvbGRlcighdGhpcy52YWx1ZSk7XG4gICAgfTtcblxuICAgIHB1YmxpYyByZW5kZXIoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgICAgICAgY29uc3QgeyBjbGFzc05hbWUsIGVkaXRhYmxlLCBpbml0aWFsVmFsdWUsIGxhYmVsLCBsYWJlbENsYXNzTmFtZSB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgbGV0IGVkaXRhYmxlRWw7XG5cbiAgICAgICAgaWYgKCFlZGl0YWJsZSB8fCAodGhpcy5zdGF0ZS5waGFzZSA9PT0gUGhhc2VzLkRpc3BsYXkgJiYgKGxhYmVsIHx8IGxhYmVsQ2xhc3NOYW1lKSAmJiAhdGhpcy52YWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIHNob3cgdGhlIGxhYmVsXG4gICAgICAgICAgICBlZGl0YWJsZUVsID0gKFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWUgKyBcIiBcIiArIGxhYmVsQ2xhc3NOYW1lfSBvbkNsaWNrPXt0aGlzLm9uQ2xpY2tEaXZ9PlxuICAgICAgICAgICAgICAgICAgICB7bGFiZWwgfHwgaW5pdGlhbFZhbHVlfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNob3cgdGhlIGNvbnRlbnQgZWRpdGFibGUgZGl2LCBidXQgbWFudWFsbHkgbWFuYWdlIGl0cyBjb250ZW50cyBhcyByZWFjdCBhbmQgY29udGVudEVkaXRhYmxlIGRvbid0IHBsYXkgbmljZSB0b2dldGhlclxuICAgICAgICAgICAgZWRpdGFibGVFbCA9IChcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIHJlZj17dGhpcy5lZGl0YWJsZURpdn1cbiAgICAgICAgICAgICAgICAgICAgY29udGVudEVkaXRhYmxlPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLm9uS2V5RG93bn1cbiAgICAgICAgICAgICAgICAgICAgb25LZXlVcD17dGhpcy5vbktleVVwfVxuICAgICAgICAgICAgICAgICAgICBvbkZvY3VzPXt0aGlzLm9uRm9jdXN9XG4gICAgICAgICAgICAgICAgICAgIG9uQmx1cj17dGhpcy5vbkJsdXJ9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWRpdGFibGVFbDtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsa0JBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLG1CQUFBLEdBQUFGLE9BQUE7QUFBb0UsU0FBQUcseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQUwsd0JBQUFLLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxXQUFBSyxPQUFBLEVBQUFMLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxD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