@wordpress/blocks
Version:
Block API for WordPress.
185 lines (183 loc) • 8.13 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// packages/blocks/src/api/raw-handling/paste-handler.js
var paste_handler_exports = {};
__export(paste_handler_exports, {
pasteHandler: () => pasteHandler
});
module.exports = __toCommonJS(paste_handler_exports);
var import_dom = require("@wordpress/dom");
var import_html_to_blocks = require("./html-to-blocks");
var import_registration = require("../registration");
var import_serializer = require("../serializer");
var import_parser = __toESM(require("../parser"));
var import_normalise_blocks = __toESM(require("./normalise-blocks"));
var import_special_comment_converter = __toESM(require("./special-comment-converter"));
var import_comment_remover = __toESM(require("./comment-remover"));
var import_is_inline_content = __toESM(require("./is-inline-content"));
var import_phrasing_content_reducer = __toESM(require("./phrasing-content-reducer"));
var import_head_remover = __toESM(require("./head-remover"));
var import_ms_list_converter = __toESM(require("./ms-list-converter"));
var import_ms_list_ignore = __toESM(require("./ms-list-ignore"));
var import_list_reducer = __toESM(require("./list-reducer"));
var import_image_corrector = __toESM(require("./image-corrector"));
var import_blockquote_normaliser = __toESM(require("./blockquote-normaliser"));
var import_div_normaliser = __toESM(require("./div-normaliser"));
var import_figure_content_reducer = __toESM(require("./figure-content-reducer"));
var import_shortcode_converter = __toESM(require("./shortcode-converter"));
var import_markdown_converter = __toESM(require("./markdown-converter"));
var import_iframe_remover = __toESM(require("./iframe-remover"));
var import_google_docs_uid_remover = __toESM(require("./google-docs-uid-remover"));
var import_html_formatting_remover = __toESM(require("./html-formatting-remover"));
var import_br_remover = __toESM(require("./br-remover"));
var import_utils = require("./utils");
var import_empty_paragraph_remover = __toESM(require("./empty-paragraph-remover"));
var import_slack_paragraph_corrector = __toESM(require("./slack-paragraph-corrector"));
var import_latex_to_math = __toESM(require("./latex-to-math"));
var import_factory = require("../factory");
var log = (...args) => window?.console?.log?.(...args);
function filterInlineHTML(HTML) {
HTML = (0, import_utils.deepFilterHTML)(HTML, [
import_head_remover.default,
import_google_docs_uid_remover.default,
import_ms_list_ignore.default,
import_phrasing_content_reducer.default,
import_comment_remover.default
]);
HTML = (0, import_dom.removeInvalidHTML)(HTML, (0, import_dom.getPhrasingContentSchema)("paste"), {
inline: true
});
HTML = (0, import_utils.deepFilterHTML)(HTML, [import_html_formatting_remover.default, import_br_remover.default]);
log("Processed inline HTML:\n\n", HTML);
return HTML;
}
function pasteHandler({
HTML = "",
plainText = "",
mode = "AUTO",
tagName
}) {
HTML = HTML.replace(/<meta[^>]+>/g, "");
HTML = HTML.replace(
/^\s*<html[^>]*>\s*<body[^>]*>(?:\s*<!--\s*StartFragment\s*-->)?/i,
""
);
HTML = HTML.replace(
/(?:<!--\s*EndFragment\s*-->\s*)?<\/body>\s*<\/html>\s*$/i,
""
);
if (mode !== "INLINE") {
const content = HTML ? HTML : plainText;
if (content.indexOf("<!-- wp:") !== -1) {
const parseResult = (0, import_parser.default)(content);
const isSingleFreeFormBlock = parseResult.length === 1 && parseResult[0].name === "core/freeform";
if (!isSingleFreeFormBlock) {
return parseResult;
}
}
}
if (String.prototype.normalize) {
HTML = HTML.normalize();
}
HTML = (0, import_utils.deepFilterHTML)(HTML, [import_slack_paragraph_corrector.default]);
const isPlainText = plainText && (!HTML || (0, import_utils.isPlain)(HTML));
if (isPlainText && (0, import_latex_to_math.default)(plainText)) {
return [(0, import_factory.createBlock)("core/math", { latex: plainText })];
}
if (isPlainText) {
HTML = plainText;
if (!/^\s+$/.test(plainText)) {
HTML = (0, import_markdown_converter.default)(HTML);
}
}
const pieces = (0, import_shortcode_converter.default)(HTML);
const hasShortcodes = pieces.length > 1;
if (isPlainText && !hasShortcodes) {
if (mode === "AUTO" && plainText.indexOf("\n") === -1 && plainText.indexOf("<p>") !== 0 && HTML.indexOf("<p>") === 0) {
mode = "INLINE";
}
}
if (mode === "INLINE") {
return filterInlineHTML(HTML);
}
if (mode === "AUTO" && !hasShortcodes && (0, import_is_inline_content.default)(HTML, tagName)) {
return filterInlineHTML(HTML);
}
const phrasingContentSchema = (0, import_dom.getPhrasingContentSchema)("paste");
const blockContentSchema = (0, import_utils.getBlockContentSchema)("paste");
const blocks = pieces.map((piece) => {
if (typeof piece !== "string") {
return piece;
}
const filters = [
import_google_docs_uid_remover.default,
import_ms_list_converter.default,
import_head_remover.default,
import_list_reducer.default,
import_image_corrector.default,
import_phrasing_content_reducer.default,
import_special_comment_converter.default,
import_comment_remover.default,
import_iframe_remover.default,
import_figure_content_reducer.default,
(0, import_blockquote_normaliser.default)(),
import_div_normaliser.default
];
const schema = {
...blockContentSchema,
// Keep top-level phrasing content, normalised by `normaliseBlocks`.
...phrasingContentSchema
};
piece = (0, import_utils.deepFilterHTML)(piece, filters, blockContentSchema);
piece = (0, import_dom.removeInvalidHTML)(piece, schema);
piece = (0, import_normalise_blocks.default)(piece);
piece = (0, import_utils.deepFilterHTML)(
piece,
[import_html_formatting_remover.default, import_br_remover.default, import_empty_paragraph_remover.default],
blockContentSchema
);
log("Processed HTML piece:\n\n", piece);
return (0, import_html_to_blocks.htmlToBlocks)(piece, pasteHandler);
}).flat().filter(Boolean);
if (mode === "AUTO" && blocks.length === 1 && (0, import_registration.hasBlockSupport)(blocks[0].name, "__unstablePasteTextInline", false)) {
const trimRegex = /^[\n]+|[\n]+$/g;
const trimmedPlainText = plainText.replace(trimRegex, "");
if (trimmedPlainText !== "" && trimmedPlainText.indexOf("\n") === -1) {
return (0, import_dom.removeInvalidHTML)(
(0, import_serializer.getBlockInnerHTML)(blocks[0]),
phrasingContentSchema
).replace(trimRegex, "");
}
}
return blocks;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
pasteHandler
});
//# sourceMappingURL=paste-handler.js.map