1

我需要更改由 Fossil-SCM 在timelineTableCell类 td 元素中生成的时间线页面的 HTML。这个 td 元素的当前内容如下

<td class="timelineTableCell" style="FOO">
    <a class="timelineHistLink" href="FOO">[DF45GH67MD]</a>
    <span class="timelineLeaf">Leaf:</span>
    <span class="timelineComment">Any comment goes here</span>
    (user: <a href="FOO">User Name</a>,tags: <a href="FOO">Lyca+ HLR</a>)
</td>

我要求单个 td 中的每个元素如下

<td><a class="timelineHistLink" href="FOO">[DF45GH67MD]</a></td>
<td><span class="timelineLeaf">Leaf(empty if not leaf)</span></td>
<td><span class="timelineComment">Any comment goes here</span></td>
<td>User: <a href="FOO">Usr_Name</a></td>
<td>Tags: <a href="FOO">Tag_Name</a></td>

所以通过这个页面看起来会更好对齐和更具可读性。我怎样才能做到这一点?

4

1 回答 1

2

我可以想到两种方法:

  1. 通过构建您自己的 Fossil 版本。克隆 Fossil存储库,并创建一个(私有)分支,您可以在其中更改源代码,并编译您自己的 Fossil 版本。这确实意味着每次您想要更新化石时,您都需要将主干合并到您的分支中,然后再次编译它。
  2. 通过使用 CSS 和 Javascript。在Admin页面下,您可以在为每个页面生成的页眉和页脚部分插入内容。

    • 寻找CSS页面。在那里,您可以指定display: table-cell;for .timelineHistLink, .timelineLeaf, .timelineComment。这应该将这三个元素转换为单独的表格单元格。请注意,我没有对此进行测试,它可能无法正常工作,因为它们已经在表格单元格中。无论如何,这不会将用户和标签变成单独的单元格。这是你必须使用 Javascript 做的事情。
    • Footer页面中,您可以插入一段 Javascript 以按照您喜欢的方式更改页面。这是我曾经编写的一个脚本示例,用于摆脱每次签入的 UUID,并将提交文本转换为链接:

(TH1 是 Fossil 的服务器端语言;我在这里用它来表示这个脚本应该只在时间线页面而不是每个页面上生成)。

<th1>
    if {$current_page eq "timeline"} {
        enable_output 1
    } else {
        enable_output 0
    }
</th1>
<script>
(function() {
        var cells = document.getElementsByClassName('timelineTableCell');
        for (var i = 0; i < cells.length; i++) {
                cells[i].innerHTML = cells[i].innerHTML.replace(/^[^<]*<a href="([^"]*)">[^<]*<\/a>\]\s*(.*)\s+(\(user:[^\0]*\))\s*$/, '<a href="$1">$2</a><br> <span style="font-size: smaller; font-style: italic; opacity: 0.75">$3</span>');
        }
})();
</script>
<th1>
    enable_output 1
</th1>
于 2014-03-28T16:52:45.867 回答