Merge lp:~jjacobs/twisted-website/visual-design-update into lp:~exarkun/twisted-website/trunk

Proposed by Jonathan Jacobs
Status: Superseded
Proposed branch: lp:~jjacobs/twisted-website/visual-design-update
Merge into: lp:~exarkun/twisted-website/trunk
Diff against target: 3839 lines (+978/-2379)
25 files modified
trac-files/common/css/browser.css.save (+0/-127)
trac-files/common/css/diff.css.save (+0/-156)
trac-files/common/css/report.css (+5/-11)
trac-files/common/css/roadmap.css (+0/-5)
trac-files/common/css/search.css (+0/-1)
trac-files/common/css/ticket.css (+124/-39)
trac-files/common/css/ticket.css.save (+0/-262)
trac-files/common/css/timeline.css (+5/-8)
trac-files/common/css/trac.css (+632/-305)
trac-files/common/js/news.js (+92/-0)
trac-files/templates/README (+0/-8)
trac-files/templates/about.html (+0/-89)
trac-files/templates/attachment.html (+0/-118)
trac-files/templates/diff_div.html (+0/-227)
trac-files/templates/diff_view.html (+0/-71)
trac-files/templates/error.html (+0/-200)
trac-files/templates/history_view.html (+0/-57)
trac-files/templates/index.html (+0/-23)
trac-files/templates/layout.html (+0/-57)
trac-files/templates/macros.cs (+0/-197)
trac-files/templates/macros.html (+0/-260)
trac-files/templates/macros.rss (+0/-29)
trac-files/templates/page_index.html (+0/-27)
trac-files/templates/site.html (+120/-0)
trac-files/templates/theme.html (+0/-102)
To merge this branch: bzr merge lp:~jjacobs/twisted-website/visual-design-update
Reviewer Review Type Date Requested Status
Itamar Turner-Trauring (community) Approve
Jean-Paul Calderone Pending
Review via email: mp+80468@code.launchpad.net

This proposal has been superseded by a proposal from 2011-11-29.

Description of the change

Update visual design for twistedmatrix.com.

An example of the main page view can be found at <https://dl.dropbox.com/u/4030134/Twisted/Twisted.htm>.
An example of the ticket view can be found at <https://dl.dropbox.com/u/4030134/Twisted/5047.htm>.

To post a comment you must log in.
7. By Jonathan Jacobs

Remove editor backups.

8. By Jonathan Jacobs

Clean up some duplicated styles, tweak styling.

9. By Jonathan Jacobs

Some tweaks based on a conversation with Itamar.

10. By Jonathan Jacobs

Fix ticket status alignment issues.

11. By Jonathan Jacobs

Button and font tweaks.

12. By Jonathan Jacobs

Improve table/listing styles.

13. By Jonathan Jacobs

Timeline style changes.

14. By Jonathan Jacobs

Ticket form contrast improvements.

15. By Jonathan Jacobs

Match attachment page visual style with other ticket pages.

16. By Jonathan Jacobs

Improve hyperlink visibility.

17. By Jonathan Jacobs

Minor report tweak.

18. By Jonathan Jacobs

Small report, roadmap and search visual tweaks.

19. By Jonathan Jacobs

Report header tweak.

20. By Jonathan Jacobs

Tweak margin on the download element.

21. By Jonathan Jacobs

Update graphics resources with correct colour profiles.

22. By Jonathan Jacobs

Background changes, refinements etc.

23. By Jonathan Jacobs

Minor background texture changes.

24. By Jonathan Jacobs

Input button focus style.

25. By Jonathan Jacobs

Book image adjustments.

26. By Jonathan Jacobs

Rather put book image styling in the wiki markup.

27. By Jonathan Jacobs

Minor tweaks to hyperlinks and paragraph anchors.

28. By Jonathan Jacobs

Style name tweaks.

Revision history for this message
Itamar Turner-Trauring (itamarst) wrote :

We're only ever going to know if this works by merging it, so, approved.

review: Approve
29. By Jonathan Jacobs

Fetch and insert news feed items asynchronously on the client side.

Revision history for this message
Jonathan Jacobs (jjacobs) wrote :

> We're only ever going to know if this works by merging it, so, approved.

I managed to do the asynchronous news thing without too much effort, so it might as well slip in here.

30. By Jonathan Jacobs

Bail out of fetching news feeds earlier.

Revision history for this message
Itamar Turner-Trauring (itamarst) wrote :

+ <script type="text/javascript" src="https://www.google.com/jsapi?key=ABQIAAAAJE-f7vmwI1-jxkmwRe4lUxTAs18ELyhzmLGaHoc1qJwmpJy3zhR3LMRRdwqg5PSY4tnVO684msUklQ"></script>

I assume this is the feed javascript? It seems to have a license key of some sort, is that limited in number of times we can use it, or? Actually a little investigation suggests "probably not".

So, approved, in so far as I am capable of reviewing this (only barely), but like I said, the only real way to test is to go live.

review: Approve
Revision history for this message
Itamar Turner-Trauring (itamarst) wrote :

Do you need me to do the merge? And is "bzr merge lp:~jjacobs/twisted-website/visual-design-update" without a local checkout actually sufficient?

Revision history for this message
Jonathan Jacobs (jjacobs) wrote :

> Do you need me to do the merge? And is "bzr merge lp:~jjacobs/twisted-website
> /visual-design-update" without a local checkout actually sufficient?

You'll need to commit the merge too.

If you created your local checkout of lp:twisted-website with "bzr branch" (as opposed to "bzr checkout") then you will need to "bzr push lp:twisted-website" too.

Although I see that lp:twisted-website is an alias for something in exarkun's user directory, I doubt you'll be able to push to that. So either exarkun needs to do this himself or change the location of trunk to something that he can give people access to write to.

31. By Jonathan Jacobs

Perform the correct incantation for linking the news script.

Unmerged revisions

31. By Jonathan Jacobs

Perform the correct incantation for linking the news script.

30. By Jonathan Jacobs

Bail out of fetching news feeds earlier.

29. By Jonathan Jacobs

Fetch and insert news feed items asynchronously on the client side.

28. By Jonathan Jacobs

Style name tweaks.

27. By Jonathan Jacobs

Minor tweaks to hyperlinks and paragraph anchors.

26. By Jonathan Jacobs

Rather put book image styling in the wiki markup.

25. By Jonathan Jacobs

Book image adjustments.

24. By Jonathan Jacobs

Input button focus style.

23. By Jonathan Jacobs

Minor background texture changes.

22. By Jonathan Jacobs

Background changes, refinements etc.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== removed file 'trac-files/common/banner_back.png'
0Binary files trac-files/common/banner_back.png 2011-10-17 17:00:12 +0000 and trac-files/common/banner_back.png 1970-01-01 00:00:00 +0000 differ0Binary files trac-files/common/banner_back.png 2011-10-17 17:00:12 +0000 and trac-files/common/banner_back.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'trac-files/common/banner_border_back.png'
1Binary files trac-files/common/banner_border_back.png 2011-10-17 17:00:12 +0000 and trac-files/common/banner_border_back.png 1970-01-01 00:00:00 +0000 differ1Binary files trac-files/common/banner_border_back.png 2011-10-17 17:00:12 +0000 and trac-files/common/banner_border_back.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'trac-files/common/banner_link_download.png'
2Binary files trac-files/common/banner_link_download.png 2011-10-17 17:00:12 +0000 and trac-files/common/banner_link_download.png 1970-01-01 00:00:00 +0000 differ2Binary files trac-files/common/banner_link_download.png 2011-10-17 17:00:12 +0000 and trac-files/common/banner_link_download.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'trac-files/common/banner_link_faq.png'
3Binary files trac-files/common/banner_link_faq.png 2011-10-17 17:00:12 +0000 and trac-files/common/banner_link_faq.png 1970-01-01 00:00:00 +0000 differ3Binary files trac-files/common/banner_link_faq.png 2011-10-17 17:00:12 +0000 and trac-files/common/banner_link_faq.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'trac-files/common/banner_link_home.png'
4Binary files trac-files/common/banner_link_home.png 2011-10-17 17:00:12 +0000 and trac-files/common/banner_link_home.png 1970-01-01 00:00:00 +0000 differ4Binary files trac-files/common/banner_link_home.png 2011-10-17 17:00:12 +0000 and trac-files/common/banner_link_home.png 1970-01-01 00:00:00 +0000 differ
=== added file 'trac-files/common/bg.png'
5Binary files trac-files/common/bg.png 1970-01-01 00:00:00 +0000 and trac-files/common/bg.png 2011-11-24 10:57:32 +0000 differ5Binary files trac-files/common/bg.png 1970-01-01 00:00:00 +0000 and trac-files/common/bg.png 2011-11-24 10:57:32 +0000 differ
=== removed file 'trac-files/common/css/browser.css.save'
--- trac-files/common/css/browser.css.save 2011-10-17 17:00:12 +0000
+++ trac-files/common/css/browser.css.save 1970-01-01 00:00:00 +0000
@@ -1,127 +0,0 @@
1#prefs { margin-top: -1.6em }
2* html #prefs { width: 34em } /* Set width only for IE */
3#prefs fieldset label { display: block }
4#prefs .buttons { margin-top: -1.6em }
5#prefs .choice { margin-top: -0.6em }
6
7#legend { clear: right; }
8
9/* Browser */
10h1 { margin: 0; padding: 0 0 .5em }
11h1 :link, h1 :visited, h1 .filename { border: none; padding: 0 .2em }
12h1 :link, h1 :visited { color: #b00 }
13h1 .first:link, h1 .first:visited { color: #998 }
14h1 .sep { color: #666; padding: 0 .1em }
15
16#jumprev { float: right; font-size: 10px; margin: 0 0 0 }
17#jumprev form { margin: 0 }
18#jumprev input { font-size: 10px; margin-right: 0 }
19
20/* Styles for the directory entries table
21 (extends the styles for "table.listing") */
22#dirlist { margin-top: 0 }
23#dirlist td.rev, #dirlist td.age, #dirlist td.change {
24 color: #888;
25 white-space: nowrap;
26 vertical-align: baseline;
27}
28#dirlist td.rev {
29 font-family: monospace;
30 letter-spacing: -0.08em;
31 font-size: 90%;
32 text-align: right;
33}
34#dirlist td.size {
35 color: #888;
36 white-space: nowrap;
37 text-align: right;
38 vertical-align: middle;
39 font-size: 70%;
40}
41#dirlist td.name { width: 100% }
42#dirlist td.name a, #dirlist td.name span {
43 background-position: 0% 50%;
44 background-repeat: no-repeat;
45 padding-left: 20px;
46}
47#dirlist td.name a.parent { background-image: url(../parent.png) }
48#dirlist td.name a.dir { background-image: url(../folder.png) }
49#dirlist td.name a.file { background-image: url(../file.png) }
50#dirlist td.name a, #dirlist td.rev a { border-bottom: none; display: block }
51#dirlist td.rev { text-align: right }
52#dirlist td.change { font-size: 85%; vertical-align: middle; white-space: nowrap }
53
54/* Style for the ''View Changes'' button */
55#anydiff { margin: 0 0 1em; float: left }
56#anydiff form, #anydiff div, #anydiff h2 { display: inline }
57#anydiff input { vertical-align: baseline; margin: 0 -0.5em 0 1em }
58@media print {
59 #anydiff form { display: none }
60}
61
62/* Log */
63tr.diff input { padding: 0 1em; margin: 0 }
64
65div.buttons { clear: left }
66@media print {
67 th.diff, td.diff { display: none }
68}
69
70/* Styles for the revision log table (extends the styles for "table.listing") */
71#chglist { margin-top: 0 }
72#chglist td.change span {
73 border: 1px solid #999;
74 display: block;
75 margin: .2em .5em 0 0;
76 width: .8em; height: .8em;
77}
78#chglist td.diff { white-space: nowrap }
79#chglist td.change .comment { display: none }
80#chglist td.old_path { font-style: italic }
81#chglist td.date {
82 font-size: 85%;
83 vertical-align: top;
84 padding-top: 0.55em;
85 white-space: nowrap;
86}
87#chglist td.author { font-size: 85%; vertical-align: top; padding-top: 0.55em }
88#chglist td.rev, #chglist td.chgset {
89 font-family: monospace;
90 letter-spacing: -0.08em;
91 font-size: 90%;
92 text-align: right;
93}
94#chglist td.rev a, #chglist td.chgset a { border-bottom: none }
95#chglist td.summary {
96 width: 100%;
97 font-size: 85%;
98 vertical-align: middle;
99 white-space: nowrap
100}
101#chglist .verbose td.summary {
102 border: none;
103 color: #333;
104 padding: .5em 1em 1em 2em;
105 font-size: 90%;
106 white-space: normal
107}
108
109#chglist td.summary * { margin-top: 0; margin-bottom: 0 }
110
111#paging { margin: 1em 0 }
112
113/* Styles for the revision info in the file view (see also trac.css) */
114#info { margin: 0; }
115#info .props {
116 color: #666;
117 list-style: square;
118 margin: 0 0 .4em 1.6em;
119 padding: 0;
120}
121#info .props li { padding: 0 }
122
123/* Styles for the HTML preview */
124#preview { background: #fff; clear: both; margin: 0 }
125#preview .code-block { border-top: 1px solid #999; margin: 0 }
126#preview .image-file { overflow: hidden }
127#preview .image-file img { max-width: 100% }
1280
=== removed file 'trac-files/common/css/diff.css.save'
--- trac-files/common/css/diff.css.save 2011-10-17 17:00:12 +0000
+++ trac-files/common/css/diff.css.save 1970-01-01 00:00:00 +0000
@@ -1,156 +0,0 @@
1/* Diff preferences */
2#prefs fieldset { margin: 1em .5em .5em; padding: .5em 1em 0 }
3
4/* Diff/change overview */
5#overview { line-height: 130%; margin-top: 1em; padding: .5em }
6#overview dt.property {
7 font-weight: bold;
8 padding-right: .25em;
9 position: absolute;
10 left: 0;
11 text-align: right;
12 width: 7.75em;
13}
14#overview dd { margin-left: 8em }
15
16#overview .message { padding: 1em 0 1px }
17#overview dd.message p, #overview dd.message ul, #overview dd.message ol,
18#overview dd.message pre { margin-bottom: 1em; margin-top: 0; }
19
20/* Colors for change types */
21#chglist .edit, #overview .mod, .diff #legend .mod { background: #fd8 }
22#chglist .delete, #overview .rem, .diff #legend .rem { background: #f88 }
23#chglist .add, #overview .add, .diff #legend .add { background: #bfb }
24#chglist .copy, #overview .cp, .diff #legend .cp { background: #88f }
25#chglist .move, #overview .mv, .diff #legend .mv { background: #ccc }
26#chglist .unknown { background: #fff }
27
28/* Legend for diff colors */
29.diff #legend {
30 float: left;
31 font-size: 9px;
32 line-height: 1em;
33 margin: 1em 0;
34 padding: .5em;
35}
36.diff #legend h3 { display: none; }
37.diff #legend dt {
38 background: #fff;
39 border: 1px solid #999;
40 float: left;
41 margin: .1em .5em .1em 2em;
42 overflow: hidden;
43 width: .8em; height: .8em;
44}
45.diff #legend dl, .diff #legend dd {
46 display: inline;
47 float: left;
48 padding: 0;
49 margin: 0;
50 margin-right: .5em;
51}
52
53/* Styles for the list of diffs */
54.diff ul.entries { clear: both; margin: 0; padding: 0 }
55.diff li.entry {
56 background: #f7f7f7;
57 border: 1px solid #d7d7d7;
58 list-style-type: none;
59 margin: 0 0 2em;
60 padding: 2px;
61 position: relative;
62 width: 100%;
63}
64.diff h2 {
65 color: #333;
66 font-size: 14px;
67 letter-spacing: normal;
68 margin: 0 auto;
69 padding: .1em 0 .25em .5em;
70}
71
72/* Styles for the actual diff tables (side-by-side and inline) */
73.diff table {
74 border: 1px solid #ddd;
75 border-spacing: 0;
76 border-top: 0;
77 empty-cells: show;
78 font-size: 12px;
79 line-height: 130%;
80 padding: 0;
81 margin: 0 auto;
82 table-layout: fixed;
83 width: 100%;
84}
85.diff table col.lineno { width: 4em }
86.diff table th {
87 border-right: 1px solid #d7d7d7;
88 border-bottom: 1px solid #998;
89 font-size: 11px;
90}
91.diff table thead th {
92 background: #eee;
93 border-top: 1px solid #d7d7d7;
94 color: #999;
95 padding: 0 .25em;
96 text-align: center;
97 white-space: nowrap;
98}
99.diff table tbody th {
100 background: #eed;
101 color: #886;
102 font-weight: normal;
103 padding: 0 .5em;
104 text-align: right;
105 vertical-align: top;
106}
107.diff table tbody td {
108 background: #fff;
109 font: normal 11px monospace;
110 overflow: hidden;
111 padding: 1px 2px;
112 vertical-align: top;
113}
114.diff table tbody.skipped td {
115 background: #f7f7f7;
116 border: 1px solid #d7d7d7;
117}
118.diff table td del, .diff table td ins { text-decoration: none }
119.diff table td del { color: #600 }
120.diff table td ins { color: #060 }
121
122/* Styles for the inline diff */
123.diff table.inline tbody.mod td.l, .diff table.inline tbody.rem td.l {
124 background: #fdd;
125 border-color: #c00;
126 border-style: solid;
127 border-width: 0 1px 0 1px;
128}
129.diff table.inline tbody.mod td.r, .diff table.inline tbody.add td.r {
130 background: #dfd;
131 border-color: #0a0;
132 border-style: solid;
133 border-width: 0 1px 0 1px;
134}
135.diff table.inline tbody.mod tr.first td.l,
136.diff table.inline tbody.rem tr.first td.l { border-top-width: 1px }
137.diff table.inline tbody.mod tr.last td.l,
138.diff table.inline tbody.rem tr.last td.l { border-bottom-width: 1px }
139.diff table.inline tbody.mod tr.first td.r,
140.diff table.inline tbody.add tr.first td.r { border-top-width: 1px }
141.diff table.inline tbody.mod tr.last td.r,
142.diff table.inline tbody.add tr.last td.r { border-bottom-width: 1px }
143.diff table.inline tbody.mod td del { background: #e99; color: #000 }
144.diff table.inline tbody.mod td ins { background: #9e9; color: #000 }
145
146/* Styles for the side-by-side diff */
147.diff table.sidebyside colgroup.content { width: 50% }
148.diff table.sidebyside tbody.mod td.l { background: #fe9 }
149.diff table.sidebyside tbody.mod td.r { background: #fd8 }
150.diff table.sidebyside tbody.add td.l { background: #dfd }
151.diff table.sidebyside tbody.add td.r { background: #cfc }
152.diff table.sidebyside tbody.rem td.l { background: #f88 }
153.diff table.sidebyside tbody.rem td.r { background: #faa }
154.diff table.sidebyside tbody.mod del, .diff table.sidebyside tbody.mod ins {
155 background: #fc0;
156}
1570
=== modified file 'trac-files/common/css/report.css'
--- trac-files/common/css/report.css 2011-10-17 17:00:12 +0000
+++ trac-files/common/css/report.css 2011-11-24 10:57:32 +0000
@@ -165,16 +165,11 @@
165/* @import url(code.css); */165/* @import url(code.css); */
166166
167h1 .numrows, h2 .numrows {167h1 .numrows, h2 .numrows {
168 margin-left: 1em;168 margin-left: 1em;
169 color: #999; 169 color: #777;
170 font-size: 65%; 170 font-size: 65%;
171 font-weight: normal; 171 vertical-align: middle;
172}172 text-transform: uppercase;
173h2 {
174 background: #f7f7f7;
175 border-bottom: 1px solid #d7d7d7;
176 margin: 2em 0 0;
177 padding: 0 .33em;
178}173}
179#report-descr { margin: 0 2em; font-size: 90% }174#report-descr { margin: 0 2em; font-size: 90% }
180#report-notfound { margin: 2em; font-size: 110% }175#report-notfound { margin: 2em; font-size: 110% }
@@ -205,7 +200,6 @@
205.tickets tbody td :link, .tickets tbody td :visited { display: block }200.tickets tbody td :link, .tickets tbody td :visited { display: block }
206.tickets { border-bottom: none }201.tickets { border-bottom: none }
207.tickets thead th { text-transform: capitalize; white-space: nowrap; }202.tickets thead th { text-transform: capitalize; white-space: nowrap; }
208.tickets tbody td, .reports tbody td { padding: .1em .5em !important }
209.tickets tbody td a, .reports tbody td a { border-bottom: none }203.tickets tbody td a, .reports tbody td a { border-bottom: none }
210.tickets tbody td.id :link, .tickets tbody td.id :visited {204.tickets tbody td.id :link, .tickets tbody td.id :visited {
211 font-weight: bold;205 font-weight: bold;
212206
=== modified file 'trac-files/common/css/roadmap.css'
--- trac-files/common/css/roadmap.css 2011-10-17 17:00:12 +0000
+++ trac-files/common/css/roadmap.css 2011-11-24 10:57:32 +0000
@@ -27,11 +27,6 @@
27ul.milestones { margin: 2em 0 0; padding: 0 }27ul.milestones { margin: 2em 0 0; padding: 0 }
28li.milestone { list-style: none; margin-bottom: 4em }28li.milestone { list-style: none; margin-bottom: 4em }
29.milestone .info { white-space: nowrap }29.milestone .info { white-space: nowrap }
30.milestone .info h2 {
31 background: #f7f7f7;
32 border-bottom: 1px solid #d7d7d7;
33 margin: 0;
34}
35.milestone .info h2 :link, .milestone .info h2 :visited {30.milestone .info h2 :link, .milestone .info h2 :visited {
36 color: #000;31 color: #000;
37 display: block;32 display: block;
3833
=== modified file 'trac-files/common/css/search.css'
--- trac-files/common/css/search.css 2011-10-17 17:00:12 +0000
+++ trac-files/common/css/search.css 2011-11-24 10:57:32 +0000
@@ -5,7 +5,6 @@
55
6#results { margin-right: 3em }6#results { margin-right: 3em }
7#results dt { margin: 1.5em 0 0 }7#results dt { margin: 1.5em 0 0 }
8#results dt a { color: #33c }
9#results dd { font-size: 80%; margin: 0; padding: 0 }8#results dd { font-size: 80%; margin: 0; padding: 0 }
10#results .author, #results .date, #results .keywords { color: #090 }9#results .author, #results .date, #results .keywords { color: #090 }
1110
1211
=== modified file 'trac-files/common/css/ticket.css'
--- trac-files/common/css/ticket.css 2011-10-17 17:00:12 +0000
+++ trac-files/common/css/ticket.css 2011-11-24 10:57:32 +0000
@@ -1,16 +1,30 @@
1@import url(code.css);1@import url(code.css);
22
3#content.ticket { width: 700px; max-width: 100% }3#content.ticket {
4 width: 60em;
5 max-width: 100%;
6}
47
5#newticket #field-description { width: 100% }8#newticket #field-description { width: 100% }
6#newticket #properties { width: 100% }9#newticket #properties { width: 100% }
710
11#propertyform,
12#attachments,
13#changelog,
8#ticket {14#ticket {
9 background: #fff;15 background: #fff;
10 border: 1px outset #996;16 border-radius: 0.35em;
11 margin-top: 1em;17 padding: .5em 1em;
12 padding: .5em 1em;18 border: 1px solid #d0d0d0;
13 position: relative;19 border-bottom: 2px solid #83a501;
20 margin-bottom: 1.5em;
21 -moz-box-shadow: 0 0.15em 0.25em rgba(0, 0, 0, 0.15);
22 -webkit-box-shadow: 0 0.15em 0.25em rgba(0, 0, 0, 0.15);
23 box-shadow: 0 0.15em 0.25em rgba(0, 0, 0, 0.15);
24}
25
26#propertyform {
27 margin-top: 3em;
14}28}
1529
16div#ticket.ticketdraft {30div#ticket.ticketdraft {
@@ -32,61 +46,81 @@
32}46}
3347
34h1 .status { color: #444; }48h1 .status { color: #444; }
35#ticket h2.summary { margin: 0 0 .8em 0 }49#ticket .date {
36#ticket .date { color: #996; float: right; font-size: 85%; position: relative }50 color: #996;
51 float: right;
52 font-size: 85%;
53 margin: 1em 0;
54 text-align: right;
55}
37#ticket .date p { margin: .3em }56#ticket .date p { margin: .3em }
3857
39#ticket table.properties {58#ticket table.properties {
40 clear: both;59 clear: both;
41 border-top: 1px solid #dd9;60 border: 1px solid #bbb;
42 border-collapse: collapse;61 border-radius: 0.35em;
43 table-layout: fixed;62 table-layout: fixed;
44 width: 100%;63 width: 100%;
64 background: #eee;
45}65}
46#ticket table.properties tr { border-bottom: 1px dotted #eed }
47#ticket table.properties td, #ticket table.properties th {66#ticket table.properties td, #ticket table.properties th {
48 font-size: 80%;67 font-size: 0.875em;
49 padding: .5em 1em;68 padding: .5em 1em;
50 vertical-align: top;69 vertical-align: top;
70 font-size: 1em;
71 padding: .35em .5em;
51}72}
52#ticket table.properties th {73#ticket table.properties th {
53 color: #663;74 color: #83a501;
54 font-weight: normal;75 text-align: left;
55 text-align: left;76 text-align: right;
56 width: 20%;77 width: 20%;
57}78}
58#ticket table.properties td { width: 30% }79#ticket table.properties td { width: 30% }
59#ticket table.properties td p:first-child { margin-top: 0 }80#ticket table.properties td p:first-child { margin-top: 0 }
60#ticket table.properties td p:last-child { margin-bottom: 0 }81#ticket table.properties td p:last-child { margin-bottom: 0 }
61#ticket table.properties .description { border-top: 1px solid #dd9 }82#ticket table.properties .description { border-top: 1px solid #dd9 }
6283
63#ticket .description h3 {
64 border-bottom: 1px solid #dd9;
65 color: #663;
66 font-size: 100%;
67 font-weight: normal;
68}
69#ticket .description h3 .lastmod {84#ticket .description h3 .lastmod {
70 font-size: 90%;85 font-size: 90%;
71}86}
87#changelog .inlinebuttons,
72#ticket .inlinebuttons { 88#ticket .inlinebuttons {
73 float: right;89 float: right;
74 position: relative;90 position: relative;
75 bottom: 0.3em;91 top: 0.75em;
76}92}
7793
78#changelog { border: 1px outset #996; padding: 1em }94
95#changelog {
96 background: transparent;
97 -moz-box-shadow: none;
98 -webkit-box-shadow: none;
99 box-shadow: none;
100 padding: 0.35em 0 0;
101 border: none;
102}
103#changelog .printableform {
104 padding: 2em 1em;
105 border: 1px solid;
106 border-color: #ddd #aaa #aaa #ddd;
107 border-radius: 0.35em;
108 margin-top: 1em;
109 position: relative;
110 background: #fff;
111}
112#changelog .printableform:nth-child(2n) {
113 background: #e7e7e7;
114}
115
79#preview { border: 1px solid #d7d7d7; padding: 1em }116#preview { border: 1px solid #d7d7d7; padding: 1em }
80#preview h3, #changelog h3 {117#preview h3, #changelog h3 {
81 border-bottom: 1px solid #d7d7d7;118 font-size: 100%;
82 color: #999;119 padding: 0;
83 font-size: 100%;
84 font-weight: normal;
85}120}
86.threading, #changelog .inlinebuttons { float: right; }121.threading { float: right; font-size: 90%; }
87.threading { font-size: 90%; }
88122
89#preview .changes, #changelog .changes { list-style: square; margin-left: 2em; padding: 0 }123#preview .changes, #changelog .changes { margin-left: 2em; padding: 0 }
90#preview .comment, #changelog .comment { margin-left: 2em }124#preview .comment, #changelog .comment { margin-left: 2em }
91125
92form .field { margin-top: .75em; width: 100% }126form .field { margin-top: .75em; width: 100% }
@@ -102,10 +136,13 @@
102 width: 20%;136 width: 20%;
103 vertical-align: top;137 vertical-align: top;
104}138}
105#properties table th.col2 { border-left: 1px dotted #d7d7d7 }
106#properties table td { vertical-align: middle; width: 30% }139#properties table td { vertical-align: middle; width: 30% }
107#properties table td.fullrow { vertical-align: middle; width: 80% }140#properties table td.fullrow { vertical-align: middle; width: 80% }
108141
142#properties table tr:nth-child(2n) {
143 background-color: #e6e6e6;
144}
145
109#action { line-height: 2em }146#action { line-height: 2em }
110147
111fieldset.radio { border: none; margin: 0; padding: 0 }148fieldset.radio { border: none; margin: 0; padding: 0 }
@@ -117,3 +154,51 @@
117 padding: 0 1em 0 0;154 padding: 0 1em 0 0;
118}155}
119fieldset.radio label { padding-right: 1em }156fieldset.radio label { padding-right: 1em }
157
158.ticket h1 .title {
159 vertical-align: middle;
160}
161
162.ticket h1 .statuses {
163 float: right;
164}
165
166.ticket h1 .status,
167.ticket h1 .type,
168.ticket h1 .resolution {
169 text-transform: uppercase;
170 color: #fff;
171 padding: 0.35em 0.5em;
172 font-size: 0.6875em;
173 vertical-align: middle;
174 border-bottom: 2px solid #444;
175 border-radius: 0.35em;
176 margin: 0 0.25em 0 0;
177}
178
179.ticket h1 .status {
180 background: #c27e7e;
181}
182
183.ticket h1 .type {
184 background: #a2b16c;
185}
186
187.ticket h1 .resolution {
188 background: #7e9ac2;
189}
190
191.comment-number {
192 position: absolute;
193 top: 0;
194 left: 100%;
195 padding: 0 0 0 0.25em;
196 font-size: 4.25em;
197 color: #ced7ae;
198 color: #ddd;
199}
200
201#changelog .printableform:hover .comment-number {
202 color: #ced7ae;
203 display: block;
204}
120205
=== removed file 'trac-files/common/css/ticket.css.save'
--- trac-files/common/css/ticket.css.save 2011-10-17 17:00:12 +0000
+++ trac-files/common/css/ticket.css.save 1970-01-01 00:00:00 +0000
@@ -1,262 +0,0 @@
1/* BEGIN inline of code.css */
2/*
3div.code {
4 background: #f7f7f7;
5 border: 1px solid #d7d7d7;
6 margin: 1em 1.75em;
7 padding: .25em;
8 overflow: auto
9}
10*/
11div.code pre { margin: 0; }
12
13table.code {
14 border: 1px solid #ddd;
15 border-spacing: 0;
16 border-top: 0;
17 empty-cells: show;
18 font-size: 12px;
19 line-height: 130%;
20 padding: 0;
21 margin: 0 auto;
22 table-layout: fixed;
23 width: 100%;
24}
25table.code th {
26 border-right: 1px solid #d7d7d7;
27 border-bottom: 1px solid #998;
28 font-size: 11px;
29}
30table.code th.lineno { width: 4em }
31table.code thead th {
32 background: #eee;
33 border-top: 1px solid #d7d7d7;
34 color: #999;
35 padding: 0 .25em;
36 text-align: center;
37 white-space: nowrap;
38}
39table.code tbody th {
40 background: #eed;
41 color: #886;
42 font-weight: normal;
43 padding: 0 .5em;
44 text-align: right;
45 vertical-align: top;
46}
47table.code tbody th :link, table.code tbody th :visited {
48 border: none;
49 color: #886;
50 text-decoration: none;
51}
52table.code tbody th :link:hover, table.code tbody th :visited:hover {
53 color: #000;
54}
55table.code tbody td {
56 background: #fff;
57 font: normal 11px monospace;
58 overflow: hidden;
59 padding: 1px 2px;
60 vertical-align: top;
61}
62
63.image-file { background: #eee; padding: .3em }
64.image-file img { background: url(../imggrid.png) }
65
66/* Default */
67.code-block span {
68 font-family: monospace;
69}
70
71/* Comments */
72.code-comment, .css_comment, .c_comment, .c_commentdoc, .c_commentline,
73.c_commentlinedoc, .h_comment,.pl_commentline, .p_commentblock,
74.p_commentline, .hphp_comment, .hphp_commentblock, .hphp_commentline,
75.yaml_comment {
76 color: #998;
77 font-style: italic;
78}
79
80/* Language keyword */
81.code-keyword, .pl_word { color: #789; font-weight: bold }
82
83/* Type */
84.code-type, .c_word, .c_word2, .p_classname, .hphp_classname{
85 color: #468;
86 font-weight: bold;
87}
88
89/* Function */
90.code-func, .p_defname {
91 color: #900;
92 font-weight: bold;
93 border-bottom: none;
94}
95
96/* Pre-processor */
97.code-prep, .c_preprocessor, .pl_preprocessor, .yaml_identifier {
98 color: #999;
99 font-weight: bold;
100}
101
102/* Language construct */
103.code-lang, .p_word { color: #000; font-weight: bold }
104
105/* String */
106.code-string, .c_string, .c_stringeol, .css_doublestring, .css_singlestring,
107.h_singlestring, .h_doublestring, .pl_string, .pl_string_q, .pl_string_qq,
108.pl_string_qr, .pl_string_qw, .pl_string_qx, .pl_backticks, .pl_character,
109.p_string, .p_stringeol, .hphp_string, .hphp_stringeol, .hphp_triple,
110.hphp_tripledouble, .p_character, .p_triple, .p_tripledouble {
111 color: #b84;
112 font-weight: normal;
113}
114
115/* Variable name */
116.code-var { color: #f9f }
117
118/* SilverCity-specific styles */
119.css_id, .css_class, .css_pseudoclass, .css_tag { color: #900000 }
120.css_directive { color: #009000; font-weight: bold }
121.css_important { color: blue }
122.css_operator { color: #000090; font-weight: bold }
123.css_tag { font-weight: bold }
124.css_unknown_identifier, .css_unknown_pseudoclass { color: red }
125.css_value { color: navy }
126.c_commentdockeyword { color: navy; font-weight: bold }
127.c_commentdockeyworderror { color: red; font-weight: bold }
128.c_character, .c_regex, .c_uuid, .c_verbatim { color: olive }
129.c_number { color: #099 }
130.h_asp { color: #ff0 }
131.h_aspat { color: #ffdf00 }
132.h_attribute { color: teal }
133.h_attributeunknown { color: red }
134.h_cdata { color: #373 }
135.h_entity { color: purple }
136.h_number { color: #099 }
137.h_other { color: purple }
138.h_script, .h_tag, .h_tagend { color: navy }
139.h_tagunknown { color: red }
140.h_xmlend, .h_xmlstart { color: blue }
141.pl_datasection { color: olive }
142.pl_error { color: red; font-weight: bold }
143.pl_hash { color: #000 }
144.pl_here_delim, .pl_here_q, .pl_here_qq, .pl_here_qx, .pl_longquote { color: olive }
145.pl_number { color: #099 }
146.pl_pod { font-style: italic }
147.pl_regex, .pl_regsubst { color: olive }
148.p_number { color: #099 }
149.hphp_character { color: olive }
150.hphp_defname { color: #099; font-weight: bold }
151.hphp_number { color: #099 }
152.hphp_word { color: navy; font-weight: bold }
153.yaml_document { color: gray; font-style: italic }
154.yaml_keyword { color: #808 }
155.yaml_number { color: #800 }
156.yaml_reference { color: #088 }
157.v_comment { color: gray; font-style: italic }
158.v_commentline, .v_commentlinebang { color: red; font-style: italic }
159.v_number, .v_preprocessor { color: #099 }
160.v_string, .v_stringeol { color: olive }
161.v_user{ color: blue; font-weight: bold }
162.v_word, .v_word3 { color: navy; font-weight: bold }
163.v_word2 { color: green; font-weight: bold }
164/* END OF code.css */
165/* @import url(code.css); */
166
167#content { width: 700px; max-width: 100% }
168
169#newticket #description { width: 100% }
170#newticket #properties { width: 100% }
171
172#ticket {
173 background: #fff;
174 border: 2px solid #9ac300;
175 margin-top: 1em;
176 padding: .5em 1em;
177 position: relative;
178}
179h1 .status { color: #444; text-transform: lowercase; }
180#ticket h2.summary { margin: 0 0 .8em 0 }
181#ticket .date { color: #996; float: right; font-size: 85%; position: relative }
182#ticket .date p { margin: 0 }
183
184#ticket table.properties {
185 border-top: 1px solid #dd9;
186 border-collapse: collapse;
187 table-layout: fixed;
188 width: 100%;
189}
190#ticket table.properties tr { border-bottom: 1px dotted #eed }
191#ticket table.properties td, #ticket table.properties th {
192 font-size: 80%;
193 padding: .5em 1em;
194 vertical-align: top;
195}
196#ticket table.properties th {
197 color: #663;
198 font-weight: normal;
199 text-align: left;
200 width: 20%;
201}
202#ticket table.properties td { width: 30% }
203#ticket table.properties .description { border-top: 1px solid #dd9 }
204
205
206#ticket .description h3 {
207 border-bottom: 1px solid #dd9;
208 color: #663;
209 font-size: 100%;
210 font-weight: normal;
211}
212#ticket .description h3 .lastmod {
213 font-size: 90%;
214}
215#ticket .inlinebuttons {
216 float: right;
217 position: relative;
218 bottom: 0.3em;
219}
220
221#changelog { border: 1px outset #996; padding: 1em }
222#changelog h3 {
223 border-bottom: 1px solid #d7d7d7;
224 color: #999;
225 font-size: 100%;
226 font-weight: normal;
227}
228#changelog .threading, #changelog .inlinebuttons {
229 float: right;
230 position: relative;
231 bottom: 0.3em;
232}
233
234#changelog .changes { list-style: square; margin-left: 2em; padding: 0 }
235#changelog .comment { margin-left: 2em }
236
237form .field { margin-top: .75em; width: 100% }
238form #comment { width: 100% }
239
240#properties { white-space: nowrap; line-height: 160%; padding: .5em }
241#properties table { border-spacing: 0; width: 100%; }
242#properties table th {
243 padding: .4em;
244 text-align: right;
245 width: 20%;
246 vertical-align: top;
247}
248#properties table th.col2 { border-left: 1px dotted #d7d7d7 }
249#properties table td { vertical-align: middle; width: 30% }
250#properties table td.fullrow { vertical-align: middle; width: 80% }
251
252#action { line-height: 2em }
253
254fieldset.radio { border: none; margin: 0; padding: 0 }
255fieldset.radio legend {
256 color: #000;
257 float: left;
258 font-size: 100%;
259 font-weight: normal;
260 padding: 0 1em 0 0;
261}
262fieldset.radio label { padding-right: 1em }
2630
=== modified file 'trac-files/common/css/timeline.css'
--- trac-files/common/css/timeline.css 2011-10-17 17:00:12 +0000
+++ trac-files/common/css/timeline.css 2011-11-24 10:57:32 +0000
@@ -4,12 +4,6 @@
4#prefs fieldset label { display: block }4#prefs fieldset label { display: block }
5#prefs .buttons { margin-top: -1.6em }5#prefs .buttons { margin-top: -1.6em }
66
7h2 {
8 background: #f7f7f7;
9 border-bottom: 1px solid #d7d7d7;
10 font-size: 105%;
11 margin: 2em 0 .5em;
12}
13dl { line-height: 1.3em; margin-left: 1em }7dl { line-height: 1.3em; margin-left: 1em }
14dt { background: 3px 4px no-repeat; padding: 0 }8dt { background: 3px 4px no-repeat; padding: 0 }
15dt :link, dt :visited {9dt :link, dt :visited {
@@ -23,10 +17,13 @@
23 background-position: 3px 4px;17 background-position: 3px 4px;
24 display: block;18 display: block;
25}19}
26dt :link:hover, dt :visited:hover { background-color: #eed; color: #000 }20dt :link:hover, dt :visited:hover {
21 background-color: #dfe9f6;
22 color: #000;
23}
27dt em {24dt em {
28 border-bottom: 1px dotted #bbb;25 border-bottom: 1px dotted #bbb;
29 color: #517489;26 color: #1d61be;
30 font-style: normal;27 font-style: normal;
31 text-decoration: none;28 text-decoration: none;
32}29}
3330
=== modified file 'trac-files/common/css/trac.css'
--- trac-files/common/css/trac.css 2011-10-17 17:00:12 +0000
+++ trac-files/common/css/trac.css 2011-11-24 10:57:32 +0000
@@ -2,28 +2,25 @@
2body {2body {
3 background: #fff;3 background: #fff;
4 color: #000;4 color: #000;
5 margin: 0px; /* Modified */5 margin: 0; /* Modified */
6 padding: 0;6 padding: 0;
7}7}
8body, th, td {8body, th, td {
9 font: normal 13px trebuchet ms,verdana,arial,'Bitstream Vera Sans',helvetica,sans-serif; /* Modified */9 font-family: "Helvetica Neue", "Bitstream Vera Sans", "Helvetica", "Arial", sans-serif;
10}10}
11h1, h2, h3, h4 {
12 font-family: trebuchet ms,arial,verdana,'Bitstream Vera Sans',helvetica,sans-serif; /* Modified */
13 font-weight: normal; /* Modified */
14 letter-spacing: -0.018em;
15 color: #83A501; /* Modified */
16 border-width: 0 0 1px 0; /* Modified */
17 border-style: dotted; /* Modified */
18 border-color: #dddddd; /* Modified */
19}
20h1 { font-size: 19px; margin: .15em 1em 0 0 }
21h2 { font-size: 16px }
22h3 { font-size: 14px }
23hr { border: none; border-top: 1px solid #ccb; margin: 2em 0 }11hr { border: none; border-top: 1px solid #ccb; margin: 2em 0 }
24address { font-style: normal }12address { font-style: normal }
25img { border: none; }13img { border: none; }
2614
15body { font-size:81.25%; line-height:1.25; }
16h1, h2, h3 { margin-top:0; margin-bottom:0; }
17h1 { font-size:1.5em; padding:1.45833em 0; }
18h2 { font-size:1.33333em; padding:1.25em 0; }
19h3 { font-size:1.16667em; padding:1.51785em 0; }
20
21h1, h2, h3, h4 {
22 color: #83A501;
23}
27.underline { text-decoration: underline }24.underline { text-decoration: underline }
28ol.loweralpha { list-style-type: lower-alpha }25ol.loweralpha { list-style-type: lower-alpha }
29ol.upperalpha { list-style-type: upper-alpha }26ol.upperalpha { list-style-type: upper-alpha }
@@ -31,135 +28,269 @@
31ol.upperroman { list-style-type: upper-roman }28ol.upperroman { list-style-type: upper-roman }
32ol.arabic { list-style-type: decimal }29ol.arabic { list-style-type: decimal }
3330
31tt,
32pre {
33 /* Workaround too-small monospace text in everything but IE(!). */
34 font-family: monospace, monospace;
35}
36
34/* Link styles */37/* Link styles */
35:link, :visited {38:link {
36 text-decoration: none;39 color: #1d61be;
37 color: #517489; /* Modified */40}
38 border-bottom: 0px dotted #bbb;41:visited {
42 color: #4a1dbe;
43}
44:link:active, :visited:active {
45 color: #14417E;
39}46}
40:link:hover, :visited:hover {47:link:hover, :visited:hover {
41 background-color: transparent;48 background-color: transparent;
42 color: #555;49 text-decoration: none;
43}50}
44h1 :link, h1 :visited ,h2 :link, h2 :visited, h3 :link, h3 :visited,51h1 :link, h1 :visited ,h2 :link, h2 :visited, h3 :link, h3 :visited,
45h4 :link, h4 :visited, h5 :link, h5 :visited, h6 :link, h6 :visited {52h4 :link, h4 :visited, h5 :link, h5 :visited, h6 :link, h6 :visited {
46 color: inherit;53 color: inherit;
47}54}
4855
49/* Heading anchors */56/* Heading anchors */
50.anchor:link, .anchor:visited {57.anchor:link, .anchor:visited {
51 border: none;58 border: none;
52 color: #d7d7d7;59 color: #d7d7d7;
53 font-size: .8em;60 font-size: 0.8725em;
54 vertical-align: text-top;61 vertical-align: text-top;
62 text-decoration: none;
55}63}
56* > .anchor:link, * > .anchor:visited {64* > .anchor:link, * > .anchor:visited {
57 visibility: hidden;65 visibility: hidden;
58}66}
59h1:hover .anchor, h2:hover .anchor, h3:hover .anchor,67h1:hover .anchor, h2:hover .anchor, h3:hover .anchor,
60h4:hover .anchor, h5:hover .anchor, h6:hover .anchor {68h4:hover .anchor, h5:hover .anchor, h6:hover .anchor {
61 visibility: visible;69 visibility: visible;
62}70}
6371
64@media screen {72@media screen {
65 a.ext-link .icon {73 a.ext-link .icon {
66 background: url(../extlink.gif) left center no-repeat;74 background: url(../extlink.gif) left center no-repeat;
67 padding-left: 16px;75 padding-left: 16px;
68 }76 display: inline-block;
69 * html a.ext-link .icon { display: inline-block; }77 width: 0;
78 }
79 * html a.ext-link .icon { display: inline-block; }
70}80}
7181
72/* Forms */82/* Forms */
73input, textarea, select { margin: 0px }83input, textarea, select { margin: 0px }
74input, select { vertical-align: middle }84input, select { vertical-align: middle }
75input[type=button], input[type=submit], input[type=reset] {85
76 background-color: #517489; /* Modified */86input[type=button],
77 color: #ffffff; /* Modified */87input[type=submit],
78 border: 1px solid #334a57; /* Modified */88input[type=reset] {
79 padding: .1em .5em;89 background: #e0e0e0;
80}90 color: #666;
81input[type=button]:hover, input[type=submit]:hover, input[type=reset]:hover {91 border: 1px solid #ccc;
82 background: #303030; /* Modified */92 border-radius: 0.25em;
83 border-color: #292929; /* Modified */93 padding: 0.3em 0.85em;
84 color: #ffffff; /* Modified */94 font-size: 0.85em;
85}95 font-weight: bold;
86input[type=button][disabled], input[type=submit][disabled],96 text-transform: uppercase;
97}
98input[type=button]::-moz-focus-inner,
99input[type=submit]::-moz-focus-inner,
100input[type=reset]::-moz-focus-inner {
101 border: none;
102 padding: none;
103}
104input[type=button]:hover,
105input[type=submit]:hover,
106input[type=reset]:hover {
107 cursor: pointer;
108 color: #444;
109 border-color: #999;
110 background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15));
111 background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15));
112 background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15));
113 background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15));
114 -moz-box-shadow: 0 2px 1px rgba(0, 0, 0, 0.15);
115 -webkit-box-shadow: 0 2px 1px rgba(0, 0, 0, 0.15);
116 box-shadow: 0 2px 1px rgba(0, 0, 0, 0.15);
117}
118input[type=button]:focus,
119input[type=submit]:focus,
120input[type=reset]:focus {
121 outline: 0 none transparent;
122 border: 1px solid transparent;
123 -moz-box-shadow: 0 0 0 1px #fff inset;
124 -webkit-box-shadow: 0 0 0 1px #fff inset;
125 box-shadow: 0 0 0 1px #fff inset;
126}
127input[type=button]:active,
128input[type=submit]:active,
129input[type=reset]:active {
130 background: #e5e5e5;
131}
132
133input[type=text],
134input.textwidget,
135textarea,
136select {
137 padding: 0.25em;
138}
139
140input[type=text],
141input.textwidget,
142textarea {
143 border: 1px solid;
144 border-color: #bbb #ddd #ddd #bbb;
145 color: #000;
146}
147input[type=text]:focus,
148input.textwidget:focus,
149textarea:focus {
150 border-color: #8bbe1d;
151 -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
152 -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
153 box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
154}
155input[disabled],
156input[type=button][disabled],
157input[type=submit][disabled],
87input[type=reset][disabled] {158input[type=reset][disabled] {
88 background: #f6f6f6;159 background: #f6f6f6;
89 border-style: solid;160 border: 1px solid #e0e0e0;
90 color: #999;161 color: #999;
91}162 -moz-box-shadow: none;
92input[type=text], input.textwidget, textarea { border: 1px solid #8caabb; background-color: #d5e1e7; color: #000000; } /* Modified */163 -webkit-box-shadow: none;
93input[type=text], input.textwidget { padding: .2em .5em }164 box-shadow: none;
94input[type=text]:focus, input.textwidget:focus, textarea:focus {165}
95 border-color: #517489; /* Modified */166fieldset {
96}167 background: #f6f6f6;
97option { border-bottom: 1px dotted #d7d7d7 }168 border: 1px solid;
98fieldset { border: 1px solid #d7d7d7; padding: .5em; margin: 0 }169 border-color: #ddd #aaa #aaa #ddd;
170 padding: 0 1em 1em;
171 margin: 1em 0;
172}
99fieldset.iefix { background: transparent; border: none; padding: 0; margin: 0 }173fieldset.iefix { background: transparent; border: none; padding: 0; margin: 0 }
100* html fieldset.iefix { width: 98% }174* html fieldset.iefix { width: 98% }
101fieldset.iefix p { margin: 0 }175fieldset.iefix p { margin: 0 }
102legend { color: #999; padding: 0 .25em; font-size: 90%; font-weight: bold }176legend {
177 color: #444;
178 padding: 0 .25em;
179 font-weight: bold;
180 text-transform: uppercase;
181}
103label.disabled { color: #d7d7d7 }182label.disabled { color: #d7d7d7 }
104.buttons { margin: .5em .5em .5em 0 }183.buttons { margin: .5em .5em .5em 0 }
105.buttons form, .buttons form div { display: inline }184.buttons form, .buttons form div { display: inline }
106.buttons input { margin: 1em .5em .1em 0 }185.buttons input { margin: 1em .5em .1em 0 }
107.inlinebuttons input { 186.inlinebuttons input {
108 font-size: 70%;187 font-size: 0.6875em;
109 border-width: 1px;188 margin: 0;
110 border-style: dotted;189 padding: 0.25em;
111 margin: 0;190 background: none;
112 padding: 0.1em;191}
113 background: none;192
114}193input[value="Save report" ],
115194input[value="Add attachment"],
116input[type=submit] {195input[name="remove"],
117 background-color: #517489;196input[name="submit"],
197input[name="save"] {
198 color: #455508;
199 padding: 0.6em 0.85em;
200 background-color: #bce715;
201 border-color: #a1c612;
202}
203
204input[value="Save report" ]:active,
205input[value="Add attachment"]:active,
206input[name="remove"]:active,
207input[name="submit"]:active,
208input[name="save"]:active {
209 background: #c7f516;
210}
211
212input[value="Save report" ]:hover,
213input[value="Add attachment"]:hover,
214input[name="remove"]:hover,
215input[name="submit"]:hover,
216input[name="save"]:hover {
217 color: #222;
218 border-color: #6f890c;
118}219}
119220
120/* Header */221/* Header */
121#header hr { display: none }222#header hr { display: none }
122#header h1 { margin: 1.5em 0 -1.5em; }223#header h1 { margin: 1.5em 0 -1.5em; }
123#header img { border: none; margin: 0 0 -3em }224#header img { border: none; }
124#header :link, #header :visited, #header :link:hover, #header :visited:hover {225#header :link, #header :visited, #header :link:hover, #header :visited:hover {
125 background: transparent;226 background: transparent;
126 color: #555;227 color: #555;
127 margin-bottom: 2px;
128 border: none;228 border: none;
129}229}
130#header h1 :link:hover, #header h1 :visited:hover { color: #000 }230#header h1 :link:hover, #header h1 :visited:hover { color: #000 }
131231
132/* Quick search */232/* Quick search */
133#search, #topsearch {233#search {
134 clear: both;234 float: right;
135 font-size: 10px;235 padding: 0.75em 0.75em 1.35em;
136 height: 2.2em;236 margin-right: 1.5em;
137 margin: 0 71px 1em 0; /* Modified */237}
138 text-align: right;238
139}239#search input[type=button],
140240#search input[type=submit],
141#topsearch input, #topsearch input[type=button], #topsearch input[type=submit], #topsearch input[type=reset], #topsearch input[type=text], #topsearch input.textwidget {241#search input[type=reset],
142 font-size: 10px;242#search input[type=text],
143 background-color: #333; /* Modified */243#search input.textwidget {
144 color: #ffffff; /* Modified */244 background-color: #222;
145 border: 1px solid #222; /* Modified */245 color: #ddd;
146}246 border-color: #666;
147247}
148#topsearch input[type=text] {248
149 background-color: #222; /* Modified */249#search input[type=button]:hover,
150}250#search input[type=submit]:hover,
151251#search input[type=reset]:hover {
152#search input, #search input[type=button], #search input[type=submit], #search input[type=reset], #search input[type=text], #search input.textwidget {252 color: #fff;
153 font-size: 10px;253 border-color: #888;
154 background-color: #383838; /* Modified */254 background-color: #2a2a2a;
155 color: #ffffff; /* Modified */255 background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(255, 255, 255, 0.06));
156 border: 1px solid #333333; /* Modified */256 background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(255, 255, 255, 0.1));
157}257 background-image: -ms-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(255, 255, 255, 0.06));
158#search, #topsearch label { display: none }258 background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(255, 255, 255, 0.06));
259 -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
260 -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
261 box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
262}
263
264#search input[type=button]:active,
265#search input[type=submit]:active,
266#search input[type=reset]:active {
267 background: #222;
268}
269
270#search input[type=text],
271#search input.textwidget {
272 border-color: #444 #666 #666 #444;
273}
274
275#search input[type=text]:focus,
276#search input.textwidget:focus {
277 border-color: #bce715;
278 -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
279 -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
280 box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
281}
282
283#search label { display: none }
159284
160/* Navigation */285/* Navigation */
161.nav h2, .nav hr { display: none }286.nav h2, .nav hr { display: none }
162.nav ul { font-size: 10px; list-style: none; margin: 0; text-align: right }287.nav ul {
288 font-size: 0.85em;
289 list-style: none;
290 margin: 0;
291 padding: 0;
292 text-align: right;
293}
163.nav li {294.nav li {
164 border-right: 0px solid #d7d7d7; /* Modified */295 border-right: 0px solid #d7d7d7; /* Modified */
165 display: inline;296 display: inline;
@@ -170,41 +301,69 @@
170301
171/* Main navigation bar */302/* Main navigation bar */
172#mainnav {303#mainnav {
173 background: #f7f7f7 url(../menu_grad.png) 0 0; /* Modified */304 background: #555;
174 border: 0px solid #000; /* Modified */305 border: none;
175 font: normal 10px trebuchet ms,verdana,'Bitstream Vera Sans',helvetica,arial,sans-serif; /* Modified */
176 margin: 0; /* Modified */306 margin: 0; /* Modified */
177 padding: .3em 50px .3em 0; /* Modified */307 clear: both;
178}308 position: relative;
179#mainnav li { border-right: none; padding: .25em 0 }309 z-index: 1;
310}
311#mainnav ul {
312 border-top: 1px solid #222;
313 padding: 0.3em 0;
314}
315#mainnav li {
316 padding: 0.3em 0;
317}
180#mainnav :link, #mainnav :visited {318#mainnav :link, #mainnav :visited {
181 background: url(../dots.gif) 0 0 no-repeat;319 background: url(../dots.gif) 0 0 no-repeat;
182 border-right: 0px solid #fff; /* Modified */320 border: none;
183 border-bottom: none;321 color: #eee;
184 border-left: 0px solid #555; /* Modified */322 padding: 0.3em 1.6em;
185 color: #ffffff; /* Modified */
186 padding: .3em 20px; /* Modified */
187}323}
188* html #mainnav :link, * html #mainnav :visited { background-position: 1px 0 }
189#mainnav :link:hover, #mainnav :visited:hover {324#mainnav :link:hover, #mainnav :visited:hover {
190 background-color: #444444; /* Modified */325 color: #eee;
191 border-right: 0px solid #ddd; /* Modified */326 background-color: #444;
327 z-index: -1;
328}
329#mainnav .active {
330 position: relative;
331 top: -1px;
332 border: 1px solid #333;
333 border-top: none;
334 border-bottom: 4px solid #bce715;
192}335}
193#mainnav .active :link, #mainnav .active :visited {336#mainnav .active :link, #mainnav .active :visited {
194 background: #444444 0 0 repeat-x; /* Modified */337 background: #444;
195 border-top: none;338 border-bottom: 1px solid transparent;
196 border-right: 0px solid #000; /* Modified */339 color: #eee;
197 color: #eee;340 font-weight: bold;
198 font-weight: bold;341}
199}342
200#mainnav .active :link:hover, #mainnav .active :visited:hover {343#main {
201 /*344 background: #fff url(../bg.png);
202 border-right: 1px solid #000;345 clear: both;
203 */346}
347
348/*
349#content.ticket a:link, #content.ticket a:visited,
350.attachment a:link, .attachment a:link,
351.wiki a:link, .wiki a:visited {
352 text-decoration: underline;
353}
354*/
355
356#banner a:link, #banner a:visited,
357#mainnav a:link, #mainnav a:visited,
358#ctxtnav a:link, #ctxtnav a:visited,
359.timeline a:link, .timeline a:visited {
360 text-decoration: none;
204}361}
205362
206/* Context-dependent navigation links */363/* Context-dependent navigation links */
207#ctxtnav { background-image: url(../ctxt_grad.png); height: 30px; padding: 5px 61px 0 0; } /* Modified */364#ctxtnav {
365 padding: .5em 0;
366}
208#ctxtnav li ul {367#ctxtnav li ul {
209 background: #f7f7f7;368 background: #f7f7f7;
210 color: #ccc;369 color: #ccc;
@@ -252,45 +411,43 @@
252/* Footer */411/* Footer */
253#footer {412#footer {
254 clear: both;413 clear: both;
255 color: #bbb;414 color: #fff;
256 font-size: 10px;415 font-size: 0.85em;
257 border-top: 0px solid; /* Modified */416 background: #333;
258 height: 150px; /* Modified */417 border-top: 0.5em solid #555;
259 background-image: url(../footer_grad.png); /* Modified */418 padding: 1.5em 3em;
260 padding: 50px 50px 0 50px; /* Modified */
261}419}
262#footer :link, #footer :visited { color: #bbb; }420#footer :link, #footer :visited { color: #bbb; }
263#footer hr { display: none }421#footer hr { display: none }
264#footer #tracpowered { border: 0; float: left }422#footer #tracpowered { border: 0; float: left }
265#footer #tracpowered:hover { background: transparent }423#footer #tracpowered:hover { background: transparent }
266#footer p { margin: 0 }424#footer .credits p {
267#footer p.left, p.left2 {425 margin: 0;
268 float: left;426}
269 margin-left: 1em;427
270 padding: 0 1em;428#footer .sitemeter {
271}429 float: right;
272430}
273#footer p.left {431
274 border-left: 1px solid #d7d7d7;432#footer .credits {
275 border-right: 1px solid #d7d7d7;433 line-height: 2;
276}434 float: left;
277435}
278#footer p.left2 {436
279 color: #666;437#footer .right {
280}438 clear: both;
281439}
282#footer p.right {440
283 float: right;441#content {
284 text-align: right;442 padding: 0 4em 4em;
285}443 position: relative;
286444}
287#content { padding:0 50px 0 50px; position: relative }
288445
289#help {446#help {
290 clear: both;447 clear: both;
291 color: #999;448 color: #999;
292 font-size: 90%;449 font-size: 90%;
293 margin: 1em;450 margin: 1em 0;
294 text-align: right;451 text-align: right;
295}452}
296#help :link, #help :visited { cursor: help }453#help :link, #help :visited { cursor: help }
@@ -298,11 +455,11 @@
298455
299/* Page preferences form */456/* Page preferences form */
300#prefs {457#prefs {
301 background: #edf9c0;458 background: #dfe9f6;
302 border: 1px solid #bce715;459 border: 1px solid #1d61be;
303 float: right;460 float: right;
304 font-size: 9px;461 font-size: 87.25%;
305 padding: .8em;462 padding: 1em;
306 position: relative;463 position: relative;
307 margin: 0 1em 1em;464 margin: 0 1em 1em;
308}465}
@@ -322,17 +479,25 @@
322 margin: 0 0 0 -1.5em;479 margin: 0 0 0 -1.5em;
323 padding: 0;480 padding: 0;
324}481}
325#prefs .buttons { text-align: right }482#prefs .buttons {
483 margin: 0;
484 text-align: right
485}
326486
327/* Version information (browser, wiki, attachments) */487/* Version information (browser, wiki, attachments) */
328#info {488#info {
329 margin: 1em 0 0 0;489 margin: 1em 0 0 0;
330 background: #f7f7f0;490 background: #f7f7f0;
331 border: 1px solid #d7d7d7;491 border: 1px solid #83a501;
332 border-collapse: collapse;492 border-collapse: collapse;
333 border-spacing: 0;493 border-spacing: 0;
334 clear: both;494 clear: both;
335 width: 100%;495 position: absolute;
496 top: -4em;
497 -moz-box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.5);
498 -webkit-box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.5);
499 box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.5);
500 z-index: 100;
336}501}
337#info th, #info td { font-size: 85%; padding: 2px .5em; vertical-align: top }502#info th, #info td { font-size: 85%; padding: 2px .5em; vertical-align: top }
338#info th { font-weight: bold; text-align: left; white-space: nowrap }503#info th { font-weight: bold; text-align: left; white-space: nowrap }
@@ -341,8 +506,9 @@
341#info .message p { margin: 0; padding: 0 }506#info .message p { margin: 0; padding: 0 }
342507
343/* Wiki */508/* Wiki */
344.wikipage { padding-left: 18px; margin: 0; } /* Modified */509.wikipage {
345.wikipage h1, .wikipage h2, .wikipage h3 { margin-left: -18px }510 margin: 0;
511}
346512
347a.missing:link, a.missing:visited, span.missing { color: #998 }513a.missing:link, a.missing:visited, span.missing { color: #998 }
348a.missing:link, a.missing:visited { background: #fafaf0 }514a.missing:link, a.missing:visited { background: #fafaf0 }
@@ -358,17 +524,15 @@
358 border-width: 1px 0 1px 0;524 border-width: 1px 0 1px 0;
359 border-style: solid;525 border-style: solid;
360 border-color: #bce715;526 border-color: #bce715;
361 margin: 30px;527 margin: 2em;
362 padding: 10px;528 padding: 1em;
363 overflow: auto;529 overflow: auto;
364}530}
365531
366blockquote.citation { 532blockquote.citation {
367 margin: -0.6em 0;533 margin: -0.6em 0;
368 border-style: solid; 534 border-left: 2px solid #1d61be;
369 border-width: 0 0 0 2px; 535 padding-left: 1.4em;
370 padding-left: .5em;
371 border-color: #b44;
372}536}
373.citation blockquote.citation { border-color: #4b4; }537.citation blockquote.citation { border-color: #4b4; }
374.citation .citation blockquote.citation { border-color: #44b; }538.citation .citation blockquote.citation { border-color: #44b; }
@@ -382,41 +546,50 @@
382table.wiki td { border: 1px solid #ccc; padding: .1em .25em; }546table.wiki td { border: 1px solid #ccc; padding: .1em .25em; }
383547
384.wikitoolbar {548.wikitoolbar {
385 border: solid #d7d7d7;549 height: 18px;
386 border-width: 1px 1px 1px 0;550 padding: 0.5em 0;
387 height: 18px;551}
388 width: 208px;552#main .wikitoolbar :link, #main .wikitoolbar :visited {
389}553 background: transparent url(../edit_toolbar.png) no-repeat;
390.wikitoolbar :link, .wikitoolbar :visited {554 border: 1px solid #bbb;
391 background: transparent url(../edit_toolbar.png) no-repeat;555 border-radius: 0.15em;
392 border: 1px solid #fff;556 display: block;
393 border-left-color: #d7d7d7;557 float: left;
394 cursor: default;558 width: 24px;
395 display: block;559 height: 16px;
396 float: left;560 margin: 0 0.25em 0 0;
397 width: 24px;561}
398 height: 16px;562#main .wikitoolbar :link:hover, #main .wikitoolbar :visited:hover {
399}563 background-color: transparent;
400.wikitoolbar :link:hover, .wikitoolbar :visited:hover {564 border-color: #1d61be;
401 background-color: transparent;565}
402 border: 1px solid #fb2;566#main .wikitoolbar a#em { background-position: 0 0 }
403}567#main .wikitoolbar a#strong { background-position: 0 -16px }
404.wikitoolbar a#em { background-position: 0 0 }568#main .wikitoolbar a#heading { background-position: 0 -32px }
405.wikitoolbar a#strong { background-position: 0 -16px }569#main .wikitoolbar a#link { background-position: 0 -48px }
406.wikitoolbar a#heading { background-position: 0 -32px }570#main .wikitoolbar a#code { background-position: 0 -64px }
407.wikitoolbar a#link { background-position: 0 -48px }571#main .wikitoolbar a#hr { background-position: 0 -80px }
408.wikitoolbar a#code { background-position: 0 -64px }572#main .wikitoolbar a#np { background-position: 0 -96px }
409.wikitoolbar a#hr { background-position: 0 -80px }573#main .wikitoolbar a#br { background-position: 0 -112px }
410.wikitoolbar a#np { background-position: 0 -96px }
411.wikitoolbar a#br { background-position: 0 -112px }
412574
413/* Styles for the form for adding attachments. */575/* Styles for the form for adding attachments. */
576#attachment {
577 background: #fff;
578 border-radius: 0.35em;
579 padding: .5em 1em;
580 border: 1px solid #d0d0d0;
581 border-bottom: 2px solid #83a501;
582 margin-bottom: 1.5em;
583 -moz-box-shadow: 0 0.15em 0.25em rgba(0, 0, 0, 0.15);
584 -webkit-box-shadow: 0 0.15em 0.25em rgba(0, 0, 0, 0.15);
585 box-shadow: 0 0.15em 0.25em rgba(0, 0, 0, 0.15);
586}
414#attachment .field { margin-top: 1.3em }587#attachment .field { margin-top: 1.3em }
415#attachment label { padding-left: .2em }588#attachment label { padding-left: .2em }
416#attachment fieldset { margin-top: 2em }589#attachment fieldset { margin-top: 2em }
417#attachment fieldset .field { float: left; margin: 0 1em .5em 0 }590#attachment fieldset .field { float: left; margin: 0 1em .5em 0 }
418#attachment .options { float: left; padding: 0 0 1em 1em }591#attachment .options { float: left; padding: 0 0 1em 1em }
419#attachment br { clear: left }592#attachment br { display: block; clear: left }
420.attachment #preview { margin-top: 1em }593.attachment #preview { margin-top: 1em }
421594
422/* Styles for the list of attachments. */595/* Styles for the list of attachments. */
@@ -429,27 +602,35 @@
429/* Styles for tabular listings such as those used for displaying directory602/* Styles for tabular listings such as those used for displaying directory
430 contents and report results. */603 contents and report results. */
431table.listing {604table.listing {
432 clear: both;605 clear: both;
433 border-bottom: 1px solid #d7d7d7;606 border-spacing: 0;
434 border-collapse: collapse;607 border: 1px solid #ddd;
435 border-spacing: 0;608 margin-top: 1em;
436 margin-top: 1em;609 padding: 0.5em;
437 width: 100%;610 width: 100%;
438}611 background: #fff;
439table.listing th { text-align: left; padding: 0 1em .1em 0; font-size: 12px }612 -moz-box-shadow: 0 0.25em 0.15em rgba(0, 0, 0, 0.15);
440table.listing thead { background: #f7f7f0 }613 -webkit-box-shadow: 0 0.25em 0.15em rgba(0, 0, 0, 0.15);
614 box-shadow: 0 0.25em 0.15em rgba(0, 0, 0, 0.15);
615}
616table.listing th {
617 text-align: left;
618 padding: 0;
619}
441table.listing thead th {620table.listing thead th {
442 border: 1px solid #d7d7d7;621 border: none;
443 border-bottom-color: #999;622 border-bottom: 2px solid #164b93;
444 font-size: 11px;623 padding: 0.8em 1em;
445 font-weight: bold;624}
446 padding: 2px .5em;625table.listing thead th :link:hover,
447 vertical-align: bottom;626table.listing thead th :visited:hover {
448}627 background-color: transparent;
449table.listing thead th :link:hover, table.listing thead th :visited:hover {628}
450 background-color: transparent;629table.listing thead th a {
451}630 display: block;
452table.listing thead th a { border: none; padding-right: 12px }631 margin: -0.8em -1em;
632 padding: 0.8em 1em;
633}
453table.listing th.asc a, table.listing th.desc a { font-weight: bold }634table.listing th.asc a, table.listing th.desc a { font-weight: bold }
454table.listing th.asc a, table.listing th.desc a {635table.listing th.asc a, table.listing th.desc a {
455 background-position: 100% 50%;636 background-position: 100% 50%;
@@ -458,30 +639,45 @@
458table.listing th.asc a { background-image: url(../asc.png) }639table.listing th.asc a { background-image: url(../asc.png) }
459table.listing th.desc a { background-image: url(../desc.png) }640table.listing th.desc a { background-image: url(../desc.png) }
460table.listing tbody td, table.listing tbody th {641table.listing tbody td, table.listing tbody th {
461 border: 1px dotted #ddd;642 padding: 0;
462 padding: .33em .5em;643 vertical-align: middle;
463 vertical-align: top;644 padding: 0.6em 1em;
464}645}
646table.listing tbody td a {
647 margin: -0.6em -1em;
648 padding: 0.6em 1em;
649 display: block;
650}
651
652table.listing tbody td {
653 border-bottom: 1px solid #ccc;
654}
655
465table.listing tbody td a:hover, table.listing tbody th a:hover {656table.listing tbody td a:hover, table.listing tbody th a:hover {
466 background-color: transparent;657 background-color: transparent;
467}658}
468table.listing tbody tr { border-top: 1px solid #ddd }
469table.listing tbody tr.even { background-color: #fcfcfc }659table.listing tbody tr.even { background-color: #fcfcfc }
470table.listing tbody tr.odd { background-color: #f7f7f7 }660table.listing tbody tr.odd { background-color: #f7f7f7 }
471table.listing tbody tr:hover { background: #eed !important }661table.listing tbody tr:hover { background: #dfe9f6 !important }
472662
473/* Styles for the error page (and rst errors) */663/* Styles for the error page (and rst errors) */
474#content.error .message, div.system-message {664#content.error .message, div.system-message {
475 background: #fdc;665 background: #fdc;
476 border: 2px solid #d00;666 border: 2px solid #d00;
477 color: #500;667 color: #500;
478 padding: .5em;668 padding: .5em;
479 margin: 1em 0;
480}669}
481#content.error pre, div.system-message pre { margin-left: 1em; overflow: auto }670#content.error pre, div.system-message pre { margin-left: 1em; overflow: auto }
482div.system-message p { margin: 0; }671div.system-message p { margin: 0; }
483div.system-message p.system-message-title { font-weight: bold; }672div.system-message p.system-message-title { font-weight: bold; }
484673
674#warning.system-message {
675 position: absolute;
676 top: 0;
677 left: 0;
678 z-index: 100;
679}
680
485/* Styles for search word highlighting */681/* Styles for search word highlighting */
486@media screen {682@media screen {
487 .searchword0 { background: #ff9 }683 .searchword0 { background: #ff9 }
@@ -500,114 +696,245 @@
500696
501/* Custom */697/* Custom */
502#top_grad {698#top_grad {
503 background-image: url(../top_grad.png);699 background: #bce715;
504 height: 26px;700 height: 0.35em;
505}701}
506#tab {702#tab {
507 height: 32px;703 color: #ffffff;
508 width: 282px;704 text-align: center;
509 color: #ffffff;705 background: #bce715;
510 text-align: center;706 background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
511 margin: -2px 49px 0 0;707 background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
512 background-image: url(../tab.png);708 background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
513 background-repeat: no-repeat;709 background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
514 float: right;710 background-image: linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
711 float: right;
712 border: 0 solid #d1fd26;
713 border-width: 0 0 1px 1px;
714 border-radius: 0 0 0 0.35em;
715 padding: 1em;
716 font-weight: bold;
515}717}
516718
517#tab :link, #tab :visited {719#tab :link, #tab :visited {
518 background: transparent;720 color: #444;
519 color: #ffffff;721 padding: 1em;
520 font-size: 12px;722 text-shadow: 0 1px #d1fd26;
521 border: none;
522 padding: 4px;
523
524}723}
525#tab :link:hover, #tab :visited:hover {724#tab :link:hover, #tab :visited:hover {
526 border-width: 0 0 1px 0;725 text-shadow: none;
527 border-style: solid;726 border-bottom: 0.5em solid #fff;
528 border-color: #a4cd0d;727 border-radius: 0 0.35em 0 0.35em;
728 background: white;
729 -moz-box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.5);
730 -webkit-box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.5);
731 box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.5);
529}732}
530733
531#banner {734#banner {
532 background-image: url(../main_grad.png);735 background: #444;
533 height: 135px;736 background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
737 background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
738 background-image: -ms-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
739 background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
740 float: left;
741 width: 100%;
534}742}
535743
536#header {744#header {
537 margin: 20px 0 0 49px;745 float: left;
746 padding: 1em;
538}747}
539748
540#metanav {749#metanav {
541 margin-right: 61px;750 padding: 0.75em;
751 margin-top: 0.35em;
752 float: right;
542}753}
543754
544#metanav :link, #metanav :visited {755#metanav :link, #metanav :visited {
545 color: #ffffff;756 color: #fff;
546
547}757}
548758
549#metanav :link:hover, #metanav :visited:hover {759#metanav :link:hover, #metanav :visited:hover {
550 color: #bbbbbb;760 color: #bbb;
761 border-bottom: 1px dotted #bbb;
551}762}
552763
553#metanav ul li.first {764#metanav ul li.first {
554 color: #ccc;765 color: #ccc;
555}766}
556767
557#side_bar {768#side_bar {
558 float: right;769 float: right;
559// width: 350px;
560 background-color: #ffffff;770 background-color: #ffffff;
561 padding: 0 0 0 15px;771 padding: 0 0 0 15px;
562}772}
563773
564#download_top {774#download_icon {
565 height: 145px;775 position: absolute;
566 width: 273px;776 right: -20px;
567 background-image: url(../dld_top.png);777 top: -35px;
568}778 z-index: 99;
569
570#download_bottom {
571 height: 91px;
572 width: 273px;
573 background-image: url(../dld_bottom.png);
574}779}
575780
576#download {781#download {
577// height: 145px;782 background: #555;
578 width: 243px;783 background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
579 background-image: url(../dld_back.png);784 background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
580 background-repeat: repeat-y;785 background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
581 padding: 0 10px 0 20px;786 background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
582}787 border-bottom: 2px solid #bce715;
583788 border-radius: 0.35em;
584789 padding: 2em;
585#download_old {790 position: relative;
586 height: 284px;791 -moz-box-shadow: 0 0 0.5em rgba(0, 0, 0, .65);
587 width: 269px;792 -webkit-box-shadow: 0 0 0.5em rgba(0, 0, 0, .65);
588// float: right;793 box-shadow: 0 0 0.5em rgba(0, 0, 0, .65);
589 margin: 0;794 margin-bottom: 3em;
590 padding: 0 0 0 19px;795 margin-right: -3em;
591 background-image: url(../download.png);796}
592 background-repeat: no-repeat;797
593}798#download > p {
594799 margin: 0;
595#donate {800}
596 height: 284px;801
597 width: 269px;802#download h1, #download h2 {
598// float: right;803 color: #eee;
599 margin: 0;804 text-shadow: 0 1px #222;
600 padding: 0 0 0 19px;805}
601}806
602807#download h1 {
603#download :link, #download :visited, #download :link:hover, #download :visited:hover {808 padding-top: 0;
604 background: transparent;809}
605 color: #9ac300;810
606 font-size: 12px;811#download h2 {
607 border: none;812 color: #bbb;
608}813 padding: 0;
609814}
610.download-left {815
611 position: relative;816#download ul {
612 left: -30px;817 list-style: none;
818 margin: 0.5em 0;
819 padding: 0;
820}
821
822#download a:link, #download a:visited {
823 display: block;
824 padding: 0.25em 1em;
825 margin: 0 -.5em;
826 background: transparent;
827 color: #bce715;
828 border: none;
829 text-decoration: none;
830}
831
832#download a:hover {
833 background: #bce715;
834 color: #444;
835}
836
837#download a.anchor {
838 display: none;
839}
840
841pre.prettyprint {
842 border: none !important;
843 padding: 0 !important;
844}
845
846.column-layout {
847 width: 100%;
848 margin: 0 -4em;
849}
850
851.leftcol {
852 width: 15%;
853}
854
855/* IE7 hacks. */
856.leftcol {
857 *display: block;
858 *float: left;
859}
860
861.leftcolcol {
862 padding: 1.5em;
863 border-width: 0 1px 1px 0;
864 margin-top: -1.25em;
865 margin-right: 2em;
866 border-radius: 0 0 0.35em 0;
867}
868
869.centercol {
870 padding: 0 2em;
871}
872
873/* IE7 hacks. */
874.centercol {
875 *display: block;
876 *float: left;
877}
878
879#main .twisted-sponsors a:link {
880 display: block;
881 border: none;
882 text-align: center;
883 padding: 0.5em 0;
884}
885
886#main .twisted-sponsors a.anchor:link {
887 display: inline;
888}
889
890.side-panel {
891 background: #eee;
892 border: 1px solid #d0d0d0;
893 border-radius: 0.35em;
894 -moz-box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.075);
895 -webkit-box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.075);
896 box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.075);
897 padding: 2em;
898 position: relative;
899 margin-right: -3em;
900}
901.side-panel h2 {
902 padding-top: 0;
903 color: #1d61be;
904 text-shadow: 0 1px #fff;
905}
906
907.twisted-news {
908 margin-bottom: 3em;
909}
910.twisted-news > p {
911 margin: 0;
912}
913.twisted-news .feed-updated {
914 font-size: 0.75em;
915 text-align: right;
916}
917.twisted-news .feed-entry {
918 padding: 0.5em;
919 margin: 0 -0.5em;
920}
921.twisted-news .feed-entry:nth-child(2n) {
922 background: rgba(0, 0, 0, 0.05);
923}
924
925.donations p {
926 margin-top: 0;
927}
928.donation-buttons {
929 width: 210px;
930 text-align: center;
931}
932
933.wikipage div.code pre {
934 background: transparent;
935}
936
937.throbber {
938 display: block;
939 margin: auto;
613}940}
614941
=== removed file 'trac-files/common/ctxt_grad.png'
615Binary files trac-files/common/ctxt_grad.png 2011-10-17 17:00:12 +0000 and trac-files/common/ctxt_grad.png 1970-01-01 00:00:00 +0000 differ942Binary files trac-files/common/ctxt_grad.png 2011-10-17 17:00:12 +0000 and trac-files/common/ctxt_grad.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'trac-files/common/dld_back.png'
616Binary files trac-files/common/dld_back.png 2011-10-17 17:00:12 +0000 and trac-files/common/dld_back.png 1970-01-01 00:00:00 +0000 differ943Binary files trac-files/common/dld_back.png 2011-10-17 17:00:12 +0000 and trac-files/common/dld_back.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'trac-files/common/dld_bottom.png'
617Binary files trac-files/common/dld_bottom.png 2011-10-17 17:00:12 +0000 and trac-files/common/dld_bottom.png 1970-01-01 00:00:00 +0000 differ944Binary files trac-files/common/dld_bottom.png 2011-10-17 17:00:12 +0000 and trac-files/common/dld_bottom.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'trac-files/common/dld_top.png'
618Binary files trac-files/common/dld_top.png 2011-10-17 17:00:12 +0000 and trac-files/common/dld_top.png 1970-01-01 00:00:00 +0000 differ945Binary files trac-files/common/dld_top.png 2011-10-17 17:00:12 +0000 and trac-files/common/dld_top.png 1970-01-01 00:00:00 +0000 differ
=== added file 'trac-files/common/download_icon.png'
619Binary files trac-files/common/download_icon.png 1970-01-01 00:00:00 +0000 and trac-files/common/download_icon.png 2011-11-24 10:57:32 +0000 differ946Binary files trac-files/common/download_icon.png 1970-01-01 00:00:00 +0000 and trac-files/common/download_icon.png 2011-11-24 10:57:32 +0000 differ
=== removed file 'trac-files/common/footer_back.png'
620Binary files trac-files/common/footer_back.png 2011-10-17 17:00:12 +0000 and trac-files/common/footer_back.png 1970-01-01 00:00:00 +0000 differ947Binary files trac-files/common/footer_back.png 2011-10-17 17:00:12 +0000 and trac-files/common/footer_back.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'trac-files/common/footer_grad.png'
621Binary files trac-files/common/footer_grad.png 2011-10-17 17:00:12 +0000 and trac-files/common/footer_grad.png 1970-01-01 00:00:00 +0000 differ948Binary files trac-files/common/footer_grad.png 2011-10-17 17:00:12 +0000 and trac-files/common/footer_grad.png 1970-01-01 00:00:00 +0000 differ
=== added file 'trac-files/common/js/news.js'
--- trac-files/common/js/news.js 1970-01-01 00:00:00 +0000
+++ trac-files/common/js/news.js 2011-11-24 10:57:32 +0000
@@ -0,0 +1,92 @@
1/**
2 * Create a DOM node factory for the given document object.
3 *
4 * @rtype: C{function} that takes C{String}, C{object} mapping C{String}
5 * to C{String}, C{Array} of C{String} or DOM nodes
6 * @return: A factory taking 3 arguments: C{tagName}, C{attrs} and
7 * C{children}
8 */
9function DOMBuilder(doc) {
10 return function _nodeFactory(tagName, attrs, children) {
11 var node = doc.createElement(tagName);
12 if (attrs !== undefined) {
13 for (var key in attrs) {
14 node.setAttribute(key, attrs[key]);
15 }
16 }
17
18 if (children !== undefined) {
19 for (var i = 0; i < children.length; ++i) {
20 var child = children[i];
21 if (typeof child === 'string') {
22 child = doc.createTextNode(child);
23 }
24 node.appendChild(child);
25 }
26 }
27
28 return node;
29 };
30}
31
32
33/**
34 * Format a C{Date} instance as I{YYYY-mm-dd}.
35 */
36function formatDate(d) {
37 var year = d.getFullYear();
38 var month = d.getMonth() + 1;
39 var day = d.getDate();
40 return [
41 year, '-',
42 (month < 10 ? '0' : '') + month, '-',
43 (day < 10 ? '0' : '') + day].join('');
44}
45
46
47/**
48 * Remove all the children of a node.
49 */
50function removeNodeContent(node) {
51 while (node.lastChild) {
52 node.removeChild(node.lastChild);
53 }
54}
55
56
57/**
58 * Load news feed items, from the Twisted Matrix Labs blog, and insert them
59 * into the "twisted-news" element, if it exists.
60 */
61function loadNewsFeeds() {
62 var container = document.getElementById('twisted-news');
63 // Bail out if there is no news element.
64 if (!container) {
65 return;
66 }
67
68 var feed = new google.feeds.Feed(
69 'http://feeds.feedburner.com/TwistedMatrixLaboratories');
70 feed.setNumEntries(5);
71 feed.load(function(result) {
72 if (!result.error) {
73 removeNodeContent(container);
74 var D = DOMBuilder(container.ownerDocument);
75 for (var i = 0; i < result.feed.entries.length; i++) {
76 var entry = result.feed.entries[i];
77 var prettyDate = formatDate(new Date(entry.publishedDate));
78 var entryNode = D('div', {'class': 'feed-entry'}, [
79 D('a', {'href': entry.link}, [entry.title]),
80 D('div', {'class': 'feed-updated'}, [
81 'by ',
82 D('strong', {}, [entry.author]),
83 ' on ',
84 D('strong', {}, [prettyDate])])
85 ]);
86 container.appendChild(entryNode);
87 }
88 }
89 });
90}
91google.load('feeds', '1');
92google.setOnLoadCallback(loadNewsFeeds);
093
=== removed file 'trac-files/common/main_grad.png'
1Binary files trac-files/common/main_grad.png 2011-10-17 17:00:12 +0000 and trac-files/common/main_grad.png 1970-01-01 00:00:00 +0000 differ94Binary files trac-files/common/main_grad.png 2011-10-17 17:00:12 +0000 and trac-files/common/main_grad.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'trac-files/common/menu_grad.png'
2Binary files trac-files/common/menu_grad.png 2011-10-17 17:00:12 +0000 and trac-files/common/menu_grad.png 1970-01-01 00:00:00 +0000 differ95Binary files trac-files/common/menu_grad.png 2011-10-17 17:00:12 +0000 and trac-files/common/menu_grad.png 1970-01-01 00:00:00 +0000 differ
=== added file 'trac-files/common/source_download_icon.psd'
3Binary files trac-files/common/source_download_icon.psd 1970-01-01 00:00:00 +0000 and trac-files/common/source_download_icon.psd 2011-11-24 10:57:32 +0000 differ96Binary files trac-files/common/source_download_icon.psd 1970-01-01 00:00:00 +0000 and trac-files/common/source_download_icon.psd 2011-11-24 10:57:32 +0000 differ
=== added file 'trac-files/common/source_trac_banner.psd'
4Binary files trac-files/common/source_trac_banner.psd 1970-01-01 00:00:00 +0000 and trac-files/common/source_trac_banner.psd 2011-11-24 10:57:32 +0000 differ97Binary files trac-files/common/source_trac_banner.psd 1970-01-01 00:00:00 +0000 and trac-files/common/source_trac_banner.psd 2011-11-24 10:57:32 +0000 differ
=== removed file 'trac-files/common/tab.png'
5Binary files trac-files/common/tab.png 2011-10-17 17:00:12 +0000 and trac-files/common/tab.png 1970-01-01 00:00:00 +0000 differ98Binary files trac-files/common/tab.png 2011-10-17 17:00:12 +0000 and trac-files/common/tab.png 1970-01-01 00:00:00 +0000 differ
=== added file 'trac-files/common/throbber.gif'
6Binary files trac-files/common/throbber.gif 1970-01-01 00:00:00 +0000 and trac-files/common/throbber.gif 2011-11-24 10:57:32 +0000 differ99Binary files trac-files/common/throbber.gif 1970-01-01 00:00:00 +0000 and trac-files/common/throbber.gif 2011-11-24 10:57:32 +0000 differ
=== removed file 'trac-files/common/top_grad.png'
7Binary files trac-files/common/top_grad.png 2011-10-17 17:00:12 +0000 and trac-files/common/top_grad.png 1970-01-01 00:00:00 +0000 differ100Binary files trac-files/common/top_grad.png 2011-10-17 17:00:12 +0000 and trac-files/common/top_grad.png 1970-01-01 00:00:00 +0000 differ
=== removed file 'trac-files/common/trac_banner-old.png'
8Binary files trac-files/common/trac_banner-old.png 2011-10-17 17:00:12 +0000 and trac-files/common/trac_banner-old.png 1970-01-01 00:00:00 +0000 differ101Binary files trac-files/common/trac_banner-old.png 2011-10-17 17:00:12 +0000 and trac-files/common/trac_banner-old.png 1970-01-01 00:00:00 +0000 differ
=== modified file 'trac-files/common/trac_banner.png'
9Binary files trac-files/common/trac_banner.png 2011-10-17 17:00:12 +0000 and trac-files/common/trac_banner.png 2011-11-24 10:57:32 +0000 differ102Binary files trac-files/common/trac_banner.png 2011-10-17 17:00:12 +0000 and trac-files/common/trac_banner.png 2011-11-24 10:57:32 +0000 differ
=== removed file 'trac-files/templates/README'
--- trac-files/templates/README 2011-10-17 17:00:12 +0000
+++ trac-files/templates/README 1970-01-01 00:00:00 +0000
@@ -1,8 +0,0 @@
1This directory contains Trac's default Genshi templates.
2
3It also still contains the base Clearsilver templates for
4compatibility with pre-0.11 plugins.
5
6Local modifications to these files might be lost during the installation of
7a new Trac version. This can be avoided by making a copy of this entire
8directory before beginning modifications.
90
=== removed file 'trac-files/templates/about.html'
--- trac-files/templates/about.html 2011-10-17 17:00:12 +0000
+++ trac-files/templates/about.html 1970-01-01 00:00:00 +0000
@@ -1,89 +0,0 @@
1<!DOCTYPE html
2 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:py="http://genshi.edgewall.org/"
6 xmlns:xi="http://www.w3.org/2001/XInclude">
7 <xi:include href="layout.html" />
8 <head>
9 <title>About Trac</title>
10 <link rel="stylesheet" type="text/css" href="${chrome.htdocs_location}css/about.css" />
11 <script type="text/javascript">
12 //<![CDATA[
13 jQuery(document).ready(function ($) {
14 $("#systeminfo table").append("<tr><th>jQuery:</th><td>"+$().jquery+"</td></tr>");
15 });
16 //]]>
17 </script>
18 </head>
19
20 <body>
21 <div id="content" class="about">
22
23 <a href="http://trac.edgewall.org/"
24 style="border: none; float: right; margin-left: 2em">
25 <img style="display: block" src="${chrome.htdocs_location}trac_banner.png"
26 alt="Trac: Integrated SCM &amp; Project Management"/>
27 </a>
28 <h1>About Trac</h1>
29 <p>Trac is a web-based software project management and bug/issue
30 tracking system emphasizing ease of use and low ceremony.
31 It provides an integrated Wiki, an interface to version control
32 systems, and a number of convenient ways to stay on top of events
33 and changes within a project.
34 </p>
35 <p>Trac is distributed under the modified BSD License.<br />
36 The complete text of the license can be found
37 <a href="http://trac.edgewall.org/wiki/TracLicense">online</a>
38 as well as in the <tt>COPYING</tt> file included in the distribution.</p>
39 <a href="http://www.python.org/" style="border: none; float: right">
40 <img style="display: block" src="${chrome.htdocs_location}python.png"
41 alt="python powered" width="140" height="56" />
42 </a>
43 <p>Please visit the Trac open source project:
44 <a href="http://trac.edgewall.org/">http://trac.edgewall.org/</a></p>
45 <p class="copyright" xml:lang="en">Copyright &copy; 2003-2009
46 <a href="http://www.edgewall.org/">Edgewall Software</a>
47 </p>
48
49 <py:if test="systeminfo or config">
50 <hr />
51
52 <div py:if="systeminfo" id="systeminfo">
53 <h2>System Information</h2>
54 <table class="listing">
55 <tr py:for="name, value in systeminfo">
56 <th>$name:</th>
57 <td>$value</td>
58 </tr>
59 </table>
60 </div>
61
62 <div py:if="config" id="config">
63 <h2>Configuration</h2>
64 <table class="listing">
65 <thead>
66 <tr>
67 <th class="section">Section</th>
68 <th class="name">Name</th>
69 <th class="value">Value</th>
70 </tr>
71 </thead>
72 <tbody>
73 <div py:for="section in config" py:strip="">
74 <tr py:for="idx,option in enumerate(section.options)"
75 class="${option.modified and 'modified' or None}">
76 <th py:if="idx == 0" class="section"
77 rowspan="${len(section.options)}">${section.name}</th>
78 <td class="name">${option.name}</td>
79 <td class="value">${option.value}</td>
80 </tr>
81 </div>
82 </tbody>
83 </table>
84 </div>
85 </py:if>
86
87 </div>
88 </body>
89</html>
900
=== removed file 'trac-files/templates/attachment.html'
--- trac-files/templates/attachment.html 2011-10-17 17:00:12 +0000
+++ trac-files/templates/attachment.html 1970-01-01 00:00:00 +0000
@@ -1,118 +0,0 @@
1<!DOCTYPE html
2 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:py="http://genshi.edgewall.org/"
6 xmlns:xi="http://www.w3.org/2001/XInclude">
7 <xi:include href="layout.html" />
8 <xi:include href="macros.html" />
9 <head>
10 <title>Attachment</title>
11 </head>
12
13 <body py:with="parent = attachments and attachments.parent or
14 attachment.resource.parent">
15 <div py:choose="mode" id="content" class="attachment">
16 <py:when test="'new'">
17 <h1>Add Attachment to <a href="${url_of(parent)}">${name_of(parent)}</a></h1>
18 <p>Adding a patch that changes code? Make sure it includes unit tests!
19 <a href="/trac/wiki/ReviewProcess">See the
20 complete acceptance criteria</a>. Thanks!
21 </p>
22 <form id="attachment" method="post" enctype="multipart/form-data" action="">
23 <div class="field">
24 <label>File<py:if test="max_size >= 0"> (size limit
25 ${pretty_size(max_size, format='%d')})</py:if>:<br />
26 <input type="file" name="attachment" /></label>
27 </div>
28 <fieldset>
29 <legend>Attachment Info</legend>
30 <py:if test="authname == 'anonymous'">
31 <div class="field">
32 <label>Your email or username:<br />
33 <input type="text" name="author" size="30" value="$author" />
34 </label>
35 </div>
36 </py:if>
37 <div class="field">
38 <label>Description of the file (optional):<br />
39 <input type="text" name="description" size="60" /></label>
40 </div>
41 <br />
42 <py:if test="0 and authname and authname != 'anonymous'">
43 <div class="options">
44 <label><input type="checkbox" name="replace" />
45 Replace existing attachment of the same name</label>
46 </div>
47 <br />
48 </py:if>
49 </fieldset>
50 <div class="buttons">
51 <input type="hidden" name="action" value="new" />
52 <input type="hidden" name="realm" value="$parent.realm" />
53 <input type="hidden" name="id" value="$parent.id" />
54 <input type="submit" value="Add attachment" />
55 <input type="submit" name="cancel" value="Cancel" />
56 </div>
57 </form>
58 </py:when>
59
60 <py:when test="'delete'">
61 <h1><a href="${url_of(parent)}">${name_of(parent)}</a>: $attachment.filename</h1>
62 <p><strong>Are you sure you want to delete this attachment?</strong><br />
63 This is an irreversible operation.</p>
64 <div class="buttons">
65 <form method="post" action="">
66 <div id="delete">
67 <input type="hidden" name="action" value="delete" />
68 <input type="submit" name="cancel" value="Cancel" />
69 <input type="submit" value="Delete attachment" />
70 </div>
71 </form>
72 </div>
73 </py:when>
74
75 <py:when test="'list'">
76 <h1><a href="${url_of(parent)}">${name_of(parent)}</a></h1>
77 <py:with vars="context = context(parent)">
78 ${list_of_attachments(attachments, add_button_title=_("Attach another file"))}
79 </py:with>
80 </py:when>
81
82 <py:otherwise> <!--! 'render' mode -->
83 <h1><a href="${url_of(parent)}">${name_of(parent)}</a>: $attachment.filename</h1>
84 <table id="info" summary="Description">
85 <tbody>
86 <tr>
87 <th scope="col">
88 File $attachment.filename, ${sizeinfo(attachment.size)}
89 (added by ${authorinfo(attachment.author)}, ${dateinfo(attachment.date)} ago)
90 </th>
91 </tr>
92 <tr>
93 <td class="message searchable" xml:space="preserve">
94 ${wiki_to_html(context(parent), attachment.description)}
95 </td>
96 </tr>
97 </tbody>
98 </table>
99
100 <div py:if="preview" id="preview" class="searchable">
101 ${preview_file(preview)}
102 </div>
103
104 <py:if test="attachment and 'ATTACHMENT_DELETE' in perm(attachment.resource)">
105 <div class="buttons">
106 <form method="get" action="">
107 <div id="delete">
108 <input type="hidden" name="action" value="delete" />
109 <input type="submit" value="${_('Delete attachment')}" />
110 </div>
111 </form>
112 </div>
113 </py:if>
114 </py:otherwise>
115
116 </div>
117 </body>
118</html>
1190
=== removed file 'trac-files/templates/diff_div.html'
--- trac-files/templates/diff_div.html 2011-10-17 17:00:12 +0000
+++ trac-files/templates/diff_div.html 1970-01-01 00:00:00 +0000
@@ -1,227 +0,0 @@
1<!--!
2 changes - a list of diff items, each being a dict containing informations about
3 changes for one file:
4 .href - link for the title (optional)
5 .title - tooltip for the title link (optional)
6 .comments - annotation for the change (optional)
7 .new and .old - information about the files being diffed
8 .path - path of the file
9 .rev - rev of the file (for 'sidebyside')
10 .shortrev - abbreviated form of rev of the file (for 'inline')
11 .href - link to the full file (optional)
12 .props - a list of property changes
13 .name - name of the property
14 .diff - rendered difference
15 .old - old value of the property
16 .new - new value for the property
17 (both .old and .new have .name, .value and .rendered properties)
18 .diffs - a sequence of diff blocks, each block being a dict:
19 .type - one of 'unmod', 'add', 'rem' or 'mod'
20 .base and .changed - informations about lines from old and new content
21 .lines - the lines
22 .offset - position within the file
23
24 diff - dict specifying diff style and options
25 .style - can be 'sidebyside' (4 columns) or 'inline' (3 columns)
26 .options - contexlines, various ignore...
27
28 longcol - "long" column header; e.g. 'Revision' or 'File' or '' (for 'sidebyside')
29 shortcol - "short" column header: e.g. 'r' or '' (for 'inline')
30 no_id - skip generation of id attributes in h2 headings
31
32-->
33<div xmlns="http://www.w3.org/1999/xhtml"
34 xmlns:py="http://genshi.edgewall.org/"
35 xmlns:xi="http://www.w3.org/2001/XInclude"
36 class="diff">
37
38 <ul py:if="any([item.diffs or item.props for item in changes])" class="entries">
39 <py:for each="idx, item in enumerate(changes)">
40 <li py:if="item.diffs or item.props" class="entry" py:with="comments = item.get('comments')">
41 <h2 id="${not no_id and 'file%s' % idx or None}" py:choose="">
42 <a py:when="item.new.path" title="${item.get('title', item.new.get('title'))}"
43 href="${item.get('href', item.new.get('href'))}">$item.new.path</a>
44 <py:otherwise>&nbsp;</py:otherwise>
45 </h2>
46 <pre py:if="comments">$comments</pre>
47 <ul py:if="item.props" class="props">
48 <py:for each="prop in item.props" py:choose="">
49 <py:when test="prop.diff">$prop.diff</py:when>
50 <py:with vars="one = prop.old or prop.new;
51 both = prop.old and prop.new;
52 action = both and 'changed from ' or not prop.old and 'set' or 'deleted'">
53 <li py:when="one">
54 Property <strong py:attrs="one.rendered and one.rendered.name_attributes">
55 ${one.rendered and one.rendered.name or prop.name}</strong> $action
56 <py:def function="render_property(prop)">
57 <py:choose>
58 <py:when test="prop.rendered">$prop.rendered.content</py:when>
59 <em py:when="istext(prop.value)"><tt>$prop.value</tt></em>
60 <py:otherwise>$prop.value</py:otherwise>
61 </py:choose>
62 </py:def>
63 <py:if test="prop.old and prop.new">${render_property(prop.old)}</py:if>
64 <py:if test="prop.new"> to ${render_property(prop.new)}</py:if>
65 </li>
66 </py:with>
67 </py:for>
68 </ul>
69 <table py:if="item.diffs" class="$diff.style" summary="Differences" cellspacing="0"
70 py:with="fromline = item.diffs[0][0].base.offset+1;
71 toline = item.diffs[0][0].changed.offset+1">
72 <py:choose test="diff.style">
73 <py:when test="'sidebyside'">
74 <colgroup class="l"><col class="lineno" /><col class="content" /></colgroup>
75 <colgroup class="r"><col class="lineno" /><col class="content" /></colgroup>
76 <thead>
77 <tr>
78 <th colspan="2">
79 <a title="${item.old.get('title')}" href="${item.old.get('href')}#L$fromline"
80 py:strip="'href' not in item.old">$longcol $item.old.rev</a>
81 </th>
82 <th colspan="2">
83 <a title="${item.new.get('title')}" href="${item.new.get('href')}#L$toline"
84 py:strip="'href' not in item.new">$longcol $item.new.rev</a>
85 </th>
86 </tr>
87 </thead>
88 </py:when>
89 <py:when test="'inline'">
90 <colgroup><col class="lineno" /><col class="lineno" /><col class="content" /></colgroup>
91 <thead>
92 <tr>
93 <th title="$longcol $item.old.rev">
94 <a title="${item.old.get('title')}" href="${item.old.get('href')}#L$fromline"
95 py:strip="'href' not in item.old">
96 $shortcol$item.old.shortrev</a>
97 </th>
98 <th title="$longcol $item.new.rev">
99 <a title="${item.new.get('title')}" href="${item.new.get('href')}#L$toline"
100 py:strip="'href' not in item.new">
101 $shortcol$item.new.shortrev</a>
102 </th>
103 <th>&nbsp;</th>
104 </tr>
105 </thead>
106 </py:when>
107 </py:choose>
108 <py:for each="idx, blocks in enumerate(item.diffs)">
109 <tbody py:for="block in blocks" class="$block.type">
110 <py:choose test="block.type">
111
112 <py:when test="'unmod'"> <!--! Show identical lines on both "sides" -->
113 <tr py:for="idx, line in enumerate(block.base.lines)">
114 <py:with vars="from_n = block.base.offset+idx+1; to_n = block.changed.offset+idx+1;
115 clines = block.changed.lines">
116 <py:choose test="diff.style">
117 <py:when test="'sidebyside'">
118 <th>$from_n</th><td class="l"><span>$line</span>&nbsp;</td>
119 <th>$to_n</th><td class="r"><span>${idx &lt; len(clines) and clines[idx] or ''}</span>&nbsp;</td>
120 </py:when>
121 <py:when test="'inline'">
122 <th>$from_n</th><th>$to_n</th><td class="l"><span>$line</span>&nbsp;</td>
123 </py:when>
124 </py:choose>
125 </py:with>
126 </tr>
127 </py:when>
128
129 <py:when test="'add'"> <!--! Show only added lines, on the "right side" -->
130 <tr py:for="idx, line in enumerate(block.changed.lines)"
131 class="${diff.style == 'inline' and first_last(idx, block.changed.lines) or None}">
132 <py:with vars="to_n = block.changed.offset+idx+1">
133 <py:choose test="diff.style">
134 <py:when test="'sidebyside'">
135 <th>&nbsp;</th><td class="l">&nbsp;</td>
136 <th>$to_n</th><td class="r"><ins>$line</ins>&nbsp;</td>
137 </py:when>
138 <py:when test="'inline'">
139 <th>&nbsp;</th><th>$to_n</th><td class="r"><ins>$line</ins>&nbsp;</td>
140 </py:when>
141 </py:choose>
142 </py:with>
143 </tr>
144 </py:when>
145
146 <py:when test="'rem'"> <!--! Show only deleted lines, on the "left side" -->
147 <tr py:for="idx, line in enumerate(block.base.lines)"
148 class="${diff.style == 'inline' and first_last(idx, block.base.lines) or None}">
149 <py:with vars="from_n = block.base.offset+idx+1">
150 <py:choose test="diff.style">
151 <py:when test="'sidebyside'">
152 <th>$from_n</th><td class="l"><del>$line</del>&nbsp;</td>
153 <th>&nbsp;</th><td class="r">&nbsp;</td>
154 </py:when>
155 <py:when test="'inline'">
156 <th>$from_n</th><th>&nbsp;</th><td class="l"><del>$line</del>&nbsp;</td>
157 </py:when>
158 </py:choose>
159 </py:with>
160 </tr>
161 </py:when>
162
163 <py:when test="'mod'"> <!--! Show edited lines, on both "sides" -->
164 <py:choose test="diff.style">
165 <py:when test="'sidebyside'">
166 <py:choose>
167 <py:when test="len(block.base.lines) &gt;= len(block.changed.lines)">
168 <tr py:for="idx, line in enumerate(block.base.lines)">
169 <th>${block.base.offset+idx+1}</th>
170 <td class="l"><span>$line</span>&nbsp;</td>
171 <py:with vars="within_change = idx &lt; len(block.changed.lines)">
172 <th>${within_change and block.changed.offset+idx+1 or '&nbsp;'}</th>
173 <td class="r"><span py:if="within_change">${block.changed.lines[idx]}</span>&nbsp;</td>
174 </py:with>
175 </tr>
176 </py:when>
177 <py:otherwise> <!--! there are more changed lines than original lines -->
178 <tr py:for="idx, line in enumerate(block.changed.lines)">
179 <py:with vars="within_change = idx &lt; len(block.base.lines)">
180 <th>${within_change and block.base.offset+idx+1 or '&nbsp;'}</th>
181 <td class="l"><span py:if="within_change">${block.base.lines[idx]}</span>&nbsp;</td>
182 </py:with>
183 <th>${block.changed.offset+idx+1}</th>
184 <td class="r"><span>$line</span>&nbsp;</td>
185 </tr>
186 </py:otherwise>
187 </py:choose>
188 </py:when>
189 <py:when test="'inline'">
190 <!--! First show the "old" lines -->
191 <tr py:for="idx, line in enumerate(block.base.lines)"
192 class="${idx == 0 and 'first' or None}">
193 <th>${block.base.offset+idx+1}</th><th>&nbsp;</th><td class="l"><span>$line</span>&nbsp;</td>
194 </tr>
195 <!--! Then show the "new" lines -->
196 <tr py:for="idx, line in enumerate(block.changed.lines)"
197 class="${idx + 1 == len(block.changed.lines) and 'last' or None}">
198 <th>&nbsp;</th><th>${block.changed.offset+idx+1}</th><td class="r"><span>$line</span>&nbsp;</td>
199 </tr>
200 </py:when>
201 </py:choose>
202 </py:when>
203
204 </py:choose>
205 </tbody>
206 <py:if test="idx &lt; len(item.diffs) - 1">
207 <tbody class="skipped" py:choose="diff.style"
208 py:with="fromline = item.diffs[idx+1][0].base.offset+1;
209 toline = item.diffs[idx+1][0].changed.offset+1">
210 <tr py:when="'sidebyside'">
211 <th><a href="$item.old.href#L$fromline">&hellip;</a></th><td>&nbsp;</td>
212 <th><a href="$item.new.href#L$toline">&hellip;</a></th><td>&nbsp;</td>
213 </tr>
214 <tr py:when="'inline'">
215 <th><a href="$item.old.href#L$fromline">&hellip;</a></th>
216 <th><a href="$item.new.href#L$toline">&hellip;</a></th>
217 <td>&nbsp;</td>
218 </tr>
219 </tbody>
220 </py:if>
221 </py:for>
222 </table>
223 </li>
224 </py:for>
225 </ul>
226
227</div>
2280
=== removed file 'trac-files/templates/diff_view.html'
--- trac-files/templates/diff_view.html 2011-10-17 17:00:12 +0000
+++ trac-files/templates/diff_view.html 1970-01-01 00:00:00 +0000
@@ -1,71 +0,0 @@
1<!DOCTYPE html
2 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:py="http://genshi.edgewall.org/"
6 xmlns:xi="http://www.w3.org/2001/XInclude">
7 <xi:include href="layout.html" />
8 <xi:include href="macros.html" />
9 <head>
10 <title>$title</title>
11 <link rel="stylesheet" type="text/css" href="${chrome.htdocs_location}css/diff.css" />
12 <meta name="ROBOTS" content="NOINDEX, NOFOLLOW" />
13 </head>
14
15 <body>
16 <div id="content" class="${resource.realm}">
17 <h1 py:choose="">Changes
18 <py:when test="old_version">between
19 <a href="${url_of(resource, version=old_version)}">Version $old_version</a> and
20 </py:when>
21 <py:when test="old_version == 0">between
22 <a href="${url_of(resource, version=0)}">Initial Version</a> and
23 </py:when>
24 <py:otherwise>from</py:otherwise>
25 <a href="${url_of(resource, version=new_version)}">Version $new_version</a> of
26 <a href="${url_of(resource)}">${name_of(resource)}</a>
27 </h1>
28 <form method="post" id="prefs" action="${url_of(resource)}">
29 <div>
30 <input type="hidden" name="action" value="diff" />
31 <input type="hidden" name="version" value="$new_version" />
32 <input type="hidden" name="old_version" value="$old_version" />
33 ${diff_options_fields(diff)}
34 </div>
35 </form>
36 <dl id="overview" py:with="multi = num_changes &gt; 1">
37 <dt class="property time">Timestamp:</dt>
38 <dd class="time" py:choose="">
39 <em py:when="multi" class="multi">(multiple changes)</em>
40 <py:when test="change.date">${format_datetime(change.date)} (${dateinfo(change.date)} ago)</py:when>
41 <py:otherwise>--</py:otherwise>
42 </dd>
43 <dt class="property author">Author:</dt>
44 <dd class="author" py:choose="">
45 <em py:when="multi" class="multi">(multiple changes)</em>
46 <py:otherwise>${authorinfo(change.author)}
47 <span py:if="show_ip_addresses and 'ipnr' in change" class="ipnr">(IP: $change.ipnr)</span></py:otherwise>
48 </dd>
49 <dt class="property message">Comment:</dt>
50 <dd class="message" py:choose="" xml:space="preserve">
51 <em py:when="multi" class="multi">(multiple changes)</em>
52 <py:otherwise>${wiki_to_html(context(resource), change.comment)}</py:otherwise>
53 </dd>
54 </dl>
55 <div class="diff">
56 <div class="legend" id="diff-legend">
57 <h3>Legend:</h3>
58 <dl>
59 <dt class="unmod"></dt><dd>Unmodified</dd>
60 <dt class="add"></dt><dd>Added</dd>
61 <dt class="rem"></dt><dd>Removed</dd>
62 <dt class="mod"></dt><dd>Modified</dd>
63 </dl>
64 </div>
65
66 <xi:include href="diff_div.html" py:with="no_id=False"/>
67
68 </div>
69 </div>
70 </body>
71</html>
720
=== removed file 'trac-files/templates/error.html'
--- trac-files/templates/error.html 2011-10-17 17:00:12 +0000
+++ trac-files/templates/error.html 1970-01-01 00:00:00 +0000
@@ -1,200 +0,0 @@
1<!DOCTYPE html
2 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:py="http://genshi.edgewall.org/"
6 xmlns:xi="http://www.w3.org/2001/XInclude">
7 <xi:include href="layout.html" />
8 <head>
9 <title>${title or 'Error'}</title>
10 <script py:if="frames" type="text/javascript">/*<![CDATA[*/
11 jQuery(document).ready(function($) {
12 $("#traceback a").click(function() {
13 $("div", this.parentNode).slideToggle("fast");
14 return false;
15 });
16 $("#tbtoggle").click(function() {
17 if (this.value.indexOf("interactive") < 0) {
18 this.value = "Switch to interactive view";
19 $("#traceback ul").fadeOut("fast", function() {
20 $("#traceback pre").fadeIn("fast");
21 });
22 } else {
23 this.value = "Switch to plain text view";
24 $("#traceback pre").fadeOut("fast", function() {
25 $("#traceback ul").fadeIn("fast");
26 });
27 }
28 return false;
29 });
30 /* Only activate interactive view if Javascript is enabled */
31 $("#traceback ul").show();
32 $("#traceback pre").hide();
33 $("#tbtoggle").parent().show();
34
35 $("#systeminfo").append("<tr><th>jQuery:</th><td>"+$().jquery+"</td></tr>");
36 $("#systeminfo").before("<p>User Agent: <tt>"+navigator.userAgent+"</tt></p>");
37 });
38 /*]]>*/</script>
39 <script type="text/javascript">/*<![CDATA[*/
40 jQuery(document).ready(function($) {
41 var descr = $("#description").text();
42 descr = descr.replace(/==== System Information ====\s+/m,
43 "User Agent was: `" + navigator.userAgent + "`\n\n$&"
44 );
45 descr = descr.replace(/\|\|\s+==== Python Traceback ====/m,
46 "||\n|| '''jQuery:''' || `" + $().jquery + "` $&"
47 );
48 $("#description").text(descr);
49 });
50 /*]]>*/</script>
51 </head>
52
53 <py:def function="create_ticket(teo=False)">
54 <input type="hidden" name="reporter" value="${get_reporter_id(req)}" />
55 <input py:if="teo" type="hidden" name="version"
56 value="${'dev' in trac.version and 'devel' or trac.version}" />
57 <input type="hidden" name="summary" value="$message" />
58 <textarea id="description" name="description" rows="3" cols="10">
59
60==== How to Reproduce ====
61
62While doing a $req.method operation on `$req.path_info`, Trac issued an internal error.
63
64''(please provide additional details here)''
65
66<py:if test="req.args">
67Request parameters:
68{{{
69${pprint(req.args)}
70}}}
71</py:if>
72
73==== System Information ====
74<py:for each="k, v in trac.systeminfo">
75|| '''$k''' || ${'`%s`' % (v and v.replace('\n', '` [[br]] `'))} ||</py:for>
76
77==== Python Traceback ====
78{{{
79${traceback}
80}}}
81 </textarea>
82 <span class="inlinebuttons">
83 <input type="submit" name="create" value="Create" />
84 </span>
85 </py:def>
86
87 <body>
88 <div id="content" class="error">
89 <py:choose test="type">
90 <py:when test="'TracError'">
91 <h1>$title</h1>
92 <py:choose test="">
93 <p py:when="istext(message)" class="message">$message</p>
94 <py:otherwise>$message</py:otherwise>
95 </py:choose>
96 </py:when>
97 <py:when test="'internal'">
98 <h1>Oops&hellip;</h1>
99 <div class="message">
100 <strong>Trac detected an internal error:</strong>
101 <pre>$message</pre>
102 </div>
103 <py:choose>
104 <py:when test="'TRAC_ADMIN' not in perm">
105 <p>There was an internal error in Trac. It is recommended
106 that you inform your local
107 <a py:strip="not project.admin" href="mailto:${project.admin}">Trac
108 administrator</a> and give him all the information he needs to
109 reproduce the issue.
110 </p>
111 <form py:if="project.admin_href"
112 class="newticket" method="get" action="${project.admin_href.newticket()}#">
113 <p>To that end, you could ${create_ticket()} a ticket.</p>
114 </form>
115 <p>The action that triggered the error was:</p>
116 <pre>${req.method}: ${req.path_info}</pre>
117 </py:when>
118 <py:otherwise>
119 <form class="newticket" method="get" action="${project.admin_href.newticket()}#">
120 <p>This is probably a local installation issue.
121 <py:if test="project.admin_href and project.admin_trac_url != '.'">
122 You should ${create_ticket()} a ticket at the admin Trac to report
123 the issue.
124 </py:if>
125 </p>
126 </form>
127 <h2>Found a bug in Trac?</h2>
128 <p>If you think this should work and you can reproduce the problem,
129 you should consider reporting this to the Trac team.</p>
130 <p>Before you do that, though, <strong>please first try
131 <a py:with="q = quote_plus(message[:80])"
132 href="${trac.homepage}search?ticket=yes&amp;noquickjump=1&amp;q=$q">searching</a>
133 for similar issues</strong>, as it is quite likely that this problem
134 has been reported before. For questions about installation
135 and configuration of Trac, please try the
136 <a href="${trac.homepage}wiki/MailingList">mailing list</a>
137 instead of filing a ticket.
138 </p>
139 <form class="newticket" method="get" action="${trac.homepage}newticket">
140 <p>Otherwise, please ${create_ticket(True)} a new ticket at
141 the Trac project site, where you can describe the problem and
142 explain how to reproduce it.</p>
143 </form>
144 <py:if test="traceback">
145 <h2>Python Traceback</h2>
146 <div id="traceback">
147 Most recent call last:
148 <ul py:if="frames" style="display: none">
149 <li class="frame" py:for="idx, frame in enumerate(frames)">
150 <a href="#frame${idx}" id="frame${idx}">
151 <span class="file">File "${frame.filename}",
152 line <b>${frame.lineno + 1}</b>, in</span>
153 <var>${frame.function}</var>
154 </a>
155 <div py:if="frame.line" class="source" style="display: none">
156 <h3>Code fragment:</h3>
157 <ol start="${frame.lineno + 1 - len(frame.lines_before)}">
158 <li py:for="line in frame.lines_before"><code>${line or u'\xa0'}</code></li>
159 <li class="current"><code>${frame.line or u'\xa0'}</code></li>
160 <li py:for="line in frame.lines_after"><code>${line or u'\xa0'}</code></li>
161 </ol>
162 </div>
163 <div py:if="frame.vars" class="vars" style="display: none">
164 <h3>Local variables:</h3>
165 <table class="listing">
166 <thead><tr><th>Name</th><th>Value</th></tr></thead>
167 <tbody>
168 <tr py:for="idx, (name, value) in enumerate(sorted(frame.vars.items()))"
169 class="${idx % 2 and 'odd' or None}">
170 <th scope="row"><var>$name</var></th>
171 <td><code>${shorten_line(repr(value))}</code></td>
172 </tr>
173 </tbody>
174 </table>
175 </div>
176 </li>
177 </ul>
178 <pre><py:for each="frame in frames">File "${frame.filename}", line ${frame.lineno + 1}, in ${frame.function}<py:if test="frame.line">
179 ${frame.line.lstrip()}
180</py:if></py:for><py:if test="not frames">${traceback}</py:if></pre>
181 <p style="display: none"><input type="button" id="tbtoggle" value="Switch to plain text view" /></p>
182 </div>
183 </py:if>
184 <h2>System Information:</h2>
185 <table class="listing" id="systeminfo">
186 <tr py:for="name, value in trac.systeminfo">
187 <th>$name:</th>
188 <td>$value</td>
189 </tr>
190 </table>
191 </py:otherwise>
192 </py:choose>
193 </py:when>
194 </py:choose>
195 <p>
196 <a href="${href.wiki('TracGuide')}">TracGuide</a> &mdash; The Trac User and Administration Guide
197 </p>
198 </div>
199 </body>
200</html>
2010
=== removed file 'trac-files/templates/history_view.html'
--- trac-files/templates/history_view.html 2011-10-17 17:00:12 +0000
+++ trac-files/templates/history_view.html 1970-01-01 00:00:00 +0000
@@ -1,57 +0,0 @@
1<!DOCTYPE html
2 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:py="http://genshi.edgewall.org/"
6 xmlns:xi="http://www.w3.org/2001/XInclude">
7 <xi:include href="layout.html" />
8 <xi:include href="macros.html" />
9 <head>
10 <title>$title</title>
11 </head>
12
13 <body>
14 <div id="content" class="ticket">
15 <h1>Change History for <a href="${url_of(resource)}">${name_of(resource)}</a></h1>
16
17 <form py:if="history" class="printableform" method="get" action="">
18 <div class="buttons">
19 <input type="hidden" name="action" value="diff" />
20 <input type="submit" value="View changes" />
21 </div>
22 <table id="fieldhist" class="listing" summary="Change history">
23 <thead>
24 <tr>
25 <th class="diff"></th>
26 <th class="version">Version</th>
27 <th class="date">Date</th>
28 <th class="author">Author</th>
29 <th class="comment">Comment</th>
30 </tr>
31 </thead>
32 <tbody>
33 <tr py:for="idx, item in enumerate(history)" class="${idx % 2 and 'odd' or 'even'}">
34 <td class="diff">
35 <input type="radio" name="old_version" value="$item.version"
36 checked="${idx == 1 or None}" />
37 <input type="radio" name="version" value="$item.version"
38 checked="${idx == 0 or None}" />
39 </td>
40 <td class="version">
41 <a href="${url_of(resource, version=item.version)}" title="View this version">$item.version</a>
42 </td>
43 <td class="date">${dateinfo(item.date)}</td>
44 <td class="author" title="${show_ip_addresses and item.ipnr and 'IP-Address: ' + item.ipnr or None}">${authorinfo(item.author)}</td>
45 <td class="comment">${wiki_to_oneliner(context(resource), item.comment, shorten=True)}</td>
46 </tr>
47 </tbody>
48 </table>
49 <py:if test="len(history) &gt; 10">
50 <div class="buttons">
51 <input type="submit" value="View changes" />
52 </div>
53 </py:if>
54 </form>
55 </div>
56 </body>
57</html>
580
=== removed file 'trac-files/templates/index.html'
--- trac-files/templates/index.html 2011-10-17 17:00:12 +0000
+++ trac-files/templates/index.html 1970-01-01 00:00:00 +0000
@@ -1,23 +0,0 @@
1<!DOCTYPE html
2 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:py="http://genshi.edgewall.org/"
6 xmlns:xi="http://www.w3.org/2001/XInclude">
7 <head>
8 <title>Available Projects</title>
9 </head>
10
11 <body>
12 <h1>Available Projects</h1>
13 <ul>
14 <li py:for="project in projects" py:choose="">
15 <a py:when="'href' in project" href="$project.href"
16 title="$project.description">$project.name</a>
17 <py:otherwise>
18 <small>$project.name: <em>Error</em> <br /> ($project.description)</small>
19 </py:otherwise>
20 </li>
21 </ul>
22 </body>
23</html>
240
=== removed file 'trac-files/templates/layout.html'
--- trac-files/templates/layout.html 2011-10-17 17:00:12 +0000
+++ trac-files/templates/layout.html 1970-01-01 00:00:00 +0000
@@ -1,57 +0,0 @@
1<!DOCTYPE html
2 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:xi="http://www.w3.org/2001/XInclude"
6 xmlns:py="http://genshi.edgewall.org/"
7 py:strip="">
8
9 <py:match path="head" once="true"><head>
10 <title py:with="title = list(select('title/text()'))">
11 <py:if test="title">${title} – </py:if>${project.name or 'Trac'}
12 </title>
13 <meta name="ROBOTS" content="NOODP" />
14 <meta name="Description" content="An event-driven networking engine written in Python and MIT licensed." />
15 <py:if test="chrome.links">
16 <py:for each="rel, links in chrome.links.items()">
17 <link rel="${rel}" py:for="link in links" py:attrs="link" />
18 </py:for>
19 </py:if>
20 <py:if test="'SEARCH_VIEW' in perm" id="search">
21 <link type="application/opensearchdescription+xml" rel="search"
22 href="${href.search('opensearch')}" title="Search $project.name"/>
23 </py:if>
24 <script py:for="script in chrome.scripts"
25 type="${script.type}" src="${script.href}"></script>
26 ${Markup('&lt;!--[if lt IE 7]&gt;')}
27 <script type="text/javascript" src="${chrome.htdocs_location}js/ie_pre7_hacks.js"></script>
28 ${Markup('&lt;![endif]--&gt;')}
29 ${select("*[local-name() != 'title']")}
30 </head></py:match>
31
32 <py:match path="body" once="true" buffer="false"><body>
33 ${select('*|text()')}
34
35 <script type="text/javascript" py:if="chrome.late_links">
36 <py:for each="link in chrome.late_links.get('stylesheet')">
37 jQuery.loadStyleSheet("${link.href}", "${link.type}");
38 </py:for>
39 </script>
40 <script py:for="script in chrome.late_scripts"
41 type="${script.type}" src="${script.href}"></script>
42
43 <div id="altlinks" py:if="'alternate' in chrome.links">
44 <h3>Download in other formats:</h3>
45 <ul>
46 <li py:for="idx, link in enumerate(chrome.links.alternate)"
47 class="${first_last(idx, chrome.links.alternate)}">
48 <a rel="nofollow" href="${link.href}" class="${link['class']}"
49 py:content="link.title" />
50 </li>
51 </ul>
52 </div>
53 </body></py:match>
54
55 <xi:include href="$chrome.theme"><xi:fallback /></xi:include>
56 <xi:include href="site.html"><xi:fallback /></xi:include>
57</html>
580
=== removed file 'trac-files/templates/macros.cs'
--- trac-files/templates/macros.cs 2011-10-17 17:00:12 +0000
+++ trac-files/templates/macros.cs 1970-01-01 00:00:00 +0000
@@ -1,197 +0,0 @@
1<?cs def:hdf_select(options, name, selected, optional) ?>
2 <select size="1" id="<?cs var:name ?>" name="<?cs var:name ?>"><?cs
3 if:optional ?><option></option><?cs /if ?><?cs
4 each:option = options ?>
5 <option<?cs if:option == selected ?> selected="selected"<?cs /if ?>><?cs
6 var:option ?></option><?cs
7 /each ?>
8 </select><?cs
9/def?><?cs
10
11def:labelled_hdf_select(label, options, name, selected, optional) ?><?cs
12 if:len(options) > #0 ?>
13 <label for="<?cs var:name ?>"><?cs var:label ?></label><?cs
14 call:hdf_select(options, name, selected, optional) ?>
15 </label>
16 <br /><?cs
17 /if ?><?cs
18/def ?><?cs
19
20def:browser_path_links(path, file) ?><?cs
21 set:first = #1 ?><?cs
22 each:part = path ?><?cs
23 set:last = name(part) == len(path) - #1 ?><a<?cs
24 if:first ?> class="first" title="Go to root directory"<?cs
25 set:first = #0 ?><?cs
26 else ?> title="View <?cs var:part.name ?>"<?cs
27 /if ?> href="<?cs var:part.href ?>"><?cs var:part.name ?></a><?cs
28 if:!last ?><span class="sep">/</span><?cs /if ?><?cs
29 /each ?><?cs
30/def ?><?cs
31
32def:diff_line_class(block, line) ?><?cs
33 set:first = name(line) == 0 ?><?cs
34 set:last = name(line) + 1 == len(block.lines) ?><?cs
35 if:first || last ?> class="<?cs
36 if:first ?>first<?cs /if ?><?cs
37 if:first && last ?> <?cs /if ?><?cs
38 if:last ?>last<?cs /if ?>"<?cs
39 /if ?><?cs
40/def ?><?cs
41
42def:diff_display(diff, style) ?><?cs
43 if:style == 'sidebyside' ?><?cs
44 each:block = diff ?><?cs
45 if:block.type == 'unmod' ?><tbody><?cs
46 each:line = block.base.lines ?><tr><th><?cs
47 var:#block.base.offset + name(line) + 1 ?></th><td class="l"><span><?cs
48 var:line ?></span>&nbsp;</td><th><?cs
49 var:#block.changed.offset + name(line) + 1 ?></th><td class="r"><span><?cs
50 var:block.changed.lines[name(line)] ?></span>&nbsp;</td></tr><?cs
51 /each ?></tbody><?cs
52 elif:block.type == 'mod' ?><tbody class="mod"><?cs
53 if:len(block.base.lines) >= len(block.changed.lines) ?><?cs
54 each:line = block.base.lines ?><tr><th><?cs
55 var:#block.base.offset + name(line) + 1 ?></th><td class="l"><?cs
56 var:line ?>&nbsp;</td><?cs
57 if:len(block.changed.lines) >= name(line) + 1 ?><?cs
58 each:changedline = block.changed.lines ?><?cs
59 if:name(changedline) == name(line) ?><th><?cs
60 var:#block.changed.offset + name(changedline) + 1 ?></th><td class="r"><?cs
61 var:changedline ?>&nbsp;</td><?cs
62 /if ?><?cs
63 /each ?><?cs
64 else ?><th>&nbsp;</th><td class="r">&nbsp;</td><?cs
65 /if ?></tr><?cs
66 /each ?><?cs
67 else ?><?cs
68 each:line = block.changed.lines ?><tr><?cs
69 if:len(block.base.lines) >= name(line) + 1 ?><?cs
70 each:baseline = block.base.lines ?><?cs
71 if:name(baseline) == name(line) ?><th><?cs
72 var:#block.base.offset + name(baseline) + 1 ?></th><td class="l"><?cs
73 var:baseline ?>&nbsp;</td><?cs
74 /if ?><?cs
75 /each ?><?cs
76 else ?><th>&nbsp;</th><td class="l">&nbsp;</td><?cs
77 /if ?>
78 <th><?cs var:#block.changed.offset + name(line) + 1 ?></th>
79 <td class="r"><?cs var:line ?>&nbsp;</td></tr><?cs
80 /each ?><?cs
81 /if ?></tbody><?cs
82 elif:block.type == 'add' ?><tbody class="add"><?cs
83 each:line = block.changed.lines ?><tr><th>&nbsp;</th><td class="l">&nbsp;</td><th><?cs
84 var:#block.changed.offset + name(line) + 1 ?></th><td class="r"><ins><?cs
85 var:line ?></ins>&nbsp;</td></tr><?cs
86 /each ?><?cs
87 elif:block.type == 'rem' ?><tbody class="rem"><?cs
88 each:line = block.base.lines ?><tr><th><?cs
89 var:#block.base.offset + name(line) + 1 ?></th><td class="l"><del><?cs
90 var:line ?></del>&nbsp;</td><th>&nbsp;</th><td class="r">&nbsp;</td></tr><?cs
91 /each ?><?cs
92 /if ?></tbody><?cs
93 /each ?><?cs
94 else ?><?cs
95 each:block = diff ?><?cs
96 if:block.type == 'unmod' ?><tbody><?cs
97 each:line = block.base.lines ?><tr><th><?cs
98 var:#block.base.offset + name(line) + #1 ?></th><th><?cs
99 var:#block.changed.offset + name(line) + #1 ?></th><td class="l"><span><?cs
100 var:line ?></span>&nbsp;</td></tr><?cs
101 /each ?></tbody><?cs
102 elif:block.type == 'mod' ?><tbody class="mod"><?cs
103 each:line = block.base.lines ?><tr<?cs
104 if:name(line) == 0 ?> class="first"<?cs /if ?>><th><?cs
105 var:#block.base.offset + name(line) + #1 ?></th><th>&nbsp;</th><td class="l"><?cs
106 var:line ?>&nbsp;</td></tr><?cs
107 /each ?><?cs
108 each:line = block.changed.lines ?><tr<?cs
109 if:name(line) + 1 == len(block.changed.lines) ?> class="last"<?cs /if ?>><th>&nbsp;</th><th><?cs
110 var:#block.changed.offset + name(line) + #1 ?></th><td class="r"><?cs
111 var:line ?>&nbsp;</td></tr><?cs
112 /each ?></tbody><?cs
113 elif:block.type == 'add' ?><tbody class="add"><?cs
114 each:line = block.changed.lines ?><tr<?cs
115 call:diff_line_class(block.changed, line) ?>><th>&nbsp;</th><th><?cs
116 var:#block.changed.offset + name(line) + #1 ?></th><td class="r"><ins><?cs
117 var:line ?></ins>&nbsp;</td></tr><?cs
118 /each ?></tbody><?cs
119 elif:block.type == 'rem' ?><tbody class="rem"><?cs
120 each:line = block.base.lines ?><tr<?cs
121 call:diff_line_class(block.base, line) ?>><th><?cs
122 var:#block.base.offset + name(line) + 1 ?></th><th>&nbsp;</th><td class="l"><del><?cs
123 var:line ?></del>&nbsp;</td></tr><?cs
124 /each ?></tbody><?cs
125 /if ?><?cs
126 /each ?><?cs
127 /if ?><?cs
128/def ?><?cs
129
130def:ticket_custom_props(ticket) ?><?cs
131 each c=ticket.custom ?>
132 <div class="field custom_<?cs var c.name ?>"><?cs
133 if c.type == 'text' ?>
134 <label>
135 <?cs alt c.label ?><?cs var c.name ?><?cs /alt ?>:
136 <input type="text" name="custom_<?cs var c.name ?>" value="<?cs var c.value ?>" />
137 </label><?cs
138 elif c.type == 'textarea' ?>
139 <label>
140 <?cs alt c.label ?><?cs var c.name ?><?cs /alt ?>:<br />
141 <textarea cols="<?cs alt c.width ?>60<?cs /alt ?>" rows="<?cs
142 alt c.height ?>12<?cs /alt ?>" name="custom_<?cs var c.name ?>"><?cs
143 var c.value ?></textarea>
144 </label><?cs
145 elif c.type == 'checkbox' ?>
146 <input type="hidden" name="checkbox_<?cs var c.name ?>" />
147 <label>
148 <input type="checkbox" name="custom_<?cs var c.name ?>" value="1"<?cs
149 if c.selected ?> checked="checked"<?cs /if ?> />
150 <?cs alt c.label ?><?cs var c.name ?><?cs /alt ?>
151 </label><?cs
152 elif c.type == 'select' ?>
153 <label>
154 <?cs alt c.label ?><?cs var c.name ?><?cs /alt ?>:
155 <select name="custom_<?cs var c.name ?>"><?cs each v = c.option ?>
156 <option<?cs if v.selected ?> selected="selected"<?cs /if ?>><?cs
157 var v ?></option><?cs /each ?>
158 </select>
159 </label><?cs
160 elif c.type == 'radio' ?>
161 <fieldset class="radio">
162 <legend><?cs alt c.label ?><?cs var c.name ?><?cs /alt ?>:</legend><?cs
163 each v = c.option ?>
164 <label><input type="radio" name="custom_<?cs var c.name ?>" value="<?cs
165 var v ?>"<?cs if v.selected ?> checked="checked"<?cs /if ?> /> <?cs
166 var v ?></label><?cs
167 /each ?>
168 </fieldset><?cs
169 /if ?>
170 </div><?cs
171 /each ?><?cs
172/def ?><?cs
173
174def:list_of_attachments(attachments, attach_href) ?>
175<h2>Attachments</h2><?cs
176 if:len(attachments) ?><div id="attachments">
177 <dl class="attachments"><?cs each:attachment = attachments ?>
178 <dt><a href="<?cs var:attachment.href ?>" title="View attachment"><?cs
179 var:attachment.filename ?></a> (<?cs var:attachment.size ?>) - added by <em><?cs
180 var:attachment.author ?></em> on <?cs
181 var:attachment.time ?>.</dt><?cs
182 if:attachment.description ?>
183 <dd><?cs var:attachment.description ?></dd><?cs
184 /if ?><?cs
185 /each ?></dl><?cs
186 /if ?><?cs
187 if:attach_href ?>
188 <form method="get" action="<?cs var:attach_href ?>"><div>
189 <input type="hidden" name="action" value="new" />
190 <input type="submit" value="Attach File" />
191 </div></form><?cs
192 /if ?><?cs if:len(attachments) ?></div><?cs /if ?><?cs
193/def ?><?cs
194
195def:plural(base, count) ?><?cs
196 var:base ?><?cs if:count != 1 ?>s<?cs /if ?><?cs
197/def ?>
1980
=== removed file 'trac-files/templates/macros.html'
--- trac-files/templates/macros.html 2011-10-17 17:00:12 +0000
+++ trac-files/templates/macros.html 1970-01-01 00:00:00 +0000
@@ -1,260 +0,0 @@
1<div xmlns="http://www.w3.org/1999/xhtml"
2 xmlns:py="http://genshi.edgewall.org/" py:strip="">
3
4 <!--!
5
6 WARNING: this file and the corresponding <py:def>s are going to be phased
7 out soon. Please DON'T include macros.html in your own templates.
8
9 See http://trac.edgewall.org/ticket/6374
10 -->
11
12 <!--! Display the plural or singular form of a noun depending on a given
13 - number.
14 -
15 - 'cnt' corresponding quantity
16 - 'noun'
17 - 'keepzero' If True, 0 gets pluralized, otherwise nothing gets generated.
18 -
19 - We take care to not insert any extra space.
20 -->
21 <py:def function="plural(cnt,noun,keepzero=False)"><py:if
22 test="cnt != 0 or keepzero"
23 >${cnt == 1 and ('1 '+noun) or '%d %ss' % (cnt, noun)}</py:if></py:def>
24
25 <!--! Display size of a content in human friendly format (think -H)
26 -
27 - We take care to not insert any extra space.
28 -->
29 <py:def function="sizeinfo(size)"><span title="$size bytes">${
30 pretty_size(size)
31 }</span></py:def>
32
33 <!--! Display author information, eventually obfuscating the e-mail address
34 -
35 - We take care to not insert any extra space.
36 -->
37 <py:def function="authorinfo(author, email_map=None)"><py:choose><py:when test="author"><py:with
38 vars="author = show_email_addresses and email_map and '@' not in author and email_map[author] or author">${
39 author and format_author(author) or 'anonymous'
40 }</py:with></py:when><py:otherwise>anonymous</py:otherwise></py:choose></py:def>
41
42 <!--! Display a sequence of path components.
43 -
44 - Each component is a link to the corresponding location in the browser.
45 -->
46 <py:def function="browser_path_links(path_links,rev=None)">
47 <py:for each="idx, part in enumerate(path_links)"><py:with
48 vars="first = idx == 0; last = idx == len(path_links) - 1"><a
49 class="${classes('pathentry', first=first)}"
50 title="${first and 'Go to root directory' or 'View ' + part.name}"
51 href="$part.href">$part.name</a><py:if
52 test="not last"><span class="pathentry sep">/</span></py:if></py:with></py:for>
53 <py:if test="rev"><span class="pathentry sep">@</span>
54 <a class="pathentry" href="${href.changeset(rev)}" title="View changeset $rev">$rev</a>
55 </py:if>
56 <br style="clear: both" />
57 </py:def>
58
59 <!--! Add Previous/Up/Next navigation links
60 -
61 - `label` the label to use after the Previous/Next words
62 - `uplabel` the label to use for the Up link
63 -
64 - Assume the 'chrome' datastructure to be available from the context.
65 -->
66 <ul py:def="prevnext_nav(label, uplabel=None)" py:with="links = chrome.links"
67 py:if="'up' in chrome.links or
68 'prev' in chrome.links or
69 'next' in chrome.links">
70 <li class="first" py:choose="">
71 &larr; <a py:when="'prev' in links" py:with="link = links.prev[0]"
72 class="prev" href="${link.href}"
73 title="${link.title}">Previous $label</a>
74 <span py:otherwise="" class="missing">Previous $label</span>
75 </li>
76 <li py:if="uplabel and 'up' in links">
77 <a py:with="link = links.up[0]" href="${link.href}"
78 title="${link.title}">$uplabel</a>
79 </li>
80 <li class="last" py:choose="">
81 <a py:when="'next' in links" py:with="link = links.next[0]"
82 class="next" href="${link.href}"
83 title="${link.title}">Next $label</a>
84 <span py:otherwise="" class="missing">Next $label</span> &rarr;
85 </li>
86 </ul>
87
88 <!--! Add diff option fields (to be used inside a form)
89 -
90 - `diff` the datastructure which contains diff options
91 -
92 -->
93 <py:def function="diff_options_fields(diff)">
94 <label for="style">View differences</label>
95 <select id="style" name="style">
96 <option selected="${diff.style == 'inline' or None}"
97 value="inline">inline</option>
98 <option selected="${diff.style == 'sidebyside' or None}"
99 value="sidebyside">side by side</option>
100 </select>
101 <div class="field">
102 Show <input type="text" name="contextlines" id="contextlines" size="2"
103 maxlength="3" value="${diff.options.contextlines &lt; 0 and 'all' or diff.options.contextlines}" />
104 <label for="contextlines">lines around each change</label>
105 </div>
106 <fieldset id="ignore" py:with="options = diff.options">
107 <legend>Ignore:</legend>
108 <div class="field">
109 <input type="checkbox" id="ignoreblanklines" name="ignoreblanklines"
110 checked="${options.ignoreblanklines or None}" />
111 <label for="ignoreblanklines">Blank lines</label>
112 </div>
113 <div class="field">
114 <input type="checkbox" id="ignorecase" name="ignorecase"
115 checked="${options.ignorecase or None}" />
116 <label for="ignorecase">Case changes</label>
117 </div>
118 <div class="field">
119 <input type="checkbox" id="ignorewhitespace" name="ignorewhitespace"
120 checked="${options.ignorewhitespace or None}" />
121 <label for="ignorewhitespace">White space changes</label>
122 </div>
123 </fieldset>
124 <div class="buttons">
125 <input type="submit" name="update" value="Update" />
126 </div>
127 </py:def>
128
129 <!--! Display a div for visualizing a preview of a file content
130 -
131 - 'preview' is usually obtained from calling Mimeview.preview_data()
132 -
133 -->
134 <py:def function="preview_file(preview)">
135 ${preview.rendered}
136 <py:choose>
137 <p py:when="preview.size == 0">
138 <strong>(The file is empty)</strong>
139 </p>
140 <p py:when="not preview.rendered">
141 <strong>HTML preview not available</strong>,
142 <py:choose>
143 <py:when test="preview.max_file_size_reached">
144 since the file size exceeds $preview.max_file_size bytes.
145 </py:when>
146 <py:otherwise>
147 since no preview renderer could handle it.
148 </py:otherwise>
149 </py:choose>
150 Try <a href="$preview.raw_href">downloading</a> the file instead.
151 </p>
152 <py:when test="'errors' in preview">
153 <p>
154 <strong>HTML preview not available</strong>.
155 To view, <a href="$preview.raw_href">download</a> the file.
156 </p>
157 <p>${plural(len(preview.errors), 'issue')} found:</p>
158 <div py:for="renderer, err in preview.errors" class="system-message">
159 <strong>${renderer.__class__.__name__}</strong>
160 <pre>$err</pre>
161 </div>
162 </py:when>
163 </py:choose>
164 </py:def>
165
166 <!--! Display a list of attachments
167 -
168 - 'alist' is an AttachmentList object (see attachment.py)
169 - 'compact' is used to switch between a compact list of attachments (e.g. as used for
170 - the wiki view) and an expanded list (e.g. as used for the ticket view)
171 -->
172 <py:def function="list_of_attachments(alist, compact=False, add_button_title=None)">
173 <py:def function="show_one_attachment(attachment)">
174 <a href="${url_of(attachment.resource)}" title="View attachment">$attachment.filename</a>
175 <a href="${url_of(attachment.resource, format='raw')}"
176 title="Download" class="trac-rawlink"><img src="${chrome.htdocs_location}download.png" alt="Download"/></a>
177 (${sizeinfo(attachment.size)}) - added by <em>${authorinfo(attachment.author)}</em>
178 ${dateinfo(attachment.date)} ago.
179 </py:def>
180 <py:if test="alist.attachments or alist.can_create">
181 <py:choose test="">
182 <py:when test="compact and alist.attachments">
183 <h3>Attachments</h3>
184 <ul>
185 <py:for each="attachment in alist.attachments">
186 <li>
187 ${show_one_attachment(attachment)}
188 <q py:if="compact and attachment.description">${wiki_to_oneliner(context, attachment.description)}</q>
189 </li>
190 </py:for>
191 </ul>
192 </py:when>
193 <py:when test="not compact">
194 <h2>Attachments</h2>
195 <div py:if="alist.attachments or alist.can_create" id="attachments">
196 <dl py:if="alist.attachments" class="attachments">
197 <py:for each="attachment in alist.attachments">
198 <dt>${show_one_attachment(attachment)}</dt>
199 <dd py:if="attachment.description">
200 ${wiki_to_oneliner(context, attachment.description)}
201 </dd>
202 </py:for>
203 </dl>
204 ${attach_file_form(alist, add_button_title)}
205 </div>
206 </py:when>
207 </py:choose>
208 </py:if>
209 </py:def>
210
211 <!--! Conditionally render an ''Attach File'' button
212 -
213 - 'alist' is an AttachmentList object (see attachment.py)
214 -->
215 <py:def function="attach_file_form(alist, add_button_title=None)">
216 <form py:if="alist.can_create" method="get" action="${alist.attach_href}" id="attachfile">
217 <div>
218 <input type="hidden" name="action" value="new" />
219 <input type="submit" name="attachfilebutton" value="${add_button_title or _('Attach file')}" />
220 </div>
221 </form>
222 </py:def>
223
224 <!--! Display a generic "progress bar", for use in roadmap and milestone.
225 -
226 - `stats` argument is a TicketGroupStats instance
227 - `interval_hrefs` are links to a query for each of the stats.intervals
228 -->
229 <py:def function="progress_bar(stats, interval_hrefs, percent=None, legend=True, style=None, stats_href=None)">
230 <table class="progress" style="$style">
231 <tr>
232 <td py:for="idx, interval in enumerate(stats.intervals)" py:choose=""
233 class="$interval.css_class" style="${interval.percent and 'width: %d%%' % interval.percent or 'display: none'}">
234 <a py:when="interval_hrefs" href="${interval_hrefs[idx]}"
235 title="${interval.count} of ${stats.count} ${stats.unit}${
236 stats.count != 1 and 's' or ''} ${interval.title}"></a>
237 <a py:otherwise=""
238 title="${interval.count} of ${stats.count} ${stats.unit}${
239 stats.count != 1 and 's' or ''} ${interval.title}"></a>
240 </td>
241 </tr>
242 </table>
243 <p class="percent">${percent is None and '%d%%' % stats.done_percent or percent}</p>
244 <dl py:if="legend">
245 <py:for each="idx, interval in enumerate(stats.intervals)">
246 <dt py:choose="">
247 <a py:when="interval_hrefs" href="${interval_hrefs[idx]}">${interval.title.capitalize()} ${stats.unit}s:</a>
248 <a py:otherwise="">${interval.title.capitalize()} ${stats.unit}s:</a>
249 </dt>
250 <dd py:choose="">
251 <a py:when="interval_hrefs" href="${interval_hrefs[idx]}">${interval.count}</a>
252 <a py:otherwise="">${interval.count}</a>
253 </dd>
254 </py:for>
255 <dt>/ <a href="${stats_href}">Total ${stats.unit}s:</a></dt>
256 <dd><a href="${stats_href}">${sum([x.count for x in stats.intervals], 0)}</a></dd>
257 </dl>
258</py:def>
259
260</div>
2610
=== removed file 'trac-files/templates/macros.rss'
--- trac-files/templates/macros.rss 2011-10-17 17:00:12 +0000
+++ trac-files/templates/macros.rss 1970-01-01 00:00:00 +0000
@@ -1,29 +0,0 @@
1<?xml version="1.0"?>
2<rss version="2.0" xmlns:py="http://genshi.edgewall.org/"
3 xmlns:dc="http://purl.org/dc/elements/1.1/" py:strip="">
4
5 <!--!
6
7 WARNING: this file and the corresponding <py:def>s are going to be phased
8 out soon. Please DON'T include macros.rss in your own templates.
9
10 See http://trac.edgewall.org/ticket/6374
11 -->
12
13 <!--! Generate an <author> or a <dc:creator> tag, based on the presence
14 - of an email or not in the author's information.
15 -
16 - Assume 'show_email_addresses' to be available in the global data.
17 -->
18 <py:def function="author_or_creator(author, email_map=None)">
19 <py:if test="author">
20 <!--! Try our best to retrieve an email address if wanted and possible -->
21 <py:with vars="author = show_email_addresses and email_map and '@' not in author and email_map[author] or author">
22 <py:choose>
23 <author py:when="show_email_addresses and '@' in author">${format_author(author)}</author>
24 <dc:creator py:otherwise="">${format_author(author)}</dc:creator>
25 </py:choose>
26 </py:with>
27 </py:if>
28 </py:def>
29</rss>
300
=== removed file 'trac-files/templates/page_index.html'
--- trac-files/templates/page_index.html 2011-10-17 17:00:12 +0000
+++ trac-files/templates/page_index.html 1970-01-01 00:00:00 +0000
@@ -1,27 +0,0 @@
1<!--! Display a page index.
2
3 `paginator` must be a trac.util.presentation.Paginator instance
4
5 -->
6<div xmlns="http://www.w3.org/1999/xhtml"
7 xmlns:py="http://genshi.edgewall.org/" class="paging" py:if="paginator.has_more_pages">
8
9 <span py:if="paginator.has_previous_page"
10 py:with="prevlink = chrome.links.prev[0]" class="previous">
11 <a href="${prevlink.href}" title="${prevlink.title}">&larr;</a>
12 </span>
13 <py:for each="page in paginator.shown_pages">
14 <span py:if="page.string == paginator.current_page.string">
15 <span py:if="page.string == paginator.current_page.string" class="${paginator.current_page['class']}">${paginator.current_page.string}</span>
16 </span>
17 <span py:if="page.string != paginator.current_page.string">
18 <a href="${page.href}" title="${page.title}">${page.string}</a>
19 </span>
20 </py:for>
21 <span py:if="paginator.has_next_page"
22 py:with="nextlink = chrome.links.next[0]" class="next">
23 <a href="${nextlink.href}" title="${nextlink.title}">&rarr;</a>
24 </span>
25
26</div>
27
280
=== added file 'trac-files/templates/site.html'
--- trac-files/templates/site.html 1970-01-01 00:00:00 +0000
+++ trac-files/templates/site.html 2011-11-24 10:57:32 +0000
@@ -0,0 +1,120 @@
1<html xmlns="http://www.w3.org/1999/xhtml"
2 xmlns:py="http://genshi.edgewall.org/"
3 py:strip="">
4
5 <!--! Add some tasty meta tags. -->
6 <head py:match="head">
7 <meta name="ROBOTS" content="NOODP" />
8 <meta name="Description" content="An event-driven networking engine written in Python and MIT licensed." />
9 ${select('*|comment()|text()')}
10 <script type="text/javascript" src="https://www.google.com/jsapi?key=ABQIAAAAJE-f7vmwI1-jxkmwRe4lUxTAs18ELyhzmLGaHoc1qJwmpJy3zhR3LMRRdwqg5PSY4tnVO684msUklQ"></script>
11 <script type="text/javascript" src="${href.chrome('site/js/news.js')}" />
12 </head>
13
14 <!--! Add our own top-level navigation links. -->
15 <div py:match="div[@id='banner']" py:attrs="select('@*')">
16 <div id="top_grad"></div>
17 <div id="tab">
18 <a href="${href.wiki()}">HOME</a>
19 <a href="${href.wiki('FrequentlyAskedQuestions')}">FAQ</a>
20 <a href="${href.wiki('Documentation')}">DOCS</a>
21 <a href="${href.wiki('Downloads')}">DOWNLOAD</a>
22 </div>
23 ${select('*|comment()|text()')}
24 </div>
25
26 <!--! Our own custom footer -->
27 <div py:match="div[@id='footer']" py:attrs="select('@*')">
28 <div class="sitemeter">
29 <!--WEBBOT bot="HTMLMarkup" startspan ALT="Site Meter" -->
30 <!--
31 <script type="text/javascript" language="JavaScript">var site="sm7twistedmatrix"</script>
32 <script type="text/javascript" language="JavaScript1.2" src="http://sm7.sitemeter.com/js/counter.js?site=sm7twistedmatrix"></script>
33 <noscript>
34 -->
35 <a href="http://sm7.sitemeter.com/stats.asp?site=sm7twistedmatrix" target="_top">
36 <img src="http://sm7.sitemeter.com/meter.asp?site=sm7twistedmatrix" alt="Site Meter" border="0" />
37 </a>
38 <!-- </noscript> -->
39 <!-- Copyright (c)2002 Site Meter -->
40 <!--WEBBOT bot="HTMLMarkup" Endspan -->
41
42 <!-- Google analytics, obviously. -->
43 <script src="http://www.google-analytics.com/urchin.js" type="text/javascript" />
44 <script type="text/javascript">
45 _uacct = "UA-99018-6";
46 urchinTracker();
47 </script>
48 </div>
49 <div class="credits">
50 <p><a href="${href.wiki('SiteCredits')}">Site design credits</a></p>
51 </div>
52 <div class="right">
53 <p>${chrome.footer}</p>
54 </div>
55 </div>
56
57 <!--! A more structured form of the ticket resolution, status and type attributes -->
58 <div py:match="div[@id='content' and @class='ticket']" py:attrs="select('@*')">
59 <span class="statuses" py:match="span[@class='status']">
60 <py:if test="ticket.type"><span class="type">${ticket.type}</span></py:if>
61 <py:if test="ticket.status"><span class="status">${ticket.status}</span></py:if>
62 <py:if test="ticket.resolution"><span class="resolution">${ticket.resolution}</span></py:if>
63 </span>
64 <h1 py:match="h1">
65 <span class="title">${select('text()')}</span>
66 ${select('*|comment()')}
67 </h1>
68 ${select('*|comment()|text()')}
69 </div>
70
71 <!--! Genshi, like all write-your-logic-in-your-template languages, is
72 completely and utterly terrible. The context in which the variable
73 "change" occurs is completely lost and so our only option appears to
74 be to reproduce the entire loop. Goodie. -->
75 <div py:match="div[@id='changelog']" py:attrs="select('@*')">
76 <form py:for="change in changes" method="get" action="#comment" class="printableform">
77 <a href="#${'cnum' in change and 'comment:%d' % change.cnum or None}">
78 <h2 class="comment-number">${'cnum' in change and change.cnum or None}</h2>
79 </a>
80 <div class="change">
81 <h3 class="change" id="${'cnum' in change and 'comment:%d' % change.cnum or None}">
82 <span class="threading" py:if="replies and 'cnum' in change"
83 py:with="change_replies = replies.get(str(change.cnum), [])">
84 <py:if test="change_replies or 'replyto' in change">
85 <py:if test="'replyto' in change">
86 in reply to: ${commentref('&uarr;&nbsp;', change.replyto)}
87 <py:if test="change_replies">; </py:if>
88 </py:if>
89 <py:if test="change_replies">follow-up${len(change_replies) > 1 and 's' or ''}:
90 <py:for each="reply in change_replies">
91 ${commentref('&darr;&nbsp;', reply)}
92 </py:for></py:if>
93 </py:if>
94 &nbsp;
95 </span>
96 Changed ${dateinfo(change.date)} ago by ${authorinfo(change.author)}
97 </h3>
98 <div py:if="'cnum' in change and can_append" class="inlinebuttons">
99 <input type="hidden" name="replyto" value="${change.cnum}" />
100 <input type="submit" value="Reply" title="Reply to comment ${change.cnum}" />
101 </div>
102 ${display_change(change)}
103 </div>
104 </form>
105 </div>
106
107 <!--! Don't allow replacing existing attachments, ever. -->
108 <py:match path="form[@id='attachment']//div[@class='options']" />
109
110 <!--! Show a reminder on the attachment page about including tests. -->
111 <py:match path="form[@id='attachment']/div[@class='buttons']">
112 <p>
113 Adding a patch that changes code? Make sure it includes unit tests!
114 <a href="/trac/wiki/ReviewProcess">See the complete acceptance criteria</a>. Thanks!
115 </p>
116 <div py:attrs="select('@*')">
117 ${select('*|comment()|text()')}
118 </div>
119 </py:match>
120</html>
0121
=== removed file 'trac-files/templates/theme.html'
--- trac-files/templates/theme.html 2011-10-17 17:00:12 +0000
+++ trac-files/templates/theme.html 1970-01-01 00:00:00 +0000
@@ -1,102 +0,0 @@
1<!DOCTYPE html
2 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4<html xmlns="http://www.w3.org/1999/xhtml"
5 xmlns:xi="http://www.w3.org/2001/XInclude"
6 xmlns:py="http://genshi.edgewall.org/"
7 py:strip="">
8
9 <div py:def="navigation(category)" id="${category}" class="nav">
10 <ul py:if="chrome.nav[category]">
11 <li py:for="idx, item in enumerate(chrome.nav[category])"
12 class="${classes(first_last(idx, chrome.nav[category]), active=item.active)}">${item.label}</li>
13 </ul>
14 </div>
15 <py:match path="body" once="true" buffer="false"><body>
16 <div id="banner">
17 <div id="top_grad">
18 &nbsp;
19 </div>
20 <div id="tab">
21 <a href="/trac/wiki">HOME</a>
22 <a href="/trac/wiki/FrequentlyAskedQuestions">FAQ</a>
23 <a href="/trac/wiki/Documentation">DOCS</a>
24 <a href="/trac/wiki/Downloads">DOWNLOAD</a>
25 </div>
26 <div id="header" py:choose="">
27 <a py:when="chrome.logo.src" id="logo" href="${chrome.logo.link or href.wiki('TracIni')+'#header_logo-section'}"><img
28 src="${chrome.logo.src}" alt="${chrome.logo.alt}"
29 height="${chrome.logo.height or None}" width="${chrome.logo.width or None}" /></a>
30 <h1 py:otherwise=""><a href="${chrome.logo.link}">${project.name}</a></h1>
31
32
33 </div>
34 <form id="topsearch" action="${href.search()}" method="get">
35 <div>
36 <label for="proj-search">Search:</label>
37 <input type="text" id="proj-search" name="q" size="18" accesskey="f" value="" />
38 <input type="submit" value="Search" />
39 </div>
40 </form>
41 ${navigation('metanav')}
42 </div>
43 ${navigation('mainnav')}
44
45 <div id="main">
46 <div id="ctxtnav" class="nav">
47 <h2>Context Navigation</h2>
48 <ul py:if="chrome.ctxtnav">
49 <li py:for="i, elm in enumerate(chrome.ctxtnav)"
50 class="${classes(first_last(i, chrome.ctxtnav))}">$elm</li>
51 </ul>
52 <hr />
53 </div>
54 <div id="warning" py:if="chrome.warnings" class="system-message">
55 <py:choose test="len(chrome.warnings)">
56 <strong>Warning:</strong>
57 <py:when test="1">${chrome.warnings[0]}</py:when>
58 <py:otherwise><ul><li py:for="warning in chrome.warnings">$warning</li></ul></py:otherwise>
59 </py:choose>
60 </div>
61 <div id="notice" py:if="chrome.notices" class="system-message">
62 <py:choose test="len(chrome.notices)">
63 <py:when test="1">${chrome.notices[0]}</py:when>
64 <py:otherwise><ul><li py:for="notice in chrome.notices">$notice</li></ul></py:otherwise>
65 </py:choose>
66 </div>
67
68 ${select('*|text()')}
69 </div>
70
71 <div id="footer" xml:lang="en"><hr/>
72<div>
73<!--WEBBOT bot="HTMLMarkup" startspan ALT="Site Meter" -->
74<!--
75<script type="text/javascript" language="JavaScript">var site="sm7twistedmatrix"</script>
76<script type="text/javascript" language="JavaScript1.2" src="http://sm7.sitemeter.com/js/counter.js?site=sm7twistedmatrix">
77</script>
78<noscript>
79-->
80<a href="http://sm7.sitemeter.com/stats.asp?site=sm7twistedmatrix" target="_top">
81<img src="http://sm7.sitemeter.com/meter.asp?site=sm7twistedmatrix" alt="Site Meter" border="0" /></a>
82<!-- </noscript> -->
83<!-- Copyright (c)2002 Site Meter -->
84<!--WEBBOT bot="HTMLMarkup" Endspan -->
85
86<!-- Google analytics, obviously. -->
87<script src="http://www.google-analytics.com/urchin.js" type="text/javascript" />
88<script type="text/javascript">
89_uacct = "UA-99018-6";
90urchinTracker();
91</script>
92<!-- End of that stuff -->
93</div>
94
95 <p class="left2">
96 Site design<br/>
97 By <a href="http://huw.ugbox.net/">huw.wilkins.</a>
98 </p>
99 <p class="right">${chrome.footer}</p>
100 </div>
101 </body></py:match>
102</html>

Subscribers

People subscribed via source and target branches