]> git.ipfire.org Git - people/shoehn/ipfire.org.git/blobdiff - webapp/ui_modules.py
adjust touch target on mobile Feature page
[people/shoehn/ipfire.org.git] / webapp / ui_modules.py
index b85fac47fcd6b6e91908a65e009fe5f7129818ad..d70d1324cfba96ec65437d0cb631a7235e994032 100644 (file)
@@ -48,6 +48,10 @@ class UIModule(tornado.web.UIModule):
        def planet(self):
                return self.handler.planet
 
+       @property
+       def talk(self):
+               return self.handler.talk
+
        @property
        def wishlist(self):
                return self.handler.wishlist
@@ -174,18 +178,19 @@ class MirrorsTableModule(UIModule):
 
 
 class NetBootMenuConfigModule(UIModule):
-       def render(self, release):
-               return self.render_string("netboot/menu-config.cfg", release=release)
+       def render(self, release, arch=None, platform=None):
+               return self.render_string("netboot/menu-config.cfg", release=release,
+                       arch=arch, platform=platform)
 
 
 class NetBootMenuHeaderModule(UIModule):
-       def render(self, title, releases):
+       def render(self, title, releases, arch=None, platform=None):
                id = unicodedata.normalize("NFKD", unicode(title)).encode("ascii", "ignore")
                id = re.sub(r"[^\w]+", " ", id)
                id = "-".join(id.lower().strip().split())
 
                return self.render_string("netboot/menu-header.cfg", id=id,
-                       title=title, releases=releases)
+                       title=title, releases=releases, arch=arch, platform=platform)
 
 
 class NetBootMenuSeparatorModule(UIModule):
@@ -213,7 +218,10 @@ class NewsItemModule(UIModule):
                # Render text
                item.text = textile.textile(item.text.decode("utf8"))
 
-               return self.render_string("modules/news-item.html", item=item,
+               # Find a release if one exists
+               release = self.releases.get_by_news_id(item.uuid)
+
+               return self.render_string("modules/news-item.html", item=item, release=release,
                        uncut=uncut, announcement=announcement, show_heading=show_heading)
 
 
@@ -240,10 +248,7 @@ class NewsYearNavigationModule(UIModule):
 
 class PlanetSearchBoxModule(UIModule):
        def render(self, query=None):
-               years = self.planet.get_years()
-
-               return self.render_string("modules/planet/search-box.html",
-                       query=query, years=years)
+               return self.render_string("modules/planet/search-box.html", query=query)
 
 
 class SidebarItemModule(UIModule):
@@ -259,10 +264,10 @@ class SidebarReleaseModule(UIModule):
 
 class ReleaseItemModule(UIModule):
        def render(self, release, latest=False):
-               arches = ("i586", "arm")
+               arches = ("x86_64", "i586", "arm")
 
                downloads = []
-               for arch in ("i586", "arm"):
+               for arch in arches:
                        files = []
 
                        for file in release.files:
@@ -291,7 +296,8 @@ class DownloadButtonModule(UIModule):
                best_image = None
 
                for file in release.files:
-                       if file.type == "iso":
+                       if (release.sname < "ipfire-2.19-core100" or file.arch == "x86_64") \
+                                       and file.type == "iso":
                                best_image = file
                                break
 
@@ -303,6 +309,11 @@ class DownloadButtonModule(UIModule):
                        release=release, image=best_image)
 
 
+class PlanetAuthorBoxModule(UIModule):
+       def render(self, author):
+               return self.render_string("planet/modules/author-box.html", author=author)
+
+
 class PlanetEntryModule(UIModule):
        def render(self, entry, show_avatar=True):
                return self.render_string("modules/planet-entry.html",
@@ -318,13 +329,45 @@ class ProgressBarModule(UIModule):
 
 
 class TalkCallLogModule(UIModule):
-       def render(self, calls):
-               return self.render_string("talk/modules/call-log.html", calls=calls)
+       def render(self, account=None, viewer=None):
+               if (account is None or not self.current_user == account) \
+                               and not self.current_user.is_admin():
+                       raise RuntimeException("Insufficient permissions")
+
+               if viewer is None:
+                       viewer = self.current_user
+
+               calls = self.talk.get_call_log(account)
+
+               return self.render_string("talk/modules/call-log.html",
+                       calls=calls, viewer=viewer)
+
+
+class TalkLinesModule(UIModule):
+       def render(self, account=None, show_account=False):
+               if (account is None or not self.current_user == account) \
+                               and not self.current_user.is_admin():
+                       raise RuntimeException("Insufficient permissions")
+
+               lines = self.talk.get_lines(account)
+
+               return self.render_string("talk/modules/lines.html",
+                       show_account=show_account, lines=lines)
 
 
 class TalkOngoingCallsModule(UIModule):
-       def render(self, calls):
-               return self.render_string("talk/modules/ongoing-calls.html", calls=calls)
+       def render(self, account=None):
+               if (account is None or not self.current_user == account) \
+                               and not self.current_user.is_admin():
+                       raise RuntimeException("Insufficient permissions")
+
+               calls = self.talk.get_ongoing_calls(account)
+
+               if calls:
+                       return self.render_string("talk/modules/ongoing-calls.html",
+                               calls=calls)
+
+               return ""
 
 
 class TrackerPeerListModule(UIModule):
@@ -379,6 +422,42 @@ class DonationBoxModule(UIModule):
 
 
 class DonationButtonModule(UIModule):
+       # https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/
+       COUNTRIES = (
+               "AU",
+               "AT",
+               "BE",
+               "BR",
+               "CA",
+               "CH",
+               "CN",
+               "DE",
+               "ES",
+               "GB",
+               "FR",
+               "IT",
+               "NL",
+               "PL",
+               "PT",
+               "RU",
+               "US",
+       )
+
+       LOCALES = (
+               "da_DK",
+               "he_IL",
+               "id_ID",
+               "ja_JP",
+               "no_NO",
+               "pt_BR",
+               "ru_RU",
+               "sv_SE",
+               "th_TH",
+               "zh_CN",
+               "zh_HK",
+               "zh_TW",
+       )
+
        def render(self, reason_for_transfer=None, currency="EUR"):
                if not reason_for_transfer:
                        reason_for_transfer = "IPFire.org"
@@ -386,4 +465,38 @@ class DonationButtonModule(UIModule):
                primary = (currency == "EUR")
 
                return self.render_string("modules/donation-button.html", primary=primary,
-                       reason_for_transfer=reason_for_transfer, currency=currency)
+                       reason_for_transfer=reason_for_transfer, currency=currency, lc=self.lc)
+
+       @property
+       def lc(self):
+               """
+                       Returns the locale of the user
+               """
+               try:
+                       locale, delimiter, encoding = self.locale.code.partition(".")
+
+                       # Break for languages in specific countries
+                       if locale in self.LOCALES:
+                               return locale
+
+                       lang, delimiter, country_code = locale.partition("_")
+
+                       if country_code and country_code in self.COUNTRIES:
+                               return country_code
+
+                       lang = lang.upper()
+                       if lang in self.COUNTRIES:
+                               return lang
+               except:
+                       pass
+
+               # If anything goes wrong, fall back to GB
+               return "GB"
+
+
+class DonationInputBoxModule(DonationButtonModule):
+       def render(self):
+               currencies = ("EUR", "USD", "GBP", "CHF", "AUD", "NZD", "CAD")
+
+               return self.render_string("modules/donation-input-box.html",
+                       currencies=currencies, lc=self.lc)