是否可以为JIRA项目使用特定于项目的样式表?
例如,如果我想在iframe中包含项目X,我想隐藏徽标和可能的JIRA工具栏 - 例如,对于特定的用户组(它仅用于查看目的,它不是安全性功能)
当然,我必须自己实现(例如通过webservice api) - 是否有标准问题页面的模板?
提前致谢!
答案 0 :(得分: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
免责声明我作为JIRA团队的开发人员为Atlassian工作。
答案 1 :(得分:2)
我不相信这个功能是直接暴露的,你没有说明你正在使用的JIRA版本,但在4.x in \ atlassian-jira \ includes \ decorators中有一个名为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) %>
<%
}
%>
如果您愿意,可以创建一个版本的仪表板渲染jsp,它调用一个修改后的bodytop.jsp,它不会渲染任何常用的nav元素。
答案 2 :(得分:1)
我很想写一个基本的插件来做这件事。
查看http://confluence.atlassian.com/display/JIRA/Web+Resource+Plugin+Module
如果您还没有编写jira插件,现在可能是时候尝试http://confluence.atlassian.com/display/DEVNET/Developing+your+Plugin+using+the+Atlassian+Plugin+SDK。
答案 3 :(得分:0)
我目前正在运行Jira 4.2.2,并为自定义导航栏编写了一个实现PluggableTopNavigation
的插件。遗憾的是,此功能已在获奖问题中详细说明,现已折旧。
我的插件在Jira标题的顶部添加了div
,创建了一个用于我们的开发页面的漂亮菜单。菜单源已硬编码到插件中,并作为静态menu.html
文件放在我们的服务器上,以便在不同页面之间共享。
由于我必须完全重新设计Jira 5.2的插件,我开始寻找不同的方法来重新实现菜单。这就是我所确定的。它并不漂亮,但它使得你不必编写插件。
更改您的公告横幅(通过键入&#39; gg&#39;然后搜索公告横幅)快速到达以下内容:
<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相同,所以我很高兴。