Blagh blättern
Ein Feature, das ich immer wieder bei Blagh, der Bloggingapp von werc, vermisst habe, ist das Blättern. Also wie in allen anderen Blogs auch, von der Startseite aus die Möglichkeit zu haben, einfach 'ältere' Beiträge zu sehen, ohne sich durch die (nun wirklich nicht so geile) Chronik klicken zu müssen.
Kurz und schmerzlos: gibbet nicht. Musste ich also selbst nachreichen. Zugegeben, ich hab mich durch rc shell auch mehr durchgequält als dass ich da am Tanzen war...
Hier mal ein fixes Diff:
--- /usr/local/werc/apps/blagh/app.rc 2010-06-11 06:28:39.000000000 +0200
+++ /usr/local/werc/apps/blagh/app.rc 2010-09-06 22:05:42.000000000 +0200
@@ -9,7 +9,7 @@
conf_blog_editors=blog-editors
if(~ $"conf_max_posts_per_page '')
- conf_max_posts_per_page=32
+ conf_max_posts_per_page=7
Mit 32 Posts/Seite macht das ja nicht viel Sinn.
}
fn blagh_init {
@@ -39,6 +39,10 @@
'<link rel="alternate" type="application/atom+xml" title="ATOM" href="'$"u'.atom" />
<link rel="alternate" type="application/rss+xml" title="RSS" href="'$"u'.rss" />'
}
+ if not if(~ $req_path $blagh_uri^'page/'[0-9]*) {
+ site=`{echo $req_path | sed -e 's/[^0-9]*([0-9]*)$/\1/'}
+ handler_body_main=(blagh_body $site)
+ }
Diese Abfrage kommt beim Aufbau der Seite, genauer direkt nach der Prüfung, ob man die Hauptseite aufgerufen hat, so werden Folgeseiten dann als /page/0 (1,2...) ausgegeben.
if not if(~ $req_path $blagh_uri^index.atom)
blagh_setup_feed_handlers atom.tpl 'application/atom+xml'
@@ -72,10 +76,10 @@
# Direct links to feeds are disabled because they are not very useful, add clutter and might waste pagerank.
# An user can add this on their own using handlers_body_head anyway.
- #echo '<div style="text-align:right">(<a href="index.rss">RSS Feed</a>|<a href="index.atom">Atom Feed</a>)</div>'
+ echo '<div style="text-align:right">(<a href="index.rss">RSS Feed</a> | <a href="index.atom">Atom Feed</a>)</div>'
Für Feeds, hat damit nichts zu tun, aber kann man ja bei Gelegenheit mal und so... Ich war nur zu faul das Diff nochmal zu zerpflücken :)
{ # XXX Not sure why this fixes issues with blog setup, probably bug in fltr_cache!
- for(p in `{get_post_list $blagh_root^$blagh_dirs}) {
+ for(p in `{get_post_list $blagh_root^$blagh_dirs $1}) {
Seitenzahl mitgeben, wenn Blogposts geholt werden
l=`{echo -n $p|sed 's!'$sitedir^'/?(.*)([0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9])(/[^/]+/)!\2 /\1\2\3!'}
sed '1s!.*^') ('^$l(1)^')!' < $p/index.md
echo # Needed extra \n so markdown doesn't mess up the formatting, probably can be done in sed.
@@ -83,12 +87,26 @@
# XXX BUG! Markdown [references] break because multiple markdown documents are merged. Should format each blog post independently.
# TODO: use fltr_cache directly, that can fix the previous bug plus provide a perf boost by caching title generation.
} | $formatter
+
+ echo '<div class="navi">'
+ if(expr $1 '>' 0 >/dev/null)
+ echo '<a href="'^$blagh_uri^'page/'^`{expr $1 '-' 1}^'" id="skip_forward"><< neuer</a>'
+ echo '<a href="'^$blagh_uri^'page/'^`{expr $1 '+' 1}^'" id="skip_back">älter >></a>'
+ echo '</div>'
Vor- und Zurückbuttons.
}
fn get_post_list {
# /./->/|/ done to sort -t| and order by date
# Note: $paths in blagh_dirs should not contain '/./' or '|'
- ls -F $*^/./[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]/ >[2]/dev/null | sed -n '/'^$forbidden_uri_chars^'/d; s,/\./,/|/,; /\/$/p' | sort -r '-t|' +1 | sed -e 's,/+\|/+,/,' -e $conf_max_posts_per_page^'q'
+ if(! ~ $2 '' && ! ~ $2 0) {
+ count=`{expr $2 '*' $conf_max_posts_per_page '-' 1}
+ ls -F $1^/./[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]/ >[2]/dev/null | sed -n '/'^$forbidden_uri_chars^'/d; s,/\./,/|/,; /\/$/p' |\
+ sort -r '-t|' +1 | sed -e 's,/+\|/+,/,' | /bin/sed -e '1,+'^$count^'d' | sed -e $conf_max_posts_per_page^'q'
Das plan9-sed kann keine Addresses, deswegen referenziere ich hier auf das native (GNU sed 4.1.5, macht aber auch auf BSD-sed keine Probleme). Essentiell ist hier nur, die ersten n Ergebnisse von ls zu entfernen (1 + $count) und von den übrigen nur die ersten zu nehmen, bei mir die ersten sieben.
+ }
+ if not {
+ ls -F $1^/./[0-9][0-9][0-9][0-9]/[0-9][0-9]/[0-9][0-9]/ >[2]/dev/null | sed -n '/'^$forbidden_uri_chars^'/d; s,/\./,/|/,; /\/$/p' |\
+ sort -r '-t|' +1 | sed -e 's,/+\|/+,/,' | sed -e $conf_max_posts_per_page^'q'
+ }
Die alte Funktionalität, nur eben im if-Block
}
fn mkbpost {
--- /usr/local/werc/pub/style/style.css 2010-06-11 06:28:39.000000000 +0200
+++ /usr/local/werc/pub/style/style.css 2010-09-06 21:39:06.000000000 +0200
@@ -328,3 +352,18 @@
ul.sitemap-list a {
text-transform: capitalize;
}
+
+/* Navigation */
+.navi:after {
+ clear: both;
+ color: transparent;
+ content: '.';
+}
+
+a#skip_forward {
+ float: left;
+}
+
+a#skip_back {
+ float: right;
+}
Das Diff gibt es auch noch einmal 'un-auseinander gepflückt' auf media. Und mal ehrlich: am besten liest es sich eh gepatched :D
Gut, das ist jetzt auch mehr so quick'n'dirty, denn das Blättern hat nach hinten kein Ende, aber meine Güte =P Dann habt ihr auch mal was zu tun.
MßG