<?php
-// $Id: navi.inc.php,v 1.4 2002/12/05 05:41:43 panda Exp $
+/////////////////////////////////////////////////
+// PukiWiki - Yet another WikiWikiWeb clone.
+//
+// $Id: navi.inc.php,v 1.16 2004/07/31 03:09:20 henoheno Exp $
+//
+
/*
-Last-Update:2002-12-05 rev.3
*¥×¥é¥°¥¤¥ó navi
-
-http://home.arino.jp/index.php?%5B%5Bnavi.inc.php%5D%5D
-
DobBookÉ÷¤Î¥Ê¥Ó¥²¡¼¥·¥ç¥ó¥Ð¡¼¤òɽ¼¨¤¹¤ë
*Usage
*Æ°ºî
-1¥Ú¡¼¥¸¤Ç2²ó¸Æ¤Ð¤ì¤ë¤³¤È¤ò¹Íθ¤·¤Æ¡¢´ØÏ¢ÊÑ¿ô¤Ï¥¹¥¿¥Æ¥£¥Ã¥¯¤Ë»ý¤Ä¡£
-
-1²óÌܤλ²¾È(HOME)~
¥Ú¡¼¥¸°ìÍ÷¤òls.inc.phpÉ÷¤Ëɽ¼¨¤¹¤ë
-1²óÌܤλ²¾È(HOME°Ê³°)
title up title
*/
-function plugin_navi_convert() {
- global $script,$vars,$WikiName,$BracketName;
- static $_navi_pages;
- $home = $vars['page'];
- if (func_num_args()) {
+// ½ü³°¤¹¤ë¥Ú¡¼¥¸ (Àµµ¬É½¸½¤Ç)
+define('NAVI_EXCLUDE_PATTERN','');
+#define('NAVI_EXCLUDE_PATTERN','/\/_/');
+
+// <link>¥¿¥°¤ò½ÐÎϤ¹¤ë (TRUE|FALSE)
+define('NAVI_LINK_TAGS',FALSE);
+
+function plugin_navi_convert()
+{
+ global $vars, $script, $head_tags;
+ global $_navi_prev,$_navi_next,$_navi_up,$_navi_home;
+ static $navi = array();
+
+ $home = $current = $vars['page'];
+ if (func_num_args())
+ {
list($home) = func_get_args();
- if (!preg_match("/^($WikiName|$BracketName)$/",$home))
- $home = "[[$home]]";
- if (!is_page($home))
- return 'no page.';
+ $home = strip_bracket($home);
}
- $is_home = ($home == $vars['page']);
- $current = strip_bracket($vars['page']);
-
- $pattern = encode('[['.strip_bracket($home).'/');
- $length = strlen($pattern);
-
- $footer = isset($_navi_pages);
- if (!$footer) {
- if ($dir = @opendir(DATA_DIR)) {
- while ($name = readdir($dir)) {
- if ($name == '..' || $name == '.') { continue; }
- if (strpos($name, $pattern) === 0) {
- $pages[] = strip_bracket(decode(trim(preg_replace('/\.txt$/',' ',$name))));
- }
- }
- closedir($dir);
+ $is_home = ($home == $current);
+
+ // ½é²óFALSE,2²óÌܰʹßTRUE
+ $footer = array_key_exists($home,$navi);
+ if (!$footer)
+ {
+ $navi[$home] = array(
+ 'up'=>'',
+ 'prev'=>'',
+ 'prev1'=>'',
+ 'next'=>'',
+ 'next1'=>'',
+ 'home'=>'',
+ 'home1'=>'',
+ );
+
+ $pages = preg_grep('/^'.preg_quote($home,'/').'($|\/)/',get_existpages());
+ // preg_grep(,,PREG_GREP_INVERT)¤¬»È¤¨¤ì¤Ð¡Ä
+ if (NAVI_EXCLUDE_PATTERN != '')
+ {
+ $pages = array_diff($pages,preg_grep(NAVI_EXCLUDE_PATTERN,$pages));
}
- // ̤ºîÀ®»þ¤Î¤¿¤á¤ÎÈÖʼ(¥×¥ì¥Ó¥å¡¼¤È¤«)
- if (array_search($current,$pages) === FALSE) { $pages[] = $current; }
+ $pages[] = $current; // ÈÖʼ :)
+ $pages = array_unique($pages);
natcasesort($pages);
$prev = $home;
- foreach ($pages as $page) {
- if ($page == $current) { break; }
+ foreach ($pages as $page)
+ {
+ if ($page == $current)
+ {
+ break;
+ }
$prev = $page;
}
$next = current($pages);
- $_navi_pages = array(
- 'up' => ' ',
- 'home' => ' ',
- 'home1' => ' ',
- 'prev' => ' ',
- 'prev1' => ' ',
- 'next' => ' ',
- 'next1' => ' ',
- );
-
$pos = strrpos($current, '/');
- if ($pos > 0) {
- $_navi_pages['up'] = make_link('[[Up>'.substr($current, 0, $pos).']]');
+ $up = '';
+ if ($pos > 0)
+ {
+ $up = substr($current, 0, $pos);
+ $navi[$home]['up'] = make_pagelink($up,$_navi_up);
}
- if (!$is_home) {
- if ($prev != $home) {
- $_navi_pages['prev'] = make_link("[[$prev]]");
- } else {
- $_navi_pages['prev'] = make_link("$prev");
- }
- $_navi_pages['prev1'] = make_link("[[Prev>$prev]]");
+ if (!$is_home)
+ {
+ $navi[$home]['prev'] = make_pagelink($prev);
+ $navi[$home]['prev1'] = make_pagelink($prev,$_navi_prev);
}
- if ($next != "") {
- $_navi_pages['next'] = make_link("[[$next]]");
- $_navi_pages['next1'] = make_link("[[Next>$next]]");
+ if ($next != '')
+ {
+ $navi[$home]['next'] = make_pagelink($next);
+ $navi[$home]['next1'] = make_pagelink($next,$_navi_next);
}
- if (!$is_home) {
- $_navi_pages['home'] = make_link($home);
- $_navi_pages['home1'] = make_link(preg_replace("/^(\[\[)?/","$1Home>",$home));
+ $navi[$home]['home'] = make_pagelink($home);
+ $navi[$home]['home1'] = make_pagelink($home,$_navi_home);
+
+ // <link>¥¿¥°¤òÀ¸À®¤¹¤ë : start next prev(previous) parent(up)
+ // ̤Âбþ : contents(toc) search first(begin) last(end)
+ if (NAVI_LINK_TAGS)
+ {
+ foreach (array('start'=>$home,'next'=>$next,'prev'=>$prev,'up'=>$up) as $rel=>$_page)
+ {
+ if ($_page != '')
+ {
+ $s_page = htmlspecialchars($_page);
+ $r_page = rawurlencode($_page);
+ $head_tags[] = " <link rel=\"$rel\" href=\"$script?$r_page\" title=\"$s_page\" />";
+ }
+ }
}
}
$ret = '';
- if ($footer) { //¥Õ¥Ã¥¿
+ if ($footer) // ¥Õ¥Ã¥¿
+ {
$ret = <<<EOD
-<div class=".navi_footer">
-<hr width="100%">
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
-<tr><td width="33%" align="left" valign="top">{$_navi_pages['prev1']}</td>
-<td width="34%" align="center" valign="top">{$_navi_pages['home1']}</td>
-<td width="33%" align="right" valign="top">{$_navi_pages['next1']}</td></tr>
-<tr><td width="33%" align="left" valign="top">{$_navi_pages['prev']}</td>
-<td width="34%" align="center" valign="top">{$_navi_pages['up']}</td>
-<td width="33%" align="right" valign="top">{$_navi_pages['next']}</td></tr>
-</table>
-</div>
+<hr class="full_hr" />
+<ul class="navi">
+ <li class="navi_left">{$navi[$home]['prev1']}<br />{$navi[$home]['prev']}</li>
+ <li class="navi_right">{$navi[$home]['next1']}<br />{$navi[$home]['next']}</li>
+ <li class="navi_none">{$navi[$home]['home1']}<br />{$navi[$home]['up']}</li>
+</ul>
EOD;
- } else if ($is_home) { //Ìܼ¡
- $ret .= "<ul>";
- foreach ($pages as $page) {
- if (strip_bracket($page) == strip_bracket($home)) { continue; }
- $ret .= "<li>".make_link("[[$page]]")."</li>";
+ }
+ else if ($is_home) // Ìܼ¡
+ {
+ $ret .= '<ul>';
+ foreach ($pages as $page)
+ {
+ if ($page != $home)
+ {
+ $ret .= ' <li>'.make_pagelink($page).'</li>';
+ }
}
- $ret .= "</ul>";
- } else {
+ $ret .= '</ul>';
+ }
+ else // ¥Ø¥Ã¥À
+ {
$ret = <<<EOD
-<div class=".navi_header">
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
-<tr><td width="33%" align="left" valign="top">{$_navi_pages['prev1']}</td>
-<td width="34%" align="center" valign="top">{$_navi_pages['home']}</td>
-<td width="33%" align="right" valign="top">{$_navi_pages['next1']}</td></tr>
-</table>
-<hr width="100%">
-</div>
+<ul class="navi">
+ <li class="navi_left">{$navi[$home]['prev1']}</li>
+ <li class="navi_right">{$navi[$home]['next1']}</li>
+ <li class="navi_none">{$navi[$home]['home']}</li>
+</ul>
+<hr class="full_hr" />
EOD;
}
return $ret;