mirror of
				https://github.com/TriliumNext/Notes.git
				synced 2025-10-31 13:01:31 +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); |