「Trac」:修訂間差異
跳至導覽
跳至搜尋
第9行: | 第9行: | ||
另外在1.0的系統上,因為需要Due Date的設計所以安裝了: | 另外在1.0的系統上,因為需要Due Date的設計所以安裝了: | ||
* [https://trac-hacks.org/wiki/DateFieldPlugin DateFieldPlugin – Trac Hacks - Plugins Macros etc.] | * [https://trac-hacks.org/wiki/DateFieldPlugin DateFieldPlugin – Trac Hacks - Plugins Macros etc.] | ||
== 設定 == | |||
在<code>templates/site.html</code>裡做了一些事情。 | |||
JavaScript的部份: | |||
* 用JavaScript針對今天到期以及過期的票增加CSS。 | |||
* 預設展開修改的區域。 | |||
CSS的部份: | |||
* 全部使用sans-serif字型。 | |||
* 修正button因為CSS效果而有時會按不到的問題。 | |||
* 針對今天到期與過期的票用不同的標示標出。 | |||
* 將已經關掉的票變淡。 | |||
* 讓編輯區域使用等寬字型。 | |||
* 讓可用範圍變寬。 | |||
<pre> | |||
<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()')} | |||
<style type="text/css"> | |||
<!-- | |||
body, th, tr { | |||
font-family: sans-serif; | |||
} | |||
input[type=button]:active, input[type=submit]:active, | |||
input[type=reset]:active { | |||
position: relative; | |||
top: 0; | |||
left: 0; | |||
} | |||
table.tickets tr.duedate_overdue { | |||
font-weight: bold; | |||
} | |||
table.tickets tr.duedate_today { | |||
border: 2px solid; | |||
} | |||
table.subtickets tr.ticket_closed { | |||
opacity: 0.5; | |||
} | |||
textarea { | |||
font-family: monospace; | |||
} | |||
#content.ticket { | |||
width: 68em; | |||
} | |||
--> | |||
</style> | |||
</head> | |||
<body py:match="body" py:attrs="select('@*')"> | |||
${select('*|text()')} | |||
<script> | |||
<!-- | |||
(function() { | |||
var d = new Date(); | |||
var today = (new Date(d.getTime() - d.getTimezoneOffset() * 60000)).toISOString().slice(0, 10); | |||
document.querySelectorAll('table.tickets td.due_date').forEach(function(el) { | |||
var due = el.innerText.trim(); | |||
if (due < today) { | |||
el.parentElement.classList.add('duedate_overdue'); | |||
} else if (due === today) { | |||
el.parentElement.classList.add('duedate_today'); | |||
} | |||
}); | |||
})(); | |||
jQuery(function() { | |||
var el = document.getElementById('modify'); | |||
if (el) { | |||
el.parentElement.classList.remove('collapsed'); | |||
} | |||
}); | |||
//--> | |||
</script> | |||
</body> | |||
</html> | |||
</pre> | |||
== 外部連結 == | == 外部連結 == |
於 2018年2月18日 (日) 09:32 的修訂
Trac是一套問題追蹤系統(英語:Issue tracking system)。
安裝
除了基本安裝外,還會安裝這些套件:
- GraphvizPlugin – Trac Hacks - Plugins Macros etc.
- TracCronPlugin – Trac Hacks - Plugins Macros etc.
- itota/trac-subtickets-plugin: A sub-ticket support plugin for trac
另外在1.0的系統上,因為需要Due Date的設計所以安裝了:
設定
在templates/site.html
裡做了一些事情。
JavaScript的部份:
- 用JavaScript針對今天到期以及過期的票增加CSS。
- 預設展開修改的區域。
CSS的部份:
- 全部使用sans-serif字型。
- 修正button因為CSS效果而有時會按不到的問題。
- 針對今天到期與過期的票用不同的標示標出。
- 將已經關掉的票變淡。
- 讓編輯區域使用等寬字型。
- 讓可用範圍變寬。
<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()')} <style type="text/css"> <!-- body, th, tr { font-family: sans-serif; } input[type=button]:active, input[type=submit]:active, input[type=reset]:active { position: relative; top: 0; left: 0; } table.tickets tr.duedate_overdue { font-weight: bold; } table.tickets tr.duedate_today { border: 2px solid; } table.subtickets tr.ticket_closed { opacity: 0.5; } textarea { font-family: monospace; } #content.ticket { width: 68em; } --> </style> </head> <body py:match="body" py:attrs="select('@*')"> ${select('*|text()')} <script> <!-- (function() { var d = new Date(); var today = (new Date(d.getTime() - d.getTimezoneOffset() * 60000)).toISOString().slice(0, 10); document.querySelectorAll('table.tickets td.due_date').forEach(function(el) { var due = el.innerText.trim(); if (due < today) { el.parentElement.classList.add('duedate_overdue'); } else if (due === today) { el.parentElement.classList.add('duedate_today'); } }); })(); jQuery(function() { var el = document.getElementById('modify'); if (el) { el.parentElement.classList.remove('collapsed'); } }); //--> </script> </body> </html>