Mercurial > libervia-web
annotate libervia/web/pages/blog/page_meta.py @ 1624:fd421f1be8f5 default tip
browser (blog): blog redesign first draft:
Redesign the blog in the same spirit as the chat, with a left panel to search/open new
blogs, so there is no "selection" page anymore.
Reactions are now managed.
author | Goffi <goffi@goffi.org> |
---|---|
date | Wed, 21 May 2025 15:58:56 +0200 |
parents | eb00d593801d |
children |
rev | line source |
---|---|
1216 | 1 #!/usr/bin/env python3 |
1239 | 2 |
1624
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
3 import html |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
4 from typing import Any, Dict, Optional |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
5 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
6 from libervia.backend.core.i18n import D_, _ |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
7 from libervia.backend.core.log import getLogger |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
8 from libervia.backend.tools.common import uri |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
9 from libervia.backend.tools.common import data_format |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
10 from libervia.backend.tools.common import regex |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
11 from libervia.backend.tools.common.template import safe |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
12 from twisted.web import server |
1077
880ea673aaff
blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
13 from twisted.words.protocols.jabber import jid |
1624
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
14 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
15 from libervia.web.server import utils |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
16 from libervia.web.server.constants import Const as C |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
17 from libervia.web.server.utils import SubPage |
1077
880ea673aaff
blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
18 |
1145
29eb15062416
pages: set __name__ for imported pages
Goffi <goffi@goffi.org>
parents:
1139
diff
changeset
|
19 log = getLogger(__name__) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1087
diff
changeset
|
20 |
1624
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
21 """generic blog (with service/node provided)""" |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
22 name = 'blog' |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
23 access = C.PAGES_ACCESS_PROFILE |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
24 template = "blog/blog.html" |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
25 uri_handlers = {('pubsub', 'microblog'): 'microblog_uri'} |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
26 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
27 URL_LIMIT_MARK = 90 # if canonical URL is longer than that, text will not be appended |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
28 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
29 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
30 def microblog_uri(self, uri_data): |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
31 args = [uri_data['path'], uri_data['node']] |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
32 if 'item' in uri_data: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
33 args.extend(['id', uri_data['item']]) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
34 return self.get_url(*args) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
35 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
36 def parse_url(self, request): |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
37 """URL is /[service]/[node]/[filter_keyword]/[item]|[other] |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
38 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
39 if [node] is '@', default namespace is used |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
40 if a value is unset, default one will be used |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
41 keyword can be one of: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
42 id: next value is a item id |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
43 tag: next value is a blog tag |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
44 """ |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
45 data = self.get_r_data(request) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
46 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
47 try: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
48 service = self.next_path(request) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
49 except IndexError: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
50 service = self.get_jid(request).userhost() |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
51 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
52 try: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
53 data["service"] = jid.JID(service) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
54 except Exception: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
55 log.warning(_("bad service entered: {}").format(service)) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
56 self.page_error(request, C.HTTP_BAD_REQUEST) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
57 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
58 try: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
59 node = self.next_path(request) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
60 except IndexError: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
61 node = '@' |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
62 data['node'] = '' if node == '@' else node |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
63 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
64 try: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
65 filter_kw = data['filter_keyword'] = self.next_path(request) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
66 except IndexError: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
67 filter_kw = '@' |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
68 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
69 if filter_kw == '@': |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
70 # No filter, this is used when a subpage is needed, notably Atom feed |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
71 pass |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
72 elif filter_kw == 'id': |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
73 try: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
74 data['item'] = self.next_path(request) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
75 except IndexError: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
76 self.page_error(request, C.HTTP_BAD_REQUEST) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
77 # we get one more argument in case text has been added to have a nice URL |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
78 try: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
79 self.next_path(request) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
80 except IndexError: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
81 pass |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
82 elif filter_kw == 'tag': |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
83 try: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
84 data['tag'] = self.next_path(request) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
85 except IndexError: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
86 self.page_error(request, C.HTTP_BAD_REQUEST) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
87 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
88 # invalid filter keyword |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
89 log.warning(_("invalid filter keyword: {filter_kw}").format( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
90 filter_kw=filter_kw)) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
91 self.page_error(request, C.HTTP_BAD_REQUEST) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
92 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
93 # if URL is parsed here, we'll have atom.xml available and we need to |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
94 # add the link to the page |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
95 atom_url = self.get_url_by_path( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
96 SubPage('blog_view'), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
97 service, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
98 node, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
99 filter_kw, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
100 SubPage('blog_feed_atom'), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
101 ) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
102 request.template_data['atom_url'] = atom_url |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
103 request.template_data.setdefault('links', []).append({ |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
104 "href": atom_url, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
105 "type": "application/atom+xml", |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
106 "rel": "alternate", |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
107 "title": "{service}'s blog".format(service=service)}) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
108 |
1077
880ea673aaff
blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
109 |
1624
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
110 def add_breadcrumb(self, request, breadcrumbs): |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
111 data = self.get_r_data(request) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
112 breadcrumbs.append({ |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
113 "label": D_("Feed"), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
114 "url": self.get_url(data["service"].full(), data.get("node", "@")) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
115 }) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
116 if "item" in data: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
117 breadcrumbs.append({ |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
118 "label": D_("Post"), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
119 }) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
120 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
121 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
122 async def append_comments( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
123 self, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
124 request: server.Request, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
125 blog_items: dict, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
126 profile: str, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
127 _seen: Optional[set] = None |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
128 ) -> None: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
129 """Recursively download and append comments of items |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
130 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
131 @param blog_items: items data |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
132 @param profile: Libervia profile |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
133 @param _seen: used to avoid infinite recursion. For internal use only |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
134 """ |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
135 if _seen is None: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
136 _seen = set() |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
137 await self.fill_missing_identities( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
138 request, [i['author_jid'] for i in blog_items['items']]) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
139 extra: Dict[str, Any] = {C.KEY_ORDER_BY: C.ORDER_BY_CREATION} |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
140 if not self.use_cache(request): |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
141 extra[C.KEY_USE_CACHE] = False |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
142 for blog_item in blog_items['items']: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
143 for comment_data in blog_item['comments']: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
144 service = comment_data['service'] |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
145 node = comment_data['node'] |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
146 service_node = (service, node) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
147 if service_node in _seen: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
148 log.warning( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
149 f"Items from {node!r} at {service} have already been retrieved, " |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
150 "there is a recursion at this service" |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
151 ) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
152 comment_data["items"] = [] |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
153 continue |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
154 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
155 _seen.add(service_node) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
156 try: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
157 comments_data = await self.host.bridge_call('mb_get', |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
158 service, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
159 node, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
160 C.NO_LIMIT, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
161 [], |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
162 data_format.serialise( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
163 extra |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
164 ), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
165 profile) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
166 except Exception as e: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
167 log.warning( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
168 _("Can't get comments at {node} (service: {service}): {msg}").format( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
169 service=service, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
170 node=node, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
171 msg=e)) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
172 comment_data['items'] = [] |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
173 continue |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
174 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
175 comments = data_format.deserialise(comments_data) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
176 if comments is None: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
177 log.error(f"Comments should not be None: {comment_data}") |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
178 comment_data["items"] = [] |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
179 continue |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
180 comment_data['items'] = comments['items'] |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
181 await append_comments(self, request, comments, profile, _seen=_seen) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
182 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
183 async def get_blog_items( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
184 self, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
185 request: server.Request, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
186 service: jid.JID, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
187 node: str, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
188 item_id, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
189 extra: Dict[str, Any], |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
190 profile: str |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
191 ) -> dict: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
192 try: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
193 if item_id: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
194 items_id = [item_id] |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
195 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
196 items_id = [] |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
197 if not self.use_cache(request): |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
198 extra[C.KEY_USE_CACHE] = False |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
199 blog_data = await self.host.bridge_call('mb_get', |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
200 service.userhost(), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
201 node, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
202 C.NO_LIMIT, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
203 items_id, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
204 data_format.serialise(extra), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
205 profile) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
206 except Exception as e: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
207 # FIXME: need a better way to test errors in bridge errback |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
208 if "forbidden" in str(e): |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
209 self.page_error(request, 401) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
210 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
211 log.warning(_("can't retrieve blog for [{service}]: {msg}".format( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
212 service = service.userhost(), msg=e))) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
213 blog_data = {"items": []} |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
214 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
215 blog_data = data_format.deserialise(blog_data) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
216 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
217 return blog_data |
1077
880ea673aaff
blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
218 |
1416 | 219 async def prepare_render(self, request): |
1624
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
220 data = self.get_r_data(request) |
1077
880ea673aaff
blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
221 template_data = request.template_data |
1624
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
222 page_max = data.get("page_max", 10) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
223 # if the comments are not explicitly hidden, we show them |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
224 service, node, item_id, show_comments = ( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
225 data.get('service', ''), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
226 data.get('node', ''), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
227 data.get('item'), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
228 data.get('show_comments', True) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
229 ) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
230 profile = self.get_profile(request) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
231 if profile is None: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
232 profile = C.SERVICE_PROFILE |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
233 profile_connected = False |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
234 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
235 profile_connected = True |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
236 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
237 ## pagination/filtering parameters |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
238 if item_id: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
239 extra = {} |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
240 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
241 extra = self.get_pubsub_extra(request, page_max=page_max) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
242 tag = data.get('tag') |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
243 if tag: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
244 extra[f'mam_filter_{C.MAM_FILTER_CATEGORY}'] = tag |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
245 self.handle_search(request, extra) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
246 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
247 ## main data ## |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
248 # we get data from backend/XMPP here |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
249 blog_items = await get_blog_items(self, request, service, node, item_id, extra, profile) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
250 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
251 ## navigation ## |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
252 # no let's fill service, node and pagination URLs |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
253 if 'service' not in template_data: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
254 template_data['service'] = service |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
255 if 'node' not in template_data: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
256 template_data['node'] = node |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
257 target_profile = template_data.get('target_profile') |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
258 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
259 if blog_items: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
260 if item_id: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
261 template_data["previous_page_url"] = self.get_url( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
262 service.full(), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
263 node, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
264 before=item_id, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
265 page_max=1 |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1087
diff
changeset
|
266 ) |
1624
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
267 template_data["next_page_url"] = self.get_url( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
268 service.full(), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
269 node, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
270 after=item_id, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
271 page_max=1 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
272 ) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
273 blog_items["rsm"] = { |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
274 "last": item_id, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
275 "first": item_id, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
276 } |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
277 blog_items["complete"] = False |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
278 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
279 self.set_pagination(request, blog_items) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
280 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
281 if item_id: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
282 # if item id has been specified in URL and it's not found, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
283 # we must return an error |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
284 self.page_error(request, C.HTTP_NOT_FOUND) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
285 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
286 ## identities ## |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
287 # identities are used to show nice nickname or avatars |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
288 await self.fill_missing_identities(request, [i['author_jid'] for i in blog_items['items']]) |
1113
cdd389ef97bc
server: code style reformatting using black
Goffi <goffi@goffi.org>
parents:
1087
diff
changeset
|
289 |
1624
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
290 ## Comments ## |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
291 # if comments are requested, we need to take them |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
292 if show_comments: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
293 await append_comments(self, request, blog_items, profile) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
294 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
295 ## URLs ## |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
296 # We will fill items_http_uri and tags_http_uri in template_data with suitable urls |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
297 # if we know the profile, we use it instead of service + blog (nicer url) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
298 if target_profile is None: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
299 blog_base_url_item = self.get_page_by_name('blog_view').get_url(service.full(), node or '@', 'id') |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
300 blog_base_url_tag = self.get_page_by_name('blog_view').get_url(service.full(), node or '@', 'tag') |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
301 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
302 blog_base_url_item = self.get_url_by_names([('user', [target_profile]), ('user_blog', ['id'])]) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
303 blog_base_url_tag = self.get_url_by_names([('user', [target_profile]), ('user_blog', ['tag'])]) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
304 # we also set the background image if specified by user |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
305 bg_img = await self.host.bridge_call('param_get_a_async', 'Background', 'Blog page', 'value', -1, template_data['target_profile']) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
306 if bg_img: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
307 template_data['dynamic_style'] = safe(""" |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
308 :root { |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
309 --bg-img: url("%s"); |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
310 } |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
311 """ % html.escape(bg_img, True)) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
312 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
313 template_data['blog_items'] = data['blog_items'] = blog_items |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
314 if request.args.get(b'reverse') == ['1']: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
315 template_data['blog_items'].items.reverse() |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
316 template_data['items_http_uri'] = items_http_uri = {} |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
317 template_data['tags_http_uri'] = tags_http_uri = {} |
1416 | 318 |
1077
880ea673aaff
blog: moved blog page from /common to /blog:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
319 |
1624
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
320 for item in blog_items['items']: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
321 blog_canonical_url = '/'.join([blog_base_url_item, utils.quote(item['id'])]) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
322 if len(blog_canonical_url) > URL_LIMIT_MARK: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
323 blog_url = blog_canonical_url |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
324 elif '-' not in item['id']: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
325 # we add text from title or body at the end of URL |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
326 # to make it more human readable |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
327 # we do it only if there is no "-", as a "-" probably means that |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
328 # item's id is already user friendly. |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
329 # TODO: to be removed, this is only kept for a transition period until |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
330 # user friendly item IDs are more common. |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
331 text = regex.url_friendly_text(item.get('title', item['content'])) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
332 if text: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
333 blog_url = blog_canonical_url + '/' + text |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
334 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
335 blog_url = blog_canonical_url |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
336 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
337 blog_url = blog_canonical_url |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
338 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
339 items_http_uri[item['id']] = self.host.get_ext_base_url(request, blog_url) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
340 for tag in item['tags']: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
341 if tag not in tags_http_uri: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
342 tag_url = '/'.join([blog_base_url_tag, utils.quote(tag)]) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
343 tags_http_uri[tag] = self.host.get_ext_base_url(request, tag_url) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
344 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
345 # if True, page should display a comment box |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
346 template_data['allow_commenting'] = data.get('allow_commenting', profile_connected) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
347 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
348 # last but not least, we add a xmpp: link to the node |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
349 uri_args = {'path': service.full()} |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
350 if node: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
351 uri_args['node'] = node |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
352 if item_id: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
353 uri_args['item'] = item_id |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
354 template_data['xmpp_uri'] = uri.build_xmpp_uri( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
355 'pubsub', subtype='microblog', **uri_args |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
356 ) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
357 self.expose_to_scripts( |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
358 request, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
359 blog_url=self.url, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
360 service = service.full(), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
361 node = node or self.host.ns_map["microblog"] |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
362 ) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
363 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
364 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
365 async def on_data_post(self, request): |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
366 profile = self.get_profile(request) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
367 if profile is None: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
368 self.page_error(request, C.HTTP_FORBIDDEN) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
369 type_ = self.get_posted_data(request, 'type') |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
370 if type_ == 'comment': |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
371 service, node, body = self.get_posted_data(request, ('service', 'node', 'body')) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
372 |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
373 if not body: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
374 self.page_error(request, C.HTTP_BAD_REQUEST) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
375 comment_data = {"content_rich": body} |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
376 try: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
377 await self.host.bridge_call('mb_send', |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
378 service, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
379 node, |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
380 data_format.serialise(comment_data), |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
381 profile) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
382 except Exception as e: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
383 if "forbidden" in str(e): |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
384 self.page_error(request, 401) |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
385 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
386 raise e |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
387 else: |
fd421f1be8f5
browser (blog): blog redesign first draft:
Goffi <goffi@goffi.org>
parents:
1518
diff
changeset
|
388 log.warning(_("Unhandled data type: {}").format(type_)) |