def releases(self):
return self.handler.releases
+ @property
+ def geoip(self):
+ return self.handler.geoip
-class MenuModule(UIModule):
- def render(self):
- hostname = self.request.host.lower().split(':')[0]
-
- menuitems = []
- for m in backend.Menu().get(hostname):
- m.active = False
-
- if m.uri and self.request.uri.endswith(m.uri):
- m.active = True
-
- # Translate the description of the link
- m.description = \
- self.locale.translate(m.description)
- m.description = tornado.escape.xhtml_escape(m.description)
+ @property
+ def news(self):
+ return self.handler.news
- menuitems.append(m)
- return self.render_string("modules/menu.html", menuitems=menuitems)
+class MenuModule(UIModule):
+ def render(self):
+ return self.render_string("modules/menu.html")
class NewsItemModule(UIModule):
_ = self.locale.translate
return _("Unknown author")
- def render(self, item, uncut=False):
+ def render(self, item, uncut=True, announcement=False, show_heading=True):
# Get author
item.author = self.get_author(item.author_id)
item.text = text
- return self.render_string("modules/news-item.html", item=item, uncut=uncut)
+ return self.render_string("modules/news-item.html", item=item,
+ uncut=uncut, announcement=announcement, show_heading=show_heading)
-class NewsLineModule(NewsItemModule):
+class NewsLineModule(UIModule):
def render(self, item):
return self.render_string("modules/news-line.html", item=item)
+class NewsTableModule(UIModule):
+ def render(self, news):
+ return self.render_string("modules/news-table.html", news=news)
+
+
+class NewsYearNavigationModule(UIModule):
+ def render(self, active=None):
+ try:
+ active = int(active)
+ except:
+ active = None
+
+ return self.render_string("modules/news-year-nav.html",
+ active=active, years=self.news.years)
+
+
class MirrorItemModule(UIModule):
def render(self, item):
return self.render_string("modules/mirror-item.html", item=item)
class ReleaseItemModule(UIModule):
- def render(self, item):
- return self.render_string("modules/release-item.html", release=item)
+ def render(self, release, latest=False):
+ files = {
+ "i586" : [],
+ "arm" : [],
+ }
+
+ for file in release.files:
+ try:
+ files[file.arch].append(file)
+ except KeyError:
+ pass
+
+ return self.render_string("modules/release-item.html",
+ release=release, latest=latest, files=files)
class SidebarBannerModule(UIModule):
return self.render_string("modules/sidebar-banner.html", item=item)
+class DownloadButtonModule(UIModule):
+ def render(self, release, text="Download now!"):
+ best_image = None
+
+ for file in release.files:
+ if file.type == "iso":
+ best_image = file
+ break
+
+ # Show nothing when there was no image found.
+ if not best_image:
+ return ""
+
+ return self.render_string("modules/download-button.html",
+ release=release, image=best_image)
+
+
class PlanetEntryModule(UIModule):
- def render(self, entry, short=False):
+ def render(self, entry, show_avatar=True):
return self.render_string("modules/planet-entry.html",
- entry=entry, short=short)
+ entry=entry, show_avatar=show_avatar)
class TrackerPeerListModule(UIModule):
class StasyTableModule(UIModule):
+ def _make_percentages(self, items):
+ total = sum(items.values())
+
+ for k in items.keys():
+ items[k] *= 100
+ items[k] /= total
+
+ return items
+
def render(self, items, sortby="key", reverse=False, percentage=False, flags=False, locale=False):
hundred_percent = 0
for v in items.values():
locales = tornado.locale.LOCALE_NAMES
_items = []
for k, v in items:
- for code, locale in locales.items():
- if code.startswith(k):
- k = locale["name"].split()[0]
+ if k:
+ for code, locale in locales.items():
+ if code.startswith(k):
+ k = locale["name"].split()[0]
_items.append((k, v))
items = _items
return self.render_string("modules/stasy-table.html", items=items, flags=flags)
+class StasyCPUCoreTableModule(StasyTableModule):
+ def render(self, items):
+ items = self._make_percentages(items)
+
+ items = items.items()
+ items.sort()
+
+ return self.render_string("modules/stasy-table.html", items=items,
+ flags=None #XXX
+ )
+
+
class StasyDeviceTableModule(UIModule):
def render(self, devices):
groups = {}
return self.render_string("modules/stasy-table-devices.html",
groups=groups.items())
+
+
+class StasyGeoTableModule(UIModule):
+ def render(self, items):
+ _ = self.locale.translate
+
+ # Sort all items by value
+ items = sorted(items.items(), key=operator.itemgetter(1), reverse=True)
+
+ countries = []
+ for code, value in items:
+ country = tornado.database.Row({
+ "code" : code.lower(),
+ "name" : _(self.geoip.get_country_name(code)),
+ "value" : value * 100,
+ })
+ countries.append(country)
+
+ return self.render_string("modules/stasy-table-geo.html", countries=countries)
+
+
+class MirrorsTableModule(UIModule):
+ def render(self, mirrors):
+ return self.render_string("modules/mirrors-table.html", mirrors=mirrors)
+
+
+class WishlistModule(UIModule):
+ def render(self, wishes, short=False):
+ return self.render_string("wishlist/modules/wishlist.html",
+ wishes=wishes, short=short)
+
+
+class WishModule(UIModule):
+ def render(self, wish, short=False):
+ progress_bar = "progress-success"
+
+ if wish.percentage >= 90:
+ progress_bar = "progress-danger"
+ elif wish.percentage >= 50:
+ progress_bar = "progress-warning"
+
+ return self.render_string("wishlist/modules/wish.html",
+ wish=wish, short=short, progress_bar=progress_bar)
+
+
+class DonationBoxModule(UIModule):
+ def render(self):
+ return self.render_string("modules/donation-box.html")