Added by Jonathan Nolen, last edited by Jonathan Nolen on Jul 16, 2007  (view change)

Labels:

confluence confluence Delete
Enter labels to add to this page:
Wait Image 
Looking for a label? Just start typing.
Name TaskList Improvements
Author(s)  
Priority Medium
Description Improve the [dynamicTaskList plugin].

Description

We have two (at least) task list macros, and neither of them are very good. We need to deprecate those two and replace them with a much better solution.

Features

Compatiblity with old macro

We need to look for the presence of any old-style data and upgrade it to this new format. So any time the macro renders finds an old-style markup like dynamictasklist, it should print a link that says "Upgrade this tasklist" Clicking that link should invoke an action that does the upgrade by extracting the metadata, formatting it properly and inserting it into the page. Then it should redirect back to the original page where the data will appear correctly.

Change UI

Make changes versioned

We'd like to make sure that all changes to a task-list are versioned, and we think the best way to accomplish that is to make sure that the tasklist stores all content inside the page, rather than in page metadata. Whenever someone makes a change to the tasklist using then UI, the macro makes an ajax request back to the server, and the server needs to write that data into the page in a tabular format in the macro body and then return success to the browser. If the user edits the page though the normal editor, then he is free to make changes to the text of the task list like normal, and the page save will write the change. An example:

{dynamictasklist}
|| Task       || Assignee || Reporter || Created  || Priority || Status || Completed
| Buy Milk    | [~jnolen] |  [~scott] |  01/01/07 |  1        |  0      |  
| Get Laundry | [~mike]   |  [~david] |  04/05/07 |  3        |  1      |  04/07/07 
{dynamictasklist}

Assignee should change to whomever closes the task, if different.

The pluging would have to be able to report errors in the event that the data get screwed up by a manual change. Authors would be able to step back in page history to recover from any data loss.

Allowing wiki markup

We should allow simple wiki-markup (bold, italic, linking, etc.) in the task descriptions. Probably a SubRenderer with RenderMode.INLINE should do the trick.

Cross-list drag & drop

Allow tasks to be dragged from one list on a page to another.

Fix task id generation

IDs are currently stronger than they were in the Dynamic Task List, but still need some improvement to support a multi-user environment. My current approach may not be compatible with the "write data to page approach," so I'll have to think on that a little yet. I switched the original approach used by the dynamic tasklist from using task descriptions as as IDs to using some more or less numeric IDs to simplify task addressing and to avoid some special character issues. It's probably not too much work to find another solution that's friendlier to persisting the data on the page, but there's currently a logical mismatch there, I think.

New Mockup

Later

  • Configuration UI

References

how do we vote on these wish lists?

This plugin, plus a glossary & tooltip plugin would be a definite add to the confluence library....

Adaptavist.com have an "Assignable Tasklist" plugin that will be released as open source as soon as we get time to put it in the Confluence Plugin Repository. It allows you to set assignee, notes, due date, etc., and also has a summary macro for building reports elsewhere within Confluence. We'll try and get it released in the next week or so (just been really busy and not had chance). Hassle us if we forget!

On the format for inpage storing would it be easier to have a nested {task} macro rather then reuse the piped table syntax?

e.g

{dynamictasklist}
{task:assignee=jnolen|reporter=scott|created=01/01/07|priority=1|status=0}
Buy Milk
{task}
{task:assignee=mike|reporter=david|created=04/05/07|priority=3|status=1|completed=04/04/07}
Get Laundry
{task}
{dynamictasklist}

This is a bit more verbose, but would probably be easier to parse and allows better multi line input for the task description.

I kinda of like the piped-table syntax, b/c then if the task macro ever gets borked, you still get a nice, readable table out of it.

Also, I are considering piggy-backing the tasklist off the dynamic-table plugin, so as to get sortablity and configurable columns in a future release, so this leaves the way clear for that.