123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <?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">';
- }
- }
- }
|