@eccenca/gui-elements
Version:
GUI elements based on other libraries, usable in React application, written in Typescript.
58 lines • 3.15 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.stringPreviewContentBlobTogglerUtils = void 0;
exports.StringPreviewContentBlobToggler = StringPreviewContentBlobToggler;
const react_1 = __importDefault(require("react"));
const index_1 = require("./../../index");
/** Version of the content toggler for text centric content. */
function StringPreviewContentBlobToggler({ className = "", previewMaxLength, toggleExtendText, toggleReduceText, content, fullviewContent, startExtended, useOnly, renderPreviewAsMarkdown = false, allowedHtmlElementsInPreview, noTogglerContentSuffix, firstNonEmptyLineOnly, }) {
// need to test `firstNonEmptyLineOnly` until property is removed
const useOnlyTest = firstNonEmptyLineOnly
? "firstNonEmptyLine"
: useOnly;
let previewString = content;
switch (useOnlyTest) {
case "firstNonEmptyLine":
previewString = useOnlyPart(content, regexFirstNonEmptyLine);
break;
case "firstMarkdownSection":
previewString = useOnlyPart(content, regexFirstMarkdownSection);
}
let enableToggler = previewString !== content;
let previewContent = renderPreviewAsMarkdown ? (react_1.default.createElement(index_1.Markdown, { key: "markdown-content", allowedElements: allowedHtmlElementsInPreview }, previewString)) : (previewString);
if (previewMaxLength &&
index_1.utils.reduceToText(previewContent, { decodeHtmlEntities: true }).length > previewMaxLength) {
previewContent = index_1.utils.reduceToText(previewContent, { decodeHtmlEntities: true }).slice(0, previewMaxLength);
enableToggler = true;
}
if (!enableToggler && noTogglerContentSuffix) {
previewContent = (react_1.default.createElement(react_1.default.Fragment, null,
previewContent,
noTogglerContentSuffix));
}
return (react_1.default.createElement(index_1.ContentBlobToggler, { className: className, previewContent: react_1.default.createElement(index_1.InlineText, null, previewContent), toggleExtendText: toggleExtendText, toggleReduceText: toggleReduceText, fullviewContent: fullviewContent, startExtended: startExtended, enableToggler: enableToggler }));
}
const regexFirstNonEmptyLine = new RegExp("\r|\n"); // eslint-disable-line
const 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) {
const previewString = preview.trim();
const result = regexTest.exec(previewString);
return result !== null ? result.input.slice(0, result.index) : previewString;
}
exports.stringPreviewContentBlobTogglerUtils = {
firstNonEmptyLine,
};
//# sourceMappingURL=StringPreviewContentBlobToggler.js.map