commit 9691a4c56b8d22888235af43d0f1131577616b36
parent 94b175acec237073e6ed4af814bd46692d035969
Author: Nuno Sempere <nuno.semperelh@protonmail.com>
Date: Mon, 25 Jul 2022 22:03:56 +0000
feat: Add sitemap2, which is a bit more readable
This is a work in progress
To do:
- Hide special directories (like images)
- In cases where a directory only has one element, display that directly
Diffstat:
3 files changed, 140 insertions(+), 0 deletions(-)
diff --git a/tpl/blogroll.tpl b/tpl/blogroll.tpl
@@ -0,0 +1,69 @@
+<h1>Site map</h1>
+
+%{
+tmpfile=/tmp/werc_sitemap_$pid.txt
+tmpfilex=/tmp/werc_sitemapx_$pid.txt
+saveddf=$dirfilter
+
+MON2NUM='s/Jan/01/; s/Feb/02/; s/Mar/03/; s/Apr/04/; s/May/05/; s/Jun/06/; s/Jul/07/; s/Aug/08/; s/Sep/09/; s/Oct/10/; s/Nov/11/; s/Dec/12/;'
+
+fn get_mdate {
+ t=`{mtime $1}
+ t=`{date $t(1) | sed -e $MON2NUM -e 's/ ([0-9]) / 0\1 /g'} # Make sure day of the month is two digits.
+ echo $t(6)^'-'^$t(2)^'-'^$t(3)
+}
+
+fn listDir {
+ d=$1
+ dirfilter=$saveddf
+ if(test -f $d/_werc/config)
+ . $d/_werc/config
+
+ if(~ $#perm_redir_to 0) {
+ echo '<ul class="sitemap-list">'
+
+ for(i in `{ls -dF $d^*/ $d^*.md $d^*.html $d^*.txt >[2]/dev/null | sed $dirfilter}) {
+ desc=`{get_file_title $i}
+ u=`{echo $i|sed 's!'$sitedir'!!; '$dirclean's!/index$!/!; '}
+ if(! ~ $#desc 0 && ! ~ $desc '')
+ timestamp=`{echo $i | sed 's|sites/nunosempere.com/blog/||;' | sed 's|\(\d\)/.*/|$1|'}
+ echo $timestamp
+ // desc=' - '$"desc
+ echo '<a href="'$u'">' $"desc '</a>'
+ n=`{echo /$u|sed 's/[\-_]/ /g; s,.*/([^/]+)/?$,\1,'}
+ echo $base_url^$u >> $tmpfile
+ echo '<url><loc>'$base_url^$u'</loc><lastmod>'^`{get_mdate $i}^'</lastmod></url>' >> $tmpfilex
+ if(test -d $i)
+ @{ listDir $i }
+ }
+ echo '</ul>'
+ }
+}
+
+
+fltr_cache listDir $sitedir/
+
+if(test -s $tmpfile) {
+ mv $tmpfile $sitedir/sitemap.txt &
+}
+if not if(test -f $tmpfile)
+ rm $tmpfile
+
+if(test -s $tmpfilex) {
+ {
+ echo '<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'
+
+ cat $tmpfilex
+ rm $tmpfilex &
+ echo '</urlset>'
+ # TODO Enable automaic search engine update notification.
+ #hget 'http://google.com/ping?sitemap='^`{url_encode $base_url'/sitemap.gz'} > /dev/null
+
+ } | gzip > $sitedir/sitemap.gz &
+ #} > $sitedir/sitemap.xml &
+}
+if not if(test -f $tmpfilex)
+ rm $tmpfilex
+
+%}
diff --git a/tpl/sitemap.tpl b/tpl/sitemap.tpl
diff --git a/tpl/sitemap2.tpl b/tpl/sitemap2.tpl
@@ -0,0 +1,71 @@
+<h1>Site map</h1>
+
+%{
+tmpfile=/tmp/werc_sitemap2_$pid.txt
+tmpfilex=/tmp/werc_sitemap2_$pid.txt
+saveddf=$dirfilter
+
+MON2NUM='s/Jan/01/; s/Feb/02/; s/Mar/03/; s/Apr/04/; s/May/05/; s/Jun/06/; s/Jul/07/; s/Aug/08/; s/Sep/09/; s/Oct/10/; s/Nov/11/; s/Dec/12/;'
+
+fn get_mdate {
+ t=`{mtime $1}
+ t=`{date $t(1) | sed -e $MON2NUM -e 's/ ([0-9]) / 0\1 /g'} # Make sure day of the month is two digits.
+ echo $t(6)^'-'^$t(2)^'-'^$t(3)
+}
+
+fn listDir {
+ d=$1
+ dirfilter=$saveddf
+ if(test -f $d/_werc/config)
+ . $d/_werc/config
+
+ if(~ $#perm_redir_to 0) {
+ echo '<ul class="sitemap-list">'
+
+ for(i in `{ls -dF $d^*/ $d^*.md $d^*.html $d^*.txt >[2]/dev/null | sed $dirfilter}) {
+ filename=`{get_file_title $i}
+ url=`{echo $i|sed 's!'$sitedir'!!; '$dirclean's!/index$!/!; '}
+ dirname=`{echo /$url|sed 's/[\-_]/ /g; s,.*/([^/]+)/?$,\1,'}
+ if(! ~ $#filename 0 && ! ~ $filename '') {
+ # filename=' — '$"filename
+ echo '<li><a href="'$url'">'^$"filename^'</a></li>'
+ }
+ if not {
+ echo '<li><a href="'$url'">'^$"dirname^'</a></li>'
+ }
+ echo $base_url^$url >> $tmpfile
+ echo '<url><loc>'$base_url^$url'</loc><lastmod>'^`{get_mdate $i}^'</lastmod></url>' >> $tmpfilex
+ if(test -d $i)
+ @{ listDir $i }
+ }
+ echo '</ul>'
+ }
+}
+
+
+fltr_cache listDir $sitedir/
+
+if(test -s $tmpfile) {
+ mv $tmpfile $sitedir/sitemap.txt &
+}
+if not if(test -f $tmpfile)
+ rm $tmpfile
+
+if(test -s $tmpfilex) {
+ {
+ echo '<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'
+
+ cat $tmpfilex
+ rm $tmpfilex &
+ echo '</urlset>'
+ # TODO Enable automaic search engine update notification.
+ #hget 'http://google.com/ping?sitemap='^`{url_encode $base_url'/sitemap.gz'} > /dev/null
+
+ } | gzip > $sitedir/sitemap.gz &
+ #} > $sitedir/sitemap.xml &
+}
+if not if(test -f $tmpfilex)
+ rm $tmpfilex
+
+%}