问题 在Trac中更改票证显示


使用默认模板,trac票证仅可供查看,我必须单击修改以展开属性选项卡以进行修改,更改票证的状态。 现在我想自动扩展该选项卡?如何在不更改模板本身的情况下快速更改? 是否可以使用trac.ini文件更改它? 我无法找到要更改的默认模板的位置,因此我无法更改自己。 谢谢!


13122
2017-07-27 04:57


起源

我有完全相同的需求 - 甚至一些帮助如何更改模板将是有用的。 - Tom
你们两个在谈论trac 0.12吗?如果是这样,将该信息添加到问题中可能会很好。我在trac 0.11中没有任何“修改”选项卡。实际上,我根本没有关于票的任何标签...... - Oliver Giesen
是的,我正在使用Trac 0.12 - hungnv


答案:


我认为启用您正在寻找的行为的最佳方法是添加一个自定义JS文件(可以像自定义CSS一样注入,读取TracInterfaceCustomization)。

在该文件中执行此操作:

$(document).ready(function() {
 window.setTimeout(function() {
    $("#modify").parent().removeClass('collapsed')
 }, 0);
});

这段代码未经测试,但它应该给你一个想法。基本上我们需要等到DOM准备就绪($(document).ready)但由于在该事件期间调用了多个JS函数,setTimeOut会设置一个稍微的延迟以确保崩溃命令在之前完成。

来自专业Trac开发人员的HTH :-)


8
2017-07-27 20:31



我不得不使用$(document).ready来实现这一点,但除了在trac 0.12中工作得很好。谢谢! - icco
我已经尝试了很多次,并且不能让我的生活得到它的工作,我甚至回答了这个问题,然后在我意识到我做出的错误假设之后删除了它。 icco的结果与我的相同,改变了第一行 $.ready 至 $(document).ready,它的工作原理!好极了!现在让TRAC开发人员撤消webapp本身的这一可怕变化。我甚至无法理解他们首先做出的假设。 - VxJasonxV
是的,你是对的我忘了$(文件).ready,改了:-) - Felix Schwarz


我使用trac 0.12并遇到了同样的问题。

...而不更改模板本身

我找不到配置它的选项但我注意到你点击了“修改“快速链接在票证的右上角,然后”修改票证“可折叠区域将自动为您解除折叠。

我知道你没有要求它,但为了以防万一,你想要一个可怕的模板黑客......

在编辑器中打开模板文件,例如在CentOS 5.5中对我来说:

sudo emacs  /usr/lib/python2.4/site-packages/Trac-0.12-py2.4.egg/trac/ticket/templates/ticket.html

注释掉触发它的jQuery行 修改 要在页面准备好后折叠的部分:

//$("#modify").parent().toggleClass("collapsed");

我发现编辑没有立即生效 - 也许模板是缓存还是什么?它经过几分钟的转换 - 刷新并重新启动apache后工作。

让我们希望别人用更好的解决方案来回答......


3
2017-07-27 15:22



是的,模板是缓存的。你需要在你的trac.ini中设置[trac] auto_reload = True - Felix Schwarz
但对我来说,您正在谈论的目录/usr/lib/python2.4/site-packages/Trac-0.12-py2.4.egg只是一个带有egg扩展名的文件?这对我来说很奇怪,这是我第一次使用Trac,为什么你的目录成为我的文件使用相同版本的Trac? - hungnv
你的鸡蛋是拉链的,而我的是拉开拉链的。我用Trac安装了 easy_install --always-unzip Trac==0.12 因为我的操作系统无法识别压缩蛋。你可以用你的鸡蛋解压缩 unzip,然后删除压缩版本(否则你将安装两个trac)。 - Tom
好,我知道了。非常感谢你! - hungnv


这基本上是施瓦茨的答案,但形式更简单

要获得负载扩展的票证控制,请执行以下操作。请输入以下代码

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:py="http://genshi.edgewall.org/"
      py:strip="">

  <!--! Add site-specific style sheet -->
  <head py:match="head" py:attrs="select('@*')">
    ${select('*|comment()|text()')}
    <script type="text/JavaScript">
    <!--
    // EXPAND TICKET CONROLS ON LOAD.
    jQuery(document).ready(function() {
     window.setTimeout(function() {
        $("#modify").parent().removeClass('collapsed')
     }, 1);
    });
    //-->
    </script>
  </head>

  <body py:match="body" py:attrs="select('@*')">
    ${select('*|text()')}
  </body>
</html>

在/ path / to / your / trac / project /模板 目录在文件中 site.html


2
2017-10-17 22:19



我觉得这种方式更清洁。 - Walty Yeung