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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
1 #!/usr/bin/env python3
1239
f511f8fbbf8a fixed shebangs
Goffi <goffi@goffi.org>
parents: 1216
diff changeset
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
0554103ec700 pages (blog): new `edit` page:
Goffi <goffi@goffi.org>
parents: 1269
diff changeset
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
0554103ec700 pages (blog): new `edit` page:
Goffi <goffi@goffi.org>
parents: 1269
diff changeset
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_))