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
1=== removed file 'trac-files/common/banner_back.png'
2Binary 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
3=== removed file 'trac-files/common/banner_border_back.png'
4Binary 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
5=== removed file 'trac-files/common/banner_link_download.png'
6Binary 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
7=== removed file 'trac-files/common/banner_link_faq.png'
8Binary 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
9=== removed file 'trac-files/common/banner_link_home.png'
10Binary 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
11=== added file 'trac-files/common/bg.png'
12Binary 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
13=== removed file 'trac-files/common/css/browser.css.save'
14--- trac-files/common/css/browser.css.save 2011-10-17 17:00:12 +0000
15+++ trac-files/common/css/browser.css.save 1970-01-01 00:00:00 +0000
16@@ -1,127 +0,0 @@
17-#prefs { margin-top: -1.6em }
18-* html #prefs { width: 34em } /* Set width only for IE */
19-#prefs fieldset label { display: block }
20-#prefs .buttons { margin-top: -1.6em }
21-#prefs .choice { margin-top: -0.6em }
22-
23-#legend { clear: right; }
24-
25-/* Browser */
26-h1 { margin: 0; padding: 0 0 .5em }
27-h1 :link, h1 :visited, h1 .filename { border: none; padding: 0 .2em }
28-h1 :link, h1 :visited { color: #b00 }
29-h1 .first:link, h1 .first:visited { color: #998 }
30-h1 .sep { color: #666; padding: 0 .1em }
31-
32-#jumprev { float: right; font-size: 10px; margin: 0 0 0 }
33-#jumprev form { margin: 0 }
34-#jumprev input { font-size: 10px; margin-right: 0 }
35-
36-/* Styles for the directory entries table
37- (extends the styles for "table.listing") */
38-#dirlist { margin-top: 0 }
39-#dirlist td.rev, #dirlist td.age, #dirlist td.change {
40- color: #888;
41- white-space: nowrap;
42- vertical-align: baseline;
43-}
44-#dirlist td.rev {
45- font-family: monospace;
46- letter-spacing: -0.08em;
47- font-size: 90%;
48- text-align: right;
49-}
50-#dirlist td.size {
51- color: #888;
52- white-space: nowrap;
53- text-align: right;
54- vertical-align: middle;
55- font-size: 70%;
56-}
57-#dirlist td.name { width: 100% }
58-#dirlist td.name a, #dirlist td.name span {
59- background-position: 0% 50%;
60- background-repeat: no-repeat;
61- padding-left: 20px;
62-}
63-#dirlist td.name a.parent { background-image: url(../parent.png) }
64-#dirlist td.name a.dir { background-image: url(../folder.png) }
65-#dirlist td.name a.file { background-image: url(../file.png) }
66-#dirlist td.name a, #dirlist td.rev a { border-bottom: none; display: block }
67-#dirlist td.rev { text-align: right }
68-#dirlist td.change { font-size: 85%; vertical-align: middle; white-space: nowrap }
69-
70-/* Style for the ''View Changes'' button */
71-#anydiff { margin: 0 0 1em; float: left }
72-#anydiff form, #anydiff div, #anydiff h2 { display: inline }
73-#anydiff input { vertical-align: baseline; margin: 0 -0.5em 0 1em }
74-@media print {
75- #anydiff form { display: none }
76-}
77-
78-/* Log */
79-tr.diff input { padding: 0 1em; margin: 0 }
80-
81-div.buttons { clear: left }
82-@media print {
83- th.diff, td.diff { display: none }
84-}
85-
86-/* Styles for the revision log table (extends the styles for "table.listing") */
87-#chglist { margin-top: 0 }
88-#chglist td.change span {
89- border: 1px solid #999;
90- display: block;
91- margin: .2em .5em 0 0;
92- width: .8em; height: .8em;
93-}
94-#chglist td.diff { white-space: nowrap }
95-#chglist td.change .comment { display: none }
96-#chglist td.old_path { font-style: italic }
97-#chglist td.date {
98- font-size: 85%;
99- vertical-align: top;
100- padding-top: 0.55em;
101- white-space: nowrap;
102-}
103-#chglist td.author { font-size: 85%; vertical-align: top; padding-top: 0.55em }
104-#chglist td.rev, #chglist td.chgset {
105- font-family: monospace;
106- letter-spacing: -0.08em;
107- font-size: 90%;
108- text-align: right;
109-}
110-#chglist td.rev a, #chglist td.chgset a { border-bottom: none }
111-#chglist td.summary {
112- width: 100%;
113- font-size: 85%;
114- vertical-align: middle;
115- white-space: nowrap
116-}
117-#chglist .verbose td.summary {
118- border: none;
119- color: #333;
120- padding: .5em 1em 1em 2em;
121- font-size: 90%;
122- white-space: normal
123-}
124-
125-#chglist td.summary * { margin-top: 0; margin-bottom: 0 }
126-
127-#paging { margin: 1em 0 }
128-
129-/* Styles for the revision info in the file view (see also trac.css) */
130-#info { margin: 0; }
131-#info .props {
132- color: #666;
133- list-style: square;
134- margin: 0 0 .4em 1.6em;
135- padding: 0;
136-}
137-#info .props li { padding: 0 }
138-
139-/* Styles for the HTML preview */
140-#preview { background: #fff; clear: both; margin: 0 }
141-#preview .code-block { border-top: 1px solid #999; margin: 0 }
142-#preview .image-file { overflow: hidden }
143-#preview .image-file img { max-width: 100% }
144
145=== removed file 'trac-files/common/css/diff.css.save'
146--- trac-files/common/css/diff.css.save 2011-10-17 17:00:12 +0000
147+++ trac-files/common/css/diff.css.save 1970-01-01 00:00:00 +0000
148@@ -1,156 +0,0 @@
149-/* Diff preferences */
150-#prefs fieldset { margin: 1em .5em .5em; padding: .5em 1em 0 }
151-
152-/* Diff/change overview */
153-#overview { line-height: 130%; margin-top: 1em; padding: .5em }
154-#overview dt.property {
155- font-weight: bold;
156- padding-right: .25em;
157- position: absolute;
158- left: 0;
159- text-align: right;
160- width: 7.75em;
161-}
162-#overview dd { margin-left: 8em }
163-
164-#overview .message { padding: 1em 0 1px }
165-#overview dd.message p, #overview dd.message ul, #overview dd.message ol,
166-#overview dd.message pre { margin-bottom: 1em; margin-top: 0; }
167-
168-/* Colors for change types */
169-#chglist .edit, #overview .mod, .diff #legend .mod { background: #fd8 }
170-#chglist .delete, #overview .rem, .diff #legend .rem { background: #f88 }
171-#chglist .add, #overview .add, .diff #legend .add { background: #bfb }
172-#chglist .copy, #overview .cp, .diff #legend .cp { background: #88f }
173-#chglist .move, #overview .mv, .diff #legend .mv { background: #ccc }
174-#chglist .unknown { background: #fff }
175-
176-/* Legend for diff colors */
177-.diff #legend {
178- float: left;
179- font-size: 9px;
180- line-height: 1em;
181- margin: 1em 0;
182- padding: .5em;
183-}
184-.diff #legend h3 { display: none; }
185-.diff #legend dt {
186- background: #fff;
187- border: 1px solid #999;
188- float: left;
189- margin: .1em .5em .1em 2em;
190- overflow: hidden;
191- width: .8em; height: .8em;
192-}
193-.diff #legend dl, .diff #legend dd {
194- display: inline;
195- float: left;
196- padding: 0;
197- margin: 0;
198- margin-right: .5em;
199-}
200-
201-/* Styles for the list of diffs */
202-.diff ul.entries { clear: both; margin: 0; padding: 0 }
203-.diff li.entry {
204- background: #f7f7f7;
205- border: 1px solid #d7d7d7;
206- list-style-type: none;
207- margin: 0 0 2em;
208- padding: 2px;
209- position: relative;
210- width: 100%;
211-}
212-.diff h2 {
213- color: #333;
214- font-size: 14px;
215- letter-spacing: normal;
216- margin: 0 auto;
217- padding: .1em 0 .25em .5em;
218-}
219-
220-/* Styles for the actual diff tables (side-by-side and inline) */
221-.diff table {
222- border: 1px solid #ddd;
223- border-spacing: 0;
224- border-top: 0;
225- empty-cells: show;
226- font-size: 12px;
227- line-height: 130%;
228- padding: 0;
229- margin: 0 auto;
230- table-layout: fixed;
231- width: 100%;
232-}
233-.diff table col.lineno { width: 4em }
234-.diff table th {
235- border-right: 1px solid #d7d7d7;
236- border-bottom: 1px solid #998;
237- font-size: 11px;
238-}
239-.diff table thead th {
240- background: #eee;
241- border-top: 1px solid #d7d7d7;
242- color: #999;
243- padding: 0 .25em;
244- text-align: center;
245- white-space: nowrap;
246-}
247-.diff table tbody th {
248- background: #eed;
249- color: #886;
250- font-weight: normal;
251- padding: 0 .5em;
252- text-align: right;
253- vertical-align: top;
254-}
255-.diff table tbody td {
256- background: #fff;
257- font: normal 11px monospace;
258- overflow: hidden;
259- padding: 1px 2px;
260- vertical-align: top;
261-}
262-.diff table tbody.skipped td {
263- background: #f7f7f7;
264- border: 1px solid #d7d7d7;
265-}
266-.diff table td del, .diff table td ins { text-decoration: none }
267-.diff table td del { color: #600 }
268-.diff table td ins { color: #060 }
269-
270-/* Styles for the inline diff */
271-.diff table.inline tbody.mod td.l, .diff table.inline tbody.rem td.l {
272- background: #fdd;
273- border-color: #c00;
274- border-style: solid;
275- border-width: 0 1px 0 1px;
276-}
277-.diff table.inline tbody.mod td.r, .diff table.inline tbody.add td.r {
278- background: #dfd;
279- border-color: #0a0;
280- border-style: solid;
281- border-width: 0 1px 0 1px;
282-}
283-.diff table.inline tbody.mod tr.first td.l,
284-.diff table.inline tbody.rem tr.first td.l { border-top-width: 1px }
285-.diff table.inline tbody.mod tr.last td.l,
286-.diff table.inline tbody.rem tr.last td.l { border-bottom-width: 1px }
287-.diff table.inline tbody.mod tr.first td.r,
288-.diff table.inline tbody.add tr.first td.r { border-top-width: 1px }
289-.diff table.inline tbody.mod tr.last td.r,
290-.diff table.inline tbody.add tr.last td.r { border-bottom-width: 1px }
291-.diff table.inline tbody.mod td del { background: #e99; color: #000 }
292-.diff table.inline tbody.mod td ins { background: #9e9; color: #000 }
293-
294-/* Styles for the side-by-side diff */
295-.diff table.sidebyside colgroup.content { width: 50% }
296-.diff table.sidebyside tbody.mod td.l { background: #fe9 }
297-.diff table.sidebyside tbody.mod td.r { background: #fd8 }
298-.diff table.sidebyside tbody.add td.l { background: #dfd }
299-.diff table.sidebyside tbody.add td.r { background: #cfc }
300-.diff table.sidebyside tbody.rem td.l { background: #f88 }
301-.diff table.sidebyside tbody.rem td.r { background: #faa }
302-.diff table.sidebyside tbody.mod del, .diff table.sidebyside tbody.mod ins {
303- background: #fc0;
304-}
305
306=== modified file 'trac-files/common/css/report.css'
307--- trac-files/common/css/report.css 2011-10-17 17:00:12 +0000
308+++ trac-files/common/css/report.css 2011-11-24 10:57:32 +0000
309@@ -165,16 +165,11 @@
310 /* @import url(code.css); */
311
312 h1 .numrows, h2 .numrows {
313- margin-left: 1em;
314- color: #999;
315- font-size: 65%;
316- font-weight: normal;
317-}
318-h2 {
319- background: #f7f7f7;
320- border-bottom: 1px solid #d7d7d7;
321- margin: 2em 0 0;
322- padding: 0 .33em;
323+ margin-left: 1em;
324+ color: #777;
325+ font-size: 65%;
326+ vertical-align: middle;
327+ text-transform: uppercase;
328 }
329 #report-descr { margin: 0 2em; font-size: 90% }
330 #report-notfound { margin: 2em; font-size: 110% }
331@@ -205,7 +200,6 @@
332 .tickets tbody td :link, .tickets tbody td :visited { display: block }
333 .tickets { border-bottom: none }
334 .tickets thead th { text-transform: capitalize; white-space: nowrap; }
335-.tickets tbody td, .reports tbody td { padding: .1em .5em !important }
336 .tickets tbody td a, .reports tbody td a { border-bottom: none }
337 .tickets tbody td.id :link, .tickets tbody td.id :visited {
338 font-weight: bold;
339
340=== modified file 'trac-files/common/css/roadmap.css'
341--- trac-files/common/css/roadmap.css 2011-10-17 17:00:12 +0000
342+++ trac-files/common/css/roadmap.css 2011-11-24 10:57:32 +0000
343@@ -27,11 +27,6 @@
344 ul.milestones { margin: 2em 0 0; padding: 0 }
345 li.milestone { list-style: none; margin-bottom: 4em }
346 .milestone .info { white-space: nowrap }
347-.milestone .info h2 {
348- background: #f7f7f7;
349- border-bottom: 1px solid #d7d7d7;
350- margin: 0;
351-}
352 .milestone .info h2 :link, .milestone .info h2 :visited {
353 color: #000;
354 display: block;
355
356=== modified file 'trac-files/common/css/search.css'
357--- trac-files/common/css/search.css 2011-10-17 17:00:12 +0000
358+++ trac-files/common/css/search.css 2011-11-24 10:57:32 +0000
359@@ -5,7 +5,6 @@
360
361 #results { margin-right: 3em }
362 #results dt { margin: 1.5em 0 0 }
363-#results dt a { color: #33c }
364 #results dd { font-size: 80%; margin: 0; padding: 0 }
365 #results .author, #results .date, #results .keywords { color: #090 }
366
367
368=== modified file 'trac-files/common/css/ticket.css'
369--- trac-files/common/css/ticket.css 2011-10-17 17:00:12 +0000
370+++ trac-files/common/css/ticket.css 2011-11-24 10:57:32 +0000
371@@ -1,16 +1,30 @@
372 @import url(code.css);
373
374-#content.ticket { width: 700px; max-width: 100% }
375+#content.ticket {
376+ width: 60em;
377+ max-width: 100%;
378+}
379
380 #newticket #field-description { width: 100% }
381 #newticket #properties { width: 100% }
382
383+#propertyform,
384+#attachments,
385+#changelog,
386 #ticket {
387- background: #fff;
388- border: 1px outset #996;
389- margin-top: 1em;
390- padding: .5em 1em;
391- position: relative;
392+ background: #fff;
393+ border-radius: 0.35em;
394+ padding: .5em 1em;
395+ border: 1px solid #d0d0d0;
396+ border-bottom: 2px solid #83a501;
397+ margin-bottom: 1.5em;
398+ -moz-box-shadow: 0 0.15em 0.25em rgba(0, 0, 0, 0.15);
399+ -webkit-box-shadow: 0 0.15em 0.25em rgba(0, 0, 0, 0.15);
400+ box-shadow: 0 0.15em 0.25em rgba(0, 0, 0, 0.15);
401+}
402+
403+#propertyform {
404+ margin-top: 3em;
405 }
406
407 div#ticket.ticketdraft {
408@@ -32,61 +46,81 @@
409 }
410
411 h1 .status { color: #444; }
412-#ticket h2.summary { margin: 0 0 .8em 0 }
413-#ticket .date { color: #996; float: right; font-size: 85%; position: relative }
414+#ticket .date {
415+ color: #996;
416+ float: right;
417+ font-size: 85%;
418+ margin: 1em 0;
419+ text-align: right;
420+}
421 #ticket .date p { margin: .3em }
422
423 #ticket table.properties {
424- clear: both;
425- border-top: 1px solid #dd9;
426- border-collapse: collapse;
427- table-layout: fixed;
428- width: 100%;
429+ clear: both;
430+ border: 1px solid #bbb;
431+ border-radius: 0.35em;
432+ table-layout: fixed;
433+ width: 100%;
434+ background: #eee;
435 }
436-#ticket table.properties tr { border-bottom: 1px dotted #eed }
437 #ticket table.properties td, #ticket table.properties th {
438- font-size: 80%;
439+ font-size: 0.875em;
440 padding: .5em 1em;
441 vertical-align: top;
442+ font-size: 1em;
443+ padding: .35em .5em;
444 }
445 #ticket table.properties th {
446- color: #663;
447- font-weight: normal;
448- text-align: left;
449- width: 20%;
450+ color: #83a501;
451+ text-align: left;
452+ text-align: right;
453+ width: 20%;
454 }
455 #ticket table.properties td { width: 30% }
456 #ticket table.properties td p:first-child { margin-top: 0 }
457 #ticket table.properties td p:last-child { margin-bottom: 0 }
458 #ticket table.properties .description { border-top: 1px solid #dd9 }
459
460-#ticket .description h3 {
461- border-bottom: 1px solid #dd9;
462- color: #663;
463- font-size: 100%;
464- font-weight: normal;
465-}
466 #ticket .description h3 .lastmod {
467 font-size: 90%;
468 }
469+#changelog .inlinebuttons,
470 #ticket .inlinebuttons {
471- float: right;
472- position: relative;
473- bottom: 0.3em;
474-}
475-
476-#changelog { border: 1px outset #996; padding: 1em }
477+ float: right;
478+ position: relative;
479+ top: 0.75em;
480+}
481+
482+
483+#changelog {
484+ background: transparent;
485+ -moz-box-shadow: none;
486+ -webkit-box-shadow: none;
487+ box-shadow: none;
488+ padding: 0.35em 0 0;
489+ border: none;
490+}
491+#changelog .printableform {
492+ padding: 2em 1em;
493+ border: 1px solid;
494+ border-color: #ddd #aaa #aaa #ddd;
495+ border-radius: 0.35em;
496+ margin-top: 1em;
497+ position: relative;
498+ background: #fff;
499+}
500+#changelog .printableform:nth-child(2n) {
501+ background: #e7e7e7;
502+}
503+
504 #preview { border: 1px solid #d7d7d7; padding: 1em }
505 #preview h3, #changelog h3 {
506- border-bottom: 1px solid #d7d7d7;
507- color: #999;
508- font-size: 100%;
509- font-weight: normal;
510+ font-size: 100%;
511+ padding: 0;
512 }
513-.threading, #changelog .inlinebuttons { float: right; }
514-.threading { font-size: 90%; }
515+.threading { float: right; font-size: 90%; }
516
517-#preview .changes, #changelog .changes { list-style: square; margin-left: 2em; padding: 0 }
518+#preview .changes, #changelog .changes { margin-left: 2em; padding: 0 }
519 #preview .comment, #changelog .comment { margin-left: 2em }
520
521 form .field { margin-top: .75em; width: 100% }
522@@ -102,10 +136,13 @@
523 width: 20%;
524 vertical-align: top;
525 }
526-#properties table th.col2 { border-left: 1px dotted #d7d7d7 }
527 #properties table td { vertical-align: middle; width: 30% }
528 #properties table td.fullrow { vertical-align: middle; width: 80% }
529
530+#properties table tr:nth-child(2n) {
531+ background-color: #e6e6e6;
532+}
533+
534 #action { line-height: 2em }
535
536 fieldset.radio { border: none; margin: 0; padding: 0 }
537@@ -117,3 +154,51 @@
538 padding: 0 1em 0 0;
539 }
540 fieldset.radio label { padding-right: 1em }
541+
542+.ticket h1 .title {
543+ vertical-align: middle;
544+}
545+
546+.ticket h1 .statuses {
547+ float: right;
548+}
549+
550+.ticket h1 .status,
551+.ticket h1 .type,
552+.ticket h1 .resolution {
553+ text-transform: uppercase;
554+ color: #fff;
555+ padding: 0.35em 0.5em;
556+ font-size: 0.6875em;
557+ vertical-align: middle;
558+ border-bottom: 2px solid #444;
559+ border-radius: 0.35em;
560+ margin: 0 0.25em 0 0;
561+}
562+
563+.ticket h1 .status {
564+ background: #c27e7e;
565+}
566+
567+.ticket h1 .type {
568+ background: #a2b16c;
569+}
570+
571+.ticket h1 .resolution {
572+ background: #7e9ac2;
573+}
574+
575+.comment-number {
576+ position: absolute;
577+ top: 0;
578+ left: 100%;
579+ padding: 0 0 0 0.25em;
580+ font-size: 4.25em;
581+ color: #ced7ae;
582+ color: #ddd;
583+}
584+
585+#changelog .printableform:hover .comment-number {
586+ color: #ced7ae;
587+ display: block;
588+}
589
590=== removed file 'trac-files/common/css/ticket.css.save'
591--- trac-files/common/css/ticket.css.save 2011-10-17 17:00:12 +0000
592+++ trac-files/common/css/ticket.css.save 1970-01-01 00:00:00 +0000
593@@ -1,262 +0,0 @@
594-/* BEGIN inline of code.css */
595-/*
596-div.code {
597- background: #f7f7f7;
598- border: 1px solid #d7d7d7;
599- margin: 1em 1.75em;
600- padding: .25em;
601- overflow: auto
602-}
603-*/
604-div.code pre { margin: 0; }
605-
606-table.code {
607- border: 1px solid #ddd;
608- border-spacing: 0;
609- border-top: 0;
610- empty-cells: show;
611- font-size: 12px;
612- line-height: 130%;
613- padding: 0;
614- margin: 0 auto;
615- table-layout: fixed;
616- width: 100%;
617-}
618-table.code th {
619- border-right: 1px solid #d7d7d7;
620- border-bottom: 1px solid #998;
621- font-size: 11px;
622-}
623-table.code th.lineno { width: 4em }
624-table.code thead th {
625- background: #eee;
626- border-top: 1px solid #d7d7d7;
627- color: #999;
628- padding: 0 .25em;
629- text-align: center;
630- white-space: nowrap;
631-}
632-table.code tbody th {
633- background: #eed;
634- color: #886;
635- font-weight: normal;
636- padding: 0 .5em;
637- text-align: right;
638- vertical-align: top;
639-}
640-table.code tbody th :link, table.code tbody th :visited {
641- border: none;
642- color: #886;
643- text-decoration: none;
644-}
645-table.code tbody th :link:hover, table.code tbody th :visited:hover {
646- color: #000;
647-}
648-table.code tbody td {
649- background: #fff;
650- font: normal 11px monospace;
651- overflow: hidden;
652- padding: 1px 2px;
653- vertical-align: top;
654-}
655-
656-.image-file { background: #eee; padding: .3em }
657-.image-file img { background: url(../imggrid.png) }
658-
659-/* Default */
660-.code-block span {
661- font-family: monospace;
662-}
663-
664-/* Comments */
665-.code-comment, .css_comment, .c_comment, .c_commentdoc, .c_commentline,
666-.c_commentlinedoc, .h_comment,.pl_commentline, .p_commentblock,
667-.p_commentline, .hphp_comment, .hphp_commentblock, .hphp_commentline,
668-.yaml_comment {
669- color: #998;
670- font-style: italic;
671-}
672-
673-/* Language keyword */
674-.code-keyword, .pl_word { color: #789; font-weight: bold }
675-
676-/* Type */
677-.code-type, .c_word, .c_word2, .p_classname, .hphp_classname{
678- color: #468;
679- font-weight: bold;
680-}
681-
682-/* Function */
683-.code-func, .p_defname {
684- color: #900;
685- font-weight: bold;
686- border-bottom: none;
687-}
688-
689-/* Pre-processor */
690-.code-prep, .c_preprocessor, .pl_preprocessor, .yaml_identifier {
691- color: #999;
692- font-weight: bold;
693-}
694-
695-/* Language construct */
696-.code-lang, .p_word { color: #000; font-weight: bold }
697-
698-/* String */
699-.code-string, .c_string, .c_stringeol, .css_doublestring, .css_singlestring,
700-.h_singlestring, .h_doublestring, .pl_string, .pl_string_q, .pl_string_qq,
701-.pl_string_qr, .pl_string_qw, .pl_string_qx, .pl_backticks, .pl_character,
702-.p_string, .p_stringeol, .hphp_string, .hphp_stringeol, .hphp_triple,
703-.hphp_tripledouble, .p_character, .p_triple, .p_tripledouble {
704- color: #b84;
705- font-weight: normal;
706-}
707-
708-/* Variable name */
709-.code-var { color: #f9f }
710-
711-/* SilverCity-specific styles */
712-.css_id, .css_class, .css_pseudoclass, .css_tag { color: #900000 }
713-.css_directive { color: #009000; font-weight: bold }
714-.css_important { color: blue }
715-.css_operator { color: #000090; font-weight: bold }
716-.css_tag { font-weight: bold }
717-.css_unknown_identifier, .css_unknown_pseudoclass { color: red }
718-.css_value { color: navy }
719-.c_commentdockeyword { color: navy; font-weight: bold }
720-.c_commentdockeyworderror { color: red; font-weight: bold }
721-.c_character, .c_regex, .c_uuid, .c_verbatim { color: olive }
722-.c_number { color: #099 }
723-.h_asp { color: #ff0 }
724-.h_aspat { color: #ffdf00 }
725-.h_attribute { color: teal }
726-.h_attributeunknown { color: red }
727-.h_cdata { color: #373 }
728-.h_entity { color: purple }
729-.h_number { color: #099 }
730-.h_other { color: purple }
731-.h_script, .h_tag, .h_tagend { color: navy }
732-.h_tagunknown { color: red }
733-.h_xmlend, .h_xmlstart { color: blue }
734-.pl_datasection { color: olive }
735-.pl_error { color: red; font-weight: bold }
736-.pl_hash { color: #000 }
737-.pl_here_delim, .pl_here_q, .pl_here_qq, .pl_here_qx, .pl_longquote { color: olive }
738-.pl_number { color: #099 }
739-.pl_pod { font-style: italic }
740-.pl_regex, .pl_regsubst { color: olive }
741-.p_number { color: #099 }
742-.hphp_character { color: olive }
743-.hphp_defname { color: #099; font-weight: bold }
744-.hphp_number { color: #099 }
745-.hphp_word { color: navy; font-weight: bold }
746-.yaml_document { color: gray; font-style: italic }
747-.yaml_keyword { color: #808 }
748-.yaml_number { color: #800 }
749-.yaml_reference { color: #088 }
750-.v_comment { color: gray; font-style: italic }
751-.v_commentline, .v_commentlinebang { color: red; font-style: italic }
752-.v_number, .v_preprocessor { color: #099 }
753-.v_string, .v_stringeol { color: olive }
754-.v_user{ color: blue; font-weight: bold }
755-.v_word, .v_word3 { color: navy; font-weight: bold }
756-.v_word2 { color: green; font-weight: bold }
757-/* END OF code.css */
758-/* @import url(code.css); */
759-
760-#content { width: 700px; max-width: 100% }
761-
762-#newticket #description { width: 100% }
763-#newticket #properties { width: 100% }
764-
765-#ticket {
766- background: #fff;
767- border: 2px solid #9ac300;
768- margin-top: 1em;
769- padding: .5em 1em;
770- position: relative;
771-}
772-h1 .status { color: #444; text-transform: lowercase; }
773-#ticket h2.summary { margin: 0 0 .8em 0 }
774-#ticket .date { color: #996; float: right; font-size: 85%; position: relative }
775-#ticket .date p { margin: 0 }
776-
777-#ticket table.properties {
778- border-top: 1px solid #dd9;
779- border-collapse: collapse;
780- table-layout: fixed;
781- width: 100%;
782-}
783-#ticket table.properties tr { border-bottom: 1px dotted #eed }
784-#ticket table.properties td, #ticket table.properties th {
785- font-size: 80%;
786- padding: .5em 1em;
787- vertical-align: top;
788-}
789-#ticket table.properties th {
790- color: #663;
791- font-weight: normal;
792- text-align: left;
793- width: 20%;
794-}
795-#ticket table.properties td { width: 30% }
796-#ticket table.properties .description { border-top: 1px solid #dd9 }
797-
798-
799-#ticket .description h3 {
800- border-bottom: 1px solid #dd9;
801- color: #663;
802- font-size: 100%;
803- font-weight: normal;
804-}
805-#ticket .description h3 .lastmod {
806- font-size: 90%;
807-}
808-#ticket .inlinebuttons {
809- float: right;
810- position: relative;
811- bottom: 0.3em;
812-}
813-
814-#changelog { border: 1px outset #996; padding: 1em }
815-#changelog h3 {
816- border-bottom: 1px solid #d7d7d7;
817- color: #999;
818- font-size: 100%;
819- font-weight: normal;
820-}
821-#changelog .threading, #changelog .inlinebuttons {
822- float: right;
823- position: relative;
824- bottom: 0.3em;
825-}
826-
827-#changelog .changes { list-style: square; margin-left: 2em; padding: 0 }
828-#changelog .comment { margin-left: 2em }
829-
830-form .field { margin-top: .75em; width: 100% }
831-form #comment { width: 100% }
832-
833-#properties { white-space: nowrap; line-height: 160%; padding: .5em }
834-#properties table { border-spacing: 0; width: 100%; }
835-#properties table th {
836- padding: .4em;
837- text-align: right;
838- width: 20%;
839- vertical-align: top;
840-}
841-#properties table th.col2 { border-left: 1px dotted #d7d7d7 }
842-#properties table td { vertical-align: middle; width: 30% }
843-#properties table td.fullrow { vertical-align: middle; width: 80% }
844-
845-#action { line-height: 2em }
846-
847-fieldset.radio { border: none; margin: 0; padding: 0 }
848-fieldset.radio legend {
849- color: #000;
850- float: left;
851- font-size: 100%;
852- font-weight: normal;
853- padding: 0 1em 0 0;
854-}
855-fieldset.radio label { padding-right: 1em }
856
857=== modified file 'trac-files/common/css/timeline.css'
858--- trac-files/common/css/timeline.css 2011-10-17 17:00:12 +0000
859+++ trac-files/common/css/timeline.css 2011-11-24 10:57:32 +0000
860@@ -4,12 +4,6 @@
861 #prefs fieldset label { display: block }
862 #prefs .buttons { margin-top: -1.6em }
863
864-h2 {
865- background: #f7f7f7;
866- border-bottom: 1px solid #d7d7d7;
867- font-size: 105%;
868- margin: 2em 0 .5em;
869-}
870 dl { line-height: 1.3em; margin-left: 1em }
871 dt { background: 3px 4px no-repeat; padding: 0 }
872 dt :link, dt :visited {
873@@ -23,10 +17,13 @@
874 background-position: 3px 4px;
875 display: block;
876 }
877-dt :link:hover, dt :visited:hover { background-color: #eed; color: #000 }
878+dt :link:hover, dt :visited:hover {
879+ background-color: #dfe9f6;
880+ color: #000;
881+}
882 dt em {
883 border-bottom: 1px dotted #bbb;
884- color: #517489;
885+ color: #1d61be;
886 font-style: normal;
887 text-decoration: none;
888 }
889
890=== modified file 'trac-files/common/css/trac.css'
891--- trac-files/common/css/trac.css 2011-10-17 17:00:12 +0000
892+++ trac-files/common/css/trac.css 2011-11-24 10:57:32 +0000
893@@ -2,28 +2,25 @@
894 body {
895 background: #fff;
896 color: #000;
897- margin: 0px; /* Modified */
898+ margin: 0; /* Modified */
899 padding: 0;
900 }
901 body, th, td {
902- font: normal 13px trebuchet ms,verdana,arial,'Bitstream Vera Sans',helvetica,sans-serif; /* Modified */
903-}
904-h1, h2, h3, h4 {
905- font-family: trebuchet ms,arial,verdana,'Bitstream Vera Sans',helvetica,sans-serif; /* Modified */
906- font-weight: normal; /* Modified */
907- letter-spacing: -0.018em;
908- color: #83A501; /* Modified */
909- border-width: 0 0 1px 0; /* Modified */
910- border-style: dotted; /* Modified */
911- border-color: #dddddd; /* Modified */
912-}
913-h1 { font-size: 19px; margin: .15em 1em 0 0 }
914-h2 { font-size: 16px }
915-h3 { font-size: 14px }
916+ font-family: "Helvetica Neue", "Bitstream Vera Sans", "Helvetica", "Arial", sans-serif;
917+}
918 hr { border: none; border-top: 1px solid #ccb; margin: 2em 0 }
919 address { font-style: normal }
920 img { border: none; }
921
922+body { font-size:81.25%; line-height:1.25; }
923+h1, h2, h3 { margin-top:0; margin-bottom:0; }
924+h1 { font-size:1.5em; padding:1.45833em 0; }
925+h2 { font-size:1.33333em; padding:1.25em 0; }
926+h3 { font-size:1.16667em; padding:1.51785em 0; }
927+
928+h1, h2, h3, h4 {
929+ color: #83A501;
930+}
931 .underline { text-decoration: underline }
932 ol.loweralpha { list-style-type: lower-alpha }
933 ol.upperalpha { list-style-type: upper-alpha }
934@@ -31,135 +28,269 @@
935 ol.upperroman { list-style-type: upper-roman }
936 ol.arabic { list-style-type: decimal }
937
938+tt,
939+pre {
940+ /* Workaround too-small monospace text in everything but IE(!). */
941+ font-family: monospace, monospace;
942+}
943+
944 /* Link styles */
945-:link, :visited {
946- text-decoration: none;
947- color: #517489; /* Modified */
948- border-bottom: 0px dotted #bbb;
949+:link {
950+ color: #1d61be;
951+}
952+:visited {
953+ color: #4a1dbe;
954+}
955+:link:active, :visited:active {
956+ color: #14417E;
957 }
958 :link:hover, :visited:hover {
959- background-color: transparent;
960- color: #555;
961+ background-color: transparent;
962+ text-decoration: none;
963 }
964 h1 :link, h1 :visited ,h2 :link, h2 :visited, h3 :link, h3 :visited,
965 h4 :link, h4 :visited, h5 :link, h5 :visited, h6 :link, h6 :visited {
966- color: inherit;
967+ color: inherit;
968 }
969
970 /* Heading anchors */
971 .anchor:link, .anchor:visited {
972- border: none;
973- color: #d7d7d7;
974- font-size: .8em;
975- vertical-align: text-top;
976+ border: none;
977+ color: #d7d7d7;
978+ font-size: 0.8725em;
979+ vertical-align: text-top;
980+ text-decoration: none;
981 }
982 * > .anchor:link, * > .anchor:visited {
983- visibility: hidden;
984+ visibility: hidden;
985 }
986 h1:hover .anchor, h2:hover .anchor, h3:hover .anchor,
987 h4:hover .anchor, h5:hover .anchor, h6:hover .anchor {
988- visibility: visible;
989+ visibility: visible;
990 }
991
992 @media screen {
993- a.ext-link .icon {
994- background: url(../extlink.gif) left center no-repeat;
995- padding-left: 16px;
996- }
997- * html a.ext-link .icon { display: inline-block; }
998+ a.ext-link .icon {
999+ background: url(../extlink.gif) left center no-repeat;
1000+ padding-left: 16px;
1001+ display: inline-block;
1002+ width: 0;
1003+ }
1004+ * html a.ext-link .icon { display: inline-block; }
1005 }
1006
1007 /* Forms */
1008 input, textarea, select { margin: 0px }
1009 input, select { vertical-align: middle }
1010-input[type=button], input[type=submit], input[type=reset] {
1011- background-color: #517489; /* Modified */
1012- color: #ffffff; /* Modified */
1013- border: 1px solid #334a57; /* Modified */
1014- padding: .1em .5em;
1015-}
1016-input[type=button]:hover, input[type=submit]:hover, input[type=reset]:hover {
1017- background: #303030; /* Modified */
1018- border-color: #292929; /* Modified */
1019- color: #ffffff; /* Modified */
1020-}
1021-input[type=button][disabled], input[type=submit][disabled],
1022+
1023+input[type=button],
1024+input[type=submit],
1025+input[type=reset] {
1026+ background: #e0e0e0;
1027+ color: #666;
1028+ border: 1px solid #ccc;
1029+ border-radius: 0.25em;
1030+ padding: 0.3em 0.85em;
1031+ font-size: 0.85em;
1032+ font-weight: bold;
1033+ text-transform: uppercase;
1034+}
1035+input[type=button]::-moz-focus-inner,
1036+input[type=submit]::-moz-focus-inner,
1037+input[type=reset]::-moz-focus-inner {
1038+ border: none;
1039+ padding: none;
1040+}
1041+input[type=button]:hover,
1042+input[type=submit]:hover,
1043+input[type=reset]:hover {
1044+ cursor: pointer;
1045+ color: #444;
1046+ border-color: #999;
1047+ background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15));
1048+ background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15));
1049+ background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15));
1050+ background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.15));
1051+ -moz-box-shadow: 0 2px 1px rgba(0, 0, 0, 0.15);
1052+ -webkit-box-shadow: 0 2px 1px rgba(0, 0, 0, 0.15);
1053+ box-shadow: 0 2px 1px rgba(0, 0, 0, 0.15);
1054+}
1055+input[type=button]:focus,
1056+input[type=submit]:focus,
1057+input[type=reset]:focus {
1058+ outline: 0 none transparent;
1059+ border: 1px solid transparent;
1060+ -moz-box-shadow: 0 0 0 1px #fff inset;
1061+ -webkit-box-shadow: 0 0 0 1px #fff inset;
1062+ box-shadow: 0 0 0 1px #fff inset;
1063+}
1064+input[type=button]:active,
1065+input[type=submit]:active,
1066+input[type=reset]:active {
1067+ background: #e5e5e5;
1068+}
1069+
1070+input[type=text],
1071+input.textwidget,
1072+textarea,
1073+select {
1074+ padding: 0.25em;
1075+}
1076+
1077+input[type=text],
1078+input.textwidget,
1079+textarea {
1080+ border: 1px solid;
1081+ border-color: #bbb #ddd #ddd #bbb;
1082+ color: #000;
1083+}
1084+input[type=text]:focus,
1085+input.textwidget:focus,
1086+textarea:focus {
1087+ border-color: #8bbe1d;
1088+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
1089+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
1090+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
1091+}
1092+input[disabled],
1093+input[type=button][disabled],
1094+input[type=submit][disabled],
1095 input[type=reset][disabled] {
1096- background: #f6f6f6;
1097- border-style: solid;
1098- color: #999;
1099-}
1100-input[type=text], input.textwidget, textarea { border: 1px solid #8caabb; background-color: #d5e1e7; color: #000000; } /* Modified */
1101-input[type=text], input.textwidget { padding: .2em .5em }
1102-input[type=text]:focus, input.textwidget:focus, textarea:focus {
1103- border-color: #517489; /* Modified */
1104-}
1105-option { border-bottom: 1px dotted #d7d7d7 }
1106-fieldset { border: 1px solid #d7d7d7; padding: .5em; margin: 0 }
1107+ background: #f6f6f6;
1108+ border: 1px solid #e0e0e0;
1109+ color: #999;
1110+ -moz-box-shadow: none;
1111+ -webkit-box-shadow: none;
1112+ box-shadow: none;
1113+}
1114+fieldset {
1115+ background: #f6f6f6;
1116+ border: 1px solid;
1117+ border-color: #ddd #aaa #aaa #ddd;
1118+ padding: 0 1em 1em;
1119+ margin: 1em 0;
1120+}
1121 fieldset.iefix { background: transparent; border: none; padding: 0; margin: 0 }
1122 * html fieldset.iefix { width: 98% }
1123 fieldset.iefix p { margin: 0 }
1124-legend { color: #999; padding: 0 .25em; font-size: 90%; font-weight: bold }
1125+legend {
1126+ color: #444;
1127+ padding: 0 .25em;
1128+ font-weight: bold;
1129+ text-transform: uppercase;
1130+}
1131 label.disabled { color: #d7d7d7 }
1132 .buttons { margin: .5em .5em .5em 0 }
1133 .buttons form, .buttons form div { display: inline }
1134 .buttons input { margin: 1em .5em .1em 0 }
1135 .inlinebuttons input {
1136- font-size: 70%;
1137- border-width: 1px;
1138- border-style: dotted;
1139- margin: 0;
1140- padding: 0.1em;
1141- background: none;
1142-}
1143-
1144-input[type=submit] {
1145- background-color: #517489;
1146+ font-size: 0.6875em;
1147+ margin: 0;
1148+ padding: 0.25em;
1149+ background: none;
1150+}
1151+
1152+input[value="Save report" ],
1153+input[value="Add attachment"],
1154+input[name="remove"],
1155+input[name="submit"],
1156+input[name="save"] {
1157+ color: #455508;
1158+ padding: 0.6em 0.85em;
1159+ background-color: #bce715;
1160+ border-color: #a1c612;
1161+}
1162+
1163+input[value="Save report" ]:active,
1164+input[value="Add attachment"]:active,
1165+input[name="remove"]:active,
1166+input[name="submit"]:active,
1167+input[name="save"]:active {
1168+ background: #c7f516;
1169+}
1170+
1171+input[value="Save report" ]:hover,
1172+input[value="Add attachment"]:hover,
1173+input[name="remove"]:hover,
1174+input[name="submit"]:hover,
1175+input[name="save"]:hover {
1176+ color: #222;
1177+ border-color: #6f890c;
1178 }
1179
1180 /* Header */
1181 #header hr { display: none }
1182 #header h1 { margin: 1.5em 0 -1.5em; }
1183-#header img { border: none; margin: 0 0 -3em }
1184+#header img { border: none; }
1185 #header :link, #header :visited, #header :link:hover, #header :visited:hover {
1186 background: transparent;
1187 color: #555;
1188- margin-bottom: 2px;
1189 border: none;
1190 }
1191 #header h1 :link:hover, #header h1 :visited:hover { color: #000 }
1192
1193 /* Quick search */
1194-#search, #topsearch {
1195- clear: both;
1196- font-size: 10px;
1197- height: 2.2em;
1198- margin: 0 71px 1em 0; /* Modified */
1199- text-align: right;
1200-}
1201-
1202-#topsearch input, #topsearch input[type=button], #topsearch input[type=submit], #topsearch input[type=reset], #topsearch input[type=text], #topsearch input.textwidget {
1203- font-size: 10px;
1204- background-color: #333; /* Modified */
1205- color: #ffffff; /* Modified */
1206- border: 1px solid #222; /* Modified */
1207-}
1208-
1209-#topsearch input[type=text] {
1210- background-color: #222; /* Modified */
1211-}
1212-
1213-#search input, #search input[type=button], #search input[type=submit], #search input[type=reset], #search input[type=text], #search input.textwidget {
1214- font-size: 10px;
1215- background-color: #383838; /* Modified */
1216- color: #ffffff; /* Modified */
1217- border: 1px solid #333333; /* Modified */
1218-}
1219-#search, #topsearch label { display: none }
1220+#search {
1221+ float: right;
1222+ padding: 0.75em 0.75em 1.35em;
1223+ margin-right: 1.5em;
1224+}
1225+
1226+#search input[type=button],
1227+#search input[type=submit],
1228+#search input[type=reset],
1229+#search input[type=text],
1230+#search input.textwidget {
1231+ background-color: #222;
1232+ color: #ddd;
1233+ border-color: #666;
1234+}
1235+
1236+#search input[type=button]:hover,
1237+#search input[type=submit]:hover,
1238+#search input[type=reset]:hover {
1239+ color: #fff;
1240+ border-color: #888;
1241+ background-color: #2a2a2a;
1242+ background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(255, 255, 255, 0.06));
1243+ background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(255, 255, 255, 0.1));
1244+ background-image: -ms-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(255, 255, 255, 0.06));
1245+ background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(255, 255, 255, 0.06));
1246+ -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
1247+ -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
1248+ box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
1249+}
1250+
1251+#search input[type=button]:active,
1252+#search input[type=submit]:active,
1253+#search input[type=reset]:active {
1254+ background: #222;
1255+}
1256+
1257+#search input[type=text],
1258+#search input.textwidget {
1259+ border-color: #444 #666 #666 #444;
1260+}
1261+
1262+#search input[type=text]:focus,
1263+#search input.textwidget:focus {
1264+ border-color: #bce715;
1265+ -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
1266+ -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
1267+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
1268+}
1269+
1270+#search label { display: none }
1271
1272 /* Navigation */
1273 .nav h2, .nav hr { display: none }
1274-.nav ul { font-size: 10px; list-style: none; margin: 0; text-align: right }
1275+.nav ul {
1276+ font-size: 0.85em;
1277+ list-style: none;
1278+ margin: 0;
1279+ padding: 0;
1280+ text-align: right;
1281+}
1282 .nav li {
1283 border-right: 0px solid #d7d7d7; /* Modified */
1284 display: inline;
1285@@ -170,41 +301,69 @@
1286
1287 /* Main navigation bar */
1288 #mainnav {
1289- background: #f7f7f7 url(../menu_grad.png) 0 0; /* Modified */
1290- border: 0px solid #000; /* Modified */
1291- font: normal 10px trebuchet ms,verdana,'Bitstream Vera Sans',helvetica,arial,sans-serif; /* Modified */
1292+ background: #555;
1293+ border: none;
1294 margin: 0; /* Modified */
1295- padding: .3em 50px .3em 0; /* Modified */
1296-}
1297-#mainnav li { border-right: none; padding: .25em 0 }
1298+ clear: both;
1299+ position: relative;
1300+ z-index: 1;
1301+}
1302+#mainnav ul {
1303+ border-top: 1px solid #222;
1304+ padding: 0.3em 0;
1305+}
1306+#mainnav li {
1307+ padding: 0.3em 0;
1308+}
1309 #mainnav :link, #mainnav :visited {
1310- background: url(../dots.gif) 0 0 no-repeat;
1311- border-right: 0px solid #fff; /* Modified */
1312- border-bottom: none;
1313- border-left: 0px solid #555; /* Modified */
1314- color: #ffffff; /* Modified */
1315- padding: .3em 20px; /* Modified */
1316+ background: url(../dots.gif) 0 0 no-repeat;
1317+ border: none;
1318+ color: #eee;
1319+ padding: 0.3em 1.6em;
1320 }
1321-* html #mainnav :link, * html #mainnav :visited { background-position: 1px 0 }
1322 #mainnav :link:hover, #mainnav :visited:hover {
1323- background-color: #444444; /* Modified */
1324- border-right: 0px solid #ddd; /* Modified */
1325+ color: #eee;
1326+ background-color: #444;
1327+ z-index: -1;
1328+}
1329+#mainnav .active {
1330+ position: relative;
1331+ top: -1px;
1332+ border: 1px solid #333;
1333+ border-top: none;
1334+ border-bottom: 4px solid #bce715;
1335 }
1336 #mainnav .active :link, #mainnav .active :visited {
1337- background: #444444 0 0 repeat-x; /* Modified */
1338- border-top: none;
1339- border-right: 0px solid #000; /* Modified */
1340- color: #eee;
1341- font-weight: bold;
1342-}
1343-#mainnav .active :link:hover, #mainnav .active :visited:hover {
1344- /*
1345- border-right: 1px solid #000;
1346- */
1347+ background: #444;
1348+ border-bottom: 1px solid transparent;
1349+ color: #eee;
1350+ font-weight: bold;
1351+}
1352+
1353+#main {
1354+ background: #fff url(../bg.png);
1355+ clear: both;
1356+}
1357+
1358+/*
1359+#content.ticket a:link, #content.ticket a:visited,
1360+.attachment a:link, .attachment a:link,
1361+.wiki a:link, .wiki a:visited {
1362+ text-decoration: underline;
1363+}
1364+*/
1365+
1366+#banner a:link, #banner a:visited,
1367+#mainnav a:link, #mainnav a:visited,
1368+#ctxtnav a:link, #ctxtnav a:visited,
1369+.timeline a:link, .timeline a:visited {
1370+ text-decoration: none;
1371 }
1372
1373 /* Context-dependent navigation links */
1374-#ctxtnav { background-image: url(../ctxt_grad.png); height: 30px; padding: 5px 61px 0 0; } /* Modified */
1375+#ctxtnav {
1376+ padding: .5em 0;
1377+}
1378 #ctxtnav li ul {
1379 background: #f7f7f7;
1380 color: #ccc;
1381@@ -252,45 +411,43 @@
1382 /* Footer */
1383 #footer {
1384 clear: both;
1385- color: #bbb;
1386- font-size: 10px;
1387- border-top: 0px solid; /* Modified */
1388- height: 150px; /* Modified */
1389- background-image: url(../footer_grad.png); /* Modified */
1390- padding: 50px 50px 0 50px; /* Modified */
1391+ color: #fff;
1392+ font-size: 0.85em;
1393+ background: #333;
1394+ border-top: 0.5em solid #555;
1395+ padding: 1.5em 3em;
1396 }
1397 #footer :link, #footer :visited { color: #bbb; }
1398 #footer hr { display: none }
1399 #footer #tracpowered { border: 0; float: left }
1400 #footer #tracpowered:hover { background: transparent }
1401-#footer p { margin: 0 }
1402-#footer p.left, p.left2 {
1403- float: left;
1404- margin-left: 1em;
1405- padding: 0 1em;
1406-}
1407-
1408-#footer p.left {
1409- border-left: 1px solid #d7d7d7;
1410- border-right: 1px solid #d7d7d7;
1411-}
1412-
1413-#footer p.left2 {
1414- color: #666;
1415-}
1416-
1417-#footer p.right {
1418- float: right;
1419- text-align: right;
1420-}
1421-
1422-#content { padding:0 50px 0 50px; position: relative }
1423+#footer .credits p {
1424+ margin: 0;
1425+}
1426+
1427+#footer .sitemeter {
1428+ float: right;
1429+}
1430+
1431+#footer .credits {
1432+ line-height: 2;
1433+ float: left;
1434+}
1435+
1436+#footer .right {
1437+ clear: both;
1438+}
1439+
1440+#content {
1441+ padding: 0 4em 4em;
1442+ position: relative;
1443+}
1444
1445 #help {
1446 clear: both;
1447 color: #999;
1448 font-size: 90%;
1449- margin: 1em;
1450+ margin: 1em 0;
1451 text-align: right;
1452 }
1453 #help :link, #help :visited { cursor: help }
1454@@ -298,11 +455,11 @@
1455
1456 /* Page preferences form */
1457 #prefs {
1458- background: #edf9c0;
1459- border: 1px solid #bce715;
1460+ background: #dfe9f6;
1461+ border: 1px solid #1d61be;
1462 float: right;
1463- font-size: 9px;
1464- padding: .8em;
1465+ font-size: 87.25%;
1466+ padding: 1em;
1467 position: relative;
1468 margin: 0 1em 1em;
1469 }
1470@@ -322,17 +479,25 @@
1471 margin: 0 0 0 -1.5em;
1472 padding: 0;
1473 }
1474-#prefs .buttons { text-align: right }
1475+#prefs .buttons {
1476+ margin: 0;
1477+ text-align: right
1478+}
1479
1480 /* Version information (browser, wiki, attachments) */
1481 #info {
1482- margin: 1em 0 0 0;
1483- background: #f7f7f0;
1484- border: 1px solid #d7d7d7;
1485- border-collapse: collapse;
1486- border-spacing: 0;
1487- clear: both;
1488- width: 100%;
1489+ margin: 1em 0 0 0;
1490+ background: #f7f7f0;
1491+ border: 1px solid #83a501;
1492+ border-collapse: collapse;
1493+ border-spacing: 0;
1494+ clear: both;
1495+ position: absolute;
1496+ top: -4em;
1497+ -moz-box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.5);
1498+ -webkit-box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.5);
1499+ box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.5);
1500+ z-index: 100;
1501 }
1502 #info th, #info td { font-size: 85%; padding: 2px .5em; vertical-align: top }
1503 #info th { font-weight: bold; text-align: left; white-space: nowrap }
1504@@ -341,8 +506,9 @@
1505 #info .message p { margin: 0; padding: 0 }
1506
1507 /* Wiki */
1508-.wikipage { padding-left: 18px; margin: 0; } /* Modified */
1509-.wikipage h1, .wikipage h2, .wikipage h3 { margin-left: -18px }
1510+.wikipage {
1511+ margin: 0;
1512+}
1513
1514 a.missing:link, a.missing:visited, span.missing { color: #998 }
1515 a.missing:link, a.missing:visited { background: #fafaf0 }
1516@@ -358,17 +524,15 @@
1517 border-width: 1px 0 1px 0;
1518 border-style: solid;
1519 border-color: #bce715;
1520- margin: 30px;
1521- padding: 10px;
1522+ margin: 2em;
1523+ padding: 1em;
1524 overflow: auto;
1525 }
1526
1527 blockquote.citation {
1528- margin: -0.6em 0;
1529- border-style: solid;
1530- border-width: 0 0 0 2px;
1531- padding-left: .5em;
1532- border-color: #b44;
1533+ margin: -0.6em 0;
1534+ border-left: 2px solid #1d61be;
1535+ padding-left: 1.4em;
1536 }
1537 .citation blockquote.citation { border-color: #4b4; }
1538 .citation .citation blockquote.citation { border-color: #44b; }
1539@@ -382,41 +546,50 @@
1540 table.wiki td { border: 1px solid #ccc; padding: .1em .25em; }
1541
1542 .wikitoolbar {
1543- border: solid #d7d7d7;
1544- border-width: 1px 1px 1px 0;
1545- height: 18px;
1546- width: 208px;
1547-}
1548-.wikitoolbar :link, .wikitoolbar :visited {
1549- background: transparent url(../edit_toolbar.png) no-repeat;
1550- border: 1px solid #fff;
1551- border-left-color: #d7d7d7;
1552- cursor: default;
1553- display: block;
1554- float: left;
1555- width: 24px;
1556- height: 16px;
1557-}
1558-.wikitoolbar :link:hover, .wikitoolbar :visited:hover {
1559- background-color: transparent;
1560- border: 1px solid #fb2;
1561-}
1562-.wikitoolbar a#em { background-position: 0 0 }
1563-.wikitoolbar a#strong { background-position: 0 -16px }
1564-.wikitoolbar a#heading { background-position: 0 -32px }
1565-.wikitoolbar a#link { background-position: 0 -48px }
1566-.wikitoolbar a#code { background-position: 0 -64px }
1567-.wikitoolbar a#hr { background-position: 0 -80px }
1568-.wikitoolbar a#np { background-position: 0 -96px }
1569-.wikitoolbar a#br { background-position: 0 -112px }
1570+ height: 18px;
1571+ padding: 0.5em 0;
1572+}
1573+#main .wikitoolbar :link, #main .wikitoolbar :visited {
1574+ background: transparent url(../edit_toolbar.png) no-repeat;
1575+ border: 1px solid #bbb;
1576+ border-radius: 0.15em;
1577+ display: block;
1578+ float: left;
1579+ width: 24px;
1580+ height: 16px;
1581+ margin: 0 0.25em 0 0;
1582+}
1583+#main .wikitoolbar :link:hover, #main .wikitoolbar :visited:hover {
1584+ background-color: transparent;
1585+ border-color: #1d61be;
1586+}
1587+#main .wikitoolbar a#em { background-position: 0 0 }
1588+#main .wikitoolbar a#strong { background-position: 0 -16px }
1589+#main .wikitoolbar a#heading { background-position: 0 -32px }
1590+#main .wikitoolbar a#link { background-position: 0 -48px }
1591+#main .wikitoolbar a#code { background-position: 0 -64px }
1592+#main .wikitoolbar a#hr { background-position: 0 -80px }
1593+#main .wikitoolbar a#np { background-position: 0 -96px }
1594+#main .wikitoolbar a#br { background-position: 0 -112px }
1595
1596 /* Styles for the form for adding attachments. */
1597+#attachment {
1598+ background: #fff;
1599+ border-radius: 0.35em;
1600+ padding: .5em 1em;
1601+ border: 1px solid #d0d0d0;
1602+ border-bottom: 2px solid #83a501;
1603+ margin-bottom: 1.5em;
1604+ -moz-box-shadow: 0 0.15em 0.25em rgba(0, 0, 0, 0.15);
1605+ -webkit-box-shadow: 0 0.15em 0.25em rgba(0, 0, 0, 0.15);
1606+ box-shadow: 0 0.15em 0.25em rgba(0, 0, 0, 0.15);
1607+}
1608 #attachment .field { margin-top: 1.3em }
1609 #attachment label { padding-left: .2em }
1610 #attachment fieldset { margin-top: 2em }
1611 #attachment fieldset .field { float: left; margin: 0 1em .5em 0 }
1612 #attachment .options { float: left; padding: 0 0 1em 1em }
1613-#attachment br { clear: left }
1614+#attachment br { display: block; clear: left }
1615 .attachment #preview { margin-top: 1em }
1616
1617 /* Styles for the list of attachments. */
1618@@ -429,27 +602,35 @@
1619 /* Styles for tabular listings such as those used for displaying directory
1620 contents and report results. */
1621 table.listing {
1622- clear: both;
1623- border-bottom: 1px solid #d7d7d7;
1624- border-collapse: collapse;
1625- border-spacing: 0;
1626- margin-top: 1em;
1627- width: 100%;
1628-}
1629-table.listing th { text-align: left; padding: 0 1em .1em 0; font-size: 12px }
1630-table.listing thead { background: #f7f7f0 }
1631+ clear: both;
1632+ border-spacing: 0;
1633+ border: 1px solid #ddd;
1634+ margin-top: 1em;
1635+ padding: 0.5em;
1636+ width: 100%;
1637+ background: #fff;
1638+ -moz-box-shadow: 0 0.25em 0.15em rgba(0, 0, 0, 0.15);
1639+ -webkit-box-shadow: 0 0.25em 0.15em rgba(0, 0, 0, 0.15);
1640+ box-shadow: 0 0.25em 0.15em rgba(0, 0, 0, 0.15);
1641+}
1642+table.listing th {
1643+ text-align: left;
1644+ padding: 0;
1645+}
1646 table.listing thead th {
1647- border: 1px solid #d7d7d7;
1648- border-bottom-color: #999;
1649- font-size: 11px;
1650- font-weight: bold;
1651- padding: 2px .5em;
1652- vertical-align: bottom;
1653-}
1654-table.listing thead th :link:hover, table.listing thead th :visited:hover {
1655- background-color: transparent;
1656-}
1657-table.listing thead th a { border: none; padding-right: 12px }
1658+ border: none;
1659+ border-bottom: 2px solid #164b93;
1660+ padding: 0.8em 1em;
1661+}
1662+table.listing thead th :link:hover,
1663+table.listing thead th :visited:hover {
1664+ background-color: transparent;
1665+}
1666+table.listing thead th a {
1667+ display: block;
1668+ margin: -0.8em -1em;
1669+ padding: 0.8em 1em;
1670+}
1671 table.listing th.asc a, table.listing th.desc a { font-weight: bold }
1672 table.listing th.asc a, table.listing th.desc a {
1673 background-position: 100% 50%;
1674@@ -458,30 +639,45 @@
1675 table.listing th.asc a { background-image: url(../asc.png) }
1676 table.listing th.desc a { background-image: url(../desc.png) }
1677 table.listing tbody td, table.listing tbody th {
1678- border: 1px dotted #ddd;
1679- padding: .33em .5em;
1680- vertical-align: top;
1681-}
1682+ padding: 0;
1683+ vertical-align: middle;
1684+ padding: 0.6em 1em;
1685+}
1686+table.listing tbody td a {
1687+ margin: -0.6em -1em;
1688+ padding: 0.6em 1em;
1689+ display: block;
1690+}
1691+
1692+table.listing tbody td {
1693+ border-bottom: 1px solid #ccc;
1694+}
1695+
1696 table.listing tbody td a:hover, table.listing tbody th a:hover {
1697 background-color: transparent;
1698 }
1699-table.listing tbody tr { border-top: 1px solid #ddd }
1700 table.listing tbody tr.even { background-color: #fcfcfc }
1701 table.listing tbody tr.odd { background-color: #f7f7f7 }
1702-table.listing tbody tr:hover { background: #eed !important }
1703+table.listing tbody tr:hover { background: #dfe9f6 !important }
1704
1705 /* Styles for the error page (and rst errors) */
1706 #content.error .message, div.system-message {
1707- background: #fdc;
1708- border: 2px solid #d00;
1709- color: #500;
1710- padding: .5em;
1711- margin: 1em 0;
1712+ background: #fdc;
1713+ border: 2px solid #d00;
1714+ color: #500;
1715+ padding: .5em;
1716 }
1717 #content.error pre, div.system-message pre { margin-left: 1em; overflow: auto }
1718 div.system-message p { margin: 0; }
1719 div.system-message p.system-message-title { font-weight: bold; }
1720
1721+#warning.system-message {
1722+ position: absolute;
1723+ top: 0;
1724+ left: 0;
1725+ z-index: 100;
1726+}
1727+
1728 /* Styles for search word highlighting */
1729 @media screen {
1730 .searchword0 { background: #ff9 }
1731@@ -500,114 +696,245 @@
1732
1733 /* Custom */
1734 #top_grad {
1735- background-image: url(../top_grad.png);
1736- height: 26px;
1737+ background: #bce715;
1738+ height: 0.35em;
1739 }
1740 #tab {
1741- height: 32px;
1742- width: 282px;
1743- color: #ffffff;
1744- text-align: center;
1745- margin: -2px 49px 0 0;
1746- background-image: url(../tab.png);
1747- background-repeat: no-repeat;
1748- float: right;
1749+ color: #ffffff;
1750+ text-align: center;
1751+ background: #bce715;
1752+ background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
1753+ background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
1754+ background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
1755+ background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
1756+ background-image: linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
1757+ float: right;
1758+ border: 0 solid #d1fd26;
1759+ border-width: 0 0 1px 1px;
1760+ border-radius: 0 0 0 0.35em;
1761+ padding: 1em;
1762+ font-weight: bold;
1763 }
1764
1765 #tab :link, #tab :visited {
1766- background: transparent;
1767- color: #ffffff;
1768- font-size: 12px;
1769- border: none;
1770- padding: 4px;
1771-
1772+ color: #444;
1773+ padding: 1em;
1774+ text-shadow: 0 1px #d1fd26;
1775 }
1776 #tab :link:hover, #tab :visited:hover {
1777- border-width: 0 0 1px 0;
1778- border-style: solid;
1779- border-color: #a4cd0d;
1780+ text-shadow: none;
1781+ border-bottom: 0.5em solid #fff;
1782+ border-radius: 0 0.35em 0 0.35em;
1783+ background: white;
1784+ -moz-box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.5);
1785+ -webkit-box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.5);
1786+ box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.5);
1787 }
1788
1789 #banner {
1790- background-image: url(../main_grad.png);
1791- height: 135px;
1792+ background: #444;
1793+ background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
1794+ background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
1795+ background-image: -ms-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
1796+ background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
1797+ float: left;
1798+ width: 100%;
1799 }
1800
1801 #header {
1802- margin: 20px 0 0 49px;
1803+ float: left;
1804+ padding: 1em;
1805 }
1806
1807 #metanav {
1808- margin-right: 61px;
1809+ padding: 0.75em;
1810+ margin-top: 0.35em;
1811+ float: right;
1812 }
1813
1814 #metanav :link, #metanav :visited {
1815- color: #ffffff;
1816-
1817+ color: #fff;
1818 }
1819
1820 #metanav :link:hover, #metanav :visited:hover {
1821- color: #bbbbbb;
1822+ color: #bbb;
1823+ border-bottom: 1px dotted #bbb;
1824 }
1825
1826 #metanav ul li.first {
1827- color: #ccc;
1828+ color: #ccc;
1829 }
1830
1831 #side_bar {
1832 float: right;
1833-// width: 350px;
1834 background-color: #ffffff;
1835 padding: 0 0 0 15px;
1836 }
1837
1838-#download_top {
1839- height: 145px;
1840- width: 273px;
1841- background-image: url(../dld_top.png);
1842-}
1843-
1844-#download_bottom {
1845- height: 91px;
1846- width: 273px;
1847- background-image: url(../dld_bottom.png);
1848+#download_icon {
1849+ position: absolute;
1850+ right: -20px;
1851+ top: -35px;
1852+ z-index: 99;
1853 }
1854
1855 #download {
1856-// height: 145px;
1857- width: 243px;
1858- background-image: url(../dld_back.png);
1859- background-repeat: repeat-y;
1860- padding: 0 10px 0 20px;
1861-}
1862-
1863-
1864-#download_old {
1865- height: 284px;
1866- width: 269px;
1867-// float: right;
1868- margin: 0;
1869- padding: 0 0 0 19px;
1870- background-image: url(../download.png);
1871- background-repeat: no-repeat;
1872-}
1873-
1874-#donate {
1875- height: 284px;
1876- width: 269px;
1877-// float: right;
1878- margin: 0;
1879- padding: 0 0 0 19px;
1880-}
1881-
1882-#download :link, #download :visited, #download :link:hover, #download :visited:hover {
1883- background: transparent;
1884- color: #9ac300;
1885- font-size: 12px;
1886- border: none;
1887-}
1888-
1889-.download-left {
1890- position: relative;
1891- left: -30px;
1892+ background: #555;
1893+ background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
1894+ background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
1895+ background-image: -ms-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
1896+ background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, .3));
1897+ border-bottom: 2px solid #bce715;
1898+ border-radius: 0.35em;
1899+ padding: 2em;
1900+ position: relative;
1901+ -moz-box-shadow: 0 0 0.5em rgba(0, 0, 0, .65);
1902+ -webkit-box-shadow: 0 0 0.5em rgba(0, 0, 0, .65);
1903+ box-shadow: 0 0 0.5em rgba(0, 0, 0, .65);
1904+ margin-bottom: 3em;
1905+ margin-right: -3em;
1906+}
1907+
1908+#download > p {
1909+ margin: 0;
1910+}
1911+
1912+#download h1, #download h2 {
1913+ color: #eee;
1914+ text-shadow: 0 1px #222;
1915+}
1916+
1917+#download h1 {
1918+ padding-top: 0;
1919+}
1920+
1921+#download h2 {
1922+ color: #bbb;
1923+ padding: 0;
1924+}
1925+
1926+#download ul {
1927+ list-style: none;
1928+ margin: 0.5em 0;
1929+ padding: 0;
1930+}
1931+
1932+#download a:link, #download a:visited {
1933+ display: block;
1934+ padding: 0.25em 1em;
1935+ margin: 0 -.5em;
1936+ background: transparent;
1937+ color: #bce715;
1938+ border: none;
1939+ text-decoration: none;
1940+}
1941+
1942+#download a:hover {
1943+ background: #bce715;
1944+ color: #444;
1945+}
1946+
1947+#download a.anchor {
1948+ display: none;
1949+}
1950+
1951+pre.prettyprint {
1952+ border: none !important;
1953+ padding: 0 !important;
1954+}
1955+
1956+.column-layout {
1957+ width: 100%;
1958+ margin: 0 -4em;
1959+}
1960+
1961+.leftcol {
1962+ width: 15%;
1963+}
1964+
1965+/* IE7 hacks. */
1966+.leftcol {
1967+ *display: block;
1968+ *float: left;
1969+}
1970+
1971+.leftcolcol {
1972+ padding: 1.5em;
1973+ border-width: 0 1px 1px 0;
1974+ margin-top: -1.25em;
1975+ margin-right: 2em;
1976+ border-radius: 0 0 0.35em 0;
1977+}
1978+
1979+.centercol {
1980+ padding: 0 2em;
1981+}
1982+
1983+/* IE7 hacks. */
1984+.centercol {
1985+ *display: block;
1986+ *float: left;
1987+}
1988+
1989+#main .twisted-sponsors a:link {
1990+ display: block;
1991+ border: none;
1992+ text-align: center;
1993+ padding: 0.5em 0;
1994+}
1995+
1996+#main .twisted-sponsors a.anchor:link {
1997+ display: inline;
1998+}
1999+
2000+.side-panel {
2001+ background: #eee;
2002+ border: 1px solid #d0d0d0;
2003+ border-radius: 0.35em;
2004+ -moz-box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.075);
2005+ -webkit-box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.075);
2006+ box-shadow: 0 0 0.5em rgba(0, 0, 0, 0.075);
2007+ padding: 2em;
2008+ position: relative;
2009+ margin-right: -3em;
2010+}
2011+.side-panel h2 {
2012+ padding-top: 0;
2013+ color: #1d61be;
2014+ text-shadow: 0 1px #fff;
2015+}
2016+
2017+.twisted-news {
2018+ margin-bottom: 3em;
2019+}
2020+.twisted-news > p {
2021+ margin: 0;
2022+}
2023+.twisted-news .feed-updated {
2024+ font-size: 0.75em;
2025+ text-align: right;
2026+}
2027+.twisted-news .feed-entry {
2028+ padding: 0.5em;
2029+ margin: 0 -0.5em;
2030+}
2031+.twisted-news .feed-entry:nth-child(2n) {
2032+ background: rgba(0, 0, 0, 0.05);
2033+}
2034+
2035+.donations p {
2036+ margin-top: 0;
2037+}
2038+.donation-buttons {
2039+ width: 210px;
2040+ text-align: center;
2041+}
2042+
2043+.wikipage div.code pre {
2044+ background: transparent;
2045+}
2046+
2047+.throbber {
2048+ display: block;
2049+ margin: auto;
2050 }
2051
2052=== removed file 'trac-files/common/ctxt_grad.png'
2053Binary 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
2054=== removed file 'trac-files/common/dld_back.png'
2055Binary 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
2056=== removed file 'trac-files/common/dld_bottom.png'
2057Binary 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
2058=== removed file 'trac-files/common/dld_top.png'
2059Binary 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
2060=== added file 'trac-files/common/download_icon.png'
2061Binary 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
2062=== removed file 'trac-files/common/footer_back.png'
2063Binary 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
2064=== removed file 'trac-files/common/footer_grad.png'
2065Binary 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
2066=== added file 'trac-files/common/js/news.js'
2067--- trac-files/common/js/news.js 1970-01-01 00:00:00 +0000
2068+++ trac-files/common/js/news.js 2011-11-24 10:57:32 +0000
2069@@ -0,0 +1,92 @@
2070+/**
2071+ * Create a DOM node factory for the given document object.
2072+ *
2073+ * @rtype: C{function} that takes C{String}, C{object} mapping C{String}
2074+ * to C{String}, C{Array} of C{String} or DOM nodes
2075+ * @return: A factory taking 3 arguments: C{tagName}, C{attrs} and
2076+ * C{children}
2077+ */
2078+function DOMBuilder(doc) {
2079+ return function _nodeFactory(tagName, attrs, children) {
2080+ var node = doc.createElement(tagName);
2081+ if (attrs !== undefined) {
2082+ for (var key in attrs) {
2083+ node.setAttribute(key, attrs[key]);
2084+ }
2085+ }
2086+
2087+ if (children !== undefined) {
2088+ for (var i = 0; i < children.length; ++i) {
2089+ var child = children[i];
2090+ if (typeof child === 'string') {
2091+ child = doc.createTextNode(child);
2092+ }
2093+ node.appendChild(child);
2094+ }
2095+ }
2096+
2097+ return node;
2098+ };
2099+}
2100+
2101+
2102+/**
2103+ * Format a C{Date} instance as I{YYYY-mm-dd}.
2104+ */
2105+function formatDate(d) {
2106+ var year = d.getFullYear();
2107+ var month = d.getMonth() + 1;
2108+ var day = d.getDate();
2109+ return [
2110+ year, '-',
2111+ (month < 10 ? '0' : '') + month, '-',
2112+ (day < 10 ? '0' : '') + day].join('');
2113+}
2114+
2115+
2116+/**
2117+ * Remove all the children of a node.
2118+ */
2119+function removeNodeContent(node) {
2120+ while (node.lastChild) {
2121+ node.removeChild(node.lastChild);
2122+ }
2123+}
2124+
2125+
2126+/**
2127+ * Load news feed items, from the Twisted Matrix Labs blog, and insert them
2128+ * into the "twisted-news" element, if it exists.
2129+ */
2130+function loadNewsFeeds() {
2131+ var container = document.getElementById('twisted-news');
2132+ // Bail out if there is no news element.
2133+ if (!container) {
2134+ return;
2135+ }
2136+
2137+ var feed = new google.feeds.Feed(
2138+ 'http://feeds.feedburner.com/TwistedMatrixLaboratories');
2139+ feed.setNumEntries(5);
2140+ feed.load(function(result) {
2141+ if (!result.error) {
2142+ removeNodeContent(container);
2143+ var D = DOMBuilder(container.ownerDocument);
2144+ for (var i = 0; i < result.feed.entries.length; i++) {
2145+ var entry = result.feed.entries[i];
2146+ var prettyDate = formatDate(new Date(entry.publishedDate));
2147+ var entryNode = D('div', {'class': 'feed-entry'}, [
2148+ D('a', {'href': entry.link}, [entry.title]),
2149+ D('div', {'class': 'feed-updated'}, [
2150+ 'by ',
2151+ D('strong', {}, [entry.author]),
2152+ ' on ',
2153+ D('strong', {}, [prettyDate])])
2154+ ]);
2155+ container.appendChild(entryNode);
2156+ }
2157+ }
2158+ });
2159+}
2160+google.load('feeds', '1');
2161+google.setOnLoadCallback(loadNewsFeeds);
2162
2163=== removed file 'trac-files/common/main_grad.png'
2164Binary 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
2165=== removed file 'trac-files/common/menu_grad.png'
2166Binary 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
2167=== added file 'trac-files/common/source_download_icon.psd'
2168Binary 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
2169=== added file 'trac-files/common/source_trac_banner.psd'
2170Binary 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
2171=== removed file 'trac-files/common/tab.png'
2172Binary 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
2173=== added file 'trac-files/common/throbber.gif'
2174Binary 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
2175=== removed file 'trac-files/common/top_grad.png'
2176Binary 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
2177=== removed file 'trac-files/common/trac_banner-old.png'
2178Binary 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
2179=== modified file 'trac-files/common/trac_banner.png'
2180Binary 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
2181=== removed file 'trac-files/templates/README'
2182--- trac-files/templates/README 2011-10-17 17:00:12 +0000
2183+++ trac-files/templates/README 1970-01-01 00:00:00 +0000
2184@@ -1,8 +0,0 @@
2185-This directory contains Trac's default Genshi templates.
2186-
2187-It also still contains the base Clearsilver templates for
2188-compatibility with pre-0.11 plugins.
2189-
2190-Local modifications to these files might be lost during the installation of
2191-a new Trac version. This can be avoided by making a copy of this entire
2192-directory before beginning modifications.
2193
2194=== removed file 'trac-files/templates/about.html'
2195--- trac-files/templates/about.html 2011-10-17 17:00:12 +0000
2196+++ trac-files/templates/about.html 1970-01-01 00:00:00 +0000
2197@@ -1,89 +0,0 @@
2198-<!DOCTYPE html
2199- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2200- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2201-<html xmlns="http://www.w3.org/1999/xhtml"
2202- xmlns:py="http://genshi.edgewall.org/"
2203- xmlns:xi="http://www.w3.org/2001/XInclude">
2204- <xi:include href="layout.html" />
2205- <head>
2206- <title>About Trac</title>
2207- <link rel="stylesheet" type="text/css" href="${chrome.htdocs_location}css/about.css" />
2208- <script type="text/javascript">
2209- //<![CDATA[
2210- jQuery(document).ready(function ($) {
2211- $("#systeminfo table").append("<tr><th>jQuery:</th><td>"+$().jquery+"</td></tr>");
2212- });
2213- //]]>
2214- </script>
2215- </head>
2216-
2217- <body>
2218- <div id="content" class="about">
2219-
2220- <a href="http://trac.edgewall.org/"
2221- style="border: none; float: right; margin-left: 2em">
2222- <img style="display: block" src="${chrome.htdocs_location}trac_banner.png"
2223- alt="Trac: Integrated SCM &amp; Project Management"/>
2224- </a>
2225- <h1>About Trac</h1>
2226- <p>Trac is a web-based software project management and bug/issue
2227- tracking system emphasizing ease of use and low ceremony.
2228- It provides an integrated Wiki, an interface to version control
2229- systems, and a number of convenient ways to stay on top of events
2230- and changes within a project.
2231- </p>
2232- <p>Trac is distributed under the modified BSD License.<br />
2233- The complete text of the license can be found
2234- <a href="http://trac.edgewall.org/wiki/TracLicense">online</a>
2235- as well as in the <tt>COPYING</tt> file included in the distribution.</p>
2236- <a href="http://www.python.org/" style="border: none; float: right">
2237- <img style="display: block" src="${chrome.htdocs_location}python.png"
2238- alt="python powered" width="140" height="56" />
2239- </a>
2240- <p>Please visit the Trac open source project:
2241- <a href="http://trac.edgewall.org/">http://trac.edgewall.org/</a></p>
2242- <p class="copyright" xml:lang="en">Copyright &copy; 2003-2009
2243- <a href="http://www.edgewall.org/">Edgewall Software</a>
2244- </p>
2245-
2246- <py:if test="systeminfo or config">
2247- <hr />
2248-
2249- <div py:if="systeminfo" id="systeminfo">
2250- <h2>System Information</h2>
2251- <table class="listing">
2252- <tr py:for="name, value in systeminfo">
2253- <th>$name:</th>
2254- <td>$value</td>
2255- </tr>
2256- </table>
2257- </div>
2258-
2259- <div py:if="config" id="config">
2260- <h2>Configuration</h2>
2261- <table class="listing">
2262- <thead>
2263- <tr>
2264- <th class="section">Section</th>
2265- <th class="name">Name</th>
2266- <th class="value">Value</th>
2267- </tr>
2268- </thead>
2269- <tbody>
2270- <div py:for="section in config" py:strip="">
2271- <tr py:for="idx,option in enumerate(section.options)"
2272- class="${option.modified and 'modified' or None}">
2273- <th py:if="idx == 0" class="section"
2274- rowspan="${len(section.options)}">${section.name}</th>
2275- <td class="name">${option.name}</td>
2276- <td class="value">${option.value}</td>
2277- </tr>
2278- </div>
2279- </tbody>
2280- </table>
2281- </div>
2282- </py:if>
2283-
2284- </div>
2285- </body>
2286-</html>
2287
2288=== removed file 'trac-files/templates/attachment.html'
2289--- trac-files/templates/attachment.html 2011-10-17 17:00:12 +0000
2290+++ trac-files/templates/attachment.html 1970-01-01 00:00:00 +0000
2291@@ -1,118 +0,0 @@
2292-<!DOCTYPE html
2293- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2294- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2295-<html xmlns="http://www.w3.org/1999/xhtml"
2296- xmlns:py="http://genshi.edgewall.org/"
2297- xmlns:xi="http://www.w3.org/2001/XInclude">
2298- <xi:include href="layout.html" />
2299- <xi:include href="macros.html" />
2300- <head>
2301- <title>Attachment</title>
2302- </head>
2303-
2304- <body py:with="parent = attachments and attachments.parent or
2305- attachment.resource.parent">
2306- <div py:choose="mode" id="content" class="attachment">
2307- <py:when test="'new'">
2308- <h1>Add Attachment to <a href="${url_of(parent)}">${name_of(parent)}</a></h1>
2309- <p>Adding a patch that changes code? Make sure it includes unit tests!
2310- <a href="/trac/wiki/ReviewProcess">See the
2311- complete acceptance criteria</a>. Thanks!
2312- </p>
2313- <form id="attachment" method="post" enctype="multipart/form-data" action="">
2314- <div class="field">
2315- <label>File<py:if test="max_size >= 0"> (size limit
2316- ${pretty_size(max_size, format='%d')})</py:if>:<br />
2317- <input type="file" name="attachment" /></label>
2318- </div>
2319- <fieldset>
2320- <legend>Attachment Info</legend>
2321- <py:if test="authname == 'anonymous'">
2322- <div class="field">
2323- <label>Your email or username:<br />
2324- <input type="text" name="author" size="30" value="$author" />
2325- </label>
2326- </div>
2327- </py:if>
2328- <div class="field">
2329- <label>Description of the file (optional):<br />
2330- <input type="text" name="description" size="60" /></label>
2331- </div>
2332- <br />
2333- <py:if test="0 and authname and authname != 'anonymous'">
2334- <div class="options">
2335- <label><input type="checkbox" name="replace" />
2336- Replace existing attachment of the same name</label>
2337- </div>
2338- <br />
2339- </py:if>
2340- </fieldset>
2341- <div class="buttons">
2342- <input type="hidden" name="action" value="new" />
2343- <input type="hidden" name="realm" value="$parent.realm" />
2344- <input type="hidden" name="id" value="$parent.id" />
2345- <input type="submit" value="Add attachment" />
2346- <input type="submit" name="cancel" value="Cancel" />
2347- </div>
2348- </form>
2349- </py:when>
2350-
2351- <py:when test="'delete'">
2352- <h1><a href="${url_of(parent)}">${name_of(parent)}</a>: $attachment.filename</h1>
2353- <p><strong>Are you sure you want to delete this attachment?</strong><br />
2354- This is an irreversible operation.</p>
2355- <div class="buttons">
2356- <form method="post" action="">
2357- <div id="delete">
2358- <input type="hidden" name="action" value="delete" />
2359- <input type="submit" name="cancel" value="Cancel" />
2360- <input type="submit" value="Delete attachment" />
2361- </div>
2362- </form>
2363- </div>
2364- </py:when>
2365-
2366- <py:when test="'list'">
2367- <h1><a href="${url_of(parent)}">${name_of(parent)}</a></h1>
2368- <py:with vars="context = context(parent)">
2369- ${list_of_attachments(attachments, add_button_title=_("Attach another file"))}
2370- </py:with>
2371- </py:when>
2372-
2373- <py:otherwise> <!--! 'render' mode -->
2374- <h1><a href="${url_of(parent)}">${name_of(parent)}</a>: $attachment.filename</h1>
2375- <table id="info" summary="Description">
2376- <tbody>
2377- <tr>
2378- <th scope="col">
2379- File $attachment.filename, ${sizeinfo(attachment.size)}
2380- (added by ${authorinfo(attachment.author)}, ${dateinfo(attachment.date)} ago)
2381- </th>
2382- </tr>
2383- <tr>
2384- <td class="message searchable" xml:space="preserve">
2385- ${wiki_to_html(context(parent), attachment.description)}
2386- </td>
2387- </tr>
2388- </tbody>
2389- </table>
2390-
2391- <div py:if="preview" id="preview" class="searchable">
2392- ${preview_file(preview)}
2393- </div>
2394-
2395- <py:if test="attachment and 'ATTACHMENT_DELETE' in perm(attachment.resource)">
2396- <div class="buttons">
2397- <form method="get" action="">
2398- <div id="delete">
2399- <input type="hidden" name="action" value="delete" />
2400- <input type="submit" value="${_('Delete attachment')}" />
2401- </div>
2402- </form>
2403- </div>
2404- </py:if>
2405- </py:otherwise>
2406-
2407- </div>
2408- </body>
2409-</html>
2410
2411=== removed file 'trac-files/templates/diff_div.html'
2412--- trac-files/templates/diff_div.html 2011-10-17 17:00:12 +0000
2413+++ trac-files/templates/diff_div.html 1970-01-01 00:00:00 +0000
2414@@ -1,227 +0,0 @@
2415-<!--!
2416- changes - a list of diff items, each being a dict containing informations about
2417- changes for one file:
2418- .href - link for the title (optional)
2419- .title - tooltip for the title link (optional)
2420- .comments - annotation for the change (optional)
2421- .new and .old - information about the files being diffed
2422- .path - path of the file
2423- .rev - rev of the file (for 'sidebyside')
2424- .shortrev - abbreviated form of rev of the file (for 'inline')
2425- .href - link to the full file (optional)
2426- .props - a list of property changes
2427- .name - name of the property
2428- .diff - rendered difference
2429- .old - old value of the property
2430- .new - new value for the property
2431- (both .old and .new have .name, .value and .rendered properties)
2432- .diffs - a sequence of diff blocks, each block being a dict:
2433- .type - one of 'unmod', 'add', 'rem' or 'mod'
2434- .base and .changed - informations about lines from old and new content
2435- .lines - the lines
2436- .offset - position within the file
2437-
2438- diff - dict specifying diff style and options
2439- .style - can be 'sidebyside' (4 columns) or 'inline' (3 columns)
2440- .options - contexlines, various ignore...
2441-
2442- longcol - "long" column header; e.g. 'Revision' or 'File' or '' (for 'sidebyside')
2443- shortcol - "short" column header: e.g. 'r' or '' (for 'inline')
2444- no_id - skip generation of id attributes in h2 headings
2445-
2446--->
2447-<div xmlns="http://www.w3.org/1999/xhtml"
2448- xmlns:py="http://genshi.edgewall.org/"
2449- xmlns:xi="http://www.w3.org/2001/XInclude"
2450- class="diff">
2451-
2452- <ul py:if="any([item.diffs or item.props for item in changes])" class="entries">
2453- <py:for each="idx, item in enumerate(changes)">
2454- <li py:if="item.diffs or item.props" class="entry" py:with="comments = item.get('comments')">
2455- <h2 id="${not no_id and 'file%s' % idx or None}" py:choose="">
2456- <a py:when="item.new.path" title="${item.get('title', item.new.get('title'))}"
2457- href="${item.get('href', item.new.get('href'))}">$item.new.path</a>
2458- <py:otherwise>&nbsp;</py:otherwise>
2459- </h2>
2460- <pre py:if="comments">$comments</pre>
2461- <ul py:if="item.props" class="props">
2462- <py:for each="prop in item.props" py:choose="">
2463- <py:when test="prop.diff">$prop.diff</py:when>
2464- <py:with vars="one = prop.old or prop.new;
2465- both = prop.old and prop.new;
2466- action = both and 'changed from ' or not prop.old and 'set' or 'deleted'">
2467- <li py:when="one">
2468- Property <strong py:attrs="one.rendered and one.rendered.name_attributes">
2469- ${one.rendered and one.rendered.name or prop.name}</strong> $action
2470- <py:def function="render_property(prop)">
2471- <py:choose>
2472- <py:when test="prop.rendered">$prop.rendered.content</py:when>
2473- <em py:when="istext(prop.value)"><tt>$prop.value</tt></em>
2474- <py:otherwise>$prop.value</py:otherwise>
2475- </py:choose>
2476- </py:def>
2477- <py:if test="prop.old and prop.new">${render_property(prop.old)}</py:if>
2478- <py:if test="prop.new"> to ${render_property(prop.new)}</py:if>
2479- </li>
2480- </py:with>
2481- </py:for>
2482- </ul>
2483- <table py:if="item.diffs" class="$diff.style" summary="Differences" cellspacing="0"
2484- py:with="fromline = item.diffs[0][0].base.offset+1;
2485- toline = item.diffs[0][0].changed.offset+1">
2486- <py:choose test="diff.style">
2487- <py:when test="'sidebyside'">
2488- <colgroup class="l"><col class="lineno" /><col class="content" /></colgroup>
2489- <colgroup class="r"><col class="lineno" /><col class="content" /></colgroup>
2490- <thead>
2491- <tr>
2492- <th colspan="2">
2493- <a title="${item.old.get('title')}" href="${item.old.get('href')}#L$fromline"
2494- py:strip="'href' not in item.old">$longcol $item.old.rev</a>
2495- </th>
2496- <th colspan="2">
2497- <a title="${item.new.get('title')}" href="${item.new.get('href')}#L$toline"
2498- py:strip="'href' not in item.new">$longcol $item.new.rev</a>
2499- </th>
2500- </tr>
2501- </thead>
2502- </py:when>
2503- <py:when test="'inline'">
2504- <colgroup><col class="lineno" /><col class="lineno" /><col class="content" /></colgroup>
2505- <thead>
2506- <tr>
2507- <th title="$longcol $item.old.rev">
2508- <a title="${item.old.get('title')}" href="${item.old.get('href')}#L$fromline"
2509- py:strip="'href' not in item.old">
2510- $shortcol$item.old.shortrev</a>
2511- </th>
2512- <th title="$longcol $item.new.rev">
2513- <a title="${item.new.get('title')}" href="${item.new.get('href')}#L$toline"
2514- py:strip="'href' not in item.new">
2515- $shortcol$item.new.shortrev</a>
2516- </th>
2517- <th>&nbsp;</th>
2518- </tr>
2519- </thead>
2520- </py:when>
2521- </py:choose>
2522- <py:for each="idx, blocks in enumerate(item.diffs)">
2523- <tbody py:for="block in blocks" class="$block.type">
2524- <py:choose test="block.type">
2525-
2526- <py:when test="'unmod'"> <!--! Show identical lines on both "sides" -->
2527- <tr py:for="idx, line in enumerate(block.base.lines)">
2528- <py:with vars="from_n = block.base.offset+idx+1; to_n = block.changed.offset+idx+1;
2529- clines = block.changed.lines">
2530- <py:choose test="diff.style">
2531- <py:when test="'sidebyside'">
2532- <th>$from_n</th><td class="l"><span>$line</span>&nbsp;</td>
2533- <th>$to_n</th><td class="r"><span>${idx &lt; len(clines) and clines[idx] or ''}</span>&nbsp;</td>
2534- </py:when>
2535- <py:when test="'inline'">
2536- <th>$from_n</th><th>$to_n</th><td class="l"><span>$line</span>&nbsp;</td>
2537- </py:when>
2538- </py:choose>
2539- </py:with>
2540- </tr>
2541- </py:when>
2542-
2543- <py:when test="'add'"> <!--! Show only added lines, on the "right side" -->
2544- <tr py:for="idx, line in enumerate(block.changed.lines)"
2545- class="${diff.style == 'inline' and first_last(idx, block.changed.lines) or None}">
2546- <py:with vars="to_n = block.changed.offset+idx+1">
2547- <py:choose test="diff.style">
2548- <py:when test="'sidebyside'">
2549- <th>&nbsp;</th><td class="l">&nbsp;</td>
2550- <th>$to_n</th><td class="r"><ins>$line</ins>&nbsp;</td>
2551- </py:when>
2552- <py:when test="'inline'">
2553- <th>&nbsp;</th><th>$to_n</th><td class="r"><ins>$line</ins>&nbsp;</td>
2554- </py:when>
2555- </py:choose>
2556- </py:with>
2557- </tr>
2558- </py:when>
2559-
2560- <py:when test="'rem'"> <!--! Show only deleted lines, on the "left side" -->
2561- <tr py:for="idx, line in enumerate(block.base.lines)"
2562- class="${diff.style == 'inline' and first_last(idx, block.base.lines) or None}">
2563- <py:with vars="from_n = block.base.offset+idx+1">
2564- <py:choose test="diff.style">
2565- <py:when test="'sidebyside'">
2566- <th>$from_n</th><td class="l"><del>$line</del>&nbsp;</td>
2567- <th>&nbsp;</th><td class="r">&nbsp;</td>
2568- </py:when>
2569- <py:when test="'inline'">
2570- <th>$from_n</th><th>&nbsp;</th><td class="l"><del>$line</del>&nbsp;</td>
2571- </py:when>
2572- </py:choose>
2573- </py:with>
2574- </tr>
2575- </py:when>
2576-
2577- <py:when test="'mod'"> <!--! Show edited lines, on both "sides" -->
2578- <py:choose test="diff.style">
2579- <py:when test="'sidebyside'">
2580- <py:choose>
2581- <py:when test="len(block.base.lines) &gt;= len(block.changed.lines)">
2582- <tr py:for="idx, line in enumerate(block.base.lines)">
2583- <th>${block.base.offset+idx+1}</th>
2584- <td class="l"><span>$line</span>&nbsp;</td>
2585- <py:with vars="within_change = idx &lt; len(block.changed.lines)">
2586- <th>${within_change and block.changed.offset+idx+1 or '&nbsp;'}</th>
2587- <td class="r"><span py:if="within_change">${block.changed.lines[idx]}</span>&nbsp;</td>
2588- </py:with>
2589- </tr>
2590- </py:when>
2591- <py:otherwise> <!--! there are more changed lines than original lines -->
2592- <tr py:for="idx, line in enumerate(block.changed.lines)">
2593- <py:with vars="within_change = idx &lt; len(block.base.lines)">
2594- <th>${within_change and block.base.offset+idx+1 or '&nbsp;'}</th>
2595- <td class="l"><span py:if="within_change">${block.base.lines[idx]}</span>&nbsp;</td>
2596- </py:with>
2597- <th>${block.changed.offset+idx+1}</th>
2598- <td class="r"><span>$line</span>&nbsp;</td>
2599- </tr>
2600- </py:otherwise>
2601- </py:choose>
2602- </py:when>
2603- <py:when test="'inline'">
2604- <!--! First show the "old" lines -->
2605- <tr py:for="idx, line in enumerate(block.base.lines)"
2606- class="${idx == 0 and 'first' or None}">
2607- <th>${block.base.offset+idx+1}</th><th>&nbsp;</th><td class="l"><span>$line</span>&nbsp;</td>
2608- </tr>
2609- <!--! Then show the "new" lines -->
2610- <tr py:for="idx, line in enumerate(block.changed.lines)"
2611- class="${idx + 1 == len(block.changed.lines) and 'last' or None}">
2612- <th>&nbsp;</th><th>${block.changed.offset+idx+1}</th><td class="r"><span>$line</span>&nbsp;</td>
2613- </tr>
2614- </py:when>
2615- </py:choose>
2616- </py:when>
2617-
2618- </py:choose>
2619- </tbody>
2620- <py:if test="idx &lt; len(item.diffs) - 1">
2621- <tbody class="skipped" py:choose="diff.style"
2622- py:with="fromline = item.diffs[idx+1][0].base.offset+1;
2623- toline = item.diffs[idx+1][0].changed.offset+1">
2624- <tr py:when="'sidebyside'">
2625- <th><a href="$item.old.href#L$fromline">&hellip;</a></th><td>&nbsp;</td>
2626- <th><a href="$item.new.href#L$toline">&hellip;</a></th><td>&nbsp;</td>
2627- </tr>
2628- <tr py:when="'inline'">
2629- <th><a href="$item.old.href#L$fromline">&hellip;</a></th>
2630- <th><a href="$item.new.href#L$toline">&hellip;</a></th>
2631- <td>&nbsp;</td>
2632- </tr>
2633- </tbody>
2634- </py:if>
2635- </py:for>
2636- </table>
2637- </li>
2638- </py:for>
2639- </ul>
2640-
2641-</div>
2642
2643=== removed file 'trac-files/templates/diff_view.html'
2644--- trac-files/templates/diff_view.html 2011-10-17 17:00:12 +0000
2645+++ trac-files/templates/diff_view.html 1970-01-01 00:00:00 +0000
2646@@ -1,71 +0,0 @@
2647-<!DOCTYPE html
2648- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2649- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2650-<html xmlns="http://www.w3.org/1999/xhtml"
2651- xmlns:py="http://genshi.edgewall.org/"
2652- xmlns:xi="http://www.w3.org/2001/XInclude">
2653- <xi:include href="layout.html" />
2654- <xi:include href="macros.html" />
2655- <head>
2656- <title>$title</title>
2657- <link rel="stylesheet" type="text/css" href="${chrome.htdocs_location}css/diff.css" />
2658- <meta name="ROBOTS" content="NOINDEX, NOFOLLOW" />
2659- </head>
2660-
2661- <body>
2662- <div id="content" class="${resource.realm}">
2663- <h1 py:choose="">Changes
2664- <py:when test="old_version">between
2665- <a href="${url_of(resource, version=old_version)}">Version $old_version</a> and
2666- </py:when>
2667- <py:when test="old_version == 0">between
2668- <a href="${url_of(resource, version=0)}">Initial Version</a> and
2669- </py:when>
2670- <py:otherwise>from</py:otherwise>
2671- <a href="${url_of(resource, version=new_version)}">Version $new_version</a> of
2672- <a href="${url_of(resource)}">${name_of(resource)}</a>
2673- </h1>
2674- <form method="post" id="prefs" action="${url_of(resource)}">
2675- <div>
2676- <input type="hidden" name="action" value="diff" />
2677- <input type="hidden" name="version" value="$new_version" />
2678- <input type="hidden" name="old_version" value="$old_version" />
2679- ${diff_options_fields(diff)}
2680- </div>
2681- </form>
2682- <dl id="overview" py:with="multi = num_changes &gt; 1">
2683- <dt class="property time">Timestamp:</dt>
2684- <dd class="time" py:choose="">
2685- <em py:when="multi" class="multi">(multiple changes)</em>
2686- <py:when test="change.date">${format_datetime(change.date)} (${dateinfo(change.date)} ago)</py:when>
2687- <py:otherwise>--</py:otherwise>
2688- </dd>
2689- <dt class="property author">Author:</dt>
2690- <dd class="author" py:choose="">
2691- <em py:when="multi" class="multi">(multiple changes)</em>
2692- <py:otherwise>${authorinfo(change.author)}
2693- <span py:if="show_ip_addresses and 'ipnr' in change" class="ipnr">(IP: $change.ipnr)</span></py:otherwise>
2694- </dd>
2695- <dt class="property message">Comment:</dt>
2696- <dd class="message" py:choose="" xml:space="preserve">
2697- <em py:when="multi" class="multi">(multiple changes)</em>
2698- <py:otherwise>${wiki_to_html(context(resource), change.comment)}</py:otherwise>
2699- </dd>
2700- </dl>
2701- <div class="diff">
2702- <div class="legend" id="diff-legend">
2703- <h3>Legend:</h3>
2704- <dl>
2705- <dt class="unmod"></dt><dd>Unmodified</dd>
2706- <dt class="add"></dt><dd>Added</dd>
2707- <dt class="rem"></dt><dd>Removed</dd>
2708- <dt class="mod"></dt><dd>Modified</dd>
2709- </dl>
2710- </div>
2711-
2712- <xi:include href="diff_div.html" py:with="no_id=False"/>
2713-
2714- </div>
2715- </div>
2716- </body>
2717-</html>
2718
2719=== removed file 'trac-files/templates/error.html'
2720--- trac-files/templates/error.html 2011-10-17 17:00:12 +0000
2721+++ trac-files/templates/error.html 1970-01-01 00:00:00 +0000
2722@@ -1,200 +0,0 @@
2723-<!DOCTYPE html
2724- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2725- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2726-<html xmlns="http://www.w3.org/1999/xhtml"
2727- xmlns:py="http://genshi.edgewall.org/"
2728- xmlns:xi="http://www.w3.org/2001/XInclude">
2729- <xi:include href="layout.html" />
2730- <head>
2731- <title>${title or 'Error'}</title>
2732- <script py:if="frames" type="text/javascript">/*<![CDATA[*/
2733- jQuery(document).ready(function($) {
2734- $("#traceback a").click(function() {
2735- $("div", this.parentNode).slideToggle("fast");
2736- return false;
2737- });
2738- $("#tbtoggle").click(function() {
2739- if (this.value.indexOf("interactive") < 0) {
2740- this.value = "Switch to interactive view";
2741- $("#traceback ul").fadeOut("fast", function() {
2742- $("#traceback pre").fadeIn("fast");
2743- });
2744- } else {
2745- this.value = "Switch to plain text view";
2746- $("#traceback pre").fadeOut("fast", function() {
2747- $("#traceback ul").fadeIn("fast");
2748- });
2749- }
2750- return false;
2751- });
2752- /* Only activate interactive view if Javascript is enabled */
2753- $("#traceback ul").show();
2754- $("#traceback pre").hide();
2755- $("#tbtoggle").parent().show();
2756-
2757- $("#systeminfo").append("<tr><th>jQuery:</th><td>"+$().jquery+"</td></tr>");
2758- $("#systeminfo").before("<p>User Agent: <tt>"+navigator.userAgent+"</tt></p>");
2759- });
2760- /*]]>*/</script>
2761- <script type="text/javascript">/*<![CDATA[*/
2762- jQuery(document).ready(function($) {
2763- var descr = $("#description").text();
2764- descr = descr.replace(/==== System Information ====\s+/m,
2765- "User Agent was: `" + navigator.userAgent + "`\n\n$&"
2766- );
2767- descr = descr.replace(/\|\|\s+==== Python Traceback ====/m,
2768- "||\n|| '''jQuery:''' || `" + $().jquery + "` $&"
2769- );
2770- $("#description").text(descr);
2771- });
2772- /*]]>*/</script>
2773- </head>
2774-
2775- <py:def function="create_ticket(teo=False)">
2776- <input type="hidden" name="reporter" value="${get_reporter_id(req)}" />
2777- <input py:if="teo" type="hidden" name="version"
2778- value="${'dev' in trac.version and 'devel' or trac.version}" />
2779- <input type="hidden" name="summary" value="$message" />
2780- <textarea id="description" name="description" rows="3" cols="10">
2781-
2782-==== How to Reproduce ====
2783-
2784-While doing a $req.method operation on `$req.path_info`, Trac issued an internal error.
2785-
2786-''(please provide additional details here)''
2787-
2788-<py:if test="req.args">
2789-Request parameters:
2790-{{{
2791-${pprint(req.args)}
2792-}}}
2793-</py:if>
2794-
2795-==== System Information ====
2796-<py:for each="k, v in trac.systeminfo">
2797-|| '''$k''' || ${'`%s`' % (v and v.replace('\n', '` [[br]] `'))} ||</py:for>
2798-
2799-==== Python Traceback ====
2800-{{{
2801-${traceback}
2802-}}}
2803- </textarea>
2804- <span class="inlinebuttons">
2805- <input type="submit" name="create" value="Create" />
2806- </span>
2807- </py:def>
2808-
2809- <body>
2810- <div id="content" class="error">
2811- <py:choose test="type">
2812- <py:when test="'TracError'">
2813- <h1>$title</h1>
2814- <py:choose test="">
2815- <p py:when="istext(message)" class="message">$message</p>
2816- <py:otherwise>$message</py:otherwise>
2817- </py:choose>
2818- </py:when>
2819- <py:when test="'internal'">
2820- <h1>Oops&hellip;</h1>
2821- <div class="message">
2822- <strong>Trac detected an internal error:</strong>
2823- <pre>$message</pre>
2824- </div>
2825- <py:choose>
2826- <py:when test="'TRAC_ADMIN' not in perm">
2827- <p>There was an internal error in Trac. It is recommended
2828- that you inform your local
2829- <a py:strip="not project.admin" href="mailto:${project.admin}">Trac
2830- administrator</a> and give him all the information he needs to
2831- reproduce the issue.
2832- </p>
2833- <form py:if="project.admin_href"
2834- class="newticket" method="get" action="${project.admin_href.newticket()}#">
2835- <p>To that end, you could ${create_ticket()} a ticket.</p>
2836- </form>
2837- <p>The action that triggered the error was:</p>
2838- <pre>${req.method}: ${req.path_info}</pre>
2839- </py:when>
2840- <py:otherwise>
2841- <form class="newticket" method="get" action="${project.admin_href.newticket()}#">
2842- <p>This is probably a local installation issue.
2843- <py:if test="project.admin_href and project.admin_trac_url != '.'">
2844- You should ${create_ticket()} a ticket at the admin Trac to report
2845- the issue.
2846- </py:if>
2847- </p>
2848- </form>
2849- <h2>Found a bug in Trac?</h2>
2850- <p>If you think this should work and you can reproduce the problem,
2851- you should consider reporting this to the Trac team.</p>
2852- <p>Before you do that, though, <strong>please first try
2853- <a py:with="q = quote_plus(message[:80])"
2854- href="${trac.homepage}search?ticket=yes&amp;noquickjump=1&amp;q=$q">searching</a>
2855- for similar issues</strong>, as it is quite likely that this problem
2856- has been reported before. For questions about installation
2857- and configuration of Trac, please try the
2858- <a href="${trac.homepage}wiki/MailingList">mailing list</a>
2859- instead of filing a ticket.
2860- </p>
2861- <form class="newticket" method="get" action="${trac.homepage}newticket">
2862- <p>Otherwise, please ${create_ticket(True)} a new ticket at
2863- the Trac project site, where you can describe the problem and
2864- explain how to reproduce it.</p>
2865- </form>
2866- <py:if test="traceback">
2867- <h2>Python Traceback</h2>
2868- <div id="traceback">
2869- Most recent call last:
2870- <ul py:if="frames" style="display: none">
2871- <li class="frame" py:for="idx, frame in enumerate(frames)">
2872- <a href="#frame${idx}" id="frame${idx}">
2873- <span class="file">File "${frame.filename}",
2874- line <b>${frame.lineno + 1}</b>, in</span>
2875- <var>${frame.function}</var>
2876- </a>
2877- <div py:if="frame.line" class="source" style="display: none">
2878- <h3>Code fragment:</h3>
2879- <ol start="${frame.lineno + 1 - len(frame.lines_before)}">
2880- <li py:for="line in frame.lines_before"><code>${line or u'\xa0'}</code></li>
2881- <li class="current"><code>${frame.line or u'\xa0'}</code></li>
2882- <li py:for="line in frame.lines_after"><code>${line or u'\xa0'}</code></li>
2883- </ol>
2884- </div>
2885- <div py:if="frame.vars" class="vars" style="display: none">
2886- <h3>Local variables:</h3>
2887- <table class="listing">
2888- <thead><tr><th>Name</th><th>Value</th></tr></thead>
2889- <tbody>
2890- <tr py:for="idx, (name, value) in enumerate(sorted(frame.vars.items()))"
2891- class="${idx % 2 and 'odd' or None}">
2892- <th scope="row"><var>$name</var></th>
2893- <td><code>${shorten_line(repr(value))}</code></td>
2894- </tr>
2895- </tbody>
2896- </table>
2897- </div>
2898- </li>
2899- </ul>
2900- <pre><py:for each="frame in frames">File "${frame.filename}", line ${frame.lineno + 1}, in ${frame.function}<py:if test="frame.line">
2901- ${frame.line.lstrip()}
2902-</py:if></py:for><py:if test="not frames">${traceback}</py:if></pre>
2903- <p style="display: none"><input type="button" id="tbtoggle" value="Switch to plain text view" /></p>
2904- </div>
2905- </py:if>
2906- <h2>System Information:</h2>
2907- <table class="listing" id="systeminfo">
2908- <tr py:for="name, value in trac.systeminfo">
2909- <th>$name:</th>
2910- <td>$value</td>
2911- </tr>
2912- </table>
2913- </py:otherwise>
2914- </py:choose>
2915- </py:when>
2916- </py:choose>
2917- <p>
2918- <a href="${href.wiki('TracGuide')}">TracGuide</a> &mdash; The Trac User and Administration Guide
2919- </p>
2920- </div>
2921- </body>
2922-</html>
2923
2924=== removed file 'trac-files/templates/history_view.html'
2925--- trac-files/templates/history_view.html 2011-10-17 17:00:12 +0000
2926+++ trac-files/templates/history_view.html 1970-01-01 00:00:00 +0000
2927@@ -1,57 +0,0 @@
2928-<!DOCTYPE html
2929- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2930- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2931-<html xmlns="http://www.w3.org/1999/xhtml"
2932- xmlns:py="http://genshi.edgewall.org/"
2933- xmlns:xi="http://www.w3.org/2001/XInclude">
2934- <xi:include href="layout.html" />
2935- <xi:include href="macros.html" />
2936- <head>
2937- <title>$title</title>
2938- </head>
2939-
2940- <body>
2941- <div id="content" class="ticket">
2942- <h1>Change History for <a href="${url_of(resource)}">${name_of(resource)}</a></h1>
2943-
2944- <form py:if="history" class="printableform" method="get" action="">
2945- <div class="buttons">
2946- <input type="hidden" name="action" value="diff" />
2947- <input type="submit" value="View changes" />
2948- </div>
2949- <table id="fieldhist" class="listing" summary="Change history">
2950- <thead>
2951- <tr>
2952- <th class="diff"></th>
2953- <th class="version">Version</th>
2954- <th class="date">Date</th>
2955- <th class="author">Author</th>
2956- <th class="comment">Comment</th>
2957- </tr>
2958- </thead>
2959- <tbody>
2960- <tr py:for="idx, item in enumerate(history)" class="${idx % 2 and 'odd' or 'even'}">
2961- <td class="diff">
2962- <input type="radio" name="old_version" value="$item.version"
2963- checked="${idx == 1 or None}" />
2964- <input type="radio" name="version" value="$item.version"
2965- checked="${idx == 0 or None}" />
2966- </td>
2967- <td class="version">
2968- <a href="${url_of(resource, version=item.version)}" title="View this version">$item.version</a>
2969- </td>
2970- <td class="date">${dateinfo(item.date)}</td>
2971- <td class="author" title="${show_ip_addresses and item.ipnr and 'IP-Address: ' + item.ipnr or None}">${authorinfo(item.author)}</td>
2972- <td class="comment">${wiki_to_oneliner(context(resource), item.comment, shorten=True)}</td>
2973- </tr>
2974- </tbody>
2975- </table>
2976- <py:if test="len(history) &gt; 10">
2977- <div class="buttons">
2978- <input type="submit" value="View changes" />
2979- </div>
2980- </py:if>
2981- </form>
2982- </div>
2983- </body>
2984-</html>
2985
2986=== removed file 'trac-files/templates/index.html'
2987--- trac-files/templates/index.html 2011-10-17 17:00:12 +0000
2988+++ trac-files/templates/index.html 1970-01-01 00:00:00 +0000
2989@@ -1,23 +0,0 @@
2990-<!DOCTYPE html
2991- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2992- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2993-<html xmlns="http://www.w3.org/1999/xhtml"
2994- xmlns:py="http://genshi.edgewall.org/"
2995- xmlns:xi="http://www.w3.org/2001/XInclude">
2996- <head>
2997- <title>Available Projects</title>
2998- </head>
2999-
3000- <body>
3001- <h1>Available Projects</h1>
3002- <ul>
3003- <li py:for="project in projects" py:choose="">
3004- <a py:when="'href' in project" href="$project.href"
3005- title="$project.description">$project.name</a>
3006- <py:otherwise>
3007- <small>$project.name: <em>Error</em> <br /> ($project.description)</small>
3008- </py:otherwise>
3009- </li>
3010- </ul>
3011- </body>
3012-</html>
3013
3014=== removed file 'trac-files/templates/layout.html'
3015--- trac-files/templates/layout.html 2011-10-17 17:00:12 +0000
3016+++ trac-files/templates/layout.html 1970-01-01 00:00:00 +0000
3017@@ -1,57 +0,0 @@
3018-<!DOCTYPE html
3019- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3020- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3021-<html xmlns="http://www.w3.org/1999/xhtml"
3022- xmlns:xi="http://www.w3.org/2001/XInclude"
3023- xmlns:py="http://genshi.edgewall.org/"
3024- py:strip="">
3025-
3026- <py:match path="head" once="true"><head>
3027- <title py:with="title = list(select('title/text()'))">
3028- <py:if test="title">${title} – </py:if>${project.name or 'Trac'}
3029- </title>
3030- <meta name="ROBOTS" content="NOODP" />
3031- <meta name="Description" content="An event-driven networking engine written in Python and MIT licensed." />
3032- <py:if test="chrome.links">
3033- <py:for each="rel, links in chrome.links.items()">
3034- <link rel="${rel}" py:for="link in links" py:attrs="link" />
3035- </py:for>
3036- </py:if>
3037- <py:if test="'SEARCH_VIEW' in perm" id="search">
3038- <link type="application/opensearchdescription+xml" rel="search"
3039- href="${href.search('opensearch')}" title="Search $project.name"/>
3040- </py:if>
3041- <script py:for="script in chrome.scripts"
3042- type="${script.type}" src="${script.href}"></script>
3043- ${Markup('&lt;!--[if lt IE 7]&gt;')}
3044- <script type="text/javascript" src="${chrome.htdocs_location}js/ie_pre7_hacks.js"></script>
3045- ${Markup('&lt;![endif]--&gt;')}
3046- ${select("*[local-name() != 'title']")}
3047- </head></py:match>
3048-
3049- <py:match path="body" once="true" buffer="false"><body>
3050- ${select('*|text()')}
3051-
3052- <script type="text/javascript" py:if="chrome.late_links">
3053- <py:for each="link in chrome.late_links.get('stylesheet')">
3054- jQuery.loadStyleSheet("${link.href}", "${link.type}");
3055- </py:for>
3056- </script>
3057- <script py:for="script in chrome.late_scripts"
3058- type="${script.type}" src="${script.href}"></script>
3059-
3060- <div id="altlinks" py:if="'alternate' in chrome.links">
3061- <h3>Download in other formats:</h3>
3062- <ul>
3063- <li py:for="idx, link in enumerate(chrome.links.alternate)"
3064- class="${first_last(idx, chrome.links.alternate)}">
3065- <a rel="nofollow" href="${link.href}" class="${link['class']}"
3066- py:content="link.title" />
3067- </li>
3068- </ul>
3069- </div>
3070- </body></py:match>
3071-
3072- <xi:include href="$chrome.theme"><xi:fallback /></xi:include>
3073- <xi:include href="site.html"><xi:fallback /></xi:include>
3074-</html>
3075
3076=== removed file 'trac-files/templates/macros.cs'
3077--- trac-files/templates/macros.cs 2011-10-17 17:00:12 +0000
3078+++ trac-files/templates/macros.cs 1970-01-01 00:00:00 +0000
3079@@ -1,197 +0,0 @@
3080-<?cs def:hdf_select(options, name, selected, optional) ?>
3081- <select size="1" id="<?cs var:name ?>" name="<?cs var:name ?>"><?cs
3082- if:optional ?><option></option><?cs /if ?><?cs
3083- each:option = options ?>
3084- <option<?cs if:option == selected ?> selected="selected"<?cs /if ?>><?cs
3085- var:option ?></option><?cs
3086- /each ?>
3087- </select><?cs
3088-/def?><?cs
3089-
3090-def:labelled_hdf_select(label, options, name, selected, optional) ?><?cs
3091- if:len(options) > #0 ?>
3092- <label for="<?cs var:name ?>"><?cs var:label ?></label><?cs
3093- call:hdf_select(options, name, selected, optional) ?>
3094- </label>
3095- <br /><?cs
3096- /if ?><?cs
3097-/def ?><?cs
3098-
3099-def:browser_path_links(path, file) ?><?cs
3100- set:first = #1 ?><?cs
3101- each:part = path ?><?cs
3102- set:last = name(part) == len(path) - #1 ?><a<?cs
3103- if:first ?> class="first" title="Go to root directory"<?cs
3104- set:first = #0 ?><?cs
3105- else ?> title="View <?cs var:part.name ?>"<?cs
3106- /if ?> href="<?cs var:part.href ?>"><?cs var:part.name ?></a><?cs
3107- if:!last ?><span class="sep">/</span><?cs /if ?><?cs
3108- /each ?><?cs
3109-/def ?><?cs
3110-
3111-def:diff_line_class(block, line) ?><?cs
3112- set:first = name(line) == 0 ?><?cs
3113- set:last = name(line) + 1 == len(block.lines) ?><?cs
3114- if:first || last ?> class="<?cs
3115- if:first ?>first<?cs /if ?><?cs
3116- if:first && last ?> <?cs /if ?><?cs
3117- if:last ?>last<?cs /if ?>"<?cs
3118- /if ?><?cs
3119-/def ?><?cs
3120-
3121-def:diff_display(diff, style) ?><?cs
3122- if:style == 'sidebyside' ?><?cs
3123- each:block = diff ?><?cs
3124- if:block.type == 'unmod' ?><tbody><?cs
3125- each:line = block.base.lines ?><tr><th><?cs
3126- var:#block.base.offset + name(line) + 1 ?></th><td class="l"><span><?cs
3127- var:line ?></span>&nbsp;</td><th><?cs
3128- var:#block.changed.offset + name(line) + 1 ?></th><td class="r"><span><?cs
3129- var:block.changed.lines[name(line)] ?></span>&nbsp;</td></tr><?cs
3130- /each ?></tbody><?cs
3131- elif:block.type == 'mod' ?><tbody class="mod"><?cs
3132- if:len(block.base.lines) >= len(block.changed.lines) ?><?cs
3133- each:line = block.base.lines ?><tr><th><?cs
3134- var:#block.base.offset + name(line) + 1 ?></th><td class="l"><?cs
3135- var:line ?>&nbsp;</td><?cs
3136- if:len(block.changed.lines) >= name(line) + 1 ?><?cs
3137- each:changedline = block.changed.lines ?><?cs
3138- if:name(changedline) == name(line) ?><th><?cs
3139- var:#block.changed.offset + name(changedline) + 1 ?></th><td class="r"><?cs
3140- var:changedline ?>&nbsp;</td><?cs
3141- /if ?><?cs
3142- /each ?><?cs
3143- else ?><th>&nbsp;</th><td class="r">&nbsp;</td><?cs
3144- /if ?></tr><?cs
3145- /each ?><?cs
3146- else ?><?cs
3147- each:line = block.changed.lines ?><tr><?cs
3148- if:len(block.base.lines) >= name(line) + 1 ?><?cs
3149- each:baseline = block.base.lines ?><?cs
3150- if:name(baseline) == name(line) ?><th><?cs
3151- var:#block.base.offset + name(baseline) + 1 ?></th><td class="l"><?cs
3152- var:baseline ?>&nbsp;</td><?cs
3153- /if ?><?cs
3154- /each ?><?cs
3155- else ?><th>&nbsp;</th><td class="l">&nbsp;</td><?cs
3156- /if ?>
3157- <th><?cs var:#block.changed.offset + name(line) + 1 ?></th>
3158- <td class="r"><?cs var:line ?>&nbsp;</td></tr><?cs
3159- /each ?><?cs
3160- /if ?></tbody><?cs
3161- elif:block.type == 'add' ?><tbody class="add"><?cs
3162- each:line = block.changed.lines ?><tr><th>&nbsp;</th><td class="l">&nbsp;</td><th><?cs
3163- var:#block.changed.offset + name(line) + 1 ?></th><td class="r"><ins><?cs
3164- var:line ?></ins>&nbsp;</td></tr><?cs
3165- /each ?><?cs
3166- elif:block.type == 'rem' ?><tbody class="rem"><?cs
3167- each:line = block.base.lines ?><tr><th><?cs
3168- var:#block.base.offset + name(line) + 1 ?></th><td class="l"><del><?cs
3169- var:line ?></del>&nbsp;</td><th>&nbsp;</th><td class="r">&nbsp;</td></tr><?cs
3170- /each ?><?cs
3171- /if ?></tbody><?cs
3172- /each ?><?cs
3173- else ?><?cs
3174- each:block = diff ?><?cs
3175- if:block.type == 'unmod' ?><tbody><?cs
3176- each:line = block.base.lines ?><tr><th><?cs
3177- var:#block.base.offset + name(line) + #1 ?></th><th><?cs
3178- var:#block.changed.offset + name(line) + #1 ?></th><td class="l"><span><?cs
3179- var:line ?></span>&nbsp;</td></tr><?cs
3180- /each ?></tbody><?cs
3181- elif:block.type == 'mod' ?><tbody class="mod"><?cs
3182- each:line = block.base.lines ?><tr<?cs
3183- if:name(line) == 0 ?> class="first"<?cs /if ?>><th><?cs
3184- var:#block.base.offset + name(line) + #1 ?></th><th>&nbsp;</th><td class="l"><?cs
3185- var:line ?>&nbsp;</td></tr><?cs
3186- /each ?><?cs
3187- each:line = block.changed.lines ?><tr<?cs
3188- if:name(line) + 1 == len(block.changed.lines) ?> class="last"<?cs /if ?>><th>&nbsp;</th><th><?cs
3189- var:#block.changed.offset + name(line) + #1 ?></th><td class="r"><?cs
3190- var:line ?>&nbsp;</td></tr><?cs
3191- /each ?></tbody><?cs
3192- elif:block.type == 'add' ?><tbody class="add"><?cs
3193- each:line = block.changed.lines ?><tr<?cs
3194- call:diff_line_class(block.changed, line) ?>><th>&nbsp;</th><th><?cs
3195- var:#block.changed.offset + name(line) + #1 ?></th><td class="r"><ins><?cs
3196- var:line ?></ins>&nbsp;</td></tr><?cs
3197- /each ?></tbody><?cs
3198- elif:block.type == 'rem' ?><tbody class="rem"><?cs
3199- each:line = block.base.lines ?><tr<?cs
3200- call:diff_line_class(block.base, line) ?>><th><?cs
3201- var:#block.base.offset + name(line) + 1 ?></th><th>&nbsp;</th><td class="l"><del><?cs
3202- var:line ?></del>&nbsp;</td></tr><?cs
3203- /each ?></tbody><?cs
3204- /if ?><?cs
3205- /each ?><?cs
3206- /if ?><?cs
3207-/def ?><?cs
3208-
3209-def:ticket_custom_props(ticket) ?><?cs
3210- each c=ticket.custom ?>
3211- <div class="field custom_<?cs var c.name ?>"><?cs
3212- if c.type == 'text' ?>
3213- <label>
3214- <?cs alt c.label ?><?cs var c.name ?><?cs /alt ?>:
3215- <input type="text" name="custom_<?cs var c.name ?>" value="<?cs var c.value ?>" />
3216- </label><?cs
3217- elif c.type == 'textarea' ?>
3218- <label>
3219- <?cs alt c.label ?><?cs var c.name ?><?cs /alt ?>:<br />
3220- <textarea cols="<?cs alt c.width ?>60<?cs /alt ?>" rows="<?cs
3221- alt c.height ?>12<?cs /alt ?>" name="custom_<?cs var c.name ?>"><?cs
3222- var c.value ?></textarea>
3223- </label><?cs
3224- elif c.type == 'checkbox' ?>
3225- <input type="hidden" name="checkbox_<?cs var c.name ?>" />
3226- <label>
3227- <input type="checkbox" name="custom_<?cs var c.name ?>" value="1"<?cs
3228- if c.selected ?> checked="checked"<?cs /if ?> />
3229- <?cs alt c.label ?><?cs var c.name ?><?cs /alt ?>
3230- </label><?cs
3231- elif c.type == 'select' ?>
3232- <label>
3233- <?cs alt c.label ?><?cs var c.name ?><?cs /alt ?>:
3234- <select name="custom_<?cs var c.name ?>"><?cs each v = c.option ?>
3235- <option<?cs if v.selected ?> selected="selected"<?cs /if ?>><?cs
3236- var v ?></option><?cs /each ?>
3237- </select>
3238- </label><?cs
3239- elif c.type == 'radio' ?>
3240- <fieldset class="radio">
3241- <legend><?cs alt c.label ?><?cs var c.name ?><?cs /alt ?>:</legend><?cs
3242- each v = c.option ?>
3243- <label><input type="radio" name="custom_<?cs var c.name ?>" value="<?cs
3244- var v ?>"<?cs if v.selected ?> checked="checked"<?cs /if ?> /> <?cs
3245- var v ?></label><?cs
3246- /each ?>
3247- </fieldset><?cs
3248- /if ?>
3249- </div><?cs
3250- /each ?><?cs
3251-/def ?><?cs
3252-
3253-def:list_of_attachments(attachments, attach_href) ?>
3254-<h2>Attachments</h2><?cs
3255- if:len(attachments) ?><div id="attachments">
3256- <dl class="attachments"><?cs each:attachment = attachments ?>
3257- <dt><a href="<?cs var:attachment.href ?>" title="View attachment"><?cs
3258- var:attachment.filename ?></a> (<?cs var:attachment.size ?>) - added by <em><?cs
3259- var:attachment.author ?></em> on <?cs
3260- var:attachment.time ?>.</dt><?cs
3261- if:attachment.description ?>
3262- <dd><?cs var:attachment.description ?></dd><?cs
3263- /if ?><?cs
3264- /each ?></dl><?cs
3265- /if ?><?cs
3266- if:attach_href ?>
3267- <form method="get" action="<?cs var:attach_href ?>"><div>
3268- <input type="hidden" name="action" value="new" />
3269- <input type="submit" value="Attach File" />
3270- </div></form><?cs
3271- /if ?><?cs if:len(attachments) ?></div><?cs /if ?><?cs
3272-/def ?><?cs
3273-
3274-def:plural(base, count) ?><?cs
3275- var:base ?><?cs if:count != 1 ?>s<?cs /if ?><?cs
3276-/def ?>
3277
3278=== removed file 'trac-files/templates/macros.html'
3279--- trac-files/templates/macros.html 2011-10-17 17:00:12 +0000
3280+++ trac-files/templates/macros.html 1970-01-01 00:00:00 +0000
3281@@ -1,260 +0,0 @@
3282-<div xmlns="http://www.w3.org/1999/xhtml"
3283- xmlns:py="http://genshi.edgewall.org/" py:strip="">
3284-
3285- <!--!
3286-
3287- WARNING: this file and the corresponding <py:def>s are going to be phased
3288- out soon. Please DON'T include macros.html in your own templates.
3289-
3290- See http://trac.edgewall.org/ticket/6374
3291- -->
3292-
3293- <!--! Display the plural or singular form of a noun depending on a given
3294- - number.
3295- -
3296- - 'cnt' corresponding quantity
3297- - 'noun'
3298- - 'keepzero' If True, 0 gets pluralized, otherwise nothing gets generated.
3299- -
3300- - We take care to not insert any extra space.
3301- -->
3302- <py:def function="plural(cnt,noun,keepzero=False)"><py:if
3303- test="cnt != 0 or keepzero"
3304- >${cnt == 1 and ('1 '+noun) or '%d %ss' % (cnt, noun)}</py:if></py:def>
3305-
3306- <!--! Display size of a content in human friendly format (think -H)
3307- -
3308- - We take care to not insert any extra space.
3309- -->
3310- <py:def function="sizeinfo(size)"><span title="$size bytes">${
3311- pretty_size(size)
3312- }</span></py:def>
3313-
3314- <!--! Display author information, eventually obfuscating the e-mail address
3315- -
3316- - We take care to not insert any extra space.
3317- -->
3318- <py:def function="authorinfo(author, email_map=None)"><py:choose><py:when test="author"><py:with
3319- vars="author = show_email_addresses and email_map and '@' not in author and email_map[author] or author">${
3320- author and format_author(author) or 'anonymous'
3321- }</py:with></py:when><py:otherwise>anonymous</py:otherwise></py:choose></py:def>
3322-
3323- <!--! Display a sequence of path components.
3324- -
3325- - Each component is a link to the corresponding location in the browser.
3326- -->
3327- <py:def function="browser_path_links(path_links,rev=None)">
3328- <py:for each="idx, part in enumerate(path_links)"><py:with
3329- vars="first = idx == 0; last = idx == len(path_links) - 1"><a
3330- class="${classes('pathentry', first=first)}"
3331- title="${first and 'Go to root directory' or 'View ' + part.name}"
3332- href="$part.href">$part.name</a><py:if
3333- test="not last"><span class="pathentry sep">/</span></py:if></py:with></py:for>
3334- <py:if test="rev"><span class="pathentry sep">@</span>
3335- <a class="pathentry" href="${href.changeset(rev)}" title="View changeset $rev">$rev</a>
3336- </py:if>
3337- <br style="clear: both" />
3338- </py:def>
3339-
3340- <!--! Add Previous/Up/Next navigation links
3341- -
3342- - `label` the label to use after the Previous/Next words
3343- - `uplabel` the label to use for the Up link
3344- -
3345- - Assume the 'chrome' datastructure to be available from the context.
3346- -->
3347- <ul py:def="prevnext_nav(label, uplabel=None)" py:with="links = chrome.links"
3348- py:if="'up' in chrome.links or
3349- 'prev' in chrome.links or
3350- 'next' in chrome.links">
3351- <li class="first" py:choose="">
3352- &larr; <a py:when="'prev' in links" py:with="link = links.prev[0]"
3353- class="prev" href="${link.href}"
3354- title="${link.title}">Previous $label</a>
3355- <span py:otherwise="" class="missing">Previous $label</span>
3356- </li>
3357- <li py:if="uplabel and 'up' in links">
3358- <a py:with="link = links.up[0]" href="${link.href}"
3359- title="${link.title}">$uplabel</a>
3360- </li>
3361- <li class="last" py:choose="">
3362- <a py:when="'next' in links" py:with="link = links.next[0]"
3363- class="next" href="${link.href}"
3364- title="${link.title}">Next $label</a>
3365- <span py:otherwise="" class="missing">Next $label</span> &rarr;
3366- </li>
3367- </ul>
3368-
3369- <!--! Add diff option fields (to be used inside a form)
3370- -
3371- - `diff` the datastructure which contains diff options
3372- -
3373- -->
3374- <py:def function="diff_options_fields(diff)">
3375- <label for="style">View differences</label>
3376- <select id="style" name="style">
3377- <option selected="${diff.style == 'inline' or None}"
3378- value="inline">inline</option>
3379- <option selected="${diff.style == 'sidebyside' or None}"
3380- value="sidebyside">side by side</option>
3381- </select>
3382- <div class="field">
3383- Show <input type="text" name="contextlines" id="contextlines" size="2"
3384- maxlength="3" value="${diff.options.contextlines &lt; 0 and 'all' or diff.options.contextlines}" />
3385- <label for="contextlines">lines around each change</label>
3386- </div>
3387- <fieldset id="ignore" py:with="options = diff.options">
3388- <legend>Ignore:</legend>
3389- <div class="field">
3390- <input type="checkbox" id="ignoreblanklines" name="ignoreblanklines"
3391- checked="${options.ignoreblanklines or None}" />
3392- <label for="ignoreblanklines">Blank lines</label>
3393- </div>
3394- <div class="field">
3395- <input type="checkbox" id="ignorecase" name="ignorecase"
3396- checked="${options.ignorecase or None}" />
3397- <label for="ignorecase">Case changes</label>
3398- </div>
3399- <div class="field">
3400- <input type="checkbox" id="ignorewhitespace" name="ignorewhitespace"
3401- checked="${options.ignorewhitespace or None}" />
3402- <label for="ignorewhitespace">White space changes</label>
3403- </div>
3404- </fieldset>
3405- <div class="buttons">
3406- <input type="submit" name="update" value="Update" />
3407- </div>
3408- </py:def>
3409-
3410- <!--! Display a div for visualizing a preview of a file content
3411- -
3412- - 'preview' is usually obtained from calling Mimeview.preview_data()
3413- -
3414- -->
3415- <py:def function="preview_file(preview)">
3416- ${preview.rendered}
3417- <py:choose>
3418- <p py:when="preview.size == 0">
3419- <strong>(The file is empty)</strong>
3420- </p>
3421- <p py:when="not preview.rendered">
3422- <strong>HTML preview not available</strong>,
3423- <py:choose>
3424- <py:when test="preview.max_file_size_reached">
3425- since the file size exceeds $preview.max_file_size bytes.
3426- </py:when>
3427- <py:otherwise>
3428- since no preview renderer could handle it.
3429- </py:otherwise>
3430- </py:choose>
3431- Try <a href="$preview.raw_href">downloading</a> the file instead.
3432- </p>
3433- <py:when test="'errors' in preview">
3434- <p>
3435- <strong>HTML preview not available</strong>.
3436- To view, <a href="$preview.raw_href">download</a> the file.
3437- </p>
3438- <p>${plural(len(preview.errors), 'issue')} found:</p>
3439- <div py:for="renderer, err in preview.errors" class="system-message">
3440- <strong>${renderer.__class__.__name__}</strong>
3441- <pre>$err</pre>
3442- </div>
3443- </py:when>
3444- </py:choose>
3445- </py:def>
3446-
3447- <!--! Display a list of attachments
3448- -
3449- - 'alist' is an AttachmentList object (see attachment.py)
3450- - 'compact' is used to switch between a compact list of attachments (e.g. as used for
3451- - the wiki view) and an expanded list (e.g. as used for the ticket view)
3452- -->
3453- <py:def function="list_of_attachments(alist, compact=False, add_button_title=None)">
3454- <py:def function="show_one_attachment(attachment)">
3455- <a href="${url_of(attachment.resource)}" title="View attachment">$attachment.filename</a>
3456- <a href="${url_of(attachment.resource, format='raw')}"
3457- title="Download" class="trac-rawlink"><img src="${chrome.htdocs_location}download.png" alt="Download"/></a>
3458- (${sizeinfo(attachment.size)}) - added by <em>${authorinfo(attachment.author)}</em>
3459- ${dateinfo(attachment.date)} ago.
3460- </py:def>
3461- <py:if test="alist.attachments or alist.can_create">
3462- <py:choose test="">
3463- <py:when test="compact and alist.attachments">
3464- <h3>Attachments</h3>
3465- <ul>
3466- <py:for each="attachment in alist.attachments">
3467- <li>
3468- ${show_one_attachment(attachment)}
3469- <q py:if="compact and attachment.description">${wiki_to_oneliner(context, attachment.description)}</q>
3470- </li>
3471- </py:for>
3472- </ul>
3473- </py:when>
3474- <py:when test="not compact">
3475- <h2>Attachments</h2>
3476- <div py:if="alist.attachments or alist.can_create" id="attachments">
3477- <dl py:if="alist.attachments" class="attachments">
3478- <py:for each="attachment in alist.attachments">
3479- <dt>${show_one_attachment(attachment)}</dt>
3480- <dd py:if="attachment.description">
3481- ${wiki_to_oneliner(context, attachment.description)}
3482- </dd>
3483- </py:for>
3484- </dl>
3485- ${attach_file_form(alist, add_button_title)}
3486- </div>
3487- </py:when>
3488- </py:choose>
3489- </py:if>
3490- </py:def>
3491-
3492- <!--! Conditionally render an ''Attach File'' button
3493- -
3494- - 'alist' is an AttachmentList object (see attachment.py)
3495- -->
3496- <py:def function="attach_file_form(alist, add_button_title=None)">
3497- <form py:if="alist.can_create" method="get" action="${alist.attach_href}" id="attachfile">
3498- <div>
3499- <input type="hidden" name="action" value="new" />
3500- <input type="submit" name="attachfilebutton" value="${add_button_title or _('Attach file')}" />
3501- </div>
3502- </form>
3503- </py:def>
3504-
3505- <!--! Display a generic "progress bar", for use in roadmap and milestone.
3506- -
3507- - `stats` argument is a TicketGroupStats instance
3508- - `interval_hrefs` are links to a query for each of the stats.intervals
3509- -->
3510- <py:def function="progress_bar(stats, interval_hrefs, percent=None, legend=True, style=None, stats_href=None)">
3511- <table class="progress" style="$style">
3512- <tr>
3513- <td py:for="idx, interval in enumerate(stats.intervals)" py:choose=""
3514- class="$interval.css_class" style="${interval.percent and 'width: %d%%' % interval.percent or 'display: none'}">
3515- <a py:when="interval_hrefs" href="${interval_hrefs[idx]}"
3516- title="${interval.count} of ${stats.count} ${stats.unit}${
3517- stats.count != 1 and 's' or ''} ${interval.title}"></a>
3518- <a py:otherwise=""
3519- title="${interval.count} of ${stats.count} ${stats.unit}${
3520- stats.count != 1 and 's' or ''} ${interval.title}"></a>
3521- </td>
3522- </tr>
3523- </table>
3524- <p class="percent">${percent is None and '%d%%' % stats.done_percent or percent}</p>
3525- <dl py:if="legend">
3526- <py:for each="idx, interval in enumerate(stats.intervals)">
3527- <dt py:choose="">
3528- <a py:when="interval_hrefs" href="${interval_hrefs[idx]}">${interval.title.capitalize()} ${stats.unit}s:</a>
3529- <a py:otherwise="">${interval.title.capitalize()} ${stats.unit}s:</a>
3530- </dt>
3531- <dd py:choose="">
3532- <a py:when="interval_hrefs" href="${interval_hrefs[idx]}">${interval.count}</a>
3533- <a py:otherwise="">${interval.count}</a>
3534- </dd>
3535- </py:for>
3536- <dt>/ <a href="${stats_href}">Total ${stats.unit}s:</a></dt>
3537- <dd><a href="${stats_href}">${sum([x.count for x in stats.intervals], 0)}</a></dd>
3538- </dl>
3539-</py:def>
3540-
3541-</div>
3542
3543=== removed file 'trac-files/templates/macros.rss'
3544--- trac-files/templates/macros.rss 2011-10-17 17:00:12 +0000
3545+++ trac-files/templates/macros.rss 1970-01-01 00:00:00 +0000
3546@@ -1,29 +0,0 @@
3547-<?xml version="1.0"?>
3548-<rss version="2.0" xmlns:py="http://genshi.edgewall.org/"
3549- xmlns:dc="http://purl.org/dc/elements/1.1/" py:strip="">
3550-
3551- <!--!
3552-
3553- WARNING: this file and the corresponding <py:def>s are going to be phased
3554- out soon. Please DON'T include macros.rss in your own templates.
3555-
3556- See http://trac.edgewall.org/ticket/6374
3557- -->
3558-
3559- <!--! Generate an <author> or a <dc:creator> tag, based on the presence
3560- - of an email or not in the author's information.
3561- -
3562- - Assume 'show_email_addresses' to be available in the global data.
3563- -->
3564- <py:def function="author_or_creator(author, email_map=None)">
3565- <py:if test="author">
3566- <!--! Try our best to retrieve an email address if wanted and possible -->
3567- <py:with vars="author = show_email_addresses and email_map and '@' not in author and email_map[author] or author">
3568- <py:choose>
3569- <author py:when="show_email_addresses and '@' in author">${format_author(author)}</author>
3570- <dc:creator py:otherwise="">${format_author(author)}</dc:creator>
3571- </py:choose>
3572- </py:with>
3573- </py:if>
3574- </py:def>
3575-</rss>
3576
3577=== removed file 'trac-files/templates/page_index.html'
3578--- trac-files/templates/page_index.html 2011-10-17 17:00:12 +0000
3579+++ trac-files/templates/page_index.html 1970-01-01 00:00:00 +0000
3580@@ -1,27 +0,0 @@
3581-<!--! Display a page index.
3582-
3583- `paginator` must be a trac.util.presentation.Paginator instance
3584-
3585- -->
3586-<div xmlns="http://www.w3.org/1999/xhtml"
3587- xmlns:py="http://genshi.edgewall.org/" class="paging" py:if="paginator.has_more_pages">
3588-
3589- <span py:if="paginator.has_previous_page"
3590- py:with="prevlink = chrome.links.prev[0]" class="previous">
3591- <a href="${prevlink.href}" title="${prevlink.title}">&larr;</a>
3592- </span>
3593- <py:for each="page in paginator.shown_pages">
3594- <span py:if="page.string == paginator.current_page.string">
3595- <span py:if="page.string == paginator.current_page.string" class="${paginator.current_page['class']}">${paginator.current_page.string}</span>
3596- </span>
3597- <span py:if="page.string != paginator.current_page.string">
3598- <a href="${page.href}" title="${page.title}">${page.string}</a>
3599- </span>
3600- </py:for>
3601- <span py:if="paginator.has_next_page"
3602- py:with="nextlink = chrome.links.next[0]" class="next">
3603- <a href="${nextlink.href}" title="${nextlink.title}">&rarr;</a>
3604- </span>
3605-
3606-</div>
3607-
3608
3609=== added file 'trac-files/templates/site.html'
3610--- trac-files/templates/site.html 1970-01-01 00:00:00 +0000
3611+++ trac-files/templates/site.html 2011-11-24 10:57:32 +0000
3612@@ -0,0 +1,120 @@
3613+<html xmlns="http://www.w3.org/1999/xhtml"
3614+ xmlns:py="http://genshi.edgewall.org/"
3615+ py:strip="">
3616+
3617+ <!--! Add some tasty meta tags. -->
3618+ <head py:match="head">
3619+ <meta name="ROBOTS" content="NOODP" />
3620+ <meta name="Description" content="An event-driven networking engine written in Python and MIT licensed." />
3621+ ${select('*|comment()|text()')}
3622+ <script type="text/javascript" src="https://www.google.com/jsapi?key=ABQIAAAAJE-f7vmwI1-jxkmwRe4lUxTAs18ELyhzmLGaHoc1qJwmpJy3zhR3LMRRdwqg5PSY4tnVO684msUklQ"></script>
3623+ <script type="text/javascript" src="${href.chrome('site/js/news.js')}" />
3624+ </head>
3625+
3626+ <!--! Add our own top-level navigation links. -->
3627+ <div py:match="div[@id='banner']" py:attrs="select('@*')">
3628+ <div id="top_grad"></div>
3629+ <div id="tab">
3630+ <a href="${href.wiki()}">HOME</a>
3631+ <a href="${href.wiki('FrequentlyAskedQuestions')}">FAQ</a>
3632+ <a href="${href.wiki('Documentation')}">DOCS</a>
3633+ <a href="${href.wiki('Downloads')}">DOWNLOAD</a>
3634+ </div>
3635+ ${select('*|comment()|text()')}
3636+ </div>
3637+
3638+ <!--! Our own custom footer -->
3639+ <div py:match="div[@id='footer']" py:attrs="select('@*')">
3640+ <div class="sitemeter">
3641+ <!--WEBBOT bot="HTMLMarkup" startspan ALT="Site Meter" -->
3642+ <!--
3643+ <script type="text/javascript" language="JavaScript">var site="sm7twistedmatrix"</script>
3644+ <script type="text/javascript" language="JavaScript1.2" src="http://sm7.sitemeter.com/js/counter.js?site=sm7twistedmatrix"></script>
3645+ <noscript>
3646+ -->
3647+ <a href="http://sm7.sitemeter.com/stats.asp?site=sm7twistedmatrix" target="_top">
3648+ <img src="http://sm7.sitemeter.com/meter.asp?site=sm7twistedmatrix" alt="Site Meter" border="0" />
3649+ </a>
3650+ <!-- </noscript> -->
3651+ <!-- Copyright (c)2002 Site Meter -->
3652+ <!--WEBBOT bot="HTMLMarkup" Endspan -->
3653+
3654+ <!-- Google analytics, obviously. -->
3655+ <script src="http://www.google-analytics.com/urchin.js" type="text/javascript" />
3656+ <script type="text/javascript">
3657+ _uacct = "UA-99018-6";
3658+ urchinTracker();
3659+ </script>
3660+ </div>
3661+ <div class="credits">
3662+ <p><a href="${href.wiki('SiteCredits')}">Site design credits</a></p>
3663+ </div>
3664+ <div class="right">
3665+ <p>${chrome.footer}</p>
3666+ </div>
3667+ </div>
3668+
3669+ <!--! A more structured form of the ticket resolution, status and type attributes -->
3670+ <div py:match="div[@id='content' and @class='ticket']" py:attrs="select('@*')">
3671+ <span class="statuses" py:match="span[@class='status']">
3672+ <py:if test="ticket.type"><span class="type">${ticket.type}</span></py:if>
3673+ <py:if test="ticket.status"><span class="status">${ticket.status}</span></py:if>
3674+ <py:if test="ticket.resolution"><span class="resolution">${ticket.resolution}</span></py:if>
3675+ </span>
3676+ <h1 py:match="h1">
3677+ <span class="title">${select('text()')}</span>
3678+ ${select('*|comment()')}
3679+ </h1>
3680+ ${select('*|comment()|text()')}
3681+ </div>
3682+
3683+ <!--! Genshi, like all write-your-logic-in-your-template languages, is
3684+ completely and utterly terrible. The context in which the variable
3685+ "change" occurs is completely lost and so our only option appears to
3686+ be to reproduce the entire loop. Goodie. -->
3687+ <div py:match="div[@id='changelog']" py:attrs="select('@*')">
3688+ <form py:for="change in changes" method="get" action="#comment" class="printableform">
3689+ <a href="#${'cnum' in change and 'comment:%d' % change.cnum or None}">
3690+ <h2 class="comment-number">${'cnum' in change and change.cnum or None}</h2>
3691+ </a>
3692+ <div class="change">
3693+ <h3 class="change" id="${'cnum' in change and 'comment:%d' % change.cnum or None}">
3694+ <span class="threading" py:if="replies and 'cnum' in change"
3695+ py:with="change_replies = replies.get(str(change.cnum), [])">
3696+ <py:if test="change_replies or 'replyto' in change">
3697+ <py:if test="'replyto' in change">
3698+ in reply to: ${commentref('&uarr;&nbsp;', change.replyto)}
3699+ <py:if test="change_replies">; </py:if>
3700+ </py:if>
3701+ <py:if test="change_replies">follow-up${len(change_replies) > 1 and 's' or ''}:
3702+ <py:for each="reply in change_replies">
3703+ ${commentref('&darr;&nbsp;', reply)}
3704+ </py:for></py:if>
3705+ </py:if>
3706+ &nbsp;
3707+ </span>
3708+ Changed ${dateinfo(change.date)} ago by ${authorinfo(change.author)}
3709+ </h3>
3710+ <div py:if="'cnum' in change and can_append" class="inlinebuttons">
3711+ <input type="hidden" name="replyto" value="${change.cnum}" />
3712+ <input type="submit" value="Reply" title="Reply to comment ${change.cnum}" />
3713+ </div>
3714+ ${display_change(change)}
3715+ </div>
3716+ </form>
3717+ </div>
3718+
3719+ <!--! Don't allow replacing existing attachments, ever. -->
3720+ <py:match path="form[@id='attachment']//div[@class='options']" />
3721+
3722+ <!--! Show a reminder on the attachment page about including tests. -->
3723+ <py:match path="form[@id='attachment']/div[@class='buttons']">
3724+ <p>
3725+ Adding a patch that changes code? Make sure it includes unit tests!
3726+ <a href="/trac/wiki/ReviewProcess">See the complete acceptance criteria</a>. Thanks!
3727+ </p>
3728+ <div py:attrs="select('@*')">
3729+ ${select('*|comment()|text()')}
3730+ </div>
3731+ </py:match>
3732+</html>
3733
3734=== removed file 'trac-files/templates/theme.html'
3735--- trac-files/templates/theme.html 2011-10-17 17:00:12 +0000
3736+++ trac-files/templates/theme.html 1970-01-01 00:00:00 +0000
3737@@ -1,102 +0,0 @@
3738-<!DOCTYPE html
3739- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3740- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3741-<html xmlns="http://www.w3.org/1999/xhtml"
3742- xmlns:xi="http://www.w3.org/2001/XInclude"
3743- xmlns:py="http://genshi.edgewall.org/"
3744- py:strip="">
3745-
3746- <div py:def="navigation(category)" id="${category}" class="nav">
3747- <ul py:if="chrome.nav[category]">
3748- <li py:for="idx, item in enumerate(chrome.nav[category])"
3749- class="${classes(first_last(idx, chrome.nav[category]), active=item.active)}">${item.label}</li>
3750- </ul>
3751- </div>
3752- <py:match path="body" once="true" buffer="false"><body>
3753- <div id="banner">
3754- <div id="top_grad">
3755- &nbsp;
3756- </div>
3757- <div id="tab">
3758- <a href="/trac/wiki">HOME</a>
3759- <a href="/trac/wiki/FrequentlyAskedQuestions">FAQ</a>
3760- <a href="/trac/wiki/Documentation">DOCS</a>
3761- <a href="/trac/wiki/Downloads">DOWNLOAD</a>
3762- </div>
3763- <div id="header" py:choose="">
3764- <a py:when="chrome.logo.src" id="logo" href="${chrome.logo.link or href.wiki('TracIni')+'#header_logo-section'}"><img
3765- src="${chrome.logo.src}" alt="${chrome.logo.alt}"
3766- height="${chrome.logo.height or None}" width="${chrome.logo.width or None}" /></a>
3767- <h1 py:otherwise=""><a href="${chrome.logo.link}">${project.name}</a></h1>
3768-
3769-
3770- </div>
3771- <form id="topsearch" action="${href.search()}" method="get">
3772- <div>
3773- <label for="proj-search">Search:</label>
3774- <input type="text" id="proj-search" name="q" size="18" accesskey="f" value="" />
3775- <input type="submit" value="Search" />
3776- </div>
3777- </form>
3778- ${navigation('metanav')}
3779- </div>
3780- ${navigation('mainnav')}
3781-
3782- <div id="main">
3783- <div id="ctxtnav" class="nav">
3784- <h2>Context Navigation</h2>
3785- <ul py:if="chrome.ctxtnav">
3786- <li py:for="i, elm in enumerate(chrome.ctxtnav)"
3787- class="${classes(first_last(i, chrome.ctxtnav))}">$elm</li>
3788- </ul>
3789- <hr />
3790- </div>
3791- <div id="warning" py:if="chrome.warnings" class="system-message">
3792- <py:choose test="len(chrome.warnings)">
3793- <strong>Warning:</strong>
3794- <py:when test="1">${chrome.warnings[0]}</py:when>
3795- <py:otherwise><ul><li py:for="warning in chrome.warnings">$warning</li></ul></py:otherwise>
3796- </py:choose>
3797- </div>
3798- <div id="notice" py:if="chrome.notices" class="system-message">
3799- <py:choose test="len(chrome.notices)">
3800- <py:when test="1">${chrome.notices[0]}</py:when>
3801- <py:otherwise><ul><li py:for="notice in chrome.notices">$notice</li></ul></py:otherwise>
3802- </py:choose>
3803- </div>
3804-
3805- ${select('*|text()')}
3806- </div>
3807-
3808- <div id="footer" xml:lang="en"><hr/>
3809-<div>
3810-<!--WEBBOT bot="HTMLMarkup" startspan ALT="Site Meter" -->
3811-<!--
3812-<script type="text/javascript" language="JavaScript">var site="sm7twistedmatrix"</script>
3813-<script type="text/javascript" language="JavaScript1.2" src="http://sm7.sitemeter.com/js/counter.js?site=sm7twistedmatrix">
3814-</script>
3815-<noscript>
3816--->
3817-<a href="http://sm7.sitemeter.com/stats.asp?site=sm7twistedmatrix" target="_top">
3818-<img src="http://sm7.sitemeter.com/meter.asp?site=sm7twistedmatrix" alt="Site Meter" border="0" /></a>
3819-<!-- </noscript> -->
3820-<!-- Copyright (c)2002 Site Meter -->
3821-<!--WEBBOT bot="HTMLMarkup" Endspan -->
3822-
3823-<!-- Google analytics, obviously. -->
3824-<script src="http://www.google-analytics.com/urchin.js" type="text/javascript" />
3825-<script type="text/javascript">
3826-_uacct = "UA-99018-6";
3827-urchinTracker();
3828-</script>
3829-<!-- End of that stuff -->
3830-</div>
3831-
3832- <p class="left2">
3833- Site design<br/>
3834- By <a href="http://huw.ugbox.net/">huw.wilkins.</a>
3835- </p>
3836- <p class="right">${chrome.footer}</p>
3837- </div>
3838- </body></py:match>
3839-</html>

Subscribers

People subscribed via source and target branches