1.0.0 • Published 3 years ago

@taller/wordpress-classic-parser v1.0.0

Weekly downloads
-
License
MPL-2.0
Repository
github
Last release
3 years ago

Wordpress Classic Parser

This lib helps to parser wordpress content generated by the Classic Editor.

For content generated using blocks we have a Wordpress package called block-serialization-default-parser to parse the content and provide structured data. However, the mentioned lib is not able to parse content generated by the Classic Editor. Then, this lib was developed to do that.

How to install

yarn add @taller/wordpress-classic-parser or

npm install @taller/wordpress-classic-parser

How to use

Using this lib is quite simple. You just need use the parse method and provide the Raw Content (that one containing shortcodes, before of being rendered).

parse(content /*: string */, options /*?: Object */);`

Parse given content, and return an object with structured content.

import { parse } from "@taller/wordpress-classic-parser";

const content = "Text\r\n[embed]https://www.twitter.com.br/some-url[/embed]";
parse(content);
/*
[
  {
    type: "paragraph",
    children: [
      {
        type: "text",
        value: "Text",
      },
      {
        type: "tag",
        tag: "br",
        attrs: {},
        children: [],
      },
      {
        type: "embed:twitter",
        value: "https://www.twitter.com.br/some-url",
        attrs: {
          named: {},
          numeric: [],
        },
      },
    ],
  },
]
*/

By default, the content provided will be preprocessed and all the breaklines (\r\n, \n, \, \ and \) will be replaced for the tag \. Also, all the tabulation (\t) will be removed.

Options

{
    contentPreprocessor?: (content: string) => string;
    embedTypeProcessor?: (shortcode: Shortcode) => string;
}

contentPreprocessor

Allow to preprocess the content to be parsed. Receive the original content as argument. As example, if you want to replace the breaklines for \ tags, you can do that:

import { parse } from "@taller/wordpress-classic-parser";

const content = "Text\r\nAnother Text";
const options = {
  contentPreprocessor: (content) => content.replace(/\r\n/, "<hr />"),
};

parse(content, options);
/*
[
  {
    type: "paragraph",
    children: [
      {
        type: "text",
        value: "Text",
      },
      {
        type: "tag",
        tag: "hr",
        attrs: {},
        children: [],
      },
      {
        type: "text",
        value: "Another Text",
      },
    ],
  },
]
*/

embedTypeProcessor

Allow to define the embed type as you need. Receive a Shortcode as argument. As example, if you want to define your custom embed type, you can do that:

import { parse } from "@taller/wordpress-classic-parser";

const content = "Text[embed]https://www.twitter.com.br/some-url[/embed]";
const options = {
  embedTypeProcessor: (shortcode) => {
    const { type } = shortcode;
    return type === "closed" ? "embed:closed" : "embed:notclosed";
  },
};

parse(content, options);
/*
[
  {
    type: "paragraph",
    children: [
      {
        type: "text",
        value: "Text",
      },
      {
        type: "embed:closed",
        value: "https://www.twitter.com.br/some-url",
        attrs: {
          named: {},
          numeric: [],
        },
      },
    ],
  },
]
*/

Contributing

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -m 'feat: Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D