@wordpress/block-library
Version:
Block library for the WordPress editor.
103 lines (102 loc) • 3.02 kB
JavaScript
// packages/block-library/src/file/transforms.js
import { createBlobURL } from "@wordpress/blob";
import { createBlock } from "@wordpress/blocks";
import { select } from "@wordpress/data";
import { store as coreStore } from "@wordpress/core-data";
import { _x } from "@wordpress/i18n";
import { getFilename } from "@wordpress/url";
var downloadButtonText = _x("Download", "button label");
var toMediaTransform = (blockName, mediaType, srcAttribute) => ({
type: "block",
blocks: [blockName],
isMatch: ({ id }) => {
if (!id) {
return false;
}
const { getEntityRecord } = select(coreStore);
const media = getEntityRecord("postType", "attachment", id, {
context: "view"
});
return !!media && media.mime_type.includes(mediaType);
},
transform: (attributes) => {
return createBlock(blockName, {
[srcAttribute]: attributes.href,
caption: attributes.fileName,
id: attributes.id,
anchor: attributes.anchor
});
}
});
var transforms = {
from: [
{
type: "files",
isMatch(files) {
return files.length > 0;
},
// We define a lower priority (higher number) than the default of 10. This
// ensures that the File block is only created as a fallback.
priority: 15,
transform: (files) => {
const blocks = [];
files.forEach((file) => {
const blobURL = createBlobURL(file);
if (file.type.startsWith("video/")) {
blocks.push(
createBlock("core/video", {
blob: createBlobURL(file)
})
);
} else if (file.type.startsWith("image/")) {
blocks.push(
createBlock("core/image", {
blob: createBlobURL(file)
})
);
} else if (file.type.startsWith("audio/")) {
blocks.push(
createBlock("core/audio", {
blob: createBlobURL(file)
})
);
} else {
blocks.push(
createBlock("core/file", {
blob: blobURL,
fileName: file.name,
downloadButtonText
})
);
}
});
return blocks;
}
},
{
type: "block",
blocks: ["core/audio", "core/video", "core/image"],
transform: (attributes) => {
const href = attributes.src ?? attributes.url;
return createBlock("core/file", {
href,
fileName: attributes.caption || getFilename(href),
textLinkHref: href,
id: attributes.id,
anchor: attributes.anchor,
downloadButtonText
});
}
}
],
to: [
toMediaTransform("core/audio", "audio", "src"),
toMediaTransform("core/video", "video", "src"),
toMediaTransform("core/image", "image", "url")
]
};
var transforms_default = transforms;
export {
transforms_default as default
};
//# sourceMappingURL=transforms.mjs.map