OmniFocus Automation - Kanban Board

FYI, here’s a link to the Omni Automation website version of the Kanban plug-in inspired by this conversation!

https://omni-automation.com/omnifocus/plug-in-kanban-board.html

Thank you for pulling this into Omni Automation, Sal! Any chance you have the images in colors that work with light mode, i.e. non-gray?

Ah. Right. How about if I upload the icon files and everyone can change them the way they like? I’ve added a dark version of the icon source files (PNG) to the webpage!

https://omni-automation.com/omnifocus/plug-in-kanban-board.html

Kanban-Dark-Icons.zip (114.8 KB)

1 Like

Thank you for taking the time to add those dark icons, sir!

@Sal, do you have a strong preference for offering this as two scripts rather than one ?

I notice that you have both:

  • Setup Script
  • Assign as “To Do”

but the second script:

  1. not only reproduces most of the checking work of the setup-script (to be sure that the expected tags are there), but also
  2. will sometimes fail, offering an error message (if tags are deleted, or were never created), referring users to the first script.

Given that the error checking of the second largely duplicates the work of the first, might it not protect users from a bit of complexity to simply combine the functions of each ?

e.g. with a library function for building / checking arbitrary nests of tags:

Build or check a tag nest
// checkedTagTree :: (String, NameNest) -> Tag
const checkedTagTree = nameNest => {
    const check = parent =>
        ([tagName, subTags]) => {
            const
                namedTag = parent.tagNamed(tagName) || (
                    new Tag(tagName, parent.ending)
                );

            return (
                // ------ EFFECTS IN OMNIFOCUS -------
                // Tag position among peers normalised,
                // unless this is a top-level tag.
                //
                // (The right side of an && expression is
                // only evaluated if the left side 
                // evaluates to true).
                (parent !== globalThis) && moveTags(
                    [namedTag], parent
                ),

                // Descendant tags found or created
                // and ordered recursively.
                subTags.forEach(check(namedTag)),

                // ---- AND VALUE IN JAVASCRIPT -----
                // A reference to the checked tag tree.
                namedTag
            );
        };

    return check(globalThis)(nameNest);
};

You could avoid error handling with a preliminary check / repair in each tagging script:

writing things like:

const
    kanbanTag = checkedTagTree(
        ["Kanban",
            [
                ["To Do", []],
                ["In Progress", []],
                ["Waiting", []],
                ["Done", []]
            ]
        ]
    ),
    todoTag = kanbanTag.tagNamed("To Do"),
    peerTags = kanbanTag.flattenedChildren;

Just discovered the Kanban plug-in (v 1.1). It’s wonderful.

Display Board works differently on Mac vs iOS, and I’m wondering if it’s by design or a bug.

On Mac, Display Board shows all 4 Kanban tags by group (as expected).

On iOS, Display Board shows just the To Do tag. Anyone else experience this?