]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/inline.pm
po: inject custom isselflink to fix selflink detection on translation pages
[git.ikiwiki.info.git] / IkiWiki / Plugin / inline.pm
index 001d2ed1a103618717b31d11a3553c0dab72cbf0..401852513d1fbe8d14fe4ebfbf38cadd781c410d 100644 (file)
@@ -209,10 +209,10 @@ sub preprocess_inline (@) {
                if ($params{show}) {
                        $num=$params{show};
                }
-               if ($params{feedshow} && $num < $params{feedshow}) {
+               if ($params{feedshow} && $num < $params{feedshow} && $num > 0) {
                        $num=$params{feedshow};
                }
-               if ($params{skip}) {
+               if ($params{skip} && $num) {
                        $num+=$params{skip};
                }
 
@@ -221,7 +221,7 @@ sub preprocess_inline (@) {
                        filter => sub { $_[0] eq $params{page} },
                        sort => exists $params{sort} ? $params{sort} : "age",
                        reverse => yesno($params{reverse}),
-                       num => $num,
+                       ($num ? (num => $num) : ()),
                );
        }
 
@@ -337,7 +337,7 @@ sub preprocess_inline (@) {
                foreach my $page (@list) {
                        my $file = $pagesources{$page};
                        my $type = pagetype($file);
-                       if (! $raw || ($raw && ! defined $type)) {
+                       if (! $raw) {
                                if ($needcontent) {
                                        # Get the content before populating the
                                        # template, since getting the content uses
@@ -357,9 +357,9 @@ sub preprocess_inline (@) {
                                        my $file = $pagesources{$page};
                                        my $type = pagetype($file);
                                        if ($config{discussion}) {
-                                               if ($page !~ /.*\/\Q$config{discussionpage}\E$/ &&
+                                               if ($page !~ /.*\/\Q$config{discussionpage}\E$/i &&
                                                    (length $config{cgiurl} ||
-                                                    exists $links{$page."/".$config{discussionpage}})) {
+                                                    exists $pagesources{$page."/".lc($config{discussionpage})})) {
                                                        $template->param(have_actions => 1);
                                                        $template->param(discussionlink =>
                                                                htmllink($page,
@@ -369,9 +369,12 @@ sub preprocess_inline (@) {
                                                                        forcesubpage => 1));
                                                }
                                        }
-                                       if (length $config{cgiurl} && defined $type) {
+                                       if (length $config{cgiurl} &&
+                                           defined $type &&
+                                           IkiWiki->can("cgi_editpage")) {
                                                $template->param(have_actions => 1);
                                                $template->param(editurl => cgiurl(do => "edit", page => $page));
+
                                        }
                                }
        
@@ -391,6 +394,10 @@ sub preprocess_inline (@) {
                                              filter($page, $params{destpage},
                                              readfile(srcfile($file)))));
                                }
+                               else {
+                                       $ret.="\n".
+                                             readfile(srcfile($file));
+                               }
                        }
                }
        }
@@ -419,6 +426,8 @@ sub preprocess_inline (@) {
                }
        }
        
+       clear_inline_content_cache();
+
        return $ret if $raw || $nested;
        push @inline, $ret;
        return "<div class=\"inline\" id=\"$#inline\"></div>\n\n";
@@ -433,25 +442,42 @@ sub pagetemplate_inline (@) {
                if exists $feedlinks{$page} && $template->query(name => "feedlinks");
 }
 
+{
+my %inline_content;
+my $cached_destpage="";
+
 sub get_inline_content ($$) {
        my $page=shift;
        my $destpage=shift;
        
+       if (exists $inline_content{$page} && $cached_destpage eq $destpage) {
+               return $inline_content{$page};
+       }
+
        my $file=$pagesources{$page};
        my $type=pagetype($file);
+       my $ret="";
        if (defined $type) {
                $nested++;
-               my $ret=htmlize($page, $destpage, $type,
+               $ret=htmlize($page, $destpage, $type,
                       linkify($page, $destpage,
                       preprocess($page, $destpage,
                       filter($page, $destpage,
                       readfile(srcfile($file))))));
                $nested--;
-               return $ret;
        }
-       else {
-               return "";
+       
+       if ($cached_destpage ne $destpage) {
+               clear_inline_content_cache();
+               $cached_destpage=$destpage;
        }
+       return $inline_content{$page}=$ret;
+}
+
+sub clear_inline_content_cache () {
+       %inline_content=();
+}
+
 }
 
 sub date_822 ($) {