UNPKG

@atlaskit/editor-plugin-list

Version:

List plugin for @atlaskit/editor-core

61 lines 1.81 kB
import { isListItemNode, isListNode } from '@atlaskit/editor-common/utils'; import { findParentNodeClosestToPos } from '@atlaskit/editor-prosemirror/utils'; export function findFirstParentListNode($pos) { const currentNode = $pos.doc.nodeAt($pos.pos); let listNodePosition = null; if (isListNode(currentNode)) { listNodePosition = $pos.pos; } else { const result = findParentNodeClosestToPos($pos, isListNode); listNodePosition = result && result.pos; } if (listNodePosition == null) { return null; } const node = $pos.doc.nodeAt(listNodePosition); if (!node) { return null; } return { node, pos: listNodePosition }; } export function findFirstParentListItemNode($pos) { const currentNode = $pos.doc.nodeAt($pos.pos); const listItemNodePosition = isListItemNode(currentNode) ? $pos : findParentNodeClosestToPos($pos, isListItemNode); if (!listItemNodePosition || listItemNodePosition.pos === null) { return null; } const node = $pos.doc.nodeAt(listItemNodePosition.pos); if (!node) { return null; } return { node: node, pos: listItemNodePosition.pos }; } export const findRootParentListNode = $pos => { const { doc } = $pos; if ($pos.pos + 1 > doc.content.size) { return null; } if ($pos.depth === 0) { return doc.resolve($pos.pos + 1); } const currentNode = doc.nodeAt($pos.pos); const beforePosition = $pos.before(); const nodeBefore = doc.nodeAt(beforePosition); if (isListNode(currentNode) && !isListItemNode(nodeBefore)) { return doc.resolve($pos.pos + 1); } const parentList = findParentNodeClosestToPos($pos, isListNode); if (!parentList) { return null; } const listNodePosition = doc.resolve(parentList.pos); return findRootParentListNode(listNodePosition); };