@pie-element/extended-text-entry 6.7.0-annotations → 6.7.0-annotations.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+
10
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
+
12
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
+
14
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
+
16
+ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
17
+
18
+ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
19
+
20
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
21
+
22
+ var _react = _interopRequireDefault(require("react"));
23
+
24
+ var _classnames = _interopRequireDefault(require("classnames"));
25
+
26
+ var _propTypes = _interopRequireDefault(require("prop-types"));
27
+
28
+ var _styles = require("@material-ui/core/styles");
29
+
30
+ var _core = require("@material-ui/core");
31
+
32
+ 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); }; }
33
+
34
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
35
+
36
+ var styles = {
37
+ mainWrapper: {
38
+ width: '300px',
39
+ overflow: 'hidden',
40
+ borderRadius: '4px',
41
+ backgroundColor: '#ffffff',
42
+ border: '2px solid #d3d3d3'
43
+ },
44
+ annotationsWrapper: {
45
+ display: 'flex',
46
+ flexWrap: 'wrap'
47
+ },
48
+ controlsWrapper: {
49
+ display: 'flex',
50
+ flexWrap: 'wrap',
51
+ borderTop: '2px solid #d3d3d3'
52
+ },
53
+ button: {
54
+ width: '22%',
55
+ textAlign: 'center',
56
+ padding: '4px',
57
+ cursor: 'pointer',
58
+ borderBottom: '1px solid #d3d3d3',
59
+ '&:not(:nth-child(4n))': {
60
+ borderRight: '1px solid #d3d3d3'
61
+ },
62
+ '&:nth-child(4n)': {
63
+ flexGrow: 1
64
+ },
65
+ '&:hover': {
66
+ backgroundColor: '#d3d3d3'
67
+ }
68
+ },
69
+ positive: {
70
+ backgroundColor: 'rgb(153, 255, 153) !important',
71
+ '&:hover': {
72
+ filter: 'brightness(85%)'
73
+ }
74
+ },
75
+ negative: {
76
+ backgroundColor: 'rgb(255, 204, 238) !important',
77
+ '&:hover': {
78
+ filter: 'brightness(85%)'
79
+ }
80
+ },
81
+ holder: {
82
+ display: 'flex',
83
+ flexWrap: 'wrap',
84
+ borderTop: '2px solid #d3d3d3'
85
+ },
86
+ arrow: {
87
+ overflowX: 'unset',
88
+ overflowY: 'unset',
89
+ marginTop: '-16px',
90
+ '&::after': {
91
+ position: 'absolute',
92
+ left: 'calc(50% - 7px)',
93
+ // bottom: 0,
94
+ border: 'solid transparent',
95
+ content: '""',
96
+ height: 0,
97
+ width: 0,
98
+ pointerEvents: 'none',
99
+ borderWidth: '7px',
100
+ borderTopColor: 'black'
101
+ }
102
+ }
103
+ };
104
+
105
+ var AnnotationMenu = /*#__PURE__*/function (_React$Component) {
106
+ (0, _inherits2["default"])(AnnotationMenu, _React$Component);
107
+
108
+ var _super = _createSuper(AnnotationMenu);
109
+
110
+ function AnnotationMenu() {
111
+ (0, _classCallCheck2["default"])(this, AnnotationMenu);
112
+ return _super.apply(this, arguments);
113
+ }
114
+
115
+ (0, _createClass2["default"])(AnnotationMenu, [{
116
+ key: "render",
117
+ value: function render() {
118
+ var _this$props = this.props,
119
+ anchorEl = _this$props.anchorEl,
120
+ annotations = _this$props.annotations,
121
+ classes = _this$props.classes,
122
+ isNewAnnotation = _this$props.isNewAnnotation,
123
+ onAnnotate = _this$props.onAnnotate,
124
+ onClose = _this$props.onClose,
125
+ onEdit = _this$props.onEdit,
126
+ onDelete = _this$props.onDelete,
127
+ onWrite = _this$props.onWrite,
128
+ open = _this$props.open;
129
+ return /*#__PURE__*/_react["default"].createElement(_core.Popover, {
130
+ anchorEl: anchorEl,
131
+ open: open,
132
+ onClose: onClose,
133
+ classes: {
134
+ paper: classes.arrow
135
+ },
136
+ elevation: 5,
137
+ anchorOrigin: {
138
+ vertical: 'top',
139
+ horizontal: 'center'
140
+ },
141
+ transformOrigin: {
142
+ vertical: 'bottom',
143
+ horizontal: 'center'
144
+ }
145
+ }, /*#__PURE__*/_react["default"].createElement("div", {
146
+ className: classes.mainWrapper
147
+ }, /*#__PURE__*/_react["default"].createElement("div", {
148
+ className: classes.annotationsWrapper
149
+ }, annotations.map(function (annotation, index) {
150
+ return /*#__PURE__*/_react["default"].createElement("div", {
151
+ key: "annotation-".concat(index),
152
+ className: (0, _classnames["default"])(classes.button, annotation.type === 'positive' ? classes.positive : classes.negative),
153
+ onClick: function onClick() {
154
+ return onAnnotate(annotation);
155
+ }
156
+ }, annotation.label);
157
+ })), /*#__PURE__*/_react["default"].createElement("div", {
158
+ className: classes.controlsWrapper
159
+ }, /*#__PURE__*/_react["default"].createElement("div", {
160
+ className: classes.button,
161
+ onClick: onClose
162
+ }, "Cancel"), /*#__PURE__*/_react["default"].createElement("div", {
163
+ style: {
164
+ pointerEvents: 'none'
165
+ },
166
+ className: classes.button
167
+ }), isNewAnnotation ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
168
+ className: (0, _classnames["default"])(classes.button, classes.positive),
169
+ onClick: function onClick() {
170
+ return onWrite('positive');
171
+ }
172
+ }, "Write"), /*#__PURE__*/_react["default"].createElement("div", {
173
+ className: (0, _classnames["default"])(classes.button, classes.negative),
174
+ onClick: function onClick() {
175
+ return onWrite('negative');
176
+ }
177
+ }, "Write")) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
178
+ className: classes.button,
179
+ onClick: onDelete
180
+ }, "Delete"), /*#__PURE__*/_react["default"].createElement("div", {
181
+ className: classes.button,
182
+ onClick: onEdit
183
+ }, "Edit")))));
184
+ }
185
+ }]);
186
+ return AnnotationMenu;
187
+ }(_react["default"].Component);
188
+
189
+ (0, _defineProperty2["default"])(AnnotationMenu, "propTypes", {
190
+ anchorEl: _propTypes["default"].object,
191
+ open: _propTypes["default"].bool,
192
+ annotations: _propTypes["default"].array,
193
+ isNewAnnotation: _propTypes["default"].bool,
194
+ onClose: _propTypes["default"].func,
195
+ onDelete: _propTypes["default"].func,
196
+ onEdit: _propTypes["default"].func,
197
+ onWrite: _propTypes["default"].func,
198
+ onAnnotate: _propTypes["default"].func
199
+ });
200
+ ;
201
+
202
+ var _default = (0, _styles.withStyles)(styles)(AnnotationMenu);
203
+
204
+ exports["default"] = _default;
205
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbm5vdGF0aW9uL2Fubm90YXRpb24tbWVudS5qc3giXSwibmFtZXMiOlsic3R5bGVzIiwibWFpbldyYXBwZXIiLCJ3aWR0aCIsIm92ZXJmbG93IiwiYm9yZGVyUmFkaXVzIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyIiwiYW5ub3RhdGlvbnNXcmFwcGVyIiwiZGlzcGxheSIsImZsZXhXcmFwIiwiY29udHJvbHNXcmFwcGVyIiwiYm9yZGVyVG9wIiwiYnV0dG9uIiwidGV4dEFsaWduIiwicGFkZGluZyIsImN1cnNvciIsImJvcmRlckJvdHRvbSIsImJvcmRlclJpZ2h0IiwiZmxleEdyb3ciLCJwb3NpdGl2ZSIsImZpbHRlciIsIm5lZ2F0aXZlIiwiaG9sZGVyIiwiYXJyb3ciLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJtYXJnaW5Ub3AiLCJwb3NpdGlvbiIsImxlZnQiLCJjb250ZW50IiwiaGVpZ2h0IiwicG9pbnRlckV2ZW50cyIsImJvcmRlcldpZHRoIiwiYm9yZGVyVG9wQ29sb3IiLCJBbm5vdGF0aW9uTWVudSIsInByb3BzIiwiYW5jaG9yRWwiLCJhbm5vdGF0aW9ucyIsImNsYXNzZXMiLCJpc05ld0Fubm90YXRpb24iLCJvbkFubm90YXRlIiwib25DbG9zZSIsIm9uRWRpdCIsIm9uRGVsZXRlIiwib25Xcml0ZSIsIm9wZW4iLCJwYXBlciIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsIm1hcCIsImFubm90YXRpb24iLCJpbmRleCIsInR5cGUiLCJsYWJlbCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwib2JqZWN0IiwiYm9vbCIsImFycmF5IiwiZnVuYyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBLElBQU1BLE1BQU0sR0FBRztBQUNiQyxFQUFBQSxXQUFXLEVBQUU7QUFDWEMsSUFBQUEsS0FBSyxFQUFFLE9BREk7QUFFWEMs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QW5CLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgd2l0aFN0eWxlcyB9IGZyb20gJ0BtYXRlcmlhbC11aS9jb3JlL3N0eWxlcyc7XG5pbXBvcnQgeyBQb3BvdmVyIH0gZnJvbSAnQG1hdGVyaWFsLXVpL2NvcmUnO1xuXG5jb25zdCBzdHlsZXMgPSB7XG4gIG1haW5XcmFwcGVyOiB7XG4gICAgd2lkdGg6ICczMDBweCcsXG4gICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgYm9yZGVyOiAnMnB4IHNvbGlkICNkM2QzZDMnXG4gIH0sXG4gIGFubm90YXRpb25zV3JhcHBlcjoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4V3JhcDogJ3dyYXAnLFxuICB9LFxuICBjb250cm9sc1dyYXBwZXI6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICBib3JkZXJUb3A6ICcycHggc29saWQgI2QzZDNkMydcbiAgfSxcbiAgYnV0dG9uOiB7XG4gICAgd2lkdGg6ICcyMiUnLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgcGFkZGluZzogJzRweCcsXG4gICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgYm9yZGVyQm90dG9tOiAnMXB4IHNvbGlkICNkM2QzZDMnLFxuICAgICcmOm5vdCg6bnRoLWNoaWxkKDRuKSknOiB7XG4gICAgICBib3JkZXJSaWdodDogJzFweCBzb2xpZCAjZDNkM2QzJyxcbiAgICB9LFxuICAgICcmOm50aC1jaGlsZCg0biknOiB7XG4gICAgICBmbGV4R3JvdzogMVxuICAgIH0sXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZDNkM2QzJ1xuICAgIH0sXG4gIH0sXG4gIHBvc2l0aXZlOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAncmdiKDE1MywgMjU1LCAxNTMpICFpbXBvcnRhbnQnLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgZmlsdGVyOiAnYnJpZ2h0bmVzcyg4NSUpJ1xuICAgIH1cbiAgfSxcbiAgbmVnYXRpdmU6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2IoMjU1LCAyMDQsIDIzOCkgIWltcG9ydGFudCcsXG4gICAgJyY6aG92ZXInOiB7XG4gICAgICBmaWx0ZXI6ICdicmlnaHRuZXNzKDg1JSknXG4gICAgfVxuICB9LFxuICBob2xkZXI6IHtcbiAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICBib3JkZXJUb3A6ICcycHggc29saWQgI2QzZDNkMydcbiAgfSxcbiAgYXJyb3c6IHtcbiAgICBvdmVyZmxvd1g6ICd1bnNldCcsXG4gICAgb3ZlcmZsb3dZOiAndW5zZXQnLFxuICAgIG1hcmdpblRvcDogJy0xNnB4JyxcbiAgICAnJjo6YWZ0ZXInOiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGxlZnQ6ICdjYWxjKDUwJSAtIDdweCknLFxuICAgICAgLy8gYm90dG9tOiAwLFxuICAgICAgYm9yZGVyOiAnc29saWQgdHJhbnNwYXJlbnQnLFxuICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgaGVpZ2h0OiAwLFxuICAgICAgd2lkdGg6IDAsXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgICBib3JkZXJXaWR0aDogJzdweCcsXG4gICAgICBib3JkZXJUb3BDb2xvcjogJ2JsYWNrJ1xuICAgIH1cbiAgfVxufTtcblxuY2xhc3MgQW5ub3RhdGlvbk1lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFuY2hvckVsOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIG9wZW46IFByb3BUeXBlcy5ib29sLFxuICAgIGFubm90YXRpb25zOiBQcm9wVHlwZXMuYXJyYXksXG4gICAgaXNOZXdBbm5vdGF0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkRlbGV0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25FZGl0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbldyaXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkFubm90YXRlOiBQcm9wVHlwZXMuZnVuYyxcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgYW5jaG9yRWwsXG4gICAgICBhbm5vdGF0aW9ucyxcbiAgICAgIGNsYXNzZXMsXG4gICAgICBpc05ld0Fubm90YXRpb24sXG4gICAgICBvbkFubm90YXRlLFxuICAgICAgb25DbG9zZSxcbiAgICAgIG9uRWRpdCxcbiAgICAgIG9uRGVsZXRlLFxuICAgICAgb25Xcml0ZSxcbiAgICAgIG9wZW5cbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIHJldHVybiAoXG4gICAgICA8UG9wb3ZlclxuICAgICAgICBhbmNob3JFbD17YW5jaG9yRWx9XG4gICAgICAgIG9wZW49e29wZW59XG4gICAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICAgIGNsYXNzZXM9e3twYXBlcjogY2xhc3Nlcy5hcnJvd319XG4gICAgICAgIGVsZXZhdGlvbj17NX1cbiAgICAgICAgYW5jaG9yT3JpZ2luPXt7XG4gICAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICAgIGhvcml6b250YWw6ICdjZW50ZXInLFxuICAgICAgICB9fVxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3tcbiAgICAgICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXG4gICAgICAgICAgaG9yaXpvbnRhbDogJ2NlbnRlcicsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLm1haW5XcmFwcGVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5hbm5vdGF0aW9uc1dyYXBwZXJ9PlxuICAgICAgICAgICAge2Fubm90YXRpb25zLm1hcCgoYW5ub3RhdGlvbiwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGtleT17YGFubm90YXRpb24tJHtpbmRleH1gfVxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhcbiAgICAgICAgICAgICAgICAgIGNsYXNzZXMuYnV0dG9uLFxuICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbi50eXBlID09PSAncG9zaXRpdmUnID8gY2xhc3Nlcy5wb3NpdGl2ZSA6IGNsYXNzZXMubmVnYXRpdmVcbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQW5ub3RhdGUoYW5ub3RhdGlvbil9XG4gICAgICAgICAgICAgID57YW5ub3RhdGlvbi5sYWJlbH08L2Rpdj5cbiAgICAgICAgICAgICkpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2VzLmNvbnRyb2xzV3JhcHBlcn0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5idXR0b259IG9uQ2xpY2s9e29uQ2xvc2V9PlxuICAgICAgICAgICAgICBDYW5jZWxcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBzdHlsZT17e3BvaW50ZXJFdmVudHM6ICdub25lJ319IGNsYXNzTmFtZT17Y2xhc3Nlcy5idXR0b259Lz5cbiAgICAgICAgICAgIHtpc05ld0Fubm90YXRpb24gPyAoXG4gICAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoY2xhc3Nlcy5idXR0b24sIGNsYXNzZXMucG9zaXRpdmUpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25Xcml0ZSgncG9zaXRpdmUnKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBXcml0ZVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhjbGFzc2VzLmJ1dHRvbiwgY2xhc3Nlcy5uZWdhdGl2ZSl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbldyaXRlKCduZWdhdGl2ZScpfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIFdyaXRlXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzZXMuYnV0dG9ufSBvbkNsaWNrPXtvbkRlbGV0ZX0+XG4gICAgICAgICAgICAgICAgICBEZWxldGVcbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3Nlcy5idXR0b259IG9uQ2xpY2s9e29uRWRpdH0+XG4gICAgICAgICAgICAgICAgICBFZGl0XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICApO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU3R5bGVzKHN0eWxlcykoQW5ub3RhdGlvbk1lbnUpO1xuIl19
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.getLabelElement = exports.getAnnotationElements = exports.isSideLabel = exports.clearSelection = exports.removeElemsWrapping = exports.getRangeDetails = exports.wrapRange = exports.getDOMNodes = void 0;
9
+
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+
14
+ // returns DOM Nodes before the stopOffset
15
+ var getAllTextNodesBeforePosition = function getAllTextNodesBeforePosition(node, stopOffset, nodeArray) {
16
+ var nodes = nodeArray ? nodeArray : [];
17
+ var offset = nodes.reduce(function (acc, node) {
18
+ return acc + node.textContent.length;
19
+ }, 0);
20
+ var keepWalking = true;
21
+
22
+ if (offset > stopOffset) {
23
+ return false;
24
+ }
25
+
26
+ if (node) {
27
+ // 3 = HTML DOM node value for text nodes
28
+ if (node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {
29
+ nodes.push(node);
30
+ }
31
+
32
+ node = node.firstChild;
33
+ }
34
+
35
+ while (node && keepWalking) {
36
+ keepWalking = getAllTextNodesBeforePosition(node, stopOffset, nodes);
37
+ node = node.nextSibling;
38
+ }
39
+
40
+ return nodes;
41
+ }; // returns DOM Nodes that overlap the start or end position
42
+
43
+
44
+ var getDOMNodes = function getDOMNodes(startOffset, endOffset, rootNode) {
45
+ var textNodesToEnd = getAllTextNodesBeforePosition(rootNode, endOffset);
46
+ var domNodes = [];
47
+ var start = 0;
48
+ textNodesToEnd.forEach(function (node) {
49
+ var end = start + node.textContent.length;
50
+ [startOffset, endOffset].forEach(function (offset) {
51
+ if (start <= offset && offset < end) {
52
+ domNodes.push({
53
+ node: node,
54
+ offset: offset - start
55
+ });
56
+ }
57
+ });
58
+ start = end;
59
+ });
60
+ return domNodes;
61
+ }; // returns [ textNodes, text ]
62
+ // textNodes = DOM Text Nodes between start range and end range node
63
+ // text = plain text in range
64
+
65
+
66
+ exports.getDOMNodes = getDOMNodes;
67
+
68
+ var getTextNodesBetween = function getTextNodesBetween(range) {
69
+ var rootNode = range.commonAncestorContainer,
70
+ startNode = range.startContainer,
71
+ endNode = range.endContainer,
72
+ startOffset = range.startOffset,
73
+ endOffset = range.endOffset;
74
+ var textNodes = [];
75
+ var pastStartNode = false;
76
+ var reachedEndNode = false;
77
+ var text = '';
78
+
79
+ var getTextNodes = function getTextNodes(node) {
80
+ var value = node.nodeValue,
81
+ childNodes = node.childNodes;
82
+
83
+ if (node === startNode && node === endNode) {
84
+ if (value) {
85
+ text += value.substring(startOffset, endOffset);
86
+ }
87
+
88
+ pastStartNode = reachedEndNode = true;
89
+ } else if (node === startNode) {
90
+ if (value) {
91
+ text += value.substring(startOffset);
92
+ }
93
+
94
+ pastStartNode = true;
95
+ } else if (node === endNode) {
96
+ if (value) {
97
+ text += value.substring(0, endOffset);
98
+ }
99
+
100
+ reachedEndNode = true;
101
+ } else if (node && node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {
102
+ // 3 = HTML DOM node value for text nodes
103
+ if (value && pastStartNode && !reachedEndNode) {
104
+ text += value;
105
+ textNodes.push(node);
106
+ }
107
+ }
108
+
109
+ childNodes.forEach(function (childNode) {
110
+ if (!reachedEndNode) {
111
+ getTextNodes(childNode);
112
+ } else {
113
+ return;
114
+ }
115
+ });
116
+ };
117
+
118
+ getTextNodes(rootNode);
119
+ return [textNodes, text];
120
+ };
121
+
122
+ var surroundContent = function surroundContent(range) {
123
+ var wrapper = document.createElement('SPAN');
124
+ range.surroundContents(wrapper);
125
+ return wrapper;
126
+ }; // wrap each DOM Text Node in range into a span
127
+
128
+
129
+ var wrapRange = function wrapRange(range) {
130
+ if (range.startContainer === range.endContainer) {
131
+ return [surroundContent(range)];
132
+ }
133
+
134
+ var _getTextNodesBetween = getTextNodesBetween(range),
135
+ _getTextNodesBetween2 = (0, _slicedToArray2["default"])(_getTextNodesBetween, 1),
136
+ nodesBetween = _getTextNodesBetween2[0]; // wrap the start node
137
+
138
+
139
+ var startRange = document.createRange();
140
+ startRange.selectNodeContents(range.startContainer);
141
+ startRange.setStart(range.startContainer, range.startOffset);
142
+ var startWrapper = surroundContent(startRange); // wrap the end node
143
+
144
+ var endRange = document.createRange();
145
+ endRange.selectNode(range.endContainer);
146
+ endRange.setEnd(range.endContainer, range.endOffset);
147
+ var endWrapper = surroundContent(endRange); // wrap the nodes between start and end nodes, if any
148
+
149
+ var centerWrappers = nodesBetween.map(function (node) {
150
+ var wrapper = document.createElement('SPAN');
151
+ node.parentNode.insertBefore(wrapper, node);
152
+ wrapper.appendChild(node);
153
+ return wrapper;
154
+ });
155
+ return [startWrapper].concat((0, _toConsumableArray2["default"])(centerWrappers), [endWrapper]);
156
+ }; // returns text in range with start and end position in rootNode
157
+
158
+
159
+ exports.wrapRange = wrapRange;
160
+
161
+ var getRangeDetails = function getRangeDetails(range, rootNode) {
162
+ var rangeBefore = document.createRange();
163
+ rangeBefore.setStart(rootNode, 0);
164
+ rangeBefore.setEnd(range.startContainer, range.startOffset);
165
+
166
+ var _getTextNodesBetween3 = getTextNodesBetween(rangeBefore),
167
+ _getTextNodesBetween4 = (0, _slicedToArray2["default"])(_getTextNodesBetween3, 2),
168
+ text = _getTextNodesBetween4[1];
169
+
170
+ var _getTextNodesBetween5 = getTextNodesBetween(range),
171
+ _getTextNodesBetween6 = (0, _slicedToArray2["default"])(_getTextNodesBetween5, 2),
172
+ textSelected = _getTextNodesBetween6[1];
173
+
174
+ var start = text.length;
175
+ var end = start + textSelected.length;
176
+ return {
177
+ quote: textSelected,
178
+ start: start,
179
+ end: end
180
+ };
181
+ }; // removes the annotation spans without changing the content inside
182
+
183
+
184
+ exports.getRangeDetails = getRangeDetails;
185
+
186
+ var removeElemsWrapping = function removeElemsWrapping(elems, container) {
187
+ (elems || []).forEach(function (elem) {
188
+ var parent = elem.parentNode;
189
+ var childNodes = elem.childNodes;
190
+ var childNodesLength = childNodes.length;
191
+
192
+ if (childNodesLength > 0) {
193
+ for (var i = 0; i < childNodesLength; i++) {
194
+ parent.insertBefore(childNodes[0], elem);
195
+ }
196
+ } else {
197
+ parent.insertBefore(document.createTextNode(elem.textContent), elem);
198
+ }
199
+
200
+ parent.removeChild(elem);
201
+ });
202
+ container.normalize();
203
+ }; // also used in select-text
204
+
205
+
206
+ exports.removeElemsWrapping = removeElemsWrapping;
207
+
208
+ var clearSelection = function clearSelection() {
209
+ if (document.getSelection) {
210
+ // for all new browsers (IE9+, Chrome, Firefox)
211
+ document.getSelection().removeAllRanges();
212
+ document.getSelection().addRange(document.createRange());
213
+ } else if (window.getSelection) {
214
+ // equals with the document.getSelection (MSDN info)
215
+ if (window.getSelection().removeAllRanges) {
216
+ // for all new browsers (IE9+, Chrome, Firefox)
217
+ window.getSelection().removeAllRanges();
218
+ window.getSelection().addRange(document.createRange());
219
+ } else if (window.getSelection().empty) {
220
+ // Chrome supports this as well
221
+ window.getSelection().empty();
222
+ }
223
+ } else if (document.selection) {
224
+ // IE8-
225
+ document.selection.empty();
226
+ }
227
+ }; // check if annotation label contains line breaks or its length >= 20 characters
228
+
229
+
230
+ exports.clearSelection = clearSelection;
231
+
232
+ var isSideLabel = function isSideLabel(text) {
233
+ return text.length >= 20 || text.search(/\n|\r|\r\n/) !== -1;
234
+ };
235
+
236
+ exports.isSideLabel = isSideLabel;
237
+
238
+ var getAnnotationElements = function getAnnotationElements(id) {
239
+ return Array.from(document.querySelectorAll("[data-id='".concat(id, "']")));
240
+ };
241
+
242
+ exports.getAnnotationElements = getAnnotationElements;
243
+
244
+ var getLabelElement = function getLabelElement(id) {
245
+ return document.querySelector("[data-ann-id='".concat(id, "']"));
246
+ };
247
+
248
+ exports.getLabelElement = getLabelElement;
249
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbm5vdGF0aW9uL2Fubm90YXRpb24tdXRpbHMuanMiXSwibmFtZXMiOlsiZ2V0QWxsVGV4dE5vZGVzQmVmb3JlUG9zaXRpb24iLCJub2RlIiwic3RvcE9mZnNldCIsIm5vZGVBcnJheSIsIm5vZGVzIiwib2Zmc2V0IiwicmVkdWNlIiwiYWNjIiwidGV4dENvbnRlbnQiLCJsZW5ndGgiLCJrZWVwV2Fsa2luZyIsIm5vZGVUeXBlIiwicGFyZW50Tm9kZSIsImhhc0F0dHJpYnV0ZSIsInB1c2giLCJmaXJzdENoaWxkIiwibmV4dFNpYmxpbmciLCJnZXRET01Ob2RlcyIsInN0YXJ0T2Zmc2V0IiwiZW5kT2Zmc2V0Iiwicm9vdE5vZGUiLCJ0ZXh0Tm9kZXNUb0VuZCIsImRvbU5vZGVzIiwic3RhcnQiLCJmb3JFYWNoIiwiZW5kIiwiZ2V0VGV4dE5vZGVzQmV0d2VlbiIsInJhbmdlIiwiY29tbW9uQW5jZXN0b3JDb250YWluZXIiLCJzdGFydE5vZGUiLCJzdGFydENvbnRhaW5lciIsImVuZE5vZGUiLCJlbmRDb250YWluZXIiLCJ0ZXh0Tm9kZXMiLCJwYXN0U3RhcnROb2RlIiwicmVhY2hlZEVuZE5vZGUiLCJ0ZXh0IiwiZ2V0VGV4dE5vZGVzIiwidmFsdWUiLCJub2RlVmFsdWUiLCJjaGlsZE5vZGVzIiwic3Vic3RyaW5nIiwiY2hpbGROb2RlIiwic3Vycm91bmRDb250ZW50Iiwid3JhcHBlciIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInN1cnJvdW5kQ29udGVudHMiLCJ3cmFwUmFuZ2UiLCJub2Rlc0JldHdlZW4iLCJzdGFydFJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJzZWxlY3ROb2RlQ29udGVudHMiLCJzZXRTdGFydCIsInN0YXJ0V3JhcHBlciIsImVuZFJhbmdlIiwic2VsZWN0Tm9kZSIsInNldEVuZCIsImVuZFdyYXBwZXIiLCJjZW50ZXJXcmFwcGVycyIsIm1hcCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwiZ2V0UmFuZ2VEZXRhaWxzIiwicmFuZ2VCZWZvcmUiLCJ0ZXh0U2VsZWN0ZWQiLCJxdW90ZSIsInJlbW92ZUVsZW1zV3JhcHBpbmciLCJlbGVtcyIsImNvbnRhaW5lciIsImVsZW0iLCJwYXJlbnQiLCJjaGlsZE5vZGVzTGVuZ3RoIiwiaSIsImNyZWF0ZVRleHROb2RlIiwicmVtb3ZlQ2hpbGQiLCJub3JtYWxpemUiLCJjbGVhclNlbGVjdGlvbiIsImdldFNlbGVjdGlvbiIsInJlbW92ZUFsbFJhbmdlcyIsImFkZFJhbmdlIiwid2luZG93IiwiZW1wdHkiLCJzZWxlY3Rpb24iLCJpc1NpZGVMYWJlbCIsInNlYXJjaCIsImdldEFubm90YXRpb25FbGVtZW50cyIsImlkIiwiQXJyYXkiLCJmcm9tIiwicXVlcnlTZWxlY3RvckFsbCIsImdldExhYmVsRWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLElBQU1BLDZCQUE2QixHQUFHLFNBQWhDQSw2QkFBZ0MsQ0FBQ0MsSUFBRCxFQUFPQyxVQUFQLEVBQW1CQyxTQUFuQixFQUFpQztBQUNyRSxNQUFNQyxLQUFLLEdBQUlELFNBQUQsR0FBY0EsU0FBZCxHQUEwQixFQUF4QztBQUNBLE1BQU1FLE1BQU0sR0FBR0QsS0FBSyxDQUFDRSxNQUFOLENBQWEsVUFBQ0MsR0FBRCxFQUFNTixJQUFOO0FBQUEsV0FBZU0sR0FBRyxHQUFHTixJQUFJLENBQUNPLFdBQUwsQ0FBaUJDLE1BQXRDO0FBQUEsR0FBYixFQUEyRCxDQUEzRCxDQUFmO0FBQ0EsTUFBSUMsV0FBVyxHQUFHLElBQWxCOztBQUVBLE1BQUlMLE1BQU0sR0FBR0gsVUFBYixFQUF5QjtBQUN2QixXQUFPLEtBQVA7QUFDRDs7QUFFRCxNQUFJRCxJQUFKLEVBQVU7QUFDUjtBQUNBLFFBQUlBLElBQUksQ0FBQ1UsUUFBTCxLQUFrQixDQUFsQixJQUF1QlYsSUFBSSxDQUFDVyxVQUE1QixJQUEwQyxDQUFDWCxJQUFJLENBQUNXLFVBQUwsQ0FBZ0JDLFlBQWhCLENB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TUFJTyxJQUFJOEIsTUFBTSxDQUFDSCxZQUFQLEdBQXNCSSxLQUExQixFQUFpQztBQUN0QztBQUNBRCxNQUFBQSxNQUFNLENBQUNILFlBQVAsR0FBc0JJLEtBQXRCO0FBQ0Q7QUFDRixHQVZNLE1BVUEsSUFBSXJDLFFBQVEsQ0FBQ3NDLFNBQWIsRUFBd0I7QUFDN0I7QUFDQXRDLElBQUFBLFFBQVEsQ0FBQ3NDLFNBQVQsQ0FBbUJELEtBQW5CO0FBQ0Q7QUFDRixDQW5CTSxDLENBcUJQOzs7OztBQUNPLElBQU1FLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUFoRCxJQUFJO0FBQUEsU0FBSUEsSUFBSSxDQUFDM0IsTUFBTCxJQUFlLEVBQWYsSUFBcUIyQixJQUFJLENBQUNpRCxNQUFMLENBQVksWUFBWixNQUE4QixDQUFDLENBQXhEO0FBQUEsQ0FBeEI7Ozs7QUFFQSxJQUFNQyxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXdCLENBQUFDLEVBQUU7QUFBQSxTQUFJQyxLQUFLLENBQUNDLElBQU4sQ0FBVzVDLFFBQVEsQ0FBQzZDLGdCQUFULHFCQUF1Q0gsRUFBdkMsUUFBWCxDQUFKO0FBQUEsQ0FBaEM7Ozs7QUFFQSxJQUFNSSxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLENBQUFKLEVBQUU7QUFBQSxTQUFJMUMsUUFBUSxDQUFDK0MsYUFBVCx5QkFBd0NMLEVBQXhDLFFBQUo7QUFBQSxDQUExQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIHJldHVybnMgRE9NIE5vZGVzIGJlZm9yZSB0aGUgc3RvcE9mZnNldFxuY29uc3QgZ2V0QWxsVGV4dE5vZGVzQmVmb3JlUG9zaXRpb24gPSAobm9kZSwgc3RvcE9mZnNldCwgbm9kZUFycmF5KSA9PiB7XG4gIGNvbnN0IG5vZGVzID0gKG5vZGVBcnJheSkgPyBub2RlQXJyYXkgOiBbXTtcbiAgY29uc3Qgb2Zmc2V0ID0gbm9kZXMucmVkdWNlKChhY2MsIG5vZGUpID0+IGFjYyArIG5vZGUudGV4dENvbnRlbnQubGVuZ3RoLCAwKTtcbiAgbGV0IGtlZXBXYWxraW5nID0gdHJ1ZTtcblxuICBpZiAob2Zmc2V0ID4gc3RvcE9mZnNldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChub2RlKSB7XG4gICAgLy8gMyA9IEhUTUwgRE9NIG5vZGUgdmFsdWUgZm9yIHRleHQgbm9kZXNcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMyAmJiBub2RlLnBhcmVudE5vZGUgJiYgIW5vZGUucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtYW5uLWlkJykpIHtcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuXG4gIHdoaWxlKG5vZGUgJiYga2VlcFdhbGtpbmcpIHtcbiAgICBrZWVwV2Fsa2luZyA9IGdldEFsbFRleHROb2Rlc0JlZm9yZVBvc2l0aW9uKG5vZGUsIHN0b3BPZmZzZXQsIG5vZGVzKTtcbiAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgfVxuXG4gIHJldHVybiBub2Rlcztcbn07XG5cbi8vIHJldHVybnMgRE9NIE5vZGVzIHRoYXQgb3ZlcmxhcCB0aGUgc3RhcnQgb3IgZW5kIHBvc2l0aW9uXG5leHBvcnQgY29uc3QgZ2V0RE9NTm9kZXMgPSAoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgcm9vdE5vZGUpID0+IHtcbiAgY29uc3QgdGV4dE5vZGVzVG9FbmQgPSBnZXRBbGxUZXh0Tm9kZXNCZWZvcmVQb3NpdGlvbihyb290Tm9kZSwgZW5kT2Zmc2V0KTtcbiAgY29uc3QgZG9tTm9kZXMgPSBbXTtcbiAgbGV0IHN0YXJ0ID0gMDtcblxuICB0ZXh0Tm9kZXNUb0VuZC5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcblxuICAgIFtzdGFydE9mZnNldCwgZW5kT2Zmc2V0XS5mb3JFYWNoKChvZmZzZXQpID0+IHtcbiAgICAgIGlmIChzdGFydCA8PSBvZmZzZXQgJiYgb2Zmc2V0IDwgZW5kKSB7XG4gICAgICAgIGRvbU5vZGVzLnB1c2goe1xuICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQgLSBzdGFydFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0YXJ0ID0gZW5kO1xuICB9KTtcblxuICByZXR1cm4gZG9tTm9kZXM7XG59O1xuXG4vLyByZXR1cm5zIFsgdGV4dE5vZGVzLCB0ZXh0IF1cbi8vIHRleHROb2RlcyA9IERPTSBUZXh0IE5vZGVzIGJldHdlZW4gc3RhcnQgcmFuZ2UgYW5kIGVuZCByYW5nZSBub2RlXG4vLyB0ZXh0ID0gcGxhaW4gdGV4dCBpbiByYW5nZVxuY29uc3QgZ2V0VGV4dE5vZGVzQmV0d2VlbiA9IChyYW5nZSkgPT4ge1xuICBjb25zdCB7XG4gICAgY29tbW9uQW5jZXN0b3JDb250YWluZXI6IHJvb3ROb2RlLFxuICAgIHN0YXJ0Q29udGFpbmVyOiBzdGFydE5vZGUsXG4gICAgZW5kQ29udGFpbmVyOiBlbmROb2RlLFxuICAgIHN0YXJ0T2Zmc2V0LFxuICAgIGVuZE9mZnNldFxuICB9ID0gcmFuZ2U7XG4gIGNvbnN0IHRleHROb2RlcyA9IFtdO1xuICBsZXQgcGFzdFN0YXJ0Tm9kZSA9IGZhbHNlO1xuICBsZXQgcmVhY2hlZEVuZE5vZGUgPSBmYWxzZTtcbiAgbGV0IHRleHQgPSAnJztcblxuICBjb25zdCBnZXRUZXh0Tm9kZXMgPSAobm9kZSkgPT4ge1xuICAgIGNvbnN0IHsgbm9kZVZhbHVlOiB2YWx1ZSwgY2hpbGROb2RlcyB9ID0gbm9kZTtcblxuICAgIGlmKG5vZGUgPT09IHN0YXJ0Tm9kZSAmJiBub2RlID09PSBlbmROb2RlKSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdGV4dCArPSB2YWx1ZS5zdWJzdHJpbmcoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7XG4gICAgICB9XG5cbiAgICAgIHBhc3RTdGFydE5vZGUgPSByZWFjaGVkRW5kTm9kZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmKG5vZGUgPT09IHN0YXJ0Tm9kZSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRleHQgKz0gdmFsdWUuc3Vic3RyaW5nKHN0YXJ0T2Zmc2V0KTtcbiAgICAgIH1cblxuICAgICAgcGFzdFN0YXJ0Tm9kZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmKG5vZGUgPT09IGVuZE5vZGUpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0ZXh0ICs9IHZhbHVlLnN1YnN0cmluZygwLCBlbmRPZmZzZXQpO1xuICAgICAgfVxuXG4gICAgICByZWFjaGVkRW5kTm9kZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmKG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMyAmJiBub2RlLnBhcmVudE5vZGUgJiYgIW5vZGUucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtYW5uLWlkJykpIHtcbiAgICAgIC8vIDMgPSBIVE1MIERPTSBub2RlIHZhbHVlIGZvciB0ZXh0IG5vZGVzXG4gICAgICBpZiAodmFsdWUgJiYgcGFzdFN0YXJ0Tm9kZSAmJiAhcmVhY2hlZEVuZE5vZGUpIHtcbiAgICAgICAgdGV4dCArPSB2YWx1ZTtcbiAgICAgICAgdGV4dE5vZGVzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGlmICghcmVhY2hlZEVuZE5vZGUpIHtcbiAgICAgICAgZ2V0VGV4dE5vZGVzKGNoaWxkTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgZ2V0VGV4dE5vZGVzKHJvb3ROb2RlKTtcblxuICByZXR1cm4gW3RleHROb2RlcywgdGV4dF07XG59O1xuXG5jb25zdCBzdXJyb3VuZENvbnRlbnQgPSByYW5nZSA9PiB7XG4gIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdTUEFOJyk7XG5cbiAgcmFuZ2Uuc3Vycm91bmRDb250ZW50cyh3cmFwcGVyKTtcblxuICByZXR1cm4gd3JhcHBlcjtcbn07XG5cbi8vIHdyYXAgZWFjaCBET00gVGV4dCBOb2RlIGluIHJhbmdlIGludG8gYSBzcGFuXG5leHBvcnQgY29uc3Qgd3JhcFJhbmdlID0gKHJhbmdlKSA9PiB7XG4gIGlmIChyYW5nZS5zdGFydENvbnRhaW5lciA9PT0gcmFuZ2UuZW5kQ29udGFpbmVyKSB7XG4gICAgcmV0dXJuIFsgc3Vycm91bmRDb250ZW50KHJhbmdlKSBdO1xuICB9XG5cbiAgY29uc3QgWyBub2Rlc0JldHdlZW4gXSA9IGdldFRleHROb2Rlc0JldHdlZW4ocmFuZ2UpO1xuXG4gIC8vIHdyYXAgdGhlIHN0YXJ0IG5vZGVcbiAgY29uc3Qgc3RhcnRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cbiAgc3RhcnRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMocmFuZ2Uuc3RhcnRDb250YWluZXIpO1xuICBzdGFydFJhbmdlLnNldFN0YXJ0KHJhbmdlLnN0YXJ0Q29udGFpbmVyLCByYW5nZS5zdGFydE9mZnNldCk7XG5cbiAgY29uc3Qgc3RhcnRXcmFwcGVyID0gc3Vycm91bmRDb250ZW50KHN0YXJ0UmFuZ2UpO1xuXG4gIC8vIHdyYXAgdGhlIGVuZCBub2RlXG4gIGNvbnN0IGVuZFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcblxuICBlbmRSYW5nZS5zZWxlY3ROb2RlKHJhbmdlLmVuZENvbnRhaW5lcik7XG4gIGVuZFJhbmdlLnNldEVuZChyYW5nZS5lbmRDb250YWluZXIsIHJhbmdlLmVuZE9mZnNldCk7XG5cbiAgY29uc3QgZW5kV3JhcHBlciA9IHN1cnJvdW5kQ29udGVudChlbmRSYW5nZSk7XG5cbiAgLy8gd3JhcCB0aGUgbm9kZXMgYmV0d2VlbiBzdGFydCBhbmQgZW5kIG5vZGVzLCBpZiBhbnlcbiAgY29uc3QgY2VudGVyV3JhcHBlcnMgPSBub2Rlc0JldHdlZW4ubWFwKChub2RlKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ1NQQU4nKTtcblxuICAgIG5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUod3JhcHBlciwgbm9kZSk7XG4gICAgd3JhcHBlci5hcHBlbmRDaGlsZChub2RlKTtcblxuICAgIHJldHVybiB3cmFwcGVyO1xuICB9KTtcblxuICByZXR1cm4gWyBzdGFydFdyYXBwZXIsIC4uLmNlbnRlcldyYXBwZXJzLCBlbmRXcmFwcGVyIF07XG59O1xuXG4vLyByZXR1cm5zIHRleHQgaW4gcmFuZ2Ugd2l0aCBzdGFydCBhbmQgZW5kIHBvc2l0aW9uIGluIHJvb3ROb2RlXG5leHBvcnQgY29uc3QgZ2V0UmFuZ2VEZXRhaWxzID0gKHJhbmdlLCByb290Tm9kZSkgPT4ge1xuICBjb25zdCByYW5nZUJlZm9yZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XG5cbiAgcmFuZ2VCZWZvcmUuc2V0U3RhcnQocm9vdE5vZGUsIDApO1xuICByYW5nZUJlZm9yZS5zZXRFbmQocmFuZ2Uuc3RhcnRDb250YWluZXIsIHJhbmdlLnN0YXJ0T2Zmc2V0KTtcblxuICBjb25zdCBbICwgdGV4dCBdID0gZ2V0VGV4dE5vZGVzQmV0d2VlbihyYW5nZUJlZm9yZSk7XG4gIGNvbnN0IFsgLCB0ZXh0U2VsZWN0ZWQgXSA9IGdldFRleHROb2Rlc0JldHdlZW4ocmFuZ2UpO1xuICBjb25zdCBzdGFydCA9IHRleHQubGVuZ3RoO1xuICBjb25zdCBlbmQgPSBzdGFydCArIHRleHRTZWxlY3RlZC5sZW5ndGg7XG5cbiAgcmV0dXJuIHtcbiAgICBxdW90ZTogdGV4dFNlbGVjdGVkLFxuICAgIHN0YXJ0LFxuICAgIGVuZFxuICB9O1xufTtcblxuLy8gcmVtb3ZlcyB0aGUgYW5ub3RhdGlvbiBzcGFucyB3aXRob3V0IGNoYW5naW5nIHRoZSBjb250ZW50IGluc2lkZVxuZXhwb3J0IGNvbnN0IHJlbW92ZUVsZW1zV3JhcHBpbmcgPSAoZWxlbXMsIGNvbnRhaW5lcikgPT4ge1xuICAoZWxlbXMgfHwgW10pLmZvckVhY2goZWxlbSA9PiB7XG4gICAgY29uc3QgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuICAgIGNvbnN0IGNoaWxkTm9kZXMgPSBlbGVtLmNoaWxkTm9kZXM7XG4gICAgY29uc3QgY2hpbGROb2Rlc0xlbmd0aCA9IGNoaWxkTm9kZXMubGVuZ3RoO1xuXG4gICAgaWYgKGNoaWxkTm9kZXNMZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXNMZW5ndGg7IGkrKykge1xuICAgICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkTm9kZXNbMF0sIGVsZW0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnQuaW5zZXJ0QmVmb3JlKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGVsZW0udGV4dENvbnRlbnQpLCBlbGVtKTtcbiAgICB9XG5cbiAgICBwYXJlbnQucmVtb3ZlQ2hpbGQoZWxlbSk7XG4gIH0pO1xuXG4gIGNvbnRhaW5lci5ub3JtYWxpemUoKTtcbn07XG5cbi8vIGFsc28gdXNlZCBpbiBzZWxlY3QtdGV4dFxuZXhwb3J0IGNvbnN0IGNsZWFyU2VsZWN0aW9uID0gKCkgPT4ge1xuICBpZiAoZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKSB7XG4gICAgLy8gZm9yIGFsbCBuZXcgYnJvd3NlcnMgKElFOSssIENocm9tZSwgRmlyZWZveClcbiAgICBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKS5hZGRSYW5nZShkb2N1bWVudC5jcmVhdGVSYW5nZSgpKTtcbiAgfSBlbHNlIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7XG4gICAgLy8gZXF1YWxzIHdpdGggdGhlIGRvY3VtZW50LmdldFNlbGVjdGlvbiAoTVNETiBpbmZvKVxuICAgIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKSB7XG4gICAgICAvLyBmb3IgYWxsIG5ldyBicm93c2VycyAoSUU5KywgQ2hyb21lLCBGaXJlZm94KVxuICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgd2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkpO1xuICAgIH0gZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbigpLmVtcHR5KSB7XG4gICAgICAvLyBDaHJvbWUgc3VwcG9ydHMgdGhpcyBhcyB3ZWxsXG4gICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkuZW1wdHkoKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uKSB7XG4gICAgLy8gSUU4LVxuICAgIGRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpO1xuICB9XG59O1xuXG4vLyBjaGVjayBpZiBhbm5vdGF0aW9uIGxhYmVsIGNvbnRhaW5zIGxpbmUgYnJlYWtzIG9yIGl0cyBsZW5ndGggPj0gMjAgY2hhcmFjdGVyc1xuZXhwb3J0IGNvbnN0IGlzU2lkZUxhYmVsID0gdGV4dCA9PiB0ZXh0Lmxlbmd0aCA+PSAyMCB8fCB0ZXh0LnNlYXJjaCgvXFxufFxccnxcXHJcXG4vKSAhPT0gLTE7XG5cbmV4cG9ydCBjb25zdCBnZXRBbm5vdGF0aW9uRWxlbWVudHMgPSBpZCA9PiBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLWlkPScke2lkfSddYCkpO1xuXG5leHBvcnQgY29uc3QgZ2V0TGFiZWxFbGVtZW50ID0gaWQgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtYW5uLWlkPScke2lkfSddYCk7XG4iXX0=