@atlaskit/editor-core
Version:
A package contains Atlassian editor core functionality
50 lines • 2.39 kB
JavaScript
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