UNPKG

@atlaskit/editor-core

Version:

A package contains Atlassian editor core functionality

94 lines 2.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.nodeLen = function (node) { return node.nodeType === 3 && node.nodeValue ? node.nodeValue.length : node.childNodes.length; }; exports.isIgnorable = function (dom) { return dom.pmViewDesc && dom.pmViewDesc.size === 0; }; exports.isBlockNode = function (dom) { var desc = dom.pmViewDesc; return desc && desc.node && desc.node.isBlock; }; exports.domIndex = function (node) { if (node) { for (var index = 0;; index++) { node = node.previousSibling; if (!node) { return index; } } } }; // Make sure the cursor isn't directly after one or more ignored // nodes, which will confuse the browser's cursor motion logic. exports.removeIgnoredNodesLeft = function (view) { var sel = view.root.getSelection(); var node = sel.anchorNode; var offset = sel.anchorOffset; var removeNode; var removeOffset; if (!node) { return; } for (;;) { if (offset > 0) { if (node.nodeType !== 1) { // zero-width non-breaking space if (node.nodeType === 3 && node.nodeValue.charAt(offset - 1) === '\ufeff') { removeNode = node; removeOffset = --offset; } else { break; } } else { var before_1 = node.childNodes[offset - 1]; if (exports.isIgnorable(before_1)) { removeNode = before_1; removeOffset = --offset; } else if (before_1.nodeType === 3) { node = before_1; offset = node.nodeValue.length; } else { break; } } } else if (exports.isBlockNode(node)) { break; } else { var prev = node.previousSibling; while (prev && exports.isIgnorable(prev)) { removeNode = node.parentNode; removeOffset = exports.domIndex(prev); prev = prev.previousSibling; } if (!prev) { node = node.parentNode; if (node === view.dom) { break; } offset = 0; } else { node = prev; offset = exports.nodeLen(node); } } } if (removeNode) { removeNode.parentNode.removeChild(removeNode); } }; exports.hasCode = function (state, pos) { var code = state.schema.marks.code; var node = pos >= 0 && state.doc.nodeAt(pos); if (node) { return !!node.marks.filter(function (mark) { return mark.type === code; }).length; } return false; }; //# sourceMappingURL=utils.js.map