UNPKG

tc-ui-toolkit

Version:

React components used to develop tools for the desktop app translationCore

306 lines (258 loc) 31.9 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); 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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _Dialog = _interopRequireDefault(require("@material-ui/core/Dialog")); var _DialogActions = _interopRequireDefault(require("@material-ui/core/DialogActions")); var _DialogContent = _interopRequireDefault(require("@material-ui/core/DialogContent")); var _Toolbar = _interopRequireDefault(require("@material-ui/core/Toolbar")); var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton")); var _Visibility = _interopRequireDefault(require("@material-ui/icons/Visibility")); var _VisibilityOff = _interopRequireDefault(require("@material-ui/icons/VisibilityOff")); var _reactBootstrap = require("react-bootstrap"); var _styles = require("@material-ui/core/styles"); var _Paper = _interopRequireDefault(require("@material-ui/core/Paper")); var _reactDraggable = _interopRequireDefault(require("react-draggable")); var _deepEqual = _interopRequireDefault(require("deep-equal")); var _fontUtils = require("../../common/fontUtils"); var _verseHelpers = require("../helpers/verseHelpers"); var _ChapterView = _interopRequireDefault(require("./ChapterView")); var _BibleHeadingsRow = _interopRequireDefault(require("./ChapterView/BibleHeadingsRow")); require("./ExpandedScripturePaneModal.styles.css"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function PaperComponent(props) { // component will only be draggable by element with the className in the handle prop return /*#__PURE__*/_react["default"].createElement(_reactDraggable["default"], { handle: ".expanded-scripture-draggable-handle" }, /*#__PURE__*/_react["default"].createElement(_Paper["default"], (0, _extends2["default"])({}, props, { elevation: 2 }))); } var styles = { toolBar: { display: 'flex', justifyContent: 'center', alignItems: 'center', color: 'var(--reverse-color)', backgroundColor: 'var(--accent-color-dark)', padding: '15px', width: '100%', cursor: 'move' }, title: { marginLeft: 'auto', fontSize: '22px', fontWeight: '400' }, usfmButton: { marginLeft: 'auto' }, closeButton: { marginLeft: '10px' }, dialogContent: { padding: '0px', margin: '0px' }, dialogActions: { height: '70px', padding: '10px', margin: '0px', borderTop: '1px solid var(--border-color)' }, progressRoot: { color: 'var(--accent-color-dark)' }, progressSvg: { margin: '5px' }, paperRoot: { margin: '0px' } }; function ExpandedScripturePaneModal(_ref) { var show = _ref.show, title = _ref.title, onHide = _ref.onHide, bibles = _ref.bibles, classes = _ref.classes, contextId = _ref.contextId, translate = _ref.translate, selections = _ref.selections, showPopover = _ref.showPopover, getLexiconData = _ref.getLexiconData, editTargetVerse = _ref.editTargetVerse, targetLanguageFont = _ref.targetLanguageFont, currentPaneSettings = _ref.currentPaneSettings, projectDetailsReducer = _ref.projectDetailsReducer, editVerseRef = _ref.editVerseRef; var _useState = (0, _react.useState)({}), _useState2 = (0, _slicedToArray2["default"])(_useState, 2), verseTextReference = _useState2[0], editVerseText = _useState2[1]; var _useState3 = (0, _react.useState)(false), _useState4 = (0, _slicedToArray2["default"])(_useState3, 2), showTargetUsfm = _useState4[0], setShowTargetUsfm = _useState4[1]; (0, _react.useEffect)(function () { if (editVerseRef) { // if verse is to be edited var chapter = contextId.reference.chapter; var bibleId = 'targetBible'; var currentVerseNumber = editVerseRef; var bible = (0, _verseHelpers.getBibleElement)(bibles, 'targetLanguage', bibleId); var verseObj = bible && (0, _verseHelpers.getVerseDataFromBible)(bible, chapter, currentVerseNumber); var verseText = verseObj === null || verseObj === void 0 ? void 0 : verseObj.verseData; if (verseText) { editVerseText(function (prevState) { return _objectSpread(_objectSpread({}, prevState), {}, { bibleId: bibleId, chapter: chapter, verse: currentVerseNumber, verseText: verseText }); }); } else { console.warn("ExpandedScripturePaneModal - cannot open edit verse"); } } }, [editVerseRef]); function handleEditTargetVerse(bibleId, chapter, verse, verseText) { editVerseText(function (prevState) { return _objectSpread(_objectSpread({}, prevState), {}, { bibleId: bibleId, chapter: chapter, verse: verse, verseText: verseText }); }); } function toggleUsfm() { setShowTargetUsfm(!showTargetUsfm); } function handleEditorSubmit(originalVerse, newVerse, reasons) { if (Object.keys(verseTextReference).length === 0) { return; } var chapter = verseTextReference.chapter, verse = verseTextReference.verse; if (typeof editTargetVerse === 'function') { editTargetVerse(chapter, verse, originalVerse, newVerse, reasons); } else { console.warn('Unable to edit verse. Callback is not a function.'); } editVerseText({}); } function handleEditorCancel() { editVerseText({}); } var fontClass = (0, _fontUtils.getFontClassName)(targetLanguageFont); return /*#__PURE__*/_react["default"].createElement(_Dialog["default"], { open: show, onClose: onHide, fullWidth: true, maxWidth: "md", PaperComponent: PaperComponent, PaperProps: { className: classes.paperRoot }, "aria-labelledby": "draggable-expanded-scripture-pane" }, /*#__PURE__*/_react["default"].createElement(_Toolbar["default"], { style: styles.toolBar, className: "expanded-scripture-draggable-handle" }, /*#__PURE__*/_react["default"].createElement("div", { style: styles.title, className: fontClass }, title), /*#__PURE__*/_react["default"].createElement(_IconButton["default"], { title: showTargetUsfm ? 'Hide USFM' : 'Show USFM', "aria-label": showTargetUsfm ? 'HideUSGM' : 'ShowUSFM', onClick: function onClick() { return toggleUsfm(); }, style: styles.usfmButton, color: "inherit" }, showTargetUsfm ? /*#__PURE__*/_react["default"].createElement(_Visibility["default"], { id: "visibility_icon", htmlColor: "#FFF" }) : /*#__PURE__*/_react["default"].createElement(_VisibilityOff["default"], { id: "visibility_icon", htmlColor: "#FFF" })), /*#__PURE__*/_react["default"].createElement(_IconButton["default"], { color: "inherit", onClick: onHide, "aria-label": "Close", style: styles.closeButton }, /*#__PURE__*/_react["default"].createElement(_reactBootstrap.Glyphicon, { glyph: "remove" }))), /*#__PURE__*/_react["default"].createElement(_DialogContent["default"], { style: styles.dialogContent }, /*#__PURE__*/_react["default"].createElement(_BibleHeadingsRow["default"], { bibles: bibles, currentPaneSettings: currentPaneSettings, projectDetailsReducer: projectDetailsReducer }), /*#__PURE__*/_react["default"].createElement(_ChapterView["default"], { bibles: bibles, contextId: contextId, translate: translate, editVerse: Object.keys(verseTextReference).length === 0 ? null : verseTextReference, editTargetVerse: editTargetVerse, projectDetailsReducer: projectDetailsReducer, currentPaneSettings: currentPaneSettings, handleEditTargetVerse: handleEditTargetVerse, handleEditorSubmit: handleEditorSubmit, handleEditorCancel: handleEditorCancel, selections: selections, showPopover: showPopover, getLexiconData: getLexiconData, showTargetUsfm: showTargetUsfm })), /*#__PURE__*/_react["default"].createElement(_DialogActions["default"], { disableSpacing: true, style: styles.dialogActions }, /*#__PURE__*/_react["default"].createElement("button", { className: "btn-prime", onClick: onHide }, translate('close')))); } ExpandedScripturePaneModal.propTypes = { show: _propTypes["default"].bool.isRequired, onHide: _propTypes["default"].func.isRequired, title: _propTypes["default"].string.isRequired, bibles: _propTypes["default"].object.isRequired, translate: _propTypes["default"].func.isRequired, classes: _propTypes["default"].object.isRequired, targetLanguageFont: _propTypes["default"].string, contextId: _propTypes["default"].object.isRequired, showPopover: _propTypes["default"].func.isRequired, selections: _propTypes["default"].array.isRequired, primaryLabel: _propTypes["default"].string.isRequired, getLexiconData: _propTypes["default"].func.isRequired, editTargetVerse: _propTypes["default"].func.isRequired, currentPaneSettings: _propTypes["default"].array.isRequired, projectDetailsReducer: _propTypes["default"].object.isRequired, editVerseRef: _propTypes["default"].string // if given then open verse for edit (single verse) }; /** * Custom comparison function to determine if component should rerender. * @param {object} prevProps * @param {object} nextProps */ function areEqual(prevProps, nextProps) { /* Return true if passing nextProps.bibles to render would return the same result as passing prevProps.bibles to render, otherwise return false */ return (0, _deepEqual["default"])(prevProps.bibles, nextProps.bibles) && (0, _deepEqual["default"])(prevProps.currentPaneSettings, nextProps.currentPaneSettings) && prevProps.editVerseRef === nextProps.editVerseRef; } // using React.memo to boost performance by memoizing the result var _default = /*#__PURE__*/_react["default"].memo((0, _styles.withStyles)(styles)(ExpandedScripturePaneModal), areEqual); exports["default"] = _default; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9TY3JpcHR1cmVQYW5lL0V4cGFuZGVkU2NyaXB0dXJlUGFuZU1vZGFsL2luZGV4LmpzIl0sIm5hbWVzIjpbIlBhcGVyQ29tcG9uZW50IiwicHJvcHMiLCJzdHlsZXMiLCJ0b29sQmFyIiwiZGlzcGxheSIsImp1c3RpZnlDb250ZW50IiwiYWxpZ25JdGVtcyIsImNvbG9yIiwiYmFja2dyb3VuZENvbG9yIiwicGFkZGluZyIsIndpZHRoIiwiY3Vyc29yIiwidGl0bGUiLCJtYXJnaW5MZWZ0IiwiZm9udFNpemUiLCJmb250V2VpZ2h0IiwidXNmbUJ1dHRvbiIsImNsb3NlQnV0dG9uIiwiZGlhbG9nQ29udGVudCIsIm1hcmdpbiIsImRpYWxvZ0FjdGlvbnMiLCJoZWlnaHQiLCJib3JkZXJUb3AiLCJwcm9ncmVzc1Jvb3QiLCJwcm9ncmVzc1N2ZyIsInBhcGVyUm9vdCIsIkV4cGFuZGVkU2NyaXB0dXJlUGFuZU1vZGFsIiwic2hvdyIsIm9uSGlkZSIsImJpYmxlcyIsImNsYXNzZXMiLCJjb250ZXh0SWQiLCJ0cmFuc2xhdGUiLCJzZWxlY3Rpb25zIiwic2hvd1BvcG92ZXIiLCJnZXRMZXhpY29uRGF0YSIsImVkaXRUYXJnZXRWZXJzZSIsInRhcmdldExhbmd1YWdlRm9udCIsImN1cnJlbnRQYW5lU2V0dGluZ3MiLCJwcm9qZWN0RGV0YWlsc1JlZHVjZXIiLCJlZGl0VmVyc2VSZWYiLCJ2ZXJzZVRleHRSZWZlcmVuY2UiLCJlZGl0VmVyc2VUZXh0Iiwic2hvd1RhcmdldFVzZm0iLCJzZXRTaG93VGFyZ2V0VXNmbSIsImNoYXB0ZXIiLCJyZWZlcmVuY2UiLCJiaWJsZUlkIiwiY3VycmVudFZlcnNlTnVtYmVyIiwiYmlibGUiLCJ2ZXJzZU9iaiIsInZlcnNlVGV4dCIsInZlcnNlRGF0YSIsInByZXZTdGF0ZSIsInZlcnNlIiwiY29uc29sZSIsIndhcm4iLCJoYW5kbGVFZGl0VGFyZ2V0VmVyc2UiLCJ0b2dnbGVVc2ZtIiwiaGFuZGxlRWRpdG9yU3VibWl0Iiwib3JpZ2luYWxWZXJzZSIsIm5ld1ZlcnNlIiwicmVhc29ucyIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJoYW5kbGVFZGl0b3JDYW5jZWwiLCJmb250Q2xhc3MiLCJjbGFzc05hbWUiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJib29sIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJzdHJpbmciLCJvYmplY3QiLCJhcnJheSIsInByaW1hcnlMYWJlbCIsImFyZUVxdWFsIiwicHJldlByb3BzIiwibmV4dFByb3BzIiwiUmVhY3QiLCJtZW1vIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOzs7Ozs7QUFFQSxTQUFTQSxjQUFULENBQXdCQyxLQUF4QixFQUErQjtBQUM3QjtBQUNBLHNCQUNFLGdDQUFDLDBCQUFEO0FBQVcsSUFBQSxNQUFNLEVBQUM7QUFBbEIsa0JBQ0UsZ0NBQUMsaUJBQUQsZ0NBQVdBLEtBQVg7QUFBa0IsSUFBQSxTQUFTLEVBQUU7QUFBN0IsS0FERixDQURGO0FBS0Q7O0FBRUQsSUFBTUMsTUFBTSxHQUFHO0FBQ2JDLEVBQUFBLE9BQU8sRUFBRTtBQUNQQyxJQUFBQSxPQUFPLEVBQUUsTUFERjtBQUVQQyxJQUFBQSxjQUFjLEVBQUUsUUFGVDtBQUdQQyxJQUFBQSxVQUFVLEVBQUUsUUFITDtBQUlQQyxJQUFBQSxLQUFLLEVBQUUsc0JBSkE7QUFLUEMsSUFBQUEsZUFBZSxFQUFFLDBCQUxWO0FBTVBDLElBQUFBLE9BQU8sRUFBRSxNQU5GO0FBT1BDLElBQUFBLEtBQUssRUFBRSxNQVBBO0FBUVBDLElBQUFBLE1BQU0sRUFBRTtBQVJELEdBREk7QUFXYkMsRUFBQUEsS0FBSyxFQUFFO0FBQ0xDLElBQUFBLFVBQVUsRUFBRSxNQURQO0FBRUxDLElBQUFBLFFBQVEs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QUFsQixFQUE2QkMsU0FBN0IsRUFBd0M7QUFDdEM7Ozs7O0FBS0EsU0FBTywyQkFBVUQsU0FBUyxDQUFDbEQsTUFBcEIsRUFBNEJtRCxTQUFTLENBQUNuRCxNQUF0QyxLQUNMLDJCQUFVa0QsU0FBUyxDQUFDekMsbUJBQXBCLEVBQXlDMEMsU0FBUyxDQUFDMUMsbUJBQW5ELENBREssSUFFSnlDLFNBQVMsQ0FBQ3ZDLFlBQVYsS0FBMkJ3QyxTQUFTLENBQUN4QyxZQUZ4QztBQUdELEMsQ0FFRDs7OzRCQUNleUMsa0JBQU1DLElBQU4sQ0FBVyx3QkFBV2hGLE1BQVgsRUFBbUJ3QiwwQkFBbkIsQ0FBWCxFQUEyRG9ELFFBQTNELEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgRGlhbG9nIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0RpYWxvZyc7XG5pbXBvcnQgRGlhbG9nQWN0aW9ucyBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9EaWFsb2dBY3Rpb25zJztcbmltcG9ydCBEaWFsb2dDb250ZW50IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL0RpYWxvZ0NvbnRlbnQnO1xuaW1wb3J0IFRvb2xiYXIgZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUvVG9vbGJhcic7XG5pbXBvcnQgSWNvbkJ1dHRvbiBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9JY29uQnV0dG9uJztcbmltcG9ydCBWaXNpYmlsaXR5SWNvbiBmcm9tICdAbWF0ZXJpYWwtdWkvaWNvbnMvVmlzaWJpbGl0eSc7XG5pbXBvcnQgVmlzaWJpbGl0eU9mZkljb24gZnJvbSAnQG1hdGVyaWFsLXVpL2ljb25zL1Zpc2liaWxpdHlPZmYnO1xuaW1wb3J0IHsgR2x5cGhpY29uIH0gZnJvbSAncmVhY3QtYm9vdHN0cmFwJztcbmltcG9ydCB7IHdpdGhTdHlsZXMgfSBmcm9tICdAbWF0ZXJpYWwtdWkvY29yZS9zdHlsZXMnO1xuLy8gY29tcG9uZW50c1xuaW1wb3J0IFBhcGVyIGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL1BhcGVyJztcbmltcG9ydCBEcmFnZ2FibGUgZnJvbSAncmVhY3QtZHJhZ2dhYmxlJztcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBnZXRGb250Q2xhc3NOYW1lIH0gZnJvbSAnLi4vLi4vY29tbW9uL2ZvbnRVdGlscyc7XG5pbXBvcnQgeyBnZXRCaWJsZUVsZW1lbnQsIGdldFZlcnNlRGF0YUZyb21CaWJsZSB9IGZyb20gJy4uL2hlbHBlcnMvdmVyc2VIZWxwZXJzJztcbmltcG9ydCBDaGFwdGVyVmlldyBmcm9tICcuL0NoYXB0ZXJWaWV3JztcbmltcG9ydCBCaWJsZUhlYWRpbmdzUm93IGZyb20gJy4vQ2hhcHRlclZpZXcvQmlibGVIZWFkaW5nc1Jvdyc7XG5cbmltcG9ydCAnLi9FeHBhbmRlZFNjcmlwdHVyZVBhbmVNb2RhbC5zdHlsZXMuY3NzJztcblxuZnVuY3Rpb24gUGFwZXJDb21wb25lbnQocHJvcHMpIHtcbiAgLy8gY29tcG9uZW50IHdpbGwgb25seSBiZSBkcmFnZ2FibGUgYnkgZWxlbWVudCB3aXRoIHRoZSBjbGFzc05hbWUgaW4gdGhlIGhhbmRsZSBwcm9wXG4gIHJldHVybiAoXG4gICAgPERyYWdnYWJsZSBoYW5kbGU9XCIuZXhwYW5kZWQtc2NyaXB0dXJlLWRyYWdnYWJsZS1oYW5kbGVcIj5cbiAgICAgIDxQYXBlciB7Li4ucHJvcHN9IGVsZXZhdGlvbj17Mn0gLz5cbiAgICA8L0RyYWdnYWJsZT5cbiAgKTtcbn1cblxuY29uc3Qgc3R5bGVzID0ge1xuICB0b29sQmFyOiB7XG4gICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICBjb2xvcjogJ3ZhcigtLXJldmVyc2UtY29sb3IpJyxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICd2YXIoLS1hY2NlbnQtY29sb3ItZGFyayknLFxuICAgIHBhZGRpbmc6ICcxNXB4JyxcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIGN1cnNvcjogJ21vdmUnLFxuICB9LFxuICB0aXRsZToge1xuICAgIG1hcmdpbkxlZnQ6ICdhdXRvJyxcbiAgICBmb250U2l6ZTogJzIycHgnLFxuICAgIGZvbnRXZWlnaHQ6ICc0MDAnLFxuICB9LFxuICB1c2ZtQnV0dG9uOiB7IG1hcmdpbkxlZnQ6ICdhdXRvJyB9LFxuICBjbG9zZUJ1dHRvbjogeyBtYXJnaW5MZWZ0OiAnMTBweCcgfSxcbiAgZGlhbG9nQ29udGVudDoge1xuICAgIHBhZGRpbmc6ICcwcHgnLFxuICAgIG1hcmdpbjogJzBweCcsXG4gIH0sXG4gIGRpYWxvZ0FjdGlvbnM6IHtcbiAgICBoZWlnaHQ6ICc3MHB4JyxcbiAgICBwYWRkaW5nOiAnMTBweCcsXG4gICAgbWFyZ2luOiAnMHB4JyxcbiAgICBib3JkZXJUb3A6ICcxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKScsXG4gIH0sXG4gIHByb2dyZXNzUm9vdDogeyBjb2xvcjogJ3ZhcigtLWFjY2VudC1jb2xvci1kYXJrKScgfSxcbiAgcHJvZ3Jlc3NTdmc6IHsgbWFyZ2luOiAnNXB4JyB9LFxuICBwYXBlclJvb3Q6IHsgbWFyZ2luOiAnMHB4JyB9LFxufTtcblxuZnVuY3Rpb24gRXhwYW5kZWRTY3JpcHR1cmVQYW5lTW9kYWwoe1xuICBzaG93LFxuICB0aXRsZSxcbiAgb25IaWRlLFxuICBiaWJsZXMsXG4gIGNsYXNzZXMsXG4gIGNvbnRleHRJZCxcbiAgdHJhbnNsYXRlLFxuICBzZWxlY3Rpb25zLFxuICBzaG93UG9wb3ZlcixcbiAgZ2V0TGV4aWNvbkRhdGEsXG4gIGVkaXRUYXJnZXRWZXJzZSxcbiAgdGFyZ2V0TGFuZ3VhZ2VGb250LFxuICBjdXJyZW50UGFuZVNldHRpbmdzLFxuICBwcm9qZWN0RGV0YWlsc1JlZHVjZXIsXG4gIGVkaXRWZXJzZVJlZixcbn0pIHtcbiAgY29uc3QgW3ZlcnNlVGV4dFJlZmVyZW5jZSwgZWRpdFZlcnNlVGV4dF0gPSB1c2VTdGF0ZSh7fSk7XG4gIGNvbnN0IFtzaG93VGFyZ2V0VXNmbSwgc2V0U2hvd1RhcmdldFVzZm1dID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGVkaXRWZXJzZVJlZikgeyAvLyBpZiB2ZXJzZSBpcyB0byBiZSBlZGl0ZWRcbiAgICAgIGNvbnN0IHsgY2hhcHRlciB9ID0gY29udGV4dElkLnJlZmVyZW5jZTtcbiAgICAgIGNvbnN0IGJpYmxlSWQgPSAndGFyZ2V0QmlibGUnO1xuICAgICAgY29uc3QgY3VycmVudFZlcnNlTnVtYmVyID0gZWRpdFZlcnNlUmVmO1xuICAgICAgY29uc3QgYmlibGUgPSBnZXRCaWJsZUVsZW1lbnQoYmlibGVzLCAndGFyZ2V0TGFuZ3VhZ2UnLCBiaWJsZUlkKTtcbiAgICAgIGNvbnN0IHZlcnNlT2JqID0gYmlibGUgJiYgZ2V0VmVyc2VEYXRhRnJvbUJpYmxlKGJpYmxlLCBjaGFwdGVyLCBjdXJyZW50VmVyc2VOdW1iZXIpO1xuICAgICAgY29uc3QgdmVyc2VUZXh0ID0gdmVyc2VPYmo/LnZlcnNlRGF0YTtcblxuICAgICAgaWYgKHZlcnNlVGV4dCkge1xuICAgICAgICBlZGl0VmVyc2VUZXh0KHByZXZTdGF0ZSA9PiAoe1xuICAgICAgICAgIC4uLnByZXZTdGF0ZSxcbiAgICAgICAgICBiaWJsZUlkLFxuICAgICAgICAgIGNoYXB0ZXIsXG4gICAgICAgICAgdmVyc2U6IGN1cnJlbnRWZXJzZU51bWJlcixcbiAgICAgICAgICB2ZXJzZVRleHQsXG4gICAgICAgIH0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgRXhwYW5kZWRTY3JpcHR1cmVQYW5lTW9kYWwgLSBjYW5ub3Qgb3BlbiBlZGl0IHZlcnNlYCk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbZWRpdFZlcnNlUmVmXSk7XG5cbiAgZnVuY3Rpb24gaGFuZGxlRWRpdFRhcmdldFZlcnNlKGJpYmxlSWQsIGNoYXB0ZXIsIHZlcnNlLCB2ZXJzZVRleHQpIHtcbiAgICBlZGl0VmVyc2VUZXh0KHByZXZTdGF0ZSA9PiAoe1xuICAgICAgLi4ucHJldlN0YXRlLFxuICAgICAgYmlibGVJZCxcbiAgICAgIGNoYXB0ZXIsXG4gICAgICB2ZXJzZSxcbiAgICAgIHZlcnNlVGV4dCxcbiAgICB9KSk7XG4gIH1cblxuICBmdW5jdGlvbiB0b2dnbGVVc2ZtKCkge1xuICAgIHNldFNob3dUYXJnZXRVc2ZtKCFzaG93VGFyZ2V0VXNmbSk7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVFZGl0b3JTdWJtaXQob3JpZ2luYWxWZXJzZSwgbmV3VmVyc2UsIHJlYXNvbnMpIHtcbiAgICBpZiAoT2JqZWN0LmtleXModmVyc2VUZXh0UmVmZXJlbmNlKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IGNoYXB0ZXIsIHZlcnNlIH0gPSB2ZXJzZVRleHRSZWZlcmVuY2U7XG5cbiAgICBpZiAodHlwZW9mIGVkaXRUYXJnZXRWZXJzZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZWRpdFRhcmdldFZlcnNlKGNoYXB0ZXIsIHZlcnNlLCBvcmlnaW5hbFZlcnNlLCBuZXdWZXJzZSwgcmVhc29ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignVW5hYmxlIHRvIGVkaXQgdmVyc2UuIENhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uLicpO1xuICAgIH1cbiAgICBlZGl0VmVyc2VUZXh0KHt9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUVkaXRvckNhbmNlbCgpIHtcbiAgICBlZGl0VmVyc2VUZXh0KHt9KTtcbiAgfVxuXG4gIGNvbnN0IGZvbnRDbGFzcyA9IGdldEZvbnRDbGFzc05hbWUodGFyZ2V0TGFuZ3VhZ2VGb250KTtcblxuICByZXR1cm4gKFxuICAgIDxEaWFsb2dcbiAgICAgIG9wZW49e3Nob3d9XG4gICAgICBvbkNsb3NlPXtvbkhpZGV9XG4gICAgICBmdWxsV2lkdGhcbiAgICAgIG1heFdpZHRoPSdtZCdcbiAgICAgIFBhcGVyQ29tcG9uZW50PXtQYXBlckNvbXBvbmVudH1cbiAgICAgIFBhcGVyUHJvcHM9e3sgY2xhc3NOYW1lOiBjbGFzc2VzLnBhcGVyUm9vdCB9fVxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwiZHJhZ2dhYmxlLWV4cGFuZGVkLXNjcmlwdHVyZS1wYW5lXCJcbiAgICA+XG4gICAgICA8VG9vbGJhciBzdHlsZT17c3R5bGVzLnRvb2xCYXJ9IGNsYXNzTmFtZT1cImV4cGFuZGVkLXNjcmlwdHVyZS1kcmFnZ2FibGUtaGFuZGxlXCI+XG4gICAgICAgIDxkaXYgc3R5bGU9e3N0eWxlcy50aXRsZX0gY2xhc3NOYW1lPXtmb250Q2xhc3N9PlxuICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgdGl0bGU9e3Nob3dUYXJnZXRVc2ZtID8gJ0hpZGUgVVNGTScgOiAnU2hvdyBVU0ZNJ31cbiAgICAgICAgICBhcmlhLWxhYmVsPXtzaG93VGFyZ2V0VXNmbSA/ICdIaWRlVVNHTScgOiAnU2hvd1VTRk0nfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRvZ2dsZVVzZm0oKX1cbiAgICAgICAgICBzdHlsZT17c3R5bGVzLnVzZm1CdXR0b259XG4gICAgICAgICAgY29sb3I9XCJpbmhlcml0XCJcbiAgICAgICAgPlxuICAgICAgICAgIHtzaG93VGFyZ2V0VXNmbSA/IChcbiAgICAgICAgICAgIDxWaXNpYmlsaXR5SWNvbiBpZD0ndmlzaWJpbGl0eV9pY29uJyBodG1sQ29sb3I9JyNGRkYnIC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxWaXNpYmlsaXR5T2ZmSWNvbiBpZD0ndmlzaWJpbGl0eV9pY29uJyBodG1sQ29sb3I9JyNGRkYnIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICA8SWNvbkJ1dHRvbiBjb2xvcj1cImluaGVyaXRcIiBvbkNsaWNrPXtvbkhpZGV9IGFyaWEtbGFiZWw9XCJDbG9zZVwiIHN0eWxlPXtzdHlsZXMuY2xvc2VCdXR0b259PlxuICAgICAgICAgIDxHbHlwaGljb24gZ2x5cGg9XCJyZW1vdmVcIiAvPlxuICAgICAgICA8L0ljb25CdXR0b24+XG4gICAgICA8L1Rvb2xiYXI+XG4gICAgICA8RGlhbG9nQ29udGVudCBzdHlsZT17c3R5bGVzLmRpYWxvZ0NvbnRlbnR9PlxuICAgICAgICA8QmlibGVIZWFkaW5nc1Jvd1xuICAgICAgICAgIGJpYmxlcz17YmlibGVzfVxuICAgICAgICAgIGN1cnJlbnRQYW5lU2V0dGluZ3M9e2N1cnJlbnRQYW5lU2V0dGluZ3N9XG4gICAgICAgICAgcHJvamVjdERldGFpbHNSZWR1Y2VyPXtwcm9qZWN0RGV0YWlsc1JlZHVjZXJ9IC8+XG4gICAgICAgIDxDaGFwdGVyVmlld1xuICAgICAgICAgIGJpYmxlcz17YmlibGVzfVxuICAgICAgICAgIGNvbnRleHRJZD17Y29udGV4dElkfVxuICAgICAgICAgIHRyYW5zbGF0ZT17dHJhbnNsYXRlfVxuICAgICAgICAgIGVkaXRWZXJzZT17T2JqZWN0LmtleXModmVyc2VUZXh0UmVmZXJlbmNlKS5sZW5ndGggPT09IDAgPyBudWxsIDogdmVyc2VUZXh0UmVmZXJlbmNlfVxuICAgICAgICAgIGVkaXRUYXJnZXRWZXJzZT17ZWRpdFRhcmdldFZlcnNlfVxuICAgICAgICAgIHByb2plY3REZXRhaWxzUmVkdWNlcj17cHJvamVjdERldGFpbHNSZWR1Y2VyfVxuICAgICAgICAgIGN1cnJlbnRQYW5lU2V0dGluZ3M9e2N1cnJlbnRQYW5lU2V0dGluZ3N9XG4gICAgICAgICAgaGFuZGxlRWRpdFRhcmdldFZlcnNlPXtoYW5kbGVFZGl0VGFyZ2V0VmVyc2V9XG4gICAgICAgICAgaGFuZGxlRWRpdG9yU3VibWl0PXtoYW5kbGVFZGl0b3JTdWJtaXR9XG4gICAgICAgICAgaGFuZGxlRWRpdG9yQ2FuY2VsPXtoYW5kbGVFZGl0b3JDYW5jZWx9XG4gICAgICAgICAgc2VsZWN0aW9ucz17c2VsZWN0aW9uc31cbiAgICAgICAgICBzaG93UG9wb3Zlcj17c2hvd1BvcG92ZXJ9XG4gICAgICAgICAgZ2V0TGV4aWNvbkRhdGE9e2dldExleGljb25EYXRhfVxuICAgICAgICAgIHNob3dUYXJnZXRVc2ZtPXtzaG93VGFyZ2V0VXNmbX1cbiAgICAgICAgLz5cbiAgICAgIDwvRGlhbG9nQ29udGVudD5cbiAgICAgIDxEaWFsb2dBY3Rpb25zIGRpc2FibGVTcGFjaW5nIHN0eWxlPXtzdHlsZXMuZGlhbG9nQWN0aW9uc30+XG4gICAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwiYnRuLXByaW1lXCIgb25DbGljaz17b25IaWRlfT5cbiAgICAgICAgICB7dHJhbnNsYXRlKCdjbG9zZScpfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvRGlhbG9nQWN0aW9ucz5cbiAgICA8L0RpYWxvZz5cbiAgKTtcbn1cblxuRXhwYW5kZWRTY3JpcHR1cmVQYW5lTW9kYWwucHJvcFR5cGVzID0ge1xuICBzaG93OiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvbkhpZGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGJpYmxlczogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICB0cmFuc2xhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgdGFyZ2V0TGFuZ3VhZ2VGb250OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb250ZXh0SWQ6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgc2hvd1BvcG92ZXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHNlbGVjdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBwcmltYXJ5TGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZ2V0TGV4aWNvbkRhdGE6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGVkaXRUYXJnZXRWZXJzZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY3VycmVudFBhbmVTZXR0aW5nczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIHByb2plY3REZXRhaWxzUmVkdWNlcjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkLFxuICBlZGl0VmVyc2VSZWY6IFByb3BUeXBlcy5zdHJpbmcsIC8vIGlmIGdpdmVuIHRoZW4gb3BlbiB2ZXJzZSBmb3IgZWRpdCAoc2luZ2xlIHZlcnNlKVxufTtcblxuLyoqXG4gKiBDdXN0b20gY29tcGFyaXNvbiBmdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgY29tcG9uZW50IHNob3VsZCByZXJlbmRlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2UHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAqL1xuZnVuY3Rpb24gYXJlRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcbiAgLypcbiAgICBSZXR1cm4gdHJ1ZSBpZiBwYXNzaW5nIG5leHRQcm9wcy5iaWJsZXMgdG9cbiAgICByZW5kZXIgd291bGQgcmV0dXJuIHRoZSBzYW1lIHJlc3VsdCBhcyBwYXNzaW5nXG4gICAgcHJldlByb3BzLmJpYmxlcyB0byByZW5kZXIsIG90aGVyd2lzZSByZXR1cm4gZmFsc2VcbiAgKi9cbiAgcmV0dXJuIGRlZXBFcXVhbChwcmV2UHJvcHMuYmlibGVzLCBuZXh0UHJvcHMuYmlibGVzKSAmJlxuICAgIGRlZXBFcXVhbChwcmV2UHJvcHMuY3VycmVudFBhbmVTZXR0aW5ncywgbmV4dFByb3BzLmN1cnJlbnRQYW5lU2V0dGluZ3MpICYmXG4gICAgKHByZXZQcm9wcy5lZGl0VmVyc2VSZWYgPT09IG5leHRQcm9wcy5lZGl0VmVyc2VSZWYpO1xufVxuXG4vLyB1c2luZyBSZWFjdC5tZW1vIHRvIGJvb3N0IHBlcmZvcm1hbmNlIGJ5IG1lbW9pemluZyB0aGUgcmVzdWx0XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5tZW1vKHdpdGhTdHlsZXMoc3R5bGVzKShFeHBhbmRlZFNjcmlwdHVyZVBhbmVNb2RhbCksIGFyZUVxdWFsKTtcbiJdfQ==