mirror of
https://github.com/TriliumNext/Notes.git
synced 2025-07-29 02:52:27 +08:00
63 lines
2.0 KiB
JavaScript
63 lines
2.0 KiB
JavaScript
if (!["task", "location", "tag", "todoDate", "doneDate"].includes(api.originEntity.name)) {
|
|
return;
|
|
}
|
|
|
|
const tagRootNote = api.getNoteWithLabel('taskTagRoot');
|
|
const doneRootNote = api.getNoteWithLabel('taskDoneRoot');
|
|
const todoRootNote = api.getNoteWithLabel('taskTodoRoot');
|
|
|
|
if (!tagRootNote || !doneRootNote || !todoRootNote) {
|
|
console.log("One of the tagRootNote, doneRootNote or todoRootNote does not exist");
|
|
return;
|
|
}
|
|
|
|
const note = api.originEntity.getNote();
|
|
|
|
if (note.isDeleted) {
|
|
return;
|
|
}
|
|
|
|
const attributes = note.getAttributes();
|
|
|
|
const todoDate = note.getLabelValue('todoDate');
|
|
const doneDate = note.getLabelValue('doneDate');
|
|
|
|
function isWithinExpectedRange(date) {
|
|
if (!date) {
|
|
return true;
|
|
}
|
|
|
|
const year = parseInt(date.substr(0, 4));
|
|
|
|
return year >= 2010 && year < 2050;
|
|
}
|
|
|
|
if (!isWithinExpectedRange(todoDate) || !isWithinExpectedRange(doneDate)) {
|
|
console.log(`One or both dates - ${todoDate}, ${doneDate} - is outside of expected range`);
|
|
|
|
return;
|
|
}
|
|
|
|
const isTaskDone = !!doneDate;
|
|
|
|
api.toggleNoteInParent(isTaskDone, note.noteId, doneRootNote.noteId);
|
|
api.toggleNoteInParent(!isTaskDone, note.noteId, todoRootNote.noteId);
|
|
|
|
const location = note.getLabelValue('location');
|
|
const locationRootNote = api.getNoteWithLabel('taskLocationRoot');
|
|
|
|
reconcileAssignments(note, locationRootNote, location ? [location] : [], 'taskLocationNote', isTaskDone);
|
|
|
|
const tags = attributes.filter(attr => attr.type === 'label' && attr.name === 'tag').map(attr => attr.value);
|
|
|
|
reconcileAssignments(note, tagRootNote, tags, 'taskTagNote', isTaskDone);
|
|
|
|
note.toggleLabel(isTaskDone, "cssClass", "done");
|
|
|
|
const doneTargetNoteId = isTaskDone ? api.getDayNote(doneDate).noteId : null;
|
|
api.setNoteToParent(note.noteId, 'DONE', doneTargetNoteId);
|
|
|
|
note.toggleLabel(!isTaskDone, "cssClass", "todo");
|
|
|
|
const todoTargetNoteId = (!isTaskDone && todoDate) ? api.getDayNote(todoDate).noteId : null;
|
|
api.setNoteToParent(note.noteId, 'TODO', todoTargetNoteId); |