Mercurial > libervia-web
comparison src/server/blog.py @ 702:d94feb0d849e
server_side: give a better look to the static blog
author | souliane <souliane@mailoo.org> |
---|---|
date | Mon, 11 May 2015 14:54:41 +0200 |
parents | 82123705474b |
children | 5319110a862c |
comparison
equal
deleted
inserted
replaced
701:9aa2e251a993 | 702:d94feb0d849e |
---|---|
233 base_url = root_url + 'blog/' + user | 233 base_url = root_url + 'blog/' + user |
234 | 234 |
235 def getOption(key): | 235 def getOption(key): |
236 return sanitizeHtml(options[key]).encode('utf-8') if key in options else '' | 236 return sanitizeHtml(options[key]).encode('utf-8') if key in options else '' |
237 | 237 |
238 def getImageOption(key, alt): | 238 def getImageOption(key, default, alt): |
239 """regexp from http://answers.oreilly.com/topic/280-how-to-validate-urls-with-regular-expressions/""" | 239 """regexp from http://answers.oreilly.com/topic/280-how-to-validate-urls-with-regular-expressions/""" |
240 url = options[key].encode('utf-8') if key in options else '' | 240 url = options[key].encode('utf-8') if key in options else '' |
241 regexp = r"^(https?|ftp)://[a-z0-9-]+(\.[a-z0-9-]+)+(/[\w-]+)*/[\w-]+\.(gif|png|jpg)$" | 241 regexp = r"^(https?|ftp)://[a-z0-9-]+(\.[a-z0-9-]+)+(/[\w-]+)*/[\w-]+\.(gif|png|jpg)$" |
242 return "<img src='%(url)s' alt='%(alt)s'/>" % {'alt': alt, 'url': url} if re.match(regexp, url) else alt | 242 if re.match(regexp, url): |
243 | 243 url = url |
244 suffix = "<br/>" | |
245 else: | |
246 url = default | |
247 suffix = "" | |
248 return "<img src='%(url)s' alt='%(alt)s'/>%(suffix)s" % {'alt': alt, 'url': url, 'suffix': suffix} | |
249 | |
250 avatar = os.path.normpath(root_url + getOption('avatar')) | |
251 title = getOption(C.STATIC_BLOG_PARAM_TITLE) or user | |
244 request.write(""" | 252 request.write(""" |
245 <html> | 253 <html> |
246 <head> | 254 <head> |
247 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | 255 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> |
248 <meta name="keywords" content="%(keywords)s"> | 256 <meta name="keywords" content="%(keywords)s"> |
251 <link rel="stylesheet" type="text/css" href="%(root)scss/blog.css" /> | 259 <link rel="stylesheet" type="text/css" href="%(root)scss/blog.css" /> |
252 <link rel="icon" type="image/png" href="%(favicon)s"> | 260 <link rel="icon" type="image/png" href="%(favicon)s"> |
253 <title>%(title)s</title> | 261 <title>%(title)s</title> |
254 </head> | 262 </head> |
255 <body> | 263 <body> |
256 <div class="mblog_title"><a href="%(base)s">%(banner_elt)s</a></div> | 264 <div class="mblog_title"><a href="%(base)s">%(banner_elt)s%(title_elt)s</a></div> |
257 """ % {'base': base_url, | 265 """ % {'base': base_url, |
258 'root': root_url, | 266 'root': root_url, |
259 'user': user, | 267 'user': user, |
260 'keywords': getOption(C.STATIC_BLOG_PARAM_KEYWORDS), | 268 'keywords': getOption(C.STATIC_BLOG_PARAM_KEYWORDS), |
261 'description': getOption(C.STATIC_BLOG_PARAM_DESCRIPTION), | 269 'description': getOption(C.STATIC_BLOG_PARAM_DESCRIPTION), |
262 'title': getOption(C.STATIC_BLOG_PARAM_TITLE) or "%s's microblog" % user, | 270 'title': getOption(C.STATIC_BLOG_PARAM_TITLE) or "%s's microblog" % user, |
263 'favicon': os.path.normpath(root_url + getOption('avatar')), | 271 'favicon': avatar, |
264 'banner_elt': getImageOption(C.STATIC_BLOG_PARAM_BANNER, getOption(C.STATIC_BLOG_PARAM_TITLE) or user)}) | 272 'banner_elt': getImageOption(C.STATIC_BLOG_PARAM_BANNER, avatar, title), |
273 'title_elt': title, | |
274 }) | |
265 mblog_data, main_rsm = mblog_data | 275 mblog_data, main_rsm = mblog_data |
266 display_single = len(mblog_data) == 1 | 276 display_single = len(mblog_data) == 1 |
267 | 277 |
268 # build the navigation links | 278 # build the navigation links |
269 count = int(main_rsm['count']) if 'count' in main_rsm else 0 | 279 count = int(main_rsm['count']) if 'count' in main_rsm else 0 |
271 index = int(main_rsm['index']) | 281 index = int(main_rsm['index']) |
272 if index > 0: | 282 if index > 0: |
273 before_link = ("%(base)s?before=%(item_id)s" % {'base': base_url, 'item_id': main_rsm['first']}).encode('utf-8') | 283 before_link = ("%(base)s?before=%(item_id)s" % {'base': base_url, 'item_id': main_rsm['first']}).encode('utf-8') |
274 if display_single: | 284 if display_single: |
275 before_link += '&max=1' | 285 before_link += '&max=1' |
276 tmp_text = D_("Later message") | 286 tmp_text = D_("later message") |
277 class_ = 'later_message' | 287 class_ = 'later_message' |
278 else: | 288 else: |
279 tmp_text = D_("Later messages") | 289 tmp_text = D_("later messages") |
280 class_ = 'later_messages' | 290 class_ = 'later_messages' |
281 before_tag = """<a href="%(link)s" class="%(class)s">%(text)s</a>""" % {'link': before_link, 'class': class_, 'text': tmp_text} | 291 before_tag = """<a href="%(link)s" class="%(class)s">%(text)s</a>""" % {'link': before_link, 'class': class_, 'text': tmp_text} |
282 else: | 292 else: |
283 before_tag = None | 293 before_tag = None |
284 if index + len(mblog_data) < count: | 294 if index + len(mblog_data) < count: |
285 after_link = ("%(base)s?after=%(item_id)s" % {'base': base_url, 'item_id': main_rsm['last']}).encode('utf-8') | 295 after_link = ("%(base)s?after=%(item_id)s" % {'base': base_url, 'item_id': main_rsm['last']}).encode('utf-8') |
286 if display_single: | 296 if display_single: |
287 after_link += '&max=1' | 297 after_link += '&max=1' |
288 text = D_("Older message") | 298 text = D_("older message") |
289 class_ = 'older_message' | 299 class_ = 'older_message' |
290 else: | 300 else: |
291 text = D_("Older messages") | 301 text = D_("older messages") |
292 class_ = 'older_messages' | 302 class_ = 'older_messages' |
293 after_tag = """<a href="%(link)s" class="%(class)s">%(text)s</a>""" % {'link': after_link, 'class': class_, 'text': text} | 303 after_tag = """<a href="%(link)s" class="%(class)s">%(text)s</a>""" % {'link': after_link, 'class': class_, 'text': text} |
294 else: | 304 else: |
295 after_tag = None | 305 after_tag = None |
296 | 306 |
297 # display navigation header | 307 # display navigation header |
298 request.write("""<div class="header">""") | 308 request.write("""<div class="header">""") |
309 request.write("""<div class="header_content">""") | |
299 if before_tag: | 310 if before_tag: |
300 request.write(before_tag) | 311 request.write(before_tag) |
301 request.write(" ") | |
302 if display_single and after_tag: | 312 if display_single and after_tag: |
303 request.write(after_tag) | 313 request.write(after_tag) |
304 request.write("""</div>""") | 314 request.write("""</div></div>""") |
305 | 315 |
306 mblog_data = [(entry if isinstance(entry, tuple) else (entry, ([], {}))) for entry in mblog_data] | 316 mblog_data = [(entry if isinstance(entry, tuple) else (entry, ([], {}))) for entry in mblog_data] |
307 mblog_data = sorted(mblog_data, key=lambda entry: (-float(entry[0].get('updated', 0)))) | 317 mblog_data = sorted(mblog_data, key=lambda entry: (-float(entry[0].get('updated', 0)))) |
308 for main_data, comments_data in mblog_data: | 318 for main_data, comments_data in mblog_data: |
309 self.__render_html_entry(main_data, base_url, request) | 319 self.__render_html_entry(main_data, base_url, request) |
324 for comment in comments: | 334 for comment in comments: |
325 self.__render_html_entry(comment, base_url, request) | 335 self.__render_html_entry(comment, base_url, request) |
326 | 336 |
327 # display navigation footer | 337 # display navigation footer |
328 request.write("""<div class="footer">""") | 338 request.write("""<div class="footer">""") |
339 request.write("""<div class="footer_content">""") | |
329 if not display_single and after_tag: | 340 if not display_single and after_tag: |
330 request.write(after_tag) | 341 request.write(after_tag) |
331 request.write("""</div>""") | 342 request.write("""</div></div>""") |
332 | 343 |
333 request.write('</body></html>') | 344 request.write('</body></html>') |
334 request.finish() | 345 request.finish() |
335 | 346 |
336 def __render_html_entry(self, entry, base_url, request): | 347 def __render_html_entry(self, entry, base_url, request): |