-correct css and display
- add action to sort tags : bug #16
- correct text sort
-correct text encoding #3
--- a/.hgignore Fri Jul 08 03:23:20 2011 +0200
+++ b/.hgignore Fri Jul 08 12:03:07 2011 +0200
@@ -16,4 +16,6 @@
^web/index/.*$
syntax: regexp
-^virtualenv/res/src/south$
\ No newline at end of file
+^virtualenv/res/src/south$
+syntax: regexp
+\.sh$
\ No newline at end of file
Binary file web/hdabo/fixtures/datasheet_10.yaml.bz2 has changed
Binary file web/hdabo/fixtures/datasheet_347.yaml.bz2 has changed
Binary file web/hdabo/fixtures/datasheet_all.yaml.bz2 has changed
--- a/web/hdabo/management/commands/import_csv.py Fri Jul 08 03:23:20 2011 +0200
+++ b/web/hdabo/management/commands/import_csv.py Fri Jul 08 12:03:07 2011 +0200
@@ -193,6 +193,7 @@
if tag_obj is None:
tag_obj = Tag(label=tag_label, original_label=tag)
+ tag_obj.save()
tagged_ds = TaggedSheet(datasheet=datasheet, tag=tag_obj, original_order=i + 1, order=i + 1)
tagged_ds.save()
--- a/web/hdabo/management/commands/order_tags.py Fri Jul 08 03:23:20 2011 +0200
+++ b/web/hdabo/management/commands/order_tags.py Fri Jul 08 12:03:07 2011 +0200
@@ -6,13 +6,12 @@
from django.core.management.base import NoArgsCommand
from django.core.management.color import no_style
-from haystack.constants import DJANGO_ID
-from haystack.query import SearchQuerySet
+from django.db import transaction
from hdabo.models import Datasheet
+from hdabo.wp_utils import reorder_datasheet_tags
+from optparse import make_option
import math
import sys
-from optparse import make_option
-from django.db import transaction
class Command(NoArgsCommand):
@@ -31,6 +30,11 @@
dest='force',
default=False,
help='force reordering of all datasheets'),
+ make_option('--noinput',
+ action='store_true',
+ dest='no_input',
+ default=False,
+ help='no input'),
)
@@ -53,7 +57,7 @@
self.style = no_style()
- interactive = options.get('interactive', True)
+ interactive = options.get('interactive', True) and not options.get('no_input', False)
force = options.get('force', True)
if interactive:
@@ -80,21 +84,7 @@
try:
for i, ds in enumerate(queryset):
self.show_progress(i + 1, total, 60)
- ts_list = []
- for ts in ds.taggedsheet_set.all():
- kwargs = {DJANGO_ID + "__exact": unicode(ds.pk)}
- results = SearchQuerySet().filter(title=ts.tag.label).filter_or(description=ts.tag.label).filter(**kwargs)
- if len(results) > 0:
- ts.index_note = results[0].score
- ts.save()
- ts_list.append(ts)
- ts_list.sort(key=lambda t: (-t.index_note, t.order))
- for k, ts in enumerate(ts_list):
- ts.order = k + 1
- ts.save()
- if ds.manual_order:
- ds.manual_order = False
- ds.save()
+ reorder_datasheet_tags(ds)
transaction.commit()
except:
transaction.rollback()
--- a/web/hdabo/models.py Fri Jul 08 03:23:20 2011 +0200
+++ b/web/hdabo/models.py Fri Jul 08 12:03:07 2011 +0200
@@ -4,7 +4,7 @@
from django.contrib.auth.models import User
from django.db import models
from hdabo.fields import SortedManyToManyField
-from hdabo.utils import Property
+from hdabo.utils import Property, normalize
import datetime
class Organisation(models.Model):
@@ -94,6 +94,7 @@
}
label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True)
+ normalized_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, db_index=True, editable=False)
original_label = models.CharField(max_length=1024, unique=False, blank=False, null=False, editable=False)
alias = models.CharField(max_length=1024, unique=False, blank=True, null=True)
category = models.ForeignKey(TagCategory, null=True, blank=True)
@@ -108,7 +109,11 @@
def fget(self):
return self.TAG_URL_STATUS_CHOICES[self.url_status][1]
- return locals()
+ return locals()
+
+ def save(self, *args, **kwargs):
+ self.normalized_label = normalize(self.label)
+ super(Tag, self).save(*args,**kwargs)
class Location(models.Model):
name = models.CharField(max_length=512, unique=False, blank=False, null=False)
--- a/web/hdabo/static/hdabo/css/style.css Fri Jul 08 03:23:20 2011 +0200
+++ b/web/hdabo/static/hdabo/css/style.css Fri Jul 08 12:03:07 2011 +0200
@@ -390,3 +390,6 @@
font-weight: bold;
}
+#tags_actions span {
+ margin-left: 5px
+}
Binary file web/hdabo/static/hdabo/img/sort-descending.png has changed
--- a/web/hdabo/static/hdabo/js/hdabo.js Fri Jul 08 03:23:20 2011 +0200
+++ b/web/hdabo/static/hdabo/js/hdabo.js Fri Jul 08 12:03:07 2011 +0200
@@ -195,7 +195,12 @@
add_tag($("#wp_search").val());
}
});
-
+ $("#tags_sort").click(function(e){
+ e.preventDefault();
+ if(confirm("Confirmez-vous le tri des tags ?")) {
+ reorder_tags();
+ }
+ });
// Validate sheet management : the radiobutton name has is "'gr_validated' + datasheet.hda_id"
$("#validated").click(function(e){
e.preventDefault();
@@ -317,3 +322,28 @@
}
});
}
+
+function reorder_tags() {
+ $('#tags_sort').attr("disabled", "disabled");
+ var tag_sort_old_src = $("#tags_sort").attr("src");
+ $("#tags_sort").attr("src",static_url+"hdabo/img/indicator.gif");
+ $.ajax({
+ url: reorder_tag_datasheet_url,
+ type: 'POST',
+ data: {
+ csrfmiddlewaretoken:global_csrf_token,
+ datasheet_id:$('#datasheet_id').val()
+ },
+ success: function(msg, textStatus, XMLHttpRequest) {
+ $('#tag_table_container').html(msg);
+ init_tags_events();
+ // And scroll to the bottom
+ $("html").animate({ scrollTop: $(document).height() }, 500);
+ },
+ complete: function(){
+ $("#tags_sort").attr("src",tag_sort_old_src);
+ $('#tags_sort').removeAttr("disabled");
+ }
+ });
+}
+
--- a/web/hdabo/templates/generic_sheet.html Fri Jul 08 03:23:20 2011 +0200
+++ b/web/hdabo/templates/generic_sheet.html Fri Jul 08 12:03:07 2011 +0200
@@ -19,6 +19,7 @@
var remove_tag_from_list_url = "{% url hdabo.views.remove_tag_from_list %}";
var modify_tag_url = "{% url hdabo.views.modify_tag_datasheet %}";
var reset_wp_info_url = "{% url hdabo.views.reset_wikipedia_info %}";
+ var reorder_tag_datasheet_url = "{% url hdabo.views.reorder_tag_datasheet %}";
var add_tag_url = "{% url hdabo.views.add_tag %}";
var remove_wp_link_url = "{% url hdabo.views.remove_wp_link %}";
var validate_datasheet_url = "{% url hdabo.views.validate_datasheet %}";
--- a/web/hdabo/templates/partial/one_sheet.html Fri Jul 08 03:23:20 2011 +0200
+++ b/web/hdabo/templates/partial/one_sheet.html Fri Jul 08 12:03:07 2011 +0200
@@ -19,18 +19,23 @@
{# <p><b>original_modification_date</b><br/>{{ds.original_modification_date|date:"d/m/Y"}}</p> #}
</div>
<div class="right_sheet">
- <p><input type="radio" name="gr_validated{{ds.hda_id}}" id="not_validated" value="not_validated" {% if not ds.validated %}checked{% endif %} {% if valid == "2" %}disabled{% endif %} />En cours
- <input type="radio" name="gr_validated{{ds.hda_id}}" id="validated" value="validated" {% if ds.validated %}checked{% endif %} {% if valid == "2" %}disabled{% endif %} />Validé
- {% if ds.validated %}
- par {{ds.validator.username}} le {{ds.validation_date|date:"d/m/Y"}}
- {% endif %}
- {% if valid != "2" %}
- <span style="float:right;">Ajouter un tag : <input type="text" name="wp_search" id="wp_search" size="60" /> <span id="ok_search" class="hand_cursor"><b>OK</b></span></span>
- {% endif %}
- </p>
- {% csrf_token %}
- <input type="hidden" name="datasheet_id" value="{{ds.hda_id}}" id="datasheet_id" />
- <div id="tag_table_container">
+ <div id="tags_commands" style="float:left;width: 100%" >
+ <div style="float:left;"><input type="radio" name="gr_validated{{ds.hda_id}}" id="not_validated" value="not_validated" {% if not ds.validated %}checked{% endif %} {% if valid == "2" %}disabled{% endif %} />En cours
+ <input type="radio" name="gr_validated{{ds.hda_id}}" id="validated" value="validated" {% if ds.validated %}checked{% endif %} {% if valid == "2" %}disabled{% endif %} />Validé
+ {% if ds.validated %}
+ par {{ds.validator.username}} le {{ds.validation_date|date:"d/m/Y"}}
+ {% endif %}
+ </div>
+ {% if valid != "2" %}
+ <div style="float:right;" id="tags_actions">
+ <span>Trier les tags : <input type="image" src="{{STATIC_URL}}hdabo/img/sort-descending.png" width="16" height="16" name="trier" id="tags_sort" /></span>
+ <span>Ajouter un tag : <input type="text" name="wp_search" id="wp_search" size="35" /> <span id="ok_search" class="hand_cursor"><b>OK</b></span></span>
+ </div>
+ {% endif %}
+ {% csrf_token %}
+ <input type="hidden" name="datasheet_id" value="{{ds.hda_id}}" id="datasheet_id" />
+ </div>
+ <div id="tag_table_container" style="float:left; width: 100%">
{% include "partial/tag_table.html" %}
</div>
</div>
--- a/web/hdabo/urls.py Fri Jul 08 03:23:20 2011 +0200
+++ b/web/hdabo/urls.py Fri Jul 08 12:03:07 2011 +0200
@@ -42,4 +42,5 @@
url(r'^validatedatasheet/(?P<ds_id>[\w-]+)/(?P<valid>[\w-]+)/$', 'hdabo.views.validate_datasheet'),
url(r'^updatetagalias$', 'hdabo.views.update_tag_alias'),
url(r'^updatetagcategory$', 'hdabo.views.update_tag_category'),
+ url(r'^ordertagsdatasheet$', 'hdabo.views.reorder_tag_datasheet'),
)
--- a/web/hdabo/utils.py Fri Jul 08 03:23:20 2011 +0200
+++ b/web/hdabo/utils.py Fri Jul 08 12:03:07 2011 +0200
@@ -343,3 +343,6 @@
def remove_accents(str):
nkfd_form = unicodedata.normalize('NFKD', unicode(str))
return u"".join([c for c in nkfd_form if not unicodedata.combining(c)])
+
+def normalize(str):
+ return remove_accents(str).lower()
--- a/web/hdabo/views.py Fri Jul 08 03:23:20 2011 +0200
+++ b/web/hdabo/views.py Fri Jul 08 12:03:07 2011 +0200
@@ -11,16 +11,15 @@
from django.utils.http import urlquote
from haystack.constants import DJANGO_ID
from haystack.query import SearchQuerySet
-from hdabo.utils import OrderedDict, remove_accents
+from hdabo.utils import OrderedDict, remove_accents, normalize
from hdabo.wp_utils import (normalize_tag, query_wikipedia_title,
- get_or_create_tag, process_tag)
+ get_or_create_tag, process_tag, reorder_datasheet_tags)
from models import Datasheet, Organisation, Tag, TagCategory, TaggedSheet
from wikitools import wiki
import django.utils.simplejson as json
import re
-
@login_required
def home(request):
@@ -203,7 +202,7 @@
cursor = connection.cursor() #@UndefinedVariable
fl_list = []
try:
- cursor.execute("select upper(substring(label from 1 for 1)) as fl from hdabo_tag group by fl order by fl;")
+ cursor.execute("select upper(substring(normalized_label from 1 for 1)) as fl from hdabo_tag group by fl order by fl;")
for row in cursor:
new_char = remove_accents(row[0])
@@ -282,12 +281,11 @@
base_queryset = Tag.objects
if searched and searched != "" :
- searched = searched.strip()
+ searched = normalize(searched.strip())
regex = "^%s$" % (re.escape(searched).replace(re.escape(settings.SEARCH_STAR_CHARACTER),".*"))
- base_queryset = base_queryset.filter(label__iregex=regex)
+ base_queryset = base_queryset.filter(normalized_label__iregex=regex)
- alltags = base_queryset.annotate(num_ds=Count('datasheet')).order_by('-popularity','-num_ds','label')
- #alltags = alltags.order_by('-popularity','label')
+ alltags = base_queryset.annotate(num_ds=Count('datasheet')).order_by('-popularity','-num_ds','normalized_label', 'label')
# We build the paginator for the requested list
if nb_by_page :
@@ -553,4 +551,11 @@
else :
return get_all_tags_table(request=request, num_page=request.POST["num_page"], nb_by_page=request.POST["nb_by_page"], searched=request.POST["searched"])
-
+@login_required
+def reorder_tag_datasheet(request):
+
+ ds_id = request.REQUEST['datasheet_id']
+ ds = Datasheet.objects.get(hda_id=ds_id)
+ reorder_datasheet_tags(ds)
+
+ return get_tag_table(request=request, ds_id=ds_id, valid=0)
--- a/web/hdabo/wp_utils.py Fri Jul 08 03:23:20 2011 +0200
+++ b/web/hdabo/wp_utils.py Fri Jul 08 12:03:07 2011 +0200
@@ -1,8 +1,11 @@
# -*- coding: utf-8 -*-
from django.conf import settings
+from django.utils.http import urlquote
+from haystack.constants import DJANGO_ID
+from haystack.query import SearchQuerySet
from hdabo.models import Tag, TaggedSheet
from wikitools import api, wiki
-from django.utils.http import urlquote
+
def normalize_tag(tag):
if len(tag) == 0:
@@ -14,7 +17,7 @@
return tag
def urlize_for_wikipedia(label):
- return urlquote(label.replace(" ","_"))
+ return urlquote(label.replace(" ", "_"))
def __is_homonymie(page_dict):
@@ -36,7 +39,7 @@
response = wpquery.query()
original_response = response
def return_null_result():
- return { 'new_label': None, 'status': Tag.TAG_URL_STATUS_DICT["null_result"], 'wikipedia_url': None, 'pageid': None, 'dbpedia_uri': None, 'revision_id': None,'response': response }
+ return { 'new_label': None, 'status': Tag.TAG_URL_STATUS_DICT["null_result"], 'wikipedia_url': None, 'pageid': None, 'dbpedia_uri': None, 'revision_id': None, 'response': response }
query_dict = response['query']
@@ -164,6 +167,23 @@
if prev_wikipedia_pageid != pageid:
TaggedSheet.objects.filter(tag=tag).update(wikipedia_revision_id=revision_id)
-
+
+
+def reorder_datasheet_tags(ds):
+ ts_list = []
+ for ts in ds.taggedsheet_set.all():
+ kwargs = {DJANGO_ID + "__exact": unicode(ds.pk)}
+ results = SearchQuerySet().filter(title=ts.tag.label).filter_or(description=ts.tag.label).filter(**kwargs)
+ if len(results) > 0:
+ ts.index_note = results[0].score
+ ts.save()
+ ts_list.append(ts)
+ ts_list.sort(key=lambda t: (-t.index_note, t.order))
+ for k, ts in enumerate(ts_list):
+ ts.order = k + 1
+ ts.save()
+ if ds.manual_order:
+ ds.manual_order = False
+ ds.save()