2011-03-23 99 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相同,所以我很高兴。