src/web/handlers_fireinfo.py \
src/web/handlers_iuse.py \
src/web/handlers_mirrors.py \
- src/web/handlers_news.py \
src/web/handlers_nopaste.py \
src/web/handlers_rss.py \
src/web/handlers_talk.py \
+++ /dev/null
-<div class="row">
- <div class="col-lg-12 col-md-12">
- {% if show_heading %}
- <h2>
- {% if announcement %}
- {{ _("Announcement") }}:
- {% end %}
- <a href="https://www.ipfire.org/news/{{ item.slug }}">{{ item.title }}</a>
- </h2>
- {% end %}
-
- {% raw item.text %}
-
- <hr>
-
- {% if release %}
- <div class="btn-toolbar ac">
- <a class="btn btn-primary btn-lg" href="//downloads.ipfire.org/release/{{ release.sname }}">
- <span class="fa fa-download"></span> {{ _("Download %s") % escape(release.name) }}<br>
- </a>
-
- <a class="btn btn-success btn-lg" href="//www.ipfire.org/donate">
- {{ _("Donate!") }}
- </a>
- </div>
-
- <br>
- {% end %}
-
- <p class="text-muted ac">
- {{ _("Published by %(author)s, %(time)s") % { "author" : item.author, "time" : locale.format_date(item.published, full_format=True) } }}
- </p>
- </div>
-</div>
+++ /dev/null
-<a href="/news/{{ item.slug }}">{{ item.title }}</a> ({{ locale.format_date(item.date, full_format=False, shorter=True) }})
+++ /dev/null
-<div class="post">
- <a name="{{ item.slug }}"></a>
- <h3>
- <a href="/news/{{ item.slug }}">{{ item.title }}</a>
- </h3>
- <div class="post_info">{{ item.date }} {{ _("by") }} {{ item.author }}</div>
- {{ item.text }}
-</div>
-
+++ /dev/null
-<ul class="list-unstyled">
- {% for n in news %}
- <li>
- <a href="/news/{{ n.slug }}"><strong>{{ n.title }}</strong></a>
- <br>
- {{ locale.format_date(n.published, shorter=True) }}
- <br>
- </li>
- {% end %}
-</ul>
+++ /dev/null
-<ul class="nav nav-pills">
- <li class="disabled">
- <a href="#">{{ _("Jump to") }}</a>
- </li>
- <li {% if active is None %}class="active"{% end %}>
- <a href="/news">{{ _("Most recent") }}</a>
- </li>
-
- {% for y in years %}
- <li {% if active == y %}class="active"{% end %}>
- <a href="/news/year/{{ y }}">{{ y }}</a>
- </li>
- {% end %}
-</ul>
+++ /dev/null
-{% extends "base-1.html" %}
-
-{% block title %}{{ item.title }}{% end block %}
-
-{% block body %}
- <div class="page-header">
- <h1>{{ item.title }}</h1>
- </div>
-
- {% module NewsItem(item, show_heading=False) %}
-{% end block %}
+++ /dev/null
-{% extends "base-1.html" %}
-
-{% block title %}{{ _("News") }}{% end block %}
-
-{% block body %}
- <div class="page-header">
- <h1>{{ _("News from %(year)s") % { "year" : selected_year } }}</h1>
- </div>
-
- {% module NewsYearNavigation(selected_year) %}
-
- <hr>
-
- {% module NewsTable(news) %}
-{% end block %}
+++ /dev/null
-{% extends "base-1.html" %}
-
-{% block title %}{{ _("News") }}{% end block %}
-
-{% block body %}
- <div class="page-header">
- <h1>{{ _("What is new on the IPFire project?") }}</h1>
- </div>
-
- <div class="row">
- <div class="col-lg-6 col-md-6">
- <p>
- On these pages, you will find all the news announcements
- that have been released.
- </p>
- <p>
- Use the navigation bar on the bottom to jump to
- a certain year.
- </p>
- </div>
-
- <div class="col-lg-3 col-md-3">
- <h4>{{ _("Stay up to date") }}</h4>
-
- <p>
- You can get the latest IPFire news directly to
- your mailbox by subscribing to the
- <a href="https://lists.ipfire.org/mailman/listinfo/ipfire-announce">ipfire-announce</a>
- mailing list.
- </p>
- <p>
- There is also an <a href="/news.rss">RSS feed</a> available.
- </p>
- </div>
-
- <div class="col-lg-3 col-md-3">
- <h4>{{ _("IPFire Planet") }}</h4>
-
- <p>
- The <em>IPFire planet</em> is the blog of the IPFire developers.
- </p>
- <p>
- They write about intesting stuff all around the project.
- </p>
- </div>
- </div>
-
- <hr>
-
- <div class="row">
- <div class="col-lg-6 col-md-6 col-lg-offset-3">
- <h3>{{ _("Latest news") }}</h3>
- {% module NewsTable(news) %}
- </div>
- </div>
-
- <hr>
-
- {% module NewsYearNavigation() %}
-{% end block %}
"NetBootMenuConfig" : NetBootMenuConfigModule,
"NetBootMenuHeader" : NetBootMenuHeaderModule,
"NetBootMenuSeparator" : NetBootMenuSeparatorModule,
- "NewsItem" : NewsItemModule,
- "NewsLine" : NewsLineModule,
- "NewsTable" : NewsTableModule,
- "NewsYearNavigation" : NewsYearNavigationModule,
"ProgressBar" : ProgressBarModule,
"ReleaseItem" : ReleaseItemModule,
"SidebarBanner" : SidebarBannerModule,
# Entry site that lead the user to index
(r"/", IndexHandler),
- # Handle news items
- (r"/news", NewsIndexHandler),
- (r"/news/year/([0-9]*)", NewsYearHandler),
- (r"/news/(.*)", NewsItemHandler),
-
# Download sites
(r"/download", DownloadHandler),
(r"/downloads", tornado.web.RedirectHandler, { "url" : "/download" }),
(r"/donation", tornado.web.RedirectHandler, { "url" : "/donate" }),
# RSS feed
- (r"/news.rss", RSSNewsHandler),
+ (r"/news.rss", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/feed.rss" }),
+
+ # Redirect news articles to blog
+ (r"/news/(.*)", tornado.web.RedirectHandler, { "url" : "https://blog.ipfire.org/posts/{1}" }),
# Static Pages
(r"/artwork", StaticHandler, { "template" : "artwork.html" }),
from handlers_fireinfo import *
from handlers_iuse import *
from handlers_mirrors import *
-from handlers_news import *
from handlers_nopaste import *
-from handlers_planet import *
from handlers_rss import *
from handlers_talk import *
+++ /dev/null
-#!/usr/bin/python
-
-import tornado.web
-
-from handlers_base import *
-
-class NewsIndexHandler(BaseHandler):
- rss_url = "/news.rss"
-
- """
- This handler fetches the content that is show on the news portal.
- """
- def get(self):
- news = self.news.get_latest(limit=5, locale=self.locale)
-
- return self.render("news.html", news=news)
-
-
-class NewsYearHandler(NewsIndexHandler):
- def get(self, year):
- news = self.news.get_by_year(year, locale=self.locale)
-
- return self.render("news-year.html", news=news, selected_year=year)
-
-
-class NewsItemHandler(BaseHandler):
- rss_url = "/news.rss"
-
- """
- This handler displays a whole page full of a single news item.
- """
- def get(self, slug):
- news = self.news.get_by_slug(slug, locale=self.locale)
- if not news:
- raise tornado.web.HTTPError(404)
-
- # Find the name of the author
- author = self.get_account(news.author_id)
- if author:
- news.author = author.name
- else:
- _ = self.locale.translate
- news.author = _("Unknown author")
-
- return self.render("news-item.html", item=news)
def geoip(self):
return self.handler.geoip
- @property
- def news(self):
- return self.handler.news
-
@property
def talk(self):
return self.handler.talk
return self.render_string("netboot/menu-separator.cfg")
-class NewsItemModule(UIModule):
- def get_author(self, author):
- # Get name of author
- author = self.accounts.find(author)
- if author:
- return author.name
- else:
- _ = self.locale.translate
- return _("Unknown author")
-
- def render(self, item, uncut=True, announcement=False, show_heading=True):
- # Get author
- item.author = self.get_author(item.author_id)
-
- if not uncut and len(item.text) >= 400:
- item.text = item.text[:400] + "..."
-
- # Render text
- item.text = textile.textile(item.text.decode("utf8"))
-
- # 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)
-
-
-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 SidebarItemModule(UIModule):
def render(self):
return self.render_string("modules/sidebar-item.html")