rich-text-solid-renderer
Version:
contentful rich text renderer for solid js
178 lines (177 loc) • 4.62 kB
JavaScript
/** @format */
export var MARKS;
(function (MARKS) {
MARKS["BOLD"] = "bold";
MARKS["ITALIC"] = "italic";
MARKS["UNDERLINE"] = "underline";
MARKS["CODE"] = "code";
})(MARKS || (MARKS = {}));
/**
* Map of all Contentful block types. Blocks contain inline or block nodes.
*/
export var BLOCKS;
(function (BLOCKS) {
BLOCKS["DOCUMENT"] = "document";
BLOCKS["PARAGRAPH"] = "paragraph";
BLOCKS["HEADING_1"] = "heading-1";
BLOCKS["HEADING_2"] = "heading-2";
BLOCKS["HEADING_3"] = "heading-3";
BLOCKS["HEADING_4"] = "heading-4";
BLOCKS["HEADING_5"] = "heading-5";
BLOCKS["HEADING_6"] = "heading-6";
BLOCKS["OL_LIST"] = "ordered-list";
BLOCKS["UL_LIST"] = "unordered-list";
BLOCKS["LIST_ITEM"] = "list-item";
BLOCKS["HR"] = "hr";
BLOCKS["QUOTE"] = "blockquote";
BLOCKS["EMBEDDED_ENTRY"] = "embedded-entry-block";
BLOCKS["EMBEDDED_ASSET"] = "embedded-asset-block";
BLOCKS["TABLE"] = "table";
BLOCKS["TABLE_ROW"] = "table-row";
BLOCKS["TABLE_CELL"] = "table-cell";
BLOCKS["TABLE_HEADER_CELL"] = "table-header-cell";
})(BLOCKS || (BLOCKS = {}));
export var INLINES;
(function (INLINES) {
INLINES["HYPERLINK"] = "hyperlink";
INLINES["ENTRY_HYPERLINK"] = "entry-hyperlink";
INLINES["ASSET_HYPERLINK"] = "asset-hyperlink";
INLINES["EMBEDDED_ENTRY"] = "embedded-entry-inline";
})(INLINES || (INLINES = {}));
/**
* Array of all top level block types.
* Only these block types can be the direct children of the document.
*/
export const TOP_LEVEL_BLOCKS = [
BLOCKS.PARAGRAPH,
BLOCKS.HEADING_1,
BLOCKS.HEADING_2,
BLOCKS.HEADING_3,
BLOCKS.HEADING_4,
BLOCKS.HEADING_5,
BLOCKS.HEADING_6,
BLOCKS.OL_LIST,
BLOCKS.UL_LIST,
BLOCKS.HR,
BLOCKS.QUOTE,
BLOCKS.EMBEDDED_ENTRY,
BLOCKS.EMBEDDED_ASSET,
BLOCKS.TABLE,
];
/**
* Array of all allowed block types inside list items
*/
export const LIST_ITEM_BLOCKS = [
BLOCKS.PARAGRAPH,
BLOCKS.HEADING_1,
BLOCKS.HEADING_2,
BLOCKS.HEADING_3,
BLOCKS.HEADING_4,
BLOCKS.HEADING_5,
BLOCKS.HEADING_6,
BLOCKS.OL_LIST,
BLOCKS.UL_LIST,
BLOCKS.HR,
BLOCKS.QUOTE,
BLOCKS.EMBEDDED_ENTRY,
BLOCKS.EMBEDDED_ASSET,
];
export const TABLE_BLOCKS = [
BLOCKS.TABLE,
BLOCKS.TABLE_ROW,
BLOCKS.TABLE_CELL,
BLOCKS.TABLE_HEADER_CELL,
];
/**
* Array of all void block types
*/
export const VOID_BLOCKS = [
BLOCKS.HR,
BLOCKS.EMBEDDED_ENTRY,
BLOCKS.EMBEDDED_ASSET,
];
/**
* Dictionary of all container block types, and the set block types they accept as children.
*
* Note: This does not include `[BLOCKS.DOCUMENT]: TOP_LEVEL_BLOCKS`
*/
export const CONTAINERS = {
[BLOCKS.OL_LIST]: [BLOCKS.LIST_ITEM],
[BLOCKS.UL_LIST]: [BLOCKS.LIST_ITEM],
[BLOCKS.LIST_ITEM]: LIST_ITEM_BLOCKS,
[BLOCKS.QUOTE]: [BLOCKS.PARAGRAPH],
[BLOCKS.TABLE]: [BLOCKS.TABLE_ROW],
[BLOCKS.TABLE_ROW]: [BLOCKS.TABLE_CELL, BLOCKS.TABLE_HEADER_CELL],
[BLOCKS.TABLE_CELL]: [BLOCKS.PARAGRAPH],
[BLOCKS.TABLE_HEADER_CELL]: [BLOCKS.PARAGRAPH],
};
/**
* Array of all heading levels
*/
export const HEADINGS = [
BLOCKS.HEADING_1,
BLOCKS.HEADING_2,
BLOCKS.HEADING_3,
BLOCKS.HEADING_4,
BLOCKS.HEADING_5,
BLOCKS.HEADING_6,
];
/**
* Array of all block types that may contain text and inline nodes.
*/
export const TEXT_CONTAINERS = [BLOCKS.PARAGRAPH, ...HEADINGS];
/**
* Node types before `tables` release.
*/
export const V1_NODE_TYPES = [
BLOCKS.DOCUMENT,
BLOCKS.PARAGRAPH,
BLOCKS.HEADING_1,
BLOCKS.HEADING_2,
BLOCKS.HEADING_3,
BLOCKS.HEADING_4,
BLOCKS.HEADING_5,
BLOCKS.HEADING_6,
BLOCKS.OL_LIST,
BLOCKS.UL_LIST,
BLOCKS.LIST_ITEM,
BLOCKS.HR,
BLOCKS.QUOTE,
BLOCKS.EMBEDDED_ENTRY,
BLOCKS.EMBEDDED_ASSET,
INLINES.HYPERLINK,
INLINES.ENTRY_HYPERLINK,
INLINES.ASSET_HYPERLINK,
INLINES.EMBEDDED_ENTRY,
'text',
];
/**
* Tiny replacement for Object.values(object).includes(key) to
* avoid including CoreJS polyfills
*/
function hasValue(obj, value) {
for (const key of Object.keys(obj)) {
if (value === obj[key]) {
return true;
}
}
return false;
}
/**
* Checks if the node is an instance of Inline.
*/
export function isInline(node) {
return hasValue(INLINES, node.nodeType);
}
/**
* Checks if the node is an instance of Block.
*/
export function isBlock(node) {
return hasValue(BLOCKS, node.nodeType);
}
/**
* Checks if the node is an instance of Text.
*/
export function isText(node) {
return node.nodeType === 'text';
}