diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-16 21:25:58 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-16 21:25:58 +0300 |
commit | a5f4bba440d7f9ea47046a0a561d49adf0a1e6d4 (patch) | |
tree | fb69158581673816a8cd895f9d352dcb3c678b1e /app/assets/javascripts/static_site_editor/rich_content_editor/services/build_custom_renderer.js | |
parent | d16b2e8639e99961de6ddc93909f3bb5c1445ba1 (diff) |
Add latest changes from gitlab-org/gitlab@14-0-stable-eev14.0.0-rc42
Diffstat (limited to 'app/assets/javascripts/static_site_editor/rich_content_editor/services/build_custom_renderer.js')
-rw-r--r-- | app/assets/javascripts/static_site_editor/rich_content_editor/services/build_custom_renderer.js | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/app/assets/javascripts/static_site_editor/rich_content_editor/services/build_custom_renderer.js b/app/assets/javascripts/static_site_editor/rich_content_editor/services/build_custom_renderer.js new file mode 100644 index 00000000000..6ffd280e005 --- /dev/null +++ b/app/assets/javascripts/static_site_editor/rich_content_editor/services/build_custom_renderer.js @@ -0,0 +1,42 @@ +import { union, mapValues } from 'lodash'; +import renderAttributeDefinition from './renderers/render_attribute_definition'; +import renderFontAwesomeHtmlInline from './renderers/render_font_awesome_html_inline'; +import renderHeading from './renderers/render_heading'; +import renderBlockHtml from './renderers/render_html_block'; +import renderIdentifierInstanceText from './renderers/render_identifier_instance_text'; +import renderIdentifierParagraph from './renderers/render_identifier_paragraph'; +import renderListItem from './renderers/render_list_item'; +import renderSoftbreak from './renderers/render_softbreak'; + +const htmlInlineRenderers = [renderFontAwesomeHtmlInline]; +const htmlBlockRenderers = [renderBlockHtml]; +const headingRenderers = [renderHeading]; +const paragraphRenderers = [renderIdentifierParagraph, renderBlockHtml]; +const textRenderers = [renderIdentifierInstanceText, renderAttributeDefinition]; +const listItemRenderers = [renderListItem]; +const softbreakRenderers = [renderSoftbreak]; + +const executeRenderer = (renderers, node, context) => { + const availableRenderer = renderers.find((renderer) => renderer.canRender(node, context)); + + return availableRenderer ? availableRenderer.render(node, context) : context.origin(); +}; + +const buildCustomHTMLRenderer = (customRenderers) => { + const renderersByType = { + ...customRenderers, + htmlBlock: union(htmlBlockRenderers, customRenderers?.htmlBlock), + htmlInline: union(htmlInlineRenderers, customRenderers?.htmlInline), + heading: union(headingRenderers, customRenderers?.heading), + item: union(listItemRenderers, customRenderers?.listItem), + paragraph: union(paragraphRenderers, customRenderers?.paragraph), + text: union(textRenderers, customRenderers?.text), + softbreak: union(softbreakRenderers, customRenderers?.softbreak), + }; + + return mapValues(renderersByType, (renderers) => { + return (node, context) => executeRenderer(renderers, node, context); + }); +}; + +export default buildCustomHTMLRenderer; |