All pictures view with intelligent pagination. Css need to be improved.
--- a/.pydevproject Tue Feb 05 11:56:59 2013 +0100
+++ b/.pydevproject Tue Feb 05 13:16:57 2013 +0100
@@ -1,6 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<?eclipse-pydev version="1.0"?><pydev_project>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python_egonomy</pydev_property>
+<?eclipse-pydev version="1.0"?>
+
+<pydev_project>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">egonomy_python</pydev_property>
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.7</pydev_property>
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
<path>/egonomy/src</path>
--- a/src/egonomy/static/egonomy/css/egonomy.css Tue Feb 05 11:56:59 2013 +0100
+++ b/src/egonomy/static/egonomy/css/egonomy.css Tue Feb 05 13:16:57 2013 +0100
@@ -169,6 +169,10 @@
float: left; margin: 2px 0 4px 12px;
}
+.subcol_all {
+ float: left; margin: 2px 0 4px 10px; width: 110px;
+}
+
.column-third {
float: left; width: 312px;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/egonomy/templates/egonomy_all_pictures.html Tue Feb 05 13:16:57 2013 +0100
@@ -0,0 +1,48 @@
+{% extends "egonomy_base.html" %}
+{% load static %}
+{% load i18n %}
+{% load thumbnail %}
+{% load navigation %}
+
+{% block title %}{% trans "All pictures" %}{% endblock %}
+
+{% block content %}
+ <div class="fullwidth">
+ <div class="fullwidth">
+ <h2>{% trans "All pictures" %} nb_pages = {{nb_pages}}</h2>
+ {% if nb_pages %}<p>{% build_pagination nb_pages page "contents_page clickable" %}</p>{% endif %}
+ <ul class="fullwidth">
+ {% for img in results %}
+ <li class="subcol_all">
+ <a href="{% url 'annotate_picture' image_id=img.id %}">
+ <div class="center-image">
+ {% with img.info.image_file as image %}
+ {% if image %}
+ {% if image|is_portrait %}
+ {% thumbnail image "x110" format="PNG" crop="center" as im %}
+ <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}"/>
+ {% empty %}
+ <img src="{% static 'egonomy/img/empty.gif' %}" width="110" height="110" class="placeholder" />
+ {% endthumbnail %}
+ {% else %}
+ {% thumbnail image "110" format="PNG" crop="center" as im %}
+ <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}"/>
+ {% empty %}
+ <img src="{% static 'egonomy/img/empty.gif' %}" width=110" height="110" class="placeholder" />
+ {% endthumbnail %}
+ {% endif %}
+ {% else %}
+ <img src="{% static 'egonomy/img/empty.gif' %}" width=110" height="110" class="placeholder" />
+ {% endif %}
+ {% endwith %}
+ </div>
+ <h3>{{ img.metadata.titre }}</h3></a>
+ <p>{% trans "Annotated by" %} <strong>{{ img.metadata.auteur }}</strong></p>
+ </li>
+ {% endfor %}
+ </ul>
+ {% if nb_pages %}<p>{% build_pagination nb_pages page "contents_page clickable" %}</p>{% endif %}
+ </div>
+ </div>
+{% endblock %}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/egonomy/templates/partial/all_pictures_pagination.html Tue Feb 05 13:16:57 2013 +0100
@@ -0,0 +1,21 @@
+{% if nb_pages %}
+ {% comment %}alors ? : {{begin}} - {{middle}} - {{end}} - nb_pages = {{nb_pages}}<br/>
+ alors ? : nb_pages = {{nb_pages}} - range = {{nb_pages}} - cur_page_nb = {{cur_page_nb}}<br/>{% endcomment %}
+ {% if 1 < cur_page_nb %}<a class="{{a_class}}" alt="prev"><<</a> {% endif %}
+ {% for i in begin %}
+ {% if i == cur_page_nb %}{{i}}{% else %}<a class="{{a_class}}" alt="{{i}}" href="{% url 'all_pictures' %}?page={{i}}">{{i}}</a>{% endif %}
+ {% endfor %}
+ {% if middle %}
+ ...
+ {% for i in middle %}
+ {% if i == cur_page_nb %}{{i}}{% else %}<a class="{{a_class}}" alt="{{i}}" href="{% url 'all_pictures' %}?page={{i}}">{{i}}</a>{% endif %}
+ {% endfor %}
+ {% endif %}
+ {% if end %}
+ ...
+ {% for i in end %}
+ {% if i == cur_page_nb %}{{i}}{% else %}<a class="{{a_class}}" alt="{{i}}" href="{% url 'all_pictures' %}?page={{i}}">{{i}}</a>{% endif %}
+ {% endfor %}
+ {% endif %}
+ {% if cur_page_nb < nb_pages %}<a class="{{a_class}}" alt="next" href="{% url 'all_pictures' %}?page={{i|add:'1'}}">>></a>{% endif %}
+{% endif %}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/egonomy/templatetags/__init__.py Tue Feb 05 13:16:57 2013 +0100
@@ -0,0 +1,1 @@
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/egonomy/templatetags/navigation.py Tue Feb 05 13:16:57 2013 +0100
@@ -0,0 +1,76 @@
+from django.template import Library
+import re
+
+register = Library()
+
+
+@register.simple_tag
+def active(request, css_class, pattern, exact=True):
+ """
+ a simple tag to test the current path and return a given css class.
+ Useful for navigation tabs
+ """
+ if pattern:
+ if exact:
+ pattern = "^%s$" % pattern.lstrip("^").rstrip("$")
+
+ if re.search(pattern, request.path):
+ return css_class
+ return ''
+
+
+@register.inclusion_tag("partial/all_pictures_pagination.html", takes_context=True)
+def build_pagination(context, nb_pages, cur_page_nb, a_class, begin_pages=2, end_pages=2, before_current_pages=2, after_current_pages=2):
+ # Digg-like pagination. Adapted from http://djangosnippets.org/snippets/2199/
+ nb_pages = int(nb_pages)
+ cur_page_nb = int(cur_page_nb)
+ #assert False, str(nb_pages) + ', ' + str(cur_page_nb)
+ before = max(cur_page_nb - before_current_pages - 1, 0)
+ after = cur_page_nb + after_current_pages
+ #nb_pages = 5
+ page_range = range(nb_pages+1)[1:]
+ #assert False, str(nb_pages) + str(page_range)
+ begin = page_range[:begin_pages]
+ #assert False, str(nb_pages) + ", " + str(page_range) + ", " + str(begin)
+ middle = page_range[before:after]
+ end = page_range[-end_pages:]
+ last_page_number = end[-1]
+ #assert False, "a - cur_page_nb = " + str(cur_page_nb) + ", before = " + str(before) + ", after = " + str(after) + ", begin = " + str(begin) + ", middle = " + str(middle) + ", end = " + str(end)
+
+ def collides(firstlist, secondlist):
+ """ Returns true if lists collides (have same entries)
+ >>> collides([1,2,3,4],[3,4,5,6,7])
+ True
+ >>> collides([1,2,3,4],[5,6,7])
+ False
+ """
+ return any(item in secondlist for item in firstlist)
+
+ # If middle and end has same entries, then end is what we want
+ if collides(middle, end):
+ end = range(max(cur_page_nb-before_current_pages, 1), last_page_number+1)
+ middle = []
+
+ #assert False, "0, " + str(nb_pages) + ", " + str(page_range) + ", " + str(begin)
+ # If begin and middle ranges has same entries, then begin is what we want
+ if collides(begin, middle):
+ begin = range(1, min(cur_page_nb + after_current_pages - 1, last_page_number)+1)
+ middle = []
+ #assert False, "1 - cur_page_nb = " + str(cur_page_nb) + ", before = " + str(before) + ", after = " + str(after) + ", begin = " + str(begin) + ", middle = " + str(middle) + ", end = " + str(end)
+
+ # If begin and end has same entries then begin is what we want
+ if collides(begin, end):
+ begin = range(1, last_page_number+1)
+ end = []
+ #assert False, "2 - " + str(nb_pages) + ", " + str(page_range) + ", " + str(begin)
+
+ #assert False, str(nb_pages) + ", " + str(page_range) + ", " + str(begin)
+
+ context.update({'begin' : begin,
+ 'middle' : middle,
+ 'end' : end,
+ 'nb_pages' : nb_pages,
+ 'cur_page_nb' : cur_page_nb,
+ 'a_class' : a_class})
+ #assert False, begin + middle + end
+ return context
--- a/src/egonomy/urls.py Tue Feb 05 11:56:59 2013 +0100
+++ b/src/egonomy/urls.py Tue Feb 05 13:16:57 2013 +0100
@@ -13,6 +13,7 @@
url(r'^viewfragment/(?P<fragment_pk>.*)/$', 'egonomy.views.view_fragment', name='view_fragment'),
url(r'^createfragment/(?P<image_id>.*)/$', 'egonomy.views.create_fragment', name='create_fragment'),
url(r'^savefragment/$', 'egonomy.views.save_fragment', name='save_fragment'),
+ url(r'^all/$', 'egonomy.views.all_pictures', name='all_pictures'),
# Uncomment the admin/doc line below to enable admin documentation:
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
--- a/src/egonomy/views.py Tue Feb 05 11:56:59 2013 +0100
+++ b/src/egonomy/views.py Tue Feb 05 13:16:57 2013 +0100
@@ -1,8 +1,6 @@
from django.conf import settings
from django.contrib.auth.decorators import login_required
-#from django.contrib.auth.models import Group, User
-from django.core.files.storage import FileSystemStorage
-#from django.core.paginator import Paginator, InvalidPage, EmptyPage
+from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.shortcuts import get_object_or_404, render_to_response, redirect
from django.template import RequestContext
from sorl.thumbnail.images import ImageFile
@@ -26,7 +24,7 @@
#img_list = Image.objects.all()[i:i+12]
img_list = Image.objects.all()[:12]
- frg_list = Fragment.objects.all()[:12]
+ frg_list = Fragment.objects.all().order_by('-date_saved')[:12]
return render_to_response("egonomy_home.html",
{'img_list':img_list, 'fragment_list':frg_list, "search":search, "nb_results":nb_results},
@@ -62,7 +60,7 @@
{'fragment': frg, 'fragment_list': frg_list},
context_instance=RequestContext(request))
-#@login_required
+@login_required
def create_fragment(request, image_id):
img = get_object_or_404(Image, id=image_id)
@@ -78,7 +76,7 @@
{'img': img, 'fragment_list': frg_list},
context_instance=RequestContext(request))
-#@login_required
+@login_required
def save_fragment(request):
frg_title = request.POST["fragment_title"]
@@ -101,4 +99,23 @@
return redirect("view_fragment", fragment_pk=frg.pk)
+def all_pictures(request):
+
+ # Get the page number parameter if possible
+ page = request.GET.get("page") or 1
+ page = int(page)
+
+ img_list = Image.objects.all()
+ nb = 32
+ paginator = Paginator(img_list, nb)
+ try:
+ results = paginator.page(page)
+ except (EmptyPage, InvalidPage):
+ results = paginator.page(paginator.num_pages)
+ return render_to_response("egonomy_all_pictures.html",
+ {'results':results, 'nb_pages':paginator.num_pages, 'page':page},
+ context_instance=RequestContext(request))
+
+
+