@wordpress/block-library
Version:
Block library for the WordPress editor.
167 lines (165 loc) • 5.82 kB
JavaScript
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// packages/block-library/src/footnotes/format.js
var format_exports = {};
__export(format_exports, {
format: () => format,
formatName: () => formatName
});
module.exports = __toCommonJS(format_exports);
var import_uuid = require("uuid");
var import_i18n = require("@wordpress/i18n");
var import_icons = require("@wordpress/icons");
var import_rich_text = require("@wordpress/rich-text");
var import_block_editor = require("@wordpress/block-editor");
var import_data = require("@wordpress/data");
var import_core_data = require("@wordpress/core-data");
var import_blocks = require("@wordpress/blocks");
var import_lock_unlock = require("../lock-unlock");
var import_jsx_runtime = require("react/jsx-runtime");
var { usesContextKey } = (0, import_lock_unlock.unlock)(import_block_editor.privateApis);
var formatName = "core/footnote";
var POST_CONTENT_BLOCK_NAME = "core/post-content";
var SYNCED_PATTERN_BLOCK_NAME = "core/block";
var format = {
title: (0, import_i18n.__)("Footnote"),
tagName: "sup",
className: "fn",
attributes: {
"data-fn": "data-fn"
},
interactive: true,
contentEditable: false,
[usesContextKey]: ["postType", "postId"],
edit: function Edit({
value,
onChange,
isObjectActive,
context: { postType, postId }
}) {
const registry = (0, import_data.useRegistry)();
const {
getSelectedBlockClientId,
getBlocks,
getBlockRootClientId,
getBlockName,
getBlockParentsByBlockName
} = registry.select(import_block_editor.store);
const isFootnotesSupported = (0, import_data.useSelect)(
(select) => {
if (!select(import_blocks.store).getBlockType("core/footnotes")) {
return false;
}
const allowedBlocks = select(import_block_editor.store).getSettings().allowedBlockTypes;
if (allowedBlocks === false || Array.isArray(allowedBlocks) && !allowedBlocks.includes("core/footnotes")) {
return false;
}
const entityRecord = select(import_core_data.store).getEntityRecord(
"postType",
postType,
postId
);
if ("string" !== typeof entityRecord?.meta?.footnotes) {
return false;
}
const {
getBlockParentsByBlockName: _getBlockParentsByBlockName,
getSelectedBlockClientId: _getSelectedBlockClientId
} = select(import_block_editor.store);
const parentCoreBlocks = _getBlockParentsByBlockName(
_getSelectedBlockClientId(),
SYNCED_PATTERN_BLOCK_NAME
);
return !parentCoreBlocks || parentCoreBlocks.length === 0;
},
[postType, postId]
);
const { selectionChange, insertBlock } = (0, import_data.useDispatch)(import_block_editor.store);
if (!isFootnotesSupported) {
return null;
}
function onClick() {
registry.batch(() => {
let id;
if (isObjectActive) {
const object = value.replacements[value.start];
id = object?.attributes?.["data-fn"];
} else {
id = (0, import_uuid.v4)();
const newValue = (0, import_rich_text.insertObject)(
value,
{
type: formatName,
attributes: {
"data-fn": id
},
innerHTML: `<a href="#${id}" id="${id}-link">*</a>`
},
value.end,
value.end
);
newValue.start = newValue.end - 1;
onChange(newValue);
}
const selectedClientId = getSelectedBlockClientId();
const parentPostContent = getBlockParentsByBlockName(
selectedClientId,
POST_CONTENT_BLOCK_NAME
);
const blocks = parentPostContent.length ? getBlocks(parentPostContent[0]) : getBlocks();
let fnBlock = null;
{
const queue = [...blocks];
while (queue.length) {
const block = queue.shift();
if (block.name === "core/footnotes") {
fnBlock = block;
break;
}
queue.push(...block.innerBlocks);
}
}
if (!fnBlock) {
let rootClientId = getBlockRootClientId(selectedClientId);
while (rootClientId && getBlockName(rootClientId) !== POST_CONTENT_BLOCK_NAME) {
rootClientId = getBlockRootClientId(rootClientId);
}
fnBlock = (0, import_blocks.createBlock)("core/footnotes");
insertBlock(fnBlock, void 0, rootClientId);
}
selectionChange(fnBlock.clientId, id, 0, 0);
});
}
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
import_block_editor.RichTextToolbarButton,
{
icon: import_icons.formatListNumbered,
title: (0, import_i18n.__)("Footnote"),
onClick,
isActive: isObjectActive
}
);
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
format,
formatName
});
//# sourceMappingURL=format.js.map