UNPKG

rich-text-solid-renderer

Version:

contentful rich text renderer for solid js

178 lines (177 loc) 4.62 kB
/** @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'; }