UNPKG

@atlaskit/editor-core

Version:

A package contains Atlassian editor core functionality

50 lines 2.39 kB
import { NodeSelection, inputRules } from '../../prosemirror'; import { analyticsService } from '../../analytics'; import { createInputRule, leafNodeReplacementCharacter } from '../utils'; import uuid from '../../plugins/tasks-and-decisions/uuid'; var createListRule = function (regex, name, list, item, schema) { var _a = schema.nodes, paragraph = _a.paragraph, hardBreak = _a.hardBreak; return createInputRule(regex, function (state, match, start, end) { var tr = state.tr, $from = state.selection.$from; // Only allow creating list from top-level paragraphs if ($from.node(1).type !== paragraph) { return; } var where = $from.before($from.depth); analyticsService.trackEvent("atlassian.editor." + name + ".autoformatting"); var content = $from.node($from.depth).content; var shouldBreakNode = false; content.forEach(function (node, offset) { if (node.type === hardBreak && offset < start) { shouldBreakNode = true; } }); if (!shouldBreakNode) { tr .delete(where, $from.end($from.depth)) .replaceSelectionWith(list.create({ localId: uuid.generate() }, [item.create({}, content)])) .delete(start + 1, end + 1); } else { tr .split($from.pos) .setSelection(new NodeSelection(tr.doc.resolve($from.pos + 1))) .replaceSelectionWith(list.create({ localId: uuid.generate() }, [item.create({}, tr.doc.nodeAt($from.pos + 1).content)])) .delete(start, end + 1); } return tr; }); }; export function inputRulePlugin(schema) { var rules = []; var _a = schema.nodes, decisionList = _a.decisionList, decisionItem = _a.decisionItem, taskList = _a.taskList, taskItem = _a.taskItem; if (decisionList && decisionItem) { rules.push(createListRule(new RegExp("(^|" + leafNodeReplacementCharacter + ")\\<\\>\\s$"), 'decisionlist', decisionList, decisionItem, schema)); } if (taskList && taskItem) { rules.push(createListRule(new RegExp("(^|" + leafNodeReplacementCharacter + ")\\[\\]\\s$"), 'tasklist', taskList, taskItem, schema)); } return inputRules({ rules: rules }); } export default inputRulePlugin; //# sourceMappingURL=input-rules.js.map