UNPKG

@launchmenu/applet-dictionary

Version:
87 lines 6.33 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2lraVBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2lraS9XaWtpUGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBOEQ7QUFFOUQsK0NBQTBDO0FBSzFDLE1BQWEsUUFBUTtJQUlqQjs7OztPQUlHO0lBQ0gsWUFBbUIsSUFBVSxFQUFFLEtBQWE7UUFxQjVDLFdBQVc7UUFDRCxnQkFBVyxHQUFHLElBQUksd0JBQVUsQ0FDbEMsS0FBSyxJQUFJLEVBQUU7WUFDUCxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FDdEIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxnREFDcEIsSUFBSSxDQUFDLEtBQ1QsRUFBRSxDQUNMLENBQUM7WUFDRixNQUFNLElBQUksR0FBNEIsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFFekMsNkNBQTZDO1lBQzdDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQzVELE1BQU0sV0FBVyxHQUFxQjtvQkFDbEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDekIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07aUJBQ3RCLENBQUM7Z0JBQ0YsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FDL0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQy9DLENBQUM7Z0JBQ0YsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUNyQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssQ0FDaEQsQ0FBQztnQkFFRixNQUFNLGdCQUFnQixHQUFHLEVBRXhCLENBQUM7Z0JBQ0YsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDN0IsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTztvQkFDSCxFQUFDLEdBQUcsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFDO29CQUNwRSxHQUFHLGlCQUFpQjtpQkFDdkIsQ0FBQztZQUNOLENBQUMsRUFBRSxFQUFvQixDQUFDLENBQUM7WUFFekIsTUFBTSxRQUFRLEdBQUcsRUFBbUMsQ0FBQztZQUNyRCxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMxQixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFDLENBQUM7UUFDbkMsQ0FBQyxFQUNELEVBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUc3QixDQUNKLENBQUM7UUFlRjs7V0FFRztRQUNPLGFBQVEsR0FBRyxJQUFJLHdCQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsT0FBTztnQkFDSCxXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FDOUI7YUFDSixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUE5RkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE9BQU87UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQXFERDs7OztPQUlHO0lBQ08sYUFBYSxDQUFDLElBQWtCO1FBQ3RDLE9BQU8sSUFBSSx5QkFBVyxDQUNsQixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUN4RCxDQUFDO0lBQ1gsQ0FBQztJQWNEOzs7O09BSUc7SUFDSSxjQUFjLENBQUMsSUFBZ0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDL0MsQ0FBQztDQUNKO0FBbEhELDRCQWtIQyJ9