Task manager - tvortsa/trilium GitHub Wiki

Task Manager это [promoted attributes]] и [[scripts]] демо из в [demo document.

Demo

images/task-manager.png

Task Manager управляет запланированными (TODO) задачами и законченными задачами (не пустой атрибут doneDate). Запланированные задачи далее классифицируются по местоположению и произвольным тегам - всякий раз, когда вы меняете атрибут тега в примечании к задаче, эта задача затем автоматически перемещается в соответствующее место.

Task Manager также интегрируется с [day notes]] - заметки которые [cloned в day note как для todoDate note так и для doneDate note (с prefix либо "TODO" либо "DONE").

Реализация

New tasks создаются в заметке TODO у которого есть "child:template" relation (см attribute inheritance) указывая на шаблон задачи.

Атрибуты

Task template определяет несколько [promoted attributes]] - todoDate, doneData, tags, location. Главное, он также определяет runOnAttributeChange связь - [event обработчик, который запускается при изменении атрибута. Этот script обрабатывает, например, когда мы заполняем атрибут doneDate - это означает, что задача выполнена и должна быть перемещена в заметку «Готово» и удалена из TODO, местоположений и тегов.

кнопка New task

Есть также заметка "button" которая содержит простой скрипт который добавляет кнопку для создания новой заметки (task) в заметке TODO.

api.addButtonToToolbar({
    title: 'New task',
    icon: 'check',
    shortcut: 'alt+n',
    action: async () => {
        // создание заметок это ответственность бэкэнд (server), поэтому мы должны передать
        // управление туда
        const taskNoteId = await api.runOnServer(async () => {
            const todoRootNote = await api.getNoteWithLabel('taskTodoRoot');
            const {note} = await api.createNote(todoRootNote.noteId, 'new task', '');

            return note.noteId;
        });

        // мы получили ID недавно созданной заметки, и мы хотим немедленно отобразить ее
        await api.activateNewNote(taskNoteId);
    }
});

CSS

На демонстрационном скриншоте выше вы можете заметить, что задачи TODO выделены красным цветом, а DONE задачи - зеленым.

Это сделано, с помощью CSS code note который определяет дополнительные классы CSS:

span.fancytree-node.todo .fancytree-title {
    color: red !important;
}

span.fancytree-node.done .fancytree-title {
    color: green !important;
}

Этот code note имеет appCss label который распознается Trilium при запуске и загружается в приложение как CSS.

Вторая часть этой функциональности основана на описанном выше обработчике событий, который назначает cssClass label to задача либо "done" либо "todo" на основе состояния задачи.