]> sipb.mit.edu Git - ikiwiki.git/commitdiff
added the tweakbestlink hook
authorintrigeri <intrigeri@boum.org>
Fri, 10 Oct 2008 12:30:31 +0000 (14:30 +0200)
committerintrigeri <intrigeri@boum.org>
Sat, 18 Oct 2008 13:49:08 +0000 (15:49 +0200)
Signed-off-by: intrigeri <intrigeri@boum.org>
IkiWiki.pm
doc/plugins/write.mdwn

index e75175a8dfb3cc6115a018b3bf63aa2674e82496..f2b50e77aa887a82b0e57377f2ee9cfca19713c7 100644 (file)
@@ -807,6 +807,7 @@ sub will_render ($$;$) { #{{{
 sub bestlink ($$) { #{{{
        my $page=shift;
        my $link=shift;
+       my $res=undef;
        
        my $cwd=$page;
        if ($link=~s/^\/+//) {
@@ -821,25 +822,35 @@ sub bestlink ($$) { #{{{
                $l.=$link;
 
                if (exists $links{$l}) {
-                       return $l;
+                       $res=$l;
                }
                elsif (exists $pagecase{lc $l}) {
-                       return $pagecase{lc $l};
+                       $res=$pagecase{lc $l};
                }
-       } while $cwd=~s{/?[^/]+$}{};
+       } while ($cwd=~s{/?[^/]+$}{} && ! defined $res);
 
-       if (length $config{userdir}) {
+       if (! defined $res && length $config{userdir}) {
                my $l = "$config{userdir}/".lc($link);
                if (exists $links{$l}) {
-                       return $l;
+                       $res=$l;
                }
                elsif (exists $pagecase{lc $l}) {
-                       return $pagecase{lc $l};
+                       $res=$pagecase{lc $l};
                }
        }
 
-       #print STDERR "warning: page $page, broken link: $link\n";
-       return "";
+       if (defined $res) {
+               run_hooks(tweakbestlink => sub {
+                       $res=shift->(
+                               page => $page,
+                               link => $res);
+               });
+               return $res;
+       }
+       else {
+               #print STDERR "warning: page $page, broken link: $link\n";
+               return "";
+       }
 } #}}}
 
 sub isinlinableimage ($) { #{{{
index 15f6c8a208e9b348bfe4a8461e23ce521a465055..e7656b2998bbb1fe19207f10e8d60b451a15938e 100644 (file)
@@ -447,6 +447,17 @@ ikiwiki; it is run just after ikiwiki has removed the trailing
 
 It should return the modified url.
 
+### tweakbestlink
+
+       hook(type => "tweakbestlink", id => "foo", call => \&tweakbestlink);
+
+This hook can be used to modify the page returned by `bestlink`. It is
+passed named parameters `page` and `link`. These are, respectively,
+the page where the link will appear and the link ikiwiki would choose
+as the best one, if no `tweakbestlink` hook was in effect.
+
+It should return the modified link.
+
 ## Plugin interface
 
 To import the ikiwiki plugin interface: