Documentation
Dynamic Content Macro
A Confluence macro that loads remote content as an iframe. Dynamic Content Macros render content on every page request and are suitable for add-ons that need to display content that changes over time, that calls for dynamic interaction, or that is specific to the authenticated user.
For most modules, you do not need to be concerned with iframe sizing. It's all handled for you. However, an exception exists for inline macros.
An inline macro is a type of macro that generates content within the text flow of a paragraph or other text element in which the macro appears, such as a status lozenge. To implement an inline macro, follow these general guidelines:
- In your
macro-pagedeclaration in the add-on descriptor, set theoutput-typeattribute toinline. (Alternatively, if this value is set toblock, the macro content will appear on a new line in the page output.) - If the output content should occupy a certain width and height, set those values as the width and height attributes for the element.
- To prevent the macro output from being automatically resized, set the
data-optionsattribute in the script tag for all.js to "resize:false". This turns off automatic resizing of the iframe. - If the size of the macro output content size is dynamic, call
AP.resize(w,h)immediately after the DOM of your iframe is loaded.
Example
{
"modules": {
"dynamicContentMacros": [
{
"width": "200px",
"height": "200px",
"url": "/render-map?pageTitle={page.title}",
"description": {
"value": "Shows a configurable map"
},
"icon": {
"width": 80,
"height": 80,
"url": "/maps/icon.png"
},
"documentation": {
"url": "http://docs.example.com/addons/maps"
},
"categories": [
"visuals"
],
"outputType": "block",
"bodyType": "none",
"aliases": [
"map"
],
"featured": true,
"parameters": [
{
"identifier": "view",
"name": {
"value": "Map View"
},
"description": {
"value": "Allows switching between view types"
},
"type": "enum",
"required": true,
"multiple": false,
"defaultValue": "Map",
"values": [
"Map",
"Satellite"
]
}
],
"editor": {
"url": "/map-editor",
"editTitle": {
"value": "Edit Map"
},
"insertTitle": {
"value": "Insert Map"
}
},
"key": "dynamic-macro-example",
"name": {
"value": "Maps"
}
}
]
}
}
Properties
key
Type
stringRequired
Description
A key to identify this module. This key must be unique relative to the add on.
All specified keys will have all special characters and spaces replaced with dashes and will be lower cased.
example: "My Addon Key" will become "my-addon-key"
The key is used to generate the url to your add-on's module. The url is generated as a combination of your add-on key and module key. For example, an add-on which looks like:
{
"key": "my-addon",
"modules": {
"configurePage": {
"key": "configure-me",
}
}
}
Will have a configuration page module with a URL of /plugins/servlet/ac/my-addon/configure-me.
name
Type
Required
Description
A human readable name.
url
Type
stringuri-templateRequired
Description
The link to the add-on resource that provides the macro content. This URL has to be relative to the add-on base URL.
Additional context parameters can be passed as variables in the URL.
"url": "/macro-renderer?body={macro.body}&space_id={space.id}&page_id={page.id}"
Since macro bodies can be of arbitrary size and may contain sensitive data, care must be taken as to how its passed to your connect addon. You have three options to gain access to the body:
- If you can predict the size of your body and it is consistently less than 128 characters, you
can include it in the GET request using the
{macro.body}parameter. - If you know your macro contains a body that will often exceed the 128 character threshold
(or is known to contain sensitive data), then you can include the
{macro.hash}parameter and use the Confluence REST api to call back to collect the body. If you want, you can include,
{macro.body},{macro.hash}, and{macro.truncated}. This way your plugin can call back to confluence only if{macro.truncated}is 'true'. This will allow you to skip the callback if it's not needed. This would be useful for macros that don't contain sensitive data of an unpredictable size.Note: If you include the
{macro.body}in your URL you are potentially leaking sensitive data to any intermediate host on the internet. This may result in the body being cached or indexed by a third party. If you are concerned about the security of your macro, you should always use the{macro.hash}and use the Confluence REST api to collect the body.Preview Mode: If you use the
{macro.hash}in your URL, the REST api will not return the macro body during a preview request, because the page has not been saved yet. You can use the{output.type}parameter to detect whether the macro is rendered in preview mode and adapt the response accordingly.
Currently supported variables for macros are:
macro.hash: The hash of the macro bodymacro.body: The macro body, truncated to 128 charactersmacro.truncated: True if the macro body was truncated, false of notpage.id: The page ID, e.g.1376295page.title: The page title, e.g.My Pagepage.type: The page type, e.g.pagepage.version: The page version, e.g.6space.id: The space ID, e.g.65537space.key: The space key, e.g.ACuser.id: The user ID, e.g.adminuser.key: The user key, e.g.ff80808143087d180143087d3a910004output.type: The output type, e.g.displayorpreview
Context parameters for macros are also required in the URL. Please see the Macro Input Parameter documentation for details.
aliases
Type
string, … ]Description
Define aliases for the macro. The macro browser will open for the defined aliases as if it were this macro.
bodyType
Type
stringDefaults to
noneAllowed values
rich-textplain-textnoneDescription
The type of body content, if any, for this macro.
categories
Type
string, … ]Description
The categories the macro should appear in. A macro with no category will show up in the default 'All' category.
Currently, the following categories are supported by Confluence:
admin: Administrationcommunication: Communicationconfluence-content: Confluence Contentdevelopment: Developmentexternal-content: External Contentformatting: Formattingmedia: Medianavigation: Navigationreporting: Reportingvisuals: Visuals & Images
featured
Type
booleanDefaults to
falseDescription
Whether the macro should be "featured", meaning having an additional link in the "Insert More Content" menu in the editor toolbar.
height
Type
stringDescription
The preferred height of the macro content.
documentation
Type
Description
A link to the documentation for the macro.
editor
Type
Description
The configuration of a custom macro editor. This is useful if the parameter input field types are not sufficient to configure the macro.
hidden
Type
booleanDefaults to
falseDescription
If set to true, the macro will not appear in the macro browser.
description
Type
Description
A description of the macro's functionality.
icon
Type
Description
A link to the icon resource (80x80 pixels) that will be shown in the macro selection dialog. The URL can be absolute or relative to the add-on base URL.
imagePlaceholder
Description
The image rendered in the editor as the macro placeholder. It can only be used with bodyless macros and will behave just like a regular macro placeholder. Any parameter changes in the macro browser will cause the image to be reloaded - so that changes can be seen.
outputType
Type
stringDefaults to
blockAllowed values
blockinlineDescription
How this macro should be placed along side other page content.
parameters
Type
Macro Input Parameter, … ]Description
The list of parameter input fields that will be displayed.
width
Type
stringDescription
The preferred width of the macro content.