mirror of
https://github.com/callumalpass/tasknotes.git
synced 2026-07-22 12:50:26 +00:00
chore: add e2e test vault to version control
Track the test vault to detect unexpected file modifications during E2E tests. Updated .gitignore to exclude only plugin symlinks while tracking data.json for reproducible test settings.
This commit is contained in:
parent
55d4b90bf2
commit
6b2bf64038
23 changed files with 1282 additions and 1 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -62,7 +62,10 @@ C/
|
|||
# E2E testing - unpacked Obsidian and test results
|
||||
.obsidian-unpacked/
|
||||
test-results/
|
||||
tasknotes-e2e-vault/.obsidian/plugins/tasknotes/
|
||||
# E2E vault plugin symlinks (point to build output)
|
||||
tasknotes-e2e-vault/.obsidian/plugins/tasknotes/main.js
|
||||
tasknotes-e2e-vault/.obsidian/plugins/tasknotes/manifest.json
|
||||
tasknotes-e2e-vault/.obsidian/plugins/tasknotes/styles.css
|
||||
.augment
|
||||
# Test output files
|
||||
jest-out.txt
|
||||
|
|
@ -72,3 +75,4 @@ BASES_API_MIGRATION.md
|
|||
OBSIDIAN-SERVER-README.md
|
||||
obsidian-help
|
||||
obsidian-api
|
||||
.clump
|
||||
|
|
|
|||
3
tasknotes-e2e-vault/.obsidian/app.json
vendored
Normal file
3
tasknotes-e2e-vault/.obsidian/app.json
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"alwaysUpdateLinks": true
|
||||
}
|
||||
7
tasknotes-e2e-vault/.obsidian/appearance.json
vendored
Normal file
7
tasknotes-e2e-vault/.obsidian/appearance.json
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"baseFontSize": 16,
|
||||
"interfaceFontFamily": "",
|
||||
"textFontFamily": "",
|
||||
"monospaceFontFamily": "",
|
||||
"theme": "moonstone"
|
||||
}
|
||||
3
tasknotes-e2e-vault/.obsidian/community-plugins.json
vendored
Normal file
3
tasknotes-e2e-vault/.obsidian/community-plugins.json
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
[
|
||||
"tasknotes"
|
||||
]
|
||||
33
tasknotes-e2e-vault/.obsidian/core-plugins.json
vendored
Normal file
33
tasknotes-e2e-vault/.obsidian/core-plugins.json
vendored
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"file-explorer": true,
|
||||
"global-search": true,
|
||||
"switcher": true,
|
||||
"graph": false,
|
||||
"backlink": false,
|
||||
"outgoing-link": false,
|
||||
"tag-pane": false,
|
||||
"page-preview": true,
|
||||
"daily-notes": true,
|
||||
"templates": false,
|
||||
"note-composer": true,
|
||||
"command-palette": true,
|
||||
"slash-command": false,
|
||||
"editor-status": true,
|
||||
"markdown-importer": false,
|
||||
"zk-prefixer": false,
|
||||
"random-note": false,
|
||||
"outline": false,
|
||||
"word-count": false,
|
||||
"slides": false,
|
||||
"audio-recorder": false,
|
||||
"workspaces": false,
|
||||
"file-recovery": false,
|
||||
"publish": false,
|
||||
"sync": false,
|
||||
"canvas": true,
|
||||
"footnotes": false,
|
||||
"properties": true,
|
||||
"bookmarks": true,
|
||||
"bases": true,
|
||||
"webviewer": false
|
||||
}
|
||||
427
tasknotes-e2e-vault/.obsidian/plugins/tasknotes/data.json
vendored
Normal file
427
tasknotes-e2e-vault/.obsidian/plugins/tasknotes/data.json
vendored
Normal file
|
|
@ -0,0 +1,427 @@
|
|||
{
|
||||
"tasksFolder": "TaskNotes/Tasks",
|
||||
"moveArchivedTasks": false,
|
||||
"archiveFolder": "TaskNotes/Archive",
|
||||
"taskTag": "task",
|
||||
"taskIdentificationMethod": "tag",
|
||||
"hideIdentifyingTagsInCards": false,
|
||||
"taskPropertyName": "status",
|
||||
"taskPropertyValue": "",
|
||||
"excludedFolders": "",
|
||||
"defaultTaskPriority": "normal",
|
||||
"defaultTaskStatus": "open",
|
||||
"taskOrgFiltersCollapsed": false,
|
||||
"taskFilenameFormat": "zettel",
|
||||
"storeTitleInFilename": true,
|
||||
"customFilenameTemplate": "{title}",
|
||||
"taskCreationDefaults": {
|
||||
"defaultContexts": "",
|
||||
"defaultTags": "",
|
||||
"defaultProjects": "",
|
||||
"useParentNoteAsProject": false,
|
||||
"defaultTimeEstimate": 0,
|
||||
"defaultRecurrence": "none",
|
||||
"defaultDueDate": "none",
|
||||
"defaultScheduledDate": "today",
|
||||
"bodyTemplate": "",
|
||||
"useBodyTemplate": false,
|
||||
"defaultReminders": []
|
||||
},
|
||||
"calendarViewSettings": {
|
||||
"defaultView": "dayGridMonth",
|
||||
"customDayCount": 3,
|
||||
"slotDuration": "00:30:00",
|
||||
"slotMinTime": "00:00:00",
|
||||
"slotMaxTime": "24:00:00",
|
||||
"scrollTime": "08:00:00",
|
||||
"firstDay": 1,
|
||||
"timeFormat": "24",
|
||||
"showWeekends": true,
|
||||
"locale": "",
|
||||
"defaultShowScheduled": true,
|
||||
"defaultShowDue": true,
|
||||
"defaultShowDueWhenScheduled": true,
|
||||
"defaultShowTimeEntries": false,
|
||||
"defaultShowRecurring": true,
|
||||
"defaultShowICSEvents": true,
|
||||
"enableTimeblocking": true,
|
||||
"defaultShowTimeblocks": true,
|
||||
"nowIndicator": true,
|
||||
"selectMirror": true,
|
||||
"weekNumbers": false,
|
||||
"showTodayHighlight": true,
|
||||
"eventMinHeight": 15,
|
||||
"slotEventOverlap": true,
|
||||
"eventMaxStack": null,
|
||||
"dayMaxEvents": true,
|
||||
"dayMaxEventRows": false
|
||||
},
|
||||
"pomodoroWorkDuration": 25,
|
||||
"pomodoroShortBreakDuration": 5,
|
||||
"pomodoroLongBreakDuration": 15,
|
||||
"pomodoroLongBreakInterval": 4,
|
||||
"pomodoroAutoStartBreaks": true,
|
||||
"pomodoroAutoStartWork": false,
|
||||
"pomodoroNotifications": true,
|
||||
"pomodoroSoundEnabled": true,
|
||||
"pomodoroSoundVolume": 50,
|
||||
"pomodoroStorageLocation": "plugin",
|
||||
"enableTaskLinkOverlay": true,
|
||||
"enableInstantTaskConvert": true,
|
||||
"useDefaultsOnInstantConvert": true,
|
||||
"enableNaturalLanguageInput": true,
|
||||
"nlpDefaultToScheduled": true,
|
||||
"nlpLanguage": "en",
|
||||
"uiLanguage": "system",
|
||||
"statusSuggestionTrigger": "*",
|
||||
"nlpTriggers": {
|
||||
"triggers": [
|
||||
{
|
||||
"propertyId": "tags",
|
||||
"trigger": "#",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"propertyId": "contexts",
|
||||
"trigger": "@",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"propertyId": "projects",
|
||||
"trigger": "+",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"propertyId": "status",
|
||||
"trigger": "*",
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"propertyId": "priority",
|
||||
"trigger": "!",
|
||||
"enabled": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"singleClickAction": "edit",
|
||||
"doubleClickAction": "openNote",
|
||||
"projectAutosuggest": {
|
||||
"enableFuzzy": false,
|
||||
"rows": [
|
||||
"{title|n(Title)}",
|
||||
"{aliases|n(Aliases)}",
|
||||
"{file.path|n(Path)}"
|
||||
],
|
||||
"showAdvanced": false,
|
||||
"requiredTags": [],
|
||||
"includeFolders": [],
|
||||
"propertyKey": "",
|
||||
"propertyValue": ""
|
||||
},
|
||||
"inlineTaskConvertFolder": "{{currentNotePath}}",
|
||||
"disableNoteIndexing": false,
|
||||
"suggestionDebounceMs": 0,
|
||||
"fieldMapping": {
|
||||
"title": "title",
|
||||
"status": "status",
|
||||
"priority": "priority",
|
||||
"due": "due",
|
||||
"scheduled": "scheduled",
|
||||
"contexts": "contexts",
|
||||
"projects": "projects",
|
||||
"timeEstimate": "timeEstimate",
|
||||
"completedDate": "completedDate",
|
||||
"dateCreated": "dateCreated",
|
||||
"dateModified": "dateModified",
|
||||
"recurrence": "recurrence",
|
||||
"recurrenceAnchor": "recurrence_anchor",
|
||||
"archiveTag": "archived",
|
||||
"timeEntries": "timeEntries",
|
||||
"completeInstances": "complete_instances",
|
||||
"skippedInstances": "skipped_instances",
|
||||
"blockedBy": "blockedBy",
|
||||
"pomodoros": "pomodoros",
|
||||
"icsEventId": "icsEventId",
|
||||
"icsEventTag": "ics_event",
|
||||
"reminders": "reminders"
|
||||
},
|
||||
"customStatuses": [
|
||||
{
|
||||
"id": "none",
|
||||
"value": "none",
|
||||
"label": "None",
|
||||
"color": "#cccccc",
|
||||
"isCompleted": false,
|
||||
"order": 0,
|
||||
"autoArchive": false,
|
||||
"autoArchiveDelay": 5
|
||||
},
|
||||
{
|
||||
"id": "open",
|
||||
"value": "open",
|
||||
"label": "Open",
|
||||
"color": "#808080",
|
||||
"isCompleted": false,
|
||||
"order": 1,
|
||||
"autoArchive": false,
|
||||
"autoArchiveDelay": 5
|
||||
},
|
||||
{
|
||||
"id": "in-progress",
|
||||
"value": "in-progress",
|
||||
"label": "In progress",
|
||||
"color": "#0066cc",
|
||||
"isCompleted": false,
|
||||
"order": 2,
|
||||
"autoArchive": false,
|
||||
"autoArchiveDelay": 5,
|
||||
"icon": "lucide-activity"
|
||||
},
|
||||
{
|
||||
"id": "done",
|
||||
"value": "done",
|
||||
"label": "Done",
|
||||
"color": "#00aa00",
|
||||
"isCompleted": true,
|
||||
"order": 3,
|
||||
"autoArchive": false,
|
||||
"autoArchiveDelay": 5
|
||||
}
|
||||
],
|
||||
"customPriorities": [
|
||||
{
|
||||
"id": "none",
|
||||
"value": "none",
|
||||
"label": "None",
|
||||
"color": "#cccccc",
|
||||
"weight": 0
|
||||
},
|
||||
{
|
||||
"id": "low",
|
||||
"value": "low",
|
||||
"label": "Low",
|
||||
"color": "#00aa00",
|
||||
"weight": 1
|
||||
},
|
||||
{
|
||||
"id": "normal",
|
||||
"value": "normal",
|
||||
"label": "Normal",
|
||||
"color": "#ffaa00",
|
||||
"weight": 2
|
||||
},
|
||||
{
|
||||
"id": "high",
|
||||
"value": "high",
|
||||
"label": "High",
|
||||
"color": "#ff0000",
|
||||
"weight": 3
|
||||
}
|
||||
],
|
||||
"recurrenceMigrated": false,
|
||||
"lastSeenVersion": "4.1.3",
|
||||
"showReleaseNotesOnUpdate": true,
|
||||
"showTrackedTasksInStatusBar": false,
|
||||
"autoStopTimeTrackingOnComplete": true,
|
||||
"autoStopTimeTrackingNotification": false,
|
||||
"showRelationships": true,
|
||||
"relationshipsPosition": "bottom",
|
||||
"showTaskCardInNote": true,
|
||||
"showExpandableSubtasks": true,
|
||||
"subtaskChevronPosition": "right",
|
||||
"viewsButtonAlignment": "right",
|
||||
"hideCompletedFromOverdue": true,
|
||||
"icsIntegration": {
|
||||
"defaultNoteTemplate": "",
|
||||
"defaultNoteFolder": "",
|
||||
"icsNoteFilenameFormat": "title",
|
||||
"customICSNoteFilenameTemplate": "{title}",
|
||||
"enableAutoExport": false,
|
||||
"autoExportPath": "tasknotes-calendar.ics",
|
||||
"autoExportInterval": 60
|
||||
},
|
||||
"savedViews": [],
|
||||
"enableNotifications": true,
|
||||
"notificationType": "system",
|
||||
"enableAPI": false,
|
||||
"apiPort": 8080,
|
||||
"apiAuthToken": "",
|
||||
"webhooks": [],
|
||||
"userFields": [],
|
||||
"enableModalSplitLayout": true,
|
||||
"defaultVisibleProperties": [
|
||||
"status",
|
||||
"priority",
|
||||
"due",
|
||||
"scheduled",
|
||||
"projects",
|
||||
"contexts",
|
||||
"tags",
|
||||
"blocked",
|
||||
"blocking"
|
||||
],
|
||||
"inlineVisibleProperties": [
|
||||
"status",
|
||||
"priority",
|
||||
"due",
|
||||
"scheduled",
|
||||
"recurrence"
|
||||
],
|
||||
"enableBases": true,
|
||||
"autoCreateDefaultBasesFiles": true,
|
||||
"commandFileMapping": {
|
||||
"open-calendar-view": "TaskNotes/Views/mini-calendar-default.base",
|
||||
"open-kanban-view": "TaskNotes/Views/kanban-default.base",
|
||||
"open-tasks-view": "TaskNotes/Views/tasks-default.base",
|
||||
"open-advanced-calendar-view": "TaskNotes/Views/calendar-default.base",
|
||||
"open-agenda-view": "TaskNotes/Views/agenda-default.base",
|
||||
"relationships": "TaskNotes/Views/relationships.base"
|
||||
},
|
||||
"maintainDueDateOffsetInRecurring": false,
|
||||
"useFrontmatterMarkdownLinks": false,
|
||||
"oauthSetupMode": "advanced",
|
||||
"lemonSqueezyLicenseKey": "",
|
||||
"googleOAuthClientId": "",
|
||||
"googleOAuthClientSecret": "",
|
||||
"microsoftOAuthClientId": "",
|
||||
"microsoftOAuthClientSecret": "",
|
||||
"enableGoogleCalendar": false,
|
||||
"enableMicrosoftCalendar": false,
|
||||
"enabledGoogleCalendars": [],
|
||||
"googleCalendarSyncTokens": {},
|
||||
"enabledMicrosoftCalendars": [],
|
||||
"microsoftCalendarSyncTokens": {},
|
||||
"modalFieldsConfig": {
|
||||
"version": 1,
|
||||
"fields": [
|
||||
{
|
||||
"id": "title",
|
||||
"fieldType": "core",
|
||||
"group": "basic",
|
||||
"displayName": "Title",
|
||||
"visibleInCreation": true,
|
||||
"visibleInEdit": true,
|
||||
"order": 0,
|
||||
"enabled": true,
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"id": "details",
|
||||
"fieldType": "core",
|
||||
"group": "basic",
|
||||
"displayName": "Details",
|
||||
"visibleInCreation": true,
|
||||
"visibleInEdit": true,
|
||||
"order": 1,
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "contexts",
|
||||
"fieldType": "core",
|
||||
"group": "metadata",
|
||||
"displayName": "Contexts",
|
||||
"visibleInCreation": true,
|
||||
"visibleInEdit": true,
|
||||
"order": 0,
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "tags",
|
||||
"fieldType": "core",
|
||||
"group": "metadata",
|
||||
"displayName": "Tags",
|
||||
"visibleInCreation": true,
|
||||
"visibleInEdit": true,
|
||||
"order": 1,
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "time-estimate",
|
||||
"fieldType": "core",
|
||||
"group": "metadata",
|
||||
"displayName": "Time Estimate",
|
||||
"visibleInCreation": true,
|
||||
"visibleInEdit": true,
|
||||
"order": 2,
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "projects",
|
||||
"fieldType": "organization",
|
||||
"group": "organization",
|
||||
"displayName": "Projects",
|
||||
"visibleInCreation": true,
|
||||
"visibleInEdit": true,
|
||||
"order": 0,
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "subtasks",
|
||||
"fieldType": "organization",
|
||||
"group": "organization",
|
||||
"displayName": "Subtasks",
|
||||
"visibleInCreation": true,
|
||||
"visibleInEdit": true,
|
||||
"order": 1,
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "blocked-by",
|
||||
"fieldType": "dependency",
|
||||
"group": "dependencies",
|
||||
"displayName": "Blocked By",
|
||||
"visibleInCreation": true,
|
||||
"visibleInEdit": true,
|
||||
"order": 0,
|
||||
"enabled": true
|
||||
},
|
||||
{
|
||||
"id": "blocking",
|
||||
"fieldType": "dependency",
|
||||
"group": "dependencies",
|
||||
"displayName": "Blocking",
|
||||
"visibleInCreation": true,
|
||||
"visibleInEdit": true,
|
||||
"order": 1,
|
||||
"enabled": true
|
||||
}
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"id": "basic",
|
||||
"displayName": "Basic Information",
|
||||
"order": 0,
|
||||
"collapsible": false,
|
||||
"defaultCollapsed": false
|
||||
},
|
||||
{
|
||||
"id": "metadata",
|
||||
"displayName": "Metadata",
|
||||
"order": 1,
|
||||
"collapsible": true,
|
||||
"defaultCollapsed": false
|
||||
},
|
||||
{
|
||||
"id": "organization",
|
||||
"displayName": "Organization",
|
||||
"order": 2,
|
||||
"collapsible": true,
|
||||
"defaultCollapsed": false
|
||||
},
|
||||
{
|
||||
"id": "dependencies",
|
||||
"displayName": "Dependencies",
|
||||
"order": 3,
|
||||
"collapsible": true,
|
||||
"defaultCollapsed": false
|
||||
},
|
||||
{
|
||||
"id": "custom",
|
||||
"displayName": "Custom Fields",
|
||||
"order": 4,
|
||||
"collapsible": true,
|
||||
"defaultCollapsed": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
209
tasknotes-e2e-vault/.obsidian/workspace.json
vendored
Normal file
209
tasknotes-e2e-vault/.obsidian/workspace.json
vendored
Normal file
|
|
@ -0,0 +1,209 @@
|
|||
{
|
||||
"main": {
|
||||
"id": "5fbb4b4e79942ff5",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "ead54bd586d8e733",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "60672b8bf6360f2e",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bases",
|
||||
"state": {
|
||||
"file": "TaskNotes/Views/mini-calendar-default.base",
|
||||
"viewName": "Due"
|
||||
},
|
||||
"icon": "tasknotes-simple",
|
||||
"title": "mini-calendar-default"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "1204dd1d984295ac",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "tasknotes-stats-view",
|
||||
"state": {},
|
||||
"icon": "lucide-ghost",
|
||||
"title": "tasknotes-stats-view"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "54a514db224a82cb",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "tasknotes-pomodoro-stats-view",
|
||||
"state": {},
|
||||
"icon": "lucide-ghost",
|
||||
"title": "tasknotes-pomodoro-stats-view"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "1fce333c7850d4d0",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "tasknotes-pomodoro-view",
|
||||
"state": {},
|
||||
"icon": "lucide-ghost",
|
||||
"title": "tasknotes-pomodoro-view"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "31709169f77e18e5",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bases",
|
||||
"state": {
|
||||
"file": "TaskNotes/Views/mini-calendar-default.base",
|
||||
"viewName": "Due"
|
||||
},
|
||||
"icon": "tasknotes-simple",
|
||||
"title": "mini-calendar-default"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "4d1c05999e747f56",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bases",
|
||||
"state": {
|
||||
"file": "TaskNotes/Views/kanban-default.base",
|
||||
"viewName": "Kanban"
|
||||
},
|
||||
"icon": "tasknotes-simple",
|
||||
"title": "kanban-default"
|
||||
}
|
||||
}
|
||||
],
|
||||
"currentTab": 5
|
||||
}
|
||||
],
|
||||
"direction": "vertical"
|
||||
},
|
||||
"left": {
|
||||
"id": "4fbd1ee9b6b12816",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "78b476739a4ca057",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "4dfe819ab309703e",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "file-explorer",
|
||||
"state": {
|
||||
"sortOrder": "alphabetical",
|
||||
"autoReveal": false
|
||||
},
|
||||
"icon": "lucide-folder-closed",
|
||||
"title": "Files"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "a37fd665c7b7a224",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "search",
|
||||
"state": {
|
||||
"query": "",
|
||||
"matchingCase": false,
|
||||
"explainSearch": false,
|
||||
"collapseAll": false,
|
||||
"extraContext": false,
|
||||
"sortOrder": "alphabetical"
|
||||
},
|
||||
"icon": "lucide-search",
|
||||
"title": "Search"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "02fa9c1a10fd1d56",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "bookmarks",
|
||||
"state": {},
|
||||
"icon": "lucide-bookmark",
|
||||
"title": "Bookmarks"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300
|
||||
},
|
||||
"right": {
|
||||
"id": "8ff3322ed5378417",
|
||||
"type": "split",
|
||||
"children": [
|
||||
{
|
||||
"id": "f7af2f39eaafd53b",
|
||||
"type": "tabs",
|
||||
"children": [
|
||||
{
|
||||
"id": "36b40c38d2035910",
|
||||
"type": "leaf",
|
||||
"state": {
|
||||
"type": "all-properties",
|
||||
"state": {
|
||||
"sortOrder": "frequency",
|
||||
"showSearch": false,
|
||||
"searchQuery": ""
|
||||
},
|
||||
"icon": "lucide-archive",
|
||||
"title": "All properties"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"direction": "horizontal",
|
||||
"width": 300,
|
||||
"collapsed": true
|
||||
},
|
||||
"left-ribbon": {
|
||||
"hiddenItems": {
|
||||
"daily-notes:Open today's daily note": false,
|
||||
"switcher:Open quick switcher": false,
|
||||
"canvas:Create new canvas": false,
|
||||
"command-palette:Open command palette": false,
|
||||
"bases:Create new base": false,
|
||||
"tasknotes:Open mini calendar": false,
|
||||
"tasknotes:Open advanced calendar": false,
|
||||
"tasknotes:Open task list": false,
|
||||
"tasknotes:Open agenda": false,
|
||||
"tasknotes:Open kanban board": false,
|
||||
"tasknotes:Open pomodoro": false,
|
||||
"tasknotes:Open pomodoro stats": false,
|
||||
"tasknotes:Create new task": false
|
||||
}
|
||||
},
|
||||
"active": "4d1c05999e747f56",
|
||||
"lastOpenFiles": [
|
||||
"TaskNotes/Views/mini-calendar-default.base",
|
||||
"TaskNotes/Views/kanban-default.base",
|
||||
"TaskNotes/Views/tasks-default.base",
|
||||
"TaskNotes/Views/relationships.base",
|
||||
"TaskNotes/Views/calendar-default.base",
|
||||
"TaskNotes/Weekly team meeting.md",
|
||||
"TaskNotes/Review project proposal.md",
|
||||
"TaskNotes/Views/agenda-default.base",
|
||||
"TaskNotes/Buy groceries.md",
|
||||
"TaskNotes/Daily standup.md",
|
||||
"TaskNotes/Code review PR 123.md",
|
||||
"2026-01-01.md",
|
||||
"2025-12-31.md",
|
||||
"Welcome.md",
|
||||
"TaskNotes/Plan vacation.md",
|
||||
"TaskNotes/Overdue report.md",
|
||||
"TaskNotes/Fix login bug.md",
|
||||
"TaskNotes/Views/relationships.base.tmp.1242721.1767128675679",
|
||||
"TaskNotes/Code review PR 123.md.tmp.492119.1767088462652",
|
||||
"TaskNotes/Daily standup.md.tmp.492119.1767088462513",
|
||||
"TaskNotes/Plan vacation.md.tmp.492119.1767088462381"
|
||||
]
|
||||
}
|
||||
8
tasknotes-e2e-vault/2025-12-31.md
Normal file
8
tasknotes-e2e-vault/2025-12-31.md
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
timeblocks:
|
||||
- id: tb-1767130810283-77zh1f9bn
|
||||
title: Timeblock
|
||||
startTime: 11:00
|
||||
endTime: 14:30
|
||||
color: "#9664f2"
|
||||
---
|
||||
22
tasknotes-e2e-vault/TaskNotes/Buy groceries.md
Normal file
22
tasknotes-e2e-vault/TaskNotes/Buy groceries.md
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
title: Buy groceries
|
||||
status: open
|
||||
priority: medium
|
||||
due: 2025-12-31
|
||||
scheduled: 2025-12-30
|
||||
tags:
|
||||
- errands
|
||||
- home
|
||||
- task
|
||||
contexts:
|
||||
- "@shopping"
|
||||
timeEstimate: 45
|
||||
dateModified: 2025-12-31T08:48:35.494+11:00
|
||||
---
|
||||
|
||||
# Buy groceries
|
||||
|
||||
- Milk
|
||||
- Bread
|
||||
- Eggs
|
||||
- Vegetables
|
||||
22
tasknotes-e2e-vault/TaskNotes/Code review PR 123.md
Normal file
22
tasknotes-e2e-vault/TaskNotes/Code review PR 123.md
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
title: "Code review PR #123"
|
||||
status: in-progress
|
||||
priority: medium
|
||||
due: 2025-12-31
|
||||
tags:
|
||||
- code-review
|
||||
- dev
|
||||
- task
|
||||
contexts:
|
||||
- "@dev"
|
||||
timeEstimate: 45
|
||||
---
|
||||
|
||||
# Code review PR #123
|
||||
|
||||
Review the authentication refactor pull request.
|
||||
|
||||
## Checklist
|
||||
- [ ] Check for security issues
|
||||
- [ ] Verify test coverage
|
||||
- [ ] Review code style
|
||||
19
tasknotes-e2e-vault/TaskNotes/Daily standup.md
Normal file
19
tasknotes-e2e-vault/TaskNotes/Daily standup.md
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
---
|
||||
title: Daily standup
|
||||
status: todo
|
||||
priority: medium
|
||||
scheduled: 2025-12-30T09:00
|
||||
recurrence: FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR
|
||||
tags:
|
||||
- meeting
|
||||
- recurring
|
||||
- daily
|
||||
- task
|
||||
contexts:
|
||||
- "@office"
|
||||
timeEstimate: 15
|
||||
---
|
||||
|
||||
# Daily standup
|
||||
|
||||
Quick daily sync with the team.
|
||||
21
tasknotes-e2e-vault/TaskNotes/Fix login bug.md
Normal file
21
tasknotes-e2e-vault/TaskNotes/Fix login bug.md
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
title: Fix login bug
|
||||
status: done
|
||||
priority: critical
|
||||
due: 2025-12-28
|
||||
completedDate: 2025-12-28
|
||||
tags:
|
||||
- bug
|
||||
- urgent
|
||||
- task
|
||||
contexts:
|
||||
- "@dev"
|
||||
timeEstimate: 60
|
||||
---
|
||||
|
||||
# Fix login bug
|
||||
|
||||
Users were unable to login due to session timeout issue.
|
||||
|
||||
## Resolution
|
||||
Fixed by updating the session refresh logic.
|
||||
18
tasknotes-e2e-vault/TaskNotes/Overdue report.md
Normal file
18
tasknotes-e2e-vault/TaskNotes/Overdue report.md
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
---
|
||||
title: Overdue report
|
||||
status: in-progress
|
||||
priority: high
|
||||
due: 2025-12-25
|
||||
tags:
|
||||
- report
|
||||
- overdue
|
||||
- task
|
||||
contexts:
|
||||
- "@office"
|
||||
timeEstimate: 90
|
||||
dateModified: 2025-12-31T08:48:39.638+11:00
|
||||
---
|
||||
|
||||
# Overdue report
|
||||
|
||||
This report was due last week and needs to be completed urgently.
|
||||
22
tasknotes-e2e-vault/TaskNotes/Plan vacation.md
Normal file
22
tasknotes-e2e-vault/TaskNotes/Plan vacation.md
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
title: Plan vacation
|
||||
status: todo
|
||||
priority: low
|
||||
due: 2026-01-15
|
||||
tags:
|
||||
- personal
|
||||
- fun
|
||||
- task
|
||||
contexts:
|
||||
- "@home"
|
||||
timeEstimate: 30
|
||||
---
|
||||
|
||||
# Plan vacation
|
||||
|
||||
Research and book vacation for February.
|
||||
|
||||
## Ideas
|
||||
- Beach resort
|
||||
- Mountain cabin
|
||||
- City trip
|
||||
23
tasknotes-e2e-vault/TaskNotes/Review project proposal.md
Normal file
23
tasknotes-e2e-vault/TaskNotes/Review project proposal.md
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
---
|
||||
title: Review project proposal
|
||||
status: in-progress
|
||||
priority: high
|
||||
due: 2025-12-30
|
||||
scheduled: 2025-12-30
|
||||
tags:
|
||||
- work
|
||||
- important
|
||||
- task
|
||||
contexts:
|
||||
- "@office"
|
||||
timeEstimate: 120
|
||||
---
|
||||
|
||||
# Review project proposal
|
||||
|
||||
Need to review the Q1 project proposal and provide feedback to the team.
|
||||
|
||||
## Notes
|
||||
- Check budget allocation
|
||||
- Verify timeline
|
||||
- Review resource requirements
|
||||
62
tasknotes-e2e-vault/TaskNotes/Views/agenda-default.base
Normal file
62
tasknotes-e2e-vault/TaskNotes/Views/agenda-default.base
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
filters:
|
||||
and:
|
||||
- note.status && note.status != "" && note.status != null
|
||||
formulas:
|
||||
priorityWeight: if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))
|
||||
daysUntilDue: if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)
|
||||
daysUntilScheduled: if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)
|
||||
daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor()
|
||||
daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor()
|
||||
isOverdue: due && date(due) < today() && status != "done"
|
||||
isDueToday: due && date(due).date() == today()
|
||||
isDueThisWeek: due && date(due) >= today() && date(due) <= today() + "7d"
|
||||
isScheduledToday: scheduled && date(scheduled).date() == today()
|
||||
isRecurring: recurrence && !recurrence.isEmpty()
|
||||
hasTimeEstimate: timeEstimate && timeEstimate > 0
|
||||
timeRemaining: if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)
|
||||
efficiencyRatio: if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)
|
||||
timeTrackedThisWeek: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||
timeTrackedToday: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).date() == today()).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||
dueMonth: if(due, date(due).format("YYYY-MM"), "No due date")
|
||||
dueWeek: if(due, date(due).format("YYYY-[W]WW"), "No due date")
|
||||
scheduledMonth: if(scheduled, date(scheduled).format("YYYY-MM"), "Not scheduled")
|
||||
scheduledWeek: if(scheduled, date(scheduled).format("YYYY-[W]WW"), "Not scheduled")
|
||||
dueDateCategory: if(!due, "No due date", if(date(due) < today(), "Overdue", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due) <= today() + "7d", "This week", "Later")))))
|
||||
timeEstimateCategory: if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))
|
||||
ageCategory: if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))
|
||||
createdMonth: file.ctime.format("YYYY-MM")
|
||||
modifiedMonth: file.mtime.format("YYYY-MM")
|
||||
priorityCategory: if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))
|
||||
projectCount: if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))
|
||||
contextCount: if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))
|
||||
trackingStatus: if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))
|
||||
nextDate: if(due && scheduled, if(date(due) < date(scheduled), due, scheduled), if(due, due, scheduled))
|
||||
daysUntilNext: if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled))
|
||||
hasDate: due || scheduled
|
||||
isToday: (due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today())
|
||||
isThisWeek: (due && date(due) >= today() && date(due) <= today() + "7d") || (scheduled && date(scheduled) >= today() && date(scheduled) <= today() + "7d")
|
||||
nextDateCategory: if(!due && !scheduled, "No date", if((due && date(due) < today()) || (scheduled && date(scheduled) < today()), "Overdue/Past", if((due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today()), "Today", if((due && date(due).date() == today() + "1d") || (scheduled && date(scheduled).date() == today() + "1d"), "Tomorrow", if((due && date(due) <= today() + "7d") || (scheduled && date(scheduled) <= today() + "7d"), "This week", "Later")))))
|
||||
nextDateMonth: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if(due, date(due).format("YYYY-MM"), if(scheduled, date(scheduled).format("YYYY-MM"), "No date")))
|
||||
nextDateWeek: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if(due, date(due).format("YYYY-[W]WW"), if(scheduled, date(scheduled).format("YYYY-[W]WW"), "No date")))
|
||||
urgencyScore: if(!due && !scheduled, formula.priorityWeight, formula.priorityWeight + max(0, 10 - formula.daysUntilNext))
|
||||
timeTrackedFormatted: if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")
|
||||
dueDateDisplay: if(!due, "", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due).date() == today() - "1d", "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due) <= today() + "7d", date(due).format("ddd"), date(due).format("MMM D")))))))
|
||||
views:
|
||||
- type: tasknotesCalendar
|
||||
name: Agenda
|
||||
order:
|
||||
- status
|
||||
- priority
|
||||
- due
|
||||
- scheduled
|
||||
- projects
|
||||
- contexts
|
||||
- file.tags
|
||||
- blockedBy
|
||||
- file.name
|
||||
- recurrence
|
||||
- complete_instances
|
||||
calendarView: listWeek
|
||||
startDateProperty: file.ctime
|
||||
listDayCount: 7
|
||||
titleProperty: file.basename
|
||||
72
tasknotes-e2e-vault/TaskNotes/Views/calendar-default.base
Normal file
72
tasknotes-e2e-vault/TaskNotes/Views/calendar-default.base
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
filters:
|
||||
and:
|
||||
- note.status && note.status != "" && note.status != null
|
||||
formulas:
|
||||
priorityWeight: if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))
|
||||
daysUntilDue: if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)
|
||||
daysUntilScheduled: if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)
|
||||
daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor()
|
||||
daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor()
|
||||
isOverdue: due && date(due) < today() && status != "done"
|
||||
isDueToday: due && date(due).date() == today()
|
||||
isDueThisWeek: due && date(due) >= today() && date(due) <= today() + "7d"
|
||||
isScheduledToday: scheduled && date(scheduled).date() == today()
|
||||
isRecurring: recurrence && !recurrence.isEmpty()
|
||||
hasTimeEstimate: timeEstimate && timeEstimate > 0
|
||||
timeRemaining: if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)
|
||||
efficiencyRatio: if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)
|
||||
timeTrackedThisWeek: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||
timeTrackedToday: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).date() == today()).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||
dueMonth: if(due, date(due).format("YYYY-MM"), "No due date")
|
||||
dueWeek: if(due, date(due).format("YYYY-[W]WW"), "No due date")
|
||||
scheduledMonth: if(scheduled, date(scheduled).format("YYYY-MM"), "Not scheduled")
|
||||
scheduledWeek: if(scheduled, date(scheduled).format("YYYY-[W]WW"), "Not scheduled")
|
||||
dueDateCategory: if(!due, "No due date", if(date(due) < today(), "Overdue", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due) <= today() + "7d", "This week", "Later")))))
|
||||
timeEstimateCategory: if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))
|
||||
ageCategory: if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))
|
||||
createdMonth: file.ctime.format("YYYY-MM")
|
||||
modifiedMonth: file.mtime.format("YYYY-MM")
|
||||
priorityCategory: if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))
|
||||
projectCount: if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))
|
||||
contextCount: if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))
|
||||
trackingStatus: if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))
|
||||
nextDate: if(due && scheduled, if(date(due) < date(scheduled), due, scheduled), if(due, due, scheduled))
|
||||
daysUntilNext: if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled))
|
||||
hasDate: due || scheduled
|
||||
isToday: (due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today())
|
||||
isThisWeek: (due && date(due) >= today() && date(due) <= today() + "7d") || (scheduled && date(scheduled) >= today() && date(scheduled) <= today() + "7d")
|
||||
nextDateCategory: if(!due && !scheduled, "No date", if((due && date(due) < today()) || (scheduled && date(scheduled) < today()), "Overdue/Past", if((due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today()), "Today", if((due && date(due).date() == today() + "1d") || (scheduled && date(scheduled).date() == today() + "1d"), "Tomorrow", if((due && date(due) <= today() + "7d") || (scheduled && date(scheduled) <= today() + "7d"), "This week", "Later")))))
|
||||
nextDateMonth: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if(due, date(due).format("YYYY-MM"), if(scheduled, date(scheduled).format("YYYY-MM"), "No date")))
|
||||
nextDateWeek: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if(due, date(due).format("YYYY-[W]WW"), if(scheduled, date(scheduled).format("YYYY-[W]WW"), "No date")))
|
||||
urgencyScore: if(!due && !scheduled, formula.priorityWeight, formula.priorityWeight + max(0, 10 - formula.daysUntilNext))
|
||||
timeTrackedFormatted: if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")
|
||||
dueDateDisplay: if(!due, "", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due).date() == today() - "1d", "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due) <= today() + "7d", date(due).format("ddd"), date(due).format("MMM D")))))))
|
||||
views:
|
||||
- type: tasknotesCalendar
|
||||
name: Calendar
|
||||
order:
|
||||
- status
|
||||
- priority
|
||||
- due
|
||||
- scheduled
|
||||
- projects
|
||||
- contexts
|
||||
- file.tags
|
||||
- blockedBy
|
||||
- file.name
|
||||
- recurrence
|
||||
- complete_instances
|
||||
options:
|
||||
showScheduled: true
|
||||
showDue: true
|
||||
showRecurring: true
|
||||
showTimeEntries: true
|
||||
showTimeblocks: true
|
||||
showPropertyBasedEvents: true
|
||||
calendarView: timeGridWeek
|
||||
customDayCount: 3
|
||||
firstDay: 0
|
||||
slotMinTime: 06:00:00
|
||||
slotMaxTime: 22:00:00
|
||||
slotDuration: 00:30:00
|
||||
calendarView: timeGridDay
|
||||
18
tasknotes-e2e-vault/TaskNotes/Views/kanban-default.base
Normal file
18
tasknotes-e2e-vault/TaskNotes/Views/kanban-default.base
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
filters:
|
||||
and:
|
||||
- note.status && note.status != "" && note.status != null
|
||||
views:
|
||||
- type: tasknotesKanban
|
||||
name: Kanban
|
||||
groupBy:
|
||||
property: status
|
||||
direction: ASC
|
||||
order:
|
||||
- status
|
||||
- priority
|
||||
- due
|
||||
- scheduled
|
||||
- projects
|
||||
- contexts
|
||||
- file.tags
|
||||
consolidateStatusIcon: false
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
filters:
|
||||
and:
|
||||
- note.status && note.status != "" && note.status != null
|
||||
formulas:
|
||||
priorityWeight: if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))
|
||||
daysUntilDue: if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)
|
||||
daysUntilScheduled: if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)
|
||||
daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor()
|
||||
daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor()
|
||||
isOverdue: due && date(due) < today() && status != "done"
|
||||
isDueToday: due && date(due).date() == today()
|
||||
isDueThisWeek: due && date(due) >= today() && date(due) <= today() + "7d"
|
||||
isScheduledToday: scheduled && date(scheduled).date() == today()
|
||||
isRecurring: recurrence && !recurrence.isEmpty()
|
||||
hasTimeEstimate: timeEstimate && timeEstimate > 0
|
||||
timeRemaining: if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)
|
||||
efficiencyRatio: if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)
|
||||
timeTrackedThisWeek: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||
timeTrackedToday: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).date() == today()).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||
dueMonth: if(due, date(due).format("YYYY-MM"), "No due date")
|
||||
dueWeek: if(due, date(due).format("YYYY-[W]WW"), "No due date")
|
||||
scheduledMonth: if(scheduled, date(scheduled).format("YYYY-MM"), "Not scheduled")
|
||||
scheduledWeek: if(scheduled, date(scheduled).format("YYYY-[W]WW"), "Not scheduled")
|
||||
dueDateCategory: if(!due, "No due date", if(date(due) < today(), "Overdue", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due) <= today() + "7d", "This week", "Later")))))
|
||||
timeEstimateCategory: if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))
|
||||
ageCategory: if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))
|
||||
createdMonth: file.ctime.format("YYYY-MM")
|
||||
modifiedMonth: file.mtime.format("YYYY-MM")
|
||||
priorityCategory: if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))
|
||||
projectCount: if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))
|
||||
contextCount: if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))
|
||||
trackingStatus: if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))
|
||||
nextDate: if(due && scheduled, if(date(due) < date(scheduled), due, scheduled), if(due, due, scheduled))
|
||||
daysUntilNext: if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled))
|
||||
hasDate: due || scheduled
|
||||
isToday: (due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today())
|
||||
isThisWeek: (due && date(due) >= today() && date(due) <= today() + "7d") || (scheduled && date(scheduled) >= today() && date(scheduled) <= today() + "7d")
|
||||
nextDateCategory: if(!due && !scheduled, "No date", if((due && date(due) < today()) || (scheduled && date(scheduled) < today()), "Overdue/Past", if((due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today()), "Today", if((due && date(due).date() == today() + "1d") || (scheduled && date(scheduled).date() == today() + "1d"), "Tomorrow", if((due && date(due) <= today() + "7d") || (scheduled && date(scheduled) <= today() + "7d"), "This week", "Later")))))
|
||||
nextDateMonth: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if(due, date(due).format("YYYY-MM"), if(scheduled, date(scheduled).format("YYYY-MM"), "No date")))
|
||||
nextDateWeek: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if(due, date(due).format("YYYY-[W]WW"), if(scheduled, date(scheduled).format("YYYY-[W]WW"), "No date")))
|
||||
urgencyScore: if(!due && !scheduled, formula.priorityWeight, formula.priorityWeight + max(0, 10 - formula.daysUntilNext))
|
||||
timeTrackedFormatted: if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")
|
||||
dueDateDisplay: if(!due, "", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due).date() == today() - "1d", "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due) <= today() + "7d", date(due).format("ddd"), date(due).format("MMM D")))))))
|
||||
views:
|
||||
- type: tasknotesMiniCalendar
|
||||
name: Due
|
||||
order:
|
||||
- status
|
||||
- priority
|
||||
- due
|
||||
- scheduled
|
||||
- projects
|
||||
- contexts
|
||||
- file.tags
|
||||
- blockedBy
|
||||
- file.name
|
||||
- recurrence
|
||||
- complete_instances
|
||||
sort:
|
||||
- property: due
|
||||
direction: ASC
|
||||
dateProperty: due
|
||||
- type: tasknotesMiniCalendar
|
||||
name: Scheduled
|
||||
order: []
|
||||
dateProperty: scheduled
|
||||
- type: tasknotesMiniCalendar
|
||||
name: Created
|
||||
dateProperty: file.ctime
|
||||
- type: tasknotesMiniCalendar
|
||||
name: Modified
|
||||
dateProperty: file.mtime
|
||||
118
tasknotes-e2e-vault/TaskNotes/Views/relationships.base
Normal file
118
tasknotes-e2e-vault/TaskNotes/Views/relationships.base
Normal file
|
|
@ -0,0 +1,118 @@
|
|||
filters:
|
||||
and:
|
||||
- note.status && note.status != "" && note.status != null
|
||||
formulas:
|
||||
priorityWeight: if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))
|
||||
daysUntilDue: if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)
|
||||
daysUntilScheduled: if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)
|
||||
daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor()
|
||||
daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor()
|
||||
isOverdue: due && date(due) < today() && status != "done"
|
||||
isDueToday: due && date(due).date() == today()
|
||||
isDueThisWeek: due && date(due) >= today() && date(due) <= today() + "7d"
|
||||
isScheduledToday: scheduled && date(scheduled).date() == today()
|
||||
isRecurring: recurrence && !recurrence.isEmpty()
|
||||
hasTimeEstimate: timeEstimate && timeEstimate > 0
|
||||
timeRemaining: if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)
|
||||
efficiencyRatio: if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)
|
||||
timeTrackedThisWeek: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||
timeTrackedToday: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).date() == today()).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||
dueMonth: if(due, date(due).format("YYYY-MM"), "No due date")
|
||||
dueWeek: if(due, date(due).format("YYYY-[W]WW"), "No due date")
|
||||
scheduledMonth: if(scheduled, date(scheduled).format("YYYY-MM"), "Not scheduled")
|
||||
scheduledWeek: if(scheduled, date(scheduled).format("YYYY-[W]WW"), "Not scheduled")
|
||||
dueDateCategory: if(!due, "No due date", if(date(due) < today(), "Overdue", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due) <= today() + "7d", "This week", "Later")))))
|
||||
timeEstimateCategory: if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))
|
||||
ageCategory: if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))
|
||||
createdMonth: file.ctime.format("YYYY-MM")
|
||||
modifiedMonth: file.mtime.format("YYYY-MM")
|
||||
priorityCategory: if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))
|
||||
projectCount: if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))
|
||||
contextCount: if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))
|
||||
trackingStatus: if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))
|
||||
nextDate: if(due && scheduled, if(date(due) < date(scheduled), due, scheduled), if(due, due, scheduled))
|
||||
daysUntilNext: if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled))
|
||||
hasDate: due || scheduled
|
||||
isToday: (due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today())
|
||||
isThisWeek: (due && date(due) >= today() && date(due) <= today() + "7d") || (scheduled && date(scheduled) >= today() && date(scheduled) <= today() + "7d")
|
||||
nextDateCategory: if(!due && !scheduled, "No date", if((due && date(due) < today()) || (scheduled && date(scheduled) < today()), "Overdue/Past", if((due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today()), "Today", if((due && date(due).date() == today() + "1d") || (scheduled && date(scheduled).date() == today() + "1d"), "Tomorrow", if((due && date(due) <= today() + "7d") || (scheduled && date(scheduled) <= today() + "7d"), "This week", "Later")))))
|
||||
nextDateMonth: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if(due, date(due).format("YYYY-MM"), if(scheduled, date(scheduled).format("YYYY-MM"), "No date")))
|
||||
nextDateWeek: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if(due, date(due).format("YYYY-[W]WW"), if(scheduled, date(scheduled).format("YYYY-[W]WW"), "No date")))
|
||||
urgencyScore: if(!due && !scheduled, formula.priorityWeight, formula.priorityWeight + max(0, 10 - formula.daysUntilNext))
|
||||
timeTrackedFormatted: if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")
|
||||
dueDateDisplay: if(!due, "", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due).date() == today() - "1d", "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due) <= today() + "7d", date(due).format("ddd"), date(due).format("MMM D")))))))
|
||||
views:
|
||||
- type: tasknotesKanban
|
||||
name: Subtasks
|
||||
filters:
|
||||
and:
|
||||
- note.projects.contains(this.file.asLink())
|
||||
groupBy:
|
||||
property: status
|
||||
direction: ASC
|
||||
order:
|
||||
- status
|
||||
- priority
|
||||
- due
|
||||
- scheduled
|
||||
- projects
|
||||
- contexts
|
||||
- file.tags
|
||||
- blockedBy
|
||||
- file.name
|
||||
- recurrence
|
||||
- complete_instances
|
||||
- type: tasknotesTaskList
|
||||
name: Projects
|
||||
filters:
|
||||
and:
|
||||
- list(this.projects).contains(file.asLink())
|
||||
order:
|
||||
- status
|
||||
- priority
|
||||
- due
|
||||
- scheduled
|
||||
- projects
|
||||
- contexts
|
||||
- file.tags
|
||||
- blockedBy
|
||||
- file.name
|
||||
- recurrence
|
||||
- complete_instances
|
||||
- type: tasknotesTaskList
|
||||
name: Blocked By
|
||||
filters:
|
||||
and:
|
||||
- list(this.note.blockedBy).map(value.uid).contains(file.asLink())
|
||||
order:
|
||||
- status
|
||||
- priority
|
||||
- due
|
||||
- scheduled
|
||||
- projects
|
||||
- contexts
|
||||
- file.tags
|
||||
- blockedBy
|
||||
- file.name
|
||||
- recurrence
|
||||
- complete_instances
|
||||
- type: tasknotesKanban
|
||||
name: Blocking
|
||||
filters:
|
||||
and:
|
||||
- note.blockedBy.map(value.uid).contains(this.file.asLink())
|
||||
groupBy:
|
||||
property: status
|
||||
direction: ASC
|
||||
order:
|
||||
- status
|
||||
- priority
|
||||
- due
|
||||
- scheduled
|
||||
- projects
|
||||
- contexts
|
||||
- file.tags
|
||||
- blockedBy
|
||||
- file.name
|
||||
- recurrence
|
||||
- complete_instances
|
||||
72
tasknotes-e2e-vault/TaskNotes/Views/tasks-default.base
Normal file
72
tasknotes-e2e-vault/TaskNotes/Views/tasks-default.base
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
filters:
|
||||
and:
|
||||
- note.status && note.status != "" && note.status != null
|
||||
formulas:
|
||||
priorityWeight: if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))
|
||||
daysUntilDue: if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)
|
||||
daysUntilScheduled: if(scheduled, ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)
|
||||
daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor()
|
||||
daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor()
|
||||
isOverdue: due && date(due) < today() && status != "done"
|
||||
isDueToday: due && date(due).date() == today()
|
||||
isDueThisWeek: due && date(due) >= today() && date(due) <= today() + "7d"
|
||||
isScheduledToday: scheduled && date(scheduled).date() == today()
|
||||
isRecurring: recurrence && !recurrence.isEmpty()
|
||||
hasTimeEstimate: timeEstimate && timeEstimate > 0
|
||||
timeRemaining: if(timeEstimate && timeEstimate > 0, timeEstimate - if(timeEntries, list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0), 0), null)
|
||||
efficiencyRatio: if(timeEstimate && timeEstimate > 0 && timeEntries, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / timeEstimate * 100).round(), null)
|
||||
timeTrackedThisWeek: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime) >= today() - "7d").map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||
timeTrackedToday: if(timeEntries, list(timeEntries).filter(value.endTime && date(value.startTime).date() == today()).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||
dueMonth: if(due, date(due).format("YYYY-MM"), "No due date")
|
||||
dueWeek: if(due, date(due).format("YYYY-[W]WW"), "No due date")
|
||||
scheduledMonth: if(scheduled, date(scheduled).format("YYYY-MM"), "Not scheduled")
|
||||
scheduledWeek: if(scheduled, date(scheduled).format("YYYY-[W]WW"), "Not scheduled")
|
||||
dueDateCategory: if(!due, "No due date", if(date(due) < today(), "Overdue", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due) <= today() + "7d", "This week", "Later")))))
|
||||
timeEstimateCategory: if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(timeEstimate < 30, "Quick (<30m)", if(timeEstimate <= 120, "Medium (30m-2h)", "Long (>2h)")))
|
||||
ageCategory: if(((number(now()) - number(file.ctime)) / 86400000) < 1, "Today", if(((number(now()) - number(file.ctime)) / 86400000) < 7, "This week", if(((number(now()) - number(file.ctime)) / 86400000) < 30, "This month", "Older")))
|
||||
createdMonth: file.ctime.format("YYYY-MM")
|
||||
modifiedMonth: file.mtime.format("YYYY-MM")
|
||||
priorityCategory: if(priority=="none","None",if(priority=="low","Low",if(priority=="normal","Normal",if(priority=="high","High","No priority"))))
|
||||
projectCount: if(!projects || list(projects).length == 0, "No projects", if(list(projects).length == 1, "Single project", "Multiple projects"))
|
||||
contextCount: if(!contexts || list(contexts).length == 0, "No contexts", if(list(contexts).length == 1, "Single context", "Multiple contexts"))
|
||||
trackingStatus: if(!timeEstimate || timeEstimate == 0 || timeEstimate == null, "No estimate", if(!timeEntries || list(timeEntries).length == 0, "Not started", if(formula.efficiencyRatio < 100, "Under estimate", "Over estimate")))
|
||||
nextDate: if(due && scheduled, if(date(due) < date(scheduled), due, scheduled), if(due, due, scheduled))
|
||||
daysUntilNext: if(due && scheduled, min(formula.daysUntilDue, formula.daysUntilScheduled), if(due, formula.daysUntilDue, formula.daysUntilScheduled))
|
||||
hasDate: due || scheduled
|
||||
isToday: (due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today())
|
||||
isThisWeek: (due && date(due) >= today() && date(due) <= today() + "7d") || (scheduled && date(scheduled) >= today() && date(scheduled) <= today() + "7d")
|
||||
nextDateCategory: if(!due && !scheduled, "No date", if((due && date(due) < today()) || (scheduled && date(scheduled) < today()), "Overdue/Past", if((due && date(due).date() == today()) || (scheduled && date(scheduled).date() == today()), "Today", if((due && date(due).date() == today() + "1d") || (scheduled && date(scheduled).date() == today() + "1d"), "Tomorrow", if((due && date(due) <= today() + "7d") || (scheduled && date(scheduled) <= today() + "7d"), "This week", "Later")))))
|
||||
nextDateMonth: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if(due, date(due).format("YYYY-MM"), if(scheduled, date(scheduled).format("YYYY-MM"), "No date")))
|
||||
nextDateWeek: if(due && scheduled, if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if(due, date(due).format("YYYY-[W]WW"), if(scheduled, date(scheduled).format("YYYY-[W]WW"), "No date")))
|
||||
urgencyScore: if(!due && !scheduled, formula.priorityWeight, formula.priorityWeight + max(0, 10 - formula.daysUntilNext))
|
||||
timeTrackedFormatted: if(timeEntries, if(list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) >= 60, (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) / 60).floor() + "h " + (list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0) % 60).round() + "m", list(timeEntries).filter(value.endTime).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round() + "m"), "0m")
|
||||
dueDateDisplay: if(!due, "", if(date(due).date() == today(), "Today", if(date(due).date() == today() + "1d", "Tomorrow", if(date(due).date() == today() - "1d", "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due) <= today() + "7d", date(due).format("ddd"), date(due).format("MMM D")))))))
|
||||
views:
|
||||
- type: tasknotesTaskList
|
||||
name: Tasks
|
||||
order:
|
||||
- status
|
||||
- priority
|
||||
- due
|
||||
- scheduled
|
||||
- projects
|
||||
- contexts
|
||||
- file.tags
|
||||
- blockedBy
|
||||
- file.name
|
||||
- recurrence
|
||||
- complete_instances
|
||||
options:
|
||||
showScheduled: true
|
||||
showDue: true
|
||||
showRecurring: true
|
||||
showTimeEntries: true
|
||||
showTimeblocks: true
|
||||
showPropertyBasedEvents: true
|
||||
calendarView: timeGridWeek
|
||||
customDayCount: 3
|
||||
firstDay: 0
|
||||
slotMinTime: 06:00:00
|
||||
slotMaxTime: 22:00:00
|
||||
slotDuration: 00:30:00
|
||||
calendarView: dayGridMonth
|
||||
23
tasknotes-e2e-vault/TaskNotes/Weekly team meeting.md
Normal file
23
tasknotes-e2e-vault/TaskNotes/Weekly team meeting.md
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
---
|
||||
title: Weekly team meeting
|
||||
status: todo
|
||||
priority: medium
|
||||
scheduled: 2025-12-30T10:00
|
||||
recurrence: FREQ=WEEKLY;BYDAY=MO
|
||||
tags:
|
||||
- meeting
|
||||
- recurring
|
||||
- task
|
||||
contexts:
|
||||
- "@office"
|
||||
timeEstimate: 60
|
||||
---
|
||||
|
||||
# Weekly team meeting
|
||||
|
||||
Regular Monday team sync meeting.
|
||||
|
||||
## Agenda
|
||||
- Status updates
|
||||
- Blockers discussion
|
||||
- Planning for the week
|
||||
3
tasknotes-e2e-vault/Welcome.md
Normal file
3
tasknotes-e2e-vault/Welcome.md
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# TaskNotes E2E Test Vault
|
||||
|
||||
This vault is used for end-to-end testing with Playwright.
|
||||
Loading…
Reference in a new issue