@wordpress/block-library
Version:
Block library for the WordPress editor.
145 lines (144 loc) • 3.92 kB
JavaScript
// packages/block-library/src/table-of-contents/deprecated.jsx
import { useBlockProps } from "@wordpress/block-editor";
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
var ENTRY_CLASS_NAME = "wp-block-table-of-contents__entry";
var attributes = {
headings: {
type: "array",
items: {
type: "object"
},
default: []
},
onlyIncludeCurrentPage: {
type: "boolean",
default: false
},
maxLevel: {
type: "number"
},
ordered: {
type: "boolean",
default: true
}
};
var supports = {
anchor: true,
ariaLabel: true,
html: false,
color: {
text: true,
background: true,
gradients: true,
link: true
},
spacing: {
margin: true,
padding: true
},
typography: {
fontSize: true,
lineHeight: true,
__experimentalFontFamily: true,
__experimentalFontWeight: true,
__experimentalFontStyle: true,
__experimentalTextTransform: true,
__experimentalTextDecoration: true,
__experimentalLetterSpacing: true,
__experimentalDefaultControls: {
fontSize: true
}
},
interactivity: {
clientNavigation: true
},
__experimentalBorder: {
radius: true,
color: true,
width: true,
style: true,
__experimentalDefaultControls: {
radius: true,
color: true,
width: true,
style: true
}
}
};
function linearToNestedHeadingList(headingList) {
const nestedHeadingList = [];
headingList.forEach((heading, key) => {
if (heading.content === "") {
return;
}
if (heading.level === headingList[0].level) {
if (headingList[key + 1]?.level > heading.level) {
let endOfSlice = headingList.length;
for (let i = key + 1; i < headingList.length; i++) {
if (headingList[i].level === heading.level) {
endOfSlice = i;
break;
}
}
nestedHeadingList.push({
heading,
children: linearToNestedHeadingList(
headingList.slice(key + 1, endOfSlice)
)
});
} else {
nestedHeadingList.push({
heading,
children: null
});
}
}
});
return nestedHeadingList;
}
function TableOfContentsList({ nestedHeadingList, ordered = true }) {
return /* @__PURE__ */ jsx(Fragment, { children: nestedHeadingList.map((node, index) => {
const { content, link } = node.heading;
const entry = link ? /* @__PURE__ */ jsx("a", { className: ENTRY_CLASS_NAME, href: link, children: content }) : /* @__PURE__ */ jsx("span", { className: ENTRY_CLASS_NAME, children: content });
const NestedListTag = ordered ? "ol" : "ul";
return /* @__PURE__ */ jsxs("li", { children: [
entry,
node.children ? /* @__PURE__ */ jsx(NestedListTag, { children: /* @__PURE__ */ jsx(
TableOfContentsList,
{
nestedHeadingList: node.children,
ordered
}
) }) : null
] }, index);
}) });
}
var hasOwn = (object, key) => Object.prototype.hasOwnProperty.call(object, key);
var v1 = {
attributes,
supports,
isEligible: (blockAttributes, innerBlocks, { blockNode } = {}) => {
return hasOwn(blockAttributes, "headings") || blockNode?.innerHTML?.includes("wp-block-table-of-contents");
},
migrate: ({ headings, ...persistentAttributes }) => persistentAttributes,
save({ attributes: { headings = [], ordered = true } }) {
if (headings.length === 0) {
return null;
}
const ListTag = ordered ? "ol" : "ul";
return /* @__PURE__ */ jsx("nav", { ...useBlockProps.save(), children: /* @__PURE__ */ jsx(ListTag, { children: /* @__PURE__ */ jsx(
TableOfContentsList,
{
nestedHeadingList: linearToNestedHeadingList(
headings
),
ordered
}
) }) });
}
};
var deprecated_default = [v1];
export {
deprecated_default as default
};
//# sourceMappingURL=deprecated.mjs.map