UNPKG

tc-ui-toolkit

Version:

React components used to develop tools for the desktop app translationCore

247 lines (209 loc) 27.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _selectionHelpers = require("../helpers/selectionHelpers"); var _stringHelpers = require("../helpers/stringHelpers"); var _MyLanguageModal = _interopRequireDefault(require("../MyLanguageModal")); var _ThreeDotMenu = _interopRequireDefault(require("../ThreeDotMenu")); var _fontUtils = require("../../common/fontUtils"); var _ = require("../.."); require("../VerseCheck.styles.css"); function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } var NAMESPACE = 'CheckArea'; var DefaultArea = /*#__PURE__*/function (_React$Component) { (0, _inherits2["default"])(DefaultArea, _React$Component); var _super = _createSuper(DefaultArea); function DefaultArea() { var _this; (0, _classCallCheck2["default"])(this, DefaultArea); _this = _super.call(this); _this.state = { inBox: false, modalVisibility: false }; return _this; } (0, _createClass2["default"])(DefaultArea, [{ key: "displayText", value: function displayText(verseText, selections, targetLanguageFontClassName) { var validateSelections = this.props.validateSelections; // normalize whitespace for text rendering in order to display highlights with more than one space since html selections show one space verseText = (0, _selectionHelpers.normalizeString)(verseText); var verseTextSpans = /*#__PURE__*/_react["default"].createElement("span", { className: targetLanguageFontClassName }, verseText); if (selections && selections.length > 0) { var _selectionArray = (0, _selectionHelpers.selectionArray)(verseText, selections); for (var j = 0, len = selections.length; j < len; j++) { var selection = selections[j]; if ((0, _stringHelpers.occurrencesInString)(verseText, selection.text) !== selection.occurrences) { // validate selections and remove ones that do not apply validateSelections(verseText); } } verseTextSpans = []; for (var i = 0, _len = _selectionArray.length; i < _len; i++) { var _selection = _selectionArray[i]; var index = i; var style = _selection.selected ? { backgroundColor: 'var(--highlight-color)' } : {}; verseTextSpans.push( /*#__PURE__*/_react["default"].createElement("span", { key: index, className: targetLanguageFontClassName, style: style }, _selection.text)); } } return /*#__PURE__*/_react["default"].createElement("div", { style: { userSelect: 'none', color: 'var(--text-color-light)' } }, verseTextSpans); } }, { key: "render", value: function render() { var _this2 = this; var _this$props = this.props, translate = _this$props.translate, reference = _this$props.reference, verseText = _this$props.verseText, selections = _this$props.selections, targetBible = _this$props.targetBible, bookDetails = _this$props.bookDetails, toolsSettings = _this$props.toolsSettings, setToolSettings = _this$props.setToolSettings, targetLanguageFont = _this$props.targetLanguageFont, targetLanguageDetails = _this$props.targetLanguageDetails; var book = targetLanguageDetails.book, direction = targetLanguageDetails.direction, languageCode = targetLanguageDetails.id; var bookName = book && book.name ? book.name : bookDetails.name; var languageName = targetLanguageDetails.name || null; var languageStr = (0, _.getTitleWithId)(languageName, languageCode); var refStr = (0, _.getReferenceStr)(reference.chapter, reference.verse); var title = (0, _.getTitleStr)(bookName, refStr); var isLTR_ = (0, _.isLTR)(direction); var style = { display: 'flex', flexDirection: 'column' }; var targetLanguageFontClassName = (0, _fontUtils.getFontClassName)(targetLanguageFont); var verseTitleClassName = targetLanguageFontClassName ? "verse-title-title ".concat(targetLanguageFontClassName) : 'verse-title-title'; var verseSubtitleClassName = targetLanguageFontClassName ? "verse-title-subtitle ".concat(targetLanguageFontClassName) : 'verse-title-subtitle'; var lineHeightStyle = targetLanguageFontClassName ? { lineHeight: 1.4, padding: targetLanguageFontClassName.includes('Awami') ? '0 0 10px' : 0 } : {}; var _ref = toolsSettings[NAMESPACE] || {}, fontSize = _ref.fontSize; var textStyle = fontSize ? { fontSize: "".concat(fontSize, "%") } : {}; if (!isLTR_) { // for RTL style.justifyContent = 'right'; style.width = '100%'; style.direction = 'rtl'; style.paddingRight = '15px'; } return /*#__PURE__*/_react["default"].createElement("div", { style: { WebkitUserSelect: 'none', flex: 1, display: 'flex', flexDirection: 'column' } }, /*#__PURE__*/_react["default"].createElement("div", { className: "verse-title" }, isLTR_ ? '' : /*#__PURE__*/_react["default"].createElement(_ThreeDotMenu["default"], { namespace: NAMESPACE, toolsSettings: toolsSettings, setToolSettings: setToolSettings, label: translate('expand_verses'), title: translate('click_show_expanded'), handleMyLanguageModal: function handleMyLanguageModal() { return _this2.setState({ modalVisibility: true }); } }), /*#__PURE__*/_react["default"].createElement("div", { className: "pane", style: style }, /*#__PURE__*/_react["default"].createElement("span", { className: verseTitleClassName, style: lineHeightStyle }, languageStr), /*#__PURE__*/_react["default"].createElement("span", { className: verseSubtitleClassName, style: lineHeightStyle }, title)), isLTR_ ? /*#__PURE__*/_react["default"].createElement(_ThreeDotMenu["default"], { anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, transformOrigin: { vertical: 'top', horizontal: 'left' }, namespace: NAMESPACE, toolsSettings: toolsSettings, setToolSettings: setToolSettings, label: translate('expand_verses'), title: translate('click_show_expanded'), handleMyLanguageModal: function handleMyLanguageModal() { return _this2.setState({ modalVisibility: true }); } }) : '', /*#__PURE__*/_react["default"].createElement(_MyLanguageModal["default"], { bookName: bookName, translate: translate, targetBible: targetBible, fontSize: "".concat(fontSize, "%"), chapter: reference.chapter, currentVerse: reference.verse, show: this.state.modalVisibility, targetLanguageFont: targetLanguageFont, targetLanguageDetails: targetLanguageDetails, languageDirection: direction || 'ltr', onHide: function onHide() { return _this2.setState({ modalVisibility: false }); } })), /*#__PURE__*/_react["default"].createElement("div", { className: direction === 'ltr' ? 'ltr-content' : 'rtl-content', style: textStyle }, this.displayText(verseText, selections, targetLanguageFontClassName))); } }]); return DefaultArea; }(_react["default"].Component); DefaultArea.propTypes = { targetLanguageFont: _propTypes["default"].string, translate: _propTypes["default"].func.isRequired, reference: _propTypes["default"].object.isRequired, selections: _propTypes["default"].array.isRequired, verseText: _propTypes["default"].string.isRequired, bookDetails: _propTypes["default"].object.isRequired, targetBible: _propTypes["default"].object.isRequired, toolsSettings: _propTypes["default"].object.isRequired, setToolSettings: _propTypes["default"].func.isRequired, validateSelections: _propTypes["default"].func.isRequired, targetLanguageDetails: _propTypes["default"].object.isRequired }; var _default = DefaultArea; exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9WZXJzZUNoZWNrL0RlZmF1bHRBcmVhL2luZGV4LmpzIl0sIm5hbWVzIjpbIk5BTUVTUEFDRSIsIkRlZmF1bHRBcmVhIiwic3RhdGUiLCJpbkJveCIsIm1vZGFsVmlzaWJpbGl0eSIsInZlcnNlVGV4dCIsInNlbGVjdGlvbnMiLCJ0YXJnZXRMYW5ndWFnZUZvbnRDbGFzc05hbWUiLCJ2YWxpZGF0ZVNlbGVjdGlvbnMiLCJwcm9wcyIsInZlcnNlVGV4dFNwYW5zIiwibGVuZ3RoIiwiX3NlbGVjdGlvbkFycmF5IiwiaiIsImxlbiIsInNlbGVjdGlvbiIsInRleHQiLCJvY2N1cnJlbmNlcyIsImkiLCJpbmRleCIsInN0eWxlIiwic2VsZWN0ZWQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJwdXNoIiwidXNlclNlbGVjdCIsImNvbG9yIiwidHJhbnNsYXRlIiwicmVmZXJlbmNlIiwidGFyZ2V0QmlibGUiLCJib29rRGV0YWlscyIsInRvb2xzU2V0dGluZ3MiLCJzZXRUb29sU2V0dGluZ3MiLCJ0YXJnZXRMYW5ndWFnZUZvbnQiLCJ0YXJnZXRMYW5ndWFnZURldGFpbHMiLCJib29rIiwiZGlyZWN0aW9uIiwibGFuZ3VhZ2VDb2RlIiwiaWQiLCJib29rTmFtZSIsIm5hbWUiLCJsYW5ndWFnZU5hbWUiLCJsYW5ndWFnZVN0ciIsInJlZlN0ciIsImNoYXB0ZXIiLCJ2ZXJzZSIsInRpdGxlIiwiaXNMVFJfIiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJ2ZXJzZVRpdGxlQ2xhc3NOYW1lIiwidmVyc2VTdWJ0aXRsZUNsYXNzTmFtZSIsImxpbmVIZWlnaHRTdHlsZSIsImxpbmVIZWlnaHQiLCJwYWRkaW5nIiwiaW5jbHVkZXMiLCJmb250U2l6ZSIsInRleHRTdHlsZSIsImp1c3RpZnlDb250ZW50Iiwid2lkdGgiLCJwYWRkaW5nUmlnaHQiLCJXZWJraXRVc2VyU2VsZWN0IiwiZmxleCIsInNldFN0YXRlIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwiZGlzcGxheVRleHQiLCJSZWFjdCIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwib2JqZWN0IiwiYXJyYXkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFPQTs7Ozs7O0FBQ0EsSUFBTUEsU0FBUyxHQUFHLFdBQWxCOztJQUVNQyxXOzs7OztBQUNKLHlCQUFjO0FBQUE7O0FBQUE7QUFDWjtBQUNBLFVBQUtDLEtBQUwsR0FBYTtBQUNYQyxNQUFBQSxLQUFLLEVBQUUsS0FESTtBQUVYQyxNQUFBQSxlQUFlLEVBQUU7QUFGTixLQUFiO0FBRlk7QUFNYjs7OztnQ0FFV0MsUyxFQUFXQyxVLEVBQVlDLDJCLEVBQTZCO0FBQUEsVUFDdERDLGtCQURzRCxHQUMvQixLQUFLQyxLQUQwQixDQUN0REQsa0JBRHNELEVBRTlEOztBQUNBSCxNQUFBQSxTQUFTLEdBQUcsdUNBQWdCQSxTQUFoQixDQUFaOztBQUNBLFVBQUlLLGNBQWMsZ0JBQUc7QUFBTSxRQUFBLFNBQVMsRUFBRUg7QUFBakIsU0FBK0NGLFNBQS9DLENBQXJCOztBQUVBLFVBQUlDLFVBQVUsSUFBSUEsVUFBVSxDQUFDSyxNQUFYLEdBQW9CLENBQXRDLEVBQXlDO0FBQ3ZDLFlBQUlDLGVBQWUsR0FBRyxzQ0FBZVAsU0FBZixFQUEwQkMsVUFBMUIsQ0FBdEI7O0FBRUEsYUFBSyxJQUFJTyxDQUFDLEdBQUcsQ0FBUixFQUFXQyxHQUFHLEdBQUdSLFVBQVUsQ0FBQ0ssTUFBakMsRUFBeUNFLENBQUMsR0FBR0MsR0FBN0MsRUFBa0RELENBQUMsRUFBbkQsRUFBdUQ7QUFDckQsY0FBTUUsU0FBUyxHQUFHVCxVQUFVLENBQUNPLENBQUQsQ0FBNUI7O0FBRUEsY0FBSSx3Q0FBb0JSLFNBQXBCLEVBQStCVSxTQUFTLENBQUNDLElBQXpDLE1BQW1ERCxTQUFTLENBQUNFLFdBQWpFLEVBQThF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RUFBQUEsZUFBZSxFQUFFc0Msc0JBQVVFLElBQVYsQ0FBZUMsVUFUVjtBQVV0QmhFLEVBQUFBLGtCQUFrQixFQUFFNkQsc0JBQVVFLElBQVYsQ0FBZUMsVUFWYjtBQVd0QnZDLEVBQUFBLHFCQUFxQixFQUFFb0Msc0JBQVVJLE1BQVYsQ0FBaUJEO0FBWGxCLENBQXhCO2VBY2V2RSxXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBzZWxlY3Rpb25BcnJheSwgbm9ybWFsaXplU3RyaW5nIH0gZnJvbSAnLi4vaGVscGVycy9zZWxlY3Rpb25IZWxwZXJzJztcbmltcG9ydCB7IG9jY3VycmVuY2VzSW5TdHJpbmcgfSBmcm9tICcuLi9oZWxwZXJzL3N0cmluZ0hlbHBlcnMnO1xuaW1wb3J0IE15TGFuZ3VhZ2VNb2RhbCBmcm9tICcuLi9NeUxhbmd1YWdlTW9kYWwnO1xuaW1wb3J0IFRocmVlRG90TWVudSBmcm9tICcuLi9UaHJlZURvdE1lbnUnO1xuaW1wb3J0IHsgZ2V0Rm9udENsYXNzTmFtZSB9IGZyb20gJy4uLy4uL2NvbW1vbi9mb250VXRpbHMnO1xuaW1wb3J0IHtcbiAgZ2V0UmVmZXJlbmNlU3RyLFxuICBnZXRUaXRsZVN0cixcbiAgZ2V0VGl0bGVXaXRoSWQsXG4gIGlzTFRSLFxufSBmcm9tICcuLi8uLic7XG4vLyBzdHlsaW5nXG5pbXBvcnQgJy4uL1ZlcnNlQ2hlY2suc3R5bGVzLmNzcyc7XG5jb25zdCBOQU1FU1BBQ0UgPSAnQ2hlY2tBcmVhJztcblxuY2xhc3MgRGVmYXVsdEFyZWEgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBpbkJveDogZmFsc2UsXG4gICAgICBtb2RhbFZpc2liaWxpdHk6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBkaXNwbGF5VGV4dCh2ZXJzZVRleHQsIHNlbGVjdGlvbnMsIHRhcmdldExhbmd1YWdlRm9udENsYXNzTmFtZSkge1xuICAgIGNvbnN0IHsgdmFsaWRhdGVTZWxlY3Rpb25zIH0gPSB0aGlzLnByb3BzO1xuICAgIC8vIG5vcm1hbGl6ZSB3aGl0ZXNwYWNlIGZvciB0ZXh0IHJlbmRlcmluZyBpbiBvcmRlciB0byBkaXNwbGF5IGhpZ2hsaWdodHMgd2l0aCBtb3JlIHRoYW4gb25lIHNwYWNlIHNpbmNlIGh0bWwgc2VsZWN0aW9ucyBzaG93IG9uZSBzcGFjZVxuICAgIHZlcnNlVGV4dCA9IG5vcm1hbGl6ZVN0cmluZyh2ZXJzZVRleHQpO1xuICAgIGxldCB2ZXJzZVRleHRTcGFucyA9IDxzcGFuIGNsYXNzTmFtZT17dGFyZ2V0TGFuZ3VhZ2VGb250Q2xhc3NOYW1lfT57dmVyc2VUZXh0fTwvc3Bhbj47XG5cbiAgICBpZiAoc2VsZWN0aW9ucyAmJiBzZWxlY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBfc2VsZWN0aW9uQXJyYXkgPSBzZWxlY3Rpb25BcnJheSh2ZXJzZVRleHQsIHNlbGVjdGlvbnMpO1xuXG4gICAgICBmb3IgKGxldCBqID0gMCwgbGVuID0gc2VsZWN0aW9ucy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBzZWxlY3Rpb25zW2pdO1xuXG4gICAgICAgIGlmIChvY2N1cnJlbmNlc0luU3RyaW5nKHZlcnNlVGV4dCwgc2VsZWN0aW9uLnRleHQpICE9PSBzZWxlY3Rpb24ub2NjdXJyZW5jZXMpIHtcbiAgICAgICAgICAvLyB2YWxpZGF0ZSBzZWxlY3Rpb25zIGFuZCByZW1vdmUgb25lcyB0aGF0IGRvIG5vdCBhcHBseVxuICAgICAgICAgIHZhbGlkYXRlU2VsZWN0aW9ucyh2ZXJzZVRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZlcnNlVGV4dFNwYW5zID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBfc2VsZWN0aW9uQXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gX3NlbGVjdGlvbkFycmF5W2ldO1xuICAgICAgICBjb25zdCBpbmRleCA9IGk7XG4gICAgICAgIGxldCBzdHlsZSA9IHNlbGVjdGlvbi5zZWxlY3RlZCA/IHsgYmFja2dyb3VuZENvbG9yOiAndmFyKC0taGlnaGxpZ2h0LWNvbG9yKScgfSA6IHt9O1xuXG4gICAgICAgIHZlcnNlVGV4dFNwYW5zLnB1c2goXG4gICAgICAgICAgPHNwYW4ga2V5PXtpbmRleH0gY2xhc3NOYW1lPXt0YXJnZXRMYW5ndWFnZUZvbnRDbGFzc05hbWV9IHN0eWxlPXtzdHlsZX0+XG4gICAgICAgICAgICB7c2VsZWN0aW9uLnRleHR9XG4gICAgICAgICAgPC9zcGFuPixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgc3R5bGU9e3sgdXNlclNlbGVjdDogJ25vbmUnLCBjb2xvcjogJ3ZhcigtLXRleHQtY29sb3ItbGlnaHQpJyB9fT5cbiAgICAgICAge3ZlcnNlVGV4dFNwYW5zfVxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICB0cmFuc2xhdGUsXG4gICAgICByZWZlcmVuY2UsXG4gICAgICB2ZXJzZVRleHQsXG4gICAgICBzZWxlY3Rpb25zLFxuICAgICAgdGFyZ2V0QmlibGUsXG4gICAgICBib29rRGV0YWlscyxcbiAgICAgIHRvb2xzU2V0dGluZ3MsXG4gICAgICBzZXRUb29sU2V0dGluZ3MsXG4gICAgICB0YXJnZXRMYW5ndWFnZUZvbnQsXG4gICAgICB0YXJnZXRMYW5ndWFnZURldGFpbHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3Qge1xuICAgICAgYm9vayxcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIGlkOmxhbmd1YWdlQ29kZSxcbiAgICB9ID0gdGFyZ2V0TGFuZ3VhZ2VEZXRhaWxzO1xuICAgIGNvbnN0IGJvb2tOYW1lID0gYm9vayAmJiBib29rLm5hbWUgPyBib29rLm5hbWUgOiBib29rRGV0YWlscy5uYW1lO1xuICAgIGNvbnN0IGxhbmd1YWdlTmFtZSA9IHRhcmdldExhbmd1YWdlRGV0YWlscy5uYW1lIHx8IG51bGw7XG4gICAgY29uc3QgbGFuZ3VhZ2VTdHIgPSBnZXRUaXRsZVdpdGhJZChsYW5ndWFnZU5hbWUsIGxhbmd1YWdlQ29kZSk7XG4gICAgY29uc3QgcmVmU3RyID0gZ2V0UmVmZXJlbmNlU3RyKHJlZmVyZW5jZS5jaGFwdGVyLCByZWZlcmVuY2UudmVyc2UpO1xuICAgIGNvbnN0IHRpdGxlID0gZ2V0VGl0bGVTdHIoYm9va05hbWUsIHJlZlN0cik7XG4gICAgY29uc3QgaXNMVFJfID0gaXNMVFIoZGlyZWN0aW9uKTtcbiAgICBjb25zdCBzdHlsZSA9IHsgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyB9O1xuICAgIGNvbnN0IHRhcmdldExhbmd1YWdlRm9udENsYXNzTmFtZSA9IGdldEZvbnRDbGFzc05hbWUodGFyZ2V0TGFuZ3VhZ2VGb250KTtcbiAgICBjb25zdCB2ZXJzZVRpdGxlQ2xhc3NOYW1lID0gdGFyZ2V0TGFuZ3VhZ2VGb250Q2xhc3NOYW1lID8gYHZlcnNlLXRpdGxlLXRpdGxlICR7dGFyZ2V0TGFuZ3VhZ2VGb250Q2xhc3NOYW1lfWAgOiAndmVyc2UtdGl0bGUtdGl0bGUnO1xuICAgIGNvbnN0IHZlcnNlU3VidGl0bGVDbGFzc05hbWUgPSB0YXJnZXRMYW5ndWFnZUZvbnRDbGFzc05hbWUgPyBgdmVyc2UtdGl0bGUtc3VidGl0bGUgJHt0YXJnZXRMYW5ndWFnZUZvbnRDbGFzc05hbWV9YCA6ICd2ZXJzZS10aXRsZS1zdWJ0aXRsZSc7XG4gICAgY29uc3QgbGluZUhlaWdodFN0eWxlID0gdGFyZ2V0TGFuZ3VhZ2VGb250Q2xhc3NOYW1lID8geyBsaW5lSGVpZ2h0OiAxLjQsIHBhZGRpbmc6IHRhcmdldExhbmd1YWdlRm9udENsYXNzTmFtZS5pbmNsdWRlcygnQXdhbWknKSA/ICcwIDAgMTBweCcgOiAwIH0gOiB7fTtcbiAgICBjb25zdCB7IGZvbnRTaXplIH0gPSB0b29sc1NldHRpbmdzW05BTUVTUEFDRV0gfHwge307XG4gICAgY29uc3QgdGV4dFN0eWxlID0gZm9udFNpemUgPyB7IGZvbnRTaXplOiBgJHtmb250U2l6ZX0lYCB9IDoge307XG5cbiAgICBpZiAoIWlzTFRSXykgeyAvLyBmb3IgUlRMXG4gICAgICBzdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdyaWdodCc7XG4gICAgICBzdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgIHN0eWxlLmRpcmVjdGlvbiA9ICdydGwnO1xuICAgICAgc3R5bGUucGFkZGluZ1JpZ2h0ID0gJzE1cHgnO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IHN0eWxlPXt7XG4gICAgICAgIFdlYmtpdFVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICAgICAgZmxleDogMSxcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgIH19PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ndmVyc2UtdGl0bGUnPlxuICAgICAgICAgIHsvKiBwdXQgaWNvbiBoZXJlIGlmIFJUTCAqL31cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpc0xUUl8gP1xuICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgIDxUaHJlZURvdE1lbnVcbiAgICAgICAgICAgICAgICBuYW1lc3BhY2U9e05BTUVTUEFDRX1cbiAgICAgICAgICAgICAgICB0b29sc1NldHRpbmdzPXt0b29sc1NldHRpbmdzfVxuICAgICAgICAgICAgICAgIHNldFRvb2xTZXR0aW5ncz17c2V0VG9vbFNldHRpbmdzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXt0cmFuc2xhdGUoJ2V4cGFuZF92ZXJzZXMnKX1cbiAgICAgICAgICAgICAgICB0aXRsZT17dHJhbnNsYXRlKCdjbGlja19zaG93X2V4cGFuZGVkJyl9XG4gICAgICAgICAgICAgICAgaGFuZGxlTXlMYW5ndWFnZU1vZGFsPXsoKSA9PiB0aGlzLnNldFN0YXRlKHsgbW9kYWxWaXNpYmlsaXR5OiB0cnVlIH0pfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ncGFuZScgc3R5bGU9e3N0eWxlfT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dmVyc2VUaXRsZUNsYXNzTmFtZX0gc3R5bGU9e2xpbmVIZWlnaHRTdHlsZX0+XG4gICAgICAgICAgICAgIHtsYW5ndWFnZVN0cn1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17dmVyc2VTdWJ0aXRsZUNsYXNzTmFtZX0gc3R5bGU9e2xpbmVIZWlnaHRTdHlsZX0+XG4gICAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7LyogcHV0IGljb24gaGVyZSBpZiBMVFIgKi99XG4gICAgICAgICAge1xuICAgICAgICAgICAgaXNMVFJfID9cbiAgICAgICAgICAgICAgPFRocmVlRG90TWVudVxuICAgICAgICAgICAgICAgIGFuY2hvck9yaWdpbj17e1xuICAgICAgICAgICAgICAgICAgdmVydGljYWw6ICdib3R0b20nLFxuICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogJ2xlZnQnLFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luPXt7XG4gICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAgICAgICAgICAgICAgICBob3Jpem9udGFsOiAnbGVmdCcsXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICBuYW1lc3BhY2U9e05BTUVTUEFDRX1cbiAgICAgICAgICAgICAgICB0b29sc1NldHRpbmdzPXt0b29sc1NldHRpbmdzfVxuICAgICAgICAgICAgICAgIHNldFRvb2xTZXR0aW5ncz17c2V0VG9vbFNldHRpbmdzfVxuICAgICAgICAgICAgICAgIGxhYmVsPXt0cmFuc2xhdGUoJ2V4cGFuZF92ZXJzZXMnKX1cbiAgICAgICAgICAgICAgICB0aXRsZT17dHJhbnNsYXRlKCdjbGlja19zaG93X2V4cGFuZGVkJyl9XG4gICAgICAgICAgICAgICAgaGFuZGxlTXlMYW5ndWFnZU1vZGFsPXsoKSA9PiB0aGlzLnNldFN0YXRlKHsgbW9kYWxWaXNpYmlsaXR5OiB0cnVlIH0pfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICcnXG4gICAgICAgICAgfVxuICAgICAgICAgIDxNeUxhbmd1YWdlTW9kYWxcbiAgICAgICAgICAgIGJvb2tOYW1lPXtib29rTmFtZX1cbiAgICAgICAgICAgIHRyYW5zbGF0ZT17dHJhbnNsYXRlfVxuICAgICAgICAgICAgdGFyZ2V0QmlibGU9e3RhcmdldEJpYmxlfVxuICAgICAgICAgICAgZm9udFNpemU9e2Ake2ZvbnRTaXplfSVgfVxuICAgICAgICAgICAgY2hhcHRlcj17cmVmZXJlbmNlLmNoYXB0ZXJ9XG4gICAgICAgICAgICBjdXJyZW50VmVyc2U9e3JlZmVyZW5jZS52ZXJzZX1cbiAgICAgICAgICAgIHNob3c9e3RoaXMuc3RhdGUubW9kYWxWaXNpYmlsaXR5fVxuICAgICAgICAgICAgdGFyZ2V0TGFuZ3VhZ2VGb250PXt0YXJnZXRMYW5ndWFnZUZvbnR9XG4gICAgICAgICAgICB0YXJnZXRMYW5ndWFnZURldGFpbHM9e3RhcmdldExhbmd1YWdlRGV0YWlsc31cbiAgICAgICAgICAgIGxhbmd1YWdlRGlyZWN0aW9uPXtkaXJlY3Rpb24gfHwgJ2x0cid9XG4gICAgICAgICAgICBvbkhpZGU9eygpID0+IHRoaXMuc2V0U3RhdGUoeyBtb2RhbFZpc2liaWxpdHk6IGZhbHNlIH0pfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17ZGlyZWN0aW9uID09PSAnbHRyJyA/ICdsdHItY29udGVudCcgOiAncnRsLWNvbnRlbnQnfSBzdHlsZT17dGV4dFN0eWxlfT5cbiAgICAgICAgICB7dGhpcy5kaXNwbGF5VGV4dCh2ZXJzZVRleHQsIHNlbGVjdGlvbnMsIHRhcmdldExhbmd1YWdlRm9udENsYXNzTmFtZSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxufVxuXG5EZWZhdWx0QXJlYS5wcm9wVHlwZXMgPSB7XG4gIHRhcmdldExhbmd1YWdlRm9udDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHJhbnNsYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICByZWZlcmVuY2U6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgc2VsZWN0aW9uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIHZlcnNlVGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBib29rRGV0YWlsczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICB0YXJnZXRCaWJsZTogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICB0b29sc1NldHRpbmdzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIHNldFRvb2xTZXR0aW5nczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdmFsaWRhdGVTZWxlY3Rpb25zOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB0YXJnZXRMYW5ndWFnZURldGFpbHM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRBcmVhO1xuIl19