-correct css and display
authorymh <ymh.work@gmail.com>
Fri, 08 Jul 2011 12:03:07 +0200
changeset 72 ba8ebabbaece
parent 70 c86fa4a358d7
child 73 83695a58e4d6
-correct css and display - add action to sort tags : bug #16 - correct text sort -correct text encoding #3
.hgignore
web/hdabo/fixtures/datasheet_10.yaml.bz2
web/hdabo/fixtures/datasheet_347.yaml.bz2
web/hdabo/fixtures/datasheet_all.yaml.bz2
web/hdabo/management/commands/import_csv.py
web/hdabo/management/commands/order_tags.py
web/hdabo/models.py
web/hdabo/static/hdabo/css/style.css
web/hdabo/static/hdabo/img/sort-descending.png
web/hdabo/static/hdabo/js/hdabo.js
web/hdabo/templates/generic_sheet.html
web/hdabo/templates/partial/one_sheet.html
web/hdabo/urls.py
web/hdabo/utils.py
web/hdabo/views.py
web/hdabo/wp_utils.py
--- 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()