Skip to content

Commit 1b31436

Browse files
committed
templates \o/
1 parent a70e576 commit 1b31436

File tree

4 files changed

+62
-19
lines changed

4 files changed

+62
-19
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ Search a movie, series, anime or game by its name across multiple APIs.
99
#### Search by ID
1010
Allows you to search by an ID that varies from API to API. Concrete info can be found in the description of the individual APIs.
1111

12+
#### Templates
13+
The plugin allows you to set a template note that gets added to the end of any note created by this plugin.
14+
The plugin also offers simple "template tgs". E.g. if the template includes `{{ title }}`, it will be replaced by the title of the movie, show or game.
15+
Note that "template tags" are surrounded with two curly braces and that the spaces inside the curly braces are important.
16+
I also published my own templates [here](https://github.com/mProjectsCode/obsidian-media-db-templates).
17+
1218
### Currently supported media types
1319
- movies (including specials)
1420
- series (including OVAs)

src/main.ts

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {DEFAULT_SETTINGS, MediaDbPluginSettings, MediaDbSettingTab} from './sett
33
import {APIManager} from './api/APIManager';
44
import {TestAPI} from './api/apis/TestAPI';
55
import {MediaTypeModel} from './models/MediaTypeModel';
6-
import {replaceIllegalFileNameCharactersInString} from './utils/Utils';
6+
import {replaceIllegalFileNameCharactersInString, replaceTags} from './utils/Utils';
77
import {OMDbAPI} from './api/apis/OMDbAPI';
88
import {MediaDbAdvancedSearchModal} from './modals/MediaDbAdvancedSearchModal';
99
import {MediaDbSearchResultModal} from './modals/MediaDbSearchResultModal';
@@ -60,27 +60,23 @@ export default class MediaDbPlugin extends Plugin {
6060

6161
let fileContent = `---\n${data.toMetaData()}---\n`;
6262

63+
let templateFile: TFile = null;
64+
6365
if (data.type === 'movie' && this.settings.movieTemplate) {
64-
const templateFile = this.app.vault.getFiles().filter((f: TFile) => f.name === this.settings.movieTemplate).first();
65-
if (templateFile) {
66-
let template = await this.app.vault.read(templateFile);
67-
// console.log(template);
68-
fileContent += template;
69-
}
66+
templateFile = this.app.vault.getFiles().filter((f: TFile) => f.name === this.settings.movieTemplate).first();
7067
} else if (data.type === 'series' && this.settings.seriesTemplate) {
71-
const templateFile = this.app.vault.getFiles().filter((f: TFile) => f.name === this.settings.seriesTemplate).first();
72-
if (templateFile) {
73-
let template = await this.app.vault.read(templateFile);
74-
// console.log(template);
75-
fileContent += template;
76-
}
77-
} else if (data.type === 'game' && this.settings.seriesTemplate) {
78-
const templateFile = this.app.vault.getFiles().filter((f: TFile) => f.name === this.settings.gameTemplate).first();
79-
if (templateFile) {
80-
let template = await this.app.vault.read(templateFile);
81-
// console.log(template);
82-
fileContent += template;
68+
templateFile = this.app.vault.getFiles().filter((f: TFile) => f.name === this.settings.seriesTemplate).first();
69+
} else if (data.type === 'game' && this.settings.gameTemplate) {
70+
templateFile = this.app.vault.getFiles().filter((f: TFile) => f.name === this.settings.gameTemplate).first();
71+
}
72+
73+
if (templateFile) {
74+
let template = await this.app.vault.read(templateFile);
75+
// console.log(template);
76+
if (this.settings.templates) {
77+
template = replaceTags(template, data);
8378
}
79+
fileContent += template;
8480
}
8581

8682
const fileName = replaceIllegalFileNameCharactersInString(data.getFileName());

src/settings/Settings.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export interface MediaDbPluginSettings {
1212
movieTemplate: string,
1313
seriesTemplate: string,
1414
gameTemplate: string,
15+
templates: boolean,
1516
}
1617

1718
export const DEFAULT_SETTINGS: MediaDbPluginSettings = {
@@ -21,6 +22,7 @@ export const DEFAULT_SETTINGS: MediaDbPluginSettings = {
2122
movieTemplate: '',
2223
seriesTemplate: '',
2324
gameTemplate: '',
25+
templates: true,
2426
};
2527

2628
export class MediaDbSettingTab extends PluginSettingTab {
@@ -51,6 +53,17 @@ export class MediaDbSettingTab extends PluginSettingTab {
5153
});
5254
});
5355

56+
new Setting(containerEl)
57+
.setName('Resolve {{ tags }} in templates')
58+
.setDesc('Whether to resolve {{ tags }} in templates. The spaces inside the curly braces are important.')
59+
.addToggle(cb => {
60+
cb.setValue(this.plugin.settings.templates)
61+
.onChange(data => {
62+
this.plugin.settings.templates = data;
63+
this.plugin.saveSettings();
64+
});
65+
});
66+
5467
new Setting(containerEl)
5568
.setName('Movie template')
5669
.setDesc('Template file to be used when creating a new note for a movie.')

src/utils/Utils.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,31 @@ export function getFileName(item: MediaTypeModel) {
1515
export function replaceIllegalFileNameCharactersInString(string: string) {
1616
return string.replace(/[\\,#%&{}/*<>$"@.]*/g, '').replace(/:+/g, ' -');
1717
}
18+
19+
export function replaceTags(template: string, mediaTypeModel: MediaTypeModel): string {
20+
const resolvedTemplate = template.replace(new RegExp('{{ .*? }}', 'g'), (match: string) => replaceTag(match, mediaTypeModel));
21+
22+
return resolvedTemplate;
23+
}
24+
25+
function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string {
26+
let tag = match;
27+
tag = tag.substring(3);
28+
tag = tag.substring(0, tag.length - 3);
29+
30+
let parts = tag.split('.');
31+
32+
let o: any = mediaTypeModel;
33+
34+
for (let part of parts) {
35+
if (o !== undefined) {
36+
o = o[part];
37+
}
38+
}
39+
40+
if (o === undefined) {
41+
o = '{{ INVALID TEMPLATE TAG }}';
42+
}
43+
44+
return o;
45+
}

0 commit comments

Comments
 (0)