SlideShare a Scribd company logo
1 of 80
Download to read offline
Confluence Patterns
Getting the most out of your add-on
Ryan Thomas
Atlassian

May 2013
About Me
About Me
• OnDemand Team Lead
• Ex-Confluence Developer
• From Sydney, Australia
• rthomas@atlassian.com
• @RyanAtlassian
In Context
In Context

Notification
In Context
You’re Too Big

Notification
In Context
You’re Too Big

Notification
The 90%
In Context
You’re Too Big

Notification
The 90%
What is a design pattern?
What is a design pattern?
“a design pattern is a general reusable solution to
a commonly occurring problem”
In Context
Editor Pattern
In Context Pattern
Making sure the object your macro creates is
contextual inside of the editor!
In Context Pattern
Making sure the object your macro creates is
contextual inside of the editor!
In Context Pattern 1
A vanilla macro placeholder does not give enough
context about the macro.
In Context Pattern 1
A vanilla macro placeholder does not give enough
context about the macro.

Use an Image Based Placeholder for your macro.
In Context Pattern 1
In Context Pattern 1
In Context Pattern 1
• Image Based Placeholders allow you to
dynamically generate an image to use for
rendering in the editor.
• Easy to retrofit to your existing macros.

https://developer.atlassian.com/display/CONFDEV/Providing+an+Image+as+a+Macro+Placeholder+in+the+Editor
In Context Pattern 1
• Image Based Placeholders allow you to
dynamically generate an image to use for
rendering in the editor.
• Easy to retrofit to your existing macros.

https://developer.atlassian.com/display/CONFDEV/Providing+an+Image+as+a+Macro+Placeholder+in+the+Editor
In Context Pattern 2
Your macro augments or modifies the properties
of images.
In Context Pattern 2
Your macro augments or modifies the properties
of images.

Instead of using a macro, add this functionality to
the Image Property Dialog.
In Context Pattern 2
In Context Pattern 2
In Context Pattern 2
• Allows you to extend the Image Property
Dialog
• Use it when your macro modifies the
properties of images and you wish for
more seamless integration with the editor.
https://developer.atlassian.com/display/CONFDEV/Extending+the+Image+Properties+Dialog
In Context Pattern 3
Your macro generates a link when rendered.
In Context Pattern 3
Your macro generates a link when rendered.

Extend the Link Browser Dialog to add the
functionality here, instead of using a macro.
In Context Pattern 3
In Context Pattern 3

Select a repository...
In Context Pattern 3
• Useful for complex links, or links that
require a lot of parameters.
• Useful for links that have some
administration setup
• Simplifies the user experience.
https://developer.atlassian.com/display/CONFDEV/Extending+the+Confluence+Insert+Link+Dialog
In Context Pattern 4
You would like to capture data a user pastes into
the Confluence editor, to better represent it.
In Context Pattern 4
You would like to capture data a user pastes into
the Confluence editor, to better represent it.

Extend the editor autoconvert to convert userpasted data into any editor content you like.
In Context Pattern 4
• Register a paste handler
• Can convert to images or arbitrary wiki
content, not just macros!
In Context Pattern 4
• Register a paste handler
• Can convert to images or arbitrary wiki
content, not just macros!

https://developer.atlassian.com/display/CONFDEV/Extending+Autoconvert
In Context Pattern
Use Case

Plugin
Point

Macro generates an image

Image Based
Placeholder

Macro modifies images

Extend the Image
Dialog

Macro create a link

Extend the Link
Dialog

Capture user-pasted
content

Extend
Autoconvert

More Info
https://developer.atlassian.com/display/CONFDEV/Providing+an+Image+as
+a+Macro+Placeholder+in+the+Editor

https://developer.atlassian.com/display/CONFDEV/Extending+the+Image
+Properties+Dialog

https://developer.atlassian.com/display/CONFDEV/Extending+the
+Confluence+Insert+Link+Dialog

https://developer.atlassian.com/display/CONFDEV/Extending+Autoconvert
You’re Too Big
Editor Pattern
You’re Too Big Pattern
Your macro has too many parameters, or you wish
to provide a custom user experience.
You’re Too Big Pattern
Your macro has too many parameters, or you wish
to provide a custom user experience.

Write a custom editor dialog for your macro.
You’re Too Big Pattern
You’re Too Big Pattern
You’re Too Big Pattern
You’re Too Big Pattern
Easy to do!
AJS.bind(“init.rte”, function() {
AJS.MacroBrowser.setMacroJsOverride(“myMacro”, {
opener: function(macro) {
// Dialog drawing code goes here...
}
}
}
You’re Too Big Pattern
• Use AJS.MacroBrowser.setMacroJsOverride
to override the editor functionality for a macro &
display your own dialog.
• Do this when you have too many parameters, or you
want a custom editor experience.

https://developer.atlassian.com/display/AUI/Dialog
You’re Too Big Pattern
• Use AJS.MacroBrowser.setMacroJsOverride
to override the editor functionality for a macro &
display your own dialog.
• Do this when you have too many parameters, or you
want a custom editor experience.

https://developer.atlassian.com/display/AUI/Dialog
Think of the 90%
Editor Pattern
The 90% Pattern
Think of the 90% use case!
The 90% Pattern
Think of the 90% use case!
The 90% Pattern 1
You are building a macro with a number of
common parameters.
The 90% Pattern 1
You are building a macro with a number of
common parameters.

Add them to the macro property panel.
The 90% Pattern 1
Extend the property panel with
common parameters
The 90% Pattern 1
Extend the property panel with
common parameters

Colour preset buttons
The 90% Pattern 1
Extend the property panel with
common parameters

Text input field
Colour preset buttons
var updateMacro = function(macroNode, param) {
    var $macroDiv = AJS.$(macroNode);
    AJS.Rte.getEditor().selection.select($macroDiv[0]);
    AJS.Rte.BookmarkManager.storeBookmark();
 
    var macroRenderRequest = {
        contentId: Confluence.Editor.getContentId(),
AJS.Confluence.PropertyPanel.Macro.registerButtonHandler("buttonId",
        macro: {
function(e, macroNode) {
            name: "status-light",
    
updateMacro(macroNode, "paramValue");
            params: {"percentage": param},
}
            defaultParameterValue: "",
);
            body : ""
        }
    };
 
    tinymce.confluence.MacroUtils.insertMacro(macroRenderRequest);
};
AJS.Confluence.PropertyPanel.Macro.registerButtonHandler("buttonId",
function(e, macroNode) {
    
updateMacro(macroNode, "paramValue");
}
);

https://developer.atlassian.com/display/CONFDEV/Extending+the+Macro+Property+Panel
The 90% Pattern 2
Your macro has many required parameters, trying
to cater to every eventuality.
The 90% Pattern 2
Your macro has many required parameters, trying
to cater to every eventuality.

Think about the parameters you’re making required!
The 90% Pattern 2

The status macro does it wrong!
The 90% Pattern 2
Think about required parameters!
• These will cause the macro edit dialog to
always be displayed
• Is the field actually required, or could you
set a sensible default for it?
• Using sensible defaults can lead to a
smoother user experience
Notification
Admin Pattern
Notification Pattern
Notification Pattern
Notification Pattern 1
You have configuration needed to be done by an
administrator.
Notification Pattern 1
You have configuration needed to be done by an
administrator.

Create an Administration Task Item so that admins
can track and complete the config.
Notification Pattern 1
Notification Pattern 1
Add a web-item to the
system.admin.tasks/general section
<web-item key="plugin-admin-task"
section="system.admin.tasks/general"
weight="150">
<label key="plugin.admin.task.title"/>
<description key="plugin.admin.task.description"/>
<link id="configure-mail">/admin/mail/viewmailservers.action</link>
<condition class="com.atlassian.examples.DefaultMailServerExistsCondition"
invert="true"/>
</web-item>
atlassian-plugin.xml
Notification Pattern 1
• Ensure your addon is correctly configured
by creating an administrator task for it
• Admin tasks display in the Confluence
Administration page.
• The can be checked off as completed by
administrators
https://developer.atlassian.com/display/CONFDEV/Creating+an+Admin+Task
Notification Pattern 2
You want to keep your users informed of what’s
new when they install your plugin.
Notification Pattern 2
You want to keep your users informed of what’s
new when they install your plugin.

Configure a post-install-url for your plugin.
Notification Pattern 2
Notification Pattern 2
<plugin-info>
<description>${project.description}</description>
<version>${project.version}</version>
<vendor name="${project.organization.name}"
url="${project.organization.url}"/>
<param name="configure.url">/plugins/servlet/configureServlet</param>
<param name="post.install.url">/plugins/servlet/installServlet</param>
<param name="post.update.url">/plugins/servlet/installServlet</param>
</plugin-info>
atlassian-plugin.xml
Notification Pattern 2
• Specifies a page that appears after
installation, or update
• Keep administrators up to date with the
latest features of your addon
• Only appears when installed via Atlassian
Marketplace
https://developer.atlassian.com/display/UPM/Plugin+Metadata+Files+used+by+UPM+and+Marketplace
In Context
You’re Too Big

Notification
The 90%
In Context
You’re Too Big

Notification
The 90%
In Context
You’re Too Big

Notification
The 90%
In Context
You’re Too Big

Notification
The 90%
In Context
You’re Too Big

Notification
The 90%
In Context
You’re Too Big

Notification
The 90%
In Context

Notification

https://developer.atlassian.com/

You’re Too Big

The 90%
Thank you!

More Related Content

What's hot

Ajax, JSF, Facelets, Eclipse & Maven tutorials
Ajax, JSF, Facelets, Eclipse & Maven tutorialsAjax, JSF, Facelets, Eclipse & Maven tutorials
Ajax, JSF, Facelets, Eclipse & Maven tutorialsRaghavan Mohan
 
WordPress 3.0 at DC PHP
WordPress 3.0 at DC PHPWordPress 3.0 at DC PHP
WordPress 3.0 at DC PHPandrewnacin
 
Customizing the Django Admin
Customizing the Django AdminCustomizing the Django Admin
Customizing the Django AdminLincoln Loop
 
MWLUG 2015 - AD114 Take Your XPages Development to the Next Level
MWLUG 2015 - AD114 Take Your XPages Development to the Next LevelMWLUG 2015 - AD114 Take Your XPages Development to the Next Level
MWLUG 2015 - AD114 Take Your XPages Development to the Next Levelbalassaitis
 
JavaFX – 10 things I love about you
JavaFX – 10 things I love about youJavaFX – 10 things I love about you
JavaFX – 10 things I love about youAlexander Casall
 
All you need to know about JavaScript loading and execution in the browser - ...
All you need to know about JavaScript loading and execution in the browser - ...All you need to know about JavaScript loading and execution in the browser - ...
All you need to know about JavaScript loading and execution in the browser - ...Caelum
 
Sencha Roadshow 2017: Modernizing the Ext JS Class System and Tooling
Sencha Roadshow 2017: Modernizing the Ext JS Class System and ToolingSencha Roadshow 2017: Modernizing the Ext JS Class System and Tooling
Sencha Roadshow 2017: Modernizing the Ext JS Class System and ToolingSencha
 
MVC & SQL_In_1_Hour
MVC & SQL_In_1_HourMVC & SQL_In_1_Hour
MVC & SQL_In_1_HourDilip Patel
 
Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen LjuSkills Matter
 
Custom module and theme development in Drupal7
Custom module and theme development in Drupal7Custom module and theme development in Drupal7
Custom module and theme development in Drupal7marif4pk
 
Staying Sane with Drupal (A Develper's Survival Guide)
Staying Sane with Drupal (A Develper's Survival Guide)Staying Sane with Drupal (A Develper's Survival Guide)
Staying Sane with Drupal (A Develper's Survival Guide)Oscar Merida
 
Django の認証処理実装パターン / Django Authentication Patterns
Django の認証処理実装パターン / Django Authentication PatternsDjango の認証処理実装パターン / Django Authentication Patterns
Django の認証処理実装パターン / Django Authentication PatternsMasashi Shibata
 
Make your Backbone Application dance
Make your Backbone Application danceMake your Backbone Application dance
Make your Backbone Application danceNicholas Valbusa
 
Cape Town MS Developer User Group: Xamarin Community Toolkit
Cape Town MS Developer User Group: Xamarin Community ToolkitCape Town MS Developer User Group: Xamarin Community Toolkit
Cape Town MS Developer User Group: Xamarin Community ToolkitJavier Suárez Ruiz
 
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasminePaulo Ragonha
 
Aurelia Meetup Paris
Aurelia Meetup ParisAurelia Meetup Paris
Aurelia Meetup ParisAhmed Radjdi
 
AtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using nowAtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using nowAtlassian
 

What's hot (20)

Ajax, JSF, Facelets, Eclipse & Maven tutorials
Ajax, JSF, Facelets, Eclipse & Maven tutorialsAjax, JSF, Facelets, Eclipse & Maven tutorials
Ajax, JSF, Facelets, Eclipse & Maven tutorials
 
WordPress 3.0 at DC PHP
WordPress 3.0 at DC PHPWordPress 3.0 at DC PHP
WordPress 3.0 at DC PHP
 
Customizing the Django Admin
Customizing the Django AdminCustomizing the Django Admin
Customizing the Django Admin
 
MWLUG 2015 - AD114 Take Your XPages Development to the Next Level
MWLUG 2015 - AD114 Take Your XPages Development to the Next LevelMWLUG 2015 - AD114 Take Your XPages Development to the Next Level
MWLUG 2015 - AD114 Take Your XPages Development to the Next Level
 
JavaFX – 10 things I love about you
JavaFX – 10 things I love about youJavaFX – 10 things I love about you
JavaFX – 10 things I love about you
 
All you need to know about JavaScript loading and execution in the browser - ...
All you need to know about JavaScript loading and execution in the browser - ...All you need to know about JavaScript loading and execution in the browser - ...
All you need to know about JavaScript loading and execution in the browser - ...
 
Sencha Roadshow 2017: Modernizing the Ext JS Class System and Tooling
Sencha Roadshow 2017: Modernizing the Ext JS Class System and ToolingSencha Roadshow 2017: Modernizing the Ext JS Class System and Tooling
Sencha Roadshow 2017: Modernizing the Ext JS Class System and Tooling
 
MVC & SQL_In_1_Hour
MVC & SQL_In_1_HourMVC & SQL_In_1_Hour
MVC & SQL_In_1_Hour
 
Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju
 
Custom module and theme development in Drupal7
Custom module and theme development in Drupal7Custom module and theme development in Drupal7
Custom module and theme development in Drupal7
 
JavaFX Advanced
JavaFX AdvancedJavaFX Advanced
JavaFX Advanced
 
Staying Sane with Drupal (A Develper's Survival Guide)
Staying Sane with Drupal (A Develper's Survival Guide)Staying Sane with Drupal (A Develper's Survival Guide)
Staying Sane with Drupal (A Develper's Survival Guide)
 
Django の認証処理実装パターン / Django Authentication Patterns
Django の認証処理実装パターン / Django Authentication PatternsDjango の認証処理実装パターン / Django Authentication Patterns
Django の認証処理実装パターン / Django Authentication Patterns
 
Make your Backbone Application dance
Make your Backbone Application danceMake your Backbone Application dance
Make your Backbone Application dance
 
Meteor Day Talk
Meteor Day TalkMeteor Day Talk
Meteor Day Talk
 
Cape Town MS Developer User Group: Xamarin Community Toolkit
Cape Town MS Developer User Group: Xamarin Community ToolkitCape Town MS Developer User Group: Xamarin Community Toolkit
Cape Town MS Developer User Group: Xamarin Community Toolkit
 
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
 
Aurelia Meetup Paris
Aurelia Meetup ParisAurelia Meetup Paris
Aurelia Meetup Paris
 
AtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using nowAtlasCamp 2015: Web technologies you should be using now
AtlasCamp 2015: Web technologies you should be using now
 
Django
DjangoDjango
Django
 

Similar to AtlasCamp 2013: Confluence patterns

AtlasCamp 2014: Writing Connect Add-ons for Confluence
AtlasCamp 2014: Writing Connect Add-ons for ConfluenceAtlasCamp 2014: Writing Connect Add-ons for Confluence
AtlasCamp 2014: Writing Connect Add-ons for ConfluenceAtlassian
 
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....Javier Suárez Ruiz
 
Getting started with MVC 5 and Visual Studio 2013
Getting started with MVC 5 and Visual Studio 2013Getting started with MVC 5 and Visual Studio 2013
Getting started with MVC 5 and Visual Studio 2013Thomas Robbins
 
MongoDB.local Atlanta: MongoDB Stitch Tutorial
MongoDB.local Atlanta: MongoDB Stitch TutorialMongoDB.local Atlanta: MongoDB Stitch Tutorial
MongoDB.local Atlanta: MongoDB Stitch TutorialMongoDB
 
MongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB.local Seattle 2019: MongoDB Stitch TutorialMongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB.local Seattle 2019: MongoDB Stitch TutorialMongoDB
 
Working Software Over Comprehensive Documentation
Working Software Over Comprehensive DocumentationWorking Software Over Comprehensive Documentation
Working Software Over Comprehensive DocumentationAndrii Dzynia
 
IBM Cognos 10 Framework Manager Metadata Modeling: Tips and Tricks
IBM Cognos 10 Framework Manager Metadata Modeling: Tips and TricksIBM Cognos 10 Framework Manager Metadata Modeling: Tips and Tricks
IBM Cognos 10 Framework Manager Metadata Modeling: Tips and TricksSenturus
 
MongoDB.local Dallas 2019: MongoDB Stitch Tutorial
MongoDB.local Dallas 2019: MongoDB Stitch TutorialMongoDB.local Dallas 2019: MongoDB Stitch Tutorial
MongoDB.local Dallas 2019: MongoDB Stitch TutorialMongoDB
 
AIM361 Optimizing machine learning models with Amazon SageMaker (December 2019)
AIM361 Optimizing machine learning models with Amazon SageMaker (December 2019)AIM361 Optimizing machine learning models with Amazon SageMaker (December 2019)
AIM361 Optimizing machine learning models with Amazon SageMaker (December 2019)Julien SIMON
 
AWS Summit Stockholm 2014 – T5 – Deploy, manage and scale applications on AWS
AWS Summit Stockholm 2014 – T5 – Deploy, manage and scale applications on AWSAWS Summit Stockholm 2014 – T5 – Deploy, manage and scale applications on AWS
AWS Summit Stockholm 2014 – T5 – Deploy, manage and scale applications on AWSAmazon Web Services
 
CUST-2 New Client Configuration & Extension Points in Share
CUST-2 New Client Configuration & Extension Points in ShareCUST-2 New Client Configuration & Extension Points in Share
CUST-2 New Client Configuration & Extension Points in ShareAlfresco Software
 
Costruisci modelli di Machine Learning con Amazon SageMaker Autopilot
Costruisci modelli di Machine Learning con Amazon SageMaker AutopilotCostruisci modelli di Machine Learning con Amazon SageMaker Autopilot
Costruisci modelli di Machine Learning con Amazon SageMaker AutopilotAmazon Web Services
 
Applicare patterns di sviluppo con Azure
Applicare patterns di sviluppo con AzureApplicare patterns di sviluppo con Azure
Applicare patterns di sviluppo con AzureMarco Parenzan
 
Cloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USA
Cloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USACloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USA
Cloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USASelvaratnam Uthaiyashankar
 
Atlassian Confluence: как сделать работу комфортной
Atlassian Confluence: как сделать работу комфортнойAtlassian Confluence: как сделать работу комфортной
Atlassian Confluence: как сделать работу комфортнойAndrew Fadeev
 
Remixing Confluence With Speakeasy
Remixing Confluence With SpeakeasyRemixing Confluence With Speakeasy
Remixing Confluence With Speakeasynabeelahali
 
Fringe Accessibility — Portland UX
Fringe Accessibility — Portland UXFringe Accessibility — Portland UX
Fringe Accessibility — Portland UXAdrian Roselli
 
End-to-End Machine Learning with Amazon SageMaker
End-to-End Machine Learning with Amazon SageMakerEnd-to-End Machine Learning with Amazon SageMaker
End-to-End Machine Learning with Amazon SageMakerSungmin Kim
 

Similar to AtlasCamp 2013: Confluence patterns (20)

Volunteer.rb
Volunteer.rbVolunteer.rb
Volunteer.rb
 
AtlasCamp 2014: Writing Connect Add-ons for Confluence
AtlasCamp 2014: Writing Connect Add-ons for ConfluenceAtlasCamp 2014: Writing Connect Add-ons for Confluence
AtlasCamp 2014: Writing Connect Add-ons for Confluence
 
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
Monkey Conf 2020: Xamarin Community Toolkit: More possibilities with Xamarin....
 
Getting started with MVC 5 and Visual Studio 2013
Getting started with MVC 5 and Visual Studio 2013Getting started with MVC 5 and Visual Studio 2013
Getting started with MVC 5 and Visual Studio 2013
 
MongoDB.local Atlanta: MongoDB Stitch Tutorial
MongoDB.local Atlanta: MongoDB Stitch TutorialMongoDB.local Atlanta: MongoDB Stitch Tutorial
MongoDB.local Atlanta: MongoDB Stitch Tutorial
 
MongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB.local Seattle 2019: MongoDB Stitch TutorialMongoDB.local Seattle 2019: MongoDB Stitch Tutorial
MongoDB.local Seattle 2019: MongoDB Stitch Tutorial
 
Working Software Over Comprehensive Documentation
Working Software Over Comprehensive DocumentationWorking Software Over Comprehensive Documentation
Working Software Over Comprehensive Documentation
 
IBM Cognos 10 Framework Manager Metadata Modeling: Tips and Tricks
IBM Cognos 10 Framework Manager Metadata Modeling: Tips and TricksIBM Cognos 10 Framework Manager Metadata Modeling: Tips and Tricks
IBM Cognos 10 Framework Manager Metadata Modeling: Tips and Tricks
 
Dw8 sdg us
Dw8 sdg usDw8 sdg us
Dw8 sdg us
 
MongoDB.local Dallas 2019: MongoDB Stitch Tutorial
MongoDB.local Dallas 2019: MongoDB Stitch TutorialMongoDB.local Dallas 2019: MongoDB Stitch Tutorial
MongoDB.local Dallas 2019: MongoDB Stitch Tutorial
 
AIM361 Optimizing machine learning models with Amazon SageMaker (December 2019)
AIM361 Optimizing machine learning models with Amazon SageMaker (December 2019)AIM361 Optimizing machine learning models with Amazon SageMaker (December 2019)
AIM361 Optimizing machine learning models with Amazon SageMaker (December 2019)
 
AWS Summit Stockholm 2014 – T5 – Deploy, manage and scale applications on AWS
AWS Summit Stockholm 2014 – T5 – Deploy, manage and scale applications on AWSAWS Summit Stockholm 2014 – T5 – Deploy, manage and scale applications on AWS
AWS Summit Stockholm 2014 – T5 – Deploy, manage and scale applications on AWS
 
CUST-2 New Client Configuration & Extension Points in Share
CUST-2 New Client Configuration & Extension Points in ShareCUST-2 New Client Configuration & Extension Points in Share
CUST-2 New Client Configuration & Extension Points in Share
 
Costruisci modelli di Machine Learning con Amazon SageMaker Autopilot
Costruisci modelli di Machine Learning con Amazon SageMaker AutopilotCostruisci modelli di Machine Learning con Amazon SageMaker Autopilot
Costruisci modelli di Machine Learning con Amazon SageMaker Autopilot
 
Applicare patterns di sviluppo con Azure
Applicare patterns di sviluppo con AzureApplicare patterns di sviluppo con Azure
Applicare patterns di sviluppo con Azure
 
Cloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USA
Cloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USACloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USA
Cloud to Cloud and Cloud to Enterprise Integration - WSO2Con 2014 USA
 
Atlassian Confluence: как сделать работу комфортной
Atlassian Confluence: как сделать работу комфортнойAtlassian Confluence: как сделать работу комфортной
Atlassian Confluence: как сделать работу комфортной
 
Remixing Confluence With Speakeasy
Remixing Confluence With SpeakeasyRemixing Confluence With Speakeasy
Remixing Confluence With Speakeasy
 
Fringe Accessibility — Portland UX
Fringe Accessibility — Portland UXFringe Accessibility — Portland UX
Fringe Accessibility — Portland UX
 
End-to-End Machine Learning with Amazon SageMaker
End-to-End Machine Learning with Amazon SageMakerEnd-to-End Machine Learning with Amazon SageMaker
End-to-End Machine Learning with Amazon SageMaker
 

More from colleenfry

The 7 habits of high successful atlassian marketplace developers
The 7 habits of high successful atlassian marketplace developers The 7 habits of high successful atlassian marketplace developers
The 7 habits of high successful atlassian marketplace developers colleenfry
 
The 7 habits of high successful atlassian marketplace developers
The 7 habits of high successful atlassian marketplace developers The 7 habits of high successful atlassian marketplace developers
The 7 habits of high successful atlassian marketplace developers colleenfry
 
The 7 habits of high successful atlassian marketplace developers by dave meyer
The 7 habits of high successful atlassian marketplace developers   by dave meyerThe 7 habits of high successful atlassian marketplace developers   by dave meyer
The 7 habits of high successful atlassian marketplace developers by dave meyercolleenfry
 
AtlasCamp 2013: Scratch your own itch
AtlasCamp 2013: Scratch your own itch AtlasCamp 2013: Scratch your own itch
AtlasCamp 2013: Scratch your own itch colleenfry
 
AtlasCamp 2013: Bring your own Stack
AtlasCamp 2013: Bring your own Stack AtlasCamp 2013: Bring your own Stack
AtlasCamp 2013: Bring your own Stack colleenfry
 
AtlasCamp 2013: A Re-Intriduction to Atlassian Connect: Add-ons for OnDemand
AtlasCamp 2013: A Re-Intriduction to Atlassian Connect: Add-ons for OnDemandAtlasCamp 2013: A Re-Intriduction to Atlassian Connect: Add-ons for OnDemand
AtlasCamp 2013: A Re-Intriduction to Atlassian Connect: Add-ons for OnDemandcolleenfry
 
AtlasCamp 2013: Keynote
AtlasCamp 2013: Keynote AtlasCamp 2013: Keynote
AtlasCamp 2013: Keynote colleenfry
 
AtlasCamp 2013: Modernizing your Plugin UI
AtlasCamp 2013: Modernizing your Plugin UI AtlasCamp 2013: Modernizing your Plugin UI
AtlasCamp 2013: Modernizing your Plugin UI colleenfry
 
AtlasCamp 2013: Confluence Blueprints
AtlasCamp 2013: Confluence Blueprints AtlasCamp 2013: Confluence Blueprints
AtlasCamp 2013: Confluence Blueprints colleenfry
 
AtlasCamp 2013: Show Me Number! Automated Browser Performance Testing
AtlasCamp 2013: Show Me Number! Automated Browser Performance Testing AtlasCamp 2013: Show Me Number! Automated Browser Performance Testing
AtlasCamp 2013: Show Me Number! Automated Browser Performance Testing colleenfry
 
AtlasCamp 2013: Confluence State of the Union
AtlasCamp 2013: Confluence State of the Union AtlasCamp 2013: Confluence State of the Union
AtlasCamp 2013: Confluence State of the Union colleenfry
 
AtlasCamp 2013: ADG / Lean UX
AtlasCamp 2013: ADG / Lean UXAtlasCamp 2013: ADG / Lean UX
AtlasCamp 2013: ADG / Lean UXcolleenfry
 
Atlassian Summit 2013: Confluence State of the Union
Atlassian Summit 2013: Confluence State of the Union Atlassian Summit 2013: Confluence State of the Union
Atlassian Summit 2013: Confluence State of the Union colleenfry
 
Atlassian: More Awesome with Add-ons
Atlassian: More Awesome with Add-onsAtlassian: More Awesome with Add-ons
Atlassian: More Awesome with Add-onscolleenfry
 
Flying at the Speed of Git
Flying at the Speed of GitFlying at the Speed of Git
Flying at the Speed of Gitcolleenfry
 
The Experience Canvas: How to Use a Core Tool from the Experience-Driven Play...
The Experience Canvas: How to Use a Core Tool from the Experience-Driven Play...The Experience Canvas: How to Use a Core Tool from the Experience-Driven Play...
The Experience Canvas: How to Use a Core Tool from the Experience-Driven Play...colleenfry
 
True Git: The Great Migration
True Git: The Great MigrationTrue Git: The Great Migration
True Git: The Great Migrationcolleenfry
 
Adopting Continuous Integration in an Ops Group
Adopting Continuous Integration in an Ops GroupAdopting Continuous Integration in an Ops Group
Adopting Continuous Integration in an Ops Groupcolleenfry
 
W4 0245 agility_v1
W4 0245 agility_v1W4 0245 agility_v1
W4 0245 agility_v1colleenfry
 

More from colleenfry (20)

The 7 habits of high successful atlassian marketplace developers
The 7 habits of high successful atlassian marketplace developers The 7 habits of high successful atlassian marketplace developers
The 7 habits of high successful atlassian marketplace developers
 
True Git
True Git True Git
True Git
 
The 7 habits of high successful atlassian marketplace developers
The 7 habits of high successful atlassian marketplace developers The 7 habits of high successful atlassian marketplace developers
The 7 habits of high successful atlassian marketplace developers
 
The 7 habits of high successful atlassian marketplace developers by dave meyer
The 7 habits of high successful atlassian marketplace developers   by dave meyerThe 7 habits of high successful atlassian marketplace developers   by dave meyer
The 7 habits of high successful atlassian marketplace developers by dave meyer
 
AtlasCamp 2013: Scratch your own itch
AtlasCamp 2013: Scratch your own itch AtlasCamp 2013: Scratch your own itch
AtlasCamp 2013: Scratch your own itch
 
AtlasCamp 2013: Bring your own Stack
AtlasCamp 2013: Bring your own Stack AtlasCamp 2013: Bring your own Stack
AtlasCamp 2013: Bring your own Stack
 
AtlasCamp 2013: A Re-Intriduction to Atlassian Connect: Add-ons for OnDemand
AtlasCamp 2013: A Re-Intriduction to Atlassian Connect: Add-ons for OnDemandAtlasCamp 2013: A Re-Intriduction to Atlassian Connect: Add-ons for OnDemand
AtlasCamp 2013: A Re-Intriduction to Atlassian Connect: Add-ons for OnDemand
 
AtlasCamp 2013: Keynote
AtlasCamp 2013: Keynote AtlasCamp 2013: Keynote
AtlasCamp 2013: Keynote
 
AtlasCamp 2013: Modernizing your Plugin UI
AtlasCamp 2013: Modernizing your Plugin UI AtlasCamp 2013: Modernizing your Plugin UI
AtlasCamp 2013: Modernizing your Plugin UI
 
AtlasCamp 2013: Confluence Blueprints
AtlasCamp 2013: Confluence Blueprints AtlasCamp 2013: Confluence Blueprints
AtlasCamp 2013: Confluence Blueprints
 
AtlasCamp 2013: Show Me Number! Automated Browser Performance Testing
AtlasCamp 2013: Show Me Number! Automated Browser Performance Testing AtlasCamp 2013: Show Me Number! Automated Browser Performance Testing
AtlasCamp 2013: Show Me Number! Automated Browser Performance Testing
 
AtlasCamp 2013: Confluence State of the Union
AtlasCamp 2013: Confluence State of the Union AtlasCamp 2013: Confluence State of the Union
AtlasCamp 2013: Confluence State of the Union
 
AtlasCamp 2013: ADG / Lean UX
AtlasCamp 2013: ADG / Lean UXAtlasCamp 2013: ADG / Lean UX
AtlasCamp 2013: ADG / Lean UX
 
Atlassian Summit 2013: Confluence State of the Union
Atlassian Summit 2013: Confluence State of the Union Atlassian Summit 2013: Confluence State of the Union
Atlassian Summit 2013: Confluence State of the Union
 
Atlassian: More Awesome with Add-ons
Atlassian: More Awesome with Add-onsAtlassian: More Awesome with Add-ons
Atlassian: More Awesome with Add-ons
 
Flying at the Speed of Git
Flying at the Speed of GitFlying at the Speed of Git
Flying at the Speed of Git
 
The Experience Canvas: How to Use a Core Tool from the Experience-Driven Play...
The Experience Canvas: How to Use a Core Tool from the Experience-Driven Play...The Experience Canvas: How to Use a Core Tool from the Experience-Driven Play...
The Experience Canvas: How to Use a Core Tool from the Experience-Driven Play...
 
True Git: The Great Migration
True Git: The Great MigrationTrue Git: The Great Migration
True Git: The Great Migration
 
Adopting Continuous Integration in an Ops Group
Adopting Continuous Integration in an Ops GroupAdopting Continuous Integration in an Ops Group
Adopting Continuous Integration in an Ops Group
 
W4 0245 agility_v1
W4 0245 agility_v1W4 0245 agility_v1
W4 0245 agility_v1
 

Recently uploaded

DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 

Recently uploaded (20)

DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 

AtlasCamp 2013: Confluence patterns

  • 1. Confluence Patterns Getting the most out of your add-on Ryan Thomas Atlassian May 2013
  • 3. About Me • OnDemand Team Lead • Ex-Confluence Developer • From Sydney, Australia • rthomas@atlassian.com • @RyanAtlassian
  • 4.
  • 7. In Context You’re Too Big Notification
  • 8. In Context You’re Too Big Notification The 90%
  • 9. In Context You’re Too Big Notification The 90%
  • 10. What is a design pattern?
  • 11. What is a design pattern? “a design pattern is a general reusable solution to a commonly occurring problem”
  • 13. In Context Pattern Making sure the object your macro creates is contextual inside of the editor!
  • 14. In Context Pattern Making sure the object your macro creates is contextual inside of the editor!
  • 15. In Context Pattern 1 A vanilla macro placeholder does not give enough context about the macro.
  • 16. In Context Pattern 1 A vanilla macro placeholder does not give enough context about the macro. Use an Image Based Placeholder for your macro.
  • 19. In Context Pattern 1 • Image Based Placeholders allow you to dynamically generate an image to use for rendering in the editor. • Easy to retrofit to your existing macros. https://developer.atlassian.com/display/CONFDEV/Providing+an+Image+as+a+Macro+Placeholder+in+the+Editor
  • 20. In Context Pattern 1 • Image Based Placeholders allow you to dynamically generate an image to use for rendering in the editor. • Easy to retrofit to your existing macros. https://developer.atlassian.com/display/CONFDEV/Providing+an+Image+as+a+Macro+Placeholder+in+the+Editor
  • 21. In Context Pattern 2 Your macro augments or modifies the properties of images.
  • 22. In Context Pattern 2 Your macro augments or modifies the properties of images. Instead of using a macro, add this functionality to the Image Property Dialog.
  • 25. In Context Pattern 2 • Allows you to extend the Image Property Dialog • Use it when your macro modifies the properties of images and you wish for more seamless integration with the editor. https://developer.atlassian.com/display/CONFDEV/Extending+the+Image+Properties+Dialog
  • 26. In Context Pattern 3 Your macro generates a link when rendered.
  • 27. In Context Pattern 3 Your macro generates a link when rendered. Extend the Link Browser Dialog to add the functionality here, instead of using a macro.
  • 29. In Context Pattern 3 Select a repository...
  • 30. In Context Pattern 3 • Useful for complex links, or links that require a lot of parameters. • Useful for links that have some administration setup • Simplifies the user experience. https://developer.atlassian.com/display/CONFDEV/Extending+the+Confluence+Insert+Link+Dialog
  • 31. In Context Pattern 4 You would like to capture data a user pastes into the Confluence editor, to better represent it.
  • 32. In Context Pattern 4 You would like to capture data a user pastes into the Confluence editor, to better represent it. Extend the editor autoconvert to convert userpasted data into any editor content you like.
  • 33. In Context Pattern 4 • Register a paste handler • Can convert to images or arbitrary wiki content, not just macros!
  • 34. In Context Pattern 4 • Register a paste handler • Can convert to images or arbitrary wiki content, not just macros! https://developer.atlassian.com/display/CONFDEV/Extending+Autoconvert
  • 35. In Context Pattern Use Case Plugin Point Macro generates an image Image Based Placeholder Macro modifies images Extend the Image Dialog Macro create a link Extend the Link Dialog Capture user-pasted content Extend Autoconvert More Info https://developer.atlassian.com/display/CONFDEV/Providing+an+Image+as +a+Macro+Placeholder+in+the+Editor https://developer.atlassian.com/display/CONFDEV/Extending+the+Image +Properties+Dialog https://developer.atlassian.com/display/CONFDEV/Extending+the +Confluence+Insert+Link+Dialog https://developer.atlassian.com/display/CONFDEV/Extending+Autoconvert
  • 37. You’re Too Big Pattern Your macro has too many parameters, or you wish to provide a custom user experience.
  • 38. You’re Too Big Pattern Your macro has too many parameters, or you wish to provide a custom user experience. Write a custom editor dialog for your macro.
  • 39. You’re Too Big Pattern
  • 40. You’re Too Big Pattern
  • 41. You’re Too Big Pattern
  • 42. You’re Too Big Pattern Easy to do! AJS.bind(“init.rte”, function() { AJS.MacroBrowser.setMacroJsOverride(“myMacro”, { opener: function(macro) { // Dialog drawing code goes here... } } }
  • 43. You’re Too Big Pattern • Use AJS.MacroBrowser.setMacroJsOverride to override the editor functionality for a macro & display your own dialog. • Do this when you have too many parameters, or you want a custom editor experience. https://developer.atlassian.com/display/AUI/Dialog
  • 44. You’re Too Big Pattern • Use AJS.MacroBrowser.setMacroJsOverride to override the editor functionality for a macro & display your own dialog. • Do this when you have too many parameters, or you want a custom editor experience. https://developer.atlassian.com/display/AUI/Dialog
  • 45. Think of the 90% Editor Pattern
  • 46. The 90% Pattern Think of the 90% use case!
  • 47. The 90% Pattern Think of the 90% use case!
  • 48. The 90% Pattern 1 You are building a macro with a number of common parameters.
  • 49. The 90% Pattern 1 You are building a macro with a number of common parameters. Add them to the macro property panel.
  • 50. The 90% Pattern 1 Extend the property panel with common parameters
  • 51. The 90% Pattern 1 Extend the property panel with common parameters Colour preset buttons
  • 52. The 90% Pattern 1 Extend the property panel with common parameters Text input field Colour preset buttons
  • 53. var updateMacro = function(macroNode, param) {     var $macroDiv = AJS.$(macroNode);     AJS.Rte.getEditor().selection.select($macroDiv[0]);     AJS.Rte.BookmarkManager.storeBookmark();       var macroRenderRequest = {         contentId: Confluence.Editor.getContentId(), AJS.Confluence.PropertyPanel.Macro.registerButtonHandler("buttonId",         macro: { function(e, macroNode) {             name: "status-light",      updateMacro(macroNode, "paramValue");             params: {"percentage": param}, }             defaultParameterValue: "", );             body : ""         }     };       tinymce.confluence.MacroUtils.insertMacro(macroRenderRequest); };
  • 54. AJS.Confluence.PropertyPanel.Macro.registerButtonHandler("buttonId", function(e, macroNode) {      updateMacro(macroNode, "paramValue"); } ); https://developer.atlassian.com/display/CONFDEV/Extending+the+Macro+Property+Panel
  • 55. The 90% Pattern 2 Your macro has many required parameters, trying to cater to every eventuality.
  • 56. The 90% Pattern 2 Your macro has many required parameters, trying to cater to every eventuality. Think about the parameters you’re making required!
  • 57. The 90% Pattern 2 The status macro does it wrong!
  • 58. The 90% Pattern 2 Think about required parameters! • These will cause the macro edit dialog to always be displayed • Is the field actually required, or could you set a sensible default for it? • Using sensible defaults can lead to a smoother user experience
  • 62. Notification Pattern 1 You have configuration needed to be done by an administrator.
  • 63. Notification Pattern 1 You have configuration needed to be done by an administrator. Create an Administration Task Item so that admins can track and complete the config.
  • 65. Notification Pattern 1 Add a web-item to the system.admin.tasks/general section <web-item key="plugin-admin-task" section="system.admin.tasks/general" weight="150"> <label key="plugin.admin.task.title"/> <description key="plugin.admin.task.description"/> <link id="configure-mail">/admin/mail/viewmailservers.action</link> <condition class="com.atlassian.examples.DefaultMailServerExistsCondition" invert="true"/> </web-item> atlassian-plugin.xml
  • 66. Notification Pattern 1 • Ensure your addon is correctly configured by creating an administrator task for it • Admin tasks display in the Confluence Administration page. • The can be checked off as completed by administrators https://developer.atlassian.com/display/CONFDEV/Creating+an+Admin+Task
  • 67. Notification Pattern 2 You want to keep your users informed of what’s new when they install your plugin.
  • 68. Notification Pattern 2 You want to keep your users informed of what’s new when they install your plugin. Configure a post-install-url for your plugin.
  • 70. Notification Pattern 2 <plugin-info> <description>${project.description}</description> <version>${project.version}</version> <vendor name="${project.organization.name}" url="${project.organization.url}"/> <param name="configure.url">/plugins/servlet/configureServlet</param> <param name="post.install.url">/plugins/servlet/installServlet</param> <param name="post.update.url">/plugins/servlet/installServlet</param> </plugin-info> atlassian-plugin.xml
  • 71. Notification Pattern 2 • Specifies a page that appears after installation, or update • Keep administrators up to date with the latest features of your addon • Only appears when installed via Atlassian Marketplace https://developer.atlassian.com/display/UPM/Plugin+Metadata+Files+used+by+UPM+and+Marketplace
  • 72.
  • 73. In Context You’re Too Big Notification The 90%
  • 74. In Context You’re Too Big Notification The 90%
  • 75. In Context You’re Too Big Notification The 90%
  • 76. In Context You’re Too Big Notification The 90%
  • 77. In Context You’re Too Big Notification The 90%
  • 78. In Context You’re Too Big Notification The 90%