UNPKG

@zodiac-ui/editor

Version:

A rich text editor for Angular based on `@atlaskit/editor-core`.

49 lines 8.12 kB
import { hasParentNodeOfType } from 'prosemirror-utils'; import { TextSelection, NodeSelection, } from 'prosemirror-state'; export const insertBlock = (state, nodeType, nodeName, start, end, attrs) => { // To ensure that match is done after HardBreak. const { hardBreak, codeBlock, listItem } = state.schema.nodes; const $pos = state.doc.resolve(start); if ($pos.nodeAfter.type !== hardBreak) { return null; } // To ensure no nesting is done. (unless we're inserting a codeBlock inside lists) if ($pos.depth > 1 && !(nodeType === codeBlock && hasParentNodeOfType(listItem)(state.selection))) { return null; } // Split at the start of autoformatting and delete formatting characters. let tr = state.tr.delete(start, end).split(start); let currentNode = tr.doc.nodeAt(start + 1); // If node has more content split at the end of autoformatting. let nodeHasMoreContent = false; tr.doc.nodesBetween(start, start + currentNode.nodeSize, (node, pos) => { if (!nodeHasMoreContent && node.type === hardBreak) { nodeHasMoreContent = true; tr = tr.split(pos + 1).delete(pos, pos + 1); } }); if (nodeHasMoreContent) { currentNode = tr.doc.nodeAt(start + 1); } // Create new node and fill with content of current node. const { blockquote, paragraph } = state.schema.nodes; let content; let depth; if (nodeType === blockquote) { depth = 3; content = [paragraph.create({}, currentNode.content)]; } else { depth = 2; content = currentNode.content; } const newNode = nodeType.create(attrs, content); // Add new node. tr = tr .setSelection(new NodeSelection(tr.doc.resolve(start + 1))) .replaceSelectionWith(newNode) .setSelection(new TextSelection(tr.doc.resolve(start + depth))); return tr; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zZXJ0LWJsb2NrLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHpvZGlhYy11aS9lZGl0b3IvIiwic291cmNlcyI6WyJwbHVnaW5zL2Jsb2NrLXR5cGUvaW5zZXJ0LWJsb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFDSCxhQUFhLEVBQ2IsYUFBYSxHQUdoQixNQUFNLG1CQUFtQixDQUFDO0FBRTNCLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUN2QixLQUFrQixFQUNsQixRQUFrQixFQUNsQixRQUFnQixFQUNoQixLQUFLLEVBQ0wsR0FBRyxFQUNILEtBQThCLEVBQ1osRUFBRTtJQUNwQixnREFBZ0Q7SUFDaEQsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDOUQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDbkMsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUVELGtGQUFrRjtJQUNsRixJQUNJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQztRQUNkLENBQUMsQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUM3RTtRQUNFLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFFRCx5RUFBeUU7SUFDekUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFM0MsK0RBQStEO0lBQy9ELElBQUksa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQy9CLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUNmLEtBQUssRUFDTCxLQUFLLEdBQUksV0FBc0IsQ0FBQyxRQUFRLEVBQ3hDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ1YsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ2hELGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUMxQixFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDL0M7SUFDTCxDQUFDLENBQ0osQ0FBQztJQUNGLElBQUksa0JBQWtCLEVBQUU7UUFDcEIsV0FBVyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztLQUMxQztJQUVELHlEQUF5RDtJQUN6RCxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQ3JELElBQUksT0FBTyxDQUFDO0lBQ1osSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLFFBQVEsS0FBSyxVQUFVLEVBQUU7UUFDekIsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNWLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFHLFdBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNyRTtTQUFNO1FBQ0gsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNWLE9BQU8sR0FBSSxXQUFzQixDQUFDLE9BQU8sQ0FBQztLQUM3QztJQUNELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRWhELGdCQUFnQjtJQUNoQixFQUFFLEdBQUcsRUFBRTtTQUNGLFlBQVksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMxRCxvQkFBb0IsQ0FBQyxPQUFPLENBQUM7U0FDN0IsWUFBWSxDQUFDLElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsT0FBTyxFQUFFLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOb2RlVHlwZSwgTm9kZSBhcyBQTU5vZGUgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XHJcbmltcG9ydCB7IGhhc1BhcmVudE5vZGVPZlR5cGUgfSBmcm9tICdwcm9zZW1pcnJvci11dGlscyc7XHJcbmltcG9ydCB7XHJcbiAgICBUZXh0U2VsZWN0aW9uLFxyXG4gICAgTm9kZVNlbGVjdGlvbixcclxuICAgIEVkaXRvclN0YXRlLFxyXG4gICAgVHJhbnNhY3Rpb24sXHJcbn0gZnJvbSAncHJvc2VtaXJyb3Itc3RhdGUnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGluc2VydEJsb2NrID0gKFxyXG4gICAgc3RhdGU6IEVkaXRvclN0YXRlLFxyXG4gICAgbm9kZVR5cGU6IE5vZGVUeXBlLFxyXG4gICAgbm9kZU5hbWU6IHN0cmluZyxcclxuICAgIHN0YXJ0LFxyXG4gICAgZW5kLFxyXG4gICAgYXR0cnM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxyXG4pOiBUcmFuc2FjdGlvbiB8IG51bGwgPT4ge1xyXG4gICAgLy8gVG8gZW5zdXJlIHRoYXQgbWF0Y2ggaXMgZG9uZSBhZnRlciBIYXJkQnJlYWsuXHJcbiAgICBjb25zdCB7IGhhcmRCcmVhaywgY29kZUJsb2NrLCBsaXN0SXRlbSB9ID0gc3RhdGUuc2NoZW1hLm5vZGVzO1xyXG4gICAgY29uc3QgJHBvcyA9IHN0YXRlLmRvYy5yZXNvbHZlKHN0YXJ0KTtcclxuICAgIGlmICgkcG9zLm5vZGVBZnRlci50eXBlICE9PSBoYXJkQnJlYWspIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUbyBlbnN1cmUgbm8gbmVzdGluZyBpcyBkb25lLiAodW5sZXNzIHdlJ3JlIGluc2VydGluZyBhIGNvZGVCbG9jayBpbnNpZGUgbGlzdHMpXHJcbiAgICBpZiAoXHJcbiAgICAgICAgJHBvcy5kZXB0aCA+IDEgJiZcclxuICAgICAgICAhKG5vZGVUeXBlID09PSBjb2RlQmxvY2sgJiYgaGFzUGFyZW50Tm9kZU9mVHlwZShsaXN0SXRlbSkoc3RhdGUuc2VsZWN0aW9uKSlcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNwbGl0IGF0IHRoZSBzdGFydCBvZiBhdXRvZm9ybWF0dGluZyBhbmQgZGVsZXRlIGZvcm1hdHRpbmcgY2hhcmFjdGVycy5cclxuICAgIGxldCB0ciA9IHN0YXRlLnRyLmRlbGV0ZShzdGFydCwgZW5kKS5zcGxpdChzdGFydCk7XHJcbiAgICBsZXQgY3VycmVudE5vZGUgPSB0ci5kb2Mubm9kZUF0KHN0YXJ0ICsgMSk7XHJcblxyXG4gICAgLy8gSWYgbm9kZSBoYXMgbW9yZSBjb250ZW50IHNwbGl0IGF0IHRoZSBlbmQgb2YgYXV0b2Zvcm1hdHRpbmcuXHJcbiAgICBsZXQgbm9kZUhhc01vcmVDb250ZW50ID0gZmFsc2U7XHJcbiAgICB0ci5kb2Mubm9kZXNCZXR3ZWVuKFxyXG4gICAgICAgIHN0YXJ0LFxyXG4gICAgICAgIHN0YXJ0ICsgKGN1cnJlbnROb2RlIGFzIFBNTm9kZSkubm9kZVNpemUsXHJcbiAgICAgICAgKG5vZGUsIHBvcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIW5vZGVIYXNNb3JlQ29udGVudCAmJiBub2RlLnR5cGUgPT09IGhhcmRCcmVhaykge1xyXG4gICAgICAgICAgICAgICAgbm9kZUhhc01vcmVDb250ZW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRyID0gdHIuc3BsaXQocG9zICsgMSkuZGVsZXRlKHBvcywgcG9zICsgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgKTtcclxuICAgIGlmIChub2RlSGFzTW9yZUNvbnRlbnQpIHtcclxuICAgICAgICBjdXJyZW50Tm9kZSA9IHRyLmRvYy5ub2RlQXQoc3RhcnQgKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgbmV3IG5vZGUgYW5kIGZpbGwgd2l0aCBjb250ZW50IG9mIGN1cnJlbnQgbm9kZS5cclxuICAgIGNvbnN0IHsgYmxvY2txdW90ZSwgcGFyYWdyYXBoIH0gPSBzdGF0ZS5zY2hlbWEubm9kZXM7XHJcbiAgICBsZXQgY29udGVudDtcclxuICAgIGxldCBkZXB0aDtcclxuICAgIGlmIChub2RlVHlwZSA9PT0gYmxvY2txdW90ZSkge1xyXG4gICAgICAgIGRlcHRoID0gMztcclxuICAgICAgICBjb250ZW50ID0gW3BhcmFncmFwaC5jcmVhdGUoe30sIChjdXJyZW50Tm9kZSBhcyBQTU5vZGUpLmNvbnRlbnQpXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGVwdGggPSAyO1xyXG4gICAgICAgIGNvbnRlbnQgPSAoY3VycmVudE5vZGUgYXMgUE1Ob2RlKS5jb250ZW50O1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3Tm9kZSA9IG5vZGVUeXBlLmNyZWF0ZShhdHRycywgY29udGVudCk7XHJcblxyXG4gICAgLy8gQWRkIG5ldyBub2RlLlxyXG4gICAgdHIgPSB0clxyXG4gICAgICAgIC5zZXRTZWxlY3Rpb24obmV3IE5vZGVTZWxlY3Rpb24odHIuZG9jLnJlc29sdmUoc3RhcnQgKyAxKSkpXHJcbiAgICAgICAgLnJlcGxhY2VTZWxlY3Rpb25XaXRoKG5ld05vZGUpXHJcbiAgICAgICAgLnNldFNlbGVjdGlvbihuZXcgVGV4dFNlbGVjdGlvbih0ci5kb2MucmVzb2x2ZShzdGFydCArIGRlcHRoKSkpO1xyXG4gICAgcmV0dXJuIHRyO1xyXG59O1xyXG4iXX0=