174 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/bin/rc
 | |
| # Build static pages for $site.
 | |
| rfork e
 | |
| fn usage{
 | |
| 	echo usage: $0 [ domain.com ] >[1=2]
 | |
| 	exit usage
 | |
| }
 | |
| if(~ $#1 0)
 | |
| 	usage
 | |
| 
 | |
| fn conf_enable_barf{ }
 | |
| 
 | |
| werc=/var/www/werc
 | |
| site=$werc/sites/$1
 | |
| barf_root=$site
 | |
| 
 | |
| . $site/_werc/config
 | |
| . $site/_werc/barf/config
 | |
| . $werc/apps/barf/lib/core
 | |
| . $werc/apps/barf/lib/$barf_type
 | |
| if(test -f $site/_werc/barf/lib/$barf_type)
 | |
| 	. $site/_werc/barf/lib/$barf_type
 | |
| if(~ $show_ascending 1)
 | |
| 	sort=(sort -nu)
 | |
| if not
 | |
| 	sort=(sort -nru)
 | |
| 
 | |
| fn check_user{ }
 | |
| 
 | |
| fn display_html_footers{
 | |
| 	echo '</body>
 | |
| </html>'
 | |
| }
 | |
| 
 | |
| fn display_html_headers{
 | |
| 	echo '<html>
 | |
| <head>
 | |
| 
 | |
|     <title>'$"siteTitle'</title>
 | |
| 
 | |
|     <link rel="stylesheet" href="/_werc/pub/style.css" type="text/css" media="screen" title="default">
 | |
|     <link rel="shortcut icon" href="/favicon.ico" type="image/vnd.microsoft.icon">
 | |
|     <link rel="alternate" type="application/rss+xml" title="RSS" href="'$"rss'">
 | |
|     <meta charset="UTF-8">
 | |
|     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 | |
| 
 | |
| </head>
 | |
| <body>
 | |
| '
 | |
| }
 | |
| 
 | |
| fn display_prevnext{
 | |
| 	if(~ $#nstart 1){
 | |
| 		echo '
 | |
| 		<div id="page_list">
 | |
| 		<span>
 | |
| 		'
 | |
| 		if(test $start -lt $pstop && ! ~ $start $pstart)
 | |
| 			echo '<a href="'$pstart^'-'^$pstop^'.html">prev</a> | '
 | |
| 		echo '</span>
 | |
| 		<span>
 | |
| 		'
 | |
| 		if(test $nstart -gt $bposts($#bposts))
 | |
| 			echo '<a href="'$nstart^'-'^$nstop^'.html">next</a>'
 | |
| 		echo '
 | |
| 		</span>
 | |
| 		</div>
 | |
| 		'
 | |
| 	}
 | |
| }
 | |
| 
 | |
| fn get_post_list{
 | |
| 	if(~ $#posts 0){
 | |
| 		if(~ $id [0-9]*)
 | |
| 			posts=$id
 | |
| 		if not{
 | |
| 			posts=`{
 | |
| 				if(~ $tags all)
 | |
| 					ls -p $site/src |
 | |
| 						grep -e '^[0-9]*$' |
 | |
| 						eval $sort |
 | |
| 						sed -n $start^,^$stop^p
 | |
| 				if not
 | |
| 					grep -e '^.*\/'$tags'$' $site/tags |
 | |
| 						awk -F '/' '{print $1;}' |
 | |
| 						eval $sort |
 | |
| 						sed -n $start^,^$stop^p
 | |
| 			}
 | |
| 			if(! ~ $posts [0-9]*)
 | |
| 				posts=()
 | |
| 		}
 | |
| 	}
 | |
| }
 | |
| 
 | |
| fn print{
 | |
| 	display_html_headers
 | |
| 	if(~ $show_header 1)
 | |
| 		display_header
 | |
| 	display_^$barf_type
 | |
| 	if(~ $show_sidebar 1)
 | |
| 		display_sidebar
 | |
| 	if(~ $show_footer 1)
 | |
| 		display_footer
 | |
| 	display_html_footers
 | |
| }
 | |
| 
 | |
| fn print_id{
 | |
| 	echo '<span id="post_id"><a href="'$"a_id'.html">No.'$"a_id'</a></span>'
 | |
| }
 | |
| 
 | |
| fn print_tags{
 | |
| 	a_tags=`{ls -p $a_dir/tags}
 | |
| 	a_tags=`{for(t in $a_tags) echo '<a href="/tag/'$t'">'$t'</a>, '}
 | |
| 	a_tags=`{echo $a_tags | awk '{print substr($0, 1, length($0) -1)}'}
 | |
| 	echo '<span id="post_tags">'$"a_tags'</span>'
 | |
| }
 | |
| 
 | |
| fn print_title{
 | |
| 	a_title=`{cat $a_dir/title}
 | |
| 	if(! ~ $#a_title 0){
 | |
| 		if(~ $barf_type log url)
 | |
| 			echo '<a href="'`{cat $a_dir/link}'">'$"a_title'</a>'
 | |
| 		if not
 | |
| 			echo '<a href="'$"a_id'.html">'$"a_title'</a>'
 | |
| 	}
 | |
| }
 | |
| 
 | |
| cd $site
 | |
| 
 | |
| # individual posts
 | |
| bposts=`{ls -p $site/src | grep -v private | grep -e '^[0-9]*$' | eval $sort}
 | |
| for(b in $bposts){
 | |
| 	id=$b posts=() print >$b.html
 | |
| 	echo $"b^'.html' >[1=2]
 | |
| }
 | |
| 
 | |
| # paginated posts
 | |
| start=$bposts(1)
 | |
| stop=`{echo $bposts(1)^-^$posts_per_page | bc}
 | |
| pstart=$start
 | |
| pstop=$stop
 | |
| while(test $start -ge $bposts($#bposts)){
 | |
| 	if(test $stop -lt $bposts($#bposts))
 | |
| 		stop=$bposts($#bposts)
 | |
| 	nstart=`{echo $stop^-^1 | bc}
 | |
| 	nstop=`{echo $stop^-^$posts_per_page^-1 | bc}
 | |
| 	pposts=`{
 | |
| 		for(i in `{seq $stop $start | eval $sort})
 | |
| 			if(test -d $site/src/$i)
 | |
| 				echo $i
 | |
| 	}
 | |
| 	tags=all posts=$pposts print >$start^-^$stop.html
 | |
| 	echo $"start^'-'^$"stop^'.html' >[1=2]
 | |
| 	pstart=$start
 | |
| 	pstop=$stop
 | |
| 	start=`{echo $stop^-1 | bc}
 | |
| 	stop=`{echo $start^-^$posts_per_page | bc}
 | |
| }
 | |
| cp `{ls [0-9]*-[0-9]*.html | sort -n | tail -1} index.html
 | |
| if(test -x /boot/factotum)
 | |
| 	chmod +t [0-9]*.html [0-9]*-[0-9]*.html index.html
 | |
| 
 | |
| # tags
 | |
| for(b in `{awk -F '/' '{print $3;}' tags | sort -u}){
 | |
| 	btags=$b
 | |
| 	mkdir -p tag/$btags
 | |
| 	bposts=`{grep -e '^.*\/'$btags'$' tags | awk -F '/' '{print $1;}' | eval $sort}
 | |
| 	start=$bposts(1)
 | |
| 	stop=$bposts($#bposts)
 | |
| 	tags=all posts=$bposts print >tag/$btags/index.html
 | |
| 	echo tag/$btags/index.html >[1=2]
 | |
| 	if(test -x /boot/factotum)
 | |
| 		chmod +t tag tag/$btags tag/$btags/index.html
 | |
| }
 | 
