vault backup: 2025-12-24 08:38:03
All checks were successful
Deploy Quartz site to GitHub Pages / build (push) Successful in 4m33s
All checks were successful
Deploy Quartz site to GitHub Pages / build (push) Successful in 4m33s
This commit is contained in:
12
content/.obsidian/workspace.json
vendored
12
content/.obsidian/workspace.json
vendored
@@ -13,13 +13,13 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "Slides.pdf.md",
|
"file": "z-Tech/Mega-App/Project level design goals.md",
|
||||||
"mode": "source",
|
"mode": "source",
|
||||||
"source": false,
|
"source": false,
|
||||||
"backlinks": false
|
"backlinks": false
|
||||||
},
|
},
|
||||||
"icon": "lucide-file",
|
"icon": "lucide-file",
|
||||||
"title": "Slides.pdf"
|
"title": "Project level design goals"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -193,12 +193,14 @@
|
|||||||
},
|
},
|
||||||
"active": "b6de1b6650c09ff3",
|
"active": "b6de1b6650c09ff3",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
"z-Tech/Mega Mega.md",
|
"z-Tech/Mega-App/UX.md",
|
||||||
|
"z-Tech/Mega-App/Project level design goals.md",
|
||||||
|
"z-Tech/Quiz-app.md",
|
||||||
|
"z-Tech/Mega-App",
|
||||||
"Slides.pdf.md",
|
"Slides.pdf.md",
|
||||||
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/!2024-01-10-0088-KOM.pdf",
|
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/!2024-01-10-0088-KOM.pdf",
|
||||||
"Anatomi & Histologi 2/Statistik.md",
|
"Anatomi & Histologi 2/Statistik.md",
|
||||||
"z-Tech/Lecture tracking.md",
|
"z-Tech/Lecture tracking.md",
|
||||||
"z-Tech/Quiz-app.md",
|
|
||||||
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/30.md",
|
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/30.md",
|
||||||
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/29.md",
|
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/29.md",
|
||||||
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/28.md",
|
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/28.md",
|
||||||
@@ -219,7 +221,6 @@
|
|||||||
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/13.md",
|
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/13.md",
|
||||||
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/12.md",
|
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/12.md",
|
||||||
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/11.md",
|
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/11.md",
|
||||||
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/10.md",
|
|
||||||
"attachments/image-48.png",
|
"attachments/image-48.png",
|
||||||
"Biokemi/Plasmidlabb/Articles/Report guidelines 2025.pdf",
|
"Biokemi/Plasmidlabb/Articles/Report guidelines 2025.pdf",
|
||||||
"Biokemi/Plasmidlabb/Protokoll.pdf",
|
"Biokemi/Plasmidlabb/Protokoll.pdf",
|
||||||
@@ -229,7 +230,6 @@
|
|||||||
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/!2024-01-10-0009-RYY.pdf",
|
"Anatomi & Histologi 2/Gamla tentor/2024-01-10/!2024-01-10-0009-RYY.pdf",
|
||||||
"Anatomi & Histologi 2/Gamla tentor/2024-05-29/!2024-05-29-0125-GZX.pdf",
|
"Anatomi & Histologi 2/Gamla tentor/2024-05-29/!2024-05-29-0125-GZX.pdf",
|
||||||
"Anatomi & Histologi 2/1 Öga anatomi/Organa sensum.pdf",
|
"Anatomi & Histologi 2/1 Öga anatomi/Organa sensum.pdf",
|
||||||
"Anatomi & Histologi 2/2 Öra anatomi/Slides.pdf.pdf",
|
|
||||||
"attachments/image-121.png",
|
"attachments/image-121.png",
|
||||||
"attachments/image-120.png",
|
"attachments/image-120.png",
|
||||||
"attachments/image-119.png",
|
"attachments/image-119.png",
|
||||||
|
|||||||
@@ -68,5 +68,5 @@ Taggar:
|
|||||||
- [ ] TBL CNS 3h
|
- [ ] TBL CNS 3h
|
||||||
|
|
||||||
|
|
||||||
Look at [[Mega Mega#^25f90e]]
|
Look at [[Project level design goals#^25f90e]]
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
---
|
|
||||||
status: none
|
|
||||||
priority: normal
|
|
||||||
scheduled: 2025-12-10T09:00
|
|
||||||
dateCreated: 2025-12-09T23:34:59.094+01:00
|
|
||||||
dateModified: 2025-12-09T23:38:30.465+01:00
|
|
||||||
tags:
|
|
||||||
- task
|
|
||||||
---
|
|
||||||
|
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
filters:
|
|
||||||
and:
|
|
||||||
- file.hasTag("task")
|
|
||||||
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, "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, "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
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
filters:
|
|
||||||
and:
|
|
||||||
- file.hasTag("task")
|
|
||||||
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, "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, "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: timeGridCustom
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
filters:
|
|
||||||
and:
|
|
||||||
- file.hasTag("task")
|
|
||||||
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, "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, "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: Kanban Board
|
|
||||||
groupBy:
|
|
||||||
property: status
|
|
||||||
direction: ASC
|
|
||||||
order:
|
|
||||||
- status
|
|
||||||
- priority
|
|
||||||
- due
|
|
||||||
- scheduled
|
|
||||||
- projects
|
|
||||||
- contexts
|
|
||||||
- file.tags
|
|
||||||
- blockedBy
|
|
||||||
- file.name
|
|
||||||
- recurrence
|
|
||||||
- complete_instances
|
|
||||||
options:
|
|
||||||
columnWidth: 280
|
|
||||||
hideEmptyColumns: false
|
|
||||||
@@ -1,72 +0,0 @@
|
|||||||
filters:
|
|
||||||
and:
|
|
||||||
- file.hasTag("task")
|
|
||||||
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, "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, "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
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
filters:
|
|
||||||
and:
|
|
||||||
- file.hasTag("task")
|
|
||||||
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, "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, "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
|
|
||||||
@@ -1,207 +0,0 @@
|
|||||||
filters:
|
|
||||||
and:
|
|
||||||
- file.hasTag("task")
|
|
||||||
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, "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, "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: All Tasks
|
|
||||||
order:
|
|
||||||
- status
|
|
||||||
- priority
|
|
||||||
- due
|
|
||||||
- scheduled
|
|
||||||
- projects
|
|
||||||
- contexts
|
|
||||||
- file.tags
|
|
||||||
- blockedBy
|
|
||||||
- file.name
|
|
||||||
- recurrence
|
|
||||||
- complete_instances
|
|
||||||
sort:
|
|
||||||
- property: due
|
|
||||||
direction: ASC
|
|
||||||
- type: tasknotesTaskList
|
|
||||||
name: Not Blocked
|
|
||||||
filters:
|
|
||||||
and:
|
|
||||||
- or:
|
|
||||||
- and:
|
|
||||||
- recurrence.isEmpty()
|
|
||||||
- status != "done"
|
|
||||||
- and:
|
|
||||||
- recurrence
|
|
||||||
- '!complete_instances.contains(today().format("yyyy-MM-dd"))'
|
|
||||||
- or:
|
|
||||||
- blockedBy.isEmpty()
|
|
||||||
- list(blockedBy).filter(file(value.uid).properties.status != "done").isEmpty()
|
|
||||||
order:
|
|
||||||
- status
|
|
||||||
- priority
|
|
||||||
- due
|
|
||||||
- scheduled
|
|
||||||
- projects
|
|
||||||
- contexts
|
|
||||||
- file.tags
|
|
||||||
- blockedBy
|
|
||||||
- file.name
|
|
||||||
- recurrence
|
|
||||||
- complete_instances
|
|
||||||
sort:
|
|
||||||
- property: formula.urgencyScore
|
|
||||||
direction: DESC
|
|
||||||
- type: tasknotesTaskList
|
|
||||||
name: Today
|
|
||||||
filters:
|
|
||||||
and:
|
|
||||||
- or:
|
|
||||||
- and:
|
|
||||||
- recurrence.isEmpty()
|
|
||||||
- status != "done"
|
|
||||||
- and:
|
|
||||||
- recurrence
|
|
||||||
- '!complete_instances.contains(today().format("yyyy-MM-dd"))'
|
|
||||||
- or:
|
|
||||||
- date(due) == today()
|
|
||||||
- date(scheduled) == today()
|
|
||||||
order:
|
|
||||||
- status
|
|
||||||
- priority
|
|
||||||
- due
|
|
||||||
- scheduled
|
|
||||||
- projects
|
|
||||||
- contexts
|
|
||||||
- file.tags
|
|
||||||
- blockedBy
|
|
||||||
- file.name
|
|
||||||
- recurrence
|
|
||||||
- complete_instances
|
|
||||||
sort:
|
|
||||||
- property: formula.urgencyScore
|
|
||||||
direction: DESC
|
|
||||||
- type: tasknotesTaskList
|
|
||||||
name: Overdue
|
|
||||||
filters:
|
|
||||||
and:
|
|
||||||
- or:
|
|
||||||
- and:
|
|
||||||
- recurrence.isEmpty()
|
|
||||||
- status != "done"
|
|
||||||
- and:
|
|
||||||
- recurrence
|
|
||||||
- '!complete_instances.contains(today().format("yyyy-MM-dd"))'
|
|
||||||
- date(due) < today()
|
|
||||||
order:
|
|
||||||
- status
|
|
||||||
- priority
|
|
||||||
- due
|
|
||||||
- scheduled
|
|
||||||
- projects
|
|
||||||
- contexts
|
|
||||||
- file.tags
|
|
||||||
- blockedBy
|
|
||||||
- file.name
|
|
||||||
- recurrence
|
|
||||||
- complete_instances
|
|
||||||
sort:
|
|
||||||
- property: formula.urgencyScore
|
|
||||||
direction: DESC
|
|
||||||
- type: tasknotesTaskList
|
|
||||||
name: This Week
|
|
||||||
filters:
|
|
||||||
and:
|
|
||||||
- or:
|
|
||||||
- and:
|
|
||||||
- recurrence.isEmpty()
|
|
||||||
- status != "done"
|
|
||||||
- and:
|
|
||||||
- recurrence
|
|
||||||
- '!complete_instances.contains(today().format("yyyy-MM-dd"))'
|
|
||||||
- or:
|
|
||||||
- and:
|
|
||||||
- date(due) >= today()
|
|
||||||
- date(due) <= today() + "7 days"
|
|
||||||
- and:
|
|
||||||
- date(scheduled) >= today()
|
|
||||||
- date(scheduled) <= today() + "7 days"
|
|
||||||
order:
|
|
||||||
- status
|
|
||||||
- priority
|
|
||||||
- due
|
|
||||||
- scheduled
|
|
||||||
- projects
|
|
||||||
- contexts
|
|
||||||
- file.tags
|
|
||||||
- blockedBy
|
|
||||||
- file.name
|
|
||||||
- recurrence
|
|
||||||
- complete_instances
|
|
||||||
sort:
|
|
||||||
- property: formula.urgencyScore
|
|
||||||
direction: DESC
|
|
||||||
- type: tasknotesTaskList
|
|
||||||
name: Unscheduled
|
|
||||||
filters:
|
|
||||||
and:
|
|
||||||
- or:
|
|
||||||
- and:
|
|
||||||
- recurrence.isEmpty()
|
|
||||||
- status != "done"
|
|
||||||
- and:
|
|
||||||
- recurrence
|
|
||||||
- '!complete_instances.contains(today().format("yyyy-MM-dd"))'
|
|
||||||
- date(due).isEmpty()
|
|
||||||
- date(scheduled).isEmpty()
|
|
||||||
order:
|
|
||||||
- status
|
|
||||||
- priority
|
|
||||||
- due
|
|
||||||
- scheduled
|
|
||||||
- projects
|
|
||||||
- contexts
|
|
||||||
- file.tags
|
|
||||||
- blockedBy
|
|
||||||
- file.name
|
|
||||||
- recurrence
|
|
||||||
- complete_instances
|
|
||||||
sort:
|
|
||||||
- property: status
|
|
||||||
direction: ASC
|
|
||||||
6
content/z-Tech/Mega-App/UX.md
Normal file
6
content/z-Tech/Mega-App/UX.md
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
|
||||||
|
Learnings
|
||||||
|
- Vercel v0 looks better than Lovable for UX prototyping
|
||||||
|
- Drill down to essentially one screen per prompt, to be combined later
|
||||||
|
- Begin with Course app, that stores the content
|
||||||
|
-
|
||||||
@@ -67,3 +67,4 @@ För att undvika "Database locked" vid omstarter/concurrent writes:
|
|||||||
PRAGMA journal_mode = WAL;
|
PRAGMA journal_mode = WAL;
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user