@atlaskit/editor-plugin-block-menu 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/dist/cjs/editor-commands/transforms/list/transformOrderedUnorderedListToBlockNodes.js +54 -0
- package/dist/cjs/editor-commands/transforms/list/transformTaskListToBlockNodes.js +59 -0
- package/dist/cjs/editor-commands/transforms/list-transforms.js +16 -2
- package/dist/cjs/ui/block-menu.compiled.css +1 -1
- package/dist/cjs/ui/block-menu.js +1 -1
- package/dist/es2019/editor-commands/transforms/list/transformOrderedUnorderedListToBlockNodes.js +42 -0
- package/dist/es2019/editor-commands/transforms/list/transformTaskListToBlockNodes.js +47 -0
- package/dist/es2019/editor-commands/transforms/list-transforms.js +17 -1
- package/dist/es2019/ui/block-menu.compiled.css +1 -1
- package/dist/es2019/ui/block-menu.js +1 -1
- package/dist/esm/editor-commands/transforms/list/transformOrderedUnorderedListToBlockNodes.js +48 -0
- package/dist/esm/editor-commands/transforms/list/transformTaskListToBlockNodes.js +53 -0
- package/dist/esm/editor-commands/transforms/list-transforms.js +15 -1
- package/dist/esm/ui/block-menu.compiled.css +1 -1
- package/dist/esm/ui/block-menu.js +1 -1
- package/dist/types/editor-commands/transforms/list/transformOrderedUnorderedListToBlockNodes.d.ts +3 -0
- package/dist/types/editor-commands/transforms/list/transformTaskListToBlockNodes.d.ts +3 -0
- package/dist/types/editor-commands/transforms/list-transforms.d.ts +4 -0
- package/dist/types-ts4.5/editor-commands/transforms/list/transformOrderedUnorderedListToBlockNodes.d.ts +3 -0
- package/dist/types-ts4.5/editor-commands/transforms/list/transformTaskListToBlockNodes.d.ts +3 -0
- package/dist/types-ts4.5/editor-commands/transforms/list-transforms.d.ts +4 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-block-menu
|
|
2
2
|
|
|
3
|
+
## 1.0.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`32434f817d714`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/32434f817d714) -
|
|
8
|
+
ED-29126: Convert list to block nodes
|
|
9
|
+
- [`255837cfba315`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/255837cfba315) -
|
|
10
|
+
Internal changes to how border radius is applied.
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
|
|
3
13
|
## 1.0.1
|
|
4
14
|
|
|
5
15
|
### Patch Changes
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.transformOrderedUnorderedListToBlockNodes = void 0;
|
|
7
|
+
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
8
|
+
var _utils = require("@atlaskit/editor-prosemirror/utils");
|
|
9
|
+
var transformOrderedUnorderedListToBlockNodes = exports.transformOrderedUnorderedListToBlockNodes = function transformOrderedUnorderedListToBlockNodes(context) {
|
|
10
|
+
var tr = context.tr,
|
|
11
|
+
targetNodeType = context.targetNodeType,
|
|
12
|
+
targetAttrs = context.targetAttrs,
|
|
13
|
+
sourceNode = context.sourceNode,
|
|
14
|
+
sourcePos = context.sourcePos;
|
|
15
|
+
var selection = tr.selection;
|
|
16
|
+
var schema = selection.$from.doc.type.schema;
|
|
17
|
+
// find all paragraph nodes inside the list node
|
|
18
|
+
var paragraphs = (0, _utils.findChildrenByType)(sourceNode, schema.nodes.paragraph);
|
|
19
|
+
var paragraphNodes = paragraphs.map(function (paragraph) {
|
|
20
|
+
return paragraph.node;
|
|
21
|
+
});
|
|
22
|
+
var targetNodes = paragraphNodes;
|
|
23
|
+
|
|
24
|
+
// Convert paragraphs to headings if target is heading
|
|
25
|
+
if (targetNodeType === schema.nodes.heading && targetAttrs) {
|
|
26
|
+
var targetHeadingLevel = targetAttrs.level;
|
|
27
|
+
targetNodes = paragraphNodes.map(function (paragraphNode) {
|
|
28
|
+
return schema.nodes.heading.createChecked({
|
|
29
|
+
level: targetHeadingLevel
|
|
30
|
+
}, paragraphNode.content);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Convert paragraphs to code block if target is code block
|
|
35
|
+
if (targetNodeType === schema.nodes.codeBlock) {
|
|
36
|
+
// convert the paragraphNodes to one code block
|
|
37
|
+
var listItemsResult = (0, _utils.findChildrenByType)(sourceNode, schema.nodes.listItem);
|
|
38
|
+
var listItems = listItemsResult.map(function (item) {
|
|
39
|
+
return item.node;
|
|
40
|
+
});
|
|
41
|
+
var listItemFragments = listItems.map(function (listItem) {
|
|
42
|
+
return listItem.content;
|
|
43
|
+
});
|
|
44
|
+
var codeBlockContent = listItemFragments.map(function (fragment) {
|
|
45
|
+
return fragment.textBetween(0, fragment.size, '\n');
|
|
46
|
+
}).join('\n');
|
|
47
|
+
targetNodes = [schema.nodes.codeBlock.createChecked({}, schema.text(codeBlockContent))];
|
|
48
|
+
}
|
|
49
|
+
var fragment = _model.Fragment.fromArray(targetNodes);
|
|
50
|
+
var slice = new _model.Slice(fragment, 0, 0);
|
|
51
|
+
var rangeStart = sourcePos !== null ? sourcePos : selection.from;
|
|
52
|
+
tr.replaceRange(rangeStart, rangeStart + sourceNode.nodeSize, slice);
|
|
53
|
+
return tr;
|
|
54
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.transformTaskListToBlockNodes = void 0;
|
|
7
|
+
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
8
|
+
var _utils = require("@atlaskit/editor-prosemirror/utils");
|
|
9
|
+
var transformTaskListToBlockNodes = exports.transformTaskListToBlockNodes = function transformTaskListToBlockNodes(context) {
|
|
10
|
+
var tr = context.tr,
|
|
11
|
+
targetNodeType = context.targetNodeType,
|
|
12
|
+
targetAttrs = context.targetAttrs,
|
|
13
|
+
sourceNode = context.sourceNode,
|
|
14
|
+
sourcePos = context.sourcePos;
|
|
15
|
+
var selection = tr.selection;
|
|
16
|
+
var schema = selection.$from.doc.type.schema;
|
|
17
|
+
var taskItemsResult = (0, _utils.findChildrenByType)(sourceNode, schema.nodes.taskItem);
|
|
18
|
+
var taskItems = taskItemsResult.map(function (item) {
|
|
19
|
+
return item.node;
|
|
20
|
+
});
|
|
21
|
+
var taskItemFragments = taskItems.map(function (taskItem) {
|
|
22
|
+
return taskItem.content;
|
|
23
|
+
});
|
|
24
|
+
var targetNodes = [];
|
|
25
|
+
|
|
26
|
+
// Convert fragments to headings if target is heading
|
|
27
|
+
if (targetNodeType === schema.nodes.heading && targetAttrs) {
|
|
28
|
+
// convert the fragments to headings
|
|
29
|
+
var targetHeadingLevel = targetAttrs.level;
|
|
30
|
+
targetNodes = taskItemFragments.map(function (fragment) {
|
|
31
|
+
return schema.nodes.heading.createChecked({
|
|
32
|
+
level: targetHeadingLevel
|
|
33
|
+
}, fragment.content);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Convert fragments to paragraphs if target is paragraphs
|
|
38
|
+
if (targetNodeType === schema.nodes.paragraph) {
|
|
39
|
+
// convert the fragments to paragraphs
|
|
40
|
+
targetNodes = taskItemFragments.map(function (fragment) {
|
|
41
|
+
return schema.nodes.paragraph.createChecked({}, fragment.content);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Convert fragments to code block if target is code block
|
|
46
|
+
if (targetNodeType === schema.nodes.codeBlock) {
|
|
47
|
+
// convert the fragments to one code block
|
|
48
|
+
var codeBlockContent = taskItemFragments.map(function (fragment) {
|
|
49
|
+
return fragment.textBetween(0, fragment.size, '\n');
|
|
50
|
+
}).join('\n');
|
|
51
|
+
targetNodes = [schema.nodes.codeBlock.createChecked({}, schema.text(codeBlockContent))];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Replace the task list node with the new content in the transaction
|
|
55
|
+
var slice = new _model.Slice(_model.Fragment.fromArray(targetNodes), 0, 0);
|
|
56
|
+
var rangeStart = sourcePos !== null ? sourcePos : selection.from;
|
|
57
|
+
tr.replaceRange(rangeStart, rangeStart + sourceNode.nodeSize, slice);
|
|
58
|
+
return tr;
|
|
59
|
+
};
|
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.transformListNode = exports.transformBlockToList = exports.transformBetweenListTypes = exports.liftListToBlockType = void 0;
|
|
6
|
+
exports.transformListToBlockNodes = exports.transformListNode = exports.transformBlockToList = exports.transformBetweenListTypes = exports.liftListToBlockType = void 0;
|
|
7
7
|
var _transform = require("@atlaskit/editor-prosemirror/transform");
|
|
8
8
|
var _utils = require("@atlaskit/editor-prosemirror/utils");
|
|
9
9
|
var _transformBetweenListTypes = require("./list/transformBetweenListTypes");
|
|
10
|
+
var _transformOrderedUnorderedListToBlockNodes = require("./list/transformOrderedUnorderedListToBlockNodes");
|
|
11
|
+
var _transformTaskListToBlockNodes = require("./list/transformTaskListToBlockNodes");
|
|
10
12
|
var _utils2 = require("./utils");
|
|
11
13
|
/**
|
|
12
14
|
* Transform selection to list type
|
|
@@ -49,6 +51,18 @@ var transformBlockToList = exports.transformBlockToList = function transformBloc
|
|
|
49
51
|
return tr;
|
|
50
52
|
};
|
|
51
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Transform list to block nodes
|
|
56
|
+
*/
|
|
57
|
+
var transformListToBlockNodes = exports.transformListToBlockNodes = function transformListToBlockNodes(context) {
|
|
58
|
+
var sourceNode = context.sourceNode;
|
|
59
|
+
if (sourceNode.type.name === 'taskList') {
|
|
60
|
+
return (0, _transformTaskListToBlockNodes.transformTaskListToBlockNodes)(context);
|
|
61
|
+
} else {
|
|
62
|
+
return (0, _transformOrderedUnorderedListToBlockNodes.transformOrderedUnorderedListToBlockNodes)(context);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
52
66
|
/**
|
|
53
67
|
* Transform list nodes
|
|
54
68
|
*/
|
|
@@ -57,7 +71,7 @@ var transformListNode = exports.transformListNode = function transformListNode(c
|
|
|
57
71
|
// Transform list to block type
|
|
58
72
|
if ((0, _utils2.isBlockNodeType)(targetNodeType)) {
|
|
59
73
|
// Lift list items out of the list and convert to target block type
|
|
60
|
-
return
|
|
74
|
+
return transformListToBlockNodes(context);
|
|
61
75
|
}
|
|
62
76
|
|
|
63
77
|
// Transform list to container type
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
|
|
2
|
-
.
|
|
2
|
+
._2rko12b0{border-radius:var(--ds-radius-small,4px)}._16qs1cd0{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #091e4226,0 0 1px #091e424f)}
|
|
3
3
|
._bfhk1bhr{background-color:var(--ds-surface-overlay,#fff)}
|
|
@@ -21,7 +21,7 @@ var _compiled = require("@atlaskit/primitives/compiled");
|
|
|
21
21
|
var _blockMenuRenderer = require("./block-menu-renderer");
|
|
22
22
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
23
23
|
var styles = {
|
|
24
|
-
base: "
|
|
24
|
+
base: "_2rko12b0 _bfhk1bhr _16qs1cd0"
|
|
25
25
|
};
|
|
26
26
|
var DEFAULT_MENU_WIDTH = 230;
|
|
27
27
|
var DRAG_HANDLE_OFFSET_PADDING = 5;
|
package/dist/es2019/editor-commands/transforms/list/transformOrderedUnorderedListToBlockNodes.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Fragment, Slice } from '@atlaskit/editor-prosemirror/model';
|
|
2
|
+
import { findChildrenByType } from '@atlaskit/editor-prosemirror/utils';
|
|
3
|
+
export const transformOrderedUnorderedListToBlockNodes = context => {
|
|
4
|
+
const {
|
|
5
|
+
tr,
|
|
6
|
+
targetNodeType,
|
|
7
|
+
targetAttrs,
|
|
8
|
+
sourceNode,
|
|
9
|
+
sourcePos
|
|
10
|
+
} = context;
|
|
11
|
+
const {
|
|
12
|
+
selection
|
|
13
|
+
} = tr;
|
|
14
|
+
const schema = selection.$from.doc.type.schema;
|
|
15
|
+
// find all paragraph nodes inside the list node
|
|
16
|
+
const paragraphs = findChildrenByType(sourceNode, schema.nodes.paragraph);
|
|
17
|
+
const paragraphNodes = paragraphs.map(paragraph => paragraph.node);
|
|
18
|
+
let targetNodes = paragraphNodes;
|
|
19
|
+
|
|
20
|
+
// Convert paragraphs to headings if target is heading
|
|
21
|
+
if (targetNodeType === schema.nodes.heading && targetAttrs) {
|
|
22
|
+
const targetHeadingLevel = targetAttrs.level;
|
|
23
|
+
targetNodes = paragraphNodes.map(paragraphNode => schema.nodes.heading.createChecked({
|
|
24
|
+
level: targetHeadingLevel
|
|
25
|
+
}, paragraphNode.content));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Convert paragraphs to code block if target is code block
|
|
29
|
+
if (targetNodeType === schema.nodes.codeBlock) {
|
|
30
|
+
// convert the paragraphNodes to one code block
|
|
31
|
+
const listItemsResult = findChildrenByType(sourceNode, schema.nodes.listItem);
|
|
32
|
+
const listItems = listItemsResult.map(item => item.node);
|
|
33
|
+
const listItemFragments = listItems.map(listItem => listItem.content);
|
|
34
|
+
const codeBlockContent = listItemFragments.map(fragment => fragment.textBetween(0, fragment.size, '\n')).join('\n');
|
|
35
|
+
targetNodes = [schema.nodes.codeBlock.createChecked({}, schema.text(codeBlockContent))];
|
|
36
|
+
}
|
|
37
|
+
const fragment = Fragment.fromArray(targetNodes);
|
|
38
|
+
const slice = new Slice(fragment, 0, 0);
|
|
39
|
+
const rangeStart = sourcePos !== null ? sourcePos : selection.from;
|
|
40
|
+
tr.replaceRange(rangeStart, rangeStart + sourceNode.nodeSize, slice);
|
|
41
|
+
return tr;
|
|
42
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Fragment, Slice } from '@atlaskit/editor-prosemirror/model';
|
|
2
|
+
import { findChildrenByType } from '@atlaskit/editor-prosemirror/utils';
|
|
3
|
+
export const transformTaskListToBlockNodes = context => {
|
|
4
|
+
const {
|
|
5
|
+
tr,
|
|
6
|
+
targetNodeType,
|
|
7
|
+
targetAttrs,
|
|
8
|
+
sourceNode,
|
|
9
|
+
sourcePos
|
|
10
|
+
} = context;
|
|
11
|
+
const {
|
|
12
|
+
selection
|
|
13
|
+
} = tr;
|
|
14
|
+
const schema = selection.$from.doc.type.schema;
|
|
15
|
+
const taskItemsResult = findChildrenByType(sourceNode, schema.nodes.taskItem);
|
|
16
|
+
const taskItems = taskItemsResult.map(item => item.node);
|
|
17
|
+
const taskItemFragments = taskItems.map(taskItem => taskItem.content);
|
|
18
|
+
let targetNodes = [];
|
|
19
|
+
|
|
20
|
+
// Convert fragments to headings if target is heading
|
|
21
|
+
if (targetNodeType === schema.nodes.heading && targetAttrs) {
|
|
22
|
+
// convert the fragments to headings
|
|
23
|
+
const targetHeadingLevel = targetAttrs.level;
|
|
24
|
+
targetNodes = taskItemFragments.map(fragment => schema.nodes.heading.createChecked({
|
|
25
|
+
level: targetHeadingLevel
|
|
26
|
+
}, fragment.content));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Convert fragments to paragraphs if target is paragraphs
|
|
30
|
+
if (targetNodeType === schema.nodes.paragraph) {
|
|
31
|
+
// convert the fragments to paragraphs
|
|
32
|
+
targetNodes = taskItemFragments.map(fragment => schema.nodes.paragraph.createChecked({}, fragment.content));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Convert fragments to code block if target is code block
|
|
36
|
+
if (targetNodeType === schema.nodes.codeBlock) {
|
|
37
|
+
// convert the fragments to one code block
|
|
38
|
+
const codeBlockContent = taskItemFragments.map(fragment => fragment.textBetween(0, fragment.size, '\n')).join('\n');
|
|
39
|
+
targetNodes = [schema.nodes.codeBlock.createChecked({}, schema.text(codeBlockContent))];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Replace the task list node with the new content in the transaction
|
|
43
|
+
const slice = new Slice(Fragment.fromArray(targetNodes), 0, 0);
|
|
44
|
+
const rangeStart = sourcePos !== null ? sourcePos : selection.from;
|
|
45
|
+
tr.replaceRange(rangeStart, rangeStart + sourceNode.nodeSize, slice);
|
|
46
|
+
return tr;
|
|
47
|
+
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { findWrapping } from '@atlaskit/editor-prosemirror/transform';
|
|
2
2
|
import { findParentNodeOfType } from '@atlaskit/editor-prosemirror/utils';
|
|
3
3
|
import { transformListStructure } from './list/transformBetweenListTypes';
|
|
4
|
+
import { transformOrderedUnorderedListToBlockNodes } from './list/transformOrderedUnorderedListToBlockNodes';
|
|
5
|
+
import { transformTaskListToBlockNodes } from './list/transformTaskListToBlockNodes';
|
|
4
6
|
import { isBlockNodeType, isContainerNodeType, isListNodeType } from './utils';
|
|
5
7
|
|
|
6
8
|
/**
|
|
@@ -49,6 +51,20 @@ export const transformBlockToList = context => {
|
|
|
49
51
|
return tr;
|
|
50
52
|
};
|
|
51
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Transform list to block nodes
|
|
56
|
+
*/
|
|
57
|
+
export const transformListToBlockNodes = context => {
|
|
58
|
+
const {
|
|
59
|
+
sourceNode
|
|
60
|
+
} = context;
|
|
61
|
+
if (sourceNode.type.name === 'taskList') {
|
|
62
|
+
return transformTaskListToBlockNodes(context);
|
|
63
|
+
} else {
|
|
64
|
+
return transformOrderedUnorderedListToBlockNodes(context);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
52
68
|
/**
|
|
53
69
|
* Transform list nodes
|
|
54
70
|
*/
|
|
@@ -59,7 +75,7 @@ export const transformListNode = context => {
|
|
|
59
75
|
// Transform list to block type
|
|
60
76
|
if (isBlockNodeType(targetNodeType)) {
|
|
61
77
|
// Lift list items out of the list and convert to target block type
|
|
62
|
-
return
|
|
78
|
+
return transformListToBlockNodes(context);
|
|
63
79
|
}
|
|
64
80
|
|
|
65
81
|
// Transform list to container type
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
|
|
2
|
-
.
|
|
2
|
+
._2rko12b0{border-radius:var(--ds-radius-small,4px)}._16qs1cd0{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #091e4226,0 0 1px #091e424f)}
|
|
3
3
|
._bfhk1bhr{background-color:var(--ds-surface-overlay,#fff)}
|
|
@@ -13,7 +13,7 @@ import { ToolbarDropdownItem, ToolbarDropdownItemSection, ToolbarNestedDropdownM
|
|
|
13
13
|
import { Box } from '@atlaskit/primitives/compiled';
|
|
14
14
|
import { BlockMenuRenderer } from './block-menu-renderer';
|
|
15
15
|
const styles = {
|
|
16
|
-
base: "
|
|
16
|
+
base: "_2rko12b0 _bfhk1bhr _16qs1cd0"
|
|
17
17
|
};
|
|
18
18
|
const DEFAULT_MENU_WIDTH = 230;
|
|
19
19
|
const DRAG_HANDLE_OFFSET_PADDING = 5;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Fragment, Slice } from '@atlaskit/editor-prosemirror/model';
|
|
2
|
+
import { findChildrenByType } from '@atlaskit/editor-prosemirror/utils';
|
|
3
|
+
export var transformOrderedUnorderedListToBlockNodes = function transformOrderedUnorderedListToBlockNodes(context) {
|
|
4
|
+
var tr = context.tr,
|
|
5
|
+
targetNodeType = context.targetNodeType,
|
|
6
|
+
targetAttrs = context.targetAttrs,
|
|
7
|
+
sourceNode = context.sourceNode,
|
|
8
|
+
sourcePos = context.sourcePos;
|
|
9
|
+
var selection = tr.selection;
|
|
10
|
+
var schema = selection.$from.doc.type.schema;
|
|
11
|
+
// find all paragraph nodes inside the list node
|
|
12
|
+
var paragraphs = findChildrenByType(sourceNode, schema.nodes.paragraph);
|
|
13
|
+
var paragraphNodes = paragraphs.map(function (paragraph) {
|
|
14
|
+
return paragraph.node;
|
|
15
|
+
});
|
|
16
|
+
var targetNodes = paragraphNodes;
|
|
17
|
+
|
|
18
|
+
// Convert paragraphs to headings if target is heading
|
|
19
|
+
if (targetNodeType === schema.nodes.heading && targetAttrs) {
|
|
20
|
+
var targetHeadingLevel = targetAttrs.level;
|
|
21
|
+
targetNodes = paragraphNodes.map(function (paragraphNode) {
|
|
22
|
+
return schema.nodes.heading.createChecked({
|
|
23
|
+
level: targetHeadingLevel
|
|
24
|
+
}, paragraphNode.content);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Convert paragraphs to code block if target is code block
|
|
29
|
+
if (targetNodeType === schema.nodes.codeBlock) {
|
|
30
|
+
// convert the paragraphNodes to one code block
|
|
31
|
+
var listItemsResult = findChildrenByType(sourceNode, schema.nodes.listItem);
|
|
32
|
+
var listItems = listItemsResult.map(function (item) {
|
|
33
|
+
return item.node;
|
|
34
|
+
});
|
|
35
|
+
var listItemFragments = listItems.map(function (listItem) {
|
|
36
|
+
return listItem.content;
|
|
37
|
+
});
|
|
38
|
+
var codeBlockContent = listItemFragments.map(function (fragment) {
|
|
39
|
+
return fragment.textBetween(0, fragment.size, '\n');
|
|
40
|
+
}).join('\n');
|
|
41
|
+
targetNodes = [schema.nodes.codeBlock.createChecked({}, schema.text(codeBlockContent))];
|
|
42
|
+
}
|
|
43
|
+
var fragment = Fragment.fromArray(targetNodes);
|
|
44
|
+
var slice = new Slice(fragment, 0, 0);
|
|
45
|
+
var rangeStart = sourcePos !== null ? sourcePos : selection.from;
|
|
46
|
+
tr.replaceRange(rangeStart, rangeStart + sourceNode.nodeSize, slice);
|
|
47
|
+
return tr;
|
|
48
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Fragment, Slice } from '@atlaskit/editor-prosemirror/model';
|
|
2
|
+
import { findChildrenByType } from '@atlaskit/editor-prosemirror/utils';
|
|
3
|
+
export var transformTaskListToBlockNodes = function transformTaskListToBlockNodes(context) {
|
|
4
|
+
var tr = context.tr,
|
|
5
|
+
targetNodeType = context.targetNodeType,
|
|
6
|
+
targetAttrs = context.targetAttrs,
|
|
7
|
+
sourceNode = context.sourceNode,
|
|
8
|
+
sourcePos = context.sourcePos;
|
|
9
|
+
var selection = tr.selection;
|
|
10
|
+
var schema = selection.$from.doc.type.schema;
|
|
11
|
+
var taskItemsResult = findChildrenByType(sourceNode, schema.nodes.taskItem);
|
|
12
|
+
var taskItems = taskItemsResult.map(function (item) {
|
|
13
|
+
return item.node;
|
|
14
|
+
});
|
|
15
|
+
var taskItemFragments = taskItems.map(function (taskItem) {
|
|
16
|
+
return taskItem.content;
|
|
17
|
+
});
|
|
18
|
+
var targetNodes = [];
|
|
19
|
+
|
|
20
|
+
// Convert fragments to headings if target is heading
|
|
21
|
+
if (targetNodeType === schema.nodes.heading && targetAttrs) {
|
|
22
|
+
// convert the fragments to headings
|
|
23
|
+
var targetHeadingLevel = targetAttrs.level;
|
|
24
|
+
targetNodes = taskItemFragments.map(function (fragment) {
|
|
25
|
+
return schema.nodes.heading.createChecked({
|
|
26
|
+
level: targetHeadingLevel
|
|
27
|
+
}, fragment.content);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Convert fragments to paragraphs if target is paragraphs
|
|
32
|
+
if (targetNodeType === schema.nodes.paragraph) {
|
|
33
|
+
// convert the fragments to paragraphs
|
|
34
|
+
targetNodes = taskItemFragments.map(function (fragment) {
|
|
35
|
+
return schema.nodes.paragraph.createChecked({}, fragment.content);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Convert fragments to code block if target is code block
|
|
40
|
+
if (targetNodeType === schema.nodes.codeBlock) {
|
|
41
|
+
// convert the fragments to one code block
|
|
42
|
+
var codeBlockContent = taskItemFragments.map(function (fragment) {
|
|
43
|
+
return fragment.textBetween(0, fragment.size, '\n');
|
|
44
|
+
}).join('\n');
|
|
45
|
+
targetNodes = [schema.nodes.codeBlock.createChecked({}, schema.text(codeBlockContent))];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Replace the task list node with the new content in the transaction
|
|
49
|
+
var slice = new Slice(Fragment.fromArray(targetNodes), 0, 0);
|
|
50
|
+
var rangeStart = sourcePos !== null ? sourcePos : selection.from;
|
|
51
|
+
tr.replaceRange(rangeStart, rangeStart + sourceNode.nodeSize, slice);
|
|
52
|
+
return tr;
|
|
53
|
+
};
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { findWrapping } from '@atlaskit/editor-prosemirror/transform';
|
|
2
2
|
import { findParentNodeOfType } from '@atlaskit/editor-prosemirror/utils';
|
|
3
3
|
import { transformListStructure } from './list/transformBetweenListTypes';
|
|
4
|
+
import { transformOrderedUnorderedListToBlockNodes } from './list/transformOrderedUnorderedListToBlockNodes';
|
|
5
|
+
import { transformTaskListToBlockNodes } from './list/transformTaskListToBlockNodes';
|
|
4
6
|
import { isBlockNodeType, isContainerNodeType, isListNodeType } from './utils';
|
|
5
7
|
|
|
6
8
|
/**
|
|
@@ -44,6 +46,18 @@ export var transformBlockToList = function transformBlockToList(context) {
|
|
|
44
46
|
return tr;
|
|
45
47
|
};
|
|
46
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Transform list to block nodes
|
|
51
|
+
*/
|
|
52
|
+
export var transformListToBlockNodes = function transformListToBlockNodes(context) {
|
|
53
|
+
var sourceNode = context.sourceNode;
|
|
54
|
+
if (sourceNode.type.name === 'taskList') {
|
|
55
|
+
return transformTaskListToBlockNodes(context);
|
|
56
|
+
} else {
|
|
57
|
+
return transformOrderedUnorderedListToBlockNodes(context);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
47
61
|
/**
|
|
48
62
|
* Transform list nodes
|
|
49
63
|
*/
|
|
@@ -52,7 +66,7 @@ export var transformListNode = function transformListNode(context) {
|
|
|
52
66
|
// Transform list to block type
|
|
53
67
|
if (isBlockNodeType(targetNodeType)) {
|
|
54
68
|
// Lift list items out of the list and convert to target block type
|
|
55
|
-
return
|
|
69
|
+
return transformListToBlockNodes(context);
|
|
56
70
|
}
|
|
57
71
|
|
|
58
72
|
// Transform list to container type
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
|
|
2
|
-
.
|
|
2
|
+
._2rko12b0{border-radius:var(--ds-radius-small,4px)}._16qs1cd0{box-shadow:var(--ds-shadow-overlay,0 8px 9pt #091e4226,0 0 1px #091e424f)}
|
|
3
3
|
._bfhk1bhr{background-color:var(--ds-surface-overlay,#fff)}
|
|
@@ -13,7 +13,7 @@ import { ToolbarDropdownItem, ToolbarDropdownItemSection, ToolbarNestedDropdownM
|
|
|
13
13
|
import { Box } from '@atlaskit/primitives/compiled';
|
|
14
14
|
import { BlockMenuRenderer } from './block-menu-renderer';
|
|
15
15
|
var styles = {
|
|
16
|
-
base: "
|
|
16
|
+
base: "_2rko12b0 _bfhk1bhr _16qs1cd0"
|
|
17
17
|
};
|
|
18
18
|
var DEFAULT_MENU_WIDTH = 230;
|
|
19
19
|
var DRAG_HANDLE_OFFSET_PADDING = 5;
|
|
@@ -4,6 +4,10 @@ import type { TransformContext, TransformFunction } from './types';
|
|
|
4
4
|
* Transform selection to list type
|
|
5
5
|
*/
|
|
6
6
|
export declare const transformBlockToList: (context: TransformContext) => Transaction | null;
|
|
7
|
+
/**
|
|
8
|
+
* Transform list to block nodes
|
|
9
|
+
*/
|
|
10
|
+
export declare const transformListToBlockNodes: (context: TransformContext) => Transaction | null;
|
|
7
11
|
/**
|
|
8
12
|
* Transform list nodes
|
|
9
13
|
*/
|
|
@@ -4,6 +4,10 @@ import type { TransformContext, TransformFunction } from './types';
|
|
|
4
4
|
* Transform selection to list type
|
|
5
5
|
*/
|
|
6
6
|
export declare const transformBlockToList: (context: TransformContext) => Transaction | null;
|
|
7
|
+
/**
|
|
8
|
+
* Transform list to block nodes
|
|
9
|
+
*/
|
|
10
|
+
export declare const transformListToBlockNodes: (context: TransformContext) => Transaction | null;
|
|
7
11
|
/**
|
|
8
12
|
* Transform list nodes
|
|
9
13
|
*/
|