UNPKG

@eccenca/gui-elements

Version:

GUI elements based on other libraries, usable in React application, written in Typescript.

52 lines 3.08 kB
import React from "react"; import { ContentBlobToggler, InlineText, Markdown, utils } from "./../../index.js"; /** Version of the content toggler for text centric content. */ export function StringPreviewContentBlobToggler(_a) { var _b = _a.className, className = _b === void 0 ? "" : _b, previewMaxLength = _a.previewMaxLength, toggleExtendText = _a.toggleExtendText, toggleReduceText = _a.toggleReduceText, content = _a.content, fullviewContent = _a.fullviewContent, startExtended = _a.startExtended, useOnly = _a.useOnly, _c = _a.renderPreviewAsMarkdown, renderPreviewAsMarkdown = _c === void 0 ? false : _c, allowedHtmlElementsInPreview = _a.allowedHtmlElementsInPreview, noTogglerContentSuffix = _a.noTogglerContentSuffix, firstNonEmptyLineOnly = _a.firstNonEmptyLineOnly; // need to test `firstNonEmptyLineOnly` until property is removed var useOnlyTest = firstNonEmptyLineOnly ? "firstNonEmptyLine" : useOnly; var previewString = content; switch (useOnlyTest) { case "firstNonEmptyLine": previewString = useOnlyPart(content, regexFirstNonEmptyLine); break; case "firstMarkdownSection": previewString = useOnlyPart(content, regexFirstMarkdownSection); } var enableToggler = previewString !== content; var previewContent = renderPreviewAsMarkdown ? (React.createElement(Markdown, { key: "markdown-content", allowedElements: allowedHtmlElementsInPreview }, previewString)) : (previewString); if (previewMaxLength && utils.reduceToText(previewContent, { decodeHtmlEntities: true }).length > previewMaxLength) { previewContent = utils.reduceToText(previewContent, { decodeHtmlEntities: true }).slice(0, previewMaxLength); enableToggler = true; } if (!enableToggler && noTogglerContentSuffix) { previewContent = (React.createElement(React.Fragment, null, previewContent, noTogglerContentSuffix)); } return (React.createElement(ContentBlobToggler, { className: className, previewContent: React.createElement(InlineText, null, previewContent), toggleExtendText: toggleExtendText, toggleReduceText: toggleReduceText, fullviewContent: fullviewContent, startExtended: startExtended, enableToggler: enableToggler })); } var regexFirstNonEmptyLine = new RegExp("\r|\n"); // eslint-disable-line var regexFirstMarkdownSection = new RegExp("\r\n\r\n|\n\n"); // eslint-disable-line /** * Takes the first non-empty line from a preview string. */ function firstNonEmptyLine(preview) { return useOnlyPart(preview, regexFirstNonEmptyLine); } /** * Returns only the first part from a preview string. * Or the full string as fallback. */ function useOnlyPart(preview, regexTest) { var previewString = preview.trim(); var result = regexTest.exec(previewString); return result !== null ? result.input.slice(0, result.index) : previewString; } export var stringPreviewContentBlobTogglerUtils = { firstNonEmptyLine: firstNonEmptyLine, }; //# sourceMappingURL=StringPreviewContentBlobToggler.js.map