@pie-element/extended-text-entry 15.1.2-next.2 → 15.1.2

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 (100) hide show
  1. package/CHANGELOG.json +1282 -0
  2. package/CHANGELOG.md +2270 -0
  3. package/LICENSE.md +5 -0
  4. package/README.md +1 -0
  5. package/configure/CHANGELOG.json +922 -0
  6. package/configure/CHANGELOG.md +1959 -0
  7. package/configure/lib/defaults.js +224 -0
  8. package/configure/lib/defaults.js.map +1 -0
  9. package/configure/lib/index.js +125 -0
  10. package/configure/lib/index.js.map +1 -0
  11. package/configure/lib/main.js +247 -0
  12. package/configure/lib/main.js.map +1 -0
  13. package/configure/package.json +23 -0
  14. package/controller/CHANGELOG.json +362 -0
  15. package/controller/CHANGELOG.md +1183 -0
  16. package/controller/lib/defaults.js +91 -0
  17. package/controller/lib/defaults.js.map +1 -0
  18. package/controller/lib/index.js +101 -0
  19. package/controller/lib/index.js.map +1 -0
  20. package/controller/package.json +16 -0
  21. package/docs/config-schema.json +1782 -0
  22. package/docs/config-schema.json.md +1333 -0
  23. package/docs/demo/config.js +7 -0
  24. package/docs/demo/generate.js +14 -0
  25. package/docs/demo/index.html +3 -0
  26. package/docs/demo/session.js +7 -0
  27. package/docs/pie-schema.json +954 -0
  28. package/docs/pie-schema.json.md +717 -0
  29. package/lib/annotation/annotation-editor.js +636 -0
  30. package/lib/annotation/annotation-editor.js.map +1 -0
  31. package/lib/annotation/annotation-menu.js +147 -0
  32. package/lib/annotation/annotation-menu.js.map +1 -0
  33. package/lib/annotation/annotation-utils.js +205 -0
  34. package/lib/annotation/annotation-utils.js.map +1 -0
  35. package/lib/annotation/freeform-editor.js +241 -0
  36. package/lib/annotation/freeform-editor.js.map +1 -0
  37. package/lib/index.js +108 -0
  38. package/lib/index.js.map +1 -0
  39. package/lib/main.js +205 -0
  40. package/lib/main.js.map +1 -0
  41. package/lib/print.js +86 -0
  42. package/lib/print.js.map +1 -0
  43. package/module/configure.js +1 -0
  44. package/module/controller.js +139 -0
  45. package/module/demo.js +38 -0
  46. package/module/element.js +1 -0
  47. package/module/index.html +21 -0
  48. package/module/manifest.json +22 -0
  49. package/module/print-demo.js +76 -0
  50. package/module/print.html +18 -0
  51. package/module/print.js +1 -0
  52. package/package.json +22 -87
  53. package/configure.js +0 -2
  54. package/controller.js +0 -1
  55. package/dist/author/defaults.d.ts +0 -166
  56. package/dist/author/defaults.js +0 -209
  57. package/dist/author/index.d.ts +0 -52
  58. package/dist/author/index.js +0 -74
  59. package/dist/author/main.d.ts +0 -26
  60. package/dist/author/main.js +0 -166
  61. package/dist/browser/author/index.js +0 -495
  62. package/dist/browser/author/index.js.map +0 -1
  63. package/dist/browser/browser-kkT1XVKw.js +0 -219
  64. package/dist/browser/browser-kkT1XVKw.js.map +0 -1
  65. package/dist/browser/controller/index.js +0 -184
  66. package/dist/browser/controller/index.js.map +0 -1
  67. package/dist/browser/delivery/index.js +0 -98
  68. package/dist/browser/delivery/index.js.map +0 -1
  69. package/dist/browser/dist-BCJzhghM.js +0 -47879
  70. package/dist/browser/dist-BCJzhghM.js.map +0 -1
  71. package/dist/browser/extended-text-entry.css +0 -2
  72. package/dist/browser/main-VcQEFn-b.js +0 -714
  73. package/dist/browser/main-VcQEFn-b.js.map +0 -1
  74. package/dist/browser/print/index.js +0 -48
  75. package/dist/browser/print/index.js.map +0 -1
  76. package/dist/controller/defaults.d.ts +0 -33
  77. package/dist/controller/defaults.js +0 -104
  78. package/dist/controller/index.d.ts +0 -59
  79. package/dist/controller/index.js +0 -72
  80. package/dist/delivery/annotation/annotation-editor.d.ts +0 -47
  81. package/dist/delivery/annotation/annotation-editor.js +0 -296
  82. package/dist/delivery/annotation/annotation-menu.d.ts +0 -25
  83. package/dist/delivery/annotation/annotation-menu.js +0 -113
  84. package/dist/delivery/annotation/annotation-utils.d.ts +0 -20
  85. package/dist/delivery/annotation/annotation-utils.js +0 -65
  86. package/dist/delivery/annotation/freeform-editor.d.ts +0 -30
  87. package/dist/delivery/annotation/freeform-editor.js +0 -143
  88. package/dist/delivery/index.d.ts +0 -23
  89. package/dist/delivery/index.js +0 -68
  90. package/dist/delivery/main.d.ts +0 -27
  91. package/dist/delivery/main.js +0 -134
  92. package/dist/extended-text-entry.css +0 -2
  93. package/dist/index.d.ts +0 -1
  94. package/dist/index.iife.d.ts +0 -8
  95. package/dist/index.iife.js +0 -403
  96. package/dist/index.js +0 -2
  97. package/dist/print/index.d.ts +0 -15
  98. package/dist/print/index.js +0 -48
  99. package/dist/runtime-support.d.ts +0 -12
  100. package/dist/runtime-support.js +0 -12
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation-editor.js","names":["_react","_interopRequireDefault","require","_styles","_propTypes","_annotationUtils","_freeformEditor","_annotationMenu","_editableHtmlTipTap","_configUi","TextContainer","styled","padding","backgroundColor","border","borderRadius","overflowY","lineHeight","whiteSpace","overflowWrap","margin","userSelect","LabelsContainer","width","Wrapper","position","overflowX","display","CommentContainer","InputContainer","theme","paddingTop","spacing","marginBottom","marginTop","globalStyles","document","getElementById","styleElement","createElement","id","textContent","head","appendChild","AnnotationEditor","React","Component","constructor","props","_defineProperty2","default","textRef","labelsRef","left","offsetLeft","offsetWidth","Array","from","children","forEach","label","spans","getAnnotationElements","dataset","annId","spanOffset","offsetTop","offsetParent","top","scrollTop","style","event","annotations","selectionDetails","state","target","annotationId","selectedElems","labelElem","getLabelElement","annotationIndex","findIndex","annotation","isSideLabel","hasAttribute","zIndex","setState","anchorEl","openedMenu","openedEditor","elem","classList","contains","setProperty","color","removeProperty","length","removeElemsWrapping","clearSelection","selection","window","getSelection","detail","rangeCount","selectedRange","getRangeAt","selectedText","toString","isSelectionInside","commonAncestorContainer","isCollapsed","getRangeDetails","wrapRange","onChange","parentRef","removeChild","splice","handleClose","elems","disabled","type","className","cursor","onclick","handleClick","onmouseover","handleHover","onmouseout","handleCancelHover","firstSpan","innerHTML","freeform","marginLeft","wordBreak","fontSize","fontStyle","fontWeight","webkitUserSelect","mozUserSelect","msUserSelect","start","end","Date","getTime","join","createDOMAnnotation","newAnnotation","text","updatedAnnotation","oldType","oldLabel","updateLabel","createNewAnnotation","push","remove","add","newLabel","span","componentDidMount","domStart","domEnd","getDOMNodes","range","createRange","setStart","node","offset","setEnd","adjustAnnotationsPosition","addEventListener","componentWillUnmount","removeEventListener","render","comment","customKeys","disabledMath","keypadMode","height","maxHeight","onCommentChange","predefinedAnnotations","anchorOffset","topOffset","minHeight","ref","r","onMouseDown","onMouseUp","handleSelection","dangerouslySetInnerHTML","__html","markup","pluginProps","math","controlledKeypadMode","video","audio","textAlign","h3","open","isNewAnnotation","onClose","onDelete","deleteAnnotation","onEdit","editAnnotation","onWrite","addAnnotation","onAnnotate","handleMenuClick","value","onSave","updateAnnotation","onTypeChange","changeAnnotationType","PropTypes","string","array","func","isRequired","number","bool","_default","exports"],"sources":["../../src/annotation/annotation-editor.jsx"],"sourcesContent":["import React from 'react';\nimport { styled } from '@mui/material/styles';\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';\nimport EditableHtml from '@pie-lib/editable-html-tip-tap';\nimport { InputContainer } from '@pie-lib/config-ui';\n\nconst TextContainer = styled('div')({\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\nconst LabelsContainer = styled('div')({\n width: '230px',\n});\n\nconst Wrapper = styled('div')({\n position: 'relative',\n overflowX: 'hidden',\n display: 'flex',\n});\n\nconst CommentContainer = styled(InputContainer)(({ theme }) => ({\n paddingTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n marginTop: theme.spacing(2),\n width: '100%',\n}));\n\n// Global styles for pseudo-elements that can't be applied inline\nconst globalStyles = `\n .sideAnnotation:before {\n position: absolute;\n right: var(--before-right, 100%);\n top: var(--before-top, 5px);\n border: solid transparent;\n content: \"\";\n height: 0;\n width: 0;\n pointer-events: none;\n border-width: var(--before-border-width, 7px);\n border-right-color: var(--before-border-color, rgb(153, 255, 153));\n }\n`;\n\n// Inject styles if not already injected\nif (!document.getElementById('annotation-editor-styles')) {\n const styleElement = document.createElement('style');\n styleElement.id = 'annotation-editor-styles';\n styleElement.textContent = globalStyles;\n document.head.appendChild(styleElement);\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 };\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 } = 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.style.zIndex = '10';\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 { 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) => {\n elem.style.zIndex = '20';\n if (elem.classList.contains('positive')) {\n elem.style.backgroundColor = 'rgb(51, 255, 51, 0.7)';\n } else if (elem.classList.contains('negative')) {\n elem.style.backgroundColor = 'rgba(255, 102, 204, 0.55)';\n }\n });\n\n if (isSideLabel) {\n labelElem.style.zIndex = '20';\n if (labelElem.classList.contains('positive')) {\n labelElem.style.backgroundColor = 'rgb(128, 255, 128)';\n labelElem.style.setProperty('--before-border-color', 'rgb(153, 255, 153)');\n } else if (labelElem.classList.contains('negative')) {\n labelElem.style.backgroundColor = 'rgb(255, 179, 230)';\n labelElem.style.setProperty('--before-border-color', 'rgb(255, 179, 230)');\n }\n } else {\n labelElem.style.zIndex = '20';\n if (labelElem.classList.contains('positive')) {\n labelElem.style.color = 'rgb(0, 77, 0)';\n } else if (labelElem.classList.contains('negative')) {\n labelElem.style.color = 'rgb(153, 0, 102)';\n }\n }\n };\n\n handleCancelHover = (event) => {\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) => {\n elem.style.zIndex = '';\n if (elem.classList.contains('positive')) {\n elem.style.backgroundColor = 'rgb(51, 255, 51, 0.5)';\n } else if (elem.classList.contains('negative')) {\n elem.style.backgroundColor = 'rgba(255, 102, 204, 0.4)';\n }\n });\n\n if (isSideLabel) {\n labelElem.style.zIndex = '';\n if (labelElem.classList.contains('positive')) {\n labelElem.style.backgroundColor = 'rgb(153, 255, 153)';\n labelElem.style.removeProperty('--before-border-color');\n } else if (labelElem.classList.contains('negative')) {\n labelElem.style.backgroundColor = 'rgb(255, 204, 238)';\n labelElem.style.removeProperty('--before-border-color');\n }\n } else {\n labelElem.style.zIndex = '';\n if (labelElem.classList.contains('positive')) {\n labelElem.style.color = 'rgb(0, 128, 0)';\n } else if (labelElem.classList.contains('negative')) {\n labelElem.style.color = 'rgb(204, 0, 136)';\n }\n }\n };\n\n handleClose = (event) => {\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.style.zIndex = '';\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 { disabled } = this.props;\n const { id, label, type } = annotation;\n\n (elems || []).forEach((elem) => {\n elem.dataset.id = id;\n elem.className = `annotation ${type}`;\n // Apply annotation styles directly\n elem.style.position = 'relative';\n elem.style.cursor = 'pointer';\n if (type === 'positive') {\n elem.style.backgroundColor = 'rgb(51, 255, 51, 0.5)';\n } else if (type === 'negative') {\n elem.style.backgroundColor = 'rgba(255, 102, 204, 0.4)';\n }\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 = `sideAnnotation ${type}`;\n \n // Apply side annotation styles directly\n labelElem.style.position = 'absolute';\n labelElem.style.padding = '4px';\n labelElem.style.borderRadius = '4px';\n labelElem.style.marginLeft = '8px';\n labelElem.style.width = '180px';\n labelElem.style.whiteSpace = 'pre-wrap';\n labelElem.style.wordBreak = 'break-word';\n labelElem.style.border = '2px solid #ffffff';\n labelElem.style.fontSize = '14px';\n labelElem.style.fontStyle = 'normal';\n labelElem.style.fontWeight = 'normal';\n labelElem.style.top = `${top}px`;\n labelElem.style.left = `${left}px`;\n \n if (type === 'negative') {\n labelElem.style.backgroundColor = 'rgb(255, 204, 238)';\n } else if (type === 'positive') {\n labelElem.style.backgroundColor = 'rgb(153, 255, 153)';\n }\n \n // Add pseudo-element styles via CSS\n labelElem.style.setProperty('--before-border-width', '7px');\n labelElem.style.setProperty('--before-top', '5px');\n labelElem.style.setProperty('--before-right', '100%');\n if (type === 'negative') {\n labelElem.style.setProperty('--before-border-color', 'rgb(255, 204, 238)');\n } else if (type === 'positive') {\n labelElem.style.setProperty('--before-border-color', 'rgb(153, 255, 153)');\n }\n\n this.labelsRef.appendChild(labelElem);\n } else {\n labelElem.className = `annotationLabel ${type}`;\n \n // Apply annotation label styles directly\n labelElem.style.backgroundColor = 'rgb(242, 242, 242)';\n labelElem.style.padding = '2px';\n labelElem.style.position = 'absolute';\n labelElem.style.userSelect = 'none';\n labelElem.style.whiteSpace = 'nowrap';\n labelElem.style.top = '-10px';\n labelElem.style.left = '-2px';\n labelElem.style.fontSize = '12px';\n labelElem.style.fontStyle = 'normal';\n labelElem.style.fontWeight = 'normal';\n labelElem.style.lineHeight = '6px';\n labelElem.style.webkitUserSelect = 'none';\n labelElem.style.mozUserSelect = 'none';\n labelElem.style.msUserSelect = 'none';\n \n if (type === 'positive') {\n labelElem.style.color = 'rgb(0, 128, 0)';\n } else if (type === 'negative') {\n labelElem.style.color = 'rgb(204, 0, 136)';\n }\n \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 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 <Wrapper>\n <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 <LabelsContainer ref={(r) => (this.labelsRef = r)} />\n </Wrapper>\n\n <CommentContainer label={'Comment'}>\n <EditableHtml\n className=\"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 textAlign: {\n disabled: true,\n },\n h3: {\n disabled: true,\n },\n }}\n />\n </CommentContainer>\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 AnnotationEditor;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = void 0;
8
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
+ var _react = _interopRequireDefault(require("react"));
10
+ var _propTypes = _interopRequireDefault(require("prop-types"));
11
+ var _styles = require("@mui/material/styles");
12
+ var _material = require("@mui/material");
13
+ const StyledPopover = (0, _styles.styled)(_material.Popover)({
14
+ '& .MuiPaper-root': {
15
+ overflowX: 'unset',
16
+ overflowY: 'unset',
17
+ marginTop: '-16px',
18
+ '&::after': {
19
+ position: 'absolute',
20
+ left: 'calc(50% - 7px)',
21
+ border: 'solid transparent',
22
+ content: '""',
23
+ height: 0,
24
+ width: 0,
25
+ pointerEvents: 'none',
26
+ borderWidth: '7px',
27
+ borderTopColor: 'black'
28
+ }
29
+ }
30
+ });
31
+ const MainWrapper = (0, _styles.styled)('div')(({
32
+ theme
33
+ }) => ({
34
+ width: '300px',
35
+ overflow: 'hidden',
36
+ borderRadius: '4px',
37
+ backgroundColor: theme.palette.common.white,
38
+ border: `2px solid ${theme.palette.grey[100]}`
39
+ }));
40
+ const AnnotationsWrapper = (0, _styles.styled)('div')({
41
+ display: 'flex',
42
+ flexWrap: 'wrap'
43
+ });
44
+ const ControlsWrapper = (0, _styles.styled)('div')(({
45
+ theme
46
+ }) => ({
47
+ display: 'flex',
48
+ flexWrap: 'wrap',
49
+ borderTop: `2px solid ${theme.palette.grey[100]}`
50
+ }));
51
+ const Button = (0, _styles.styled)('div')(({
52
+ theme,
53
+ variant
54
+ }) => ({
55
+ width: '22%',
56
+ textAlign: 'center',
57
+ padding: '4px',
58
+ cursor: 'pointer',
59
+ borderBottom: `1px solid ${theme.palette.grey[100]}`,
60
+ '&:not(:nth-child(4n))': {
61
+ borderRight: `1px solid ${theme.palette.grey[100]}`
62
+ },
63
+ '&:nth-child(4n)': {
64
+ flexGrow: 1
65
+ },
66
+ '&:hover': {
67
+ backgroundColor: theme.palette.grey[100]
68
+ },
69
+ ...(variant === 'positive' && {
70
+ backgroundColor: 'rgb(153, 255, 153) !important',
71
+ '&:hover': {
72
+ filter: 'brightness(85%)'
73
+ }
74
+ }),
75
+ ...(variant === 'negative' && {
76
+ backgroundColor: 'rgb(255, 204, 238) !important',
77
+ '&:hover': {
78
+ filter: 'brightness(85%)'
79
+ }
80
+ })
81
+ }));
82
+ class AnnotationMenu extends _react.default.Component {
83
+ render() {
84
+ const {
85
+ anchorEl,
86
+ annotations,
87
+ isNewAnnotation,
88
+ onAnnotate,
89
+ onClose,
90
+ onEdit,
91
+ onDelete,
92
+ onWrite,
93
+ open
94
+ } = this.props;
95
+ return /*#__PURE__*/_react.default.createElement(StyledPopover, {
96
+ anchorEl: anchorEl,
97
+ open: open,
98
+ onClose: onClose,
99
+ elevation: 5,
100
+ transitionDuration: {
101
+ enter: 225,
102
+ exit: 195
103
+ },
104
+ anchorOrigin: {
105
+ vertical: 'top',
106
+ horizontal: 'center'
107
+ },
108
+ transformOrigin: {
109
+ vertical: 'bottom',
110
+ horizontal: 'center'
111
+ }
112
+ }, /*#__PURE__*/_react.default.createElement(MainWrapper, null, /*#__PURE__*/_react.default.createElement(AnnotationsWrapper, null, annotations.map((annotation, index) => /*#__PURE__*/_react.default.createElement(Button, {
113
+ key: `annotation-${index}`,
114
+ variant: annotation.type,
115
+ onClick: () => onAnnotate(annotation)
116
+ }, annotation.label))), /*#__PURE__*/_react.default.createElement(ControlsWrapper, null, /*#__PURE__*/_react.default.createElement(Button, {
117
+ onClick: onClose
118
+ }, "Cancel"), /*#__PURE__*/_react.default.createElement(Button, {
119
+ style: {
120
+ pointerEvents: 'none'
121
+ }
122
+ }), isNewAnnotation ? /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Button, {
123
+ variant: "positive",
124
+ onClick: () => onWrite('positive')
125
+ }, "Write"), /*#__PURE__*/_react.default.createElement(Button, {
126
+ variant: "negative",
127
+ onClick: () => onWrite('negative')
128
+ }, "Write")) : /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(Button, {
129
+ onClick: onDelete
130
+ }, "Delete"), /*#__PURE__*/_react.default.createElement(Button, {
131
+ onClick: onEdit
132
+ }, "Edit")))));
133
+ }
134
+ }
135
+ (0, _defineProperty2.default)(AnnotationMenu, "propTypes", {
136
+ anchorEl: _propTypes.default.object,
137
+ open: _propTypes.default.bool,
138
+ annotations: _propTypes.default.array,
139
+ isNewAnnotation: _propTypes.default.bool,
140
+ onClose: _propTypes.default.func,
141
+ onDelete: _propTypes.default.func,
142
+ onEdit: _propTypes.default.func,
143
+ onWrite: _propTypes.default.func,
144
+ onAnnotate: _propTypes.default.func
145
+ });
146
+ var _default = exports.default = AnnotationMenu;
147
+ //# sourceMappingURL=annotation-menu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"annotation-menu.js","names":["_react","_interopRequireDefault","require","_propTypes","_styles","_material","StyledPopover","styled","Popover","overflowX","overflowY","marginTop","position","left","border","content","height","width","pointerEvents","borderWidth","borderTopColor","MainWrapper","theme","overflow","borderRadius","backgroundColor","palette","common","white","grey","AnnotationsWrapper","display","flexWrap","ControlsWrapper","borderTop","Button","variant","textAlign","padding","cursor","borderBottom","borderRight","flexGrow","filter","AnnotationMenu","React","Component","render","anchorEl","annotations","isNewAnnotation","onAnnotate","onClose","onEdit","onDelete","onWrite","open","props","default","createElement","elevation","transitionDuration","enter","exit","anchorOrigin","vertical","horizontal","transformOrigin","map","annotation","index","key","type","onClick","label","style","Fragment","_defineProperty2","PropTypes","object","bool","array","func","_default","exports"],"sources":["../../src/annotation/annotation-menu.jsx"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport { Popover } from '@mui/material';\n\nconst StyledPopover = styled(Popover)({\n '& .MuiPaper-root': {\n overflowX: 'unset',\n overflowY: 'unset',\n marginTop: '-16px',\n '&::after': {\n position: 'absolute',\n left: 'calc(50% - 7px)',\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\nconst MainWrapper = styled('div')(({ theme }) => ({\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\nconst AnnotationsWrapper = styled('div')({\n display: 'flex',\n flexWrap: 'wrap',\n});\n\nconst ControlsWrapper = styled('div')(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n borderTop: `2px solid ${theme.palette.grey[100]}`,\n}));\n\nconst Button = styled('div')(({ theme, variant }) => ({\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 ...(variant === 'positive' && {\n backgroundColor: 'rgb(153, 255, 153) !important',\n '&:hover': {\n filter: 'brightness(85%)',\n },\n }),\n ...(variant === 'negative' && {\n backgroundColor: 'rgb(255, 204, 238) !important',\n '&:hover': {\n filter: 'brightness(85%)',\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, isNewAnnotation, onAnnotate, onClose, onEdit, onDelete, onWrite, open } =\n this.props;\n\n return (\n <StyledPopover\n anchorEl={anchorEl}\n open={open}\n onClose={onClose}\n elevation={5}\n transitionDuration={{ enter: 225, exit: 195 }}\n anchorOrigin={{\n vertical: 'top',\n horizontal: 'center',\n }}\n transformOrigin={{\n vertical: 'bottom',\n horizontal: 'center',\n }}\n >\n <MainWrapper>\n <AnnotationsWrapper>\n {annotations.map((annotation, index) => (\n <Button\n key={`annotation-${index}`}\n variant={annotation.type}\n onClick={() => onAnnotate(annotation)}\n >\n {annotation.label}\n </Button>\n ))}\n </AnnotationsWrapper>\n <ControlsWrapper>\n <Button onClick={onClose}>\n Cancel\n </Button>\n <Button style={{ pointerEvents: 'none' }} />\n {isNewAnnotation ? (\n <React.Fragment>\n <Button variant=\"positive\" onClick={() => onWrite('positive')}>\n Write\n </Button>\n <Button variant=\"negative\" onClick={() => onWrite('negative')}>\n Write\n </Button>\n </React.Fragment>\n ) : (\n <React.Fragment>\n <Button onClick={onDelete}>\n Delete\n </Button>\n <Button onClick={onEdit}>\n Edit\n </Button>\n </React.Fragment>\n )}\n </ControlsWrapper>\n </MainWrapper>\n </StyledPopover>\n );\n }\n}\n\nexport default AnnotationMenu;\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.wrapRange = exports.removeElemsWrapping = exports.isSideLabel = exports.getRangeDetails = exports.getLabelElement = exports.getDOMNodes = exports.getAnnotationElements = exports.clearSelection = void 0;
7
+ // returns DOM Nodes before the stopOffset
8
+ const getAllTextNodesBeforePosition = (node, stopOffset, nodeArray) => {
9
+ const nodes = nodeArray ? nodeArray : [];
10
+ const offset = nodes.reduce((acc, node) => acc + node.textContent.length, 0);
11
+ let keepWalking = true;
12
+ if (offset > stopOffset) {
13
+ return false;
14
+ }
15
+ if (node) {
16
+ // 3 = HTML DOM node value for text nodes
17
+ if (node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {
18
+ nodes.push(node);
19
+ }
20
+ node = node.firstChild;
21
+ }
22
+ while (node && keepWalking) {
23
+ keepWalking = getAllTextNodesBeforePosition(node, stopOffset, nodes);
24
+ node = node.nextSibling;
25
+ }
26
+ return nodes;
27
+ };
28
+
29
+ // returns DOM Nodes that overlap the start or end position
30
+ const getDOMNodes = (startOffset, endOffset, rootNode) => {
31
+ const textNodesToEnd = getAllTextNodesBeforePosition(rootNode, endOffset);
32
+ const domNodes = [];
33
+ let start = 0;
34
+ textNodesToEnd.forEach(node => {
35
+ const end = start + node.textContent.length;
36
+ [startOffset, endOffset].forEach(offset => {
37
+ if (start <= offset && offset < end) {
38
+ domNodes.push({
39
+ node,
40
+ offset: offset - start
41
+ });
42
+ }
43
+ });
44
+ start = end;
45
+ });
46
+ return domNodes;
47
+ };
48
+
49
+ // returns [ textNodes, text ]
50
+ // textNodes = DOM Text Nodes between start range and end range node
51
+ // text = plain text in range
52
+ exports.getDOMNodes = getDOMNodes;
53
+ const getTextNodesBetween = range => {
54
+ const {
55
+ commonAncestorContainer: rootNode,
56
+ startContainer: startNode,
57
+ endContainer: endNode,
58
+ startOffset,
59
+ endOffset
60
+ } = range;
61
+ const textNodes = [];
62
+ let pastStartNode = false;
63
+ let reachedEndNode = false;
64
+ let text = '';
65
+ const getTextNodes = node => {
66
+ const {
67
+ nodeValue: value,
68
+ childNodes
69
+ } = node;
70
+ if (node === startNode && node === endNode) {
71
+ if (value) {
72
+ text += value.substring(startOffset, endOffset);
73
+ }
74
+ pastStartNode = reachedEndNode = true;
75
+ } else if (node === startNode) {
76
+ if (value) {
77
+ text += value.substring(startOffset);
78
+ }
79
+ pastStartNode = true;
80
+ } else if (node === endNode) {
81
+ if (value) {
82
+ text += value.substring(0, endOffset);
83
+ }
84
+ reachedEndNode = true;
85
+ } else if (node && node.nodeType === 3 && node.parentNode && !node.parentNode.hasAttribute('data-ann-id')) {
86
+ // 3 = HTML DOM node value for text nodes
87
+ if (value && pastStartNode && !reachedEndNode) {
88
+ text += value;
89
+ textNodes.push(node);
90
+ }
91
+ }
92
+ childNodes.forEach(childNode => {
93
+ if (!reachedEndNode) {
94
+ getTextNodes(childNode);
95
+ } else {
96
+ return;
97
+ }
98
+ });
99
+ };
100
+ getTextNodes(rootNode);
101
+ return [textNodes, text];
102
+ };
103
+ const surroundContent = range => {
104
+ const wrapper = document.createElement('SPAN');
105
+ range.surroundContents(wrapper);
106
+ return wrapper;
107
+ };
108
+
109
+ // wrap each DOM Text Node in range into a span
110
+ const wrapRange = range => {
111
+ if (range.startContainer === range.endContainer) {
112
+ return [surroundContent(range)];
113
+ }
114
+ const [nodesBetween] = getTextNodesBetween(range);
115
+
116
+ // wrap the start node
117
+ const startRange = document.createRange();
118
+ startRange.selectNodeContents(range.startContainer);
119
+ startRange.setStart(range.startContainer, range.startOffset);
120
+ const startWrapper = surroundContent(startRange);
121
+
122
+ // wrap the end node
123
+ const endRange = document.createRange();
124
+ endRange.selectNode(range.endContainer);
125
+ endRange.setEnd(range.endContainer, range.endOffset);
126
+ const endWrapper = surroundContent(endRange);
127
+
128
+ // wrap the nodes between start and end nodes, if any
129
+ const centerWrappers = nodesBetween.map(node => {
130
+ const wrapper = document.createElement('SPAN');
131
+ node.parentNode.insertBefore(wrapper, node);
132
+ wrapper.appendChild(node);
133
+ return wrapper;
134
+ });
135
+ return [startWrapper, ...centerWrappers, endWrapper];
136
+ };
137
+
138
+ // returns text in range with start and end position in rootNode
139
+ exports.wrapRange = wrapRange;
140
+ const getRangeDetails = (range, rootNode) => {
141
+ const rangeBefore = document.createRange();
142
+ rangeBefore.setStart(rootNode, 0);
143
+ rangeBefore.setEnd(range.startContainer, range.startOffset);
144
+ const [, text] = getTextNodesBetween(rangeBefore);
145
+ const [, textSelected] = getTextNodesBetween(range);
146
+ const start = text.length;
147
+ const end = start + textSelected.length;
148
+ return {
149
+ quote: textSelected,
150
+ start,
151
+ end
152
+ };
153
+ };
154
+
155
+ // removes the annotation spans without changing the content inside
156
+ exports.getRangeDetails = getRangeDetails;
157
+ const removeElemsWrapping = (elems, container) => {
158
+ (elems || []).forEach(elem => {
159
+ const parent = elem.parentNode;
160
+ const childNodes = elem.childNodes;
161
+ const childNodesLength = childNodes.length;
162
+ if (childNodesLength > 0) {
163
+ for (let i = 0; i < childNodesLength; i++) {
164
+ parent.insertBefore(childNodes[0], elem);
165
+ }
166
+ } else {
167
+ parent.insertBefore(document.createTextNode(elem.textContent), elem);
168
+ }
169
+ parent.removeChild(elem);
170
+ });
171
+ container.normalize();
172
+ };
173
+
174
+ // also used in select-text
175
+ exports.removeElemsWrapping = removeElemsWrapping;
176
+ const clearSelection = () => {
177
+ if (document.getSelection) {
178
+ // for all new browsers (IE9+, Chrome, Firefox)
179
+ document.getSelection().removeAllRanges();
180
+ document.getSelection().addRange(document.createRange());
181
+ } else if (window.getSelection) {
182
+ // equals with the document.getSelection (MSDN info)
183
+ if (window.getSelection().removeAllRanges) {
184
+ // for all new browsers (IE9+, Chrome, Firefox)
185
+ window.getSelection().removeAllRanges();
186
+ window.getSelection().addRange(document.createRange());
187
+ } else if (window.getSelection().empty) {
188
+ // Chrome supports this as well
189
+ window.getSelection().empty();
190
+ }
191
+ } else if (document.selection) {
192
+ // IE8-
193
+ document.selection.empty();
194
+ }
195
+ };
196
+
197
+ // check if annotation label contains line breaks or its length >= 20 characters
198
+ exports.clearSelection = clearSelection;
199
+ const isSideLabel = text => text.length >= 20 || text.search(/\n|\r|\r\n/) !== -1;
200
+ exports.isSideLabel = isSideLabel;
201
+ const getAnnotationElements = id => Array.from(document.querySelectorAll(`[data-id='${id}']`));
202
+ exports.getAnnotationElements = getAnnotationElements;
203
+ const getLabelElement = id => document.querySelector(`[data-ann-id='${id}']`);
204
+ exports.getLabelElement = getLabelElement;
205
+ //# sourceMappingURL=annotation-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"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","exports","getTextNodesBetween","range","commonAncestorContainer","startContainer","startNode","endContainer","endNode","textNodes","pastStartNode","reachedEndNode","text","getTextNodes","nodeValue","value","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"],"sources":["../../src/annotation/annotation-utils.js"],"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"],"mappings":"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","ignoreList":[]}