Add settings etc.
This commit is contained in:
154
main.ts
154
main.ts
@@ -3,39 +3,64 @@ import { App, Editor, MarkdownView, Modal, Notice, Plugin, PluginSettingTab, Set
|
|||||||
// Remember to rename these classes and interfaces!
|
// Remember to rename these classes and interfaces!
|
||||||
|
|
||||||
interface WikipediaDataSettings {
|
interface WikipediaDataSettings {
|
||||||
mySetting: string;
|
template: string;
|
||||||
|
shouldBoldSearchTerm: boolean;
|
||||||
|
language: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface WikiData {
|
||||||
|
title: string;
|
||||||
|
text: string;
|
||||||
|
url: string;
|
||||||
|
image: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const extractApiUrl = "wikipedia.org/api/rest_v1/page/summary/";
|
||||||
|
|
||||||
const DEFAULT_SETTINGS: WikipediaDataSettings = {
|
const DEFAULT_SETTINGS: WikipediaDataSettings = {
|
||||||
mySetting: 'default'
|
template: `{{text}}\n> [Wikipedia]({{url}})`,
|
||||||
|
shouldBoldSearchTerm: true,
|
||||||
|
language: "en",
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class WikipediaData extends Plugin {
|
export default class WikipediaData extends Plugin {
|
||||||
settings: WikipediaDataSettings;
|
settings: WikipediaDataSettings;
|
||||||
|
|
||||||
|
getLanguage(): string {
|
||||||
|
return this.settings.language ? this.settings.language : "en";
|
||||||
|
}
|
||||||
|
|
||||||
|
getUrl(title: string): string {
|
||||||
|
return `https://${this.getLanguage()}.wikipedia.org/wiki/${encodeURI(
|
||||||
|
title
|
||||||
|
)}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
getApiUrl(): string {
|
||||||
|
return `https://${this.getLanguage()}.` + extractApiUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getWikipediaText(title: string): Promise<WikipediaExtract | undefined> {
|
||||||
|
const url = this.getApiUrl() + encodeURIComponent(title);
|
||||||
|
const requestParam: RequestParam = {
|
||||||
|
url: url,
|
||||||
|
};
|
||||||
|
const resp = await request(requestParam)
|
||||||
|
.then((r) => JSON.parse(r))
|
||||||
|
.catch(
|
||||||
|
() =>
|
||||||
|
new Notice(
|
||||||
|
"Failed to get Wikipedia. Check your internet connection or language prefix."
|
||||||
|
)
|
||||||
|
);
|
||||||
|
const extract = this.parseResponse(resp);
|
||||||
|
return extract;
|
||||||
|
}
|
||||||
|
|
||||||
async onload() {
|
async onload() {
|
||||||
|
console.log("Loading Wikipedia data plugin");
|
||||||
await this.loadSettings();
|
await this.loadSettings();
|
||||||
|
|
||||||
// This creates an icon in the left ribbon.
|
|
||||||
const ribbonIconEl = this.addRibbonIcon('dice', 'Sample Plugin', (evt: MouseEvent) => {
|
|
||||||
// Called when the user clicks the icon.
|
|
||||||
new Notice('This is a notice Hello World!');
|
|
||||||
});
|
|
||||||
// Perform additional things with the ribbon
|
|
||||||
ribbonIconEl.addClass('my-plugin-ribbon-class');
|
|
||||||
|
|
||||||
// This adds a status bar item to the bottom of the app. Does not work on mobile apps.
|
|
||||||
const statusBarItemEl = this.addStatusBarItem();
|
|
||||||
statusBarItemEl.setText('Status Bar Text');
|
|
||||||
|
|
||||||
// This adds a simple command that can be triggered anywhere
|
|
||||||
this.addCommand({
|
|
||||||
id: 'open-sample-modal-simple',
|
|
||||||
name: 'Open sample modal (simple)',
|
|
||||||
callback: () => {
|
|
||||||
new SampleModal(this.app).open();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// This adds an editor command that can perform some operation on the current editor instance
|
// This adds an editor command that can perform some operation on the current editor instance
|
||||||
this.addCommand({
|
this.addCommand({
|
||||||
id: 'sample-editor-command',
|
id: 'sample-editor-command',
|
||||||
@@ -45,37 +70,10 @@ export default class WikipediaData extends Plugin {
|
|||||||
editor.replaceSelection('Sample Editor Command');
|
editor.replaceSelection('Sample Editor Command');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// This adds a complex command that can check whether the current state of the app allows execution of the command
|
|
||||||
this.addCommand({
|
|
||||||
id: 'open-sample-modal-complex',
|
|
||||||
name: 'Open sample modal (complex)',
|
|
||||||
checkCallback: (checking: boolean) => {
|
|
||||||
// Conditions to check
|
|
||||||
const markdownView = this.app.workspace.getActiveViewOfType(MarkdownView);
|
|
||||||
if (markdownView) {
|
|
||||||
// If checking is true, we're simply "checking" if the command can be run.
|
|
||||||
// If checking is false, then we want to actually perform the operation.
|
|
||||||
if (!checking) {
|
|
||||||
new SampleModal(this.app).open();
|
|
||||||
}
|
|
||||||
|
|
||||||
// This command will only show up in Command Palette when the check function returns true
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// This adds a settings tab so the user can configure various aspects of the plugin
|
// This adds a settings tab so the user can configure various aspects of the plugin
|
||||||
this.addSettingTab(new WikipediaDataSettingTab(this.app, this));
|
this.addSettingTab(new WikipediaDataSettingTab(this.app, this));
|
||||||
|
|
||||||
// If the plugin hooks up any global DOM events (on parts of the app that doesn't belong to this plugin)
|
|
||||||
// Using this function will automatically remove the event listener when this plugin is disabled.
|
|
||||||
this.registerDomEvent(document, 'click', (evt: MouseEvent) => {
|
|
||||||
console.log('click', evt);
|
|
||||||
});
|
|
||||||
|
|
||||||
// When registering intervals, this function will automatically clear the interval when the plugin is disabled.
|
|
||||||
this.registerInterval(window.setInterval(() => console.log('setInterval'), 5 * 60 * 1000));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
onunload() {
|
onunload() {
|
||||||
@@ -91,22 +89,6 @@ export default class WikipediaData extends Plugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class SampleModal extends Modal {
|
|
||||||
constructor(app: App) {
|
|
||||||
super(app);
|
|
||||||
}
|
|
||||||
|
|
||||||
onOpen() {
|
|
||||||
const {contentEl} = this;
|
|
||||||
contentEl.setText('Woah!');
|
|
||||||
}
|
|
||||||
|
|
||||||
onClose() {
|
|
||||||
const {contentEl} = this;
|
|
||||||
contentEl.empty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class WikipediaDataSettingTab extends PluginSettingTab {
|
class WikipediaDataSettingTab extends PluginSettingTab {
|
||||||
plugin: WikipediaData;
|
plugin: WikipediaData;
|
||||||
|
|
||||||
@@ -130,5 +112,47 @@ class WikipediaDataSettingTab extends PluginSettingTab {
|
|||||||
this.plugin.settings.mySetting = value;
|
this.plugin.settings.mySetting = value;
|
||||||
await this.plugin.saveSettings();
|
await this.plugin.saveSettings();
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
new Setting(containerEl)
|
||||||
|
.setName("Wikipedia Language Prefix")
|
||||||
|
.setDesc(`Choose Wikipedia language prefix to use (ex. en for English)`)
|
||||||
|
.addText((textField) => {
|
||||||
|
textField
|
||||||
|
.setValue(this.plugin.settings.language)
|
||||||
|
.onChange(async (value) => {
|
||||||
|
this.plugin.settings.language = value;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
new Setting(containerEl)
|
||||||
|
.setName("Wikipedia Extract Template")
|
||||||
|
.setDesc(
|
||||||
|
`Set markdown template for extract to be inserted.\n
|
||||||
|
Available template variables are {{text}}, {{searchTerm}} and {{url}}.
|
||||||
|
`
|
||||||
|
)
|
||||||
|
.addTextArea((textarea) =>
|
||||||
|
textarea
|
||||||
|
.setValue(this.plugin.settings.template)
|
||||||
|
.onChange(async (value) => {
|
||||||
|
this.plugin.settings.template = value;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
new Setting(containerEl)
|
||||||
|
.setName("Bold Search Term?")
|
||||||
|
.setDesc(
|
||||||
|
"If set to true, the first instance of the search term will be **bolded**"
|
||||||
|
)
|
||||||
|
.addToggle((toggle) =>
|
||||||
|
toggle
|
||||||
|
.setValue(this.plugin.settings.shouldBoldSearchTerm)
|
||||||
|
.onChange(async (value) => {
|
||||||
|
this.plugin.settings.shouldBoldSearchTerm = value;
|
||||||
|
await this.plugin.saveSettings();
|
||||||
|
})
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user