It's not the same without you

Join the community to find out what other Atlassian users are discussing, debating and creating.

Atlassian Community Hero Image Collage

Conditional formatting in Confluence

Hi All,

we need a macro or plugin which enables us to create conditional fields. Just like Excel does: based on the value of a field, another field will be set to a custom value. More specifically our management likes the green-yellow-red status macro and we'd like to implement that based on the value of a field then the status will change to green (good) or red (bad). Is it somehow poosible?

Thanks in advance,

Rumi

2 answers

1 vote
Davin Studer Community Leader Jun 30, 2014

What do you mean by field? Is this something that is enetered by a user, is it changed automatically by some system, is it getting it from a web service? How is the "field" data changing?

As far as the status maco is concerned you could change that on-the-fly with Javascript after page load by simply adding or removing a CSS class to the element.

Color        CSS Classes
----------------------------------------------------------
Grey         status-macro aui-lozenge
Red          status-macro aui-lozenge aui-lozenge-error
Yellow       status-macro aui-lozenge aui-lozenge-current
Green        status-macro aui-lozenge aui-lozenge-success
Blue         status-macro aui-lozenge aui-lozenge-complete

Hi Davin,

I mean that I would have a table in Confluence. There is a cell where I add number value. Based on this number another field would have various value: e.g. if the number cell has value of 100 then the other value gets text value: Good, if the number cell has value of 30 then the text cell gets value of Bad.

Sorra for confusing you with fields. In fact there are no fields in Confluence, it's JIRA:). I talk about a table in Confluence.

Thanks in advance,

Rumi

Davin Studer Community Leader Jul 02, 2014

Does the value entered need to persist over page reloads, or would it be enetered everytime the page is accessed?

Hi,

the value would be updated in every 2 weeks: so in every 2 weeks this particular page would be edited. I hope that helps.

Davin Studer Community Leader Jul 07, 2014

So, just to be clear would you be editing the page(in edit mode) and putting data into a table. When the page is saved based on the data in the table you want to have a status macro updated to reflect a formula calculation?

Hi Davin,

yes, exactly!

This could be done then with a user macro and a little bit of javascript. Here is a down and dirty example. You will have to fill out the formula logic yourself.

Macro Name:
macro_name

Macro Title:
Macro Title

Macro Body Processing:
Rendered

Template:

## Developed by: Davin Studer
## Date created: 07/08/2014
## @noparams

#set( $id = $action.dateFormatter.calendar.timeInMillis )
<div id="table$id">
    $body
    <p>
        <ac:structured-macro ac:name="status">
            <ac:parameter ac:name="colour">Grey</ac:parameter>
            <ac:parameter ac:name="title">Grey</ac:parameter>
        </ac:structured-macro>
    </p>
</div>
<script type="text/javascript">
AJS.toInit(function(){
    var results = 0;
    
    /////////////////////////////////////////////////////////////////////////////////
    // Code here to set the results variable based on your formula.                //
    /////////////////////////////////////////////////////////////////////////////////
    
    switch (results) {
        case 1:
            AJS.$('#table$id span.status-macro.aui-lozenge').addClass('aui-lozenge-error'); //Red
            AJS.$('#table$id span.status-macro.aui-lozenge').text('Red Text');
            break;
        case 2:
            AJS.$('#table$id span.status-macro.aui-lozenge').addClass('aui-lozenge-current'); //Yellow
            AJS.$('#table$id span.status-macro.aui-lozenge').text('Yellow Text');
            break;
        case 3:
            AJS.$('#table$id span.status-macro.aui-lozenge').addClass('aui-lozenge-success'); //Green
            AJS.$('#table$id span.status-macro.aui-lozenge').text('Green Text');
            break;
        case 4:
            AJS.$('#table$id span.status-macro.aui-lozenge').addClass('aui-lozenge-complete'); //Blue
            AJS.$('#table$id span.status-macro.aui-lozenge').text('Blue Text');
            break;
    }
});
</script>

 

 

Like ncoronado likes this
Davin Studer Community Leader Jul 10, 2014

Does something like this meet your needs?

Hi Davin,

it doesn't work at all.

Like Michael Takeuchi likes this
Davin Studer Community Leader Jul 13, 2014

Well, you have to fill out the code to calculate the formula to change the macro class. Aside from that it should work.

Is it possible to convert JIRA data to colors when presented in Confluence using a similar script, or does the above script only work if you manually enter data into a table in Confluence? 

Example: We have a JIRA field 'Health' = At Risk, which would be associated as a YELLOW.  Our Confluence page uses JIRA Filter Results to present a status report that includes several fields, including Health.  We need to show the Health as Yellow on the Confluence page without manual data entry – just rely on the JIRA data.

@Davin Studer , how do you add your macro to a confluence page? I'm looking for the following logic below, if a table cell contains 'PASS' then make it green, 'FAIL', then make it red etc.

Davin Studer Community Leader Jan 23, 2020

The above code is a start for a user macro. You have to create the user macro in Confluence Admin -> User Macro. Also, the cloud offering of Confluence does not support user macros. So, you need to have server or data center. Once you create the user macro you can put it on a page just like any other macro. It will show up in the macro browser. Here is an example of the above code edited to look at the contents of a table. It will scan all the table cells and if it finds any that have the word fail in them then the status macro will be turned red. Otherwise it will be green.

## Developed by: Davin Studer
## Date created: 07/08/2014
## @noparams

#set( $id = $action.dateFormatter.calendar.timeInMillis )
<div id="table$id">
    $body
    <p>
        <ac:structured-macro ac:name="status">
            <ac:parameter ac:name="colour">Grey</ac:parameter>
            <ac:parameter ac:name="title">Grey</ac:parameter>
        </ac:structured-macro>
    </p>
</div>
<script type="text/javascript">
AJS.toInit(function(){
    var results = 0;
    
    AJS.$('#table$id td').each(function(){
        if(AJS.$(this).text().toLowerCase() == "fail") {
            results = 1;
            return false;
        }
    });

    switch (results) {
        case 0:
            AJS.$('#table$id span.status-macro.aui-lozenge').addClass('aui-lozenge-success'); //Green
            AJS.$('#table$id span.status-macro.aui-lozenge').text('Green Text');
            break;
        case 1:
            AJS.$('#table$id span.status-macro.aui-lozenge').addClass('aui-lozenge-error'); //Red
            AJS.$('#table$id span.status-macro.aui-lozenge').text('Red Text');
            break;
    }
});
/script>

 This is what the page looks like in edit mode.

image.png

This is what it looks like when the page is viewed

image.png

@Andrey Khaneev _StiltSoft_ I dont see a table transformer macro in the market place.

Your link goes to table filter and charts(which i have), and the example references a different macro all together.  Please clarify.

Ah I see, I figured it out.  Thanks for making such a useful addon.

Suggest an answer

Log in or Sign up to answer
TAGS
Community showcase
Posted in Confluence

Lessons and Learnings: Six Months of Working Remote [Discussion]

Hey there, folks! For most of us, the past six months- yes, you read that right- have been a journey. More people than ever before have pivoted to working remotely, and navigating being on-scre...

5,966 views 4 6
Join discussion

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you