fix handle yaml special characters

This commit is contained in:
wanxp 2022-11-01 23:06:26 +08:00
parent a6ba7545a0
commit 8316dc319c
12 changed files with 163 additions and 126 deletions

@ -31,7 +31,7 @@ If you want some features or have any questions about this plugin, create issues
- [Development Roadmap](https://github.com/users/Wanxp/projects/1) - [Development Roadmap](https://github.com/users/Wanxp/projects/1)
## Support Field/支持的字段 ## Support Field/支持的字段
(若有字段缺失, 欢迎提issues反馈) (若有缺少想导入的字段, 欢迎提issues反馈)
--- ---
| 字段 | 电影 | 电视剧 | 书籍 | 音乐 | 日记 | 游戏 | 广播 | | 字段 | 电影 | 电视剧 | 书籍 | 音乐 | 日记 | 游戏 | 广播 |

@ -59,6 +59,117 @@ export class DoubanSettingTab extends PluginSettingTab {
}); });
}); });
new Setting(containerEl).setName(i18nHelper.getMessage('120501')).then((setting) => {
setting.addMomentFormat((mf) => {
setting.descEl.appendChild(
createFragment((frag) => {
frag.appendText(
i18nHelper.getMessage('120503')
);
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('120506') + ' ');
frag.createEl(
'a',
{
text: i18nHelper.getMessage('120508'),
href: 'https://momentjs.com/docs/#/displaying/format/',
},
(a) => {
a.setAttr('target', '_blank');
}
);
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('120507') + ': ');
mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'}));
frag.createEl('br');
})
);
mf.setPlaceholder(DEFAULT_SETTINGS.dateFormat);
mf.setValue(this.plugin.settings.dateFormat)
mf.onChange(async (value) => {
this.plugin.settings.dateFormat = value;
await this.plugin.saveSettings();
});
});
});
new Setting(containerEl).setName(i18nHelper.getMessage('120502')).then((setting) => {
setting.addMomentFormat((mf) => {
setting.descEl.appendChild(
createFragment((frag) => {
frag.appendText(
i18nHelper.getMessage('120504')
);
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('120506') + ' ');
frag.createEl(
'a',
{
text: i18nHelper.getMessage('120508'),
href: 'https://momentjs.com/docs/#/displaying/format/',
},
(a) => {
a.setAttr('target', '_blank');
}
);
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('120507') + ': ');
mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'}));
frag.createEl('br');
})
);
mf.setPlaceholder(DEFAULT_SETTINGS.timeFormat);
mf.setValue(this.plugin.settings.timeFormat)
mf.onChange(async (value) => {
this.plugin.settings.timeFormat = value;
await this.plugin.saveSettings();
});
});
});
new Setting(containerEl)
.setName(i18nHelper.getMessage('120601'))
.setDesc(i18nHelper.getMessage('120602'))
.addText((textField) => {
textField.setPlaceholder(DEFAULT_SETTINGS.arraySpilt)
.setValue(this.plugin.settings.arraySpilt)
.onChange(async (value) => {
this.plugin.settings.arraySpilt = value;
await this.plugin.saveSettings();
});
});
new Setting(containerEl).setName(i18nHelper.getMessage('121201')).then((setting) => {
setting.addDropdown((dropdwon) => {
setting.descEl.appendChild(
createFragment((frag) => {
frag.appendText(i18nHelper.getMessage('121202'));
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('121203'));
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('121204'));
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('121205'));
frag.createEl('br');
})
);
// dropdwon.inputEl.addClass("settings_area");
// dropdwon.inputEl.setAttr("rows", 10);
dropdwon.addOption(PersonNameMode.CH_NAME, PersonNameModeRecords.CH)
dropdwon.addOption(PersonNameMode.EN_NAME, PersonNameModeRecords.EN)
dropdwon.addOption(PersonNameMode.CH_EN_NAME, PersonNameModeRecords.CH_EN)
dropdwon.setValue(this.plugin.settings.personNameMode)
.onChange(async (value: string) => {
this.plugin.settings.personNameMode = value as PersonNameMode;
await this.plugin.saveSettings();
});
});
});
new Setting(containerEl).setName(i18nHelper.getMessage('120101')).then((setting) => { new Setting(containerEl).setName(i18nHelper.getMessage('120101')).then((setting) => {
setting.addTextArea((textarea) => { setting.addTextArea((textarea) => {
setting.descEl.appendChild( setting.descEl.appendChild(
@ -233,116 +344,7 @@ export class DoubanSettingTab extends PluginSettingTab {
}); });
}) })
new Setting(containerEl).setName(i18nHelper.getMessage('121201')).then((setting) => {
setting.addDropdown((dropdwon) => {
setting.descEl.appendChild(
createFragment((frag) => {
frag.appendText(i18nHelper.getMessage('121202'));
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('121203'));
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('121204'));
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('121205'));
frag.createEl('br');
})
);
// dropdwon.inputEl.addClass("settings_area");
// dropdwon.inputEl.setAttr("rows", 10);
dropdwon.addOption(PersonNameMode.CH_NAME, PersonNameModeRecords.CH)
dropdwon.addOption(PersonNameMode.EN_NAME, PersonNameModeRecords.EN)
dropdwon.addOption(PersonNameMode.CH_EN_NAME, PersonNameModeRecords.CH_EN)
dropdwon.setValue(this.plugin.settings.personNameMode)
.onChange(async (value: string) => {
this.plugin.settings.personNameMode = value as PersonNameMode;
await this.plugin.saveSettings();
});
});
});
new Setting(containerEl).setName(i18nHelper.getMessage('120501')).then((setting) => {
setting.addMomentFormat((mf) => {
setting.descEl.appendChild(
createFragment((frag) => {
frag.appendText(
i18nHelper.getMessage('120503')
);
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('120506') + ' ');
frag.createEl(
'a',
{
text: i18nHelper.getMessage('120508'),
href: 'https://momentjs.com/docs/#/displaying/format/',
},
(a) => {
a.setAttr('target', '_blank');
}
);
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('120507') + ': ');
mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'}));
frag.createEl('br');
})
);
mf.setPlaceholder(DEFAULT_SETTINGS.dateFormat);
mf.setValue(this.plugin.settings.dateFormat)
mf.onChange(async (value) => {
this.plugin.settings.dateFormat = value;
await this.plugin.saveSettings();
});
});
});
new Setting(containerEl).setName(i18nHelper.getMessage('120502')).then((setting) => {
setting.addMomentFormat((mf) => {
setting.descEl.appendChild(
createFragment((frag) => {
frag.appendText(
i18nHelper.getMessage('120504')
);
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('120506') + ' ');
frag.createEl(
'a',
{
text: i18nHelper.getMessage('120508'),
href: 'https://momentjs.com/docs/#/displaying/format/',
},
(a) => {
a.setAttr('target', '_blank');
}
);
frag.createEl('br');
frag.appendText(i18nHelper.getMessage('120507') + ': ');
mf.setSampleEl(frag.createEl('b', {cls: 'u-pop'}));
frag.createEl('br');
})
);
mf.setPlaceholder(DEFAULT_SETTINGS.timeFormat);
mf.setValue(this.plugin.settings.timeFormat)
mf.onChange(async (value) => {
this.plugin.settings.timeFormat = value;
await this.plugin.saveSettings();
});
});
});
new Setting(containerEl)
.setName(i18nHelper.getMessage('120601'))
.setDesc(i18nHelper.getMessage('120602'))
.addText((textField) => {
textField.setPlaceholder(DEFAULT_SETTINGS.arraySpilt)
.setValue(this.plugin.settings.arraySpilt)
.onChange(async (value) => {
this.plugin.settings.arraySpilt = value;
await this.plugin.saveSettings();
});
});
} }
} }

@ -2,9 +2,10 @@ import {CheerioAPI} from 'cheerio';
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanBookSubject, {DoubanBookParameter} from "../model/DoubanBookSubject"; import DoubanBookSubject, {DoubanBookParameter} from "../model/DoubanBookSubject";
import DoubanPlugin from "main"; import DoubanPlugin from "main";
import {DoubanPluginSettings} from "src/douban/Douban"; import {DEFAULT_SETTINGS, DoubanPluginSettings} from "src/douban/Douban";
import DoubanSubject from "../model/DoubanSubject"; import DoubanSubject from "../model/DoubanSubject";
import {TemplateTextMode} from "../../../constant/Constsant"; import {TemplateTextMode} from "../../../constant/Constsant";
import StringUtil from "../../../utils/StringUtil";
export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<DoubanBookSubject> { export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<DoubanBookSubject> {
@ -13,7 +14,7 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
} }
getTemplate(settings: DoubanPluginSettings): string { getTemplate(settings: DoubanPluginSettings): string {
return settings.bookTemplate; return StringUtil.defaultIfBlank(settings.bookTemplate, DEFAULT_SETTINGS.bookTemplate);
} }
parseText(beforeContent: string, extract: DoubanBookSubject, settings: DoubanPluginSettings, textMode: TemplateTextMode): string { parseText(beforeContent: string, extract: DoubanBookSubject, settings: DoubanPluginSettings, textMode: TemplateTextMode): string {

@ -1,9 +1,10 @@
import {CheerioAPI} from 'cheerio'; import {CheerioAPI} from 'cheerio';
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanPlugin from "main"; import DoubanPlugin from "main";
import {DoubanPluginSettings} from "src/douban/Douban"; import {DEFAULT_SETTINGS, DoubanPluginSettings} from "src/douban/Douban";
import DoubanSubject from '../model/DoubanSubject'; import DoubanSubject from '../model/DoubanSubject';
import DoubanGameSubject from '../model/DoubanGameSubject'; import DoubanGameSubject from '../model/DoubanGameSubject';
import StringUtil from "../../../utils/StringUtil";
export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler<DoubanGameSubject> { export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler<DoubanGameSubject> {
@ -17,7 +18,7 @@ export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler<Dou
// } // }
getTemplate(settings: DoubanPluginSettings): string { getTemplate(settings: DoubanPluginSettings): string {
return settings.gameTemplate; return StringUtil.defaultIfBlank(settings.gameTemplate, DEFAULT_SETTINGS.gameTemplate);
} }
parseText(beforeContent: string, extract: DoubanGameSubject, settings: DoubanPluginSettings): string { parseText(beforeContent: string, extract: DoubanGameSubject, settings: DoubanPluginSettings): string {

@ -1,10 +1,11 @@
import {CheerioAPI} from 'cheerio'; import {CheerioAPI} from 'cheerio';
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanPlugin from "main"; import DoubanPlugin from "main";
import {DoubanPluginSettings} from "src/douban/Douban"; import {DEFAULT_SETTINGS, DoubanPluginSettings} from "src/douban/Douban";
import SchemaOrg from "src/utils/SchemaOrg"; import SchemaOrg from "src/utils/SchemaOrg";
import DoubanSubject from '../model/DoubanSubject'; import DoubanSubject from '../model/DoubanSubject';
import DoubanMovieSubject from '../model/DoubanMovieSubject'; import DoubanMovieSubject from '../model/DoubanMovieSubject';
import StringUtil from "../../../utils/StringUtil";
export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<DoubanMovieSubject> { export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<DoubanMovieSubject> {
@ -13,7 +14,7 @@ export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<Do
} }
getTemplate(settings: DoubanPluginSettings): string { getTemplate(settings: DoubanPluginSettings): string {
return settings.movieTemplate; return StringUtil.defaultIfBlank(settings.movieTemplate, DEFAULT_SETTINGS.movieTemplate);
} }
parseText(beforeContent: string, extract: DoubanMovieSubject, settings: DoubanPluginSettings): string { parseText(beforeContent: string, extract: DoubanMovieSubject, settings: DoubanPluginSettings): string {

@ -2,8 +2,9 @@ import {CheerioAPI} from 'cheerio';
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanMusicSubject from '../model/DoubanMusicSubject'; import DoubanMusicSubject from '../model/DoubanMusicSubject';
import DoubanPlugin from "main"; import DoubanPlugin from "main";
import {DoubanPluginSettings} from "src/douban/Douban"; import {DEFAULT_SETTINGS, DoubanPluginSettings} from "src/douban/Douban";
import DoubanSubject from '../model/DoubanSubject'; import DoubanSubject from '../model/DoubanSubject';
import StringUtil from "../../../utils/StringUtil";
export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<DoubanMusicSubject> { export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<DoubanMusicSubject> {
@ -12,7 +13,7 @@ export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<Do
} }
getTemplate(settings: DoubanPluginSettings): string { getTemplate(settings: DoubanPluginSettings): string {
return settings.musicTemplate; return StringUtil.defaultIfBlank(settings.musicTemplate, DEFAULT_SETTINGS.musicTemplate);
} }
parseText(beforeContent: string, extract: DoubanMusicSubject, settings: DoubanPluginSettings): string { parseText(beforeContent: string, extract: DoubanMusicSubject, settings: DoubanPluginSettings): string {

@ -2,9 +2,10 @@ import {CheerioAPI} from 'cheerio';
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanNoteSubject from '../model/DoubanNoteSubject'; import DoubanNoteSubject from '../model/DoubanNoteSubject';
import DoubanPlugin from "main"; import DoubanPlugin from "main";
import {DoubanPluginSettings} from "src/douban/Douban"; import {DEFAULT_SETTINGS, DoubanPluginSettings} from "src/douban/Douban";
import DoubanSubject from '../model/DoubanSubject'; import DoubanSubject from '../model/DoubanSubject';
import html2markdown from '@notable/html2markdown'; import html2markdown from '@notable/html2markdown';
import StringUtil from "../../../utils/StringUtil";
export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler<DoubanNoteSubject> { export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler<DoubanNoteSubject> {
@ -13,7 +14,7 @@ export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler<Dou
} }
getTemplate(settings: DoubanPluginSettings): string { getTemplate(settings: DoubanPluginSettings): string {
return settings.noteTemplate; return StringUtil.defaultIfBlank(settings.noteTemplate, DEFAULT_SETTINGS.noteTemplate);
} }
parseText(beforeContent: string, extract: DoubanNoteSubject, settings: DoubanPluginSettings): string { parseText(beforeContent: string, extract: DoubanNoteSubject, settings: DoubanPluginSettings): string {

@ -1,10 +1,11 @@
import {CheerioAPI} from "cheerio"; import {CheerioAPI} from "cheerio";
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanPlugin from "main"; import DoubanPlugin from "main";
import {DoubanPluginSettings} from "src/douban/Douban"; import {DEFAULT_SETTINGS, DoubanPluginSettings} from "src/douban/Douban";
import DoubanSubject from "../model/DoubanSubject"; import DoubanSubject from "../model/DoubanSubject";
import DoubanTeleplaySubject from "../model/DoubanTeleplaySubject"; import DoubanTeleplaySubject from "../model/DoubanTeleplaySubject";
import SchemaOrg from "src/utils/SchemaOrg"; import SchemaOrg from "src/utils/SchemaOrg";
import StringUtil from "../../../utils/StringUtil";
/** /**
* teleplay * teleplay
@ -16,7 +17,7 @@ export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler<DoubanT
} }
getTemplate(settings: DoubanPluginSettings): string { getTemplate(settings: DoubanPluginSettings): string {
return settings.movieTemplate; return StringUtil.defaultIfBlank(settings.movieTemplate, DEFAULT_SETTINGS.movieTemplate);
} }
parseText(beforeContent: string, extract: DoubanTeleplaySubject, settings: DoubanPluginSettings): string { parseText(beforeContent: string, extract: DoubanTeleplaySubject, settings: DoubanPluginSettings): string {

@ -7,6 +7,9 @@ export default {
'110004': `Search`, '110004': `Search`,
'110005': `Cancel`, '110005': `Cancel`,
'110006': `sync douban broadcast ot Obsidian`, '110006': `sync douban broadcast ot Obsidian`,
'110101': 'search douban and create file',
//DoubanSettingTab //DoubanSettingTab
'1201': `Obsidian Douban`, '1201': `Obsidian Douban`,
@ -25,6 +28,10 @@ export default {
'120106': `{{originalTitle}},{{director}}, {{author}},`, '120106': `{{originalTitle}},{{director}}, {{author}},`,
'120107': ` {{actor}}`, '120107': ` {{actor}}`,
'120130': `Create New File Path`,
'120131': `Create New File Name`,
'120201': `Book Content Template`, '120201': `Book Content Template`,
'120202': `Set markdown Book template for extract to be inserted.`, '120202': `Set markdown Book template for extract to be inserted.`,
'120203': `Available Book template variables are :`, '120203': `Available Book template variables are :`,
@ -82,6 +89,9 @@ export default {
'121208': `Chinese And English Name`, '121208': `Chinese And English Name`,
//error //error
'130101': `Fetch Data Error, You can go to Github add Issues`, '130101': `Fetch Data Error, You can go to Github add Issues`,
'130201': `Obsidian Douban Plugin Error: `, '130201': `Obsidian Douban Plugin Error: `,

@ -2,12 +2,14 @@
export default { export default {
//main.ts //main.ts
'110001': '用当前文档名搜索豆瓣并写入当前文档', '110001': '搜索豆瓣当前文档名并写入',
'110002': '在豆瓣搜索并写入当前文档', '110002': '搜索豆瓣并写入当前文档',
'110003': `输入搜索内容:`, '110003': `输入搜索内容:`,
'110004': `搜索`, '110004': `搜索`,
'110005': `取消`, '110005': `取消`,
'110006': `同步豆瓣广播至Obsidian`, '110006': `同步豆瓣广播至Obsidian`,
'110101': '搜索豆瓣并创建文档',
//DoubanSettingTab //DoubanSettingTab
'1201': `Obsidian-豆瓣`, '1201': `Obsidian-豆瓣`,

17
src/utils/StringUtil.ts Normal file

@ -0,0 +1,17 @@
export default class StringUtil {
/**
*
* @param str
*/
public static isBlank(str: string): boolean {
return str == null || str.trim().length == 0;
}
/**
*
*/
public static defaultIfBlank(str: string, defaultStr: string): string {
return StringUtil.isBlank(str) ? defaultStr : str;
}
}

@ -16,8 +16,8 @@ export default class YamlUtil {
public static handleText(text: string) { public static handleText(text: string) {
return YamlUtil.hasSpecialChar(text) ? YamlUtil.handleSpecialChar(text) return YamlUtil.hasSpecialChar(text) ? YamlUtil.handleSpecialChar(text)
.replace(/[\n]{1,}/, '。') .replaceAll('\n', '。')
.replace('。。', '。') : text; .replaceAll('。。', '。') : text;
} }
} }