@atlaskit/editor-core
Version:
A package contains Atlassian editor core functionality
53 lines • 2.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var prosemirror_1 = require("../../prosemirror");
var analytics_1 = require("../../analytics");
var utils_1 = require("../utils");
var uuid_1 = require("../../plugins/tasks-and-decisions/uuid");
var createListRule = function (regex, name, list, item, schema) {
var _a = schema.nodes, paragraph = _a.paragraph, hardBreak = _a.hardBreak;
return utils_1.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);
analytics_1.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_1.default.generate() }, [item.create({}, content)]))
.delete(start + 1, end + 1);
}
else {
tr
.split($from.pos)
.setSelection(new prosemirror_1.NodeSelection(tr.doc.resolve($from.pos + 1)))
.replaceSelectionWith(list.create({ localId: uuid_1.default.generate() }, [item.create({}, tr.doc.nodeAt($from.pos + 1).content)]))
.delete(start, end + 1);
}
return tr;
});
};
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("(^|" + utils_1.leafNodeReplacementCharacter + ")\\<\\>\\s$"), 'decisionlist', decisionList, decisionItem, schema));
}
if (taskList && taskItem) {
rules.push(createListRule(new RegExp("(^|" + utils_1.leafNodeReplacementCharacter + ")\\[\\]\\s$"), 'tasklist', taskList, taskItem, schema));
}
return prosemirror_1.inputRules({ rules: rules });
}
exports.inputRulePlugin = inputRulePlugin;
exports.default = inputRulePlugin;
//# sourceMappingURL=input-rules.js.map