@atlaskit/editor-plugin-tasks-and-decisions 0.1.0 → 0.2.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/.eslintrc.js +26 -0
- package/CHANGELOG.md +10 -0
- package/dist/cjs/commands.js +288 -0
- package/dist/cjs/index.js +8 -1
- package/dist/cjs/nodeviews/decisionItem.js +117 -0
- package/dist/cjs/nodeviews/hooks/use-show-placeholder.js +40 -0
- package/dist/cjs/nodeviews/taskItem.js +211 -0
- package/dist/cjs/plugin.js +166 -0
- package/dist/cjs/pm-plugins/commands.js +96 -0
- package/dist/cjs/pm-plugins/helpers.js +299 -0
- package/dist/cjs/pm-plugins/input-rules.js +94 -0
- package/dist/cjs/pm-plugins/keymaps.js +376 -0
- package/dist/cjs/pm-plugins/main.js +263 -0
- package/dist/cjs/pm-plugins/plugin-key.js +8 -0
- package/dist/cjs/pm-plugins/types.js +11 -0
- package/dist/cjs/types.js +5 -0
- package/dist/cjs/ui/Decision/index.js +30 -0
- package/dist/cjs/ui/Task/index.js +81 -0
- package/dist/cjs/ui/Task/task-item-with-providers.js +138 -0
- package/dist/cjs/ui/ToolbarDecision/index.js +41 -0
- package/dist/cjs/ui/ToolbarTask/index.js +40 -0
- package/dist/cjs/utils.js +41 -0
- package/dist/es2019/commands.js +279 -0
- package/dist/es2019/index.js +1 -1
- package/dist/es2019/nodeviews/decisionItem.js +76 -0
- package/dist/es2019/nodeviews/hooks/use-show-placeholder.js +36 -0
- package/dist/es2019/nodeviews/taskItem.js +173 -0
- package/dist/es2019/plugin.js +154 -0
- package/dist/es2019/pm-plugins/commands.js +94 -0
- package/dist/es2019/pm-plugins/helpers.js +316 -0
- package/dist/es2019/pm-plugins/input-rules.js +91 -0
- package/dist/es2019/pm-plugins/keymaps.js +370 -0
- package/dist/es2019/pm-plugins/main.js +262 -0
- package/dist/es2019/pm-plugins/plugin-key.js +2 -0
- package/dist/es2019/pm-plugins/types.js +5 -0
- package/dist/es2019/types.js +1 -0
- package/dist/es2019/ui/Decision/index.js +26 -0
- package/dist/es2019/ui/Task/index.js +55 -0
- package/dist/es2019/ui/Task/task-item-with-providers.js +72 -0
- package/dist/es2019/ui/ToolbarDecision/index.js +37 -0
- package/dist/es2019/ui/ToolbarTask/index.js +36 -0
- package/dist/es2019/utils.js +32 -0
- package/dist/esm/commands.js +281 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/nodeviews/decisionItem.js +110 -0
- package/dist/esm/nodeviews/hooks/use-show-placeholder.js +34 -0
- package/dist/esm/nodeviews/taskItem.js +204 -0
- package/dist/esm/plugin.js +155 -0
- package/dist/esm/pm-plugins/commands.js +90 -0
- package/dist/esm/pm-plugins/helpers.js +285 -0
- package/dist/esm/pm-plugins/input-rules.js +87 -0
- package/dist/esm/pm-plugins/keymaps.js +368 -0
- package/dist/esm/pm-plugins/main.js +256 -0
- package/dist/esm/pm-plugins/plugin-key.js +2 -0
- package/dist/esm/pm-plugins/types.js +5 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/ui/Decision/index.js +23 -0
- package/dist/esm/ui/Task/index.js +71 -0
- package/dist/esm/ui/Task/task-item-with-providers.js +129 -0
- package/dist/esm/ui/ToolbarDecision/index.js +34 -0
- package/dist/esm/ui/ToolbarTask/index.js +33 -0
- package/dist/esm/utils.js +30 -0
- package/dist/types/commands.d.ts +16 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/nodeviews/decisionItem.d.ts +10 -0
- package/dist/types/nodeviews/hooks/use-show-placeholder.d.ts +11 -0
- package/dist/types/nodeviews/taskItem.d.ts +14 -0
- package/dist/types/plugin.d.ts +2 -0
- package/dist/types/pm-plugins/commands.d.ts +15 -0
- package/dist/types/pm-plugins/helpers.d.ts +76 -0
- package/dist/types/pm-plugins/input-rules.d.ts +6 -0
- package/dist/types/pm-plugins/keymaps.d.ts +11 -0
- package/dist/types/pm-plugins/main.d.ts +7 -0
- package/dist/types/pm-plugins/plugin-key.d.ts +2 -0
- package/dist/types/pm-plugins/types.d.ts +8 -0
- package/dist/types/types.d.ts +49 -0
- package/dist/types/ui/Decision/index.d.ts +15 -0
- package/dist/types/ui/Task/index.d.ts +28 -0
- package/dist/types/ui/Task/task-item-with-providers.d.ts +29 -0
- package/dist/types/ui/ToolbarDecision/index.d.ts +18 -0
- package/dist/types/ui/ToolbarTask/index.d.ts +18 -0
- package/dist/types/utils.d.ts +4 -0
- package/dist/types-ts4.5/commands.d.ts +16 -0
- package/dist/types-ts4.5/index.d.ts +2 -1
- package/dist/types-ts4.5/nodeviews/decisionItem.d.ts +10 -0
- package/dist/types-ts4.5/nodeviews/hooks/use-show-placeholder.d.ts +11 -0
- package/dist/types-ts4.5/nodeviews/taskItem.d.ts +14 -0
- package/dist/types-ts4.5/plugin.d.ts +2 -0
- package/dist/types-ts4.5/pm-plugins/commands.d.ts +15 -0
- package/dist/types-ts4.5/pm-plugins/helpers.d.ts +76 -0
- package/dist/types-ts4.5/pm-plugins/input-rules.d.ts +6 -0
- package/dist/types-ts4.5/pm-plugins/keymaps.d.ts +11 -0
- package/dist/types-ts4.5/pm-plugins/main.d.ts +7 -0
- package/dist/types-ts4.5/pm-plugins/plugin-key.d.ts +2 -0
- package/dist/types-ts4.5/pm-plugins/types.d.ts +8 -0
- package/dist/types-ts4.5/types.d.ts +49 -0
- package/dist/types-ts4.5/ui/Decision/index.d.ts +15 -0
- package/dist/types-ts4.5/ui/Task/index.d.ts +28 -0
- package/dist/types-ts4.5/ui/Task/task-item-with-providers.d.ts +29 -0
- package/dist/types-ts4.5/ui/ToolbarDecision/index.d.ts +18 -0
- package/dist/types-ts4.5/ui/ToolbarTask/index.d.ts +18 -0
- package/dist/types-ts4.5/utils.d.ts +4 -0
- package/package.json +16 -6
- package/report.api.md +100 -1
- package/tmp/api-report-tmp.d.ts +78 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.focusCheckboxAndUpdateSelection = focusCheckboxAndUpdateSelection;
|
|
7
|
+
exports.getAllTaskItemsDataInRootTaskList = getAllTaskItemsDataInRootTaskList;
|
|
8
|
+
exports.getCurrentIndentLevel = exports.getBlockRange = void 0;
|
|
9
|
+
exports.getCurrentTaskItemIndex = getCurrentTaskItemIndex;
|
|
10
|
+
exports.getTaskItemDataAtPos = getTaskItemDataAtPos;
|
|
11
|
+
exports.getTaskItemDataToFocus = getTaskItemDataToFocus;
|
|
12
|
+
exports.liftBlock = exports.isTable = exports.isInsideTaskOrDecisionItem = exports.isInsideTask = exports.isInsideDecision = exports.isEmptyTaskDecision = exports.isActionOrDecisionList = exports.isActionOrDecisionItem = exports.getTaskItemIndex = void 0;
|
|
13
|
+
exports.removeCheckboxFocus = removeCheckboxFocus;
|
|
14
|
+
exports.walkOut = exports.subtreeHeight = void 0;
|
|
15
|
+
var _utils = require("@atlaskit/editor-common/utils");
|
|
16
|
+
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
17
|
+
var _transform = require("@atlaskit/editor-prosemirror/transform");
|
|
18
|
+
var _utils2 = require("@atlaskit/editor-prosemirror/utils");
|
|
19
|
+
var _pluginKey = require("./plugin-key");
|
|
20
|
+
var _types = require("./types");
|
|
21
|
+
var isInsideTaskOrDecisionItem = exports.isInsideTaskOrDecisionItem = function isInsideTaskOrDecisionItem(state) {
|
|
22
|
+
var _state$schema$nodes = state.schema.nodes,
|
|
23
|
+
decisionItem = _state$schema$nodes.decisionItem,
|
|
24
|
+
taskItem = _state$schema$nodes.taskItem;
|
|
25
|
+
return (0, _utils2.hasParentNodeOfType)([decisionItem, taskItem])(state.selection);
|
|
26
|
+
};
|
|
27
|
+
var isActionOrDecisionList = exports.isActionOrDecisionList = function isActionOrDecisionList(node) {
|
|
28
|
+
var _node$type$schema$nod = node.type.schema.nodes,
|
|
29
|
+
taskList = _node$type$schema$nod.taskList,
|
|
30
|
+
decisionList = _node$type$schema$nod.decisionList;
|
|
31
|
+
return [taskList, decisionList].indexOf(node.type) > -1;
|
|
32
|
+
};
|
|
33
|
+
var isActionOrDecisionItem = exports.isActionOrDecisionItem = function isActionOrDecisionItem(node) {
|
|
34
|
+
var _node$type$schema$nod2 = node.type.schema.nodes,
|
|
35
|
+
taskItem = _node$type$schema$nod2.taskItem,
|
|
36
|
+
decisionItem = _node$type$schema$nod2.decisionItem;
|
|
37
|
+
return [taskItem, decisionItem].indexOf(node.type) > -1;
|
|
38
|
+
};
|
|
39
|
+
var isInsideTask = exports.isInsideTask = function isInsideTask(state) {
|
|
40
|
+
var taskItem = state.schema.nodes.taskItem;
|
|
41
|
+
return (0, _utils2.hasParentNodeOfType)([taskItem])(state.selection);
|
|
42
|
+
};
|
|
43
|
+
var isInsideDecision = exports.isInsideDecision = function isInsideDecision(state) {
|
|
44
|
+
var decisionItem = state.schema.nodes.decisionItem;
|
|
45
|
+
return (0, _utils2.hasParentNodeOfType)([decisionItem])(state.selection);
|
|
46
|
+
};
|
|
47
|
+
var isTable = exports.isTable = function isTable(node) {
|
|
48
|
+
if (!node) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
var _node$type$schema$nod3 = node.type.schema.nodes,
|
|
52
|
+
table = _node$type$schema$nod3.table,
|
|
53
|
+
tableHeader = _node$type$schema$nod3.tableHeader,
|
|
54
|
+
tableCell = _node$type$schema$nod3.tableCell,
|
|
55
|
+
tableRow = _node$type$schema$nod3.tableRow;
|
|
56
|
+
return [table, tableHeader, tableCell, tableRow].includes(node.type);
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Creates a NodeRange around the given taskItem and the following
|
|
61
|
+
* ("nested") taskList, if one exists.
|
|
62
|
+
*/
|
|
63
|
+
var getBlockRange = exports.getBlockRange = function getBlockRange($from, $to) {
|
|
64
|
+
var taskList = $from.doc.type.schema.nodes.taskList;
|
|
65
|
+
var end = $to.end();
|
|
66
|
+
var $after = $to.doc.resolve(end + 1);
|
|
67
|
+
var after = $after.nodeAfter;
|
|
68
|
+
|
|
69
|
+
// ensure the node after is actually just a sibling
|
|
70
|
+
// $to will be inside the text, so subtract one to get the taskItem it contains in
|
|
71
|
+
if (after && after.type === taskList && $after.depth === $to.depth - 1) {
|
|
72
|
+
// it was! include it in our blockRange
|
|
73
|
+
end += after.nodeSize;
|
|
74
|
+
}
|
|
75
|
+
return $from.blockRange($to.doc.resolve(end));
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Finds the distance between the current $from and the root of the taskList.
|
|
80
|
+
*/
|
|
81
|
+
var getCurrentIndentLevel = exports.getCurrentIndentLevel = function getCurrentIndentLevel(selection) {
|
|
82
|
+
var $from = selection.$from;
|
|
83
|
+
var taskList = $from.doc.type.schema.nodes.taskList;
|
|
84
|
+
var furthestParent = (0, _utils.findFarthestParentNode)(function (node) {
|
|
85
|
+
return node.type === taskList;
|
|
86
|
+
})($from);
|
|
87
|
+
if (!furthestParent) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
return $from.depth - furthestParent.depth;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Finds the index of the current task item in relation to the closest taskList
|
|
95
|
+
*/
|
|
96
|
+
var getTaskItemIndex = exports.getTaskItemIndex = function getTaskItemIndex(state) {
|
|
97
|
+
var $pos = state.selection.$from;
|
|
98
|
+
var isTaskList = function isTaskList(node) {
|
|
99
|
+
return (node === null || node === void 0 ? void 0 : node.type.name) === 'taskList';
|
|
100
|
+
};
|
|
101
|
+
var itemAtPos = (0, _utils2.findParentNodeClosestToPos)($pos, isTaskList);
|
|
102
|
+
return $pos.index(itemAtPos ? itemAtPos.depth : undefined);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Walk outwards from a position until we encounter the (inside) start of
|
|
107
|
+
* the next node, or reach the end of the document.
|
|
108
|
+
*
|
|
109
|
+
* @param $startPos Position to start walking from.
|
|
110
|
+
*/
|
|
111
|
+
var walkOut = exports.walkOut = function walkOut($startPos) {
|
|
112
|
+
var $pos = $startPos;
|
|
113
|
+
|
|
114
|
+
// invariant 1: don't walk past the end of the document
|
|
115
|
+
// invariant 2: we haven't walked to the start of *any* node
|
|
116
|
+
// parentOffset includes textOffset.
|
|
117
|
+
while ($pos.pos < $pos.doc.nodeSize - 2 && $pos.parentOffset > 0) {
|
|
118
|
+
$pos = $pos.doc.resolve($pos.pos + 1);
|
|
119
|
+
}
|
|
120
|
+
return $pos;
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Finds the height of a tree-like structure, given any position inside it.
|
|
125
|
+
*
|
|
126
|
+
* Traverses from the top of the tree to all leaf nodes, and returns the length
|
|
127
|
+
* of the longest path.
|
|
128
|
+
*
|
|
129
|
+
* This means you can use it with things like taskList, which
|
|
130
|
+
* do not nest themselves inside taskItems but rather as adjacent children.
|
|
131
|
+
*
|
|
132
|
+
* @param $pos Any position inside the tree.
|
|
133
|
+
* @param types The node types to consider traversable
|
|
134
|
+
*/
|
|
135
|
+
var subtreeHeight = exports.subtreeHeight = function subtreeHeight($from, $to, types) {
|
|
136
|
+
var root = (0, _utils.findFarthestParentNode)(function (node) {
|
|
137
|
+
return types.indexOf(node.type) > -1;
|
|
138
|
+
})($from);
|
|
139
|
+
if (!root) {
|
|
140
|
+
return -1;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// get the height between the root and the current position
|
|
144
|
+
var distToParent = $from.depth - root.depth;
|
|
145
|
+
|
|
146
|
+
// include any following taskList since nested lists appear
|
|
147
|
+
// as siblings
|
|
148
|
+
//
|
|
149
|
+
// this is unlike regular bullet lists where the orderedList
|
|
150
|
+
// appears as descendent of listItem
|
|
151
|
+
var blockRange = getBlockRange($from, $to);
|
|
152
|
+
if (!blockRange) {
|
|
153
|
+
return -1;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
// and get the max height from the current position to the
|
|
157
|
+
// deepest leaf node
|
|
158
|
+
var maxChildDepth = $from.depth;
|
|
159
|
+
$from.doc.nodesBetween(blockRange.start, blockRange.end, function (descendent, relPos, parent) {
|
|
160
|
+
maxChildDepth = Math.max($from.doc.resolve(relPos).depth, maxChildDepth);
|
|
161
|
+
|
|
162
|
+
// keep descending down the tree if we can
|
|
163
|
+
if (types.indexOf(descendent.type) > -1) {
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
return distToParent + (maxChildDepth - $from.depth);
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Returns `true` if the taskItem or decisionItem has no text.
|
|
172
|
+
*/
|
|
173
|
+
var isEmptyTaskDecision = exports.isEmptyTaskDecision = function isEmptyTaskDecision(state) {
|
|
174
|
+
var selection = state.selection,
|
|
175
|
+
schema = state.schema;
|
|
176
|
+
var $from = selection.$from;
|
|
177
|
+
var node = $from.node($from.depth);
|
|
178
|
+
return node && (node.type === schema.nodes.taskItem || node.type === schema.nodes.decisionItem) && node.content.size === 0;
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Lifts a taskItem and any directly following taskList
|
|
183
|
+
* (taskItem and its "nested children") out one level.
|
|
184
|
+
*
|
|
185
|
+
* @param tr Transaction to base steps on
|
|
186
|
+
* @param $from Start of range you want to lift
|
|
187
|
+
* @param $to End of range you want to lift (can be same as `$from`)
|
|
188
|
+
*/
|
|
189
|
+
var liftBlock = exports.liftBlock = function liftBlock(tr, $from, $to) {
|
|
190
|
+
var blockRange = getBlockRange($from, $to);
|
|
191
|
+
if (!blockRange) {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// ensure we can actually lift
|
|
196
|
+
var target = (0, _transform.liftTarget)(blockRange);
|
|
197
|
+
if (typeof target !== 'number') {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
return tr.lift(blockRange, target).scrollIntoView();
|
|
201
|
+
};
|
|
202
|
+
function getTaskItemDataAtPos(view) {
|
|
203
|
+
var state = view.state;
|
|
204
|
+
var selection = state.selection,
|
|
205
|
+
schema = state.schema;
|
|
206
|
+
var $from = selection.$from;
|
|
207
|
+
var isInTaskItem = $from.node().type === schema.nodes.taskItem;
|
|
208
|
+
|
|
209
|
+
// current selection has to be inside taskitem
|
|
210
|
+
if (isInTaskItem) {
|
|
211
|
+
var taskItemPos = $from.before();
|
|
212
|
+
return {
|
|
213
|
+
pos: taskItemPos,
|
|
214
|
+
localId: $from.node().attrs.localId
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function getAllTaskItemsDataInRootTaskList(view) {
|
|
219
|
+
var state = view.state;
|
|
220
|
+
var schema = state.schema;
|
|
221
|
+
var $fromPos = state.selection.$from;
|
|
222
|
+
var isInTaskItem = $fromPos.node().type === schema.nodes.taskItem;
|
|
223
|
+
// if not inside task item then return undefined;
|
|
224
|
+
if (!isInTaskItem) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
var _schema$nodes = schema.nodes,
|
|
228
|
+
taskList = _schema$nodes.taskList,
|
|
229
|
+
taskItem = _schema$nodes.taskItem;
|
|
230
|
+
var rootTaskListData = (0, _utils.findFarthestParentNode)(function (node) {
|
|
231
|
+
return node.type === taskList;
|
|
232
|
+
})($fromPos);
|
|
233
|
+
if (rootTaskListData) {
|
|
234
|
+
var rootTaskList = rootTaskListData.node;
|
|
235
|
+
var rootTaskListStartPos = rootTaskListData.start;
|
|
236
|
+
var allTaskItems = [];
|
|
237
|
+
rootTaskList.descendants(function (node, pos, parent, index) {
|
|
238
|
+
if (node.type === taskItem) {
|
|
239
|
+
allTaskItems.push({
|
|
240
|
+
node: node,
|
|
241
|
+
pos: pos + rootTaskListStartPos,
|
|
242
|
+
index: index
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
return allTaskItems;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function getCurrentTaskItemIndex(view, allTaskItems) {
|
|
250
|
+
var state = view.state;
|
|
251
|
+
var $fromPos = state.selection.$from;
|
|
252
|
+
var allTaskItemNodes = allTaskItems.map(function (nodeData) {
|
|
253
|
+
return nodeData.node;
|
|
254
|
+
});
|
|
255
|
+
var currentTaskItem = $fromPos.node($fromPos.depth);
|
|
256
|
+
var currentTaskItemIndex = allTaskItemNodes.indexOf(currentTaskItem);
|
|
257
|
+
return currentTaskItemIndex;
|
|
258
|
+
}
|
|
259
|
+
function getTaskItemDataToFocus(view, direction) {
|
|
260
|
+
var allTaskItems = getAllTaskItemsDataInRootTaskList(view);
|
|
261
|
+
// if not inside task item then allTaskItems will be undefined;
|
|
262
|
+
if (!allTaskItems) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
var currentTaskItemIndex = getCurrentTaskItemIndex(view, allTaskItems);
|
|
266
|
+
if (direction === 'next' ? currentTaskItemIndex === allTaskItems.length - 1 : currentTaskItemIndex === 0) {
|
|
267
|
+
// checkbox of first or last task item is already focused based on direction.
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
var indexOfTaskItemToFocus = direction === 'next' ? currentTaskItemIndex + 1 : currentTaskItemIndex - 1;
|
|
271
|
+
var taskItemToFocus = allTaskItems[indexOfTaskItemToFocus];
|
|
272
|
+
return {
|
|
273
|
+
pos: taskItemToFocus.pos,
|
|
274
|
+
localId: taskItemToFocus.node.attrs.localId
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
function focusCheckboxAndUpdateSelection(view, taskItemData) {
|
|
278
|
+
var pos = taskItemData.pos,
|
|
279
|
+
localId = taskItemData.localId;
|
|
280
|
+
var state = view.state,
|
|
281
|
+
dispatch = view.dispatch;
|
|
282
|
+
var doc = state.doc,
|
|
283
|
+
tr = state.tr;
|
|
284
|
+
tr.setSelection(new _state.TextSelection(doc.resolve(pos + 1)));
|
|
285
|
+
tr.setMeta(_pluginKey.stateKey, {
|
|
286
|
+
action: _types.ACTIONS.FOCUS_BY_LOCALID,
|
|
287
|
+
data: localId
|
|
288
|
+
});
|
|
289
|
+
dispatch(tr);
|
|
290
|
+
}
|
|
291
|
+
function removeCheckboxFocus(view) {
|
|
292
|
+
var state = view.state,
|
|
293
|
+
dispatch = view.dispatch;
|
|
294
|
+
var tr = state.tr;
|
|
295
|
+
view.focus();
|
|
296
|
+
dispatch(tr.setMeta(_pluginKey.stateKey, {
|
|
297
|
+
action: _types.ACTIONS.FOCUS_BY_LOCALID
|
|
298
|
+
}));
|
|
299
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.inputRulePlugin = exports.default = void 0;
|
|
8
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
9
|
+
var _analytics = require("@atlaskit/editor-common/analytics");
|
|
10
|
+
var _state = require("@atlaskit/editor-prosemirror/state");
|
|
11
|
+
var _utils = require("@atlaskit/editor-prosemirror/utils");
|
|
12
|
+
var _prosemirrorInputRules = require("@atlaskit/prosemirror-input-rules");
|
|
13
|
+
var _commands = require("../commands");
|
|
14
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
15
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
16
|
+
var createListRule = function createListRule(editorAnalyticsAPI) {
|
|
17
|
+
return function (regex, listType, itemAttrs) {
|
|
18
|
+
return (0, _prosemirrorInputRules.createRule)(regex, function (state, _match, start, end) {
|
|
19
|
+
var paragraph = state.schema.nodes.paragraph;
|
|
20
|
+
var _getListTypes = (0, _commands.getListTypes)(listType, state.schema),
|
|
21
|
+
list = _getListTypes.list;
|
|
22
|
+
var $end = state.doc.resolve(end);
|
|
23
|
+
var $endOfParent = state.doc.resolve($end.after());
|
|
24
|
+
// Only allow creating list in nodes that support them.
|
|
25
|
+
// Parent must be a paragraph as we don't want this applying to headings
|
|
26
|
+
if ($end.parent.type !== paragraph || !(0, _utils.canInsert)($endOfParent, list.createAndFill())) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
var insertTr = (0, _commands.insertTaskDecisionAction)(editorAnalyticsAPI)(state, listType, _analytics.INPUT_METHOD.FORMATTING, addItem(start, end), undefined, undefined, itemAttrs);
|
|
30
|
+
return insertTr;
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
var addItem = function addItem(start, end) {
|
|
35
|
+
return function (_ref) {
|
|
36
|
+
var tr = _ref.tr,
|
|
37
|
+
state = _ref.state,
|
|
38
|
+
list = _ref.list,
|
|
39
|
+
item = _ref.item,
|
|
40
|
+
listLocalId = _ref.listLocalId,
|
|
41
|
+
itemLocalId = _ref.itemLocalId,
|
|
42
|
+
itemAttrs = _ref.itemAttrs;
|
|
43
|
+
var $from = state.selection.$from,
|
|
44
|
+
schema = state.schema;
|
|
45
|
+
var hardBreak = schema.nodes.hardBreak;
|
|
46
|
+
var content = $from.node($from.depth).content;
|
|
47
|
+
var shouldBreakNode = false;
|
|
48
|
+
content.forEach(function (node, offset) {
|
|
49
|
+
if (node.type === hardBreak && offset < start) {
|
|
50
|
+
shouldBreakNode = true;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
if (!shouldBreakNode) {
|
|
54
|
+
tr.replaceRangeWith($from.before(), $from.after(), list.create({
|
|
55
|
+
localId: listLocalId
|
|
56
|
+
}, [item.create(_objectSpread({
|
|
57
|
+
localId: itemLocalId
|
|
58
|
+
}, itemAttrs), content)])).delete(start + 1, end + 1).setSelection(new _state.TextSelection(tr.doc.resolve(start + 1)));
|
|
59
|
+
} else {
|
|
60
|
+
var depthAdjustment = (0, _commands.changeInDepth)($from, tr.selection.$from);
|
|
61
|
+
tr.split($from.pos).setSelection(new _state.NodeSelection(tr.doc.resolve($from.pos + 1))).replaceSelectionWith(list.create({
|
|
62
|
+
localId: listLocalId
|
|
63
|
+
}, [item.create(_objectSpread({
|
|
64
|
+
localId: itemLocalId
|
|
65
|
+
}, itemAttrs),
|
|
66
|
+
// TODO: [ts30] handle void and null properly
|
|
67
|
+
tr.doc.nodeAt($from.pos + 1).content)])).setSelection(new _state.TextSelection(tr.doc.resolve($from.pos + depthAdjustment))).delete(start, end + 1);
|
|
68
|
+
}
|
|
69
|
+
return tr;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
var inputRulePlugin = exports.inputRulePlugin = function inputRulePlugin(editorAnalyticsAPI) {
|
|
73
|
+
return function (schema, featureFlags) {
|
|
74
|
+
var rules = [];
|
|
75
|
+
var _schema$nodes = schema.nodes,
|
|
76
|
+
decisionList = _schema$nodes.decisionList,
|
|
77
|
+
decisionItem = _schema$nodes.decisionItem,
|
|
78
|
+
taskList = _schema$nodes.taskList,
|
|
79
|
+
taskItem = _schema$nodes.taskItem;
|
|
80
|
+
if (decisionList && decisionItem) {
|
|
81
|
+
rules.push(createListRule(editorAnalyticsAPI)(new RegExp("(^|".concat(_prosemirrorInputRules.leafNodeReplacementCharacter, ")\\<\\>\\s$")), 'decisionList'));
|
|
82
|
+
}
|
|
83
|
+
if (taskList && taskItem) {
|
|
84
|
+
rules.push(createListRule(editorAnalyticsAPI)(new RegExp("(^|".concat(_prosemirrorInputRules.leafNodeReplacementCharacter, ")\\[\\]\\s$")), 'taskList'));
|
|
85
|
+
rules.push(createListRule(editorAnalyticsAPI)(new RegExp("(^|".concat(_prosemirrorInputRules.leafNodeReplacementCharacter, ")\\[x\\]\\s$")), 'taskList', {
|
|
86
|
+
state: 'DONE'
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
return (0, _prosemirrorInputRules.createPlugin)('tasks-and-decisions', rules, {
|
|
90
|
+
isBlockNodeRule: true
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
var _default = exports.default = inputRulePlugin;
|