Christian Ziemski's
wikidPad Page


The todo-extension --- older page


While trying wikidPad as ToDo-List-Helper I found the following extensions at the wikidPad Project Home Page:


Because these extensions still didn't exactly fit my needs I wrote my own, loosely based on the above.

I mainly added date calculations, date sorting, a separate calendar page and a configuration section.
(The formulas for 'date calculation from week number' I found somewhere in the WWW (link to be added later here).)


Description

If a WikiWord beginning with "ToDo" is created or selected (viewed) it automatically collects
all 'todo' entries from all other pages and inserts them on that page (after a placemark).
Of course you can write any own text before that placemark without being touched.

If the wikiWord has additional characters after the "ToDo" like "ToDoPrivate"
those characters "Private" are used as filter (case sensitive or insensitive).
If there are spaces or underlines between "ToDo" and the following character (e.g "ToDo_Private")
these are ignored and so still the filter is "Private".
Only Todos containing that filter string are collected.
(Behavior depends on configuration option below.)

(Note: If the optional Calendar feature is enabled below it's "ToDo", "ToDoCalendarPrivate" in the example above.)

The todos are sorted by 'tag' the following way:

    1.) Completely untagged                                e.g. 'todo: shopping'

    2.) Tagged with special tags.                          e.g. 'todo.High: pay taxes'
	  Sort order and display see config section below

    3.) Tagged with a date                                 e.g. 'todo.2006-10-31: Halloween 2006'
	  Sorted by date (earliest first in list)
	  Marked as 'GONE', 'TODAY', 'n hours left', 'n days left' dependent on dayrange below
	  Displayed in different formats, dependent the same way.

	  The following date formats are recognized:
	      "yyyy-mm-dd"   # standard date                               e.g. 'todo.2006-10-31: Halloween 2006'
	      "mm/dd/yyyy"   # GB/US date
	      "dd.mm.yyyy"   # European date
	      "yyyy-Wnn-d"   # Week; the DayOfWeek "d" is Mon(1)-Sun(7)    e.g. todo.2007-W03-2:  Tuesday of 3rd week in 2007
	      "yyyy-Wnn"     # Week                                        e.g. todo.2008-W12:    Week 12 in 2008  (Monday)
	      "*-mm-dd"      # a date every year                           e.g. todo.*-10-31:     Halloween, in every year
	      "*-*-dd"       # a day every month (and every year)          e.g. todo.*-*-01:      Every month, the 1st day
	      "*-*-*"        # every day
              "CWnn"         # Calendar Week
              "KWnn"         # just for testing: German: Calendar Week

	  The dates with "*" are optimistic ones: if such a date is in the past
	  it is assumed as "for next year" and not as "GONE this year".

    4.) otherwise tagged                                       e.g. 'todo.family: holidays'


The following WikiDocumentAttributes will be added to that generated page (If there isn't already a custom [icon: ...] set, see configuration below):



Example

Since some pictures are able to describe better than many words here an easy example.
(The hardcopies are from an older version of wikidPad. So current ones look different.)

Imagine two wiki pages "FamilyBusiness" and "CarRelatedThings" with some data and todo tags on it:






Opening the wiki page "ToDo" now shows in Edit mode:
(In the lefthand tree view the items are sorted alphabetically, in the page view to right they are sorted by date.)




And the same in preview mode:




Configuration (optional)

At the beginning of the code there is a configuration section where you can change the behavior and display a bit.

        #************************************************************************************
        #   begin of configuration section
        #************************************************************************************

        # tags contain the (Tag, TagHeader, '') triples
        # TagHeaders are the descriptive headings that will be shown for each category.
        # UNTAGGED is a special one to collect the untagged "todo:"

        tags = [
                ('UNTAGGED',     '++++ Not yet tagged', ''),
                ('High',         '+++  HIGH!', ''),
                ('Next',         '++++ Next Actions', ''),
                ('ThisWeek',     '++++ This Week', ''),
                ('SomeDay',      '++++ SomeDay / Maybe', ''),
                ('TimeToTime',   '++++ From time to time', ''),
                ('Low',          '++++ Tagged as LOW', ''),
                ('VeryLow',      '++++ Tagged as Very LOW', ''),
               ]


        placemark  = "++++ ________auto-collected todos________"
        underline  = "_______"
        spacerline = "-" * 4
        bullet     = "   * "

        iconString        = '[icon: spanner]'

        colorStringNormal = '[color: black]'       # Colors for the ToDo entry in the tree
        colorStringNext   = '[color: orange]'      #
        colorStringToday  = '[color: red]'         #
        colorStringMissed = '[color: magenta]'     #

        notagHeading = "++++ "               # for unknown tagged entries
        dateHeading  = "++++ "               # for date entries far away (distance see below)
        dateHeadingX = "+++  "               # for date entries in near future or missed in past

        missedString = " ___ (+GONE+)"
        nowString    = " ___ !!! TODAY !!!"

        showWeekday   = True       # show weekday after dates
        weekdayFormat = " (%s,"    # %s is replaced by the weekday as in the array below,
                                   # together with the optional week number (see below) it gives e.g. " (Fri, W42)"

        weekdays      = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']  # English
        #weekdays     = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su']         # English
        #weekdays     = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So']         # German

        showWeeknumber   = True      # show weeknumber after dates
        weeknumberFormat = " W%02d)" # %02d is replaced by the weeknumber (2 digits with leading 0-padded)

        checkSearchString = 1      # 0 = no search string: ignore characters after 'ToDo'
                                   # 1 = case insensitive search string after 'ToDo'
                                   # 2 = case sensitive search string after 'ToDo'

        dayrange = 7               # to mark date entries in that range as "more important"
                                   # than the ones in "far" future

        showInfoPopup      = True  # about todos for today / missed ones
        infoPopupTimeDelta = 2     # number of minutes where no new popup is shown after last visit of ToDo page

        onlyRealTodos = True       # True = ignore done, wait, question etc.
                                   # False = all from wikidPads todo-like category

        setBookmark = True         # set the ToDo page [bookmarked=true] so it is listed in the Bookmark popup (Shift-Ctrl-B)

        realDatesLast = False      # False: sorting is: untagged - known tags - dates - newly tagged  (the default)
                                   # True:  sorting is: untagged - known tags - newly tagged - dates  (test for Jouni)

        realDatesSeparate = False  # False: all todos in one page: ToDo
                                   # True:  todos with real dates on a page "ToDoCalendar", all others on the normal page "ToDo"

        # The following feature works, but doesn't look nice, really! So better let it disabled...
        extendedLinks = False      # True  = create links with search capability on target page (only working in editor window!?)
                                   # False = create normal links

        #************************************************************************************
        #   end of configuration section
        #************************************************************************************



Installation


Note: Within the wikidPad help wiki this hook does nothing.



Files to download

The current one (same as the 20080123 version below): WikidPadHooks.py

Version history:
  [2008-01-23] WikidPadHooks.py-20080123 Some error handling to avoid problems on invalid dates
  [2007-12-06] WikidPadHooks.py-20071206 Fix: problems if onlyRealTodos==True and todos with ':' in their text
  [2007-10-22] WikidPadHooks.py-20071022 Fix: missing optional tags of date entries added on ToDoCalendar page
  [2007-10-20] WikidPadHooks.py-20071020 optional separated Calendar page // display weekday and week number for dates
  [2007-10-02] WikidPadHooks.py-20071002 todos sorted in every tag block // show other categories (done...) too // new config options setBookmark+extendedLinks
  [2007-07-27] WikidPadHooks.py-20070727 temporary fix (removed again): Problem with displayMessage of wikidPad 1.9 up to beta7.
  [2007-06-18] WikidPadHooks.py-20070618 Fix: Problem with multiple-tabs of wikidPad 1.9.
  [2007-06-16] WikidPadHooks.py-20070616 Fix: Tags like todo.sometext.2007-06-16 working now.
  [2007-01-31] WikidPadHooks.py-20070131 Usable for WikidPad 1.9 too now
  [2006-11-16] WikidPadHooks.py-20061116 Some new config values, color setting depending on delay, filter info
  [2006-11-10] WikidPadHooks.py-20061110 Fixed one: (bug found by aliudefba in the forum)
  [2006-11-02] WikidPadHooks.py-20061102 First published version


Known issues



If you would like to have a look at my future plans: simply visit the new ToDo-Extension - Beta page.