fix eslint

This commit is contained in:
mProjectsCode 2022-11-29 19:45:55 +01:00
parent f5b9020dc8
commit 48bef13e4d
25 changed files with 126 additions and 149 deletions

View file

@ -2,7 +2,7 @@
"root": true, "root": true,
"parser": "@typescript-eslint/parser", "parser": "@typescript-eslint/parser",
"env": { "node": true }, "env": { "node": true },
"plugins": ["@typescript-eslint"], "plugins": ["@typescript-eslint", "only-warn"],
"extends": ["eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended"], "extends": ["eslint:recommended", "plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended"],
"parserOptions": { "parserOptions": {
"sourceType": "module" "sourceType": "module"
@ -12,6 +12,9 @@
"@typescript-eslint/no-unused-vars": ["error", { "args": "none" }], "@typescript-eslint/no-unused-vars": ["error", { "args": "none" }],
"@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/ban-ts-comment": "off",
"no-prototype-builtins": "off", "no-prototype-builtins": "off",
"@typescript-eslint/no-empty-function": "off" "@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-inferrable-types": "off",
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/explicit-function-return-type": ["warn"]
} }
} }

16
package-lock.json generated
View file

@ -22,6 +22,7 @@
"builtin-modules": "^3.2.0", "builtin-modules": "^3.2.0",
"esbuild": "0.13.12", "esbuild": "0.13.12",
"esbuild-svelte": "^0.7.1", "esbuild-svelte": "^0.7.1",
"eslint-plugin-only-warn": "^1.0.3",
"jest": "^28.1.2", "jest": "^28.1.2",
"jest-fetch-mock": "^3.0.3", "jest-fetch-mock": "^3.0.3",
"obsidian": "latest", "obsidian": "latest",
@ -2494,6 +2495,15 @@
"url": "https://opencollective.com/eslint" "url": "https://opencollective.com/eslint"
} }
}, },
"node_modules/eslint-plugin-only-warn": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.0.3.tgz",
"integrity": "sha512-XQOX/TfLoLw6h8ky51d29uUjXRTQHqBGXPylDEmy5fe/w7LIOnp8MA24b1OSMEn9BQoKow1q3g1kLe5/9uBTvw==",
"dev": true,
"engines": {
"node": ">=6"
}
},
"node_modules/eslint-scope": { "node_modules/eslint-scope": {
"version": "5.1.1", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@ -7245,6 +7255,12 @@
} }
} }
}, },
"eslint-plugin-only-warn": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.0.3.tgz",
"integrity": "sha512-XQOX/TfLoLw6h8ky51d29uUjXRTQHqBGXPylDEmy5fe/w7LIOnp8MA24b1OSMEn9BQoKow1q3g1kLe5/9uBTvw==",
"dev": true
},
"eslint-scope": { "eslint-scope": {
"version": "5.1.1", "version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",

View file

@ -23,6 +23,7 @@
"builtin-modules": "^3.2.0", "builtin-modules": "^3.2.0",
"esbuild": "0.13.12", "esbuild": "0.13.12",
"esbuild-svelte": "^0.7.1", "esbuild-svelte": "^0.7.1",
"eslint-plugin-only-warn": "^1.0.3",
"jest": "^28.1.2", "jest": "^28.1.2",
"jest-fetch-mock": "^3.0.3", "jest-fetch-mock": "^3.0.3",
"obsidian": "latest", "obsidian": "latest",

View file

@ -35,7 +35,7 @@ export class BoardGameGeekAPI extends APIModel {
console.debug(response); console.debug(response);
let ret: MediaTypeModel[] = []; const ret: MediaTypeModel[] = [];
for (const boardgame of Array.from(response.querySelectorAll('boardgame'))) { for (const boardgame of Array.from(response.querySelectorAll('boardgame'))) {
const id = boardgame.attributes.getNamedItem('objectid')!.value; const id = boardgame.attributes.getNamedItem('objectid')!.value;

View file

@ -1,7 +1,6 @@
import { APIModel } from '../APIModel'; import { APIModel } from '../APIModel';
import { MediaTypeModel } from '../../models/MediaTypeModel'; import { MediaTypeModel } from '../../models/MediaTypeModel';
import MediaDbPlugin from '../../main'; import MediaDbPlugin from '../../main';
import { debugLog } from '../../utils/Utils';
// WIP // WIP
export class LocGovAPI extends APIModel { export class LocGovAPI extends APIModel {

View file

@ -38,7 +38,7 @@ export class MALAPI extends APIModel {
console.debug(data); console.debug(data);
let ret: MediaTypeModel[] = []; const ret: MediaTypeModel[] = [];
for (const result of data.data) { for (const result of data.data) {
const type = this.typeMappings.get(result.type?.toLowerCase()); const type = this.typeMappings.get(result.type?.toLowerCase());

View file

@ -39,7 +39,7 @@ export class MusicBrainzAPI extends APIModel {
const data = await fetchData.json; const data = await fetchData.json;
console.debug(data); console.debug(data);
let ret: MediaTypeModel[] = []; const ret: MediaTypeModel[] = [];
for (const result of data['release-groups']) { for (const result of data['release-groups']) {
ret.push( ret.push(

View file

@ -48,7 +48,7 @@ export class OMDbAPI extends APIModel {
console.debug(data.Search); console.debug(data.Search);
let ret: MediaTypeModel[] = []; const ret: MediaTypeModel[] = [];
for (const result of data.Search) { for (const result of data.Search) {
const type = this.typeMappings.get(result.Type.toLowerCase()); const type = this.typeMappings.get(result.Type.toLowerCase());

View file

@ -37,7 +37,7 @@ export class SteamAPI extends APIModel {
console.debug(data); console.debug(data);
let filteredData = []; const filteredData = [];
for (const app of data.applist.apps) { for (const app of data.applist.apps) {
if (app.name.toLowerCase().includes(title.toLowerCase())) { if (app.name.toLowerCase().includes(title.toLowerCase())) {
@ -48,7 +48,7 @@ export class SteamAPI extends APIModel {
} }
} }
let ret: MediaTypeModel[] = []; const ret: MediaTypeModel[] = [];
for (const result of filteredData) { for (const result of filteredData) {
ret.push( ret.push(
@ -69,7 +69,7 @@ export class SteamAPI extends APIModel {
async getById(id: string): Promise<MediaTypeModel> { async getById(id: string): Promise<MediaTypeModel> {
console.log(`MDB | api "${this.apiName}" queried by ID`); console.log(`MDB | api "${this.apiName}" queried by ID`);
const searchUrl = `http://store.steampowered.com/api/appdetails?appids=${encodeURIComponent(id)}`; const searchUrl = `http://store.steampowered.com/api/appdetails?appids=${encodeURIComponent(id)}&l=en`;
const fetchData = await requestUrl({ const fetchData = await requestUrl({
url: searchUrl, url: searchUrl,
}); });

View file

@ -30,7 +30,7 @@ export class WikipediaAPI extends APIModel {
const data = await fetchData.json(); const data = await fetchData.json();
console.debug(data); console.debug(data);
let ret: MediaTypeModel[] = []; const ret: MediaTypeModel[] = [];
for (const result of data.query.search) { for (const result of data.query.search) {
ret.push( ret.push(

View file

@ -25,7 +25,7 @@ export default class MediaDbPlugin extends Plugin {
frontMatterRexExpPattern: string = '^(---)\\n[\\s\\S]*?\\n---'; frontMatterRexExpPattern: string = '^(---)\\n[\\s\\S]*?\\n---';
async onload() { async onload(): Promise<void> {
this.apiManager = new APIManager(); this.apiManager = new APIManager();
// register APIs // register APIs
this.apiManager.registerAPI(new OMDbAPI(this)); this.apiManager.registerAPI(new OMDbAPI(this));
@ -48,7 +48,7 @@ export default class MediaDbPlugin extends Plugin {
this.mediaTypeManager.updateFolders(this.settings); this.mediaTypeManager.updateFolders(this.settings);
// add icon to the left ribbon // add icon to the left ribbon
const ribbonIconEl = this.addRibbonIcon('database', 'Add new Media DB entry', (evt: MouseEvent) => this.createEntryWithAdvancedSearchModal()); const ribbonIconEl = this.addRibbonIcon('database', 'Add new Media DB entry', () => this.createEntryWithAdvancedSearchModal());
ribbonIconEl.addClass('obsidian-media-db-plugin-ribbon-class'); ribbonIconEl.addClass('obsidian-media-db-plugin-ribbon-class');
this.registerEvent( this.registerEvent(
@ -136,8 +136,8 @@ export default class MediaDbPlugin extends Plugin {
* - replace the detail query * - replace the detail query
* - maybe custom link syntax * - maybe custom link syntax
*/ */
async createLinkWithSearchModal() { async createLinkWithSearchModal(): Promise<void> {
let apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => { const apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => {
return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis); return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis);
}); });
@ -163,7 +163,7 @@ export default class MediaDbPlugin extends Plugin {
} }
} }
async createEntryWithSearchModal(searchModalOptions?: SearchModalOptions) { async createEntryWithSearchModal(searchModalOptions?: SearchModalOptions): Promise<void> {
let types: string[] = []; let types: string[] = [];
let apiSearchResults: MediaTypeModel[] = await this.modalHelper.openSearchModal(searchModalOptions ?? {}, async searchModalData => { let apiSearchResults: MediaTypeModel[] = await this.modalHelper.openSearchModal(searchModalOptions ?? {}, async searchModalData => {
types = searchModalData.types; types = searchModalData.types;
@ -198,8 +198,8 @@ export default class MediaDbPlugin extends Plugin {
await this.createMediaDbNotes(selectResults); await this.createMediaDbNotes(selectResults);
} }
async createEntryWithAdvancedSearchModal() { async createEntryWithAdvancedSearchModal(): Promise<void> {
let apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => { const apiSearchResults: MediaTypeModel[] = await this.modalHelper.openAdvancedSearchModal({}, async advancedSearchModalData => {
return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis); return await this.apiManager.query(advancedSearchModalData.query, advancedSearchModalData.apis);
}); });
@ -254,7 +254,7 @@ export default class MediaDbPlugin extends Plugin {
} }
async queryDetails(models: MediaTypeModel[]): Promise<MediaTypeModel[]> { async queryDetails(models: MediaTypeModel[]): Promise<MediaTypeModel[]> {
let detailModels: MediaTypeModel[] = []; const detailModels: MediaTypeModel[] = [];
for (const model of models) { for (const model of models) {
try { try {
detailModels.push(await this.apiManager.queryDetailedInfo(model)); detailModels.push(await this.apiManager.queryDetailedInfo(model));
@ -270,7 +270,7 @@ export default class MediaDbPlugin extends Plugin {
try { try {
console.debug('MDB | creating new note'); console.debug('MDB | creating new note');
let fileContent = await this.generateMediaDbNoteContents(mediaTypeModel, options); const fileContent = await this.generateMediaDbNoteContents(mediaTypeModel, options);
if (!options.folder) { if (!options.folder) {
options.folder = await this.mediaTypeManager.getFolder(mediaTypeModel, this.app); options.folder = await this.mediaTypeManager.getFolder(mediaTypeModel, this.app);
@ -283,7 +283,7 @@ export default class MediaDbPlugin extends Plugin {
} }
} }
async generateMediaDbNoteContents(mediaTypeModel: MediaTypeModel, options: CreateNoteOptions) { async generateMediaDbNoteContents(mediaTypeModel: MediaTypeModel, options: CreateNoteOptions): Promise<string> {
let fileMetadata = this.modelPropertyMapper.convertObject(mediaTypeModel.toMetaDataObject()); let fileMetadata = this.modelPropertyMapper.convertObject(mediaTypeModel.toMetaDataObject());
let fileContent = ''; let fileContent = '';
const template = options.attachTemplate ? await this.mediaTypeManager.getTemplate(mediaTypeModel, this.app) : ''; const template = options.attachTemplate ? await this.mediaTypeManager.getTemplate(mediaTypeModel, this.app) : '';
@ -300,7 +300,7 @@ export default class MediaDbPlugin extends Plugin {
return { fileMetadata: fileMetadata, fileContent: fileContent }; return { fileMetadata: fileMetadata, fileContent: fileContent };
} }
let attachFileMetadata: any = this.getMetadataFromFileCache(fileToAttach); const attachFileMetadata: any = this.getMetadataFromFileCache(fileToAttach);
fileMetadata = Object.assign(attachFileMetadata, fileMetadata); fileMetadata = Object.assign(attachFileMetadata, fileMetadata);
let attachFileContent: string = await this.app.vault.read(fileToAttach); let attachFileContent: string = await this.app.vault.read(fileToAttach);
@ -317,7 +317,7 @@ export default class MediaDbPlugin extends Plugin {
return { fileMetadata: fileMetadata, fileContent: fileContent }; return { fileMetadata: fileMetadata, fileContent: fileContent };
} }
let templateMetadata: any = this.getMetaDataFromFileContent(template); const templateMetadata: any = this.getMetaDataFromFileContent(template);
fileMetadata = Object.assign(templateMetadata, fileMetadata); fileMetadata = Object.assign(templateMetadata, fileMetadata);
const regExp = new RegExp(this.frontMatterRexExpPattern); const regExp = new RegExp(this.frontMatterRexExpPattern);
@ -353,7 +353,7 @@ export default class MediaDbPlugin extends Plugin {
return metadata; return metadata;
} }
getMetadataFromFileCache(file: TFile) { getMetadataFromFileCache(file: TFile): any {
let metadata: any = this.app.metadataCache.getFileCache(file).frontmatter; let metadata: any = this.app.metadataCache.getFileCache(file).frontmatter;
if (metadata) { if (metadata) {
metadata = Object.assign({}, metadata); // copy metadata = Object.assign({}, metadata); // copy
@ -371,7 +371,7 @@ export default class MediaDbPlugin extends Plugin {
* @param fileContent * @param fileContent
* @param options * @param options
*/ */
async createNote(fileName: string, fileContent: string, options: CreateNoteOptions) { async createNote(fileName: string, fileContent: string, options: CreateNoteOptions): Promise<void> {
// find and possibly create the folder set in settings or passed in folder // find and possibly create the folder set in settings or passed in folder
const folder = options.folder ?? this.app.vault.getAbstractFileByPath('/'); const folder = options.folder ?? this.app.vault.getAbstractFileByPath('/');
@ -403,7 +403,7 @@ export default class MediaDbPlugin extends Plugin {
* Update the active note by querying the API again. * Update the active note by querying the API again.
* Tries to read the type, id and dataSource of the active note. If successful it will query the api, delete the old note and create a new one. * Tries to read the type, id and dataSource of the active note. If successful it will query the api, delete the old note and create a new one.
*/ */
async updateActiveNote(onlyMetadata: boolean = false) { async updateActiveNote(onlyMetadata: boolean = false): Promise<void> {
const activeFile: TFile = this.app.workspace.getActiveFile(); const activeFile: TFile = this.app.workspace.getActiveFile();
if (!activeFile) { if (!activeFile) {
throw new Error('MDB | there is no active note'); throw new Error('MDB | there is no active note');
@ -418,7 +418,7 @@ export default class MediaDbPlugin extends Plugin {
throw new Error('MDB | active note is not a Media DB entry or is missing metadata'); throw new Error('MDB | active note is not a Media DB entry or is missing metadata');
} }
let oldMediaTypeModel = this.mediaTypeManager.createMediaTypeModelFromMediaType(metadata, metadata.type); const oldMediaTypeModel = this.mediaTypeManager.createMediaTypeModelFromMediaType(metadata, metadata.type);
// console.debug(oldMediaTypeModel); // console.debug(oldMediaTypeModel);
let newMediaTypeModel = await this.apiManager.queryDetailedInfoById(metadata.id, metadata.dataSource); let newMediaTypeModel = await this.apiManager.queryDetailedInfoById(metadata.id, metadata.dataSource);
@ -438,11 +438,11 @@ export default class MediaDbPlugin extends Plugin {
} }
} }
async createEntriesFromFolder(folder: TFolder) { async createEntriesFromFolder(folder: TFolder): Promise<void> {
const erroredFiles: { filePath: string; error: string }[] = []; const erroredFiles: { filePath: string; error: string }[] = [];
let canceled: boolean = false; let canceled: boolean = false;
const { selectedAPI, titleFieldName, appendContent } = await new Promise<{ selectedAPI: string; titleFieldName: string; appendContent: boolean }>((resolve, reject) => { const { selectedAPI, titleFieldName, appendContent } = await new Promise<{ selectedAPI: string; titleFieldName: string; appendContent: boolean }>(resolve => {
new MediaDbFolderImportModal(this.app, this, (selectedAPI: string, titleFieldName: string, appendContent: boolean) => { new MediaDbFolderImportModal(this.app, this, (selectedAPI: string, titleFieldName: string, appendContent: boolean) => {
resolve({ selectedAPI, titleFieldName, appendContent }); resolve({ selectedAPI, titleFieldName, appendContent });
}).open(); }).open();
@ -456,11 +456,11 @@ export default class MediaDbPlugin extends Plugin {
continue; continue;
} }
let metadata: any = this.getMetadataFromFileCache(file); const metadata: any = this.getMetadataFromFileCache(file);
let title = metadata[titleFieldName]; const title = metadata[titleFieldName];
if (!title) { if (!title) {
erroredFiles.push({ filePath: file.path, error: `metadata field \'${titleFieldName}\' not found or empty` }); erroredFiles.push({ filePath: file.path, error: `metadata field '${titleFieldName}' not found or empty` });
continue; continue;
} }
@ -476,7 +476,7 @@ export default class MediaDbPlugin extends Plugin {
continue; continue;
} }
let { selectModalResult, selectModal } = await this.modalHelper.createSelectModal({ elements: results, skipButton: true, modalTitle: `Results for \'${title}\'` }); const { selectModalResult, selectModal } = await this.modalHelper.createSelectModal({ elements: results, skipButton: true, modalTitle: `Results for '${title}'` });
if (selectModalResult.code === ModalResultCode.ERROR) { if (selectModalResult.code === ModalResultCode.ERROR) {
erroredFiles.push({ filePath: file.path, error: selectModalResult.error.message }); erroredFiles.push({ filePath: file.path, error: selectModalResult.error.message });
@ -520,30 +520,29 @@ export default class MediaDbPlugin extends Plugin {
const table = [['file', 'error']].concat(erroredFiles.map(x => [x.filePath, x.error])); const table = [['file', 'error']].concat(erroredFiles.map(x => [x.filePath, x.error]));
let fileContent = `# ${title}\n\n${markdownTable(table)}`; const fileContent = `# ${title}\n\n${markdownTable(table)}`;
await this.app.vault.create(filePath, fileContent);
const targetFile = await this.app.vault.create(filePath, fileContent);
} }
async loadSettings() { async loadSettings(): Promise<void> {
// console.log(DEFAULT_SETTINGS); // console.log(DEFAULT_SETTINGS);
const diskSettings: MediaDbPluginSettings = await this.loadData(); const diskSettings: MediaDbPluginSettings = await this.loadData();
const defaultSettings: MediaDbPluginSettings = getDefaultSettings(this); const defaultSettings: MediaDbPluginSettings = getDefaultSettings(this);
const loadedSettings: MediaDbPluginSettings = Object.assign({}, defaultSettings, diskSettings); const loadedSettings: MediaDbPluginSettings = Object.assign({}, defaultSettings, diskSettings);
// migrate the settings loaded from the disk to match the structure of the default settings // migrate the settings loaded from the disk to match the structure of the default settings
let newPropertyMappings: PropertyMappingModel[] = []; const newPropertyMappings: PropertyMappingModel[] = [];
for (const defaultPropertyMappingModel of defaultSettings.propertyMappingModels) { for (const defaultPropertyMappingModel of defaultSettings.propertyMappingModels) {
let newPropertyMappingModel: PropertyMappingModel = loadedSettings.propertyMappingModels.find(x => x.type === defaultPropertyMappingModel.type); const newPropertyMappingModel: PropertyMappingModel = loadedSettings.propertyMappingModels.find(x => x.type === defaultPropertyMappingModel.type);
if (newPropertyMappingModel === undefined) { if (newPropertyMappingModel === undefined) {
// if the propertyMappingModel exists in the default settings but not the loaded settings, add it // if the propertyMappingModel exists in the default settings but not the loaded settings, add it
newPropertyMappings.push(defaultPropertyMappingModel); newPropertyMappings.push(defaultPropertyMappingModel);
} else { } else {
// if the propertyMappingModel also exists in the loaded settings, add it from there // if the propertyMappingModel also exists in the loaded settings, add it from there
let newProperties: PropertyMapping[] = []; const newProperties: PropertyMapping[] = [];
for (const defaultProperty of defaultPropertyMappingModel.properties) { for (const defaultProperty of defaultPropertyMappingModel.properties) {
let newProperty = newPropertyMappingModel.properties.find(x => x.property === defaultProperty.property); const newProperty = newPropertyMappingModel.properties.find(x => x.property === defaultProperty.property);
if (newProperty === undefined) { if (newProperty === undefined) {
// default property is an instance // default property is an instance
newProperties.push(defaultProperty); newProperties.push(defaultProperty);
@ -561,7 +560,7 @@ export default class MediaDbPlugin extends Plugin {
this.settings = loadedSettings; this.settings = loadedSettings;
} }
async saveSettings() { async saveSettings(): Promise<void> {
this.mediaTypeManager.updateTemplates(this.settings); this.mediaTypeManager.updateTemplates(this.settings);
this.mediaTypeManager.updateFolders(this.settings); this.mediaTypeManager.updateFolders(this.settings);

View file

@ -38,7 +38,7 @@ export class MediaDbAdvancedSearchModal extends Modal {
this.closeCallback = closeCallback; this.closeCallback = closeCallback;
} }
keyPressCallback(event: KeyboardEvent) { keyPressCallback(event: KeyboardEvent): void {
if (event.key === 'Enter') { if (event.key === 'Enter') {
this.search(); this.search();
} }
@ -66,7 +66,7 @@ export class MediaDbAdvancedSearchModal extends Modal {
} }
} }
onOpen() { onOpen(): void {
const { contentEl } = this; const { contentEl } = this;
contentEl.createEl('h2', { text: this.title }); contentEl.createEl('h2', { text: this.title });
@ -123,7 +123,7 @@ export class MediaDbAdvancedSearchModal extends Modal {
}); });
} }
onClose() { onClose(): void {
this.closeCallback(); this.closeCallback();
const { contentEl } = this; const { contentEl } = this;
contentEl.empty(); contentEl.empty();

View file

@ -16,12 +16,12 @@ export class MediaDbFolderImportModal extends Modal {
this.selectedApi = plugin.apiManager.apis[0].apiName; this.selectedApi = plugin.apiManager.apis[0].apiName;
} }
submit() { submit(): void {
this.onSubmit(this.selectedApi, this.titleFieldName, this.appendContent); this.onSubmit(this.selectedApi, this.titleFieldName, this.appendContent);
this.close(); this.close();
} }
onOpen() { onOpen(): void {
const { contentEl } = this; const { contentEl } = this;
contentEl.createEl('h2', { text: 'Import folder as Media DB entries' }); contentEl.createEl('h2', { text: 'Import folder as Media DB entries' });
@ -90,7 +90,7 @@ export class MediaDbFolderImportModal extends Modal {
}); });
} }
onClose() { onClose(): void {
const { contentEl } = this; const { contentEl } = this;
contentEl.empty(); contentEl.empty();
} }

View file

@ -33,7 +33,7 @@ export class MediaDbIdSearchModal extends Modal {
this.closeCallback = closeCallback; this.closeCallback = closeCallback;
} }
keyPressCallback(event: KeyboardEvent) { keyPressCallback(event: KeyboardEvent): void {
if (event.key === 'Enter') { if (event.key === 'Enter') {
this.search(); this.search();
} }
@ -59,7 +59,7 @@ export class MediaDbIdSearchModal extends Modal {
} }
} }
onOpen() { onOpen(): void {
const { contentEl } = this; const { contentEl } = this;
contentEl.createEl('h2', { text: this.title }); contentEl.createEl('h2', { text: this.title });
@ -108,7 +108,7 @@ export class MediaDbIdSearchModal extends Modal {
}); });
} }
onClose() { onClose(): void {
this.closeCallback(); this.closeCallback();
const { contentEl } = this; const { contentEl } = this;
contentEl.empty(); contentEl.empty();

View file

@ -37,14 +37,14 @@ export class MediaDbPreviewModal extends Modal {
} }
async preview(): Promise<void> { async preview(): Promise<void> {
let { contentEl } = this; const { contentEl } = this;
contentEl.addClass('media-db-plugin-preview-modal'); contentEl.addClass('media-db-plugin-preview-modal');
contentEl.createEl('h2', { text: this.title }); contentEl.createEl('h2', { text: this.title });
const previewWrapper = contentEl.createDiv({ cls: 'media-db-plugin-preview-wrapper' }); const previewWrapper = contentEl.createDiv({ cls: 'media-db-plugin-preview-wrapper' });
for (let result of this.elements) { for (const result of this.elements) {
previewWrapper.createEl('h3', { text: result.englishTitle }); previewWrapper.createEl('h3', { text: result.englishTitle });
const fileDiv = previewWrapper.createDiv(); const fileDiv = previewWrapper.createDiv();

View file

@ -1,16 +1,10 @@
import { ButtonComponent, Modal, Notice, Setting, TextComponent, ToggleComponent } from 'obsidian'; import { ButtonComponent, Modal, Notice, Setting, TextComponent, ToggleComponent } from 'obsidian';
import { MediaTypeModel } from '../models/MediaTypeModel'; import { MediaTypeModel } from '../models/MediaTypeModel';
import MediaDbPlugin from '../main'; import MediaDbPlugin from '../main';
import { import { SEARCH_MODAL_DEFAULT_OPTIONS, SearchModalData, SearchModalOptions } from '../utils/ModalHelper';
ADVANCED_SEARCH_MODAL_DEFAULT_OPTIONS,
AdvancedSearchModalData,
AdvancedSearchModalOptions,
SEARCH_MODAL_DEFAULT_OPTIONS,
SearchModalData,
SearchModalOptions,
} from '../utils/ModalHelper';
import { MEDIA_TYPES } from '../utils/MediaTypeManager'; import { MEDIA_TYPES } from '../utils/MediaTypeManager';
import { unCamelCase } from '../utils/Utils'; import { unCamelCase } from '../utils/Utils';
import { MediaType } from '../utils/MediaType';
export class MediaDbSearchModal extends Modal { export class MediaDbSearchModal extends Modal {
plugin: MediaDbPlugin; plugin: MediaDbPlugin;
@ -18,7 +12,7 @@ export class MediaDbSearchModal extends Modal {
query: string; query: string;
isBusy: boolean; isBusy: boolean;
title: string; title: string;
selectedTypes: { name: string; selected: boolean }[]; selectedTypes: { name: MediaType; selected: boolean }[];
searchBtn: ButtonComponent; searchBtn: ButtonComponent;
@ -47,7 +41,7 @@ export class MediaDbSearchModal extends Modal {
this.closeCallback = closeCallback; this.closeCallback = closeCallback;
} }
keyPressCallback(event: KeyboardEvent) { keyPressCallback(event: KeyboardEvent): void {
if (event.key === 'Enter') { if (event.key === 'Enter') {
this.search(); this.search();
} }
@ -59,7 +53,7 @@ export class MediaDbSearchModal extends Modal {
return; return;
} }
const types: string[] = this.selectedTypes.filter(x => x.selected).map(x => x.name); const types: MediaType[] = this.selectedTypes.filter(x => x.selected).map(x => x.name);
if (types.length === 0) { if (types.length === 0) {
new Notice('MDB | No Type selected'); new Notice('MDB | No Type selected');
@ -75,7 +69,7 @@ export class MediaDbSearchModal extends Modal {
} }
} }
onOpen() { onOpen(): void {
const { contentEl } = this; const { contentEl } = this;
contentEl.createEl('h2', { text: this.title }); contentEl.createEl('h2', { text: this.title });
@ -130,7 +124,7 @@ export class MediaDbSearchModal extends Modal {
}); });
} }
onClose() { onClose(): void {
this.closeCallback(); this.closeCallback();
const { contentEl } = this; const { contentEl } = this;
contentEl.empty(); contentEl.empty();

View file

@ -40,14 +40,14 @@ export class MediaDbSearchResultModal extends SelectModal<MediaTypeModel> {
} }
// Renders each suggestion item. // Renders each suggestion item.
renderElement(item: MediaTypeModel, el: HTMLElement) { renderElement(item: MediaTypeModel, el: HTMLElement): void {
el.createEl('div', { text: this.plugin.mediaTypeManager.getFileName(item) }); el.createEl('div', { text: this.plugin.mediaTypeManager.getFileName(item) });
el.createEl('small', { text: `${item.getSummary()}\n` }); el.createEl('small', { text: `${item.getSummary()}\n` });
el.createEl('small', { text: `${item.type.toUpperCase() + (item.subType ? ` (${item.subType})` : '')} from ${item.dataSource}` }); el.createEl('small', { text: `${item.type.toUpperCase() + (item.subType ? ` (${item.subType})` : '')} from ${item.dataSource}` });
} }
// Perform action on the selected suggestion. // Perform action on the selected suggestion.
submit() { submit(): void {
if (!this.busy) { if (!this.busy) {
this.busy = true; this.busy = true;
this.submitButton.setButtonText('Creating entry...'); this.submitButton.setButtonText('Creating entry...');
@ -55,12 +55,12 @@ export class MediaDbSearchResultModal extends SelectModal<MediaTypeModel> {
} }
} }
skip() { skip(): void {
this.skipButton.setButtonText('Skipping...'); this.skipButton.setButtonText('Skipping...');
this.skipCallback(); this.skipCallback();
} }
onClose() { onClose(): void {
this.closeCallback(); this.closeCallback();
} }
} }

View file

@ -59,7 +59,7 @@ export abstract class SelectModal<T> extends Modal {
abstract skip(): void; abstract skip(): void;
disableAllOtherElements(elementId: number) { disableAllOtherElements(elementId: number): void {
for (const selectModalElement of this.selectModalElements) { for (const selectModalElement of this.selectModalElements) {
if (selectModalElement.id !== elementId) { if (selectModalElement.id !== elementId) {
selectModalElement.setActive(false); selectModalElement.setActive(false);
@ -67,7 +67,7 @@ export abstract class SelectModal<T> extends Modal {
} }
} }
deHighlightAllOtherElements(elementId: number) { deHighlightAllOtherElements(elementId: number): void {
for (const selectModalElement of this.selectModalElements) { for (const selectModalElement of this.selectModalElements) {
if (selectModalElement.id !== elementId) { if (selectModalElement.id !== elementId) {
selectModalElement.setHighlighted(false); selectModalElement.setHighlighted(false);
@ -75,7 +75,7 @@ export abstract class SelectModal<T> extends Modal {
} }
} }
async onOpen() { async onOpen(): Promise<void> {
const { contentEl, titleEl } = this; const { contentEl, titleEl } = this;
titleEl.createEl('h2', { text: this.title }); titleEl.createEl('h2', { text: this.title });
@ -122,7 +122,7 @@ export abstract class SelectModal<T> extends Modal {
}); });
} }
activateHighlighted() { activateHighlighted(): void {
for (const selectModalElement of this.selectModalElements) { for (const selectModalElement of this.selectModalElements) {
if (selectModalElement.isHighlighted()) { if (selectModalElement.isHighlighted()) {
selectModalElement.setActive(!selectModalElement.isActive()); selectModalElement.setActive(!selectModalElement.isActive());
@ -133,7 +133,7 @@ export abstract class SelectModal<T> extends Modal {
} }
} }
highlightUp() { highlightUp(): void {
for (const selectModalElement of this.selectModalElements) { for (const selectModalElement of this.selectModalElements) {
if (selectModalElement.isHighlighted()) { if (selectModalElement.isHighlighted()) {
this.getPreviousSelectModalElement(selectModalElement).setHighlighted(true); this.getPreviousSelectModalElement(selectModalElement).setHighlighted(true);
@ -145,7 +145,7 @@ export abstract class SelectModal<T> extends Modal {
this.selectModalElements.last().setHighlighted(true); this.selectModalElements.last().setHighlighted(true);
} }
highlightDown() { highlightDown(): void {
for (const selectModalElement of this.selectModalElements) { for (const selectModalElement of this.selectModalElements) {
if (selectModalElement.isHighlighted()) { if (selectModalElement.isHighlighted()) {
this.getNextSelectModalElement(selectModalElement).setHighlighted(true); this.getNextSelectModalElement(selectModalElement).setHighlighted(true);

View file

@ -45,7 +45,7 @@ export class SelectModalElement<T> {
return this.highlighted; return this.highlighted;
} }
setHighlighted(value: boolean) { setHighlighted(value: boolean): void {
this.highlighted = value; this.highlighted = value;
if (this.highlighted) { if (this.highlighted) {
this.addClass(this.hoverClass); this.addClass(this.hoverClass);

View file

@ -40,6 +40,7 @@ export class PropertyMapper {
// @ts-ignore // @ts-ignore
newObj[propertyMapping.newProperty] = value; newObj[propertyMapping.newProperty] = value;
} else if (propertyMapping.mapping === PropertyMappingOption.Remove) { } else if (propertyMapping.mapping === PropertyMappingOption.Remove) {
// do nothing
} else if (propertyMapping.mapping === PropertyMappingOption.Default) { } else if (propertyMapping.mapping === PropertyMappingOption.Default) {
// @ts-ignore // @ts-ignore
newObj[key] = value; newObj[key] = value;

View file

@ -85,7 +85,7 @@ const DEFAULT_SETTINGS: MediaDbPluginSettings = {
export const lockedPropertyMappings: string[] = ['type', 'id', 'dataSource']; export const lockedPropertyMappings: string[] = ['type', 'id', 'dataSource'];
export function getDefaultSettings(plugin: MediaDbPlugin): MediaDbPluginSettings { export function getDefaultSettings(plugin: MediaDbPlugin): MediaDbPluginSettings {
let defaultSettings = DEFAULT_SETTINGS; const defaultSettings = DEFAULT_SETTINGS;
// construct property mapping defaults // construct property mapping defaults
const propertyMappingModels: PropertyMappingModel[] = []; const propertyMappingModels: PropertyMappingModel[] = [];
@ -406,7 +406,7 @@ export class MediaDbSettingTab extends PluginSettingTab {
containerEl.createEl('h3', { text: 'Property Mappings' }); containerEl.createEl('h3', { text: 'Property Mappings' });
let propertyMappingExplanation = containerEl.createEl('div'); const propertyMappingExplanation = containerEl.createEl('div');
propertyMappingExplanation.innerHTML = ` propertyMappingExplanation.innerHTML = `
<p>Allow you to remap the metadata fields of newly created media db entries.</p> <p>Allow you to remap the metadata fields of newly created media db entries.</p>
<p> <p>
@ -425,8 +425,8 @@ export class MediaDbSettingTab extends PluginSettingTab {
target: this.containerEl, target: this.containerEl,
props: { props: {
models: this.plugin.settings.propertyMappingModels.map(x => x.copy()), models: this.plugin.settings.propertyMappingModels.map(x => x.copy()),
save: (model: PropertyMappingModel) => { save: (model: PropertyMappingModel): void => {
let propertyMappingModels: PropertyMappingModel[] = []; const propertyMappingModels: PropertyMappingModel[] = [];
for (const model2 of this.plugin.settings.propertyMappingModels) { for (const model2 of this.plugin.settings.propertyMappingModels) {
if (model2.type === model.type) { if (model2.type === model.type) {

View file

@ -53,7 +53,7 @@ export class Suggest<T> {
this.setSelectedItem(item, false); this.setSelectedItem(item, false);
} }
setSuggestions(values: T[]) { setSuggestions(values: T[]): void {
this.containerEl.empty(); this.containerEl.empty();
const suggestionEls: HTMLDivElement[] = []; const suggestionEls: HTMLDivElement[] = [];
@ -68,14 +68,14 @@ export class Suggest<T> {
this.setSelectedItem(0, false); this.setSelectedItem(0, false);
} }
useSelectedItem(event: MouseEvent | KeyboardEvent) { useSelectedItem(event: MouseEvent | KeyboardEvent): void {
const currentValue = this.values[this.selectedItem]; const currentValue = this.values[this.selectedItem];
if (currentValue) { if (currentValue) {
this.owner.selectSuggestion(currentValue, event); this.owner.selectSuggestion(currentValue, event);
} }
} }
setSelectedItem(selectedIndex: number, scrollIntoView: boolean) { setSelectedItem(selectedIndex: number, scrollIntoView: boolean): void {
const normalizedIndex = this.suggestions.length > 0 ? wrapAround(selectedIndex, this.suggestions.length) : 0; const normalizedIndex = this.suggestions.length > 0 ? wrapAround(selectedIndex, this.suggestions.length) : 0;
const prevSelectedSuggestion = this.suggestions[this.selectedItem]; const prevSelectedSuggestion = this.suggestions[this.selectedItem];
const selectedSuggestion = this.suggestions[normalizedIndex]; const selectedSuggestion = this.suggestions[normalizedIndex];
@ -141,7 +141,7 @@ export abstract class TextInputSuggest<T> implements ISuggestOwner<T> {
{ {
name: 'sameWidth', name: 'sameWidth',
enabled: true, enabled: true,
fn: ({ state, instance }) => { fn: ({ state, instance }): void => {
// Note: positioning needs to be calculated twice - // Note: positioning needs to be calculated twice -
// first pass - positioning it according to the width of the popper // first pass - positioning it according to the width of the popper
// second pass - position it with the width bound to the reference element // second pass - position it with the width bound to the reference element

View file

@ -9,7 +9,6 @@ import { GameModel } from '../models/GameModel';
import { WikiModel } from '../models/WikiModel'; import { WikiModel } from '../models/WikiModel';
import { MusicReleaseModel } from '../models/MusicReleaseModel'; import { MusicReleaseModel } from '../models/MusicReleaseModel';
import { BoardGameModel } from '../models/BoardGameModel'; import { BoardGameModel } from '../models/BoardGameModel';
import { awaitExpression } from '@babel/types';
export const MEDIA_TYPES: MediaType[] = [MediaType.Movie, MediaType.Series, MediaType.Game, MediaType.Wiki, MediaType.MusicRelease, MediaType.BoardGame]; export const MEDIA_TYPES: MediaType[] = [MediaType.Movie, MediaType.Series, MediaType.Game, MediaType.Wiki, MediaType.MusicRelease, MediaType.BoardGame];
@ -20,7 +19,7 @@ export class MediaTypeManager {
constructor() {} constructor() {}
updateTemplates(settings: MediaDbPluginSettings) { updateTemplates(settings: MediaDbPluginSettings): void {
this.mediaFileNameTemplateMap = new Map<MediaType, string>(); this.mediaFileNameTemplateMap = new Map<MediaType, string>();
this.mediaFileNameTemplateMap.set(MediaType.Movie, settings.movieFileNameTemplate); this.mediaFileNameTemplateMap.set(MediaType.Movie, settings.movieFileNameTemplate);
this.mediaFileNameTemplateMap.set(MediaType.Series, settings.seriesFileNameTemplate); this.mediaFileNameTemplateMap.set(MediaType.Series, settings.seriesFileNameTemplate);
@ -38,7 +37,7 @@ export class MediaTypeManager {
this.mediaTemplateMap.set(MediaType.BoardGame, settings.boardgameTemplate); this.mediaTemplateMap.set(MediaType.BoardGame, settings.boardgameTemplate);
} }
updateFolders(settings: MediaDbPluginSettings) { updateFolders(settings: MediaDbPluginSettings): void {
this.mediaFolderMap = new Map<MediaType, string>(); this.mediaFolderMap = new Map<MediaType, string>();
this.mediaFolderMap.set(MediaType.Movie, settings.movieFolder); this.mediaFolderMap.set(MediaType.Movie, settings.movieFolder);
this.mediaFolderMap.set(MediaType.Series, settings.seriesFolder); this.mediaFolderMap.set(MediaType.Series, settings.seriesFolder);
@ -52,7 +51,7 @@ export class MediaTypeManager {
return replaceTags(this.mediaFileNameTemplateMap.get(mediaTypeModel.getMediaType()), mediaTypeModel); return replaceTags(this.mediaFileNameTemplateMap.get(mediaTypeModel.getMediaType()), mediaTypeModel);
} }
async getTemplate(mediaTypeModel: MediaTypeModel, app: App) { async getTemplate(mediaTypeModel: MediaTypeModel, app: App): Promise<string> {
const templateFileName = this.mediaTemplateMap.get(mediaTypeModel.getMediaType()); const templateFileName = this.mediaTemplateMap.get(mediaTypeModel.getMediaType());
if (!templateFileName) { if (!templateFileName) {
@ -84,7 +83,7 @@ export class MediaTypeManager {
if (!(await app.vault.adapter.exists(folderPath))) { if (!(await app.vault.adapter.exists(folderPath))) {
await app.vault.createFolder(folderPath); await app.vault.createFolder(folderPath);
} }
let folder: TAbstractFile = app.vault.getAbstractFileByPath(folderPath); const folder: TAbstractFile = app.vault.getAbstractFileByPath(folderPath);
if (!(folder instanceof TFolder)) { if (!(folder instanceof TFolder)) {
throw Error(`Expected ${folder} to be instance of TFolder`); throw Error(`Expected ${folder} to be instance of TFolder`);

View file

@ -229,7 +229,7 @@ export class ModalHelper {
*/ */
async createSearchModal(searchModalOptions: SearchModalOptions): Promise<{ searchModalResult: SearchModalResult; searchModal: MediaDbSearchModal }> { async createSearchModal(searchModalOptions: SearchModalOptions): Promise<{ searchModalResult: SearchModalResult; searchModal: MediaDbSearchModal }> {
const modal = new MediaDbSearchModal(this.plugin, searchModalOptions); const modal = new MediaDbSearchModal(this.plugin, searchModalOptions);
const res: SearchModalResult = await new Promise((resolve, reject) => { const res: SearchModalResult = await new Promise(resolve => {
modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res })); modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res }));
modal.setCloseCallback(err => { modal.setCloseCallback(err => {
if (err) { if (err) {
@ -269,8 +269,7 @@ export class ModalHelper {
} }
try { try {
let callbackRes: MediaTypeModel[]; const callbackRes: MediaTypeModel[] = await submitCallback(searchModalResult.data);
callbackRes = await submitCallback(searchModalResult.data);
searchModal.close(); searchModal.close();
return callbackRes; return callbackRes;
} catch (e) { } catch (e) {
@ -293,7 +292,7 @@ export class ModalHelper {
advancedSearchModalOptions: AdvancedSearchModalOptions advancedSearchModalOptions: AdvancedSearchModalOptions
): Promise<{ advancedSearchModalResult: AdvancedSearchModalResult; advancedSearchModal: MediaDbAdvancedSearchModal }> { ): Promise<{ advancedSearchModalResult: AdvancedSearchModalResult; advancedSearchModal: MediaDbAdvancedSearchModal }> {
const modal = new MediaDbAdvancedSearchModal(this.plugin, advancedSearchModalOptions); const modal = new MediaDbAdvancedSearchModal(this.plugin, advancedSearchModalOptions);
const res: AdvancedSearchModalResult = await new Promise((resolve, reject) => { const res: AdvancedSearchModalResult = await new Promise(resolve => {
modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res })); modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res }));
modal.setCloseCallback(err => { modal.setCloseCallback(err => {
if (err) { if (err) {
@ -336,8 +335,7 @@ export class ModalHelper {
} }
try { try {
let callbackRes: MediaTypeModel[]; const callbackRes: MediaTypeModel[] = await submitCallback(advancedSearchModalResult.data);
callbackRes = await submitCallback(advancedSearchModalResult.data);
advancedSearchModal.close(); advancedSearchModal.close();
return callbackRes; return callbackRes;
} catch (e) { } catch (e) {
@ -358,7 +356,7 @@ export class ModalHelper {
*/ */
async createIdSearchModal(idSearchModalOptions: IdSearchModalOptions): Promise<{ idSearchModalResult: IdSearchModalResult; idSearchModal: MediaDbIdSearchModal }> { async createIdSearchModal(idSearchModalOptions: IdSearchModalOptions): Promise<{ idSearchModalResult: IdSearchModalResult; idSearchModal: MediaDbIdSearchModal }> {
const modal = new MediaDbIdSearchModal(this.plugin, idSearchModalOptions); const modal = new MediaDbIdSearchModal(this.plugin, idSearchModalOptions);
const res: IdSearchModalResult = await new Promise((resolve, reject) => { const res: IdSearchModalResult = await new Promise(resolve => {
modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res })); modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res }));
modal.setCloseCallback(err => { modal.setCloseCallback(err => {
if (err) { if (err) {
@ -401,8 +399,7 @@ export class ModalHelper {
} }
try { try {
let callbackRes: MediaTypeModel; const callbackRes: MediaTypeModel = await submitCallback(idSearchModalResult.data);
callbackRes = await submitCallback(idSearchModalResult.data);
idSearchModal.close(); idSearchModal.close();
return callbackRes; return callbackRes;
} catch (e) { } catch (e) {
@ -423,7 +420,7 @@ export class ModalHelper {
*/ */
async createSelectModal(selectModalOptions: SelectModalOptions): Promise<{ selectModalResult: SelectModalResult; selectModal: MediaDbSearchResultModal }> { async createSelectModal(selectModalOptions: SelectModalOptions): Promise<{ selectModalResult: SelectModalResult; selectModal: MediaDbSearchResultModal }> {
const modal = new MediaDbSearchResultModal(this.plugin, selectModalOptions); const modal = new MediaDbSearchResultModal(this.plugin, selectModalOptions);
const res: SelectModalResult = await new Promise((resolve, reject) => { const res: SelectModalResult = await new Promise(resolve => {
modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res })); modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res }));
modal.setSkipCallback(() => resolve({ code: ModalResultCode.SKIP })); modal.setSkipCallback(() => resolve({ code: ModalResultCode.SKIP }));
modal.setCloseCallback(err => { modal.setCloseCallback(err => {
@ -469,8 +466,7 @@ export class ModalHelper {
} }
try { try {
let callbackRes: MediaTypeModel[]; const callbackRes: MediaTypeModel[] = await submitCallback(selectModalResult.data);
callbackRes = await submitCallback(selectModalResult.data);
selectModal.close(); selectModal.close();
return callbackRes; return callbackRes;
} catch (e) { } catch (e) {
@ -484,7 +480,7 @@ export class ModalHelper {
async createPreviewModal(previewModalOptions: PreviewModalOptions): Promise<{ previewModalResult: PreviewModalResult; previewModal: MediaDbPreviewModal }> { async createPreviewModal(previewModalOptions: PreviewModalOptions): Promise<{ previewModalResult: PreviewModalResult; previewModal: MediaDbPreviewModal }> {
//todo: handle attachFile for existing files //todo: handle attachFile for existing files
const modal = new MediaDbPreviewModal(this.plugin, previewModalOptions); const modal = new MediaDbPreviewModal(this.plugin, previewModalOptions);
const res: PreviewModalResult = await new Promise((resolve, reject) => { const res: PreviewModalResult = await new Promise(resolve => {
modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res })); modal.setSubmitCallback(res => resolve({ code: ModalResultCode.SUCCESS, data: res }));
modal.setCloseCallback(err => { modal.setCloseCallback(err => {
if (err) { if (err) {
@ -516,8 +512,7 @@ export class ModalHelper {
} }
try { try {
let callbackRes: boolean; const callbackRes: boolean = await submitCallback(previewModalResult.data);
callbackRes = await submitCallback(previewModalResult.data);
previewModal.close(); previewModal.close();
return callbackRes; return callbackRes;
} catch (e) { } catch (e) {

View file

@ -14,16 +14,6 @@ export function wrapAround(value: number, size: number): number {
return mod(value, size); return mod(value, size);
} }
/**
* @deprecated use console.debug instead
* @param o
*/
export function debugLog(o: any): void {
if (debug) {
console.log(o);
}
}
export function containsOnlyLettersAndUnderscores(str: string): boolean { export function containsOnlyLettersAndUnderscores(str: string): boolean {
return /^[a-zA-Z_]+$/.test(str); return /^[a-zA-Z_]+$/.test(str);
} }
@ -33,9 +23,7 @@ export function replaceIllegalFileNameCharactersInString(string: string): string
} }
export function replaceTags(template: string, mediaTypeModel: MediaTypeModel): string { export function replaceTags(template: string, mediaTypeModel: MediaTypeModel): string {
const resolvedTemplate = template.replace(new RegExp('{{.*?}}', 'g'), (match: string) => replaceTag(match, mediaTypeModel)); return template.replace(new RegExp('{{.*?}}', 'g'), (match: string) => replaceTag(match, mediaTypeModel));
return resolvedTemplate;
} }
function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string { function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string {
@ -44,11 +32,11 @@ function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string {
tag = tag.substring(0, tag.length - 2); tag = tag.substring(0, tag.length - 2);
tag = tag.trim(); tag = tag.trim();
let parts = tag.split(':'); const parts = tag.split(':');
if (parts.length === 1) { if (parts.length === 1) {
let path = parts[0].split('.'); const path = parts[0].split('.');
let obj = traverseMetaData(path, mediaTypeModel); const obj = traverseMetaData(path, mediaTypeModel);
if (obj === undefined) { if (obj === undefined) {
return '{{ INVALID TEMPLATE TAG - object undefined }}'; return '{{ INVALID TEMPLATE TAG - object undefined }}';
@ -56,11 +44,11 @@ function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string {
return obj; return obj;
} else if (parts.length === 2) { } else if (parts.length === 2) {
let operator = parts[0]; const operator = parts[0];
let path = parts[1].split('.'); const path = parts[1].split('.');
let obj = traverseMetaData(path, mediaTypeModel); const obj = traverseMetaData(path, mediaTypeModel);
if (obj === undefined) { if (obj === undefined) {
return '{{ INVALID TEMPLATE TAG - object undefined }}'; return '{{ INVALID TEMPLATE TAG - object undefined }}';
@ -87,7 +75,7 @@ function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string {
function traverseMetaData(path: Array<string>, mediaTypeModel: MediaTypeModel): any { function traverseMetaData(path: Array<string>, mediaTypeModel: MediaTypeModel): any {
let o: any = mediaTypeModel; let o: any = mediaTypeModel;
for (let part of path) { for (const part of path) {
if (o !== undefined) { if (o !== undefined) {
o = o[part]; o = o[part];
} }
@ -97,12 +85,12 @@ function traverseMetaData(path: Array<string>, mediaTypeModel: MediaTypeModel):
} }
export function markdownTable(content: string[][]): string { export function markdownTable(content: string[][]): string {
let rows = content.length; const rows = content.length;
if (rows === 0) { if (rows === 0) {
return ''; return '';
} }
let columns = content[0].length; const columns = content[0].length;
if (columns === 0) { if (columns === 0) {
return ''; return '';
} }
@ -112,7 +100,7 @@ export function markdownTable(content: string[][]): string {
} }
} }
let longestStringInColumns: number[] = []; const longestStringInColumns: number[] = [];
for (let i = 0; i < columns; i++) { for (let i = 0; i < columns; i++) {
let longestStringInColumn = 0; let longestStringInColumn = 0;
@ -147,36 +135,18 @@ export function markdownTable(content: string[][]): string {
return table; return table;
} }
export function dateToString(date: Date) { export function dateToString(date: Date): string {
return `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}`; return `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}`;
} }
export function timeToString(time: Date) { export function timeToString(time: Date): string {
return `${time.getHours()}-${time.getMinutes()}-${time.getSeconds()}`; return `${time.getHours()}-${time.getMinutes()}-${time.getSeconds()}`;
} }
export function dateTimeToString(dateTime: Date) { export function dateTimeToString(dateTime: Date): string {
return `${dateToString(dateTime)} ${timeToString(dateTime)}`; return `${dateToString(dateTime)} ${timeToString(dateTime)}`;
} }
/**
* @deprecated
*/
export class UserCancelError extends Error {
constructor(message: string) {
super(message);
}
}
/**
* @deprecated
*/
export class UserSkipError extends Error {
constructor(message: string) {
super(message);
}
}
// js can't even implement modulo correctly... // js can't even implement modulo correctly...
export function mod(n: number, m: number): number { export function mod(n: number, m: number): number {
return ((n % m) + m) % m; return ((n % m) + m) % m;