import { computed, unref } from "vue"; import { getAppRoot } from "@/onload/loadConfig"; /** * Increase the heading levels of all child nodes of a node * @param {HTMLElement} node * @param {number} increaseBy */ function increaseHeadingLevels(node, increaseBy) { [5, 4, 3, 2, 1].forEach((level) => { increaseHeadingLevel(node, level, increaseBy); }); } /** * Increase a single heading level */ function increaseHeadingLevel(node, level, increaseBy) { // cap target level at 6 (highest heading level) let targetLevel = level + increaseBy; if (targetLevel > 6) { targetLevel = 6; } const headings = node.getElementsByTagName(`h${level}`); // create new headings with target level and copy contents + attributes Array.from(headings).forEach((heading) => { const newTag = document.createElement(`h${targetLevel}`); newTag.innerHTML = heading.innerHTML; Array.from(heading.attributes).forEach((attribute) => { newTag.setAttribute(attribute.name, attribute.value); }); heading.insertAdjacentElement("beforebegin", newTag); heading.remove(); }); } export function useFormattedToolHelp(helpContent, headingLevelIncrease = 2) { const formattedContent = computed(() => { const node = document.createElement("div"); node.innerHTML = unref(helpContent); const links = node.getElementsByTagName("a"); Array.from(links).forEach((link) => { link.target = "_blank"; }); const images = node.getElementsByTagName("img"); Array.from(images).forEach((image) => { if (image.src.includes("admin_toolshed")) { image.src = getAppRoot() + image.src; } }); increaseHeadingLevels(node, unref(headingLevelIncrease)); return node.innerHTML; }); return { formattedContent }; }