]>
git.ipfire.org Git - people/shoehn/ipfire.org.git/blob - www/webapp/ui_modules.py
0ed5ccf31448ee1218f431d5126c3619fba205f7
9 from tornado
.database
import Row
13 class UIModule(tornado
.web
.UIModule
):
16 return self
.handler
.accounts
20 return self
.handler
.banners
24 return self
.handler
.releases
27 class MenuModule(UIModule
):
29 hostname
= self
.request
.host
.lower().split(':')[0]
32 for m
in backend
.Menu().get(hostname
):
35 if m
.uri
and self
.request
.uri
.endswith(m
.uri
):
38 # Translate the description of the link
40 self
.locale
.translate(m
.description
)
41 m
.description
= tornado
.escape
.xhtml_escape(m
.description
)
45 return self
.render_string("modules/menu.html", menuitems
=menuitems
)
48 class NewsItemModule(UIModule
):
49 def get_author(self
, author
):
51 author
= self
.accounts
.find(author
)
55 _
= self
.locale
.translate
56 return _("Unknown author")
58 def render(self
, item
, uncut
=False):
60 item
.author
= self
.get_author(item
.author_id
)
62 if not uncut
and len(item
.text
) >= 400:
63 item
.text
= item
.text
[:400] + "..."
66 item
.text
= textile
.textile(item
.text
)
68 return self
.render_string("modules/news-item.html", item
=item
, uncut
=uncut
)
71 class NewsLineModule(NewsItemModule
):
72 def render(self
, item
):
73 return self
.render_string("modules/news-line.html", item
=item
)
76 class MirrorItemModule(UIModule
):
77 def render(self
, item
):
78 return self
.render_string("modules/mirror-item.html", item
=item
)
81 class SidebarItemModule(UIModule
):
83 return self
.render_string("modules/sidebar-item.html")
86 class SidebarReleaseModule(UIModule
):
88 return self
.render_string("modules/sidebar-release.html",
89 latest
=self
.releases
.get_latest())
92 class ReleaseItemModule(UIModule
):
93 def render(self
, item
):
94 return self
.render_string("modules/release-item.html", release
=item
)
97 class SidebarBannerModule(UIModule
):
98 def render(self
, item
=None):
100 item
= self
.banners
.get_random()
102 return self
.render_string("modules/sidebar-banner.html", item
=item
)
105 class PlanetEntryModule(UIModule
):
106 def render(self
, entry
, short
=False):
107 return self
.render_string("modules/planet-entry.html",
108 entry
=entry
, short
=short
)
111 class TrackerPeerListModule(UIModule
):
112 def render(self
, peers
, percentages
=False):
113 # Guess country code and hostname of the host
115 country_code
= backend
.GeoIP().get_country(peer
["ip"])
116 peer
["country_code"] = country_code
or "unknown"
119 peer
["hostname"] = socket
.gethostbyaddr(peer
["ip"])[0]
121 peer
["hostname"] = ""
123 return self
.render_string("modules/tracker-peerlist.html",
124 peers
=[Row(p
) for p
in peers
], percentages
=percentages
)
127 class StasyTableModule(UIModule
):
128 def render(self
, items
):
130 for v
in items
.values():
135 for k
in sorted(items
.keys()):
136 v
= float(items
[k
] * 100) / hundred_percent
137 _items
.append((k
, v
))
142 return self
.render_string("modules/stasy-table.html", items
=items
)