UNPKG

@wordpress/block-library

Version:
58 lines (57 loc) 2.09 kB
// packages/block-library/src/shortcode/transforms.js import { removep, autop } from "@wordpress/autop"; import { getBlockTransforms, rawHandler } from "@wordpress/blocks"; import { next } from "@wordpress/shortcode"; var getShortcodeFromTransforms = () => getBlockTransforms("from").filter( (transform) => transform.type === "shortcode" && transform.blockName !== "core/shortcode" ); var isSingleShortcode = (text, tag) => { const trimmed = text.trim(); const match = next(tag, trimmed); return !!match && match.index === 0 && match.content.length === trimmed.length; }; var transforms = { from: [ { type: "shortcode", // Per "Shortcode names should be all lowercase and use all // letters, but numbers and underscores should work fine too. // Be wary of using hyphens (dashes), you'll be better off not // using them." in https://codex.wordpress.org/Shortcode_API // Require that the first character be a letter. This notably // prevents footnote markings ([1]) from being caught as // shortcodes. tag: "[a-z][a-z0-9_-]*", attributes: { text: { type: "string", shortcode: (attrs, { content }) => { return removep(autop(content)); } } }, priority: 20 } ], // One `to` transform per registered shortcode-from block. A single transform // with a dynamic `blocks` list won't work: `isMatch` runs once per // transform, so all targets would surface (or none) regardless of which // shortcode tag the block actually contains. get to() { return getShortcodeFromTransforms().map((fromTransform) => ({ type: "block", blocks: [fromTransform.blockName], isMatch: ({ text }) => { return [].concat(fromTransform.tag).some((tag) => isSingleShortcode(text, tag)); }, transform: ({ text }) => { return rawHandler({ HTML: `<p>${text.trim()}</p>` }); } })); } }; var transforms_default = transforms; export { transforms_default as default }; //# sourceMappingURL=transforms.mjs.map