2011-03-23 75 views
3

對於JIRA項目,是否可以使用項目特定的樣式表?例如,如果我想將項目X包含在iframe中,我想隱藏徽標並可能隱藏JIRA工具欄 - 對於特定的用戶組,例如(僅用於查看目的,不是安全功能)JIRA每個項目的佈局

當然,我必須自己實現這個(例如通過webservice api) - 標準問題頁面是否有模板?

提前致謝!

+0

如果你只是想讓一個項目只讀,黑客的CSS不會是一個好辦法做到這一點。 – 2011-03-25 14:42:46

+0

沒有許可方案是堅實的,人們只是不需要工具欄。它也被嵌入到另一個門戶中,因此爲這個特定的項目應用相同的樣式表會很好。 – 2011-03-25 15:00:38

+0

你可以嘗試使用JavaScript來改變輸出或選擇一個CSS。 – 2011-03-25 15:03:47

回答

9

JIRA中有一個(當前未公開的)插入點,用於插入頂部導航組件<top-navigation>

你可以使用這個插件指向添加你自己的導航欄,也許使用內聯CSS樣式表隱藏普通欄。以下示例通過使用?hideit=true查詢參數來觸發此行爲,該參數是解決「嵌入iframe」問題的最簡單方法。您可以通過將其存儲在會話或cookie中來實現「粘性」。

一旦你創建了一個插件插入<top-navigation>,隱藏頂部欄很簡單。這裏是一個速度腳本,做它:

#if ($hideHeaderHack) 
    <style> 
     \#header {display:none;} 
    </style> 
    HIDDEN (remove this message eventually) 
#else 
    NORMAL (remove this message eventually) 
#end 

要創建這樣一個插件,使用Atlassian Plugin SDK(使用atlas-create-jira-plugin)。你atlassian-plugin.xml應該是這樣的:

<atlassian-plugin key="${project.groupId}.${project.artifactId}" name="${project.name}" plugins-version="2"> 
    <plugin-info> 
     <description>${project.description}</description> 
     <version>${project.version}</version> 
     <vendor name="${project.organization.name}" url="${project.organization.url}" /> 
    </plugin-info> 

    <top-navigation key="standard-navigation-top" 
        name="Tigerblood" 
        class="com.madbean.topnavhack.TopNav" state='enabled'> 
     <resource type="velocity" name="view" location="topnav.vm"/> 
     <order>5</order> 
    </top-navigation> 

</atlassian-plugin> 

您的頂級導航實現類(以上稱爲com.madbean.topnavhack.TopNav)應該是這樣的:

public class TopNav implements PluggableTopNavigation { 
    private TopNavigationModuleDescriptor descriptor; 

    public void init(TopNavigationModuleDescriptor descriptor) 
    { 
     this.descriptor = descriptor; 
    } 

    public String getHtml(HttpServletRequest request) { 
     Map<String,Object> params = new HashMap<String, Object>(); 

     params.put("hideHeaderHack", "true".equals(request.getParameter("hideit"))); 

     return descriptor.getTopNavigationHtml(request, params); 
    } 
} 

你的插件將進行佈局是這樣的:

./pom.xml 
./src/main/java/com/madbean/topnavhack/TopNav.java 
./src/main/resources/atlassian-plugin.xml 
./src/main/resources/topnav.vm 

免責聲明我在Atlassian作爲JIRA團隊的開發人員工作。

+1

+1 - 非常有趣和有益,謝謝! *目前沒有文檔*暗示,它將在一天內被正式記錄並因此可以被認爲是穩定的,或者這個插件點可能會從未來的JIRA版本中消失? – 2011-04-29 13:11:04

2

我不相信這個功能是直接暴露的,而且你沒有說明你使用的是哪個JIRA版本,但是在\ atlassian-jira \ includes \ decorators的4.x中有一個名爲bodytop.jsp的文件將具有以下片段呈現頂級導航和工具欄元素:

// Render all the top nav plugins for (Iterator iterator = topNavPlugins.iterator(); iterator.hasNext();) { TopNavigationModuleDescriptor topNavModuleDescriptor = (TopNavigationModuleDescriptor) iterator.next(); PluggableTopNavigation pluggableTopNavigation = (PluggableTopNavigation) topNavModuleDescriptor.getModule();

%> <%= pluggableTopNavigation.getHtml(request) %> <% } %>

如果你想你可以創建一個版本,呼籲修改bodytop.jsp呈現沒有的儀表盤渲染的JSP通常的導航元素。

0

我目前正在運行Jira 4.2.2並編寫了一個實現PluggableTopNavigation自定義導航欄的插件。不幸的是,這個功能,如授權問題中詳述的,現在已經被折舊了。

我的插件在Jira標頭的頂部添加了一個div,它創建了一個用於我們的開發頁面的漂亮菜單。菜單的源代碼被硬編碼到插件中,並作爲我們服務器上的靜態文件menu.html在不同頁面上共享。由於我不得不完全重新設計Jira 5.2的插件,我開始尋找重新實現菜單的不同方法。這就是我所定下的。這不是很好,但它使它,所以你不必編寫一個插件。

更改公告的旗幟(通過鍵入「GG」迅速到達那裏,然後搜索公告旗)以下:

<script type="text/javascript"> 
    jQuery(document).ready(function() { 
    jQuery.get("http://path.to.server/menu.html", function(data){ 
     jQuery("#header").prepend('<nav class="global" role="navigation">'+data+'</nav>'); 
     jQuery("#top-level-id-of-navbar a").css("color", "white") 
    }); 
    }); 
</script> 

替換爲自己的鏈接menu.html鏈接。標題的顏色由我的菜單中的鏈接繼承,所以我必須在插入html頁面後將它們更改爲白色。

結果看起來與Jira 4.2.2相同,所以我很高興。