]>
git.ipfire.org Git - people/shoehn/ipfire.org.git/blob - www/webapp/ui_modules.py
3 from __future__
import division
14 from tornado
.database
import Row
19 class UIModule(tornado
.web
.UIModule
):
22 return self
.handler
.accounts
26 return self
.handler
.banners
30 return self
.handler
.memcached
34 return self
.handler
.releases
37 class MenuModule(UIModule
):
39 hostname
= self
.request
.host
.lower().split(':')[0]
42 for m
in backend
.Menu().get(hostname
):
45 if m
.uri
and self
.request
.uri
.endswith(m
.uri
):
48 # Translate the description of the link
50 self
.locale
.translate(m
.description
)
51 m
.description
= tornado
.escape
.xhtml_escape(m
.description
)
55 return self
.render_string("modules/menu.html", menuitems
=menuitems
)
58 class NewsItemModule(UIModule
):
59 def get_author(self
, author
):
61 author
= self
.accounts
.find(author
)
65 _
= self
.locale
.translate
66 return _("Unknown author")
68 def render(self
, item
, uncut
=False):
70 item
.author
= self
.get_author(item
.author_id
)
72 if not uncut
and len(item
.text
) >= 400:
73 item
.text
= item
.text
[:400] + "..."
76 text_id
= "news-%s" % hashlib
.md5(item
.text
.encode("utf-8")).hexdigest()
78 text
= self
.memcached
.get(text_id
)
80 text
= textile
.textile(item
.text
)
81 self
.memcached
.set(text_id
, text
, 60)
85 return self
.render_string("modules/news-item.html", item
=item
, uncut
=uncut
)
88 class NewsLineModule(NewsItemModule
):
89 def render(self
, item
):
90 return self
.render_string("modules/news-line.html", item
=item
)
93 class MirrorItemModule(UIModule
):
94 def render(self
, item
):
95 return self
.render_string("modules/mirror-item.html", item
=item
)
98 class SidebarItemModule(UIModule
):
100 return self
.render_string("modules/sidebar-item.html")
103 class SidebarReleaseModule(UIModule
):
105 return self
.render_string("modules/sidebar-release.html",
106 latest
=self
.releases
.get_latest())
109 class ReleaseItemModule(UIModule
):
110 def render(self
, item
):
111 return self
.render_string("modules/release-item.html", release
=item
)
114 class SidebarBannerModule(UIModule
):
115 def render(self
, item
=None):
117 item
= self
.banners
.get_random()
119 return self
.render_string("modules/sidebar-banner.html", item
=item
)
122 class PlanetEntryModule(UIModule
):
123 def render(self
, entry
, short
=False):
124 return self
.render_string("modules/planet-entry.html",
125 entry
=entry
, short
=short
)
128 class TrackerPeerListModule(UIModule
):
129 def render(self
, peers
, percentages
=False):
130 # Guess country code and hostname of the host
132 country_code
= backend
.GeoIP().get_country(peer
["ip"])
133 peer
["country_code"] = country_code
or "unknown"
136 peer
["hostname"] = socket
.gethostbyaddr(peer
["ip"])[0]
138 peer
["hostname"] = ""
140 return self
.render_string("modules/tracker-peerlist.html",
141 peers
=[Row(p
) for p
in peers
], percentages
=percentages
)
144 class StasyTableModule(UIModule
):
145 def render(self
, items
, sortby
="key", reverse
=False, percentage
=False, flags
=False, locale
=False):
147 for v
in items
.values():
152 keys
= sorted(items
.keys(), reverse
=reverse
)
153 elif sortby
== "percentage":
154 keys
= [k
for k
,v
in sorted(items
.items(), key
=operator
.itemgetter(1))]
156 keys
= reversed(keys
)
158 raise Exception, "Unknown sortby parameter was provided"
164 v
= items
[k
] * 100 / hundred_percent
167 _items
.append((k
, v
))
170 if items
and type(items
[0][0]) == type(()) :
171 _
= self
.locale
.translate
174 k
= _("%s to %s") % k
175 _items
.append((k
, v
))
180 locales
= tornado
.locale
.LOCALE_NAMES
183 for code
, locale
in locales
.items():
184 if code
.startswith(k
):
185 k
= locale
["name"].split()[0]
186 _items
.append((k
, v
))
189 return self
.render_string("modules/stasy-table.html", items
=items
, flags
=flags
)
192 class StasyDeviceTableModule(UIModule
):
193 def render(self
, devices
):
196 for device
in devices
:
197 if not groups
.has_key(device
.cls
):
198 groups
[device
.cls
] = []
200 groups
[device
.cls
].append(device
)
202 return self
.render_string("modules/stasy-table-devices.html",
203 groups
=groups
.items())