2.1.6 • Published 5 months ago

@slate-serializers/html v2.1.6

Weekly downloads
-
License
-
Repository
-
Last release
5 months ago

@slate-serializers/html

Convert Slate JSON objects to HTML and vice versa.

View the demo at https://thompsonsj.github.io/slate-serializers-demo.

Engineering

For details on how all serializers work, see Engineering decisions.

Install

yarn add @slate-serializers/html
# or
npm install @slate-serializers/html

Usage

slateToHtml

import { slateToHtml } from '@slate-serializers/html'

const slate = [
  {
    children: [
      {
        text: 'Heading 1',
      },
    ],
    type: 'h1',
  },
  {
    children: [
      {
        text: 'Paragraph 1',
      },
    ],
    type: 'p',
  },
]

const serializedToHtml = slateToHtml(slate)
// output
// <h1>Heading 1</h1><p>Paragraph 1</p>

Configuration

By default, slateToHtml incorporates transformation rules based on the example in Deserializing | Serializing | Slate.

Payload CMS

If you are using Payload CMS, import the Payload configuration file and pass it as a parameter to the serializer.

import { slateToHtml, payloadSlateToHtmlConfig } from '@slate-serializers/html'

const slate = [
  {
    children: [
      {
        text: 'Heading 1',
      },
    ],
    type: 'h1',
  },
]

const serializedToHtml = slateToHtml(slate, payloadSlateToHtmlConfig)
Custom configuration

You can create your own configuration file that implements your schema. See packages/dom/src/lib/config/payload.ts for an example of how to extend the default configuration or copy packages/dom/src/lib/config/default.ts and rewrite it as appropriate.

OptionDescriptionDefault
markMapMap Slate JSON properties to HTML formatting element tags. Accepts an array of HTML element tag names.See default config. Example: { code: ['pre', 'code'], /* ... */ }
elementMapMap Slate JSON type values to HTML element tags. Use elementTransforms for more control over the returned element.See default config. Example: { paragraph: 'p', /* ... */ }
markTransformsDefine transform functions for Slate JSON properties. Overrides and corresponding values in markMap.{ fontSize: ({ node }) => { return new Element('span', { style: `font-size:${node.fontSize};` }) } }
elementTransformsDefine transform functions for Slate JSON node types. Overrides and corresponding values in elementMap.See default config.
encodeEntitiesSee cheeriojs/dom-serializer - encodeEntitiestrue
alwaysEncodeBreakingEntitiesEncode &, < and > regardless of other option settings.false
alwaysEncodeCodeEntitiesEncode entities in <pre> tags regardless of other option settings.true
convertLineBreakToBrConvert \n line breaks in Slate text nodes to an HTML <br> element.true

htmlToSlate

import { htmlToSlate } from '@slate-serializers/html'

const html = `<h1>Heading 1</h1><p>Paragraph 1</p>`

const serializedToSlate = htmlToSlate(html)
// output
/*
[
  {
    children: [
      {
        text: 'Heading 1',
      },
    ],
    type: 'h1',
  },
  {
    children: [
      {
        text: 'Paragraph 1',
      },
    ],
    type: 'p',
  },
]
/*

Configuration

By default, htmlToSlate incorporates transformation rules based on the example in HTML | Serializing | Slate.

Payload CMS

If you are using Payload CMS, import the Payload configuration file and pass it as a parameter to the serializer.

import { htmlToSlate, payloadHtmlToSlateConfig } from '@slate-serializers/html'

const html = `<h1>Heading 1</h1><p>Paragraph 1</p>`

const serializedToSlate = htmlToSlate(html, payloadHtmlToSlateConfig)
Custom configuration

You can create your own configuration file that implements your schema. See packages/html/src/lib/serializers/htmlToSlate/config/payload.ts for an example of how to extend the default configuration or copy packages/html/src/lib/serializers/htmlToSlate/config/default.ts and rewrite it as appropriate.

OptionDescriptionDefault
textTagsDefine transform functions for HTML formatting elements.See default config. Example { i: () => ({ italic: true }), /* ... */ }.
elementTagsDefine transform functions for HTML element tag names.See default config. Example { p: () => ({ type: 'p' }), /* ... */ }.
htmlPreProcessStringPerform operations on the HTML string before serialization.(html) => html.replace(/<pre[^>]*>/g, '<code>').replace(/<\/pre>/g, '</code>')/ ... / }`.
filterWhitespaceNodesRemove whitespace that does not contribute meaning.true
convertBrToLineBreakConvert br tags to a new line character (\n).true
2.1.4

5 months ago

2.1.6

5 months ago

2.1.5

5 months ago

2.1.3

5 months ago

2.1.2

5 months ago

2.1.1

5 months ago

2.1.0

7 months ago

2.0.1

8 months ago

2.0.0

9 months ago

1.0.2

9 months ago

1.0.1

9 months ago

1.0.0

9 months ago

0.6.7

10 months ago

0.6.6

10 months ago

0.6.5

10 months ago

0.6.4

10 months ago

0.6.3

10 months ago

0.6.2

10 months ago

0.6.1

10 months ago

0.6.0

10 months ago

0.5.3

10 months ago

0.5.2

10 months ago

0.4.2

10 months ago

0.4.1

10 months ago