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