]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blob - doc/bugs/Problem_with_toc.pm_plug-in.mdwn
rename hook: instead of modifying the passed-by-name array, return a copy
[git.ikiwiki.info.git] / doc / bugs / Problem_with_toc.pm_plug-in.mdwn
1 The toc.pm plug-in currently renders empty 'a' tag elements. This seems to confuse at least Firefox, possibly others. The result is that the following text is rendered as an anchor (visible if you style 'a' elements in a different color).
3 Here is a patch for toc.pm for producing non-empty 'a' elements.
5 > Thanks for the patch, but I already fixed this in 2.4 using a different
6 > approach. I think your patch is slightly broken, an anchor tag isn't
7 > really meant to enclose all the html it anchors to, but just be stuck in
8 > front of it. --[[Joey]] [[!tag done]]
10     --- IkiWiki/Plugin/toc.pm.orig      Thu Jun  7 11:53:53 2007
11     +++ IkiWiki/Plugin/toc.pm   Thu Jun  7 13:00:00 2007
12     @@ -47,7 +47,7 @@ sub format (@) {
13                 if ($tagname =~ /^h(\d+)$/i) {
14                         my $level=$1;
15                         my $anchor="index".++$anchors{$level}."h$level";
16     -                   $page.="$text<a name=\"$anchor\" />";
17     +                   $page.="$text<a name=\"$anchor\">";
18         
19                         # Take the first header level seen as the topmost level,
20                         # even if there are higher levels seen later on.
21     @@ -90,6 +90,16 @@ sub format (@) {
22                                         "</a>\n";
23                                 $p->handler(text => undef);
24                         }, "dtext");
25     +           }
26     +           else {
27     +                   $page.=$text;
28     +           }
29     +   }, "tagname, text");
30     +   $p->handler(end => sub {
31     +           my $tagname=shift;
32     +           my $text=shift;
33     +           if ($tagname =~ /^h(\d+)$/i) {
34     +                   $page.="</a>$text";
35                 }
36                 else {
37                         $page.=$text;