UNPKG

@rr0/cms

Version:

RR0 Content Management System (CMS)

56 lines (55 loc) 1.93 kB
/** * Adds an index anchor element with the index id. */ export class IndexedReplacer { async replacement(context, element) { const items = element.querySelectorAll("li"); let value = 1; for (let i = 0; i < items.length; i++) { const item = items[i]; value = this.replaceItem(context, item, value); } return element; } replaceItem(context, item, i) { var _a; const anchor = item.querySelector(".index-anchor"); let nextIndex; if (!anchor) { const value = item.getAttribute("value"); const valueIndex = parseInt(value, 10); nextIndex = Number.isInteger(valueIndex) ? valueIndex + 1 : i + 1; const idOrValue = item.getAttribute("id") || value; let dateTime; if (!idOrValue) { dateTime = (_a = item.querySelector("time")) === null || _a === void 0 ? void 0 : _a.dateTime; } const id = idOrValue || dateTime || String(i); const anchorEl = context.file.document.createElement("span"); anchorEl.id = id; item.removeAttribute("id"); if (!dateTime) { let valueStr; if (value) { valueStr = value; } else { const idNum = parseInt(id, 10); if (idNum) { valueStr = id; } } if (valueStr) { item.setAttribute("value", valueStr); } } anchorEl.classList.add("index-anchor", "anchor"); item.prepend(anchorEl); item.setAttribute("onclick", `window.location.hash='${id}';event.stopPropagation()`); } else { nextIndex = i; } return nextIndex; } }