<navvar>を使えば、簡単にサイトを飛び回るための仕掛けができます。 しかし、例にある通り<table>を使うぶんには簡単なのですが、[ a | b | c ] といったリンクを作ろうとすると失敗してしまいます。 素直に書いたのでは [ a | b | c |] と余分な|が入ってしまうのです。 そこで、<navvar:filter>を使います。 perlで、最後の文字を消すわけです。 また、見栄えを良くするために余分な空白もいれています。
<navbar:define name="personal" urlbase="$(URLBASE)"> <navbar:filter> my ($mcode, $CFG, $select) = @_; chop $mcode; chop $mcode; chop $mcode; $mcode =~ s/\|/ | /g; $mcode = "$mcode ]"; return $mcode; </navbar:filter> <navbar:header>[ </navbar:header> <navbar:prolog></navbar:prolog> <navbar:prolog type=S><strong></navbar:prolog> <navbar:prolog type=SS><em></navbar:prolog> <navbar:button id=a txt="a" url="a.html"> <navbar:button id=b txt="b" url="b.html"> <navbar:button id=c txt="c" url="c.html"> <navbar:epilog>|</navbar:epilog> <navbar:epilog type=S></strong>|</navbar:epilog> <navbar:epilog type=SS></em>|</navbar:epilog> <navbar:footer></navbar:footer> </navbar:define>
Javascriptは確かに便利なのですが、邪魔なときもあります。でも、消すオプションなどない。しかしこれも、<navvar:filter>を使えば簡単です。 先程のものを書きかえてみます。
<navbar:filter> my ($mcode, $CFG, $select) = @_; chop $mcode; chop $mcode; chop $mcode; # delete Java Script $mcode =~ s/onmouseover\=\"[^\"]+\"//ig; $mcode =~ s/onmouseout\=\"[^\"]+\"//ig; $mcode =~ s/\|/ | /g; $mcode = "$mcode ]"; return $mcode; </navbar:filter>
<navvar:filter> を使うと、サイト全体のガイドを記述できます。 しかし、前のページ、後のページといったようなものはできません。 そこで、現在のファイルを指定すると、前後ページへのリンクを自動的に張ってくれるものをつくりました。
[File] Index
index.html about.html make.html tutorial.html makefile.html tips.html iya.html wml-jp.html
このようなインデックスファイルを用意しておいて
#include "guide.wh" page="tips.html" index="Index"
として、include。使いたい場所で <guide> とすると、
のように、tips.htmlの前後のファイル(makefile.html, iya.html)とトップページ(index.html)へのリンクが作成されます。 トップページはインデックスの最初に書いたファイルとなります。
[File] guide.wh
#use wml::std::case global=lower
# Usage:
# 0. Edit the "index file" with file list.
# 1. include this file with "current page" and "index file"
# #include "guide.wh" page="about.html" index="Index"
# 2. use <guide> tag to display.
<define-tag guide whitespace=delete>
<: {
my $page = '$(page)';
my $index = '$(index)';
my $prev, $next, $target;
my @filelist;
$prev = $next = "";
$target = 0;
# File Read
open(INDEX, $index);
foreach (<INDEX>) {
chop;
next if /^#/;
next if /^$/;
push @filelist, $_;
}
close(INDEX);
# Target File Search
foreach (@filelist) {
last if ($_ eq $page);
$target++;
}
# File Setting
$prev = $filelist[$target-1] if $target > 0;
$next = $filelist[$target+1];
$prev = "" if $prev eq $filelist[0];
# Guide Printout
if ($prev ne "") {
print qq!<a href="$prev">PREV</a>!;
} else { print qq!PREV!; }
print ' << ';
print "<a href=$filelist[0]>TOP</a>";
print ' >> ';
if ($next ne "") {
print qq!<a href="$next">NEXT</a>!;
} else { print qq!NEXT!; }
} :>
</define-tag>