[geany/www.geany.org] 673822: Update and fix a few issues in the news app
Enrico Tröger
git-noreply at xxxxx
Sat May 11 13:15:48 UTC 2019
Branch: refs/heads/master
Author: Enrico Tröger <enrico.troeger at uvena.de>
Committer: Enrico Tröger <enrico.troeger at uvena.de>
Date: Sun, 31 Mar 2019 14:05:31 UTC
Commit: 673822f0b41476032a21f52cd27b1de2f564d27b
https://github.com/geany/www.geany.org/commit/673822f0b41476032a21f52cd27b1de2f564d27b
Log Message:
-----------
Update and fix a few issues in the news app
Modified Paths:
--------------
news/admin.py
news/feeds.py
news/models.py
news/sitemaps.py
news/templates/news/detail.html
news/templates/news/list.html
news/templates/news/list_embedded.html
news/templatetags/news_tags.py
news/urls.py
Modified: news/admin.py
69 lines changed, 13 insertions(+), 56 deletions(-)
===================================================================
@@ -12,22 +12,21 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from django.conf.urls import patterns, url
from django.contrib import admin
-from django.core.urlresolvers import reverse
-from django.http import HttpResponseRedirect
-from django.templatetags.static import static
from mezzanine.core.models import CONTENT_STATUS_DRAFT, CONTENT_STATUS_PUBLISHED
+
from news.models import NewsPost
########################################################################
class NewsPostAdmin(admin.ModelAdmin):
- list_display = ('title', 'user', '_is_published_switch', 'publish_date')
- date_hierarchy = 'publish_date'
+ list_display = ('title', 'user', 'status', 'publish_date')
+ list_editable = ("status",)
list_filter = ('publish_date', 'status')
+ date_hierarchy = 'publish_date'
exclude = ('slug', 'user', 'entry_date')
actions = ['_toggle_many_published']
+ radio_fields = {"status": admin.HORIZONTAL}
#----------------------------------------------------------------------
def save_model(self, request, obj, form, change):
@@ -36,54 +35,6 @@ def save_model(self, request, obj, form, change):
obj.user = request.user
obj.save()
- #----------------------------------------------------------------------
- def get_urls(self):
- urls = admin.ModelAdmin.get_urls(self)
- my_urls = patterns(
- '',
- url(
- r'^toggle_published/([0-9]+)/$',
- self.admin_site.admin_view(self._toggle_published),
- name='news_post_toggle_published'),)
- return my_urls + urls
-
- #----------------------------------------------------------------------
- def _is_published_switch(self, obj):
- toggle_published_url = reverse('admin:news_post_toggle_published', args=(obj.id,))
- yes_no = 'yes' if obj.status == CONTENT_STATUS_PUBLISHED else 'no'
- static_path = static('admin/img/icon-{}.gif'.format(yes_no))
- value = obj.status
- return '<a href="{}"><img src="{}" alt="{}"/></a>'.format(
- toggle_published_url,
- static_path,
- value)
-
- #----------------------------------------------------------------------
- def _toggle_published(self, request, newspost_id):
- newspost = NewsPost.objects.get(pk=newspost_id)
- self._toggle_newspost_published_status(newspost)
- self.message_user(
- request,
- u'News post public status have been changed.',
- fail_silently=True)
- # redirect back to the changelist page
- changelist_url = self._admin_url('changelist')
- return HttpResponseRedirect(changelist_url)
-
- #----------------------------------------------------------------------
- def _toggle_newspost_published_status(self, newspost):
- if newspost.status == CONTENT_STATUS_PUBLISHED:
- newspost.status = CONTENT_STATUS_DRAFT
- else:
- newspost.status = CONTENT_STATUS_PUBLISHED
- newspost.save()
-
- #----------------------------------------------------------------------
- def _admin_url(self, target_url):
- opts = self.model._meta
- url_ = "admin:%s_%s_%s" % (opts.app_label, opts.object_name.lower(), target_url)
- return reverse(url_)
-
#----------------------------------------------------------------------
def _toggle_many_published(self, request, queryset):
# this is not really as efficient as it could be as the query is performed, but I don't know
@@ -94,8 +45,14 @@ def _toggle_many_published(self, request, queryset):
rows_updated += 1
self.message_user(request, "{} News posts were successfully changed.".format(rows_updated))
- _is_published_switch.allow_tags = True
- _is_published_switch.short_description = 'Is published'
+ #----------------------------------------------------------------------
+ def _toggle_newspost_published_status(self, newspost):
+ if newspost.status == CONTENT_STATUS_PUBLISHED:
+ newspost.status = CONTENT_STATUS_DRAFT
+ else:
+ newspost.status = CONTENT_STATUS_PUBLISHED
+ newspost.save()
+
_toggle_many_published.short_description = "Toggle the published status of selected News posts"
Modified: news/feeds.py
4 lines changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -13,7 +13,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.contrib.syndication.views import Feed
-from django.core.urlresolvers import reverse
+from django.urls import reverse
from mezzanine.core.templatetags.mezzanine_tags import richtext_filters
from mezzanine.utils.html import absolute_urls
from mezzanine.conf import settings
@@ -32,7 +32,7 @@ def link(self):
#----------------------------------------------------------------------
def items(self):
- return NewsPost.objects.recently_published(count=20)
+ return NewsPost.objects.recently_published(count=200)
#----------------------------------------------------------------------
def item_title(self, item):
Modified: news/models.py
5 lines changed, 3 insertions(+), 2 deletions(-)
===================================================================
@@ -12,8 +12,8 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-from django.core.urlresolvers import reverse
from django.db import models
+from django.urls import reverse
from django.utils import timezone
from django.utils.timezone import now
from django.utils.translation import ugettext_lazy as _
@@ -59,7 +59,8 @@ class NewsPost(models.Model):
user = models.ForeignKey(
get_user_model_name(),
verbose_name=_('Author'),
- related_name='%(class)ss')
+ related_name='%(class)ss',
+ on_delete=models.PROTECT)
status = models.IntegerField(
_('Status'),
choices=CONTENT_STATUS_CHOICES,
Modified: news/sitemaps.py
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -22,4 +22,4 @@ class NewsPostSitemap(StaticSitemap):
#----------------------------------------------------------------------
def get_dynamic_items(self):
- return list(NewsPost.objects.recently_published(count=10))
+ return list(NewsPost.objects.recently_published(count=30))
Modified: news/templates/news/detail.html
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -26,6 +26,6 @@ <h2>{{ newspost.title }}</h2>
<div class="clearfix"></div>
</div>
-{{ newspost.content|richtext_filter|safe }}
+{{ newspost.content|richtext_filters|safe }}
{% endblock %}
Modified: news/templates/news/list.html
73 lines changed, 57 insertions(+), 16 deletions(-)
===================================================================
@@ -6,6 +6,10 @@
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/newspost.css">
{% endblock %}
+{% block extra_head %}
+{{ block.super }}
+<link rel="alternate" type="application/rss+xml" title="RSS" href="{% url "news_feed" %}">
+{% endblock %}
{% block meta_title %}{% if page %}{{ page.richtextpage.meta_title }}{% else %}{% trans "News" %}{% endif %}{% endblock %}
@@ -17,27 +21,64 @@
{% block richtext_content %}
<h2>News</h2>
+{% regroup object_list|dictsortreversed:"publish_date" by publish_date.year as newsposts_by_year %}
+<div id="accordion" class="panel-group">
+{% for by_year in newsposts_by_year %}
+ <div class="panel panel-default">
+ <div class="panel-heading">
+ <h4 class="panel-title">
+ <a data-toggle="collapse" data-parent="#accordion" href="#collapse{{ forloop.counter }}">
+ <span class="glyphicon glyphicon-plus"></span>
+ {{ by_year.grouper }}
+ </a>
+ </h4>
+ </div>
+ <div id="collapse{{ forloop.counter }}" class="panel-collapse collapse{% if forloop.counter0 == 0 %} in{% endif %}">
+ <div class="panel-body list-group">
-<div class="list-group">
-{% for newspost in object_list %}
- <div class="list-group-item">
- <div class="list-group-item-heading">
- <div class="pull-left">
- <h4>
- <a href="{{ newspost.get_absolute_url }}">{{ newspost.title }}</a>
- </h4>
- </div>
- <div class="pull-right">
- {{ newspost.publish_date|date:"F dS, Y" }}
+ {% for newspost in by_year.list %}
+ <div class="list-group-item">
+ <div class="list-group-item-heading">
+ <div class="pull-left">
+ <h4>
+ <a href="{{ newspost.get_absolute_url }}">{{ newspost.title }}</a>
+ </h4>
+ </div>
+ <div class="pull-right">
+ {{ newspost.publish_date|date:"F dS, Y" }}
+ </div>
+ <div class="clearfix"></div>
+ </div>
+ <div class="list-group-item-text">
+ {{ newspost.content|striptags|truncatechars:75 }}
+ <a href="{{ newspost.get_absolute_url }}" class="small">more</a>
+ </div>
+ </div>
+ {% endfor %}
</div>
- <div class="clearfix"></div>
- </div>
- <div class="list-group-item-text">
- {{ newspost.content|striptags|truncatechars:75 }}
- <a href="{{ newspost.get_absolute_url }}" class="small">more</a>
</div>
</div>
{% endfor %}
</div>
+
+{% endblock %}
+
+
+{% block footer_js %}
+<script type="text/javascript">
+ $(document).ready(function(){
+ // Add minus icon for collapse element which is open by default
+ $(".collapse.in").each(function(){
+ $(this).siblings(".panel-heading").find(".glyphicon").addClass("glyphicon-minus").removeClass("glyphicon-plus");
+ });
+
+ // Toggle plus minus icon on show hide of collapse element
+ $(".collapse").on('show.bs.collapse', function(){
+ $(this).parent().find(".glyphicon").removeClass("glyphicon-plus").addClass("glyphicon-minus");
+ }).on('hide.bs.collapse', function(){
+ $(this).parent().find(".glyphicon").removeClass("glyphicon-minus").addClass("glyphicon-plus");
+ });
+ });
+</script>
{% endblock %}
Modified: news/templates/news/list_embedded.html
13 lines changed, 3 insertions(+), 10 deletions(-)
===================================================================
@@ -10,19 +10,12 @@
<span class="small">- {{ newspost.publish_date|date:"F Y" }}</span>
</li>
{% endfor %}
-</ul>
-
-{% comment %}
-<ul class="list-group">
-{% for newspost in recent_news_posts %}
<li class="list-group-item">
- <a href="#" data-toggle="modal" data-target="#news-modal" id="news-post-{{ newspost.slug }}">
- {{ newspost.title }}
- </a>
+ <span class="glyphicon glyphicon-calendar" aria-hidden="true"></span>
+ <a href="{% url 'news_list' %}">Older news</a>
</li>
-{% endfor %}
</ul>
-{% endcomment %}
+
<!-- Modal -->
<div class="modal fade" id="news-modal" tabindex="-1" role="dialog" aria-labelledby="news-modal-label">
Modified: news/templatetags/news_tags.py
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -22,5 +22,5 @@
@register.inclusion_tag("news/list_embedded.html", takes_context=True)
def get_recent_news(context):
user = context.request.user
- context["recent_news_posts"] = NewsPost.objects.recently_published(for_user=user)
+ context["recent_news_posts"] = NewsPost.objects.recently_published(count=4, for_user=user)
return context
Modified: news/urls.py
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -22,7 +22,7 @@
urlpatterns = (
url(r'^$', NewsListView.as_view(), name='news_list'),
url(r'^feed/$', LatestNewsPostsFeed(), name='news_feed'),
- url(r'^(?P<newspost_slug>.+)$', NewsDetailView.as_view(), name='news_detail'),
+ url(r'^(?P<newspost_slug>.+)/$', NewsDetailView.as_view(), name='news_detail'),
)
# register our urlpatterns to the global sitemap generator
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list