ref: cdbcde74ad973c69b3348e021693c8fce83d9540
dir: /bin/controller.rc/
#!/usr/local/plan9/bin/rc path=(. ./bin $PLAN9/bin /bin/ /usr/bin) uri = `{echo -n $REQUEST_URI | sed 's/\?.*//; s/[^a-zA-Z0-9_+\-\/]//g'} ifs='/' { args = `{echo -n $uri} } cd .. # default config site=$SERVER_NAME sitedir=sites/$site headers=inc/headers.tpl body=index siteTitle='' siteSubTitle='' title='' template=_default sidebar=sidebar # Title fn gentitle { echo '<h1 class="headerTitle"><a href="/">' ^ $"siteTitle ^ '<span id="headerSubTitle">' ^ $"siteSubTitle ^ '</span></a></h1>' } dirfilter = '/\/./d; /\/_[^\/]*$/d; s,^\./,,; s,\.md$,,;' # Sidebar fn menu { ls -F $1 | sed $dirfilter | awk -F/ ' BEGIN { print "<ul class=\"sidebar\">" } END { print "</ul>" } /^([a-zA-Z0-9+_\-]+[\/*]?)+$/ && $NF != "index" { isdir = match($0, "/$") sub("[*/]$", "") bname = $0 sub("^(.*/)?([0-9]+_)?", "", bname) gsub("_", " ", bname) if(isdir) { bname = bname "/" path = $0 "/" } if(index(ENVIRON["REQUEST_URI"], "/" path) == 1) { if(isdir) { print "<li><a href=\"/" path "\" class=\"thisPage\">»<i> " bname "</i></a>" system("rc -c ''menu " path "''") } else { print "<li><a href=\"/" path "\" class=\"thisPage\">»<i> " bname "</i></a>" } } else print "<li><a href=\"/" path "\">› " bname "</a>" print "</li>" }' } fn gensidebar { @{ cd $sitedir menu . } } fn sortedBlogPostList { # the /./ is added so we can sort -t. and order only the file name ls $*^'/./' | grep '[0-9]+.*\.md$'| sort -r -t. +1 } # Body fn genbody { if ( test -f $body.md ) markdown.pl < $body.md if not if ( test -f $body.tpl ) template.awk $body.tpl | rc if not if(~ $body */index && ~ $#blogDirs 0) { echo '<h1>' `{basename `{basename -d $body}}'</h1>' echo '<ul>' ls -F `{ basename -d $body } | sed $dirfilter' s,^'$sitedir'/(.*),<li><a href="\1">\1</a></li>,' echo '</ul>' } if not template.awk inc/404.tpl | rc # Technically wrong. Will spit out blog entries after 404 for /blog/foo, for instance. if(! ~ $#blogDirs 0) { if ( ! ~ $blogTitle '' ) echo '<h1>'$"blogTitle'</h1>' for ( f in `{ sortedBlogPostList $blogDirs } ) { title=`{basename $f | sed 's/^[0-9\-]*_(.*)\.md$/\1/; s/_/ /g' } du=`{ls -l $f} echo '##' $title '*('By $du(4) Last mod: $du(7 8 9) ')*' cat $f echo } | markdown.pl } } . etc/initrc if (! ~ $args '') { title=$args($#args) title=`{echo $title | sed 's/_/ /g' } body=$uri } fpath=$sitedir for ( i in '' $args ) { fpath = $fpath/$i if ( test -f $fpath/_config ) . $fpath/_config } template=$sitedir/$template.tpl echo body: $body; echo body: $sitedir/$body; ls $sitedir/$body body=$sitedir/$body if (! ~ $#sidebar 0) sidebar=tpl/_inc/$sidebar.tpl if (test -d $body) body=$body/index cat $headers $template | template.awk | rc