FS#630: allow $conf['useheading'] to individually apply to content links and/or navigation links
$conf['useheading'] values are now: - 0 : off, use page name in link text - 'content' : use first heading text for links in wiki page content - 'navigation' : use first heading text for links in non-page content, e.g. breadcrumps, backlinks, search results, etc. - 1 : use first heading text in all links (for backwards compatibility, any other values are mapped to 0 or 1 by empty() function.) $conf['useheading'] value should now be checked using the useHeading($linktype) function, where linktype can be "content" or "navigation" darcs-hash:20081119140758-f07c6-6e26456d50dcecc949fada31b0d4e72877fde1cc.gz
This commit is contained in:
parent
078467f9a7
commit
fe9ec250a6
|
@ -288,7 +288,7 @@ function breadcrumbs(){
|
|||
|
||||
// page names
|
||||
$name = noNSorNS($ID);
|
||||
if ($conf['useheading']) {
|
||||
if (useHeading('navigation')) {
|
||||
// get page title
|
||||
$title = p_get_first_heading($ID,true);
|
||||
if ($title) {
|
||||
|
@ -1006,7 +1006,7 @@ function saveWikiText($id,$text,$summary,$minor=false){
|
|||
io_saveFile($conf['cachedir'].'/purgefile',time());
|
||||
|
||||
// if useheading is enabled, purge the cache of all linking pages
|
||||
if($conf['useheading']){
|
||||
if(useHeading('content')){
|
||||
require_once(DOKU_INC.'inc/fulltext.php');
|
||||
$pages = ft_backlinks($id);
|
||||
foreach ($pages as $page) {
|
||||
|
|
|
@ -205,5 +205,36 @@ function actionOK($action){
|
|||
return !in_array($action,$disabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* check if headings should be used as link text for the specified link type
|
||||
*
|
||||
* @author Chris Smith <chris@jalakai.co.uk>
|
||||
*
|
||||
* @param string $linktype 'content'|'navigation', content applies to links in wiki text
|
||||
* navigation applies to all other links
|
||||
* @returns boolean true if headings should be used for $linktype, false otherwise
|
||||
*/
|
||||
function useHeading($linktype) {
|
||||
static $useHeading = null;
|
||||
|
||||
if (is_null($useHeading)) {
|
||||
global $conf;
|
||||
|
||||
if (!empty($conf['useheading'])) {
|
||||
switch ($conf['useheading']) {
|
||||
case 'content' : $useHeading['content'] = true; break;
|
||||
case 'navigation' : $useHeading['navigation'] = true; break;
|
||||
default:
|
||||
$useHeading['content'] = true;
|
||||
$useHeading['navigation'] = true;
|
||||
}
|
||||
} else {
|
||||
$useHeading = array();
|
||||
}
|
||||
}
|
||||
|
||||
return (!empty($useHeading[$linktype]));
|
||||
}
|
||||
|
||||
|
||||
//Setup VIM: ex: et ts=2 enc=utf-8 :
|
||||
|
|
|
@ -23,7 +23,7 @@ function html_wikilink($id,$name=NULL,$search=''){
|
|||
$xhtml_renderer = new Doku_Renderer_xhtml();
|
||||
}
|
||||
|
||||
return $xhtml_renderer->internallink($id,$name,$search,true);
|
||||
return $xhtml_renderer->internallink($id,$name,$search,true,'navigation');
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -353,7 +353,7 @@ function html_search(){
|
|||
$num = 1;
|
||||
foreach($data as $id => $cnt){
|
||||
print '<div class="search_result">';
|
||||
print html_wikilink(':'.$id,$conf['useheading']?NULL:$id,$regex);
|
||||
print html_wikilink(':'.$id,useHeading('navigation')?NULL:$id,$regex);
|
||||
print ': <span class="search_cnt">'.$cnt.' '.$lang['hits'].'</span><br />';
|
||||
if($num < 15){ // create snippets for the first number of matches only #FIXME add to conf ?
|
||||
print '<div class="search_snippet">'.ft_snippet($id,$regex).'</div>';
|
||||
|
@ -628,7 +628,7 @@ function html_recent($first=0){
|
|||
)));
|
||||
$form->addElement(form_makeCloseTag('a'));
|
||||
|
||||
$form->addElement(html_wikilink(':'.$recent['id'],$conf['useheading']?NULL:$recent['id']));
|
||||
$form->addElement(html_wikilink(':'.$recent['id'],useHeading('navigation')?NULL:$recent['id']));
|
||||
|
||||
$form->addElement(form_makeOpenTag('span', array('class' => 'sum')));
|
||||
$form->addElement(' – '.htmlspecialchars($recent['sum']));
|
||||
|
@ -839,7 +839,7 @@ function html_backlinks(){
|
|||
print '<ul class="idx">';
|
||||
foreach($data as $blink){
|
||||
print '<li><div class="li">';
|
||||
print html_wikilink(':'.$blink,$conf['useheading']?NULL:$blink);
|
||||
print html_wikilink(':'.$blink,useHeading('navigation')?NULL:$blink);
|
||||
print '</div></li>';
|
||||
}
|
||||
print '</ul>';
|
||||
|
|
|
@ -427,7 +427,7 @@ class Doku_Renderer_metadata extends Doku_Renderer {
|
|||
|
||||
$isImage = false;
|
||||
if (is_null($title)){
|
||||
if ($conf['useheading'] && $id){
|
||||
if (useHeading('content') && $id){
|
||||
$heading = p_get_first_heading($id,false);
|
||||
if ($heading) return $heading;
|
||||
}
|
||||
|
|
|
@ -472,12 +472,12 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
/**
|
||||
* Render an internal Wiki Link
|
||||
*
|
||||
* $search and $returnonly are not for the renderer but are used
|
||||
* $search,$returnonly & $linktype are not for the renderer but are used
|
||||
* elsewhere - no need to implement them in other renderers
|
||||
*
|
||||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
function internallink($id, $name = NULL, $search=NULL,$returnonly=false) {
|
||||
function internallink($id, $name = NULL, $search=NULL,$returnonly=false,$linktype='content') {
|
||||
global $conf;
|
||||
global $ID;
|
||||
// default name is based on $id as given
|
||||
|
@ -485,7 +485,7 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
|
||||
// now first resolve and clean up the $id
|
||||
resolve_pageid(getNS($ID),$id,$exists);
|
||||
$name = $this->_getLinkTitle($name, $default, $isImage, $id);
|
||||
$name = $this->_getLinkTitle($name, $default, $isImage, $id, $linktype);
|
||||
if ( !$isImage ) {
|
||||
if ( $exists ) {
|
||||
$class='wikilink1';
|
||||
|
@ -1026,12 +1026,12 @@ class Doku_Renderer_xhtml extends Doku_Renderer {
|
|||
*
|
||||
* @author Harry Fuecks <hfuecks@gmail.com>
|
||||
*/
|
||||
function _getLinkTitle($title, $default, & $isImage, $id=NULL) {
|
||||
function _getLinkTitle($title, $default, & $isImage, $id=NULL, $linktype='content') {
|
||||
global $conf;
|
||||
|
||||
$isImage = false;
|
||||
if ( is_null($title) || trim($title)=='') {
|
||||
if ($conf['useheading'] && $id) {
|
||||
if (useHeading($linktype) && $id) {
|
||||
$heading = p_get_first_heading($id,true);
|
||||
if ($heading) {
|
||||
return $this->_xmlEntities($heading);
|
||||
|
|
|
@ -618,8 +618,7 @@ function & p_get_renderer($mode) {
|
|||
* @author Andreas Gohr <andi@splitbrain.org>
|
||||
*/
|
||||
function p_get_first_heading($id, $render=true){
|
||||
global $conf;
|
||||
return $conf['useheading'] ? p_get_metadata($id,'title',$render) : null;
|
||||
return p_get_metadata($id,'title',$render);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -860,7 +860,7 @@ function tpl_youarehere($sep=' » '){
|
|||
echo '<span class="bchead">'.$lang['youarehere'].': </span>';
|
||||
|
||||
// always print the startpage
|
||||
$title = p_get_first_heading($conf['start']);
|
||||
$title = useHeading('navigation') ? p_get_first_heading($conf['start']) : $conf['start'];
|
||||
if(!$title) $title = $conf['start'];
|
||||
tpl_link(wl($conf['start']),hsc($title),'title="'.$conf['start'].'"');
|
||||
|
||||
|
@ -875,7 +875,7 @@ function tpl_youarehere($sep=' » '){
|
|||
// output
|
||||
echo $sep;
|
||||
if($exists){
|
||||
$title = p_get_first_heading($page);
|
||||
$title = useHeading($page) ? p_get_first_heading($page) : $page;
|
||||
if(!$title) $title = $parts[$i];
|
||||
tpl_link(wl($page),hsc($title),'title="'.$page.'"');
|
||||
}else{
|
||||
|
@ -889,7 +889,7 @@ function tpl_youarehere($sep=' » '){
|
|||
if($page == $conf['start']) return;
|
||||
echo $sep;
|
||||
if(page_exists($page)){
|
||||
$title = p_get_first_heading($page);
|
||||
$title = useHeading($page) ? p_get_first_heading($page) : $page;
|
||||
if(!$title) $title = $parts[$i];
|
||||
tpl_link(wl($page),hsc($title),'title="'.$page.'"');
|
||||
}else{
|
||||
|
@ -989,7 +989,7 @@ function tpl_pagetitle($id=null, $ret=false){
|
|||
}
|
||||
|
||||
$name = $id;
|
||||
if ($conf['useheading']) {
|
||||
if (useHeading('navigation')) {
|
||||
$title = p_get_first_heading($id);
|
||||
if ($title) $name = $title;
|
||||
}
|
||||
|
|
|
@ -221,3 +221,10 @@ $lang['showuseras_o_loginname'] = 'Login name';
|
|||
$lang['showuseras_o_username'] = "User's full name";
|
||||
$lang['showuseras_o_email'] = "User's e-mail addresss (obfuscated according to mailguard setting)";
|
||||
$lang['showuseras_o_email_link'] = "User's e-mail addresss as a mailto: link";
|
||||
|
||||
/* useheading options */
|
||||
$lang['useheading_o_0'] = 'Never';
|
||||
$lang['useheading_o_navigation'] = 'Navigation Only';
|
||||
$lang['useheading_o_content'] = 'Wiki Content Only';
|
||||
$lang['useheading_o_1'] = 'Always';
|
||||
|
||||
|
|
|
@ -106,7 +106,7 @@ $meta['maxtoclevel'] = array('multichoice','_choices' => array(0,1,2,3,4,5));
|
|||
$meta['maxseclevel'] = array('multichoice','_choices' => array(0,1,2,3,4,5)); // 0 for no sec edit buttons
|
||||
$meta['camelcase'] = array('onoff');
|
||||
$meta['deaccent'] = array('multichoice','_choices' => array(0,1,2));
|
||||
$meta['useheading'] = array('onoff');
|
||||
$meta['useheading'] = array('multichoice','_choices' => array(0,'navigation','content',1));
|
||||
$meta['refcheck'] = array('onoff');
|
||||
$meta['refshow'] = array('numeric');
|
||||
|
||||
|
|
Loading…
Reference in New Issue