@modusoperandi/licit 0.1.4 → 0.1.8
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 +35 -29
- 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 -284
- package/build_collab_server.py +7 -7
- package/build_customstyle_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.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.flow +94 -94
- package/dist/DocNodeSpec.js.flow +64 -64
- package/dist/EMMarkSpec.js.flow +14 -14
- 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/FontSizeCommand.js +0 -8
- package/dist/FontSizeCommand.js.flow +57 -73
- package/dist/FontSizeMarkSpec.js.flow +49 -49
- package/dist/FontTypeCommand.js +0 -8
- package/dist/FontTypeCommand.js.flow +100 -116
- package/dist/FontTypeMarkSpec.js.flow +80 -80
- package/dist/HTMLMutator.js.flow +59 -59
- package/dist/HardBreakNodeSpec.js.flow +15 -15
- package/dist/HeadingCommand.js.flow +51 -51
- 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.flow +117 -117
- package/dist/ImageUploadCommand.js.flow +36 -36
- package/dist/ImageUploadPlaceholderPlugin.js.flow +192 -192
- package/dist/IndentCommand.js +0 -9
- package/dist/IndentCommand.js.flow +41 -54
- package/dist/LinkMarkSpec.js.flow +32 -32
- package/dist/LinkSetURLCommand.js.flow +103 -103
- 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 +3 -45
- package/dist/ListToggleCommand.js.flow +77 -117
- package/dist/MarkNames.js +2 -4
- package/dist/MarkNames.js.flow +18 -19
- package/dist/MarkToggleCommand.js +3 -114
- package/dist/MarkToggleCommand.js.flow +66 -168
- package/dist/MarksClearCommand.js +1 -18
- package/dist/MarksClearCommand.js.flow +42 -55
- 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 +6 -115
- package/dist/ParagraphNodeSpec.js.flow +160 -250
- 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.flow +75 -75
- package/dist/TableBorderColorCommand.js.flow +75 -75
- package/dist/TableCellColorCommand.js.flow +71 -71
- package/dist/TableCellMenuPlugin.js.flow +125 -125
- 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/TextAlignCommand.js +0 -8
- package/dist/TextAlignCommand.js.flow +122 -138
- package/dist/TextColorCommand.js +0 -16
- package/dist/TextColorCommand.js.flow +87 -112
- package/dist/TextColorMarkSpec.js.flow +35 -35
- package/dist/TextHighlightCommand.js +0 -12
- package/dist/TextHighlightCommand.js.flow +91 -110
- package/dist/TextHighlightMarkSpec.js.flow +38 -38
- package/dist/TextInsertTabSpaceCommand.js +2 -5
- package/dist/TextInsertTabSpaceCommand.js.flow +83 -85
- package/dist/TextLineSpacingCommand.js.flow +157 -157
- 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 +2 -121
- package/dist/Types.js.flow +75 -155
- package/dist/WebFontLoader.js.flow +22 -22
- package/dist/applyMark.js +3 -4
- package/dist/applyMark.js.flow +61 -64
- package/dist/blockQuoteInputRule.js.flow +36 -36
- package/dist/bom.xml +89 -89
- package/dist/browser.js.flow +7 -7
- package/dist/buildEditorPlugins.js +1 -3
- package/dist/buildEditorPlugins.js.flow +51 -53
- package/dist/buildInputRules.js.flow +81 -81
- package/dist/clearMarks.js +2 -5
- package/dist/clearMarks.js.flow +128 -132
- package/dist/client/CollabConnector.js +7 -7
- package/dist/client/CollabConnector.js.flow +71 -75
- package/dist/client/EditorConnection.js.flow +307 -307
- package/dist/client/Licit.js +197 -117
- package/dist/client/Licit.js.flow +562 -495
- package/dist/client/Licit.test.js +3 -57
- package/dist/client/Licit.test.js.flow +65 -120
- package/dist/client/Reporter.js.flow +37 -37
- package/dist/client/SimpleConnector.js.flow +53 -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/compareNumber.js.flow +11 -11
- package/dist/consolidateListNodes.js +27 -27
- package/dist/consolidateListNodes.js.flow +281 -281
- 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.flow +41 -41
- package/dist/createTableResizingPlugin.js.flow +86 -86
- package/dist/findActionableCell.js.flow +74 -74
- package/dist/findActiveMark.js.flow +32 -32
- package/dist/findNodesWithSameMark.js.flow +89 -89
- package/dist/hyphenize.js.flow +17 -17
- package/dist/index.js +0 -14
- package/dist/index.js.flow +10 -11
- package/dist/insertTable.js.flow +56 -56
- package/dist/isBulletListNode.js.flow +9 -9
- package/dist/isEditorStateEmpty.js.flow +32 -32
- package/dist/isInsideListItem.js.flow +13 -13
- package/dist/isListNode.js.flow +13 -13
- package/dist/isNodeSelectionForNodeType.js.flow +15 -15
- package/dist/isOrderedListNode.js.flow +9 -9
- package/dist/isTableNode.js.flow +15 -15
- package/dist/isTextStyleMarkCommandEnabled.js.flow +49 -49
- package/dist/joinDown.js.flow +27 -27
- 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/noop.js.flow +5 -5
- 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.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 -21
- package/dist/styles0.css +29 -30
- package/dist/toClosestFontPtSize.js.flow +22 -22
- package/dist/toSafeHTMLDocument.js.flow +9 -9
- package/dist/toggleBlockquote.js.flow +91 -91
- package/dist/toggleCodeBlock.js.flow +102 -102
- package/dist/toggleHeading.js.flow +113 -113
- package/dist/toggleList.js.flow +450 -450
- package/dist/transformAndPreserveTextSelection.js.flow +151 -151
- package/dist/ui/AlertInfo.js +1 -1
- package/dist/ui/AlertInfo.js.flow +64 -64
- package/dist/ui/BookmarkNodeView.js.flow +66 -66
- package/dist/ui/ColorEditor.js.flow +101 -101
- package/dist/ui/CommandButton.js.flow +68 -68
- package/dist/ui/CommandMenu.js.flow +75 -75
- package/dist/ui/CommandMenuButton.js.flow +131 -131
- package/dist/ui/CustomButton.js.flow +33 -33
- package/dist/ui/CustomEditorView.js.flow +28 -28
- package/dist/ui/CustomMenu.js.flow +17 -17
- package/dist/ui/CustomMenuItem.js.flow +36 -36
- package/dist/ui/CustomNodeView.js +6 -1
- package/dist/ui/CustomNodeView.js.flow +200 -196
- package/dist/ui/CustomRadioButton.js.flow +65 -65
- package/dist/ui/DocLayoutEditor.js.flow +146 -146
- package/dist/ui/Editor.js.flow +291 -291
- package/dist/ui/EditorFrameset.js.flow +81 -81
- package/dist/ui/EditorToolbar.js.flow +211 -211
- package/dist/ui/EditorToolbarConfig.js +0 -6
- package/dist/ui/EditorToolbarConfig.js.flow +172 -178
- package/dist/ui/FontSizeCommandMenuButton.js.flow +66 -66
- 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.flow +60 -60
- package/dist/ui/ImageInlineEditor.js.flow +67 -67
- package/dist/ui/ImageNodeView.js +1 -10
- package/dist/ui/ImageNodeView.js.flow +404 -414
- package/dist/ui/ImageResizeBox.js.flow +219 -219
- package/dist/ui/ImageURLEditor.js.flow +119 -119
- package/dist/ui/ImageUploadEditor.js.flow +117 -117
- package/dist/ui/KeyCodes.js.flow +12 -12
- package/dist/ui/LinkTooltip.js.flow +85 -85
- package/dist/ui/LinkURLEditor.js.flow +111 -111
- package/dist/ui/ListItemNodeView.js.flow +98 -98
- package/dist/ui/ListTypeButton.js.flow +131 -131
- package/dist/ui/ListTypeCommandButton.js +1 -1
- package/dist/ui/ListTypeCommandButton.js.flow +85 -86
- package/dist/ui/ListTypeMenu.js.flow +70 -70
- package/dist/ui/LoadingIndicator.js.flow +20 -20
- package/dist/ui/MathEditor.js.flow +78 -78
- package/dist/ui/MathInlineEditor.js.flow +102 -102
- package/dist/ui/MathNodeView.js.flow +175 -175
- package/dist/ui/PasteMenu.js.flow +57 -57
- package/dist/ui/PointerSurface.js.flow +141 -141
- package/dist/ui/PopUp.js.flow +77 -77
- package/dist/ui/PopUpManager.js.flow +213 -213
- package/dist/ui/PopUpPosition.js +0 -0
- package/dist/ui/PopUpPosition.js.flow +104 -104
- 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.flow +184 -184
- package/dist/ui/TableNodeView.js.flow +22 -22
- package/dist/ui/TooltipSurface.js.flow +76 -76
- package/dist/ui/bindScrollHandler.js.flow +46 -46
- package/dist/ui/canUseCSSFont.js.flow +43 -43
- package/dist/ui/clamp.js.flow +11 -11
- package/dist/ui/createPopUp.js.flow +205 -205
- package/dist/ui/czi-animations.css +15 -15
- package/dist/ui/czi-body-layout-editor.css +16 -16
- package/dist/ui/czi-bookmark-view.css +10 -10
- package/dist/ui/czi-color-editor.css +56 -56
- package/dist/ui/czi-cursor-placeholder.css +36 -36
- package/dist/ui/czi-custom-button.css +93 -93
- 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 -221
- 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-pop-up.css +32 -32
- 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-tooltip-surface.css +45 -45
- package/dist/ui/czi-vars.css +46 -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.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.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/preventEventDefault.js.flow +5 -5
- package/dist/ui/rects.js.flow +47 -47
- 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.flow +82 -82
- package/dist/ui/toHexColor.js.flow +26 -26
- package/dist/ui/uuid.js.flow +9 -9
- package/dist/updateIndentLevel.js +1 -47
- package/dist/updateIndentLevel.js.flow +211 -260
- package/dist/uuid.js.flow +9 -9
- package/flow-typed/@modusoperandilicit-customstyles.js +5 -0
- package/flow-typed/@modusoperandilicit-doc-attrs-step.js +5 -5
- package/flow-typed/@molicit-citation.js +5 -5
- 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.setup.js +5 -5
- package/licit/client/CustomLicitRuntime.js +95 -200
- package/licit/client/CustomStyleRuntime.js +136 -0
- package/licit/client/index.js +366 -365
- 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 -296
- package/licit/server/collab/start.js +13 -13
- package/licit/server/customstyles/start.js +184 -184
- package/licit/server/image/start.js +58 -58
- package/lint.sh +4 -4
- package/package.json +165 -165
- package/run_collab_server.py +21 -21
- package/run_customstyle_server.py +20 -20
- 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/FontSizeCommand.js +57 -73
- package/src/FontSizeMarkSpec.js +49 -49
- package/src/FontTypeCommand.js +100 -116
- package/src/FontTypeMarkSpec.js +80 -80
- package/src/HTMLMutator.js +59 -59
- package/src/HardBreakNodeSpec.js +15 -15
- package/src/HeadingCommand.js +51 -51
- 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/IndentCommand.js +41 -54
- 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 -117
- package/src/MarkNames.js +18 -19
- package/src/MarkToggleCommand.js +66 -168
- package/src/MarksClearCommand.js +42 -55
- 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 +160 -250
- 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/TextAlignCommand.js +122 -138
- package/src/TextColorCommand.js +87 -112
- package/src/TextColorMarkSpec.js +35 -35
- package/src/TextHighlightCommand.js +91 -110
- package/src/TextHighlightMarkSpec.js +38 -38
- package/src/TextInsertTabSpaceCommand.js +83 -85
- package/src/TextLineSpacingCommand.js +157 -157
- 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 -155
- package/src/WebFontLoader.js +22 -22
- package/src/applyMark.js +61 -64
- package/src/blockQuoteInputRule.js +36 -36
- package/src/browser.js +7 -7
- package/src/buildEditorPlugins.js +51 -53
- package/src/buildInputRules.js +81 -81
- package/src/clearMarks.js +128 -132
- package/src/client/CollabConnector.js +71 -75
- package/src/client/EditorConnection.js +307 -307
- package/src/client/Licit.js +562 -495
- package/src/client/Licit.test.js +65 -120
- package/src/client/Reporter.js +37 -37
- package/src/client/SimpleConnector.js +53 -53
- package/src/client/http.js +66 -66
- package/src/client/licit.css +12 -12
- package/src/client/throttle.js +27 -27
- package/src/compareNumber.js +11 -11
- package/src/consolidateListNodes.js +281 -281
- 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 +41 -41
- package/src/createTableResizingPlugin.js +86 -86
- package/src/findActionableCell.js +74 -74
- package/src/findActiveMark.js +32 -32
- package/src/findNodesWithSameMark.js +89 -89
- package/src/hyphenize.js +17 -17
- package/src/index.js +10 -11
- package/src/insertTable.js +56 -56
- package/src/isBulletListNode.js +9 -9
- package/src/isEditorStateEmpty.js +32 -32
- package/src/isInsideListItem.js +13 -13
- package/src/isListNode.js +13 -13
- package/src/isNodeSelectionForNodeType.js +15 -15
- package/src/isOrderedListNode.js +9 -9
- package/src/isTableNode.js +15 -15
- package/src/isTextStyleMarkCommandEnabled.js +49 -49
- 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/noop.js +5 -5
- 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 -21
- package/src/styles0.css +29 -30
- 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/toggleHeading.js +113 -113
- package/src/toggleList.js +450 -450
- package/src/transformAndPreserveTextSelection.js +151 -151
- package/src/ui/AlertInfo.js +64 -64
- package/src/ui/BookmarkNodeView.js +66 -66
- package/src/ui/ColorEditor.js +101 -101
- package/src/ui/CommandButton.js +68 -68
- package/src/ui/CommandMenu.js +75 -75
- package/src/ui/CommandMenuButton.js +131 -131
- package/src/ui/CustomButton.js +33 -33
- 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 -196
- package/src/ui/CustomRadioButton.js +65 -65
- package/src/ui/DocLayoutEditor.js +146 -146
- package/src/ui/Editor.js +291 -291
- package/src/ui/EditorFrameset.js +81 -81
- package/src/ui/EditorToolbar.js +211 -211
- package/src/ui/EditorToolbarConfig.js +172 -178
- 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 -414
- 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 -86
- 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/PointerSurface.js +141 -141
- package/src/ui/PopUp.js +77 -77
- package/src/ui/PopUpManager.js +213 -213
- package/src/ui/PopUpPosition.js +104 -104
- 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/TooltipSurface.js +76 -76
- package/src/ui/bindScrollHandler.js +46 -46
- package/src/ui/canUseCSSFont.js +43 -43
- package/src/ui/clamp.js +11 -11
- package/src/ui/createPopUp.js +205 -205
- package/src/ui/czi-animations.css +15 -15
- package/src/ui/czi-body-layout-editor.css +16 -16
- package/src/ui/czi-bookmark-view.css +10 -10
- package/src/ui/czi-color-editor.css +56 -56
- package/src/ui/czi-cursor-placeholder.css +36 -36
- package/src/ui/czi-custom-button.css +93 -93
- 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 -221
- 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-pop-up.css +32 -32
- 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-tooltip-surface.css +45 -45
- package/src/ui/czi-vars.css +46 -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/preventEventDefault.js +5 -5
- package/src/ui/rects.js +47 -47
- 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 +82 -82
- package/src/ui/toHexColor.js +26 -26
- package/src/ui/uuid.js +9 -9
- package/src/updateIndentLevel.js +211 -260
- package/src/uuid.js +9 -9
- package/style-service.Dockerfile +26 -26
- package/utils/build_bin.js +9 -9
- package/utils/build_customstyle_server.js +71 -71
- package/utils/build_image_server.js +71 -71
- package/utils/build_licit_collab_server.js +75 -75
- package/utils/build_web_server.js +40 -40
- package/utils/env.js +6 -6
- package/webpack.config.js +126 -126
- package/dist/CustomStyleCommand.js +0 -1534
- package/dist/CustomStyleCommand.js.flow +0 -1690
- package/dist/StylePlugin.js +0 -533
- package/dist/StylePlugin.js.flow +0 -548
- package/dist/clearCustomStyleMarks.js +0 -43
- package/dist/clearCustomStyleMarks.js.flow +0 -34
- package/dist/customStyle.js +0 -185
- package/dist/customStyle.js.flow +0 -171
- package/dist/ui/CustomMenuButton.js +0 -155
- package/dist/ui/CustomMenuButton.js.flow +0 -129
- package/dist/ui/CustomMenuUI.js +0 -479
- package/dist/ui/CustomMenuUI.js.flow +0 -464
- package/dist/ui/CustomStyleEditor.js +0 -1216
- package/dist/ui/CustomStyleEditor.js.flow +0 -1325
- package/dist/ui/CustomStyleItem.js +0 -164
- package/dist/ui/CustomStyleItem.js.flow +0 -152
- package/dist/ui/CustomStyleSubMenu.js +0 -62
- package/dist/ui/CustomStyleSubMenu.js.flow +0 -54
- package/dist/ui/HeadingCommandMenuButton.js +0 -157
- package/dist/ui/HeadingCommandMenuButton.js.flow +0 -147
- package/dist/ui/custom-dropdown.css +0 -90
- package/dist/ui/custom-style-edit.css +0 -430
- package/dist/ui/czi-cust-style-numbered.css +0 -137
- package/dist/ui/findActiveCustomStyle.js +0 -53
- package/dist/ui/findActiveCustomStyle.js.flow +0 -38
- package/src/CustomStyleCommand.js +0 -1690
- package/src/StylePlugin.js +0 -548
- package/src/clearCustomStyleMarks.js +0 -34
- package/src/customStyle.js +0 -171
- package/src/ui/CustomMenuButton.js +0 -129
- package/src/ui/CustomMenuUI.js +0 -464
- package/src/ui/CustomStyleEditor.js +0 -1325
- package/src/ui/CustomStyleItem.js +0 -152
- package/src/ui/CustomStyleSubMenu.js +0 -54
- package/src/ui/HeadingCommandMenuButton.js +0 -147
- package/src/ui/custom-dropdown.css +0 -90
- package/src/ui/custom-style-edit.css +0 -430
- package/src/ui/czi-cust-style-numbered.css +0 -137
- package/src/ui/findActiveCustomStyle.js +0 -38
|
@@ -1,1690 +0,0 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
import { EditorState, TextSelection, Selection } from 'prosemirror-state';
|
|
3
|
-
import { Transform } from 'prosemirror-transform';
|
|
4
|
-
import { EditorView } from 'prosemirror-view';
|
|
5
|
-
import { Node, Fragment, Schema, Mark } from 'prosemirror-model';
|
|
6
|
-
import { UICommand } from '@modusoperandi/licit-doc-attrs-step';
|
|
7
|
-
import { atViewportCenter } from './ui/PopUpPosition';
|
|
8
|
-
import createPopUp from './ui/createPopUp';
|
|
9
|
-
import AlertInfo from './ui/AlertInfo';
|
|
10
|
-
import CustomStyleEditor from './ui/CustomStyleEditor';
|
|
11
|
-
import MarkToggleCommand from './MarkToggleCommand';
|
|
12
|
-
import TextColorCommand from './TextColorCommand';
|
|
13
|
-
import TextHighlightCommand from './TextHighlightCommand';
|
|
14
|
-
import TextAlignCommand from './TextAlignCommand';
|
|
15
|
-
import FontTypeCommand from './FontTypeCommand';
|
|
16
|
-
import FontSizeCommand from './FontSizeCommand';
|
|
17
|
-
import TextLineSpacingCommand from './TextLineSpacingCommand';
|
|
18
|
-
import { setTextAlign } from './TextAlignCommand';
|
|
19
|
-
import ParagraphSpacingCommand from './ParagraphSpacingCommand';
|
|
20
|
-
import IndentCommand from './IndentCommand';
|
|
21
|
-
import {
|
|
22
|
-
removeTextAlignAndLineSpacing,
|
|
23
|
-
clearCustomStyleAttribute,
|
|
24
|
-
} from './clearCustomStyleMarks';
|
|
25
|
-
import {
|
|
26
|
-
getCustomStyleByName,
|
|
27
|
-
getCustomStyleByLevel,
|
|
28
|
-
isPreviousLevelExists,
|
|
29
|
-
} from './customStyle';
|
|
30
|
-
import type { StyleProps, EditorRuntime } from './Types';
|
|
31
|
-
import {
|
|
32
|
-
MARK_STRONG,
|
|
33
|
-
MARK_EM,
|
|
34
|
-
MARK_TEXT_COLOR,
|
|
35
|
-
MARK_FONT_SIZE,
|
|
36
|
-
MARK_FONT_TYPE,
|
|
37
|
-
MARK_STRIKE,
|
|
38
|
-
MARK_SUPER,
|
|
39
|
-
MARK_TEXT_HIGHLIGHT,
|
|
40
|
-
MARK_UNDERLINE,
|
|
41
|
-
} from './MarkNames';
|
|
42
|
-
import { PARAGRAPH } from './NodeNames';
|
|
43
|
-
import { getLineSpacingValue } from './ui/toCSSLineSpacing';
|
|
44
|
-
import {
|
|
45
|
-
RESERVED_STYLE_NONE,
|
|
46
|
-
RESERVED_STYLE_NONE_NUMBERING,
|
|
47
|
-
} from './ParagraphNodeSpec';
|
|
48
|
-
|
|
49
|
-
export const STRONG = 'strong';
|
|
50
|
-
export const EM = 'em';
|
|
51
|
-
export const COLOR = 'color';
|
|
52
|
-
export const FONTSIZE = 'fontSize';
|
|
53
|
-
export const FONTNAME = 'fontName';
|
|
54
|
-
export const STRIKE = 'strike';
|
|
55
|
-
export const SUPER = 'super';
|
|
56
|
-
export const TEXTHL = 'textHighlight';
|
|
57
|
-
export const UNDERLINE = 'underline';
|
|
58
|
-
export const ALIGN = 'align';
|
|
59
|
-
export const LHEIGHT = 'lineHeight';
|
|
60
|
-
export const SAFTER = 'paragraphSpacingAfter';
|
|
61
|
-
export const SBEFORE = 'paragraphSpacingBefore';
|
|
62
|
-
export const ATTR_OVERRIDDEN = 'overridden';
|
|
63
|
-
export const INDENT = 'indent';
|
|
64
|
-
export const NUMBERING = 'hasNumbering';
|
|
65
|
-
export const LEVELBASEDINDENT = 'isLevelbased';
|
|
66
|
-
export const LEVEL = 'styleLevel';
|
|
67
|
-
export const BOLDPARTIAL = 'boldPartial';
|
|
68
|
-
const MISSED_HEIRACHY_ELEMENT = {};
|
|
69
|
-
const nodesAfterSelection = [];
|
|
70
|
-
const nodesBeforeSelection = [];
|
|
71
|
-
const selectedNodes = [];
|
|
72
|
-
|
|
73
|
-
function getCustomStyleCommandsEx(
|
|
74
|
-
customStyle: any,
|
|
75
|
-
property: string,
|
|
76
|
-
commands: UICommand[]
|
|
77
|
-
): UICommand[] {
|
|
78
|
-
switch (property) {
|
|
79
|
-
case STRONG:
|
|
80
|
-
// [FS] IRAD-1043 2020-10-23
|
|
81
|
-
// Issue fix : unselect a style when creating a new style
|
|
82
|
-
// and that unselected styles also applied in selected paragraph
|
|
83
|
-
if (customStyle[property]) commands.push(new MarkToggleCommand('strong'));
|
|
84
|
-
break;
|
|
85
|
-
|
|
86
|
-
case EM:
|
|
87
|
-
// [FS] IRAD-1043 2020-10-23
|
|
88
|
-
// Issue fix : unselect a style when creating a new style
|
|
89
|
-
// and that unselected styles also applied in selected paragraph
|
|
90
|
-
if (customStyle[property]) commands.push(new MarkToggleCommand('em'));
|
|
91
|
-
break;
|
|
92
|
-
|
|
93
|
-
case COLOR:
|
|
94
|
-
commands.push(new TextColorCommand(customStyle[property]));
|
|
95
|
-
break;
|
|
96
|
-
|
|
97
|
-
case FONTSIZE:
|
|
98
|
-
commands.push(new FontSizeCommand(Number(customStyle[property])));
|
|
99
|
-
break;
|
|
100
|
-
|
|
101
|
-
case FONTNAME:
|
|
102
|
-
commands.push(new FontTypeCommand(customStyle[property]));
|
|
103
|
-
break;
|
|
104
|
-
|
|
105
|
-
case STRIKE:
|
|
106
|
-
// [FS] IRAD-1043 2020-10-23
|
|
107
|
-
// Issue fix : unselect a style when creating a new style
|
|
108
|
-
// and that unselected styles also applied in selected paragraph
|
|
109
|
-
if (customStyle[property]) commands.push(new MarkToggleCommand('strike'));
|
|
110
|
-
break;
|
|
111
|
-
|
|
112
|
-
case SUPER:
|
|
113
|
-
commands.push(new MarkToggleCommand('super'));
|
|
114
|
-
break;
|
|
115
|
-
|
|
116
|
-
case TEXTHL:
|
|
117
|
-
commands.push(new TextHighlightCommand(customStyle[property]));
|
|
118
|
-
break;
|
|
119
|
-
|
|
120
|
-
case UNDERLINE:
|
|
121
|
-
// [FS] IRAD-1043 2020-12-15
|
|
122
|
-
// Issue fix: user unselect Underline from a existing custom style, it didn't reflect in editor
|
|
123
|
-
if (customStyle[property])
|
|
124
|
-
commands.push(new MarkToggleCommand('underline'));
|
|
125
|
-
break;
|
|
126
|
-
|
|
127
|
-
case ALIGN:
|
|
128
|
-
commands.push(new TextAlignCommand(customStyle[property]));
|
|
129
|
-
break;
|
|
130
|
-
|
|
131
|
-
case LHEIGHT:
|
|
132
|
-
commands.push(new TextLineSpacingCommand(customStyle[property]));
|
|
133
|
-
break;
|
|
134
|
-
|
|
135
|
-
// [FS] IRAD-1100 2020-11-05
|
|
136
|
-
// Add in leading and trailing spacing (before and after a paragraph)
|
|
137
|
-
case SAFTER:
|
|
138
|
-
commands.push(new ParagraphSpacingCommand(customStyle[property], true));
|
|
139
|
-
break;
|
|
140
|
-
|
|
141
|
-
case SBEFORE:
|
|
142
|
-
commands.push(new ParagraphSpacingCommand(customStyle[property], false));
|
|
143
|
-
break;
|
|
144
|
-
case INDENT:
|
|
145
|
-
if (0 < customStyle[property]) {
|
|
146
|
-
commands.push(new IndentCommand(customStyle[property]));
|
|
147
|
-
}
|
|
148
|
-
break;
|
|
149
|
-
|
|
150
|
-
case LEVELBASEDINDENT:
|
|
151
|
-
// [FS] IRAD-1162 2021-1-25
|
|
152
|
-
// Bug fix: indent not working along with level
|
|
153
|
-
if (customStyle[LEVEL] && Number(customStyle[LEVEL]) > 0) {
|
|
154
|
-
commands.push(new IndentCommand(customStyle[LEVEL]));
|
|
155
|
-
}
|
|
156
|
-
break;
|
|
157
|
-
default:
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
return commands;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
// [FS] IRAD-1042 2020-10-01
|
|
165
|
-
// Creates commands based on custom style JSon object
|
|
166
|
-
export function getCustomStyleCommands(customStyle: any) {
|
|
167
|
-
let commands: UICommand[] = [];
|
|
168
|
-
for (const property in customStyle) {
|
|
169
|
-
commands = getCustomStyleCommandsEx(customStyle, property, commands);
|
|
170
|
-
}
|
|
171
|
-
return commands;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
class CustomStyleCommand extends UICommand {
|
|
175
|
-
_customStyleName: string;
|
|
176
|
-
_customStyle: any;
|
|
177
|
-
_popUp = null;
|
|
178
|
-
|
|
179
|
-
constructor(customStyle: any, customStyleName: string) {
|
|
180
|
-
super();
|
|
181
|
-
this._customStyle = customStyle;
|
|
182
|
-
this._customStyleName = customStyleName;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
renderLabel = (state: EditorState): any => {
|
|
186
|
-
return this._customStyleName;
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
isEmpty = (obj: Object) => {
|
|
190
|
-
for (const key in obj) {
|
|
191
|
-
if (obj.hasOwnProperty(key)) {
|
|
192
|
-
return false;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
return true;
|
|
196
|
-
};
|
|
197
|
-
|
|
198
|
-
isEnabled = (
|
|
199
|
-
state: EditorState,
|
|
200
|
-
view: EditorView,
|
|
201
|
-
menuTitle: string
|
|
202
|
-
): boolean => {
|
|
203
|
-
// [FS] IRAD-1053 2020-10-22
|
|
204
|
-
// Disable the Clear style menu when no styles applied to a paragraph
|
|
205
|
-
return !(
|
|
206
|
-
'clearstyle' === menuTitle &&
|
|
207
|
-
RESERVED_STYLE_NONE === this.isCustomStyleApplied(state)
|
|
208
|
-
);
|
|
209
|
-
};
|
|
210
|
-
|
|
211
|
-
// [FS] IRAD-1053 2020-10-22
|
|
212
|
-
// returns the applied style of a paragraph
|
|
213
|
-
isCustomStyleApplied(editorState: EditorState) {
|
|
214
|
-
const { selection, doc } = editorState;
|
|
215
|
-
const { from, to } = selection;
|
|
216
|
-
let customStyleName = RESERVED_STYLE_NONE;
|
|
217
|
-
doc.nodesBetween(from, to, (node, pos) => {
|
|
218
|
-
if (node.attrs.styleName) {
|
|
219
|
-
customStyleName = node.attrs.styleName;
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
return customStyleName;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
executeClearStyle(
|
|
226
|
-
state: EditorState,
|
|
227
|
-
dispatch: ?(tr: Transform) => void,
|
|
228
|
-
node: any,
|
|
229
|
-
startPos: number,
|
|
230
|
-
endPos: number,
|
|
231
|
-
newattrs: any,
|
|
232
|
-
selection: Selection
|
|
233
|
-
) {
|
|
234
|
-
let done = false;
|
|
235
|
-
let tr = this.clearCustomStyles(state.tr.setSelection(selection), state);
|
|
236
|
-
|
|
237
|
-
hasMismatchHeirarchy(state, tr, node, startPos, endPos);
|
|
238
|
-
|
|
239
|
-
// [FS] IRAD-1480 2021-06-25
|
|
240
|
-
// Indenting not remove when clear style is applied
|
|
241
|
-
newattrs = node.attrs;
|
|
242
|
-
newattrs['styleName'] = RESERVED_STYLE_NONE;
|
|
243
|
-
newattrs['id'] = '';
|
|
244
|
-
// [FS] IRAD-1414 2021-07-12
|
|
245
|
-
// FIX: Applied number/bullet list removes when 'Clear Style'
|
|
246
|
-
newattrs['indent'] = 0;
|
|
247
|
-
tr = tr.setNodeMarkup(startPos, undefined, newattrs);
|
|
248
|
-
tr = removeTextAlignAndLineSpacing(tr, state.schema);
|
|
249
|
-
tr = createEmptyElement(
|
|
250
|
-
state,
|
|
251
|
-
tr,
|
|
252
|
-
node,
|
|
253
|
-
startPos,
|
|
254
|
-
endPos,
|
|
255
|
-
node ? node.attrs : {}
|
|
256
|
-
);
|
|
257
|
-
if (dispatch && tr.docChanged) {
|
|
258
|
-
dispatch(tr);
|
|
259
|
-
done = true;
|
|
260
|
-
}
|
|
261
|
-
return done;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
execute = (
|
|
265
|
-
state: EditorState,
|
|
266
|
-
dispatch: ?(tr: Transform) => void,
|
|
267
|
-
view: ?EditorView
|
|
268
|
-
): boolean => {
|
|
269
|
-
let { tr } = state;
|
|
270
|
-
const { selection } = state;
|
|
271
|
-
const startPos = selection.$from.before(1);
|
|
272
|
-
const endPos = selection.$to.after(1) - 1;
|
|
273
|
-
const node = getNode(state, startPos, endPos, tr);
|
|
274
|
-
const newattrs = Object.assign({}, node ? node.attrs : {});
|
|
275
|
-
let isValidated = true;
|
|
276
|
-
|
|
277
|
-
if ('newstyle' === this._customStyle) {
|
|
278
|
-
this.editWindow(state, view, 0);
|
|
279
|
-
return false;
|
|
280
|
-
} else if ('editall' === this._customStyle) {
|
|
281
|
-
this.editWindow(state, view, 3);
|
|
282
|
-
return false;
|
|
283
|
-
}
|
|
284
|
-
// [FS] IRAD-1053 2020-10-08
|
|
285
|
-
// to remove the custom styles applied in the selected paragraph
|
|
286
|
-
else if (
|
|
287
|
-
'clearstyle' === this._customStyle ||
|
|
288
|
-
RESERVED_STYLE_NONE === this._customStyle
|
|
289
|
-
) {
|
|
290
|
-
return this.executeClearStyle(
|
|
291
|
-
state,
|
|
292
|
-
dispatch,
|
|
293
|
-
node,
|
|
294
|
-
startPos,
|
|
295
|
-
endPos,
|
|
296
|
-
newattrs,
|
|
297
|
-
selection
|
|
298
|
-
);
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
// [FS] IRAD-1213 2020-02-23
|
|
302
|
-
// validating the appropariate styles with corresponding levels are defined
|
|
303
|
-
// if no levels are defined no operation
|
|
304
|
-
//
|
|
305
|
-
if (
|
|
306
|
-
hasMismatchHeirarchy(
|
|
307
|
-
state,
|
|
308
|
-
tr,
|
|
309
|
-
node,
|
|
310
|
-
startPos,
|
|
311
|
-
endPos,
|
|
312
|
-
this._customStyle ? this._customStyle.styleName : ''
|
|
313
|
-
)
|
|
314
|
-
) {
|
|
315
|
-
isValidated = checkLevlsAvailable();
|
|
316
|
-
}
|
|
317
|
-
if (isValidated) {
|
|
318
|
-
tr = applyStyle(
|
|
319
|
-
this._customStyle,
|
|
320
|
-
this._customStyle.styleName,
|
|
321
|
-
state,
|
|
322
|
-
tr
|
|
323
|
-
);
|
|
324
|
-
if (tr.docChanged || tr.storedMarksSet) {
|
|
325
|
-
dispatch && dispatch(tr);
|
|
326
|
-
return true;
|
|
327
|
-
}
|
|
328
|
-
} else {
|
|
329
|
-
this.showAlert();
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
return false;
|
|
333
|
-
};
|
|
334
|
-
|
|
335
|
-
showAlert() {
|
|
336
|
-
const anchor = null;
|
|
337
|
-
this._popUp = createPopUp(
|
|
338
|
-
AlertInfo,
|
|
339
|
-
{
|
|
340
|
-
content:
|
|
341
|
-
'This Numberings breaks heirarchy, Previous levels are missing ',
|
|
342
|
-
title: 'Style Error!!!',
|
|
343
|
-
},
|
|
344
|
-
{
|
|
345
|
-
anchor,
|
|
346
|
-
position: atViewportCenter,
|
|
347
|
-
onClose: (val) => {
|
|
348
|
-
if (this._popUp) {
|
|
349
|
-
this._popUp = null;
|
|
350
|
-
}
|
|
351
|
-
},
|
|
352
|
-
}
|
|
353
|
-
);
|
|
354
|
-
}
|
|
355
|
-
|
|
356
|
-
// [FS] IRAD-1053 2020-12-17
|
|
357
|
-
// to clear the custom styles in the selected paragraph
|
|
358
|
-
clearCustomStyles(tr: Transform<any>, editorState: EditorState) {
|
|
359
|
-
const { selection, doc } = editorState;
|
|
360
|
-
// [FS] IRAD-1495 2021-06-25
|
|
361
|
-
// FIX: Clear style not working on multi select paragraph
|
|
362
|
-
const from = selection.$from.before(1);
|
|
363
|
-
const to = selection.$to.after(1) - 1;
|
|
364
|
-
let customStyleName = RESERVED_STYLE_NONE;
|
|
365
|
-
doc.nodesBetween(from, to, (node, pos) => {
|
|
366
|
-
if (node.attrs.styleName && RESERVED_STYLE_NONE !== node.attrs.styleName) {
|
|
367
|
-
customStyleName = node.attrs.styleName;
|
|
368
|
-
const storedmarks = getMarkByStyleName(
|
|
369
|
-
customStyleName,
|
|
370
|
-
editorState.schema
|
|
371
|
-
);
|
|
372
|
-
tr = this.removeMarks(storedmarks, tr, node);
|
|
373
|
-
return tr;
|
|
374
|
-
}
|
|
375
|
-
return tr;
|
|
376
|
-
});
|
|
377
|
-
return tr;
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
removeMarks(marks: [], tr: Transform, node: Node) {
|
|
381
|
-
const { selection } = tr;
|
|
382
|
-
// [FS] IRAD-1495 2021-06-25
|
|
383
|
-
// FIX: Clear style not working on multi select paragraph
|
|
384
|
-
const from = selection.$from.before(1);
|
|
385
|
-
const to = selection.$to.after(1);
|
|
386
|
-
|
|
387
|
-
// reset the custom style name to NONE after remove the styles
|
|
388
|
-
clearCustomStyleAttribute(node);
|
|
389
|
-
marks.forEach((mark) => {
|
|
390
|
-
tr = tr.removeMark(from, to, mark.type);
|
|
391
|
-
});
|
|
392
|
-
return tr;
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
// shows the create style popup
|
|
396
|
-
editWindow(state: EditorState, view: EditorView, mode: number) {
|
|
397
|
-
const { dispatch } = view;
|
|
398
|
-
let tr = state.tr;
|
|
399
|
-
const doc = state.doc;
|
|
400
|
-
|
|
401
|
-
this._popUp = createPopUp(
|
|
402
|
-
CustomStyleEditor,
|
|
403
|
-
this.createCustomObject(view, mode),
|
|
404
|
-
{
|
|
405
|
-
autoDismiss: false,
|
|
406
|
-
position: atViewportCenter,
|
|
407
|
-
onClose: (val) => {
|
|
408
|
-
if (this._popUp) {
|
|
409
|
-
this._popUp = null;
|
|
410
|
-
//handle save style object part here
|
|
411
|
-
if (undefined !== val) {
|
|
412
|
-
// [FS] IRAD-1231 2021-03-02
|
|
413
|
-
// Issue fix: The edited styles are not affected the document
|
|
414
|
-
if (3 === mode) {
|
|
415
|
-
// edit All
|
|
416
|
-
val.forEach((style) => {
|
|
417
|
-
this.getCustomStyles(view.runtime, style, view);
|
|
418
|
-
});
|
|
419
|
-
} else {
|
|
420
|
-
if (
|
|
421
|
-
view.runtime &&
|
|
422
|
-
typeof view.runtime.saveStyle === 'function'
|
|
423
|
-
) {
|
|
424
|
-
delete val.editorView;
|
|
425
|
-
|
|
426
|
-
// [FS] IRAD-1415 2021-06-02
|
|
427
|
-
// Issue: Allow to create custom style numbering level 2 without level 1
|
|
428
|
-
if (
|
|
429
|
-
styleHasNumbering(val) &&
|
|
430
|
-
!isValidHeirarchy(
|
|
431
|
-
val.styleName,
|
|
432
|
-
parseInt(val.styles.styleLevel)
|
|
433
|
-
)
|
|
434
|
-
) {
|
|
435
|
-
this.showAlert();
|
|
436
|
-
} else {
|
|
437
|
-
view.runtime.saveStyle(val).then((result) => {
|
|
438
|
-
// Issue fix: Created custom style Numbering not applied to paragraph.
|
|
439
|
-
tr = tr.setSelection(TextSelection.create(doc, 0, 0));
|
|
440
|
-
// Apply created styles to document
|
|
441
|
-
const { selection } = state;
|
|
442
|
-
const startPos = selection.$from.before(1);
|
|
443
|
-
const endPos = selection.$to.after(1);
|
|
444
|
-
const node = getNode(state, startPos, endPos, tr);
|
|
445
|
-
// [FS] IRAD-1238 2021-03-08
|
|
446
|
-
// Fix: Shows alert message 'This Numberings breaks hierarchy, Previous levels are missing' on create styles
|
|
447
|
-
// if a numbering applied in editor.
|
|
448
|
-
if (
|
|
449
|
-
!styleHasNumbering(val) ||
|
|
450
|
-
isValidHeirarchy(val.styleName, 0)
|
|
451
|
-
) {
|
|
452
|
-
// to add previous heirarchy levels
|
|
453
|
-
hasMismatchHeirarchy(
|
|
454
|
-
state,
|
|
455
|
-
tr,
|
|
456
|
-
node,
|
|
457
|
-
startPos,
|
|
458
|
-
endPos,
|
|
459
|
-
val.styleName
|
|
460
|
-
);
|
|
461
|
-
tr = applyStyle(val, val.styleName, state, tr);
|
|
462
|
-
dispatch(tr);
|
|
463
|
-
}
|
|
464
|
-
});
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
view.focus();
|
|
471
|
-
},
|
|
472
|
-
}
|
|
473
|
-
);
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
// [FS] IRAD-1231 2021-03-02
|
|
477
|
-
// update the document with the edited styles list.
|
|
478
|
-
getCustomStyles(
|
|
479
|
-
runtime: EditorRuntime,
|
|
480
|
-
styleName: string,
|
|
481
|
-
editorView: EditorView
|
|
482
|
-
) {
|
|
483
|
-
if (runtime && typeof runtime.getStylesAsync === 'function') {
|
|
484
|
-
runtime.getStylesAsync().then((result) => {
|
|
485
|
-
if (styleName) {
|
|
486
|
-
const { dispatch, state } = editorView;
|
|
487
|
-
let tr;
|
|
488
|
-
result.forEach((obj) => {
|
|
489
|
-
if (styleName === obj.styleName) {
|
|
490
|
-
tr = updateDocument(state, state.tr, styleName, obj);
|
|
491
|
-
}
|
|
492
|
-
});
|
|
493
|
-
if (tr) {
|
|
494
|
-
dispatch(tr);
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
});
|
|
498
|
-
}
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
// creates a sample style object
|
|
502
|
-
createCustomObject(editorView: EditorView, mode: number) {
|
|
503
|
-
return {
|
|
504
|
-
styleName: '',
|
|
505
|
-
mode: mode, //0 = new , 1- modify, 2- rename, 3- editall
|
|
506
|
-
styles: {},
|
|
507
|
-
// runtime: runtime,
|
|
508
|
-
editorView: editorView,
|
|
509
|
-
};
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
function compareMarkWithStyle(mark, style, tr, startPos, endPos, retObj, state) {
|
|
514
|
-
let same = false;
|
|
515
|
-
let overridden = false;
|
|
516
|
-
|
|
517
|
-
if (style) {
|
|
518
|
-
switch (mark.type.name) {
|
|
519
|
-
case MARK_STRONG:
|
|
520
|
-
same = undefined !== style[STRONG];
|
|
521
|
-
break;
|
|
522
|
-
case MARK_EM:
|
|
523
|
-
same = undefined !== style[EM];
|
|
524
|
-
break;
|
|
525
|
-
case MARK_TEXT_COLOR:
|
|
526
|
-
same = mark.attrs['color'] === style[COLOR];
|
|
527
|
-
break;
|
|
528
|
-
case MARK_FONT_SIZE:
|
|
529
|
-
same = mark.attrs['pt'] === style[FONTSIZE];
|
|
530
|
-
break;
|
|
531
|
-
case MARK_FONT_TYPE:
|
|
532
|
-
same = mark.attrs['name'] === style[FONTNAME];
|
|
533
|
-
break;
|
|
534
|
-
case MARK_STRIKE:
|
|
535
|
-
case MARK_SUPER:
|
|
536
|
-
case MARK_TEXT_HIGHLIGHT:
|
|
537
|
-
break;
|
|
538
|
-
case MARK_UNDERLINE:
|
|
539
|
-
same = undefined !== style[UNDERLINE];
|
|
540
|
-
break;
|
|
541
|
-
default:
|
|
542
|
-
break;
|
|
543
|
-
}
|
|
544
|
-
}
|
|
545
|
-
|
|
546
|
-
overridden = !same;
|
|
547
|
-
// [FS] IRAD-1475 2021-07-05
|
|
548
|
-
// FIX: Unable to apply tool bar format after applying a style
|
|
549
|
-
if (overridden && undefined === mark.attrs[ATTR_OVERRIDDEN]) {
|
|
550
|
-
addMarkAttribute(mark, state);
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
if (
|
|
554
|
-
undefined !== mark.attrs[ATTR_OVERRIDDEN] &&
|
|
555
|
-
mark.attrs[ATTR_OVERRIDDEN] !== overridden &&
|
|
556
|
-
tr.curSelection
|
|
557
|
-
) {
|
|
558
|
-
mark.attrs[ATTR_OVERRIDDEN] = overridden;
|
|
559
|
-
|
|
560
|
-
retObj.modified = true;
|
|
561
|
-
}
|
|
562
|
-
/*
|
|
563
|
-
case SUPER:
|
|
564
|
-
case TEXTHL:
|
|
565
|
-
case ALIGN:
|
|
566
|
-
case LHEIGHT:*/
|
|
567
|
-
|
|
568
|
-
return tr;
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
function addMarkAttribute(mark: Mark, state: EditorState) {
|
|
572
|
-
const NEWATTRS = [ATTR_OVERRIDDEN];
|
|
573
|
-
const existingAttr = getAnExistingAttribute(state.schema);
|
|
574
|
-
const requiredAttrs = [...NEWATTRS];
|
|
575
|
-
requiredAttrs.forEach((key) => {
|
|
576
|
-
if (mark.attrs) {
|
|
577
|
-
let newAttr = mark.attrs[key];
|
|
578
|
-
if (!newAttr) {
|
|
579
|
-
if (existingAttr) {
|
|
580
|
-
newAttr = Object.assign(
|
|
581
|
-
Object.create(Object.getPrototypeOf(existingAttr)),
|
|
582
|
-
existingAttr
|
|
583
|
-
);
|
|
584
|
-
newAttr.default = false;
|
|
585
|
-
} else {
|
|
586
|
-
newAttr = {};
|
|
587
|
-
newAttr.hasDefault = true;
|
|
588
|
-
newAttr.default = false;
|
|
589
|
-
}
|
|
590
|
-
mark.attrs[key] = newAttr;
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
});
|
|
594
|
-
}
|
|
595
|
-
function getAnExistingAttribute(schema) {
|
|
596
|
-
let existingAttr = null;
|
|
597
|
-
try {
|
|
598
|
-
existingAttr = schema['marks']['link']['attrs']['href'];
|
|
599
|
-
} catch (err) { }
|
|
600
|
-
return existingAttr;
|
|
601
|
-
}
|
|
602
|
-
export function updateOverrideFlag(
|
|
603
|
-
styleName: string,
|
|
604
|
-
tr: Transform,
|
|
605
|
-
node: Node,
|
|
606
|
-
startPos: Number,
|
|
607
|
-
endPos: Number,
|
|
608
|
-
retObj: any,
|
|
609
|
-
state: EditorState
|
|
610
|
-
) {
|
|
611
|
-
const styleProp = getCustomStyleByName(styleName);
|
|
612
|
-
if (styleProp && styleProp.styles) {
|
|
613
|
-
node.descendants(function (child: Node, pos: number, parent: Node) {
|
|
614
|
-
if (child instanceof Node) {
|
|
615
|
-
child.marks.forEach(function (mark, index) {
|
|
616
|
-
tr = compareMarkWithStyle(
|
|
617
|
-
mark,
|
|
618
|
-
styleProp.styles,
|
|
619
|
-
tr,
|
|
620
|
-
startPos,
|
|
621
|
-
endPos,
|
|
622
|
-
retObj,
|
|
623
|
-
state
|
|
624
|
-
);
|
|
625
|
-
});
|
|
626
|
-
}
|
|
627
|
-
});
|
|
628
|
-
}
|
|
629
|
-
return tr;
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
function onLoadRemoveAllMarksExceptOverridden(
|
|
633
|
-
node: Node,
|
|
634
|
-
schema: Schema,
|
|
635
|
-
from: number,
|
|
636
|
-
to: number,
|
|
637
|
-
tr: Transform,
|
|
638
|
-
state: EditorState
|
|
639
|
-
) {
|
|
640
|
-
const tasks = [];
|
|
641
|
-
node.descendants(function (child: Node, pos: number, parent: Node) {
|
|
642
|
-
if (child instanceof Node) {
|
|
643
|
-
child.marks.forEach(function (mark, index) {
|
|
644
|
-
// [FS] IRAD-1311 2021-05-06
|
|
645
|
-
// Issue fix: Applied URL is removed when applying number style and refresh.
|
|
646
|
-
if (!mark.attrs[ATTR_OVERRIDDEN] && 'link' !== mark.type.name) {
|
|
647
|
-
tasks.push({
|
|
648
|
-
child,
|
|
649
|
-
pos,
|
|
650
|
-
mark,
|
|
651
|
-
});
|
|
652
|
-
}
|
|
653
|
-
});
|
|
654
|
-
}
|
|
655
|
-
});
|
|
656
|
-
|
|
657
|
-
return handleRemoveMarks(tr, tasks, from, to, schema, null, state);
|
|
658
|
-
}
|
|
659
|
-
|
|
660
|
-
export function getMarkByStyleName(styleName: string, schema: Schema) {
|
|
661
|
-
const styleProp = getCustomStyleByName(styleName);
|
|
662
|
-
const marks = [];
|
|
663
|
-
let markType = null;
|
|
664
|
-
let attrs = null;
|
|
665
|
-
if (styleProp && styleProp.styles) {
|
|
666
|
-
for (const property in styleProp.styles) {
|
|
667
|
-
switch (property) {
|
|
668
|
-
case STRONG:
|
|
669
|
-
case BOLDPARTIAL:
|
|
670
|
-
if (styleProp.styles[property]) {
|
|
671
|
-
markType = schema.marks[MARK_STRONG];
|
|
672
|
-
marks.push(markType.create(attrs));
|
|
673
|
-
}
|
|
674
|
-
break;
|
|
675
|
-
|
|
676
|
-
case EM:
|
|
677
|
-
markType = schema.marks[MARK_EM];
|
|
678
|
-
if (styleProp.styles[property]) marks.push(markType.create(attrs));
|
|
679
|
-
break;
|
|
680
|
-
|
|
681
|
-
case COLOR:
|
|
682
|
-
markType = schema.marks[MARK_TEXT_COLOR];
|
|
683
|
-
attrs = styleProp.styles[property]
|
|
684
|
-
? { color: styleProp.styles[property] }
|
|
685
|
-
: null;
|
|
686
|
-
marks.push(markType.create(attrs));
|
|
687
|
-
break;
|
|
688
|
-
|
|
689
|
-
case FONTSIZE:
|
|
690
|
-
markType = schema.marks[MARK_FONT_SIZE];
|
|
691
|
-
attrs = styleProp.styles[property]
|
|
692
|
-
? { pt: styleProp.styles[property] }
|
|
693
|
-
: null;
|
|
694
|
-
marks.push(markType.create(attrs));
|
|
695
|
-
break;
|
|
696
|
-
|
|
697
|
-
case FONTNAME:
|
|
698
|
-
markType = schema.marks[MARK_FONT_TYPE];
|
|
699
|
-
attrs = styleProp.styles[property]
|
|
700
|
-
? { name: styleProp.styles[property] }
|
|
701
|
-
: null;
|
|
702
|
-
marks.push(markType.create(attrs));
|
|
703
|
-
break;
|
|
704
|
-
|
|
705
|
-
case TEXTHL:
|
|
706
|
-
markType = schema.marks[MARK_TEXT_HIGHLIGHT];
|
|
707
|
-
attrs = styleProp.styles[property]
|
|
708
|
-
? { highlightColor: styleProp.styles[property] }
|
|
709
|
-
: null;
|
|
710
|
-
marks.push(markType.create(attrs));
|
|
711
|
-
break;
|
|
712
|
-
|
|
713
|
-
case UNDERLINE:
|
|
714
|
-
markType = schema.marks[MARK_UNDERLINE];
|
|
715
|
-
marks.push(markType.create(attrs));
|
|
716
|
-
break;
|
|
717
|
-
|
|
718
|
-
default:
|
|
719
|
-
break;
|
|
720
|
-
}
|
|
721
|
-
}
|
|
722
|
-
}
|
|
723
|
-
return marks;
|
|
724
|
-
}
|
|
725
|
-
function applyStyleEx(
|
|
726
|
-
styleProp: ?StyleProps,
|
|
727
|
-
styleName: string,
|
|
728
|
-
state: EditorState,
|
|
729
|
-
tr: Transform,
|
|
730
|
-
node: Node,
|
|
731
|
-
startPos: number,
|
|
732
|
-
endPos: number
|
|
733
|
-
) {
|
|
734
|
-
const loading = !styleProp;
|
|
735
|
-
|
|
736
|
-
if (loading) {
|
|
737
|
-
tr = onLoadRemoveAllMarksExceptOverridden(
|
|
738
|
-
node,
|
|
739
|
-
state.schema,
|
|
740
|
-
startPos,
|
|
741
|
-
endPos,
|
|
742
|
-
tr,
|
|
743
|
-
state
|
|
744
|
-
);
|
|
745
|
-
} else {
|
|
746
|
-
// [FS] IRAD-1087 2020-11-02
|
|
747
|
-
// Issue fix: applied link is missing after applying a custom style.
|
|
748
|
-
tr = removeAllMarksExceptLink(startPos, endPos, tr, state.schema, styleProp, state);
|
|
749
|
-
}
|
|
750
|
-
|
|
751
|
-
if (loading) {
|
|
752
|
-
styleProp = getCustomStyleByName(styleName);
|
|
753
|
-
}
|
|
754
|
-
|
|
755
|
-
if (styleProp && styleProp.styles) {
|
|
756
|
-
const _commands = getCustomStyleCommands(styleProp.styles);
|
|
757
|
-
const newattrs = Object.assign({}, node.attrs);
|
|
758
|
-
// [FS] IRAD-1074 2020-10-22
|
|
759
|
-
// Issue fix on not removing center alignment when switch style with center
|
|
760
|
-
// alignment to style with left alignment
|
|
761
|
-
newattrs.align = null;
|
|
762
|
-
newattrs.lineSpacing = null;
|
|
763
|
-
|
|
764
|
-
// [FS] IRAD-1131 2021-01-12
|
|
765
|
-
// Indent overriding not working on a paragraph where custom style is applied
|
|
766
|
-
newattrs.indent = null;
|
|
767
|
-
newattrs.styleName = styleName;
|
|
768
|
-
|
|
769
|
-
_commands.forEach((element) => {
|
|
770
|
-
if (styleProp && styleProp.styles) {
|
|
771
|
-
// to set the node attribute for text-align
|
|
772
|
-
if (element instanceof TextAlignCommand) {
|
|
773
|
-
newattrs.align = styleProp.styles.align;
|
|
774
|
-
// to set the node attribute for line-height
|
|
775
|
-
} else if (element instanceof TextLineSpacingCommand) {
|
|
776
|
-
// [FS] IRAD-1104 2020-11-13
|
|
777
|
-
// Issue fix : Linespacing Double and Single not applied in the sample text paragraph
|
|
778
|
-
newattrs.lineSpacing = getLineSpacingValue(
|
|
779
|
-
styleProp.styles.lineHeight || ''
|
|
780
|
-
);
|
|
781
|
-
} else if (element instanceof ParagraphSpacingCommand) {
|
|
782
|
-
// [FS] IRAD-1100 2020-11-05
|
|
783
|
-
// Add in leading and trailing spacing (before and after a paragraph)
|
|
784
|
-
newattrs.paragraphSpacingAfter =
|
|
785
|
-
styleProp.styles.paragraphSpacingAfter || null;
|
|
786
|
-
newattrs.paragraphSpacingBefore =
|
|
787
|
-
styleProp.styles.paragraphSpacingBefore || null;
|
|
788
|
-
} else if (element instanceof IndentCommand) {
|
|
789
|
-
// [FS] IRAD-1162 2021-1-25
|
|
790
|
-
// Bug fix: indent not working along with level
|
|
791
|
-
newattrs.indent = styleProp.styles.isLevelbased
|
|
792
|
-
? styleProp.styles.styleLevel
|
|
793
|
-
: styleProp.styles.indent;
|
|
794
|
-
}
|
|
795
|
-
}
|
|
796
|
-
|
|
797
|
-
// to set the marks for the node
|
|
798
|
-
if (
|
|
799
|
-
element.executeCustom &&
|
|
800
|
-
typeof element.executeCustom === 'function'
|
|
801
|
-
) {
|
|
802
|
-
tr = element.executeCustom(state, tr, startPos, endPos);
|
|
803
|
-
}
|
|
804
|
-
});
|
|
805
|
-
const storedmarks = getMarkByStyleName(styleName, state.schema);
|
|
806
|
-
newattrs.id = null === newattrs.id ? '' : null;
|
|
807
|
-
tr = _setNodeAttribute(state, tr, startPos, endPos, newattrs);
|
|
808
|
-
tr.storedMarks = storedmarks;
|
|
809
|
-
}
|
|
810
|
-
return tr;
|
|
811
|
-
}
|
|
812
|
-
|
|
813
|
-
// [FS] IRAD-1238 2021-03-08
|
|
814
|
-
// Fix: Shows alert message 'This Numberings breaks hierarchy, Previous levels are missing' on create styles
|
|
815
|
-
// if a numbering applied in editor.
|
|
816
|
-
function styleHasNumbering(style) {
|
|
817
|
-
let hasNumbering = false;
|
|
818
|
-
hasNumbering = style.styles.hasNumbering ? style.styles.hasNumbering : false;
|
|
819
|
-
return hasNumbering;
|
|
820
|
-
}
|
|
821
|
-
|
|
822
|
-
// [FS] IRAD-1238 2021-03-08
|
|
823
|
-
// Check for the style with previous numbering level exists
|
|
824
|
-
function isValidHeirarchy(
|
|
825
|
-
styleName /* New style to be applied */,
|
|
826
|
-
level: number
|
|
827
|
-
) {
|
|
828
|
-
const styleLevel = level > 0 ? level : getStyleLevel(styleName);
|
|
829
|
-
// to find if the previous level of this level present
|
|
830
|
-
const previousLevel = styleLevel - 1;
|
|
831
|
-
return isPreviousLevelExists(previousLevel);
|
|
832
|
-
}
|
|
833
|
-
|
|
834
|
-
// [FS] IRAD-1213 2020-02-23
|
|
835
|
-
// Loop the whole document
|
|
836
|
-
// if any heirachy misses return true and keep the object in a global object
|
|
837
|
-
function hasMismatchHeirarchy(
|
|
838
|
-
state: EditorState,
|
|
839
|
-
tr: Transform,
|
|
840
|
-
node: Node /* The current node */,
|
|
841
|
-
startPos: number,
|
|
842
|
-
endPos: number,
|
|
843
|
-
styleName /* New style to be applied */
|
|
844
|
-
) {
|
|
845
|
-
const styleLevel = Number(getStyleLevel(styleName ? styleName : ''));
|
|
846
|
-
const currentLevel = getStyleLevel(node.attrs.styleName);
|
|
847
|
-
nodesBeforeSelection.splice(0);
|
|
848
|
-
nodesAfterSelection.splice(0);
|
|
849
|
-
const attrs = Object.assign({}, node.attrs);
|
|
850
|
-
attrs['styleName'] = styleName;
|
|
851
|
-
let previousLevel = null;
|
|
852
|
-
let levelDiff = 0;
|
|
853
|
-
let isAfter = false;
|
|
854
|
-
|
|
855
|
-
let hasHeirarchyBroken = false;
|
|
856
|
-
|
|
857
|
-
// Manage heirachy for nodes of previous position
|
|
858
|
-
// if (startPos !== 0) {
|
|
859
|
-
// Fix: document Load Error- Instead of state doc here give transaction doc,because when we apply changes
|
|
860
|
-
// dynamically through transactions the node position get affected,
|
|
861
|
-
// so depending on state doc nodes' positions is incorrect.
|
|
862
|
-
tr.doc.descendants((node, pos) => {
|
|
863
|
-
if (isAllowedNode(node)) {
|
|
864
|
-
const nodeStyleLevel = getStyleLevel(node.attrs.styleName);
|
|
865
|
-
if (nodeStyleLevel) {
|
|
866
|
-
if (pos < startPos) {
|
|
867
|
-
nodesBeforeSelection.push({ pos, node });
|
|
868
|
-
} else if (pos >= endPos) {
|
|
869
|
-
nodesAfterSelection.push({ pos, node });
|
|
870
|
-
}
|
|
871
|
-
}
|
|
872
|
-
}
|
|
873
|
-
return true;
|
|
874
|
-
});
|
|
875
|
-
if (nodesBeforeSelection.length === 0 && nodesAfterSelection.length === 0) {
|
|
876
|
-
setNewElementObject(attrs, startPos, 0, false);
|
|
877
|
-
hasHeirarchyBroken = true;
|
|
878
|
-
}
|
|
879
|
-
|
|
880
|
-
nodesBeforeSelection.forEach((item) => {
|
|
881
|
-
previousLevel = Number(getStyleLevel(item.node.attrs.styleName));
|
|
882
|
-
});
|
|
883
|
-
if (null === previousLevel && null == currentLevel) {
|
|
884
|
-
// No levels established before.
|
|
885
|
-
if (styleLevel !== 1) {
|
|
886
|
-
setNewElementObject(attrs, startPos, null, false);
|
|
887
|
-
hasHeirarchyBroken = true;
|
|
888
|
-
}
|
|
889
|
-
} else {
|
|
890
|
-
// If this is the first level, identify the level difference with previous level.
|
|
891
|
-
levelDiff = previousLevel ? styleLevel - previousLevel : styleLevel;
|
|
892
|
-
|
|
893
|
-
if (0 > levelDiff) {
|
|
894
|
-
// If NOT applying (same level OR adjacent level)
|
|
895
|
-
|
|
896
|
-
if (nodesAfterSelection.length === 0) {
|
|
897
|
-
isAfter = true;
|
|
898
|
-
previousLevel = Number(
|
|
899
|
-
getStyleLevel(
|
|
900
|
-
nodesBeforeSelection[nodesBeforeSelection.length - 1].node.attrs
|
|
901
|
-
.styleName
|
|
902
|
-
)
|
|
903
|
-
);
|
|
904
|
-
}
|
|
905
|
-
setNewElementObject(attrs, startPos, previousLevel, isAfter);
|
|
906
|
-
hasHeirarchyBroken = true;
|
|
907
|
-
}
|
|
908
|
-
if (levelDiff > 0) {
|
|
909
|
-
if (selectedNodes.length !== 1) {
|
|
910
|
-
previousLevel = Number(
|
|
911
|
-
getStyleLevel(selectedNodes[0].node.attrs.styleName)
|
|
912
|
-
);
|
|
913
|
-
}
|
|
914
|
-
setNewElementObject(attrs, startPos, previousLevel, false);
|
|
915
|
-
}
|
|
916
|
-
}
|
|
917
|
-
|
|
918
|
-
if (0 < nodesAfterSelection.length) {
|
|
919
|
-
const selectedLevel = styleLevel;
|
|
920
|
-
let currentLevel = 0;
|
|
921
|
-
let found = false;
|
|
922
|
-
nodesAfterSelection.every((item) => {
|
|
923
|
-
if (!found) {
|
|
924
|
-
currentLevel = Number(getStyleLevel(item.node.attrs.styleName));
|
|
925
|
-
levelDiff = selectedLevel - currentLevel;
|
|
926
|
-
|
|
927
|
-
if (styleLevel > 1 && levelDiff >= 0) {
|
|
928
|
-
if (
|
|
929
|
-
nodesBeforeSelection.length > 0 &&
|
|
930
|
-
nodesBeforeSelection[nodesBeforeSelection.length - 1].node.attrs
|
|
931
|
-
.styleName !== RESERVED_STYLE_NONE
|
|
932
|
-
) {
|
|
933
|
-
// do nothing
|
|
934
|
-
} else {
|
|
935
|
-
setNewElementObject(attrs, item.pos, 0, false);
|
|
936
|
-
found = true;
|
|
937
|
-
hasHeirarchyBroken = false;
|
|
938
|
-
}
|
|
939
|
-
|
|
940
|
-
// do nothing
|
|
941
|
-
} else if (0 === styleLevel) {
|
|
942
|
-
setNewElementObject(attrs, endPos, previousLevel, true);
|
|
943
|
-
hasHeirarchyBroken = false;
|
|
944
|
-
} else {
|
|
945
|
-
if (levelDiff < 0) {
|
|
946
|
-
setNewElementObject(attrs, endPos, selectedLevel, true);
|
|
947
|
-
found = true;
|
|
948
|
-
}
|
|
949
|
-
hasHeirarchyBroken = true;
|
|
950
|
-
}
|
|
951
|
-
}
|
|
952
|
-
});
|
|
953
|
-
}
|
|
954
|
-
return hasHeirarchyBroken;
|
|
955
|
-
}
|
|
956
|
-
|
|
957
|
-
// add new blank element and apply curresponding styles
|
|
958
|
-
function createEmptyElement(
|
|
959
|
-
state: EditorState,
|
|
960
|
-
tr: Transform,
|
|
961
|
-
node: Node /* The current node */,
|
|
962
|
-
startPos: number,
|
|
963
|
-
endPos: number,
|
|
964
|
-
attrs /* New style to be applied */
|
|
965
|
-
) {
|
|
966
|
-
/* Validate the missed heirachy object details are availale */
|
|
967
|
-
if (undefined !== MISSED_HEIRACHY_ELEMENT.attrs) {
|
|
968
|
-
if (!MISSED_HEIRACHY_ELEMENT.isAfter) {
|
|
969
|
-
const appliedLevel = Number(
|
|
970
|
-
getStyleLevel(MISSED_HEIRACHY_ELEMENT.attrs.styleName)
|
|
971
|
-
);
|
|
972
|
-
let hasNodeAfter = false;
|
|
973
|
-
let subsequantLevel = 0;
|
|
974
|
-
let posArray = [];
|
|
975
|
-
let counter = 0;
|
|
976
|
-
let newattrs = null;
|
|
977
|
-
|
|
978
|
-
if (nodesBeforeSelection.length > 0) {
|
|
979
|
-
nodesBeforeSelection.forEach((item) => {
|
|
980
|
-
subsequantLevel = Number(getStyleLevel(item.node.attrs.styleName));
|
|
981
|
-
if (0 === startPos && 0 === counter) {
|
|
982
|
-
if (0 === subsequantLevel && 1 === appliedLevel) {
|
|
983
|
-
// needEmptyElement = false;
|
|
984
|
-
} else {
|
|
985
|
-
if (subsequantLevel !== appliedLevel) {
|
|
986
|
-
newattrs = Object.assign({}, item.node.attrs);
|
|
987
|
-
posArray.push({
|
|
988
|
-
pos: startPos,
|
|
989
|
-
appliedLevel: appliedLevel,
|
|
990
|
-
currentLevel: subsequantLevel,
|
|
991
|
-
});
|
|
992
|
-
}
|
|
993
|
-
}
|
|
994
|
-
} else {
|
|
995
|
-
if (startPos >= item.pos) {
|
|
996
|
-
if (
|
|
997
|
-
startPos !== 0 &&
|
|
998
|
-
RESERVED_STYLE_NONE !== item.node.attrs.styleName &&
|
|
999
|
-
Number(getStyleLevel(item.node.attrs.styleName)) > 0
|
|
1000
|
-
) {
|
|
1001
|
-
if (appliedLevel - subsequantLevel > 1) {
|
|
1002
|
-
newattrs = Object.assign({}, item.node.attrs);
|
|
1003
|
-
posArray = [];
|
|
1004
|
-
posArray.push({
|
|
1005
|
-
pos: startPos,
|
|
1006
|
-
appliedLevel: appliedLevel,
|
|
1007
|
-
currentLevel: subsequantLevel,
|
|
1008
|
-
});
|
|
1009
|
-
} else if (1 === appliedLevel - subsequantLevel) {
|
|
1010
|
-
posArray = [];
|
|
1011
|
-
hasNodeAfter = true;
|
|
1012
|
-
}
|
|
1013
|
-
} else {
|
|
1014
|
-
if (startPos !== 0 && RESERVED_STYLE_NONE === item.node.attrs.styleName) {
|
|
1015
|
-
newattrs = Object.assign({}, item.node.attrs);
|
|
1016
|
-
posArray.push({
|
|
1017
|
-
pos: startPos,
|
|
1018
|
-
appliedLevel: appliedLevel,
|
|
1019
|
-
currentLevel: subsequantLevel,
|
|
1020
|
-
});
|
|
1021
|
-
}
|
|
1022
|
-
}
|
|
1023
|
-
}
|
|
1024
|
-
}
|
|
1025
|
-
counter++;
|
|
1026
|
-
});
|
|
1027
|
-
}
|
|
1028
|
-
if (nodesAfterSelection.length > 0 && !hasNodeAfter) {
|
|
1029
|
-
nodesAfterSelection.forEach((item) => {
|
|
1030
|
-
if (startPos === item.pos) {
|
|
1031
|
-
newattrs = MISSED_HEIRACHY_ELEMENT.attrs;
|
|
1032
|
-
posArray.push({
|
|
1033
|
-
pos: startPos,
|
|
1034
|
-
appliedLevel: appliedLevel,
|
|
1035
|
-
currentLevel: 0,
|
|
1036
|
-
});
|
|
1037
|
-
} else if (startPos < item.pos) {
|
|
1038
|
-
newattrs = MISSED_HEIRACHY_ELEMENT.attrs;
|
|
1039
|
-
posArray.push({
|
|
1040
|
-
pos: startPos,
|
|
1041
|
-
appliedLevel: appliedLevel,
|
|
1042
|
-
currentLevel: 0,
|
|
1043
|
-
});
|
|
1044
|
-
} else if (startPos > item.pos) {
|
|
1045
|
-
posArray.push({
|
|
1046
|
-
pos: startPos,
|
|
1047
|
-
appliedLevel: appliedLevel,
|
|
1048
|
-
currentLevel: 0,
|
|
1049
|
-
});
|
|
1050
|
-
}
|
|
1051
|
-
});
|
|
1052
|
-
}
|
|
1053
|
-
// }
|
|
1054
|
-
if (
|
|
1055
|
-
nodesBeforeSelection.length === 0 &&
|
|
1056
|
-
nodesAfterSelection.length === 0
|
|
1057
|
-
) {
|
|
1058
|
-
newattrs = MISSED_HEIRACHY_ELEMENT.attrs;
|
|
1059
|
-
posArray.push({
|
|
1060
|
-
pos: startPos,
|
|
1061
|
-
appliedLevel: appliedLevel,
|
|
1062
|
-
currentLevel: 0,
|
|
1063
|
-
});
|
|
1064
|
-
}
|
|
1065
|
-
|
|
1066
|
-
if (posArray.length > 0) {
|
|
1067
|
-
tr = addElement(
|
|
1068
|
-
newattrs,
|
|
1069
|
-
state,
|
|
1070
|
-
tr,
|
|
1071
|
-
posArray[0].pos,
|
|
1072
|
-
false,
|
|
1073
|
-
posArray[0].appliedLevel,
|
|
1074
|
-
posArray[0].currentLevel
|
|
1075
|
-
);
|
|
1076
|
-
}
|
|
1077
|
-
} else {
|
|
1078
|
-
tr = manageElementsAfterSelection(
|
|
1079
|
-
nodesAfterSelection.length > 0
|
|
1080
|
-
? nodesAfterSelection
|
|
1081
|
-
: nodesBeforeSelection,
|
|
1082
|
-
state,
|
|
1083
|
-
tr
|
|
1084
|
-
);
|
|
1085
|
-
}
|
|
1086
|
-
}
|
|
1087
|
-
|
|
1088
|
-
nodesAfterSelection.splice(0);
|
|
1089
|
-
nodesBeforeSelection.splice(0);
|
|
1090
|
-
setNewElementObject(undefined, 0, null, false);
|
|
1091
|
-
return tr;
|
|
1092
|
-
}
|
|
1093
|
-
|
|
1094
|
-
// [FS] IRAD-1387 2021-05-25
|
|
1095
|
-
// Indent/deindent without heirachy break
|
|
1096
|
-
export function allowCustomLevelIndent(
|
|
1097
|
-
tr: Transform,
|
|
1098
|
-
startPos: number,
|
|
1099
|
-
styleName: string,
|
|
1100
|
-
delta: number
|
|
1101
|
-
) {
|
|
1102
|
-
const styleLevel = Number(getStyleLevel(styleName));
|
|
1103
|
-
let allowIndent = false;
|
|
1104
|
-
startPos = startPos < 2 ? 2 : startPos - 1;
|
|
1105
|
-
if (delta > 0) {
|
|
1106
|
-
for (let index = startPos; index >= 0; index--) {
|
|
1107
|
-
const element = tr.doc.resolve(index);
|
|
1108
|
-
if (element && element.parent) {
|
|
1109
|
-
const node = element.parent;
|
|
1110
|
-
if (isAllowedNode(node)) {
|
|
1111
|
-
if (RESERVED_STYLE_NONE !== node.attrs.styleName) {
|
|
1112
|
-
const nodeStyleLevel = Number(getStyleLevel(node.attrs.styleName));
|
|
1113
|
-
if (
|
|
1114
|
-
nodeStyleLevel >= styleLevel ||
|
|
1115
|
-
styleLevel - nodeStyleLevel === 1
|
|
1116
|
-
) {
|
|
1117
|
-
allowIndent = true;
|
|
1118
|
-
break;
|
|
1119
|
-
} else {
|
|
1120
|
-
index = index - node.nodeSize || 0;
|
|
1121
|
-
}
|
|
1122
|
-
}
|
|
1123
|
-
} else {
|
|
1124
|
-
index = index - node.nodeSize || 0;
|
|
1125
|
-
}
|
|
1126
|
-
}
|
|
1127
|
-
}
|
|
1128
|
-
} else {
|
|
1129
|
-
startPos = startPos + 1;
|
|
1130
|
-
for (let index = startPos; index < tr.doc.nodeSize - 2; index++) {
|
|
1131
|
-
const element = tr.doc.resolve(index);
|
|
1132
|
-
if (element && element.parent) {
|
|
1133
|
-
const node = element.parent;
|
|
1134
|
-
if (isAllowedNode(node)) {
|
|
1135
|
-
if (RESERVED_STYLE_NONE !== node.attrs.styleName) {
|
|
1136
|
-
const nodeStyleLevel = Number(getStyleLevel(node.attrs.styleName));
|
|
1137
|
-
if (nodeStyleLevel >= styleLevel) {
|
|
1138
|
-
allowIndent = true;
|
|
1139
|
-
index = index - node.nodeSize;
|
|
1140
|
-
break;
|
|
1141
|
-
} else {
|
|
1142
|
-
index = index + node.nodeSize;
|
|
1143
|
-
}
|
|
1144
|
-
}
|
|
1145
|
-
} else {
|
|
1146
|
-
index = index + node.nodeSize;
|
|
1147
|
-
}
|
|
1148
|
-
}
|
|
1149
|
-
}
|
|
1150
|
-
}
|
|
1151
|
-
|
|
1152
|
-
return allowIndent;
|
|
1153
|
-
}
|
|
1154
|
-
|
|
1155
|
-
// Mange heirarchy for the elements after selection
|
|
1156
|
-
function manageElementsAfterSelection(nodeArray, state, tr) {
|
|
1157
|
-
let selectedLevel = Number(MISSED_HEIRACHY_ELEMENT.previousLevel);
|
|
1158
|
-
let subsequantLevel = 0;
|
|
1159
|
-
let counter = 0;
|
|
1160
|
-
|
|
1161
|
-
for (let index = 0; index < nodeArray.length; index++) {
|
|
1162
|
-
const item = nodeArray[index];
|
|
1163
|
-
subsequantLevel = Number(getStyleLevel(item.node.attrs.styleName));
|
|
1164
|
-
if (subsequantLevel !== 0 && selectedLevel !== subsequantLevel) {
|
|
1165
|
-
if (subsequantLevel - selectedLevel > 1) {
|
|
1166
|
-
subsequantLevel = subsequantLevel - 1;
|
|
1167
|
-
const style = getCustomStyleByLevel(subsequantLevel);
|
|
1168
|
-
if (style) {
|
|
1169
|
-
const newattrs = Object.assign({}, item.node.attrs);
|
|
1170
|
-
newattrs.styleName = style.styleName;
|
|
1171
|
-
tr = tr.setNodeMarkup(item.pos, undefined, newattrs);
|
|
1172
|
-
selectedLevel = subsequantLevel;
|
|
1173
|
-
}
|
|
1174
|
-
counter++;
|
|
1175
|
-
} else {
|
|
1176
|
-
index = nodeArray.length + 1;
|
|
1177
|
-
}
|
|
1178
|
-
} else {
|
|
1179
|
-
if (subsequantLevel !== 0 && counter === 0 && nodeArray.length === 0) {
|
|
1180
|
-
const style = getCustomStyleByLevel(1);
|
|
1181
|
-
if (style) {
|
|
1182
|
-
const newattrs = Object.assign({}, item.node.attrs);
|
|
1183
|
-
newattrs.styleName = style.styleName;
|
|
1184
|
-
tr = addElement(newattrs, state, tr, item.pos, false, 2, 0);
|
|
1185
|
-
}
|
|
1186
|
-
}
|
|
1187
|
-
}
|
|
1188
|
-
}
|
|
1189
|
-
return tr;
|
|
1190
|
-
}
|
|
1191
|
-
// check the styles with specified levels are defined
|
|
1192
|
-
function checkLevlsAvailable() {
|
|
1193
|
-
let isAvailable = true;
|
|
1194
|
-
if (MISSED_HEIRACHY_ELEMENT.attrs) {
|
|
1195
|
-
for (
|
|
1196
|
-
let index = 1;
|
|
1197
|
-
index < MISSED_HEIRACHY_ELEMENT.attrs.styleLevel;
|
|
1198
|
-
index++
|
|
1199
|
-
) {
|
|
1200
|
-
const styleLevel = getCustomStyleByLevel(index);
|
|
1201
|
-
if (!styleLevel) {
|
|
1202
|
-
isAvailable = false;
|
|
1203
|
-
index = 11;
|
|
1204
|
-
}
|
|
1205
|
-
}
|
|
1206
|
-
}
|
|
1207
|
-
return isAvailable;
|
|
1208
|
-
}
|
|
1209
|
-
// keep the position and node details in a global variable
|
|
1210
|
-
function setNewElementObject(attrs, startPos, previousLevel, isAfter) {
|
|
1211
|
-
MISSED_HEIRACHY_ELEMENT.isAfter = isAfter;
|
|
1212
|
-
MISSED_HEIRACHY_ELEMENT.attrs = attrs;
|
|
1213
|
-
MISSED_HEIRACHY_ELEMENT.startPos = startPos;
|
|
1214
|
-
MISSED_HEIRACHY_ELEMENT.previousLevel = previousLevel;
|
|
1215
|
-
}
|
|
1216
|
-
|
|
1217
|
-
function insertParagraph(nodeAttrs, startPos, tr, index, state) {
|
|
1218
|
-
if (state && state.schema && nodeAttrs) {
|
|
1219
|
-
const paragraph = state.schema.nodes[PARAGRAPH];
|
|
1220
|
-
// [FS] IRAD-1202 2021-02-15
|
|
1221
|
-
// Handle Numbering case for None styles.
|
|
1222
|
-
// Use the styleName to hold the style level.
|
|
1223
|
-
const customStyle = getCustomStyleByLevel(index);
|
|
1224
|
-
nodeAttrs = resetNodeAttrs(nodeAttrs, customStyle);
|
|
1225
|
-
const paragraphNode = paragraph.create(nodeAttrs, null, null);
|
|
1226
|
-
tr = tr.insert(startPos, Fragment.from(paragraphNode));
|
|
1227
|
-
}
|
|
1228
|
-
return tr;
|
|
1229
|
-
}
|
|
1230
|
-
|
|
1231
|
-
// [FS] IRAD-1243 2021-05-05
|
|
1232
|
-
// To reset the previous numbering custom style attribute values.
|
|
1233
|
-
function resetNodeAttrs(nodeAttrs, customStyle) {
|
|
1234
|
-
nodeAttrs.styleName = customStyle ? customStyle.styleName : '';
|
|
1235
|
-
nodeAttrs.indent = null;
|
|
1236
|
-
nodeAttrs.lineSpacing = null;
|
|
1237
|
-
nodeAttrs.paddingBottom = null;
|
|
1238
|
-
nodeAttrs.paddingTop = null;
|
|
1239
|
-
return nodeAttrs;
|
|
1240
|
-
}
|
|
1241
|
-
|
|
1242
|
-
function addElementEx(
|
|
1243
|
-
nodeAttrs,
|
|
1244
|
-
state,
|
|
1245
|
-
tr,
|
|
1246
|
-
startPos,
|
|
1247
|
-
after,
|
|
1248
|
-
previousLevel,
|
|
1249
|
-
currentLevel
|
|
1250
|
-
) {
|
|
1251
|
-
let level = 0;
|
|
1252
|
-
let counter = 0;
|
|
1253
|
-
const nextLevel = 0;
|
|
1254
|
-
if (after) {
|
|
1255
|
-
//TODO: Need to check this code it wont work
|
|
1256
|
-
addElementAfter(nodeAttrs, state, tr, startPos, nextLevel);
|
|
1257
|
-
} else {
|
|
1258
|
-
level = previousLevel ? previousLevel - 1 : 0;
|
|
1259
|
-
counter = currentLevel ? currentLevel : 0;
|
|
1260
|
-
}
|
|
1261
|
-
|
|
1262
|
-
for (let index = level; index > counter; index--) {
|
|
1263
|
-
tr = insertParagraph(nodeAttrs, startPos, tr, index, state);
|
|
1264
|
-
}
|
|
1265
|
-
return { tr, level, counter };
|
|
1266
|
-
}
|
|
1267
|
-
|
|
1268
|
-
function addElement(
|
|
1269
|
-
nodeAttrs,
|
|
1270
|
-
state,
|
|
1271
|
-
tr,
|
|
1272
|
-
startPos,
|
|
1273
|
-
isAfter,
|
|
1274
|
-
appliedLevel,
|
|
1275
|
-
currentLevel
|
|
1276
|
-
) {
|
|
1277
|
-
return addElementEx(
|
|
1278
|
-
nodeAttrs,
|
|
1279
|
-
state,
|
|
1280
|
-
tr,
|
|
1281
|
-
startPos,
|
|
1282
|
-
isAfter,
|
|
1283
|
-
appliedLevel,
|
|
1284
|
-
currentLevel
|
|
1285
|
-
).tr;
|
|
1286
|
-
}
|
|
1287
|
-
|
|
1288
|
-
function addElementAfter(nodeAttrs, state, tr, startPos, nextLevel) {
|
|
1289
|
-
const element = addElementEx(nodeAttrs, state, tr, startPos, true, nextLevel);
|
|
1290
|
-
if (element) {
|
|
1291
|
-
tr = element.tr;
|
|
1292
|
-
const { counter, level } = element;
|
|
1293
|
-
if (level === counter) {
|
|
1294
|
-
tr = insertParagraph(nodeAttrs, startPos, tr, 1);
|
|
1295
|
-
}
|
|
1296
|
-
}
|
|
1297
|
-
return tr;
|
|
1298
|
-
}
|
|
1299
|
-
|
|
1300
|
-
export function getStyleLevel(styleName: string) {
|
|
1301
|
-
let styleLevel = 0;
|
|
1302
|
-
if (undefined !== styleName && styleName) {
|
|
1303
|
-
const styleProp = getCustomStyleByName(styleName);
|
|
1304
|
-
if (
|
|
1305
|
-
null !== styleProp &&
|
|
1306
|
-
styleProp.styles &&
|
|
1307
|
-
styleProp.styles.styleLevel &&
|
|
1308
|
-
styleProp.styles.hasNumbering
|
|
1309
|
-
) {
|
|
1310
|
-
styleLevel = styleProp.styles.styleLevel;
|
|
1311
|
-
} else {
|
|
1312
|
-
if (styleName.includes(RESERVED_STYLE_NONE_NUMBERING)) {
|
|
1313
|
-
const indices = styleName.split(RESERVED_STYLE_NONE_NUMBERING);
|
|
1314
|
-
|
|
1315
|
-
if (indices && 2 === indices.length) {
|
|
1316
|
-
styleLevel = parseInt(indices[1]);
|
|
1317
|
-
}
|
|
1318
|
-
}
|
|
1319
|
-
}
|
|
1320
|
-
}
|
|
1321
|
-
return styleLevel;
|
|
1322
|
-
}
|
|
1323
|
-
|
|
1324
|
-
export function executeCommands(
|
|
1325
|
-
state: EditorState,
|
|
1326
|
-
tr: Transform,
|
|
1327
|
-
styleName: string,
|
|
1328
|
-
startPos: number,
|
|
1329
|
-
endPos: number
|
|
1330
|
-
) {
|
|
1331
|
-
const style = getCustomStyleByName(styleName);
|
|
1332
|
-
const _commands = getCustomStyleCommands(style);
|
|
1333
|
-
_commands.forEach((element) => {
|
|
1334
|
-
if (typeof element.executeCustom == 'function') {
|
|
1335
|
-
tr = element.executeCustom(state, tr, startPos, endPos);
|
|
1336
|
-
}
|
|
1337
|
-
});
|
|
1338
|
-
return tr;
|
|
1339
|
-
}
|
|
1340
|
-
|
|
1341
|
-
// Need to change this function code duplicates with applyStyle()
|
|
1342
|
-
export function applyLatestStyle(
|
|
1343
|
-
styleName: string,
|
|
1344
|
-
state: EditorState,
|
|
1345
|
-
tr: Transform,
|
|
1346
|
-
node: Node,
|
|
1347
|
-
startPos: number,
|
|
1348
|
-
endPos: number,
|
|
1349
|
-
style: ?StyleProps
|
|
1350
|
-
) {
|
|
1351
|
-
tr = applyStyleEx(style, styleName, state, tr, node, startPos, endPos);
|
|
1352
|
-
// apply bold first word/sentence custom style
|
|
1353
|
-
tr = applyLineStyle(state, tr, node, startPos);
|
|
1354
|
-
return tr;
|
|
1355
|
-
}
|
|
1356
|
-
|
|
1357
|
-
function isAllowedNode(node) {
|
|
1358
|
-
return node.type.name === 'paragraph';
|
|
1359
|
-
}
|
|
1360
|
-
|
|
1361
|
-
// [FS] IRAD-1088 2020-10-05
|
|
1362
|
-
// set custom style for node
|
|
1363
|
-
function _setNodeAttribute(
|
|
1364
|
-
state: EditorState,
|
|
1365
|
-
tr: Transform,
|
|
1366
|
-
from: number,
|
|
1367
|
-
to: number,
|
|
1368
|
-
attribute: any
|
|
1369
|
-
) {
|
|
1370
|
-
tr.doc.nodesBetween(from, to, (node, startPos) => {
|
|
1371
|
-
if (isAllowedNode(node)) {
|
|
1372
|
-
tr = tr.setNodeMarkup(startPos, undefined, attribute);
|
|
1373
|
-
}
|
|
1374
|
-
});
|
|
1375
|
-
return tr;
|
|
1376
|
-
}
|
|
1377
|
-
|
|
1378
|
-
// [FS] IRAD-1087 2020-11-02
|
|
1379
|
-
// Issue fix: Missing the applied link after applying a style
|
|
1380
|
-
function removeAllMarksExceptLink(
|
|
1381
|
-
from: number,
|
|
1382
|
-
to: number,
|
|
1383
|
-
tr: Transform,
|
|
1384
|
-
schema: Schema,
|
|
1385
|
-
styleProp: ?StyleProps,
|
|
1386
|
-
state: EditorState
|
|
1387
|
-
) {
|
|
1388
|
-
const { doc } = tr;
|
|
1389
|
-
const tasks = [];
|
|
1390
|
-
doc.nodesBetween(from, to, (node, pos) => {
|
|
1391
|
-
if (node.marks && node.marks.length) {
|
|
1392
|
-
node.marks.some((mark) => {
|
|
1393
|
-
if ('link' !== mark.type.name) {
|
|
1394
|
-
tasks.push({
|
|
1395
|
-
node,
|
|
1396
|
-
pos,
|
|
1397
|
-
mark,
|
|
1398
|
-
});
|
|
1399
|
-
}
|
|
1400
|
-
});
|
|
1401
|
-
return true;
|
|
1402
|
-
}
|
|
1403
|
-
return true;
|
|
1404
|
-
});
|
|
1405
|
-
return handleRemoveMarks(tr, tasks, from, to, schema, styleProp, state);
|
|
1406
|
-
}
|
|
1407
|
-
|
|
1408
|
-
function handleRemoveMarks(
|
|
1409
|
-
tr: Transform,
|
|
1410
|
-
tasks: any,
|
|
1411
|
-
from: number,
|
|
1412
|
-
to: number,
|
|
1413
|
-
schema: Schema,
|
|
1414
|
-
styleProp: ?StyleProps,
|
|
1415
|
-
state: EditorState
|
|
1416
|
-
) {
|
|
1417
|
-
tasks.forEach((job) => {
|
|
1418
|
-
const { mark } = job;
|
|
1419
|
-
const retObj = { modified: false };
|
|
1420
|
-
if (styleProp && MARK_TEXT_HIGHLIGHT === mark.type.name) {
|
|
1421
|
-
tr = compareMarkWithStyle(
|
|
1422
|
-
mark,
|
|
1423
|
-
styleProp.styles,
|
|
1424
|
-
tr,
|
|
1425
|
-
from,
|
|
1426
|
-
to,
|
|
1427
|
-
retObj,
|
|
1428
|
-
state
|
|
1429
|
-
);
|
|
1430
|
-
}
|
|
1431
|
-
if (!mark.attrs[ATTR_OVERRIDDEN]) {
|
|
1432
|
-
tr = tr.removeMark(from, to, mark.type);
|
|
1433
|
-
}
|
|
1434
|
-
});
|
|
1435
|
-
tr = setTextAlign(tr, schema, null);
|
|
1436
|
-
return tr;
|
|
1437
|
-
}
|
|
1438
|
-
|
|
1439
|
-
// [FS] IRAD-1087 2020-10-14
|
|
1440
|
-
// Apply selected styles to document
|
|
1441
|
-
export function applyStyle(
|
|
1442
|
-
style: StyleProps,
|
|
1443
|
-
styleName: string,
|
|
1444
|
-
state: EditorState,
|
|
1445
|
-
tr: Transform
|
|
1446
|
-
) {
|
|
1447
|
-
const { selection } = state;
|
|
1448
|
-
const startPos = selection.$from.before(1);
|
|
1449
|
-
const endPos = selection.$to.after(1) - 1;
|
|
1450
|
-
return applyStyleToEachNode(state, startPos, endPos, tr, style, styleName);
|
|
1451
|
-
}
|
|
1452
|
-
|
|
1453
|
-
// apply style to each selected node (when style applied to multiple paragraphs)
|
|
1454
|
-
export function applyStyleToEachNode(
|
|
1455
|
-
state: EditorState,
|
|
1456
|
-
from: number,
|
|
1457
|
-
to: number,
|
|
1458
|
-
tr: Transform,
|
|
1459
|
-
style: StyleProps,
|
|
1460
|
-
styleName: string
|
|
1461
|
-
) {
|
|
1462
|
-
let _node = null;
|
|
1463
|
-
tr.doc.nodesBetween(from, to, (node, startPos) => {
|
|
1464
|
-
if (node.type.name === 'paragraph') {
|
|
1465
|
-
// [FS] IRAD-1182 2021-02-11
|
|
1466
|
-
// Issue fix: When style applied to multiple paragraphs, some of the paragraph's objectId found in deletedObjectId's
|
|
1467
|
-
tr = applyStyleEx(style, styleName, state, tr, node, startPos, to);
|
|
1468
|
-
_node = node;
|
|
1469
|
-
}
|
|
1470
|
-
});
|
|
1471
|
-
const newattrs = Object.assign({}, _node ? _node.attrs : {});
|
|
1472
|
-
newattrs['styleName'] = styleName;
|
|
1473
|
-
tr = createEmptyElement(state, tr, _node, from, to, newattrs);
|
|
1474
|
-
tr = applyLineStyle(state, tr, null, 0);
|
|
1475
|
-
return tr;
|
|
1476
|
-
}
|
|
1477
|
-
// [FS] IRAD-1468 2021-06-18
|
|
1478
|
-
// Fix: bold first sentence custom style not showing after reload editor.
|
|
1479
|
-
export function applyLineStyle(state: EditorState, tr: Transform, node: Node, startPos: number) {
|
|
1480
|
-
if (node) {
|
|
1481
|
-
if (node.attrs && node.attrs.styleName && RESERVED_STYLE_NONE !== node.attrs.styleName) {
|
|
1482
|
-
const styleProp = getCustomStyleByName(node.attrs.styleName);
|
|
1483
|
-
if (
|
|
1484
|
-
null !== styleProp &&
|
|
1485
|
-
styleProp.styles &&
|
|
1486
|
-
styleProp.styles.boldPartial
|
|
1487
|
-
) {
|
|
1488
|
-
if (!tr) {
|
|
1489
|
-
tr = state.tr;
|
|
1490
|
-
}
|
|
1491
|
-
tr = addMarksToLine(
|
|
1492
|
-
tr,
|
|
1493
|
-
state,
|
|
1494
|
-
node,
|
|
1495
|
-
startPos,
|
|
1496
|
-
styleProp.styles.boldSentence
|
|
1497
|
-
);
|
|
1498
|
-
}
|
|
1499
|
-
}
|
|
1500
|
-
} else {
|
|
1501
|
-
const { selection } = state;
|
|
1502
|
-
const from = selection.$from.before(1);
|
|
1503
|
-
const to = selection.$to.after(1);
|
|
1504
|
-
// [FS] IRAD-1168 2021-06-21
|
|
1505
|
-
// FIX: multi-select paragraphs and apply a style with the bold the first sentence,
|
|
1506
|
-
// only the last selected paragraph have bold first sentence.
|
|
1507
|
-
tr.doc.nodesBetween(from, to, (node, pos) => {
|
|
1508
|
-
if (node.content && node.content.content && node.content.content.length) {
|
|
1509
|
-
// Check styleName is available for node
|
|
1510
|
-
if (
|
|
1511
|
-
node.attrs &&
|
|
1512
|
-
node.attrs.styleName &&
|
|
1513
|
-
RESERVED_STYLE_NONE !== node.attrs.styleName
|
|
1514
|
-
) {
|
|
1515
|
-
const styleProp = getCustomStyleByName(node.attrs.styleName);
|
|
1516
|
-
if (
|
|
1517
|
-
null !== styleProp &&
|
|
1518
|
-
styleProp.styles &&
|
|
1519
|
-
styleProp.styles.boldPartial
|
|
1520
|
-
) {
|
|
1521
|
-
if (!tr) {
|
|
1522
|
-
tr = state.tr;
|
|
1523
|
-
}
|
|
1524
|
-
tr = addMarksToLine(
|
|
1525
|
-
tr,
|
|
1526
|
-
state,
|
|
1527
|
-
node,
|
|
1528
|
-
pos,
|
|
1529
|
-
styleProp.styles.boldSentence
|
|
1530
|
-
);
|
|
1531
|
-
}
|
|
1532
|
-
}
|
|
1533
|
-
}
|
|
1534
|
-
});
|
|
1535
|
-
}
|
|
1536
|
-
return tr;
|
|
1537
|
-
}
|
|
1538
|
-
// add bold marks to node
|
|
1539
|
-
function addMarksToLine(tr, state, node, pos, boldSentence) {
|
|
1540
|
-
const markType = state.schema.marks[MARK_STRONG];
|
|
1541
|
-
let textContent = getNodeText(node);
|
|
1542
|
-
const endPos = textContent.length;
|
|
1543
|
-
let content = '';
|
|
1544
|
-
let counter = 0;
|
|
1545
|
-
if (boldSentence) {
|
|
1546
|
-
content = textContent.split('.');
|
|
1547
|
-
} else {
|
|
1548
|
-
content = textContent.split(' ');
|
|
1549
|
-
}
|
|
1550
|
-
if ('' !== content[0]) {
|
|
1551
|
-
textContent = content[0];
|
|
1552
|
-
} else {
|
|
1553
|
-
if (content.length > 1) {
|
|
1554
|
-
for (let index = 0; index < content.length; index++) {
|
|
1555
|
-
if ('' === content[index]) {
|
|
1556
|
-
counter++;
|
|
1557
|
-
} else {
|
|
1558
|
-
textContent = content[index];
|
|
1559
|
-
index = content.length;
|
|
1560
|
-
}
|
|
1561
|
-
}
|
|
1562
|
-
}
|
|
1563
|
-
}
|
|
1564
|
-
tr = tr.addMark(
|
|
1565
|
-
pos,
|
|
1566
|
-
pos + textContent.length + 1 + counter,
|
|
1567
|
-
markType.create(null)
|
|
1568
|
-
);
|
|
1569
|
-
if (content.length > 1) {
|
|
1570
|
-
tr = tr.removeMark(
|
|
1571
|
-
pos + textContent.length + 1 + counter,
|
|
1572
|
-
pos + endPos + 1,
|
|
1573
|
-
markType
|
|
1574
|
-
);
|
|
1575
|
-
}
|
|
1576
|
-
return tr;
|
|
1577
|
-
}
|
|
1578
|
-
// get text content from selected node
|
|
1579
|
-
function getNodeText(node: Node) {
|
|
1580
|
-
let textContent = '';
|
|
1581
|
-
node.descendants(function (child: Node, pos: number, parent: Node) {
|
|
1582
|
-
if ('text' === child.type.name) {
|
|
1583
|
-
textContent = `${textContent}${child.text}`;
|
|
1584
|
-
}
|
|
1585
|
-
});
|
|
1586
|
-
return textContent;
|
|
1587
|
-
}
|
|
1588
|
-
|
|
1589
|
-
//to get the selected node
|
|
1590
|
-
export function getNode(
|
|
1591
|
-
state: EditorState,
|
|
1592
|
-
from: number,
|
|
1593
|
-
to: number,
|
|
1594
|
-
tr: Transform
|
|
1595
|
-
): Node {
|
|
1596
|
-
let selectedNode = null;
|
|
1597
|
-
selectedNodes.splice(0);
|
|
1598
|
-
tr.doc.nodesBetween(from, to, (node, startPos) => {
|
|
1599
|
-
if (node.type.name === 'paragraph') {
|
|
1600
|
-
if (null == selectedNode) {
|
|
1601
|
-
selectedNode = node;
|
|
1602
|
-
}
|
|
1603
|
-
selectedNodes.push({ pos: startPos, node });
|
|
1604
|
-
}
|
|
1605
|
-
});
|
|
1606
|
-
return selectedNode;
|
|
1607
|
-
}
|
|
1608
|
-
|
|
1609
|
-
// [FS] IRAD-1176 2021-02-08
|
|
1610
|
-
// update the editor doc with the modified style changes.
|
|
1611
|
-
export function updateDocument(
|
|
1612
|
-
state: EditorState,
|
|
1613
|
-
tr: Transform,
|
|
1614
|
-
styleName: string,
|
|
1615
|
-
style: StyleProps
|
|
1616
|
-
) {
|
|
1617
|
-
const { doc } = state;
|
|
1618
|
-
doc.descendants(function (child, pos) {
|
|
1619
|
-
const contentLen = child.content.size;
|
|
1620
|
-
if (haveEligibleChildren(child, contentLen, styleName)) {
|
|
1621
|
-
tr = applyLatestStyle(
|
|
1622
|
-
child.attrs.styleName,
|
|
1623
|
-
state,
|
|
1624
|
-
tr,
|
|
1625
|
-
child,
|
|
1626
|
-
pos,
|
|
1627
|
-
pos + contentLen + 1,
|
|
1628
|
-
style
|
|
1629
|
-
);
|
|
1630
|
-
}
|
|
1631
|
-
});
|
|
1632
|
-
return tr;
|
|
1633
|
-
}
|
|
1634
|
-
|
|
1635
|
-
// [FS] IRAD-1223 2021-03-01
|
|
1636
|
-
// To check if the custom style have numbering and also used in the document
|
|
1637
|
-
export function isCustomStyleAlreadyApplied(
|
|
1638
|
-
styleName: string,
|
|
1639
|
-
editorState: EditorState
|
|
1640
|
-
) {
|
|
1641
|
-
let found = false;
|
|
1642
|
-
const { doc } = editorState;
|
|
1643
|
-
doc.nodesBetween(0, doc.nodeSize - 2, (node, pos) => {
|
|
1644
|
-
if (node.content && node.content.content && node.content.content.length) {
|
|
1645
|
-
const styleLevel = getStyleLevel(styleName);
|
|
1646
|
-
if (!found && 0 < styleLevel && node.attrs.styleName === styleName) {
|
|
1647
|
-
found = true;
|
|
1648
|
-
}
|
|
1649
|
-
}
|
|
1650
|
-
});
|
|
1651
|
-
return found;
|
|
1652
|
-
}
|
|
1653
|
-
|
|
1654
|
-
function haveEligibleChildren(
|
|
1655
|
-
node: Node,
|
|
1656
|
-
contentLen: number,
|
|
1657
|
-
styleName: string
|
|
1658
|
-
) {
|
|
1659
|
-
return (
|
|
1660
|
-
node.type.name === 'paragraph' &&
|
|
1661
|
-
0 < contentLen &&
|
|
1662
|
-
styleName === node.attrs.styleName
|
|
1663
|
-
);
|
|
1664
|
-
}
|
|
1665
|
-
|
|
1666
|
-
// [FS] IRAD-1350 2021-05-19
|
|
1667
|
-
// To check the style have numbering
|
|
1668
|
-
// blocks edit if the style is already applied in editor
|
|
1669
|
-
export function isLevelUpdated(
|
|
1670
|
-
state: EditorState,
|
|
1671
|
-
styleName: string,
|
|
1672
|
-
style: StyleProps
|
|
1673
|
-
) {
|
|
1674
|
-
let bOK = false;
|
|
1675
|
-
// [FS] IRAD-1478 2021-06-24
|
|
1676
|
-
// this custom style (with numbering) already applied in editor
|
|
1677
|
-
if (isCustomStyleAlreadyApplied(styleName, state)) {
|
|
1678
|
-
// now need to check if user edits the numbering level , if yes then block modify the style
|
|
1679
|
-
const currentLevel = getStyleLevel(styleName);
|
|
1680
|
-
// [FS] IRAD-1496 2021-06-25
|
|
1681
|
-
// Fix: warning message not showing if deselect numbering and save
|
|
1682
|
-
if (style && style.styles && (currentLevel > 0 && !style.styles.hasNumbering) || (style.styles && undefined === style.styles.styleLevel ||
|
|
1683
|
-
(style && style.styles && style.styles.styleLevel !== currentLevel))) {
|
|
1684
|
-
bOK = true;
|
|
1685
|
-
}
|
|
1686
|
-
}
|
|
1687
|
-
return bOK;
|
|
1688
|
-
}
|
|
1689
|
-
|
|
1690
|
-
export default CustomStyleCommand;
|