UNPKG

@atlaskit/editor-plugin-list

Version:

List plugin for @atlaskit/editor-core

60 lines 1.87 kB
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 };