From f50511759b557975010c75de4903e5c336dd2734 Mon Sep 17 00:00:00 2001 From: Mattia Succurro Date: Sat, 21 May 2022 23:33:23 +0200 Subject: [PATCH] add page leaderboard, fix issue with spoilers by monkey-patching --- app.py | 19 ++++++++++++++++++- templates/leaderboard.html | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 templates/leaderboard.html diff --git a/app.py b/app.py index 918c874..51ec4fe 100644 --- a/app.py +++ b/app.py @@ -109,6 +109,10 @@ class StrikethroughPostprocessor(markdown.postprocessors.Postprocessor): def convert(self, match): return '' + match.group(1) + '' +# XXX ugly monkeypatch to make spoilers prevail over blockquotes +from markdown.blockprocessors import BlockQuoteProcessor +BlockQuoteProcessor.RE = re.compile(r'(^|\n)[ ]{0,3}>(?!!)[ ]?(.*)') + ### XXX it currently only detects spoilers that are not at the beginning of the line. To be fixed. class SpoilerExtension(markdown.extensions.Extension): def extendMarkdown(self, md, md_globals): @@ -684,7 +688,20 @@ def view_random(): except Page.DoesNotExist: continue return redirect(page.get_url()) - + +@app.route('/p/leaderboard/') +def page_leaderboard(): + headers = { + 'Cache-Control': 'max-age=180, stale-while-revalidate=1800' + } + + pages = [] + for p in Page.select(): + score = (p.latest.length >> 10) + p.forward_links.count() + p.back_links.count() + pages.append((p, score, p.back_links.count(), p.forward_links.count(), p.latest.length)) + pages.sort(key = lambda x: (x[1], x[2], x[4], x[3]), reverse = True) + + return render_template('leaderboard.html', pages=pages) @app.route('//') def view_named(name): diff --git a/templates/leaderboard.html b/templates/leaderboard.html new file mode 100644 index 0000000..3cc88d2 --- /dev/null +++ b/templates/leaderboard.html @@ -0,0 +1,38 @@ +{% extends "base.html" %} + +{% block title %}Best pages - {{ app_name }}{% endblock %} + +{% block meta %} + +{% endblock %} + +{% block content %} +

Best pages

+ + + + + + + + + + + + + + {% set counters = namespace(row = 0) %} + {% for p, score, bklinks, fwlinks, length in pages %} + + {% set counters.row = counters.row + 1 %} + + + + + + + + {% endfor %} + +
#Page NameScoreLenBLFL
{{ counters.row }}{{ p.title }} (#{{ p.id }}){{ score }}{{ length }}{{ bklinks }}{{ fwlinks }}
+{% endblock %}