xref: /dokuwiki/inc/Ui/Index.php (revision 0fb48f94151d95b37b111149489d8e97e95a6c44)
1*0fb48f94SSatoshi Sahara<?php
2*0fb48f94SSatoshi Sahara
3*0fb48f94SSatoshi Saharanamespace dokuwiki\Ui;
4*0fb48f94SSatoshi Sahara
5*0fb48f94SSatoshi Saharause dokuwiki\Extension\Event;
6*0fb48f94SSatoshi Saharause dokuwiki\Form\Form;
7*0fb48f94SSatoshi Sahara
8*0fb48f94SSatoshi Sahara/**
9*0fb48f94SSatoshi Sahara * DokuWiki Index Insterface
10*0fb48f94SSatoshi Sahara *
11*0fb48f94SSatoshi Sahara * @package dokuwiki\Ui
12*0fb48f94SSatoshi Sahara */
13*0fb48f94SSatoshi Saharaclass Index extends Ui
14*0fb48f94SSatoshi Sahara{
15*0fb48f94SSatoshi Sahara    /**
16*0fb48f94SSatoshi Sahara     * Display page index
17*0fb48f94SSatoshi Sahara     *
18*0fb48f94SSatoshi Sahara     * @author   Andreas Gohr <andi@splitbrain.org>
19*0fb48f94SSatoshi Sahara     *
20*0fb48f94SSatoshi Sahara     * @param string $ns
21*0fb48f94SSatoshi Sahara     * @return void
22*0fb48f94SSatoshi Sahara     */
23*0fb48f94SSatoshi Sahara        public function show($ns = '')
24*0fb48f94SSatoshi Sahara        {
25*0fb48f94SSatoshi Sahara        global $conf;
26*0fb48f94SSatoshi Sahara        global $ID;
27*0fb48f94SSatoshi Sahara
28*0fb48f94SSatoshi Sahara        $ns  = cleanID($ns);
29*0fb48f94SSatoshi Sahara        if (empty($ns)){
30*0fb48f94SSatoshi Sahara            $ns = getNS($ID);
31*0fb48f94SSatoshi Sahara            if ($ns === false) $ns = '';
32*0fb48f94SSatoshi Sahara        }
33*0fb48f94SSatoshi Sahara        $ns  = utf8_encodeFN(str_replace(':', '/', $ns));
34*0fb48f94SSatoshi Sahara
35*0fb48f94SSatoshi Sahara        // print intro
36*0fb48f94SSatoshi Sahara        print p_locale_xhtml('index');
37*0fb48f94SSatoshi Sahara
38*0fb48f94SSatoshi Sahara        print '<div id="index__tree" class="index__tree">';
39*0fb48f94SSatoshi Sahara
40*0fb48f94SSatoshi Sahara        $data = array();
41*0fb48f94SSatoshi Sahara        search($data, $conf['datadir'], 'search_index', array('ns' => $ns));
42*0fb48f94SSatoshi Sahara        print html_buildlist($data, 'idx', [$this,'html_list_index'], [$this,'html_li_index']);
43*0fb48f94SSatoshi Sahara
44*0fb48f94SSatoshi Sahara        print '</div>'.DOKU_LF;
45*0fb48f94SSatoshi Sahara    }
46*0fb48f94SSatoshi Sahara
47*0fb48f94SSatoshi Sahara    /**
48*0fb48f94SSatoshi Sahara     * Index item formatter
49*0fb48f94SSatoshi Sahara     *
50*0fb48f94SSatoshi Sahara     * User function for html_buildlist()
51*0fb48f94SSatoshi Sahara     *
52*0fb48f94SSatoshi Sahara     * @author Andreas Gohr <andi@splitbrain.org>
53*0fb48f94SSatoshi Sahara     *
54*0fb48f94SSatoshi Sahara     * @param array $item
55*0fb48f94SSatoshi Sahara     * @return string
56*0fb48f94SSatoshi Sahara     */
57*0fb48f94SSatoshi Sahara    public function html_list_index($item)
58*0fb48f94SSatoshi Sahara    {
59*0fb48f94SSatoshi Sahara        global $ID, $conf;
60*0fb48f94SSatoshi Sahara
61*0fb48f94SSatoshi Sahara        // prevent searchbots needlessly following links
62*0fb48f94SSatoshi Sahara        $nofollow = ($ID != $conf['start'] || $conf['sitemap']) ? 'rel="nofollow"' : '';
63*0fb48f94SSatoshi Sahara
64*0fb48f94SSatoshi Sahara        $html = '';
65*0fb48f94SSatoshi Sahara        $base = ':'.$item['id'];
66*0fb48f94SSatoshi Sahara        $base = substr($base, strrpos($base,':') +1);
67*0fb48f94SSatoshi Sahara        if ($item['type'] == 'd') {
68*0fb48f94SSatoshi Sahara            // FS#2766, no need for search bots to follow namespace links in the index
69*0fb48f94SSatoshi Sahara            $link = wl($ID, 'idx='. rawurlencode($item['id']));
70*0fb48f94SSatoshi Sahara            $html .= '<a href="'. $link .'" title="'. $item['id'] .'" class="idx_dir"' . $nofollow .'><strong>';
71*0fb48f94SSatoshi Sahara            $html .= $base;
72*0fb48f94SSatoshi Sahara            $html .= '</strong></a>';
73*0fb48f94SSatoshi Sahara        } else {
74*0fb48f94SSatoshi Sahara            // default is noNSorNS($id), but we want noNS($id) when useheading is off FS#2605
75*0fb48f94SSatoshi Sahara            $html .= html_wikilink(':'.$item['id'], useHeading('navigation') ? null : noNS($item['id']));
76*0fb48f94SSatoshi Sahara        }
77*0fb48f94SSatoshi Sahara        return $html;
78*0fb48f94SSatoshi Sahara    }
79*0fb48f94SSatoshi Sahara
80*0fb48f94SSatoshi Sahara    /**
81*0fb48f94SSatoshi Sahara     * Index List item
82*0fb48f94SSatoshi Sahara     *
83*0fb48f94SSatoshi Sahara     * This user function is used in html_buildlist to build the
84*0fb48f94SSatoshi Sahara     * <li> tags for namespaces when displaying the page index
85*0fb48f94SSatoshi Sahara     * it gives different classes to opened or closed "folders"
86*0fb48f94SSatoshi Sahara     *
87*0fb48f94SSatoshi Sahara     * @author Andreas Gohr <andi@splitbrain.org>
88*0fb48f94SSatoshi Sahara     *
89*0fb48f94SSatoshi Sahara     * @param array $item
90*0fb48f94SSatoshi Sahara     * @return string html
91*0fb48f94SSatoshi Sahara     */
92*0fb48f94SSatoshi Sahara    public function html_li_index($item)
93*0fb48f94SSatoshi Sahara    {
94*0fb48f94SSatoshi Sahara        global $INFO;
95*0fb48f94SSatoshi Sahara        global $ACT;
96*0fb48f94SSatoshi Sahara
97*0fb48f94SSatoshi Sahara        $class = '';
98*0fb48f94SSatoshi Sahara        $id = '';
99*0fb48f94SSatoshi Sahara
100*0fb48f94SSatoshi Sahara        if ($item['type'] == 'f') {
101*0fb48f94SSatoshi Sahara            // scroll to the current item
102*0fb48f94SSatoshi Sahara            if (isset($INFO) && $item['id'] == $INFO['id'] && $ACT == 'index') {
103*0fb48f94SSatoshi Sahara                $id = ' id="scroll__here"';
104*0fb48f94SSatoshi Sahara                $class = ' bounce';
105*0fb48f94SSatoshi Sahara            }
106*0fb48f94SSatoshi Sahara            return '<li class="level'.$item['level'].$class.'" '.$id.'>';
107*0fb48f94SSatoshi Sahara        } elseif ($item['open']) {
108*0fb48f94SSatoshi Sahara            return '<li class="open">';
109*0fb48f94SSatoshi Sahara        } else {
110*0fb48f94SSatoshi Sahara            return '<li class="closed">';
111*0fb48f94SSatoshi Sahara        }
112*0fb48f94SSatoshi Sahara    }
113*0fb48f94SSatoshi Sahara
114*0fb48f94SSatoshi Sahara}
115