@gravity-ui/markdown-editor 13.5.2 → 13.6.0
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/build/cjs/bundle/Editor.js +8 -5
- package/build/cjs/bundle/config/icons.d.ts +1 -1
- package/build/cjs/bundle/config/icons.js +1 -0
- package/build/cjs/bundle/config/wysiwyg.d.ts +2 -1
- package/build/cjs/bundle/config/wysiwyg.js +13 -2
- package/build/cjs/extensions/yfm/FoldingHeading/FoldingHeading.d.ts +12 -0
- package/build/cjs/extensions/yfm/FoldingHeading/FoldingHeading.js +22 -0
- package/build/cjs/extensions/yfm/FoldingHeading/FoldingHeadingSpec/FoldingHeadingSpecs.d.ts +2 -0
- package/build/cjs/extensions/yfm/FoldingHeading/FoldingHeadingSpec/FoldingHeadingSpecs.js +9 -0
- package/build/cjs/extensions/yfm/FoldingHeading/FoldingHeadingSpec/const.d.ts +11 -0
- package/build/cjs/extensions/yfm/FoldingHeading/FoldingHeadingSpec/const.js +5 -0
- package/build/cjs/extensions/yfm/FoldingHeading/FoldingHeadingSpec/index.d.ts +1 -0
- package/build/cjs/extensions/yfm/FoldingHeading/FoldingHeadingSpec/index.js +4 -0
- package/build/cjs/extensions/yfm/FoldingHeading/FoldingHeadingSpec/md/skip-heading-sections.d.ts +3 -0
- package/build/cjs/extensions/yfm/FoldingHeading/FoldingHeadingSpec/md/skip-heading-sections.js +17 -0
- package/build/cjs/extensions/yfm/FoldingHeading/actions.d.ts +2 -0
- package/build/cjs/extensions/yfm/FoldingHeading/actions.js +10 -0
- package/build/cjs/extensions/yfm/FoldingHeading/commands/index.d.ts +3 -0
- package/build/cjs/extensions/yfm/FoldingHeading/commands/index.js +6 -0
- package/build/cjs/extensions/yfm/FoldingHeading/commands/openHeadingAndCreateParagraphAfterIfCursorAtEndOfHeading.d.ts +2 -0
- package/build/cjs/extensions/yfm/FoldingHeading/commands/openHeadingAndCreateParagraphAfterIfCursorAtEndOfHeading.js +27 -0
- package/build/cjs/extensions/yfm/FoldingHeading/commands/removeFoldingIfCursorAtStartOfHeading.d.ts +2 -0
- package/build/cjs/extensions/yfm/FoldingHeading/commands/removeFoldingIfCursorAtStartOfHeading.js +17 -0
- package/build/cjs/extensions/yfm/FoldingHeading/commands/toggleFoldingOfHeading.d.ts +2 -0
- package/build/cjs/extensions/yfm/FoldingHeading/commands/toggleFoldingOfHeading.js +26 -0
- package/build/cjs/extensions/yfm/FoldingHeading/const.d.ts +1 -0
- package/build/cjs/extensions/yfm/FoldingHeading/const.js +6 -0
- package/build/cjs/extensions/yfm/FoldingHeading/index.d.ts +1 -0
- package/build/cjs/extensions/yfm/FoldingHeading/index.js +5 -0
- package/build/cjs/extensions/yfm/FoldingHeading/input-rules.d.ts +4 -0
- package/build/cjs/extensions/yfm/FoldingHeading/input-rules.js +31 -0
- package/build/cjs/extensions/yfm/FoldingHeading/plugins/Folding.d.ts +3 -0
- package/build/cjs/extensions/yfm/FoldingHeading/plugins/Folding.js +167 -0
- package/build/cjs/extensions/yfm/FoldingHeading/utils.d.ts +10 -0
- package/build/cjs/extensions/yfm/FoldingHeading/utils.js +30 -0
- package/build/cjs/extensions/yfm/YfmHeading/YfmHeadingSpecs/const.d.ts +1 -1
- package/build/cjs/extensions/yfm/YfmHeading/YfmHeadingSpecs/const.js +1 -1
- package/build/cjs/extensions/yfm/YfmHeading/YfmHeadingSpecs/index.js +4 -4
- package/build/cjs/extensions/yfm/YfmHeading/YfmHeadingSpecs/utils.js +9 -1
- package/build/cjs/i18n/menubar/en.json +2 -0
- package/build/cjs/i18n/menubar/index.d.ts +3 -1
- package/build/cjs/i18n/menubar/ru.json +2 -0
- package/build/cjs/icons/index.d.ts +1 -1
- package/build/cjs/icons/index.js +2 -1
- package/build/cjs/toolbar/ToolbarButton.js +3 -2
- package/build/cjs/version.js +1 -1
- package/build/esm/bundle/Editor.js +8 -5
- package/build/esm/bundle/config/icons.d.ts +1 -1
- package/build/esm/bundle/config/icons.js +2 -1
- package/build/esm/bundle/config/wysiwyg.d.ts +2 -1
- package/build/esm/bundle/config/wysiwyg.js +12 -1
- package/build/esm/extensions/yfm/FoldingHeading/FoldingHeading.d.ts +12 -0
- package/build/esm/extensions/yfm/FoldingHeading/FoldingHeading.js +18 -0
- package/build/esm/extensions/yfm/FoldingHeading/FoldingHeadingSpec/FoldingHeadingSpecs.d.ts +2 -0
- package/build/esm/extensions/yfm/FoldingHeading/FoldingHeadingSpec/FoldingHeadingSpecs.js +5 -0
- package/build/esm/extensions/yfm/FoldingHeading/FoldingHeadingSpec/const.d.ts +11 -0
- package/build/esm/extensions/yfm/FoldingHeading/FoldingHeadingSpec/const.js +2 -0
- package/build/esm/extensions/yfm/FoldingHeading/FoldingHeadingSpec/index.d.ts +1 -0
- package/build/esm/extensions/yfm/FoldingHeading/FoldingHeadingSpec/index.js +1 -0
- package/build/esm/extensions/yfm/FoldingHeading/FoldingHeadingSpec/md/skip-heading-sections.d.ts +3 -0
- package/build/esm/extensions/yfm/FoldingHeading/FoldingHeadingSpec/md/skip-heading-sections.js +13 -0
- package/build/esm/extensions/yfm/FoldingHeading/actions.d.ts +2 -0
- package/build/esm/extensions/yfm/FoldingHeading/actions.js +7 -0
- package/build/esm/extensions/yfm/FoldingHeading/commands/index.d.ts +3 -0
- package/build/esm/extensions/yfm/FoldingHeading/commands/index.js +3 -0
- package/build/esm/extensions/yfm/FoldingHeading/commands/openHeadingAndCreateParagraphAfterIfCursorAtEndOfHeading.d.ts +2 -0
- package/build/esm/extensions/yfm/FoldingHeading/commands/openHeadingAndCreateParagraphAfterIfCursorAtEndOfHeading.js +23 -0
- package/build/esm/extensions/yfm/FoldingHeading/commands/removeFoldingIfCursorAtStartOfHeading.d.ts +2 -0
- package/build/esm/extensions/yfm/FoldingHeading/commands/removeFoldingIfCursorAtStartOfHeading.js +13 -0
- package/build/esm/extensions/yfm/FoldingHeading/commands/toggleFoldingOfHeading.d.ts +2 -0
- package/build/esm/extensions/yfm/FoldingHeading/commands/toggleFoldingOfHeading.js +22 -0
- package/build/esm/extensions/yfm/FoldingHeading/const.d.ts +1 -0
- package/build/esm/extensions/yfm/FoldingHeading/const.js +1 -0
- package/build/esm/extensions/yfm/FoldingHeading/index.d.ts +1 -0
- package/build/esm/extensions/yfm/FoldingHeading/index.js +1 -0
- package/build/esm/extensions/yfm/FoldingHeading/input-rules.d.ts +4 -0
- package/build/esm/extensions/yfm/FoldingHeading/input-rules.js +27 -0
- package/build/esm/extensions/yfm/FoldingHeading/plugins/Folding.d.ts +4 -0
- package/build/esm/extensions/yfm/FoldingHeading/plugins/Folding.js +164 -0
- package/build/esm/extensions/yfm/FoldingHeading/utils.d.ts +10 -0
- package/build/esm/extensions/yfm/FoldingHeading/utils.js +19 -0
- package/build/esm/extensions/yfm/YfmHeading/YfmHeadingSpecs/const.d.ts +1 -1
- package/build/esm/extensions/yfm/YfmHeading/YfmHeadingSpecs/const.js +1 -1
- package/build/esm/extensions/yfm/YfmHeading/YfmHeadingSpecs/index.js +4 -4
- package/build/esm/extensions/yfm/YfmHeading/YfmHeadingSpecs/utils.js +9 -1
- package/build/esm/i18n/menubar/en.json +2 -0
- package/build/esm/i18n/menubar/index.d.ts +3 -1
- package/build/esm/i18n/menubar/ru.json +2 -0
- package/build/esm/icons/index.d.ts +1 -1
- package/build/esm/icons/index.js +1 -1
- package/build/esm/toolbar/ToolbarButton.js +3 -2
- package/build/esm/version.js +1 -1
- package/build/styles.css +0 -381
- package/package.json +10 -5
- package/build/cjs/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/TooltipView.css +0 -26
- package/build/cjs/extensions/markdown/Table/plugins/TableCellContextPlugin/floating.css +0 -11
- package/build/cjs/extensions/yfm/ImgSize/ImagePaste/skeleton.css +0 -8
- package/build/cjs/extensions/yfm/ImgSize/ImageWidget/view.css +0 -12
- package/build/cjs/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/ImageForm/ImageForm.css +0 -8
- package/build/cjs/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/ImgNodeView.css +0 -4
- package/build/cjs/extensions/yfm/Mermaid/MermaidNodeView/Mermaid.css +0 -33
- package/build/cjs/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.css +0 -3
- package/build/cjs/extensions/yfm/YfmFile/YfmFilePaste/skeleton.css +0 -8
- package/build/cjs/extensions/yfm/YfmFile/YfmFileWidget/view.css +0 -7
- package/build/cjs/extensions/yfm/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlock.css +0 -66
- package/build/cjs/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/index.css +0 -66
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/view.css +0 -83
- package/build/cjs/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.css +0 -37
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.css +0 -9
- package/build/esm/extensions/markdown/CodeBlock/CodeBlockHighlight/TooltipPlugin/TooltipView.css +0 -26
- package/build/esm/extensions/markdown/Table/plugins/TableCellContextPlugin/floating.css +0 -11
- package/build/esm/extensions/yfm/ImgSize/ImagePaste/skeleton.css +0 -8
- package/build/esm/extensions/yfm/ImgSize/ImageWidget/view.css +0 -12
- package/build/esm/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/ImageForm/ImageForm.css +0 -8
- package/build/esm/extensions/yfm/ImgSize/plugins/ImgSizeNodeView/ImgNodeView.css +0 -4
- package/build/esm/extensions/yfm/Mermaid/MermaidNodeView/Mermaid.css +0 -33
- package/build/esm/extensions/yfm/YfmCut/nodeviews/yfm-cut-title.css +0 -3
- package/build/esm/extensions/yfm/YfmFile/YfmFilePaste/skeleton.css +0 -8
- package/build/esm/extensions/yfm/YfmFile/YfmFileWidget/view.css +0 -7
- package/build/esm/extensions/yfm/YfmHtmlBlock/YfmHtmlBlockNodeView/YfmHtmlBlock.css +0 -66
- package/build/esm/extensions/yfm/YfmNote/plugins/YfmNoteTooltipPlugin/index.css +0 -66
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/view.css +0 -83
- package/build/esm/extensions/yfm/YfmTable/plugins/YfmTableControls/yfmTableCellView.css +0 -37
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.css +0 -9
|
@@ -16,7 +16,7 @@ const YfmHeadingSpecs = (builder, opts) => {
|
|
|
16
16
|
[const_1.YfmHeadingAttr.Id]: { default: '' },
|
|
17
17
|
[const_1.YfmHeadingAttr.Level]: { default: 1 },
|
|
18
18
|
[const_1.YfmHeadingAttr.DataLine]: { default: null },
|
|
19
|
-
[const_1.YfmHeadingAttr.Folding]: { default:
|
|
19
|
+
[const_1.YfmHeadingAttr.Folding]: { default: null },
|
|
20
20
|
},
|
|
21
21
|
content: '(text | inline)*',
|
|
22
22
|
group: 'block',
|
|
@@ -39,7 +39,7 @@ const YfmHeadingSpecs = (builder, opts) => {
|
|
|
39
39
|
{
|
|
40
40
|
id: id || null,
|
|
41
41
|
[const_1.YfmHeadingAttr.DataLine]: lineNumber,
|
|
42
|
-
[`data-${const_1.YfmHeadingAttr.Folding}`]: folding
|
|
42
|
+
[`data-${const_1.YfmHeadingAttr.Folding}`]: folding,
|
|
43
43
|
},
|
|
44
44
|
0,
|
|
45
45
|
// [
|
|
@@ -74,14 +74,14 @@ const YfmHeadingSpecs = (builder, opts) => {
|
|
|
74
74
|
// attrs[YfmHeadingAttr.Id] = slugify(tokens[index + 1].content);
|
|
75
75
|
// }
|
|
76
76
|
// attrs have id only if it explicitly specified manually
|
|
77
|
-
return Object.assign({ [const_1.YfmHeadingAttr.Level]: Number(token.tag.slice(1)), [const_1.YfmHeadingAttr.Folding]: (_a = token.meta) === null || _a === void 0 ? void 0 : _a.folding }, attrs);
|
|
77
|
+
return Object.assign({ [const_1.YfmHeadingAttr.Level]: Number(token.tag.slice(1)), [const_1.YfmHeadingAttr.Folding]: ((_a = token.meta) === null || _a === void 0 ? void 0 : _a.folding) === true ? true : null }, attrs);
|
|
78
78
|
},
|
|
79
79
|
},
|
|
80
80
|
},
|
|
81
81
|
toMd: (state, node) => {
|
|
82
82
|
const folding = node.attrs[const_1.YfmHeadingAttr.Folding];
|
|
83
83
|
const level = node.attrs[const_1.YfmHeadingAttr.Level];
|
|
84
|
-
state.write(state.repeat('#', level) + (folding ? '+' : '') + ' ');
|
|
84
|
+
state.write(state.repeat('#', level) + (typeof folding === 'boolean' ? '+' : '') + ' ');
|
|
85
85
|
state.renderInline(node);
|
|
86
86
|
const anchor = node.attrs[const_1.YfmHeadingAttr.Id];
|
|
87
87
|
if (anchor /*&& anchor !== node.firstChild?.textContent*/) {
|
|
@@ -10,9 +10,17 @@ Object.defineProperty(exports, "headingRule", { enumerable: true, get: function
|
|
|
10
10
|
const getNodeAttrs = (level) => (node) => ({
|
|
11
11
|
[const_1.YfmHeadingAttr.Level]: level,
|
|
12
12
|
[const_1.YfmHeadingAttr.Id]: node.getAttribute('id') || '',
|
|
13
|
-
[const_1.YfmHeadingAttr.Folding]: node
|
|
13
|
+
[const_1.YfmHeadingAttr.Folding]: getFoldingAttr(node),
|
|
14
14
|
});
|
|
15
15
|
exports.getNodeAttrs = getNodeAttrs;
|
|
16
|
+
function getFoldingAttr(node) {
|
|
17
|
+
const value = node.getAttribute(`data-${const_1.YfmHeadingAttr.Folding}`);
|
|
18
|
+
if (value === 'true')
|
|
19
|
+
return true;
|
|
20
|
+
if (value === 'false')
|
|
21
|
+
return false;
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
16
24
|
// export const slugify = (str: string) =>
|
|
17
25
|
// // same config as in yfm-transform
|
|
18
26
|
// // https://github.com/yandex-cloud/yfm-transform/blob/master/lib/plugins/anchors/index.js#L97-L100
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
"cut": "Cut",
|
|
18
18
|
"emoji": "Emoji",
|
|
19
19
|
"file": "File",
|
|
20
|
+
"folding-heading": "Collapsed section",
|
|
21
|
+
"folding-heading_hint": "The text under the heading can be collapsed or expanded",
|
|
20
22
|
"heading": "Heading",
|
|
21
23
|
"heading1": "Heading 1",
|
|
22
24
|
"heading2": "Heading 2",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const i18n: <G extends "bold" | "code" | "link" | "italic" | "strike" | "underline" | "mark" | "quote" | "colorify" | "mono" | "text" | "html" | "cut" | "table" | "image" | "code_inline" | "heading" | "note" | "file" | "codeblock" | "checkbox" | "emoji" | "list" | "tabs" | "math" | "heading1" | "heading2" | "heading3" | "heading4" | "heading5" | "heading6" | "undo" | "redo" | "math_inline" | "math_block" | "colorify__color_blue" | "colorify__color_default" | "colorify__color_gray" | "colorify__color_green" | "colorify__color_orange" | "colorify__color_red" | "colorify__color_violet" | "colorify__color_yellow" | "colorify__group_text" | "hrule" | "list__action_lift" | "list__action_sink" | "list_action_disabled" | "mermaid" | "more_action" | "olist" | "ulist", S extends string>(key: G | (string extends S ? S : never), params?: {
|
|
1
|
+
export declare const i18n: <G extends "bold" | "code" | "link" | "italic" | "strike" | "underline" | "mark" | "quote" | "colorify" | "mono" | "text" | "html" | "cut" | "table" | "image" | "code_inline" | "heading" | "note" | "file" | "codeblock" | "checkbox" | "emoji" | "list" | "tabs" | "math" | "heading1" | "heading2" | "heading3" | "heading4" | "heading5" | "heading6" | "undo" | "redo" | "math_inline" | "math_block" | "colorify__color_blue" | "colorify__color_default" | "colorify__color_gray" | "colorify__color_green" | "colorify__color_orange" | "colorify__color_red" | "colorify__color_violet" | "colorify__color_yellow" | "colorify__group_text" | "folding-heading" | "folding-heading_hint" | "hrule" | "list__action_lift" | "list__action_sink" | "list_action_disabled" | "mermaid" | "more_action" | "olist" | "ulist", S extends string>(key: G | (string extends S ? S : never), params?: {
|
|
2
2
|
[key: string]: any;
|
|
3
3
|
} | undefined) => S extends G ? {
|
|
4
4
|
bold: string;
|
|
@@ -19,6 +19,8 @@ export declare const i18n: <G extends "bold" | "code" | "link" | "italic" | "str
|
|
|
19
19
|
cut: string;
|
|
20
20
|
emoji: string;
|
|
21
21
|
file: string;
|
|
22
|
+
"folding-heading": string;
|
|
23
|
+
"folding-heading_hint": string;
|
|
22
24
|
heading: string;
|
|
23
25
|
heading1: string;
|
|
24
26
|
heading2: string;
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
"cut": "Кат",
|
|
18
18
|
"emoji": "Эмодзи",
|
|
19
19
|
"file": "Файл",
|
|
20
|
+
"folding-heading": "Свёрнутый раздел",
|
|
21
|
+
"folding-heading_hint": "Текст под заголовком можно свернуть или раскрыть",
|
|
20
22
|
"heading": "Заголовок",
|
|
21
23
|
"heading1": "Заголовок 1",
|
|
22
24
|
"heading2": "Заголовок 2",
|
|
@@ -2,4 +2,4 @@ import MermaidIcon from './Mermaid';
|
|
|
2
2
|
import MonoIcon from './Mono';
|
|
3
3
|
import TabsIcon from './Tabs';
|
|
4
4
|
export { MermaidIcon, MonoIcon, TabsIcon };
|
|
5
|
-
export { ArrowUturnCcwLeft as UndoIcon, ArrowUturnCwRight as RedoIcon, Bold as BoldIcon, Italic as ItalicIcon, Underline as UnderlineIcon, Strikethrough as StrikethroughIcon, FontCursor as MarkIcon, Text as TextIcon, Heading as HeadingIcon, Heading1 as Heading1Icon, Heading2 as Heading2Icon, Heading3 as Heading3Icon, Heading4 as Heading4Icon, Heading5 as Heading5Icon, Heading6 as Heading6Icon, ListUl as ListBlIcon, ListOl as ListOlIcon, TextOutdent as LiftIcon, TextIndent as SinkIcon, Font as TextColorIcon, Link as LinkIcon, QuoteClose as QuoteIcon, Scissors as CutIcon, Sticker as NoteIcon, Paperclip as FileIcon, Minus as HRuleIcon, LayoutList as TableIcon, ChevronsExpandHorizontal as IframeIcon, SquareCheck as CheckListIcon, Picture as ImageIcon, Person as UserIcon, FaceSmile as EmojiIcon, Code as CodeInlineIcon, FileCode as CodeBlockIcon, Function as FunctionInlineIcon, CurlyBracketsFunction as FunctionBlockIcon, Hashtag as AnchorIcon, SquareDashedText as BlockIcon, LayoutColumns3 as LayoutIcon, Pencil as DrawIoIcon, FolderCode as HtmlBlockIcon, } from '@gravity-ui/icons';
|
|
5
|
+
export { ArrowUturnCcwLeft as UndoIcon, ArrowUturnCwRight as RedoIcon, Bold as BoldIcon, Italic as ItalicIcon, Underline as UnderlineIcon, Strikethrough as StrikethroughIcon, FontCursor as MarkIcon, Text as TextIcon, Heading as HeadingIcon, Heading1 as Heading1Icon, Heading2 as Heading2Icon, Heading3 as Heading3Icon, Heading4 as Heading4Icon, Heading5 as Heading5Icon, Heading6 as Heading6Icon, ListUl as ListBlIcon, ListOl as ListOlIcon, TextOutdent as LiftIcon, TextIndent as SinkIcon, Font as TextColorIcon, Link as LinkIcon, QuoteClose as QuoteIcon, Scissors as CutIcon, Sticker as NoteIcon, Paperclip as FileIcon, Minus as HRuleIcon, LayoutList as TableIcon, ChevronsExpandHorizontal as IframeIcon, SquareCheck as CheckListIcon, Picture as ImageIcon, Person as UserIcon, FaceSmile as EmojiIcon, Code as CodeInlineIcon, FileCode as CodeBlockIcon, Function as FunctionInlineIcon, CurlyBracketsFunction as FunctionBlockIcon, Hashtag as AnchorIcon, SquareDashedText as BlockIcon, LayoutColumns3 as LayoutIcon, Pencil as DrawIoIcon, FolderCode as HtmlBlockIcon, ArrowChevronRight as FoldingHeadingIcon, } from '@gravity-ui/icons';
|
package/build/cjs/icons/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HtmlBlockIcon = exports.DrawIoIcon = exports.LayoutIcon = exports.BlockIcon = exports.AnchorIcon = exports.FunctionBlockIcon = exports.FunctionInlineIcon = exports.CodeBlockIcon = exports.CodeInlineIcon = exports.EmojiIcon = exports.UserIcon = exports.ImageIcon = exports.CheckListIcon = exports.IframeIcon = exports.TableIcon = exports.HRuleIcon = exports.FileIcon = exports.NoteIcon = exports.CutIcon = exports.QuoteIcon = exports.LinkIcon = exports.TextColorIcon = exports.SinkIcon = exports.LiftIcon = exports.ListOlIcon = exports.ListBlIcon = exports.Heading6Icon = exports.Heading5Icon = exports.Heading4Icon = exports.Heading3Icon = exports.Heading2Icon = exports.Heading1Icon = exports.HeadingIcon = exports.TextIcon = exports.MarkIcon = exports.StrikethroughIcon = exports.UnderlineIcon = exports.ItalicIcon = exports.BoldIcon = exports.RedoIcon = exports.UndoIcon = exports.TabsIcon = exports.MonoIcon = exports.MermaidIcon = void 0;
|
|
3
|
+
exports.FoldingHeadingIcon = exports.HtmlBlockIcon = exports.DrawIoIcon = exports.LayoutIcon = exports.BlockIcon = exports.AnchorIcon = exports.FunctionBlockIcon = exports.FunctionInlineIcon = exports.CodeBlockIcon = exports.CodeInlineIcon = exports.EmojiIcon = exports.UserIcon = exports.ImageIcon = exports.CheckListIcon = exports.IframeIcon = exports.TableIcon = exports.HRuleIcon = exports.FileIcon = exports.NoteIcon = exports.CutIcon = exports.QuoteIcon = exports.LinkIcon = exports.TextColorIcon = exports.SinkIcon = exports.LiftIcon = exports.ListOlIcon = exports.ListBlIcon = exports.Heading6Icon = exports.Heading5Icon = exports.Heading4Icon = exports.Heading3Icon = exports.Heading2Icon = exports.Heading1Icon = exports.HeadingIcon = exports.TextIcon = exports.MarkIcon = exports.StrikethroughIcon = exports.UnderlineIcon = exports.ItalicIcon = exports.BoldIcon = exports.RedoIcon = exports.UndoIcon = exports.TabsIcon = exports.MonoIcon = exports.MermaidIcon = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const Mermaid_1 = tslib_1.__importDefault(require("./Mermaid"));
|
|
6
6
|
exports.MermaidIcon = Mermaid_1.default;
|
|
@@ -62,3 +62,4 @@ Object.defineProperty(exports, "LayoutIcon", { enumerable: true, get: function (
|
|
|
62
62
|
//
|
|
63
63
|
Object.defineProperty(exports, "DrawIoIcon", { enumerable: true, get: function () { return icons_1.Pencil; } });
|
|
64
64
|
Object.defineProperty(exports, "HtmlBlockIcon", { enumerable: true, get: function () { return icons_1.FolderCode; } });
|
|
65
|
+
Object.defineProperty(exports, "FoldingHeadingIcon", { enumerable: true, get: function () { return icons_1.ArrowChevronRight; } });
|
|
@@ -9,10 +9,11 @@ const common_1 = require("../i18n/common");
|
|
|
9
9
|
const lodash_1 = require("../lodash");
|
|
10
10
|
const const_1 = require("./const");
|
|
11
11
|
const b = (0, classname_1.cn)('toolbar-button');
|
|
12
|
-
exports.ToolbarButtonView = react_1.default.forwardRef(function ToolbarButtonView({ icon, title, hotkey, disabledPopoverVisible = true, hintWhenDisabled, active, enabled, onClick, className, }, ref) {
|
|
12
|
+
exports.ToolbarButtonView = react_1.default.forwardRef(function ToolbarButtonView({ icon, title, hint, hotkey, disabledPopoverVisible = true, hintWhenDisabled, active, enabled, onClick, className, }, ref) {
|
|
13
13
|
var _a;
|
|
14
14
|
const disabled = !active && !enabled;
|
|
15
15
|
const titleText = (0, lodash_1.isFunction)(title) ? title() : title;
|
|
16
|
+
const hintText = (0, lodash_1.isFunction)(hint) ? hint() : hint;
|
|
16
17
|
const hideHintWhenDisabled = hintWhenDisabled === false || !disabledPopoverVisible || !disabled;
|
|
17
18
|
const hintWhenDisabledText = typeof hintWhenDisabled === 'string'
|
|
18
19
|
? hintWhenDisabled
|
|
@@ -20,7 +21,7 @@ exports.ToolbarButtonView = react_1.default.forwardRef(function ToolbarButtonVie
|
|
|
20
21
|
? hintWhenDisabled()
|
|
21
22
|
: (0, common_1.i18n)('toolbar_action_disabled');
|
|
22
23
|
return (react_1.default.createElement(uikit_1.Popover, { content: hintWhenDisabledText, disabled: hideHintWhenDisabled, tooltipContentClassName: b('action-disabled-tooltip'), placement: ['bottom'] },
|
|
23
|
-
react_1.default.createElement(uikit_1.ActionTooltip, { openDelay: const_1.ToolbarTooltipDelay.Open, closeDelay: const_1.ToolbarTooltipDelay.Close, title: titleText, hotkey: hotkey },
|
|
24
|
+
react_1.default.createElement(uikit_1.ActionTooltip, { openDelay: const_1.ToolbarTooltipDelay.Open, closeDelay: const_1.ToolbarTooltipDelay.Close, description: hintText, title: titleText, hotkey: hotkey },
|
|
24
25
|
react_1.default.createElement(uikit_1.Button, { size: "m", ref: ref, selected: active, disabled: disabled, view: active ? 'normal' : 'flat', onClick: onClick, className: b(null, [className]), extraProps: { 'aria-label': titleText } },
|
|
25
26
|
react_1.default.createElement(uikit_1.Icon, { data: icon.data, size: (_a = icon.size) !== null && _a !== void 0 ? _a : 16 })))));
|
|
26
27
|
});
|
package/build/cjs/version.js
CHANGED
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.VERSION = void 0;
|
|
4
4
|
/** During build process, the current version will be injected here */
|
|
5
|
-
exports.VERSION = typeof '13.
|
|
5
|
+
exports.VERSION = typeof '13.6.0' !== 'undefined' ? '13.6.0' : 'unknown';
|
|
@@ -238,15 +238,18 @@ export class EditorImpl extends SafeEventEmitter {
|
|
|
238
238
|
}
|
|
239
239
|
return this.currentEditor.moveCursor(position);
|
|
240
240
|
}
|
|
241
|
-
moveCursorToLine(line) {
|
|
241
|
+
moveCursorToLine(/** 0-based line number */ line) {
|
|
242
242
|
const mode = this.currentMode;
|
|
243
243
|
switch (mode) {
|
|
244
244
|
case 'markup': {
|
|
245
|
-
const lineNumber = line + 1;
|
|
246
245
|
const view = this.markupEditor.cm;
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
246
|
+
let cmLine = line + 1; // lines in codemirror is 1-based
|
|
247
|
+
cmLine = Math.max(cmLine, 1);
|
|
248
|
+
cmLine = Math.min(cmLine, view.state.doc.lines);
|
|
249
|
+
view.dispatch({
|
|
250
|
+
scrollIntoView: true,
|
|
251
|
+
selection: { anchor: view.state.doc.line(cmLine).from },
|
|
252
|
+
});
|
|
250
253
|
break;
|
|
251
254
|
}
|
|
252
255
|
case 'wysiwyg': {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ToolbarIconData } from '../../toolbar/types';
|
|
2
|
-
declare type Icon = 'undo' | 'redo' | 'bold' | 'italic' | 'underline' | 'strikethrough' | 'mono' | 'mark' | 'textColor' | 'text' | 'headline' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'bulletList' | 'orderedList' | 'sink' | 'lift' | 'cut' | 'note' | 'code' | 'codeBlock' | 'link' | 'image' | 'table' | 'quote' | 'checklist' | 'horizontalRule' | 'file' | 'functionInline' | 'functionBlock' | 'emoji' | 'tabs' | 'mermaid' | 'html';
|
|
2
|
+
declare type Icon = 'undo' | 'redo' | 'bold' | 'italic' | 'underline' | 'strikethrough' | 'mono' | 'mark' | 'textColor' | 'text' | 'headline' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'bulletList' | 'orderedList' | 'sink' | 'lift' | 'cut' | 'note' | 'code' | 'codeBlock' | 'link' | 'image' | 'table' | 'quote' | 'checklist' | 'horizontalRule' | 'file' | 'functionInline' | 'functionBlock' | 'emoji' | 'tabs' | 'mermaid' | 'html' | 'foldingHeading';
|
|
3
3
|
declare type Icons = Record<Icon, ToolbarIconData>;
|
|
4
4
|
export declare const icons: Icons;
|
|
5
5
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BoldIcon, CheckListIcon, CodeBlockIcon, CodeInlineIcon, CutIcon, EmojiIcon, FileIcon, FunctionBlockIcon, FunctionInlineIcon, HRuleIcon, Heading1Icon, Heading2Icon, Heading3Icon, Heading4Icon, Heading5Icon, Heading6Icon, HeadingIcon, HtmlBlockIcon, ImageIcon, ItalicIcon, LiftIcon, LinkIcon, ListBlIcon, ListOlIcon, MarkIcon, MermaidIcon, MonoIcon, NoteIcon, QuoteIcon, RedoIcon, SinkIcon, StrikethroughIcon, TableIcon, TabsIcon, TextColorIcon, TextIcon, UnderlineIcon, UndoIcon, } from '../../icons';
|
|
1
|
+
import { BoldIcon, CheckListIcon, CodeBlockIcon, CodeInlineIcon, CutIcon, EmojiIcon, FileIcon, FoldingHeadingIcon, FunctionBlockIcon, FunctionInlineIcon, HRuleIcon, Heading1Icon, Heading2Icon, Heading3Icon, Heading4Icon, Heading5Icon, Heading6Icon, HeadingIcon, HtmlBlockIcon, ImageIcon, ItalicIcon, LiftIcon, LinkIcon, ListBlIcon, ListOlIcon, MarkIcon, MermaidIcon, MonoIcon, NoteIcon, QuoteIcon, RedoIcon, SinkIcon, StrikethroughIcon, TableIcon, TabsIcon, TextColorIcon, TextIcon, UnderlineIcon, UndoIcon, } from '../../icons';
|
|
2
2
|
export const icons = {
|
|
3
3
|
undo: { data: UndoIcon },
|
|
4
4
|
redo: { data: RedoIcon },
|
|
@@ -38,4 +38,5 @@ export const icons = {
|
|
|
38
38
|
emoji: { data: EmojiIcon },
|
|
39
39
|
tabs: { data: TabsIcon },
|
|
40
40
|
mermaid: { data: MermaidIcon },
|
|
41
|
+
foldingHeading: { data: FoldingHeadingIcon },
|
|
41
42
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ActionStorage } from 'src/core';
|
|
2
|
-
import type { SelectionContextConfig } from '../../extensions/behavior/SelectionContext';
|
|
2
|
+
import type { SelectionContextConfig, SelectionContextItemData } from '../../extensions/behavior/SelectionContext';
|
|
3
3
|
import { ToolbarData } from '../../toolbar/Toolbar';
|
|
4
4
|
import { ToolbarGroupData } from '../../toolbar/ToolbarGroup';
|
|
5
5
|
import { ToolbarListButtonData } from '../../toolbar/ToolbarListButton';
|
|
@@ -49,6 +49,7 @@ export declare const wCommandMenuConfig: WToolbarItemData[];
|
|
|
49
49
|
export declare const wHiddenData: WToolbarItemData[];
|
|
50
50
|
/** prepared wysiwyg toolbar config */
|
|
51
51
|
export declare const wToolbarConfig: WToolbarData;
|
|
52
|
+
export declare const wToggleHeadingFoldingItemData: SelectionContextItemData;
|
|
52
53
|
export declare const wSelectionMenuConfig: SelectionContextConfig;
|
|
53
54
|
export declare const wMermaidItemData: WToolbarSingleItemData;
|
|
54
55
|
export declare const wToolbarConfigByPreset: Record<EditorPreset, WToolbarData>;
|
|
@@ -440,6 +440,17 @@ export const wToolbarConfig = [
|
|
|
440
440
|
],
|
|
441
441
|
[wImageItemData, wFileItemData, wTableItemData, wCheckboxItemData],
|
|
442
442
|
];
|
|
443
|
+
export const wToggleHeadingFoldingItemData = {
|
|
444
|
+
id: 'folding-heading',
|
|
445
|
+
type: ToolbarDataType.SingleButton,
|
|
446
|
+
icon: icons.foldingHeading,
|
|
447
|
+
title: () => i18n('folding-heading'),
|
|
448
|
+
hint: () => i18n('folding-heading_hint'),
|
|
449
|
+
isActive: (editor) => { var _a, _b; return (_b = (_a = editor.actions.toggleHeadingFolding) === null || _a === void 0 ? void 0 : _a.isActive()) !== null && _b !== void 0 ? _b : false; },
|
|
450
|
+
isEnable: (editor) => { var _a, _b; return (_b = (_a = editor.actions.toggleHeadingFolding) === null || _a === void 0 ? void 0 : _a.isEnable()) !== null && _b !== void 0 ? _b : false; },
|
|
451
|
+
exec: (editor) => editor.actions.toggleHeadingFolding.run(),
|
|
452
|
+
condition: 'enabled',
|
|
453
|
+
};
|
|
443
454
|
const textContextItemData = {
|
|
444
455
|
id: 'text',
|
|
445
456
|
type: ToolbarDataType.ReactComponent,
|
|
@@ -453,7 +464,7 @@ const textContextItemData = {
|
|
|
453
464
|
},
|
|
454
465
|
};
|
|
455
466
|
export const wSelectionMenuConfig = [
|
|
456
|
-
[textContextItemData],
|
|
467
|
+
[wToggleHeadingFoldingItemData, textContextItemData],
|
|
457
468
|
[...wBiusGroupConfig, wCodeItemData],
|
|
458
469
|
[
|
|
459
470
|
{
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Action, ExtensionAuto } from '../../../core';
|
|
2
|
+
import '@diplodoc/folding-headings-extension/runtime/styles.css';
|
|
3
|
+
declare const action = "toggleHeadingFolding";
|
|
4
|
+
export declare const FoldingHeading: ExtensionAuto;
|
|
5
|
+
declare global {
|
|
6
|
+
namespace WysiwygEditor {
|
|
7
|
+
interface Actions {
|
|
8
|
+
[action]: Action;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { FoldingHeadingSpecs } from './FoldingHeadingSpec';
|
|
2
|
+
import { toggleHeadingFoldingAction } from './actions';
|
|
3
|
+
import { openHeadingAndCreateParagraphAfterIfCursorAtEndOfHeading, removeFoldingIfCursorAtStartOfHeading, } from './commands';
|
|
4
|
+
import { foldingHeadingRule } from './input-rules';
|
|
5
|
+
import { foldingPlugin } from './plugins/Folding';
|
|
6
|
+
import { headingType } from './utils';
|
|
7
|
+
import '@diplodoc/folding-headings-extension/runtime/styles.css';
|
|
8
|
+
const action = 'toggleHeadingFolding';
|
|
9
|
+
export const FoldingHeading = (builder) => {
|
|
10
|
+
builder.use(FoldingHeadingSpecs);
|
|
11
|
+
builder.addAction(action, () => toggleHeadingFoldingAction);
|
|
12
|
+
builder.addInputRules(({ schema }) => ({ rules: [foldingHeadingRule(headingType(schema), 6)] }));
|
|
13
|
+
builder.addKeymap(() => ({
|
|
14
|
+
Enter: openHeadingAndCreateParagraphAfterIfCursorAtEndOfHeading,
|
|
15
|
+
Backspace: removeFoldingIfCursorAtStartOfHeading,
|
|
16
|
+
}), builder.Priority.High);
|
|
17
|
+
builder.addPlugin(foldingPlugin);
|
|
18
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { transform } from '@diplodoc/folding-headings-extension';
|
|
2
|
+
import { skipSectionsPlugin } from './md/skip-heading-sections';
|
|
3
|
+
export const FoldingHeadingSpecs = (builder) => {
|
|
4
|
+
builder.configureMd((md) => md.use(transform({ bundle: false })).use(skipSectionsPlugin));
|
|
5
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const TokenType: Pick<{
|
|
2
|
+
readonly Heading: "heading";
|
|
3
|
+
readonly HeadingOpen: "heading_open";
|
|
4
|
+
readonly HeadingClose: "heading_close";
|
|
5
|
+
readonly Section: "heading_section";
|
|
6
|
+
readonly SectionOpen: "heading_section_open";
|
|
7
|
+
readonly SectionClose: "heading_section_close";
|
|
8
|
+
readonly Content: "heading_section_content";
|
|
9
|
+
readonly ContentOpen: "heading_section_content_open";
|
|
10
|
+
readonly ContentClose: "heading_section_content_close";
|
|
11
|
+
}, "Heading" | "Section" | "Content">;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './FoldingHeadingSpecs';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './FoldingHeadingSpecs';
|
package/build/esm/extensions/yfm/FoldingHeading/FoldingHeadingSpec/md/skip-heading-sections.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TokenType } from '@diplodoc/folding-headings-extension';
|
|
2
|
+
const ignoreTokenTypes = [
|
|
3
|
+
TokenType.SectionOpen,
|
|
4
|
+
TokenType.SectionClose,
|
|
5
|
+
TokenType.ContentOpen,
|
|
6
|
+
TokenType.ContentClose,
|
|
7
|
+
];
|
|
8
|
+
/** Filter heading section tokens, which are not needed in prosemirror-document */
|
|
9
|
+
export const skipSectionsPlugin = (md) => {
|
|
10
|
+
md.core.ruler.push('skip-heading-sections', (state) => {
|
|
11
|
+
state.tokens = state.tokens.filter((token) => !ignoreTokenTypes.includes(token.type));
|
|
12
|
+
});
|
|
13
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { TextSelection } from 'prosemirror-state';
|
|
2
|
+
import { get$Cursor } from '../../../../utils/selection';
|
|
3
|
+
import { pType } from '../../../base/specs';
|
|
4
|
+
import { YfmHeadingAttr } from '../const';
|
|
5
|
+
import { isFoldedHeading } from '../utils';
|
|
6
|
+
export const openHeadingAndCreateParagraphAfterIfCursorAtEndOfHeading = (state, dispatch) => {
|
|
7
|
+
const $cursor = get$CursorAtBlockEnd(state.selection);
|
|
8
|
+
if (!$cursor || !isFoldedHeading($cursor.parent))
|
|
9
|
+
return false;
|
|
10
|
+
if (dispatch) {
|
|
11
|
+
const tr = state.tr
|
|
12
|
+
.setNodeAttribute($cursor.before(), YfmHeadingAttr.Folding, false)
|
|
13
|
+
.insert($cursor.after(), pType(state.schema).createAndFill());
|
|
14
|
+
dispatch(tr.setSelection(TextSelection.create(tr.doc, $cursor.after() + 1)).scrollIntoView());
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
};
|
|
18
|
+
function get$CursorAtBlockEnd(selection) {
|
|
19
|
+
const $cursor = get$Cursor(selection);
|
|
20
|
+
if (!$cursor || $cursor.parent.isInline || $cursor.parentOffset < $cursor.parent.content.size)
|
|
21
|
+
return null;
|
|
22
|
+
return $cursor;
|
|
23
|
+
}
|
package/build/esm/extensions/yfm/FoldingHeading/commands/removeFoldingIfCursorAtStartOfHeading.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { get$Cursor } from '../../../../utils/selection';
|
|
2
|
+
import { YfmHeadingAttr } from '../const';
|
|
3
|
+
import { isFoldingHeading } from '../utils';
|
|
4
|
+
export const removeFoldingIfCursorAtStartOfHeading = (state, dispatch) => {
|
|
5
|
+
const $cursor = get$Cursor(state.selection);
|
|
6
|
+
if (!$cursor)
|
|
7
|
+
return false;
|
|
8
|
+
if ($cursor.parentOffset === 0 && isFoldingHeading($cursor.parent)) {
|
|
9
|
+
dispatch === null || dispatch === void 0 ? void 0 : dispatch(state.tr.setNodeAttribute($cursor.before(), YfmHeadingAttr.Folding, null));
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
return false;
|
|
13
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { pType } from '../../../base/specs';
|
|
2
|
+
import { YfmHeadingAttr } from '../const';
|
|
3
|
+
import { insideHeading, isFoldingHeading, parseLevel } from '../utils';
|
|
4
|
+
export const toggleFoldingOfHeading = (state, dispatch) => {
|
|
5
|
+
if (!insideHeading(state.selection))
|
|
6
|
+
return false;
|
|
7
|
+
if (dispatch) {
|
|
8
|
+
const { $head } = state.selection;
|
|
9
|
+
const folding = isFoldingHeading($head.parent);
|
|
10
|
+
const level = parseLevel($head.parent);
|
|
11
|
+
const tr = state.tr.setNodeAttribute($head.before(), YfmHeadingAttr.Folding, folding ? null : false);
|
|
12
|
+
if (!folding) {
|
|
13
|
+
// insert empty paragraph if content of new folding heading is empty
|
|
14
|
+
const nextNode = $head.node(-1).maybeChild($head.indexAfter(-1));
|
|
15
|
+
if (!nextNode || (isFoldingHeading(nextNode) && parseLevel(nextNode) <= level)) {
|
|
16
|
+
tr.insert($head.after(), pType(state.schema).create());
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
dispatch(tr);
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { YfmHeadingAttr, headingNodeName, type HeadingLevel } from '../YfmHeading/const';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { YfmHeadingAttr, headingNodeName } from '../YfmHeading/const';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FoldingHeading } from './FoldingHeading';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FoldingHeading } from './FoldingHeading';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { InputRule } from 'prosemirror-inputrules';
|
|
2
|
+
import { hasCodeMark } from '../../../utils/inputrules';
|
|
3
|
+
import { pType } from '../../base/specs';
|
|
4
|
+
import { YfmHeadingAttr } from './const';
|
|
5
|
+
import { isFoldingHeading, isHeading, parseLevel } from './utils';
|
|
6
|
+
export function foldingHeadingRule(nodeType, maxLevel) {
|
|
7
|
+
return new InputRule(new RegExp('^(#{1,' + maxLevel + '})\\+\\s$'), (state, match, start, end) => {
|
|
8
|
+
if (hasCodeMark(state, match, start, end))
|
|
9
|
+
return null;
|
|
10
|
+
const $start = state.doc.resolve(start);
|
|
11
|
+
if (!$start.node(-1).canReplaceWith($start.index(-1), $start.indexAfter(-1), nodeType))
|
|
12
|
+
return null;
|
|
13
|
+
const level = match[1].length;
|
|
14
|
+
const pos = $start.before();
|
|
15
|
+
const tr = state.tr.delete(start, end);
|
|
16
|
+
if (!isHeading($start.parent))
|
|
17
|
+
tr.setNodeMarkup(pos, nodeType);
|
|
18
|
+
tr.setNodeAttribute(pos, YfmHeadingAttr.Level, level);
|
|
19
|
+
tr.setNodeAttribute(pos, YfmHeadingAttr.Folding, false);
|
|
20
|
+
// insert empty paragraph if content of new folding heading is empty
|
|
21
|
+
const nextNode = $start.node(-1).maybeChild($start.indexAfter(-1));
|
|
22
|
+
if (!nextNode || (isFoldingHeading(nextNode) && parseLevel(nextNode) <= level)) {
|
|
23
|
+
tr.insert(tr.mapping.map($start.after()), pType(state.schema).create());
|
|
24
|
+
}
|
|
25
|
+
return tr;
|
|
26
|
+
});
|
|
27
|
+
}
|