Projectify plugin: request for hints about managing hierarchies of Todos

I am trying to learn the basics of Projectify plugin

Consider the following scenario:

* Project-1
  * Subproject-1.1
    * Subproject-1.1.1
      * Task-1.1.1.1
      * Task-1.1.1.2

* Project-2
  * Subproject-2.1
    * Subproject-2.1.1
      * Task-2.1.1.1

I would like a way to see: a list of all tasks (as in, “leaves” from all project trees), sorted by project.

By creating a couple of subproject/tasks, I’ve noticed that a “leaf”:

  1. has a todo tag
  2. does not have a SubProject tag

This means that I can solve half of my problem like this:

<<list-links "[tag[todo]!tag[SubProject]]">>

This will produce something like:

* Task-1.1.1.1
* Task-1.1.1.2
* Task-2.1.1.1

Unfortunately, I’m stuck here, because I don’t know how to include the project name. My goal is to have links (still pointing to the “leaf” task tiddlers, but with names like this:

* [Project-1] Task-1.1.1.1
* [Project-1] Task-1.1.1.2
* [Project-2] Task-2.1.1.1

Is it possible to be done in a trivial way, not involving complex programming with tree walking algorithms, which is scary for an newbie TiddlyWiki end user?

Since there could be an arbitrary depth of subprojects, you will need to either write a recursive filter to find the project name, or use a custom plugin that does it for you, for example:

With the taggingtree[] operator:

<$list filter="[tag[Project]]">

!! <$link/>

{{{ 
   [{!!title}taggingtree[]tag[todo]!tag[SubProject]]
   || $:/plugins/nico/projectify/ui/todo/TodoItem
}}}

This way you display the projects, then each tasks for each projects, even those in subprojects.

You can download taggingtree.js here: Recursive filter operators to show all tiddlers beneath a tag and all tags above a tiddler - #52 by Yaisog

I think you could do the same with the kin operator, I’m not sure which one would be the best for this use case tbh.

according to https://yaisog.tiddlyhost.com taggingtree is deprecated, but thanks for pointing me in the right direction. I just had to use the descendants filter instead in your example

1 Like