@rr0/cms
Version:
RR0 Content Management System (CMS)
56 lines (55 loc) • 1.93 kB
JavaScript
/**
* 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;
}
}