Checklists Plugin

Name Checklists Macros
Vendor Comala Technology Solutions, Inc. (Website)
Authors
Homepage http://confluence.atlassian.com/display/CONFEXT/Checklists+Plugin
Issue Management http://developer.atlassian.com/jira/browse/CHK
Categories Content Macros
Version 1.4.0
Availability Confluence v2.3.3 to v2.9-m5
State Stable
Support Unsupported Plugins
License Freeware / Open Source (BSD)
Price Free
Release Docs n/a
Java API Docs n/a
Download Source http://www.comalatech.com/confluence/plugins/src/checklists-1.4.0-src.jar
Download JAR checklists-1.4.0.jar

Description/Features

A set of macros to generate checklist tables for a subset of pages (children of a given parent-page and/or filtered by a label). For each page, labels can be added/removed, values can be edited, and text segments can be added.

It provides a handy way to construct to-do lists, or manage the stages of a project. You could even use it to make an ad-hoc document workflow.

You can just jump to the Examples to see how the macros can be used

Attributes

Attributes are stored as metadata, so they can be access through the Metadata plugin.

Security

The macro check permissions to ensure the user is allowed to see the content and modify it.

Change log

All the changes made through the checklist are log and the history can be access through a macro.

Wiki segments

Wiki segments can be defined so they get rendered for each of the checklist's pages, allowing to use other plugins to produce powerful reporting.

Table of contents

Usage

Keywords

Parameters value can have any of the following keywords that will be replace when rendering the page:

Keyword Value
@user@ current user's name
@userfullname@ current user's full name
@self@ or title the title of the page owning the checklist
@creator@ the page creator's user name
@modifier@ the last modifier's user name
@any other value name@ the given metadata value in the page owning the checklist

{checklist}

Generates a checklist for a subset of pages. The rows are children pages of a given page (parent) and can be filtered by a label. The columns can be labels that are set/un-set for the pages, the excerpt or a text.

The columns of the checklist can also be defined using the {checklist-label}, {checklist-input}, {checklist-wikiinput}, {checklist-select}, {checklist-excerpt}, {checklist-include}, {checklist-wiki}, {checklist-metadata} macros.

parameter Mandatory? Default description
name or unnamed
first parameter
no current page's name the name of the checklist
parent no   the parent page, if not set, and there is no label set either, then the page containing the checklist will be used as such
label no   the label the selected must have
space no   the space to reduce the query to, when using label only and no parent
depth no 0 depth of the search for children ('0' for no limit)
childrenonly no false whether or not parent-children are to be included
sort no name How the table should be sorted: name to sort by name, created to sort by page creation date, or modified to sort by last modification date
checklabels no   a comma separated list of labels to be used to 'check' the pages
mutuallyexclusive no false whether or not the checklabels are mutually exclusive
excerpt-heading no   the heading for the excerpt column
comment no   the heading for a column to be used for comments
class no grid the style sheet (CSS) class to use for the table
pagelink no true whether or not to include a link to the pages as the first column of the table

{checklist-label}

Defines a column as a label. Every time a cell of this column is selected, the label will be added/removed to/from the referred page. See Example 4.

parameter Mandatory? Default description
heading or unnamed
first parameter
yes   The heading of the column
label no the heading The label to be used to 'check' the pages
width no   width of the column
readonly no false whether or not the column is read-only
class no   the style sheet (CSS) class to use for the cells

{checklist-input}

Defines a column as a text input. See Example 4.

parameter Mandatory? Default description
heading or unnamed
first parameter
yes   The heading of the column
cols yes   The maximum number of characters read
width no   width of the column
class no   the style sheet (CSS) class to use for the cells
readonly no false whether or not the column is read-only
sorttype no S Type of value to be used to sort the table by this column. Values could be any of A, C, D, F, I, S, as defined in columnTypes
store no rows Determines where to store the value. Use rows to store the values for this column into the pages representing each row (metadata value name is <Column Heading>), or checklist to store the values into the page containing the checklist (metadata value name is <Column Heading>.<Row page title>)

{checklist-wikiinput}

Defines a column as a wiki-text input. See Example 3.

parameter Mandatory? Default description
heading or unnamed
first parameter
yes   The heading of the column
cols yes   The number of columns in the text area when editing the value
rows no 1 The number of rows in the text area when editing the value
width no   width of the column
class no   the style sheet (CSS) class to use for the cells
readonly no false whether or not the column is read-only
sorttype no S Type of value to be used to sort the table by this column. Values could be any of A, C, D, F, I, S, as defined in columnTypes
store no rows Determines where to store the value. Use rows to store the values for this column into the pages representing each row (metadata value name is <Column Heading>), or checklist to store the values into the page containing the checklist (metadata value name is <Column Heading>.<Row page title>)

{checklist-select}

Defines a column as a selection (drop-down menu). The selection can be from a list of options, a list of labels or a list of users. See Example 5, Example 6 and Example 7.

parameter Mandatory? Default description
heading or unnamed
first parameter
yes   The heading of the column
uselabels no false instead of setting a metadata value, add the selected label
usersgroup no   instead of listing the value, use the given users group to select from a list of users. Use all for listing all the users
width no   width of the column
class no   the style sheet (CSS) class to use for the cells
readonly no false whether or not the column is read-only
sorttype no S Type of value to be used to sort the table by this column. Values could be any of A, C, D, F, I, S, as defined in columnTypes
store no rows Determines where to store the value. Use rows to store the values for this column into the pages representing each row (metadata value name is <Column Heading>), or checklist to store the values into the page containing the checklist (metadata value name is <Column Heading>.<Row page title>)
macro body     If no usersgroup is given, the options to select from have to be defined as part of the body. Each line of the body define an option. Each option could have a different value from the actual caption by defining it as <value>|<caption> see Example 5 and Example 6
If store is set to checklist and there is only one option to select from, then the column is handled as a checkbox (/). See Example 11

{checklist-wiki}

Defines a column as a wiki segment to be rendered for each of the pages on the checklist. See Example 8.

parameter Mandatory? Default description
heading or unnamed
first parameter
yes   The heading of the column and the metadata value name
width no   width of the column
class no   the style sheet (CSS) class to use for the cells
sorttype no S Type of value to be used to sort the table by this column. Values could be any of A, C, D, F, I, S, as defined in columnTypes
macro body     the wiki segment to be rendered for each page on the checklist

{checklist-excerpt}

Defines a column as the excerpt of each of the pages. See Example 3.

parameter Mandatory? Default description
heading or unnamed
first parameter
yes   The heading of the column
width no   width of the column
class no   the style sheet (CSS) class to use for the cells
sorttype no S Type of value to be used to sort the table by this column. Values could be any of A, C, D, F, I, S, as defined in columnTypes

{checklist-pagelink}

Defines a column as a link to each of the pages. See Example 15.

parameter Mandatory? Default description
heading or unnamed
first parameter
yes   The heading of the column
destination no view the link should go to (view or edit)
width no   width of the column
class no   the style sheet (CSS) class to use for the cells
sorttype no S Type of value to be used to sort the table by this column. Values could be any of A, C, D, F, I, S, as defined in columnTypes

{checklist-include}

Defines a column as the entire content of each of the pages. See Example 9.

parameter Mandatory? Default description
heading or unnamed
first parameter
yes   The heading of the column
width no   width of the column
class no   the style sheet (CSS) class to use for the cells
sorttype no S Type of value to be used to sort the table by this column. Values could be any of A, C, D, F, I, S, as defined in columnTypes

{checklist-metadata}

Defines a column as a lookup of existing metadata for each page. See Example 4.

parameter Mandatory? Default description
heading or unnamed
first parameter
yes   The heading of the column and the metadata value name
width no   width of the column
class no   the style sheet (CSS) class to use for the cells
sorttype no S Type of value to be used to sort the table by this column. Values could be any of A, C, D, F, I, S, as defined in columnTypes

{checklist-column}

This macro is being deprecated. Use {checklist-label}, {checklist-excerpt} or {checklist-wikiinput} instead.
parameter Mandatory? Default description
heading yes   Heading of the column
type yes   type of column. It can be any of label, text or excerpt
label yes, if
type=label
  the label to be used to 'check' the pages
rows yes, if
type=text
  rows when editing text area
cols yes, if
type=text
  cols when editing text area
width no   width of the of column
readonly no false whether or not the column is read-only

{checklist-attribute}

This macro allows to Display the value of an attribute set on a page through a checklist. See Example 6.

parameter description
page (optional) title of the page to lookup. If none set, then the current page will be used
attribute Name of the attribute (column) set in the checklist

{checklist-log}

Generates a checklist change report for a given page. See Example 10.

parameter Mandatory? Default description
page no current page The title of the page to generate the report from
maxentries no 0 (no limit) The maximum number of entries to report (0 for no limit)
maxentriespername no 0 (no limit) The maximum number of entries per value name (0 for no limit)
mostrecentfirst no false whether or not display the most recent entry first
format no detailed Defines the way each of log entries is to be reported:
date : display only the date
dateanduser: display the date and use
detailed: display all the available information
newvalue: display only the new value
oldvalue: display only the last value
simple: display date, user and new value in a single line
user: display only the user
useranddate: display the user and date
remaining
unnamed parameters
no   each remaining unnamed parameters in the macro indicate what name values are to be included in the report. If none set, the report will include all the value names

Examples

Lets say we have a page Animals as parent of the pages Dog, Cat, Shark, Elephant, Turtle, Salmon, Snake, Whale, Frog, Toad, Lizard, Platypus and Eagle.

Example 1

{checklist:name=The animals| parent=Animals|checklabels=mammal, oviparous, pets}

All the children of Animals are shown. The checks are for the labels mammal, oviparous and pets. Whenever any the check is selected, the appropriate label is added/removed to/from the page on the row.

Example 2

Lets add the excerpt of each page and restrict to show only the children of Animals that have the label oviparous and make the check labels bird, fish, amphibian or reptile mutually exclusive.

{checklist:name=Oviparious|parent=Animals|excerpt-heading=Classification|
    label=oviparous|checklabels=fish, amphibians, reptiles, birds|mutuallyexclusive=true}

Note that mutually exclusive labels are handled as a drop down menu.

Example 3

Lets restrict to show only the children of Animals that have the label pets, and add a comment for each page on the checklist:

{checklist:name=The pets| parent=demo:Animals| label=pets| excerpt-heading=Classification| comment-heading=Comments}

The values can be an actual wiki segment!

The same checklist can be created using {checklist-excerpt} and {checklist-wikiinput} to provide more detail over the columns (width, rows and cols).

{checklist:name=The pets| parent=Animals| label=pets}
    {checklist-excerpt:Classification|width=10%}
    {checklist-wikiinput:Comments|rows=5|cols=20|width=50%}
{checklist}

Example 4

The heading of a label check (Mammal?) can be different from the actual label name (mammal) using the {checklist-label} macro. Because the Comments (set in the previous example) are stored as metadata, they can be accessed using the {checklist-metadata} macro. Also, you can define plain text input using the {checklist-input} macro.

{checklist:name=The pets names|parent=Animals|label=pets}
   {checklist-label:Mammal?|label=mammal}
   {checklist-metadata:Comments}
   {checklist-input:Common pet names|cols=20}
{checklist}

Example 5

You can define a column as a selection. Lets say we need to define whether or not the oviparious are swimmers:

{checklist:name=Swimmers|parent=Animals|label=oviparous}
   {checklist-excerpt:Classification|width=10%}
   {checklist-select:Can swim?}
      yes
      no
   {checklist-select}
{checklist}

Then, the value can be accessed later using {checklist-attribute} or any of the Metadata Plugin macros:

Eagle can swim? {checklist-attribute:page=eagle|attribute=Can swim?}
Shark can swim? {metadata-from:shark|Can swim?}

Will render as:

Eagle can swim? no
Shark can swim? yes

Example 6

A selection could use labels instead of metadata values. Similar to example 2, here the actual labels used are bird, fish, amphibian or reptile but the caption can be different:

{checklist:name=The oviparious|parent=Animals|label=oviparous}
   {checklist-select:Type|uselabels=true}
       fish|It's a fish
       amphibians|It's an amphibian
       reptiles|It's a reptile
       birds|It's a bird
   {checklist-select}
{checklist}
Make sure the labels are in lowercase, otherwise you could have problems displaying the existing value (see CHK-14)

Example 7

Users can also be selected:

{checklist:name=Pets on the team|parent=Animals|label=pets}
   {checklist-select:Who owns one?|usersgroup=all}
{checklist}

Example 8

Arbitrary wiki segments can also be added to the checklist to be rendered for each page. Lets say we know each of the Animals' pages has a picture (photo.jpg). Using the Linking plugin we can also create a link for editing each page.

{checklist:name=Pet's photos|parent=Animals|label= pets}
   {checklist-wiki:Photo}
       !photo.jpg!
   {checklist-wiki}
   {checklist-wiki:Edit page}
      {link-to:page edit}Edit page{link-to}
   {checklist-wiki}
{checklist}

Example 9

You can actually include the entire content for each page. Use with caution it can get really messy.

{checklist:name=All the pet's pages|parent=Animals|label= pets}
   {checklist-include:Full page}
{checklist}

Example 10

You can view the log of changes made through the checklist using the {checklist-log} macro:

{checklist-log:page=dog}

Will render as:

If we want see who made the latest change on the Comments and when (useful when including as part of a {checklist-wiki} body), we can use:

{checklist-log:format=useranddate|maxentries=1|Comments}

Will render as:

Example 11

A more sophisticated checklist used for a design review. Each of the evaluation criteria is defined as child of the page qa-goals. The values are stored into the actual checklist and nothing is changed on the criteria pages.

{checklist:name=Design review checklist|parent=qa-goals}
  {checklist-excerpt:Description}
  {checklist-select:Reviewed?|store=checklist}
      reviewed_sprint_1
  {checklist-select}
  {checklist-wikiinput:Evidence?|width=20%|rows=3|cols=20|store=checklist}
  {checklist-wikiinput:Comments|width=40%|rows=5|cols=50|store=checklist}
{checklist}

Example 12

Using the Linking plugin we can create a simple issues list:

{link-page:template=Issue|parent=@self}Click to add a new issue{link-page}
{checklist}
   {checklist-excerpt:Description}
   {checklist-label:Active?|label=active}
   {checklist-select:State|uselabels=true}
        decision-made|Decision made
        no-decision|No decision made
        retired|Retired
   {checklist-select}
   {checklist-select:Raised by|usersgroup=all}
   {checklist-select:Assigned-to|usersgroup=all}
   {checklist-wikiinput:Comments|cols=20|rows=5}
   {checklist-wiki:Last commented by}
        {checklist-log:format=useranddate|maxentries=1|Comments}
   {checklist-wiki}
{checklist}

Example 13

Using Keywords to filter pages based on the current user

{checklist:Tasks for @userfullname@|parent=Tasks|label=user_@user@}
    {checklist-label:active}
{checklist}

Note that his example assumes that alphanumerical user names (i.e. johndoe would work but john.doe would not).

Example 14

Using Keywords to set the page owning the page as parent (and using label filter) in a template

{checklist:Features|parent=@self|label=active}
   {checklist-excerpt:Description}
{checklist}

Example 15

Not yet... extremely busy right now, but I will include a nice example to demonstrate how you can beautify (even more) a checklist

Installation

You need to have System Administrator permissions in order to install and configure plugins.

Installing and Configuring Plugins using the Plugin Repository Client

If the plugin you wish to install is listed in the Confluence Plugin Repository, you can use the Confluence Repository Client to install it. Just find the plugin in the list and click the 'install' link. There's more information in Installing and Configuring Plugins using the Plugin Repository Client.

Installing and Configuring Plugins Manually

If the plugin you wish to install is not listed in the Confluence Plugin Repository, you can still install it by uploading it to your Confluence site:

  1. In the 'Administration' section of Confluence, click the Plugin Repository link.
  2. Click the 'Upload' tab.
  3. Use the 'Browse' button to find the plugin jar you wish to install.
  4. Select the jar file and click 'Open'.
  5. The plugin will be uploaded from your machine to Confluence, and will be automatically installed.

There's more information in Installing and Configuring Plugins manually.

RELATED TOPICS

Removing malfunctioning plugins

Version History

Version Release notes
1.4.0 Release notes
1.3.0 Release notes
1.2.1 Release notes
1.2 Release notes
1.1.2 Release notes
1.1.1 Release notes
1.1 Release notes
1.0.1 Release notes

Issues

Acknowledgments

  • This macro uses portions of the MetadataUtils of the Metadata Plugin
  • The table sorting is done using a modified version of the SortTable.js script of the Table Plugin

Screenshots

Labels

comalatech comalatech Delete
checklist checklist Delete
plugin plugin Delete
codegeist_2007_confluence codegeist_2007_confluence Delete
confluence_repository_client confluence_repository_client Delete
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.
  1. May 28, 2007

    Fabio Paiano says:

    Hello, Really nice plugin, that has already tested successfully at our site. I ...

    Hello,

    Really nice plugin, that has already tested successfully at our site. I have a doubt however...
    In example 4, above, how were the text values of column "Comments" set? After all, it's a read-only attribute.

    Am I missing something?
    By the way, if there's a way to set this value from within each page, that would suit our needs fine!

    Thanks

    1. May 28, 2007

      Roberto Dominguez says:

      The "Comments" column was set on example 3.5 ;) You are right, it is not clear. ...

      The "Comments" column was set on example 3.5 You are right, it is not clear. It was actually set through another checklist. I just wanted to illustrate the fact that you can define read-only columns.

      Yeah, setting values within pages would be nice... I am working on version 1.1 right now (soon to be release) but might be able to come up with something on 1.2...

  2. Jun 01, 2007

    Brian M. Thomas says:

    Now, if only I could paste generic metadata (as from the Metadata plugin) via th...

    Now, if only I could paste generic metadata (as from the Metadata plugin) via this macro, instead of only plain labels, this would be extremely powerful.

    1. Jun 07, 2007

      Roberto Dominguez says:

      Done on version 1.1 see the {{\{checklistmetadata\}}} and {{\{checklistwiki\}}} ...

      Done on version 1.1 see the {checklist-metadata} and {checklist-wiki} macros. Also, all the values (with the exception of labels, of course) are stored as metadata, so they can be used in the metadata reports.

  3. Jun 06, 2007

    Brian M. Thomas says:

    This comes as close as any plugin I've seen so far to allowing me to create a hi...

    This comes as close as any plugin I've seen so far to allowing me to create a hierarchical topic index of all pages. It's very much like tagging, except that many users want a traditional hierachical index rather than random tagging.

    What I want to do is:

    • Create a live template to display a topic index, where the page name is the topic name:
      • provide a link to go up to the parent topic
      • list all child pages, which represent subtopics
      • list all pages whose topic attribute matches the current topic
      • provide a link to add a subtopic to the current topic
      • provide a form to add the current topic to pages
    • Provide a page to add topics to pages
    • Provide a bookmarklet to assign topic[s] to the current page

    What I don't yet see how to do:

    • select pages for the checklist based on checklist attributes or labels (or the absence thereof)
    • select pages from multiple spaces, not just children of a given page.
    1. Jun 07, 2007

      Roberto Dominguez says:

      I don't know if I fully understand exactly what you want to do, but I made some ...

      I don't know if I fully understand exactly what you want to do, but I made some changes in 1.1 that could help you getting closer.

      try something like

      {checklist:label=dalabel}

      That will search now all pages (in all spaces) containing dalabel.

      Let me know if that works.

  4. Jun 14, 2007

    Alex W. Lulin says:

    Can I write something like: It provides a handy way to construct todo l...

    Can I write something like:

    {checklist:label=task&label=NOT done}
     {checklist}

    It provides a handy way to construct to-do lists, or manage the stages of a project. You could even use it to make an ad-hoc document workflow.

  5. Jun 16, 2007

    Mike Herrick says:

    I am trying to use the excerpt feature

    I am trying to use the excerpt feature.

    What am I doing wrong? I must be misunderstanding what it should do. I thought it would excerpt a section of the pages (like a h2. section). I also tried using meta data. This doc isn't very clear on what it excerpts (or I am missing it).

    Thanks for your help!

    1. Jun 18, 2007

      Roberto Dominguez says:

      have a look at the DOC:Excerpt Macro. You have to have an excerpt on the pages o...

      have a look at the Excerpt Macro. You have to have an excerpt on the pages of the checklist for the feature to work.

  6. Jun 22, 2007

    Peter R. says:

    How resource intensive is this plugin? I've got some users requesting it but we'...

    How resource intensive is this plug-in? I've got some users requesting it but we're battling a performance issue right now. If impact is minimal I'd like to install it so that they can start testing it. Any feedback is welcome.

    Thank you.

    1. Apr 25

      Roberto Dominguez says:

      The plugin is not that intensive by itself... however it is possible for somebod...

      The plugin is not that intensive by itself... however it is possible for somebody to list all the pages in a checklist:

      {checklist:parent=Home|depth=0}
            ....
         {checklist}

      Or even worse, rendering the whole space in a single page :

      {checklist:parent=Home|depth=0}
            {checklist-include:Da Page}
             ...
         {checklist}

      So, pretty much is up to how much you trust your users... As of now, I would not recommend it for wide-open installation. In a future version, I will integrate with the Macro Security Plugin (or something like that) to allow granular permissions on usage.

      Regards,

      Roberto

      1. Jul 05, 2007

        Peter R. says:

        Thanks for the follow up. Our internal user base is pretty good and we'll be set...

        Thanks for the follow up. Our internal user base is pretty good and we'll be setting up templates for them to use these macros so we'll probably be ok. I'll keep an eye on it.