UNPKG

@launchmenu/applet-dictionary

Version:
159 lines 10.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WikiSection = void 0; const model_react_1 = require("model-react"); class WikiSection { /** * Creates a new local model of a wikipage section * @param page The page that this section is a part of * @param info The section info * @param subsections The ids of child sections */ constructor(page, info, subsections) { this.content = new model_react_1.DataLoader(async () => { const page = this.page; console.log("start"); const result = await fetch(`${page .getWiki() .getApiUrl()}?action=parse&format=json&prop=text&disabletoc=true&section=${this.info.index}&page=${page.getTitle()}`); const data = await result.json(); console.log(data); console.log(this); return data.parse.text["*"]; }, null); this.contentDom = new model_react_1.DataCacher((h, prev) => { if (this.contentDomSource) return this.contentDomSource(h); if (!prev) this.setSubsectionsContents(); const content = this.content.get(h); if (!content) return null; const parser = new DOMParser(); const doc = parser.parseFromString(content, "text/xml"); return doc; }); this.page = page; this.info = info; this.subsections = subsections || []; } /** * Retrieves the page that this section is a part of * @returns The page */ getPage() { return this.page; } /** * Retrieves all subsections of this section * @returns All subsections */ getSubSections() { return this.subsections; } /** * Finds the subsections with the specified class * @param constructor The class of the subsection to find * @returns The subsections that were found */ findSubsections(constructor) { return this.subsections.filter((subsection) => subsection instanceof constructor); } // Getters for the section info /** * Retrieves the depth of the section * @returns The depth */ getLevel() { return this.info.level; } /** * Retrieves the name of the section * @returns The section's name */ getName() { return this.info.name; } /** * Retrieves the non-hierarchical index of the section * @returns The section's index */ getIndex() { return this.info.index; } /** * Retrieves the hierarchical id of the section, e.g. `1.3.2` * @returns The hierarchical id */ getID() { return this.info.number; } // Content /** * Retrieves the raw section content * @param hook The hook to subscribe to changes * @returns The currently loaded content of this section */ getContent(hook) { return this.content.get(hook); } /** * Retrieves the section content parsed as an html document * @param hook The hook to subscribe to changes * @returns The currently loaded content of this section */ getContentDom(hook) { return this.contentDom.get(hook); } /** * Sets the dom source in order to help with efficiency, prevents performing a data fetch if the data can be obtained from here * @param source THe data source to retrieve the data from */ setContentDomSource(source) { if (this.content.get() == null) { this.contentDomSource = source; } } /** * Sets the contents of the subsections based on the content of this section */ setSubsectionsContents() { this.subsections.forEach(section => { this.setSubsectionContents(section); }); } /** * Sets the contents of the given subsection based on the content of this section * @param subsection The subsection to set the content for */ setSubsectionContents(subsection) { const source = new model_react_1.DataCacher(hook => { var _a; const contents = this.getContentDom(hook); if (!contents) return null; // Get the header of this section const header = (_a = contents.querySelector(`#${subsection.getName().replace(/\s/g, "_")}`)) === null || _a === void 0 ? void 0 : _a.parentNode; if (!header) return null; const headerType = header.nodeName; // Get all nodes that fall under this section const nodes = [header.cloneNode(true)]; let node = header.nextSibling; while (node && node.nodeName != headerType) { nodes.push(node.cloneNode(true)); node = node.nextSibling; } // Create a document with these nodes const container = document.createElement("div"); container.append(...nodes); container.className = "mw-parser-output"; const doc = new Document(); doc.appendChild(container); return doc; }); subsection.setContentDomSource(h => source.get(h)); } } exports.WikiSection = WikiSection; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2lraVNlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2lraS9XaWtpU2VjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBOEQ7QUFLOUQsTUFBYSxXQUFXO0lBbUNwQjs7Ozs7T0FLRztJQUNILFlBQ0ksSUFBYyxFQUNkLElBQXNCLEVBQ3RCLFdBQTJCO1FBdkNyQixZQUFPLEdBQUcsSUFBSSx3QkFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQzFDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQixNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FDdEIsR0FBRyxJQUFJO2lCQUNGLE9BQU8sRUFBRTtpQkFDVCxTQUFTLEVBQUUsK0RBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxLQUNkLFNBQVMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQzdCLENBQUM7WUFDRixNQUFNLElBQUksR0FBOEIsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxFQUFFLElBQXFCLENBQUMsQ0FBQztRQUVoQixlQUFVLEdBQUcsSUFBSSx3QkFBVSxDQUFrQixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUMvRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQUUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLElBQUk7Z0JBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7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