mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-07-28 18:42:28 +08:00
feat: 🎸 add create week note func
This commit is contained in:
parent
84def1aa30
commit
1313003bdb
@ -14,7 +14,7 @@ UPDATE attributes SET name = 'name', value = 'value' WHERE type = 'label'
|
|||||||
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
|
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
|
||||||
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
|
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
|
||||||
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
|
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
|
||||||
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'monthPattern', 'pageSize', 'viewType', 'mapRootNoteId',
|
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'weekPattern', 'enableWeekNote', 'monthPattern', 'pageSize', 'viewType', 'mapRootNoteId',
|
||||||
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
|
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
|
||||||
'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
|
'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
|
||||||
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
|
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
|
||||||
@ -31,7 +31,7 @@ UPDATE attributes SET name = 'name' WHERE type = 'relation'
|
|||||||
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
|
'widget', 'noteInfoWidgetDisabled', 'linkMapWidgetDisabled', 'revisionsWidgetDisabled',
|
||||||
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
|
'whatLinksHereWidgetDisabled', 'similarNotesWidgetDisabled', 'workspace', 'workspaceIconClass',
|
||||||
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
|
'workspaceTabBackgroundColor', 'workspaceCalendarRoot', 'workspaceTemplate', 'searchHome', 'workspaceInbox',
|
||||||
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'monthPattern', 'pageSize', 'viewType', 'mapRootNoteId',
|
'workspaceSearchHome', 'sqlConsoleHome', 'datePattern', 'weekPattern', 'enableWeekNote', 'monthPattern', 'pageSize', 'viewType', 'mapRootNoteId',
|
||||||
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
|
'bookmarkFolder', 'sorted', 'sortDirection', 'sortFoldersFirst', 'sortNatural', 'sortLocale', 'top',
|
||||||
'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
|
'fullContentWidth', 'shareHiddenFromTree', 'shareExternalLink', 'shareOmitDefaultCss', 'shareRoot', 'shareDescription',
|
||||||
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
|
'shareRaw', 'shareDisallowRobotIndexing', 'shareIndex', 'displayRelations', 'hideRelations', 'titleTemplate',
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
"use strict";
|
|
||||||
|
|
||||||
import dateNoteService from "../../services/date_notes.js";
|
import dateNoteService from "../../services/date_notes.js";
|
||||||
import sql from "../../services/sql.js";
|
import sql from "../../services/sql.js";
|
||||||
import cls from "../../services/cls.js";
|
import cls from "../../services/cls.js";
|
||||||
@ -19,6 +17,10 @@ function getWeekFirstDayNote(req: Request) {
|
|||||||
return dateNoteService.getWeekFirstDayNote(req.params.date);
|
return dateNoteService.getWeekFirstDayNote(req.params.date);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getWeekNote(req: Request) {
|
||||||
|
return dateNoteService.getWeekNote(req.params.week);
|
||||||
|
}
|
||||||
|
|
||||||
function getMonthNote(req: Request) {
|
function getMonthNote(req: Request) {
|
||||||
return dateNoteService.getMonthNote(req.params.month);
|
return dateNoteService.getMonthNote(req.params.month);
|
||||||
}
|
}
|
||||||
@ -102,6 +104,7 @@ export default {
|
|||||||
getInboxNote,
|
getInboxNote,
|
||||||
getDayNote,
|
getDayNote,
|
||||||
getWeekFirstDayNote,
|
getWeekFirstDayNote,
|
||||||
|
getWeekNote,
|
||||||
getMonthNote,
|
getMonthNote,
|
||||||
getYearNote,
|
getYearNote,
|
||||||
getDayNotesForMonth,
|
getDayNotesForMonth,
|
||||||
|
@ -36,6 +36,8 @@ export default [
|
|||||||
{ type: "label", name: "workspaceSearchHome" },
|
{ type: "label", name: "workspaceSearchHome" },
|
||||||
{ type: "label", name: "sqlConsoleHome" },
|
{ type: "label", name: "sqlConsoleHome" },
|
||||||
{ type: "label", name: "datePattern" },
|
{ type: "label", name: "datePattern" },
|
||||||
|
{ type: "label", name: "weekPattern" },
|
||||||
|
{ type: "label", name: "enableWeekNote" },
|
||||||
{ type: "label", name: "monthPattern" },
|
{ type: "label", name: "monthPattern" },
|
||||||
{ type: "label", name: "pageSize" },
|
{ type: "label", name: "pageSize" },
|
||||||
{ type: "label", name: "viewType" },
|
{ type: "label", name: "viewType" },
|
||||||
|
@ -236,10 +236,81 @@ function getWeekFirstDayNote(dateStr: string, options: WeekNoteOpts = {}, rootNo
|
|||||||
return getDayNote(dateStr, rootNote);
|
return getDayNote(dateStr, rootNote);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getWeekStartDate(date: Date, startOfWeek: StartOfWeek): Date {
|
||||||
|
const day = date.getDay();
|
||||||
|
let diff;
|
||||||
|
|
||||||
|
if (startOfWeek === "monday") {
|
||||||
|
diff = date.getDate() - day + (day === 0 ? -6 : 1); // adjust when day is sunday
|
||||||
|
} else if (startOfWeek === "sunday") {
|
||||||
|
diff = date.getDate() - day;
|
||||||
|
} else {
|
||||||
|
throw new Error(`Unrecognized start of the week ${startOfWeek}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const startDate = new Date(date);
|
||||||
|
startDate.setDate(diff);
|
||||||
|
return startDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getWeekNoteTitle(rootNote: BNote, weekNumber: number) {
|
||||||
|
const pattern = rootNote.getOwnedLabelValue("weekPattern") || "Week {weekNumber}";
|
||||||
|
|
||||||
|
return pattern
|
||||||
|
.replace(/{weekNumber}/g, weekNumber.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
function getWeekNote(weekStr: string, options: WeekNoteOpts = {}, _rootNote: BNote | null = null): BNote | null {
|
||||||
|
const rootNote = _rootNote || getRootCalendarNote();
|
||||||
|
if (!rootNote.hasLabel('enableWeekNote')) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
weekStr = weekStr.trim().substring(0, 8);
|
||||||
|
|
||||||
|
let weekNote = searchService.findFirstNoteWithQuery(`#${WEEK_LABEL}="${weekStr}"`, new SearchContext({ ancestorNoteId: rootNote.noteId }));
|
||||||
|
|
||||||
|
if (weekNote) {
|
||||||
|
return weekNote;
|
||||||
|
}
|
||||||
|
|
||||||
|
const [yearStr, weekNumStr] = weekStr.trim().split('-W');
|
||||||
|
|
||||||
|
const year = parseInt(yearStr);
|
||||||
|
const weekNumber = parseInt(weekNumStr);
|
||||||
|
|
||||||
|
const firstDayOfYear = new Date(year, 0, 1);
|
||||||
|
const weekStartDate = new Date(firstDayOfYear);
|
||||||
|
weekStartDate.setDate(firstDayOfYear.getDate() + (weekNumber - 1) * 7);
|
||||||
|
|
||||||
|
const startDate = getWeekStartDate(weekStartDate, options.startOfTheWeek || "monday");
|
||||||
|
const monthNote = getMonthNote(dateUtils.utcDateStr(startDate), rootNote);
|
||||||
|
|
||||||
|
const noteTitle = getWeekNoteTitle(rootNote, weekNumber);
|
||||||
|
|
||||||
|
sql.transactional(() => {
|
||||||
|
weekNote = createNote(monthNote, noteTitle);
|
||||||
|
|
||||||
|
attributeService.createLabel(weekNote.noteId, WEEK_LABEL, weekStr);
|
||||||
|
attributeService.createLabel(weekNote.noteId, "sorted");
|
||||||
|
|
||||||
|
const weekTemplateAttr = rootNote.getOwnedAttribute("relation", "weekTemplate");
|
||||||
|
console.log("weekTemplateAttr", weekTemplateAttr);
|
||||||
|
|
||||||
|
if (weekTemplateAttr) {
|
||||||
|
console.log("weekTemplateAttr.value", weekTemplateAttr.value);
|
||||||
|
attributeService.createRelation(weekNote.noteId, "template", weekTemplateAttr.value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return weekNote as unknown as BNote;
|
||||||
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
getRootCalendarNote,
|
getRootCalendarNote,
|
||||||
getYearNote,
|
getYearNote,
|
||||||
getMonthNote,
|
getMonthNote,
|
||||||
|
getWeekNote,
|
||||||
getWeekFirstDayNote,
|
getWeekFirstDayNote,
|
||||||
getDayNote,
|
getDayNote,
|
||||||
getTodayNote
|
getTodayNote
|
||||||
|
Loading…
x
Reference in New Issue
Block a user