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/** 90fb48f94SSatoshi Sahara * DokuWiki Index Insterface 100fb48f94SSatoshi Sahara * 110fb48f94SSatoshi Sahara * @package dokuwiki\Ui 120fb48f94SSatoshi Sahara */ 130fb48f94SSatoshi Saharaclass Index extends Ui 140fb48f94SSatoshi Sahara{ 150fb48f94SSatoshi Sahara /** 160fb48f94SSatoshi Sahara * Display page index 170fb48f94SSatoshi Sahara * 180fb48f94SSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 190fb48f94SSatoshi Sahara * 200fb48f94SSatoshi Sahara * @param string $ns 210fb48f94SSatoshi Sahara * @return void 220fb48f94SSatoshi Sahara */ 230fb48f94SSatoshi Sahara public function show($ns = '') 240fb48f94SSatoshi Sahara { 250fb48f94SSatoshi Sahara global $conf; 260fb48f94SSatoshi Sahara global $ID; 270fb48f94SSatoshi Sahara 280fb48f94SSatoshi Sahara $ns = cleanID($ns); 290fb48f94SSatoshi Sahara if (empty($ns)){ 300fb48f94SSatoshi Sahara $ns = getNS($ID); 310fb48f94SSatoshi Sahara if ($ns === false) $ns = ''; 320fb48f94SSatoshi Sahara } 330fb48f94SSatoshi Sahara $ns = utf8_encodeFN(str_replace(':', '/', $ns)); 340fb48f94SSatoshi Sahara 350fb48f94SSatoshi Sahara // print intro 360fb48f94SSatoshi Sahara print p_locale_xhtml('index'); 370fb48f94SSatoshi Sahara 380fb48f94SSatoshi Sahara print '<div id="index__tree" class="index__tree">'; 390fb48f94SSatoshi Sahara 400fb48f94SSatoshi Sahara $data = array(); 410fb48f94SSatoshi Sahara search($data, $conf['datadir'], 'search_index', array('ns' => $ns)); 42*fbae750bSSatoshi Sahara print html_buildlist($data, 'idx', [$this,'formatListItem'], [$this,'tagListItem']); 430fb48f94SSatoshi Sahara 440fb48f94SSatoshi Sahara print '</div>'.DOKU_LF; 450fb48f94SSatoshi Sahara } 460fb48f94SSatoshi Sahara 470fb48f94SSatoshi Sahara /** 480fb48f94SSatoshi Sahara * Index item formatter 490fb48f94SSatoshi Sahara * 500fb48f94SSatoshi Sahara * User function for html_buildlist() 510fb48f94SSatoshi Sahara * 520fb48f94SSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 530fb48f94SSatoshi Sahara * 540fb48f94SSatoshi Sahara * @param array $item 550fb48f94SSatoshi Sahara * @return string 560fb48f94SSatoshi Sahara */ 57f9ee77d6SSatoshi Sahara public function formatListItem($item) // RENAMED from html_list_index() 580fb48f94SSatoshi Sahara { 590fb48f94SSatoshi Sahara global $ID, $conf; 600fb48f94SSatoshi Sahara 610fb48f94SSatoshi Sahara // prevent searchbots needlessly following links 620fb48f94SSatoshi Sahara $nofollow = ($ID != $conf['start'] || $conf['sitemap']) ? 'rel="nofollow"' : ''; 630fb48f94SSatoshi Sahara 640fb48f94SSatoshi Sahara $html = ''; 650fb48f94SSatoshi Sahara $base = ':'.$item['id']; 660fb48f94SSatoshi Sahara $base = substr($base, strrpos($base,':') +1); 670fb48f94SSatoshi Sahara if ($item['type'] == 'd') { 680fb48f94SSatoshi Sahara // FS#2766, no need for search bots to follow namespace links in the index 690fb48f94SSatoshi Sahara $link = wl($ID, 'idx='. rawurlencode($item['id'])); 700fb48f94SSatoshi Sahara $html .= '<a href="'. $link .'" title="'. $item['id'] .'" class="idx_dir"' . $nofollow .'><strong>'; 710fb48f94SSatoshi Sahara $html .= $base; 720fb48f94SSatoshi Sahara $html .= '</strong></a>'; 730fb48f94SSatoshi Sahara } else { 740fb48f94SSatoshi Sahara // default is noNSorNS($id), but we want noNS($id) when useheading is off FS#2605 750fb48f94SSatoshi Sahara $html .= html_wikilink(':'.$item['id'], useHeading('navigation') ? null : noNS($item['id'])); 760fb48f94SSatoshi Sahara } 770fb48f94SSatoshi Sahara return $html; 780fb48f94SSatoshi Sahara } 790fb48f94SSatoshi Sahara 800fb48f94SSatoshi Sahara /** 810fb48f94SSatoshi Sahara * Index List item 820fb48f94SSatoshi Sahara * 830fb48f94SSatoshi Sahara * This user function is used in html_buildlist to build the 840fb48f94SSatoshi Sahara * <li> tags for namespaces when displaying the page index 850fb48f94SSatoshi Sahara * it gives different classes to opened or closed "folders" 860fb48f94SSatoshi Sahara * 870fb48f94SSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 880fb48f94SSatoshi Sahara * 890fb48f94SSatoshi Sahara * @param array $item 900fb48f94SSatoshi Sahara * @return string html 910fb48f94SSatoshi Sahara */ 92*fbae750bSSatoshi Sahara public function tagListItem($item) // RENAMED from html_li_index() 930fb48f94SSatoshi Sahara { 940fb48f94SSatoshi Sahara global $INFO; 950fb48f94SSatoshi Sahara global $ACT; 960fb48f94SSatoshi Sahara 970fb48f94SSatoshi Sahara $class = ''; 980fb48f94SSatoshi Sahara $id = ''; 990fb48f94SSatoshi Sahara 1000fb48f94SSatoshi Sahara if ($item['type'] == 'f') { 1010fb48f94SSatoshi Sahara // scroll to the current item 1020fb48f94SSatoshi Sahara if (isset($INFO) && $item['id'] == $INFO['id'] && $ACT == 'index') { 1030fb48f94SSatoshi Sahara $id = ' id="scroll__here"'; 1040fb48f94SSatoshi Sahara $class = ' bounce'; 1050fb48f94SSatoshi Sahara } 1060fb48f94SSatoshi Sahara return '<li class="level'.$item['level'].$class.'" '.$id.'>'; 1070fb48f94SSatoshi Sahara } elseif ($item['open']) { 1080fb48f94SSatoshi Sahara return '<li class="open">'; 1090fb48f94SSatoshi Sahara } else { 1100fb48f94SSatoshi Sahara return '<li class="closed">'; 1110fb48f94SSatoshi Sahara } 1120fb48f94SSatoshi Sahara } 1130fb48f94SSatoshi Sahara 1140fb48f94SSatoshi Sahara} 115