[All Adaptavist Apps]

Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

{builder-show} Macro

Description

The builder-show macro is

Excerpt

used to show content in specific contexts, modes and other filters

...

Usage

Code Block

{builder-show:mode=view|context=page|label=meetings|metadata=mykey:myvalue}
stuff to show
{builder-show}

...

Property

Required

Default

Notes

Theme Panels Only

Ver

decorator

(error)all decorators

n/a

Only show the content when a specific decorator us being used, eg. "printable", etc.

(tick)

 

action

(error)all actions

n/a

Only show the content for specific action(s), eg. "viewpage". NB: The ".action" part of the action name should not be included.

(question)(tick)

3.0

context

(error)all contexts

n/a

Only show the content for specific context(s), eg. "page", "global", etc.

(tick)

 

mode

(error)

all modes

Only show the content for specific modes, eg. "view", "edit", etc.

(tick)

 

space

(error)

n/a

Only show the content if a specific space (referred to by the Space Key) exists.

 

 

pagespacekey

(error)

n/a

current space

The space against which permission checks will be made. Default is current spaceOnly show the content if a specific page (referred to by the page title) exists.

 

 

titlepagetitle

(error)

n/a

current page

the page against which permission checks will be made. Default is current pageOnly show the content if the current page has a specific title

 

 

labelexists

(error)

n/a

Only show the content if the the current location (page, news, etc) has the specified label(s), eg. "my:favourite", "meetings", etc.a specific page (referred to by the page title) exists. @parent can be used to show data if the page is not at the root level, @child can be used to show data if the page has children.

 

 

spaceLabelspluginkey

(error)

n/a

The key of a plugin which must be enabled for the content to be shown

 

 

hastitle

(error)

n/a

Only show the content if the current page has a specific title

 

 

label

Only show the content if the the current space has the specified label(s), eg. "meetings", etc.

 

3.0

teamLabels

(error)

n/a

Only show the content if the the current space location (page, news, etc) has the specified team label(s), eg. "sales,marketingmy:favourite", "meetings", etc.

 

3.0 

metadataspacelabel

(error)

n/a

Metadata associated with Only show the content if the the current location in the format: "myKey1:myValue1space has the specified label(s), eg. "meetings", etc.

 

3.0 

userteamlabel

(error)

All users

n/a

Only show the content if the the current space has the specified team label(s), eg. "sales,marketing", etcA comma separated list of usernames. Use @anonymous for anonymous users only.

 

3.0 

groupmetadata

(error)

n/a

Metadata associated with the current location in the format: "myKey1:myValue1, myKey1:myValue1, etc". when checking for a key with a specific value. To check for the existance of metadata with any value supply a commas separated list of key names, eg: "mykey1, mykey2, mykey3" or mix & match "mykey1, mykey2:myvalue2"

 

 

user

(error)

n/a

Matches against the current user (NB: modified by withuser) - A comma separated list of usernames. Use @anonymous for anonymous users only, @creator for the creator of the current space, @author for the author of the current page.

All groups

A comma separated list of user groups. Use @anonymous for anonymous users only.

 

3.0

permission

(error)

Any permission

A comma separated list of permissions:

  • view - user has view permission
  • comment - user can add comments
  • createpage - user can create pages
  • createnews - user can create news
  • edit - user can edit pages or news
  • remove - user can remove (delete) pages, news or comments
  • attach - user can attach files
  • export - user can export pages or the space
  • createspace - user can create spaces
  • spaceadmin - user is a space admin
  • siteadmin - user is a site admin

     

    3.0

    recursewithuser

    (error)

    false

    @current

    username that user/group/permission checks should be run against. This includes @anonymous, @creator, @author, @current

    Should parent pages (if applicable) be checked for title, labels and metadata?

  • false - only check the current page (default)
  • true - also check parent pages, eg. does the current page or any of it's parents have the specified label, etc.

     

    3.0

    While none of the parameters are mandatory, you must specify at least one of them for this macro to work.

    You can specify multiple values for any parameter, for example:

    Code Block
    
    {builder-show:mode=view,edit|context=page,blogpost}
    stuff to show
    {builder-show}
    

    In the example above, "stuff to show" would only be shown if the content is being shown in "view" or "edit" mode and is also either a "page" or "blogpost".

    Contexts, Modes and Decorators

    You can determine the context and mode for any page by viewing the page source using your browser. A HTML comment output at the top of all pages shows the context and mode for each page.

    ...

    If you view the HTML source of this web page you'll see the following:

    No Format
    
    <!-- main.vmd
      themebuilder : 'com.adaptavist.confluence.sitebuilder.SiteBuilderVelocityHelper@524c9770'/'$themebuilder.initialise'
      spaceKey : 'USERGUIDE'
      pageId : '10583'
      currentURL : '/pages/viewpage.action?spaceKey=USERGUIDE&title=builder-show+macro&focusedCommentId=11666379'
      contextPath : ''
      spaceName : 'User Guides'
      decorator : '$decorator'
      printable : 'false'
      mailId : '$mailId'
      mode : 'view'
      context : 'page'
    -->
    

    2.2

    group

    (error)

    n/a

    A comma separated list of user groups that the current user (NB: modified by withuser) should be a member of

     

    3.0

    permission

    (error)

    n/a

    A comma separated list of permissions:

    • view - user has view permission
    • comment - user can add comments
    • createpage - user can create pages
    • createnews - user can create news
    • edit - user can edit pages or news
    • remove - user can remove (delete) pages, news or comments
    • attach - user can attach files
    • export - user can export pages or the space
    • createspace - user can create spaces
    • spaceadmin - user is a space admin
    • siteadmin - user is a site admin

     

    3.0

    recurse

    (error)

    false

    Should parent pages (if applicable) be checked for title, labels and metadata?

    • false - only check the current page (default)
    • true - also check parent pages, eg. does the current page or any of it's parents have the specified label, etc.

     

    3.0

    restriction

    (error)

    n/a

    display content if the page has a restriction in place (none/view/edit/vieworedit/viewandedit - recursable)

     

    3.0

    useragent

    (error)

    n/a

    A comma separated list of tokens to match against the user agent string of the requesting browser.

    (error)

    3.2.1

    attachment

    (error)

    n/a

    comma separated list of filenames, one of which must be attached to the current page for the content to be displayed.
    NB: This parameter is only processed if context is a page or a blogpost.

    (error)

    3.2.2

    olderthan

    (error)

    n/a

    Content is shown if the current page was modified before the given time period from the current date. The date is shown in this format: olderthan=1y6m1d1h (year/month/day/hour)

     

    3.3.0

    newerthan

    (error)

    n/a

    Content is shown if the current page was modified after the given time period from the current date. The date is shown in this format: newerthan=1y6m1d1h (year/month/day/hour)

     

    3.3.0

    flag

    (error)

     

    Content is shown if one or more of the specified flags are set. See Working with Flags for more details.

    3.3.6

    notflag

    (error)

     

    Content is shown if none of the specified flags are set. See Working with Flags for more details.

    3.3.6

    While none of the parameters are mandatory, you must specify at least one of them for this macro to work.

    You can specify multiple values for any parameter, for example:

    Code Block
    {builder-show:mode=view,edit|context=page,blogpost}
    stuff to show
    {builder-show}
    

    In the example above, "stuff to show" would only be shown if the content is being shown in "view" or "edit" mode and is also either a "page" or "blogpost".

    Contexts, Modes and Decorators

    You can determine the context and mode for any page by viewing the page source using your browser. A HTML comment output at the top of all pages shows the context and mode for each page.

    Expand
    View example...
    View example...

    If you view the HTML source of this web page you'll see the following:

    No Format
    <!-- main.vmd
      themebuilder : 'com.adaptavist.confluence.sitebuilder.SiteBuilderVelocityHelper@524c9770'/'$themebuilder.initialise'
      spaceKey : 'USERGUIDE'
      pageId : '10583'
      currentURL : '/pages/viewpage.action?spaceKey=USERGUIDE&title=builder-show+macro&focusedCommentId=11666379'
      contextPath : ''
      spaceName : 'User Guides'
      decorator : '$decorator'
      printable : 'false'
      mailId : '$mailId'
      mode : 'view'
      context : 'page'
    -->
    

    You can specify multiple contexts and modes by separating them with commas as shown in the usage example earlier. For the macro content to show, all contexts and modes specified must match.

    Examples

    Expand
    Display content on news items
    Display content on news items

    To display some content only on news items (blogposts), you must use the macro within a panel in the Builder theme:

    Code Block
    {builder-show:context=news}
    {menulink:news}Back to News Summary{menulink}
    {builder-show}
    
    Expand
    Display content on pages and news items
    Display content on pages and news items

    To show something in multiple contexts, simply separate them with commas:

    Code Block
    {builder-show:context=page,blogpost}
    something to show
    {builder-show}
    
    Expand
    Display content in edit mode
    Display content in edit mode

    When you change the view of something, eg. look at the normal view or editable view, the "mode" changes and you can take advantage of this to customise your theme depending on which mode is currently active. For example, if you only want to show something when it's being edited (eg. editing a page or news item), use the following:

    Code Block
    {builder-show:mode=edit}
    something to show
    {builder-show}
    

    You can show something in multiple modes by separating them with commas:

    Code Block
    {builder-show:mode=edit,view}
    something to show
    {builder-show}
    
    Expand
    Specific modes within specific contexts
    Specific modes within specific contexts

    If you only want to show something in view mode within the context of a page, use the following:

    Code Block
    {builder-show:mode=view|context=page}
    something to show
    {builder-show}
    

    When more than one parameter of the macro is specified, both parameters must match so in the example above the user must be looking at a page context in view mode.

    You can specify multiple modes and contexts, for example:

    Code Block
    {builder-show:mode=view,edit|

    You can specify multiple contexts and modes by separating them with commas as shown in the usage example earlier. For the macro content to show, all contexts and modes specified must match.

    Examples

    Expand
    Display content on news itemsDisplay content on news items

    To display some content only on news items (blogposts), you must use the macro within a panel in the Builder theme:

    Code Block
    
    {builder-show:context=news}
    {menulink:news}Back to News Summary{menulink}
    {builder-show}
    
    Expand
    Display content on pages and news itemsDisplay content on pages and news items

    To show something in multiple contexts, simply separate them with commas:

    Code Block
    
    {builder-show:context=page,blogpost}
    something to show
    {builder-show}
    -show}
    

    In the example above, the content would be shown if the user is looking at either a "page" or a "blogpost" (news item) that must also be in either the "view" or "edit" mode.

    Expand
    Display content in edit modeDisplay content in edit modebased on UserAgent
    Display content based on UserAgent

    You can use the useragent parameter to check for certain sub-strings such as browser names and operating systems in the user agent string. This could be used to tailor content to specific devices such as mobile phones.
    Notice in the following code that you can provide a comma separated list of tokens to be tested for. This acts like an OR, if any of the tokens match then the enclosed code will be rendered.

    Code Block
    {builder-show:useragent=Firefox,Opera}
    You are using FireFox or Opera!

    When you change the view of something, eg. look at the normal view or editable view, the "mode" changes and you can take advantage of this to customise your theme depending on which mode is currently active. For example, if you only want to show something when it's being edited (eg. editing a page or news item), use the following:

    Code Block
    
    {builder-show:mode=edit}
    something to show
    {builder-show}
    

    You can show something in multiple modes by separating them with commasBy combining with the use-layout macro you can switch to a specific layout.
    For example suppose you have created a layout for the iPhone.
    Do the following on your home page and subsequent page will use your layout:

    Code Block
    
    {builder-show:modeuseragent=edit,view}
    something to showiphone}
    {use-layout:IPHONE_LAYOUT|latch=true}
    {builder-show}
    
    Expand
    Display content based on labels
    Display content based on labels

    You can display content if the current location has one or more of the specified labels

    Specific modes within specific contextsSpecific modes within specific contexts

    If you only want to show something in view mode within the context of a page, use the following:

    Code Block
    
    {builder-show:mode=view|context=page}
    something to showlabel=my:favourite,meetings}
    This stuff is either in my favourites list or something to do with meetings!
    {builder-show}
    

    When more than one parameter of the macro is specified, both parameters must match so in the example above the user must be looking at a page context in view mode.

    You can specify multiple modes and contexts, for example:

    Beware! Most people assume that only pages and news articles can have labels, but this is not the case. When viewing space-level pages that aren't normal content pages or news articles, for example when viewing the space labels or even space admin, this macro uses any defined space labels and even team labels.

    Expand
    Displaying content if a space exists
    Displaying content if a space exists

    You can show content only if a space exists by specifying it's space key as follows:

    Code Block
    Code Block
    
    {builder-show:mode=view,edit|context=page,blogpost}
    something to showspace=ACCOUNTS}
    Here's some info about the accounts space, but you'll only see this
    if you have privileges to access the accounts space.
    {builder-show}
    

    In the example above, the content would be shown if the user is looking at either a "page" or a "blogpost" (news item) that must also be in either the "view" or "edit" modeAs you can see, this is ideal for customising content based on which spaces a user has privilegs to access.

    Expand
    Display content based on labelsexistence of a page
    Display content based on labelsexistence of a page

    You can display content if the current location has one or more of the specified labelsonly if a specific page exists:

    Code Block
    
    {builder-show:labels=my:favourite,meetings}
    This stuff is either in my favourites list or something to do with meetings!page=My Page}
    {include:My Page}
    {builder-show}
    

    Beware! Most people assume that only pages and news articles can have labels, but this is not the case. When viewing space-level pages that aren't normal content pages or news articles, for example when viewing the space labels or even space admin, this macro uses any defined space labels and even team labels.

    In the example shown above, we only include the page if it exists. This hides the nasty error message that the include macro generates if that page does not exist. While it might seem a little strange to only show things if a specific page exists (especially considering you know the title of that page), it's extremely useful in scenarios where you are using templates and only want to show content or links if a specific page exists within the current space.

    Expand
    Display content if the page has a parent
    Display content if the page has a parent
    Expand
    Displaying content if a space existsDisplaying content if a space exists

    You can show content only if a space exists by specifying it's space key as followsthe current page has a parent page using the following notation:

    Code Block
    
    {builder-show:spacepage=ACCOUNTS@parent}
    Here'sThis some info about the accounts space, but you'll only see this
    if you have privileges to access the accounts space.
    {builder-show}
    

    As you can see, this is ideal for customising content based on which spaces a user has privilegs to access.

    page has a parent page!
    {builder-show}
    

    This is useful because you often want to include additional navigation on pages that have a parent page, for example you might want to include the scrollbar macro to show a linear navigation bar.

    Pages which don't have a parent are:

    • The space homepage
    • Orphan pages (pages within a space that don't have a parent)
    Expand
    Display content for specific page titles
    Display content for specific page titles

    You can display content if the current page has a specific title, for example:

    Code Block
    {builder-show:title=My Homepage}
    Hi all, this must be my home page because it's title is "My Homepage"!
    Expand
    Display content based on existence of a pageDisplay content based on existence of a page

    You can display content only if a specific page exists:

    Code Block
    
    {builder-show:page=My Page}
    {include:My Page}
    {builder-show}
    

    In the example shown above, we only include the page if it exists. This hides the nasty error message that the include macro generates if that page does not exist. While it might seem a little strange to only show things if a specific page exists (especially considering you know the title of that page), it's extremely useful in scenarios where you are using templates and only want to show content or links if a specific page exists within the current space.

    Expand
    Display content if the page has a parentDisplay content if the page has a parent

    You can show content only if the current page has a parent page using the following notation:

    Code Block
    
    {builder-show:page=@parent}
    This page has a parent page!
    {builder-show}
    

    This is useful because you often want to include additional navigation on pages that have a parent page, for example you might want to include the scrollbar macro to show a linear navigation bar.

    Pages which don't have a parent are:

    • The space homepage
    • Orphan pages (pages within a space that don't have a parent)
    Expand
    Display content for specific page titlesDisplay content for specific page titles

    You can display content if the current page has a specific title, for example:

    Code Block
    
    {builder-show:title=My Homepage}
    Hi all, this must be my home page because it's title is "My Homepage"!
    {builder-show}
    

    This can come in handy if you are using templates to generate content and want to show something based on the page title.

    Another use is if users are constantly using a page title that causes problems, for exmaple they might call a page "Meetings" and you want them to call it "yyyy/mm/dd - Meeting with x, y, z") - as such you could add this to the Title panel within theme configuration:

    Code Block
    
    {builder-show:title=Meeting}
    You muppet! Use a more descriptive page title that includes
    the date (and time if appropriate), type of meeting and who
    was involved, etc.
    {builder-show}
    

    OK, you might not want to be that harsh in explaining to users that "Meeting" isn't a great page title and that they should use something more descriptive, but you get the general idea.

    Another use is to add labels to pages based on their title:

    Code Block
    
    {builder-show:title=Home}{add-label:home-page}{builder-show}
    

    Simply add that to the Header panel in theme config and any page called "Home" will get a label of "home-page" added to it thanks to the add-label macro. This is useful because it allows you to search all home pages within the site!

    Expand
    Displaying content based on metadataDisplaying content based on metadata

    Enter a list of metadata keys or metadata key:value pairs, if the metadata is found then the item will be shown/hidden. Ths check is recursable.

    CSS Customisation

    Not applicable for this macro.

    Hints and Tips

    You can use this macro, and the associated builder-hide macro to customise navigation and panel content depending on what the user is looking at.

    When using either the mode, context or decorator parameters, remember that they only work if used within a panel of the Builder theme. If you put them inside a normal page, etc., they won't work. Even if you use the move-to macro to move something from a page in to a panel, it still won't work - the mode, context and decorator settings will only work if the macro is actually in the panel notation in the theme cofiguration settings.

    This can come in handy if you are using templates to generate content and want to show something based on the page title.

    Another use is if users are constantly using a page title that causes problems, for exmaple they might call a page "Meetings" and you want them to call it "yyyy/mm/dd - Meeting with x, y, z") - as such you could add this to the Title panel within theme configuration:

    Code Block
    {builder-show:title=Meeting}
    You muppet! Use a more descriptive page title that includes
    the date (and time if appropriate), type of meeting and who
    was involved, etc.
    {builder-show}
    

    OK, you might not want to be that harsh in explaining to users that "Meeting" isn't a great page title and that they should use something more descriptive, but you get the general idea.

    Another use is to add labels to pages based on their title:

    Code Block
    {builder-show:title=Home}{add-label:home-page}{builder-show}
    

    Simply add that to the Header panel in theme config and any page called "Home" will get a label of "home-page" added to it thanks to the add-label macro. This is useful because it allows you to search all home pages within the site!

    Expand
    Displaying content based on metadata
    Displaying content based on metadata

    Enter a list of metadata keys or metadata key:value pairs, if the metadata is found then the item will be shown/hidden. Ths check is recursable.

    Expand
    Displaying content based on attachments
    Displaying content based on attachments

    This only works if it is used inside a page or news item

    Code Block
    {builder-show:attachment=foo.jpg,bar.png}
    show this if either foo.jpg or bar.png are attached to the current page/news
    {builder-show}
    
    Expand
    Displaying content based on modification date
    Displaying content based on modification date
    Code Block
    {builder-show:olderthan=1y6m1d1h}
    show this if the current page was modified more than one year, six months, one day and one hour ago.
    {builder-show}
    

    CSS Customisation

    Not applicable for this macro.

    Hints and Tips

    You can use this macro, and the associated builder-hide macro to customise navigation and panel content depending on what the user is looking at.

    When using either the mode, context or decorator parameters, remember that they only work if used within a panel of the Builder theme. If you put them inside a normal page, etc., they won't work. Even if you use the move-to macro to move something from a page in to a panel, it still won't work - the mode, context and decorator settings will only work if the macro is actually in the panel notation in the theme cofiguration settings.

    If you need to show or hide content with more complex conditions, there are extra aliases builder-show2 -> builder-show9 which may be used for nesting.

    Multiple conditions are combined in AND mode, so all of the applied conditions need to be true for the content to be shown.
    To apply conditions in an OR mode you should use several copies of the show macro, each with separate conditionsIf you need to show or hide content based on the privileges within a space, use the show-if or hide-if macros that be found in the Visibility Plugin.

    Frequently Asked Questions

    ...

    See Also