Dynamic Content Macro: How to retrieve rendered macro body

My addon accepts a macro body of type rich text.
According to the dynamic content macro guide it suggests that I retrieve the macro body with the REST API.

This returns the macro body in Confluence storage format. Is there a way to retrieve it in rendered HTML?

Or do I need to subsequently call convert content body. Could you help me understand why I get a 403 for this while using AP.require('request'? with “XSRF check failed”.

Thanks

Okay nevermind, I managed to call convert content body. That was a lot of pain to work out. The docs need improvement.

@joshua.tjhin, would you mind sharing the answer for conversion? We are having the same issue. Thanks in adavnce!

hi @criley, something like this.
I am transpiling ES6 + async/await here but you can just treat AP.request to return a Promise. You’ll need to load the superbatch css to get your content styled.

Hope this helps! Good luck!

const convertStorageToHtml = async contentAsStorage => {
  const convertResponse = await AP.request({
    url:
      "/rest/api/contentbody/convert/view?expand=webresource.superbatch.uris.css",
    type: "POST",
    headers: {
      Accept: "application/json",
      "X-Atlassian-Token": "nocheck"
    },
    contentType: "application/json",
    data: JSON.stringify({
      value: contentAsStorage,
      representation: "storage"
    })
  });

  return JSON.parse(convertResponse.body);
};

convertStorageToHtml(contentAsStorage).then(converted => {
  console.log('macroBody', converted.value);
  console.log('superBatchUri', converted.webresource.superbatch.uris.css); // You must load this css file to style your content
});

Hi @joshua.tjhin, how did you mange to get embedded images in the retrieved HTML rendered correctly?

I have several Confluence having image attachments embedded with the ac:image macro as follows

<ac:image ac:height=\"250\"><ri:attachment ri:filename=\"hqdefault.jpg\" /></ac:image>

When the content body convert REST API resource is called following HTML is generated, see the snippet

<img src=\"/plugins/servlet/confluence/placeholder/error?i18nKey=editor.placeholder.broken.image&locale=en_GB&version=2\" title=\"\" class=\"transform-error\" data-encoded-xml=\"%3Cac%3Aimage+ac%3Aheight%3D%22250%22%3E%3Cri%3Aattachment+ri%3Afilename%3D%22hqdefault.jpg%22+%2F%3E%3C%2Fac%3Aimage%3E\" />

Seems the images could not be rendered according to the img html tag. Do you have any idea or is rendering of images with the convert method not possible?

You are right. I could not get the images to render properly from the convert API. I’ve given up on my macro/add-on.

Maybe you could try constructing the image URLs yourself from the attachment name.

1 Like

Hi @joshua.tjhin

I am facing the same problem with you. I am trying to reach to the HTML tags of the ‘Tabs’ macro of the Confluence.

But when I try to convert the storage format to view format, It only converts the " symbols to &quot s and doesn’t give me any HTML tags. Here are the postman screenshots. I have also tried with AP.request(). It gives me the same output


This is the response of the postman request.

And later on, naturally, when I paste this response inside a div, it is shown as a meaningless string.

Can you explain me how you managed to fetch those HTML tags?