# lib-rf-sitebuild # by Gav Ford # revford@blueyonder.co.uk # http://revford.pwp.blueyonder.co.uk # 2008-04-17, updated 2009-02-02 # subroutines and variables for the sitebuild tools use FindBin '$RealBin'; require "$RealBin/lib-rf-date.pl"; $htmldir = "/home/gav/web/revford-site"; #$htmldir = "/home/gav/web/blue-site"; $contdir = "/home/gav/web/revford-cont"; $postdir = "/home/gav/web/posts"; $htmlver = 4.01; sub sortpostlist # read, cleanup and sort the posts directory { opendir DIR, "$postdir" or die RED, "Directory $postdir could not be opened.\n"; @postlist = readdir DIR; closedir DIR; @postlist = grep {$_ ne '.' and $_ ne '..'} @postlist; my @sortedlist = sortposts(@postlist); } sub pageheadfull { $filename = $_[0]; @head = undef; if ($htmlver eq 5) { # write the stock heading, doctype etc HTML5 version push @head, ''; push @head, "\n\n"; push @head, "\n\n"; push @head, ' '."\n"; } else # anything else is 4.01 { # write the stock heading, doctype etc HTML 4.01 Version push @head, ''; push @head, "\n\n"; push @head, "\n\n"; push @head, ' '."\n"; } # add title push @head, " revford\/$myname<\/title>\n\n"; # add core CSS push @head, ' <link rel="stylesheet" type="text/css" href="/css/core.css">'."\n"; push @head, ' <link rel="stylesheet" type="text/css" href="/css/computer.css" media="screen">'."\n"; push @head, ' <link rel="stylesheet" type="text/css" href="/css/mobile.css" media="handheld">'."\n"; # add CSS based on filename if ($filename =~ m/sims2-|sims.html/) {push @head, ' <link rel="stylesheet" type="text/css" href="/css/sims.css">'."\n";} elsif ($filename =~ m/computing-/) {push @head, ' <link rel="stylesheet" type="text/css" href="/css/linux.css">'."\n";} elsif ($filename =~ m/roleplay-|warhammer-|gaming-|technobabble/) {push @head, ' <link rel="stylesheet" type="text/css" href="/css/gaming.css">'."\n";} push @head, "\n"; # add core scripts push @head, ' <script type="text/javascript" src="/scripts/babble.js"></script>'."\n"; push @head, ' <script type="text/javascript" src="/scripts/gauntlet2.js"></script>'."\n"; push @head, ' <script type="text/javascript" src="/scripts/cookie.js"></script>'."\n"; # add any scripts based on filename if ($filename =~ m/roleplay-modern-game-transformers/) {push @head, ' <script type="text/javascript" src="/scripts/play-ogg.js"></script>'."\n";} elsif ($filename =~ m/roleplay-random-npc/) { push @head, ' <script type="text/javascript" src="/scripts/npc.js"></script>'."\n"; push @head, ' <script type="text/javascript" src="/scripts/npc-pathfinder.js"></script>'."\n"; } elsif ($filename =~ m/technobabble-pulp/) {push @head, ' <script type="text/javascript" src="/scripts/pulpbabble.js"></script>'."\n";} elsif ($filename =~ m/roleplay-random-tavern/) { push @head, ' <script type="text/javascript" src="/scripts/npc.js"></script>'."\n"; push @head, ' <script type="text/javascript" src="/scripts/npc-pathfinder.js"></script>'."\n"; push @head, ' <script type="text/javascript" src="/scripts/tavern.js"></script>'."\n"; push @head, ' <script type="text/javascript" src="/scripts/tavern-page.js"></script>'."\n"; } elsif ($filename =~ m/roleplay-dnd-game-islanders/) {push @head, ' <script type="text/javascript" src="/scripts/rand-islanders.js"></script>'."\n";} push @head, "\n"; # add metadata based on filename if ($filename =~ m/roleplay-menu/) { push @head, ' <meta name="description" content="Roleplay. SciFi, Modern, Fantasy and others.">'."\n"; push @head, ' <meta name="keywords" content="Pathfinder, Dungeons, Dragons, d20">'."\n"; } elsif ($filename =~ m/sims2-menu/) { push @head, ' <meta name="description" content="Decor and skins for The Sims 2">'."\n"; push @head, ' <meta name="keywords" content="The Sims, The Sims 2, Sims, Sims 2, Skins, Skintones, Clothing, Makeup, Decor, Barcode, Black, Snowflake, Pale">'."\n"; } elsif ($filename =~ m/computing-menu/) { push @head, ' <meta name="description" content="Perl and Javascript code examples, HTML and CSS.">'."\n"; push @head, ' <meta name="keywords" content="HTML, XHTML, CSS, Javascript, Perl, Linux, Debian, Slackware, Ubuntu">'."\n"; } push @head, ' <meta name="author" content="Gav Ford">'."\n"; # add a build date push @head, builddate() . "\n\n"; # add RSS feed push @head, ' <link rel="alternate" title="revford" href="/revford-rss.xml" type="application/rss+xml">'."\n"; # close head and open body push @head, '</head>'."\n".'<body>'."\n\n\n"; return (@head); } sub pagefootfull { @foot = undef; push @foot, "\n\n"; push @foot, '<script type="text/javascript" src="/scripts/deco.js"></script>'."\n\n"; push @foot, '</body>'."\n"; push @foot, '</html>'."\n"; return (@foot); } sub newstopicslist # News Topics { # read the images directory opendir DIR, "/home/gav/web/images"; @topiclist = readdir DIR; closedir DIR; # just news icons @topiclist = grep {/news\-/} @topiclist; # remove alternate sizes and versions @topiclist = grep {!/\-wip/} @topiclist; @topiclist = grep {!/\-30/} @topiclist; @topiclist = grep {!/\-70/} @topiclist; @topiclist = grep {!/\-big/} @topiclist; @topiclist = sort { $a cmp $b } @topiclist; foreach (@topiclist) { $_ =~ s/news\-//; $_ =~ s/\.png//; } return (@topiclist); } sub posthtml # read a post file and return a formatted HTML version { my @assembly = (); my $value = $_[0]; my $thisverypost = "$postdir\/$_[0]"; open POSTFILE, "$thisverypost" or die "File $thisverypost could not be opened.\n"; @post = <POSTFILE>; close POSTFILE; $title = shift(@post); $date = shift(@post); $cat = shift(@post); chomp($title); chomp($date); chomp($cat); @categories = split(/ /, $cat); push @assembly, '<h3>'; foreach (@categories) { push @assembly, '<a href="updates-' . $_ . '-1.html">'; push @assembly, '<img src="/images/news-' . $_ . '.png" alt=" " class="avatar"></a>' . "\n"; } ($mylink, $junk) = split(/\./, $value); push @assembly, '<a id="post' . $mylink . '">' . $title . '</a></h3>' . "\n"; push @assembly, '<p class="subtitle">' . $date . '</p>' . "\n"; push @assembly, @post; push @assembly, '<script type="text/javascript">document.write(\'<hr>\')</script>' . "\n\n\n"; return (@assembly); } sub sortposts # sort the lists of posts by date, using the mydate stamps in the files { my @postlist = (); my @sortedlist = (); my @postlist = @_; foreach (@postlist) { open POSTFILE, "$postdir/$_" or die "Error reading $POSTDIR/$_\n"; my @thispostfilecontent = <POSTFILE>; $postdate = $thispostfilecontent[1]; close POSTFILE; $moddate = moddate($postdate); # add to our table, the date as KEY and the filename as VALUE $posttable{ $moddate } = $_; } foreach $key (sort {$b <=> $a}(keys %posttable)) { # sort those KEYs, the dates into a list we can use to access them in order. push(@sortedlist, $key); } return (@sortedlist); } 1;