import catalogue.models
import infopages.models
-import picture.models
+import social.models
from .forms import SearchFilters
import re
import json
return query_syntax_chars.sub(replace, query)
-@cache.never_cache
-def hint(request, mozhint=False, param='term'):
- prefix = request.GET.get(param, '')
- if len(prefix) < 2:
- return JsonResponse([], safe=False)
-
- prefix = re_escape(' '.join(remove_query_syntax_chars(prefix).split()))
-
- try:
- limit = int(request.GET.get('max', ''))
- except ValueError:
- limit = 20
- else:
- if limit < 1:
- limit = 20
-
+def get_hints(prefix, user=None, limit=10):
+ if not prefix: return []
data = []
if len(data) < limit:
authors = catalogue.models.Tag.objects.filter(
{
'type': 'author',
'label': author.name,
- 'url': author.get_absolute_gallery_url() if author.for_pictures else author.get_absolute_url(),
+ 'url': author.get_absolute_url(),
'img': get_thumbnail(author.photo, '72x72', crop='top').url if author.photo else '',
}
for author in authors[:limit - len(data)]
])
- if request.user.is_authenticated and len(data) < limit:
- tags = catalogue.models.Tag.objects.filter(
- category='set', user=request.user, name_pl__iregex='\m' + prefix).only('name', 'id', 'slug', 'category')
+
+ if user is not None and user.is_authenticated and len(data) < limit:
+ tags = social.models.UserList.objects.filter(
+ user=user, name__iregex='\m' + prefix).only('name', 'id', 'slug')
data.extend([
{
- 'type': 'set',
+ 'type': 'userlist',
'label': tag.name,
'url': tag.get_absolute_url(),
}
{
'type': tag.category,
'label': tag.name,
- 'url': tag.get_absolute_gallery_url() if tag.for_pictures else tag.get_absolute_url(),
+ 'url': tag.get_absolute_url(),
}
for tag in tags[:limit - len(data)]
])
'img': get_thumbnail(b.cover_clean, '72x72').url if b.cover_clean else '',
}
)
- if len(data) < limit:
- arts = picture.models.Picture.objects.filter(
- title__iregex='\m' + prefix).only('title', 'id', 'slug') # img?
- data.extend([
- {
- 'type': 'art',
- 'label': art.title,
- 'author': art.author_unicode(),
- 'url': art.get_absolute_url(),
- 'img': get_thumbnail(art.image_file, '72x72').url if art.image_file else '',
- }
- for art in arts[:limit - len(data)]
- ])
if len(data) < limit:
infos = infopages.models.InfoPage.objects.filter(
+ published=True,
+ findable=True,
title_pl__iregex='\m' + prefix).only('title', 'id', 'slug')
data.extend([
{
}
for info in infos[:limit - len(data)]
])
+ return data
+
+
+@cache.never_cache
+def hint(request, mozhint=False, param='term'):
+ prefix = request.GET.get(param, '')
+ if len(prefix) < 2:
+ return JsonResponse([], safe=False)
+
+ prefix = re_escape(' '.join(remove_query_syntax_chars(prefix).split()))
+
+ try:
+ limit = int(request.GET.get('max', ''))
+ except ValueError:
+ limit = 20
+ else:
+ if limit < 1:
+ limit = 20
+
+ data = get_hints(
+ prefix,
+ user=request.user if request.user.is_authenticated else None,
+ limit=limit
+ )
if mozhint:
data = [