shithub: barf

ref: bd5bce727abff8a02a61685f6ee2a199f875557e
dir: /bin/bsrc/

View raw version
#!/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=/usr/sl/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
}