# HG changeset patch # User ymh # Date 1371404342 -7200 # Node ID 580fd386c4b9d0579fe2c36977dbf79b004fb79e # Parent ae066d797a6647bed16feaea9868c7756bb3857d Improve design, add context diff -r ae066d797a66 -r 580fd386c4b9 .settings/org.eclipse.core.resources.prefs --- a/.settings/org.eclipse.core.resources.prefs Sun Jun 16 01:03:40 2013 +0200 +++ b/.settings/org.eclipse.core.resources.prefs Sun Jun 16 19:39:02 2013 +0200 @@ -14,4 +14,5 @@ encoding//src/jocondelab/management/commands/import_terms.py=utf-8 encoding//src/jocondelab/management/utils.py=utf-8 encoding//src/jocondelab/models.py=utf-8 +encoding//src/jocondelab/utils.py=utf-8 encoding//src/jocondelab/views.py=utf-8 diff -r ae066d797a66 -r 580fd386c4b9 src/core/templatetags/core_extras.py --- a/src/core/templatetags/core_extras.py Sun Jun 16 01:03:40 2013 +0200 +++ b/src/core/templatetags/core_extras.py Sun Jun 16 19:39:02 2013 +0200 @@ -22,11 +22,14 @@ class AppendParamNode(template.Node): - def __init__(self, dict_str): + def __init__(self, *params): + self.dict_pairs = {} - for pair in dict_str.split(','): - pair = pair.split('=') - self.dict_pairs[pair[0]] = template.Variable(pair[1]) + for dict_str in params: + if dict_str: + for pair in dict_str.split(','): + pair = pair.split('=') + self.dict_pairs[pair[0]] = template.Variable(pair[1]) def render(self, context): get = context['request'].GET.copy() @@ -38,12 +41,12 @@ if len(get): path = get.urlencode() - return path + return "?"+path if path else "" @register.tag() @easy_tag -def append_to_param(_tag_name, dict_val): - return AppendParamNode(dict_val) +def append_to_param(_tag_name, *params): + return AppendParamNode(*params) class HiddenParamFilterForm(template.Node): diff -r ae066d797a66 -r 580fd386c4b9 src/jocondelab/forms.py --- a/src/jocondelab/forms.py Sun Jun 16 01:03:40 2013 +0200 +++ b/src/jocondelab/forms.py Sun Jun 16 19:39:02 2013 +0200 @@ -27,12 +27,12 @@ return bool(int(val)) class TermFilterForm(Form): - order_by = fields.ChoiceField(required=False, choices=(('normalized_label','label'),('uri','uri'))) - order_dir = fields.ChoiceField(required=False, choices=(('asc','asc'), ('desc','desc'))) thesaurus = ModelChoiceField(required=False, queryset=Thesaurus.objects.all()) label = fields.CharField(required=False) link_status = fields.TypedChoiceField(required=False, empty_value=-1, coerce=int, choices=tuple([(-1,'---------')]+[(v, tr(l)) for v,l in TERM_URL_STATUS_CHOICES])) validated = fields.TypedChoiceField(required=False, empty_value=None, coerce=validated_to_bool, choices=(("", "---"),("1", tr("yes")), ("0", tr("no")))) + order_by = fields.ChoiceField(required=False, choices=(('normalized_label','label'),('uri','uri'))) + order_dir = fields.ChoiceField(required=False, choices=(('asc','asc'), ('desc','desc'))) def get_filter_qs(self, base_qs=None): qs = base_qs diff -r ae066d797a66 -r 580fd386c4b9 src/jocondelab/settings.py --- a/src/jocondelab/settings.py Sun Jun 16 01:03:40 2013 +0200 +++ b/src/jocondelab/settings.py Sun Jun 16 19:39:02 2013 +0200 @@ -186,7 +186,8 @@ WIKIPEDIA_VERSION_PERMALINK_TEMPLATE = "http://fr.wikipedia.org/w/index.php?oldid=%s" DBPEDIA_URI_TEMPLATE = "http://fr.dbpedia.org/resource/%s" -TERM_LIST_PAGE_SIZE = 20 +TERM_LIST_PAGE_SIZE = 20 +PAGINATOR_VISIBLE_RANGE = 7 from .config import * # @UnusedWildImport diff -r ae066d797a66 -r 580fd386c4b9 src/jocondelab/static/jocondelab/css/style.css --- a/src/jocondelab/static/jocondelab/css/style.css Sun Jun 16 01:03:40 2013 +0200 +++ b/src/jocondelab/static/jocondelab/css/style.css Sun Jun 16 19:39:02 2013 +0200 @@ -416,4 +416,37 @@ #page_number { text-align: right; +} + +.term-list-label { + width : 500px; +} + + +#inner_content { + padding-left: 30px; +} + +#term-filter-field-list { + list-style-type: none; + padding-left: 10px; +} + +#term-filter-field-list li +{ + display: inline; + list-style-type: none; + padding-right: 1px; +} + +#term-filter-top-container { + margin-bottom: 20px; +} + +#term-explorer-container { + float: left; +} + +#term-detail-container { + float: right; } \ No newline at end of file diff -r ae066d797a66 -r 580fd386c4b9 src/jocondelab/templates/jocondelab/partial/filter.html --- a/src/jocondelab/templates/jocondelab/partial/filter.html Sun Jun 16 01:03:40 2013 +0200 +++ b/src/jocondelab/templates/jocondelab/partial/filter.html Sun Jun 16 19:39:02 2013 +0200 @@ -4,8 +4,13 @@
{% hidden_param_filter filter_form %} -
\ No newline at end of file diff -r ae066d797a66 -r 580fd386c4b9 src/jocondelab/templates/jocondelab/partial/pagination.html --- a/src/jocondelab/templates/jocondelab/partial/pagination.html Sun Jun 16 01:03:40 2013 +0200 +++ b/src/jocondelab/templates/jocondelab/partial/pagination.html Sun Jun 16 19:39:02 2013 +0200 @@ -1,25 +1,29 @@ {% load i18n %} {% load core_extras %} +{% with page_obj.number as current_page_nb %} \ No newline at end of file + +{% endwith %} \ No newline at end of file diff -r ae066d797a66 -r 580fd386c4b9 src/jocondelab/templates/jocondelab/partial/term.html diff -r ae066d797a66 -r 580fd386c4b9 src/jocondelab/templates/jocondelab/partial/term_list_table.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jocondelab/templates/jocondelab/partial/term_list_table.html Sun Jun 16 19:39:02 2013 +0200 @@ -0,0 +1,38 @@ + {% load core_extras %} +
{% include "jocondelab/partial/pagination.html" %}
+
+ + + + + + {% for term in object_list %} + + + + + + + + {% endfor %} + +
Labeltheswkdbpvalid.
{{ term.label }}{{ term.thesaurus.label }} + {% if term.wikipedia_url and term.wikipedia_url != "" %} + + {% else %} + + {% endif %} + + {% if term.dbpedia_uri and term.dbpedia_uri != "" %} + + {% else %} +   + {% endif %} + + {% if term.validated %} + + {% else %} + + {% endif %} +
+
\ No newline at end of file diff -r ae066d797a66 -r 580fd386c4b9 src/jocondelab/templates/jocondelab/term_edit.html --- a/src/jocondelab/templates/jocondelab/term_edit.html Sun Jun 16 01:03:40 2013 +0200 +++ b/src/jocondelab/templates/jocondelab/term_edit.html Sun Jun 16 19:39:02 2013 +0200 @@ -14,11 +14,19 @@ var term_id = {{ term.id }}; var modify_wp_link_url = "{% url 'modify_wp_link' %}"; var remove_wp_link_url = "{% url 'remove_wp_link' %}"; - var validate_term_url = "{% url 'validate_term' %}"; + var validate_term_url = "{% url 'validate_term' %}"; + var term_list_table_url = "{% url 'term_list_table' %}"; $(document).ready(function(){ init_term_events(); + $('#term-filter-form').submit(function(){ + var values = $('#term-filter-form').serialize(); + $('#term-explorer-container').load(term_list_table_url, values); + return false; + }); + $('#term-filter-form').submit(); }); + {% endblock %} @@ -43,6 +51,13 @@ {% block content %} +
+{% include "jocondelab/partial/filter.html" %} +
+
+
+
+
En cours Validé @@ -52,32 +67,53 @@
{% csrf_token %}
+ - + - + + + + + + + + + + + - + + + - + + + + - + + + + - + + + - + + +
{{term.id}}{% trans 'Term label' %} {{term.label}} +
{% trans 'Term id' %}{{term.id}}
{% trans 'Term uri' %}{{term.uri}}
{% trans 'url wikipedia' %} {% if term.wikipedia_url and term.wikipedia_url != "" %} {% else %} {% endif %} +
{% trans 'Wikipedia revision id' %} {% if term.wikipedia_revision_id %} {% else %}   {% endif %} - +
{% trans 'DBpedia url' %} {% if term.dbpedia_uri and term.dbpedia_uri != "" %} {% else %}   {% endif %} - +
{% trans 'remove wikipedia link' %} {% if term.wikipedia_url and term.wikipedia_url != "" %} {% if term.validated %} {{term.label}} @@ -88,17 +124,25 @@   {% endif %} +
{% trans 'edit wikipedia link' %} {% if term.validated %} {% trans "Select Wikipedia page" %} : OK {% else %} {% trans "Select Wikipedia page" %} : OK {% endif %} +
{% trans 'Recherche joconde' %} Recherche joconde
+
+
{% endblock %} \ No newline at end of file diff -r ae066d797a66 -r 580fd386c4b9 src/jocondelab/templates/jocondelab/term_list.html --- a/src/jocondelab/templates/jocondelab/term_list.html Sun Jun 16 01:03:40 2013 +0200 +++ b/src/jocondelab/templates/jocondelab/term_list.html Sun Jun 16 19:39:02 2013 +0200 @@ -4,13 +4,38 @@
{% include "jocondelab/partial/filter.html" %}
{% include "jocondelab/partial/pagination.html" %}
- +
- + {% for term in object_list %} - + + + + + + + + {% endfor %}
Labelthesaurusuri
Labelthesauruswikipediadbpediavalid.
{{ term.label }}{{ term.thesaurus.label }}{{ term.uri }}
{{ term.label }}{{ term.thesaurus.label }} + {% if term.wikipedia_url and term.wikipedia_url != "" %} + + {% else %} + + {% endif %} + + {% if term.dbpedia_uri and term.dbpedia_uri != "" %} + + {% else %} +   + {% endif %} + + {% if term.validated %} + + {% else %} + + {% endif %} +
diff -r ae066d797a66 -r 580fd386c4b9 src/jocondelab/urls.py --- a/src/jocondelab/urls.py Sun Jun 16 01:03:40 2013 +0200 +++ b/src/jocondelab/urls.py Sun Jun 16 19:39:02 2013 +0200 @@ -3,6 +3,7 @@ from django.contrib import admin from django.contrib.auth.decorators import login_required from django.contrib.auth import urls as auth_url +from jocondelab.views import TermListTableView admin.autodiscover() @@ -11,6 +12,7 @@ url(r'^logout/$', 'django.contrib.auth.views.logout_then_login', name='joconde_logout'), url(r'^admin/', include(admin.site.urls)), url(r'^$', login_required(TermListView.as_view()), name='home'), + url(r'^bo/term/list/table$', login_required(TermListTableView.as_view()), name='term_list_table'), url(r'^bo/term/(?P\d+)/$', login_required(TermEditView.as_view()), name='term'), url(r'^bo/term/modify-wp/$', login_required(TermModifyWpLink.as_view()), name='modify_wp_link'), url(r'^bo/term/remove-wp/$', login_required(TermRemoveWpLink.as_view()), name='remove_wp_link'), diff -r ae066d797a66 -r 580fd386c4b9 src/jocondelab/utils.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jocondelab/utils.py Sun Jun 16 19:39:02 2013 +0200 @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- +''' +Created on Jun 16, 2013 + +@author: ymh +''' + +from django.conf import settings +from django.core.paginator import Paginator, Page, PageNotAnInteger, EmptyPage +import logging + +logger = logging.getLogger(__name__) + + +class JocondePaginator(Paginator): + + def validate_number(self, number): + "Validates the given 1-based page number." + try: + number = int(number) + except (TypeError, ValueError): + raise PageNotAnInteger('That page number is not an integer') + if number < 1: + return 1 + if number > self.num_pages: + if number == 1 and self.allow_empty_first_page: + return 1 + elif self.num_pages > 0: + return self.num_pages + else: + raise EmptyPage('That page contains no results') + return number + + + def page(self, number): + page = super(JocondePaginator, self).page(number) + return JocondePage(page.object_list, page.number, self) + + +class JocondePage(Page): + + def __get_start_range(self): + return max(1,self.number-settings.PAGINATOR_VISIBLE_RANGE/2) + + def __get_end_range(self): + return min(self.paginator.num_pages, self.number+settings.PAGINATOR_VISIBLE_RANGE/2) + 1 + + def visible_page_range(self): + start = self.__get_start_range() + end = self.__get_end_range() + return range(start , end) + + def ellipsis_before(self): + return self.__get_start_range() > 1 + + def ellipsis_after(self): + return self.__get_end_range() < self.paginator.num_pages diff -r ae066d797a66 -r 580fd386c4b9 src/jocondelab/views.py --- a/src/jocondelab/views.py Sun Jun 16 01:03:40 2013 +0200 +++ b/src/jocondelab/views.py Sun Jun 16 19:39:02 2013 +0200 @@ -7,6 +7,7 @@ from .forms import (ModifyWpLinkForm, ValidateTermForm, RemoveWpLinkForm, TermFilterForm) +from .utils import JocondePaginator from core.models import Term, TERM_URL_STATUS_DICT from core.wp_utils import process_term as wp_process_term from django.conf import settings @@ -20,8 +21,9 @@ model = Term paginate_by = settings.TERM_LIST_PAGE_SIZE + paginator_class = JocondePaginator template_name = "jocondelab/term_list.html" - form_class = TermFilterForm + filter_form_class = TermFilterForm def get_filter_form(self): initial = { 'order_by':'label', @@ -30,7 +32,7 @@ 'label': None, 'link_status': -1, 'validated': None} - return self.form_class(self.request.GET, initial=initial, auto_id=True) + return self.filter_form_class(self.request.GET, initial=initial, auto_id=True) def get_context_data(self, **kwargs): context = ListView.get_context_data(self, **kwargs) @@ -45,12 +47,34 @@ else: return None +class TermListTableView(TermListView): + + template_name = "jocondelab/partial/term_list_table.html" + + + class TermEditView(DetailView): queryset = Term.objects.select_related() pk_url_kwarg = "term_id" context_object_name = "term" template_name = "jocondelab/term_edit.html" + filter_form_class = TermFilterForm + + def get_filter_form(self): + initial = { 'order_by':'label', + 'order_dir': 'asc', + 'thesaurus': None, + 'label': None, + 'link_status': -1, + 'validated': None} + return self.filter_form_class(self.request.GET, initial=initial, auto_id=True) + + + def get_context_data(self, **kwargs): + context = DetailView.get_context_data(self, **kwargs) + context['filter_form'] = self.get_filter_form() + return context