之前在 Trac 裡會想要達成「當使用者參與這張票時,自動加到 cc list 讓他收到後續的更新」這樣的功能。之前沒有仔細研究要怎麼在 Trac 裡面實踐,就直接在 template (也就是 site.html
) 裡面用 javascript 在 client 做掉...
先拉出 authname
:
<script> (function() { window.authname = "${authname}"; })(); </script>
然後再攔截網址裡有 /ticket/
的頁面,當 form
符合條件時攔截 submit
事件,在 cc list 裡面沒有自己時把自己加進去:
// Add myself into cc list, if I am not in cc list now. (function() { if (-1 === document.location.href.indexOf('/ticket/')) { return; } var cc_list = jQuery('input[name="field_cc"]').val().split(/[ ,]+/); for (var i in cc_list) { if (window.authname === cc_list[i]) { return; } } jQuery(function() { jQuery('form#propertyform').submit(function() { var cc = jQuery('input[name="field_cc"]'); cc.val(cc.val() + ',' + window.authname); }); }); })();
這樣是可以達成目的啦,但有種惡搞的感覺... 所以這次還是寫了個 Trac plugin 來解決,這樣不用擔心當網頁界面改版時會產生問題:「104corp/trac-addtocc-plugin」。