]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blobdiff - www/webapp/ui_modules.py
wishlist: Update color of progress bars.
[people/shoehn/ipfire.org.git] / www / webapp / ui_modules.py
index ebbc19c3e4b3bec03a0a6a1be9b71b86de46e219..931a79facf32172d6eb0f3731351b1adba5e85f4 100644 (file)
@@ -21,6 +21,10 @@ class UIModule(tornado.web.UIModule):
        def accounts(self):
                return self.handler.accounts
 
+       @property
+       def advertisements(self):
+               return self.handler.advertisements
+
        @property
        def banners(self):
                return self.handler.banners
@@ -33,26 +37,32 @@ class UIModule(tornado.web.UIModule):
        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]
+       @property
+       def news(self):
+               return self.handler.news
 
-               menuitems = []
-               for m in backend.Menu().get(hostname):
-                       m.active = False
 
-                       if m.uri and self.request.uri.endswith(m.uri):
-                               m.active = True
+class AdvertisementModule(UIModule):
+       def render(self, where):
+               assert where in ("download-splash",), where
 
-                       # Translate the description of the link
-                       m.description = \
-                               self.locale.translate(m.description)
-                       m.description = tornado.escape.xhtml_escape(m.description)
+               ad = self.advertisements.get(where)
+               if not ad:
+                       return ""
 
-                       menuitems.append(m)
+               # Mark that advert has been shown.
+               ad.update_impressions()
 
-               return self.render_string("modules/menu.html", menuitems=menuitems)
+               return self.render_string("modules/ads/%s.html" % where, ad=ad)
+
+
+class MenuModule(UIModule):
+       def render(self):
+               return self.render_string("modules/menu.html")
 
 
 class NewsItemModule(UIModule):
@@ -65,7 +75,7 @@ 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)
 
@@ -82,14 +92,31 @@ class NewsItemModule(UIModule):
 
                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)
@@ -107,8 +134,20 @@ class SidebarReleaseModule(UIModule):
 
 
 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):
@@ -119,10 +158,27 @@ 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):
@@ -142,6 +198,15 @@ 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():
@@ -180,15 +245,28 @@ class StasyTableModule(UIModule):
                        locales = tornado.locale.LOCALE_NAMES
                        _items = []
                        for k, v in items:
-                               for code, locale in locales.items():
-                                       if code.startswith(k):
-                                               k = locale["name"]
+                               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 = {}
@@ -201,3 +279,53 @@ class StasyDeviceTableModule(UIModule):
                
                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-warning"
+
+               if wish.percentage >= 100:
+                       progress_bar = "progress-success"
+
+               return self.render_string("wishlist/modules/wish.html",
+                       wish=wish, short=short, progress_bar=progress_bar)
+
+
+class DonationBoxModule(UIModule):
+       def render(self, reason_for_transfer=None):
+               if reason_for_transfer:
+                       reason_for_transfer = "IPFire.org - %s" % reason_for_transfer
+
+               return self.render_string("modules/donation-box.html",
+                       reason_for_transfer=reason_for_transfer)