# HG changeset patch # User Goffi # Date 1607704506 -3600 # Node ID 1b94a5ab155f219976a23bbb26a1a4d2143d25d0 # Parent e943b0c8eec574721de06bcf12269d23151eea82 pages (blog/view): Full-Text Search is used when `search` query argument is present the new `LiberviaPage.handleSearch` method implements FTS in PubSub based features. diff -r e943b0c8eec5 -r 1b94a5ab155f libervia/pages/blog/view/page_meta.py --- a/libervia/pages/blog/view/page_meta.py Fri Dec 11 17:35:06 2020 +0100 +++ b/libervia/pages/blog/view/page_meta.py Fri Dec 11 17:35:06 2020 +0100 @@ -161,9 +161,15 @@ async def prepare_render(self, request): data = self.getRData(request) + template_data = request.template_data page_max = data.get("page_max", 10) # if the comments are not explicitly hidden, we show them - service, node, item_id, show_comments = data.get('service', ''), data.get('node', ''), data.get('item'), data.get('show_comments', True) + service, node, item_id, show_comments = ( + data.get('service', ''), + data.get('node', ''), + data.get('item'), + data.get('show_comments', True) + ) profile = self.getProfile(request) if profile is None: profile = C.SERVICE_PROFILE @@ -178,7 +184,8 @@ extra = self.getPubsubExtra(request, page_max=page_max) tag = data.get('tag') if tag: - extra['mam_filter_{}'.format(C.MAM_FILTER_CATEGORY)] = tag + extra[f'mam_filter_{C.MAM_FILTER_CATEGORY}'] = tag + self.handleSearch(request, extra) ## main data ## # we get data from backend/XMPP here @@ -186,7 +193,6 @@ ## navigation ## # no let's fill service, node and pagination URLs - template_data = request.template_data if 'service' not in template_data: template_data['service'] = service if 'node' not in template_data: diff -r e943b0c8eec5 -r 1b94a5ab155f libervia/server/pages.py --- a/libervia/server/pages.py Fri Dec 11 17:35:06 2020 +0100 +++ b/libervia/server/pages.py Fri Dec 11 17:35:06 2020 +0100 @@ -1596,6 +1596,25 @@ request.data = {} return request.data + def handleSearch(self, request, extra): + """Manage Full-Text Search + + Check if "search" query argument is present, and add MAM filter for it if + necessary. + If used, the "search" variable will also be available in template data, thus + frontend can display some information about it. + """ + search = self.getPostedData(request, 'search', raise_on_missing=False) + if search is not None: + search = search.strip() + if search: + try: + extra[f'mam_filter_{self.host.ns_map["fulltextmam"]}'] = search + except KeyError: + log.warning(_("Full-text search is not available")) + else: + request.template_data['search'] = search + def _checkAccess(self, request): """Check access according to self.access