]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki/Plugin/trail.pm
Merge branch 'master' into fancypodcast
[git.ikiwiki.info.git] / IkiWiki / Plugin / trail.pm
index 86c94642aca4232d9f379d325b929a2877e43163..d5fb2b5d624c1b21cf0fa9163b5b223a090e917e 100644 (file)
@@ -62,12 +62,20 @@ sub getsetup () {
                },
 }
 
+# Cache of pages' old titles, so we can tell whether they changed
+my %old_trail_titles;
+
 sub needsbuild (@) {
        my $needsbuild=shift;
+
        foreach my $page (keys %pagestate) {
                if (exists $pagestate{$page}{trail}) {
                        if (exists $pagesources{$page} &&
                            grep { $_ eq $pagesources{$page} } @$needsbuild) {
+                               # Remember its title, so we can know whether
+                               # it changed.
+                               $old_trail_titles{$page} = title_of($page);
+
                                # Remove state, it will be re-added
                                # if the preprocessor directive is still
                                # there during the rebuild. {item} is the
@@ -78,6 +86,7 @@ sub needsbuild (@) {
                        }
                }
        }
+
        return $needsbuild;
 }
 
@@ -230,6 +239,12 @@ sub trails_differ {
                if (! exists $new->{$trail}) {
                        return 1;
                }
+
+               if (exists $old_trail_titles{$trail} &&
+                       title_of($trail) ne $old_trail_titles{$trail}) {
+                       return 1;
+               }
+
                my ($old_p, $old_n) = @{$old->{$trail}};
                my ($new_p, $new_n) = @{$new->{$trail}};
                $old_p = "" unless defined $old_p;
@@ -239,9 +254,20 @@ sub trails_differ {
                if ($old_p ne $new_p) {
                        return 1;
                }
+
+               if (exists $old_trail_titles{$old_p} &&
+                       title_of($old_p) ne $old_trail_titles{$old_p}) {
+                       return 1;
+               }
+
                if ($old_n ne $new_n) {
                        return 1;
                }
+
+               if (exists $old_trail_titles{$old_n} &&
+                       title_of($old_n) ne $old_trail_titles{$old_n}) {
+                       return 1;
+               }
        }
 
        foreach my $trail (keys %$new) {
@@ -318,8 +344,6 @@ sub prerender {
                        $prev = $members->[$i - 1] if $i > 0;
                        my $next = $members->[$i + 1];
 
-                       add_depends($member, $trail, deptype("presence"));
-
                        $member_to_trails{$member}{$trail} = [$prev, $next];
                }
 
@@ -387,6 +411,8 @@ sub pagetemplate (@) {
        my $page = $params{page};
        my $template = $params{template};
 
+       return unless length $page;
+
        if ($template->query(name => 'trails') && ! $recursive) {
                prerender();
 
@@ -412,13 +438,11 @@ sub pagetemplate (@) {
                        my ($prevurl, $nexturl, $prevtitle, $nexttitle);
 
                        if (defined $prev) {
-                               add_depends($params{destpage}, $prev, deptype("presence"));
                                $prevurl = urlto($prev, $page);
                                $prevtitle = title_of($prev);
                        }
 
                        if (defined $next) {
-                               add_depends($params{destpage}, $next, deptype("presence"));
                                $nexturl = urlto($next, $page);
                                $nexttitle = title_of($next);
                        }