annotate contrib/sawmill/web/templates/details.html @ 485:a55a521b7a31

Moved the saegewerk table layout completely into header and footer include templates.
author Sascha Teichmann <teichmann@intevation.de>
date Thu, 23 Sep 2010 08:29:27 +0000
parents 2e947f508553
children 283154e189d9
rev   line source
473
d8012571f9e1 sawmill: removed trailing whitespace
Sascha Teichmann <teichmann@intevation.de>
parents: 472
diff changeset
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
452
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
2 "http://www.w3.org/TR/html4/loose.dtd">
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
3 <%
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
4 from cgi import escape
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
5 from xml.sax.saxutils import quoteattr
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
6
475
7be221f41f58 sawmill: Added 'powered by Tree Packager' line in details view.
Sascha Teichmann <teichmann@intevation.de>
parents: 474
diff changeset
7 from datetime import date, datetime
482
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
8
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
9 def nn(s, d=""):
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
10 if not s: return d
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
11 return escape(s)
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
12
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
13 def pretty_time(t, format="%H:%M:%S"):
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
14 if not t: return "&lt;unknown&gt;"
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
15 return t.strftime(format)
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
16
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
17 def pretty_timedelta(a, b):
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
18 if a is None or b is None: return "&lt;unknown&gt;"
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
19 td = a - b
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
20 secs = td.days * 24*3600 + td.seconds
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
21 out = []
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
22 if secs > 3600:
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
23 hs = secs // 3600
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
24 out.append("%dh" % hs)
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
25 secs %= 3600
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
26 if secs > 60:
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
27 ms = secs // 60
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
28 out.append("%dm" % ms)
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
29 secs %= 60
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
30 if secs > 0 or not out:
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
31 out.append("%ds" % secs)
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
32 return " ".join(out)
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
33
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
34 def date_from_datetime(x):
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
35 if not x: return None
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
36 return date(x.year, x.month, x.day)
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
37
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
38 def sort_by_start(a, b):
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
39 a_start = a.build_start
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
40 b_start = b.build_start
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
41 if not a_start and not b_start: return 0
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
42 if not a_start: return 1
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
43 if not b_start: return -1
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
44 return cmp(a_start, b_start)
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
45
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
46 def create_tags_link(tag_url):
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
47 return quoteattr(tag_url.replace(
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
48 "svn://anonsvn.kde.org/home/kde",
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
49 "http://websvn.kde.org"))
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
50
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
51 track_items = sorted(track_items, cmp=sort_by_start, reverse=True)
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
52
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
53 last_date = None
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
54
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
55 STATUS2CLASS = {
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
56 'creating_binary_package': 'inprogress',
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
57 'creating_source_package': 'inprogress',
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
58 'source_package_created': 'inprogress',
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
59 'binary_package_created': 'finished'
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
60 }
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
61
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
62 STATUS2MSG = {
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
63 'creating_binary_package': 'building binary packages',
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
64 'creating_source_package': 'building source package',
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
65 'source_package_created': 'preparing build envrionment',
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
66 'binary_package_created': 'success'
a89f73f7c965 sawmill: Rearranged the postion of some python code in the details template to
Sascha Teichmann <teichmann@intevation.de>
parents: 481
diff changeset
67 }
452
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
68 %>
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
69 <html>
483
28aa6ac933fb sawmill: moved wald's table layout into common header and footer
Sascha Teichmann <teichmann@intevation.de>
parents: 482
diff changeset
70 <%@include file="header.inc" %>
452
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
71
485
a55a521b7a31 Moved the saegewerk table layout completely into header and footer
Sascha Teichmann <teichmann@intevation.de>
parents: 484
diff changeset
72 <div class="css_prison">
452
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
73 <h1><%= escape(description) %></h1>
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
74 <%= header %>
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
75 <table class="statustable">
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
76 <tr>
485
a55a521b7a31 Moved the saegewerk table layout completely into header and footer
Sascha Teichmann <teichmann@intevation.de>
parents: 484
diff changeset
77 <th class="statustablehead">Status</th>
a55a521b7a31 Moved the saegewerk table layout completely into header and footer
Sascha Teichmann <teichmann@intevation.de>
parents: 484
diff changeset
78 <th class="statustablehead">Package</th>
a55a521b7a31 Moved the saegewerk table layout completely into header and footer
Sascha Teichmann <teichmann@intevation.de>
parents: 484
diff changeset
79 <th class="statustablehead">Revision</th>
a55a521b7a31 Moved the saegewerk table layout completely into header and footer
Sascha Teichmann <teichmann@intevation.de>
parents: 484
diff changeset
80 <th class="statustablehead">Start</th>
a55a521b7a31 Moved the saegewerk table layout completely into header and footer
Sascha Teichmann <teichmann@intevation.de>
parents: 484
diff changeset
81 <th class="statustablehead">Stop</th>
a55a521b7a31 Moved the saegewerk table layout completely into header and footer
Sascha Teichmann <teichmann@intevation.de>
parents: 484
diff changeset
82 <th class="statustablehead">Duration</th>
a55a521b7a31 Moved the saegewerk table layout completely into header and footer
Sascha Teichmann <teichmann@intevation.de>
parents: 484
diff changeset
83 <th class="statustablehead">Notes</th>
452
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
84 </tr>
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
85 <%
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
86 for track_item in track_items:
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
87 # for all track items
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
88 curr_date = date_from_datetime(track_item.build_start)
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
89 if curr_date != last_date:
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
90 last_date = curr_date
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
91 %>
481
9c7e1d957d6b sawmill: Not all displayed times are in UTC so the
Sascha Teichmann <teichmann@intevation.de>
parents: 480
diff changeset
92 <tr class="date_row"><td colspan="6"><%= pretty_time(last_date, "%Y-%m-%d") %> (times in UTC)</td></tr>
452
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
93 <%
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
94 # date changed
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
95 %>
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
96 <tr class="<%= STATUS2CLASS.get(track_item.build_status, 'error') %>">
478
7504ed4437e1 sawmill: short start and stop to %H:%M:%S because
Sascha Teichmann <teichmann@intevation.de>
parents: 477
diff changeset
97 <td><%= STATUS2MSG.get(track_item.build_status, 'error') %></td>
7504ed4437e1 sawmill: short start and stop to %H:%M:%S because
Sascha Teichmann <teichmann@intevation.de>
parents: 477
diff changeset
98 <td style="font-weight:bold;"><%= nn(track_item.track) %></td>
484
2e947f508553 sawmill: Improved HTML 4.01 transitional compat a bit.
Sascha Teichmann <teichmann@intevation.de>
parents: 483
diff changeset
99 <td align="right"><%
474
a8f77807d710 sawmill: create links for tag builds
Sascha Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
100 tags = track_item.build_tags
a8f77807d710 sawmill: create links for tag builds
Sascha Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
101 if tags:
a8f77807d710 sawmill: create links for tag builds
Sascha Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
102 # a tag
a8f77807d710 sawmill: create links for tag builds
Sascha Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
103 %>
478
7504ed4437e1 sawmill: short start and stop to %H:%M:%S because
Sascha Teichmann <teichmann@intevation.de>
parents: 477
diff changeset
104 <a href=<%= create_tags_link(tags) %>><strong><%= nn(track_item.revision) %></strong></a>
474
a8f77807d710 sawmill: create links for tag builds
Sascha Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
105 <%
a8f77807d710 sawmill: create links for tag builds
Sascha Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
106 else:
a8f77807d710 sawmill: create links for tag builds
Sascha Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
107 # not a tag
484
2e947f508553 sawmill: Improved HTML 4.01 transitional compat a bit.
Sascha Teichmann <teichmann@intevation.de>
parents: 483
diff changeset
108 %><%= nn(track_item.revision) %><%
474
a8f77807d710 sawmill: create links for tag builds
Sascha Teichmann <teichmann@intevation.de>
parents: 473
diff changeset
109 # end if tags
484
2e947f508553 sawmill: Improved HTML 4.01 transitional compat a bit.
Sascha Teichmann <teichmann@intevation.de>
parents: 483
diff changeset
110 %></td>
478
7504ed4437e1 sawmill: short start and stop to %H:%M:%S because
Sascha Teichmann <teichmann@intevation.de>
parents: 477
diff changeset
111 <td align="right"><%= pretty_time(track_item.build_start) %></td>
7504ed4437e1 sawmill: short start and stop to %H:%M:%S because
Sascha Teichmann <teichmann@intevation.de>
parents: 477
diff changeset
112 <td align="right"><%= pretty_time(track_item.build_stop) %></td>
7504ed4437e1 sawmill: short start and stop to %H:%M:%S because
Sascha Teichmann <teichmann@intevation.de>
parents: 477
diff changeset
113 <td align="right"><%= pretty_timedelta(track_item.stop, track_item.build_start) %></td>
7504ed4437e1 sawmill: short start and stop to %H:%M:%S because
Sascha Teichmann <teichmann@intevation.de>
parents: 477
diff changeset
114 <td>
452
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
115 <%
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
116 for log_desc, log_path in track_item.build_logs:
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
117 # for all logs
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
118 %>
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
119 [<a href=<%= quoteattr("%s/%s" % (base_dir, log_path)) %>><%= nn(log_desc) %></a>]
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
120 <%
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
121 # for all logs
484
2e947f508553 sawmill: Improved HTML 4.01 transitional compat a bit.
Sascha Teichmann <teichmann@intevation.de>
parents: 483
diff changeset
122 %></td>
452
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
123 </tr>
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
124 <%
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
125 # for all track itemes
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
126 %>
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
127
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
128 </table>
475
7be221f41f58 sawmill: Added 'powered by Tree Packager' line in details view.
Sascha Teichmann <teichmann@intevation.de>
parents: 474
diff changeset
129 <hr>
478
7504ed4437e1 sawmill: short start and stop to %H:%M:%S because
Sascha Teichmann <teichmann@intevation.de>
parents: 477
diff changeset
130 report generated at <%= pretty_time(datetime.now(), "%Y-%m-%d %H:%M:%S") %>, powered
475
7be221f41f58 sawmill: Added 'powered by Tree Packager' line in details view.
Sascha Teichmann <teichmann@intevation.de>
parents: 474
diff changeset
131 by <a href="http://treepkg.wald.intevation.org">Tree Packager</a>
485
a55a521b7a31 Moved the saegewerk table layout completely into header and footer
Sascha Teichmann <teichmann@intevation.de>
parents: 484
diff changeset
132 </div>
452
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
133
483
28aa6ac933fb sawmill: moved wald's table layout into common header and footer
Sascha Teichmann <teichmann@intevation.de>
parents: 482
diff changeset
134 <%@include file="footer.inc" %>
452
333232953771 Initial check-in of sawmill a simple mod_python based
Sascha Teichmann <teichmann@intevation.de>
parents:
diff changeset
135 </html>
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)