]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blame - www/webapp/ui_modules.py
Import of new website.
[people/shoehn/ipfire.org.git] / www / webapp / ui_modules.py
CommitLineData
81675874 1#!/usr/bin/python
2
940227cb
MT
3import logging
4import socket
5import textile
6import tornado.escape
feb02477 7import tornado.web
81675874 8
feb02477 9from tornado.database import Row
2c055a8e 10
940227cb
MT
11import backend
12
81675874 13class UIModule(tornado.web.UIModule):
940227cb
MT
14 @property
15 def accounts(self):
16 return self.handler.accounts
81675874 17
d0d074e0 18 @property
940227cb
MT
19 def banners(self):
20 return self.handler.banners
d0d074e0 21
940227cb
MT
22 @property
23 def releases(self):
24 return self.handler.releases
81675874 25
5a1018ab 26
940227cb
MT
27class MenuModule(UIModule):
28 def render(self):
29 hostname = self.request.host.lower().split(':')[0]
5a1018ab 30
940227cb
MT
31 menuitems = []
32 for m in backend.Menu().get(hostname):
33 m.active = False
5a1018ab 34
940227cb
MT
35 if m.uri and self.request.uri.endswith(m.uri):
36 m.active = True
81675874 37
940227cb
MT
38 # Translate the description of the link
39 m.description = \
40 self.locale.translate(m.description)
41 m.description = tornado.escape.xhtml_escape(m.description)
81675874 42
940227cb 43 menuitems.append(m)
d0d074e0 44
940227cb 45 return self.render_string("modules/menu.html", menuitems=menuitems)
81675874 46
47
48class NewsItemModule(UIModule):
940227cb
MT
49 def get_author(self, author):
50 # Get name of author
51 author = self.accounts.find(author)
52 if author:
53 return author.cn
54 else:
55 _ = self.locale.translate
56 return _("Unknown author")
57
58 def render(self, item, uncut=False):
59 # Get author
60 item.author = self.get_author(item.author_id)
81675874 61
940227cb
MT
62 if not uncut and len(item.text) >= 400:
63 item.text = item.text[:400] + "..."
81675874 64
940227cb
MT
65 # Render text
66 item.text = textile.textile(item.text)
81675874 67
940227cb
MT
68 return self.render_string("modules/news-item.html", item=item, uncut=uncut)
69
70
71class NewsLineModule(NewsItemModule):
72 def render(self, item):
73 return self.render_string("modules/news-line.html", item=item)
74
75
76class MirrorItemModule(UIModule):
77 def render(self, item):
78 return self.render_string("modules/mirror-item.html", item=item)
81675874 79
80
81class SidebarItemModule(UIModule):
82 def render(self):
83 return self.render_string("modules/sidebar-item.html")
84
85
86class SidebarReleaseModule(UIModule):
81675874 87 def render(self):
88 return self.render_string("modules/sidebar-release.html",
940227cb 89 latest=self.releases.get_latest())
81675874 90
91
92class ReleaseItemModule(UIModule):
93 def render(self, item):
940227cb 94 return self.render_string("modules/release-item.html", release=item)
81675874 95
96
97class SidebarBannerModule(UIModule):
940227cb
MT
98 def render(self, item=None):
99 if not item:
100 item = self.banners.get_random()
101
81675874 102 return self.render_string("modules/sidebar-banner.html", item=item)
103
104
940227cb
MT
105class PlanetEntryModule(UIModule):
106 def render(self, entry, short=False):
107 return self.render_string("modules/planet-entry.html",
108 entry=entry, short=short)
d0d074e0
MT
109
110
940227cb
MT
111class TrackerPeerListModule(UIModule):
112 def render(self, peers, percentages=False):
113 # Guess country code and hostname of the host
114 for peer in peers:
115 country_code = backend.GeoIP().get_country(peer["ip"])
116 peer["country_code"] = country_code or "unknown"
d0d074e0 117
940227cb
MT
118 try:
119 peer["hostname"] = socket.gethostbyaddr(peer["ip"])[0]
120 except:
121 peer["hostname"] = ""
d0d074e0 122
940227cb
MT
123 return self.render_string("modules/tracker-peerlist.html",
124 peers=[Row(p) for p in peers], percentages=percentages)