Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Confluence Blueprints: How to display the list of existing macros in the dialog-page ?

Xavier Arques
Contributor
November 2, 2013

Hi,

I'm trying to develop a Blueprint that will include in the rendered page a macro choosen by the user in a list or by auto-completion

I know how to do it in Java (using com.atlassian.confluence.macro.browser.MacroMetadataManager)

But I don't know how to create a custom list in soy template with dynamic content (provided by a Java class ?)

I spent a lot of time on this forum:

1) I tried to implement com.atlassian.soy.renderer.SoyServerFunction as describe here: https://answers.atlassian.com/questions/89158/getting-a-soy-function-to-work-in-a-stash-plugin

  • Content of my .soy template
    {namespace MyPlugin.Blueprints.Simple}
    
    {template .macros}
    	Hello
    	{SoyMacrosFunction()}
    {/template}
  • but it always return error: Uncaught Error: atlassian-plugin.xml blueprint wizard points to a non-existent Soy template 'MyPlugin.Blueprints.Simple.loop'.
  • If I remove instruction {SoyMacrosFunction()}, the template works

2) I tried to use classes autocomplete-multiselect in my soy template. It doesn't work

Any adivse would be much appreciated.
Cheers,
Xavier

2 answers

1 accepted

1 vote
Answer accepted
Xavier Arques
Contributor
November 24, 2013

My previous comment was not recognized by the Atlassian email robot. So I answer to my own question:

I'm now able to display the list of existing macros in the dialog-page of a Blueprint. But I used a REST API in conjunction with javascript hook as described in my comment. I was not able to implement a SoyMacroFunction

0 votes
dy raffy
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
November 17, 2013

Hi Xavier,

please try to add a SoyDoc before your template:

{namespace MyPlugin.Blueprints.Simple}
/**
*  This is a SoyDoc example
*/
{template .macros}
    Hello
    {SoyMacrosFunction()}
{/template}

See: https://developer.atlassian.com/display/CONFDEV/Writing+Soy+Templates+in+Your+Plugin (For templates that need parameters, these must be declared in JavaDoc style immediately before the template)

I hope I could help.

Cheers,

Raffy.

Xavier Arques
Contributor
November 23, 2013

There is already a SoyDoc in my .soy file but I didn't copy it my this example.

Anyway, I changed the way of doing:

I created a REST API based on this tutorial to retrieve all installed Confluence macros and I added the following code in the javascript file associated to my blueprint based on this tutorial

Confluence.Blueprint.setWizard('com.xxx.confluence.macrodoc:macro-documentation-blueprint-item', function(wizard) {
    wizard.on('post-render.macroDocumentation', function(e, state) {
	    fetchAndDisplayMacros = function() {
	        $macrosContainer = $("#macroName");
	        $macrosContainer.append("<option value='Loading'> Loading...</option>");
	        $.ajax({
	            type: 'GET',
	            url: AJS.contextPath() + '/rest/macro/1.0/macros',
	            contentType:'application/json'
	        }).done(function(macros) {
	        	$macrosContainer.empty();
	            for (var i = 0; i < macros.length; ++i) {
	            	var macro = macros[i];
	                $macrosContainer.append("<option value='" + macro.macroName+ "'>" + macro.titleText + "</option>");
	            }
	            if ($macrosContainer.find("option").length == 0) {
	                $macrosContainer.html("<p>No macro have been defined.</p>");
	            }
	        }).fail(function() {
	            clearMessages();
	            AJS.messages.error("#aui-message-bar", {
	               body: "<p>Failed to fetch macros.</p>",
	               closeable: true,
	               shadowed: true
	            });
	        });
	    };
	
	    // Fetch macros on page load
	    fetchAndDisplayMacros();
   });
});
Now it works perfectly but the use of SoyFunction still doesn't work !!

Suggest an answer

Log in or Sign up to answer
TAGS
atlassian, jira, marketing project management, jira for marketers, agile marketing, campaign planning, marketing workflows, jira templates, atlassian learning, marketing collaboration, project tracking, marketing teams, jira training

Streamline Marketing in Jira 🖼️

Plan, prioritize, and deliver marketing projects seamlessly. See how Jira supports your team's success. Start today!

Start now! 🚦
AUG Leaders

Atlassian Community Events