]>
git.ipfire.org Git - ipfire.org.git/blob - www/webapp/ui_modules.py
3 from __future__
import division
12 from tornado
.database
import Row
17 class UIModule(tornado
.web
.UIModule
):
20 return self
.handler
.accounts
24 return self
.handler
.banners
28 return self
.handler
.releases
31 class MenuModule(UIModule
):
33 hostname
= self
.request
.host
.lower().split(':')[0]
36 for m
in backend
.Menu().get(hostname
):
39 if m
.uri
and self
.request
.uri
.endswith(m
.uri
):
42 # Translate the description of the link
44 self
.locale
.translate(m
.description
)
45 m
.description
= tornado
.escape
.xhtml_escape(m
.description
)
49 return self
.render_string("modules/menu.html", menuitems
=menuitems
)
52 class NewsItemModule(UIModule
):
53 def get_author(self
, author
):
55 author
= self
.accounts
.find(author
)
59 _
= self
.locale
.translate
60 return _("Unknown author")
62 def render(self
, item
, uncut
=False):
64 item
.author
= self
.get_author(item
.author_id
)
66 if not uncut
and len(item
.text
) >= 400:
67 item
.text
= item
.text
[:400] + "..."
70 item
.text
= textile
.textile(item
.text
)
72 return self
.render_string("modules/news-item.html", item
=item
, uncut
=uncut
)
75 class NewsLineModule(NewsItemModule
):
76 def render(self
, item
):
77 return self
.render_string("modules/news-line.html", item
=item
)
80 class MirrorItemModule(UIModule
):
81 def render(self
, item
):
82 return self
.render_string("modules/mirror-item.html", item
=item
)
85 class SidebarItemModule(UIModule
):
87 return self
.render_string("modules/sidebar-item.html")
90 class SidebarReleaseModule(UIModule
):
92 return self
.render_string("modules/sidebar-release.html",
93 latest
=self
.releases
.get_latest())
96 class ReleaseItemModule(UIModule
):
97 def render(self
, item
):
98 return self
.render_string("modules/release-item.html", release
=item
)
101 class SidebarBannerModule(UIModule
):
102 def render(self
, item
=None):
104 item
= self
.banners
.get_random()
106 return self
.render_string("modules/sidebar-banner.html", item
=item
)
109 class PlanetEntryModule(UIModule
):
110 def render(self
, entry
, short
=False):
111 return self
.render_string("modules/planet-entry.html",
112 entry
=entry
, short
=short
)
115 class TrackerPeerListModule(UIModule
):
116 def render(self
, peers
, percentages
=False):
117 # Guess country code and hostname of the host
119 country_code
= backend
.GeoIP().get_country(peer
["ip"])
120 peer
["country_code"] = country_code
or "unknown"
123 peer
["hostname"] = socket
.gethostbyaddr(peer
["ip"])[0]
125 peer
["hostname"] = ""
127 return self
.render_string("modules/tracker-peerlist.html",
128 peers
=[Row(p
) for p
in peers
], percentages
=percentages
)
131 class StasyTableModule(UIModule
):
132 def render(self
, items
, sortby
="key", reverse
=False):
134 for v
in items
.values():
139 keys
= sorted(items
.keys(), reverse
=reverse
)
140 elif sortby
== "percentage":
141 keys
= [k
for k
,v
in sorted(items
.items(), key
=operator
.itemgetter(1))]
143 keys
= reversed(keys
)
145 raise Exception, "Unknown sortby parameter was provided"
150 v
= items
[k
] * 100 / hundred_percent
151 _items
.append((k
, v
))
154 return self
.render_string("modules/stasy-table.html", items
=items
)
157 class StasyDeviceTableModule(UIModule
):
158 def render(self
, devices
):
161 for device
in devices
:
162 if not groups
.has_key(device
.cls
):
163 groups
[device
.cls
] = []
165 groups
[device
.cls
].append(device
)
167 return self
.render_string("modules/stasy-table-devices.html",
168 groups
=groups
.items())