tc-ui-toolkit
Version:
React components used to develop tools for the desktop app translationCore
306 lines (258 loc) • 31.9 kB
JavaScript
"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==