@atlaskit/editor-plugin-paste
Version:
Paste plugin for @atlaskit/editor-core
33 lines • 1.25 kB
JavaScript
import { SUPPORTED_LANGUAGES } from '@atlaskit/code/constants';
import { mapSlice } from '@atlaskit/editor-common/utils';
function safelyGetVSCodeLanguage(editorData) {
try {
const vscodeData = editorData ? JSON.parse(editorData) : undefined;
return vscodeData === null || vscodeData === void 0 ? void 0 : vscodeData.mode;
} catch {}
}
export function handleVSCodeBlock({
state,
slice,
text,
event
}) {
var _event$clipboardData;
const vscodeData = event === null || event === void 0 ? void 0 : (_event$clipboardData = event.clipboardData) === null || _event$clipboardData === void 0 ? void 0 : _event$clipboardData.getData('vscode-editor-data');
const language = safelyGetVSCodeLanguage(vscodeData);
if (text && language && SUPPORTED_LANGUAGES.some(l => l.alias[0] === language)) {
const {
schema
} = state;
slice = mapSlice(slice, node => {
var _schema$nodes$codeBlo;
if (node.type.name === ((_schema$nodes$codeBlo = schema.nodes.codeBlock) === null || _schema$nodes$codeBlo === void 0 ? void 0 : _schema$nodes$codeBlo.name)) {
return schema.nodes.codeBlock.createChecked({
language
}, schema.text(text));
}
return node;
});
}
return slice;
}