From b03639d784a2890df2ea596ac152dfb0acacc0e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Wed, 23 Nov 2011 18:37:01 +0100 Subject: [PATCH] improve label boxes autocompletion (#988) --- tabellio/searchform/form.py | 20 +++++++++++++------- tabellio/searchform/js_macros.pt | 2 +- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/tabellio/searchform/form.py b/tabellio/searchform/form.py index 6fd6767..ecaca8f 100644 --- a/tabellio/searchform/form.py +++ b/tabellio/searchform/form.py @@ -59,6 +59,8 @@ class ListAuthorsView(BrowserView): deputies_folder = property(deputies_folder) def __call__(self): + from plone.i18n.normalizer.fr import normalizer + self.portal = getToolByName(self.context, 'portal_url').getPortalObject() self.settings = component.getUtility(IRegistry).forInterface(ITabellioSettings, False) self.request.response.setHeader('Content-type', 'text/plain') @@ -72,11 +74,11 @@ class ListAuthorsView(BrowserView): return t.Title() s = [] - q = self.request.form.get('q').lower() + q = normalizer.normalize(unicode(self.request.form.get('q'), 'utf-8')).lower() for object in self.deputies_folder.objectValues(): if object.portal_type != 'themis.datatypes.deputy': continue - if q in object.id or q in object.Title().lower(): + if q in normalizer.normalize(object.Title()).lower(): s.append(object) s.sort() return '\n'.join(['%s|%s' % (x.Title(), x.id) for x in s]) @@ -113,7 +115,7 @@ class ListPolgroupsView(BrowserView): return t.Title() s = [] - q = self.request.form.get('q').lower() + q = unicode(self.request.form.get('q'), 'utf-8').lower() for object in self.polgroups_folder.objectValues(): if object.portal_type != 'themis.datatypes.polgroup': continue @@ -135,18 +137,22 @@ class ListTopicsView(BrowserView): except KeyError: return 'XXX' - query_terms = [normalizer.normalize(x).lower() for x in self.request.form.get('q').split()] + query_terms = [normalizer.normalize(x).lower() for x in unicode(self.request.form.get('q'), 'utf-8').split()] + print 'query terms:', query_terms + + sorted_topics = topics.items() + sorted_topics.sort(lambda x,y: cmp(x[1][1].lower(), y[1][1].lower())) r = [] - for key, value in topics.items(): + for key, value in sorted_topics: for term in query_terms: - if not term in value[1]: + if not term in value[1].lower(): break else: r.append('%s|%s' % (value[0], key)) if len(r) > 30: break - return '\n'.join(sorted(r)) + return '\n'.join(r) class IAuthorsWidget(ITextWidget): diff --git a/tabellio/searchform/js_macros.pt b/tabellio/searchform/js_macros.pt index 48a47e9..aeb70f7 100644 --- a/tabellio/searchform/js_macros.pt +++ b/tabellio/searchform/js_macros.pt @@ -67,7 +67,7 @@ if(typeof(String.prototype.trim) === "undefined") { $('.polgroup-autocomplete').each(sync_polgroups).autocomplete(PORTAL_URL+'/listPolgroups', { }).result(autocomplete_ready); $('.topic-autocomplete').each(sync_topics).autocomplete(PORTAL_URL+'/listTopics', { - }).result(autocomplete_ready); + 'matchContains': true, 'scroll': true, 'max': 30}).result(autocomplete_ready); }); })(jQuery);