← Back to team overview

widelands-dev team mailing list archive

[Merge] lp:~widelands-dev/widelands-website/news_rework into lp:widelands-website

 

kaputtnik has proposed merging lp:~widelands-dev/widelands-website/news_rework into lp:widelands-website.

Requested reviews:
  Widelands Developers (widelands-dev)
Related bugs:
  Bug #1640881 in Widelands Website: "News drafts show in news archive"
  https://bugs.launchpad.net/widelands-website/+bug/1640881

For more details, see:
https://code.launchpad.net/~widelands-dev/widelands-website/news_rework/+merge/311345

Rework of news archive.

- Fixes bug 1640881
- No changes for Mainpage
- For the Archive i used a table for each filter:
   - Archive shows all posts in the table
   - Archive year, shows posts for this year in a table
   - Archive month, shows posts for this month in a table
- Each of the list entries in this views shows an additional column 'Category' with a link to filter by category.
- Post detail view is shown if one clicks on the link of a post
- Some css changes which i think looks better, see https://bugs.launchpad.net/widelands-website/+bug/1640881/+attachment/4779672/+files/news_new_01.png
- Code cleanups
-- 
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands-website/news_rework into lp:widelands-website.
=== modified file 'media/css/base.css'
--- media/css/base.css	2016-07-18 17:07:44 +0000
+++ media/css/base.css	2016-11-20 12:13:26 +0000
@@ -451,3 +451,4 @@
 	clear: left;
 }
 
+

=== modified file 'media/css/news.css'
--- media/css/news.css	2012-05-16 22:31:25 +0000
+++ media/css/news.css	2016-11-20 12:13:26 +0000
@@ -0,0 +1,15 @@
+tbody > tr:hover {
+    background-color: rgba(83,83,83,0.2);
+}
+
+div.linksBox {
+    background-color: #332f29;
+	background-image: url("../img/but1.png");
+	border-radius: 4px;
+	border: 1px solid black;
+	padding: 0.2em;
+    padding-left: 0.5em;
+	margin-bottom: 1em;
+	box-shadow: 4px 4px 4px 0px rgba(0, 0, 0, 0.7);
+    display: inline-block;
+}

=== modified file 'news/managers.py'
--- news/managers.py	2016-02-29 23:14:56 +0000
+++ news/managers.py	2016-11-20 12:13:26 +0000
@@ -3,7 +3,10 @@
 
 
 class PublicManager(Manager):
-    """Returns published posts that are not in the future."""
-    
+    """Returns news posts that are:
+
+       - not in the future
+       - not published"""
+
     def published(self):
-        return self.get_queryset().filter(status__gte=2, publish__lte=datetime.datetime.now())
\ No newline at end of file
+        return self.get_queryset().exclude(status=1).filter(publish__lte=datetime.datetime.now())

=== modified file 'news/models.py'
--- news/models.py	2016-06-08 07:23:37 +0000
+++ news/models.py	2016-11-20 12:13:26 +0000
@@ -5,7 +5,7 @@
 from tagging.fields import TagField
 from news.managers import PublicManager
 from django.core.urlresolvers import reverse
-
+import datetime
 import settings
 if settings.USE_SPHINX:
     from djangosphinx.models import SphinxSearch
@@ -32,15 +32,11 @@
         db_table = 'news_categories'
         ordering = ('title',)
 
-    class Admin:
-        pass
-
     def __unicode__(self):
         return u'%s' % self.title
 
-    @permalink
     def get_absolute_url(self):
-        return ('news_category_detail', None, {'slug': self.slug})
+        return reverse('category_posts', args=(self.slug,))
 
 
 class Post(models.Model):
@@ -52,7 +48,7 @@
     title           = models.CharField(_('title'), max_length=200)
     slug            = models.SlugField(_('slug'), unique_for_date='publish')
     author          = models.ForeignKey(User, null=True)
-    body            = models.TextField(_('body'))
+    body            = models.TextField(_('body'), help_text="Text entered here will be rendered using Markdown")
     tease           = models.TextField(_('tease'), blank=True)
     status          = models.IntegerField(_('status'), choices=STATUS_CHOICES, default=2)
     allow_comments  = models.BooleanField(_('allow comments'), default=True)
@@ -79,11 +75,6 @@
         ordering  = ('-publish',)
         get_latest_by = 'publish'
 
-    class Admin:
-        list_display  = ('title', 'publish', 'status')
-        list_filter   = ('publish', 'categories', 'status')
-        search_fields = ('title', 'body')
-
     def __unicode__(self):
         return u'%s' % self.title
    
@@ -109,18 +100,21 @@
             return '' 
         return self.categories.all()[0].title
 
-    @permalink
     def get_absolute_url(self):
-        return ('news_detail', None, {
-            'slug': self.slug,
-            'year': self.publish.year,
-            'month': self.publish.strftime('%b'),
-            'day': self.publish.day,
-        })
-    
+        return reverse('news_detail', args=(self.publish.year, self.publish.strftime('%b'), self.publish.day, self.slug, ))
+
+    def get_category_slug(self):
+        try:
+            s = self.categories.all()[0].slug
+        except IndexError:
+            return 'none'
+        return s
+
     def get_previous_post(self):
+        # get_previous_by_FOO(**kwargs) is a django model function
         return self.get_previous_by_publish(status__gte=2)
     
     def get_next_post(self):
-        return self.get_next_by_publish(status__gte=2)
+        # get_next_by_FOO(**kwargs) is a django model function
+        return self.get_next_by_publish(status__gte=2, publish__lte=datetime.datetime.now())
 

=== modified file 'news/templatetags/news_extras.py'
--- news/templatetags/news_extras.py	2016-05-12 19:34:41 +0000
+++ news/templatetags/news_extras.py	2016-11-20 12:13:26 +0000
@@ -46,88 +46,3 @@
         raise template.TemplateSyntaxError, "%s tag had invalid arguments" % tag_name
     format_string, var_name = m.groups()
     return LatestPosts(format_string, var_name)
-
-class NewsYears(template.Node):
-    def __init__(self, var_name):
-        self.var_name = var_name
-
-    def render(self, context):
-        years = Post.objects.all().dates('publish', 'year')
-        context[self.var_name] = years
-        return ''
-
-@register.tag
-def get_news_years(parser, token):
-    """
-    Gets any number of latest posts and stores them in a varable.
-
-    Syntax::
-
-    {% get_latest_posts [limit] as [var_name] %}
-
-    Example usage::
-
-    {% get_latest_posts 10 as latest_post_list %}
-    """
-    try:
-        tag_name, arg = token.contents.split(None, 1)
-    except ValueError:
-        raise template.TemplateSyntaxError, "%s tag requires arguments" % token.contents.split()[0]
-    m = re.search(r'as (\w+)', arg)
-    if not m:
-        raise template.TemplateSyntaxError, "%s tag had invalid arguments" % tag_name
-    (var_name, ) = m.groups()
-    return NewsYears(var_name)
-
-class NewsCategories(template.Node):
-    def __init__(self, var_name):
-        self.var_name = var_name
-
-    def render(self, context):
-        categories = Category.objects.all()
-        context[self.var_name] = categories
-        return ''
-
-@register.tag
-def get_news_categories(parser, token):
-    """
-    Gets all news categories.
-
-    Syntax::
-
-        {% get_news_categories as [var_name] %}
-
-    Example usage::
-
-        {% get_news_categories as category_list %}
-    """
-    try:
-        tag_name, arg = token.contents.split(None, 1)
-    except ValueError:
-        raise template.TemplateSyntaxError, "%s tag requires arguments" % token.contents.split()[0]
-    m = re.search(r'as (\w+)', arg)
-    if not m:
-        raise template.TemplateSyntaxError, "%s tag had invalid arguments" % tag_name
-    var_name = m.groups()[0]
-    return NewsCategories(var_name)
-
-
-@register.filter
-def get_links(value):
-    """
-    Extracts links from a ``Post`` body and returns a list.
-
-    Template Syntax::
-
-        {{ post.body|markdown:"safe"|get_links }}
-
-    """
-    try:
-        from BeautifulSoup import BeautifulSoup
-        soup = BeautifulSoup(value)
-        return soup.findAll('a')
-    except ImportError:
-        if settings.DEBUG:
-            raise template.TemplateSyntaxError, "Error in 'get_links' filter: BeautifulSoup isn't installed."
-    return value
-

=== modified file 'news/urls.py'
--- news/urls.py	2016-06-04 14:17:40 +0000
+++ news/urls.py	2016-11-20 12:13:26 +0000
@@ -1,42 +1,25 @@
 from django.conf.urls import *
-from news.models import Post
-from django.views.generic.dates import DateDetailView, YearArchiveView, MonthArchiveView
 from django.views.generic import ListView
+from news.views import NewsList, YearNews, MonthNews, NewsDetail, CategoryView
 
 urlpatterns = [ 
      url(r'^(?P<year>[0-9]{4})/(?P<month>[-\w]+)/(?P<day>[0-9]+)/(?P<slug>[-\w]+)/$',
-        DateDetailView.as_view(model=Post, date_field="publish", template_name="news/post_detail.html"),
+        NewsDetail.as_view(),
         name='news_detail'),
 
-    #  url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})/$',
-    #      view=news_views.post_archive_day,
-    #      name='news_archive_day'),
-    # 
-    #  url(r'^(?P<year>\d{4})/(?P<month>\d{1,2})/$',
-    #      view=news_views.post_archive_month,
-    #      name='news_archive_month'),
-    # 
-      url(r'^(?P<year>\d{4})/(?P<month>[-\w]+)/$',
-          MonthArchiveView.as_view(model=Post, date_field="publish"),
+     url(r'^(?P<year>\d{4})/(?P<month>[-\w]+)/$',
+          MonthNews.as_view(),
           name='news_archive_month'),
 
-      url(r'^(?P<year>\d{4})/$',
-          YearArchiveView.as_view(model=Post, make_object_list=True, date_field="publish", template_name="post_archive_year.html"),
+     url(r'^(?P<year>\d{4})/$',
+          YearNews.as_view(),
           name='news_archive_year'),
-    # 
-    # # url(r'^categories/(?P<slug>[-\w]+)/$',
-    # #     view=news_views.category_detail,
-    # #     name='news_category_detail'),
-    # #
-    # # url (r'^categories/$',
-    # #     view=news_views.category_list,
-    # #     name='news_category_list'),
-    # 
-    # url(r'^page/(?P<page>\w)/$',
-    #     ListView.as_view(model=Post, template_name="news/post_list.html"),
-    #     name='news_index_paginated'),
+     
+     url(r'^category/(?P<slug>[-\w]+)/',
+          CategoryView.as_view(),
+          name='category_posts'),
      
      url(r'^$',
-         ListView.as_view(model=Post, template_name="news/post_list.html"),
+         NewsList.as_view(template_name = 'news/post_list.html'),
          name='news_index'),
 ]

=== added file 'news/views.py'
--- news/views.py	1970-01-01 00:00:00 +0000
+++ news/views.py	2016-11-20 12:13:26 +0000
@@ -0,0 +1,72 @@
+from django.shortcuts import get_object_or_404
+from news.models import Post, Category
+from django.views.generic import \
+    ListView, \
+    ArchiveIndexView, \
+    YearArchiveView, \
+    MonthArchiveView, \
+    DetailView
+import datetime
+
+
+class NewsList(ArchiveIndexView):
+
+    template_name = 'news/category_posts.html'
+    queryset = Post.objects.published()
+    date_field = 'publish'
+
+    def get_context_data(self, **kwargs):
+        # Call the base implementation first to get a context
+        context = super(NewsList, self).get_context_data(**kwargs)
+
+        context['categories'] = Category.objects.all()
+        return context
+        
+        
+class YearNews(YearArchiveView):
+
+    queryset = Post.objects.published()
+    template_name = 'news/post_archive_year.html'
+    date_field = 'publish'
+    make_object_list = True
+
+
+class MonthNews(MonthArchiveView):
+
+    queryset = Post.objects.published()
+    template_name = 'news/post_archive_month.html'
+    date_field = 'publish'
+
+
+class NewsDetail(DetailView):
+
+    queryset = Post.objects.published()
+    template_name = 'news/post_detail.html'
+
+
+class CategoryView(ListView):
+
+    template_name = 'news/category_posts.html'
+
+    def get_context_data(self, **kwargs):
+        # Call the base implementation first to get a context
+        context = super(CategoryView, self).get_context_data(**kwargs)
+        if self.kwargs['slug'] == 'none':
+            # Exemption for posts with no category
+            context['cur_category'] = 'None'
+        else:
+            context['cur_category'] = get_object_or_404(
+                Category, slug=self.kwargs['slug'])
+
+        context['categories'] = Category.objects.all()
+        return context
+
+    def get_queryset(self):
+        # Gather posts filtered by category
+        if self.kwargs['slug'] == 'none':
+            # Posts mustn't have a category
+            qs = Post.objects.published().filter(categories=None)
+        else:
+            qs = Post.objects.published().filter(
+                categories__slug=self.kwargs['slug'])
+        return qs

=== removed file 'news/views.py.delete'
--- news/views.py.delete	2016-03-02 21:02:38 +0000
+++ news/views.py.delete	1970-01-01 00:00:00 +0000
@@ -1,164 +0,0 @@
-from django.shortcuts import render_to_response, get_object_or_404
-from django.template import RequestContext
-from django.http import Http404
-#from django.views.generic import date_based, list_detail
-from django.db.models import Q
-from news.models import *
-from django.views import generic
-from django.views.generic.dates import DateDetailView
-
-import datetime
-import re
-
-
-    
-def post_list(request, page=0, **kwargs):
-    return list_detail.object_list(
-        request,
-        queryset = Post.objects.published(),
-        page = page,
-        **kwargs
-    )
-#post_list.__doc__ = list_detail.object_list.__doc__
-
-def post_archive_year(request, year, **kwargs):
-    return date_based.archive_year(
-        request,
-        year = year,
-        date_field = 'publish',
-        queryset = Post.objects.published(),
-        make_object_list = True,
-        **kwargs
-    )
-#post_archive_year.__doc__ = date_based.archive_year.__doc__
-
-
-def post_archive_month(request, year, month, **kwargs):
-    return date_based.archive_month(
-        request,
-        year = year,
-        month = month,
-        month_format = "%m",
-        date_field = 'publish',
-        queryset = Post.objects.published(),
-        **kwargs
-    )
-#post_archive_month.__doc__ = date_based.archive_month.__doc__
-
-
-def post_archive_day(request, year, month, day, **kwargs):
-    return date_based.archive_day(
-        request,
-        year = year,
-        month = month,
-        month_format = "%m",
-        day = day,
-        date_field = 'publish',
-        queryset = Post.objects.published(),
-        **kwargs
-    )
-#post_archive_day.__doc__ = date_based.archive_day.__doc__
-
-
-def post_detail(request, slug, year, month, day, **kwargs):
-    return date_based.object_detail(
-        request,
-        year = year,
-        month = month,
-        month_format = "%m",
-        day = day,
-        date_field = 'publish',
-        slug = slug,
-        queryset = Post.objects.published(),
-        **kwargs
-    )
-#post_detail.__doc__ = date_based.object_detail.__doc__
-
-
-def category_list(request, template_name = 'news/category_list.html', **kwargs):
-    """
-    Category list
-
-    Template: ``news/category_list.html``
-    Context:
-        object_list
-            List of categories.
-    """
-    return list_detail.object_list(
-        request,
-        queryset = Category.objects.all(),
-        template_name = template_name,
-        **kwargs
-    )
-
-def category_detail(request, slug, template_name = 'news/category_detail.html', **kwargs):
-    """
-    Category detail
-
-    Template: ``news/category_detail.html``
-    Context:
-        object_list
-            List of posts specific to the given category.
-        category
-            Given category.
-    """
-    category = get_object_or_404(Category, slug__iexact=slug)
-
-    return list_detail.object_list(
-        request,
-        queryset = category.post_set.published(),
-        extra_context = {'category': category},
-        template_name = template_name,
-        **kwargs
-    )
-
-
-# Stop Words courtesy of http://www.dcs.gla.ac.uk/idom/ir_resources/linguistic_utils/stop_words
-STOP_WORDS = r"""\b(a|about|above|across|after|afterwards|again|against|all|almost|alone|along|already|also|
-although|always|am|among|amongst|amoungst|amount|an|and|another|any|anyhow|anyone|anything|anyway|anywhere|are|
-around|as|at|back|be|became|because|become|becomes|becoming|been|before|beforehand|behind|being|below|beside|
-besides|between|beyond|bill|both|bottom|but|by|call|can|cannot|cant|co|computer|con|could|couldnt|cry|de|describe|
-detail|do|done|down|due|during|each|eg|eight|either|eleven|else|elsewhere|empty|enough|etc|even|ever|every|everyone|
-everything|everywhere|except|few|fifteen|fify|fill|find|fire|first|five|for|former|formerly|forty|found|four|from|
-front|full|further|get|give|go|had|has|hasnt|have|he|hence|her|here|hereafter|hereby|herein|hereupon|hers|herself|
-him|himself|his|how|however|hundred|i|ie|if|in|inc|indeed|interest|into|is|it|its|itself|keep|last|latter|latterly|
-least|less|ltd|made|many|may|me|meanwhile|might|mill|mine|more|moreover|most|mostly|move|much|must|my|myself|name|
-namely|neither|never|nevertheless|next|nine|no|nobody|none|noone|nor|not|nothing|now|nowhere|of|off|often|on|once|
-one|only|onto|or|other|others|otherwise|our|ours|ourselves|out|over|own|part|per|perhaps|please|put|rather|re|same|
-see|seem|seemed|seeming|seems|serious|several|she|should|show|side|since|sincere|six|sixty|so|some|somehow|someone|
-something|sometime|sometimes|somewhere|still|such|system|take|ten|than|that|the|their|them|themselves|then|thence|
-there|thereafter|thereby|therefore|therein|thereupon|these|they|thick|thin|third|this|those|though|three|through|
-throughout|thru|thus|to|together|too|top|toward|towards|twelve|twenty|two|un|under|until|up|upon|us|very|via|was|
-we|well|were|what|whatever|when|whence|whenever|where|whereafter|whereas|whereby|wherein|whereupon|wherever|whether|
-which|while|whither|who|whoever|whole|whom|whose|why|will|with|within|without|would|yet|you|your|yours|yourself|
-yourselves)\b"""
-
-
-def search(request, template_name='news/post_search.html'):
-    """
-    Search for news posts.
-
-    This template will allow you to setup a simple search form that will try to return results based on
-    given search strings. The queries will be put through a stop words filter to remove words like
-    'the', 'a', or 'have' to help imporve the result set.
-
-    Template: ``news/post_search.html``
-    Context:
-        object_list
-            List of news posts that match given search term(s).
-        search_term
-            Given search term.
-    """
-    context = {}
-    if request.GET:
-        stop_word_list = re.compile(STOP_WORDS, re.IGNORECASE)
-        search_term = '%s' % request.GET['q']
-        cleaned_search_term = stop_word_list.sub('', search_term)
-        cleaned_search_term = cleaned_search_term.strip()
-        if len(cleaned_search_term) != 0:
-            post_list = Post.objects.published().filter(Q(body__icontains=cleaned_search_term) | Q(tags__icontains=cleaned_search_term) | Q(categories__title__icontains=cleaned_search_term))
-            context = {'object_list': post_list, 'search_term':search_term}
-        else:
-            message = 'Search term was too vague. Please try again.'
-            context = {'message':message}
-    return render_to_response(template_name, context, context_instance=RequestContext(request))

=== modified file 'templates/news/base_news.html'
--- templates/news/base_news.html	2012-04-02 09:41:12 +0000
+++ templates/news/base_news.html	2016-11-20 12:13:26 +0000
@@ -1,7 +1,8 @@
 {% extends "base.html" %}
 
-{% block title %}News Archive - {{block.super}}{% endblock %}
+{% block title %}News Archive {% endblock %}
 
 {% block extra_head %}
 <link rel="alternate" type="application/rss+xml" title="Widelands News" href="/feeds/news/" />
+<link rel="stylesheet" type="text/css" media="all" href="{{ MEDIA_URL }}css/news.css" />
 {{ block.super}}{% endblock %}

=== removed file 'templates/news/category_list.html'
--- templates/news/category_list.html	2009-02-21 18:24:02 +0000
+++ templates/news/category_list.html	1970-01-01 00:00:00 +0000
@@ -1,20 +0,0 @@
-{% extends "news/base_news.html" %}
-
-
-{% block title %}Post categories{% endblock %}
-{% block body_class %}{{ block.super }} category_list{% endblock %}
-
-
-{% block content_title %}
-  <h2>Post categories</h2>
-{% endblock %}
-
-
-{% block content %}
-  {% load markup %}
-  <ul class="link_list">
-    {% for category in object_list %}
-    <li><a href="{{ category.get_absolute_url }}">{{ category }}</a></li>
-    {% endfor %}
-  </ul>
-{% endblock %}

=== renamed file 'templates/news/category_detail.html' => 'templates/news/category_posts.html'
--- templates/news/category_detail.html	2009-03-16 17:28:02 +0000
+++ templates/news/category_posts.html	2016-11-20 12:13:26 +0000
@@ -1,26 +1,40 @@
 {% extends "news/base_news.html" %}
-
-
-{% block title %}Posts for {{ category.title }}{% endblock %}
-{% block body_class %}{{ block.super }} category_detail{% endblock %}
-{% block body_id %}category_{{ category.id }}{% endblock %}
+{% load pagination_tags %}
+{% load threadedcommentstags %}
 {% load custom_date %}
 
-
-{% block content_title %}
-  <h2>Posts for {{ category.title }}</h2>
-{% endblock %}
-
-
 {% block content %}
-  {% load markup %}
-  <div class="post_list">
-    {% for post in object_list %}
-    <div>
-      <h3 class="title"><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h3>
-      <p class="date">{{ post.publish|custom_date:user }}</p>
-      <p class="tease">{{ post.tease }}</p>
-    </div>
+<h1>Posts for Category: {{ cur_category }}</h1>
+<div>
+	<div class="linksBox">
+		<a href="{% url 'news_index' %}">News Archive</a>
+	</div>
+	<br />
+	<div class="linksBox">Other Categories: 
+		{% for category in categories %}
+			<a href="{% url 'category_posts' slug=category.slug %}">{{ category }} </a> | 
+		{% endfor %}
+		{# Speciallink to provide posts which have no category #}
+		<a href="{% url 'category_posts' slug='none' %}"> None </a>
+	</div>
+</div>
+<div class="blogEntry">
+	<div class="center">
+	{% autopaginate post_list 20 %}
+	{% paginate %}
+	</div>
+    <table width="100%">
+      <th align="left">Title</th>
+      <th>Posted at</th>
+	  <th>Comments</th>
+    {% for post in post_list %}
+		{% get_comment_count for post as ccount %}
+        <tr>
+          <td><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></td>
+          <td align="center">{{ post.publish|custom_date:user }}</td>
+		  <td align="center"> {{ ccount }}</td>
+        </tr>
     {% endfor %}
-  </div>
+    </table>
+</div>
 {% endblock %}

=== modified file 'templates/news/inlines/post_detail.html'
--- templates/news/inlines/post_detail.html	2016-06-15 19:20:24 +0000
+++ templates/news/inlines/post_detail.html	2016-11-20 12:13:26 +0000
@@ -5,20 +5,25 @@
 
 {% endcomment %}
 {% load threadedcommentstags %}
-{% load news_extras wl_markdown tagging_tags wlprofile_extras custom_date %}
+{% load wl_markdown wlprofile_extras custom_date %}
 
 <div class="blogEntry">
 	{% if object.has_image %}
-	<a href="{{ object.get_absolute_url }}"><img class="title posLeft" src='{{MEDIA_URL}}{{ object.image|urlencode }}' alt='{{ object.image_alt }}' /></a>
+		<a href="{% url 'category_posts' slug=object.get_category_slug %}">
+			<img class="title posLeft" src="{{MEDIA_URL}}{{ object.image|urlencode }}" alt="{{ object.image_alt }}">
+		</a>
 	{% endif %}
 	{% if perms.news %}
-	<div class="small posRight invertedColor">
+		<div class="small posRight invertedColor">
 		{% if perms.news.add_post %}<a href="/admin/news/post/add/">Add New News</a>{% endif %}
 		{% if perms.news.change_post %}| <a href="/admin/news/post/{{object.id}}/">Edit</a>{% endif %}
-	</div>
+		</div>
     {% endif %}
-	<h2><a href="{{ object.get_absolute_url }}" class="invertedColor">{{ object.title }}</a></h2>
+	
+	<h2>{{ object.title }}</h2>
+	
 	{{ object.body|wl_markdown }}
+	
 	<hr />
 	{% get_comment_count for object as ccount %}
 	<span class="small posLeft"><a href="{{ object.get_absolute_url }}">{{ ccount }} comments</a></span>

=== added file 'templates/news/inlines/posts_table.html'
--- templates/news/inlines/posts_table.html	1970-01-01 00:00:00 +0000
+++ templates/news/inlines/posts_table.html	2016-11-20 12:13:26 +0000
@@ -0,0 +1,41 @@
+{% comment %}
+List all news in a table
+{% endcomment %}
+
+{% load threadedcommentstags %}
+{% load custom_date %}
+{% load pagination_tags %}
+
+<div class="blogEntry">
+	<div class="center">
+	{% autopaginate object_list 20 %}
+	{% paginate %}
+	</div>
+	<table width="100%">
+		<caption></caption>
+		<thead>
+			<tr>
+				<th align="left">Title</th>
+				<th>Published</th>
+				<th>Comments</th>
+				<th align="right">Category</th>
+			</tr>
+		</thead>
+		<tbody>
+			{% for object in object_list %}
+			{% get_comment_count for object as ccount %}
+			<tr>
+				<td><a href="{{object.get_absolute_url}}">{{ object.title }}</a></td>
+				<td align="center">{{ object.publish|custom_date:user }}</td>
+				<td align="center">{{ ccount }}</td>
+				<td align="right"><a href=" {% url 'category_posts' slug=object.get_category_slug %}"> {{ object.get_category_slug|title }}</a></td>
+			</tr>
+	    	{% endfor %}
+		</tbody>
+	</table>
+	{% if page_obj.has_other_pages %}
+	<div class="center">
+		{% paginate %}
+	</div>
+	{% endif %}
+</div>

=== removed file 'templates/news/post_archive_day.html'
--- templates/news/post_archive_day.html	2016-06-06 18:26:47 +0000
+++ templates/news/post_archive_day.html	1970-01-01 00:00:00 +0000
@@ -1,29 +0,0 @@
-{% extends "news/base_news.html" %}
-{% load custom_date %}
-{% load pagination_tags %}
-{% block title %}Post archive for {{ day|date:"d F Y" }}{% endblock %}
-{% block body_class %}{{ block.super }} post_archive_day{% endblock %}
-
-{% block content %}
-{% include "django_messages/inlines/navigation.html" %}
-<br />
-<br />
-<div class="muttis_liebling">
-    <div class="box_item_model even show_center">
-        <a href="{% url 'news_index' %}{{ day|date:"Y" }}/{{ day|date:"m" }}">Archiv {{ day|date:"F" }}</a>
-    {% autopaginate object_list 10 %}
-    {% paginate %}
-    </div>
-    <br />
-    {% for object in object_list %}
-        {% include "news/inlines/post_detail.html" %}
-    <br />
-    {% endfor %}
-    <br />
-    {% if page_obj.has_other_pages %}
-    <div class="box_item_model even show_center">
-    {% paginate %}
-    </div>
-    {% endif %}
-</div>
-{% endblock %}

=== modified file 'templates/news/post_archive_month.html'
--- templates/news/post_archive_month.html	2016-03-04 19:44:10 +0000
+++ templates/news/post_archive_month.html	2016-11-20 12:13:26 +0000
@@ -1,35 +1,16 @@
 {% extends "news/base_news.html" %}
-{% load custom_date %}
-{% load news_extras %}
-{% load pagination_tags %}
-{#{% load markup %}#}
 
-{% block title %}{{ month|date:"F - Y" }} - {{block.super}}}{% endblock %}
+{% block title %}{{ month|date:"F - Y" }} - {{block.super}} {% endblock %}
 
 {% block content %}
 
-<h1>News Archive</h1>
-<a href="{% url 'news_index' %}" class="invertedColor">News Archiv</a> &#187; 
-<a href="{% url 'news_index' %}{{ month|date:"Y" }}/" class="invertedColor">{{ month|date:"Y" }}</a> &#187; 
-<a href="{% url 'news_index' %}{{ month|date:"Y" }}/{{ month|date:"b" }}/" class="invertedColor">{{ month|date:"F" }}</a>
-{% for day in object_list %}
-{% endfor %}
-<br />
-
-<div class="center">
-{% autopaginate object_list 10 %}
-{% paginate %}
-</div>
-<br />
-
-{% for object in object_list %}
-	{% include "news/inlines/post_detail.html" %}
-{% endfor %}
-{% if page_obj.has_other_pages %}
-
-<div class="box_item_model even show_center">
-{% paginate %}
-</div>
-{% endif %}
+<h1>News Archive: {{ month|date:"F" }} {{ month|date:"Y" }}</h1>
+<div class="linksBox">
+<a href="{% url 'news_index' %}">News Archiv</a> &#187; 
+<a href="{% url 'news_index' %}{{ month|date:"Y" }}/">{{ month|date:"Y" }}</a> &#187; 
+<a href="{% url 'news_index' %}{{ month|date:"Y" }}/{{ month|date:"b" }}/">{{ month|date:"F" }}</a>
+</div>
+
+{% include "news/inlines/posts_table.html" %}
 
 {% endblock %}

=== modified file 'templates/news/post_archive_year.html'
--- templates/news/post_archive_year.html	2016-03-04 19:44:10 +0000
+++ templates/news/post_archive_year.html	2016-11-20 12:13:26 +0000
@@ -1,35 +1,20 @@
 {% extends "news/base_news.html" %}
-{% load custom_date %}
-{% load news_extras %}
-{% load pagination_tags %}
-{#{% load markup %}#}
 
 {% block title %}{{ year }} - {{ block.super }}{% endblock %}
 
 {% block content %}
 
-<h1>News Archive</h1>
-<a href="{% url 'news_index' %}" class="invertedColor">News Archiv</a> &#187;
-<a href="{% url 'news_index' %}{{ year|date:"Y" }}" class="invertedColor">{{ year|date:"Y" }}</a>: 
+<h1>News Archive: {{ year|date:"Y" }}</h1>
+<div class="linksBox">
+<a href="{% url 'news_index' %}">News Archiv </a>&#187;
+<a href="{% url 'news_index' %}{{ year|date:"Y" }}">{{ year|date:"Y" }}</a> : 
+
 {% for month in date_list %}
-	<a href="{% url 'news_index' %}{{ year|date:"Y" }}/{{ month|date:"b" }}/" class="invertedColor">{{ month|date:"F" }}</a>
+	<a href="{% url 'news_index' %}{{ year|date:"Y" }}/{{ month|date:"b" }}/">{{ month|date:"F" }}</a>
 	{% if not forloop.last %} | {% endif %}
 {% endfor %}
-<br />
-
-<div class="center">
-{% autopaginate object_list 10 %}
-{% paginate %}
-</div>
-<br />
-{% for object in object_list %}
-	{% include "news/inlines/post_detail.html" %}
-{% endfor %}
-{% if page_obj.has_other_pages %}
-
-<div class="center">
-{% paginate %}
-</div>
-{% endif %}
+</div>
+
+{% include "news/inlines/posts_table.html" %}
 
 {% endblock %}

=== modified file 'templates/news/post_detail.html'
--- templates/news/post_detail.html	2016-06-07 18:24:20 +0000
+++ templates/news/post_detail.html	2016-11-20 12:13:26 +0000
@@ -1,34 +1,36 @@
 {% extends "news/base_news.html" %}
 
-{% load wlprofile_extras %}
+{% comment %}
+Base view to show a news post in the archive
+{% endcomment %}
+
+
 {% load threadedcommentstags %}
-{% load news_extras %}
 
 {% block title %}{{ object.title }} - {{ block.super }}{% endblock %}
 
 {% block extra_head %}
 {{ block.super }}
-<link rel="stylesheet" type="text/css" media="all" href="{{ MEDIA_URL }}css/news.css" />
-<link rel="stylesheet" type="text/css" media="all" href="{{ MEDIA_URL }}css/comments.css" />
+	<link rel="stylesheet" type="text/css" media="all" href="{{ MEDIA_URL }}css/news.css" />
+	<link rel="stylesheet" type="text/css" media="all" href="{{ MEDIA_URL }}css/comments.css" />
 {% endblock %}
 
 {% block content %}
-<h1>News: {{ object.title }}</h1>
-<a class="invertedColor" href="{% url 'news_index' %}">News Archive: </a>
-{% if object.get_previous_by_publish %}
-<a class="invertedColor" href="{{ object.get_previous_post.get_absolute_url }}">&laquo; {{ object.get_previous_post }}</a>
-{% endif %}
-|
-{% if object.get_next_by_publish %}
-<a class="invertedColor" href="{{ object.get_next_post.get_absolute_url }}">{{ object.get_next_post }} &raquo;</a> 
-{% endif %}
-<br /><br />
-
-{% include "news/inlines/post_detail.html" %}
-
-<div class="blogEntry">
-
-	<h3>Comments on this Post:</h3>
-	{% include "threadedcomments/inlines/comments.html" %}
-</div>
+	<h1>News: {{ object.title }}</h1>
+	<div class="linksBox">
+		<a href="{% url 'news_index' %}">News Archive: </a>
+		{% if object.get_previous_by_publish %}
+			<a href="{{ object.get_previous_post.get_absolute_url }}">&laquo; {{ object.get_previous_post }}</a>
+		{% endif %}
+		{% if object.get_next_post %}
+			| <a href="{{ object.get_next_post.get_absolute_url }}">{{ object.get_next_post }} &raquo;</a> 
+		{% endif %}
+	</div>
+
+	{% include "news/inlines/post_detail.html" %}
+
+	<div class="blogEntry">
+		<h3>Comments on this Post:</h3>
+		{% include "threadedcomments/inlines/comments.html" %}
+	</div>
 {% endblock %}

=== modified file 'templates/news/post_list.html'
--- templates/news/post_list.html	2016-06-07 18:24:20 +0000
+++ templates/news/post_list.html	2016-11-20 12:13:26 +0000
@@ -1,44 +1,21 @@
 {% extends "news/base_news.html" %}
 
-{% load news_extras %}
-{% load threadedcommentstags custom_date %}
-{% load pagination_tags %}
-
 {% block content %}
 
 <h1>News Archive</h1>
-<div>
-{% get_news_years as news_years %}
-<a href="{% url 'news_index' %}" class="invertedColor">News Archiv</a>:
-{% for muh in news_years %}
-	<a href="{% url 'news_index' %}{{ muh.year }}" class="invertedColor">{{ muh.year }}</a>
-	{% if not forloop.last %} | {% endif %}
-{% endfor %}
+<div class="linksBox">
+	<a href="{% url 'news_index' %}">News Archiv: </a>
+	{% for dateobj in date_list reversed %}
+		<a href="{% url 'news_index' %}{{ dateobj|date:'Y' }}">{{ dateobj|date:'Y' }}</a>
+		{% if not forloop.last %} | {% endif %}
+	{% endfor%}
 </div>
 {% if perms.news %}
-	<div class="small posRight invertedColor">
-		{% if perms.news.add_post %}<a href="/admin/news/post/add/" class="invertedColor">Add New News</a>{% endif %}
-		{% if perms.news.change_post %}| <a href="/admin/news/post/{{object.id}}/" class="invertedColor">Edit</a>{% endif %}
+	<div class="small posRight linksBox">
+		{% if perms.news.add_post %}<a href="/admin/news/post/add/">Add New News</a>{% endif %}
 	</div>
 {% endif %}
-<br />
-<div class="blogEntry">
-	<div class="center">
-	{% autopaginate object_list 20 %}
-	{% paginate %}
-	</div>
-    <ul>
-        {% for object in object_list %}
-       	{% get_comment_count for object as ccount %}
-        <li><a href="{{object.get_absolute_url}}">{{ object.title }}</a> - <span class="small">posted at {{ object.publish|custom_date:user }}, {{ ccount }} comments</span></li>
-	    {% endfor %}
-	</ul>
 
-{% if page_obj.has_other_pages %}
-<div class="center">
-{% paginate %}
-</div>
-{% endif %}
-</div>
+{% include "news/inlines/posts_table.html" %}
 
 {% endblock %}


Follow ups