xref: /dokuwiki/inc/Ui/Index.php (revision 9c8632b4f0d7a0eca403ba5460afceafc948b615)
10fb48f94SSatoshi Sahara<?php
20fb48f94SSatoshi Sahara
30fb48f94SSatoshi Saharanamespace dokuwiki\Ui;
40fb48f94SSatoshi Sahara
50fb48f94SSatoshi Saharause dokuwiki\Extension\Event;
60fb48f94SSatoshi Saharause dokuwiki\Form\Form;
70fb48f94SSatoshi Sahara
80fb48f94SSatoshi Sahara/**
914548198SSatoshi Sahara * DokuWiki Index Interface
100fb48f94SSatoshi Sahara *
110fb48f94SSatoshi Sahara * @package dokuwiki\Ui
120fb48f94SSatoshi Sahara */
130fb48f94SSatoshi Saharaclass Index extends Ui
140fb48f94SSatoshi Sahara{
1514548198SSatoshi Sahara    protected $ns;
1614548198SSatoshi Sahara
1714548198SSatoshi Sahara    /**
1814548198SSatoshi Sahara     * Index Ui constructor
1914548198SSatoshi Sahara     *
2014548198SSatoshi Sahara     * @param string $ns  namespace
2114548198SSatoshi Sahara    */
2214548198SSatoshi Sahara    public function __construct($ns = '')
2314548198SSatoshi Sahara    {
2414548198SSatoshi Sahara        $this->ns = $ns;
2514548198SSatoshi Sahara    }
2614548198SSatoshi Sahara
2714548198SSatoshi Sahara
280fb48f94SSatoshi Sahara    /**
290fb48f94SSatoshi Sahara     * Display page index
300fb48f94SSatoshi Sahara     *
310fb48f94SSatoshi Sahara     * @author   Andreas Gohr <andi@splitbrain.org>
320fb48f94SSatoshi Sahara     *
330fb48f94SSatoshi Sahara     * @return void
340fb48f94SSatoshi Sahara     */
3514548198SSatoshi Sahara    public function show()
360fb48f94SSatoshi Sahara    {
370fb48f94SSatoshi Sahara        global $conf;
380fb48f94SSatoshi Sahara        global $ID;
390fb48f94SSatoshi Sahara
4014548198SSatoshi Sahara        $ns  = cleanID($this->ns);
410fb48f94SSatoshi Sahara        if (empty($ns)){
420fb48f94SSatoshi Sahara            $ns = getNS($ID);
430fb48f94SSatoshi Sahara            if ($ns === false) $ns = '';
440fb48f94SSatoshi Sahara        }
450fb48f94SSatoshi Sahara        $ns  = utf8_encodeFN(str_replace(':', '/', $ns));
460fb48f94SSatoshi Sahara
470fb48f94SSatoshi Sahara        // print intro
480fb48f94SSatoshi Sahara        print p_locale_xhtml('index');
490fb48f94SSatoshi Sahara
500fb48f94SSatoshi Sahara        print '<div id="index__tree" class="index__tree">';
510fb48f94SSatoshi Sahara
520fb48f94SSatoshi Sahara        $data = array();
530fb48f94SSatoshi Sahara        search($data, $conf['datadir'], 'search_index', array('ns' => $ns));
54*9c8632b4SSatoshi Sahara        print $this->buildIndexList($data);
550fb48f94SSatoshi Sahara
560fb48f94SSatoshi Sahara        print '</div>'.DOKU_LF;
570fb48f94SSatoshi Sahara    }
580fb48f94SSatoshi Sahara
590fb48f94SSatoshi Sahara    /**
60*9c8632b4SSatoshi Sahara     * Build html of unordered list of index items
61*9c8632b4SSatoshi Sahara     *
62*9c8632b4SSatoshi Sahara     * @param array $item
63*9c8632b4SSatoshi Sahara     * @return string
64*9c8632b4SSatoshi Sahara     */
65*9c8632b4SSatoshi Sahara    public function buildIndexList($data)
66*9c8632b4SSatoshi Sahara    {
67*9c8632b4SSatoshi Sahara        return html_buildlist($data, 'idx', [$this,'formatListItem'], [$this,'tagListItem']);
68*9c8632b4SSatoshi Sahara    }
69*9c8632b4SSatoshi Sahara
70*9c8632b4SSatoshi Sahara    /**
710fb48f94SSatoshi Sahara     * Index item formatter
720fb48f94SSatoshi Sahara     *
730fb48f94SSatoshi Sahara     * User function for html_buildlist()
740fb48f94SSatoshi Sahara     *
750fb48f94SSatoshi Sahara     * @author Andreas Gohr <andi@splitbrain.org>
760fb48f94SSatoshi Sahara     *
770fb48f94SSatoshi Sahara     * @param array $item
780fb48f94SSatoshi Sahara     * @return string
790fb48f94SSatoshi Sahara     */
80f9ee77d6SSatoshi Sahara    public function formatListItem($item)    // RENAMED from html_list_index()
810fb48f94SSatoshi Sahara    {
820fb48f94SSatoshi Sahara        global $ID, $conf;
830fb48f94SSatoshi Sahara
840fb48f94SSatoshi Sahara        // prevent searchbots needlessly following links
850fb48f94SSatoshi Sahara        $nofollow = ($ID != $conf['start'] || $conf['sitemap']) ? 'rel="nofollow"' : '';
860fb48f94SSatoshi Sahara
870fb48f94SSatoshi Sahara        $html = '';
880fb48f94SSatoshi Sahara        $base = ':'.$item['id'];
890fb48f94SSatoshi Sahara        $base = substr($base, strrpos($base,':') +1);
900fb48f94SSatoshi Sahara        if ($item['type'] == 'd') {
910fb48f94SSatoshi Sahara            // FS#2766, no need for search bots to follow namespace links in the index
920fb48f94SSatoshi Sahara            $link = wl($ID, 'idx='. rawurlencode($item['id']));
930fb48f94SSatoshi Sahara            $html .= '<a href="'. $link .'" title="'. $item['id'] .'" class="idx_dir"' . $nofollow .'><strong>';
940fb48f94SSatoshi Sahara            $html .= $base;
950fb48f94SSatoshi Sahara            $html .= '</strong></a>';
960fb48f94SSatoshi Sahara        } else {
970fb48f94SSatoshi Sahara            // default is noNSorNS($id), but we want noNS($id) when useheading is off FS#2605
980fb48f94SSatoshi Sahara            $html .= html_wikilink(':'.$item['id'], useHeading('navigation') ? null : noNS($item['id']));
990fb48f94SSatoshi Sahara        }
1000fb48f94SSatoshi Sahara        return $html;
1010fb48f94SSatoshi Sahara    }
1020fb48f94SSatoshi Sahara
1030fb48f94SSatoshi Sahara    /**
1040fb48f94SSatoshi Sahara     * Index List item
1050fb48f94SSatoshi Sahara     *
1060fb48f94SSatoshi Sahara     * This user function is used in html_buildlist to build the
1070fb48f94SSatoshi Sahara     * <li> tags for namespaces when displaying the page index
1080fb48f94SSatoshi Sahara     * it gives different classes to opened or closed "folders"
1090fb48f94SSatoshi Sahara     *
1100fb48f94SSatoshi Sahara     * @author Andreas Gohr <andi@splitbrain.org>
1110fb48f94SSatoshi Sahara     *
1120fb48f94SSatoshi Sahara     * @param array $item
1130fb48f94SSatoshi Sahara     * @return string html
1140fb48f94SSatoshi Sahara     */
115fbae750bSSatoshi Sahara    public function tagListItem($item)    // RENAMED from html_li_index()
1160fb48f94SSatoshi Sahara    {
1170fb48f94SSatoshi Sahara        global $INFO;
1180fb48f94SSatoshi Sahara        global $ACT;
1190fb48f94SSatoshi Sahara
1200fb48f94SSatoshi Sahara        $class = '';
1210fb48f94SSatoshi Sahara        $id = '';
1220fb48f94SSatoshi Sahara
1230fb48f94SSatoshi Sahara        if ($item['type'] == 'f') {
1240fb48f94SSatoshi Sahara            // scroll to the current item
1250fb48f94SSatoshi Sahara            if (isset($INFO) && $item['id'] == $INFO['id'] && $ACT == 'index') {
1260fb48f94SSatoshi Sahara                $id = ' id="scroll__here"';
1270fb48f94SSatoshi Sahara                $class = ' bounce';
1280fb48f94SSatoshi Sahara            }
1290fb48f94SSatoshi Sahara            return '<li class="level'.$item['level'].$class.'" '.$id.'>';
1300fb48f94SSatoshi Sahara        } elseif ($item['open']) {
1310fb48f94SSatoshi Sahara            return '<li class="open">';
1320fb48f94SSatoshi Sahara        } else {
1330fb48f94SSatoshi Sahara            return '<li class="closed">';
1340fb48f94SSatoshi Sahara        }
1350fb48f94SSatoshi Sahara    }
1360fb48f94SSatoshi Sahara
1370fb48f94SSatoshi Sahara}
138