@launchmenu/applet-dictionary
Version:
An applet to find dictionary definitions
87 lines • 6.34 kB
JavaScript
;
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=