@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,184 +1,184 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
const express = require('express');
|
|
3
|
-
const cors = require('cors');
|
|
4
|
-
const fs = require('fs');
|
|
5
|
-
const bodyParser = require('body-parser');
|
|
6
|
-
const app = express();
|
|
7
|
-
const PORT = process.env.PORT || 3000;
|
|
8
|
-
|
|
9
|
-
//allow OPTIONS on all resources
|
|
10
|
-
app.options('*', cors());
|
|
11
|
-
app.use(cors());
|
|
12
|
-
app.use(bodyParser.json());
|
|
13
|
-
app.use(bodyParser.text());
|
|
14
|
-
|
|
15
|
-
const JSONFILE = '../customstyles/styles.json';
|
|
16
|
-
/** styles as map for fast lookup */
|
|
17
|
-
const allStyles = readStyles();
|
|
18
|
-
/** styles as sorted array for results */
|
|
19
|
-
let sortedStyles = sortStyles();
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Read styles from disk storage.
|
|
23
|
-
*
|
|
24
|
-
* @returns Dictionary of styles.
|
|
25
|
-
*/
|
|
26
|
-
function readStyles() {
|
|
27
|
-
try {
|
|
28
|
-
//Made compatible with old and new JSON Format
|
|
29
|
-
const json = fs.readFileSync(JSONFILE, 'utf-8');
|
|
30
|
-
const obj = JSON.parse(json);
|
|
31
|
-
let rawStyles = [];
|
|
32
|
-
const {styles} = obj;
|
|
33
|
-
if (styles) {
|
|
34
|
-
// Add styles from incomming collection.
|
|
35
|
-
Object.keys(styles).forEach((key) => rawStyles.push(styles[key]));
|
|
36
|
-
} else {
|
|
37
|
-
rawStyles = obj || [];
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Convert array into map.
|
|
41
|
-
return rawStyles.reduce((out, style) => {
|
|
42
|
-
if (style.styleName) {
|
|
43
|
-
out[style.styleName.toUpperCase()] = style;
|
|
44
|
-
}
|
|
45
|
-
return out;
|
|
46
|
-
}, {});
|
|
47
|
-
} catch (err) {
|
|
48
|
-
console.error('Failed to read style file.', JSONFILE, err);
|
|
49
|
-
// Return empty object.
|
|
50
|
-
return {};
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Write styles to disk storage.
|
|
56
|
-
*/
|
|
57
|
-
function writeStyles() {
|
|
58
|
-
try {
|
|
59
|
-
// Save the array
|
|
60
|
-
const json = JSON.stringify(sortedStyles);
|
|
61
|
-
fs.writeFileSync(JSONFILE, json, 'utf-8');
|
|
62
|
-
} catch (err) {
|
|
63
|
-
console.error('Failed to write style file', JSONFILE);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Convert map to a sorted array.
|
|
69
|
-
*/
|
|
70
|
-
function sortStyles() {
|
|
71
|
-
return Object.keys(allStyles)
|
|
72
|
-
.sort()
|
|
73
|
-
.map((key) => allStyles[key]);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// [FS] IRAD-1128 2020-12-24
|
|
77
|
-
// read the custom style json file to return all styles.
|
|
78
|
-
app.get('/styles/', function (req, res) {
|
|
79
|
-
// Send the memory cache
|
|
80
|
-
res.json(sortedStyles);
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
// [FS] IRAD-1128 2020-12-24
|
|
84
|
-
// save the custom style to the json file.
|
|
85
|
-
app.post('/styles/', function (req, res) {
|
|
86
|
-
const name = req.body.styleName.toUpperCase();
|
|
87
|
-
// Attach new or overwite existing style
|
|
88
|
-
allStyles[name] = req.body;
|
|
89
|
-
// Save changes
|
|
90
|
-
sortedStyles = sortStyles();
|
|
91
|
-
writeStyles();
|
|
92
|
-
|
|
93
|
-
res.send(sortedStyles);
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
// [FS] IRAD-1128 2020-12-24
|
|
97
|
-
// save the custom style to the json file.
|
|
98
|
-
app.post('/styles/rename/', function (req, res) {
|
|
99
|
-
const oldName = req.body.styleName.toUpperCase();
|
|
100
|
-
const style = allStyles[oldName];
|
|
101
|
-
if (style) {
|
|
102
|
-
const newName = req.body.modifiedStyleName;
|
|
103
|
-
style.styleName = newName;
|
|
104
|
-
allStyles[newName.toUpperCase()] = style;
|
|
105
|
-
delete allStyles[oldName];
|
|
106
|
-
|
|
107
|
-
sortedStyles = sortStyles();
|
|
108
|
-
writeStyles();
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// Send the memory cache
|
|
112
|
-
res.send(sortedStyles);
|
|
113
|
-
});
|
|
114
|
-
|
|
115
|
-
// [FS] IRAD-1128 2020-12-30
|
|
116
|
-
// to remove the selected custom style from the json file.
|
|
117
|
-
app.delete('/styles/:styleName', function (req, res) {
|
|
118
|
-
const name = req.params.styleName.toUpperCase();
|
|
119
|
-
|
|
120
|
-
if (allStyles.hasOwnProperty(name)) {
|
|
121
|
-
delete allStyles[name];
|
|
122
|
-
sortedStyles = sortStyles();
|
|
123
|
-
writeStyles();
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Send the memory cache
|
|
127
|
-
res.json(sortedStyles);
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
// Not used by the editor!
|
|
131
|
-
// Responds with the current collection of styles as a map. This endpoint
|
|
132
|
-
// provides a way to backup / migrate styles from one instance of the service to
|
|
133
|
-
// another.
|
|
134
|
-
//
|
|
135
|
-
// json respone: { styles: {} }
|
|
136
|
-
app.get('/bulk-export', (req, res) => {
|
|
137
|
-
// Wrap map in object to match bulk-import expectations.
|
|
138
|
-
res.json({
|
|
139
|
-
styles: allStyles,
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
// Not used by the editor!
|
|
144
|
-
// Accepts a collection of styles previously exported. This endoint provides a
|
|
145
|
-
// way to restore / migrate styles from one insdtance of the service to another.
|
|
146
|
-
//
|
|
147
|
-
// json body: { styles: {...}, replace?: true }
|
|
148
|
-
//
|
|
149
|
-
// The default behavior is to merge incomming styles with any existing ones.
|
|
150
|
-
// Styles with same case-insensitvie name will be overwritten. Setting replace
|
|
151
|
-
// to true will delete all existing styles and only the imported styles will be
|
|
152
|
-
// retained..
|
|
153
|
-
app.post('/bulk-import', (req, res) => {
|
|
154
|
-
const {styles, replace} = req.json;
|
|
155
|
-
if (styles) {
|
|
156
|
-
if (replace) {
|
|
157
|
-
// Delete all existing styles.
|
|
158
|
-
Object.keys(allStyles).forEach((key) => delete allStyles[key]);
|
|
159
|
-
}
|
|
160
|
-
// Add styles from incomming collection.
|
|
161
|
-
Object.keys(styles).forEach((key) => (allStyles[key] = styles[key]));
|
|
162
|
-
sortedStyles = sortStyles();
|
|
163
|
-
writeStyles();
|
|
164
|
-
}
|
|
165
|
-
// Respond with updated style data.
|
|
166
|
-
return res.json({
|
|
167
|
-
styles: allStyles,
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
if (!module.parent) {
|
|
172
|
-
const server = app.listen(PORT);
|
|
173
|
-
console.log('Custom Style Server running on port ' + PORT + '!...');
|
|
174
|
-
|
|
175
|
-
// Create shutdown method.
|
|
176
|
-
const shutdown = () => {
|
|
177
|
-
console.log('Beginning shutdown.');
|
|
178
|
-
server.close(() => console.log('Shutdown complete.'));
|
|
179
|
-
};
|
|
180
|
-
|
|
181
|
-
// Listen for terminal events to trigger shutdown.
|
|
182
|
-
process.on('SIGTERM', shutdown);
|
|
183
|
-
process.on('SIGINT', shutdown);
|
|
184
|
-
}
|
|
1
|
+
// @flow
|
|
2
|
+
const express = require('express');
|
|
3
|
+
const cors = require('cors');
|
|
4
|
+
const fs = require('fs');
|
|
5
|
+
const bodyParser = require('body-parser');
|
|
6
|
+
const app = express();
|
|
7
|
+
const PORT = process.env.PORT || 3000;
|
|
8
|
+
|
|
9
|
+
//allow OPTIONS on all resources
|
|
10
|
+
app.options('*', cors());
|
|
11
|
+
app.use(cors());
|
|
12
|
+
app.use(bodyParser.json());
|
|
13
|
+
app.use(bodyParser.text());
|
|
14
|
+
|
|
15
|
+
const JSONFILE = '../customstyles/styles.json';
|
|
16
|
+
/** styles as map for fast lookup */
|
|
17
|
+
const allStyles = readStyles();
|
|
18
|
+
/** styles as sorted array for results */
|
|
19
|
+
let sortedStyles = sortStyles();
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Read styles from disk storage.
|
|
23
|
+
*
|
|
24
|
+
* @returns Dictionary of styles.
|
|
25
|
+
*/
|
|
26
|
+
function readStyles() {
|
|
27
|
+
try {
|
|
28
|
+
//Made compatible with old and new JSON Format
|
|
29
|
+
const json = fs.readFileSync(JSONFILE, 'utf-8');
|
|
30
|
+
const obj = JSON.parse(json);
|
|
31
|
+
let rawStyles = [];
|
|
32
|
+
const {styles} = obj;
|
|
33
|
+
if (styles) {
|
|
34
|
+
// Add styles from incomming collection.
|
|
35
|
+
Object.keys(styles).forEach((key) => rawStyles.push(styles[key]));
|
|
36
|
+
} else {
|
|
37
|
+
rawStyles = obj || [];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Convert array into map.
|
|
41
|
+
return rawStyles.reduce((out, style) => {
|
|
42
|
+
if (style.styleName) {
|
|
43
|
+
out[style.styleName.toUpperCase()] = style;
|
|
44
|
+
}
|
|
45
|
+
return out;
|
|
46
|
+
}, {});
|
|
47
|
+
} catch (err) {
|
|
48
|
+
console.error('Failed to read style file.', JSONFILE, err);
|
|
49
|
+
// Return empty object.
|
|
50
|
+
return {};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Write styles to disk storage.
|
|
56
|
+
*/
|
|
57
|
+
function writeStyles() {
|
|
58
|
+
try {
|
|
59
|
+
// Save the array
|
|
60
|
+
const json = JSON.stringify(sortedStyles);
|
|
61
|
+
fs.writeFileSync(JSONFILE, json, 'utf-8');
|
|
62
|
+
} catch (err) {
|
|
63
|
+
console.error('Failed to write style file', JSONFILE);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Convert map to a sorted array.
|
|
69
|
+
*/
|
|
70
|
+
function sortStyles() {
|
|
71
|
+
return Object.keys(allStyles)
|
|
72
|
+
.sort()
|
|
73
|
+
.map((key) => allStyles[key]);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// [FS] IRAD-1128 2020-12-24
|
|
77
|
+
// read the custom style json file to return all styles.
|
|
78
|
+
app.get('/styles/', function (req, res) {
|
|
79
|
+
// Send the memory cache
|
|
80
|
+
res.json(sortedStyles);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
// [FS] IRAD-1128 2020-12-24
|
|
84
|
+
// save the custom style to the json file.
|
|
85
|
+
app.post('/styles/', function (req, res) {
|
|
86
|
+
const name = req.body.styleName.toUpperCase();
|
|
87
|
+
// Attach new or overwite existing style
|
|
88
|
+
allStyles[name] = req.body;
|
|
89
|
+
// Save changes
|
|
90
|
+
sortedStyles = sortStyles();
|
|
91
|
+
writeStyles();
|
|
92
|
+
|
|
93
|
+
res.send(sortedStyles);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
// [FS] IRAD-1128 2020-12-24
|
|
97
|
+
// save the custom style to the json file.
|
|
98
|
+
app.post('/styles/rename/', function (req, res) {
|
|
99
|
+
const oldName = req.body.styleName.toUpperCase();
|
|
100
|
+
const style = allStyles[oldName];
|
|
101
|
+
if (style) {
|
|
102
|
+
const newName = req.body.modifiedStyleName;
|
|
103
|
+
style.styleName = newName;
|
|
104
|
+
allStyles[newName.toUpperCase()] = style;
|
|
105
|
+
delete allStyles[oldName];
|
|
106
|
+
|
|
107
|
+
sortedStyles = sortStyles();
|
|
108
|
+
writeStyles();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// Send the memory cache
|
|
112
|
+
res.send(sortedStyles);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
// [FS] IRAD-1128 2020-12-30
|
|
116
|
+
// to remove the selected custom style from the json file.
|
|
117
|
+
app.delete('/styles/:styleName', function (req, res) {
|
|
118
|
+
const name = req.params.styleName.toUpperCase();
|
|
119
|
+
|
|
120
|
+
if (allStyles.hasOwnProperty(name)) {
|
|
121
|
+
delete allStyles[name];
|
|
122
|
+
sortedStyles = sortStyles();
|
|
123
|
+
writeStyles();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Send the memory cache
|
|
127
|
+
res.json(sortedStyles);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
// Not used by the editor!
|
|
131
|
+
// Responds with the current collection of styles as a map. This endpoint
|
|
132
|
+
// provides a way to backup / migrate styles from one instance of the service to
|
|
133
|
+
// another.
|
|
134
|
+
//
|
|
135
|
+
// json respone: { styles: {} }
|
|
136
|
+
app.get('/bulk-export', (req, res) => {
|
|
137
|
+
// Wrap map in object to match bulk-import expectations.
|
|
138
|
+
res.json({
|
|
139
|
+
styles: allStyles,
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
// Not used by the editor!
|
|
144
|
+
// Accepts a collection of styles previously exported. This endoint provides a
|
|
145
|
+
// way to restore / migrate styles from one insdtance of the service to another.
|
|
146
|
+
//
|
|
147
|
+
// json body: { styles: {...}, replace?: true }
|
|
148
|
+
//
|
|
149
|
+
// The default behavior is to merge incomming styles with any existing ones.
|
|
150
|
+
// Styles with same case-insensitvie name will be overwritten. Setting replace
|
|
151
|
+
// to true will delete all existing styles and only the imported styles will be
|
|
152
|
+
// retained..
|
|
153
|
+
app.post('/bulk-import', (req, res) => {
|
|
154
|
+
const {styles, replace} = req.json;
|
|
155
|
+
if (styles) {
|
|
156
|
+
if (replace) {
|
|
157
|
+
// Delete all existing styles.
|
|
158
|
+
Object.keys(allStyles).forEach((key) => delete allStyles[key]);
|
|
159
|
+
}
|
|
160
|
+
// Add styles from incomming collection.
|
|
161
|
+
Object.keys(styles).forEach((key) => (allStyles[key] = styles[key]));
|
|
162
|
+
sortedStyles = sortStyles();
|
|
163
|
+
writeStyles();
|
|
164
|
+
}
|
|
165
|
+
// Respond with updated style data.
|
|
166
|
+
return res.json({
|
|
167
|
+
styles: allStyles,
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
if (!module.parent) {
|
|
172
|
+
const server = app.listen(PORT);
|
|
173
|
+
console.log('Custom Style Server running on port ' + PORT + '!...');
|
|
174
|
+
|
|
175
|
+
// Create shutdown method.
|
|
176
|
+
const shutdown = () => {
|
|
177
|
+
console.log('Beginning shutdown.');
|
|
178
|
+
server.close(() => console.log('Shutdown complete.'));
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
// Listen for terminal events to trigger shutdown.
|
|
182
|
+
process.on('SIGTERM', shutdown);
|
|
183
|
+
process.on('SIGINT', shutdown);
|
|
184
|
+
}
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
const express = require('express');
|
|
4
|
-
const cors = require('cors');
|
|
5
|
-
const formidable = require('formidable');
|
|
6
|
-
const mv = require('mv');
|
|
7
|
-
const uuidv4 = require('uuid').v4;
|
|
8
|
-
|
|
9
|
-
const app = express();
|
|
10
|
-
|
|
11
|
-
const PORT = process.env.PORT || 3004;
|
|
12
|
-
|
|
13
|
-
//allow OPTIONS on all resources
|
|
14
|
-
app.options('*', cors());
|
|
15
|
-
app.use(cors());
|
|
16
|
-
|
|
17
|
-
// Handle asset GET url.
|
|
18
|
-
app.use('/assets', express.static('../images/'));
|
|
19
|
-
// Handle image upload.
|
|
20
|
-
app.post('/saveimage', function (req, res) {
|
|
21
|
-
const form = new formidable.IncomingForm();
|
|
22
|
-
form.parse(req, function (err, fields, blob) {
|
|
23
|
-
const oldpath = blob.file.path;
|
|
24
|
-
const fileid = uuidv4();
|
|
25
|
-
const filename = fileid + '_' + req.query['fn'];
|
|
26
|
-
const newpath = '../images/' + filename;
|
|
27
|
-
mv(oldpath, newpath, function (err) {
|
|
28
|
-
if (err) {
|
|
29
|
-
res.writeHead(500, {
|
|
30
|
-
'Content-Type': 'application/json',
|
|
31
|
-
'Access-Control-Allow-Origin': '*',
|
|
32
|
-
});
|
|
33
|
-
res.json({error: err});
|
|
34
|
-
} else {
|
|
35
|
-
const host = req.headers['host'];
|
|
36
|
-
const proto = req.connection.encrypted ? 'https' : 'http';
|
|
37
|
-
const imgSrc = proto + '://' + host + '/assets/' + filename;
|
|
38
|
-
res.writeHead(200, {
|
|
39
|
-
'Content-Type': 'application/json',
|
|
40
|
-
'Access-Control-Allow-Origin': '*',
|
|
41
|
-
});
|
|
42
|
-
res.write(
|
|
43
|
-
JSON.stringify({
|
|
44
|
-
id: fileid,
|
|
45
|
-
width: 0,
|
|
46
|
-
height: 0,
|
|
47
|
-
src: imgSrc,
|
|
48
|
-
})
|
|
49
|
-
);
|
|
50
|
-
}
|
|
51
|
-
res.end();
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
app.listen(PORT, () =>
|
|
57
|
-
console.log('Image Server running on port ' + PORT + '!...')
|
|
58
|
-
);
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
const express = require('express');
|
|
4
|
+
const cors = require('cors');
|
|
5
|
+
const formidable = require('formidable');
|
|
6
|
+
const mv = require('mv');
|
|
7
|
+
const uuidv4 = require('uuid').v4;
|
|
8
|
+
|
|
9
|
+
const app = express();
|
|
10
|
+
|
|
11
|
+
const PORT = process.env.PORT || 3004;
|
|
12
|
+
|
|
13
|
+
//allow OPTIONS on all resources
|
|
14
|
+
app.options('*', cors());
|
|
15
|
+
app.use(cors());
|
|
16
|
+
|
|
17
|
+
// Handle asset GET url.
|
|
18
|
+
app.use('/assets', express.static('../images/'));
|
|
19
|
+
// Handle image upload.
|
|
20
|
+
app.post('/saveimage', function (req, res) {
|
|
21
|
+
const form = new formidable.IncomingForm();
|
|
22
|
+
form.parse(req, function (err, fields, blob) {
|
|
23
|
+
const oldpath = blob.file.path;
|
|
24
|
+
const fileid = uuidv4();
|
|
25
|
+
const filename = fileid + '_' + req.query['fn'];
|
|
26
|
+
const newpath = '../images/' + filename;
|
|
27
|
+
mv(oldpath, newpath, function (err) {
|
|
28
|
+
if (err) {
|
|
29
|
+
res.writeHead(500, {
|
|
30
|
+
'Content-Type': 'application/json',
|
|
31
|
+
'Access-Control-Allow-Origin': '*',
|
|
32
|
+
});
|
|
33
|
+
res.json({error: err});
|
|
34
|
+
} else {
|
|
35
|
+
const host = req.headers['host'];
|
|
36
|
+
const proto = req.connection.encrypted ? 'https' : 'http';
|
|
37
|
+
const imgSrc = proto + '://' + host + '/assets/' + filename;
|
|
38
|
+
res.writeHead(200, {
|
|
39
|
+
'Content-Type': 'application/json',
|
|
40
|
+
'Access-Control-Allow-Origin': '*',
|
|
41
|
+
});
|
|
42
|
+
res.write(
|
|
43
|
+
JSON.stringify({
|
|
44
|
+
id: fileid,
|
|
45
|
+
width: 0,
|
|
46
|
+
height: 0,
|
|
47
|
+
src: imgSrc,
|
|
48
|
+
})
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
res.end();
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
app.listen(PORT, () =>
|
|
57
|
+
console.log('Image Server running on port ' + PORT + '!...')
|
|
58
|
+
);
|
package/lint.sh
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
node node_modules/eslint/bin/eslint.js --fix src/
|
|
4
|
-
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
node node_modules/eslint/bin/eslint.js --fix src/
|
|
4
|
+
|