@atlaskit/editor-plugin-block-menu 1.0.4 → 1.0.5
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/layout-transforms.js +30 -0
- package/dist/cjs/editor-commands/transforms/list-transforms.js +60 -3
- package/dist/cjs/editor-commands/transforms/transformNodeToTargetType.js +4 -0
- package/dist/cjs/editor-commands/transforms/utils.js +8 -1
- package/dist/es2019/editor-commands/transforms/layout-transforms.js +25 -0
- package/dist/es2019/editor-commands/transforms/list-transforms.js +62 -2
- package/dist/es2019/editor-commands/transforms/transformNodeToTargetType.js +5 -1
- package/dist/es2019/editor-commands/transforms/utils.js +7 -0
- package/dist/esm/editor-commands/transforms/layout-transforms.js +24 -0
- package/dist/esm/editor-commands/transforms/list-transforms.js +58 -2
- package/dist/esm/editor-commands/transforms/transformNodeToTargetType.js +5 -1
- package/dist/esm/editor-commands/transforms/utils.js +7 -0
- package/dist/types/editor-commands/transforms/layout-transforms.d.ts +2 -0
- package/dist/types/editor-commands/transforms/list-transforms.d.ts +4 -0
- package/dist/types/editor-commands/transforms/types.d.ts +1 -1
- package/dist/types/editor-commands/transforms/utils.d.ts +1 -0
- package/dist/types-ts4.5/editor-commands/transforms/layout-transforms.d.ts +2 -0
- package/dist/types-ts4.5/editor-commands/transforms/list-transforms.d.ts +4 -0
- package/dist/types-ts4.5/editor-commands/transforms/types.d.ts +1 -1
- package/dist/types-ts4.5/editor-commands/transforms/utils.d.ts +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# @atlaskit/editor-plugin-block-menu
|
|
2
2
|
|
|
3
|
+
## 1.0.5
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`b76a419d23d3d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/b76a419d23d3d) -
|
|
8
|
+
[ux] ED-29143 Transform nodes into layout
|
|
9
|
+
- [`0d741324d534a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/0d741324d534a) -
|
|
10
|
+
[ux] Adds wrapping of list node types in container node types.
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
|
|
3
13
|
## 1.0.4
|
|
4
14
|
|
|
5
15
|
### Patch Changes
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.convertToLayout = void 0;
|
|
7
|
+
var _styles = require("@atlaskit/editor-common/styles");
|
|
8
|
+
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
9
|
+
var convertToLayout = exports.convertToLayout = function convertToLayout(context) {
|
|
10
|
+
var tr = context.tr,
|
|
11
|
+
sourceNode = context.sourceNode,
|
|
12
|
+
sourcePos = context.sourcePos;
|
|
13
|
+
var _ref = tr.doc.type.schema.nodes || {},
|
|
14
|
+
layoutSection = _ref.layoutSection,
|
|
15
|
+
layoutColumn = _ref.layoutColumn,
|
|
16
|
+
paragraph = _ref.paragraph;
|
|
17
|
+
var content = sourceNode.mark(sourceNode.marks.filter(function (mark) {
|
|
18
|
+
return mark.type.name !== 'breakout';
|
|
19
|
+
}));
|
|
20
|
+
var layoutContent = _model.Fragment.fromArray([layoutColumn.createChecked({
|
|
21
|
+
width: _styles.DEFAULT_TWO_COLUMN_LAYOUT_COLUMN_WIDTH
|
|
22
|
+
}, content), layoutColumn.create({
|
|
23
|
+
width: _styles.DEFAULT_TWO_COLUMN_LAYOUT_COLUMN_WIDTH
|
|
24
|
+
}, paragraph.createAndFill())]);
|
|
25
|
+
var layoutSectionNode = layoutSection.createChecked(undefined, layoutContent);
|
|
26
|
+
|
|
27
|
+
// Replace the original node with the new layout node
|
|
28
|
+
tr.replaceRangeWith(sourcePos || 0, (sourcePos || 0) + sourceNode.nodeSize, layoutSectionNode);
|
|
29
|
+
return tr;
|
|
30
|
+
};
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
|
-
exports.transformListToBlockNodes = exports.transformListNode = exports.transformBlockToList = exports.transformBetweenListTypes = exports.liftListToBlockType = void 0;
|
|
7
|
+
exports.transformListToContainer = exports.transformListToBlockNodes = exports.transformListNode = exports.transformBlockToList = exports.transformBetweenListTypes = exports.liftListToBlockType = void 0;
|
|
8
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
9
|
+
var _model = require("@atlaskit/editor-prosemirror/model");
|
|
7
10
|
var _transform = require("@atlaskit/editor-prosemirror/transform");
|
|
8
11
|
var _transformBetweenListTypes = require("./list/transformBetweenListTypes");
|
|
9
12
|
var _transformOrderedUnorderedListToBlockNodes = require("./list/transformOrderedUnorderedListToBlockNodes");
|
|
@@ -62,6 +65,60 @@ var transformListToBlockNodes = exports.transformListToBlockNodes = function tra
|
|
|
62
65
|
}
|
|
63
66
|
};
|
|
64
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Wraps bulletList, orderedList or taskList in node of container type
|
|
70
|
+
*/
|
|
71
|
+
var transformListToContainer = exports.transformListToContainer = function transformListToContainer(context) {
|
|
72
|
+
var tr = context.tr,
|
|
73
|
+
sourceNode = context.sourceNode,
|
|
74
|
+
sourcePos = context.sourcePos,
|
|
75
|
+
targetNodeType = context.targetNodeType,
|
|
76
|
+
targetAttrs = context.targetAttrs;
|
|
77
|
+
if (sourcePos === null) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
var schema = tr.doc.type.schema;
|
|
81
|
+
var _schema$nodes = schema.nodes,
|
|
82
|
+
blockquote = _schema$nodes.blockquote,
|
|
83
|
+
taskList = _schema$nodes.taskList,
|
|
84
|
+
taskItem = _schema$nodes.taskItem,
|
|
85
|
+
paragraph = _schema$nodes.paragraph;
|
|
86
|
+
|
|
87
|
+
// Special case: Task list -> Blockquote
|
|
88
|
+
// Flattens the task list before wrapping by blockquote
|
|
89
|
+
if (sourceNode.type === taskList && targetNodeType === blockquote) {
|
|
90
|
+
var _extractParagraphsFromTaskList = function extractParagraphsFromTaskList(node) {
|
|
91
|
+
var paragraphs = [];
|
|
92
|
+
node.forEach(function (child) {
|
|
93
|
+
if (child.type === taskItem) {
|
|
94
|
+
if (child.content.size > 0) {
|
|
95
|
+
var paragraphNode = paragraph.createChecked({}, child.content.content);
|
|
96
|
+
paragraphs.push(paragraphNode);
|
|
97
|
+
}
|
|
98
|
+
} else if (child.type === taskList) {
|
|
99
|
+
paragraphs.push.apply(paragraphs, (0, _toConsumableArray2.default)(_extractParagraphsFromTaskList(child)));
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
return paragraphs;
|
|
103
|
+
};
|
|
104
|
+
var liftedParagraphs = _extractParagraphsFromTaskList(sourceNode);
|
|
105
|
+
var _containerNode = targetNodeType.createAndFill(targetAttrs, _model.Fragment.from(liftedParagraphs));
|
|
106
|
+
if (!_containerNode) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
tr.replaceWith(sourcePos, sourcePos + sourceNode.nodeSize, _containerNode);
|
|
110
|
+
return tr;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// Default case
|
|
114
|
+
var containerNode = targetNodeType.createAndFill(targetAttrs, [sourceNode]);
|
|
115
|
+
if (!containerNode) {
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
tr.replaceWith(sourcePos, sourcePos + sourceNode.nodeSize, containerNode);
|
|
119
|
+
return tr;
|
|
120
|
+
};
|
|
121
|
+
|
|
65
122
|
/**
|
|
66
123
|
* Transform list nodes
|
|
67
124
|
*/
|
|
@@ -75,8 +132,8 @@ var transformListNode = exports.transformListNode = function transformListNode(c
|
|
|
75
132
|
|
|
76
133
|
// Transform list to container type
|
|
77
134
|
if ((0, _utils.isContainerNodeType)(targetNodeType)) {
|
|
78
|
-
//
|
|
79
|
-
return
|
|
135
|
+
// Wrap list items into container type, where possible
|
|
136
|
+
return transformListToContainer(context);
|
|
80
137
|
}
|
|
81
138
|
|
|
82
139
|
// Transform between list types
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.transformNodeToTargetType = transformNodeToTargetType;
|
|
7
7
|
var _blockTransforms = require("./block-transforms");
|
|
8
8
|
var _containerTransforms = require("./container-transforms");
|
|
9
|
+
var _layoutTransforms = require("./layout-transforms");
|
|
9
10
|
var _listTransforms = require("./list-transforms");
|
|
10
11
|
var _utils = require("./utils");
|
|
11
12
|
function transformNodeToTargetType(tr, sourceNode, sourcePos, targetType) {
|
|
@@ -43,6 +44,9 @@ function transformNodeToTargetType(tr, sourceNode, sourcePos, targetType) {
|
|
|
43
44
|
|
|
44
45
|
// Route to appropriate transformation strategy based on source node type
|
|
45
46
|
try {
|
|
47
|
+
if ((0, _utils.isLayoutNodeType)(targetNodeType)) {
|
|
48
|
+
return (0, _layoutTransforms.convertToLayout)(transformationContext);
|
|
49
|
+
}
|
|
46
50
|
if ((0, _utils.isBlockNode)(sourceNode)) {
|
|
47
51
|
return (0, _blockTransforms.transformBlockNode)(transformationContext);
|
|
48
52
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.isTaskList = exports.isListNodeType = exports.isListNode = exports.isContainerNodeType = exports.isContainerNode = exports.isBulletOrOrderedList = exports.isBlockNodeType = exports.isBlockNode = exports.getTargetNodeInfo = exports.getSupportedListTypesSet = exports.getSupportedListTypes = void 0;
|
|
6
|
+
exports.isTaskList = exports.isListNodeType = exports.isListNode = exports.isLayoutNodeType = exports.isContainerNodeType = exports.isContainerNode = exports.isBulletOrOrderedList = exports.isBlockNodeType = exports.isBlockNode = exports.getTargetNodeInfo = exports.getSupportedListTypesSet = exports.getSupportedListTypes = void 0;
|
|
7
7
|
var getTargetNodeInfo = exports.getTargetNodeInfo = function getTargetNodeInfo(targetType, nodes) {
|
|
8
8
|
switch (targetType) {
|
|
9
9
|
case 'heading1':
|
|
@@ -83,6 +83,10 @@ var getTargetNodeInfo = exports.getTargetNodeInfo = function getTargetNodeInfo(t
|
|
|
83
83
|
return {
|
|
84
84
|
nodeType: nodes.taskList
|
|
85
85
|
};
|
|
86
|
+
case 'layoutSection':
|
|
87
|
+
return {
|
|
88
|
+
nodeType: nodes.layoutSection
|
|
89
|
+
};
|
|
86
90
|
default:
|
|
87
91
|
return null;
|
|
88
92
|
}
|
|
@@ -120,4 +124,7 @@ var getSupportedListTypes = exports.getSupportedListTypes = function getSupporte
|
|
|
120
124
|
};
|
|
121
125
|
var getSupportedListTypesSet = exports.getSupportedListTypesSet = function getSupportedListTypesSet(nodes) {
|
|
122
126
|
return new Set(getSupportedListTypes(nodes));
|
|
127
|
+
};
|
|
128
|
+
var isLayoutNodeType = exports.isLayoutNodeType = function isLayoutNodeType(nodeType) {
|
|
129
|
+
return nodeType.name === 'layoutSection';
|
|
123
130
|
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { DEFAULT_TWO_COLUMN_LAYOUT_COLUMN_WIDTH } from '@atlaskit/editor-common/styles';
|
|
2
|
+
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
3
|
+
export const convertToLayout = context => {
|
|
4
|
+
const {
|
|
5
|
+
tr,
|
|
6
|
+
sourceNode,
|
|
7
|
+
sourcePos
|
|
8
|
+
} = context;
|
|
9
|
+
const {
|
|
10
|
+
layoutSection,
|
|
11
|
+
layoutColumn,
|
|
12
|
+
paragraph
|
|
13
|
+
} = tr.doc.type.schema.nodes || {};
|
|
14
|
+
const content = sourceNode.mark(sourceNode.marks.filter(mark => mark.type.name !== 'breakout'));
|
|
15
|
+
const layoutContent = Fragment.fromArray([layoutColumn.createChecked({
|
|
16
|
+
width: DEFAULT_TWO_COLUMN_LAYOUT_COLUMN_WIDTH
|
|
17
|
+
}, content), layoutColumn.create({
|
|
18
|
+
width: DEFAULT_TWO_COLUMN_LAYOUT_COLUMN_WIDTH
|
|
19
|
+
}, paragraph.createAndFill())]);
|
|
20
|
+
const layoutSectionNode = layoutSection.createChecked(undefined, layoutContent);
|
|
21
|
+
|
|
22
|
+
// Replace the original node with the new layout node
|
|
23
|
+
tr.replaceRangeWith(sourcePos || 0, (sourcePos || 0) + sourceNode.nodeSize, layoutSectionNode);
|
|
24
|
+
return tr;
|
|
25
|
+
};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
1
2
|
import { findWrapping } from '@atlaskit/editor-prosemirror/transform';
|
|
2
3
|
import { transformListStructure } from './list/transformBetweenListTypes';
|
|
3
4
|
import { transformOrderedUnorderedListToBlockNodes } from './list/transformOrderedUnorderedListToBlockNodes';
|
|
@@ -64,6 +65,65 @@ export const transformListToBlockNodes = context => {
|
|
|
64
65
|
}
|
|
65
66
|
};
|
|
66
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Wraps bulletList, orderedList or taskList in node of container type
|
|
70
|
+
*/
|
|
71
|
+
export const transformListToContainer = context => {
|
|
72
|
+
const {
|
|
73
|
+
tr,
|
|
74
|
+
sourceNode,
|
|
75
|
+
sourcePos,
|
|
76
|
+
targetNodeType,
|
|
77
|
+
targetAttrs
|
|
78
|
+
} = context;
|
|
79
|
+
if (sourcePos === null) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
const {
|
|
83
|
+
schema
|
|
84
|
+
} = tr.doc.type;
|
|
85
|
+
const {
|
|
86
|
+
blockquote,
|
|
87
|
+
taskList,
|
|
88
|
+
taskItem,
|
|
89
|
+
paragraph
|
|
90
|
+
} = schema.nodes;
|
|
91
|
+
|
|
92
|
+
// Special case: Task list -> Blockquote
|
|
93
|
+
// Flattens the task list before wrapping by blockquote
|
|
94
|
+
if (sourceNode.type === taskList && targetNodeType === blockquote) {
|
|
95
|
+
const extractParagraphsFromTaskList = node => {
|
|
96
|
+
const paragraphs = [];
|
|
97
|
+
node.forEach(child => {
|
|
98
|
+
if (child.type === taskItem) {
|
|
99
|
+
if (child.content.size > 0) {
|
|
100
|
+
const paragraphNode = paragraph.createChecked({}, child.content.content);
|
|
101
|
+
paragraphs.push(paragraphNode);
|
|
102
|
+
}
|
|
103
|
+
} else if (child.type === taskList) {
|
|
104
|
+
paragraphs.push(...extractParagraphsFromTaskList(child));
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
return paragraphs;
|
|
108
|
+
};
|
|
109
|
+
const liftedParagraphs = extractParagraphsFromTaskList(sourceNode);
|
|
110
|
+
const containerNode = targetNodeType.createAndFill(targetAttrs, Fragment.from(liftedParagraphs));
|
|
111
|
+
if (!containerNode) {
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
tr.replaceWith(sourcePos, sourcePos + sourceNode.nodeSize, containerNode);
|
|
115
|
+
return tr;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Default case
|
|
119
|
+
const containerNode = targetNodeType.createAndFill(targetAttrs, [sourceNode]);
|
|
120
|
+
if (!containerNode) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
tr.replaceWith(sourcePos, sourcePos + sourceNode.nodeSize, containerNode);
|
|
124
|
+
return tr;
|
|
125
|
+
};
|
|
126
|
+
|
|
67
127
|
/**
|
|
68
128
|
* Transform list nodes
|
|
69
129
|
*/
|
|
@@ -79,8 +139,8 @@ export const transformListNode = context => {
|
|
|
79
139
|
|
|
80
140
|
// Transform list to container type
|
|
81
141
|
if (isContainerNodeType(targetNodeType)) {
|
|
82
|
-
//
|
|
83
|
-
return
|
|
142
|
+
// Wrap list items into container type, where possible
|
|
143
|
+
return transformListToContainer(context);
|
|
84
144
|
}
|
|
85
145
|
|
|
86
146
|
// Transform between list types
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { transformBlockNode } from './block-transforms';
|
|
2
2
|
import { transformContainerNode } from './container-transforms';
|
|
3
|
+
import { convertToLayout } from './layout-transforms';
|
|
3
4
|
import { transformListNode } from './list-transforms';
|
|
4
|
-
import { getTargetNodeInfo, isBlockNode, isListNode, isContainerNode } from './utils';
|
|
5
|
+
import { getTargetNodeInfo, isBlockNode, isListNode, isContainerNode, isLayoutNodeType } from './utils';
|
|
5
6
|
export function transformNodeToTargetType(tr, sourceNode, sourcePos, targetType) {
|
|
6
7
|
const {
|
|
7
8
|
nodes
|
|
@@ -41,6 +42,9 @@ export function transformNodeToTargetType(tr, sourceNode, sourcePos, targetType)
|
|
|
41
42
|
|
|
42
43
|
// Route to appropriate transformation strategy based on source node type
|
|
43
44
|
try {
|
|
45
|
+
if (isLayoutNodeType(targetNodeType)) {
|
|
46
|
+
return convertToLayout(transformationContext);
|
|
47
|
+
}
|
|
44
48
|
if (isBlockNode(sourceNode)) {
|
|
45
49
|
return transformBlockNode(transformationContext);
|
|
46
50
|
}
|
|
@@ -77,6 +77,10 @@ export const getTargetNodeInfo = (targetType, nodes) => {
|
|
|
77
77
|
return {
|
|
78
78
|
nodeType: nodes.taskList
|
|
79
79
|
};
|
|
80
|
+
case 'layoutSection':
|
|
81
|
+
return {
|
|
82
|
+
nodeType: nodes.layoutSection
|
|
83
|
+
};
|
|
80
84
|
default:
|
|
81
85
|
return null;
|
|
82
86
|
}
|
|
@@ -114,4 +118,7 @@ export const getSupportedListTypes = nodes => {
|
|
|
114
118
|
};
|
|
115
119
|
export const getSupportedListTypesSet = nodes => {
|
|
116
120
|
return new Set(getSupportedListTypes(nodes));
|
|
121
|
+
};
|
|
122
|
+
export const isLayoutNodeType = nodeType => {
|
|
123
|
+
return nodeType.name === 'layoutSection';
|
|
117
124
|
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { DEFAULT_TWO_COLUMN_LAYOUT_COLUMN_WIDTH } from '@atlaskit/editor-common/styles';
|
|
2
|
+
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
3
|
+
export var convertToLayout = function convertToLayout(context) {
|
|
4
|
+
var tr = context.tr,
|
|
5
|
+
sourceNode = context.sourceNode,
|
|
6
|
+
sourcePos = context.sourcePos;
|
|
7
|
+
var _ref = tr.doc.type.schema.nodes || {},
|
|
8
|
+
layoutSection = _ref.layoutSection,
|
|
9
|
+
layoutColumn = _ref.layoutColumn,
|
|
10
|
+
paragraph = _ref.paragraph;
|
|
11
|
+
var content = sourceNode.mark(sourceNode.marks.filter(function (mark) {
|
|
12
|
+
return mark.type.name !== 'breakout';
|
|
13
|
+
}));
|
|
14
|
+
var layoutContent = Fragment.fromArray([layoutColumn.createChecked({
|
|
15
|
+
width: DEFAULT_TWO_COLUMN_LAYOUT_COLUMN_WIDTH
|
|
16
|
+
}, content), layoutColumn.create({
|
|
17
|
+
width: DEFAULT_TWO_COLUMN_LAYOUT_COLUMN_WIDTH
|
|
18
|
+
}, paragraph.createAndFill())]);
|
|
19
|
+
var layoutSectionNode = layoutSection.createChecked(undefined, layoutContent);
|
|
20
|
+
|
|
21
|
+
// Replace the original node with the new layout node
|
|
22
|
+
tr.replaceRangeWith(sourcePos || 0, (sourcePos || 0) + sourceNode.nodeSize, layoutSectionNode);
|
|
23
|
+
return tr;
|
|
24
|
+
};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import { Fragment } from '@atlaskit/editor-prosemirror/model';
|
|
1
3
|
import { findWrapping } from '@atlaskit/editor-prosemirror/transform';
|
|
2
4
|
import { transformListStructure } from './list/transformBetweenListTypes';
|
|
3
5
|
import { transformOrderedUnorderedListToBlockNodes } from './list/transformOrderedUnorderedListToBlockNodes';
|
|
@@ -57,6 +59,60 @@ export var transformListToBlockNodes = function transformListToBlockNodes(contex
|
|
|
57
59
|
}
|
|
58
60
|
};
|
|
59
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Wraps bulletList, orderedList or taskList in node of container type
|
|
64
|
+
*/
|
|
65
|
+
export var transformListToContainer = function transformListToContainer(context) {
|
|
66
|
+
var tr = context.tr,
|
|
67
|
+
sourceNode = context.sourceNode,
|
|
68
|
+
sourcePos = context.sourcePos,
|
|
69
|
+
targetNodeType = context.targetNodeType,
|
|
70
|
+
targetAttrs = context.targetAttrs;
|
|
71
|
+
if (sourcePos === null) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
var schema = tr.doc.type.schema;
|
|
75
|
+
var _schema$nodes = schema.nodes,
|
|
76
|
+
blockquote = _schema$nodes.blockquote,
|
|
77
|
+
taskList = _schema$nodes.taskList,
|
|
78
|
+
taskItem = _schema$nodes.taskItem,
|
|
79
|
+
paragraph = _schema$nodes.paragraph;
|
|
80
|
+
|
|
81
|
+
// Special case: Task list -> Blockquote
|
|
82
|
+
// Flattens the task list before wrapping by blockquote
|
|
83
|
+
if (sourceNode.type === taskList && targetNodeType === blockquote) {
|
|
84
|
+
var _extractParagraphsFromTaskList = function extractParagraphsFromTaskList(node) {
|
|
85
|
+
var paragraphs = [];
|
|
86
|
+
node.forEach(function (child) {
|
|
87
|
+
if (child.type === taskItem) {
|
|
88
|
+
if (child.content.size > 0) {
|
|
89
|
+
var paragraphNode = paragraph.createChecked({}, child.content.content);
|
|
90
|
+
paragraphs.push(paragraphNode);
|
|
91
|
+
}
|
|
92
|
+
} else if (child.type === taskList) {
|
|
93
|
+
paragraphs.push.apply(paragraphs, _toConsumableArray(_extractParagraphsFromTaskList(child)));
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
return paragraphs;
|
|
97
|
+
};
|
|
98
|
+
var liftedParagraphs = _extractParagraphsFromTaskList(sourceNode);
|
|
99
|
+
var _containerNode = targetNodeType.createAndFill(targetAttrs, Fragment.from(liftedParagraphs));
|
|
100
|
+
if (!_containerNode) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
tr.replaceWith(sourcePos, sourcePos + sourceNode.nodeSize, _containerNode);
|
|
104
|
+
return tr;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Default case
|
|
108
|
+
var containerNode = targetNodeType.createAndFill(targetAttrs, [sourceNode]);
|
|
109
|
+
if (!containerNode) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
tr.replaceWith(sourcePos, sourcePos + sourceNode.nodeSize, containerNode);
|
|
113
|
+
return tr;
|
|
114
|
+
};
|
|
115
|
+
|
|
60
116
|
/**
|
|
61
117
|
* Transform list nodes
|
|
62
118
|
*/
|
|
@@ -70,8 +126,8 @@ export var transformListNode = function transformListNode(context) {
|
|
|
70
126
|
|
|
71
127
|
// Transform list to container type
|
|
72
128
|
if (isContainerNodeType(targetNodeType)) {
|
|
73
|
-
//
|
|
74
|
-
return
|
|
129
|
+
// Wrap list items into container type, where possible
|
|
130
|
+
return transformListToContainer(context);
|
|
75
131
|
}
|
|
76
132
|
|
|
77
133
|
// Transform between list types
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { transformBlockNode } from './block-transforms';
|
|
2
2
|
import { transformContainerNode } from './container-transforms';
|
|
3
|
+
import { convertToLayout } from './layout-transforms';
|
|
3
4
|
import { transformListNode } from './list-transforms';
|
|
4
|
-
import { getTargetNodeInfo, isBlockNode, isListNode, isContainerNode } from './utils';
|
|
5
|
+
import { getTargetNodeInfo, isBlockNode, isListNode, isContainerNode, isLayoutNodeType } from './utils';
|
|
5
6
|
export function transformNodeToTargetType(tr, sourceNode, sourcePos, targetType) {
|
|
6
7
|
var nodes = tr.doc.type.schema.nodes;
|
|
7
8
|
var targetNodeInfo = getTargetNodeInfo(targetType, nodes);
|
|
@@ -37,6 +38,9 @@ export function transformNodeToTargetType(tr, sourceNode, sourcePos, targetType)
|
|
|
37
38
|
|
|
38
39
|
// Route to appropriate transformation strategy based on source node type
|
|
39
40
|
try {
|
|
41
|
+
if (isLayoutNodeType(targetNodeType)) {
|
|
42
|
+
return convertToLayout(transformationContext);
|
|
43
|
+
}
|
|
40
44
|
if (isBlockNode(sourceNode)) {
|
|
41
45
|
return transformBlockNode(transformationContext);
|
|
42
46
|
}
|
|
@@ -77,6 +77,10 @@ export var getTargetNodeInfo = function getTargetNodeInfo(targetType, nodes) {
|
|
|
77
77
|
return {
|
|
78
78
|
nodeType: nodes.taskList
|
|
79
79
|
};
|
|
80
|
+
case 'layoutSection':
|
|
81
|
+
return {
|
|
82
|
+
nodeType: nodes.layoutSection
|
|
83
|
+
};
|
|
80
84
|
default:
|
|
81
85
|
return null;
|
|
82
86
|
}
|
|
@@ -114,4 +118,7 @@ export var getSupportedListTypes = function getSupportedListTypes(nodes) {
|
|
|
114
118
|
};
|
|
115
119
|
export var getSupportedListTypesSet = function getSupportedListTypesSet(nodes) {
|
|
116
120
|
return new Set(getSupportedListTypes(nodes));
|
|
121
|
+
};
|
|
122
|
+
export var isLayoutNodeType = function isLayoutNodeType(nodeType) {
|
|
123
|
+
return nodeType.name === 'layoutSection';
|
|
117
124
|
};
|
|
@@ -8,6 +8,10 @@ export declare const transformBlockToList: (context: TransformContext) => Transa
|
|
|
8
8
|
* Transform list to block nodes
|
|
9
9
|
*/
|
|
10
10
|
export declare const transformListToBlockNodes: (context: TransformContext) => Transaction | null;
|
|
11
|
+
/**
|
|
12
|
+
* Wraps bulletList, orderedList or taskList in node of container type
|
|
13
|
+
*/
|
|
14
|
+
export declare const transformListToContainer: (context: TransformContext) => Transaction | null;
|
|
11
15
|
/**
|
|
12
16
|
* Transform list nodes
|
|
13
17
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Node as PMNode, NodeType } from '@atlaskit/editor-prosemirror/model';
|
|
2
2
|
import type { Transaction } from '@atlaskit/editor-prosemirror/state';
|
|
3
|
-
export type FormatNodeTargetType = 'heading1' | 'heading2' | 'heading3' | 'heading4' | 'heading5' | 'heading6' | 'paragraph' | 'blockquote' | 'expand' | '
|
|
3
|
+
export type FormatNodeTargetType = 'heading1' | 'heading2' | 'heading3' | 'heading4' | 'heading5' | 'heading6' | 'paragraph' | 'blockquote' | 'expand' | 'layoutSection' | 'panel' | 'codeBlock' | 'bulletList' | 'orderedList' | 'taskList';
|
|
4
4
|
export interface TransformContext {
|
|
5
5
|
sourceNode: PMNode;
|
|
6
6
|
sourcePos: number;
|
|
@@ -14,3 +14,4 @@ export declare const isBulletOrOrderedList: (nodeType: NodeType) => boolean;
|
|
|
14
14
|
export declare const isTaskList: (nodeType: NodeType) => boolean;
|
|
15
15
|
export declare const getSupportedListTypes: (nodes: Record<string, NodeType>) => NodeType[];
|
|
16
16
|
export declare const getSupportedListTypesSet: (nodes: Record<string, NodeType>) => Set<NodeType>;
|
|
17
|
+
export declare const isLayoutNodeType: (nodeType: NodeType) => boolean;
|
|
@@ -8,6 +8,10 @@ export declare const transformBlockToList: (context: TransformContext) => Transa
|
|
|
8
8
|
* Transform list to block nodes
|
|
9
9
|
*/
|
|
10
10
|
export declare const transformListToBlockNodes: (context: TransformContext) => Transaction | null;
|
|
11
|
+
/**
|
|
12
|
+
* Wraps bulletList, orderedList or taskList in node of container type
|
|
13
|
+
*/
|
|
14
|
+
export declare const transformListToContainer: (context: TransformContext) => Transaction | null;
|
|
11
15
|
/**
|
|
12
16
|
* Transform list nodes
|
|
13
17
|
*/
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Node as PMNode, NodeType } from '@atlaskit/editor-prosemirror/model';
|
|
2
2
|
import type { Transaction } from '@atlaskit/editor-prosemirror/state';
|
|
3
|
-
export type FormatNodeTargetType = 'heading1' | 'heading2' | 'heading3' | 'heading4' | 'heading5' | 'heading6' | 'paragraph' | 'blockquote' | 'expand' | '
|
|
3
|
+
export type FormatNodeTargetType = 'heading1' | 'heading2' | 'heading3' | 'heading4' | 'heading5' | 'heading6' | 'paragraph' | 'blockquote' | 'expand' | 'layoutSection' | 'panel' | 'codeBlock' | 'bulletList' | 'orderedList' | 'taskList';
|
|
4
4
|
export interface TransformContext {
|
|
5
5
|
sourceNode: PMNode;
|
|
6
6
|
sourcePos: number;
|
|
@@ -14,3 +14,4 @@ export declare const isBulletOrOrderedList: (nodeType: NodeType) => boolean;
|
|
|
14
14
|
export declare const isTaskList: (nodeType: NodeType) => boolean;
|
|
15
15
|
export declare const getSupportedListTypes: (nodes: Record<string, NodeType>) => NodeType[];
|
|
16
16
|
export declare const getSupportedListTypesSet: (nodes: Record<string, NodeType>) => Set<NodeType>;
|
|
17
|
+
export declare const isLayoutNodeType: (nodeType: NodeType) => boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/editor-plugin-block-menu",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "BlockMenu plugin for @atlaskit/editor-core",
|
|
5
5
|
"author": "Atlassian Pty Ltd",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@babel/runtime": "^7.0.0"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
|
-
"@atlaskit/editor-common": "^108.
|
|
49
|
+
"@atlaskit/editor-common": "^108.3.0",
|
|
50
50
|
"react": "^18.2.0",
|
|
51
51
|
"react-intl-next": "npm:react-intl@^5.18.1"
|
|
52
52
|
},
|