@brightspot/ui 3.0.1-cms-ui-migration.1 → 3.0.1-cms-ui-migration.3
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.
- package/README.md +54 -35
- package/dist/custom-elements.json +2536 -2536
- package/dist/storybook/assets/{ActionBar.stories-BhdqLyzJ.js → ActionBar.stories-CSxtZl7v.js} +1 -1
- package/dist/storybook/assets/{ActionItem.stories-17zjMCkO.js → ActionItem.stories-BWcMRMP3.js} +1 -1
- package/dist/storybook/assets/{Avatar.stories-C5m3-zOH.js → Avatar.stories-CYTUGXzH.js} +1 -1
- package/dist/storybook/assets/{AvatarGroup.stories-DE88PJ6w.js → AvatarGroup.stories-CSYBYo_5.js} +1 -1
- package/dist/storybook/assets/{Badge.stories-D905HmvO.js → Badge.stories-LuF4BuVr.js} +1 -1
- package/dist/storybook/assets/{Button-ANyLESGb.js → Button-CrXCMxHb.js} +1 -1
- package/dist/storybook/assets/{Button.stories-DbH6q5L3.js → Button.stories-JVwxdrdM.js} +1 -1
- package/dist/storybook/assets/{ButtonGroup.stories-loqgAB7p.js → ButtonGroup.stories-qtq64a1H.js} +1 -1
- package/dist/storybook/assets/{Celebrate.stories-CRO3rSgp.js → Celebrate.stories-DjTtaSd6.js} +1 -1
- package/dist/storybook/assets/{Checkbox.stories-SZtgfbFe.js → Checkbox.stories-v1Pr5mL6.js} +1 -1
- package/dist/storybook/assets/{CircularProgress.stories-VayPxO4M.js → CircularProgress.stories-DkV7PJ4D.js} +1 -1
- package/dist/storybook/assets/{ClipboardMixin.stories-0EB2O2zT.js → ClipboardMixin.stories-Dh5c7uSM.js} +1 -1
- package/dist/storybook/assets/{Color-6BZIO3FS-CFpcD80i.js → Color-6BZIO3FS-B1gcREt6.js} +1 -1
- package/dist/storybook/assets/{Colors.stories-BJGM6xnp.js → Colors.stories-DnubtRqn.js} +1 -1
- package/dist/storybook/assets/{CombinedEffects.stories-DUwocYcn.js → CombinedEffects.stories-By6akSve.js} +1 -1
- package/dist/storybook/assets/{ComponentStatesMixin-MUqdPCf7.js → ComponentStatesMixin-CPLGv3h-.js} +1 -1
- package/dist/storybook/assets/{ComponentStatesMixin.stories-DjrxNwE7.js → ComponentStatesMixin.stories-CiQ_lyhm.js} +1 -1
- package/dist/storybook/assets/{CopyToClipboard.stories-DptOcPq6.js → CopyToClipboard.stories-cJ7rl3mj.js} +1 -1
- package/dist/storybook/assets/{Debounce.stories-BbcIWmhD.js → Debounce.stories-Bw-goobU.js} +1 -1
- package/dist/storybook/assets/{DocsRenderer-LL677BLK-Yy8fjeNG.js → DocsRenderer-LL677BLK-CNW57dGQ.js} +3 -3
- package/dist/storybook/assets/{Dropdown.stories-Du3LrBR6.js → Dropdown.stories-CwC3HXXd.js} +1 -1
- package/dist/storybook/assets/{EmptyState.stories-Dy9P8aOY.js → EmptyState.stories-BUEJwuhP.js} +1 -1
- package/dist/storybook/assets/{Events.stories-DvdVQxDf.js → Events.stories-D1mf9buv.js} +1 -1
- package/dist/storybook/assets/{Heading.stories-BQ1jFOKn.js → Heading.stories-DO906G4P.js} +1 -1
- package/dist/storybook/assets/{HueRipple.stories-CrZFjnRl.js → HueRipple.stories-BOySRSZB.js} +1 -1
- package/dist/storybook/assets/{Icon.stories-C2Tj8Lx1.js → Icon.stories-BsqgTbdG.js} +1 -1
- package/dist/storybook/assets/{IconButton.stories-DFqouOJb.js → IconButton.stories-aza1AAKk.js} +1 -1
- package/dist/storybook/assets/{LinearProgress.stories-DtNw3QX3.js → LinearProgress.stories-CDYmiiex.js} +1 -1
- package/dist/storybook/assets/{Pagination.stories-CFiZ9APs.js → Pagination.stories-LXB-x7YB.js} +1 -1
- package/dist/storybook/assets/{Popover.stories-DkkTuYag.js → Popover.stories-DY1HesPJ.js} +1 -1
- package/dist/storybook/assets/{ReadyMixin-BA01Vm_B.js → ReadyMixin-DmOC67IJ.js} +1 -1
- package/dist/storybook/assets/{RovingTabindexMixin.stories-BesAqt48.js → RovingTabindexMixin.stories-BWy0Rq8d.js} +1 -1
- package/dist/storybook/assets/{Rtc.stories-iTw43rjp.js → Rtc.stories-DrmdqqbI.js} +1 -1
- package/dist/storybook/assets/{ScrollShadow.stories-QYqQCcAo.js → ScrollShadow.stories-DiKFPazh.js} +1 -1
- package/dist/storybook/assets/{Switch.stories-BKArq9Mk.js → Switch.stories-BgFnw8_z.js} +1 -1
- package/dist/storybook/assets/{Tab.stories-8UdDPvE5.js → Tab.stories-c2wLMooF.js} +1 -1
- package/dist/storybook/assets/{Tabs.stories-BPGMZ552.js → Tabs.stories-CjH8seNP.js} +1 -1
- package/dist/storybook/assets/{Throttle.stories-CYl5d0r6.js → Throttle.stories-CXysc_QE.js} +1 -1
- package/dist/storybook/assets/{Tooltip.stories-cZ0zSlwX.js → Tooltip.stories-6qzyByPm.js} +1 -1
- package/dist/storybook/assets/{Upload.stories-CPC7N0Ed.js → Upload.stories-BLxykydQ.js} +1 -1
- package/dist/storybook/assets/{UploadItem.stories-D0LClT0a.js → UploadItem.stories-CcfcqdJW.js} +1 -1
- package/dist/storybook/assets/{Welcome.stories-C8JUaRas.js → Welcome.stories-CzYS_3fH.js} +1 -1
- package/dist/storybook/assets/{Widget.stories-C1FxF24-.js → Widget.stories-Du7T4LAI.js} +1 -1
- package/dist/storybook/assets/{WithTooltip-65CFNBJE-BMBo-fie.js → WithTooltip-65CFNBJE-D4LfXdYt.js} +1 -1
- package/dist/storybook/assets/{blocks-BTsuXRXZ.js → blocks-DR3fGePu.js} +5 -5
- package/dist/storybook/assets/{formatter-EIJCOSYU-BJ1Cwrpx.js → formatter-EIJCOSYU-Cf01216O.js} +1 -1
- package/dist/storybook/assets/if-defined-DaMmbcIU.js +1 -0
- package/dist/storybook/assets/{iframe-B3YWTqkR.js → iframe-CQArUhO8.js} +4 -4
- package/dist/storybook/assets/{iframe-BgFj0b5u.css → iframe-D0roG0J-.css} +1 -1
- package/dist/storybook/assets/{index-BBUTVEdP.js → index-B1uI_67G.js} +1 -1
- package/dist/storybook/assets/{onFind-NC0lGo-r.js → onFind-BpFkN2Rh.js} +1 -1
- package/dist/storybook/assets/{onFind.stories-CqbwQgQF.js → onFind.stories-Cxdeg69X.js} +1 -1
- package/dist/storybook/assets/{onRemove.stories-Y8Ycs77o.js → onRemove.stories-BHEWpNrE.js} +1 -1
- package/dist/storybook/assets/{onVisible.stories-CcLUE35q.js → onVisible.stories-DFJ3S_ZS.js} +1 -1
- package/dist/storybook/assets/{style-map-MSB_ngx3.js → style-map-DJ83UC3V.js} +1 -1
- package/dist/storybook/assets/{syntaxhighlighter-ED5Y7EFY-BjkjEDMG.js → syntaxhighlighter-ED5Y7EFY-zYN83mxK.js} +1 -1
- package/dist/storybook/iframe.html +2 -2
- package/dist/storybook/project.json +1 -1
- package/dist/tailwind.config.d.ts +4 -1
- package/dist/tailwind.config.d.ts.map +1 -1
- package/dist/tailwind.config.js +0 -2
- package/dist/tailwind.config.js.map +1 -1
- package/dist/tailwind.config.ts +0 -2
- package/package.json +16 -2
- package/dist/storybook/assets/if-defined-BPCd2NXs.js +0 -1
- package/src/legacy/tool-ui/src/main/resources/settings.properties +0 -1
- package/src/legacy/tool-ui/src/main/webapp/WEB-INF/web.xml +0 -81
- package/src/legacy/tool-ui/src/main/webapp/script/bsp-uploader.js +0 -170
- package/src/legacy/tool-ui/src/main/webapp/script/bsp-utils.js +0 -393
- package/src/legacy/tool-ui/src/main/webapp/script/content/layout-element.js +0 -141
- package/src/legacy/tool-ui/src/main/webapp/script/input/query.js +0 -78
- package/src/legacy/tool-ui/src/main/webapp/script/input/workflow.js +0 -718
- package/src/legacy/tool-ui/src/main/webapp/script/jquery.extra.js +0 -633
- package/src/legacy/tool-ui/src/main/webapp/script/v3/Dropbox.js +0 -18
- package/src/legacy/tool-ui/src/main/webapp/script/v3/EditFieldUpdate.js +0 -406
- package/src/legacy/tool-ui/src/main/webapp/script/v3/EditFieldUpdateCache.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/script/v3/Notification.js +0 -151
- package/src/legacy/tool-ui/src/main/webapp/script/v3/content/edit.js +0 -194
- package/src/legacy/tool-ui/src/main/webapp/script/v3/content/state.js +0 -785
- package/src/legacy/tool-ui/src/main/webapp/script/v3/csrf.js +0 -35
- package/src/legacy/tool-ui/src/main/webapp/script/v3/dashboard.js +0 -65
- package/src/legacy/tool-ui/src/main/webapp/script/v3/input/dataTransfer.js +0 -129
- package/src/legacy/tool-ui/src/main/webapp/script/v3/input/file.js +0 -433
- package/src/legacy/tool-ui/src/main/webapp/script/v3/input/object.js +0 -743
- package/src/legacy/tool-ui/src/main/webapp/script/v3/input/read-only.js +0 -17
- package/src/legacy/tool-ui/src/main/webapp/script/v3/jquery.frame.js +0 -478
- package/src/legacy/tool-ui/src/main/webapp/script/v3/jquery.repeatable.js +0 -2406
- package/src/legacy/tool-ui/src/main/webapp/script/v3/plugin/popup.d.ts +0 -2
- package/src/legacy/tool-ui/src/main/webapp/script/v3/plugin/popup.js +0 -446
- package/src/legacy/tool-ui/src/main/webapp/script/v3/search-filters.js +0 -62
- package/src/legacy/tool-ui/src/main/webapp/script/v3/search.js +0 -53
- package/src/legacy/tool-ui/src/main/webapp/script/v3.js +0 -1049
- package/src/legacy/tool-ui/src/main/webapp/v4/Admin.js +0 -16
- package/src/legacy/tool-ui/src/main/webapp/v4/AutoExpand.js +0 -84
- package/src/legacy/tool-ui/src/main/webapp/v4/AutoSubmit.js +0 -68
- package/src/legacy/tool-ui/src/main/webapp/v4/Bridge.js +0 -536
- package/src/legacy/tool-ui/src/main/webapp/v4/CheckboxInput.js +0 -22
- package/src/legacy/tool-ui/src/main/webapp/v4/ColorInput.js +0 -5
- package/src/legacy/tool-ui/src/main/webapp/v4/ColorInputSpectrum.js +0 -107
- package/src/legacy/tool-ui/src/main/webapp/v4/ComboInput.js +0 -1491
- package/src/legacy/tool-ui/src/main/webapp/v4/CommunityWidget.js +0 -29
- package/src/legacy/tool-ui/src/main/webapp/v4/ContentEdit.js +0 -2427
- package/src/legacy/tool-ui/src/main/webapp/v4/ContentLock.js +0 -470
- package/src/legacy/tool-ui/src/main/webapp/v4/ContentReporting.js +0 -32
- package/src/legacy/tool-ui/src/main/webapp/v4/DataTable.js +0 -31
- package/src/legacy/tool-ui/src/main/webapp/v4/DateStringField.js +0 -485
- package/src/legacy/tool-ui/src/main/webapp/v4/Entry.js +0 -264
- package/src/legacy/tool-ui/src/main/webapp/v4/ExternalItemAuth.js +0 -16
- package/src/legacy/tool-ui/src/main/webapp/v4/Form.js +0 -31
- package/src/legacy/tool-ui/src/main/webapp/v4/Hierarchy.js +0 -100
- package/src/legacy/tool-ui/src/main/webapp/v4/Icon.ts +0 -49
- package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditor.js +0 -2403
- package/src/legacy/tool-ui/src/main/webapp/v4/ImageEditorBundle.js +0 -5
- package/src/legacy/tool-ui/src/main/webapp/v4/LinkCarousel.js +0 -40
- package/src/legacy/tool-ui/src/main/webapp/v4/LinkList.js +0 -14
- package/src/legacy/tool-ui/src/main/webapp/v4/LinkTable.js +0 -123
- package/src/legacy/tool-ui/src/main/webapp/v4/Location.js +0 -19
- package/src/legacy/tool-ui/src/main/webapp/v4/LocationMap.js +0 -148
- package/src/legacy/tool-ui/src/main/webapp/v4/LookingGlass.js +0 -24
- package/src/legacy/tool-ui/src/main/webapp/v4/Message.js +0 -14
- package/src/legacy/tool-ui/src/main/webapp/v4/NumberBar.js +0 -32
- package/src/legacy/tool-ui/src/main/webapp/v4/Page.js +0 -890
- package/src/legacy/tool-ui/src/main/webapp/v4/Preview.js +0 -758
- package/src/legacy/tool-ui/src/main/webapp/v4/PreviewEditor.js +0 -86
- package/src/legacy/tool-ui/src/main/webapp/v4/PreviewOverlay.js +0 -1005
- package/src/legacy/tool-ui/src/main/webapp/v4/PubSub.js +0 -47
- package/src/legacy/tool-ui/src/main/webapp/v4/QueryField.js +0 -211
- package/src/legacy/tool-ui/src/main/webapp/v4/RegionMap.js +0 -215
- package/src/legacy/tool-ui/src/main/webapp/v4/RepeatableContentInputGroup.js +0 -160
- package/src/legacy/tool-ui/src/main/webapp/v4/RichTextEditor.js +0 -154
- package/src/legacy/tool-ui/src/main/webapp/v4/SearchFields.js +0 -281
- package/src/legacy/tool-ui/src/main/webapp/v4/SearchResult.js +0 -255
- package/src/legacy/tool-ui/src/main/webapp/v4/SharePreview.js +0 -56
- package/src/legacy/tool-ui/src/main/webapp/v4/Sortable.js +0 -874
- package/src/legacy/tool-ui/src/main/webapp/v4/StyleEmbeddedContent.js +0 -100
- package/src/legacy/tool-ui/src/main/webapp/v4/StyleguidePresets.js +0 -357
- package/src/legacy/tool-ui/src/main/webapp/v4/TabContainer.js +0 -360
- package/src/legacy/tool-ui/src/main/webapp/v4/Taxonomy.js +0 -27
- package/src/legacy/tool-ui/src/main/webapp/v4/ThemeBundleEditor.js +0 -224
- package/src/legacy/tool-ui/src/main/webapp/v4/TimedContent.js +0 -147
- package/src/legacy/tool-ui/src/main/webapp/v4/TimedContentBundle.js +0 -8
- package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditor.js +0 -2417
- package/src/legacy/tool-ui/src/main/webapp/v4/VideoEditorBundle.js +0 -8
- package/src/legacy/tool-ui/src/main/webapp/v4/ViewMirror.js +0 -52
- package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.d.ts +0 -13
- package/src/legacy/tool-ui/src/main/webapp/v4/ViewPreview.js +0 -177
- package/src/legacy/tool-ui/src/main/webapp/v4/Widget.js +0 -90
- package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/fileMock.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/styleMock.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/__mocks__/textArea.mock.js +0 -20
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/globals.js +0 -770
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/ProseMirror.test.js +0 -16
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/index.html +0 -54
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/comment_manager/CommentManager.test.js +0 -29
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/comment_manager/index.html +0 -35
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/custom_keyboard/CustomKeyboard.js +0 -42
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/custom_keyboard/index.html +0 -37
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/EnhancementManager.test.js +0 -288
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/block.html +0 -38
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/inline.html +0 -38
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/enhancement_manager/no-popups.html +0 -38
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/list_manager/ListManager.js +0 -257
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/list_manager/index.html +0 -38
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/hierarchal.html +0 -33
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/index.html +0 -33
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/menubar.test.js +0 -195
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/small.html +0 -34
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/menubar/tags.html +0 -34
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/PlaceholderManager.test.js +0 -134
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/has-editable-placeholder.html +0 -32
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/has-text.html +0 -34
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/placeholder_manager/index.html +0 -31
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/table_manager/TableManager.test.js +0 -63
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/table_manager/existing.html +0 -48
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/TrackManager.test.js +0 -291
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/existing.html +0 -39
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/integration/rte/plugins/track_manager/insert.html +0 -37
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/Sortable.test.js +0 -105
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/ProseMirror.test.js +0 -41
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/codemirror-shim.test.js +0 -72
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/collab_manager/CollabManager.test.js +0 -46
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/enhancement_manager/EnhancementManager.test.js +0 -84
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/list_manager/ListManager.test.js +0 -54
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/menubar/menubar.test.js +0 -183
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/plugins/spellcheck/SpellCheck.test.js +0 -45
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/settings/BSSerializer.test.js +0 -346
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/settings/menuItemsBuilder.test.js +0 -226
- package/src/legacy/tool-ui/src/main/webapp/v4/__tests__/unit/rte/utilities.test.js +0 -118
- package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/Appetizeio.js +0 -5
- package/src/legacy/tool-ui/src/main/webapp/v4/appetizeio/AppetizeioEmbedded.js +0 -113
- package/src/legacy/tool-ui/src/main/webapp/v4/compat/Fetch.js +0 -16
- package/src/legacy/tool-ui/src/main/webapp/v4/compat/jquery.js +0 -32
- package/src/legacy/tool-ui/src/main/webapp/v4/compat/requirejs.js +0 -13
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/Tether.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/TetherLayout.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/closest.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/create.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/find.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/findAll.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifClick.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifMatches.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/ifUnmodified.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/index.js +0 -5
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertBefore.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertFirst.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/insertLast.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/onFind.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/onFindOnce.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/onRTEReady.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/onRemove.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/onVisible.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/previousUntil.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/dom/resolveIconCompat.js +0 -40
- package/src/legacy/tool-ui/src/main/webapp/v4/rtc/Socket.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/rtc/index.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/ProseMirror.js +0 -909
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/README.md +0 -68
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/codemirror-shim.d.ts +0 -8
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/codemirror-shim.js +0 -274
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/collab-workflow.jpeg +0 -0
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/interchangeable.ts +0 -250
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/mention.js +0 -90
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/PluginProvider.js +0 -124
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/README.md +0 -46
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/AIInlineManager.ts +0 -124
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_inline_manager/views/AIInlineView.ts +0 -1019
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/ai_manager/AiManager.ts +0 -199
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/CollabManager.js +0 -339
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/collab_manager/views/AvatarView.js +0 -96
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/comment_manager/CommentManager.js +0 -348
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/CustomKeyboard.js +0 -110
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/custom_keyboard/README.md +0 -29
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/EnhancementManager.js +0 -428
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/README.md +0 -63
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/commands.js +0 -690
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/constants.js +0 -12
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/enhancement-creation.jpeg +0 -0
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/index.js +0 -15
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/rte-flow.jpeg +0 -0
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/ActionButtonView.js +0 -86
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/BlockSubmenuView.js +0 -60
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/EnhancementView.js +0 -208
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/PreviewView.js +0 -102
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/enhancement_manager/views/SubmenuView.js +0 -365
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/FindReplaceManager.js +0 -239
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/find_replace_manager/views/FindView.js +0 -604
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/FullscreenManager.js +0 -57
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/README.md +0 -26
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/commands.js +0 -16
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/index.js +0 -4
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/fullscreen_manager/views/FullscreenView.js +0 -474
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/html_editor_manager/htmlEditorManager.js +0 -66
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/html_editor_manager/views/HtmlEditorView.js +0 -97
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/ListManager.js +0 -342
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/README.md +0 -50
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/commands.js +0 -207
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/constants.js +0 -26
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/list_manager/index.js +0 -4
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/Menubar.js +0 -485
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/README.md +0 -40
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/menubar/views/MenuView.js +0 -842
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/paste_manager/PasteManager.js +0 -368
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/placeholder_manager/PlaceHolderManager.js +0 -128
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/raw_text_manager/README.md +0 -13
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/raw_text_manager/RawTextManager.js +0 -96
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/index.js +0 -3
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck-plugin.js +0 -280
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/spellcheck/spellcheck-service.js +0 -94
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/TableManager.js +0 -57
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/commands.js +0 -97
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableSizerView.js +0 -88
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/table_manager/views/TableView.js +0 -613
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/track_manager/README.md +0 -13
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/plugins/track_manager/TrackManager.js +0 -905
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/BSSerializer.js +0 -819
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/README.md +0 -80
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/commands.js +0 -98
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/constants.d.ts +0 -84
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/constants.js +0 -87
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/index.js +0 -13
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/keymapBuilder.js +0 -223
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/menuItemsBuilder.js +0 -559
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/settings/schemaBuilder.js +0 -1281
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/utilities.d.ts +0 -4
- package/src/legacy/tool-ui/src/main/webapp/v4/rte/utilities.js +0 -359
- package/src/legacy/tool-ui/src/main/webapp/v4/theme/ColorRotator.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/util/debounce.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/util/getComponentKey.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/util/noise.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/util/repaint.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/util/storage.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/util/throttle.js +0 -1
- package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentContent.js +0 -33
- package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssignmentDeskDashboard.js +0 -217
- package/src/legacy/tool-ui/src/main/webapp/v4/widget/AssociatedContentWidget.js +0 -7
- package/src/legacy/tool-ui/src/main/webapp/v4/widget/BulkUpload.js +0 -19
- package/src/legacy/tool-ui/src/main/webapp/v4/widget/Calendar.js +0 -7
- package/src/legacy/tool-ui/src/main/webapp/v4/widget/ClosableWindow.js +0 -13
- package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchAssignments.js +0 -25
- package/src/legacy/tool-ui/src/main/webapp/v4/widget/PitchContent.js +0 -33
- package/src/legacy/tool-ui/src/main/webapp/v4/widget/Revisions.js +0 -61
|
@@ -1,905 +0,0 @@
|
|
|
1
|
-
import { Plugin, PluginKey, TextSelection } from 'prosemirror-state'
|
|
2
|
-
import { ChangeSet } from 'prosemirror-changeset'
|
|
3
|
-
//import { DefaultEncoder } from 'prosemirror-changeset/src/diff.ts' // Use this when converting to TypeScript
|
|
4
|
-
|
|
5
|
-
const key = new PluginKey('track')
|
|
6
|
-
const incompatibleMarks = ['comment']
|
|
7
|
-
const PENDING = RTE_PENDING || 'Pending' /* global RTE_PENDING */
|
|
8
|
-
|
|
9
|
-
const removeEntireLine = (previousNode) => {
|
|
10
|
-
return (
|
|
11
|
-
previousNode?.isBlock &&
|
|
12
|
-
previousNode?.content.size > 0 &&
|
|
13
|
-
previousNode?.content.content.every((n) =>
|
|
14
|
-
n.marks.some((mark) => mark.type.name === 'del'),
|
|
15
|
-
)
|
|
16
|
-
)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
const removeMark = (tr, node, markType, from, to) => {
|
|
20
|
-
if (node.isBlock) {
|
|
21
|
-
const marks = node.marks.slice().filter((mark) => mark.type !== markType)
|
|
22
|
-
tr = tr.setNodeMarkup(from, node.type, node.attrs, marks)
|
|
23
|
-
} else {
|
|
24
|
-
tr = tr.removeMark(from, to, markType)
|
|
25
|
-
}
|
|
26
|
-
return tr
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
const isAllInserts = (slice) => {
|
|
30
|
-
let isAllInserts = true
|
|
31
|
-
|
|
32
|
-
slice.content.descendants((child) => {
|
|
33
|
-
if (child.type.name !== 'line' && isAllInserts) {
|
|
34
|
-
isAllInserts = child.marks.some((mark) => mark.type.name === 'ins')
|
|
35
|
-
}
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
return isAllInserts
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* The 'id' of the Enhancement is copied as a 'data-' attribute on the
|
|
43
|
-
* 'ins' and 'del' marks for identification when an Enhancement is moved.
|
|
44
|
-
*/
|
|
45
|
-
const marksHaveSameTargetId = (nodeA, nodeB) => {
|
|
46
|
-
const markA = nodeA.marks.find(
|
|
47
|
-
(mark) => mark.attrs['data-target-id'] !== undefined,
|
|
48
|
-
)
|
|
49
|
-
const markB = nodeB.marks.find(
|
|
50
|
-
(mark) => mark.attrs['data-target-id'] !== undefined,
|
|
51
|
-
)
|
|
52
|
-
return (
|
|
53
|
-
markA &&
|
|
54
|
-
markB &&
|
|
55
|
-
markA.attrs['data-target-id'] === markB.attrs['data-target-id']
|
|
56
|
-
)
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Command triggered when user engages tracking. Dispatches
|
|
61
|
-
* a meta update to toggle the tracking state.
|
|
62
|
-
*/
|
|
63
|
-
const doTrack = () => {
|
|
64
|
-
return function (state, dispatch, doc) {
|
|
65
|
-
const isActive = state.track$.get('activeStates').get('trackChanges')
|
|
66
|
-
const storage = window.sessionStorage
|
|
67
|
-
const contentId = doc.props.props.ctx.name
|
|
68
|
-
const toggleKey = 'BSP.TrackChanges.toggleOn.' + contentId
|
|
69
|
-
if (isActive) {
|
|
70
|
-
PubSub.publish('disengageTrackManager')
|
|
71
|
-
storage.removeItem(toggleKey)
|
|
72
|
-
} else {
|
|
73
|
-
PubSub.publish('engageTrackManager')
|
|
74
|
-
storage.setItem(toggleKey, 1)
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
dispatch(
|
|
78
|
-
state.tr.setMeta(key, {
|
|
79
|
-
toggleTracking: true,
|
|
80
|
-
}),
|
|
81
|
-
)
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const togglePreview = () => {
|
|
86
|
-
return function (state, dispatch, editorView) {
|
|
87
|
-
dispatch(
|
|
88
|
-
state.tr.setMeta(key, {
|
|
89
|
-
togglePreview: true,
|
|
90
|
-
}),
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
editorView.dom.classList.toggle('ProseMirror-previewMode')
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* This method does the actual work of deleting marks and nodes
|
|
99
|
-
* as appropriate for the type of action.
|
|
100
|
-
*
|
|
101
|
-
* @param {ProseMirror.EditorState} state
|
|
102
|
-
* @param {ProseMirror.Dispatch} dispatch
|
|
103
|
-
* @param {string} type Indicates the type of action - should be `accept`
|
|
104
|
-
* or `reject`
|
|
105
|
-
*/
|
|
106
|
-
const handleAcceptReject = (state, dispatch, view, type) => {
|
|
107
|
-
const trackChangesState = state.track$.get('activeStates').get('trackChanges')
|
|
108
|
-
state.track$.get('activeStates').set('trackChanges', false)
|
|
109
|
-
const { $cursor, ranges } = state.selection
|
|
110
|
-
let tr = state.tr
|
|
111
|
-
const insertMark = state.schema.marks.ins
|
|
112
|
-
const deleteMark = state.schema.marks.del
|
|
113
|
-
let removeMarkType = insertMark
|
|
114
|
-
let removeNodeType = deleteMark
|
|
115
|
-
|
|
116
|
-
if (type === 'reject') {
|
|
117
|
-
removeMarkType = deleteMark
|
|
118
|
-
removeNodeType = insertMark
|
|
119
|
-
}
|
|
120
|
-
// User has clicked onto the editor but did not select any text.
|
|
121
|
-
if ($cursor) {
|
|
122
|
-
if (
|
|
123
|
-
removeMarkType.isInSet(
|
|
124
|
-
state.storedMarks ||
|
|
125
|
-
$cursor.marksAcross(state.selection.$cursor) ||
|
|
126
|
-
$cursor.marks(),
|
|
127
|
-
)
|
|
128
|
-
) {
|
|
129
|
-
const nodeWithMark = state.doc.nodeAt($cursor.pos)
|
|
130
|
-
state.doc.descendants((node, pos, parent) => {
|
|
131
|
-
if (nodeWithMark === node) {
|
|
132
|
-
tr = tr.removeMark(pos, pos + node.nodeSize, removeMarkType)
|
|
133
|
-
}
|
|
134
|
-
})
|
|
135
|
-
}
|
|
136
|
-
if (
|
|
137
|
-
removeNodeType.isInSet(
|
|
138
|
-
state.storedMarks ||
|
|
139
|
-
$cursor.marksAcross(state.selection.$cursor) ||
|
|
140
|
-
$cursor.marks(),
|
|
141
|
-
)
|
|
142
|
-
) {
|
|
143
|
-
const nodeWithMark = state.doc.nodeAt($cursor.pos)
|
|
144
|
-
state.doc.descendants((node, pos, parent) => {
|
|
145
|
-
if (nodeWithMark === node) {
|
|
146
|
-
tr = tr.delete(pos, pos + node.nodeSize)
|
|
147
|
-
}
|
|
148
|
-
})
|
|
149
|
-
}
|
|
150
|
-
} else {
|
|
151
|
-
// We keep track of all the different nodes when user has highlighted
|
|
152
|
-
// a selection because the user could highlight both nodes that are marked
|
|
153
|
-
// for insertion as well as deletion in 1 highlight. We are using a set
|
|
154
|
-
// to make sure only unique nodes are stored.
|
|
155
|
-
let numDeleted = 0
|
|
156
|
-
let lastLineDeleted = 0
|
|
157
|
-
state.selection.content().content.descendants((nodeWithMark) => {
|
|
158
|
-
const marks = nodeWithMark.marks
|
|
159
|
-
if (removeMarkType.isInSet(marks)) {
|
|
160
|
-
state.doc.descendants((node, pos) => {
|
|
161
|
-
if (nodeWithMark === node) {
|
|
162
|
-
const from = pos - numDeleted
|
|
163
|
-
tr = removeMark(
|
|
164
|
-
tr,
|
|
165
|
-
node,
|
|
166
|
-
removeMarkType,
|
|
167
|
-
from,
|
|
168
|
-
from + node.nodeSize,
|
|
169
|
-
)
|
|
170
|
-
}
|
|
171
|
-
})
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
if (removeNodeType.isInSet(marks)) {
|
|
175
|
-
state.doc.descendants((node, pos, parent) => {
|
|
176
|
-
// If a line has been deleted, we don't want to delete any nodes inside again
|
|
177
|
-
if (nodeWithMark === node && pos > lastLineDeleted) {
|
|
178
|
-
const previousNode = state.doc.nodeAt(pos - 1)
|
|
179
|
-
if (previousNode === parent && removeEntireLine(previousNode)) {
|
|
180
|
-
tr = tr.delete(
|
|
181
|
-
pos - 1 - numDeleted,
|
|
182
|
-
pos - 1 + parent.nodeSize - numDeleted,
|
|
183
|
-
)
|
|
184
|
-
numDeleted = numDeleted + parent.nodeSize
|
|
185
|
-
lastLineDeleted = pos - 1 + parent.nodeSize
|
|
186
|
-
} else {
|
|
187
|
-
tr = tr.delete(pos - numDeleted, pos + node.nodeSize - numDeleted)
|
|
188
|
-
numDeleted = numDeleted + node.nodeSize
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
})
|
|
192
|
-
}
|
|
193
|
-
})
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
dispatch(tr)
|
|
197
|
-
state = view.state
|
|
198
|
-
tr = state.tr
|
|
199
|
-
tr = tr.setMeta(key, {
|
|
200
|
-
toggleTracking: true,
|
|
201
|
-
})
|
|
202
|
-
dispatch(tr)
|
|
203
|
-
state.track$.get('activeStates').set('trackChanges', trackChangesState)
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* The command fired when users accept tracked changes. Insert marks will be removed
|
|
208
|
-
* and nodes with delete marks around them will be removed entirely. When a user
|
|
209
|
-
* clicks onto a node with either mark, we will delete the entire mark/remove the node, accordingly.
|
|
210
|
-
* When the user selects text/node, we will delete the entire mark/remove the node, accordingly, even
|
|
211
|
-
* if the user only selected part of the mark.
|
|
212
|
-
*/
|
|
213
|
-
const acceptChanges = () => {
|
|
214
|
-
return function (state, dispatch, view) {
|
|
215
|
-
handleAcceptReject(state, dispatch, view, 'accept')
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
/**
|
|
220
|
-
* The command fire when users reject all changes.
|
|
221
|
-
*/
|
|
222
|
-
const rejectChangesAll = () => {
|
|
223
|
-
return function (state, dispatch, view) {
|
|
224
|
-
const trackChangesState = state.track$
|
|
225
|
-
.get('activeStates')
|
|
226
|
-
.get('trackChanges')
|
|
227
|
-
state.track$.get('activeStates').set('trackChanges', false)
|
|
228
|
-
const delType = state.schema.marks.del
|
|
229
|
-
let tr = state.tr
|
|
230
|
-
let numDeleted = 0
|
|
231
|
-
state.doc.descendants((node, pos) => {
|
|
232
|
-
const marks = node.marks
|
|
233
|
-
const hasDel = marks.some((mark) => {
|
|
234
|
-
return mark.type.name === 'del'
|
|
235
|
-
})
|
|
236
|
-
if (hasDel) {
|
|
237
|
-
tr = removeMark(
|
|
238
|
-
tr,
|
|
239
|
-
node,
|
|
240
|
-
delType,
|
|
241
|
-
pos - numDeleted,
|
|
242
|
-
pos + node.nodeSize - numDeleted,
|
|
243
|
-
)
|
|
244
|
-
}
|
|
245
|
-
const hasIns = marks.some((mark) => {
|
|
246
|
-
return mark.type.name === 'ins'
|
|
247
|
-
})
|
|
248
|
-
if (hasIns) {
|
|
249
|
-
tr = tr.delete(pos - numDeleted, pos + node.nodeSize - numDeleted)
|
|
250
|
-
numDeleted = numDeleted + node.nodeSize
|
|
251
|
-
}
|
|
252
|
-
})
|
|
253
|
-
|
|
254
|
-
dispatch(tr)
|
|
255
|
-
state = view.state
|
|
256
|
-
tr = state.tr
|
|
257
|
-
tr = tr.setMeta(key, 'triggerUpdate')
|
|
258
|
-
dispatch(tr)
|
|
259
|
-
tr = tr.setMeta(key, {
|
|
260
|
-
toggleTracking: true,
|
|
261
|
-
})
|
|
262
|
-
dispatch(tr)
|
|
263
|
-
state.track$.get('activeStates').set('trackChanges', trackChangesState)
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
/**
|
|
268
|
-
* The command fired when users accept all changes.
|
|
269
|
-
*/
|
|
270
|
-
const acceptChangesAll = () => {
|
|
271
|
-
return function (state, dispatch, view) {
|
|
272
|
-
const trackChangesState = state.track$
|
|
273
|
-
.get('activeStates')
|
|
274
|
-
.get('trackChanges')
|
|
275
|
-
state.track$.get('activeStates').set('trackChanges', false)
|
|
276
|
-
const insType = state.schema.marks.ins
|
|
277
|
-
let tr = state.tr
|
|
278
|
-
let numDeleted = 0
|
|
279
|
-
let lastLineDeleted = 0
|
|
280
|
-
state.doc.descendants((node, pos, parent) => {
|
|
281
|
-
const marks = node.marks
|
|
282
|
-
const hasIns = marks.some((mark) => mark.type.name === 'ins')
|
|
283
|
-
if (hasIns) {
|
|
284
|
-
const from = pos - numDeleted
|
|
285
|
-
tr = removeMark(tr, node, insType, from, from + node.nodeSize)
|
|
286
|
-
}
|
|
287
|
-
const hasDel = marks.some((mark) => {
|
|
288
|
-
return mark.type.name === 'del'
|
|
289
|
-
})
|
|
290
|
-
// If a line has been deleted, we don't want to delete any nodes inside again
|
|
291
|
-
if (hasDel && pos > lastLineDeleted) {
|
|
292
|
-
const previousNode = state.doc.nodeAt(pos - 1)
|
|
293
|
-
if (previousNode === parent && removeEntireLine(previousNode)) {
|
|
294
|
-
tr = tr.delete(
|
|
295
|
-
pos - 1 - numDeleted,
|
|
296
|
-
pos - 1 + parent.nodeSize - numDeleted,
|
|
297
|
-
)
|
|
298
|
-
numDeleted = numDeleted + parent.nodeSize
|
|
299
|
-
lastLineDeleted = pos - 1 + parent.nodeSize
|
|
300
|
-
} else {
|
|
301
|
-
tr = tr.delete(pos - numDeleted, pos + node.nodeSize - numDeleted)
|
|
302
|
-
numDeleted = numDeleted + node.nodeSize
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
})
|
|
306
|
-
|
|
307
|
-
dispatch(tr)
|
|
308
|
-
state = view.state
|
|
309
|
-
tr = state.tr
|
|
310
|
-
tr = tr.setMeta(key, 'triggerUpdate')
|
|
311
|
-
dispatch(tr)
|
|
312
|
-
tr = tr.setMeta(key, {
|
|
313
|
-
toggleTracking: true,
|
|
314
|
-
})
|
|
315
|
-
dispatch(tr)
|
|
316
|
-
state.track$.get('activeStates').set('trackChanges', trackChangesState)
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
* The command fired when users reject tracked changes. Delete marks will be removed
|
|
322
|
-
* and nodes with ins marks around them will be removed entirely. When a user
|
|
323
|
-
* clicks onto a node with either mark, we will delete the entire mark/remove the node, accordingly.
|
|
324
|
-
* When the user selects text/node, we will delete the entire mark/remove the node, accordingly, even
|
|
325
|
-
* if the user only selected part of the mark.
|
|
326
|
-
*/
|
|
327
|
-
const rejectChanges = () => {
|
|
328
|
-
return function (state, dispatch, view) {
|
|
329
|
-
handleAcceptReject(state, dispatch, view, 'reject')
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
const handleInsertion = (change, newState, markType, tr, userLabel, userId) => {
|
|
334
|
-
const { fromB, toB } = change
|
|
335
|
-
const slice = newState.doc.slice(fromB, toB)
|
|
336
|
-
const markedBlocks = []
|
|
337
|
-
|
|
338
|
-
const mark = markType.create({
|
|
339
|
-
'data-user-label': userLabel,
|
|
340
|
-
'data-time': PENDING,
|
|
341
|
-
'data-user-id': userId,
|
|
342
|
-
title: `${userLabel}: ${PENDING}`,
|
|
343
|
-
})
|
|
344
|
-
|
|
345
|
-
// The set of "return" checks are for RTE editor inserts that should go through
|
|
346
|
-
// without being wrapped in 'ins' tag for tracking.
|
|
347
|
-
if (
|
|
348
|
-
[...incompatibleMarks].some((mark) => {
|
|
349
|
-
return newState.doc.rangeHasMark(
|
|
350
|
-
change.fromB,
|
|
351
|
-
change.toB,
|
|
352
|
-
newState.schema.marks[mark],
|
|
353
|
-
)
|
|
354
|
-
})
|
|
355
|
-
) {
|
|
356
|
-
return tr
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
// Slice is nothing but new inserts.
|
|
360
|
-
if (isAllInserts(slice)) {
|
|
361
|
-
return tr
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
tr = tr.addMark(fromB, toB, mark)
|
|
365
|
-
|
|
366
|
-
// Block nodes won't have mark applied with 'addMark' method so must alternatively add
|
|
367
|
-
// via the 'setNodeMarkup' method.
|
|
368
|
-
slice.content.forEach((node, offset) => {
|
|
369
|
-
tr.doc.forEach((child, offset, index) => {
|
|
370
|
-
if (
|
|
371
|
-
child.isBlock &&
|
|
372
|
-
child.attrs.id &&
|
|
373
|
-
node.eq(child) &&
|
|
374
|
-
!markedBlocks.includes(child)
|
|
375
|
-
) {
|
|
376
|
-
markedBlocks.push(child)
|
|
377
|
-
const mark = markType.create({
|
|
378
|
-
'data-user-label': userLabel,
|
|
379
|
-
'data-time': PENDING,
|
|
380
|
-
'data-user-id': userId,
|
|
381
|
-
'data-target-id': node?.attrs?.id,
|
|
382
|
-
title: `${userLabel}: ${PENDING}`,
|
|
383
|
-
})
|
|
384
|
-
const marks = node.marks.slice()
|
|
385
|
-
marks.push(mark)
|
|
386
|
-
tr = tr.setNodeMarkup(offset, node.type, node.attrs, marks)
|
|
387
|
-
}
|
|
388
|
-
})
|
|
389
|
-
})
|
|
390
|
-
|
|
391
|
-
return tr
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
const handleDeletion = (
|
|
395
|
-
changes,
|
|
396
|
-
change,
|
|
397
|
-
oldState,
|
|
398
|
-
newState,
|
|
399
|
-
markType,
|
|
400
|
-
markTypeDeleted,
|
|
401
|
-
tr,
|
|
402
|
-
transactions,
|
|
403
|
-
index,
|
|
404
|
-
userLabel,
|
|
405
|
-
originalTransaction,
|
|
406
|
-
userId,
|
|
407
|
-
) => {
|
|
408
|
-
const meta = transactions[index].getMeta(key)
|
|
409
|
-
if (meta && meta.hasOwnProperty('acceptDeletion')) {
|
|
410
|
-
return tr
|
|
411
|
-
}
|
|
412
|
-
const { fromA, toA } = change
|
|
413
|
-
const slice = oldState.doc.slice(fromA, toA)
|
|
414
|
-
const markedBlocks = []
|
|
415
|
-
let replaceOffset = 0
|
|
416
|
-
|
|
417
|
-
const mark = markTypeDeleted.create({
|
|
418
|
-
'data-user-label': userLabel,
|
|
419
|
-
'data-time': PENDING,
|
|
420
|
-
'data-user-id': userId,
|
|
421
|
-
title: `${userLabel}: ${PENDING}`,
|
|
422
|
-
})
|
|
423
|
-
|
|
424
|
-
// The set of "return" checks are for RTE editor deletes that should go through
|
|
425
|
-
// without being wrapped in 'del' tag for tracking.
|
|
426
|
-
if (
|
|
427
|
-
[...incompatibleMarks].some((mark) => {
|
|
428
|
-
return oldState.doc.rangeHasMark(
|
|
429
|
-
change.fromA,
|
|
430
|
-
change.toA,
|
|
431
|
-
oldState.schema.marks[mark],
|
|
432
|
-
)
|
|
433
|
-
})
|
|
434
|
-
) {
|
|
435
|
-
return tr
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
// Slice is nothing but new inserts.
|
|
439
|
-
if (isAllInserts(slice)) {
|
|
440
|
-
return tr
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
// Classify whether the slice contains incompatible marks (e.g. comment) and/or
|
|
444
|
-
// non-incompatible text nodes to decide how to handle deletion tracking.
|
|
445
|
-
let hasIncompatible = false
|
|
446
|
-
let hasNonIncompatibleText = false
|
|
447
|
-
slice.content.descendants((child) => {
|
|
448
|
-
if (child.isText) {
|
|
449
|
-
const isIncompat = incompatibleMarks.some((name) =>
|
|
450
|
-
oldState.schema.marks[name].isInSet(child.marks),
|
|
451
|
-
)
|
|
452
|
-
if (isIncompat) hasIncompatible = true
|
|
453
|
-
else hasNonIncompatibleText = true
|
|
454
|
-
}
|
|
455
|
-
})
|
|
456
|
-
|
|
457
|
-
// All incompatible (e.g. cursor backspace within a comment): let deletion run untracked.
|
|
458
|
-
if (hasIncompatible && !hasNonIncompatibleText) {
|
|
459
|
-
return tr
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
const isMixed = hasIncompatible && hasNonIncompatibleText
|
|
463
|
-
|
|
464
|
-
// An already marked node that was moved (up|down).
|
|
465
|
-
if (
|
|
466
|
-
slice.size === 1 &&
|
|
467
|
-
slice.content.firstChild.marks.some(
|
|
468
|
-
(mark) => mark.type.name === markType.name,
|
|
469
|
-
)
|
|
470
|
-
) {
|
|
471
|
-
return tr
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
const nodeType = slice.content.firstChild.type
|
|
475
|
-
if (
|
|
476
|
-
nodeType.name === 'bspBreak' ||
|
|
477
|
-
nodeType.name === 'listItem' ||
|
|
478
|
-
nodeType.name === 'listItemDiv' ||
|
|
479
|
-
nodeType.name === 'orderedList' ||
|
|
480
|
-
nodeType.name === 'table' ||
|
|
481
|
-
nodeType.name === 'tableCell' ||
|
|
482
|
-
nodeType.name === 'tableRow' ||
|
|
483
|
-
nodeType.name === 'unorderedList' ||
|
|
484
|
-
nodeType.name === 'ul' ||
|
|
485
|
-
nodeType.name === 'ol' ||
|
|
486
|
-
nodeType.groups.indexOf('aligned') > -1
|
|
487
|
-
) {
|
|
488
|
-
return tr
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
// When a enhancement is moved via the up|down arrows there are 2 steps in transaction
|
|
492
|
-
// accounting for a delete and an insert and if so we must account for the potential offset.
|
|
493
|
-
if (changes.length > 1) {
|
|
494
|
-
// Pressing the down arrow does a delete and then an insert. Pressing the up arrow does
|
|
495
|
-
// the opposite so the offset needs to reflect if an actual insert was done prior.
|
|
496
|
-
replaceOffset = tr.steps.length === 0 ? 0 : 1
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
// N.B. Can not use ProseMirror 'insert' since only a Slice will potentially join when cut
|
|
500
|
-
// between block nodes and the 'insert' command only takes a Fragment|Node.
|
|
501
|
-
tr = tr.replaceRange(fromA + replaceOffset, fromA + replaceOffset, slice)
|
|
502
|
-
|
|
503
|
-
// Mixed case: selection spans comment-marked and non-comment text. Apply del marks only
|
|
504
|
-
// to non-comment text nodes; leave comment nodes untouched.
|
|
505
|
-
if (isMixed) {
|
|
506
|
-
const searchStart = fromA + replaceOffset
|
|
507
|
-
const searchEnd = searchStart + slice.content.size
|
|
508
|
-
tr.doc.nodesBetween(searchStart, searchEnd, (node, pos) => {
|
|
509
|
-
if (node.isText) {
|
|
510
|
-
const isIncompat = incompatibleMarks.some((name) =>
|
|
511
|
-
oldState.schema.marks[name].isInSet(node.marks),
|
|
512
|
-
)
|
|
513
|
-
if (!isIncompat) {
|
|
514
|
-
// Clamp to [searchStart, searchEnd] — adjacent text nodes may have been merged
|
|
515
|
-
// by replaceRange, extending the node beyond the re-inserted range.
|
|
516
|
-
const markFrom = Math.max(pos, searchStart)
|
|
517
|
-
const markTo = Math.min(pos + node.nodeSize, searchEnd)
|
|
518
|
-
tr = tr.addMark(markFrom, markTo, mark)
|
|
519
|
-
}
|
|
520
|
-
}
|
|
521
|
-
})
|
|
522
|
-
|
|
523
|
-
// Delete any ins-marked nodes within the range; leave comment nodes in place.
|
|
524
|
-
const mixedDeletions = []
|
|
525
|
-
tr.doc.nodesBetween(searchStart, searchEnd, (node, pos) => {
|
|
526
|
-
if (node.marks.some((m) => m.type.name === 'ins')) {
|
|
527
|
-
mixedDeletions.push({ from: pos, to: pos + node.nodeSize })
|
|
528
|
-
return false
|
|
529
|
-
}
|
|
530
|
-
})
|
|
531
|
-
mixedDeletions.sort((a, b) => b.from - a.from)
|
|
532
|
-
mixedDeletions.forEach((range) => {
|
|
533
|
-
tr = tr.delete(range.from, range.to)
|
|
534
|
-
})
|
|
535
|
-
|
|
536
|
-
return tr
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
tr = tr.addMark(fromA, toA, mark)
|
|
540
|
-
|
|
541
|
-
// Block nodes won't have mark applied with 'addMark' method so must alternatively add the
|
|
542
|
-
// mark via the 'setNodeMarkup' method.
|
|
543
|
-
slice.content.forEach((node, offset) => {
|
|
544
|
-
tr.doc.forEach((child, offset, index) => {
|
|
545
|
-
if (
|
|
546
|
-
child.isBlock &&
|
|
547
|
-
child.attrs.id &&
|
|
548
|
-
node.eq(child) &&
|
|
549
|
-
!markedBlocks.includes(child)
|
|
550
|
-
) {
|
|
551
|
-
markedBlocks.push(child)
|
|
552
|
-
const mark = markTypeDeleted.create({
|
|
553
|
-
'data-user-label': userLabel,
|
|
554
|
-
'data-time': PENDING,
|
|
555
|
-
'data-user-id': userId,
|
|
556
|
-
'data-target-id': node?.attrs?.id,
|
|
557
|
-
title: `${userLabel}: ${PENDING}`,
|
|
558
|
-
})
|
|
559
|
-
const marks = node.marks.slice()
|
|
560
|
-
marks.push(mark)
|
|
561
|
-
tr = tr.setNodeMarkup(offset, node.type, node.attrs, marks)
|
|
562
|
-
}
|
|
563
|
-
})
|
|
564
|
-
})
|
|
565
|
-
|
|
566
|
-
// Now truly delete any inserts or incompatible marks from selection.
|
|
567
|
-
const deletions = []
|
|
568
|
-
const searchStart = fromA + replaceOffset
|
|
569
|
-
const searchEnd = searchStart + slice.content.size
|
|
570
|
-
tr.doc.nodesBetween(searchStart, searchEnd, (node, pos) => {
|
|
571
|
-
if (
|
|
572
|
-
node.marks.some(
|
|
573
|
-
(mark) =>
|
|
574
|
-
mark.type.name === 'ins' ||
|
|
575
|
-
incompatibleMarks.includes(mark.type.name),
|
|
576
|
-
)
|
|
577
|
-
) {
|
|
578
|
-
deletions.push({ from: pos, to: pos + node.nodeSize })
|
|
579
|
-
return false // don't descend into nodes we'll delete
|
|
580
|
-
}
|
|
581
|
-
})
|
|
582
|
-
|
|
583
|
-
// Reverse order to avoid offset issues when deleting multiple nodes
|
|
584
|
-
deletions.sort((a, b) => b.from - a.from)
|
|
585
|
-
|
|
586
|
-
deletions.forEach((range) => {
|
|
587
|
-
tr = tr.delete(range.from, range.to)
|
|
588
|
-
})
|
|
589
|
-
|
|
590
|
-
return tr
|
|
591
|
-
}
|
|
592
|
-
|
|
593
|
-
/**
|
|
594
|
-
* Tallies the number of tracked change marks.
|
|
595
|
-
*
|
|
596
|
-
* @param {ProseMirror.Model.Node} doc The top-level node.
|
|
597
|
-
* @return {number} The number of tracked change marks.
|
|
598
|
-
*/
|
|
599
|
-
const getNumTrackedChanges = (doc) => {
|
|
600
|
-
let numChanges = 0
|
|
601
|
-
const targetIds = new Set()
|
|
602
|
-
doc.descendants((node) => {
|
|
603
|
-
const marks = node.marks
|
|
604
|
-
for (let mark of marks) {
|
|
605
|
-
if (mark.type.name === 'ins' || mark.type.name === 'del') {
|
|
606
|
-
const dataTargetId = mark.attrs?.['data-target-id']
|
|
607
|
-
if (dataTargetId && dataTargetId.length > 0) {
|
|
608
|
-
if (targetIds.has(mark.attrs['data-target-id'])) {
|
|
609
|
-
continue
|
|
610
|
-
} else {
|
|
611
|
-
targetIds.add(mark.attrs['data-target-id'])
|
|
612
|
-
}
|
|
613
|
-
}
|
|
614
|
-
|
|
615
|
-
numChanges++
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
})
|
|
619
|
-
return numChanges
|
|
620
|
-
}
|
|
621
|
-
|
|
622
|
-
/**
|
|
623
|
-
* The track plugin.
|
|
624
|
-
*
|
|
625
|
-
* @param {*} schema The RTE schema.
|
|
626
|
-
*/
|
|
627
|
-
const trackPlugin = (schema, userLabel, ctx) => {
|
|
628
|
-
return new Plugin({
|
|
629
|
-
key,
|
|
630
|
-
state: {
|
|
631
|
-
init(state) {
|
|
632
|
-
const pluginState = new Map()
|
|
633
|
-
const activeStates = new Map()
|
|
634
|
-
const disabledStates = new Map()
|
|
635
|
-
const metaData = new Map()
|
|
636
|
-
activeStates.set('trackChanges', false)
|
|
637
|
-
activeStates.set('acceptChanges', false)
|
|
638
|
-
activeStates.set('togglePreview', false)
|
|
639
|
-
disabledStates.set('acceptChanges', true)
|
|
640
|
-
disabledStates.set('rejectChanges', true)
|
|
641
|
-
const numChanges = getNumTrackedChanges(state.doc)
|
|
642
|
-
const toggleTrackChangesKey = 'BSP.TrackChanges.toggleOn.' + ctx.name
|
|
643
|
-
if (window.sessionStorage.getItem(toggleTrackChangesKey)) {
|
|
644
|
-
const subscription = PubSub.subscribe('rteLoaded', (rte) => {
|
|
645
|
-
PubSub.publish('engageTrackManager')
|
|
646
|
-
rte.view.dispatch(
|
|
647
|
-
rte.view.state.tr.setMeta(key, {
|
|
648
|
-
toggleTracking: true,
|
|
649
|
-
}),
|
|
650
|
-
)
|
|
651
|
-
subscription.remove()
|
|
652
|
-
})
|
|
653
|
-
}
|
|
654
|
-
if (numChanges) {
|
|
655
|
-
disabledStates.set('acceptChangesAll', false)
|
|
656
|
-
activeStates.set('acceptChangesAll', true)
|
|
657
|
-
disabledStates.set('rejectChangesAll', false)
|
|
658
|
-
activeStates.set('rejectChangesAll', true)
|
|
659
|
-
metaData.set('acceptChangesAll', numChanges)
|
|
660
|
-
metaData.set('rejectChangesAll', numChanges)
|
|
661
|
-
} else {
|
|
662
|
-
disabledStates.set('acceptChangesAll', true)
|
|
663
|
-
activeStates.set('acceptChangesAll', false)
|
|
664
|
-
metaData.set('acceptChangesAll', 0)
|
|
665
|
-
disabledStates.set('rejectChangesAll', true)
|
|
666
|
-
activeStates.set('rejectChangesAll', false)
|
|
667
|
-
metaData.set('rejectChangesAll', 0)
|
|
668
|
-
}
|
|
669
|
-
pluginState.set('activeStates', activeStates)
|
|
670
|
-
pluginState.set('disabledStates', disabledStates)
|
|
671
|
-
pluginState.set('metaData', metaData)
|
|
672
|
-
return pluginState
|
|
673
|
-
},
|
|
674
|
-
apply(transaction, value, oldState, newState) {
|
|
675
|
-
const pluginState = value
|
|
676
|
-
const meta = transaction.getMeta(key)
|
|
677
|
-
if (meta && meta.hasOwnProperty('toggleTracking')) {
|
|
678
|
-
const currentTrackState = pluginState
|
|
679
|
-
const newCurrentTrackState = !currentTrackState
|
|
680
|
-
.get('activeStates')
|
|
681
|
-
.get('trackChanges')
|
|
682
|
-
pluginState
|
|
683
|
-
.get('activeStates')
|
|
684
|
-
.set('trackChanges', newCurrentTrackState)
|
|
685
|
-
}
|
|
686
|
-
if (meta && meta.hasOwnProperty('togglePreview')) {
|
|
687
|
-
const currentTrackState = pluginState
|
|
688
|
-
const newCurrentPreviewState = !currentTrackState
|
|
689
|
-
.get('activeStates')
|
|
690
|
-
.get('togglePreview')
|
|
691
|
-
pluginState
|
|
692
|
-
.get('activeStates')
|
|
693
|
-
.set('togglePreview', newCurrentPreviewState)
|
|
694
|
-
}
|
|
695
|
-
const markType = schema.marks.ins
|
|
696
|
-
const markTypeDelete = schema.marks.del
|
|
697
|
-
const { $cursor, empty, ranges } = newState.selection
|
|
698
|
-
if (empty && $cursor) {
|
|
699
|
-
if (
|
|
700
|
-
markType.isInSet(newState.storedMarks || $cursor.marks()) ||
|
|
701
|
-
markTypeDelete.isInSet(newState.storedMarks || $cursor.marks())
|
|
702
|
-
) {
|
|
703
|
-
pluginState.get('activeStates').set('acceptChanges', true)
|
|
704
|
-
pluginState.get('activeStates').set('rejectChanges', true)
|
|
705
|
-
pluginState.get('disabledStates').set('acceptChanges', false)
|
|
706
|
-
pluginState.get('disabledStates').set('rejectChanges', false)
|
|
707
|
-
} else {
|
|
708
|
-
pluginState.get('activeStates').set('acceptChanges', false)
|
|
709
|
-
pluginState.get('activeStates').set('rejectChanges', false)
|
|
710
|
-
pluginState.get('disabledStates').set('acceptChanges', true)
|
|
711
|
-
pluginState.get('disabledStates').set('rejectChanges', true)
|
|
712
|
-
}
|
|
713
|
-
} else {
|
|
714
|
-
if (ranges) {
|
|
715
|
-
ranges.forEach((range) => {
|
|
716
|
-
const { $from, $to } = range
|
|
717
|
-
const has =
|
|
718
|
-
newState.doc.rangeHasMark($from.pos, $to.pos, markType) ||
|
|
719
|
-
newState.doc.rangeHasMark($from.pos, $to.pos, markTypeDelete)
|
|
720
|
-
if (has) {
|
|
721
|
-
pluginState.get('activeStates').set('acceptChanges', true)
|
|
722
|
-
pluginState.get('activeStates').set('rejectChanges', true)
|
|
723
|
-
pluginState.get('disabledStates').set('acceptChanges', false)
|
|
724
|
-
pluginState.get('disabledStates').set('rejectChanges', false)
|
|
725
|
-
} else {
|
|
726
|
-
pluginState.get('activeStates').set('acceptChanges', true)
|
|
727
|
-
pluginState.get('activeStates').set('rejectChanges', true)
|
|
728
|
-
pluginState.get('disabledStates').set('acceptChanges', true)
|
|
729
|
-
pluginState.get('disabledStates').set('rejectChanges', true)
|
|
730
|
-
}
|
|
731
|
-
})
|
|
732
|
-
}
|
|
733
|
-
}
|
|
734
|
-
|
|
735
|
-
let numTrackChanges = getNumTrackedChanges(newState.doc)
|
|
736
|
-
if (numTrackChanges) {
|
|
737
|
-
pluginState.get('disabledStates').set('acceptChangesAll', false)
|
|
738
|
-
pluginState.get('activeStates').set('acceptChangesAll', true)
|
|
739
|
-
pluginState.get('metaData').set('acceptChangesAll', numTrackChanges)
|
|
740
|
-
pluginState.get('disabledStates').set('rejectChangesAll', false)
|
|
741
|
-
pluginState.get('activeStates').set('rejectChangesAll', true)
|
|
742
|
-
pluginState.get('metaData').set('rejectChangesAll', numTrackChanges)
|
|
743
|
-
} else {
|
|
744
|
-
pluginState.get('disabledStates').set('acceptChangesAll', true)
|
|
745
|
-
pluginState.get('activeStates').set('acceptChangesAll', false)
|
|
746
|
-
pluginState.get('metaData').set('acceptChangesAll', 0)
|
|
747
|
-
pluginState.get('disabledStates').set('rejectChangesAll', true)
|
|
748
|
-
pluginState.get('activeStates').set('rejectChangesAll', false)
|
|
749
|
-
pluginState.get('metaData').set('rejectChangesAll', 0)
|
|
750
|
-
}
|
|
751
|
-
|
|
752
|
-
transaction.setMeta('prevStateFromTo', {
|
|
753
|
-
prevFrom: oldState.selection.from,
|
|
754
|
-
prevTo: oldState.selection.to,
|
|
755
|
-
})
|
|
756
|
-
|
|
757
|
-
pluginState.set('prevPosition', oldState.selection.from)
|
|
758
|
-
return pluginState
|
|
759
|
-
},
|
|
760
|
-
},
|
|
761
|
-
appendTransaction(transactions, oldState, newState) {
|
|
762
|
-
const historyPlugin = newState.history$
|
|
763
|
-
if (
|
|
764
|
-
historyPlugin &&
|
|
765
|
-
historyPlugin.undone &&
|
|
766
|
-
historyPlugin.undone.eventCount
|
|
767
|
-
) {
|
|
768
|
-
return
|
|
769
|
-
}
|
|
770
|
-
const schema = newState.config.schema
|
|
771
|
-
const markType = schema.marks.ins
|
|
772
|
-
const markTypeDeleted = schema.marks.del
|
|
773
|
-
const pluginState = newState[key.key]
|
|
774
|
-
const userId = ctx.dataset.userId
|
|
775
|
-
|
|
776
|
-
const isTracking = pluginState.get('activeStates').get('trackChanges')
|
|
777
|
-
|
|
778
|
-
if (!isTracking || transactions[0].meta.appendedTransaction) {
|
|
779
|
-
return
|
|
780
|
-
}
|
|
781
|
-
|
|
782
|
-
let tr = newState.tr
|
|
783
|
-
transactions.forEach((transaction, index) => {
|
|
784
|
-
if (transaction.meta.removeFromTracking) {
|
|
785
|
-
return
|
|
786
|
-
}
|
|
787
|
-
|
|
788
|
-
// Copy of PM DefaultEncoder updated so compareTokens always returns null for whole word replacement
|
|
789
|
-
const changeSet = ChangeSet.create(oldState.doc, undefined, {
|
|
790
|
-
// Standard behavior: returns just the character, ignoring marks.
|
|
791
|
-
encodeCharacter: (char) => char,
|
|
792
|
-
// Standard behavior: returns the node type name.
|
|
793
|
-
encodeNodeStart: (node) => node.type.name,
|
|
794
|
-
// Standard behavior: returns a fixed value (e.g., -1) for all node ends.
|
|
795
|
-
encodeNodeEnd: (node) => {
|
|
796
|
-
const type = node.type
|
|
797
|
-
let cache =
|
|
798
|
-
type.schema.cached.changeSetIDs ||
|
|
799
|
-
(type.schema.cached.changeSetIDs = Object.create(null))
|
|
800
|
-
let id = cache[type.name]
|
|
801
|
-
if (id === null)
|
|
802
|
-
cache[type.name] = id =
|
|
803
|
-
Object.keys(type.schema.nodes).indexOf(type.name) + 1
|
|
804
|
-
return id
|
|
805
|
-
},
|
|
806
|
-
// Brightspot overriden so diff always returns false for whole word replacement.
|
|
807
|
-
compareTokens: (a, b) => false,
|
|
808
|
-
}).addSteps(newState.doc, transaction.mapping.maps)
|
|
809
|
-
|
|
810
|
-
if (changeSet.changes.length) {
|
|
811
|
-
if (
|
|
812
|
-
changeSet.changes[0].inserted.length &&
|
|
813
|
-
changeSet.changes[0].deleted.length
|
|
814
|
-
) {
|
|
815
|
-
// User highlighted text and then typed over it
|
|
816
|
-
changeSet.changes.forEach((change) => {
|
|
817
|
-
change.inserted.forEach((span) => {
|
|
818
|
-
tr = handleInsertion(
|
|
819
|
-
change,
|
|
820
|
-
newState,
|
|
821
|
-
markType,
|
|
822
|
-
tr,
|
|
823
|
-
userLabel,
|
|
824
|
-
userId,
|
|
825
|
-
)
|
|
826
|
-
tr = handleDeletion(
|
|
827
|
-
changeSet.changes,
|
|
828
|
-
change,
|
|
829
|
-
oldState,
|
|
830
|
-
newState,
|
|
831
|
-
markType,
|
|
832
|
-
markTypeDeleted,
|
|
833
|
-
tr,
|
|
834
|
-
transactions,
|
|
835
|
-
index,
|
|
836
|
-
userLabel,
|
|
837
|
-
transaction,
|
|
838
|
-
userId,
|
|
839
|
-
)
|
|
840
|
-
})
|
|
841
|
-
})
|
|
842
|
-
} else {
|
|
843
|
-
changeSet.changes.forEach((change) => {
|
|
844
|
-
change.inserted.forEach((span) => {
|
|
845
|
-
tr = handleInsertion(
|
|
846
|
-
change,
|
|
847
|
-
newState,
|
|
848
|
-
markType,
|
|
849
|
-
tr,
|
|
850
|
-
userLabel,
|
|
851
|
-
userId,
|
|
852
|
-
)
|
|
853
|
-
})
|
|
854
|
-
|
|
855
|
-
change.deleted.forEach((span) => {
|
|
856
|
-
tr = handleDeletion(
|
|
857
|
-
changeSet.changes,
|
|
858
|
-
change,
|
|
859
|
-
oldState,
|
|
860
|
-
newState,
|
|
861
|
-
markType,
|
|
862
|
-
markTypeDeleted,
|
|
863
|
-
tr,
|
|
864
|
-
transactions,
|
|
865
|
-
index,
|
|
866
|
-
userLabel,
|
|
867
|
-
transaction,
|
|
868
|
-
userId,
|
|
869
|
-
)
|
|
870
|
-
})
|
|
871
|
-
})
|
|
872
|
-
}
|
|
873
|
-
}
|
|
874
|
-
})
|
|
875
|
-
|
|
876
|
-
// ProseMirror defaults the cursor to the right of inserted content, but with Track
|
|
877
|
-
// enabled when the user hits [Backspace] the cursor should move to the left.
|
|
878
|
-
if (this.keyDown === 'Backspace' && tr.steps.length > 0) {
|
|
879
|
-
const from = tr.steps[0].from
|
|
880
|
-
const selection = new TextSelection(
|
|
881
|
-
tr.doc.resolve(from),
|
|
882
|
-
tr.doc.resolve(from),
|
|
883
|
-
)
|
|
884
|
-
tr = tr.setSelection(selection)
|
|
885
|
-
}
|
|
886
|
-
this.keyDown = undefined
|
|
887
|
-
|
|
888
|
-
return tr
|
|
889
|
-
},
|
|
890
|
-
props: {
|
|
891
|
-
handleKeyDown(view, event) {
|
|
892
|
-
this.keyDown = event.key
|
|
893
|
-
},
|
|
894
|
-
},
|
|
895
|
-
})
|
|
896
|
-
}
|
|
897
|
-
export {
|
|
898
|
-
trackPlugin,
|
|
899
|
-
doTrack,
|
|
900
|
-
rejectChanges,
|
|
901
|
-
acceptChanges,
|
|
902
|
-
togglePreview,
|
|
903
|
-
acceptChangesAll,
|
|
904
|
-
rejectChangesAll,
|
|
905
|
-
}
|