KLAUS IHLBERG | ENGINEERING MANAGER | ATLASSIAN
Supercharge Your Pages
New Ways to Extend the Confluence Editor
Consumers
Consumers Content
creators
Consumers Content
creators
Super users
Consumers Content
creators
Super users Admins
WHO ARE SUPERUSERS?
SUPERUSERS
Templates
Automate the creation of
complex pages
Keyboard
shortcuts
/- menu to create, // for date,
@ for mentions etc
Advanced Macros
Excerpt / Include, Page Properties,
3rd party integrations
SUPERUSERS
Templates
Automate the creation of
complex pages
Keyboard
shortcuts
/- menu to create, // for date,
@ for mentions etc
Advanced Macros
Excerpt / Include, Page Properties,
3rd party integrations
SUPERUSERS
Templates
Automate the creation of
complex pages
Keyboard
shortcuts
/- menu to create, // for date,
@ for mentions etc
Advanced Macros
Excerpt / Include, Page Properties,
3rd party integrations
SUPERUSERS
Templates
Automate the creation of
complex pages
Keyboard
shortcuts
/- menu to create, // for date,
@ for mentions etc
Advanced Macros
Excerpt / Include, Page Properties,
3rd party integrations
SUPERUSERS
Templates
Automate the creation of
complex pages
Keyboard
shortcuts
/- menu to create, // for date,
@ for mentions etc
Advanced Macros
Excerpt / Include, Page Properties,
3rd party integrations
SUPERUSERS
Templates
Automate the creation of
complex pages
Keyboard
shortcuts
/- menu to create, // for date,
@ for mentions etc
Advanced Macros
Excerpt / Include, Page Properties,
3rd party integrations
"modules":
"dynamicContentMacros": [
{
"key": "splunk-integration",
"name": {
"value": "Splunk Report"
},
"url": "/splunk-macro",
"description": {
"value": "Show splunk reports on your Confluence page."
},
"outputType": "block",
"bodyType": "none",
"editor": {
"url": "/splunk-editor",
"editTitle": {
"value": "Choose a report"
},
"insertTitle": {
"value": "Choose a report"
"modules":
"dynamicContentMacros": [
{
"key": "splunk-integration",
"name": {
"value": "Splunk Report"
},
"url": "/splunk-macro",
"description": {
"value": "Show splunk reports on your Confluence page."
},
"outputType": "block",
"bodyType": "none",
"editor": {
"url": "/splunk-editor",
"editTitle": {
"value": "Choose a report"
},
"insertTitle": {
"value": "Choose a report"
"modules":
"dynamicContentMacros": [
{
"key": "splunk-integration",
"name": {
"value": "Splunk Report"
},
"url": "/splunk-macro",
"description": {
"value": "Show splunk reports on your Confluence page."
},
"outputType": "block",
"bodyType": "none",
"editor": {
"url": "/splunk-editor",
"editTitle": {
"value": "Choose a report"
},
"insertTitle": {
"value": "Choose a report"
"modules":
"dynamicContentMacros": [
{
"key": "splunk-integration",
"name": {
"value": "Splunk Report"
},
"url": "/splunk-macro",
"description": {
"value": "Show splunk reports on your Confluence page."
},
"outputType": "block",
"bodyType": "none",
"editor": {
"url": "/splunk-editor",
"editTitle": {
"value": "Choose a report"
},
"insertTitle": {
"value": "Choose a report"
"modules":
"dynamicContentMacros": [
{
"key": "splunk-integration",
"name": {
"value": "Splunk Report"
},
"url": "/splunk-macro",
"description": {
"value": "Show splunk reports on your Confluence page."
},
"outputType": "block",
"bodyType": "none",
"editor": {
"url": "/splunk-editor",
"editTitle": {
"value": "Choose a report"
},
"insertTitle": {
"value": "Choose a report"
Confluence
Editor
GET <baseUrl>/splunk-macro
Product
Server
Confluence
Editor
Product
Server
Confluence
Editor
Product
Server
Confluence
Editor
Product
Server
iFrame Contents
"modules":
"dynamicContentMacros": [
{
"key": "splunk-integration",
"name": {
"value": "Splunk Report"
},
"url": "/splunk-macro",
"description": {
"value": "Show splunk reports on your Confluence page."
},
"outputType": "block",
"bodyType": "none",
"editor": {
"url": "/splunk-editor",
"editTitle": {
"value": "Choose a report"
},
"insertTitle": {
"value": "Choose a report"
Block macros
• "outputType": "block"
• "bodyType": "none"
Types of macros
Block macros
• "outputType": "block"
• "bodyType": "none"
Inline macros
• "outputType": "inline"
• "bodyType": "none"
Types of macros
Block macros
• "outputType": "block"
• "bodyType": "none"
Inline macros
• "outputType": "inline"
• "bodyType": "none"
Plain text macros
• "outputType": "block"
• "bodyType": “plain-text”
Types of macros
Block macros
• "outputType": "block"
• "bodyType": "none"
Inline macros
• "outputType": "inline"
• "bodyType": "none"
Plain text macros
• "outputType": "block"
• "bodyType": “plain-text”
Bodied macros
• "outputType": "block"
• "bodyType": “rich-text”
Types of macros
"modules":
"dynamicContentMacros": [
{
"key": "splunk-integration",
"name": {
"value": "Splunk Report"
},
"url": "/splunk-macro",
"description": {
"value": "Show splunk reports on your Confluence page."
},
"outputType": "block",
"bodyType": "none",
"editor": {
"url": "/splunk-editor",
"editTitle": {
"value": "Choose a report"
},
"insertTitle": {
"value": "Choose a report"
"value": "Show splunk reports on your Confluence page."
},
"outputType": "block",
"bodyType": "none",
"editor": {
"url": "/splunk-editor",
"editTitle": {
"value": "Choose a report"
},
"insertTitle": {
"value": "Choose a report"
},
"width": "640px",
"height": "300px",
"chrome": false
},
"parameters": [
{
"identifier": "report",
"name": {
"value": "Report"
"value": "Show splunk reports on your Confluence page."
},
"outputType": "block",
"bodyType": "none",
"editor": {
"url": "/splunk-editor",
"editTitle": {
"value": "Choose a report"
},
"insertTitle": {
"value": "Choose a report"
},
"width": "640px",
"height": "300px",
"chrome": false
},
"parameters": [
{
"identifier": "report",
"name": {
"value": "Report"
"value": "Show splunk reports on your Confluence page."
},
"outputType": "block",
"bodyType": "none",
"editor": {
"url": "/splunk-editor",
"editTitle": {
"value": "Choose a report"
},
"insertTitle": {
"value": "Choose a report"
},
"width": "640px",
"height": "300px",
"chrome": false
},
"parameters": [
{
"identifier": "report",
"name": {
"value": "Report"
"value": "Show splunk reports on your Confluence page."
},
"outputType": "block",
"bodyType": "none",
"editor": {
"url": "/splunk-editor",
"editTitle": {
"value": "Choose a report"
},
"insertTitle": {
"value": "Choose a report"
},
"width": "640px",
"height": "300px",
"chrome": false
},
"parameters": [
{
"identifier": "report",
"name": {
"value": "Report"
"chrome": false
},
"parameters": [
{
"identifier": "report",
"name": {
"value": "Report"
},
"description": {
"value": "Allows switching between view types"
},
"type": "string",
"required": true,
"multiple": false,
"defaultValue": "1",
"hidden": false
}
]
}
]
"chrome": false
},
"parameters": [
{
"identifier": "report",
"name": {
"value": "Report"
},
"description": {
"value": "Allows switching between view types"
},
"type": "string",
"required": true,
"multiple": false,
"defaultValue": "1",
"hidden": false
}
]
}
]
Aggregate and
control data
Superusers create complex
pages for other people to
consume and collaborate on.
Customize their
workflow
Superusers use templates
and add ons to make
Confluence work their
way.
Champion
Confluence!
Superusers spread the
message of Confluence to
new users!
What superusers do?
Consumers Content
creators
Super users Admins
WHO ARE ADMINS?
ADMINS
Customize the
instance
Install apps, set permissions
Analytics
How is the instance being
used
ADMINS
Customize the
instance
Install apps, set permissions
Analytics
How is the instance being
used
CUSTOM MACRO CREATOR
"modules": {
"adminPages": [
{
"url": "/#/app/custom-macro-admin",
"name": {
"value": "Custom Macros"
},
"key": "custom-macro-admin-page"
}
]
}
"modules": {
"adminPages": [
{
"url": "/#/app/custom-macro-admin",
"name": {
"value": "Custom Macros"
},
"key": "custom-macro-admin-page"
}
]
}
DYNAMIC MODULES
ConfluenceApplication
POST /rest/atlassian-connect/1/app/module/dynamic
submit() {
const requestOptions = {
url: "/rest/atlassian-connect/1/app/module/dynamic",
type: "POST",
data: {
dynamicContentMacros: [
{
"key": "confidential-macro",
"name": {
"value": "Confidential Macro"
},
"url": "/#/app/confidential-macro",
"description": {
"value": "Adds a confidential stamp on your page."
},
"outputType": "block",
"bodyType": "plain-text",
"parameters": [
{
"identifier": "body",
submit() {
const requestOptions = {
url: "/rest/atlassian-connect/1/app/module/dynamic",
type: "POST",
data: {
dynamicContentMacros: [
{
"key": "confidential-macro",
"name": {
"value": "Confidential Macro"
},
"url": "/#/app/confidential-macro",
"description": {
"value": "Adds a confidential stamp on your page."
},
"outputType": "block",
"bodyType": "plain-text",
"parameters": [
{
"identifier": "body",
type: "POST",
data: {
dynamicContentMacros: [
{
"key": "confidential-macro",
"name": {
"value": "Confidential Macro"
},
"url": "/#/app/confidential-macro",
"description": {
"value": "Adds a confidential stamp on your page."
},
"outputType": "block",
"bodyType": "plain-text",
"parameters": [
{
"identifier": "body",
"name": {
"value": "Body"
},
"description": {
}
const responseHandler = (errorOrData, response, xhrOrErrorThrown) => {
if (errorOrData === false) {
AP.flag.create({
title: 'Request sent successfully',
body: 'status = ' + response.status + ', ' + response.statusText + '
(length = ' + response.responseText.length + ')',
type: 'success',
close: 'auto'
});
} else {
AP.flag.create({
title: 'Request failed to send',
body: 'status = ' + response.status + ', ' + response.statusText + '
(' + xhrOrErrorThrown + ')',
type: 'error',
close: 'auto'
});
}
};
AP.request(requestOptions, responseHandler);
});
} else {
AP.flag.create({
title: 'Request failed to send',
body: 'status = ' + response.status + ', ' + response.statusText + '
(' + xhrOrErrorThrown + ')',
type: 'error',
close: 'auto'
});
}
};
AP.request(requestOptions, responseHandler);
};
ConfluenceApplication
POST /rest/atlassian-connect/1/app/module/dynamic
Allowed modules
• Dynamic content macros
• Webhooks
• Webpanels
Dynamic Modules
Allowed modules
• Dynamic content macros
• Webhooks
• Webpanels
Limit of Ten
for each app on each instance
Dynamic Modules
ConfluenceApplication
GET /rest/atlassian-connect/1/app/module/dynamic
ConfluenceApplication
DELETE /rest/atlassian-connect/1/app/module/dynamic
Allowed modules
• Dynamic content macros
• Webhooks
Limit of Ten
for each app on each instance
Dynamic Modules
Allowed modules
• Dynamic content macros
• Webhooks
Limit of Ten
for each app on each instance
Dynamic Modules
AVAILABLE SOON!
Create the
Confluence
instance!
Admins set up the spaces,
the users and global
patterns.
Install
add ons
Admins install
marketplace and their
own add ons.
Configure
Confluence
The better the admin, the
more successful Confluence
is.
What admins do?
https://developer.atlassian.com/cloud/
https://atlaskit.atlassian.com/
https://developer.atlassian.com/cloud/
https://bitbucket.org/atlassian/atlassian-connect-js-refapp
https://atlaskit.atlassian.com/
https://developer.atlassian.com/cloud/
Consumers Content
creators
Super users Admins
Thank you!
KLAUS IHLBERG | ENGINEERING MANAGER | ATLASSIAN

Supercharge Your Pages - New Ways to Extend the Confluence Editor