@atlaskit/renderer
Version:
Renderer component
473 lines (466 loc) • 14 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/defineProperty";
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
/* eslint-disable @atlaskit/editor/no-re-export */
// Mapping file
import Loadable from 'react-loadable';
import { UnsupportedBlock, UnsupportedInline } from '@atlaskit/editor-common/ui';
import { fg } from '@atlaskit/platform-feature-flags';
import Blockquote from './blockquote';
import BodiedExtension from './bodiedExtension';
import MultiBodiedExtension from './multiBodiedExtension';
import ExtensionFrame from './extensionFrame';
import BulletList from './bulletList';
import Doc, { DocWithSelectAllTrap } from './doc';
import Extension from './extension';
import HardBreak from './hardBreak';
import Heading from './heading';
import InlineExtension from './inlineExtension';
import LayoutSection from './layoutSection';
import LayoutColumn from './layoutColumn';
import ListItem from './listItem';
import Caption from './caption';
import OrderedList from './orderedList';
import Paragraph from './paragraph';
import Placeholder from './placeholder';
import Rule from './rule';
import Table from './table';
import { TableCell, TableHeader } from './tableCell';
import TableRow from './tableRow';
import UnknownBlock from './unknownBlock';
// Ignored via go/ees005
// eslint-disable-next-line import/no-named-as-default
var WindowedCodeBlock = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_WindowedCodeBlock" */
'./codeBlock/windowedCodeBlock').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var CodeBlock = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_CodeBlock" */
'./codeBlock/codeBlock').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var TaskList = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_TaskList" */
'./taskList').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var TaskItem = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_TaskItem" */
'./taskItem').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var DecisionList = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_DecisionList" */
'./decisionList').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var DecisionItem = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_DecisionItem" */
'./decisionItem').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var Date = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_Date" */
'./date').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var Status = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_Status" */
'./status').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var Emoji = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_Emoji" */
'./emoji').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var Panel = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_Panel" */
'./panel').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var EmbedCard = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_EmbedCard" */
'./embedCard').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var InlineCard = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_InlineCard" */
'./inlineCard').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var BlockCard = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_BlockCard" */
'./blockCard').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var Media = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_Media" */
'./media').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var MediaGroup = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_MediaGroup" */
'./mediaGroup').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var MediaInline = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_MediaInline" */
'./mediaInline').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var MediaSingle = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_MediaSingle" */
'./mediaSingle').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var Mention = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_Mention" */
'./mention').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var Expand = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_Expand" */
'../../ui/Expand').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var SyncBlockLoader = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_SyncBlock" */
'./syncBlock').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
var BodiedSyncBlock = Loadable({
loader: function loader() {
return import( /* webpackChunkName: "@atlaskit-internal_renderer-node_BodiedSyncBlock" */'./bodiedSyncBlock').then(function (mod) {
return mod.default;
});
},
loading: function loading() {
return null;
}
});
export var nodeToReact = {
blockquote: Blockquote,
bulletList: BulletList,
blockCard: BlockCard,
caption: Caption,
date: Date,
decisionItem: DecisionItem,
decisionList: DecisionList,
doc: Doc,
emoji: Emoji,
extension: Extension,
bodiedExtension: BodiedExtension,
multiBodiedExtension: MultiBodiedExtension,
extensionFrame: ExtensionFrame,
hardBreak: HardBreak,
heading: Heading,
inlineCard: InlineCard,
inlineExtension: InlineExtension,
layoutSection: LayoutSection,
layoutColumn: LayoutColumn,
listItem: ListItem,
media: Media,
mediaGroup: MediaGroup,
mediaInline: MediaInline,
mediaSingle: MediaSingle,
mention: Mention,
orderedList: OrderedList,
panel: Panel,
panel_c1: Panel,
paragraph: Paragraph,
placeholder: Placeholder,
rule: Rule,
status: Status,
taskItem: TaskItem,
taskList: TaskList,
table: Table,
tableCell: TableCell,
tableHeader: TableHeader,
tableRow: TableRow,
unknownBlock: UnknownBlock,
unsupportedBlock: UnsupportedBlock,
unsupportedInline: UnsupportedInline,
expand: Expand,
syncBlock: SyncBlockLoader,
bodiedSyncBlock: BodiedSyncBlock,
nestedExpand: Expand,
embedCard: EmbedCard,
blockTaskItem: TaskItem
};
export var toReact = function toReact(node, flags, nodeComponents
// Ignored via go/ees005
// eslint-disable-next-line @typescript-eslint/no-explicit-any
) {
if (node.type.name === 'doc' && (flags === null || flags === void 0 ? void 0 : flags.allowSelectAllTrap) === true) {
return DocWithSelectAllTrap;
}
if (!fg('jfp-magma-ssr-iv-editor-codeblock')) {
if (node.type.name === 'codeBlock') {
if ((flags === null || flags === void 0 ? void 0 : flags.allowWindowedCodeBlock) === true) {
return WindowedCodeBlock;
}
return CodeBlock;
}
}
// Allowing custom components to override those provided in nodeToReact
var nodes = _objectSpread(_objectSpread({}, nodeToReact), nodeComponents);
if (fg('jfp-magma-ssr-iv-editor-codeblock')) {
if (node.type.name === 'codeBlock') {
var _nodes$codeBlock;
if ((flags === null || flags === void 0 ? void 0 : flags.allowWindowedCodeBlock) === true) {
var _nodes$windowedCodeBl;
return (_nodes$windowedCodeBl = nodes.windowedCodeBlock) !== null && _nodes$windowedCodeBl !== void 0 ? _nodes$windowedCodeBl : WindowedCodeBlock;
}
return (_nodes$codeBlock = nodes.codeBlock) !== null && _nodes$codeBlock !== void 0 ? _nodes$codeBlock : CodeBlock;
}
}
nodes['multiBodiedExtension'] = MultiBodiedExtension;
return nodes[node.type.name];
};
/*
* Wraps adjacent textnodes in a textWrapper
*
* Input:
* [
* {
* type: 'text',
* text: 'Hello'
* },
* {
* type: 'text',
* text: 'World!',
* marks: [
* {
* type: 'strong'
* }
* ]
* }
* ]
*
* Output:
* [
* {
* type: 'textWrapper',
* content: [
* {
* type: 'text',
* text: 'Hello'
* },
* {
* type: 'text',
* text: 'World!',
* marks: [
* {
* type: 'strong'
* }
* ]
* }
* ]
* }
* ]
*/
export var mergeTextNodes = function mergeTextNodes(nodes) {
return nodes.reduce(function (acc, current) {
if (!isText(current.type.name)) {
acc.push(current);
return acc;
}
// Append node to previous node, if it was a text wrapper
if (acc.length > 0 && isTextWrapper(acc[acc.length - 1])) {
var textWrapper = acc[acc.length - 1];
// Ignored via go/ees005
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
textWrapper.content.push(current);
textWrapper.nodeSize += current.nodeSize;
} else {
acc.push({
type: {
name: 'textWrapper'
},
content: [current],
nodeSize: current.nodeSize
});
}
return acc;
}, []);
};
export var isText = function isText(type) {
return type === 'text';
};
export var isTextWrapper = function isTextWrapper(node) {
return node.type.name === 'textWrapper';
};
export function isTextNode(node) {
return node.type.name === 'text';
}
// Ignored via go/ees005
// eslint-disable-next-line require-unicode-regexp
var whitespaceRegex = /^\s*$/;
/**
* Detects whether a fragment contains a single paragraph node
* whose content satisfies the condition for an emoji block
*/
export var isEmojiDoc = function isEmojiDoc(doc) {
if (doc.childCount !== 1) {
return false;
}
var parentNodes = [];
doc.forEach(function (child) {
return parentNodes.push(child);
});
var node = parentNodes[0];
return node.type.name === 'paragraph' && isEmojiBlock(node.content);
};
var isEmojiBlock = function isEmojiBlock(pnode) {
var content = [];
// Optimisation for long documents - worst case block will be space-emoji-space
if (pnode.childCount > 7) {
return false;
}
pnode.forEach(function (child) {
return content.push(child);
});
var emojiCount = 0;
for (var i = 0; i < content.length; ++i) {
var node = content[i];
switch (node.type.name) {
case 'text':
if (node.text && !node.text.match(whitespaceRegex)) {
return false;
}
continue;
case 'emoji':
if (++emojiCount > 3) {
return false;
}
continue;
default:
// Only text and emoji nodes are allowed
return false;
}
}
return emojiCount > 0;
};
export { Blockquote, BodiedExtension, BulletList, BlockCard, Caption, CodeBlock, WindowedCodeBlock, Date, DecisionItem, DecisionList, Doc, DocWithSelectAllTrap, Emoji, Extension, ExtensionFrame, Expand, HardBreak, Heading, ListItem, InlineCard, InlineExtension, LayoutSection, LayoutColumn, Media, MediaGroup, MediaInline, MediaSingle, Mention, MultiBodiedExtension, OrderedList, Panel, Paragraph, Placeholder, Rule, Status, TaskItem, TaskList, Table, TableCell, TableRow, UnknownBlock, EmbedCard };