Web Item Provider
So far as have seen that we can add web items to new or existing web sections, and use conditions to determine whether they should be displayed for the current user, or issue, page etc.
However, if you want to dynamically generate web items according to the current circumstances, you need a web item provider. Official documentation is lacking, vote for PLUGFRAG-17.
Examples of a web item provider might be:
Show the top 5 issues for the current user in active sprints in the Issues top-level menu
Show a web item in the More Actions menu for each of the current issue’s subtasks
These examples are for Jira, but something similar should work for Bitbucket.
Usage
First of all, let’s look at a simple example. For the web item provider, you must either provider a class that implements com.atlassian.plugin.web.api.provider.WebItemProvider
, or, more simply, a script that returns a collection of com.atlassian.plugin.web.api.WebItem
. Using a com.atlassian.plugin.web.api.model.WebFragmentBuilder
is the easiest way to create a collection of WebItem.
Set up the fragment like in the following screen capture:
The provider class/script can either be under a script root or inline. Here is a simple example:
import com.atlassian.plugin.web.model.WebFragmentBuilder ["Foo", "Bar", "Quz"].collect { new WebFragmentBuilder(50). // <1> id("sample-web-item-${it.toLowerCase()}"). // <2> label("$it Sample Web Item"). title("$it Sample Web Item Title"). styleClass(""). addParam("data-my-key", "data-value"). // <3> addParam("iconUrl", "/jira/images/icons/priorities/highest.svg"). // not all places will show icons webItem(""). // <4> url("/"). build() }
Line 4: The 50 refers to the weight of the item
Line 5: Give each web item a unique ID
Line 9: Additional data element items
Line 11: This parameter refers to the section, but it’s defined by the section for the context provider itself
There are a couple of shortcuts in this script that can be confusing. No return
statements are used (as the result of the last statement is returned in groovy). So the collect
returns the web items.