diff options
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r-- | IkiWiki/Plugin/img.pm | 5 | ||||
-rw-r--r-- | IkiWiki/Plugin/inline.pm | 57 | ||||
-rw-r--r-- | IkiWiki/Plugin/map.pm | 12 | ||||
-rw-r--r-- | IkiWiki/Plugin/pagestats.pm | 13 |
4 files changed, 64 insertions, 23 deletions
diff --git a/IkiWiki/Plugin/img.pm b/IkiWiki/Plugin/img.pm index 44d67bd83..68b001671 100644 --- a/IkiWiki/Plugin/img.pm +++ b/IkiWiki/Plugin/img.pm @@ -44,6 +44,7 @@ sub preprocess (@) { } add_link($params{page}, $image); + # optimisation: detect scan mode, and avoid generating the image if (! defined wantarray) { return; @@ -65,6 +66,8 @@ sub preprocess (@) { my $r; if ($params{size} ne 'full') { + add_depends($params{page}, $image); + my ($w, $h) = ($params{size} =~ /^(\d*)x(\d*)$/); error sprintf(gettext('wrong size format "%s" (should be WxH)'), $params{size}) unless (defined $w && defined $h && @@ -102,8 +105,6 @@ sub preprocess (@) { $imglink = $file; } - add_depends($imglink, $params{page}); - my ($fileurl, $imgurl); if (! $params{preview}) { $fileurl=urlto($file, $params{destpage}); diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index 9d5ebc34d..e7d6f250e 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -151,7 +151,7 @@ my %feedlinks; sub preprocess_inline (@) { my %params=@_; - if (! exists $params{pages}) { + if (! exists $params{pages} && ! exists $params{pagenames}) { error gettext("missing pages parameter"); } my $raw=yesno($params{raw}); @@ -183,28 +183,47 @@ sub preprocess_inline (@) { $params{template} = $archive ? "archivepage" : "inlinepage"; } - my @list=pagespec_match_list( - [ grep { $_ ne $params{page} } keys %pagesources ], - $params{pages}, location => $params{page}); + my @list; - if (exists $params{sort} && $params{sort} eq 'title') { - @list=sort { pagetitle(basename($a)) cmp pagetitle(basename($b)) } @list; - } - elsif (exists $params{sort} && $params{sort} eq 'title_natural') { - eval q{use Sort::Naturally}; - if ($@) { - error(gettext("Sort::Naturally needed for title_natural sort")); + if (exists $params{pagenames}) { + + foreach my $p (qw(sort pages)) { + if (exists $params{$p}) { + error sprintf(gettext("the %s and %s parameters cannot be used together"), + "pagenames", $p); + } } - @list=sort { Sort::Naturally::ncmp(pagetitle(basename($a)), pagetitle(basename($b))) } @list; - } - elsif (exists $params{sort} && $params{sort} eq 'mtime') { - @list=sort { $pagemtime{$b} <=> $pagemtime{$a} } @list; - } - elsif (! exists $params{sort} || $params{sort} eq 'age') { - @list=sort { $pagectime{$b} <=> $pagectime{$a} } @list; + + @list = split ' ', $params{pagenames}; + my $_; + @list = map { bestlink($params{page}, $_) } @list; + + $params{pages} = join(" or ", @list); } else { - error sprintf(gettext("unknown sort type %s"), $params{sort}); + @list = pagespec_match_list( + [ grep { $_ ne $params{page} } keys %pagesources ], + $params{pages}, location => $params{page}); + + if (exists $params{sort} && $params{sort} eq 'title') { + @list=sort { pagetitle(basename($a)) cmp pagetitle(basename($b)) } @list; + } + elsif (exists $params{sort} && $params{sort} eq 'title_natural') { + eval q{use Sort::Naturally}; + if ($@) { + error(gettext("Sort::Naturally needed for title_natural sort")); + } + @list=sort { Sort::Naturally::ncmp(pagetitle(basename($a)), pagetitle(basename($b))) } @list; + } + elsif (exists $params{sort} && $params{sort} eq 'mtime') { + @list=sort { $pagemtime{$b} <=> $pagemtime{$a} } @list; + } + elsif (! exists $params{sort} || $params{sort} eq 'age') { + @list=sort { $pagectime{$b} <=> $pagectime{$a} } @list; + } + else { + error sprintf(gettext("unknown sort type %s"), $params{sort}); + } } if (yesno($params{reverse})) { diff --git a/IkiWiki/Plugin/map.pm b/IkiWiki/Plugin/map.pm index 120451b5d..826dbbd66 100644 --- a/IkiWiki/Plugin/map.pm +++ b/IkiWiki/Plugin/map.pm @@ -80,7 +80,17 @@ sub preprocess (@) { my $indent=0; my $openli=0; my $addparent=""; - my $map = "<div class='map'>\n<ul>\n"; + my $map = "<div class='map'>\n"; + + # Return empty div if %mapitems is empty + if (!scalar(keys %mapitems)) { + $map .= "</div>\n"; + return $map; + } + else { # continue populating $map + $map .= "<ul>\n"; + } + foreach my $item (sort keys %mapitems) { my @linktext = (length $mapitems{$item} ? (linktext => $mapitems{$item}) : ()); $item=~s/^\Q$common_prefix\E\/// diff --git a/IkiWiki/Plugin/pagestats.pm b/IkiWiki/Plugin/pagestats.pm index 8ab5d3666..874ead7e6 100644 --- a/IkiWiki/Plugin/pagestats.pm +++ b/IkiWiki/Plugin/pagestats.pm @@ -38,13 +38,22 @@ sub preprocess (@) { # Needs to update whenever a page is added or removed, so # register a dependency. add_depends($params{page}, $params{pages}); + add_depends($params{page}, $params{among}) if exists $params{among}; my %counts; my $max = 0; foreach my $page (pagespec_match_list([keys %links], $params{pages}, location => $params{page})) { use IkiWiki::Render; - $counts{$page} = scalar(IkiWiki::backlinks($page)); + + my @backlinks = IkiWiki::backlink_pages($page); + + if (exists $params{among}) { + @backlinks = pagespec_match_list(\@backlinks, + $params{among}, location => $params{page}); + } + + $counts{$page} = scalar(@backlinks); $max = $counts{$page} if $counts{$page} > $max; } @@ -63,6 +72,8 @@ sub preprocess (@) { my $res = "<div class='pagecloud'>\n"; foreach my $page (sort keys %counts) { + next unless $counts{$page} > 0; + my $class = $classes[$counts{$page} * scalar(@classes) / ($max + 1)]; $res .= "<span class=\"$class\">". htmllink($params{page}, $params{destpage}, $page). |