vault backup: 2026-06-05 12:41:25
This commit is contained in:
Vendored
+1
-1
@@ -7,7 +7,7 @@
|
|||||||
"autoPairMarkdown": true,
|
"autoPairMarkdown": true,
|
||||||
"useTab": false,
|
"useTab": false,
|
||||||
"alwaysUpdateLinks": true,
|
"alwaysUpdateLinks": true,
|
||||||
"tabSize": 4,
|
"tabSize": 2,
|
||||||
"vimMode": true,
|
"vimMode": true,
|
||||||
"promptDelete": false,
|
"promptDelete": false,
|
||||||
"focusNewTab": true,
|
"focusNewTab": true,
|
||||||
|
|||||||
Vendored
-1
@@ -30,6 +30,5 @@
|
|||||||
"obsidian-citation-plugin",
|
"obsidian-citation-plugin",
|
||||||
"obsidian-quiet-outline",
|
"obsidian-quiet-outline",
|
||||||
"inline-spoilers",
|
"inline-spoilers",
|
||||||
"daily-notes-editor",
|
|
||||||
"tasknotes"
|
"tasknotes"
|
||||||
]
|
]
|
||||||
-16
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"hideFrontmatter": true,
|
|
||||||
"hideBacklinks": false,
|
|
||||||
"createAndOpenOnStartup": false,
|
|
||||||
"useArrowUpOrDownToNavigate": false,
|
|
||||||
"preset": [
|
|
||||||
{
|
|
||||||
"type": "folder",
|
|
||||||
"target": "timestamped"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "folder",
|
|
||||||
"target": "daily"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
-4251
File diff suppressed because it is too large
Load Diff
@@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"id": "daily-notes-editor",
|
|
||||||
"name": "Daily Notes Editor",
|
|
||||||
"version": "1.1.0",
|
|
||||||
"minAppVersion": "0.15.0",
|
|
||||||
"description": "Edit a bunch of daily notes in one page(inline), which works similar to Roam Research's default daily note view.",
|
|
||||||
"author": "Boninall",
|
|
||||||
"authorUrl": "https://github.com/Quorafind",
|
|
||||||
"fundingUrl": {
|
|
||||||
"Buy Me a Coffee": "https://www.buymeacoffee.com/boninall",
|
|
||||||
"爱发电": "https://afdian.net/a/boninall",
|
|
||||||
"支付宝": "https://cdn.jsdelivr.net/gh/Quorafind/.github@main/IMAGE/%E6%94%AF%E4%BB%98%E5%AE%9D%E4%BB%98%E6%AC%BE%E7%A0%81.jpg"
|
|
||||||
},
|
|
||||||
"isDesktopOnly": false
|
|
||||||
}
|
|
||||||
-220
@@ -1,220 +0,0 @@
|
|||||||
.dn-editor {
|
|
||||||
/*overflow-y: hidden;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
.dn-editor .cm-scroller {
|
|
||||||
/*overflow-y: hidden;*/
|
|
||||||
padding: unset;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dn-editor .workspace-leaf {
|
|
||||||
all: unset;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dn-editor .dn-content {
|
|
||||||
display: none;
|
|
||||||
/*margin: 0;*/
|
|
||||||
/*border-radius: var(--he-popover-border-radius);*/
|
|
||||||
/*overflow: hidden;*/
|
|
||||||
/*height: 100%;*/
|
|
||||||
}
|
|
||||||
|
|
||||||
.dn-editor .workspace-leaf,
|
|
||||||
.dn-editor .workspace-split {
|
|
||||||
height: 100%;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dn-editor .markdown-source-view.mod-cm6 .cm-editor {
|
|
||||||
min-height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dn-editor .cm-content {
|
|
||||||
padding-bottom: 0 !important;
|
|
||||||
padding-top: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dn-editor .view-content {
|
|
||||||
background: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dn-editor .cm-scroller {
|
|
||||||
padding: 0 !important;
|
|
||||||
overflow-y: clip;
|
|
||||||
}
|
|
||||||
.daily-note-view .daily-note-wrapper::before {
|
|
||||||
content: "";
|
|
||||||
display: block;
|
|
||||||
height: 1px;
|
|
||||||
width: var(--file-line-width);
|
|
||||||
margin-bottom: 30px;
|
|
||||||
margin-left: auto;
|
|
||||||
margin-right: auto;
|
|
||||||
background-color: var(--background-modifier-border);
|
|
||||||
}
|
|
||||||
|
|
||||||
.daily-note-view .daily-note-wrapper:first-of-type::before {
|
|
||||||
height: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.daily-note-view .dn-range-indicator + .daily-note-container::before {
|
|
||||||
height: 0px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.is-popout-window .dn-editor .dn-content {
|
|
||||||
margin: 0;
|
|
||||||
border-radius: var(--he-popover-border-radius);
|
|
||||||
overflow: hidden;
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.is-popout-window .dn-editor .workspace-leaf,
|
|
||||||
.is-popout-window .dn-editor .workspace-split {
|
|
||||||
height: auto;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.is-popout-window .dn-editor .cm-scroller {
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.is-popout-window .dn-editor .markdown-source-view.mod-cm6 {
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.is-popout-window .dn-editor .view-content {
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.is-popout-window .dn-editor .workspace-leaf-content {
|
|
||||||
height: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.daily-note-view .embedded-backlinks {
|
|
||||||
min-height: unset !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.daily-note-view {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: var(--size-4-4);
|
|
||||||
overflow-x: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
body.daily-notes-hide-frontmatter
|
|
||||||
.daily-note-view
|
|
||||||
.markdown-source-view.is-live-preview.show-properties
|
|
||||||
.metadata-container {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
body.daily-notes-hide-backlinks .daily-note-view .embedded-backlinks {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Custom Range Modal Styles */
|
|
||||||
.custom-range-date-container {
|
|
||||||
margin-bottom: var(--size-4-2);
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.custom-range-date-container span {
|
|
||||||
width: 100px;
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.custom-range-date-container input {
|
|
||||||
flex: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.custom-range-button-container {
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
margin-top: var(--size-4-4);
|
|
||||||
gap: var(--size-4-2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Preset management styles */
|
|
||||||
.preset-container {
|
|
||||||
margin-bottom: var(--size-4-4);
|
|
||||||
}
|
|
||||||
|
|
||||||
.no-presets-message {
|
|
||||||
color: var(--text-muted);
|
|
||||||
font-style: italic;
|
|
||||||
margin: var(--size-4-2) 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.preset-list {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
gap: var(--size-4-2);
|
|
||||||
margin: var(--size-4-2) 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.preset-item {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
padding: var(--size-2-4) var(--size-4-3);
|
|
||||||
background-color: var(--background-secondary);
|
|
||||||
border-radius: var(--radius-s);
|
|
||||||
}
|
|
||||||
|
|
||||||
.preset-info {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.preset-type {
|
|
||||||
font-weight: bold;
|
|
||||||
margin-right: var(--size-2-2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.preset-actions {
|
|
||||||
display: flex;
|
|
||||||
gap: var(--size-4-2);
|
|
||||||
}
|
|
||||||
|
|
||||||
.preset-action-button {
|
|
||||||
padding: var(--size-2-2) var(--size-2-4);
|
|
||||||
border-radius: var(--radius-s);
|
|
||||||
font-size: var(--font-ui-small);
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.preset-open-button {
|
|
||||||
background-color: var(--interactive-accent);
|
|
||||||
color: var(--text-on-accent);
|
|
||||||
}
|
|
||||||
|
|
||||||
.preset-delete-button {
|
|
||||||
background-color: var(--background-modifier-error);
|
|
||||||
color: var(--text-on-accent);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add preset modal styles */
|
|
||||||
.setting-item {
|
|
||||||
margin-bottom: var(--size-4-4);
|
|
||||||
}
|
|
||||||
|
|
||||||
.target-input {
|
|
||||||
width: 100%;
|
|
||||||
padding: var(--size-2-3);
|
|
||||||
border-radius: var(--radius-s);
|
|
||||||
border: 1px solid var(--background-modifier-border);
|
|
||||||
background-color: var(--background-primary);
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-button-container {
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-end;
|
|
||||||
gap: var(--size-4-2);
|
|
||||||
margin-top: var(--size-4-4);
|
|
||||||
}
|
|
||||||
|
|
||||||
.is-phone .mod-root .workspace-tabs:not(.mod-visible):has(.daily-note-view) {
|
|
||||||
display: flex !important;
|
|
||||||
}
|
|
||||||
.daily-note.svelte-1d2sruf.svelte-1d2sruf{margin-bottom:var(--size-4-5);padding-bottom:var(--size-4-8)}.daily-note.svelte-1d2sruf.svelte-1d2sruf:has(.daily-note-editor[data-collapsed="true"]){margin-bottom:0;padding-bottom:0}.daily-note-editor.svelte-1d2sruf.svelte-1d2sruf{min-height:100px}.daily-note-editor[data-collapsed="true"].svelte-1d2sruf.svelte-1d2sruf{display:none}.daily-note.svelte-1d2sruf .collapse-button.svelte-1d2sruf{display:none}.daily-note.svelte-1d2sruf:hover .collapse-button.svelte-1d2sruf{display:block}.daily-note.svelte-1d2sruf .collapse-button.svelte-1d2sruf{color:var(--text-muted)}.daily-note.svelte-1d2sruf .collapse-button.svelte-1d2sruf:hover{color:var(--text-normal)}.daily-note.svelte-1d2sruf:has(.is-readable-line-width) .daily-note-title.svelte-1d2sruf{max-width:calc(var(--file-line-width) + var(--size-4-4));width:calc(var(--file-line-width) + var(--size-4-4));margin-left:auto;margin-right:auto;margin-bottom:var(--size-4-8);display:flex;align-items:center;justify-content:start;gap:var(--size-4-2)}.collapse-button.svelte-1d2sruf.svelte-1d2sruf{margin-left:calc(var(--size-4-8) * -1)}.collapse-button[data-collapsed="true"].svelte-1d2sruf.svelte-1d2sruf{transform:rotate(-90deg);transition:transform 0.2s ease}.daily-note.svelte-1d2sruf:not(:has(.is-readable-line-width)) .daily-note-title.svelte-1d2sruf{display:flex;justify-content:start;align-items:center;width:100%;padding-left:calc(calc(100% - var(--file-line-width)) / 2 - var(--size-4-2));padding-right:calc(calc(100% - var(--file-line-width)) / 2 - var(--size-4-2));margin-top:var(--size-4-8);gap:var(--size-4-2)}.clickable-link.svelte-1d2sruf.svelte-1d2sruf{cursor:pointer;text-decoration:none}.clickable-link.svelte-1d2sruf.svelte-1d2sruf:hover{color:var(--color-accent);text-decoration:underline}.editor-placeholder.svelte-1d2sruf.svelte-1d2sruf{display:flex;justify-content:center;align-items:center;height:100px;color:var(--text-muted);font-style:italic}.collapse-button.svelte-1d2sruf.svelte-1d2sruf{cursor:pointer;display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:4px;color:var(--text-muted);transition:background-color 0.2s ease}.collapse-button.svelte-1d2sruf.svelte-1d2sruf:hover{color:var(--text-normal)}.dn-stock.svelte-4q3cv7{height:1000px;width:100%;display:flex;justify-content:center;align-items:center}.dn-stock-text.svelte-4q3cv7{text-align:center}.no-more-text.svelte-4q3cv7{margin-left:auto;margin-right:auto;text-align:center}.dn-blank-day.svelte-4q3cv7{display:flex;margin-left:auto;margin-right:auto;max-width:var(--file-line-width);color:var(--color-base-40);padding-top:20px;padding-bottom:20px;transition:all 300ms}.dn-blank-day.svelte-4q3cv7:hover{padding-top:40px;padding-bottom:40px;transition:padding 300ms}.dn-blank-day-text.svelte-4q3cv7{margin-left:auto;margin-right:auto;text-align:center}.daily-note-wrapper.svelte-4q3cv7{width:100%}
|
|
||||||
+10
-40
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"tasksFolder": "tasks",
|
"tasksFolder": "",
|
||||||
"moveArchivedTasks": false,
|
"moveArchivedTasks": false,
|
||||||
"archiveFolder": "TaskNotes/Archive",
|
"archiveFolder": "TaskNotes/Archive",
|
||||||
"taskTag": "type/task",
|
"taskTag": "type/task",
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
"pomodoroAutoStartBreaks": false,
|
"pomodoroAutoStartBreaks": false,
|
||||||
"pomodoroAutoStartWork": false,
|
"pomodoroAutoStartWork": false,
|
||||||
"pomodoroNotifications": true,
|
"pomodoroNotifications": true,
|
||||||
"pomodoroSoundEnabled": true,
|
"pomodoroSoundEnabled": false,
|
||||||
"pomodoroSoundVolume": 50,
|
"pomodoroSoundVolume": 50,
|
||||||
"pomodoroStorageLocation": "daily-notes",
|
"pomodoroStorageLocation": "daily-notes",
|
||||||
"pomodoroMobileSidebar": "tab",
|
"pomodoroMobileSidebar": "tab",
|
||||||
@@ -431,7 +431,8 @@
|
|||||||
"status",
|
"status",
|
||||||
"priority",
|
"priority",
|
||||||
"blocked",
|
"blocked",
|
||||||
"blocking"
|
"blocking",
|
||||||
|
"totalTrackedTime"
|
||||||
],
|
],
|
||||||
"inlineVisibleProperties": [
|
"inlineVisibleProperties": [
|
||||||
"status",
|
"status",
|
||||||
@@ -461,7 +462,7 @@
|
|||||||
"microsoftOAuthClientSecret": "",
|
"microsoftOAuthClientSecret": "",
|
||||||
"enableGoogleCalendar": false,
|
"enableGoogleCalendar": false,
|
||||||
"enableMicrosoftCalendar": false,
|
"enableMicrosoftCalendar": false,
|
||||||
"disableCalendarOnMobile": false,
|
"disableCalendarOnMobile": true,
|
||||||
"enabledGoogleCalendars": [],
|
"enabledGoogleCalendars": [],
|
||||||
"googleCalendarSyncTokens": {},
|
"googleCalendarSyncTokens": {},
|
||||||
"enabledMicrosoftCalendars": [],
|
"enabledMicrosoftCalendars": [],
|
||||||
@@ -469,10 +470,10 @@
|
|||||||
"googleCalendarExport": {
|
"googleCalendarExport": {
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"targetCalendarId": "",
|
"targetCalendarId": "",
|
||||||
"syncOnTaskCreate": true,
|
"syncOnTaskCreate": false,
|
||||||
"syncOnTaskUpdate": true,
|
"syncOnTaskUpdate": false,
|
||||||
"syncOnTaskComplete": true,
|
"syncOnTaskComplete": false,
|
||||||
"syncOnTaskDelete": true,
|
"syncOnTaskDelete": false,
|
||||||
"eventTitleTemplate": "{{title}}",
|
"eventTitleTemplate": "{{title}}",
|
||||||
"includeDescription": true,
|
"includeDescription": true,
|
||||||
"eventColorId": null,
|
"eventColorId": null,
|
||||||
@@ -483,36 +484,5 @@
|
|||||||
"defaultReminderMinutes": null
|
"defaultReminderMinutes": null
|
||||||
},
|
},
|
||||||
"enableDebugLogging": false,
|
"enableDebugLogging": false,
|
||||||
"googleCalendarSyncQueue": [
|
"googleCalendarSyncQueue": []
|
||||||
{
|
|
||||||
"taskPath": "timestamped/YYYY-MM-DD_HH-mm-ss.md",
|
|
||||||
"requestedAt": 1780346458397,
|
|
||||||
"attempts": 0,
|
|
||||||
"lastError": "Google Calendar sync is not ready"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"taskPath": "timestamped/2026-06-01_16-44-31.md",
|
|
||||||
"requestedAt": 1780346671952,
|
|
||||||
"attempts": 0,
|
|
||||||
"lastError": "Google Calendar sync is not ready"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"taskPath": "timestamped/2026-06-01_16-54-37.md",
|
|
||||||
"requestedAt": 1780347277788,
|
|
||||||
"attempts": 0,
|
|
||||||
"lastError": "Google Calendar sync is not ready"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"taskPath": "timestamped/2026-06-01_17-07-41.md",
|
|
||||||
"requestedAt": 1780348061498,
|
|
||||||
"attempts": 0,
|
|
||||||
"lastError": "Google Calendar sync is not ready"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"taskPath": "timestamped/2026-06-01_17-09-04.md",
|
|
||||||
"requestedAt": 1780348144101,
|
|
||||||
"attempts": 0,
|
|
||||||
"lastError": "Google Calendar sync is not ready"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
id: 2026-05-31
|
||||||
|
title: 2026-05-31
|
||||||
|
tags: []
|
||||||
|
weekly: "[[2026w23]]"
|
||||||
|
monthly: "[[2026-05]]"
|
||||||
|
quarterly: "[[2026q2]]"
|
||||||
|
previous: "[[2026-05-30]]"
|
||||||
|
---
|
||||||
|
# 2026-05-31
|
||||||
@@ -8,5 +8,3 @@ quarterly: "[[2026q2]]"
|
|||||||
previous: "[[2026-06-02]]"
|
previous: "[[2026-06-02]]"
|
||||||
---
|
---
|
||||||
# 2026-06-03
|
# 2026-06-03
|
||||||
|
|
||||||
testing^[[[2025-08-15_14-15-41]]]
|
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
id: 2026-06-04
|
||||||
|
title: 2026-06-04
|
||||||
|
tags: []
|
||||||
|
weekly: "[[2026w23]]"
|
||||||
|
monthly: "[[2026-06]]"
|
||||||
|
quarterly: "[[2026q2]]"
|
||||||
|
previous: "[[2026-06-03]]"
|
||||||
|
---
|
||||||
|
# 2026-06-04
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
id: 2026-06-05
|
||||||
|
title: 2026-06-05
|
||||||
|
tags: []
|
||||||
|
weekly: "[[2026w23]]"
|
||||||
|
monthly: "[[2026-06]]"
|
||||||
|
quarterly: "[[2026q2]]"
|
||||||
|
previous: "[[2026-06-04]]"
|
||||||
|
---
|
||||||
|
# 2026-06-05
|
||||||
|
|
||||||
|
When I got to work today, around 08:15,
|
||||||
|
I watched one of the robot dogs plow into a bollard fixture.
|
||||||
|
Unfortunately it kept going,
|
||||||
|
and too fast for me to catch up
|
||||||
|
to point and laugh into its camera.
|
||||||
@@ -1,55 +1,51 @@
|
|||||||
# Calendar
|
|
||||||
|
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
- file.hasTag("type/task")
|
- file.hasTag("type/task")
|
||||||
- file.inFolder("templates") != true
|
- file.inFolder("templates") != true
|
||||||
|
|
||||||
formulas:
|
formulas:
|
||||||
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
priorityWeight: if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))
|
||||||
daysUntilDue: 'if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
daysUntilDue: if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)
|
||||||
dueIn: 'if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))'
|
dueIn: if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))
|
||||||
daysUntilScheduled: 'if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
daysUntilScheduled: if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)
|
||||||
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor()
|
||||||
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor()
|
||||||
isOverdue: '(due.isEmpty() == false) && date(due) < today() && status != "done"'
|
isOverdue: (due.isEmpty() == false) && date(due) < today() && status != "done"
|
||||||
isDueToday: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
isDueToday: (due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
||||||
isDueThisWeek: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")'
|
isDueThisWeek: (due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")
|
||||||
isScheduledToday: '(scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
isScheduledToday: (scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
||||||
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
isRecurring: recurrence && !recurrence.isEmpty()
|
||||||
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
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)'
|
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)'
|
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)'
|
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).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).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).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||||
dueMonth: 'if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")'
|
dueMonth: if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")
|
||||||
dueWeek: 'if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")'
|
dueWeek: if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")
|
||||||
scheduledMonth: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
scheduledMonth: if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")
|
||||||
scheduledWeek: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
scheduledWeek: if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")
|
||||||
dueDateCategory: 'if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "This week", "Later")))))'
|
dueDateCategory: if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "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)")))'
|
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")))'
|
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")'
|
createdMonth: file.ctime.format("YYYY-MM")
|
||||||
modifiedMonth: 'file.mtime.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"))))'
|
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"))'
|
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"))'
|
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")))'
|
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.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))'
|
nextDate: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))
|
||||||
daysUntilNext: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))'
|
daysUntilNext: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))
|
||||||
hasDate: '(due.isEmpty() == false) || (scheduled.isEmpty() == false)'
|
hasDate: (due.isEmpty() == false) || (scheduled.isEmpty() == false)
|
||||||
isToday: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))'
|
isToday: ((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))
|
||||||
isThisWeek: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))'
|
isThisWeek: ((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))
|
||||||
nextDateCategory: 'if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))'
|
nextDateCategory: if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))
|
||||||
nextDateMonth: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))'
|
nextDateMonth: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))
|
||||||
nextDateWeek: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
nextDateWeek: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))
|
||||||
urgencyScore: 'if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))'
|
urgencyScore: if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))
|
||||||
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")'
|
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.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))'
|
dueDateDisplay: if(due.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))
|
||||||
|
|
||||||
views:
|
views:
|
||||||
- type: tasknotesCalendar
|
- type: tasknotesCalendar
|
||||||
name: "Calendar"
|
name: Calendar
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -66,7 +62,7 @@ views:
|
|||||||
showTimeblocks: true
|
showTimeblocks: true
|
||||||
showPropertyBasedEvents: true
|
showPropertyBasedEvents: true
|
||||||
createDailyNotesFromDateLinks: true
|
createDailyNotesFromDateLinks: true
|
||||||
calendarView: "timeGridWeek"
|
calendarView: timeGridWeek
|
||||||
customDayCount: 3
|
customDayCount: 3
|
||||||
firstDay: 0
|
firstDay: 0
|
||||||
slotDuration: "00:30:00"
|
slotDuration: 00:30:00
|
||||||
|
|||||||
@@ -1,55 +1,57 @@
|
|||||||
# Kanban Board
|
|
||||||
|
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
- file.hasTag("type/task")
|
- file.hasTag("type/task")
|
||||||
- file.inFolder("templates") != true
|
- file.inFolder("templates") != true
|
||||||
|
|
||||||
formulas:
|
formulas:
|
||||||
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
priorityWeight: if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))
|
||||||
daysUntilDue: 'if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
daysUntilDue: if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)
|
||||||
dueIn: 'if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))'
|
dueIn: if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))
|
||||||
daysUntilScheduled: 'if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
daysUntilScheduled: if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)
|
||||||
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor()
|
||||||
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor()
|
||||||
isOverdue: '(due.isEmpty() == false) && date(due) < today() && status != "done"'
|
isOverdue: (due.isEmpty() == false) && date(due) < today() && status != "done"
|
||||||
isDueToday: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
isDueToday: (due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
||||||
isDueThisWeek: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")'
|
isDueThisWeek: (due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")
|
||||||
isScheduledToday: '(scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
isScheduledToday: (scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
||||||
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
isRecurring: recurrence && !recurrence.isEmpty()
|
||||||
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
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)'
|
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)'
|
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)'
|
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).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).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).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||||
dueMonth: 'if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")'
|
dueMonth: if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")
|
||||||
dueWeek: 'if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")'
|
dueWeek: if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")
|
||||||
scheduledMonth: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
scheduledMonth: if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")
|
||||||
scheduledWeek: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
scheduledWeek: if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")
|
||||||
dueDateCategory: 'if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "This week", "Later")))))'
|
dueDateCategory: if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "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)")))'
|
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")))'
|
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")'
|
createdMonth: file.ctime.format("YYYY-MM")
|
||||||
modifiedMonth: 'file.mtime.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"))))'
|
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"))'
|
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"))'
|
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")))'
|
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.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))'
|
nextDate: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))
|
||||||
daysUntilNext: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))'
|
daysUntilNext: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))
|
||||||
hasDate: '(due.isEmpty() == false) || (scheduled.isEmpty() == false)'
|
hasDate: (due.isEmpty() == false) || (scheduled.isEmpty() == false)
|
||||||
isToday: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))'
|
isToday: ((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))
|
||||||
isThisWeek: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))'
|
isThisWeek: ((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))
|
||||||
nextDateCategory: 'if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))'
|
nextDateCategory: if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))
|
||||||
nextDateMonth: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))'
|
nextDateMonth: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))
|
||||||
nextDateWeek: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
nextDateWeek: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))
|
||||||
urgencyScore: 'if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))'
|
urgencyScore: if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))
|
||||||
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")'
|
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.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))'
|
dueDateDisplay: if(due.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))
|
||||||
|
|
||||||
views:
|
views:
|
||||||
- type: tasknotesKanban
|
- type: tasknotesKanban
|
||||||
name: "Kanban Board"
|
name: Kanban Board
|
||||||
|
filters:
|
||||||
|
and:
|
||||||
|
- recurrence.isEmpty()
|
||||||
|
groupBy:
|
||||||
|
property: status
|
||||||
|
direction: ASC
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -59,11 +61,8 @@ views:
|
|||||||
- complete_instances
|
- complete_instances
|
||||||
- file.tasks
|
- file.tasks
|
||||||
sort:
|
sort:
|
||||||
- column: tasknotes_manual_order
|
- property: tasknotes_manual_order
|
||||||
direction: DESC
|
direction: DESC
|
||||||
groupBy:
|
|
||||||
property: status
|
|
||||||
direction: ASC
|
|
||||||
options:
|
options:
|
||||||
columnWidth: 280
|
columnWidth: 280
|
||||||
hideEmptyColumns: false
|
hideEmptyColumns: false
|
||||||
|
|||||||
@@ -1,56 +1,51 @@
|
|||||||
# Mini Calendar
|
|
||||||
# Generated with your TaskNotes settings
|
|
||||||
|
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
- file.hasTag("type/task")
|
- file.hasTag("type/task")
|
||||||
- file.inFolder("templates") != true
|
- file.inFolder("templates") != true
|
||||||
|
|
||||||
formulas:
|
formulas:
|
||||||
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
priorityWeight: if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))
|
||||||
daysUntilDue: 'if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
daysUntilDue: if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)
|
||||||
dueIn: 'if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))'
|
dueIn: if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))
|
||||||
daysUntilScheduled: 'if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
daysUntilScheduled: if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)
|
||||||
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor()
|
||||||
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor()
|
||||||
isOverdue: '(due.isEmpty() == false) && date(due) < today() && status != "done"'
|
isOverdue: (due.isEmpty() == false) && date(due) < today() && status != "done"
|
||||||
isDueToday: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
isDueToday: (due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
||||||
isDueThisWeek: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")'
|
isDueThisWeek: (due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")
|
||||||
isScheduledToday: '(scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
isScheduledToday: (scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
||||||
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
isRecurring: recurrence && !recurrence.isEmpty()
|
||||||
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
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)'
|
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)'
|
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)'
|
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).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).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).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||||
dueMonth: 'if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")'
|
dueMonth: if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")
|
||||||
dueWeek: 'if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")'
|
dueWeek: if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")
|
||||||
scheduledMonth: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
scheduledMonth: if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")
|
||||||
scheduledWeek: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
scheduledWeek: if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")
|
||||||
dueDateCategory: 'if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "This week", "Later")))))'
|
dueDateCategory: if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "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)")))'
|
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")))'
|
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")'
|
createdMonth: file.ctime.format("YYYY-MM")
|
||||||
modifiedMonth: 'file.mtime.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"))))'
|
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"))'
|
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"))'
|
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")))'
|
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.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))'
|
nextDate: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))
|
||||||
daysUntilNext: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))'
|
daysUntilNext: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))
|
||||||
hasDate: '(due.isEmpty() == false) || (scheduled.isEmpty() == false)'
|
hasDate: (due.isEmpty() == false) || (scheduled.isEmpty() == false)
|
||||||
isToday: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))'
|
isToday: ((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))
|
||||||
isThisWeek: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))'
|
isThisWeek: ((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))
|
||||||
nextDateCategory: 'if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))'
|
nextDateCategory: if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))
|
||||||
nextDateMonth: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))'
|
nextDateMonth: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))
|
||||||
nextDateWeek: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
nextDateWeek: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))
|
||||||
urgencyScore: 'if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))'
|
urgencyScore: if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))
|
||||||
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")'
|
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.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))'
|
dueDateDisplay: if(due.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))
|
||||||
|
|
||||||
views:
|
views:
|
||||||
- type: tasknotesMiniCalendar
|
- type: tasknotesMiniCalendar
|
||||||
name: "Due"
|
name: Due
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -64,12 +59,12 @@ views:
|
|||||||
direction: ASC
|
direction: ASC
|
||||||
dateProperty: due
|
dateProperty: due
|
||||||
- type: tasknotesMiniCalendar
|
- type: tasknotesMiniCalendar
|
||||||
name: "Scheduled"
|
name: Scheduled
|
||||||
order: []
|
order: []
|
||||||
dateProperty: scheduled
|
dateProperty: scheduled
|
||||||
- type: tasknotesMiniCalendar
|
- type: tasknotesMiniCalendar
|
||||||
name: "Created"
|
name: Created
|
||||||
dateProperty: file.ctime
|
dateProperty: file.ctime
|
||||||
- type: tasknotesMiniCalendar
|
- type: tasknotesMiniCalendar
|
||||||
name: "Modified"
|
name: Modified
|
||||||
dateProperty: file.mtime
|
dateProperty: file.mtime
|
||||||
|
|||||||
+117
-143
@@ -1,71 +1,54 @@
|
|||||||
# All Tasks
|
|
||||||
|
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
- file.hasTag("type/task")
|
- file.hasTag("type/task")
|
||||||
- file.inFolder("templates") != true
|
- file.inFolder("templates") != true
|
||||||
|
|
||||||
formulas:
|
formulas:
|
||||||
priorityWeight: 'if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))'
|
priorityWeight: if(priority=="none",0,if(priority=="low",1,if(priority=="normal",2,if(priority=="high",3,999))))
|
||||||
daysUntilDue: 'if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)'
|
daysUntilDue: if((due.isEmpty() == false), ((number(date(due)) - number(today())) / 86400000).floor(), null)
|
||||||
dueIn: 'if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))'
|
dueIn: if(due.isEmpty(), "", if(formula.daysUntilDue == 0, "Today", if(formula.daysUntilDue == 1, "1 day", if(formula.daysUntilDue > 1, formula.daysUntilDue + " days", if(formula.daysUntilDue == -1, "1 day overdue", formula.daysUntilDue * -1 + " days overdue")))))
|
||||||
daysUntilScheduled: 'if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)'
|
daysUntilScheduled: if((scheduled.isEmpty() == false), ((number(date(scheduled)) - number(today())) / 86400000).floor(), null)
|
||||||
daysSinceCreated: '((number(now()) - number(file.ctime)) / 86400000).floor()'
|
daysSinceCreated: ((number(now()) - number(file.ctime)) / 86400000).floor()
|
||||||
daysSinceModified: '((number(now()) - number(file.mtime)) / 86400000).floor()'
|
daysSinceModified: ((number(now()) - number(file.mtime)) / 86400000).floor()
|
||||||
isOverdue: '(due.isEmpty() == false) && date(due) < today() && status != "done"'
|
isOverdue: (due.isEmpty() == false) && date(due) < today() && status != "done"
|
||||||
isDueToday: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
isDueToday: (due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
||||||
isDueThisWeek: '(due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")'
|
isDueThisWeek: (due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")
|
||||||
isScheduledToday: '(scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")'
|
isScheduledToday: (scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
||||||
isRecurring: 'recurrence && !recurrence.isEmpty()'
|
isRecurring: recurrence && !recurrence.isEmpty()
|
||||||
hasTimeEstimate: 'timeEstimate && timeEstimate > 0'
|
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)'
|
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)'
|
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)'
|
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).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).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).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")).map((number(date(value.endTime)) - number(date(value.startTime))) / 60000).reduce(acc + value, 0).round(), 0)
|
||||||
dueMonth: 'if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")'
|
dueMonth: if((due.isEmpty() == false), date(due).format("YYYY-MM"), "No due date")
|
||||||
dueWeek: 'if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")'
|
dueWeek: if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), "No due date")
|
||||||
scheduledMonth: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")'
|
scheduledMonth: if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "Not scheduled")
|
||||||
scheduledWeek: 'if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")'
|
scheduledWeek: if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "Not scheduled")
|
||||||
dueDateCategory: 'if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "This week", "Later")))))'
|
dueDateCategory: if(due.isEmpty(), "No due date", if(date(due) < today(), "Overdue", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), "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)")))'
|
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")))'
|
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")'
|
createdMonth: file.ctime.format("YYYY-MM")
|
||||||
modifiedMonth: 'file.mtime.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"))))'
|
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"))'
|
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"))'
|
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")))'
|
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.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))'
|
nextDate: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), due, scheduled), if((due.isEmpty() == false), due, scheduled))
|
||||||
daysUntilNext: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))'
|
daysUntilNext: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), min(formula.daysUntilDue, formula.daysUntilScheduled), if((due.isEmpty() == false), formula.daysUntilDue, formula.daysUntilScheduled))
|
||||||
hasDate: '(due.isEmpty() == false) || (scheduled.isEmpty() == false)'
|
hasDate: (due.isEmpty() == false) || (scheduled.isEmpty() == false)
|
||||||
isToday: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))'
|
isToday: ((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"))
|
||||||
isThisWeek: '((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))'
|
isThisWeek: ((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD") && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"))
|
||||||
nextDateCategory: 'if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))'
|
nextDateCategory: if(due.isEmpty() && scheduled.isEmpty(), "No date", if(((due.isEmpty() == false) && date(due) < today()) || ((scheduled.isEmpty() == false) && date(scheduled) < today()), "Overdue/Past", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")), "Today", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD")), "Tomorrow", if(((due.isEmpty() == false) && date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")) || ((scheduled.isEmpty() == false) && date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")), "This week", "Later")))))
|
||||||
nextDateMonth: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))'
|
nextDateMonth: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-MM"), date(scheduled).format("YYYY-MM")), if((due.isEmpty() == false), date(due).format("YYYY-MM"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-MM"), "No date")))
|
||||||
nextDateWeek: 'if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))'
|
nextDateWeek: if((due.isEmpty() == false) && (scheduled.isEmpty() == false), if(date(due) < date(scheduled), date(due).format("YYYY-[W]WW"), date(scheduled).format("YYYY-[W]WW")), if((due.isEmpty() == false), date(due).format("YYYY-[W]WW"), if((scheduled.isEmpty() == false), date(scheduled).format("YYYY-[W]WW"), "No date")))
|
||||||
urgencyScore: 'if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))'
|
urgencyScore: if(due.isEmpty() && scheduled.isEmpty(), formula.priorityWeight, formula.priorityWeight + max(0, 10 - if(formula.daysUntilNext, formula.daysUntilNext, 0)) + (1 - ((number(date(formula.nextDate)) - number(date(date(formula.nextDate).format("YYYY-MM-DD")))) / 86400000)))
|
||||||
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")'
|
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.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))'
|
dueDateDisplay: if(due.isEmpty(), "", if(date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD"), "Today", if(date(due).format("YYYY-MM-DD") == (today() + "1 day").format("YYYY-MM-DD"), "Tomorrow", if(date(due).format("YYYY-MM-DD") == (today() - "1 day").format("YYYY-MM-DD"), "Yesterday", if(date(due) < today(), formula.daysUntilDue * -1 + "d ago", if(date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD"), date(due).format("ddd"), date(due).format("MMM D")))))))
|
||||||
|
|
||||||
views:
|
views:
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "Manual Order"
|
name: Manual Order
|
||||||
order:
|
|
||||||
- status
|
|
||||||
- priority
|
|
||||||
- blockedBy
|
|
||||||
- file.name
|
|
||||||
- recurrence
|
|
||||||
- complete_instances
|
|
||||||
- file.tasks
|
|
||||||
sort:
|
|
||||||
- column: tasknotes_manual_order
|
|
||||||
direction: DESC
|
|
||||||
groupBy:
|
groupBy:
|
||||||
property: status
|
property: status
|
||||||
direction: ASC
|
direction: ASC
|
||||||
- type: tasknotesTaskList
|
|
||||||
name: "All Tasks"
|
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -75,28 +58,35 @@ views:
|
|||||||
- complete_instances
|
- complete_instances
|
||||||
- file.tasks
|
- file.tasks
|
||||||
sort:
|
sort:
|
||||||
- column: due
|
- property: tasknotes_manual_order
|
||||||
|
direction: DESC
|
||||||
|
- type: tasknotesTaskList
|
||||||
|
name: All Tasks
|
||||||
|
order:
|
||||||
|
- status
|
||||||
|
- priority
|
||||||
|
- blockedBy
|
||||||
|
- file.name
|
||||||
|
- recurrence
|
||||||
|
- complete_instances
|
||||||
|
- file.tasks
|
||||||
|
sort:
|
||||||
|
- property: due
|
||||||
direction: ASC
|
direction: ASC
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "Not Blocked"
|
name: Not Blocked
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
# Incomplete tasks
|
|
||||||
- or:
|
- or:
|
||||||
# Non-recurring task that's not in any completed status
|
- and:
|
||||||
- and:
|
- recurrence.isEmpty()
|
||||||
- recurrence.isEmpty()
|
- status != "done"
|
||||||
- status != "done"
|
- and:
|
||||||
# Recurring task where today is not in complete_instances
|
- recurrence.isEmpty() == false
|
||||||
- and:
|
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
||||||
- recurrence.isEmpty() == false
|
|
||||||
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
|
||||||
# Not blocked by any incomplete tasks
|
|
||||||
- or:
|
- or:
|
||||||
# No blocking dependencies at all
|
- blockedBy.isEmpty()
|
||||||
- blockedBy.isEmpty()
|
- list(blockedBy).filter(file(if(value.isType("object"), value.uid, value)).properties.status != "done").isEmpty()
|
||||||
# All blocking tasks are completed (filter returns only incomplete, then check if empty)
|
|
||||||
- 'list(blockedBy).filter(file(if(value.isType("object"), value.uid, value)).properties.status != "done").isEmpty()'
|
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -106,30 +96,26 @@ views:
|
|||||||
- complete_instances
|
- complete_instances
|
||||||
- file.tasks
|
- file.tasks
|
||||||
sort:
|
sort:
|
||||||
- column: formula.urgencyScore
|
- property: formula.urgencyScore
|
||||||
direction: DESC
|
direction: DESC
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "Today"
|
name: Today
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
# Incomplete tasks (handles both recurring and non-recurring)
|
|
||||||
- or:
|
- or:
|
||||||
# Non-recurring task that's not in any completed status
|
- and:
|
||||||
- and:
|
- recurrence.isEmpty()
|
||||||
- recurrence.isEmpty()
|
- status != "done"
|
||||||
- status != "done"
|
- and:
|
||||||
# Recurring task where today is not in complete_instances
|
- recurrence.isEmpty() == false
|
||||||
- and:
|
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
||||||
- recurrence.isEmpty() == false
|
|
||||||
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
|
||||||
# Due or scheduled today
|
|
||||||
- or:
|
- or:
|
||||||
- and:
|
- and:
|
||||||
- due.isEmpty() == false
|
- due.isEmpty() == false
|
||||||
- date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
- date(due).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
||||||
- and:
|
- and:
|
||||||
- scheduled.isEmpty() == false
|
- scheduled.isEmpty() == false
|
||||||
- date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
- date(scheduled).format("YYYY-MM-DD") == today().format("YYYY-MM-DD")
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -139,30 +125,26 @@ views:
|
|||||||
- complete_instances
|
- complete_instances
|
||||||
- file.tasks
|
- file.tasks
|
||||||
sort:
|
sort:
|
||||||
- column: formula.urgencyScore
|
- property: formula.urgencyScore
|
||||||
direction: DESC
|
direction: DESC
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "Overdue"
|
name: Overdue
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
# Incomplete tasks
|
|
||||||
- or:
|
- or:
|
||||||
# Non-recurring task that's not in any completed status
|
- and:
|
||||||
- and:
|
- recurrence.isEmpty()
|
||||||
- recurrence.isEmpty()
|
- status != "done"
|
||||||
- status != "done"
|
- and:
|
||||||
# Recurring task where today is not in complete_instances
|
- recurrence.isEmpty() == false
|
||||||
- and:
|
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
||||||
- recurrence.isEmpty() == false
|
|
||||||
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
|
||||||
# Due or scheduled in the past
|
|
||||||
- or:
|
- or:
|
||||||
- and:
|
- and:
|
||||||
- due.isEmpty() == false
|
- due.isEmpty() == false
|
||||||
- date(due) < today()
|
- date(due) < today()
|
||||||
- and:
|
- and:
|
||||||
- scheduled.isEmpty() == false
|
- scheduled.isEmpty() == false
|
||||||
- date(scheduled) < today()
|
- date(scheduled) < today()
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -172,32 +154,28 @@ views:
|
|||||||
- complete_instances
|
- complete_instances
|
||||||
- file.tasks
|
- file.tasks
|
||||||
sort:
|
sort:
|
||||||
- column: formula.urgencyScore
|
- property: formula.urgencyScore
|
||||||
direction: DESC
|
direction: DESC
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "This Week"
|
name: This Week
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
# Incomplete tasks
|
|
||||||
- or:
|
- or:
|
||||||
# Non-recurring task that's not in any completed status
|
- and:
|
||||||
- and:
|
- recurrence.isEmpty()
|
||||||
- recurrence.isEmpty()
|
- status != "done"
|
||||||
- status != "done"
|
- and:
|
||||||
# Recurring task where today is not in complete_instances
|
- recurrence.isEmpty() == false
|
||||||
- and:
|
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
||||||
- recurrence.isEmpty() == false
|
|
||||||
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
|
||||||
# Due or scheduled this week
|
|
||||||
- or:
|
- or:
|
||||||
- and:
|
- and:
|
||||||
- due.isEmpty() == false
|
- due.isEmpty() == false
|
||||||
- date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD")
|
- date(due).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD")
|
||||||
- date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")
|
- date(due).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")
|
||||||
- and:
|
- and:
|
||||||
- scheduled.isEmpty() == false
|
- scheduled.isEmpty() == false
|
||||||
- date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD")
|
- date(scheduled).format("YYYY-MM-DD") >= today().format("YYYY-MM-DD")
|
||||||
- date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")
|
- date(scheduled).format("YYYY-MM-DD") <= (today() + "7 days").format("YYYY-MM-DD")
|
||||||
order:
|
order:
|
||||||
- status
|
- status
|
||||||
- priority
|
- priority
|
||||||
@@ -207,23 +185,19 @@ views:
|
|||||||
- complete_instances
|
- complete_instances
|
||||||
- file.tasks
|
- file.tasks
|
||||||
sort:
|
sort:
|
||||||
- column: formula.urgencyScore
|
- property: formula.urgencyScore
|
||||||
direction: DESC
|
direction: DESC
|
||||||
- type: tasknotesTaskList
|
- type: tasknotesTaskList
|
||||||
name: "Unscheduled"
|
name: Unscheduled
|
||||||
filters:
|
filters:
|
||||||
and:
|
and:
|
||||||
# Incomplete tasks
|
|
||||||
- or:
|
- or:
|
||||||
# Non-recurring task that's not in any completed status
|
- and:
|
||||||
- and:
|
- recurrence.isEmpty()
|
||||||
- recurrence.isEmpty()
|
- status != "done"
|
||||||
- status != "done"
|
- and:
|
||||||
# Recurring task where today is not in complete_instances
|
- recurrence.isEmpty() == false
|
||||||
- and:
|
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
||||||
- recurrence.isEmpty() == false
|
|
||||||
- complete_instances.map(date(value).format("YYYY-MM-DD")).contains(today().format("YYYY-MM-DD")) != true
|
|
||||||
# No due date and no scheduled date
|
|
||||||
- date(due).isEmpty()
|
- date(due).isEmpty()
|
||||||
- date(scheduled).isEmpty()
|
- date(scheduled).isEmpty()
|
||||||
order:
|
order:
|
||||||
@@ -235,5 +209,5 @@ views:
|
|||||||
- complete_instances
|
- complete_instances
|
||||||
- file.tasks
|
- file.tasks
|
||||||
sort:
|
sort:
|
||||||
- column: status
|
- property: status
|
||||||
direction: ASC
|
direction: ASC
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
id: 2026-06-05T09:20:40-0400
|
||||||
|
title: 2026-06-05 09:20:40
|
||||||
|
tags: []
|
||||||
|
daily: "[[2026-06-05]]"
|
||||||
|
---
|
||||||
|
# 2026-06-05 09:20:40
|
||||||
|
|
||||||
|
## LiveCount Feedback
|
||||||
|
|
||||||
|
### Which LiveCount features do you **like**?
|
||||||
|
|
||||||
|
* Adding and deleting from existing runs immediately updating Accubid
|
||||||
|
is an excellent pattern.
|
||||||
|
I teach estimators to count the obvious symbols
|
||||||
|
then move on to the next assembly,
|
||||||
|
using Add to Run at the end to pick up what was missed.
|
||||||
|
|
||||||
|
* The new Overlay manual alignment pattern is much better.
|
||||||
|
|
||||||
|
### Which LiveCount features do you **not like**?
|
||||||
|
|
||||||
|
* Reverse takeoffs "un-reverse" when adding or deleting from a run.
|
||||||
|
|
||||||
|
* Overlay Auto-align is turned on by default,
|
||||||
|
requiring me to wait seconds which feel like an eternity for each one,
|
||||||
|
even when I know from the previous that it will not align correctly.
|
||||||
|
|
||||||
|
* Overlay Auto-align appears to give equal preference to drawing titles
|
||||||
|
meaning it always results in a zero translation alignment.
|
||||||
|
|
||||||
|
* Overlays turn off when the overlay menu is closed.
|
||||||
|
|
||||||
|
### Which features do you miss and should be added?
|
||||||
|
|
||||||
|
### Is there anything else you would like to add?
|
||||||
|
|
||||||
|
* Gating LiveCount features behind Anywhere
|
||||||
|
(Auto-homerun)
|
||||||
|
but still mentioning them in the changelogs
|
||||||
|
is up-selly and confusing.
|
||||||
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
id: 2026-06-05T09:48:37-0400
|
||||||
|
title: 2026-06-05 09:48:37
|
||||||
|
tags: []
|
||||||
|
daily: "[[2026-06-05]]"
|
||||||
|
---
|
||||||
|
# 2026-06-05 09:48:37
|
||||||
|
|
||||||
|
## Accubid Reverse Takeoff
|
||||||
|
|
||||||
|
I have mixed feelings
|
||||||
|
about using negative or "reverse" takeoffs
|
||||||
|
in [[accubid|Accubid]].
|
||||||
|
|
||||||
|
### Pros
|
||||||
|
|
||||||
|
Pros as an alternative to simply changing existing counts.
|
||||||
|
|
||||||
|
With more than one revision,
|
||||||
|
it quickly becomes difficult to have confidence in count changes.
|
||||||
|
|
||||||
|
### Cons
|
||||||
|
|
||||||
|
This note specifically concerns using negative quantities
|
||||||
|
to cancel out positive for breakdown purposes,
|
||||||
|
which I suspect is the only practical purpose for them.
|
||||||
|
Net negative quantities cause all kinds of problems.
|
||||||
|
There is no link from the positive to the negative,
|
||||||
|
so any change to the former must be repeated for the latter.
|
||||||
|
|
||||||
|
With more than one revision,
|
||||||
|
determining net takeoff quickly becomes unwieldy.
|
||||||
|
|
||||||
|
LiveCount "un-reverses" reverse takeoffs
|
||||||
|
when adding or deleting from an existing run,
|
||||||
|
which is not intuitive or well known.
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
id: 2026-06-05T10:07:40-0400
|
||||||
|
title: 2026-06-05 10:07:40
|
||||||
|
tags: []
|
||||||
|
daily: "[[2026-06-05]]"
|
||||||
|
---
|
||||||
|
# 2026-06-05 10:07:40
|
||||||
|
|
||||||
|
In [[construction-estimating-software]]
|
||||||
|
it would always make more sense
|
||||||
|
to model count-based assemblies
|
||||||
|
as individual line items
|
||||||
|
rather than counts in a single run of that assembly type.
|
||||||
|
This would allow per-instance breakdowns and substitution
|
||||||
|
without need to delete from one to create another.
|
||||||
|
|
||||||
|
Were it not for Accubid's poor performance
|
||||||
|
with 1000+ takeoff jobs,
|
||||||
|
our own workflow could benefit from this arrangement
|
||||||
|
if LiveCount would better support it.
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
"""
|
|
||||||
This script ensures that every daily note linked in the timestamped notes exists.
|
|
||||||
"""
|
|
||||||
import frontmatter
|
|
||||||
import io
|
|
||||||
import glob
|
|
||||||
from datetime import datetime
|
|
||||||
import os
|
|
||||||
|
|
||||||
timestamped_notes = glob.glob("timestamped/*.md")
|
|
||||||
|
|
||||||
daily_links = set()
|
|
||||||
for child in timestamped_notes:
|
|
||||||
with io.open(child, 'r') as file:
|
|
||||||
link = frontmatter.load(file).get('daily')
|
|
||||||
daily_links.add(link)
|
|
||||||
|
|
||||||
new_daily_names = set()
|
|
||||||
for link in daily_links:
|
|
||||||
base_name = link[2:-2]
|
|
||||||
path = f"periodic/daily/{base_name}.md"
|
|
||||||
if not os.path.exists(path):
|
|
||||||
new_daily_names.add(base_name)
|
|
||||||
|
|
||||||
print(new_daily_names)
|
|
||||||
|
|
||||||
# for name in new_daily_names:
|
|
||||||
# date = datetime.strptime(name, '%Y-%m-%d')
|
|
||||||
|
|
||||||
# with io.open(f"periodic/daily/{name}.md", 'x', encoding='utf8') as f:
|
|
||||||
# f.write(f"# {name}\n\n")
|
|
||||||
|
|
||||||
# post = frontmatter.load(f)
|
|
||||||
|
|
||||||
# post['id'] = name
|
|
||||||
# post['aliases'] = []
|
|
||||||
# post['title'] = name
|
|
||||||
# post['tags'] = [
|
|
||||||
# 'authorship/original',
|
|
||||||
# 'destiny/permanent',
|
|
||||||
# 'status/draft',
|
|
||||||
# 'type/periodic/daily'
|
|
||||||
# ]
|
|
||||||
# post['dg-publish'] = True
|
|
||||||
# post['date-created'] = datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ")
|
|
||||||
# post['weekly'] = f'"[[{date.strftime('%Y-[W]%W')}]]"'
|
|
||||||
# post['monthly'] = f'"[[{date.strftime('%Y-%m')}]]"'
|
|
||||||
# post['quarterly'] = f'"[[{date.strftime('%Y-[Q]%q')}]]"'
|
|
||||||
# post['yearly'] = f'"[[{date.strftime('%Y')}]]"'
|
|
||||||
|
|
||||||
# frontmatter.dump(post, f)
|
|
||||||
Reference in New Issue
Block a user