Skip to content

Commit

Permalink
Merge branch 'columns' into main
Browse files Browse the repository at this point in the history
* columns: (175 commits)
  Formify: improve readme: add board instructions
  Formify: README tweaks
  Formify: update example settings
  Formify: improve test coverage
  Formify: improve README
  Formify: test board and column checks when decoding settings
  Formify: trim board/column names when making sure they are unique
  Formify: improve look of add/delete modals
  Formify: allow NamedTag column's tag to start with a #
  Formify: elm-review
  Formify: set min height for board name in list on settings pane
  Formify: remove loads of pre-formified stuff
  Formify: move SettingsState into Forms
  Formify: preserve column collapse state when editing settings
  Formify: remove FormDecoder validations as not using them for now
  Formify: renaming for clarity
  Formify: use custom column names in placeholders
  Formify: always place new columns at the end of the column list
  Formify: global settings
  Formify: show global settings form
  ...
  • Loading branch information
roovo committed Dec 30, 2023
2 parents bde5adb + fe7f810 commit 175a143
Show file tree
Hide file tree
Showing 102 changed files with 15,045 additions and 6,982 deletions.
130 changes: 83 additions & 47 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,17 @@ An [Obsidian](https://obsidian.md/) plugin to make working with tasks a pleasure

- Uses regular tasks/subtasks wherever they are in your vault.
- Shows them on kanban style boards.
- Two board types supported:
- Two column types supported:
- Date based (with daily/periodic notes support).
- Tag based (uses `#tags` to define your boards).
- Tag based (uses `#tags` to define columns).

## New
- Boards can have a mixture of date and tag based columns.
- Columns can be re-ordered (by dragging them on the settings pane).
- More flexible date based columns based on relative dates.
- Ability to use css snippets to
[set card hightlight color](#customising-card-highlight-color) based on tags
- Board reordering
- drag and drop tab headers or board names in the settings dialog
- Improved styling of tab headers (consistent with obsidian)
[set card hightlight color](#customising-card-highlight-color) based on tags.
- Board reordering; drag and drop tab headers or board names in the settings dialog.

![date based board screenshot](/images/dateBoard.png?raw=true)

Expand All @@ -35,13 +36,15 @@ When installed, you can launch the plugin:
![app ribbon icon](/images/ribbonIcon.png?raw=true)

If you have no boards defined, you should get a dialog asking you to add a new
board. There are 2 types of board:
board. You can choose between 3 board types:

- **Date based**: looks like the main screenshot above.
- **Tag based**: uses tags to define the columns (you need to include tags on
your tasks or in front matter for this to work).
- **Empty board**: has no pre-defined columns.

Name and configure your boards and you are good to go.
These are just to get you started. You can add/edit/re-order/delete columns
for these (or any board) via the plugin's settings.

## Cards
Any task in your vault can appear as a card in a column on a board. In order to
Expand All @@ -59,7 +62,7 @@ What appears on the card depends on what your task looks like:
- Anything that is indented under a task will appear in the body of the task.
- Indented tasks will appear as subtasks (all subtasks are grouped together).
- Indented text will appear as notes.
- `#tags` in front matter or on the line of the task (or any subtasks) will
- `#tags` in front matter or on the line of the task will
appear at the top of the card.
- Due date (if given) will appear at the bottom of the card.

Expand All @@ -83,15 +86,15 @@ It will look something like this on a card on your board:

### Marking a task as complete
If you mark an task as complete on the board it will be marked as completed in the markdown
(and vice-versa). If you mark as complete on the board, a completion timestamp is appended
to the task:
file (and vice-versa). If you mark as complete on the board, a completion timestamp
is appended to the task:

```
- [x] Task title @completed(2021-10-30T13:57:48)
```

See the [compatibility section](#other-plugin-compatibility) for details on how you can choose to use
a format compatible with other plugins.
a format compatible with other plugins (or to choose not to add any completion text).

If you have subtasks and the parent task is tagged as an _autocomplete_ task then the main
task will be marked as complete when you tick off the final subtask:
Expand Down Expand Up @@ -121,12 +124,10 @@ The current behaviour for the different columns is:

- **Completed**: has the most recently completed at the top (assuming they were
marked as complete using the checkbox on the board).
- **Future**, **Today**, **Tags**: these are sorted by due date and then
- **Date** & **Tag** columns are sorted by due date and then
alphabetically within this.
- other columns are sorted alphabetically.

I am not convinced that this is the best strategy so this may well change in a future release.

### Customising Tags
I have to recommend using the wonderful
[Colorful Tag](https://obsidian.md/plugins?id=obsidian-colorful-tag) plugin as this
Expand Down Expand Up @@ -183,22 +184,29 @@ Which will set the color to yellow for all cards with a tag `#status/doing`. Thi
override any date based highlighting. If you use nested tags, you will need to replace
the `/` character with a `-` (as in the example above). If the card has multiple tags
which you have set different colors for, the last one read from your snippets will take
priority. Tag based colors will be applied for tags even if they are [hidden](#hiding-tags).
priority. Tag based colors will be applied for tags even if the tags are [hidden](#hiding-tags).

## Boards
Two board types supported:
- Date based (with daily/periodic notes support).
- Tag based (uses `#tags` to define your boards).
Boards are simply a collection of columns, which are defined either by:
- Dates (with daily/periodic notes support).
- Tags (uses `#tags` to define the column).

### Adding boards

![add new board](/images/addNewBoard.png?raw=true)

Use the `+` icon on the settings dialog.

### Reordering boards
Boards can be reordered by dragging their tabs on the main view.
Boards can be reordered by dragging their tabs on the main view or dragging their
name in the list on the settings pane.

### Date boards
### Date columns
You will get the best out of these if you are using the (core) Daily Notes
or the (community) Periodic Notes plugins, as any tasks you place on a daily
note will be assigned to the day of the note. If you do not want this behaviour
you can turn it off in the Global Settings pane, then tasks on daily notes
pages will not have a due date unless specifically specified.
pages will not have a due date unless one is specified on the line of the task.

![filters](/images/ignoreFileNameDatesSetting.png?raw=true)

Expand All @@ -224,34 +232,51 @@ You can turn off the due date for a specific task on a daily note page:
- [ ] My task @due(none)
```


#### Overdue tasks
These will appear in the `Today` column above any any tasks that are actually
due today.
In the default Date Board, these will appear in the `Today` column above any
any tasks that are actually due today.

The idea being that it will get steadily more annoying to see what you were planning
to do today if you have a lot of incomplete tasks from previous days, (hopefully)
encouraging you to do something about them; like do them or move them to a future
date if you want to schedule them later.

If you prefer to have overdue tasks in their own column you can configure this in the
settings:

![date board column settings](/images/dateBoardColumnsSettings.png?raw=true)

#### Completed tasks
If you choose to show completed tasks on your date board, you will only see
completed tasks which have a due date unless the Undated column is enabled.
This shows the 3 types of date based columns you can use: `Before`, `Between`, and `After`.
Each of these use relative dates, where 0 means today, so:

- `Between -1 and -1` means yesterday
- `Between 0 and 0` means today
- `Between 1 and 1` means tomorrow
- `Before 0` means before today (overdue)
- `After 1` means after tomorrow

### Tag boards
If you give your tasks tags, you can use these to set up a tag-board. So if you
The only other date based column you can include is an _Undated_ column, which will
include all tasks which have no due date. You cannot have more than one _Undated_
column on a board.

### Tag columns
If you give your tasks tags, you can use these to set up tag columns. So if you
have the tags `#status/backlog`, `#status/triaged`, `status/blocked`, `#status/doing`,
you can define a board that shows tasks tagged with these in separate columns:

![tag board settingx](/images/tagBoardSettings.png?raw=true)
![tag board settings](/images/tagBoardSettings.png?raw=true)

You do not need to inclue the `#` character at the start of the tag when defining
which tag shold be used for a column.


#### Sub-tasks
Tasks which have sub-tasks with matching tags will also appear on the board.
Tasks with sub-tasks that have matching tags will also appear on the board.

#### Subtags
If you specify a tag with a trailing `/` then the column will contain all subtags of the tag.
If you specify a tag with a trailing `/` in the settings for the column,
then the column will contain all subtags of the tag.

#### Front Matter Tags
If you want to give all the tasks on a page the same tag, you can put it in the
Expand All @@ -270,26 +295,36 @@ tags: [ project1 ]
#### Hiding Tags
If you don't want to see the tags used to configure the board's columns on the cards,
you can show/hide them in the settings. If you choose not to show the column tags,
this will hide all the tags used in the settings wherever cards are on the board.
this will hide the tags defined for columns wherever cards are on the board.
Only tags that exactly match those used in the settings will be hidden.

#### Completed tasks
When a task is shown in a column due to tags on sub-tasks it will only show in that
column if those subtasks are incomplete. So the following
task is shown only in the Barney column as the Wilma sub-task is complete:
The other types of tag based columns are:

- Other Tags: include any tasks with tags that are not in one of
the defined tag-based columns.
- Untagged: for any tasks which have no tags.

You cannot have more that one of each of these on a board.

### Completed column
You can include a complted column on your board. This will only include
completed tasks that would have appeared in one of the other columns had it not been
completed; so it only contains tasks that _belong_ on the board.

Where you have columns based on tags and a task is shown in a column due to tags on
sub-tasks it will only show in that column if those subtasks are incomplete.
So the following task is shown only in the _Barney_ column as the _Wilma_ sub-task
is complete:

![wilma_barney](/images/wilma_barney.png?raw=true)

This does mean that a card can appear in the completed column of a tag board even if
the top level task is not complete, e.g for the above example if the barney task is
marked as complete the card will move to the Completed column:
This does mean that a card can appear in the completed column even if
the top level task is not complete, e.g for the above example if the _Barney_ task is
marked as complete the card will move to the _Completed_ column:

![wilma_barney_completed](/images/wilma_barney_completed.png?raw=true)

The board config defines which tasks will appear on a Tag board, and this is true for
the completed column too; only tasks which would appear on the board if all tasks and
subtasks were marked as incomplete can ever be in the Completed column.

You cannot have more than one Completed column on a board.

### Board Filters
You can filter which tasks appear on each board in the board settings. There are 3
Expand All @@ -311,10 +346,11 @@ Filters are applied before tasks are placed onto a board:
Plugin settings are accessible from the plugin view itself, via the settings icon
above the board to the left of the tabs. You can:

- Create new boards (using the + icon next to _BOARDS_).
- Create new boards (using the + icon next to the _Boards_ heading).
- Configure your boards.
- Customize the names of the built-in columns.
- Delete any boards you no longer need.
- Customize the default names of the built-in columns.
- Add/remove/edit/reorder columns.
- Delete boards.
- Choose whether to use Cardboard, Dataview or Tasks format for marking task completion.
- Choose to not use the date of daily notes files as the due date for tasks.

Expand Down
15 changes: 5 additions & 10 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
- why isn't grab cursor working over "draggables"?
- tidy typescript
- can I animate tab moving so it isn't instantaneous?
- bug ? if I make a column for "people/" it includes the card tagged with "people/fred"
as expected! However, if I also have an other tags column, this card appears here too
- not expected

- touch events - iPad ??
- show errors on settings pane ??

# Cleanups
- simplify parsing as per typing tutor
Expand All @@ -13,9 +15,6 @@
but no other tags then it appears in the others column. It feels like
it should really be in the untagged column.
- check coverage and add tests
- are there any failure cases for TagBoard.columnConfigsParser?
- tabs are not very visible
- I have only have one issue: When opening CardBoard, it always open in a new split pane on the right, even if no file is open. I would prefer to have it open in full width like when opening Graph view. Can I suggest this fix ?
- why is the case of the filename for MultiSelect.elm not being recognised properly?
- add ts declarations to replace @ts-ignores:
https://github.com/kometenstaub/linked-data-helper/blob/3bbee6aa49bcabd2dab0b8f86bccd2de81ed92e6/src/interfaces.ts#L26
Expand All @@ -42,9 +41,6 @@
are there any sensible options I can give them if I do?
- gets stuck on "Loading tasks..." if flags parsing fails
- I could use State if I added a State.Failed
- do I want the last board who's settings I've edited to the one shown when closing settings?
- allow boards to be ordered (in settings somehow - perhaps use this as a first exploration
into drag and drop?)
- when jumping to the todo using the edit link perhaps I could highlight the complete
taskItem block (if is has indented content). Will have to explore the setEphemeralState
code to see if I can do this using line numbers or whether I need to track characters..
Expand Down Expand Up @@ -79,7 +75,6 @@
- do I want a way of flagging cards?
- could make column ordering more efficient (e.g. TagBoard completed tasks)
- context menu to set due date to today
- don't display all completed tasks - can get quite long!
- filter cards on board (e.g. by tag)
- sort order for columns?

Expand Down
16 changes: 8 additions & 8 deletions configExamples/data.0.10.0.json
Original file line number Diff line number Diff line change
Expand Up @@ -206,15 +206,15 @@
"globalSettings": {
"taskCompletionFormat": "ObsidianCardBoard",
"columnNames": {
"today": "",
"tomorrow": "",
"future": "",
"undated": "",
"others": "",
"untagged": "",
"completed": ""
"today": "TODAY",
"tomorrow": "TOMORROW",
"future": "FUTURE",
"undated": "UNDATED",
"others": "OTHERS",
"untagged": "UNTAGGED",
"completed": "COMPLETED"
},
"ignoreFileNameDates": false
}
}
}
}
Loading

0 comments on commit 175a143

Please sign in to comment.