@pie-element/extended-text-entry 10.12.3 → 10.13.0

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/configure/CHANGELOG.md +19 -0
  3. package/configure/lib/defaults.js +6 -1
  4. package/configure/lib/defaults.js.map +1 -1
  5. package/configure/lib/index.js.map +1 -1
  6. package/configure/lib/main.js +3 -0
  7. package/configure/lib/main.js.map +1 -1
  8. package/configure/package.json +2 -2
  9. package/controller/CHANGELOG.md +22 -0
  10. package/controller/lib/defaults.js +73 -1
  11. package/controller/lib/defaults.js.map +1 -1
  12. package/controller/lib/index.js +9 -11
  13. package/controller/lib/index.js.map +1 -1
  14. package/controller/package.json +2 -2
  15. package/docs/config-schema.json +16 -0
  16. package/docs/config-schema.json.md +12 -0
  17. package/docs/demo/generate.js +1 -0
  18. package/docs/pie-schema.json +70 -0
  19. package/docs/pie-schema.json.md +51 -1
  20. package/lib/annotation/annotation-editor.js +703 -0
  21. package/lib/annotation/annotation-editor.js.map +1 -0
  22. package/lib/annotation/annotation-menu.js +206 -0
  23. package/lib/annotation/annotation-menu.js.map +1 -0
  24. package/lib/annotation/annotation-utils.js +249 -0
  25. package/lib/annotation/annotation-utils.js.map +1 -0
  26. package/lib/annotation/freeform-editor.js +266 -0
  27. package/lib/annotation/freeform-editor.js.map +1 -0
  28. package/lib/index.js +23 -6
  29. package/lib/index.js.map +1 -1
  30. package/lib/main.js +50 -19
  31. package/lib/main.js.map +1 -1
  32. package/module/configure.js +20 -14
  33. package/module/controller.js +33 -14
  34. package/module/demo.js +1 -0
  35. package/module/element.js +7602 -506
  36. package/module/index.html +1 -1
  37. package/module/manifest.json +2 -2
  38. package/module/print-demo.js +1 -0
  39. package/module/print.html +1 -1
  40. package/module/print.js +7586 -503
  41. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/annotation/annotation-editor.jsx"],"names":["style","theme","textContainer","padding","backgroundColor","border","borderRadius","overflowY","lineHeight","whiteSpace","overflowWrap","margin","userSelect","labelsContainer","width","wrapper","position","overflowX","display","commentContainer","paddingTop","spacing","unit","marginBottom","marginTop","annotation","cursor","annotationLabel","top","left","fontSize","typography","fontStyle","fontWeight","color","labelHover","zIndex","highlight","hover","sideAnnotationHover","borderRightColor","sideAnnotation","marginLeft","wordBreak","palette","common","white","right","content","height","pointerEvents","borderWidth","AnnotationEditor","props","textRef","labelsRef","offsetLeft","offsetWidth","Array","from","children","forEach","label","spans","dataset","annId","spanOffset","offsetTop","offsetParent","scrollTop","event","annotations","classes","selectionDetails","state","target","id","annotationId","selectedElems","labelElem","annotationIndex","findIndex","isSideLabel","hasAttribute","classList","add","setState","anchorEl","openedMenu","openedEditor","elem","remove","length","selection","window","getSelection","detail","rangeCount","selectedRange","getRangeAt","selectedText","toString","isSelectionInside","contains","commonAncestorContainer","isCollapsed","onChange","parentRef","removeChild","splice","handleClose","elems","disabled","type","className","onclick","handleClick","onmouseover","handleHover","onmouseout","handleCancelHover","firstSpan","document","createElement","innerHTML","freeform","appendChild","start","end","Date","getTime","join","createDOMAnnotation","newAnnotation","text","updatedAnnotation","oldType","oldLabel","updateLabel","createNewAnnotation","push","newLabel","span","domStart","domEnd","range","createRange","setStart","node","offset","setEnd","adjustAnnotationsPosition","addEventListener","removeEventListener","comment","customKeys","disabledMath","keypadMode","maxHeight","onCommentChange","predefinedAnnotations","anchorOffset","topOffset","minHeight","r","clearSelection","handleSelection","__html","prompt","math","controlledKeypadMode","video","audio","deleteAnnotation","editAnnotation","addAnnotation","handleMenuClick","updateAnnotation","changeAnnotationType","React","Component","PropTypes","string","array","func","isRequired","number","bool","object"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { withStyles } from '@material-ui/core/styles';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\n\nimport {\n clearSelection,\n isSideLabel,\n getAnnotationElements,\n getDOMNodes,\n getLabelElement,\n getRangeDetails,\n removeElemsWrapping,\n wrapRange,\n} from './annotation-utils';\nimport FreeformEditor from './freeform-editor';\nimport AnnotationMenu from './annotation-menu';\n\nimport { EditableHtml } from '@pie-lib/pie-toolbox/editable-html';\nimport { InputContainer } from '@pie-lib/pie-toolbox/config-ui';\n\nconst style = (theme) => ({\n textContainer: {\n padding: '10px 120px 10px 16px',\n backgroundColor: 'rgba(0, 0, 0, 0.06)',\n border: '1px solid #ccc',\n borderRadius: '4px',\n overflowY: 'scroll',\n lineHeight: '36px',\n whiteSpace: 'pre-wrap',\n overflowWrap: 'break-word',\n '& p': {\n margin: 0,\n },\n '& span[data-latex]': {\n userSelect: 'none',\n '-webkit-user-select': 'none',\n '-moz-user-select': 'none',\n '-ms-user-select': 'none',\n },\n },\n labelsContainer: {\n width: '230px',\n },\n wrapper: {\n position: 'relative',\n overflowX: 'hidden',\n display: 'flex',\n },\n commentContainer: {\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n marginTop: theme.spacing.unit * 2,\n width: '100%',\n },\n annotation: {\n position: 'relative',\n cursor: 'pointer',\n\n '&.positive': {\n backgroundColor: 'rgb(51, 255, 51, 0.5)',\n },\n\n '&.negative': {\n backgroundColor: 'rgba(255, 102, 204, 0.4)',\n },\n },\n annotationLabel: {\n backgroundColor: 'rgb(242, 242, 242)',\n padding: '2px',\n position: 'absolute',\n userSelect: 'none',\n whiteSpace: 'nowrap',\n top: '-10px',\n left: '-2px',\n fontSize: theme.typography.fontSize - 2,\n fontStyle: 'normal',\n fontWeight: 'normal',\n lineHeight: '6px',\n '-webkit-user-select': 'none',\n '-moz-user-select': 'none',\n '-ms-user-select': 'none',\n\n '&.positive': {\n color: 'rgb(0, 128, 0)',\n },\n\n '&.negative': {\n color: 'rgb(204, 0, 136)',\n },\n },\n labelHover: {\n zIndex: 20,\n\n '&.positive': {\n color: 'rgb(0, 77, 0)',\n },\n\n '&.negative': {\n color: 'rgb(153, 0, 102)',\n },\n },\n highlight: {\n zIndex: 10,\n },\n hover: {\n zIndex: 20,\n\n '&.positive': {\n backgroundColor: 'rgb(51, 255, 51, 0.7)',\n },\n\n '&.negative': {\n backgroundColor: 'rgba(255, 102, 204, 0.55)',\n },\n },\n sideAnnotationHover: {\n zIndex: 20,\n\n '&.negative': {\n backgroundColor: 'rgb(255, 179, 230) !important',\n '&:before': {\n borderRightColor: 'rgb(255, 179, 230) !important',\n },\n },\n\n '&.positive': {\n backgroundColor: 'rgb(128, 255, 128) !important',\n '&:before': {\n borderRightColor: 'rgb(153, 255, 153) !important',\n },\n },\n },\n sideAnnotation: {\n position: 'absolute',\n padding: theme.spacing.unit / 2,\n borderRadius: '4px',\n marginLeft: theme.spacing.unit ,\n width: '180px',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n border: `2px solid ${theme.palette.common.white}`,\n fontSize: theme.typography.fontSize,\n fontStyle: 'normal',\n fontWeight: 'normal',\n\n '&:before': {\n position: 'absolute',\n right: '100%',\n top: '5px',\n border: 'solid transparent',\n content: '\"\"',\n height: 0,\n width: 0,\n pointerEvents: 'none',\n borderWidth: '7px',\n },\n\n '&.negative': {\n backgroundColor: 'rgb(255, 204, 238)',\n '&:before': {\n borderRightColor: 'rgb(255, 204, 238)',\n },\n },\n\n '&.positive': {\n backgroundColor: 'rgb(153, 255, 153)',\n '&:before': {\n borderRightColor: 'rgb(153, 255, 153)',\n },\n },\n },\n});\n\nclass AnnotationEditor extends React.Component {\n static propTypes = {\n text: PropTypes.string,\n comment: PropTypes.string,\n annotations: PropTypes.array,\n predefinedAnnotations: PropTypes.array,\n onChange: PropTypes.func.isRequired,\n onCommentChange: PropTypes.func.isRequired,\n width: PropTypes.number,\n height: PropTypes.number,\n maxHeight: PropTypes.string,\n disabled: PropTypes.bool,\n disabledMath: PropTypes.bool,\n customKeys: PropTypes.array,\n keypadMode: PropTypes.string,\n classes: PropTypes.object.isRequired,\n };\n\n constructor(props) {\n super(props);\n this.state = {\n anchorEl: null,\n openedMenu: false,\n openedEditor: false,\n selectedElems: [],\n labelElem: null,\n selectionDetails: null,\n annotation: null,\n annotationIndex: null,\n };\n }\n\n componentDidMount() {\n const { annotations, text } = this.props;\n\n if (text) {\n annotations.forEach((annotation) => {\n const [domStart, domEnd] = getDOMNodes(annotation.start, annotation.end, this.textRef);\n\n if (domStart && domEnd) {\n const range = document.createRange();\n\n range.setStart(domStart.node, domStart.offset);\n range.setEnd(domEnd.node, domEnd.offset);\n\n const spans = wrapRange(range);\n\n this.createDOMAnnotation(spans, annotation);\n }\n });\n }\n\n if (this.textRef) {\n this.adjustAnnotationsPosition();\n this.textRef.addEventListener('scroll', this.adjustAnnotationsPosition);\n }\n }\n\n adjustAnnotationsPosition = () => {\n if (this.textRef && this.labelsRef) {\n const left = this.textRef.offsetLeft + this.textRef.offsetWidth + 8;\n\n Array.from(this.labelsRef.children).forEach((label) => {\n const spans = getAnnotationElements(label.dataset.annId);\n const spanOffset = spans[0].offsetTop ? spans[0].offsetTop : spans[0].offsetParent.offsetTop;\n const top = spanOffset - this.textRef.scrollTop - 6;\n\n label.style.top = `${top}px`;\n label.style.left = `${left}px`;\n });\n }\n };\n\n handleClick = (event) => {\n const { annotations, classes } = this.props;\n const { selectionDetails } = this.state;\n\n if (selectionDetails) {\n // new selection was made inside another annotation and should not update that annotation\n return;\n }\n\n const { id, annId } = event.target.dataset;\n const annotationId = id || annId;\n const selectedElems = getAnnotationElements(annotationId);\n const labelElem = getLabelElement(annotationId);\n const annotationIndex = annotations.findIndex((annotation) => annotation.id === annotationId);\n const isSideLabel = labelElem.hasAttribute('data-freeform');\n\n if (isSideLabel) {\n labelElem.classList.add(classes.highlight);\n }\n\n this.setState({\n anchorEl: selectedElems[0],\n openedMenu: !!id || (!!annId && !isSideLabel), // true if the annotation or the label was clicked\n openedEditor: !!annId && isSideLabel, // true if the side label was clicked\n selectedElems,\n labelElem,\n annotationIndex,\n annotation: annotations[annotationIndex],\n selectionDetails: null,\n });\n };\n\n handleHover = (event) => {\n const { classes } = this.props;\n const { id, annId } = event.target.dataset;\n const annotationId = id || annId;\n const selectedElems = getAnnotationElements(annotationId);\n const labelElem = getLabelElement(annotationId);\n const isSideLabel = labelElem.hasAttribute('data-freeform');\n\n selectedElems.forEach((elem) => elem.classList.add(classes.hover));\n labelElem.classList.add(isSideLabel ? classes.sideAnnotationHover : classes.labelHover);\n };\n\n handleCancelHover = (event) => {\n const { classes } = this.props;\n const { id, annId } = event.target.dataset;\n const annotationId = id || annId;\n const selectedElems = getAnnotationElements(annotationId);\n const labelElem = getLabelElement(annotationId);\n const isSideLabel = labelElem.hasAttribute('data-freeform');\n\n selectedElems.forEach((elem) => elem.classList.remove(classes.hover));\n labelElem.classList.remove(isSideLabel ? classes.sideAnnotationHover : classes.labelHover);\n };\n\n handleClose = (event) => {\n const { classes } = this.props;\n const { selectedElems, labelElem } = this.state;\n\n if (selectedElems.length && !selectedElems[0].hasAttribute('data-id')) {\n removeElemsWrapping(selectedElems, this.textRef);\n }\n\n if (labelElem) {\n labelElem.classList.remove(classes.highlight);\n }\n\n this.setState({\n anchorEl: null,\n openedMenu: false,\n openedEditor: false,\n selectedElems: [],\n labelElem: null,\n selectionDetails: null,\n annotationIndex: null,\n annotation: null,\n });\n\n clearSelection();\n };\n\n handleSelection = (event) => {\n const selection = window.getSelection();\n\n // prevent unwanted selections\n if (event.detail > 2) {\n clearSelection();\n return;\n }\n\n if (selection && selection.rangeCount > 0) {\n const selectedRange = selection.getRangeAt(0);\n const selectedText = selectedRange.toString();\n const isSelectionInside = this.textRef.contains(selectedRange.commonAncestorContainer);\n\n if (!selection.isCollapsed && selectedText !== '' && isSelectionInside) {\n const selectionDetails = getRangeDetails(selectedRange, this.textRef);\n const selectedElems = wrapRange(selectedRange);\n\n this.setState({\n anchorEl: selectedElems[0],\n openedMenu: true,\n selectedElems,\n selectionDetails,\n });\n }\n }\n };\n\n deleteAnnotation = () => {\n const { annotations, onChange } = this.props;\n const { selectedElems, labelElem, annotationIndex, annotation } = this.state;\n const parentRef = isSideLabel(annotation.label) ? this.labelsRef : selectedElems[0];\n\n parentRef.removeChild(labelElem);\n removeElemsWrapping(selectedElems, this.textRef);\n annotations.splice(annotationIndex, 1);\n\n onChange(annotations);\n this.handleClose();\n };\n\n createDOMAnnotation = (elems, annotation) => {\n const { classes, disabled } = this.props;\n const { id, label, type } = annotation;\n\n (elems || []).forEach((elem) => {\n elem.dataset.id = id;\n elem.className = classNames(classes.annotation, type);\n elem.onclick = !disabled && this.handleClick;\n elem.onmouseover = this.handleHover;\n elem.onmouseout = this.handleCancelHover;\n });\n\n const firstSpan = (elems && elems[0]) || {};\n const labelElem = document.createElement('SPAN');\n\n labelElem.dataset.annId = id;\n labelElem.innerHTML = label;\n labelElem.onclick = !disabled && this.handleClick;\n labelElem.onmouseover = this.handleHover;\n labelElem.onmouseout = this.handleCancelHover;\n\n if (isSideLabel(label)) {\n const spanOffset = firstSpan.offsetTop ? firstSpan.offsetTop : firstSpan.offsetParent.offsetTop;\n const top = spanOffset - this.textRef.scrollTop;\n const left = this.textRef.offsetLeft + this.textRef.offsetWidth + 8;\n\n labelElem.dataset.freeform = true;\n labelElem.className = classNames(classes.sideAnnotation, type);\n labelElem.style.top = `${top}px`;\n labelElem.style.left = `${left}px`;\n\n this.labelsRef.appendChild(labelElem);\n } else {\n labelElem.className = classNames(classes.annotationLabel, type);\n firstSpan.appendChild(labelElem);\n }\n };\n\n createNewAnnotation = (label, type) => {\n const { selectedElems, selectionDetails } = this.state;\n const annotation = {\n id: [selectionDetails.start, selectionDetails.end, new Date().getTime()].join('-'),\n label,\n type,\n ...selectionDetails,\n };\n\n this.createDOMAnnotation(selectedElems, annotation);\n\n return annotation;\n };\n\n handleMenuClick = (newAnnotation) => {\n const { annotations, onChange } = this.props;\n const { annotation, annotationIndex } = this.state;\n const { type, text: label } = newAnnotation;\n\n if (annotation) {\n const updatedAnnotation = { ...annotation, label, type };\n const { type: oldType, label: oldLabel } = annotation;\n\n this.updateLabel(oldLabel, updatedAnnotation, type !== oldType && oldType);\n annotations.splice(annotationIndex, 1, updatedAnnotation);\n } else {\n const newAnnotation = this.createNewAnnotation(label, type);\n\n annotations.push(newAnnotation);\n }\n\n onChange(annotations);\n this.handleClose();\n };\n\n editAnnotation = () => {\n this.setState({\n openedMenu: false,\n openedEditor: true,\n });\n };\n\n addAnnotation = (type) => {\n const { annotations, onChange } = this.props;\n const annotation = this.createNewAnnotation('', type);\n const labelElem = getLabelElement(annotation.id);\n\n annotations.push(annotation);\n\n this.setState({\n openedMenu: false,\n openedEditor: true,\n annotationIndex: annotations.length - 1,\n annotation,\n labelElem,\n });\n\n onChange(annotations);\n };\n\n updateLabel = (oldLabel, annotation, oldType) => {\n const { selectedElems, labelElem } = this.state;\n const { label, type } = annotation;\n\n if ((isSideLabel(label) && isSideLabel(oldLabel)) || (!isSideLabel(label) && !isSideLabel(oldLabel))) {\n labelElem.innerHTML = label;\n\n if (oldType) {\n labelElem.classList.remove(oldType);\n labelElem.classList.add(type);\n\n selectedElems.forEach((elem) => {\n elem.classList.remove(oldType);\n elem.classList.add(type);\n });\n }\n } else if (isSideLabel(label) && !isSideLabel(oldLabel)) {\n selectedElems[0].removeChild(labelElem);\n this.createDOMAnnotation(selectedElems, annotation);\n } else if (!isSideLabel(label) && isSideLabel(oldLabel)) {\n this.labelsRef.removeChild(labelElem);\n this.createDOMAnnotation(selectedElems, annotation);\n }\n };\n\n changeAnnotationType = (newLabel) => {\n const { annotations, onChange } = this.props;\n const { annotationIndex, selectedElems } = this.state;\n const { type: oldType, label: oldLabel } = annotations[annotationIndex];\n const type = oldType === 'positive' ? 'negative' : 'positive';\n const updatedAnnotation = { ...annotations[annotationIndex], type, label: newLabel };\n\n selectedElems.forEach((span) => {\n span.classList.remove(oldType);\n span.classList.add(type);\n });\n\n this.updateLabel(oldLabel, updatedAnnotation, oldType);\n annotations.splice(annotationIndex, 1, updatedAnnotation);\n\n onChange(annotations);\n this.handleClose();\n };\n\n updateAnnotation = (oldLabel, newLabel) => {\n const { annotations, onChange } = this.props;\n const { annotationIndex } = this.state;\n const updatedAnnotation = { ...annotations[annotationIndex], label: newLabel };\n\n this.updateLabel(oldLabel, updatedAnnotation);\n annotations.splice(annotationIndex, 1, updatedAnnotation);\n\n onChange(annotations);\n };\n\n componentWillUnmount() {\n this.textRef.removeEventListener('scroll', this.adjustAnnotationsPosition);\n }\n\n render() {\n const {\n classes,\n comment,\n customKeys,\n disabled,\n disabledMath,\n keypadMode,\n height,\n width,\n maxHeight,\n onCommentChange,\n predefinedAnnotations,\n text,\n } = this.props;\n const { anchorEl, annotation, openedMenu, openedEditor, selectionDetails } = this.state;\n\n const anchorOffset = anchorEl && (anchorEl.offsetTop ? anchorEl.offsetTop : anchorEl.offsetParent.offsetTop);\n const topOffset = this.textRef && anchorOffset ? anchorOffset - this.textRef.scrollTop - 8 : 0;\n\n return (\n <div>\n <div className={classes.wrapper}>\n <div\n className={classes.textContainer}\n style={{ width: width - 34, minHeight: height, maxHeight: maxHeight }}\n ref={(r) => (this.textRef = r)}\n onMouseDown={!disabled ? clearSelection : () => {}}\n onMouseUp={!disabled ? this.handleSelection : () => {}}\n dangerouslySetInnerHTML={{ __html: text }}\n />\n <div className={classes.labelsContainer} ref={(r) => (this.labelsRef = r)} />\n </div>\n\n <InputContainer label={'Comment'} className={classes.commentContainer}>\n <EditableHtml\n className={classes.prompt}\n markup={comment || ''}\n onChange={onCommentChange}\n width={width && (width + 104).toString()}\n disabled={disabled}\n pluginProps={{\n math: {\n disabled: disabledMath,\n customKeys: customKeys,\n keypadMode: keypadMode,\n controlledKeypadMode: false,\n },\n video: {\n disabled: true,\n },\n audio: {\n disabled: true,\n },\n }}\n />\n </InputContainer>\n\n <AnnotationMenu\n anchorEl={anchorEl}\n open={openedMenu && !disabled}\n annotations={predefinedAnnotations}\n isNewAnnotation={!!selectionDetails}\n onClose={this.handleClose}\n onDelete={this.deleteAnnotation}\n onEdit={this.editAnnotation}\n onWrite={this.addAnnotation}\n onAnnotate={this.handleMenuClick}\n />\n\n <FreeformEditor\n anchorEl={this.textRef}\n open={openedEditor && !disabled}\n offset={topOffset}\n value={(annotation && annotation.label) || ''}\n type={annotation && annotation.type}\n onClose={this.handleClose}\n onDelete={this.deleteAnnotation}\n onSave={this.updateAnnotation}\n onTypeChange={this.changeAnnotationType}\n />\n </div>\n );\n }\n}\n\nexport default withStyles(style)(AnnotationEditor);\n"],"file":"annotation-editor.js"}
@@ -0,0 +1,206 @@
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 = function styles(theme) {
37
+ return {
38
+ mainWrapper: {
39
+ width: '300px',
40
+ overflow: 'hidden',
41
+ borderRadius: '4px',
42
+ backgroundColor: theme.palette.common.white,
43
+ border: "2px solid ".concat(theme.palette.grey[100])
44
+ },
45
+ annotationsWrapper: {
46
+ display: 'flex',
47
+ flexWrap: 'wrap'
48
+ },
49
+ controlsWrapper: {
50
+ display: 'flex',
51
+ flexWrap: 'wrap',
52
+ borderTop: "2px solid ".concat(theme.palette.grey[100])
53
+ },
54
+ button: {
55
+ width: '22%',
56
+ textAlign: 'center',
57
+ padding: '4px',
58
+ cursor: 'pointer',
59
+ borderBottom: "1px solid ".concat(theme.palette.grey[100]),
60
+ '&:not(:nth-child(4n))': {
61
+ borderRight: "1px solid ".concat(theme.palette.grey[100])
62
+ },
63
+ '&:nth-child(4n)': {
64
+ flexGrow: 1
65
+ },
66
+ '&:hover': {
67
+ backgroundColor: theme.palette.grey[100]
68
+ }
69
+ },
70
+ positive: {
71
+ backgroundColor: 'rgb(153, 255, 153) !important',
72
+ '&:hover': {
73
+ filter: 'brightness(85%)'
74
+ }
75
+ },
76
+ negative: {
77
+ backgroundColor: 'rgb(255, 204, 238) !important',
78
+ '&:hover': {
79
+ filter: 'brightness(85%)'
80
+ }
81
+ },
82
+ holder: {
83
+ display: 'flex',
84
+ flexWrap: 'wrap',
85
+ borderTop: "2px solid ".concat(theme.palette.grey[100])
86
+ },
87
+ arrow: {
88
+ overflowX: 'unset',
89
+ overflowY: 'unset',
90
+ marginTop: '-16px',
91
+ '&::after': {
92
+ position: 'absolute',
93
+ left: 'calc(50% - 7px)',
94
+ // bottom: 0,
95
+ border: 'solid transparent',
96
+ content: '""',
97
+ height: 0,
98
+ width: 0,
99
+ pointerEvents: 'none',
100
+ borderWidth: '7px',
101
+ borderTopColor: 'black'
102
+ }
103
+ }
104
+ };
105
+ };
106
+
107
+ var AnnotationMenu = /*#__PURE__*/function (_React$Component) {
108
+ (0, _inherits2["default"])(AnnotationMenu, _React$Component);
109
+
110
+ var _super = _createSuper(AnnotationMenu);
111
+
112
+ function AnnotationMenu() {
113
+ (0, _classCallCheck2["default"])(this, AnnotationMenu);
114
+ return _super.apply(this, arguments);
115
+ }
116
+
117
+ (0, _createClass2["default"])(AnnotationMenu, [{
118
+ key: "render",
119
+ value: function render() {
120
+ var _this$props = this.props,
121
+ anchorEl = _this$props.anchorEl,
122
+ annotations = _this$props.annotations,
123
+ classes = _this$props.classes,
124
+ isNewAnnotation = _this$props.isNewAnnotation,
125
+ onAnnotate = _this$props.onAnnotate,
126
+ onClose = _this$props.onClose,
127
+ onEdit = _this$props.onEdit,
128
+ onDelete = _this$props.onDelete,
129
+ onWrite = _this$props.onWrite,
130
+ open = _this$props.open;
131
+ return /*#__PURE__*/_react["default"].createElement(_core.Popover, {
132
+ anchorEl: anchorEl,
133
+ open: open,
134
+ onClose: onClose,
135
+ classes: {
136
+ paper: classes.arrow
137
+ },
138
+ elevation: 5,
139
+ anchorOrigin: {
140
+ vertical: 'top',
141
+ horizontal: 'center'
142
+ },
143
+ transformOrigin: {
144
+ vertical: 'bottom',
145
+ horizontal: 'center'
146
+ }
147
+ }, /*#__PURE__*/_react["default"].createElement("div", {
148
+ className: classes.mainWrapper
149
+ }, /*#__PURE__*/_react["default"].createElement("div", {
150
+ className: classes.annotationsWrapper
151
+ }, annotations.map(function (annotation, index) {
152
+ return /*#__PURE__*/_react["default"].createElement("div", {
153
+ key: "annotation-".concat(index),
154
+ className: (0, _classnames["default"])(classes.button, annotation.type === 'positive' ? classes.positive : classes.negative),
155
+ onClick: function onClick() {
156
+ return onAnnotate(annotation);
157
+ }
158
+ }, annotation.label);
159
+ })), /*#__PURE__*/_react["default"].createElement("div", {
160
+ className: classes.controlsWrapper
161
+ }, /*#__PURE__*/_react["default"].createElement("div", {
162
+ className: classes.button,
163
+ onClick: onClose
164
+ }, "Cancel"), /*#__PURE__*/_react["default"].createElement("div", {
165
+ style: {
166
+ pointerEvents: 'none'
167
+ },
168
+ className: classes.button
169
+ }), isNewAnnotation ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
170
+ className: (0, _classnames["default"])(classes.button, classes.positive),
171
+ onClick: function onClick() {
172
+ return onWrite('positive');
173
+ }
174
+ }, "Write"), /*#__PURE__*/_react["default"].createElement("div", {
175
+ className: (0, _classnames["default"])(classes.button, classes.negative),
176
+ onClick: function onClick() {
177
+ return onWrite('negative');
178
+ }
179
+ }, "Write")) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
180
+ className: classes.button,
181
+ onClick: onDelete
182
+ }, "Delete"), /*#__PURE__*/_react["default"].createElement("div", {
183
+ className: classes.button,
184
+ onClick: onEdit
185
+ }, "Edit")))));
186
+ }
187
+ }]);
188
+ return AnnotationMenu;
189
+ }(_react["default"].Component);
190
+
191
+ (0, _defineProperty2["default"])(AnnotationMenu, "propTypes", {
192
+ anchorEl: _propTypes["default"].object,
193
+ open: _propTypes["default"].bool,
194
+ annotations: _propTypes["default"].array,
195
+ isNewAnnotation: _propTypes["default"].bool,
196
+ onClose: _propTypes["default"].func,
197
+ onDelete: _propTypes["default"].func,
198
+ onEdit: _propTypes["default"].func,
199
+ onWrite: _propTypes["default"].func,
200
+ onAnnotate: _propTypes["default"].func
201
+ });
202
+
203
+ var _default = (0, _styles.withStyles)(styles)(AnnotationMenu);
204
+
205
+ exports["default"] = _default;
206
+ //# sourceMappingURL=annotation-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/annotation/annotation-menu.jsx"],"names":["styles","theme","mainWrapper","width","overflow","borderRadius","backgroundColor","palette","common","white","border","grey","annotationsWrapper","display","flexWrap","controlsWrapper","borderTop","button","textAlign","padding","cursor","borderBottom","borderRight","flexGrow","positive","filter","negative","holder","arrow","overflowX","overflowY","marginTop","position","left","content","height","pointerEvents","borderWidth","borderTopColor","AnnotationMenu","props","anchorEl","annotations","classes","isNewAnnotation","onAnnotate","onClose","onEdit","onDelete","onWrite","open","paper","vertical","horizontal","map","annotation","index","type","label","React","Component","PropTypes","object","bool","array","func"],"mappings":"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","sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { withStyles } from '@material-ui/core/styles';\nimport { Popover } from '@material-ui/core';\n\nconst styles = (theme) => ({\n mainWrapper: {\n width: '300px',\n overflow: 'hidden',\n borderRadius: '4px',\n backgroundColor: theme.palette.common.white,\n border: `2px solid ${theme.palette.grey[100]}`,\n },\n annotationsWrapper: {\n display: 'flex',\n flexWrap: 'wrap',\n },\n controlsWrapper: {\n display: 'flex',\n flexWrap: 'wrap',\n borderTop: `2px solid ${theme.palette.grey[100]}`,\n },\n button: {\n width: '22%',\n textAlign: 'center',\n padding: '4px',\n cursor: 'pointer',\n borderBottom: `1px solid ${theme.palette.grey[100]}`,\n '&:not(:nth-child(4n))': {\n borderRight: `1px solid ${theme.palette.grey[100]}`,\n },\n '&:nth-child(4n)': {\n flexGrow: 1,\n },\n '&:hover': {\n backgroundColor: theme.palette.grey[100],\n },\n },\n positive: {\n backgroundColor: 'rgb(153, 255, 153) !important',\n '&:hover': {\n filter: 'brightness(85%)',\n },\n },\n negative: {\n backgroundColor: 'rgb(255, 204, 238) !important',\n '&:hover': {\n filter: 'brightness(85%)',\n },\n },\n holder: {\n display: 'flex',\n flexWrap: 'wrap',\n borderTop: `2px solid ${theme.palette.grey[100]}`,\n },\n arrow: {\n overflowX: 'unset',\n overflowY: 'unset',\n marginTop: '-16px',\n '&::after': {\n position: 'absolute',\n left: 'calc(50% - 7px)',\n // bottom: 0,\n border: 'solid transparent',\n content: '\"\"',\n height: 0,\n width: 0,\n pointerEvents: 'none',\n borderWidth: '7px',\n borderTopColor: 'black',\n },\n },\n});\n\nclass AnnotationMenu extends React.Component {\n static propTypes = {\n anchorEl: PropTypes.object,\n open: PropTypes.bool,\n annotations: PropTypes.array,\n isNewAnnotation: PropTypes.bool,\n onClose: PropTypes.func,\n onDelete: PropTypes.func,\n onEdit: PropTypes.func,\n onWrite: PropTypes.func,\n onAnnotate: PropTypes.func,\n };\n\n render() {\n const { anchorEl, annotations, classes, isNewAnnotation, onAnnotate, onClose, onEdit, onDelete, onWrite, open } =\n this.props;\n\n return (\n <Popover\n anchorEl={anchorEl}\n open={open}\n onClose={onClose}\n classes={{ paper: classes.arrow }}\n elevation={5}\n anchorOrigin={{\n vertical: 'top',\n horizontal: 'center',\n }}\n transformOrigin={{\n vertical: 'bottom',\n horizontal: 'center',\n }}\n >\n <div className={classes.mainWrapper}>\n <div className={classes.annotationsWrapper}>\n {annotations.map((annotation, index) => (\n <div\n key={`annotation-${index}`}\n className={classNames(\n classes.button,\n annotation.type === 'positive' ? classes.positive : classes.negative,\n )}\n onClick={() => onAnnotate(annotation)}\n >\n {annotation.label}\n </div>\n ))}\n </div>\n <div className={classes.controlsWrapper}>\n <div className={classes.button} onClick={onClose}>\n Cancel\n </div>\n <div style={{ pointerEvents: 'none' }} className={classes.button} />\n {isNewAnnotation ? (\n <React.Fragment>\n <div className={classNames(classes.button, classes.positive)} onClick={() => onWrite('positive')}>\n Write\n </div>\n <div className={classNames(classes.button, classes.negative)} onClick={() => onWrite('negative')}>\n Write\n </div>\n </React.Fragment>\n ) : (\n <React.Fragment>\n <div className={classes.button} onClick={onDelete}>\n Delete\n </div>\n <div className={classes.button} onClick={onEdit}>\n Edit\n </div>\n </React.Fragment>\n )}\n </div>\n </div>\n </Popover>\n );\n }\n}\n\nexport default withStyles(styles)(AnnotationMenu);\n"],"file":"annotation-menu.js"}
@@ -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.wrapRange = exports.removeElemsWrapping = exports.isSideLabel = exports.getRangeDetails = exports.getLabelElement = exports.getDOMNodes = exports.getAnnotationElements = exports.clearSelection = 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=annotation-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/annotation/annotation-utils.js"],"names":["getAllTextNodesBeforePosition","node","stopOffset","nodeArray","nodes","offset","reduce","acc","textContent","length","keepWalking","nodeType","parentNode","hasAttribute","push","firstChild","nextSibling","getDOMNodes","startOffset","endOffset","rootNode","textNodesToEnd","domNodes","start","forEach","end","getTextNodesBetween","range","commonAncestorContainer","startNode","startContainer","endNode","endContainer","textNodes","pastStartNode","reachedEndNode","text","getTextNodes","value","nodeValue","childNodes","substring","childNode","surroundContent","wrapper","document","createElement","surroundContents","wrapRange","nodesBetween","startRange","createRange","selectNodeContents","setStart","startWrapper","endRange","selectNode","setEnd","endWrapper","centerWrappers","map","insertBefore","appendChild","getRangeDetails","rangeBefore","textSelected","quote","removeElemsWrapping","elems","container","elem","parent","childNodesLength","i","createTextNode","removeChild","normalize","clearSelection","getSelection","removeAllRanges","addRange","window","empty","selection","isSideLabel","search","getAnnotationElements","id","Array","from","querySelectorAll","getLabelElement","querySelector"],"mappings":"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","sourcesContent":["// returns DOM Nodes before the stopOffset\nconst getAllTextNodesBeforePosition = (node, stopOffset, nodeArray) => {\n const nodes = nodeArray ? nodeArray : [];\n const offset = nodes.reduce((acc, node) => acc + node.textContent.length, 0);\n let keepWalking = true;\n\n if (offset > stopOffset) {\n return false;\n }\n\n if (node) {\n // 3 = HTML DOM node value for text nodes\n if (node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {\n nodes.push(node);\n }\n\n node = node.firstChild;\n }\n\n while (node && keepWalking) {\n keepWalking = getAllTextNodesBeforePosition(node, stopOffset, nodes);\n node = node.nextSibling;\n }\n\n return nodes;\n};\n\n// returns DOM Nodes that overlap the start or end position\nexport const getDOMNodes = (startOffset, endOffset, rootNode) => {\n const textNodesToEnd = getAllTextNodesBeforePosition(rootNode, endOffset);\n const domNodes = [];\n let start = 0;\n\n textNodesToEnd.forEach((node) => {\n const end = start + node.textContent.length;\n\n [startOffset, endOffset].forEach((offset) => {\n if (start <= offset && offset < end) {\n domNodes.push({\n node,\n offset: offset - start,\n });\n }\n });\n\n start = end;\n });\n\n return domNodes;\n};\n\n// returns [ textNodes, text ]\n// textNodes = DOM Text Nodes between start range and end range node\n// text = plain text in range\nconst getTextNodesBetween = (range) => {\n const {\n commonAncestorContainer: rootNode,\n startContainer: startNode,\n endContainer: endNode,\n startOffset,\n endOffset,\n } = range;\n const textNodes = [];\n let pastStartNode = false;\n let reachedEndNode = false;\n let text = '';\n\n const getTextNodes = (node) => {\n const { nodeValue: value, childNodes } = node;\n\n if (node === startNode && node === endNode) {\n if (value) {\n text += value.substring(startOffset, endOffset);\n }\n\n pastStartNode = reachedEndNode = true;\n } else if (node === startNode) {\n if (value) {\n text += value.substring(startOffset);\n }\n\n pastStartNode = true;\n } else if (node === endNode) {\n if (value) {\n text += value.substring(0, endOffset);\n }\n\n reachedEndNode = true;\n } else if (node && node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {\n // 3 = HTML DOM node value for text nodes\n if (value && pastStartNode && !reachedEndNode) {\n text += value;\n textNodes.push(node);\n }\n }\n\n childNodes.forEach((childNode) => {\n if (!reachedEndNode) {\n getTextNodes(childNode);\n } else {\n return;\n }\n });\n };\n\n getTextNodes(rootNode);\n\n return [textNodes, text];\n};\n\nconst surroundContent = (range) => {\n const wrapper = document.createElement('SPAN');\n\n range.surroundContents(wrapper);\n\n return wrapper;\n};\n\n// wrap each DOM Text Node in range into a span\nexport const wrapRange = (range) => {\n if (range.startContainer === range.endContainer) {\n return [surroundContent(range)];\n }\n\n const [nodesBetween] = getTextNodesBetween(range);\n\n // wrap the start node\n const startRange = document.createRange();\n\n startRange.selectNodeContents(range.startContainer);\n startRange.setStart(range.startContainer, range.startOffset);\n\n const startWrapper = surroundContent(startRange);\n\n // wrap the end node\n const endRange = document.createRange();\n\n endRange.selectNode(range.endContainer);\n endRange.setEnd(range.endContainer, range.endOffset);\n\n const endWrapper = surroundContent(endRange);\n\n // wrap the nodes between start and end nodes, if any\n const centerWrappers = nodesBetween.map((node) => {\n const wrapper = document.createElement('SPAN');\n\n node.parentNode.insertBefore(wrapper, node);\n wrapper.appendChild(node);\n\n return wrapper;\n });\n\n return [startWrapper, ...centerWrappers, endWrapper];\n};\n\n// returns text in range with start and end position in rootNode\nexport const getRangeDetails = (range, rootNode) => {\n const rangeBefore = document.createRange();\n\n rangeBefore.setStart(rootNode, 0);\n rangeBefore.setEnd(range.startContainer, range.startOffset);\n\n const [, text] = getTextNodesBetween(rangeBefore);\n const [, textSelected] = getTextNodesBetween(range);\n const start = text.length;\n const end = start + textSelected.length;\n\n return {\n quote: textSelected,\n start,\n end,\n };\n};\n\n// removes the annotation spans without changing the content inside\nexport const removeElemsWrapping = (elems, container) => {\n (elems || []).forEach((elem) => {\n const parent = elem.parentNode;\n const childNodes = elem.childNodes;\n const childNodesLength = childNodes.length;\n\n if (childNodesLength > 0) {\n for (let i = 0; i < childNodesLength; i++) {\n parent.insertBefore(childNodes[0], elem);\n }\n } else {\n parent.insertBefore(document.createTextNode(elem.textContent), elem);\n }\n\n parent.removeChild(elem);\n });\n\n container.normalize();\n};\n\n// also used in select-text\nexport const clearSelection = () => {\n if (document.getSelection) {\n // for all new browsers (IE9+, Chrome, Firefox)\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(document.createRange());\n } else if (window.getSelection) {\n // equals with the document.getSelection (MSDN info)\n if (window.getSelection().removeAllRanges) {\n // for all new browsers (IE9+, Chrome, Firefox)\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(document.createRange());\n } else if (window.getSelection().empty) {\n // Chrome supports this as well\n window.getSelection().empty();\n }\n } else if (document.selection) {\n // IE8-\n document.selection.empty();\n }\n};\n\n// check if annotation label contains line breaks or its length >= 20 characters\nexport const isSideLabel = (text) => text.length >= 20 || text.search(/\\n|\\r|\\r\\n/) !== -1;\n\nexport const getAnnotationElements = (id) => Array.from(document.querySelectorAll(`[data-id='${id}']`));\n\nexport const getLabelElement = (id) => document.querySelector(`[data-ann-id='${id}']`);\n"],"file":"annotation-utils.js"}