UNPKG

@atlaskit/editor-core

Version:

A package contains Atlassian editor core functionality

75 lines 2.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var prosemirror_1 = require("../../prosemirror"); var getLanguageFromEditorStyle = function (dom) { return dom.dataset['language']; }; // example of BB style: // <div class="codehilite language-javascript"><pre><span>hello world</span><span>\n</span></pre></div> var getLanguageFromBitbucketStyle = function (dom) { if (dom && dom.classList.contains('codehilite')) { // code block html from Bitbucket always contains an extra new line return extractLanguageFromClass(dom.className); } }; var extractLanguageFromClass = function (className) { var languageRegex = /(?:^|\s)language-([^\s]+)/; var result = languageRegex.exec(className); if (result && result[1]) { return result[1]; } }; var removeLastNewLine = function (dom) { var parent = dom && dom.parentElement; if (parent && parent.classList.contains('codehilite')) { dom.textContent = dom.textContent.replace(/\n$/, ''); } return dom; }; exports.codeBlock = { attrs: { language: { default: null }, uniqueId: { default: null } }, content: 'text*', group: 'block', code: true, defining: true, parseDOM: [{ tag: 'pre', preserveWhitespace: 'full', getAttrs: function (dom) { var language = (getLanguageFromBitbucketStyle(dom.parentElement) || getLanguageFromEditorStyle(dom.parentElement) || dom.getAttribute('data-language')); dom = removeLastNewLine(dom); return { language: language }; } }, // Handle VSCode paste, it wraps copied content with // <div style="...white-space: pre;..."> { tag: 'div[style]', preserveWhitespace: 'full', getAttrs: function (dom) { if (dom.style.whiteSpace === 'pre' || dom.style.whiteSpace === 'pre-wrap' || (dom.style.fontFamily && dom.style.fontFamily.toLowerCase().indexOf('monospace') > -1)) { return {}; } return false; } }, // Handle GitHub/Gist paste { tag: 'table[style]', preserveWhitespace: 'full', getAttrs: function (dom) { if (dom.querySelector('td[class*="blob-code"]')) { return {}; } return false; } }], toDOM: function (node) { var className = prosemirror_1.browser.ie && prosemirror_1.browser.ie_version <= 11 ? 'ie11' : ''; return ['pre', { 'data-language': node.attrs.language, 'class': className }, 0]; } }; //# sourceMappingURL=code-block.js.map