@atlaskit/editor-plugin-list
Version:
List plugin for @atlaskit/editor-core
60 lines • 1.87 kB
JavaScript
import { isListItemNode, isListNode } from '@atlaskit/editor-common/utils';
import { findParentNodeClosestToPos } from '@atlaskit/editor-prosemirror/utils';
export function findFirstParentListNode($pos) {
var currentNode = $pos.doc.nodeAt($pos.pos);
var listNodePosition = null;
if (isListNode(currentNode)) {
listNodePosition = $pos.pos;
} else {
var result = findParentNodeClosestToPos($pos, isListNode);
listNodePosition = result && result.pos;
}
if (listNodePosition == null) {
return null;
}
var node = $pos.doc.nodeAt(listNodePosition);
if (!node) {
return null;
}
return {
node: node,
pos: listNodePosition
};
}
export function findFirstParentListItemNode($pos) {
var currentNode = $pos.doc.nodeAt($pos.pos);
var listItemNodePosition = isListItemNode(currentNode) ? $pos : findParentNodeClosestToPos($pos, isListItemNode);
if (!listItemNodePosition || listItemNodePosition.pos === null) {
return null;
}
var node = $pos.doc.nodeAt(listItemNodePosition.pos);
if (!node) {
return null;
}
return {
node: node,
pos: listItemNodePosition.pos
};
}
var _findRootParentListNode = function findRootParentListNode($pos) {
var doc = $pos.doc;
if ($pos.pos + 1 > doc.content.size) {
return null;
}
if ($pos.depth === 0) {
return doc.resolve($pos.pos + 1);
}
var currentNode = doc.nodeAt($pos.pos);
var beforePosition = $pos.before();
var nodeBefore = doc.nodeAt(beforePosition);
if (isListNode(currentNode) && !isListItemNode(nodeBefore)) {
return doc.resolve($pos.pos + 1);
}
var parentList = findParentNodeClosestToPos($pos, isListNode);
if (!parentList) {
return null;
}
var listNodePosition = doc.resolve(parentList.pos);
return _findRootParentListNode(listNodePosition);
};
export { _findRootParentListNode as findRootParentListNode };