1ed7b5f09Sandi<?php 215fae107Sandi/** 315fae107Sandi * HTML output functions 415fae107Sandi * 515fae107Sandi * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 615fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 715fae107Sandi */ 815fae107Sandi 90c3a5702SAndreas Gohruse dokuwiki\ChangeLog\MediaChangeLog; 100c3a5702SAndreas Gohruse dokuwiki\ChangeLog\PageChangeLog; 11e1d9dcc8SAndreas Gohruse dokuwiki\Extension\AuthPlugin; 12cbb44eabSAndreas Gohruse dokuwiki\Extension\Event; 130c3a5702SAndreas Gohr 142d3b082eSMichael Großeif (!defined('SEC_EDIT_PATTERN')) { 1537c80e0eSLarsDW223 define('SEC_EDIT_PATTERN', '#<!-- EDIT({.*?}) -->#'); 162d3b082eSMichael Große} 172d3b082eSMichael Große 186bbae538Sandi 19f3f0262cSandi/** 20f3f0262cSandi * Convenience function to quickly build a wikilink 2115fae107Sandi * 2215fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 238d5e837eSMichael Hamann * @param string $id id of the target page 248d5e837eSMichael Hamann * @param string $name the name of the link, i.e. the text that is displayed 258d5e837eSMichael Hamann * @param string|array $search search string(s) that shall be highlighted in the target page 268d5e837eSMichael Hamann * @return string the HTML code of the link 27f3f0262cSandi */ 28db959ae3SAndreas Gohrfunction html_wikilink($id, $name = null, $search = '') { 29a8397511SGerrit Uitslag /** @var Doku_Renderer_xhtml $xhtml_renderer */ 30db959ae3SAndreas Gohr static $xhtml_renderer = null; 31723d78dbSandi if (is_null($xhtml_renderer)) { 327aea91afSChris Smith $xhtml_renderer = p_get_renderer('xhtml'); 33f3f0262cSandi } 34f3f0262cSandi 35fe9ec250SChris Smith return $xhtml_renderer->internallink($id,$name,$search,true,'navigation'); 36f3f0262cSandi} 37f3f0262cSandi 38f3f0262cSandi/** 39f3f0262cSandi * The loginform 4015fae107Sandi * 4115fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 42d1d904bbSMichael Große * 43d1d904bbSMichael Große * @param bool $svg Whether to show svg icons in the register and resendpwd links or not 44bab2b7f0SSatoshi Sahara * @deprecated 2020-07-18 45f3f0262cSandi */ 46d1d904bbSMichael Großefunction html_login($svg = false) { 4787f229e8SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\Login::class .'::show()'); 48bab2b7f0SSatoshi Sahara (new dokuwiki\Ui\Login($svg))->show(); 49f3f0262cSandi} 50f3f0262cSandi 51d59dea9fSGerrit Uitslag 52d59dea9fSGerrit Uitslag/** 53d59dea9fSGerrit Uitslag * Denied page content 54d59dea9fSGerrit Uitslag * 55d59dea9fSGerrit Uitslag * @return string html 567afe5d93SSatoshi Sahara * @deprecated 2020-07-18 not called anymore, see inc/Action/Denied::tplContent() 57d59dea9fSGerrit Uitslag */ 58d59dea9fSGerrit Uitslagfunction html_denied() { 59a215faf2SSatoshi Sahara dbg_deprecated(\dokuwiki\Action\Denied::class .'::showBanner()'); 60a215faf2SSatoshi Sahara (new dokuwiki\Action\Denied())->showBanner(); 61d59dea9fSGerrit Uitslag} 62d59dea9fSGerrit Uitslag 63f3f0262cSandi/** 6415fae107Sandi * inserts section edit buttons if wanted or removes the markers 6515fae107Sandi * 6615fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 6742ea7f44SGerrit Uitslag * 6842ea7f44SGerrit Uitslag * @param string $text 6942ea7f44SGerrit Uitslag * @param bool $show show section edit buttons? 7042ea7f44SGerrit Uitslag * @return string 7115fae107Sandi */ 72f3f0262cSandifunction html_secedit($text, $show = true) { 73f3f0262cSandi global $INFO; 7435dae8b0SBen Coburn 75aac83cd4SPhy if ((isset($INFO) && !$INFO['writable']) || !$show || (isset($INFO) && $INFO['rev'])) { 762d3b082eSMichael Große return preg_replace(SEC_EDIT_PATTERN,'',$text); 77f3f0262cSandi } 7835dae8b0SBen Coburn 792d3b082eSMichael Große return preg_replace_callback(SEC_EDIT_PATTERN, 8040868f2fSAdrian Lang 'html_secedit_button', $text); 8140868f2fSAdrian Lang} 8240868f2fSAdrian Lang 8340868f2fSAdrian Lang/** 8440868f2fSAdrian Lang * prepares section edit button data for event triggering 8540868f2fSAdrian Lang * used as a callback in html_secedit 8640868f2fSAdrian Lang * 8740868f2fSAdrian Lang * @author Andreas Gohr <andi@splitbrain.org> 8842ea7f44SGerrit Uitslag * 8942ea7f44SGerrit Uitslag * @param array $matches matches with regexp 9042ea7f44SGerrit Uitslag * @return string 9142ea7f44SGerrit Uitslag * @triggers HTML_SECEDIT_BUTTON 9240868f2fSAdrian Lang */ 9340868f2fSAdrian Langfunction html_secedit_button($matches){ 94ada0d779SMichael Hamann $json = htmlspecialchars_decode($matches[1], ENT_QUOTES); 95ada0d779SMichael Hamann $data = json_decode($json, true); 96ec57f119SLarsDW223 if ($data == NULL) { 97ec57f119SLarsDW223 return; 9806917fceSMichael Große } 99ec57f119SLarsDW223 $data ['target'] = strtolower($data['target']); 100ec57f119SLarsDW223 $data ['hid'] = strtolower($data['hid']); 10140868f2fSAdrian Lang 102cbb44eabSAndreas Gohr return Event::createAndTrigger('HTML_SECEDIT_BUTTON', $data, 10340868f2fSAdrian Lang 'html_secedit_get_button'); 10440868f2fSAdrian Lang} 10540868f2fSAdrian Lang 10640868f2fSAdrian Lang/** 10740868f2fSAdrian Lang * prints a section editing button 10840868f2fSAdrian Lang * used as default action form HTML_SECEDIT_BUTTON 10940868f2fSAdrian Lang * 11040868f2fSAdrian Lang * @author Adrian Lang <lang@cosmocode.de> 11142ea7f44SGerrit Uitslag * 11242ea7f44SGerrit Uitslag * @param array $data name, section id and target 11342ea7f44SGerrit Uitslag * @return string html 11440868f2fSAdrian Lang */ 11540868f2fSAdrian Langfunction html_secedit_get_button($data) { 11640868f2fSAdrian Lang global $ID; 11740868f2fSAdrian Lang global $INFO; 11840868f2fSAdrian Lang 1196d9eab4dSMichael Hamann if (!isset($data['name']) || $data['name'] === '') return ''; 12040868f2fSAdrian Lang 12140868f2fSAdrian Lang $name = $data['name']; 12240868f2fSAdrian Lang unset($data['name']); 12340868f2fSAdrian Lang 124905fa971SAdrian Lang $secid = $data['secid']; 125905fa971SAdrian Lang unset($data['secid']); 126905fa971SAdrian Lang 1277afe5d93SSatoshi Sahara $params = array_merge( 1287afe5d93SSatoshi Sahara array('do' => 'edit', 'rev' => $INFO['lastmod'], 'summary' => '['.$name.'] '), 1297afe5d93SSatoshi Sahara $data 1307afe5d93SSatoshi Sahara ); 1317afe5d93SSatoshi Sahara 1327afe5d93SSatoshi Sahara $html = '<div class="secedit editbutton_'.$data['target'] .' editbutton_'.$secid .'">'; 1337afe5d93SSatoshi Sahara $html.= html_btn('secedit', $ID, '', $params, 'post', $name); 1347afe5d93SSatoshi Sahara $html.= '</div>'; 1357afe5d93SSatoshi Sahara return $html; 136f3f0262cSandi} 137f3f0262cSandi 138f3f0262cSandi/** 139d6c9c552Smatthiasgrimm * Just the back to top button (in its own form) 1406b13307fSandi * 1416b13307fSandi * @author Andreas Gohr <andi@splitbrain.org> 14242ea7f44SGerrit Uitslag * 14342ea7f44SGerrit Uitslag * @return string html 1446b13307fSandi */ 1456b13307fSandifunction html_topbtn() { 1466b13307fSandi global $lang; 1476b13307fSandi 1487afe5d93SSatoshi Sahara $html = '<a class="nolink" href="#dokuwiki__top">' 1497afe5d93SSatoshi Sahara .'<button class="button" onclick="window.scrollTo(0, 0)" title="'. $lang['btn_top'] .'">' 1507afe5d93SSatoshi Sahara . $lang['btn_top'] 1517afe5d93SSatoshi Sahara .'</button></a>'; 1527afe5d93SSatoshi Sahara return $html; 1536b13307fSandi} 1546b13307fSandi 1556b13307fSandi/** 156d67ca2c0Smatthiasgrimm * Displays a button (using its own form) 15735dae8b0SBen Coburn * If tooltip exists, the access key tooltip is replaced. 15815fae107Sandi * 15915fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 16042ea7f44SGerrit Uitslag * 16142ea7f44SGerrit Uitslag * @param string $name 16242ea7f44SGerrit Uitslag * @param string $id 16342ea7f44SGerrit Uitslag * @param string $akey access key 164e3710957SGerrit Uitslag * @param string[] $params key-value pairs added as hidden inputs 16542ea7f44SGerrit Uitslag * @param string $method 16642ea7f44SGerrit Uitslag * @param string $tooltip 16742ea7f44SGerrit Uitslag * @param bool|string $label label text, false: lookup btn_$name in localization 168e824d633SMichael Große * @param string $svg (optional) svg code, inserted into the button 16942ea7f44SGerrit Uitslag * @return string 170f3f0262cSandi */ 171e824d633SMichael Großefunction html_btn($name, $id, $akey, $params, $method = 'get', $tooltip = '', $label = false, $svg = null) { 172f3f0262cSandi global $conf; 173f3f0262cSandi global $lang; 174f3f0262cSandi 175f5baf821SAnika Henke if (!$label) 176f3f0262cSandi $label = $lang['btn_'.$name]; 177f3f0262cSandi 17849c713a3Sandi //filter id (without urlencoding) 17949c713a3Sandi $id = idfilter($id,false); 180f3f0262cSandi 181f3f0262cSandi //make nice URLs even for buttons 1826c7843b5Sandi if ($conf['userewrite'] == 2) { 1836c7843b5Sandi $script = DOKU_BASE.DOKU_SCRIPT.'/'.$id; 1846c7843b5Sandi } elseif ($conf['userewrite']) { 1856c7843b5Sandi $script = DOKU_BASE.$id; 1866c7843b5Sandi } else { 1878b00ebcfSandi $script = DOKU_BASE.DOKU_SCRIPT; 188f3f0262cSandi $params['id'] = $id; 189f3f0262cSandi } 190f3f0262cSandi 1917afe5d93SSatoshi Sahara $html = '<form class="button btn_'.$name.'" method="'.$method.'" action="'.$script.'"><div class="no">'; 192f3f0262cSandi 19306a4bf8fSAndreas Gohr if (is_array($params)) { 1949e491c01SAndreas Gohr foreach ($params as $key => $val) { 1957afe5d93SSatoshi Sahara $html .= '<input type="hidden" name="'.$key.'" value="'.hsc($val).'" />'; 196f3f0262cSandi } 19706a4bf8fSAndreas Gohr } 198f3f0262cSandi 1997afe5d93SSatoshi Sahara $tip = empty($tooltip) ? hsc($label) : hsc($tooltip); 20011ea018fSAndreas Gohr 2017afe5d93SSatoshi Sahara $html .= '<button type="submit" '; 20211ea018fSAndreas Gohr if ($akey) { 20307493d05SAnika Henke $tip .= ' ['.strtoupper($akey).']'; 2047afe5d93SSatoshi Sahara $html .= 'accesskey="'.$akey.'" '; 20535dae8b0SBen Coburn } 2067afe5d93SSatoshi Sahara $html .= 'title="'.$tip.'">'; 207e824d633SMichael Große if ($svg) { 2087afe5d93SSatoshi Sahara $html .= '<span>'. hsc($label) .'</span>'. inlineSVG($svg); 209679dba01SMichael Große } else { 2107afe5d93SSatoshi Sahara $html .= hsc($label); 211679dba01SMichael Große } 2127afe5d93SSatoshi Sahara $html .= '</button>'; 2137afe5d93SSatoshi Sahara $html .= '</div></form>'; 214f3f0262cSandi 2157afe5d93SSatoshi Sahara return $html; 216f3f0262cSandi} 2170747f5d7Sghi/** 2180747f5d7Sghi * show a revision warning 2190747f5d7Sghi * 2200747f5d7Sghi * @author Szymon Olewniczak <dokuwiki@imz.re> 22187f229e8SSatoshi Sahara * @deprecated 2020-07-18 2220747f5d7Sghi */ 223c8556525Sghifunction html_showrev() { 22487f229e8SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\PageView::class .'::showrev()'); 2250747f5d7Sghi} 226f3f0262cSandi 227f3f0262cSandi/** 22842ea7f44SGerrit Uitslag * Show a wiki page 22915fae107Sandi * 23015fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 23142ea7f44SGerrit Uitslag * 23242ea7f44SGerrit Uitslag * @param null|string $txt wiki text or null for showing $ID 233bab2b7f0SSatoshi Sahara * @deprecated 2020-07-18 23415fae107Sandi */ 23511c78c94SAndreas Gohrfunction html_show($txt=null) { 23687f229e8SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\PageView::class .'::show()'); 237bab2b7f0SSatoshi Sahara (new dokuwiki\Ui\PageView($txt))->show(); 238f3f0262cSandi} 239f3f0262cSandi 240f3f0262cSandi/** 241ee4c4a1bSAndreas Gohr * ask the user about how to handle an exisiting draft 242ee4c4a1bSAndreas Gohr * 243ee4c4a1bSAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org> 244bab2b7f0SSatoshi Sahara * @deprecated 2020-07-18 245ee4c4a1bSAndreas Gohr */ 246ee4c4a1bSAndreas Gohrfunction html_draft() { 24787f229e8SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\Draft::class .'::show()'); 248bab2b7f0SSatoshi Sahara (new dokuwiki\Ui\Draft)->show(); 249ee4c4a1bSAndreas Gohr} 250ee4c4a1bSAndreas Gohr 251ee4c4a1bSAndreas Gohr/** 252f3f0262cSandi * Highlights searchqueries in HTML code 25315fae107Sandi * 25415fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 2557209be23SAndreas Gohr * @author Harry Fuecks <hfuecks@gmail.com> 25642ea7f44SGerrit Uitslag * 25742ea7f44SGerrit Uitslag * @param string $html 25842ea7f44SGerrit Uitslag * @param array|string $phrases 25942ea7f44SGerrit Uitslag * @return string html 260f3f0262cSandi */ 261546d3a99SAndreas Gohrfunction html_hilight($html, $phrases) { 2628a803caeSAndreas Gohr $phrases = (array) $phrases; 2638a803caeSAndreas Gohr $phrases = array_map('preg_quote_cb', $phrases); 2648a803caeSAndreas Gohr $phrases = array_map('ft_snippet_re_preprocess', $phrases); 2658a803caeSAndreas Gohr $phrases = array_filter($phrases); 2668a803caeSAndreas Gohr $regex = join('|',$phrases); 26760c15d7dSAndreas Gohr 26860c15d7dSAndreas Gohr if ($regex === '') return $html; 2698cbc5ee8SAndreas Gohr if (!\dokuwiki\Utf8\Clean::isUtf8($regex)) return $html; 270f3f0262cSandi 271675d8ce4SSatoshi Sahara $html = @preg_replace_callback("/((<[^>]*)|$regex)/ui", function ($match) { 272675d8ce4SSatoshi Sahara $hlight = unslash($match[0]); 273675d8ce4SSatoshi Sahara if (!isset($match[2])) { 274688774a0SAnika Henke $hlight = '<span class="search_hit">'.$hlight.'</span>'; 2757209be23SAndreas Gohr } 2767209be23SAndreas Gohr return $hlight; 277675d8ce4SSatoshi Sahara }, $html); 278675d8ce4SSatoshi Sahara return $html; 2797209be23SAndreas Gohr} 2807209be23SAndreas Gohr 2817209be23SAndreas Gohr/** 28215fae107Sandi * Display error on locked pages 28315fae107Sandi * 28415fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 2857afe5d93SSatoshi Sahara * @deprecated 2020-07-18 not called anymore, see inc/Action/Locked::tplContent() 28615fae107Sandi */ 287ee20e7d1Sandifunction html_locked() { 288a215faf2SSatoshi Sahara dbg_deprecated(\dokuwiki\Action\Locked::class .'::showBanner()'); 289a215faf2SSatoshi Sahara (new dokuwiki\Action\Locked())->showBanner(); 290f3f0262cSandi} 291f3f0262cSandi 29215fae107Sandi/** 29315fae107Sandi * list old revisions 29415fae107Sandi * 29515fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 29671726d78SBen Coburn * @author Ben Coburn <btcoburn@silicodon.net> 2978e69fd30SKate Arzamastseva * @author Kate Arzamastseva <pshns@ukr.net> 298e0c26282SGerrit Uitslag * 299e0c26282SGerrit Uitslag * @param int $first skip the first n changelog lines 300e0c26282SGerrit Uitslag * @param bool|string $media_id id of media, or false for current page 301bab2b7f0SSatoshi Sahara * @deprecated 2020-07-18 30215fae107Sandi */ 3038e69fd30SKate Arzamastsevafunction html_revisions($first = 0, $media_id = false) { 304b370ebcdSSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\PageRevisions::class .'::show()'); 305b370ebcdSSatoshi Sahara if ($media_id) { 306b370ebcdSSatoshi Sahara (new dokuwiki\Ui\MediaRevisions($media_id))->show($first); 307b370ebcdSSatoshi Sahara } else { 308b370ebcdSSatoshi Sahara global $INFO; 309b370ebcdSSatoshi Sahara (new dokuwiki\Ui\PageRevisions($INFO['id']))->show($first); 310b370ebcdSSatoshi Sahara } 311f3f0262cSandi} 312f3f0262cSandi 31315fae107Sandi/** 31415fae107Sandi * display recent changes 31515fae107Sandi * 31615fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 3175749f1ceSmatthiasgrimm * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net> 31871726d78SBen Coburn * @author Ben Coburn <btcoburn@silicodon.net> 3198d40b4b6SKate Arzamastseva * @author Kate Arzamastseva <pshns@ukr.net> 32042ea7f44SGerrit Uitslag * 32142ea7f44SGerrit Uitslag * @param int $first 32242ea7f44SGerrit Uitslag * @param string $show_changes 323bab2b7f0SSatoshi Sahara * @deprecated 2020-07-18 32415fae107Sandi */ 3250739a638SKate Arzamastsevafunction html_recent($first = 0, $show_changes = 'both') { 32687f229e8SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\Recent::class .'::show()'); 327bab2b7f0SSatoshi Sahara (new dokuwiki\Ui\Recent($first, $show_changes))->show(); 328f3f0262cSandi} 329f3f0262cSandi 33015fae107Sandi/** 33115fae107Sandi * Display page index 33215fae107Sandi * 33315fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 33442ea7f44SGerrit Uitslag * 33542ea7f44SGerrit Uitslag * @param string $ns 336bab2b7f0SSatoshi Sahara * @deprecated 2020-07-18 33715fae107Sandi */ 338f3f0262cSandifunction html_index($ns) { 33987f229e8SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\Index::class .'::show()'); 340bab2b7f0SSatoshi Sahara (new dokuwiki\Ui\Index($ns))->show(); 341f3f0262cSandi} 342f3f0262cSandi 343f3f0262cSandi/** 34489b939d7SSatoshi Sahara * Index tree item formatter for html_buildlist() 34515fae107Sandi * 346f3f0262cSandi * User function for html_buildlist() 34715fae107Sandi * 34815fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 34942ea7f44SGerrit Uitslag * 35042ea7f44SGerrit Uitslag * @param array $item 35142ea7f44SGerrit Uitslag * @return string 3529c8632b4SSatoshi Sahara * @deprecated 2020-07-18 353f3f0262cSandi */ 3549c8632b4SSatoshi Saharafunction html_list_index($item) { 35587f229e8SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\Index::class .'::formatListItem()'); 3569c8632b4SSatoshi Sahara return (new dokuwiki\Ui\Index)->formatListItem($item); 357f3f0262cSandi} 358f3f0262cSandi 359f3f0262cSandi/** 36089b939d7SSatoshi Sahara * Index list item formatter for html_buildlist() 361cb70c441Sandi * 362a1dee2b9SAdrian Lang * This user function is used in html_buildlist to build the 363cb70c441Sandi * <li> tags for namespaces when displaying the page index 364cb70c441Sandi * it gives different classes to opened or closed "folders" 365cb70c441Sandi * 366cb70c441Sandi * @author Andreas Gohr <andi@splitbrain.org> 36742ea7f44SGerrit Uitslag * 36842ea7f44SGerrit Uitslag * @param array $item 36942ea7f44SGerrit Uitslag * @return string html 3709c8632b4SSatoshi Sahara * @deprecated 2020-07-18 371cb70c441Sandi */ 3729c8632b4SSatoshi Saharafunction html_li_index($item) { 37387f229e8SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\Index::class .'::tagListItem()'); 3749c8632b4SSatoshi Sahara return (new dokuwiki\Ui\Index)->tagListItem($item); 375cb70c441Sandi} 376cb70c441Sandi 377cb70c441Sandi/** 37889b939d7SSatoshi Sahara * Default list item formatter for html_buildlist() 37989b939d7SSatoshi Sahara * 38089b939d7SSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 38189b939d7SSatoshi Sahara * 38289b939d7SSatoshi Sahara * @param array $item 38389b939d7SSatoshi Sahara * @return string html 38489b939d7SSatoshi Sahara * @deprecated 2020-07-18 38589b939d7SSatoshi Sahara */ 38689b939d7SSatoshi Saharafunction html_li_default($item){ 38789b939d7SSatoshi Sahara return '<li class="level'.$item['level'].'">'; 38889b939d7SSatoshi Sahara} 38989b939d7SSatoshi Sahara 39089b939d7SSatoshi Sahara/** 39115fae107Sandi * Build an unordered list 39215fae107Sandi * 393f3f0262cSandi * Build an unordered list from the given $data array 394f3f0262cSandi * Each item in the array has to have a 'level' property 395f3f0262cSandi * the item itself gets printed by the given $func user 396cb70c441Sandi * function. The second and optional function is used to 397cb70c441Sandi * print the <li> tag. Both user function need to accept 398cb70c441Sandi * a single item. 39915fae107Sandi * 400c5a8fd96SAndreas Gohr * Both user functions can be given as array to point to 401c5a8fd96SAndreas Gohr * a member of an object. 402c5a8fd96SAndreas Gohr * 40315fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 40480679bafSGerrit Uitslag * 40580679bafSGerrit Uitslag * @param array $data array with item arrays 40680679bafSGerrit Uitslag * @param string $class class of ul wrapper 40780679bafSGerrit Uitslag * @param callable $func callback to print an list item 408bde560b4SSatoshi Sahara * @param callable $lifunc (optional) callback to the opening li tag 409bde560b4SSatoshi Sahara * @param bool $forcewrapper (optional) Trigger building a wrapper ul if the first level is 410ae614416SAnika Henke * 0 (we have a root object) or 1 (just the root content) 41180679bafSGerrit Uitslag * @return string html of an unordered list 412f3f0262cSandi */ 413bde560b4SSatoshi Saharafunction html_buildlist($data, $class, $func, $lifunc = null, $forcewrapper = false) { 414a1dee2b9SAdrian Lang if (count($data) === 0) { 415a1dee2b9SAdrian Lang return ''; 416a1dee2b9SAdrian Lang } 417a1dee2b9SAdrian Lang 4182689c55fSMichael Große $firstElement = reset($data); 4192689c55fSMichael Große $start_level = $firstElement['level']; 4209e4f7880SAdrian Lang $level = $start_level; 4219c8632b4SSatoshi Sahara $html = ''; 422434f5921SHakan Sandell $open = 0; 4239e4f7880SAdrian Lang 424bde560b4SSatoshi Sahara // set callback function to build the <li> tag, formerly defined as html_li_default() 425bde560b4SSatoshi Sahara if (!is_callable($lifunc)) { 4269c8632b4SSatoshi Sahara $lifunc = function ($item) { 4279c8632b4SSatoshi Sahara return '<li class="level'.$item['level'].'">'; 4289c8632b4SSatoshi Sahara }; 429bde560b4SSatoshi Sahara } 430bde560b4SSatoshi Sahara 431f3f0262cSandi foreach ($data as $item) { 432f3f0262cSandi if ($item['level'] > $level) { 433f3f0262cSandi //open new list 434df52d0feSandi for ($i = 0; $i < ($item['level'] - $level); $i++) { 4359c8632b4SSatoshi Sahara if ($i) $html .= '<li class="clear">'; 4369c8632b4SSatoshi Sahara $html .= "\n".'<ul class="'.$class.'">'."\n"; 437434f5921SHakan Sandell $open++; 438df52d0feSandi } 439434f5921SHakan Sandell $level = $item['level']; 440434f5921SHakan Sandell 441f3f0262cSandi } elseif ($item['level'] < $level) { 442f3f0262cSandi //close last item 4439c8632b4SSatoshi Sahara $html .= '</li>'."\n"; 444434f5921SHakan Sandell while ($level > $item['level'] && $open > 0 ) { 445f3f0262cSandi //close higher lists 4469c8632b4SSatoshi Sahara $html .= '</ul>'."\n".'</li>'."\n"; 447434f5921SHakan Sandell $level--; 448434f5921SHakan Sandell $open--; 449f3f0262cSandi } 4509c8632b4SSatoshi Sahara } elseif ($html !== '') { 45187671313SHakan Sandell //close previous item 4529c8632b4SSatoshi Sahara $html .= '</li>'."\n"; 453f3f0262cSandi } 454f3f0262cSandi 455f3f0262cSandi //print item 4569c8632b4SSatoshi Sahara $html .= call_user_func($lifunc, $item); 4579c8632b4SSatoshi Sahara $html .= '<div class="li">'; 45834dbe711Schris 4599c8632b4SSatoshi Sahara $html .= call_user_func($func, $item); 4609c8632b4SSatoshi Sahara $html .= '</div>'; 461f3f0262cSandi } 462f3f0262cSandi 463f3f0262cSandi //close remaining items and lists 4649c8632b4SSatoshi Sahara $html .= '</li>'."\n"; 465434f5921SHakan Sandell while ($open-- > 0) { 4669c8632b4SSatoshi Sahara $html .= '</ul></li>'."\n"; 467434f5921SHakan Sandell } 468434f5921SHakan Sandell 469434f5921SHakan Sandell if ($forcewrapper || $start_level < 2) { 470434f5921SHakan Sandell // Trigger building a wrapper ul if the first level is 471434f5921SHakan Sandell // 0 (we have a root object) or 1 (just the root content) 4729c8632b4SSatoshi Sahara $html = "\n".'<ul class="'.$class.'">'."\n".$html.'</ul>'."\n"; 473f3f0262cSandi } 474f3f0262cSandi 4759c8632b4SSatoshi Sahara return $html; 476f3f0262cSandi} 477f3f0262cSandi 47815fae107Sandi/** 47915fae107Sandi * display backlinks 48015fae107Sandi * 48115fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 48211df47ecSMichael Klier * @author Michael Klier <chi@chimeric.de> 483bab2b7f0SSatoshi Sahara * @deprecated 2020-07-18 48415fae107Sandi */ 485f3f0262cSandifunction html_backlinks() { 48687f229e8SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\Backlinks::class .'::show()'); 487bab2b7f0SSatoshi Sahara (new dokuwiki\Ui\Backlinks)->show(); 48895b451bcSAdrian Lang} 48995b451bcSAdrian Lang 49015fae107Sandi/** 491a215faf2SSatoshi Sahara * Get header of diff HTML 492a215faf2SSatoshi Sahara * 493a215faf2SSatoshi Sahara * @param string $l_rev Left revisions 494a215faf2SSatoshi Sahara * @param string $r_rev Right revision 495a215faf2SSatoshi Sahara * @param string $id Page id, if null $ID is used 496a215faf2SSatoshi Sahara * @param bool $media If it is for media files 497a215faf2SSatoshi Sahara * @param bool $inline Return the header on a single line 498a215faf2SSatoshi Sahara * @return string[] HTML snippets for diff header 499a215faf2SSatoshi Sahara * @deprecated 2020-07-18 500a215faf2SSatoshi Sahara */ 501a215faf2SSatoshi Saharafunction html_diff_head($l_rev, $r_rev, $id = null, $media = false, $inline = false) { 502defc7576SSatoshi Sahara dbg_deprecated('see '. \dokuwiki\Ui\PageDiff::class .'::diffHead()'); 503a215faf2SSatoshi Sahara} 504a215faf2SSatoshi Sahara 505a215faf2SSatoshi Sahara/** 50604e99fe1SGerrit Uitslag * Show diff 507baf0c3e5SGerrit Uitslag * between current page version and provided $text 508baf0c3e5SGerrit Uitslag * or between the revisions provided via GET or POST 50915fae107Sandi * 51015fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 511baf0c3e5SGerrit Uitslag * @param string $text when non-empty: compare with this text with most current version 51204e99fe1SGerrit Uitslag * @param bool $intro display the intro text 5138d5e837eSMichael Hamann * @param string $type type of the diff (inline or sidebyside) 514bab2b7f0SSatoshi Sahara * @deprecated 2020-07-18 51515fae107Sandi */ 51672165381SAndreas Gohrfunction html_diff($text = '', $intro = true, $type = null) { 517defc7576SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\PageDiff::class .'::show()'); 518edb50e6aSSatoshi Sahara global $INFO; 519*e4c881bdSSatoshi Sahara (new dokuwiki\Ui\PageDiff($INFO['id']))->compareWith($text)->preference([ 520edb50e6aSSatoshi Sahara 'showIntro' => $intro, 521edb50e6aSSatoshi Sahara 'difftype' => $type, 522edb50e6aSSatoshi Sahara ])->show(); 523fcfecb69SChristopher Smith} 524fcfecb69SChristopher Smith 52515fae107Sandi/** 526a215faf2SSatoshi Sahara * Create html for revision navigation 527a215faf2SSatoshi Sahara * 528a215faf2SSatoshi Sahara * @param PageChangeLog $pagelog changelog object of current page 529a215faf2SSatoshi Sahara * @param string $type inline vs sidebyside 530a215faf2SSatoshi Sahara * @param int $l_rev left revision timestamp 531a215faf2SSatoshi Sahara * @param int $r_rev right revision timestamp 532a215faf2SSatoshi Sahara * @return string[] html of left and right navigation elements 533a215faf2SSatoshi Sahara * @deprecated 2020-07-18 534a215faf2SSatoshi Sahara */ 535a215faf2SSatoshi Saharafunction html_diff_navigation($pagelog, $type, $l_rev, $r_rev) { 536defc7576SSatoshi Sahara dbg_deprecated('see '. \dokuwiki\Ui\PageDiff::class .'::diffNavigation()'); 537a215faf2SSatoshi Sahara} 538a215faf2SSatoshi Sahara 539a215faf2SSatoshi Sahara/** 540a215faf2SSatoshi Sahara * Create html link to a diff defined by two revisions 541a215faf2SSatoshi Sahara * 542a215faf2SSatoshi Sahara * @param string $difftype display type 543a215faf2SSatoshi Sahara * @param string $linktype 544a215faf2SSatoshi Sahara * @param int $lrev oldest revision 545a215faf2SSatoshi Sahara * @param int $rrev newest revision or null for diff with current revision 546a215faf2SSatoshi Sahara * @return string html of link to a diff 547a215faf2SSatoshi Sahara * @deprecated 2020-07-18 548a215faf2SSatoshi Sahara */ 549a215faf2SSatoshi Saharafunction html_diff_navigationlink($difftype, $linktype, $lrev, $rrev = null) { 550defc7576SSatoshi Sahara dbg_deprecated('see '. \dokuwiki\Ui\PageDiff::class .'::diffViewlink()'); 551a215faf2SSatoshi Sahara} 552a215faf2SSatoshi Sahara 553a215faf2SSatoshi Sahara/** 554a215faf2SSatoshi Sahara * Insert soft breaks in diff html 555a215faf2SSatoshi Sahara * 556a215faf2SSatoshi Sahara * @param string $diffhtml 557a215faf2SSatoshi Sahara * @return string 558a215faf2SSatoshi Sahara * @deprecated 2020-07-18 559a215faf2SSatoshi Sahara */ 560a215faf2SSatoshi Saharafunction html_insert_softbreaks($diffhtml) { 561defc7576SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\PageDiff::class .'::insertSoftbreaks()'); 562defc7576SSatoshi Sahara return (new dokuwiki\Ui\PageDiff())->insertSoftbreaks($diffhtml); 563a215faf2SSatoshi Sahara} 564a215faf2SSatoshi Sahara 565a215faf2SSatoshi Sahara/** 56615fae107Sandi * show warning on conflict detection 56715fae107Sandi * 56815fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 56942ea7f44SGerrit Uitslag * 57042ea7f44SGerrit Uitslag * @param string $text 57142ea7f44SGerrit Uitslag * @param string $summary 572bab2b7f0SSatoshi Sahara * @deprecated 2020-07-18 57315fae107Sandi */ 574f3f0262cSandifunction html_conflict($text, $summary) { 575edb50e6aSSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\PageConflict::class .'::show()'); 576edb50e6aSSatoshi Sahara (new dokuwiki\Ui\PageConflict($text, $summary))->show(); 577f3f0262cSandi} 578f3f0262cSandi 579f3f0262cSandi/** 58015fae107Sandi * Prints the global message array 58115fae107Sandi * 58215fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 583f3f0262cSandi */ 584f3f0262cSandifunction html_msgarea() { 585cc58224cSMichael Hamann global $MSG, $MSG_shown; 5868d5e837eSMichael Hamann /** @var array $MSG */ 587cc58224cSMichael Hamann // store if the global $MSG has already been shown and thus HTML output has been started 588cc58224cSMichael Hamann $MSG_shown = true; 589cc58224cSMichael Hamann 590f3f0262cSandi if (!isset($MSG)) return; 591f3f0262cSandi 5924af9f0d4SAndreas Gohr $shown = array(); 593f3f0262cSandi foreach ($MSG as $msg) { 5944af9f0d4SAndreas Gohr $hash = md5($msg['msg']); 5954af9f0d4SAndreas Gohr if (isset($shown[$hash])) continue; // skip double messages 596f755f9abSChristopher Smith if (info_msg_allowed($msg)) { 597f3f0262cSandi print '<div class="'.$msg['lvl'].'">'; 598f3f0262cSandi print $msg['msg']; 599f3f0262cSandi print '</div>'; 600d3bae478SChristopher Smith } 6014af9f0d4SAndreas Gohr $shown[$hash] = 1; 602f3f0262cSandi } 603cc58224cSMichael Hamann 604cc58224cSMichael Hamann unset($GLOBALS['MSG']); 605f3f0262cSandi} 606f3f0262cSandi 607f3f0262cSandi/** 608f3f0262cSandi * Prints the registration form 60915fae107Sandi * 61015fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 611bab2b7f0SSatoshi Sahara * @deprecated 2020-07-18 612f3f0262cSandi */ 613f3f0262cSandifunction html_register() { 61487f229e8SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\UserRegister::class .'::show()'); 615bab2b7f0SSatoshi Sahara (new dokuwiki\Ui\UserRegister)->show(); 616f3f0262cSandi} 617f3f0262cSandi 618f3f0262cSandi/** 6198b06d178Schris * Print the update profile form 6208b06d178Schris * 6218b06d178Schris * @author Christopher Smith <chris@jalakai.co.uk> 6228b06d178Schris * @author Andreas Gohr <andi@splitbrain.org> 623bab2b7f0SSatoshi Sahara * @deprecated 2020-07-18 6248b06d178Schris */ 6258b06d178Schrisfunction html_updateprofile() { 62687f229e8SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\UserProfile::class .'::show()'); 627bab2b7f0SSatoshi Sahara (new dokuwiki\Ui\UserProfile)->show(); 6288b06d178Schris} 6298b06d178Schris 6308b06d178Schris/** 6317c4635c4SAdrian Lang * Preprocess edit form data 63215fae107Sandi * 63315fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 6342ffea8f2SAdrian Lang * 635bab2b7f0SSatoshi Sahara * @deprecated 2020-07-18 636f3f0262cSandi */ 6375a932e77SAdrian Langfunction html_edit() { 63887f229e8SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\Editor::class .'::show()'); 639bab2b7f0SSatoshi Sahara (new dokuwiki\Ui\Editor)->show(); 640b6912aeaSAndreas Gohr} 641b6912aeaSAndreas Gohr 642b6912aeaSAndreas Gohr/** 643bf69f8cbSSatoshi Sahara * Display the default edit form 644bf69f8cbSSatoshi Sahara * 645bf69f8cbSSatoshi Sahara * Is the default action for HTML_EDIT_FORMSELECTION. 646bf69f8cbSSatoshi Sahara * 647bf69f8cbSSatoshi Sahara * @param mixed[] $param 648bf69f8cbSSatoshi Sahara * @deprecated 2020-07-18 649bf69f8cbSSatoshi Sahara */ 650bf69f8cbSSatoshi Saharafunction html_edit_form($param) { 651bf69f8cbSSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\Editor::class .'::addTextarea()'); 652bf69f8cbSSatoshi Sahara return (new dokuwiki\Ui\Editor)->addTextarea($param); 653bf69f8cbSSatoshi Sahara} 654bf69f8cbSSatoshi Sahara 655bf69f8cbSSatoshi Sahara/** 656f3f0262cSandi * prints some debug info 65715fae107Sandi * 65815fae107Sandi * @author Andreas Gohr <andi@splitbrain.org> 659f3f0262cSandi */ 660f3f0262cSandifunction html_debug() { 661f3f0262cSandi global $conf; 662d16a4edaSandi global $lang; 663e1d9dcc8SAndreas Gohr /** @var AuthPlugin $auth */ 6645298a619SAndreas Gohr global $auth; 665100a97e3SAndreas Gohr global $INFO; 666100a97e3SAndreas Gohr 66728fb55ffSandi //remove sensitive data 66828fb55ffSandi $cnf = $conf; 66924297a69SAndreas Gohr debug_guard($cnf); 670100a97e3SAndreas Gohr $nfo = $INFO; 67124297a69SAndreas Gohr debug_guard($nfo); 672100a97e3SAndreas Gohr $ses = $_SESSION; 67324297a69SAndreas Gohr debug_guard($ses); 674f3f0262cSandi 675f3f0262cSandi print '<html><body>'; 676f3f0262cSandi 677f3f0262cSandi print '<p>When reporting bugs please send all the following '; 678f3f0262cSandi print 'output as a mail to andi@splitbrain.org '; 679f3f0262cSandi print 'The best way to do this is to save this page in your browser</p>'; 680f3f0262cSandi 681100a97e3SAndreas Gohr print '<b>$INFO:</b><pre>'; 682100a97e3SAndreas Gohr print_r($nfo); 683100a97e3SAndreas Gohr print '</pre>'; 684100a97e3SAndreas Gohr 685f3f0262cSandi print '<b>$_SERVER:</b><pre>'; 686f3f0262cSandi print_r($_SERVER); 687f3f0262cSandi print '</pre>'; 688f3f0262cSandi 689f3f0262cSandi print '<b>$conf:</b><pre>'; 69028fb55ffSandi print_r($cnf); 691f3f0262cSandi print '</pre>'; 692f3f0262cSandi 693ed7b5f09Sandi print '<b>DOKU_BASE:</b><pre>'; 694ed7b5f09Sandi print DOKU_BASE; 695f3f0262cSandi print '</pre>'; 696f3f0262cSandi 697ed7b5f09Sandi print '<b>abs DOKU_BASE:</b><pre>'; 698ed7b5f09Sandi print DOKU_URL; 699ed7b5f09Sandi print '</pre>'; 700ed7b5f09Sandi 701ed7b5f09Sandi print '<b>rel DOKU_BASE:</b><pre>'; 702f3f0262cSandi print dirname($_SERVER['PHP_SELF']).'/'; 703f3f0262cSandi print '</pre>'; 704f3f0262cSandi 705f3f0262cSandi print '<b>PHP Version:</b><pre>'; 706f3f0262cSandi print phpversion(); 707f3f0262cSandi print '</pre>'; 708f3f0262cSandi 709f3f0262cSandi print '<b>locale:</b><pre>'; 710f3f0262cSandi print setlocale(LC_ALL,0); 711f3f0262cSandi print '</pre>'; 712f3f0262cSandi 713d16a4edaSandi print '<b>encoding:</b><pre>'; 714d16a4edaSandi print $lang['encoding']; 715d16a4edaSandi print '</pre>'; 716d16a4edaSandi 7175298a619SAndreas Gohr if ($auth) { 7185298a619SAndreas Gohr print '<b>Auth backend capabilities:</b><pre>'; 7192f46ade0SChristopher Smith foreach ($auth->getCapabilities() as $cando) { 7207afe5d93SSatoshi Sahara print ' '.str_pad($cando,16) .' => '. (int)$auth->canDo($cando) . DOKU_LF; 7212f46ade0SChristopher Smith } 7225298a619SAndreas Gohr print '</pre>'; 7235298a619SAndreas Gohr } 7245298a619SAndreas Gohr 7253aa54d7cSAndreas Gohr print '<b>$_SESSION:</b><pre>'; 726100a97e3SAndreas Gohr print_r($ses); 7273aa54d7cSAndreas Gohr print '</pre>'; 7283aa54d7cSAndreas Gohr 729f3f0262cSandi print '<b>Environment:</b><pre>'; 730f3f0262cSandi print_r($_ENV); 731f3f0262cSandi print '</pre>'; 732f3f0262cSandi 733f3f0262cSandi print '<b>PHP settings:</b><pre>'; 734f3f0262cSandi $inis = ini_get_all(); 735f3f0262cSandi print_r($inis); 736f3f0262cSandi print '</pre>'; 737f3f0262cSandi 738e89b7c1eSChristopher Smith if (function_exists('apache_get_version')) { 73959bc3b48SGerrit Uitslag $apache = array(); 740e89b7c1eSChristopher Smith $apache['version'] = apache_get_version(); 741e89b7c1eSChristopher Smith 742e89b7c1eSChristopher Smith if (function_exists('apache_get_modules')) { 743e89b7c1eSChristopher Smith $apache['modules'] = apache_get_modules(); 744e89b7c1eSChristopher Smith } 745e89b7c1eSChristopher Smith print '<b>Apache</b><pre>'; 746e89b7c1eSChristopher Smith print_r($apache); 747e89b7c1eSChristopher Smith print '</pre>'; 748e89b7c1eSChristopher Smith } 749e89b7c1eSChristopher Smith 750f3f0262cSandi print '</body></html>'; 751f3f0262cSandi} 752f3f0262cSandi 75310271ce4SAndreas Gohr/** 7548b06d178Schris * Form to request a new password for an existing account 7558b06d178Schris * 7568b06d178Schris * @author Benoit Chesneau <benoit@bchesneau.info> 757cc204bbdSAndreas Gohr * @author Andreas Gohr <gohr@cosmocode.de> 758bab2b7f0SSatoshi Sahara * @deprecated 2020-07-18 75911e2ce22Schris */ 7608b06d178Schrisfunction html_resendpwd() { 76187f229e8SSatoshi Sahara dbg_deprecated(\dokuwiki\Ui\UserResendPwd::class .'::show()'); 762bab2b7f0SSatoshi Sahara (new dokuwiki\Ui\UserResendPwd)->show(); 763cc204bbdSAndreas Gohr} 764cc204bbdSAndreas Gohr 765fdb8d77bSTom N Harris/** 766b8595a66SAndreas Gohr * Return the TOC rendered to XHTML 767b8595a66SAndreas Gohr * 768b8595a66SAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org> 76942ea7f44SGerrit Uitslag * 77042ea7f44SGerrit Uitslag * @param array $toc 77142ea7f44SGerrit Uitslag * @return string html 772b8595a66SAndreas Gohr */ 773b8595a66SAndreas Gohrfunction html_TOC($toc) { 774b8595a66SAndreas Gohr if (!count($toc)) return ''; 775b8595a66SAndreas Gohr global $lang; 776b8595a66SAndreas Gohr $out = '<!-- TOC START -->'.DOKU_LF; 777158a5bffSDeathCamel57 $out .= '<div id="dw__toc" class="dw__toc">'.DOKU_LF; 77848722ac8SAnika Henke $out .= '<h3 class="toggle">'; 779b8595a66SAndreas Gohr $out .= $lang['toc']; 780d5acc30dSAnika Henke $out .= '</h3>'.DOKU_LF; 781d5acc30dSAnika Henke $out .= '<div>'.DOKU_LF; 782bde560b4SSatoshi Sahara $out .= html_buildlist($toc, 'toc', 'html_list_toc', null, true); 783b8595a66SAndreas Gohr $out .= '</div>'.DOKU_LF.'</div>'.DOKU_LF; 784b8595a66SAndreas Gohr $out .= '<!-- TOC END -->'.DOKU_LF; 785db959ae3SAndreas Gohr return $out; 786db959ae3SAndreas Gohr} 787b8595a66SAndreas Gohr 788b8595a66SAndreas Gohr/** 789b8595a66SAndreas Gohr * Callback for html_buildlist 79042ea7f44SGerrit Uitslag * 79142ea7f44SGerrit Uitslag * @param array $item 79242ea7f44SGerrit Uitslag * @return string html 793b8595a66SAndreas Gohr */ 794b8595a66SAndreas Gohrfunction html_list_toc($item) { 795c66972f2SAdrian Lang if (isset($item['hid'])){ 7967d91652aSAndreas Gohr $link = '#'.$item['hid']; 7977d91652aSAndreas Gohr } else { 7987d91652aSAndreas Gohr $link = $item['link']; 7997d91652aSAndreas Gohr } 8007d91652aSAndreas Gohr 801d5acc30dSAnika Henke return '<a href="'.$link.'">'.hsc($item['title']).'</a>'; 802b8595a66SAndreas Gohr} 803b8595a66SAndreas Gohr 804b8595a66SAndreas Gohr/** 805b8595a66SAndreas Gohr * Helper function to build TOC items 806b8595a66SAndreas Gohr * 807b8595a66SAndreas Gohr * Returns an array ready to be added to a TOC array 808b8595a66SAndreas Gohr * 809b8595a66SAndreas Gohr * @param string $link - where to link (if $hash set to '#' it's a local anchor) 810b8595a66SAndreas Gohr * @param string $text - what to display in the TOC 811b8595a66SAndreas Gohr * @param int $level - nesting level 812b8595a66SAndreas Gohr * @param string $hash - is prepended to the given $link, set blank if you want full links 8138d5e837eSMichael Hamann * @return array the toc item 814b8595a66SAndreas Gohr */ 815b8595a66SAndreas Gohrfunction html_mktocitem($link, $text, $level, $hash='#') { 816bde560b4SSatoshi Sahara return array( 817bde560b4SSatoshi Sahara 'link' => $hash.$link, 818b8595a66SAndreas Gohr 'title' => $text, 819b8595a66SAndreas Gohr 'type' => 'ul', 820bde560b4SSatoshi Sahara 'level' => $level 821bde560b4SSatoshi Sahara ); 822b8595a66SAndreas Gohr} 823b8595a66SAndreas Gohr 824b8595a66SAndreas Gohr/** 825fdb8d77bSTom N Harris * Output a Doku_Form object. 826fdb8d77bSTom N Harris * Triggers an event with the form name: HTML_{$name}FORM_OUTPUT 827fdb8d77bSTom N Harris * 828fdb8d77bSTom N Harris * @author Tom N Harris <tnharris@whoopdedo.org> 82942ea7f44SGerrit Uitslag * 8308d5e837eSMichael Hamann * @param string $name The name of the form 8318d5e837eSMichael Hamann * @param Doku_Form $form The form 8322162df3aSSatoshi Sahara * @return void 8332162df3aSSatoshi Sahara * @deprecated 2020-07-18 834fdb8d77bSTom N Harris */ 835c29600d0SSatoshi Saharafunction html_form($name, $form) { 8368a5f08afSSatoshi Sahara dbg_deprecated('use dokuwiki\Form\Form instead of Doku_Form'); 837fdb8d77bSTom N Harris // Safety check in case the caller forgets. 838fdb8d77bSTom N Harris $form->endFieldset(); 839cbb44eabSAndreas Gohr Event::createAndTrigger('HTML_'.strtoupper($name).'FORM_OUTPUT', $form, 'html_form_output', false); 840fdb8d77bSTom N Harris} 841fdb8d77bSTom N Harris 842fdb8d77bSTom N Harris/** 843fdb8d77bSTom N Harris * Form print function. 844c29600d0SSatoshi Sahara * Just calls printForm() on the form object. 84542ea7f44SGerrit Uitslag * 846c29600d0SSatoshi Sahara * @param Doku_Form $form The form 8472162df3aSSatoshi Sahara * @return void 8482162df3aSSatoshi Sahara * @deprecated 2020-07-18 849fdb8d77bSTom N Harris */ 85025dd2a2fSSatoshi Saharafunction html_form_output($form) { 8518a5f08afSSatoshi Sahara dbg_deprecated('use dokuwiki\Form\Form::toHTML()'); 85225dd2a2fSSatoshi Sahara $form->printForm(); 85325dd2a2fSSatoshi Sahara} 854340756e4Sandi 85507bf32b2SAndreas Gohr/** 85607bf32b2SAndreas Gohr * Embed a flash object in HTML 85707bf32b2SAndreas Gohr * 85807bf32b2SAndreas Gohr * This will create the needed HTML to embed a flash movie in a cross browser 85907bf32b2SAndreas Gohr * compatble way using valid XHTML 86007bf32b2SAndreas Gohr * 86107bf32b2SAndreas Gohr * The parameters $params, $flashvars and $atts need to be associative arrays. 86207bf32b2SAndreas Gohr * No escaping needs to be done for them. The alternative content *has* to be 86307bf32b2SAndreas Gohr * escaped because it is used as is. If no alternative content is given 86407bf32b2SAndreas Gohr * $lang['noflash'] is used. 86507bf32b2SAndreas Gohr * 86607bf32b2SAndreas Gohr * @author Andreas Gohr <andi@splitbrain.org> 86707bf32b2SAndreas Gohr * @link http://latrine.dgx.cz/how-to-correctly-insert-a-flash-into-xhtml 86807bf32b2SAndreas Gohr * 86907bf32b2SAndreas Gohr * @param string $swf - the SWF movie to embed 87007bf32b2SAndreas Gohr * @param int $width - width of the flash movie in pixels 87107bf32b2SAndreas Gohr * @param int $height - height of the flash movie in pixels 87207bf32b2SAndreas Gohr * @param array $params - additional parameters (<param>) 87307bf32b2SAndreas Gohr * @param array $flashvars - parameters to be passed in the flashvar parameter 87407bf32b2SAndreas Gohr * @param array $atts - additional attributes for the <object> tag 87507bf32b2SAndreas Gohr * @param string $alt - alternative content (is NOT automatically escaped!) 876b3d1090eSMichael Hamann * @return string - the XHTML markup 87707bf32b2SAndreas Gohr */ 87807bf32b2SAndreas Gohrfunction html_flashobject($swf,$width,$height,$params=null,$flashvars=null,$atts=null,$alt=''){ 87907bf32b2SAndreas Gohr global $lang; 88007bf32b2SAndreas Gohr 88107bf32b2SAndreas Gohr $out = ''; 88207bf32b2SAndreas Gohr 88307bf32b2SAndreas Gohr // prepare the object attributes 88407bf32b2SAndreas Gohr if(is_null($atts)) $atts = array(); 88507bf32b2SAndreas Gohr $atts['width'] = (int) $width; 886d4c61e61SAndreas Gohr $atts['height'] = (int) $height; 88707bf32b2SAndreas Gohr if(!$atts['width']) $atts['width'] = 425; 88807bf32b2SAndreas Gohr if(!$atts['height']) $atts['height'] = 350; 88907bf32b2SAndreas Gohr 89007bf32b2SAndreas Gohr // add object attributes for standard compliant browsers 89107bf32b2SAndreas Gohr $std = $atts; 89207bf32b2SAndreas Gohr $std['type'] = 'application/x-shockwave-flash'; 89307bf32b2SAndreas Gohr $std['data'] = $swf; 89407bf32b2SAndreas Gohr 89507bf32b2SAndreas Gohr // add object attributes for IE 89607bf32b2SAndreas Gohr $ie = $atts; 89707bf32b2SAndreas Gohr $ie['classid'] = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'; 89807bf32b2SAndreas Gohr 89907bf32b2SAndreas Gohr // open object (with conditional comments) 90007bf32b2SAndreas Gohr $out .= '<!--[if !IE]> -->'.NL; 90107bf32b2SAndreas Gohr $out .= '<object '.buildAttributes($std).'>'.NL; 90207bf32b2SAndreas Gohr $out .= '<!-- <![endif]-->'.NL; 90307bf32b2SAndreas Gohr $out .= '<!--[if IE]>'.NL; 90407bf32b2SAndreas Gohr $out .= '<object '.buildAttributes($ie).'>'.NL; 90507bf32b2SAndreas Gohr $out .= ' <param name="movie" value="'.hsc($swf).'" />'.NL; 9069ae41cdcSAndreas Gohr $out .= '<!--><!-- -->'.NL; 90707bf32b2SAndreas Gohr 90807bf32b2SAndreas Gohr // print params 90907bf32b2SAndreas Gohr if(is_array($params)) foreach($params as $key => $val){ 91007bf32b2SAndreas Gohr $out .= ' <param name="'.hsc($key).'" value="'.hsc($val).'" />'.NL; 91107bf32b2SAndreas Gohr } 91207bf32b2SAndreas Gohr 91307bf32b2SAndreas Gohr // add flashvars 91407bf32b2SAndreas Gohr if(is_array($flashvars)){ 915d4c61e61SAndreas Gohr $out .= ' <param name="FlashVars" value="'.buildURLparams($flashvars).'" />'.NL; 91607bf32b2SAndreas Gohr } 91707bf32b2SAndreas Gohr 91807bf32b2SAndreas Gohr // alternative content 91907bf32b2SAndreas Gohr if($alt){ 92007bf32b2SAndreas Gohr $out .= $alt.NL; 92107bf32b2SAndreas Gohr }else{ 92207bf32b2SAndreas Gohr $out .= $lang['noflash'].NL; 92307bf32b2SAndreas Gohr } 92407bf32b2SAndreas Gohr 92507bf32b2SAndreas Gohr // finish 92607bf32b2SAndreas Gohr $out .= '</object>'.NL; 92707bf32b2SAndreas Gohr $out .= '<!-- <![endif]-->'.NL; 92807bf32b2SAndreas Gohr 92907bf32b2SAndreas Gohr return $out; 93007bf32b2SAndreas Gohr} 93107bf32b2SAndreas Gohr 9328d5e837eSMichael Hamann/** 9338d5e837eSMichael Hamann * Prints HTML code for the given tab structure 9348d5e837eSMichael Hamann * 9358d5e837eSMichael Hamann * @param array $tabs tab structure 9368d5e837eSMichael Hamann * @param string $current_tab the current tab id 9372162df3aSSatoshi Sahara * @return void 9388d5e837eSMichael Hamann */ 93995b451bcSAdrian Langfunction html_tabs($tabs, $current_tab = null) { 94094add303SAnika Henke echo '<ul class="tabs">'.NL; 94195b451bcSAdrian Lang 94295b451bcSAdrian Lang foreach ($tabs as $id => $tab) { 94395b451bcSAdrian Lang html_tab($tab['href'], $tab['caption'], $id === $current_tab); 94495b451bcSAdrian Lang } 94595b451bcSAdrian Lang 94694add303SAnika Henke echo '</ul>'.NL; 94795b451bcSAdrian Lang} 948cd2a4cfdSAnika Henke 94995b451bcSAdrian Lang/** 95095b451bcSAdrian Lang * Prints a single tab 95195b451bcSAdrian Lang * 95295b451bcSAdrian Lang * @author Kate Arzamastseva <pshns@ukr.net> 95395b451bcSAdrian Lang * @author Adrian Lang <mail@adrianlang.de> 95495b451bcSAdrian Lang * 95595b451bcSAdrian Lang * @param string $href - tab href 95695b451bcSAdrian Lang * @param string $caption - tab caption 95795b451bcSAdrian Lang * @param boolean $selected - is tab selected 9582162df3aSSatoshi Sahara * @return void 95995b451bcSAdrian Lang */ 96095b451bcSAdrian Lang 96195b451bcSAdrian Langfunction html_tab($href, $caption, $selected = false) { 96295b451bcSAdrian Lang $tab = '<li>'; 96395b451bcSAdrian Lang if ($selected) { 96495b451bcSAdrian Lang $tab .= '<strong>'; 96595b451bcSAdrian Lang } else { 96695b451bcSAdrian Lang $tab .= '<a href="' . hsc($href) . '">'; 96795b451bcSAdrian Lang } 96895b451bcSAdrian Lang $tab .= hsc($caption) 96995b451bcSAdrian Lang . '</' . ($selected ? 'strong' : 'a') . '>' 97094add303SAnika Henke . '</li>'.NL; 97195b451bcSAdrian Lang echo $tab; 97295b451bcSAdrian Lang} 97395b451bcSAdrian Lang 974cd2a4cfdSAnika Henke/** 975cd2a4cfdSAnika Henke * Display size change 976cd2a4cfdSAnika Henke * 977cd2a4cfdSAnika Henke * @param int $sizechange - size of change in Bytes 978e34d6962SSatoshi Sahara * @param Doku_Form $form - (optional) form to add elements to 979e34d6962SSatoshi Sahara * @return void|string 980cd2a4cfdSAnika Henke */ 981e34d6962SSatoshi Saharafunction html_sizechange($sizechange, $form = null) { 982cd2a4cfdSAnika Henke if (isset($sizechange)) { 983cd2a4cfdSAnika Henke $class = 'sizechange'; 984cd2a4cfdSAnika Henke $value = filesize_h(abs($sizechange)); 985cd2a4cfdSAnika Henke if ($sizechange > 0) { 986cd2a4cfdSAnika Henke $class .= ' positive'; 987cd2a4cfdSAnika Henke $value = '+' . $value; 988cd2a4cfdSAnika Henke } elseif ($sizechange < 0) { 989cd2a4cfdSAnika Henke $class .= ' negative'; 990cd2a4cfdSAnika Henke $value = '-' . $value; 9910b78a6edSAnika Henke } else { 9920b78a6edSAnika Henke $value = '±' . $value; 993cd2a4cfdSAnika Henke } 994e34d6962SSatoshi Sahara if (!isset($form)) { 995e34d6962SSatoshi Sahara return '<span class="'.$class.'">'.$value.'</span>'; 996b0f23f4eSSatoshi Sahara } else { // Doku_Form 997cd2a4cfdSAnika Henke $form->addElement(form_makeOpenTag('span', array('class' => $class))); 998cd2a4cfdSAnika Henke $form->addElement($value); 999cd2a4cfdSAnika Henke $form->addElement(form_makeCloseTag('span')); 1000cd2a4cfdSAnika Henke } 1001cd2a4cfdSAnika Henke } 1002b0f23f4eSSatoshi Sahara} 1003