On trie les emoji en premier

Fix #212
This commit is contained in:
Jean-Marie Favreau 2024-11-19 23:36:33 +01:00
parent af2948827d
commit bf5db35e57
4 changed files with 11 additions and 6 deletions

View File

@ -9,6 +9,7 @@ from colorfield.fields import ColorField
from django_ckeditor_5.fields import CKEditor5Field from django_ckeditor_5.fields import CKEditor5Field
from urllib.parse import urlparse from urllib.parse import urlparse
from django.core.cache import cache from django.core.cache import cache
import emoji
import hashlib import hashlib
import urllib.request import urllib.request
@ -247,9 +248,9 @@ class Tag(models.Model):
tags.sort(key=lambda x: -x["count"]) tags.sort(key=lambda x: -x["count"])
tags1 = tags[0:nb_suggestions] tags1 = tags[0:nb_suggestions]
tags1.sort(key=lambda x: remove_accents(x["tag"]).lower()) tags1.sort(key=lambda x: emoji.demojize(remove_accents(x["tag"]).lower(), delimiters=('000', '')))
tags2 = tags[nb_suggestions:] tags2 = tags[nb_suggestions:]
tags2.sort(key=lambda x: remove_accents(x["tag"]).lower()) tags2.sort(key=lambda x: emoji.demojize(remove_accents(x["tag"]).lower(), delimiters=('000', '')))
result = ((_('Suggestions'), [(t["tag"], t["tag"]) for t in tags1]), result = ((_('Suggestions'), [(t["tag"], t["tag"]) for t in tags1]),
(_('Others'), [(t["tag"], t["tag"]) for t in tags2])) (_('Others'), [(t["tag"], t["tag"]) for t in tags2]))
@ -697,7 +698,7 @@ class Event(models.Model):
cursor.execute(raw_query) cursor.execute(raw_query)
result = [{"tag": row[0], "count": row[1]} for row in cursor] result = [{"tag": row[0], "count": row[1]} for row in cursor]
if sort: if sort:
result.sort(key=lambda x: remove_accents(x["tag"].lower())) result.sort(key=lambda x: emoji.demojize(remove_accents(x["tag"].lower()), delimiters=('000', '')))
return result return result
def is_draft(self): def is_draft(self):

View File

@ -199,6 +199,8 @@ details[role="list"] summary + ul li.selected>a:hover {
font-size: 90%; font-size: 90%;
padding: 0.15em 0.4em 0.3em 0.4em; padding: 0.15em 0.4em 0.3em 0.4em;
overflow: hidden; overflow: hidden;
float: left;
text-align: left;
} }
.suggested-tags .small-cat { .suggested-tags .small-cat {

View File

@ -17,6 +17,7 @@ from django.contrib.gis.measure import D
from django.http import HttpResponseRedirect, HttpResponse from django.http import HttpResponseRedirect, HttpResponse
from django.urls import reverse from django.urls import reverse
from collections import Counter from collections import Counter
import emoji
from django.forms import formset_factory from django.forms import formset_factory
@ -928,7 +929,7 @@ def event_search(request, full=False):
categories = Category.objects.filter(name__icontains=request.GET['q']) categories = Category.objects.filter(name__icontains=request.GET['q'])
s_q = remove_accents(request.GET['q'].lower()) s_q = remove_accents(request.GET['q'].lower())
tags = Event.objects.extra(where=['%s ILIKE ANY (tags)'], params=[request.GET['q']]).annotate(arr_tags=Func(F('tags'), function='unnest')).values_list('arr_tags', flat=True).distinct() tags = Event.objects.extra(where=['%s ILIKE ANY (tags)'], params=[request.GET['q']]).annotate(arr_tags=Func(F('tags'), function='unnest')).values_list('arr_tags', flat=True).distinct()
tags = [(t, remove_accents(t).lower()) for t in tags] tags = [(t, emoji.demojize(remove_accents(t).lower(), delimiters=('000', ''))) for t in tags]
tags = [t for t in tags if s_q == t[1]] tags = [t for t in tags if s_q == t[1]]
tags.sort(key=lambda x: x[1]) tags.sort(key=lambda x: x[1])
tags = [t[0] for t in tags] tags = [t[0] for t in tags]
@ -1886,7 +1887,7 @@ def tag_list(request):
tags = [t | {'obj': d_objects[t["tag"]]} if t["tag"] in d_objects else t for t in tags] tags = [t | {'obj': d_objects[t["tag"]]} if t["tag"] in d_objects else t for t in tags]
context = {"tags": sorted(tags, key=lambda x: remove_accents(x["tag"]).lower())} context = {"tags": sorted(tags, key=lambda x: emoji.demojize(remove_accents(x["tag"]).lower(), delimiters=('000', '')))}
return render(request, "agenda_culturel/tags.html", context) return render(request, "agenda_culturel/tags.html", context)
@login_required(login_url="/accounts/login/") @login_required(login_url="/accounts/login/")

View File

@ -41,4 +41,5 @@ json5==0.9.25
django-location-field==2.7.3 django-location-field==2.7.3
django-robots==6.1 django-robots==6.1
django-debug-toolbar==4.4.6 django-debug-toolbar==4.4.6
django-cache-cleaner==0.1.0 django-cache-cleaner==0.1.0
emoji==2.14.0