OSDN Git Service

BugTrack/664 Should replace #img(,clear) => #clear
[pukiwiki/pukiwiki.git] / plugin / navi.inc.php
index 8597c3d..a418b5e 100644 (file)
@@ -1,12 +1,13 @@
 <?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
@@ -18,8 +19,6 @@ DobBook
 
 *Æ°ºî
 
-1¥Ú¡¼¥¸¤Ç2²ó¸Æ¤Ð¤ì¤ë¤³¤È¤ò¹Íθ¤·¤Æ¡¢´ØÏ¢ÊÑ¿ô¤Ï¥¹¥¿¥Æ¥£¥Ã¥¯¤Ë»ý¤Ä¡£
-
 -1²óÌܤλ²¾È(HOME)~
  ¥Ú¡¼¥¸°ìÍ÷¤òls.inc.phpÉ÷¤Ëɽ¼¨¤¹¤ë
 -1²óÌܤλ²¾È(HOME°Ê³°)
@@ -33,109 +32,131 @@ DobBook
   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' => '&nbsp;',
-                       'home' => '&nbsp;',
-                       'home1' => '&nbsp;',
-                       'prev' => '&nbsp;',
-                       'prev1' => '&nbsp;',
-                       'next' => '&nbsp;',
-                       'next1' => '&nbsp;',
-               );
-
                $pos = strrpos($current, '/');
-               if ($pos > 0) {
-                       $_navi_pages['up'] = make_link('[[Up&gt;'.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&gt;$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&gt;$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&gt;",$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;