@modusoperandi/licit 1.0.4 → 1.0.7
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/BlockquoteInsertNewLineCommand.js +16 -18
- package/BlockquoteInsertNewLineCommand.js.flow +76 -77
- package/BlockquoteNodeSpec.js +3 -4
- package/BlockquoteNodeSpec.js.flow +29 -30
- package/BlockquoteToggleCommand.js +16 -17
- package/BlockquoteToggleCommand.js.flow +56 -56
- package/BookmarkNodeSpec.js +2 -2
- package/BookmarkNodeSpec.js.flow +39 -39
- package/BulletListNodeSpec.js.flow +61 -61
- package/CZIProseMirror.js.flow +90 -90
- package/CodeBlockCommand.js +17 -18
- package/CodeBlockCommand.js.flow +65 -65
- package/CodeBlockNodeSpec.js.flow +24 -24
- package/CodeMarkSpec.js.flow +14 -14
- package/ContentPlaceholderPlugin.js +20 -21
- package/ContentPlaceholderPlugin.js.flow +185 -187
- package/CursorPlaceholderPlugin.js +11 -11
- package/CursorPlaceholderPlugin.js.flow +115 -115
- package/DocLayoutCommand.js +18 -21
- package/DocLayoutCommand.js.flow +97 -99
- package/DocNodeSpec.js.flow +64 -64
- package/EMMarkSpec.js.flow +14 -14
- package/EditorCommands.js.flow +126 -126
- package/EditorKeyMap.js +0 -1
- package/EditorKeyMap.js.flow +185 -187
- package/EditorMarks.js +2 -2
- package/EditorMarks.js.flow +71 -71
- package/EditorNodes.js +2 -3
- package/EditorNodes.js.flow +58 -59
- package/EditorPageLayoutPlugin.js +10 -10
- package/EditorPageLayoutPlugin.js.flow +67 -67
- package/EditorPlugins.js.flow +8 -8
- package/EditorSchema.js.flow +12 -12
- package/EditorState.js.flow +7 -7
- package/FontSizeMarkSpec.js.flow +49 -49
- package/FontTypeMarkSpec.js +1 -1
- package/FontTypeMarkSpec.js.flow +80 -80
- package/HTMLMutator.js +6 -7
- package/HTMLMutator.js.flow +59 -59
- package/HardBreakNodeSpec.js.flow +15 -15
- package/HeadingNodeSpec.js +3 -13
- package/HeadingNodeSpec.js.flow +42 -52
- package/HistoryRedoCommand.js +15 -16
- package/HistoryRedoCommand.js.flow +41 -41
- package/HistoryUndoCommand.js +15 -16
- package/HistoryUndoCommand.js.flow +41 -41
- package/HorizontalRuleCommand.js +15 -16
- package/HorizontalRuleCommand.js.flow +71 -71
- package/HorizontalRuleNodeSpec.js.flow +39 -39
- package/ImageUploadPlaceholderPlugin.js +15 -17
- package/ImageUploadPlaceholderPlugin.js.flow +190 -192
- package/LinkMarkSpec.js +6 -1
- package/LinkMarkSpec.js.flow +37 -32
- package/LinkSetURLCommand.js +130 -60
- package/LinkSetURLCommand.js.flow +141 -117
- package/LinkTooltipPlugin.js +122 -34
- package/LinkTooltipPlugin.js.flow +261 -190
- package/ListItemInsertNewLineCommand.js +16 -18
- package/ListItemInsertNewLineCommand.js.flow +76 -77
- package/ListItemMergeCommand.js +24 -24
- package/ListItemMergeCommand.js.flow +198 -199
- package/ListItemNodeSpec.js.flow +52 -52
- package/ListSplitCommand.js +15 -16
- package/ListSplitCommand.js.flow +54 -54
- package/ListToggleCommand.js +19 -20
- package/ListToggleCommand.js.flow +99 -99
- package/MarkNames.js.flow +18 -18
- package/MarksClearCommand.js +17 -18
- package/MarksClearCommand.js.flow +65 -65
- package/MathEditCommand.js +17 -19
- package/MathEditCommand.js.flow +119 -120
- package/MathNodeSpec.js.flow +46 -46
- package/NodeNames.js.flow +23 -23
- package/OrderedListNodeSpec.js +2 -2
- package/OrderedListNodeSpec.js.flow +132 -132
- package/ParagraphNodeSpec.js +11 -2
- package/ParagraphNodeSpec.js.flow +163 -156
- package/ParagraphSpacingCommand.js +21 -23
- package/ParagraphSpacingCommand.js.flow +139 -144
- package/PrintCommand.js +17 -18
- package/PrintCommand.js.flow +53 -53
- package/SelectionPlaceholderPlugin.js +11 -11
- package/SelectionPlaceholderPlugin.js.flow +131 -131
- package/SpacerMarkSpec.js +2 -2
- package/SpacerMarkSpec.js.flow +47 -47
- package/StrikeMarkSpec.js.flow +21 -21
- package/StrongMarkSpec.js.flow +25 -25
- package/StyleView.js +5 -7
- package/StyleView.js.flow +18 -19
- package/TableBackgroundColorCommand.js +34 -23
- package/TableBackgroundColorCommand.js.flow +80 -75
- package/TableBorderColorCommand.js +34 -23
- package/TableBorderColorCommand.js.flow +81 -75
- package/TableCellColorCommand.js +20 -21
- package/TableCellColorCommand.js.flow +74 -75
- package/TableCellMenuPlugin.js +19 -19
- package/TableCellMenuPlugin.js.flow +130 -132
- package/TableInsertCommand.js +19 -22
- package/TableInsertCommand.js.flow +118 -120
- package/TableMergeCellsCommand.js +19 -19
- package/TableMergeCellsCommand.js.flow +113 -112
- package/TableNodesSpecs.js +4 -2
- package/TableNodesSpecs.js.flow +80 -78
- package/TablePlugins.js.flow +14 -14
- package/TableResizePlugin.js +20 -20
- package/TableResizePlugin.js.flow +631 -631
- package/TextColorMarkSpec.js.flow +35 -35
- package/TextHighlightMarkSpec.js.flow +38 -38
- package/TextInsertTabSpaceCommand.js +15 -16
- package/TextInsertTabSpaceCommand.js.flow +106 -106
- package/TextNoWrapMarkSpec.js.flow +14 -14
- package/TextNodeSpec.js.flow +7 -7
- package/TextSelectionMarkSpec.js.flow +24 -24
- package/TextSubMarkSpec.js.flow +20 -20
- package/TextSuperMarkSpec.js.flow +20 -20
- package/TextUnderlineMarkSpec.js.flow +27 -27
- package/Types.js +6 -0
- package/Types.js.flow +77 -75
- package/WebFontLoader.js +6 -7
- package/WebFontLoader.js.flow +22 -22
- package/blockQuoteInputRule.js.flow +36 -36
- package/bom.xml +17223 -25722
- package/browser.js.flow +7 -7
- package/buildEditorPlugins.js +6 -7
- package/buildEditorPlugins.js.flow +49 -49
- package/buildInputRules.js +8 -4
- package/buildInputRules.js.flow +85 -81
- package/client/CollabConnector.js +20 -20
- package/client/CollabConnector.js.flow +90 -90
- package/client/EditorConnection.js +10 -9
- package/client/EditorConnection.js.flow +324 -323
- package/client/Licit.js +78 -115
- package/client/Licit.js.flow +611 -643
- package/client/Licit.test.js +49 -39
- package/client/Licit.test.js.flow +104 -98
- package/client/Reporter.js +5 -6
- package/client/Reporter.js.flow +37 -37
- package/client/SimpleConnector.js +5 -5
- package/client/SimpleConnector.js.flow +61 -61
- package/client/http.js +0 -6
- package/client/http.js.flow +62 -70
- package/client/licit.css +12 -12
- package/client/throttle.js +8 -2
- package/client/throttle.js.flow +27 -27
- package/convertFromDOMElement.js +2 -4
- package/convertFromDOMElement.js.flow +33 -36
- package/convertFromHTML.js +2 -3
- package/convertFromHTML.js.flow +15 -17
- package/convertFromJSON.js +1 -2
- package/convertFromJSON.js.flow +55 -56
- package/convertToCSSPTValue.js +6 -10
- package/convertToCSSPTValue.js.flow +19 -22
- package/convertToJSON.js.flow +7 -7
- package/createCommand.js +16 -17
- package/createCommand.js.flow +62 -62
- package/createEditorKeyMap.js +2 -2
- package/createEditorKeyMap.js.flow +94 -94
- package/createEmptyEditorState.js +2 -3
- package/createEmptyEditorState.js.flow +29 -31
- package/createTableResizingPlugin.js +6 -6
- package/createTableResizingPlugin.js.flow +86 -86
- package/findActionableCell.js.flow +74 -74
- package/findActiveMark.js +1 -1
- package/findActiveMark.js.flow +32 -32
- package/hyphenize.js.flow +17 -17
- package/index.d.ts +165 -165
- package/index.js.flow +10 -10
- package/insertTable.js +0 -3
- package/insertTable.js.flow +54 -56
- package/isEditorStateEmpty.js.flow +32 -32
- package/isTableNode.js.flow +15 -15
- package/joinDown.js +1 -3
- package/joinDown.js.flow +25 -27
- package/joinListNode.js.flow +55 -55
- package/joinUp.js +1 -3
- package/joinUp.js.flow +37 -39
- package/keymaps.js.flow +185 -185
- package/lookUpElement.js +2 -1
- package/lookUpElement.js.flow +14 -14
- package/nodeAt.js.flow +12 -12
- package/normalizeHTML.js +3 -1
- package/normalizeHTML.js.flow +80 -78
- package/package.json +162 -156
- package/patchAnchorElements.js +1 -1
- package/patchAnchorElements.js.flow +38 -38
- package/patchBreakElements.js +3 -2
- package/patchBreakElements.js.flow +22 -22
- package/patchElementInlineStyles.js +1 -1
- package/patchElementInlineStyles.js.flow +92 -92
- package/patchListElements.js +4 -4
- package/patchListElements.js.flow +276 -276
- package/patchMathElements.js +5 -7
- package/patchMathElements.js.flow +58 -60
- package/patchParagraphElements.js.flow +20 -20
- package/patchStyleElements.js +1 -1
- package/patchStyleElements.js.flow +197 -196
- package/patchTableElements.js +2 -3
- package/patchTableElements.js.flow +88 -89
- package/rebaseDocWithSteps.js.flow +42 -42
- package/sanitizeURL.js +1 -1
- package/sanitizeURL.js.flow +13 -13
- package/splitListItem.js +3 -3
- package/splitListItem.js.flow +191 -191
- package/styles.css +19 -19
- package/styles0.css +29 -29
- package/toClosestFontPtSize.js.flow +22 -22
- package/toSafeHTMLDocument.js.flow +9 -9
- package/toggleBlockquote.js +4 -5
- package/toggleBlockquote.js.flow +101 -108
- package/toggleCodeBlock.js +6 -6
- package/toggleCodeBlock.js.flow +102 -102
- package/ui/AlertInfo.js +15 -16
- package/ui/AlertInfo.js.flow +64 -64
- package/ui/BookmarkNodeView.js +20 -21
- package/ui/BookmarkNodeView.js.flow +66 -66
- package/ui/CommandButton.js +15 -16
- package/ui/CommandButton.js.flow +68 -68
- package/ui/CommandMenu.js +19 -20
- package/ui/CommandMenu.js.flow +75 -75
- package/ui/CommandMenuButton.js +23 -25
- package/ui/CommandMenuButton.js.flow +130 -131
- package/ui/CustomEditorView.js +20 -20
- package/ui/CustomEditorView.js.flow +29 -28
- package/ui/CustomMenu.js +11 -12
- package/ui/CustomMenu.js.flow +17 -17
- package/ui/CustomMenuItem.js +16 -18
- package/ui/CustomMenuItem.js.flow +36 -36
- package/ui/CustomNodeView.js +29 -19
- package/ui/CustomNodeView.js.flow +207 -200
- package/ui/CustomRadioButton.js +18 -21
- package/ui/CustomRadioButton.js.flow +64 -65
- package/ui/DocLayoutEditor.js +18 -20
- package/ui/DocLayoutEditor.js.flow +145 -146
- package/ui/Editor.js +30 -28
- package/ui/Editor.js.flow +287 -288
- package/ui/EditorFrameset.js +13 -14
- package/ui/EditorFrameset.js.flow +81 -81
- package/ui/EditorToolbar.js +36 -42
- package/ui/EditorToolbar.js.flow +199 -218
- package/ui/EditorToolbarConfig.js +5 -5
- package/ui/EditorToolbarConfig.js.flow +164 -164
- package/ui/FontSizeCommandMenuButton.js +14 -15
- package/ui/FontSizeCommandMenuButton.js.flow +66 -66
- package/ui/FontTypeCommandMenuButton.js +15 -17
- package/ui/FontTypeCommandMenuButton.js.flow +60 -61
- package/ui/Frag.js +11 -12
- package/ui/Frag.js.flow +13 -13
- package/ui/Icon.js +21 -24
- package/ui/Icon.js.flow +89 -89
- package/ui/ImageInlineEditor.js +14 -15
- package/ui/ImageInlineEditor.js.flow +67 -67
- package/ui/KeyCodes.js.flow +12 -12
- package/ui/LinkTooltip.js +68 -34
- package/ui/LinkTooltip.js.flow +118 -85
- package/ui/LinkURLEditor.js +160 -43
- package/ui/LinkURLEditor.js.flow +243 -117
- package/ui/ListItemNodeView.js +6 -7
- package/ui/ListItemNodeView.js.flow +98 -98
- package/ui/ListTypeButton.js +23 -27
- package/ui/ListTypeButton.js.flow +128 -131
- package/ui/ListTypeCommandButton.js +14 -15
- package/ui/ListTypeCommandButton.js.flow +85 -85
- package/ui/ListTypeMenu.js +21 -22
- package/ui/ListTypeMenu.js.flow +70 -70
- package/ui/LoadingIndicator.js +11 -12
- package/ui/LoadingIndicator.js.flow +20 -20
- package/ui/MathEditor.js +17 -22
- package/ui/MathEditor.js.flow +72 -78
- package/ui/MathInlineEditor.js +20 -21
- package/ui/MathInlineEditor.js.flow +101 -102
- package/ui/MathNodeView.js +29 -30
- package/ui/MathNodeView.js.flow +176 -186
- package/ui/PasteMenu.js +19 -23
- package/ui/PasteMenu.js.flow +53 -57
- package/ui/ResizeObserver.js +1 -1
- package/ui/ResizeObserver.js.flow +106 -106
- package/ui/RichTextEditor.js +17 -18
- package/ui/RichTextEditor.js.flow +133 -133
- package/ui/SelectionObserver.js +8 -9
- package/ui/SelectionObserver.js.flow +134 -134
- package/ui/TableCellMenu.js +14 -15
- package/ui/TableCellMenu.js.flow +51 -51
- package/ui/TableGridSizeEditor.js +30 -33
- package/ui/TableGridSizeEditor.js.flow +187 -184
- package/ui/TableNodeView.js +18 -17
- package/ui/TableNodeView.js.flow +25 -25
- package/ui/bindScrollHandler.js +2 -1
- package/ui/bindScrollHandler.js.flow +46 -46
- package/ui/canUseCSSFont.js +5 -4
- package/ui/canUseCSSFont.js.flow +42 -43
- package/ui/czi-body-layout-editor.css +16 -16
- package/ui/czi-bookmark-view.css +10 -10
- package/ui/czi-cursor-placeholder.css +36 -36
- package/ui/czi-custom-menu-button.css +18 -18
- package/ui/czi-custom-menu-item.css +30 -30
- package/ui/czi-custom-menu.css +8 -8
- package/ui/czi-custom-radio-button.css +80 -80
- package/ui/czi-custom-scrollbar.css +21 -21
- package/ui/czi-editor-frameset.css +81 -81
- package/ui/czi-editor-toolbar.css +122 -122
- package/ui/czi-editor.css +217 -220
- package/ui/czi-form.css +201 -107
- package/ui/czi-frag.css +3 -3
- package/ui/czi-heading.css +40 -40
- package/ui/czi-icon.css +72 -72
- package/ui/czi-image-resize-box.css +165 -165
- package/ui/czi-image-upload-editor.css +57 -57
- package/ui/czi-image-upload-placeholder.css +50 -50
- package/ui/czi-image-url-editor.css +38 -38
- package/ui/czi-image-view.css +121 -125
- package/ui/czi-indent.css +137 -137
- package/ui/czi-inline-editor.css +20 -20
- package/ui/czi-link-tooltip.css +112 -71
- package/ui/czi-list.css +406 -410
- package/ui/czi-loading-indicator.css +66 -111
- package/ui/czi-math-view.css +62 -62
- package/ui/czi-selection-placeholder.css +24 -24
- package/ui/czi-table-cell-menu.css +16 -14
- package/ui/czi-table-grid-size-editor.css +37 -37
- package/ui/czi-table.css +87 -87
- package/ui/czi-vars.css +2 -2
- package/ui/findActiveFontSize.js +2 -1
- package/ui/findActiveFontSize.js.flow +55 -58
- package/ui/findActiveFontType.js +4 -3
- package/ui/findActiveFontType.js.flow +35 -38
- package/ui/fonts.css +460 -460
- package/ui/handleEditorDrop.js +1 -1
- package/ui/handleEditorDrop.js.flow +28 -28
- package/ui/handleEditorKeyDown.js +1 -1
- package/ui/handleEditorKeyDown.js.flow +39 -39
- package/ui/handleEditorPaste.js +1 -1
- package/ui/handleEditorPaste.js.flow +33 -33
- package/ui/htmlElementToRect.js.flow +18 -18
- package/ui/icon-font.css +9 -9
- package/ui/injectStyleSheet.js +2 -2
- package/ui/injectStyleSheet.js.flow +40 -42
- package/ui/isElementFullyVisible.js +1 -10
- package/ui/isElementFullyVisible.js.flow +14 -26
- package/ui/isOffline.js.flow +8 -8
- package/ui/isReactClass.js.flow +12 -12
- package/ui/listType.css +21 -21
- package/ui/mathquill-editor/MathQuillEditor.js +27 -30
- package/ui/mathquill-editor/MathQuillEditor.js.flow +158 -159
- package/ui/mathquill-editor/MathQuillEditorSymbols.js.flow +483 -483
- package/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js +14 -15
- package/ui/mathquill-editor/MathQuillEditorSymbolsPanel.js.flow +50 -50
- package/ui/mathquill-editor/czi-mathquill-editor-symbols-panel.css +39 -39
- package/ui/mathquill-editor/czi-mathquill-editor.css +50 -50
- package/ui/mathquill-editor/mathquill-import-kludge.js +1 -8
- package/ui/mathquill-editor/mathquill-import-kludge.js.flow +17 -24
- package/ui/renderLaTeXAsHTML.js +4 -4
- package/ui/renderLaTeXAsHTML.js.flow +46 -46
- package/ui/resolveImage.js +5 -6
- package/ui/resolveImage.js.flow +121 -123
- package/ui/toCSSColor.js.flow +51 -51
- package/ui/toCSSLineSpacing.js +2 -3
- package/ui/toCSSLineSpacing.js.flow +53 -55
- package/ui/toHexColor.js.flow +26 -26
- package/ui/uuid.js.flow +9 -9
- package/uuid.js.flow +9 -9
|
@@ -23,7 +23,7 @@ function patchBlockElement(el) {
|
|
|
23
23
|
function patchBlockElementStyle(el, inlineStyleName) {
|
|
24
24
|
var element = el;
|
|
25
25
|
var elementStyle = element.style;
|
|
26
|
-
var value = elementStyle
|
|
26
|
+
var value = elementStyle === null || elementStyle === void 0 ? void 0 : elementStyle[inlineStyleName];
|
|
27
27
|
if (inlineStyleName === 'textIndent' && value) {
|
|
28
28
|
// This is the workaround to fix the issue that people with mix both
|
|
29
29
|
// text-indent and margin-left together.
|
|
@@ -1,92 +1,92 @@
|
|
|
1
|
-
// @flow
|
|
2
|
-
|
|
3
|
-
import hyphenize from './hyphenize.js';
|
|
4
|
-
|
|
5
|
-
const BLOCK_TAG_SELECTOR = 'p,h1,h2,h3,h4,h5,h6,li'.replace(
|
|
6
|
-
/\w+/g,
|
|
7
|
-
(m) => `${m}[style]`
|
|
8
|
-
);
|
|
9
|
-
|
|
10
|
-
export default function patchElementInlineStyles(doc: Document): void {
|
|
11
|
-
// Ensure that inline-styles can be correctly translated as inline marks.
|
|
12
|
-
// Workaround to patch inline styles added to block tags.
|
|
13
|
-
const bEls = Array.from(doc.querySelectorAll(BLOCK_TAG_SELECTOR));
|
|
14
|
-
bEls.forEach(patchBlockElement);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const NODE_TYPE_TEXT = 3;
|
|
18
|
-
const NODE_TYPE_ELEMENT = 1;
|
|
19
|
-
const INLINE_STYLE_NAMES = [
|
|
20
|
-
'backgroundColor',
|
|
21
|
-
'color',
|
|
22
|
-
'fontFamily',
|
|
23
|
-
'fontSize',
|
|
24
|
-
'fontStyle',
|
|
25
|
-
'fontWeight',
|
|
26
|
-
'textDecoration',
|
|
27
|
-
'textIndent',
|
|
28
|
-
];
|
|
29
|
-
|
|
30
|
-
const INLINE_ELEMENT_NODE_NAMES = new Set([
|
|
31
|
-
'A',
|
|
32
|
-
'B',
|
|
33
|
-
'EM',
|
|
34
|
-
'I',
|
|
35
|
-
'SPAN',
|
|
36
|
-
'STRONG',
|
|
37
|
-
'U',
|
|
38
|
-
]);
|
|
39
|
-
|
|
40
|
-
function patchBlockElement(el: HTMLElement): void {
|
|
41
|
-
INLINE_STYLE_NAMES.forEach((name) => patchBlockElementStyle(el, name));
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// Move the specified inline style of the element to its child nodes. This
|
|
45
|
-
// assumes that its child nodes are inline elements.
|
|
46
|
-
function patchBlockElementStyle(
|
|
47
|
-
el: HTMLElement,
|
|
48
|
-
inlineStyleName: string
|
|
49
|
-
): void {
|
|
50
|
-
const element: any = el;
|
|
51
|
-
const elementStyle = element.style;
|
|
52
|
-
const value = elementStyle
|
|
53
|
-
|
|
54
|
-
if (inlineStyleName === 'textIndent' && value) {
|
|
55
|
-
// This is the workaround to fix the issue that people with mix both
|
|
56
|
-
// text-indent and margin-left together.
|
|
57
|
-
// For instance, `margin-left: -100px` and `text-indent: 100px` shall
|
|
58
|
-
// offset each other.
|
|
59
|
-
const marginLeft = elementStyle.marginLeft || '';
|
|
60
|
-
if (value === '-' + marginLeft || marginLeft === '-' + value) {
|
|
61
|
-
elementStyle.marginLeft = '';
|
|
62
|
-
elementStyle.textIndent = '';
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
if (!value) {
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// Remove the style.
|
|
71
|
-
elementStyle[inlineStyleName] = '';
|
|
72
|
-
|
|
73
|
-
const childNodes = Array.from(element.childNodes);
|
|
74
|
-
childNodes.forEach((node) => {
|
|
75
|
-
const { nodeType, style, nodeName, ownerDocument, parentElement } = node;
|
|
76
|
-
|
|
77
|
-
if (nodeType === NODE_TYPE_ELEMENT) {
|
|
78
|
-
if (INLINE_ELEMENT_NODE_NAMES.has(nodeName)) {
|
|
79
|
-
const cssText =
|
|
80
|
-
`${hyphenize(inlineStyleName)}: ${value};` + style.cssText;
|
|
81
|
-
style.cssText = cssText;
|
|
82
|
-
}
|
|
83
|
-
} else if (nodeType === NODE_TYPE_TEXT) {
|
|
84
|
-
if (ownerDocument && parentElement) {
|
|
85
|
-
const span: any = ownerDocument.createElement('span');
|
|
86
|
-
span.style[inlineStyleName] = value;
|
|
87
|
-
parentElement.insertBefore(span, node);
|
|
88
|
-
span.appendChild(node);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
}
|
|
1
|
+
// @flow
|
|
2
|
+
|
|
3
|
+
import hyphenize from './hyphenize.js';
|
|
4
|
+
|
|
5
|
+
const BLOCK_TAG_SELECTOR = 'p,h1,h2,h3,h4,h5,h6,li'.replace(
|
|
6
|
+
/\w+/g,
|
|
7
|
+
(m) => `${m}[style]`
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
export default function patchElementInlineStyles(doc: Document): void {
|
|
11
|
+
// Ensure that inline-styles can be correctly translated as inline marks.
|
|
12
|
+
// Workaround to patch inline styles added to block tags.
|
|
13
|
+
const bEls = Array.from(doc.querySelectorAll(BLOCK_TAG_SELECTOR));
|
|
14
|
+
bEls.forEach(patchBlockElement);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const NODE_TYPE_TEXT = 3;
|
|
18
|
+
const NODE_TYPE_ELEMENT = 1;
|
|
19
|
+
const INLINE_STYLE_NAMES = [
|
|
20
|
+
'backgroundColor',
|
|
21
|
+
'color',
|
|
22
|
+
'fontFamily',
|
|
23
|
+
'fontSize',
|
|
24
|
+
'fontStyle',
|
|
25
|
+
'fontWeight',
|
|
26
|
+
'textDecoration',
|
|
27
|
+
'textIndent',
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
const INLINE_ELEMENT_NODE_NAMES = new Set([
|
|
31
|
+
'A',
|
|
32
|
+
'B',
|
|
33
|
+
'EM',
|
|
34
|
+
'I',
|
|
35
|
+
'SPAN',
|
|
36
|
+
'STRONG',
|
|
37
|
+
'U',
|
|
38
|
+
]);
|
|
39
|
+
|
|
40
|
+
function patchBlockElement(el: HTMLElement): void {
|
|
41
|
+
INLINE_STYLE_NAMES.forEach((name) => patchBlockElementStyle(el, name));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Move the specified inline style of the element to its child nodes. This
|
|
45
|
+
// assumes that its child nodes are inline elements.
|
|
46
|
+
function patchBlockElementStyle(
|
|
47
|
+
el: HTMLElement,
|
|
48
|
+
inlineStyleName: string
|
|
49
|
+
): void {
|
|
50
|
+
const element: any = el;
|
|
51
|
+
const elementStyle = element.style;
|
|
52
|
+
const value = elementStyle?.[inlineStyleName];
|
|
53
|
+
|
|
54
|
+
if (inlineStyleName === 'textIndent' && value) {
|
|
55
|
+
// This is the workaround to fix the issue that people with mix both
|
|
56
|
+
// text-indent and margin-left together.
|
|
57
|
+
// For instance, `margin-left: -100px` and `text-indent: 100px` shall
|
|
58
|
+
// offset each other.
|
|
59
|
+
const marginLeft = elementStyle.marginLeft || '';
|
|
60
|
+
if (value === '-' + marginLeft || marginLeft === '-' + value) {
|
|
61
|
+
elementStyle.marginLeft = '';
|
|
62
|
+
elementStyle.textIndent = '';
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (!value) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Remove the style.
|
|
71
|
+
elementStyle[inlineStyleName] = '';
|
|
72
|
+
|
|
73
|
+
const childNodes = Array.from(element.childNodes);
|
|
74
|
+
childNodes.forEach((node) => {
|
|
75
|
+
const { nodeType, style, nodeName, ownerDocument, parentElement } = node;
|
|
76
|
+
|
|
77
|
+
if (nodeType === NODE_TYPE_ELEMENT) {
|
|
78
|
+
if (INLINE_ELEMENT_NODE_NAMES.has(nodeName)) {
|
|
79
|
+
const cssText =
|
|
80
|
+
`${hyphenize(inlineStyleName)}: ${value};` + style.cssText;
|
|
81
|
+
style.cssText = cssText;
|
|
82
|
+
}
|
|
83
|
+
} else if (nodeType === NODE_TYPE_TEXT) {
|
|
84
|
+
if (ownerDocument && parentElement) {
|
|
85
|
+
const span: any = ownerDocument.createElement('span');
|
|
86
|
+
span.style[inlineStyleName] = value;
|
|
87
|
+
parentElement.insertBefore(span, node);
|
|
88
|
+
span.appendChild(node);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
package/patchListElements.js
CHANGED
|
@@ -23,12 +23,12 @@ var CHAR_CIRCLE = "\u25CB";
|
|
|
23
23
|
var CHAR_SQUARE = "\u25A0";
|
|
24
24
|
var CHAR_BOX = "\u274F";
|
|
25
25
|
var CHAR_ZERO_SPACE = "\u200B";
|
|
26
|
-
var INLINE_NODE_NAME_PATTERN = /^(#text
|
|
26
|
+
var INLINE_NODE_NAME_PATTERN = /^(#text|(A|SPAN|B|STRONG))$/;
|
|
27
27
|
function patchListElementsElement(listElement) {
|
|
28
28
|
// If the children of `listElement` all have teh same marginLeft, assume
|
|
29
29
|
// it to be indented.
|
|
30
|
-
var marginLeft
|
|
31
|
-
var beforeContent
|
|
30
|
+
var marginLeft;
|
|
31
|
+
var beforeContent;
|
|
32
32
|
var parentElement = listElement.parentElement,
|
|
33
33
|
children = listElement.children;
|
|
34
34
|
|
|
@@ -50,7 +50,7 @@ function patchListElementsElement(listElement) {
|
|
|
50
50
|
if (beforeContent !== bc) {
|
|
51
51
|
beforeContent = null;
|
|
52
52
|
}
|
|
53
|
-
var ml = style
|
|
53
|
+
var ml = (style === null || style === void 0 ? void 0 : style.marginLeft) || '';
|
|
54
54
|
if (marginLeft === undefined) {
|
|
55
55
|
marginLeft = ml;
|
|
56
56
|
}
|