@zougui/common.furaffinity
Version:
53 lines • 1.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseDescription = void 0;
const utils_1 = require("./utils");
const getDescriptionTree = (descriptionElement) => {
return {
type: 'root',
text: descriptionElement.textContent || '',
textAlign: (0, utils_1.getTextAlign)(descriptionElement),
children: getDescriptionNodes(descriptionElement),
};
};
const getDescriptionNodes = (element) => {
const descriptionNodes = [];
const childNodes = Array.from(element.childNodes || []);
const children = Array.from(element.children || []);
const state = { elementIndex: 0 };
for (const node of childNodes) {
const childElement = children[state.elementIndex];
const nodeName = node.nodeName.toLowerCase();
const data = { node, element: childElement };
const parser = utils_1.elementParsers[nodeName] || utils_1.elementParsers.unknown;
const newDescriptionNode = parser(data, state, getDescriptionNodes);
if (newDescriptionNode) {
descriptionNodes.push(newDescriptionNode);
}
}
if (descriptionNodes[0]) {
descriptionNodes[0].text = descriptionNodes[0].text
.replace(/^\n/, '')
.trimStart();
// if there is no text then this node is useless
if (!descriptionNodes[0].text) {
descriptionNodes.shift();
}
}
return descriptionNodes;
};
const parseDescription = (description) => {
const { document } = (0, utils_1.parseSafeHTML)(description);
const rootElement = document.querySelector('body');
if (rootElement) {
return getDescriptionTree(rootElement);
}
const emptyTree = {
type: 'root',
text: '',
children: [],
};
return emptyTree;
};
exports.parseDescription = parseDescription;
//# sourceMappingURL=parseDescription.js.map