@modusoperandi/licit 0.13.1 → 0.13.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.
- package/.babelrc +54 -54
- package/.dockerignore +4 -4
- package/.eslintignore +3 -3
- package/.eslintrc.js +80 -80
- package/.flowconfig +37 -37
- package/.github/workflows/build.yml +29 -35
- package/.github/workflows/lint.yml +30 -30
- package/.prettierignore +5 -5
- package/.prettierrc +4 -4
- package/.stylelintignore +1 -1
- package/.stylelintrc.json +13 -13
- package/.travis.yml +18 -18
- package/CODEOWNERS +40 -40
- package/LICENSE +22 -22
- package/README.md +286 -286
- package/babel.config.json +54 -0
- package/build_collab_server.py +7 -7
- package/build_image_server.py +7 -7
- package/dist/BlockquoteInsertNewLineCommand.js.flow +55 -55
- package/dist/BlockquoteNodeSpec.js.flow +30 -30
- package/dist/BlockquoteToggleCommand.js.flow +34 -34
- package/dist/BookmarkNodeSpec.js.flow +39 -39
- package/dist/BulletListNodeSpec.js.flow +61 -61
- package/dist/CZIProseMirror.js.flow +90 -90
- package/dist/CodeBlockCommand.js +2 -2
- package/dist/CodeBlockCommand.js.flow +43 -43
- package/dist/CodeBlockNodeSpec.js.flow +24 -24
- package/dist/CodeMarkSpec.js.flow +14 -14
- package/dist/ContentPlaceholderPlugin.js.flow +187 -187
- package/dist/CursorPlaceholderPlugin.js.flow +115 -115
- package/dist/DocLayoutCommand.js +2 -4
- package/dist/DocLayoutCommand.js.flow +94 -94
- package/dist/DocNodeSpec.js.flow +64 -64
- package/dist/EMMarkSpec.js.flow +14 -14
- package/dist/EditorCommands.js +22 -34
- package/dist/EditorCommands.js.flow +128 -128
- package/dist/EditorKeyMap.js.flow +187 -187
- package/dist/EditorMarks.js.flow +71 -71
- package/dist/EditorNodes.js.flow +60 -60
- package/dist/EditorPageLayoutPlugin.js.flow +67 -67
- package/dist/EditorPlugins.js.flow +8 -8
- package/dist/EditorSchema.js.flow +12 -12
- package/dist/EditorState.js.flow +7 -7
- package/dist/FontSizeMarkSpec.js.flow +49 -49
- package/dist/FontTypeMarkSpec.js.flow +80 -80
- package/dist/HTMLMutator.js.flow +59 -59
- package/dist/HardBreakNodeSpec.js.flow +15 -15
- package/dist/HeadingNodeSpec.js.flow +54 -54
- package/dist/HistoryRedoCommand.js.flow +20 -20
- package/dist/HistoryUndoCommand.js.flow +20 -20
- package/dist/HorizontalRuleCommand.js.flow +49 -49
- package/dist/HorizontalRuleNodeSpec.js.flow +39 -39
- package/dist/ImageFromURLCommand.js.flow +14 -14
- package/dist/ImageNodeSpec.js.flow +90 -90
- package/dist/ImageSourceCommand.js +2 -4
- package/dist/ImageSourceCommand.js.flow +117 -117
- package/dist/ImageUploadCommand.js.flow +36 -36
- package/dist/ImageUploadPlaceholderPlugin.js.flow +192 -192
- package/dist/LinkMarkSpec.js.flow +32 -32
- package/dist/LinkSetURLCommand.js +4 -8
- package/dist/LinkSetURLCommand.js.flow +103 -103
- package/dist/LinkTooltipPlugin.js +9 -15
- package/dist/LinkTooltipPlugin.js.flow +203 -203
- package/dist/ListItemInsertNewLineCommand.js.flow +55 -55
- package/dist/ListItemMergeCommand.js.flow +177 -177
- package/dist/ListItemNodeSpec.js.flow +51 -51
- package/dist/ListSplitCommand.js.flow +32 -32
- package/dist/ListToggleCommand.js +4 -10
- package/dist/ListToggleCommand.js.flow +77 -77
- package/dist/MarkNames.js.flow +18 -18
- package/dist/MarksClearCommand.js +3 -3
- package/dist/MarksClearCommand.js.flow +42 -42
- package/dist/MathEditCommand.js +2 -2
- package/dist/MathEditCommand.js.flow +110 -110
- package/dist/MathNodeSpec.js.flow +46 -46
- package/dist/NodeNames.js.flow +23 -23
- package/dist/OrderedListNodeSpec.js.flow +132 -132
- package/dist/ParagraphNodeSpec.js +1 -3
- package/dist/ParagraphNodeSpec.js.flow +156 -160
- package/dist/ParagraphSpacingCommand.js.flow +121 -121
- package/dist/PrintCommand.js.flow +31 -31
- package/dist/SelectionPlaceholderPlugin.js.flow +131 -131
- package/dist/SpacerMarkSpec.js.flow +47 -47
- package/dist/StrikeMarkSpec.js.flow +21 -21
- package/dist/StrongMarkSpec.js.flow +25 -25
- package/dist/StyleView.js.flow +19 -19
- package/dist/TableBackgroundColorCommand.js +3 -7
- package/dist/TableBackgroundColorCommand.js.flow +75 -75
- package/dist/TableBorderColorCommand.js +3 -7
- package/dist/TableBorderColorCommand.js.flow +75 -75
- package/dist/TableCellColorCommand.js +3 -7
- package/dist/TableCellColorCommand.js.flow +71 -71
- package/dist/TableCellMenuPlugin.js +4 -6
- package/dist/TableCellMenuPlugin.js.flow +125 -125
- package/dist/TableInsertCommand.js +3 -5
- package/dist/TableInsertCommand.js.flow +112 -112
- package/dist/TableMergeCellsCommand.js.flow +90 -90
- package/dist/TableNodesSpecs.js.flow +78 -78
- package/dist/TablePlugins.js.flow +14 -14
- package/dist/TableResizePlugin.js.flow +631 -631
- package/dist/TextColorMarkSpec.js.flow +35 -35
- package/dist/TextHighlightMarkSpec.js.flow +38 -38
- package/dist/TextInsertTabSpaceCommand.js +2 -4
- package/dist/TextInsertTabSpaceCommand.js.flow +83 -83
- package/dist/TextNoWrapMarkSpec.js.flow +14 -14
- package/dist/TextNodeSpec.js.flow +7 -7
- package/dist/TextSelectionMarkSpec.js.flow +24 -24
- package/dist/TextSubMarkSpec.js.flow +20 -20
- package/dist/TextSuperMarkSpec.js.flow +20 -20
- package/dist/TextUnderlineMarkSpec.js.flow +27 -27
- package/dist/Types.js.flow +75 -75
- package/dist/WebFontLoader.js.flow +22 -22
- package/dist/blockQuoteInputRule.js.flow +36 -36
- package/dist/bom.xml +9097 -4707
- package/dist/browser.js.flow +7 -7
- package/dist/buildEditorPlugins.js.flow +51 -51
- package/dist/buildInputRules.js.flow +81 -81
- package/dist/client/CollabConnector.js +17 -2
- package/dist/client/CollabConnector.js.flow +86 -71
- package/dist/client/EditorConnection.js +15 -4
- package/dist/client/EditorConnection.js.flow +318 -307
- package/dist/client/Licit.js +97 -71
- package/dist/client/Licit.js.flow +592 -562
- package/dist/client/Licit.test.js +20 -19
- package/dist/client/Licit.test.js.flow +67 -65
- package/dist/client/Reporter.js.flow +37 -37
- package/dist/client/SimpleConnector.js +3 -1
- package/dist/client/SimpleConnector.js.flow +55 -53
- package/dist/client/http.js.flow +66 -66
- package/dist/client/licit.css +12 -12
- package/dist/client/throttle.js.flow +27 -27
- package/dist/convertFromDOMElement.js.flow +36 -36
- package/dist/convertFromHTML.js.flow +19 -19
- package/dist/convertFromJSON.js.flow +78 -78
- package/dist/convertToCSSPTValue.js.flow +22 -22
- package/dist/convertToJSON.js.flow +7 -7
- package/dist/createCommand.js.flow +40 -40
- package/dist/createEditorKeyMap.js.flow +94 -94
- package/dist/createEmptyEditorState.js +3 -6
- package/dist/createEmptyEditorState.js.flow +35 -41
- package/dist/createTableResizingPlugin.js.flow +86 -86
- package/dist/findActionableCell.js.flow +74 -74
- package/dist/findActiveMark.js.flow +32 -32
- package/dist/hyphenize.js.flow +17 -17
- package/dist/index.js.flow +10 -10
- package/dist/insertTable.js.flow +56 -56
- package/dist/isEditorStateEmpty.js.flow +32 -32
- package/dist/isTableNode.js.flow +15 -15
- package/dist/joinDown.js.flow +27 -27
- package/dist/joinListNode.js +2 -2
- package/dist/joinListNode.js.flow +55 -55
- package/dist/joinUp.js.flow +39 -39
- package/dist/keymaps.js.flow +185 -185
- package/dist/lookUpElement.js.flow +14 -14
- package/dist/nodeAt.js.flow +12 -12
- package/dist/normalizeHTML.js.flow +78 -78
- package/dist/patchAnchorElements.js.flow +38 -38
- package/dist/patchBreakElements.js.flow +22 -22
- package/dist/patchElementInlineStyles.js.flow +92 -92
- package/dist/patchListElements.js.flow +276 -276
- package/dist/patchMathElements.js.flow +60 -60
- package/dist/patchParagraphElements.js.flow +20 -20
- package/dist/patchStyleElements.js +2 -2
- package/dist/patchStyleElements.js.flow +194 -194
- package/dist/patchTableElements.js.flow +89 -89
- package/dist/rebaseDocWithSteps.js.flow +42 -42
- package/dist/sanitizeURL.js.flow +13 -13
- package/dist/splitListItem.js.flow +191 -191
- package/dist/styles.css +19 -19
- package/dist/styles0.css +29 -29
- package/dist/toClosestFontPtSize.js.flow +22 -22
- package/dist/toSafeHTMLDocument.js.flow +9 -9
- package/dist/toggleBlockquote.js +6 -14
- package/dist/toggleBlockquote.js.flow +91 -91
- package/dist/toggleCodeBlock.js +4 -10
- package/dist/toggleCodeBlock.js.flow +102 -102
- package/dist/ui/AlertInfo.js.flow +64 -64
- package/dist/ui/BookmarkNodeView.js.flow +66 -66
- package/dist/ui/CommandButton.js +2 -4
- package/dist/ui/CommandButton.js.flow +68 -68
- package/dist/ui/CommandMenu.js.flow +75 -75
- package/dist/ui/CommandMenuButton.js +3 -5
- package/dist/ui/CommandMenuButton.js.flow +131 -131
- package/dist/ui/CustomEditorView.js.flow +28 -28
- package/dist/ui/CustomMenu.js.flow +17 -17
- package/dist/ui/CustomMenuItem.js +3 -5
- package/dist/ui/CustomMenuItem.js.flow +36 -36
- package/dist/ui/CustomNodeView.js.flow +200 -200
- package/dist/ui/CustomRadioButton.js +6 -6
- package/dist/ui/CustomRadioButton.js.flow +65 -65
- package/dist/ui/DocLayoutEditor.js +4 -6
- package/dist/ui/DocLayoutEditor.js.flow +146 -146
- package/dist/ui/Editor.js +0 -1
- package/dist/ui/Editor.js.flow +290 -291
- package/dist/ui/EditorFrameset.js.flow +81 -81
- package/dist/ui/EditorToolbar.js +2 -2
- package/dist/ui/EditorToolbar.js.flow +211 -211
- package/dist/ui/EditorToolbarConfig.js.flow +172 -172
- package/dist/ui/FontSizeCommandMenuButton.js +3 -3
- package/dist/ui/FontSizeCommandMenuButton.js.flow +66 -66
- package/dist/ui/FontTypeCommandMenuButton.js +3 -3
- package/dist/ui/FontTypeCommandMenuButton.js.flow +49 -49
- package/dist/ui/Frag.js.flow +13 -13
- package/dist/ui/Icon.js.flow +89 -89
- package/dist/ui/ImageAlignEditor.js +4 -4
- package/dist/ui/ImageAlignEditor.js.flow +60 -60
- package/dist/ui/ImageInlineEditor.js +4 -4
- package/dist/ui/ImageInlineEditor.js.flow +67 -67
- package/dist/ui/ImageNodeView.js +3 -5
- package/dist/ui/ImageNodeView.js.flow +404 -404
- package/dist/ui/ImageResizeBox.js +3 -3
- package/dist/ui/ImageResizeBox.js.flow +219 -219
- package/dist/ui/ImageURLEditor.js +4 -6
- package/dist/ui/ImageURLEditor.js.flow +119 -119
- package/dist/ui/ImageUploadEditor.js +3 -5
- package/dist/ui/ImageUploadEditor.js.flow +117 -117
- package/dist/ui/KeyCodes.js.flow +12 -12
- package/dist/ui/LinkTooltip.js +4 -4
- package/dist/ui/LinkTooltip.js.flow +85 -85
- package/dist/ui/LinkURLEditor.js +4 -6
- package/dist/ui/LinkURLEditor.js.flow +111 -111
- package/dist/ui/ListItemNodeView.js.flow +98 -98
- package/dist/ui/ListTypeButton.js +3 -5
- package/dist/ui/ListTypeButton.js.flow +131 -131
- package/dist/ui/ListTypeCommandButton.js.flow +85 -85
- package/dist/ui/ListTypeMenu.js.flow +70 -70
- package/dist/ui/LoadingIndicator.js.flow +20 -20
- package/dist/ui/MathEditor.js +4 -6
- package/dist/ui/MathEditor.js.flow +78 -78
- package/dist/ui/MathInlineEditor.js +4 -6
- package/dist/ui/MathInlineEditor.js.flow +102 -102
- package/dist/ui/MathNodeView.js +3 -5
- package/dist/ui/MathNodeView.js.flow +175 -175
- package/dist/ui/PasteMenu.js.flow +57 -57
- package/dist/ui/ResizeObserver.js.flow +106 -106
- package/dist/ui/RichTextEditor.js.flow +133 -133
- package/dist/ui/SelectionObserver.js.flow +134 -134
- package/dist/ui/TableCellMenu.js.flow +38 -38
- package/dist/ui/TableGridSizeEditor.js +6 -8
- package/dist/ui/TableGridSizeEditor.js.flow +184 -184
- package/dist/ui/TableNodeView.js.flow +22 -22
- package/dist/ui/bindScrollHandler.js.flow +46 -46
- package/dist/ui/canUseCSSFont.js.flow +43 -43
- package/dist/ui/czi-body-layout-editor.css +16 -16
- package/dist/ui/czi-bookmark-view.css +10 -10
- package/dist/ui/czi-cursor-placeholder.css +36 -36
- package/dist/ui/czi-custom-menu-button.css +18 -18
- package/dist/ui/czi-custom-menu-item.css +30 -30
- package/dist/ui/czi-custom-menu.css +8 -8
- package/dist/ui/czi-custom-radio-button.css +80 -80
- package/dist/ui/czi-custom-scrollbar.css +21 -21
- package/dist/ui/czi-editor-frameset.css +81 -81
- package/dist/ui/czi-editor-toolbar.css +122 -122
- package/dist/ui/czi-editor.css +220 -220
- package/dist/ui/czi-form.css +104 -104
- package/dist/ui/czi-frag.css +3 -3
- package/dist/ui/czi-heading.css +40 -40
- package/dist/ui/czi-icon.css +72 -72
- package/dist/ui/czi-image-resize-box.css +165 -165
- package/dist/ui/czi-image-upload-editor.css +57 -57
- package/dist/ui/czi-image-upload-placeholder.css +50 -50
- package/dist/ui/czi-image-url-editor.css +38 -38
- package/dist/ui/czi-image-view.css +125 -125
- package/dist/ui/czi-indent.css +137 -137
- package/dist/ui/czi-inline-editor.css +20 -20
- package/dist/ui/czi-link-tooltip.css +71 -71
- package/dist/ui/czi-list.css +410 -410
- package/dist/ui/czi-loading-indicator.css +111 -111
- package/dist/ui/czi-math-view.css +62 -62
- package/dist/ui/czi-selection-placeholder.css +24 -24
- package/dist/ui/czi-table-cell-menu.css +14 -14
- package/dist/ui/czi-table-grid-size-editor.css +37 -37
- package/dist/ui/czi-table.css +86 -86
- package/dist/ui/czi-vars.css +2 -46
- package/dist/ui/findActiveFontSize.js.flow +58 -58
- package/dist/ui/findActiveFontType.js.flow +38 -38
- package/dist/ui/fonts.css +471 -471
- package/dist/ui/handleEditorDrop.js.flow +28 -28
- package/dist/ui/handleEditorKeyDown.js.flow +39 -39
- package/dist/ui/handleEditorPaste.js.flow +33 -33
- package/dist/ui/htmlElementToRect.js.flow +18 -18
- package/dist/ui/icon-font.css +10 -10
- package/dist/ui/injectStyleSheet.js.flow +42 -42
- package/dist/ui/isElementFullyVisible.js +2 -2
- package/dist/ui/isElementFullyVisible.js.flow +23 -23
- package/dist/ui/isOffline.js.flow +8 -8
- package/dist/ui/isReactClass.js.flow +12 -12
- package/dist/ui/listType.css +21 -21
- package/dist/ui/mathquill-editor/MathQuillEditor.js.flow +159 -159
- package/dist/ui/mathquill-editor/MathQuillEditorSymbols.js.flow +483 -483
- package/dist/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js +2 -2
- package/dist/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js.flow +48 -48
- package/dist/ui/mathquill-editor/czi-mathquill-editor-symbols-panel.css +39 -39
- package/dist/ui/mathquill-editor/czi-mathquill-editor.css +50 -50
- package/dist/ui/mathquill-editor/mathquill-import-kludge.js.flow +24 -24
- package/dist/ui/renderLaTeXAsHTML.js.flow +46 -46
- package/dist/ui/resolveImage.js.flow +123 -123
- package/dist/ui/toCSSColor.js.flow +51 -51
- package/dist/ui/toCSSLineSpacing.js +1 -36
- package/dist/ui/toCSSLineSpacing.js.flow +55 -82
- package/dist/ui/toHexColor.js.flow +26 -26
- package/dist/ui/uuid.js.flow +9 -9
- package/dist/uuid.js.flow +9 -9
- package/flow-typed/@modusoperandilicit-customstyles.js +5 -5
- package/flow-typed/@modusoperandilicit-doc-attrs-step.js +5 -5
- package/flow-typed/@modusoperandilicit-ui-commands.js +5 -0
- package/flow-typed/create-emotion.js +5 -5
- package/flow-typed/docs-editor.js +3 -3
- package/flow-typed/draft-convert.js +3 -3
- package/flow-typed/draft-js.js +3 -3
- package/flow-typed/flatted.js +5 -5
- package/flow-typed/jquery.js +5 -5
- package/flow-typed/katex.js +6 -6
- package/flow-typed/mathquill.js +5 -5
- package/flow-typed/prosemirror-collab.js +5 -5
- package/flow-typed/prosemirror-commands.js +5 -5
- package/flow-typed/prosemirror-dev-tools.js +5 -5
- package/flow-typed/prosemirror-dropcursor.js +5 -5
- package/flow-typed/prosemirror-gapcursor.js +5 -5
- package/flow-typed/prosemirror-history.js +5 -5
- package/flow-typed/prosemirror-inputrules.js +5 -5
- package/flow-typed/prosemirror-keymap.js +5 -5
- package/flow-typed/prosemirror-model.js +5 -5
- package/flow-typed/prosemirror-state.js +5 -5
- package/flow-typed/prosemirror-tables.js +5 -5
- package/flow-typed/prosemirror-transform.js +5 -5
- package/flow-typed/prosemirror-utils.js +5 -5
- package/flow-typed/prosemirror-view.js +5 -5
- package/flow-typed/resize-observer-polyfill.js +5 -5
- package/flow-typed/uuid.js +5 -5
- package/jest.config.js +207 -0
- package/jest.setup.js +5 -5
- package/licit/client/CustomLicitRuntime.js +95 -95
- package/licit/client/CustomStyleRuntime.js +136 -136
- package/licit/client/index.js +366 -366
- package/licit/index.html +11 -11
- package/licit/server/collab/instance.js +221 -221
- package/licit/server/collab/route.js +69 -69
- package/licit/server/collab/server.js +297 -297
- package/licit/server/collab/start.js +13 -13
- package/licit/server/image/start.js +58 -58
- package/lint.sh +4 -4
- package/node_modules/prosemirror-utils/LICENSE +13 -0
- package/{dist/ui/PopUpTypes.js.flow → node_modules/prosemirror-utils/README.md} +0 -0
- package/node_modules/prosemirror-utils/dist/helpers.js +119 -0
- package/node_modules/prosemirror-utils/dist/index.js +17 -0
- package/node_modules/prosemirror-utils/dist/index.js.map +1 -0
- package/node_modules/prosemirror-utils/dist/node.js +106 -0
- package/node_modules/prosemirror-utils/dist/selection.js +168 -0
- package/node_modules/prosemirror-utils/dist/transforms.js +257 -0
- package/node_modules/prosemirror-utils/package.json +81 -0
- package/node_modules/prosemirror-utils/typings.d.ts +79 -0
- package/package.json +171 -163
- package/run_collab_server.py +21 -21
- package/run_image_server.py +20 -20
- package/run_web_server.py +25 -25
- package/scripts/build_bin.js +10 -10
- package/scripts/build_bin.py +103 -103
- package/scripts/ci_check_dist.sh +13 -13
- package/scripts/env.js +6 -6
- package/scripts/webserver.js +35 -35
- package/sonar-project.properties +11 -11
- package/src/BlockquoteInsertNewLineCommand.js +55 -55
- package/src/BlockquoteNodeSpec.js +30 -30
- package/src/BlockquoteToggleCommand.js +34 -34
- package/src/BookmarkNodeSpec.js +39 -39
- package/src/BulletListNodeSpec.js +61 -61
- package/src/CZIProseMirror.js +90 -90
- package/src/CodeBlockCommand.js +43 -43
- package/src/CodeBlockNodeSpec.js +24 -24
- package/src/CodeMarkSpec.js +14 -14
- package/src/ContentPlaceholderPlugin.js +187 -187
- package/src/CursorPlaceholderPlugin.js +115 -115
- package/src/DocLayoutCommand.js +94 -94
- package/src/DocNodeSpec.js +64 -64
- package/src/EMMarkSpec.js +14 -14
- package/src/EditorCommands.js +128 -128
- package/src/EditorKeyMap.js +187 -187
- package/src/EditorMarks.js +71 -71
- package/src/EditorNodes.js +60 -60
- package/src/EditorPageLayoutPlugin.js +67 -67
- package/src/EditorPlugins.js +8 -8
- package/src/EditorSchema.js +12 -12
- package/src/EditorState.js +7 -7
- package/src/FontSizeMarkSpec.js +49 -49
- package/src/FontTypeMarkSpec.js +80 -80
- package/src/HTMLMutator.js +59 -59
- package/src/HardBreakNodeSpec.js +15 -15
- package/src/HeadingNodeSpec.js +54 -54
- package/src/HistoryRedoCommand.js +20 -20
- package/src/HistoryUndoCommand.js +20 -20
- package/src/HorizontalRuleCommand.js +49 -49
- package/src/HorizontalRuleNodeSpec.js +39 -39
- package/src/ImageFromURLCommand.js +14 -14
- package/src/ImageNodeSpec.js +90 -90
- package/src/ImageSourceCommand.js +117 -117
- package/src/ImageUploadCommand.js +36 -36
- package/src/ImageUploadPlaceholderPlugin.js +192 -192
- package/src/LinkMarkSpec.js +32 -32
- package/src/LinkSetURLCommand.js +103 -103
- package/src/LinkTooltipPlugin.js +203 -203
- package/src/ListItemInsertNewLineCommand.js +55 -55
- package/src/ListItemMergeCommand.js +177 -177
- package/src/ListItemNodeSpec.js +51 -51
- package/src/ListSplitCommand.js +32 -32
- package/src/ListToggleCommand.js +77 -77
- package/src/MarkNames.js +18 -18
- package/src/MarksClearCommand.js +42 -42
- package/src/MathEditCommand.js +110 -110
- package/src/MathNodeSpec.js +46 -46
- package/src/NodeNames.js +23 -23
- package/src/OrderedListNodeSpec.js +132 -132
- package/src/ParagraphNodeSpec.js +156 -160
- package/src/ParagraphSpacingCommand.js +121 -121
- package/src/PrintCommand.js +31 -31
- package/src/SelectionPlaceholderPlugin.js +131 -131
- package/src/SpacerMarkSpec.js +47 -47
- package/src/StrikeMarkSpec.js +21 -21
- package/src/StrongMarkSpec.js +25 -25
- package/src/StyleView.js +19 -19
- package/src/TableBackgroundColorCommand.js +75 -75
- package/src/TableBorderColorCommand.js +75 -75
- package/src/TableCellColorCommand.js +71 -71
- package/src/TableCellMenuPlugin.js +125 -125
- package/src/TableInsertCommand.js +112 -112
- package/src/TableMergeCellsCommand.js +90 -90
- package/src/TableNodesSpecs.js +78 -78
- package/src/TablePlugins.js +14 -14
- package/src/TableResizePlugin.js +631 -631
- package/src/TextColorMarkSpec.js +35 -35
- package/src/TextHighlightMarkSpec.js +38 -38
- package/src/TextInsertTabSpaceCommand.js +83 -83
- package/src/TextNoWrapMarkSpec.js +14 -14
- package/src/TextNodeSpec.js +7 -7
- package/src/TextSelectionMarkSpec.js +24 -24
- package/src/TextSubMarkSpec.js +20 -20
- package/src/TextSuperMarkSpec.js +20 -20
- package/src/TextUnderlineMarkSpec.js +27 -27
- package/src/Types.js +75 -75
- package/src/WebFontLoader.js +22 -22
- package/src/blockQuoteInputRule.js +36 -36
- package/src/browser.js +7 -7
- package/src/buildEditorPlugins.js +51 -51
- package/src/buildInputRules.js +81 -81
- package/src/client/CollabConnector.js +86 -71
- package/src/client/EditorConnection.js +318 -307
- package/src/client/Licit.js +592 -562
- package/src/client/Licit.test.js +67 -65
- package/src/client/Reporter.js +37 -37
- package/src/client/SimpleConnector.js +55 -53
- package/src/client/http.js +66 -66
- package/src/client/licit.css +12 -12
- package/src/client/throttle.js +27 -27
- package/src/convertFromDOMElement.js +36 -36
- package/src/convertFromHTML.js +19 -19
- package/src/convertFromJSON.js +78 -78
- package/src/convertToCSSPTValue.js +22 -22
- package/src/convertToJSON.js +7 -7
- package/src/createCommand.js +40 -40
- package/src/createEditorKeyMap.js +94 -94
- package/src/createEmptyEditorState.js +35 -41
- package/src/createTableResizingPlugin.js +86 -86
- package/src/findActionableCell.js +74 -74
- package/src/findActiveMark.js +32 -32
- package/src/hyphenize.js +17 -17
- package/src/index.js +10 -10
- package/src/insertTable.js +56 -56
- package/src/isEditorStateEmpty.js +32 -32
- package/src/isTableNode.js +15 -15
- package/src/joinDown.js +27 -27
- package/src/joinListNode.js +55 -55
- package/src/joinUp.js +39 -39
- package/src/keymaps.js +185 -185
- package/src/lookUpElement.js +14 -14
- package/src/nodeAt.js +12 -12
- package/src/normalizeHTML.js +78 -78
- package/src/patchAnchorElements.js +38 -38
- package/src/patchBreakElements.js +22 -22
- package/src/patchElementInlineStyles.js +92 -92
- package/src/patchListElements.js +276 -276
- package/src/patchMathElements.js +60 -60
- package/src/patchParagraphElements.js +20 -20
- package/src/patchStyleElements.js +194 -194
- package/src/patchTableElements.js +89 -89
- package/src/rebaseDocWithSteps.js +42 -42
- package/src/sanitizeURL.js +13 -13
- package/src/splitListItem.js +191 -191
- package/src/styles.css +19 -19
- package/src/styles0.css +29 -29
- package/src/toClosestFontPtSize.js +22 -22
- package/src/toSafeHTMLDocument.js +9 -9
- package/src/toggleBlockquote.js +91 -91
- package/src/toggleCodeBlock.js +102 -102
- package/src/ui/AlertInfo.js +64 -64
- package/src/ui/BookmarkNodeView.js +66 -66
- package/src/ui/CommandButton.js +68 -68
- package/src/ui/CommandMenu.js +75 -75
- package/src/ui/CommandMenuButton.js +131 -131
- package/src/ui/CustomEditorView.js +28 -28
- package/src/ui/CustomMenu.js +17 -17
- package/src/ui/CustomMenuItem.js +36 -36
- package/src/ui/CustomNodeView.js +200 -200
- package/src/ui/CustomRadioButton.js +65 -65
- package/src/ui/DocLayoutEditor.js +146 -146
- package/src/ui/Editor.js +290 -291
- package/src/ui/EditorFrameset.js +81 -81
- package/src/ui/EditorToolbar.js +211 -211
- package/src/ui/EditorToolbarConfig.js +172 -172
- package/src/ui/FontSizeCommandMenuButton.js +66 -66
- package/src/ui/FontTypeCommandMenuButton.js +49 -49
- package/src/ui/Frag.js +13 -13
- package/src/ui/Icon.js +89 -89
- package/src/ui/ImageAlignEditor.js +60 -60
- package/src/ui/ImageInlineEditor.js +67 -67
- package/src/ui/ImageNodeView.js +404 -404
- package/src/ui/ImageResizeBox.js +219 -219
- package/src/ui/ImageURLEditor.js +119 -119
- package/src/ui/ImageUploadEditor.js +117 -117
- package/src/ui/KeyCodes.js +12 -12
- package/src/ui/LinkTooltip.js +85 -85
- package/src/ui/LinkURLEditor.js +111 -111
- package/src/ui/ListItemNodeView.js +98 -98
- package/src/ui/ListTypeButton.js +131 -131
- package/src/ui/ListTypeCommandButton.js +85 -85
- package/src/ui/ListTypeMenu.js +70 -70
- package/src/ui/LoadingIndicator.js +20 -20
- package/src/ui/MathEditor.js +78 -78
- package/src/ui/MathInlineEditor.js +102 -102
- package/src/ui/MathNodeView.js +175 -175
- package/src/ui/PasteMenu.js +57 -57
- package/src/ui/ResizeObserver.js +106 -106
- package/src/ui/RichTextEditor.js +133 -133
- package/src/ui/SelectionObserver.js +134 -134
- package/src/ui/TableCellMenu.js +38 -38
- package/src/ui/TableGridSizeEditor.js +184 -184
- package/src/ui/TableNodeView.js +22 -22
- package/src/ui/bindScrollHandler.js +46 -46
- package/src/ui/canUseCSSFont.js +43 -43
- package/src/ui/czi-body-layout-editor.css +16 -16
- package/src/ui/czi-bookmark-view.css +10 -10
- package/src/ui/czi-cursor-placeholder.css +36 -36
- package/src/ui/czi-custom-menu-button.css +18 -18
- package/src/ui/czi-custom-menu-item.css +30 -30
- package/src/ui/czi-custom-menu.css +8 -8
- package/src/ui/czi-custom-radio-button.css +80 -80
- package/src/ui/czi-custom-scrollbar.css +21 -21
- package/src/ui/czi-editor-frameset.css +81 -81
- package/src/ui/czi-editor-toolbar.css +122 -122
- package/src/ui/czi-editor.css +220 -220
- package/src/ui/czi-form.css +104 -104
- package/src/ui/czi-frag.css +3 -3
- package/src/ui/czi-heading.css +40 -40
- package/src/ui/czi-icon.css +72 -72
- package/src/ui/czi-image-resize-box.css +165 -165
- package/src/ui/czi-image-upload-editor.css +57 -57
- package/src/ui/czi-image-upload-placeholder.css +50 -50
- package/src/ui/czi-image-url-editor.css +38 -38
- package/src/ui/czi-image-view.css +125 -125
- package/src/ui/czi-indent.css +137 -137
- package/src/ui/czi-inline-editor.css +20 -20
- package/src/ui/czi-link-tooltip.css +71 -71
- package/src/ui/czi-list.css +410 -410
- package/src/ui/czi-loading-indicator.css +111 -111
- package/src/ui/czi-math-view.css +62 -62
- package/src/ui/czi-selection-placeholder.css +24 -24
- package/src/ui/czi-table-cell-menu.css +14 -14
- package/src/ui/czi-table-grid-size-editor.css +37 -37
- package/src/ui/czi-table.css +86 -86
- package/src/ui/czi-vars.css +2 -46
- package/src/ui/findActiveFontSize.js +58 -58
- package/src/ui/findActiveFontType.js +38 -38
- package/src/ui/fonts.css +471 -471
- package/src/ui/handleEditorDrop.js +28 -28
- package/src/ui/handleEditorKeyDown.js +39 -39
- package/src/ui/handleEditorPaste.js +33 -33
- package/src/ui/htmlElementToRect.js +18 -18
- package/src/ui/icon-font.css +10 -10
- package/src/ui/injectStyleSheet.js +42 -42
- package/src/ui/isElementFullyVisible.js +23 -23
- package/src/ui/isOffline.js +8 -8
- package/src/ui/isReactClass.js +12 -12
- package/src/ui/listType.css +21 -21
- package/src/ui/mathquill-editor/MathQuillEditor.js +159 -159
- package/src/ui/mathquill-editor/MathQuillEditorSymbols.js +483 -483
- package/src/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js +48 -48
- package/src/ui/mathquill-editor/czi-mathquill-editor-symbols-panel.css +39 -39
- package/src/ui/mathquill-editor/czi-mathquill-editor.css +50 -50
- package/src/ui/mathquill-editor/mathquill-import-kludge.js +24 -24
- package/src/ui/renderLaTeXAsHTML.js +46 -46
- package/src/ui/resolveImage.js +123 -123
- package/src/ui/toCSSColor.js +51 -51
- package/src/ui/toCSSLineSpacing.js +55 -82
- package/src/ui/toHexColor.js +26 -26
- package/src/ui/uuid.js +9 -9
- package/src/uuid.js +9 -9
- package/style-service.Dockerfile +26 -26
- package/utils/build_bin.js +9 -9
- package/utils/build_image_server.js +71 -69
- package/utils/build_licit_collab_server.js +75 -73
- package/utils/build_web_server.js +40 -40
- package/utils/env.js +6 -6
- package/webpack.config.js +126 -120
- package/build_customstyle_server.py +0 -7
- package/dist/FontSizeCommand.js +0 -80
- package/dist/FontSizeCommand.js.flow +0 -57
- package/dist/FontTypeCommand.js +0 -137
- package/dist/FontTypeCommand.js.flow +0 -100
- package/dist/HeadingCommand.js +0 -65
- package/dist/HeadingCommand.js.flow +0 -51
- package/dist/IndentCommand.js +0 -57
- package/dist/IndentCommand.js.flow +0 -41
- package/dist/MarkToggleCommand.js +0 -90
- package/dist/MarkToggleCommand.js.flow +0 -66
- package/dist/TextAlignCommand.js +0 -151
- package/dist/TextAlignCommand.js.flow +0 -122
- package/dist/TextColorCommand.js +0 -114
- package/dist/TextColorCommand.js.flow +0 -87
- package/dist/TextHighlightCommand.js +0 -118
- package/dist/TextHighlightCommand.js.flow +0 -91
- package/dist/TextLineSpacingCommand.js +0 -177
- package/dist/TextLineSpacingCommand.js.flow +0 -157
- package/dist/applyMark.js +0 -84
- package/dist/applyMark.js.flow +0 -61
- package/dist/clearMarks.js +0 -160
- package/dist/clearMarks.js.flow +0 -128
- package/dist/compareNumber.js +0 -18
- package/dist/compareNumber.js.flow +0 -11
- package/dist/consolidateListNodes.js +0 -291
- package/dist/consolidateListNodes.js.flow +0 -281
- package/dist/coverage/lcov-report/block-navigation.js +0 -82
- package/dist/coverage/lcov-report/block-navigation.js.flow +0 -87
- package/dist/coverage/lcov-report/prettify.js +0 -994
- package/dist/coverage/lcov-report/prettify.js.flow +0 -2
- package/dist/coverage/lcov-report/sorter.js +0 -211
- package/dist/coverage/lcov-report/sorter.js.flow +0 -196
- package/dist/findNodesWithSameMark.js +0 -89
- package/dist/findNodesWithSameMark.js.flow +0 -89
- package/dist/isBulletListNode.js +0 -14
- package/dist/isBulletListNode.js.flow +0 -9
- package/dist/isInsideListItem.js +0 -19
- package/dist/isInsideListItem.js.flow +0 -13
- package/dist/isListNode.js +0 -22
- package/dist/isListNode.js.flow +0 -13
- package/dist/isNodeSelectionForNodeType.js +0 -19
- package/dist/isNodeSelectionForNodeType.js.flow +0 -15
- package/dist/isOrderedListNode.js +0 -14
- package/dist/isOrderedListNode.js.flow +0 -9
- package/dist/isTextStyleMarkCommandEnabled.js +0 -59
- package/dist/isTextStyleMarkCommandEnabled.js.flow +0 -49
- package/dist/noop.js +0 -11
- package/dist/noop.js.flow +0 -5
- package/dist/toggleHeading.js +0 -135
- package/dist/toggleHeading.js.flow +0 -113
- package/dist/toggleList.js +0 -431
- package/dist/toggleList.js.flow +0 -450
- package/dist/transformAndPreserveTextSelection.js +0 -173
- package/dist/transformAndPreserveTextSelection.js.flow +0 -151
- package/dist/ui/ColorEditor.js +0 -118
- package/dist/ui/ColorEditor.js.flow +0 -101
- package/dist/ui/CustomButton.js +0 -64
- package/dist/ui/CustomButton.js.flow +0 -33
- package/dist/ui/PointerSurface.js +0 -173
- package/dist/ui/PointerSurface.js.flow +0 -141
- package/dist/ui/PopUp.js +0 -129
- package/dist/ui/PopUp.js.flow +0 -77
- package/dist/ui/PopUpManager.js +0 -266
- package/dist/ui/PopUpManager.js.flow +0 -213
- package/dist/ui/PopUpPosition.js +0 -156
- package/dist/ui/PopUpPosition.js.flow +0 -104
- package/dist/ui/PopUpTypes.js +0 -1
- package/dist/ui/TooltipSurface.js +0 -99
- package/dist/ui/TooltipSurface.js.flow +0 -76
- package/dist/ui/clamp.js +0 -18
- package/dist/ui/clamp.js.flow +0 -11
- package/dist/ui/createPopUp.js +0 -199
- package/dist/ui/createPopUp.js.flow +0 -205
- package/dist/ui/czi-animations.css +0 -15
- package/dist/ui/czi-color-editor.css +0 -56
- package/dist/ui/czi-custom-button.css +0 -93
- package/dist/ui/czi-pop-up.css +0 -32
- package/dist/ui/czi-tooltip-surface.css +0 -45
- package/dist/ui/preventEventDefault.js +0 -10
- package/dist/ui/preventEventDefault.js.flow +0 -5
- package/dist/ui/rects.js +0 -58
- package/dist/ui/rects.js.flow +0 -47
- package/dist/updateIndentLevel.js +0 -232
- package/dist/updateIndentLevel.js.flow +0 -211
- package/flow-typed/@molicit-citation.js +0 -5
- package/licit/server/customstyles/start.js +0 -184
- package/run_customstyle_server.py +0 -20
- package/src/FontSizeCommand.js +0 -57
- package/src/FontTypeCommand.js +0 -100
- package/src/HeadingCommand.js +0 -51
- package/src/IndentCommand.js +0 -41
- package/src/MarkToggleCommand.js +0 -66
- package/src/TextAlignCommand.js +0 -122
- package/src/TextColorCommand.js +0 -87
- package/src/TextHighlightCommand.js +0 -91
- package/src/TextLineSpacingCommand.js +0 -157
- package/src/applyMark.js +0 -61
- package/src/clearMarks.js +0 -128
- package/src/compareNumber.js +0 -11
- package/src/consolidateListNodes.js +0 -281
- package/src/findNodesWithSameMark.js +0 -89
- package/src/isBulletListNode.js +0 -9
- package/src/isInsideListItem.js +0 -13
- package/src/isListNode.js +0 -13
- package/src/isNodeSelectionForNodeType.js +0 -15
- package/src/isOrderedListNode.js +0 -9
- package/src/isTextStyleMarkCommandEnabled.js +0 -49
- package/src/noop.js +0 -5
- package/src/toggleHeading.js +0 -113
- package/src/toggleList.js +0 -450
- package/src/transformAndPreserveTextSelection.js +0 -151
- package/src/ui/ColorEditor.js +0 -101
- package/src/ui/CustomButton.js +0 -33
- package/src/ui/PointerSurface.js +0 -141
- package/src/ui/PopUp.js +0 -77
- package/src/ui/PopUpManager.js +0 -213
- package/src/ui/PopUpPosition.js +0 -104
- package/src/ui/PopUpTypes.js +0 -0
- package/src/ui/TooltipSurface.js +0 -76
- package/src/ui/clamp.js +0 -11
- package/src/ui/createPopUp.js +0 -205
- package/src/ui/czi-animations.css +0 -15
- package/src/ui/czi-color-editor.css +0 -56
- package/src/ui/czi-custom-button.css +0 -93
- package/src/ui/czi-pop-up.css +0 -32
- package/src/ui/czi-tooltip-surface.css +0 -45
- package/src/ui/preventEventDefault.js +0 -5
- package/src/ui/rects.js +0 -47
- package/src/updateIndentLevel.js +0 -211
- package/utils/build_customstyle_server.js +0 -70
|
@@ -1,562 +1,592 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
import { EditorState, TextSelection, Plugin } from 'prosemirror-state';
|
|
3
|
-
import { Node } from 'prosemirror-model';
|
|
4
|
-
import { Transform } from 'prosemirror-transform';
|
|
5
|
-
import { EditorView } from 'prosemirror-view';
|
|
6
|
-
import * as React from 'react';
|
|
7
|
-
import ReactDOM from 'react-dom';
|
|
8
|
-
import { stringify } from 'flatted';
|
|
9
|
-
|
|
10
|
-
import convertFromJSON from '../convertFromJSON';
|
|
11
|
-
import RichTextEditor from '../ui/RichTextEditor';
|
|
12
|
-
import uuid from '../uuid';
|
|
13
|
-
import SimpleConnector from './SimpleConnector';
|
|
14
|
-
import CollabConnector from './CollabConnector';
|
|
15
|
-
import { EMPTY_DOC_JSON } from '../createEmptyEditorState';
|
|
16
|
-
import type { EditorRuntime } from '../Types';
|
|
17
|
-
import createPopUp from '
|
|
18
|
-
import { atViewportCenter } from '
|
|
19
|
-
import AlertInfo from '../ui/AlertInfo';
|
|
20
|
-
import { SetDocAttrStep } from '@modusoperandi/licit-doc-attrs-step';
|
|
21
|
-
import './licit.css';
|
|
22
|
-
import DefaultEditorPlugins from '../buildEditorPlugins';
|
|
23
|
-
import { Schema } from 'prosemirror-model';
|
|
24
|
-
import EditorMarks from '../EditorMarks';
|
|
25
|
-
import EditorNodes from '../EditorNodes';
|
|
26
|
-
|
|
27
|
-
const ATTR_OBJID = 'objectId';
|
|
28
|
-
const ATTR_OBJMETADATA = 'objectMetaData';
|
|
29
|
-
/**
|
|
30
|
-
* LICIT properties:
|
|
31
|
-
* docID {string} [] Collaborative Doument ID
|
|
32
|
-
* collabServiceURL {string} [/collaboration-service] Collaboration Service URL
|
|
33
|
-
* debug {boolean} [false] To enable/disable ProseMirror Debug Tools, available only in development.
|
|
34
|
-
* width {string} [100%] Width of the editor.
|
|
35
|
-
* height {string} [100%] Height of the editor.
|
|
36
|
-
* readOnly {boolean} [false] To enable/disable editing mode.
|
|
37
|
-
* onChange {@callback} [null] Fires after each significant change.
|
|
38
|
-
* @param data {JSON} Modified document data.
|
|
39
|
-
* onReady {@callback} [null] Fires when the editor is fully ready.
|
|
40
|
-
* @param ref {LICIT} Rerefence of the editor.
|
|
41
|
-
* data {JSON} [null] Document data to be loaded into the editor.
|
|
42
|
-
* disabled {boolean} [false] Disable the editor.
|
|
43
|
-
* embedded {boolean} [false] Disable/Enable inline behaviour.
|
|
44
|
-
* plugins [plugins] External Plugins into the editor.
|
|
45
|
-
*/
|
|
46
|
-
class Licit extends React.Component<any, any> {
|
|
47
|
-
_runtime: EditorRuntime;
|
|
48
|
-
_connector: any;
|
|
49
|
-
_clientID: string;
|
|
50
|
-
_editorView: EditorView; // This will be handy in updating document's content.
|
|
51
|
-
_skipSCU: boolean; // Flag to decide whether to skip shouldComponentUpdate
|
|
52
|
-
_defaultEditorSchema: Schema;
|
|
53
|
-
_defaultEditorPlugins: Array<Plugin>;
|
|
54
|
-
_devTools: Promise<any>;
|
|
55
|
-
_applyDevTools: any;
|
|
56
|
-
|
|
57
|
-
_popUp = null;
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Provides access to prosemirror view.
|
|
61
|
-
*/
|
|
62
|
-
get editorView(): EditorView {
|
|
63
|
-
return this._editorView;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
constructor(props: any, context: any) {
|
|
67
|
-
super(props, context);
|
|
68
|
-
this.initialize(props);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
initialize(props: any) {
|
|
72
|
-
this._clientID = uuid();
|
|
73
|
-
this._editorView = null;
|
|
74
|
-
this._skipSCU = true;
|
|
75
|
-
|
|
76
|
-
const noop = function () {};
|
|
77
|
-
|
|
78
|
-
// [FS] IRAD-981 2020-06-10
|
|
79
|
-
// Component's configurations.
|
|
80
|
-
// [FS] IRAD-1552 2021-08-26
|
|
81
|
-
// Collaboration server / client should allow string values for document identifiers.
|
|
82
|
-
const docID = props.docID || ''; // Empty means collaborative.
|
|
83
|
-
const collaborative = docID !== '';
|
|
84
|
-
// [FS] IRAD-1553 2021-08-26
|
|
85
|
-
// Configurable Collaboration Service URL.
|
|
86
|
-
const collabServiceURL = props.collabServiceURL || '/collaboration-service';
|
|
87
|
-
const debug = props.debug || false;
|
|
88
|
-
// Default width and height to undefined
|
|
89
|
-
const width = props.width || undefined;
|
|
90
|
-
const height = props.height || undefined;
|
|
91
|
-
const onChangeCB =
|
|
92
|
-
typeof props.onChange === 'function' ? props.onChange : noop;
|
|
93
|
-
const onReadyCB =
|
|
94
|
-
typeof props.onReady === 'function' ? props.onReady : noop;
|
|
95
|
-
const readOnly = props.readOnly || false;
|
|
96
|
-
const data = props.data || null;
|
|
97
|
-
const disabled = props.disabled || false;
|
|
98
|
-
const embedded = props.embedded || false; // [FS] IRAD-996 2020-06-30
|
|
99
|
-
// [FS] 2020-07-03
|
|
100
|
-
// Handle Image Upload from Angular App
|
|
101
|
-
const runtime = props.runtime || null;
|
|
102
|
-
const plugins = props.plugins || null;
|
|
103
|
-
|
|
104
|
-
this._defaultEditorSchema = new Schema({
|
|
105
|
-
nodes: EditorNodes,
|
|
106
|
-
marks: EditorMarks,
|
|
107
|
-
});
|
|
108
|
-
this._defaultEditorPlugins = new DefaultEditorPlugins(
|
|
109
|
-
this._defaultEditorSchema
|
|
110
|
-
).get();
|
|
111
|
-
|
|
112
|
-
let editorState = convertFromJSON(
|
|
113
|
-
data,
|
|
114
|
-
null,
|
|
115
|
-
this._defaultEditorSchema,
|
|
116
|
-
plugins,
|
|
117
|
-
this._defaultEditorPlugins
|
|
118
|
-
);
|
|
119
|
-
// [FS] IRAD-1067 2020-09-19
|
|
120
|
-
// The editorState will return null if the doc Json is mal-formed
|
|
121
|
-
if (null === editorState) {
|
|
122
|
-
editorState = convertFromJSON(
|
|
123
|
-
EMPTY_DOC_JSON,
|
|
124
|
-
null,
|
|
125
|
-
this._defaultEditorSchema,
|
|
126
|
-
plugins,
|
|
127
|
-
this._defaultEditorPlugins
|
|
128
|
-
);
|
|
129
|
-
this.showAlert();
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
const setState = this.setState.bind(this);
|
|
133
|
-
this._connector = collaborative
|
|
134
|
-
? new CollabConnector(
|
|
135
|
-
editorState,
|
|
136
|
-
setState,
|
|
137
|
-
{
|
|
138
|
-
docID,
|
|
139
|
-
collabServiceURL,
|
|
140
|
-
},
|
|
141
|
-
this._defaultEditorSchema,
|
|
142
|
-
this._defaultEditorPlugins,
|
|
143
|
-
// [FS] IRAD-1578 2021-09-27
|
|
144
|
-
this.onReady.bind(this)
|
|
145
|
-
)
|
|
146
|
-
: new SimpleConnector(editorState, setState);
|
|
147
|
-
|
|
148
|
-
// FS IRAD-989 2020-18-06
|
|
149
|
-
// updating properties should automatically render the changes
|
|
150
|
-
|
|
151
|
-
this.state = {
|
|
152
|
-
docID,
|
|
153
|
-
collabServiceURL,
|
|
154
|
-
data,
|
|
155
|
-
editorState,
|
|
156
|
-
width,
|
|
157
|
-
height,
|
|
158
|
-
readOnly,
|
|
159
|
-
onChangeCB,
|
|
160
|
-
onReadyCB,
|
|
161
|
-
debug,
|
|
162
|
-
disabled,
|
|
163
|
-
embedded,
|
|
164
|
-
runtime,
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
// FS IRAD-1040 2020-26-08
|
|
168
|
-
// Get the modified schema from editorstate and send it to collab server
|
|
169
|
-
if (this._connector.updateSchema) {
|
|
170
|
-
// Use known editorState to update schema.
|
|
171
|
-
this._connector.updateSchema(editorState.schema);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// [FS] IRAD-1578 2021-09-27
|
|
176
|
-
onReady(state: EditorState) {
|
|
177
|
-
const collabEditing = this.state.docID !== '';
|
|
178
|
-
|
|
179
|
-
if (collabEditing) {
|
|
180
|
-
this._editorView && this._editorView.focus();
|
|
181
|
-
if (this.state.onReadyCB) {
|
|
182
|
-
this.state.onReadyCB(this);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
// [FS] IRAD-1067 2020-09-19
|
|
188
|
-
// Alert funtion to show document is corrupted
|
|
189
|
-
showAlert() {
|
|
190
|
-
const anchor = null;
|
|
191
|
-
this._popUp = createPopUp(AlertInfo, null, {
|
|
192
|
-
anchor,
|
|
193
|
-
position: atViewportCenter,
|
|
194
|
-
onClose: (val) => {
|
|
195
|
-
if (this._popUp) {
|
|
196
|
-
this._popUp = null;
|
|
197
|
-
}
|
|
198
|
-
},
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
resetCounters(transaction: Transform) {
|
|
203
|
-
for (let index = 1; index <= 10; index++) {
|
|
204
|
-
const counterVar = 'set-cust-style-counter-' + index;
|
|
205
|
-
const setCounterVal = window[counterVar];
|
|
206
|
-
if (setCounterVal) {
|
|
207
|
-
delete window[counterVar];
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
this.setCounterFlags(transaction, true);
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
setCounterFlags(transaction: Transform, reset: boolean) {
|
|
214
|
-
let modified = false;
|
|
215
|
-
let counterFlags = null;
|
|
216
|
-
const existingCFlags = transaction.doc.attrs.counterFlags;
|
|
217
|
-
if (reset && !existingCFlags) {
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
for (let index = 1; index <= 10; index++) {
|
|
222
|
-
const counterVar = 'set-cust-style-counter-' + index;
|
|
223
|
-
|
|
224
|
-
const setCounterVal = window[counterVar];
|
|
225
|
-
if (setCounterVal) {
|
|
226
|
-
if (!counterFlags) {
|
|
227
|
-
counterFlags = {};
|
|
228
|
-
}
|
|
229
|
-
counterFlags[counterVar] = true;
|
|
230
|
-
|
|
231
|
-
if (!existingCFlags) {
|
|
232
|
-
modified = true;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
if (!modified) {
|
|
236
|
-
if (existingCFlags) {
|
|
237
|
-
if (setCounterVal) {
|
|
238
|
-
modified = undefined == existingCFlags[counterVar];
|
|
239
|
-
} else {
|
|
240
|
-
modified = undefined != existingCFlags[counterVar];
|
|
241
|
-
}
|
|
242
|
-
} else {
|
|
243
|
-
modified = setCounterVal;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
if (modified) {
|
|
249
|
-
const tr = this._editorView.state.tr.step(
|
|
250
|
-
new SetDocAttrStep('counterFlags', counterFlags)
|
|
251
|
-
);
|
|
252
|
-
this._editorView.dispatch(tr);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
getDeletedArtifactIds() {
|
|
257
|
-
if (this._connector.getDeletedArtifactIds) {
|
|
258
|
-
this._connector.getDeletedArtifactIds(this.state.editorState.schema);
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
isNodeHasAttribute(node: Node, attrName: string) {
|
|
263
|
-
return node.attrs && node.attrs[attrName];
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
setContent = (content: any = {}): void => {
|
|
267
|
-
// [FS] IRAD-1571 2021-09-27
|
|
268
|
-
// dispatch a transaction that MUST start from the view
|
|
269
|
-
const editorState = this._editorView.state;
|
|
270
|
-
const { doc, schema } = editorState;
|
|
271
|
-
let { tr } = editorState;
|
|
272
|
-
const document = schema.nodeFromJSON(content ? content : EMPTY_DOC_JSON);
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
this.
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
this.
|
|
430
|
-
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
//
|
|
533
|
-
//
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
//
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
1
|
+
// @flow
|
|
2
|
+
import { EditorState, TextSelection, Plugin } from 'prosemirror-state';
|
|
3
|
+
import { Node } from 'prosemirror-model';
|
|
4
|
+
import { Transform } from 'prosemirror-transform';
|
|
5
|
+
import { EditorView } from 'prosemirror-view';
|
|
6
|
+
import * as React from 'react';
|
|
7
|
+
import ReactDOM from 'react-dom';
|
|
8
|
+
import { stringify } from 'flatted';
|
|
9
|
+
|
|
10
|
+
import convertFromJSON from '../convertFromJSON';
|
|
11
|
+
import RichTextEditor from '../ui/RichTextEditor';
|
|
12
|
+
import uuid from '../uuid';
|
|
13
|
+
import SimpleConnector from './SimpleConnector';
|
|
14
|
+
import CollabConnector from './CollabConnector';
|
|
15
|
+
import { EMPTY_DOC_JSON } from '../createEmptyEditorState';
|
|
16
|
+
import type { EditorRuntime } from '../Types';
|
|
17
|
+
import { createPopUp } from '@modusoperandi/licit-ui-commands';
|
|
18
|
+
import { atViewportCenter } from '@modusoperandi/licit-ui-commands';
|
|
19
|
+
import AlertInfo from '../ui/AlertInfo';
|
|
20
|
+
import { SetDocAttrStep } from '@modusoperandi/licit-doc-attrs-step';
|
|
21
|
+
import './licit.css';
|
|
22
|
+
import DefaultEditorPlugins from '../buildEditorPlugins';
|
|
23
|
+
import { Schema } from 'prosemirror-model';
|
|
24
|
+
import EditorMarks from '../EditorMarks';
|
|
25
|
+
import EditorNodes from '../EditorNodes';
|
|
26
|
+
|
|
27
|
+
const ATTR_OBJID = 'objectId';
|
|
28
|
+
const ATTR_OBJMETADATA = 'objectMetaData';
|
|
29
|
+
/**
|
|
30
|
+
* LICIT properties:
|
|
31
|
+
* docID {string} [] Collaborative Doument ID
|
|
32
|
+
* collabServiceURL {string} [/collaboration-service] Collaboration Service URL
|
|
33
|
+
* debug {boolean} [false] To enable/disable ProseMirror Debug Tools, available only in development.
|
|
34
|
+
* width {string} [100%] Width of the editor.
|
|
35
|
+
* height {string} [100%] Height of the editor.
|
|
36
|
+
* readOnly {boolean} [false] To enable/disable editing mode.
|
|
37
|
+
* onChange {@callback} [null] Fires after each significant change.
|
|
38
|
+
* @param data {JSON} Modified document data.
|
|
39
|
+
* onReady {@callback} [null] Fires when the editor is fully ready.
|
|
40
|
+
* @param ref {LICIT} Rerefence of the editor.
|
|
41
|
+
* data {JSON} [null] Document data to be loaded into the editor.
|
|
42
|
+
* disabled {boolean} [false] Disable the editor.
|
|
43
|
+
* embedded {boolean} [false] Disable/Enable inline behaviour.
|
|
44
|
+
* plugins [plugins] External Plugins into the editor.
|
|
45
|
+
*/
|
|
46
|
+
class Licit extends React.Component<any, any> {
|
|
47
|
+
_runtime: EditorRuntime;
|
|
48
|
+
_connector: any;
|
|
49
|
+
_clientID: string;
|
|
50
|
+
_editorView: EditorView; // This will be handy in updating document's content.
|
|
51
|
+
_skipSCU: boolean; // Flag to decide whether to skip shouldComponentUpdate
|
|
52
|
+
_defaultEditorSchema: Schema;
|
|
53
|
+
_defaultEditorPlugins: Array<Plugin>;
|
|
54
|
+
_devTools: Promise<any>;
|
|
55
|
+
_applyDevTools: any;
|
|
56
|
+
|
|
57
|
+
_popUp = null;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Provides access to prosemirror view.
|
|
61
|
+
*/
|
|
62
|
+
get editorView(): EditorView {
|
|
63
|
+
return this._editorView;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
constructor(props: any, context: any) {
|
|
67
|
+
super(props, context);
|
|
68
|
+
this.initialize(props);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
initialize(props: any) {
|
|
72
|
+
this._clientID = uuid();
|
|
73
|
+
this._editorView = null;
|
|
74
|
+
this._skipSCU = true;
|
|
75
|
+
|
|
76
|
+
const noop = function () {};
|
|
77
|
+
|
|
78
|
+
// [FS] IRAD-981 2020-06-10
|
|
79
|
+
// Component's configurations.
|
|
80
|
+
// [FS] IRAD-1552 2021-08-26
|
|
81
|
+
// Collaboration server / client should allow string values for document identifiers.
|
|
82
|
+
const docID = props.docID || ''; // Empty means collaborative.
|
|
83
|
+
const collaborative = docID !== '';
|
|
84
|
+
// [FS] IRAD-1553 2021-08-26
|
|
85
|
+
// Configurable Collaboration Service URL.
|
|
86
|
+
const collabServiceURL = props.collabServiceURL || '/collaboration-service';
|
|
87
|
+
const debug = props.debug || false;
|
|
88
|
+
// Default width and height to undefined
|
|
89
|
+
const width = props.width || undefined;
|
|
90
|
+
const height = props.height || undefined;
|
|
91
|
+
const onChangeCB =
|
|
92
|
+
typeof props.onChange === 'function' ? props.onChange : noop;
|
|
93
|
+
const onReadyCB =
|
|
94
|
+
typeof props.onReady === 'function' ? props.onReady : noop;
|
|
95
|
+
const readOnly = props.readOnly || false;
|
|
96
|
+
const data = props.data || null;
|
|
97
|
+
const disabled = props.disabled || false;
|
|
98
|
+
const embedded = props.embedded || false; // [FS] IRAD-996 2020-06-30
|
|
99
|
+
// [FS] 2020-07-03
|
|
100
|
+
// Handle Image Upload from Angular App
|
|
101
|
+
const runtime = props.runtime || null;
|
|
102
|
+
const plugins = props.plugins || null;
|
|
103
|
+
|
|
104
|
+
this._defaultEditorSchema = new Schema({
|
|
105
|
+
nodes: EditorNodes,
|
|
106
|
+
marks: EditorMarks,
|
|
107
|
+
});
|
|
108
|
+
this._defaultEditorPlugins = new DefaultEditorPlugins(
|
|
109
|
+
this._defaultEditorSchema
|
|
110
|
+
).get();
|
|
111
|
+
|
|
112
|
+
let editorState = convertFromJSON(
|
|
113
|
+
data,
|
|
114
|
+
null,
|
|
115
|
+
this._defaultEditorSchema,
|
|
116
|
+
plugins,
|
|
117
|
+
this._defaultEditorPlugins
|
|
118
|
+
);
|
|
119
|
+
// [FS] IRAD-1067 2020-09-19
|
|
120
|
+
// The editorState will return null if the doc Json is mal-formed
|
|
121
|
+
if (null === editorState) {
|
|
122
|
+
editorState = convertFromJSON(
|
|
123
|
+
EMPTY_DOC_JSON,
|
|
124
|
+
null,
|
|
125
|
+
this._defaultEditorSchema,
|
|
126
|
+
plugins,
|
|
127
|
+
this._defaultEditorPlugins
|
|
128
|
+
);
|
|
129
|
+
this.showAlert();
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const setState = this.setState.bind(this);
|
|
133
|
+
this._connector = collaborative
|
|
134
|
+
? new CollabConnector(
|
|
135
|
+
editorState,
|
|
136
|
+
setState,
|
|
137
|
+
{
|
|
138
|
+
docID,
|
|
139
|
+
collabServiceURL,
|
|
140
|
+
},
|
|
141
|
+
this._defaultEditorSchema,
|
|
142
|
+
this._defaultEditorPlugins,
|
|
143
|
+
// [FS] IRAD-1578 2021-09-27
|
|
144
|
+
this.onReady.bind(this)
|
|
145
|
+
)
|
|
146
|
+
: new SimpleConnector(editorState, setState);
|
|
147
|
+
|
|
148
|
+
// FS IRAD-989 2020-18-06
|
|
149
|
+
// updating properties should automatically render the changes
|
|
150
|
+
|
|
151
|
+
this.state = {
|
|
152
|
+
docID,
|
|
153
|
+
collabServiceURL,
|
|
154
|
+
data,
|
|
155
|
+
editorState,
|
|
156
|
+
width,
|
|
157
|
+
height,
|
|
158
|
+
readOnly,
|
|
159
|
+
onChangeCB,
|
|
160
|
+
onReadyCB,
|
|
161
|
+
debug,
|
|
162
|
+
disabled,
|
|
163
|
+
embedded,
|
|
164
|
+
runtime,
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
// FS IRAD-1040 2020-26-08
|
|
168
|
+
// Get the modified schema from editorstate and send it to collab server
|
|
169
|
+
if (this._connector.updateSchema) {
|
|
170
|
+
// Use known editorState to update schema.
|
|
171
|
+
this._connector.updateSchema(editorState.schema, data);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// [FS] IRAD-1578 2021-09-27
|
|
176
|
+
onReady(state: EditorState) {
|
|
177
|
+
const collabEditing = this.state.docID !== '';
|
|
178
|
+
|
|
179
|
+
if (collabEditing) {
|
|
180
|
+
this._editorView && this._editorView.focus();
|
|
181
|
+
if (this.state.onReadyCB) {
|
|
182
|
+
this.state.onReadyCB(this);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// [FS] IRAD-1067 2020-09-19
|
|
188
|
+
// Alert funtion to show document is corrupted
|
|
189
|
+
showAlert() {
|
|
190
|
+
const anchor = null;
|
|
191
|
+
this._popUp = createPopUp(AlertInfo, null, {
|
|
192
|
+
anchor,
|
|
193
|
+
position: atViewportCenter,
|
|
194
|
+
onClose: (val) => {
|
|
195
|
+
if (this._popUp) {
|
|
196
|
+
this._popUp = null;
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
resetCounters(transaction: Transform) {
|
|
203
|
+
for (let index = 1; index <= 10; index++) {
|
|
204
|
+
const counterVar = 'set-cust-style-counter-' + index;
|
|
205
|
+
const setCounterVal = window[counterVar];
|
|
206
|
+
if (setCounterVal) {
|
|
207
|
+
delete window[counterVar];
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
this.setCounterFlags(transaction, true);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
setCounterFlags(transaction: Transform, reset: boolean) {
|
|
214
|
+
let modified = false;
|
|
215
|
+
let counterFlags = null;
|
|
216
|
+
const existingCFlags = transaction.doc.attrs.counterFlags;
|
|
217
|
+
if (reset && !existingCFlags) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
for (let index = 1; index <= 10; index++) {
|
|
222
|
+
const counterVar = 'set-cust-style-counter-' + index;
|
|
223
|
+
|
|
224
|
+
const setCounterVal = window[counterVar];
|
|
225
|
+
if (setCounterVal) {
|
|
226
|
+
if (!counterFlags) {
|
|
227
|
+
counterFlags = {};
|
|
228
|
+
}
|
|
229
|
+
counterFlags[counterVar] = true;
|
|
230
|
+
|
|
231
|
+
if (!existingCFlags) {
|
|
232
|
+
modified = true;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (!modified) {
|
|
236
|
+
if (existingCFlags) {
|
|
237
|
+
if (setCounterVal) {
|
|
238
|
+
modified = undefined == existingCFlags[counterVar];
|
|
239
|
+
} else {
|
|
240
|
+
modified = undefined != existingCFlags[counterVar];
|
|
241
|
+
}
|
|
242
|
+
} else {
|
|
243
|
+
modified = setCounterVal;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (modified) {
|
|
249
|
+
const tr = this._editorView.state.tr.step(
|
|
250
|
+
new SetDocAttrStep('counterFlags', counterFlags)
|
|
251
|
+
);
|
|
252
|
+
this._editorView.dispatch(tr);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
getDeletedArtifactIds() {
|
|
257
|
+
if (this._connector.getDeletedArtifactIds) {
|
|
258
|
+
this._connector.getDeletedArtifactIds(this.state.editorState.schema);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
isNodeHasAttribute(node: Node, attrName: string) {
|
|
263
|
+
return node.attrs && node.attrs[attrName];
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
setContent = (content: any = {}): void => {
|
|
267
|
+
// [FS] IRAD-1571 2021-09-27
|
|
268
|
+
// dispatch a transaction that MUST start from the views current state;
|
|
269
|
+
const editorState = this._editorView.state;
|
|
270
|
+
const { doc, schema } = editorState;
|
|
271
|
+
let { tr } = editorState;
|
|
272
|
+
const document = schema.nodeFromJSON(content ? content : EMPTY_DOC_JSON);
|
|
273
|
+
|
|
274
|
+
// [FS] IRAD-1593 2021-10-12
|
|
275
|
+
// Reset lastKeyCode since the content is set dynamically and so lastKeyCode is invalid now.
|
|
276
|
+
this._editorView.lastKeyCode = null;
|
|
277
|
+
|
|
278
|
+
const selection = TextSelection.create(doc, 0, doc.content.size);
|
|
279
|
+
|
|
280
|
+
tr = tr.setSelection(selection).replaceSelectionWith(document, false);
|
|
281
|
+
// [FS] IRAD-1092 2020-12-03
|
|
282
|
+
// set the value for object metadata and objectId
|
|
283
|
+
tr = this.isNodeHasAttribute(document, ATTR_OBJMETADATA)
|
|
284
|
+
? tr.step(
|
|
285
|
+
new SetDocAttrStep(ATTR_OBJMETADATA, document.attrs.objectMetaData)
|
|
286
|
+
)
|
|
287
|
+
: tr;
|
|
288
|
+
tr = this.isNodeHasAttribute(document, ATTR_OBJID)
|
|
289
|
+
? tr.step(new SetDocAttrStep(ATTR_OBJID, document.attrs.objectId))
|
|
290
|
+
: tr;
|
|
291
|
+
|
|
292
|
+
this._skipSCU = true;
|
|
293
|
+
this._editorView.dispatch(tr);
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
hasDataChanged(nextData: any) {
|
|
297
|
+
let dataChanged = false;
|
|
298
|
+
|
|
299
|
+
// [FS] IRAD-1571 2021-09-27
|
|
300
|
+
// dispatch a transaction that MUST start from the views current state;
|
|
301
|
+
// [FS] IRAD-1589 2021-10-04
|
|
302
|
+
// Do a proper circular JSON comparison.
|
|
303
|
+
if (stringify(this.state.data) !== stringify(nextData)) {
|
|
304
|
+
const editorState = this._editorView.state;
|
|
305
|
+
const nextDoc = editorState.schema.nodeFromJSON(
|
|
306
|
+
nextData ? nextData : EMPTY_DOC_JSON
|
|
307
|
+
);
|
|
308
|
+
dataChanged = !nextDoc.eq(editorState.doc);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
return dataChanged;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
changeContent(data: any) {
|
|
315
|
+
if (this.hasDataChanged(data)) {
|
|
316
|
+
// FS IRAD-1592 2021-11-10
|
|
317
|
+
// Release here quickly, so that update doesn't care about at this point.
|
|
318
|
+
// data changed, so update document content
|
|
319
|
+
setTimeout(this.setContent.bind(this, data), 1);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
shouldComponentUpdate(nextProps: any, nextState: any) {
|
|
324
|
+
// Only interested if properties are set from outside.
|
|
325
|
+
if (!this._skipSCU) {
|
|
326
|
+
this._skipSCU = false;
|
|
327
|
+
|
|
328
|
+
this.changeContent(nextState.data);
|
|
329
|
+
|
|
330
|
+
if (this.state.docID !== nextState.docID) {
|
|
331
|
+
setTimeout(this.setDocID.bind(this, nextState), 1);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
return true;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
setDocID(nextState: any) {
|
|
339
|
+
// Collaborative mode changed
|
|
340
|
+
const collabEditing = nextState.docID !== '';
|
|
341
|
+
const editorState = this._editorView.state;
|
|
342
|
+
const setState = this.setState.bind(this);
|
|
343
|
+
const docID = nextState.docID || '';
|
|
344
|
+
const collabServiceURL =
|
|
345
|
+
nextState.collabServiceURL || '/collaboration-service';
|
|
346
|
+
|
|
347
|
+
if (this._connector) {
|
|
348
|
+
this._connector.cleanUp();
|
|
349
|
+
}
|
|
350
|
+
// create new connector
|
|
351
|
+
this._connector = collabEditing
|
|
352
|
+
? new CollabConnector(
|
|
353
|
+
editorState,
|
|
354
|
+
setState,
|
|
355
|
+
{
|
|
356
|
+
docID,
|
|
357
|
+
collabServiceURL,
|
|
358
|
+
},
|
|
359
|
+
this._defaultEditorSchema,
|
|
360
|
+
this._defaultEditorPlugins,
|
|
361
|
+
// [FS] IRAD-1578 2021-09-27
|
|
362
|
+
this.onReady.bind(this)
|
|
363
|
+
)
|
|
364
|
+
: new SimpleConnector(editorState, setState);
|
|
365
|
+
|
|
366
|
+
// FS IRAD-1592 2021-11-10
|
|
367
|
+
// Notify collab server
|
|
368
|
+
if (this._connector.updateSchema) {
|
|
369
|
+
// Use known editorState to update schema.
|
|
370
|
+
this._connector.updateSchema(editorState.schema);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
render(): React.Element<any> {
|
|
375
|
+
const {
|
|
376
|
+
editorState,
|
|
377
|
+
width,
|
|
378
|
+
height,
|
|
379
|
+
readOnly,
|
|
380
|
+
disabled,
|
|
381
|
+
embedded,
|
|
382
|
+
runtime,
|
|
383
|
+
} = this.state;
|
|
384
|
+
// [FS] IRAD-978 2020-06-05
|
|
385
|
+
// Using 100vw & 100vh (100% viewport) is not ideal for a component which is expected to be a part of a page,
|
|
386
|
+
// so changing it to 100% width & height which will occupy the area relative to its parent.
|
|
387
|
+
return (
|
|
388
|
+
<RichTextEditor
|
|
389
|
+
disabled={disabled}
|
|
390
|
+
editorState={editorState}
|
|
391
|
+
embedded={embedded}
|
|
392
|
+
height={height}
|
|
393
|
+
onChange={this._onChange}
|
|
394
|
+
onReady={this._onReady}
|
|
395
|
+
readOnly={readOnly}
|
|
396
|
+
runtime={runtime}
|
|
397
|
+
width={width}
|
|
398
|
+
/>
|
|
399
|
+
);
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
_onChange = (data: { state: EditorState, transaction: Transform }): void => {
|
|
403
|
+
const { transaction } = data;
|
|
404
|
+
|
|
405
|
+
/*
|
|
406
|
+
** ProseMirror Debug Tool's Snapshot creates a new state and sets that to editor view's state.
|
|
407
|
+
** This results in the connector's state as an orphan and thus transaction mismatch error.
|
|
408
|
+
** To resolve check and update the connector's state to keep in sync.
|
|
409
|
+
*/
|
|
410
|
+
|
|
411
|
+
if (this._editorView) {
|
|
412
|
+
const isSameState =
|
|
413
|
+
this._connector._editorState == this._editorView.state;
|
|
414
|
+
let invokeOnEdit = false;
|
|
415
|
+
|
|
416
|
+
if (!isSameState) {
|
|
417
|
+
this._connector._editorState = this._editorView.state;
|
|
418
|
+
invokeOnEdit = true;
|
|
419
|
+
} else {
|
|
420
|
+
// [FS] IRAD-1264 2021-03-19
|
|
421
|
+
// check if in non-collab mode.
|
|
422
|
+
if (!(this._connector instanceof CollabConnector)) {
|
|
423
|
+
invokeOnEdit = true;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
if (invokeOnEdit) {
|
|
427
|
+
// [FS] IRAD-1236 2020-03-05
|
|
428
|
+
// Only need to call if there is any difference in collab mode OR always in non-collab mode.
|
|
429
|
+
this._connector.onEdit(transaction, this._editorView);
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
if (transaction.docChanged) {
|
|
433
|
+
const docJson = transaction.doc.toJSON();
|
|
434
|
+
let isEmpty = false;
|
|
435
|
+
|
|
436
|
+
if (docJson.content && docJson.content.length === 1) {
|
|
437
|
+
if (
|
|
438
|
+
!docJson.content[0].content ||
|
|
439
|
+
(docJson.content[0].content &&
|
|
440
|
+
docJson.content[0].content[0].text &&
|
|
441
|
+
'' === docJson.content[0].content[0].text.trim())
|
|
442
|
+
) {
|
|
443
|
+
isEmpty = true;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
// setCFlags is/was always the opposite of isEmpty.
|
|
448
|
+
if (isEmpty) {
|
|
449
|
+
this.resetCounters(transaction);
|
|
450
|
+
} else {
|
|
451
|
+
this.setCounterFlags(transaction, false);
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
// Changing 2nd parameter from boolean to object was not in any way
|
|
455
|
+
// backwards compatible. Any conditional logic placed on isEmpty was
|
|
456
|
+
// broken. Reverting that change, then adding view as a 3rd parameter.
|
|
457
|
+
this.state.onChangeCB(docJson, isEmpty, this._editorView);
|
|
458
|
+
|
|
459
|
+
this.closeOpenedPopupModels();
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
};
|
|
463
|
+
// [FS] IRAD-1173 2021-02-25
|
|
464
|
+
// Bug fix: Transaction mismatch error when a dialog is opened and keep typing.
|
|
465
|
+
closeOpenedPopupModels() {
|
|
466
|
+
const element = document.getElementsByClassName('czi-pop-up-element')[0];
|
|
467
|
+
if (element && element.parentElement) {
|
|
468
|
+
element.parentElement.removeChild(element);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
_onReady = (editorView: EditorView): void => {
|
|
473
|
+
// [FS][06-APR-2020][IRAD-922]
|
|
474
|
+
// Showing focus in the editor.
|
|
475
|
+
const { state, dispatch } = editorView;
|
|
476
|
+
this._editorView = editorView;
|
|
477
|
+
const tr = state.tr;
|
|
478
|
+
const doc = state.doc;
|
|
479
|
+
const trx = tr.setSelection(TextSelection.create(doc, 0, doc.content.size));
|
|
480
|
+
dispatch(trx.scrollIntoView());
|
|
481
|
+
|
|
482
|
+
// [FS] IRAD-1578 2021-09-27
|
|
483
|
+
// In collab mode, fire onRead only after getting the response from collab server.
|
|
484
|
+
if (this.state.onReadyCB && this.state.docID === '') {
|
|
485
|
+
editorView.focus();
|
|
486
|
+
this.state.onReadyCB(this);
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
this.initDevTool(this.state.debug, editorView);
|
|
490
|
+
};
|
|
491
|
+
|
|
492
|
+
initDevTool(debug: boolean, editorView: EditorView): void {
|
|
493
|
+
// [FS] IRAD-1575 2021-09-27
|
|
494
|
+
if (debug) {
|
|
495
|
+
if (!this._devTools) {
|
|
496
|
+
this._devTools = new Promise(async (resolve, reject) => {
|
|
497
|
+
try {
|
|
498
|
+
// Method is exported as both the default and named, Using named
|
|
499
|
+
// for clarity and future proofing.
|
|
500
|
+
const { applyDevTools } = await import('prosemirror-dev-tools');
|
|
501
|
+
// got the pm dev tools instance.
|
|
502
|
+
this._applyDevTools = applyDevTools;
|
|
503
|
+
// Attach debug tools to current editor instance.
|
|
504
|
+
this._applyDevTools(editorView);
|
|
505
|
+
resolve(() => {
|
|
506
|
+
// [FS] IRAD-1571 2021-10-08
|
|
507
|
+
// Prosemirror Dev Tools handles as if one only instance is used in a page and
|
|
508
|
+
// hence handling removal here gracefully.
|
|
509
|
+
const place = document.querySelector(
|
|
510
|
+
'.'.concat('__prosemirror-dev-tools__')
|
|
511
|
+
);
|
|
512
|
+
if (place) {
|
|
513
|
+
ReactDOM.unmountComponentAtNode(place);
|
|
514
|
+
place.innerHTML = '';
|
|
515
|
+
}
|
|
516
|
+
});
|
|
517
|
+
} catch (error) {
|
|
518
|
+
reject();
|
|
519
|
+
}
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
// Attach debug tools to current editor instance.
|
|
524
|
+
if (this._devTools && this._applyDevTools) {
|
|
525
|
+
this._applyDevTools(editorView);
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
destroyDevTool(): void {
|
|
531
|
+
// [FS] IRAD-1569 2021-09-15
|
|
532
|
+
// Unmount dev tools when component is destroyed,
|
|
533
|
+
// so that toggle effect is not occuring when the document is retrieved each time.
|
|
534
|
+
if (this._devTools) {
|
|
535
|
+
// Call the applyDevTools method again to trigger DOM removal
|
|
536
|
+
// prosemirror-dev-tools has outstanding pull-requests that affect
|
|
537
|
+
// dom removal. this may need to be addressed once those have been merged.
|
|
538
|
+
this._devTools.then((removeDevTools) => removeDevTools());
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
componentWillUnmount(): void {
|
|
543
|
+
this.destroyDevTool();
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
/**
|
|
547
|
+
* LICIT properties:
|
|
548
|
+
* docID {number} [0] Collaborative Doument ID
|
|
549
|
+
* debug {boolean} [false] To enable/disable ProseMirror Debug Tools, available only in development.
|
|
550
|
+
* width {string} [100%] Width of the editor.
|
|
551
|
+
* height {height} [100%] Height of the editor.
|
|
552
|
+
* readOnly {boolean} [false] To enable/disable editing mode.
|
|
553
|
+
* onChange {@callback} [null] Fires after each significant change.
|
|
554
|
+
* @param data {JSON} Modified document data.
|
|
555
|
+
* onReady {@callback} [null] Fires when the editor is fully ready.
|
|
556
|
+
* @param ref {LICIT} Rerefence of the editor.
|
|
557
|
+
* data {JSON} [null] Document data to be loaded into the editor.
|
|
558
|
+
* disabled {boolean} [false] Disable the editor.
|
|
559
|
+
* embedded {boolean} [false] Disable/Enable inline behaviour.
|
|
560
|
+
*/
|
|
561
|
+
setProps = (props: any): void => {
|
|
562
|
+
// [FS] IRAD-1571 2021-10-08
|
|
563
|
+
// Since the debug lies outside the editor,
|
|
564
|
+
// any change to debug tool must be refreshed here.
|
|
565
|
+
if (this.state.debug !== props.debug) {
|
|
566
|
+
// change in debug flag.
|
|
567
|
+
if (props.debug) {
|
|
568
|
+
this.initDevTool(true, this._editorView);
|
|
569
|
+
} else {
|
|
570
|
+
this.destroyDevTool();
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
if (this.state.readOnly) {
|
|
575
|
+
// It should be possible to load content into the editor in readonly as well.
|
|
576
|
+
// It should not be necessary to make the component writable any time during the process
|
|
577
|
+
const propsCopy = {};
|
|
578
|
+
this._skipSCU = true;
|
|
579
|
+
Object.assign(propsCopy, props);
|
|
580
|
+
// make writable without content change
|
|
581
|
+
propsCopy.readOnly = false;
|
|
582
|
+
delete propsCopy.data;
|
|
583
|
+
this.setState(propsCopy);
|
|
584
|
+
}
|
|
585
|
+
// Need to go through shouldComponentUpdate lifecycle here, when updated from outside,
|
|
586
|
+
// so that content is modified gracefully using transaction so that undo/redo works too.
|
|
587
|
+
this._skipSCU = false;
|
|
588
|
+
this.setState(props);
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
export default Licit;
|