@launchmenu/applet-dictionary
Version:
An applet to find dictionary definitions
87 lines • 6.33 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2lraVBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2lraS9XaWtpUGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBOEQ7QUFFOUQsK0NBQTBDO0FBSzFDLE1BQWEsUUFBUTtJQUlqQjs7OztPQUlHO0lBQ0gsWUFBbUIsSUFBVSxFQUFFLEtBQWE7UUFxQjVDLFdBQVc7UUFDRCxnQkFBVyxHQUFHLElBQUksd0JBQVUsQ0FDbEMsS0FBSyxJQUFJLEVBQUU7WUFDUCxNQUFNLE1BQU0sR0FBRyxNQUFNLEtBQUssQ0FDdEIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxnREFDcEIsSUFBSSxDQUFDLEtBQ1QsRUFBRSxDQUNMLENBQUM7WUFDRixNQUFNLElBQUksR0FBNEIsTUFBTSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFFekMsNkNBQTZDO1lBQzdDLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQzVELE1BQU0sV0FBVyxHQUFxQjtvQkFDbEMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztvQkFDekIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07aUJBQ3RCLENBQUM7Z0JBQ0YsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FDL0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQy9DLENBQUM7Z0JBQ0YsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUNyQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEtBQUssQ0FDaEQsQ0FBQztnQkFFRixNQUFNLGdCQUFnQixHQUFHLEVBRXhCLENBQUM7Z0JBQ0YsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDN0IsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQztnQkFDbkQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTztvQkFDSCxFQUFDLEdBQUcsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFDO29CQUNwRSxHQUFHLGlCQUFpQjtpQkFDdkIsQ0FBQztZQUNOLENBQUMsRUFBRSxFQUFvQixDQUFDLENBQUM7WUFFekIsTUFBTSxRQUFRLEdBQUcsRUFBbUMsQ0FBQztZQUNyRCxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMxQixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sRUFBQyxRQUFRLEVBQUUsV0FBVyxFQUFDLENBQUM7UUFDbkMsQ0FBQyxFQUNELEVBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUc3QixDQUNKLENBQUM7UUFlRjs7V0FFRztRQUNPLGFBQVEsR0FBRyxJQUFJLHdCQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsT0FBTztnQkFDSCxXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FDOUI7YUFDSixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUE5RkMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE9BQU87UUFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVE7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQXFERDs7OztPQUlHO0lBQ08sYUFBYSxDQUFDLElBQWtCO1FBQ3RDLE9BQU8sSUFBSSx5QkFBVyxDQUNsQixJQUFJLEVBQ0osSUFBSSxFQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUN4RCxDQUFDO0lBQ1gsQ0FBQztJQWNEOzs7O09BSUc7SUFDSSxjQUFjLENBQUMsSUFBZ0I7UUFDbEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFDL0MsQ0FBQztDQUNKO0FBbEhELDRCQWtIQyJ9