Trac:修订间差异
跳到导航
跳到搜索
此页面具有访问限制。如果您看见此消息,则说明您没有权限访问此页面。
(→設定) |
(→設定) |
||
(未显示同一用户的2个中间版本) | |||
第3行: | 第3行: | ||
== 簡介 == | == 簡介 == | ||
=== 優點 === | === 優點 === | ||
* 簡單,專住在事情的記錄上,而不是限制行為上。 | |||
=== 缺點 === | === 缺點 === | ||
第60行: | 第61行: | ||
} | } | ||
#content.ticket { | #content.ticket { | ||
width: | width: 78em; | ||
} | } | ||
--> | --> | ||
第74行: | 第75行: | ||
var d = new Date(); | var d = new Date(); | ||
var today = (new Date(d.getTime() - d.getTimezoneOffset() * 60000)).toISOString().slice(0, 10); | var today = (new Date(d.getTime() - d.getTimezoneOffset() * 60000)).toISOString().slice(0, 10); | ||
document.querySelectorAll('table.tickets td.due_date').forEach(function(el) { | document.querySelectorAll('table.tickets td.due_date').forEach(function(el) { | ||
var due = el.innerText.trim(); | var due = el.innerText.trim(); | ||
第82行: | 第84行: | ||
} | } | ||
}); | }); | ||
jQuery('tr:has(a.closed)').addClass('ticket_closed'); | |||
})(); | })(); | ||
jQuery(function() { | jQuery(function() { | ||
jQuery('#attachments').removeClass('collapsed'); | |||
jQuery('#modify').parent().removeClass('collapsed'); | |||
}); | }); | ||
//--> | //--> |
2018年2月18日 (日) 15:53的版本
Trac是一套问题追踪系统(英语:Issue tracking system)。
简介
优点
- 简单,专住在事情的记录上,而不是限制行为上。
缺点
- 目前还是不支援Python 3。
安装
除了基本安装外,还会安装这些套件:
- GraphvizPlugin – Trac Hacks - Plugins Macros etc.
- TracCronPlugin – Trac Hacks - Plugins Macros etc.
- SubticketsPlugin – Trac Hacks - Plugins Macros etc.
设定
在templates/site.html
里做了一些事情。
JavaScript的部份:
- 用JavaScript针对今天到期以及过期的票增加CSS。
- 将票里的attachments与modify内容展开。
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, .closed.ticket { opacity: 0.5; } textarea { font-family: monospace; } #content.ticket { width: 78em; } --> </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('tr:has(a.closed)').addClass('ticket_closed'); })(); jQuery(function() { jQuery('#attachments').removeClass('collapsed'); jQuery('#modify').parent().removeClass('collapsed'); }); //--> </script> </body> </html>