132 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace dokuwiki\Ui;
 | |
| 
 | |
| /**
 | |
|  * DokuWiki Index Interface
 | |
|  *
 | |
|  * @package dokuwiki\Ui
 | |
|  */
 | |
| class Index extends Ui
 | |
| {
 | |
|     protected $ns;
 | |
| 
 | |
|     /**
 | |
|      * Index Ui constructor
 | |
|      *
 | |
|      * @param string $ns  namespace
 | |
|     */
 | |
|     public function __construct($ns = '')
 | |
|     {
 | |
|         $this->ns = $ns;
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /**
 | |
|      * Display page index
 | |
|      *
 | |
|      * @author   Andreas Gohr <andi@splitbrain.org>
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function show()
 | |
|     {
 | |
|         // print intro
 | |
|         print p_locale_xhtml('index');
 | |
| 
 | |
|         print $this->sitemap();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Build html of sitemap, unordered list of pages under the namespace
 | |
|      *
 | |
|      * @return string
 | |
|      */
 | |
|     public function sitemap()
 | |
|     {
 | |
|         global $conf;
 | |
|         global $ID;
 | |
| 
 | |
|         $ns = cleanID($this->ns);
 | |
|         if (empty($ns)){
 | |
|             $ns = getNS($ID);
 | |
|             if ($ns === false) $ns = '';
 | |
|         }
 | |
|         $ns = utf8_encodeFN(str_replace(':', '/', $ns));
 | |
|         $data = array();
 | |
|         search($data, $conf['datadir'], 'search_index', array('ns' => $ns));
 | |
| 
 | |
|         return '<div id="index__tree" class="index__tree">'
 | |
|               . html_buildlist($data, 'idx', [$this,'formatListItem'], [$this,'tagListItem'])
 | |
|               . '</div>';
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Index item formatter
 | |
|      *
 | |
|      * User function for html_buildlist()
 | |
|      *
 | |
|      * @author Andreas Gohr <andi@splitbrain.org>
 | |
|      *
 | |
|      * @param array $item
 | |
|      * @return string
 | |
|      */
 | |
|     public function formatListItem($item)    // RENAMED from html_list_index()
 | |
|     {
 | |
|         global $ID, $conf;
 | |
| 
 | |
|         // prevent searchbots needlessly following links
 | |
|         $nofollow = ($ID != $conf['start'] || $conf['sitemap']) ? 'rel="nofollow"' : '';
 | |
| 
 | |
|         $html = '';
 | |
|         $base = ':'.$item['id'];
 | |
|         $base = substr($base, strrpos($base,':') +1);
 | |
|         if ($item['type'] == 'd') {
 | |
|             // FS#2766, no need for search bots to follow namespace links in the index
 | |
|             $link = wl($ID, 'idx='. rawurlencode($item['id']));
 | |
|             $html .= '<a href="'. $link .'" title="'. $item['id'] .'" class="idx_dir"' . $nofollow .'><strong>';
 | |
|             $html .= $base;
 | |
|             $html .= '</strong></a>';
 | |
|         } else {
 | |
|             // default is noNSorNS($id), but we want noNS($id) when useheading is off FS#2605
 | |
|             $html .= html_wikilink(':'.$item['id'], useHeading('navigation') ? null : noNS($item['id']));
 | |
|         }
 | |
|         return $html;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Index List item
 | |
|      *
 | |
|      * This user function is used in html_buildlist to build the
 | |
|      * <li> tags for namespaces when displaying the page index
 | |
|      * it gives different classes to opened or closed "folders"
 | |
|      *
 | |
|      * @author Andreas Gohr <andi@splitbrain.org>
 | |
|      *
 | |
|      * @param array $item
 | |
|      * @return string html
 | |
|      */
 | |
|     public function tagListItem($item)    // RENAMED from html_li_index()
 | |
|     {
 | |
|         global $INFO;
 | |
|         global $ACT;
 | |
| 
 | |
|         $class = '';
 | |
|         $id = '';
 | |
| 
 | |
|         if ($item['type'] == 'f') {
 | |
|             // scroll to the current item
 | |
|             if (isset($INFO) && $item['id'] == $INFO['id'] && $ACT == 'index') {
 | |
|                 $id = ' id="scroll__here"';
 | |
|                 $class = ' bounce';
 | |
|             }
 | |
|             return '<li class="level'.$item['level'].$class.'" '.$id.'>';
 | |
|         } elseif ($item['open']) {
 | |
|             return '<li class="open">';
 | |
|         } else {
 | |
|             return '<li class="closed">';
 | |
|         }
 | |
|     }
 | |
| 
 | |
| }
 |