PREV << TOP >> NEXT

Website Meta Language

ちょっとしたテクニック

○ [ a | b | c ]型navbar

<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>

○ navbarからJavascriptを消す

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>

○ ナビゲーションガイドをつける(2000/07/20)

<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> とすると、

PREV << TOP >> NEXT

のように、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 ' &lt;&lt; ';
	print "<a href=$filelist[0]>TOP</a>";
	print ' &gt;&gt; ';
	if ($next ne "") {
		print qq!<a href="$next">NEXT</a>!;
	} else { print qq!NEXT!; }
} :>
</define-tag>
PREV << TOP >> NEXT