Creating a Table in the Description
Creating tables in the description is possible thanks to Atlassian's wiki markup, but how would we create a table programmatically using SIL? Find out by reading below!
Background
You can create a table in the description or any custom field that has been set to render wiki markup. For instructions on configuring a custom field to render wiki markup, see this Atlassian documentation below:
For this tutorial, we will be using this Atlassian documentation on using text formatting notation for a table. Please refer to the Atlassian documentation below:
Text Formatting Notation Help - Tables
As you can see from the Atlassian website, the notation for creating a table is fairly simple.
Code Example
The idea here is to replace the text as seen above to a SIL script that creates the formatting for us. For example:
string [] headers = {"heading 1", "heading 2", "heading 3"};
string [] data = {"col A1","col A2","col A3","col B1","col B2", "col B3"};
// create header
string table = "||" + replace(headers, "|", "||") + "||\n";
number tableWidth = size(headers);
number dataSize = size(data);
number remainder = 0;
if ((dataSize % tableWidth) != 0) {
throw "Data must be equal to the headers!";
}
// add values to table
for (int i=0; i < dataSize; i++) {
table += "|" + data[i];
remainder = tableWidth % (i + 1);
if (remainder == 0 && i != 0) {
table += "|\n";
}
}
table += "|";
runnerLog(table); |
Code Breakdown - Headers
SIL normally stores arrays with elements separated by pipes. The following line of code:
string [] headers = {"heading 1", "heading 2", "heading 3"}; |
Would be stored like this in memory:
heading 1|heading 2|heading 3 |
Since we know what our headers look like in memory, we can convert the pipes so that they look like the example from Atlassian. We also add some extra pipes on both sides.
string table = "||" + replace(headers, "|", "||") + "||\n"; |
Our output for the table now looks like this:
||heading 1||heading 2||heading 3|| |
Code Breakdown - Error Catching
What happens if the columns of data do not match the headers? At best, this means that the columns will not look right. At worst, the data will be wrong. For this, use the modulo operator % to see if dataSize is equally divisible by tableWidth.
if ((dataSize % tableWidth) != 0) {
throw "Data must be equal to the headers!";
} |
Code Breakdown - Looping
Here we loop through the data. Anytime the modulo operator is zero, we know that we are at the end of the line and can put in a new line character.
// add values to table
for (int i=0; i < dataSize; i++) {
table += "|" + data[i];
remainder = tableWidth % (i + 1);
if (remainder == 0 && i != 0) {
table += "|\n";
}
} |
Additional Help
Need help implementing this script? Talk to me directly to me by clicking on the bot on this page.
Related articles
Filter by label
There are no items with the selected labels at this time.