X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/c1b698e4181002eeecdb5988ea767cae67a83a49..fafaa119cfec08699472af1b5896ccba94e76099:/IkiWiki/Render.pm diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 990b803de..0b7e00d9d 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -30,10 +30,9 @@ sub backlinks ($) { #{{{ calculate_backlinks(); my @links; - return unless $backlinks{$page}; foreach my $p (keys %{$backlinks{$page}}) { - my $href=abs2rel(htmlpage($p), dirname($page)); - + my $href=urlto($p, $page); + # Trim common dir prefixes from both pages. my $p_trimmed=$p; my $page_trimmed=$page; @@ -45,8 +44,11 @@ sub backlinks ($) { #{{{ push @links, { url => $href, page => pagetitle($p_trimmed) }; } + @links = sort { $a->{page} cmp $b->{page} } @links; - return sort { $a->{page} cmp $b->{page} } @links; + return \@links, [] if @links <= $config{numbacklinks} || ! $config{numbacklinks}; + return [@links[0..$config{numbacklinks}-1]], + [@links[$config{numbacklinks}..$#links]]; } #}}} sub parentlinks ($) { #{{{ @@ -55,18 +57,14 @@ sub parentlinks ($) { #{{{ my @ret; my $pagelink=""; my $path=""; - my $skip=1; + my $title=$config{wikiname}; + return if $page eq 'index'; # toplevel - foreach my $dir (reverse split("/", $page)) { - if (! $skip) { - $path.="../"; - unshift @ret, { url => $path.htmlpage($dir), page => pagetitle($dir) }; - } - else { - $skip=0; - } + foreach my $dir (split("/", $page)) { + push @ret, { url => urlto($path, $page), page => $title }; + $path.="/".$dir; + $title=pagetitle($dir); } - unshift @ret, { url => length $path ? $path : ".", page => $config{wikiname} }; return @ret; } #}}} @@ -107,6 +105,8 @@ sub genpage ($$$) { #{{{ $template->param(have_actions => 1); } + my ($backlinks, $more_backlinks)=backlinks($page); + $template->param( title => $page eq 'index' ? $config{wikiname} @@ -114,7 +114,8 @@ sub genpage ($$$) { #{{{ wikiname => $config{wikiname}, parentlinks => [parentlinks($page)], content => $content, - backlinks => [backlinks($page)], + backlinks => $backlinks, + more_backlinks => $more_backlinks, mtime => displaytime($mtime), baseurl => baseurl($page), ); @@ -192,7 +193,6 @@ sub render ($) { #{{{ writefile(htmlpage($page), $config{destdir}, genpage($page, $content, mtime($srcfile))); - $oldpagemtime{$page}=time; } else { my $srcfd=readfile($srcfile, 1, 1); @@ -218,7 +218,6 @@ sub render ($) { #{{{ } } }); - $oldpagemtime{$file}=time; } } #}}} @@ -294,7 +293,7 @@ sub refresh () { #{{{ foreach my $file (@files) { my $page=pagename($file); $pagesources{$page}=$file; - if (! $oldpagemtime{$page}) { + if (! $pagemtime{$page}) { push @add, $file; $pagecase{lc $page}=$page; if ($config{getctime} && -e "$config{srcdir}/$file") { @@ -306,13 +305,13 @@ sub refresh () { #{{{ } } my @del; - foreach my $page (keys %oldpagemtime) { + foreach my $page (keys %pagemtime) { if (! $exists{$page}) { debug(sprintf(gettext("removing old page %s"), $page)); push @del, $pagesources{$page}; $links{$page}=[]; $renderedfiles{$page}=[]; - $oldpagemtime{$page}=0; + $pagemtime{$page}=0; prune($config{destdir}."/".$_) foreach @{$oldrenderedfiles{$page}}; delete $pagesources{$page}; @@ -324,10 +323,12 @@ sub refresh () { #{{{ foreach my $file (@files) { my $page=pagename($file); - if (! exists $oldpagemtime{$page} || - mtime(srcfile($file)) > $oldpagemtime{$page} || + my $mtime=mtime(srcfile($file)); + if (! exists $pagemtime{$page} || + $mtime > $pagemtime{$page} || $forcerebuild{$page}) { debug(sprintf(gettext("scanning %s"), $file)); + $pagemtime{$page}=$mtime; push @changed, $file; scan($file); } @@ -364,7 +365,7 @@ sub refresh () { #{{{ foreach my $file (keys %rendered, @del) { next if $f eq $file; my $page=pagename($file); - if (pagespec_match($page, $depends{$p}, $p)) { + if (pagespec_match($page, $depends{$p}, location => $p)) { debug(sprintf(gettext("rendering %s, which depends on %s"), $f, $page)); render($f); $rendered{$f}=1;