mirror of
https://github.com/maigamo/Daily-Task-Auto-Generator.git
synced 2026-07-22 05:48:30 +00:00
Fix code
Fix the code specification issue.
This commit is contained in:
parent
bc60c1f5f9
commit
9d5b445ff1
15 changed files with 70 additions and 1895 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
|
@ -4,7 +4,11 @@ node_modules/
|
|||
# build artifacts
|
||||
main.js
|
||||
main.js.map
|
||||
dist/
|
||||
data.json
|
||||
# 忽略所有由TypeScript编译生成的JS文件
|
||||
src/**/*.js
|
||||
src/**/*.js.map
|
||||
|
||||
# editor settings
|
||||
.vscode/
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"id": "daily-task-auto-generator",
|
||||
"name": "Daily Task Auto Generator",
|
||||
"version": "1.0.1",
|
||||
"minAppVersion": "0.15.0",
|
||||
"minAppVersion": "1.8.0",
|
||||
"description": "Automatically generate daily tasks with custom templates, statistics and multi-language support",
|
||||
"author": "maigamo",
|
||||
"authorUrl": "https://github.com/maigamo",
|
||||
|
|
|
|||
178
src/i18n/i18n.js
178
src/i18n/i18n.js
File diff suppressed because one or more lines are too long
|
|
@ -36,6 +36,9 @@ export type TranslationKey =
|
|||
| 'settings.preview'
|
||||
| 'template.dateWithIcon'
|
||||
|
||||
// 命令
|
||||
| 'commands.addDailyTask'
|
||||
|
||||
// 通知
|
||||
| 'notification.taskAdded'
|
||||
| 'notification.taskExists'
|
||||
|
|
@ -164,6 +167,9 @@ const translationsZH: Record<TranslationKey, string> = {
|
|||
'settings.basicSettings': '基本设置',
|
||||
'settings.templateSettings': '模板设置',
|
||||
|
||||
// 命令
|
||||
'commands.addDailyTask': '手动添加今日任务',
|
||||
|
||||
// 通知
|
||||
'notification.taskAdded': '今日任务已添加',
|
||||
'notification.taskExists': '今日任务已存在',
|
||||
|
|
@ -205,37 +211,40 @@ const translationsZH: Record<TranslationKey, string> = {
|
|||
// 英文翻译
|
||||
const translationsEN: Record<TranslationKey, string> = {
|
||||
// 设置页面
|
||||
'settings.title': 'Daily Task Auto Generator Settings',
|
||||
'settings.rootDir': '📁 Task Directory',
|
||||
'settings.title': 'Daily Task Auto Generator',
|
||||
'settings.rootDir': '📁 Task directory',
|
||||
'settings.rootDir.desc': 'Specify the root directory for storing task files, tasks will be stored in "Year/Month.md" format',
|
||||
'settings.rootDir.saved': '✓ Directory saved',
|
||||
'settings.save': '💾 Save',
|
||||
'settings.autoGenerate': '🔄 Auto Generate Mode',
|
||||
'settings.autoGenerate': '🔄 Auto generate mode',
|
||||
'settings.autoGenerate.desc': 'Choose when to automatically generate daily tasks',
|
||||
'settings.mode.none': '❌ Off',
|
||||
'settings.mode.daily': '📆 Daily',
|
||||
'settings.mode.workday': '💼 Workdays Only',
|
||||
'settings.language': '🔤 Interface Language',
|
||||
'settings.mode.workday': '💼 Workdays only',
|
||||
'settings.language': '🔤 Interface language',
|
||||
'settings.language.desc': 'Select the language for the plugin interface',
|
||||
'settings.language.auto': '🔍 Auto Detect',
|
||||
'settings.language.auto': '🔍 Auto detect',
|
||||
'settings.language.zh': '🇨🇳 Chinese',
|
||||
'settings.language.en': '🇬🇧 English',
|
||||
'settings.animations': '✨ Animation Effects',
|
||||
'settings.animations': '✨ Animation effects',
|
||||
'settings.animations.desc': 'Enable interface animation effects',
|
||||
'settings.template': '📝 Task Template',
|
||||
'settings.template.zh': '🇨🇳 Chinese Template',
|
||||
'settings.template.en': '🇬🇧 English Template',
|
||||
'settings.template.preview': '👁️ Show Preview',
|
||||
'settings.template.hide': '👁️🗨️ Hide Preview',
|
||||
'settings.resetToDefault': '🔄 Reset to Default',
|
||||
'settings.addTaskButton': '➕ Add Today\'s Task Manually',
|
||||
'settings.notificationDuration': '⏱️ Notification Duration',
|
||||
'settings.template': '📝 Template',
|
||||
'settings.template.zh': '🇨🇳 Chinese template',
|
||||
'settings.template.en': '🇬🇧 English template',
|
||||
'settings.template.preview': '👁️ Show preview',
|
||||
'settings.template.hide': '👁️🗨️ Hide preview',
|
||||
'settings.resetToDefault': '🔄 Reset to default',
|
||||
'settings.addTaskButton': '➕ Add today\'s task manually',
|
||||
'settings.notificationDuration': '⏱️ Notification duration',
|
||||
'settings.notificationDuration.desc': 'Duration to show success/failure notifications (milliseconds)',
|
||||
'settings.preview': 'Preview Template',
|
||||
'settings.resetDefault': 'Reset to Default',
|
||||
'settings.preview': 'Preview template',
|
||||
'settings.resetDefault': 'Reset to default',
|
||||
'template.dateWithIcon': 'Current date with icon',
|
||||
'settings.basicSettings': 'Basic Settings',
|
||||
'settings.templateSettings': 'Template Settings',
|
||||
'settings.basicSettings': 'Basic',
|
||||
'settings.templateSettings': 'Templates',
|
||||
|
||||
// 命令
|
||||
'commands.addDailyTask': 'Add today\'s task manually',
|
||||
|
||||
// 通知
|
||||
'notification.taskAdded': 'Today\'s task has been added',
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { Plugin, addIcon } from 'obsidian';
|
||||
import { AutoGenerateMode } from './models/settings';
|
||||
import { DailyTaskSettingTab, SettingsManager } from './settings/settings';
|
||||
import { setCurrentLanguage } from './i18n/i18n';
|
||||
import { getTranslation, setCurrentLanguage } from './i18n/i18n';
|
||||
import { isWorkday } from './utils/dateUtils';
|
||||
import { TaskGenerator } from './taskGenerator';
|
||||
import { DAILY_TASK_ICON } from './ui/icons';
|
||||
|
|
@ -39,7 +39,7 @@ export default class DailyTaskPlugin extends Plugin {
|
|||
// 添加手动生成任务命令
|
||||
this.addCommand({
|
||||
id: 'add-daily-task',
|
||||
name: '手动添加今日任务',
|
||||
name: getTranslation('commands.addDailyTask'),
|
||||
callback: async () => {
|
||||
await this.taskGenerator.addTaskManually();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,69 +0,0 @@
|
|||
/**
|
||||
* 自动生成模式枚举
|
||||
*/
|
||||
export var AutoGenerateMode;
|
||||
(function (AutoGenerateMode) {
|
||||
AutoGenerateMode["NONE"] = "none";
|
||||
AutoGenerateMode["DAILY"] = "daily";
|
||||
AutoGenerateMode["WORKDAY"] = "workday"; // 仅工作日自动生成
|
||||
})(AutoGenerateMode || (AutoGenerateMode = {}));
|
||||
/**
|
||||
* 设置界面语言
|
||||
*/
|
||||
export var Language;
|
||||
(function (Language) {
|
||||
Language["AUTO"] = "auto";
|
||||
Language["ZH"] = "zh";
|
||||
Language["EN"] = "en";
|
||||
})(Language || (Language = {}));
|
||||
/**
|
||||
* 默认中文模板
|
||||
*/
|
||||
export const DEFAULT_TEMPLATE_ZH = `## {{dateWithIcon}}({{weekday}})
|
||||
|
||||
### 🧘 今日计划
|
||||
---
|
||||
|
||||
- [ ] 冥想 10 分钟
|
||||
- [ ] 复盘前一日计划
|
||||
- [ ] 阅读 20 页书
|
||||
|
||||
### 📝 工作任务
|
||||
---
|
||||
|
||||
- [ ] 整理今日工作计划
|
||||
- [ ] 完成重要项目进度
|
||||
`;
|
||||
/**
|
||||
* 默认英文模板
|
||||
*/
|
||||
export const DEFAULT_TEMPLATE_EN = `## {{dateWithIcon}} ({{weekday}})
|
||||
|
||||
### 🧘 Today's Plan
|
||||
---
|
||||
|
||||
- [ ] Meditate for 10 minutes
|
||||
- [ ] Review yesterday's plan
|
||||
- [ ] Read 20 pages
|
||||
|
||||
### 📝 Work Tasks
|
||||
---
|
||||
|
||||
- [ ] Organize today's work schedule
|
||||
- [ ] Progress on important projects
|
||||
`;
|
||||
/**
|
||||
* 默认设置
|
||||
*/
|
||||
export const DEFAULT_SETTINGS = {
|
||||
rootDir: 'DailyTasks',
|
||||
autoGenerateMode: AutoGenerateMode.WORKDAY,
|
||||
language: Language.AUTO,
|
||||
templateZh: DEFAULT_TEMPLATE_ZH,
|
||||
templateEn: DEFAULT_TEMPLATE_EN,
|
||||
customTemplate: '',
|
||||
hasCustomTemplate: false,
|
||||
taskStatistics: false,
|
||||
successNotificationDuration: 3000
|
||||
};
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGdCQUlYO0FBSkQsV0FBWSxnQkFBZ0I7SUFDeEIsaUNBQWEsQ0FBQTtJQUNiLG1DQUFlLENBQUE7SUFDZix1Q0FBbUIsQ0FBQSxDQUFDLFdBQVc7QUFDbkMsQ0FBQyxFQUpXLGdCQUFnQixLQUFoQixnQkFBZ0IsUUFJM0I7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLFFBSVg7QUFKRCxXQUFZLFFBQVE7SUFDaEIseUJBQWEsQ0FBQTtJQUNiLHFCQUFTLENBQUE7SUFDVCxxQkFBUyxDQUFBO0FBQ2IsQ0FBQyxFQUpXLFFBQVEsS0FBUixRQUFRLFFBSW5CO0FBNEJEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUc7Ozs7Ozs7Ozs7Ozs7O0NBY2xDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHOzs7Ozs7Ozs7Ozs7OztDQWNsQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBc0I7SUFDL0MsT0FBTyxFQUFFLFlBQVk7SUFDckIsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMsT0FBTztJQUMxQyxRQUFRLEVBQUUsUUFBUSxDQUFDLElBQUk7SUFDdkIsVUFBVSxFQUFFLG1CQUFtQjtJQUMvQixVQUFVLEVBQUUsbUJBQW1CO0lBQy9CLGNBQWMsRUFBRSxFQUFFO0lBQ2xCLGlCQUFpQixFQUFFLEtBQUs7SUFDeEIsY0FBYyxFQUFFLEtBQUs7SUFDckIsMkJBQTJCLEVBQUUsSUFBSTtDQUNwQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiDoh6rliqjnlJ/miJDmqKHlvI/mnprkuL5cbiAqL1xuZXhwb3J0IGVudW0gQXV0b0dlbmVyYXRlTW9kZSB7XG4gICAgTk9ORSA9ICdub25lJywgICAgIC8vIOWFs+mXreiHquWKqOeUn+aIkFxuICAgIERBSUxZID0gJ2RhaWx5JywgICAvLyDmr4/ml6Xoh6rliqjnlJ/miJBcbiAgICBXT1JLREFZID0gJ3dvcmtkYXknIC8vIOS7heW3peS9nOaXpeiHquWKqOeUn+aIkFxufVxuXG4vKipcbiAqIOiuvue9rueVjOmdouivreiogFxuICovXG5leHBvcnQgZW51bSBMYW5ndWFnZSB7XG4gICAgQVVUTyA9ICdhdXRvJyxcbiAgICBaSCA9ICd6aCcsXG4gICAgRU4gPSAnZW4nXG59XG5cbi8qKlxuICog5o+S5Lu26K6+572u5o6l5Y+jXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGFpbHlUYXNrU2V0dGluZ3Mge1xuICAgIC8vIOWfuuehgOmFjee9rlxuICAgIHJvb3REaXI6IHN0cmluZzsgICAgICAgICAgICAgICAvLyDku7vliqHmlofku7blrZjmlL7nmoTmoLnnm67lvZVcbiAgICBhdXRvR2VuZXJhdGVNb2RlOiBBdXRvR2VuZXJhdGVNb2RlOyAvLyDoh6rliqjnlJ/miJDmqKHlvI9cbiAgICBsYW5ndWFnZTogc3RyaW5nOyAgICAgICAgICAgIC8vIOeVjOmdouivreiogFxuXG4gICAgLy8g5qih5p2/6YWN572uXG4gICAgdGVtcGxhdGVaaDogc3RyaW5nOyAgICAgICAgICAgIC8vIOS4reaWh+S7u+WKoeaooeadv1xuICAgIHRlbXBsYXRlRW46IHN0cmluZzsgICAgICAgICAgICAvLyDoi7Hmlofku7vliqHmqKHmnb9cblxuICAgIC8vIOaWsOWinu+8mueUqOaIt+iHquWumuS5ieaooeadv1xuICAgIGN1c3RvbVRlbXBsYXRlOiBzdHJpbmc7XG5cbiAgICAvLyDmlrDlop7vvJrmoIforrDmmK/lkKbkvb/nlKjoh6rlrprkuYnmqKHmnb9cbiAgICBoYXNDdXN0b21UZW1wbGF0ZTogYm9vbGVhbjtcblxuICAgIC8vIOaWsOWinu+8muaYr+WQpuW8gOWQr+S7u+WKoee7n+iuoeWKn+iDvVxuICAgIHRhc2tTdGF0aXN0aWNzOiBib29sZWFuO1xuXG4gICAgLy8gVUnphY3nva5cbiAgICBzdWNjZXNzTm90aWZpY2F0aW9uRHVyYXRpb246IG51bWJlcjsgLy8g5oiQ5Yqf6YCa55+l5pi+56S65pe26Ze0KOavq+enkilcbn1cblxuLyoqXG4gKiDpu5jorqTkuK3mlofmqKHmnb9cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEVNUExBVEVfWkggPSBgIyMge3tkYXRlV2l0aEljb259fe+8iHt7d2Vla2RheX1977yJXG5cbiMjIyDwn6eYIOS7iuaXpeiuoeWIklxuLS0tXG5cbi0gWyBdIOWGpeaDsyAxMCDliIbpkp8gIFxuLSBbIF0g5aSN55uY5YmN5LiA5pel6K6h5YiSICBcbi0gWyBdIOmYheivuyAyMCDpobXkuaZcblxuIyMjIPCfk50g5bel5L2c5Lu75YqhXG4tLS1cblxuLSBbIF0g5pW055CG5LuK5pel5bel5L2c6K6h5YiSXG4tIFsgXSDlrozmiJDph43opoHpobnnm67ov5vluqZcbmA7XG5cbi8qKlxuICog6buY6K6k6Iux5paH5qih5p2/XG4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1RFTVBMQVRFX0VOID0gYCMjIHt7ZGF0ZVdpdGhJY29ufX0gKHt7d2Vla2RheX19KVxuXG4jIyMg8J+nmCBUb2RheSdzIFBsYW5cbi0tLVxuXG4tIFsgXSBNZWRpdGF0ZSBmb3IgMTAgbWludXRlcyAgXG4tIFsgXSBSZXZpZXcgeWVzdGVyZGF5J3MgcGxhbiAgXG4tIFsgXSBSZWFkIDIwIHBhZ2VzXG5cbiMjIyDwn5OdIFdvcmsgVGFza3Ncbi0tLVxuXG4tIFsgXSBPcmdhbml6ZSB0b2RheSdzIHdvcmsgc2NoZWR1bGVcbi0gWyBdIFByb2dyZXNzIG9uIGltcG9ydGFudCBwcm9qZWN0c1xuYDtcblxuLyoqXG4gKiDpu5jorqTorr7nva5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VUVElOR1M6IERhaWx5VGFza1NldHRpbmdzID0ge1xuICAgIHJvb3REaXI6ICdEYWlseVRhc2tzJyxcbiAgICBhdXRvR2VuZXJhdGVNb2RlOiBBdXRvR2VuZXJhdGVNb2RlLldPUktEQVksXG4gICAgbGFuZ3VhZ2U6IExhbmd1YWdlLkFVVE8sXG4gICAgdGVtcGxhdGVaaDogREVGQVVMVF9URU1QTEFURV9aSCxcbiAgICB0ZW1wbGF0ZUVuOiBERUZBVUxUX1RFTVBMQVRFX0VOLFxuICAgIGN1c3RvbVRlbXBsYXRlOiAnJywgLy8g6buY6K6k5Li656m677yM6KGo56S65L2/55So6K+t6KiA55u45YWz55qE6buY6K6k5qih5p2/XG4gICAgaGFzQ3VzdG9tVGVtcGxhdGU6IGZhbHNlLCAvLyDpu5jorqTkuI3kvb/nlKjoh6rlrprkuYnmqKHmnb9cbiAgICB0YXNrU3RhdGlzdGljczogZmFsc2UsIC8vIOm7mOiupOWFs+mXreS7u+WKoee7n+iuoeWKn+iDvVxuICAgIHN1Y2Nlc3NOb3RpZmljYXRpb25EdXJhdGlvbjogMzAwMFxufTsgIl19
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -113,17 +113,17 @@ export class DailyTaskSettingTab extends PluginSettingTab {
|
|||
saveIndicator.appendChild(saveSuccessIcon);
|
||||
|
||||
// 记录自动保存定时器
|
||||
let autoSaveTimer: NodeJS.Timeout | null = null;
|
||||
let autoSaveTimer: number | null = null;
|
||||
|
||||
// 自动保存方法
|
||||
this.autoSaveRootDir = async (value: string) => {
|
||||
// 清除之前的定时器
|
||||
if (autoSaveTimer !== null) {
|
||||
clearTimeout(autoSaveTimer);
|
||||
window.clearTimeout(autoSaveTimer);
|
||||
}
|
||||
|
||||
// 设置新的定时器,延迟800ms保存(在用户停止输入后)
|
||||
autoSaveTimer = setTimeout(async () => {
|
||||
autoSaveTimer = window.setTimeout(async () => {
|
||||
let pathToSave = value.trim();
|
||||
if (pathToSave === '') {
|
||||
pathToSave = 'DailyTasks'; // 默认存放目录
|
||||
|
|
@ -136,7 +136,7 @@ export class DailyTaskSettingTab extends PluginSettingTab {
|
|||
// 显示保存成功的视觉反馈
|
||||
saveIndicator.classList.add('save-indicator-visible');
|
||||
saveIndicator.classList.remove('save-indicator-hidden');
|
||||
setTimeout(() => {
|
||||
window.setTimeout(() => {
|
||||
saveIndicator.classList.remove('save-indicator-visible');
|
||||
saveIndicator.classList.add('save-indicator-hidden');
|
||||
}, 1500);
|
||||
|
|
@ -211,6 +211,9 @@ export class DailyTaskSettingTab extends PluginSettingTab {
|
|||
});
|
||||
|
||||
// 语言设置
|
||||
// TODO: 应该使用Obsidian API的app.i18n.locale获取系统语言设置
|
||||
// 需要在manifest.json中设置minAppVersion: "1.8.0"或更高
|
||||
// 可以移除此设置并修改SettingsManager.getCurrentLanguage()方法
|
||||
new Setting(containerEl)
|
||||
.setName(getTranslation('settings.language'))
|
||||
.setDesc(getTranslation('settings.language.desc'))
|
||||
|
|
@ -277,10 +280,10 @@ export class DailyTaskSettingTab extends PluginSettingTab {
|
|||
return toggleEl;
|
||||
});
|
||||
|
||||
// 模板设置
|
||||
const templateHeader = document.createElement('h3');
|
||||
templateHeader.textContent = getTranslation('settings.template');
|
||||
containerEl.appendChild(templateHeader);
|
||||
// 模板设置 - 使用常规方式创建标题
|
||||
// TODO: 如果Obsidian API支持,应该使用Setting.setHeading()方法创建标题
|
||||
// 例如: new Setting(containerEl).setName(getTranslation('settings.template')).setHeading();
|
||||
containerEl.createEl('h3', { text: getTranslation('settings.template') });
|
||||
|
||||
// 添加模板使用逻辑说明
|
||||
const templateDescription = document.createElement('p');
|
||||
|
|
@ -417,7 +420,7 @@ export class DailyTaskSettingTab extends PluginSettingTab {
|
|||
|
||||
// 显示成功提示动画
|
||||
resetBtn.buttonEl.classList.add('success-button');
|
||||
setTimeout(() => {
|
||||
window.setTimeout(() => {
|
||||
resetBtn.buttonEl.classList.remove('success-button');
|
||||
}, 1000);
|
||||
});
|
||||
|
|
@ -488,7 +491,7 @@ export class DailyTaskSettingTab extends PluginSettingTab {
|
|||
new Notice(`添加任务失败: ${e.message || e}`);
|
||||
} finally {
|
||||
// 移除loading状态
|
||||
setTimeout(() => {
|
||||
window.setTimeout(() => {
|
||||
if (this.addTaskButton && this.addTaskButton.buttonEl) {
|
||||
this.addTaskButton.buttonEl.classList.remove('loading');
|
||||
}
|
||||
|
|
@ -664,6 +667,8 @@ export class SettingsManager {
|
|||
* 获取当前语言设置
|
||||
*/
|
||||
getCurrentLanguage(): string {
|
||||
// TODO: 应该使用Obsidian API的app.i18n.locale获取系统语言设置
|
||||
// 例如:return this.plugin.app.i18n.locale.startsWith('zh') ? 'zh' : 'en';
|
||||
if (this.settings.language === Language.AUTO) {
|
||||
// 自动检测系统语言
|
||||
const systemLanguage = window.navigator.language.toLowerCase();
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -31,13 +31,14 @@ export class TaskGenerator {
|
|||
const settings = this.settingsManager.getSettings();
|
||||
const rootDir = settings.rootDir.trim() || 'DailyTasks'; // 使用默认目录
|
||||
|
||||
// 获取任务文件路径
|
||||
// 获取任务文件路径 (格式:rootDir/year/month.md)
|
||||
const filePath = getTaskFilePath(rootDir);
|
||||
|
||||
// 解析年份和月份
|
||||
// 解析年份和月份 - 适应新的路径格式
|
||||
const pathParts = filePath.split('/');
|
||||
// 现在pathParts数组格式为 [rootDir, year, month.md]
|
||||
const year = pathParts.length > 1 ? pathParts[1] : '';
|
||||
const monthName = pathParts.length > 2 ? pathParts[2].replace('.md', '') : '';
|
||||
const monthFile = pathParts.length > 2 ? pathParts[2] : '';
|
||||
const yearFolder = `${rootDir}/${year}`;
|
||||
|
||||
// 确保根目录存在
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -140,16 +140,17 @@ export async function fileContains(vault: Vault, path: string, content: string):
|
|||
/**
|
||||
* 根据当前日期生成任务文件路径
|
||||
* @param rootDir 根目录
|
||||
* @returns 任务文件路径
|
||||
* @returns 任务文件路径,格式为:rootDir/year/month.md
|
||||
*/
|
||||
export function getTaskFilePath(rootDir: string): string {
|
||||
const now = new Date();
|
||||
const year = now.getFullYear();
|
||||
const month = now.getMonth() + 1;
|
||||
const day = now.getDate();
|
||||
|
||||
const formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
|
||||
return normalizePath(`${rootDir}/${formattedDate}.md`);
|
||||
const yearDir = year.toString();
|
||||
const monthFile = month.toString().padStart(2, '0') + '.md';
|
||||
|
||||
return normalizePath(`${rootDir}/${yearDir}/${monthFile}`);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -185,8 +186,16 @@ export function getYesterdayDate(): string {
|
|||
* @returns 前一天任务文件的路径
|
||||
*/
|
||||
export function getYesterdayTaskFilePath(rootDir: string): string {
|
||||
const yesterdayDate = getYesterdayDate();
|
||||
return normalizePath(`${rootDir}/${yesterdayDate}.md`);
|
||||
const yesterday = new Date();
|
||||
yesterday.setDate(yesterday.getDate() - 1);
|
||||
|
||||
const year = yesterday.getFullYear();
|
||||
const month = yesterday.getMonth() + 1;
|
||||
|
||||
const yearDir = year.toString();
|
||||
const monthFile = month.toString().padStart(2, '0') + '.md';
|
||||
|
||||
return normalizePath(`${rootDir}/${yearDir}/${monthFile}`);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,51 +0,0 @@
|
|||
import { getCurrentDate, getCurrentWeekdayName, getYearProgress, getMonthProgress, getCurrentDateWithIcon } from "./dateUtils";
|
||||
/**
|
||||
* 模板变量渲染引擎
|
||||
*/
|
||||
/**
|
||||
* 获取当前时间
|
||||
* @returns 当前时间,如10:30
|
||||
*/
|
||||
function getCurrentTime() {
|
||||
const now = new Date();
|
||||
const hours = now.getHours().toString().padStart(2, '0');
|
||||
const minutes = now.getMinutes().toString().padStart(2, '0');
|
||||
return `${hours}:${minutes}`;
|
||||
}
|
||||
/**
|
||||
* 渲染模板内容,替换其中的变量
|
||||
* @param template 模板内容
|
||||
* @returns 渲染后的内容
|
||||
*/
|
||||
export function renderTemplate(template) {
|
||||
// 定义变量映射
|
||||
const variableMap = {
|
||||
'date': getCurrentDate(),
|
||||
'dateWithIcon': getCurrentDateWithIcon(),
|
||||
'weekday': getCurrentWeekdayName(),
|
||||
'yearProgress': getYearProgress(),
|
||||
'monthProgress': getMonthProgress(),
|
||||
'time': getCurrentTime()
|
||||
};
|
||||
// 替换模板中的变量
|
||||
let renderedContent = template;
|
||||
for (const [variable, value] of Object.entries(variableMap)) {
|
||||
renderedContent = renderedContent.replace(new RegExp(`{{${variable}}}`, 'g'), value.toString());
|
||||
}
|
||||
return renderedContent;
|
||||
}
|
||||
/**
|
||||
* 获取变量说明
|
||||
* @returns 变量说明,包括中英文
|
||||
*/
|
||||
export function getTemplateVariables() {
|
||||
return {
|
||||
'date': '当前日期 / Current date (YYYY-MM-DD)',
|
||||
'dateWithIcon': '带图标的当前日期 / Current date with daily icon',
|
||||
'weekday': '当前星期 / Current weekday',
|
||||
'yearProgress': '年度进度百分比 / Year progress percentage',
|
||||
'monthProgress': '月度进度百分比 / Month progress percentage',
|
||||
'time': '当前时间 / Current time (HH:MM)'
|
||||
};
|
||||
}
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGVFbmdpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0ZW1wbGF0ZUVuZ2luZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsY0FBYyxFQUNkLHFCQUFxQixFQUNyQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN6QixNQUFNLGFBQWEsQ0FBQztBQUVyQjs7R0FFRztBQUVIOzs7R0FHRztBQUNILFNBQVMsY0FBYztJQUNuQixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ3ZCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdELE9BQU8sR0FBRyxLQUFLLElBQUksT0FBTyxFQUFFLENBQUM7QUFDakMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFFBQWdCO0lBQzNDLFNBQVM7SUFDVCxNQUFNLFdBQVcsR0FBb0M7UUFDakQsTUFBTSxFQUFFLGNBQWMsRUFBRTtRQUN4QixjQUFjLEVBQUUsc0JBQXNCLEVBQUU7UUFDeEMsU0FBUyxFQUFFLHFCQUFxQixFQUFFO1FBQ2xDLGNBQWMsRUFBRSxlQUFlLEVBQUU7UUFDakMsZUFBZSxFQUFFLGdCQUFnQixFQUFFO1FBQ25DLE1BQU0sRUFBRSxjQUFjLEVBQUU7S0FDM0IsQ0FBQztJQUVGLFdBQVc7SUFDWCxJQUFJLGVBQWUsR0FBRyxRQUFRLENBQUM7SUFDL0IsS0FBSyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUU7UUFDekQsZUFBZSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQ3JDLElBQUksTUFBTSxDQUFDLEtBQUssUUFBUSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQ2xDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FDbkIsQ0FBQztLQUNMO0lBRUQsT0FBTyxlQUFlLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxvQkFBb0I7SUFDaEMsT0FBTztRQUNILE1BQU0sRUFBRSxrQ0FBa0M7UUFDMUMsY0FBYyxFQUFFLHlDQUF5QztRQUN6RCxTQUFTLEVBQUUsd0JBQXdCO1FBQ25DLGNBQWMsRUFBRSxvQ0FBb0M7UUFDcEQsZUFBZSxFQUFFLHFDQUFxQztRQUN0RCxNQUFNLEVBQUUsNkJBQTZCO0tBQ3hDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgXHJcbiAgICBnZXRDdXJyZW50RGF0ZSwgXHJcbiAgICBnZXRDdXJyZW50V2Vla2RheU5hbWUsIFxyXG4gICAgZ2V0WWVhclByb2dyZXNzLCBcclxuICAgIGdldE1vbnRoUHJvZ3Jlc3MsIFxyXG4gICAgZ2V0Q3VycmVudERhdGVXaXRoSWNvbiBcclxufSBmcm9tIFwiLi9kYXRlVXRpbHNcIjtcclxuXHJcbi8qKlxyXG4gKiDmqKHmnb/lj5jph4/muLLmn5PlvJXmk45cclxuICovXHJcblxyXG4vKipcclxuICog6I635Y+W5b2T5YmN5pe26Ze0XHJcbiAqIEByZXR1cm5zIOW9k+WJjeaXtumXtO+8jOWmgjEwOjMwXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDdXJyZW50VGltZSgpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IGhvdXJzID0gbm93LmdldEhvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgY29uc3QgbWludXRlcyA9IG5vdy5nZXRNaW51dGVzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgcmV0dXJuIGAke2hvdXJzfToke21pbnV0ZXN9YDtcclxufVxyXG5cclxuLyoqXHJcbiAqIOa4suafk+aooeadv+WGheWuue+8jOabv+aNouWFtuS4reeahOWPmOmHj1xyXG4gKiBAcGFyYW0gdGVtcGxhdGUg5qih5p2/5YaF5a65XHJcbiAqIEByZXR1cm5zIOa4suafk+WQjueahOWGheWuuVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclRlbXBsYXRlKHRlbXBsYXRlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8g5a6a5LmJ5Y+Y6YeP5pig5bCEXHJcbiAgICBjb25zdCB2YXJpYWJsZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPiA9IHtcclxuICAgICAgICAnZGF0ZSc6IGdldEN1cnJlbnREYXRlKCksXHJcbiAgICAgICAgJ2RhdGVXaXRoSWNvbic6IGdldEN1cnJlbnREYXRlV2l0aEljb24oKSxcclxuICAgICAgICAnd2Vla2RheSc6IGdldEN1cnJlbnRXZWVrZGF5TmFtZSgpLFxyXG4gICAgICAgICd5ZWFyUHJvZ3Jlc3MnOiBnZXRZZWFyUHJvZ3Jlc3MoKSxcclxuICAgICAgICAnbW9udGhQcm9ncmVzcyc6IGdldE1vbnRoUHJvZ3Jlc3MoKSxcclxuICAgICAgICAndGltZSc6IGdldEN1cnJlbnRUaW1lKClcclxuICAgIH07XHJcbiAgICBcclxuICAgIC8vIOabv+aNouaooeadv+S4reeahOWPmOmHj1xyXG4gICAgbGV0IHJlbmRlcmVkQ29udGVudCA9IHRlbXBsYXRlO1xyXG4gICAgZm9yIChjb25zdCBbdmFyaWFibGUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJpYWJsZU1hcCkpIHtcclxuICAgICAgICByZW5kZXJlZENvbnRlbnQgPSByZW5kZXJlZENvbnRlbnQucmVwbGFjZShcclxuICAgICAgICAgICAgbmV3IFJlZ0V4cChge3ske3ZhcmlhYmxlfX19YCwgJ2cnKSwgXHJcbiAgICAgICAgICAgIHZhbHVlLnRvU3RyaW5nKClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICByZXR1cm4gcmVuZGVyZWRDb250ZW50O1xyXG59XHJcblxyXG4vKipcclxuICog6I635Y+W5Y+Y6YeP6K+05piOXHJcbiAqIEByZXR1cm5zIOWPmOmHj+ivtOaYju+8jOWMheaLrOS4reiLseaWh1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRlbXBsYXRlVmFyaWFibGVzKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAnZGF0ZSc6ICflvZPliY3ml6XmnJ8gLyBDdXJyZW50IGRhdGUgKFlZWVktTU0tREQpJyxcclxuICAgICAgICAnZGF0ZVdpdGhJY29uJzogJ+W4puWbvuagh+eahOW9k+WJjeaXpeacnyAvIEN1cnJlbnQgZGF0ZSB3aXRoIGRhaWx5IGljb24nLFxyXG4gICAgICAgICd3ZWVrZGF5JzogJ+W9k+WJjeaYn+acnyAvIEN1cnJlbnQgd2Vla2RheScsXHJcbiAgICAgICAgJ3llYXJQcm9ncmVzcyc6ICflubTluqbov5vluqbnmb7liIbmr5QgLyBZZWFyIHByb2dyZXNzIHBlcmNlbnRhZ2UnLFxyXG4gICAgICAgICdtb250aFByb2dyZXNzJzogJ+aciOW6pui/m+W6pueZvuWIhuavlCAvIE1vbnRoIHByb2dyZXNzIHBlcmNlbnRhZ2UnLFxyXG4gICAgICAgICd0aW1lJzogJ+W9k+WJjeaXtumXtCAvIEN1cnJlbnQgdGltZSAoSEg6TU0pJ1xyXG4gICAgfTtcclxufSAiXX0=
|
||||
|
|
@ -12,6 +12,7 @@
|
|||
"isolatedModules": true,
|
||||
"strictNullChecks": true,
|
||||
"skipLibCheck": true,
|
||||
"outDir": "dist",
|
||||
"lib": [
|
||||
"DOM",
|
||||
"ES5",
|
||||
|
|
|
|||
Loading…
Reference in a new issue