UNPKG

@atlaskit/editor-plugin-code-block

Version:

Code block plugin for @atlaskit/editor-core

80 lines (75 loc) 3.09 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createCodeBlockInputRule = createCodeBlockInputRule; var _analytics = require("@atlaskit/editor-common/analytics"); var _commands = require("@atlaskit/editor-common/commands"); var _safePlugin = require("@atlaskit/editor-common/safe-plugin"); var _utils = require("@atlaskit/editor-common/utils"); var _utils2 = require("@atlaskit/editor-prosemirror/utils"); var _prosemirrorInputRules = require("@atlaskit/prosemirror-input-rules"); var _transformToCodeBlock = require("./transform-to-code-block"); function createCodeBlockInputRule(schema, editorAnalyticsAPI) { var rules = getCodeBlockRules(editorAnalyticsAPI, schema); return new _safePlugin.SafePlugin((0, _prosemirrorInputRules.createPlugin)('code-block-input-rule', rules, { isBlockNodeRule: true })); } /** * Get all code block input rules * * @param {Schema} schema * @returns {InputRuleWithHandler[]} */ function getCodeBlockRules(editorAnalyticsAPI, schema) { var ruleAnalytics = (0, _utils.inputRuleWithAnalytics)({ action: _analytics.ACTION.INSERTED, actionSubject: _analytics.ACTION_SUBJECT.DOCUMENT, actionSubjectId: _analytics.ACTION_SUBJECT_ID.CODE_BLOCK, attributes: { inputMethod: _analytics.INPUT_METHOD.FORMATTING }, eventType: _analytics.EVENT_TYPE.TRACK }, editorAnalyticsAPI); var validMatchLength = function validMatchLength(match) { return match.length > 0 && match[0].length === 3; }; // eslint-disable-next-line require-unicode-regexp var threeTildeRule = (0, _utils.createRule)(/(?!\s)(`{3,})$/, function (state, match, start, end) { if (!validMatchLength(match)) { return null; } // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any var attributes = {}; if (match[4]) { attributes.language = match[4]; } if ((0, _transformToCodeBlock.isConvertableToCodeBlock)(state)) { return (0, _transformToCodeBlock.transformToCodeBlockAction)(state, start, attributes); } var tr = state.tr; tr.delete(start, end); var codeBlock = tr.doc.type.schema.nodes.codeBlock.createChecked(); (0, _utils2.safeInsert)(codeBlock)(tr); return tr; }); var leftNodeReplacementThreeTildeRule = (0, _utils.createRule)( // Ignored via go/ees005 // eslint-disable-next-line require-unicode-regexp new RegExp("((".concat(_prosemirrorInputRules.leafNodeReplacementCharacter, "`{3,})|^\\s(`{3,}))(\\S*)$")), function (state, match, start, end) { if (!validMatchLength(match)) { return null; } // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-explicit-any var attributes = {}; if (match[4]) { attributes.language = match[4]; } var inlineStart = Math.max(match.index + state.selection.$from.start(), 1); return (0, _commands.insertBlock)(state, schema.nodes.codeBlock, inlineStart, end, attributes); }); return [ruleAnalytics(threeTildeRule), ruleAnalytics(leftNodeReplacementThreeTildeRule)]; }