UNPKG

@launchmenu/applet-dictionary

Version:
87 lines 6.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WikiPage = void 0; const model_react_1 = require("model-react"); const WikiSection_1 = require("./WikiSection"); class WikiPage { /** * Creates a new local model of a wikipage * @param wiki The wiki that this page is for * @param title The name of the page */ constructor(wiki, title) { // Sections this.rawSections = new model_react_1.DataLoader(async () => { const result = await fetch(`${this.wiki.getApiUrl()}?action=parse&format=json&prop=sections&page=${this.title}`); const data = await result.json(); const sectionsData = data.parse.sections; // Turn the list of sections into a hierarchy const sectionList = sectionsData.reduceRight((sections, data) => { const sectionInfo = { name: data.line, level: Number(data.level), index: Number(data.index), number: data.number, }; const subSections = sections.filter(section => section.level > sectionInfo.level); const remainingSections = sections.filter(section => section.level <= sectionInfo.level); const namedSubSections = {}; subSections.forEach(subSection => { namedSubSections[subSection.name] = subSection; }); return [ { ...sectionInfo, childList: subSections, children: namedSubSections }, ...remainingSections, ]; }, []); const sections = {}; sectionList.forEach(section => { sections[section.name] = section; }); return { sections, sectionList }; }, { sections: {}, sectionList: [] }); /** * The sections model */ this.sections = new model_react_1.DataCacher(hook => { const rawSections = this.rawSections.get(hook); return { sectionList: rawSections.sectionList.map(section => this.createSection(section)), }; }); this.wiki = wiki; this.title = title; } /** * Retrieves the wiki that this page is on * @returns The wiki that this page is on */ getWiki() { return this.wiki; } /** * Retrieves the word that this page is for * @returns The term */ getTitle() { return this.title; } /** * Creates a section of this page * @param data The section data * @returns The wiki section */ createSection(data) { return new WikiSection_1.WikiSection(this, data, data.childList.map(section => this.createSection(section))); } /** * Retrieves the sections of this page * @param hook The hook to subscribe to changes * @returns The sections */ getSectionList(hook) { return this.sections.get(hook).sectionList; } } exports.WikiPage = WikiPage; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2lraVBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2NyYXBlci93aWtpL1dpa2lQYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE4RDtBQUU5RCwrQ0FBMEM7QUFLMUMsTUFBYSxRQUFRO0lBSWpCOzs7O09BSUc7SUFDSCxZQUFtQixJQUFVLEVBQUUsS0FBYTtRQXFCNUMsV0FBVztRQUNELGdCQUFXLEdBQUcsSUFBSSx3QkFBVSxDQUNsQyxLQUFLLElBQUksRUFBRTtZQUNQLE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUN0QixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGdEQUNwQixJQUFJLENBQUMsS0FDVCxFQUFFLENBQ0wsQ0FBQztZQUNGLE1BQU0sSUFBSSxHQUE0QixNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMxRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUV6Qyw2Q0FBNkM7WUFDN0MsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDNUQsTUFBTSxXQUFXLEdBQXFCO29CQUNsQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ2YsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUN6QixLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7b0JBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtpQkFDdEIsQ0FBQztnQkFDRixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUMvQixPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FDL0MsQ0FBQztnQkFDRixNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQ3JDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxXQUFXLENBQUMsS0FBSyxDQUNoRCxDQUFDO2dCQUVGLE1BQU0sZ0JBQWdCLEdBQUcsRUFFeEIsQ0FBQztnQkFDRixXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO29CQUM3QixnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDO2dCQUNuRCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPO29CQUNILEVBQUMsR0FBRyxXQUFXLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUM7b0JBQ3BFLEdBQUcsaUJBQWlCO2lCQUN2QixDQUFDO1lBQ04sQ0FBQyxFQUFFLEVBQW9CLENBQUMsQ0FBQztZQUV6QixNQUFNLFFBQVEsR0FBRyxFQUFtQyxDQUFDO1lBQ3JELFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzFCLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBRUgsT0FBTyxFQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUMsQ0FBQztRQUNuQyxDQUFDLEVBQ0QsRUFBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBRzdCLENBQ0osQ0FBQztRQWVGOztXQUVHO1FBQ08sYUFBUSxHQUFHLElBQUksd0JBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQyxPQUFPO2dCQUNILFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUM5QjthQUNKLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQTlGQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTztRQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksUUFBUTtRQUNYLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBcUREOzs7O09BSUc7SUFDTyxhQUFhLENBQUMsSUFBa0I7UUFDdEMsT0FBTyxJQUFJLHlCQUFXLENBQ2xCLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQ3hELENBQUM7SUFDWCxDQUFDO0lBY0Q7Ozs7T0FJRztJQUNJLGNBQWMsQ0FBQyxJQUFnQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUMvQyxDQUFDO0NBQ0o7QUFsSEQsNEJBa0hDIn0=