From d70ba7cff3fc6cc78ea2f8eb0713212478ab6ba7 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Sat, 12 Nov 2011 21:37:28 +0000 Subject: [PATCH 1/1] Split trail directive into trailitems, trailoptions --- IkiWiki/Plugin/trail.pm | 86 ++++++++++++++++++----------------------- t/trail.t | 15 +++---- 2 files changed, 46 insertions(+), 55 deletions(-) diff --git a/IkiWiki/Plugin/trail.pm b/IkiWiki/Plugin/trail.pm index 098b98607..5ee152155 100644 --- a/IkiWiki/Plugin/trail.pm +++ b/IkiWiki/Plugin/trail.pm @@ -12,9 +12,10 @@ use IkiWiki 3.00; sub import { hook(type => "getsetup", id => "trail", call => \&getsetup); hook(type => "needsbuild", id => "trail", call => \&needsbuild); - hook(type => "preprocess", id => "trail", call => \&preprocess_trail, scan => 1); + hook(type => "preprocess", id => "trailoptions", call => \&preprocess_trailoptions, scan => 1); hook(type => "preprocess", id => "trailinline", call => \&preprocess_trailinline, scan => 1); hook(type => "preprocess", id => "trailitem", call => \&preprocess_trailitem, scan => 1); + hook(type => "preprocess", id => "trailitems", call => \&preprocess_trailitems, scan => 1); hook(type => "preprocess", id => "traillink", call => \&preprocess_traillink, scan => 1); hook(type => "pagetemplate", id => "trail", call => \&pagetemplate); } @@ -103,23 +104,9 @@ sub needsbuild (@) { my $scanned = 0; -sub preprocess_trail (@) { +sub preprocess_trailoptions (@) { my %params = @_; - # avoid collecting everything in the preprocess stage if we already - # did in the scan stage - if (defined wantarray) { - return "" if $scanned; - } - else { - $scanned = 1; - } - - # trail members from a pagespec ought to be in some sort of order, - # and path is a nice obvious default - $params{sortthese} = 'path' unless exists $params{sortthese}; - $params{reversethese} = 'no' unless exists $params{reversethese}; - if (exists $params{circular}) { $pagestate{$params{page}}{trail}{circular} = IkiWiki::yesno($params{circular}); @@ -133,47 +120,19 @@ sub preprocess_trail (@) { $pagestate{$params{page}}{trail}{reverse} = $params{reverse}; } - if (exists $params{pages}) { - push @{$pagestate{$params{page}}{trail}{contents}}, - ["pagespec" => $params{pages}, $params{sortthese}, - IkiWiki::yesno($params{reversethese})]; - } - - if (exists $params{pagenames}) { - my @list = map { [link => $_] } split ' ', $params{pagenames}; - push @{$pagestate{$params{page}}{trail}{contents}}, @list; - } - return ""; } sub preprocess_trailinline (@) { my %params = @_; - if (exists $params{sort}) { - $params{sortthese} = $params{sort}; - delete $params{sort}; - } - else { + if (! exists $params{sort}) { # sort in the same order as [[plugins/inline]]'s default - $params{sortthese} = 'age'; - } - - if (exists $params{reverse}) { - $params{reversethese} = $params{reverse}; - delete $params{reverse}; - } - - if (exists $params{trailsort}) { - $params{sort} = $params{trailsort}; - } - - if (exists $params{trailreverse}) { - $params{reverse} = $params{trailreverse}; + $params{sort} = 'age'; } if (defined wantarray) { - scalar preprocess_trail(%params); + scalar preprocess_trailitems(%params); if (IkiWiki->can("preprocess_inline")) { return IkiWiki::preprocess_inline(@_); @@ -183,7 +142,7 @@ sub preprocess_trailinline (@) { } } else { - preprocess_trail(%params); + preprocess_trailitems(%params); } } @@ -211,6 +170,37 @@ sub preprocess_trailitem (@) { return ""; } +sub preprocess_trailitems (@) { + my %params = @_; + + # avoid collecting everything in the preprocess stage if we already + # did in the scan stage + if (defined wantarray) { + return "" if $scanned; + } + else { + $scanned = 1; + } + + # trail members from a pagespec ought to be in some sort of order, + # and path is a nice obvious default + $params{sort} = 'path' unless exists $params{sort}; + $params{reverse} = 'no' unless exists $params{reverse}; + + if (exists $params{pages}) { + push @{$pagestate{$params{page}}{trail}{contents}}, + ["pagespec" => $params{pages}, $params{sort}, + IkiWiki::yesno($params{reverse})]; + } + + if (exists $params{pagenames}) { + my @list = map { [link => $_] } split ' ', $params{pagenames}; + push @{$pagestate{$params{page}}{trail}{contents}}, @list; + } + + return ""; +} + sub preprocess_traillink (@) { my $link = shift; shift; diff --git a/t/trail.t b/t/trail.t index 28aa1c09d..0cf50ddc1 100755 --- a/t/trail.t +++ b/t/trail.t @@ -35,16 +35,16 @@ writefile("mushroom.mdwn", "t/tmp/in", "content of mushroom"); writefile("snake.mdwn", "t/tmp/in", "content of snake"); writefile("ratty.mdwn", "t/tmp/in", "content of ratty"); writefile("mr_toad.mdwn", "t/tmp/in", "content of mr toad"); -writefile("add.mdwn", "t/tmp/in", '[[!trail pagenames="add/a add/b add/c add/d add/e"]]'); +writefile("add.mdwn", "t/tmp/in", '[[!trailitems pagenames="add/a add/b add/c add/d add/e"]]'); writefile("add/b.mdwn", "t/tmp/in", "b"); writefile("add/d.mdwn", "t/tmp/in", "d"); -writefile("del.mdwn", "t/tmp/in", '[[!trail pages="del/*" sort=title]]'); +writefile("del.mdwn", "t/tmp/in", '[[!trailitems pages="del/*" sort=title]]'); writefile("del/a.mdwn", "t/tmp/in", "a"); writefile("del/b.mdwn", "t/tmp/in", "b"); writefile("del/c.mdwn", "t/tmp/in", "c"); writefile("del/d.mdwn", "t/tmp/in", "d"); writefile("del/e.mdwn", "t/tmp/in", "e"); -writefile("self_referential.mdwn", "t/tmp/in", '[[!trail pagenames="self_referential" circular=yes]]'); +writefile("self_referential.mdwn", "t/tmp/in", '[[!trailitems pagenames="self_referential" circular=yes]]'); writefile("sorting/linked.mdwn", "t/tmp/in", "linked"); writefile("sorting/a/b.mdwn", "t/tmp/in", "a/b"); writefile("sorting/a/c.mdwn", "t/tmp/in", "a/c"); @@ -64,8 +64,8 @@ writefile("sorting/linked2.mdwn", "t/tmp/in", "linked2"); # for trail. We change it later. writefile("sorting.mdwn", "t/tmp/in", '[[!traillink linked]] ' . - '[[!trail pages="sorting/z/a or sorting/a/b or sorting/a/c"]] ' . - '[[!trail pagenames="beginning middle end"]] ' . + '[[!trailitems pages="sorting/z/a or sorting/a/b or sorting/a/c"]] ' . + '[[!trailitems pagenames="beginning middle end"]] ' . '[[!trailinline pages="sorting/old or sorting/ancient or sorting/new"]] ' . '[[!traillink linked2]]'); @@ -83,7 +83,8 @@ EOF ); writefile("wind_in_the_willows.mdwn", "t/tmp/in", <