├── .gitignore
├── Daily.md
├── LICENSE
├── Literature Zotero.md
├── Meeting.md
├── README.md
├── ToDo.md
├── Topic.md
├── Zettelkasten
├── Atomic Note.md
└── Literature Note.md
├── obsidian_banner.png
└── projects
├── projectOverview.md
├── workpackage.md
└── workpackagesOverview.md
/.gitignore:
--------------------------------------------------------------------------------
1 | _*
2 |
--------------------------------------------------------------------------------
/Daily.md:
--------------------------------------------------------------------------------
1 | ---
2 | type: daily
3 | tags:
4 | aliases:
5 | - <%tp.date.now("DD.MM")%>
6 | - <%tp.date.now("dd DD.MM")%>
7 | - <%tp.date.now("DD.MM.YYYY")%>
8 | created:
9 | updated:
10 | doy: <%tp.date.now("DDD")%>
11 | woy: <%tp.date.now("ww")%>
12 | ---
13 | # Year Overview
14 | ```dataviewjs
15 | const value = dv.current().doy;
16 | const max = 365;
17 |
18 | dv.paragraph("" + "" + Math.round(100.0*value/max,2) + "% | " + parseInt(max - value) + " days left | Week [" + dv.current().woy + "/52]")
19 | ```
20 |
21 | # Daily Tasks
22 | ### Morning Tasks
23 | - [ ]
24 |
25 | ### Afternoon Tasks
26 | - [ ]
27 |
28 | ### General Tasks
29 | - [ ]
30 |
31 | ```dataviewjs
32 | let moc_pages = dv.pages().where(p => p.type == "moc").file.link;
33 |
34 | if (moc_pages.length > 0){
35 | dv.header(1, "MOC Overview");
36 | dv.list(moc_pages)
37 | }
38 | ```
39 | ```dataviewjs
40 | let po_pages = dv.pages().where(p => p.type == "project_overview" && p.project).file.link;
41 |
42 | if (po_pages.length > 0){
43 | dv.header(1, "Project Overview");
44 | dv.list(po_pages)
45 | }
46 | ```
47 | # Task Overview
48 | ```dataviewjs
49 | const today = '<%tp.date.now("YYYY-MM-DD")%>'
50 | const exclude_path = "00 Obsidian Organisation"
51 | const thisDay = dv.date(today).day
52 |
53 | // Get all non-completed task, just one time
54 | const alltasks = dv.pages('-"' + exclude_path + '"')
55 | .where(p => p.type != "workpackage")
56 | .file.tasks
57 | .where(t => !t.completed && t.text)
58 |
59 | // My wanted tasklists
60 | let overdueTasks = []
61 | let dueTasks = []
62 | let startingTasks = []
63 | let ongoingTasks = []
64 | let noDateTasks = []
65 |
66 | // Loop through all tasks _once_, and filter them
67 | for (let task of alltasks) {
68 | if (task.due && task.due.day < thisDay)
69 | overdueTasks.push(task)
70 | if (task.due && task.due.day == thisDay)
71 | dueTasks.push(task)
72 | if (task.start && task.start.day == thisDay)
73 | startingTasks.push(task)
74 | if (task.start && task.start.day < thisDay)
75 | ongoingTasks.push(task)
76 | if (!task.start)
77 | noDateTasks.push(task)
78 | }
79 | // Display the various taskslist, _if_ they
80 | // have any tasks at all
81 |
82 | if (overdueTasks.length > 0) {
83 | dv.header(3, "Overdue⚠️");
84 | dv.taskList(overdueTasks, true);
85 | }
86 |
87 | if(dueTasks.length > 0) {
88 | dv.header(3, "Due today⏰");
89 | dv.taskList(dueTasks, false);
90 | }
91 |
92 | if (startingTasks.length > 0) {
93 | dv.header(3, "Starting today🌅");
94 | dv.taskList(startingTasks, false);
95 | }
96 |
97 | if (ongoingTasks.length > 0) {
98 | dv.header(3, "Ongoing tasks🚀");
99 | dv.taskList(ongoingTasks, false);
100 | }
101 |
102 | if (noDateTasks.length > 0){
103 | dv.header(3, "No Start Date assigned⚪️")
104 | dv.taskList(noDateTasks, false);
105 | }
106 | ```
107 | # Links
108 | [[<%tp.date.now("YYYY-MM-DD", -1)%>|Previous Note]] <-> [[<%tp.date.now("YYYY-MM-DD", +1)%>|Next Note]]
109 |
110 | ___
111 | Last Modified `=this.updated`
112 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Sebastian Baum
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Literature Zotero.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: '<%tp.date.now("YYYY-MM-DD-HH-mm")%>'
3 | zn_type: literature
4 | type: paper
5 | aliases:
6 | - {{title}}
7 | - {{citekey}}
8 | - {{shortTitle}}
9 | url: {{url}}
10 | doi: {{doi}}
11 | citekey: {{citekey}}
12 | keywords: {{allTags}}
13 | authors: [{{authors}},{{directors}}]
14 | status: Planned
15 | created:
16 | updated:
17 | version: draft
18 | ---
19 |
20 | <%*
21 | // Templater function to rename the file after importing it.
22 | let title = "{{title}}";
23 | title = title.replace(/[/\\?%*:|"<>]/g, '-');
24 | let date = tp.date.now("YYYY-MM-DD");
25 | await tp.file.rename(`& ${date} ${title}`);
26 | _%>
27 |
28 | zotero_link::{{pdfZoteroLink}}
29 | abstract::{{abstractNote}}
30 |
31 | ```dataview
32 | TABLE keywords as Keywords, type as Type, related as Related
33 | FROM [[& <%tp.date.now("YYYY-MM-DD")%> {{title}}]]
34 | WHERE related != null
35 | ```
36 | # Hypothesis
37 | -
38 |
39 | # Methodology
40 | -
41 |
42 | # Results
43 | -
44 |
45 | # Key Points
46 | -
47 |
48 | # Notes
49 |
50 | |Highlighted Color| Meaning|
51 | |-|-|
52 | |Blue|Key Points|
53 | |Orange|Disagree / Critique / Requires lookup of References|
54 | |Green|Interesting Point|
55 | |Purple|Interesting Reference|
56 |
57 | {% for annotation in annotations -%}
58 | {%- if annotation.annotatedText -%}
59 | {{annotation.colorCategory}}
60 | "{{annotation.annotatedText}}"
61 | [Page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}&annotation={{annotation.id}})
62 | {%- endif %}
63 | {%- if annotation.imageRelativePath -%} ![[{{annotation.imageRelativePath}}]] [Page {{annotation.page}}](zotero://open-pdf/library/items/{{annotation.attachment.itemKey}}?page={{annotation.page}}&annotation={{annotation.id}})
64 | {%- endif %}
65 | {% if annotation.comment %}
66 | - {{annotation.comment}}
67 | {% endif %}
68 | {% endfor -%}
69 |
70 | # Related Concepts
71 | _Hastags and related topics_
72 | {% for relation in relations -%}
73 | {%- if relation.citekey -%}
74 | related::[[{{relation.citekey}}|{{relation.citekey}}]]
75 | {% endif -%}
76 | {%- endfor %}
77 |
78 | ___
79 | Last Modified `=this.updated`
--------------------------------------------------------------------------------
/Meeting.md:
--------------------------------------------------------------------------------
1 | ---
2 | type: Meeting
3 | tags:
4 | project:
5 | place:
6 | duration:
7 | date: {{date:YYYY-MM-DD}}
8 | participants:
9 | - John Doe
10 | aliases:
11 | - Meeting {{date:DD.MM}}
12 | - Meeting {{date:dd DD.MM}}
13 | - Meeting {{date:DD.MM.YYYY}}
14 | recorder: John Doe
15 | protocol_ctime: {{date}}
16 | created:
17 | updated:
18 | ---
19 | |Date|`=this.date`|
20 | |-|-|
21 | |Project|`=this.project`|
22 | |Meeting Place|`=this.place` - `=this.duration`|
23 | |Participants|`=this.participants`|
24 | |Recorder|`=this.recorder`|
25 | |Protocol created on|`=this.protocol_ctime`|
26 |
27 |
28 | # Agenda
29 | 1.
30 |
31 | # Action Items
32 | -
33 |
34 | # Discussion Points
35 | -
36 |
37 | # Requires Query
38 | ```dataview
39 | List
40 | WHERE project = this.project and
41 | type = "workpackage" and
42 | status = "RequiresQuery"
43 | ```
44 |
45 | # Decisions Made
46 | -
47 |
48 | # Next Steps
49 | - [ ]
50 |
51 | ___
52 | Last Modified `=this.updated`
53 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | # Obsidian Templates
4 |
5 | This repository contains templates for Obsidian notes.
6 |
7 | - Why Obsidian: Watch following from [linking your thinking](https://www.youtube.com/@linkingyourthinking/featured):
8 | [Video](https://www.youtube.com/watch?v=QgbLb6QCK88)
9 | - Why Templates: Speed up your process when working with obsidian.
10 |
11 | # How to use these Templates
12 |
13 | Templates are a highly dynamic part of Obsidian and change over time. I try to keep everything working, but it can happen that really old templates may not work with newer templates.
14 |
15 | To use this templates:
16 |
17 | 1. Download and install [Obsidian](https://obsidian.md/download).
18 | 2. Create a vault and inside your vault a folder for templates location like following example:
19 |
20 | ```
21 | my_vault/
22 | > templates
23 | ```
24 |
25 | 1. Set the new folder `my_vault/templates` as default folder for templates in: `settings` > (core plugins) `templates` > `template folder location`.
26 | 2. Clone this repository inside of your `my_vault/templates` folder
27 | 3. Create a new note (`ctrl+n`)
28 | 4. Press `ctrl+p` and search for `templates: insert template`
29 | 5. Insert the template!
30 | Some templates (like [Daily Note template](#daily-note-template)) require additional settings. This is indicated by a "Setup" section in the template.
31 |
32 | # Plugins
33 |
34 | There is a whole bunch of community plugins available. I highly recommend using them, as they will speed up your Obsidian-workflow. The plugins I use for these templates are:
35 |
36 | - [Dataview](https://github.com/blacksmithgu/obsidian-dataview)
37 | - [Supercharged Links](https://github.com/mdelobelle/obsidian_supercharged_links) (optional)
38 | It is not necessary to understand these plugins in detail, as the templates use them to automatically. If you stick to the templates in this repository, they will work fine without much tweaking.
39 |
40 | The "supercharged links" plugin is optional and will do nothing until you have everything set up. It is optional, but I highly recommend it - especially for project management templates.
41 |
42 | More information can be found on my website. I will post new blog posts about Obsidian and my research in general.
43 |
44 | # Templates
45 |
46 | This section describes the templates in detail.
47 |
48 | The core plugin "Templates" supports variables, which are also used in these templates. Variables are marked in the template notes with `{{...}}` and will be replaced when inserting this template. More information can be found [here](https://help.obsidian.md/Plugins/Templates).
49 |
50 | ## Daily Note
51 |
52 |
53 |
54 | File: [Daily.md](Daily.md). The template "Daily" is for daily notes.
55 |
56 | - [Dataview](https://github.com/blacksmithgu/obsidian-dataview): mandatory
57 | - [Supercharged Links](https://github.com/mdelobelle/obsidian_supercharged_links): optional
58 |
59 | ### Metadata of Daily Note
60 |
61 | - `type: daily`:
62 | This is for filtering these notes.
63 | - `tags: - todo`:
64 | The tags metadata can contain several tags. Make sure that at least `todo` is a metadata.
65 | - `date: {{date}}`:
66 | Inserts the date in the format specified by the "Daily Notes" core plugin. Default: `YYYY-MM-DD` (result format: "1970-01-01").
67 | - `aliases`:
68 | These are aliases under which your note can be found in the search pane (`ctrl+o`).
69 |
70 | ### Purpose of Daily Note
71 |
72 | The purpose of this note is to record daily to-dos and to provide a quick overview of pending and upcoming tasks.
73 |
74 | To display these tasks, this note uses dataviews in combination with the [todo template](ToDo.md). The most important metadata for using these dataviews is the `todo` tag.
75 |
76 | ### Setup of Daily Note
77 |
78 | This template can be automatically inserted into the daily note. Check the settings of the "Daily Notes" core plugin and select this template as the "Daily Notes" template.
79 |
80 |
81 |
82 | ## Meeting Note
83 |
84 |
85 |
86 | File: [Meeting.md](Meeting.md). The template "Meeting" is for meeting notes.
87 |
88 | - [Dataview](https://github.com/blacksmithgu/obsidian-dataview): optional
89 |
90 | ### Metadata of Meeting Note
91 |
92 | - `type: Meeting`:
93 | This is for filtering these notes.
94 | - `project`:
95 | The projects where this meeting is held. This will be used by [project overview template](projects/projectOverview.md).
96 | - `place`:
97 | The place the meeting is held.
98 | - `duration`:
99 | The duration of the meeting.
100 | - `date: {{date}}`:
101 | Inserts the date in the format specified by the "Templates" core plugin. Default: `YYYY-MM-DD` (result format: "1970-01-01")
102 | - `participants`:
103 | The participants of the meeting.
104 | - `aliases`:
105 | These are aliases under which your note can be found in the search pane (`ctrl+o`).
106 | - `recorder`:
107 | The recorder of the meeting.
108 | - `protocol_ctime`:
109 | The creation time of the protocol.
110 |
111 | ### Purpose of Meeting Note
112 |
113 | The purpose of this note is to record meetings. It also has a header with the most important information. The header also shows some of the metadata as well. This is because when you export the protocol as PDF, the metadata is not displayed.
114 |
115 |
116 |
117 | ## ToDo Note
118 |
119 |
120 |
121 | File: [ToDo.md](ToDo.md). The template "ToDo" is for to-do notes.
122 |
123 | - [Dataview](https://github.com/blacksmithgu/obsidian-dataview): optional - recommended
124 | - [Supercharged Links](https://github.com/mdelobelle/obsidian_supercharged_links): recommended
125 |
126 | ### Metadata of ToDo Note
127 |
128 | - `tags: - todo`:
129 | The tags metadata can contain several tags. Make sure that at least `todo` is a metadata.
130 | - `date: {{date}}`:
131 | Inserts the date in the format specified by the "Templates" core plugin. Default: `YYYY-MM-DD` (result format: "1970-01-01"). It can also be referred as creation time with `this.file.ctime`.
132 | - `due`:
133 | The deadline of the to-do.
134 | - `status`:
135 | The status of the to-do. It is highly recommended to use the supercharged links plugin to display the status next to a link. See my website for more information.
136 |
137 | ### Purpose of ToDo Note
138 |
139 | The purpose of this note is to give your general to-do a note of its own. Each task in your to-do note is displayed in the daily note. You can view these tasks in your to-do note as sub-steps to achieving the main goal.
140 |
141 | If you are using the [Dataview](https://github.com/blacksmithgu/obsidian-dataview) plugin, you can extend the sub-tasks by adding the short hand syntax supported by Dataview. It is explained [here](https://blacksmithgu.github.io/obsidian-dataview/annotation/metadata-tasks/) and supports task specific due, completion, creation, start and scheduled dates. The `due` metadata is also set in the note, but is overridden by a `due` on a specific sub-task.
142 |
143 |
144 |
145 | ## Topic Note
146 |
147 |
148 |
149 | File: [Topic.md](Topic.md). The template "Topic" is for notes about general topics.
150 |
151 | ### Metadata of Topic Note
152 |
153 | - `type:`:
154 | - The type metadata is to define the type of topic this note is about.
155 | - `tags:`:
156 | The tags metadata can contain several tags.
157 | - `date: {{date}}`:
158 | Inserts the date in the format specified by the "Templates" core plugin. Default: `YYYY-MM-DD` (result format: "1970-01-01"). It can also be referred as creation time with `this.file.ctime`.
159 |
160 | ### Purpose of Topic Note
161 |
162 | The purpose of this note is to write notes about any topic.
163 |
164 |
165 |
166 | ___
167 | The `Literature` and `projects` section is under construction.
168 |
--------------------------------------------------------------------------------
/ToDo.md:
--------------------------------------------------------------------------------
1 | ---
2 | tags:
3 | date: {{date:YYYY-MM-DD}}
4 | due: {{date:YYYY-MM-DD}}
5 | status: Planned
6 | priority: 0
7 | created:
8 | updated:
9 | ---
10 |
11 | # Sub tasks
12 | _To achieve this to do._
13 | - [ ]
14 |
15 | # Comments
16 | _Include resources, information, etc..._
17 |
18 | # Related Topics
19 | _Links to other notes_
20 |
21 | ___
22 | Last Modified `=this.updated`
--------------------------------------------------------------------------------
/Topic.md:
--------------------------------------------------------------------------------
1 | ---
2 | type:
3 | tags:
4 | date: {{date}}
5 | created:
6 | updated:
7 | ---
8 |
9 | # Key Points
10 | _The key points of {{title}}. If wanted also insert formulas $in\ latex$ etc._
11 |
12 | # Subtopics
13 | _Additional information, Toughs, Pro/Contra, etc._
14 |
15 | # Personal Thoughts
16 | _What do you think about this topic?_
17 |
18 | # Examples
19 | _Link to examples or other pages, where {{title}} is implemented._
20 |
21 | # Related Concepts
22 | _Papers, Websites_
23 |
24 | ___
25 | Last Modified `=this.updated`
--------------------------------------------------------------------------------
/Zettelkasten/Atomic Note.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: '<%tp.date.now("YYYY-MM-DD-HH-mm")%>'
3 | aliases:
4 | - {{title}}
5 | tags: # For realted concepts
6 | -
7 | zn_type: atomic
8 | # Both meta data below is for the "Update time on edit" plugin
9 | created:
10 | updated:
11 | version: draft
12 | comment: If you want to write something about this note
13 | description: One Sentence to explain the note
14 | ---
15 |
16 | <%*
17 | // Templater function to rename the file after importing it.
18 | let title = tp.file.title;
19 | await tp.file.rename(`${tp.date.now("YYYY-MM-DD-HH-mm")} ${title}`);
20 | _%>
21 |
22 | # {{title}}
23 | _There should be a 'Body' for the note - where the main content goes. Inside the body one may want to link to other content - like you see in Wikipedia._
24 |
25 | # References
26 | _To outside source material - if the note is a summary of other content it should reference it such as for your citations._
27 |
28 | ___
29 | Last Modified `=this.updated`
--------------------------------------------------------------------------------
/Zettelkasten/Literature Note.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: '<%tp.date.now("YYYY-MM-DD-HH-mm")%>'
3 | aliases:
4 | - {{title}}
5 | tags: # For realted concepts
6 | -
7 | zn_type: literature
8 | # Both meta data below is for the "Update time on edit" plugin
9 | created:
10 | updated:
11 | version: draft
12 | comment: If you want to write something about this note
13 | description: One Sentence to explain the note
14 | ---
15 |
16 | <%*
17 | // Templater function to rename the file after importing it.
18 | let title = tp.file.title;
19 | await tp.file.rename(`${tp.date.now("YYYY-MM-DD-HH-mm")} ${title}`);
20 | _%>
21 |
22 |
23 | # {{title}}
24 | _There should be a 'Body' for the note - where the main content goes. Inside the body one may want to link to other content - like you see in Wikipedia._
25 |
26 | # References
27 | _To outside source material - if the note is a summary of other content it should reference it such as for your citations._
28 |
29 | ___
30 | Last Modified `=this.updated`
--------------------------------------------------------------------------------
/obsidian_banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BaumSebastian/Obisidan-Templates/a85a4591ed30f7094dc0b2765f2192600c532767/obsidian_banner.png
--------------------------------------------------------------------------------
/projects/projectOverview.md:
--------------------------------------------------------------------------------
1 | ---
2 | type: project_overview
3 | project:
4 | tags:
5 | ---
6 |
7 | # Content
8 | _Content of this project_
9 |
10 | # Progress
11 | ```dataviewjs
12 | const this_project = dv.current().project;
13 | const observed_status = ["Done","InProgress","Planned","RequiresQuery", "Blocked", "External"]
14 | const status_emoji = {
15 | "Done" : "🟢",
16 | "InProgress" : "🔵",
17 | "Planned" : "🟡",
18 | "RequiresQuery" : "❔",
19 | "Blocked" : "🟤",
20 | "External" : "⚪"
21 | }
22 |
23 | let aps = dv.pages().where(p => p.project == this_project
24 | && p.type == "workpackage"
25 | && p.status != "")
26 |
27 | // All arrays of interesting
28 | const max = aps.length
29 |
30 | for (let status of observed_status){
31 | let amount_status = aps.where(ap => ap.status == status).length
32 | dv.paragraph(status_emoji[status]+insertSpacesBeforeUppercase(status))
33 | dv.paragraph(progressBarVisualization(amount_status, max))
34 | }
35 |
36 | function insertSpacesBeforeUppercase(inputString) {
37 | return inputString.replace(/([A-Z])/g, ' $1');
38 | }
39 |
40 | function progressBarVisualization(value, max){
41 | const percentage = ((value/max)*100).toFixed(1);
42 | return " " + percentage + "% | [" + value + "/" + max + "]";
43 |
44 | }
45 | ```
46 |
47 | # Meetings
48 | ```dataviewjs
49 | let meeting_pages = dv.pages().where(p => p.project == dv.current().project && p.type == "Meeting")
50 |
51 | if (meeting_pages.length > 0){
52 | dv.table(["File", "Date", "Place"],
53 | meeting_pages
54 | .sort(p => p.date)
55 | .map(p => [p.file.link,
56 | p.date,
57 | p.place,
58 | ])
59 | )
60 | }
61 | else {
62 | dv.paragraph("No meetings so far.")
63 | }
64 | ```
65 |
66 | ```dataviewjs
67 | let project_pages = dv.pages().where(p => p.project == dv.current().project).sort(p => p.file.name)
68 |
69 | // Check if overview exists
70 | let overview_pages = project_pages.where(p => p.type== "workpackageOverview")
71 | if (overview_pages.length > 0){
72 | dv.header(1,"Groups")
73 | for (let page of overview_pages){
74 | dv.paragraph(page.file.link + " - " + page.description)
75 | }
76 | }
77 | else {
78 | dv.header(1,"Work Packages")
79 | for (let page of project_pages){
80 | dv.paragraph(page.file.link + " - " + page.description)
81 | }
82 | }
83 | ```
84 | ___
85 | Last modified: `=this.file.mtime`
--------------------------------------------------------------------------------
/projects/workpackage.md:
--------------------------------------------------------------------------------
1 | ---
2 | project:
3 | description:
4 | type: workpackage
5 | tags:
6 | start: "01.01.1970"
7 | due: "01.01.1970"
8 | status: Planned
9 | group:
10 | supervisor:
11 | ---
12 |
13 | # Content
14 | _What is the content of this work package?_
15 |
16 | # Questions
17 | _Are there any open questions about this work package?_
18 |
19 | # Miscellaneous Notes
20 | -
21 |
22 | # To-Do
23 | _What to do?_
24 |
25 | # Deliverables
26 | _When is the work package done and what to deliver?_
27 | _Make it as a task list to be displayed on work package overview._
28 |
29 | # Dependencies
30 | _Dependencies to other work packages?_
31 | dependencies::
32 |
33 | ___
34 | Last modified: `=this.file.mtime`
--------------------------------------------------------------------------------
/projects/workpackagesOverview.md:
--------------------------------------------------------------------------------
1 | ---
2 | project:
3 | description:
4 | type: workpackageOverview
5 | tags:
6 | start:
7 | due:
8 | status: Planned
9 | group:
10 | ---
11 |
12 | # Content
13 | _content of these work packages?_
14 |
15 | # Progress
16 | ```dataviewjs
17 | const this_project = dv.current().project;
18 | const observed_status = ["Done","InProgress","Planned","RequiresQuery", "Blocked", "External"]
19 | const status_emoji = {
20 | "Done" : "🟢",
21 | "InProgress" : "🔵",
22 | "Planned" : "🟡",
23 | "RequiresQuery" : "❓",
24 | "Blocked" : "🟤",
25 | "External" : "⚪"
26 | }
27 |
28 | let aps = dv.pages().where(p => p.project == this_project
29 | && p.group == dv.current().group
30 | && p.type == "workpackage"
31 | && p.status != "")
32 |
33 | // All arrays of interesting
34 | const max = aps.length
35 |
36 | for (let status of observed_status){
37 | let amount_status = aps.where(ap => ap.status == status).length
38 | dv.paragraph(status_emoji[status]+insertSpacesBeforeUppercase(status))
39 | dv.paragraph(progressBarVisualization(amount_status, max))
40 | }
41 |
42 | function insertSpacesBeforeUppercase(inputString) {
43 | return inputString.replace(/([A-Z])/g, ' $1');
44 | }
45 |
46 | function progressBarVisualization(value, max){
47 | const percentage = ((value/max)*100).toFixed(1);
48 | return " " + percentage + "% | [" + value + "/" + max + "]";
49 |
50 | }
51 | ```
52 |
53 | # Work packages
54 | ```dataviewjs
55 | const ignoring_workpackages = []
56 | const current_project = dv.current().project
57 | let pages = dv.pages().where(p => p.project == current_project
58 | && p.group == dv.current().group
59 | && p.type == "workpackage"
60 | && !ignoring_workpackages.includes(p.status))
61 |
62 | for( let page of pages){
63 | dv.header(3, page.file.link)
64 | dv.paragraph("Deadline: " + page.due)
65 | if (page.file.tasks.length > 0)
66 | dv.taskList(page.file.tasks.groupBy(p => p="Deliverables:"))
67 | }
68 | ```
69 |
70 | ___
71 | Last modified: `=this.file.mtime`
--------------------------------------------------------------------------------