├── .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 | ![banner](obsidian_banner.png) 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` --------------------------------------------------------------------------------