X-Git-Url: https://sipb.mit.edu/gitweb.cgi/ikiwiki.git/blobdiff_plain/2dc010d66a4e29071100910a2d888895cb74bb11..190202dd4ee8c11dc60d5fa801ca19b4b7b0e3f6:/IkiWiki/Plugin/inline.pm diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm index ec1cf0970..3c029e001 100644 --- a/IkiWiki/Plugin/inline.pm +++ b/IkiWiki/Plugin/inline.pm @@ -4,7 +4,7 @@ package IkiWiki::Plugin::inline; use warnings; use strict; -use IkiWiki 1.00; +use IkiWiki 2.00; use URI; sub import { #{{{ @@ -67,6 +67,7 @@ sub preprocess_inline (@) { #{{{ my $atom=($config{atom} && exists $params{atom}) ? yesno($params{atom}) : $config{atom}; my $quick=exists $params{quick} ? yesno($params{quick}) : 0; my $feeds=exists $params{feeds} ? yesno($params{feeds}) : !$quick; + $feeds=0 if $params{preview}; if (! exists $params{show} && ! $archive) { $params{show}=10; } @@ -77,11 +78,17 @@ sub preprocess_inline (@) { #{{{ $desc = $config{wikiname}; } my $actions=yesno($params{actions}); + if (exists $params{template}) { + $params{template}=~s/[^-_a-zA-Z0-9]+//g; + } + else { + $params{template} = $archive ? "archivepage" : "inlinepage"; + } my @list; foreach my $page (keys %pagesources) { next if $page eq $params{page}; - if (pagespec_match($page, $params{pages})) { + if (pagespec_match($page, $params{pages}, location => $params{page})) { push @list, $page; } } @@ -89,6 +96,9 @@ sub preprocess_inline (@) { #{{{ if (exists $params{sort} && $params{sort} eq 'title') { @list=sort @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; } @@ -96,6 +106,10 @@ sub preprocess_inline (@) { #{{{ return sprintf(gettext("unknown sort type %s"), $params{sort}); } + if (yesno($params{reverse})) { + @list=reverse(@list); + } + if (exists $params{skip}) { @list=@list[$params{skip} .. scalar @list - 1]; } @@ -105,18 +119,32 @@ sub preprocess_inline (@) { #{{{ } add_depends($params{page}, $params{pages}); + # Explicitly add all currently displayed pages as dependencies, so + # that if they are removed or otherwise changed, the inline will be + # sure to be updated. + add_depends($params{page}, join(" or ", @list)); - my $rssurl=rsspage(basename($params{page})); - my $atomurl=atompage(basename($params{page})); + my $rssurl=basename(rsspage($params{page})); + my $atomurl=basename(atompage($params{page})); my $ret=""; - if (exists $params{rootpage} && $config{cgiurl}) { + if ($config{cgiurl} && (exists $params{rootpage} || + (exists $params{postform} && yesno($params{postform})))) { # Add a blog post form, with feed buttons. my $formtemplate=template("blogpost.tmpl", blind_cache => 1); $formtemplate->param(cgiurl => $config{cgiurl}); - $formtemplate->param(rootpage => $params{rootpage}); + $formtemplate->param(rootpage => + exists $params{rootpage} ? $params{rootpage} : $params{page}); $formtemplate->param(rssurl => $rssurl) if $feeds && $rss; $formtemplate->param(atomurl => $atomurl) if $feeds && $atom; + if (exists $params{postformtext}) { + $formtemplate->param(postformtext => + $params{postformtext}); + } + else { + $formtemplate->param(postformtext => + gettext("Add a new post titled:")); + } $ret.=$formtemplate->output; } elsif ($feeds) { @@ -127,10 +155,11 @@ sub preprocess_inline (@) { #{{{ $ret.=$linktemplate->output; } - my $template=template( - ($archive ? "inlinepagetitle.tmpl" : "inlinepage.tmpl"), - blind_cache => 1, - ) unless $raw; + my @params=IkiWiki::template_params($params{template}.".tmpl", blind_cache => 1); + if (! @params) { + return sprintf(gettext("nonexistant template %s"), $params{template}); + } + my $template=HTML::Template->new(@params) unless $raw; foreach my $page (@list) { my $file = $pagesources{$page}; @@ -143,13 +172,7 @@ sub preprocess_inline (@) { #{{{ my $content=get_inline_content($page, $params{destpage}); $template->param(content => $content); } - # Don't use htmllink because this way the - # title is separate and can be overridden by - # other plugins. - my $link=bestlink($params{page}, $page); - $link=htmlpage($link) if defined $type; - $link=abs2rel($link, dirname($params{destpage})); - $template->param(pageurl => $link); + $template->param(pageurl => urlto(bestlink($params{page}, $page), $params{destpage})); $template->param(title => pagetitle(basename($page))); $template->param(ctime => displaytime($pagectime{$page})); @@ -162,12 +185,17 @@ sub preprocess_inline (@) { #{{{ (length $config{cgiurl} || exists $links{$page."/".$discussionlink})) { $template->param(have_actions => 1); - $template->param(discussionlink => htmllink($page, $params{page}, gettext("Discussion"), 1, 1)); + $template->param(discussionlink => + htmllink($page, + $params{page}, + gettext("Discussion"), + noimageinline => 1, + forcesubpage => 1)); } } if (length $config{cgiurl} && defined $type) { $template->param(have_actions => 1); - $template->param(editurl => cgiurl(do => "edit", page => $page)); + $template->param(editurl => cgiurl(do => "edit", page => pagetitle($page, 1))); } } @@ -190,19 +218,30 @@ sub preprocess_inline (@) { #{{{ } } - if ($feeds && $rss) { - will_render($params{page}, rsspage($params{page})); - writefile(rsspage($params{page}), $config{destdir}, - genfeed("rss", $rssurl, $desc, $params{page}, @list)); - $toping{$params{page}}=1 unless $config{rebuild}; - $feedlinks{$params{destpage}}=qq{}; - } - if ($feeds && $atom) { - will_render($params{page}, atompage($params{page})); - writefile(atompage($params{page}), $config{destdir}, - genfeed("atom", $atomurl, $desc, $params{page}, @list)); - $toping{$params{page}}=1 unless $config{rebuild}; - $feedlinks{$params{destpage}}=qq{}; + if ($feeds) { + if (exists $params{feedshow} && @list > $params{feedshow}) { + @list=@list[0..$params{feedshow} - 1]; + } + if (exists $params{feedpages}) { + @list=grep { pagespec_match($_, $params{feedpages}, location => $params{page}) } @list; + } + + if ($rss) { + my $rssp=rsspage($params{page}); + will_render($params{page}, $rssp); + writefile($rssp, $config{destdir}, + genfeed("rss", $rssurl, $desc, $params{page}, @list)); + $toping{$params{page}}=1 unless $config{rebuild}; + $feedlinks{$params{destpage}}=qq{}; + } + if ($atom) { + my $atomp=atompage($params{page}); + will_render($params{page}, $atomp); + writefile($atomp, $config{destdir}, + genfeed("atom", $atomurl, $desc, $params{page}, @list)); + $toping{$params{page}}=1 unless $config{rebuild}; + $feedlinks{$params{destpage}}=qq{}; + } } return $ret; @@ -238,8 +277,6 @@ sub get_inline_content ($$) { #{{{ sub date_822 ($) { #{{{ my $time=shift; - eval q{use POSIX}; - error($@) if $@; my $lc_time=POSIX::setlocale(&POSIX::LC_TIME); POSIX::setlocale(&POSIX::LC_TIME, "C"); my $ret=POSIX::strftime("%a, %d %b %Y %H:%M:%S %z", localtime($time)); @@ -250,8 +287,6 @@ sub date_822 ($) { #{{{ sub date_3339 ($) { #{{{ my $time=shift; - eval q{use POSIX}; - error($@) if $@; my $lc_time=POSIX::setlocale(&POSIX::LC_TIME); POSIX::setlocale(&POSIX::LC_TIME, "C"); my $ret=POSIX::strftime("%Y-%m-%dT%H:%M:%SZ", localtime($time)); @@ -274,15 +309,11 @@ sub absolute_urls ($$) { #{{{ } #}}} sub rsspage ($) { #{{{ - my $page=shift; - - return $page.".rss"; + return targetpage(shift, "rss"); } #}}} sub atompage ($) { #{{{ - my $page=shift; - - return $page.".atom"; + return targetpage(shift, "atom"); } #}}} sub genfeed ($$$$@) { #{{{ @@ -292,14 +323,13 @@ sub genfeed ($$$$@) { #{{{ my $page=shift; my @pages=@_; - my $url=URI->new(encode_utf8($config{url}."/".htmlpage($page))); + my $url=URI->new(encode_utf8($config{url}."/".urlto($page,""))); my $itemtemplate=template($feedtype."item.tmpl", blind_cache => 1); my $content=""; my $lasttime = 0; foreach my $p (@pages) { - my $u=URI->new(encode_utf8($config{url}."/".htmlpage($p))); - + my $u=URI->new(encode_utf8($config{url}."/".urlto($p, ""))); my $pcontent = absolute_urls(get_inline_content($p, $page), $url); $itemtemplate->param( @@ -377,7 +407,6 @@ sub pingurl (@) { #{{{ defined(my $pid = fork) or error("Can't fork: $!"); return if $pid; chdir '/'; - eval q{use POSIX 'setsid'}; setsid() or error("Can't start a new session: $!"); open STDIN, '/dev/null'; open STDOUT, '>/dev/null'; @@ -388,7 +417,7 @@ sub pingurl (@) { #{{{ foreach my $page (keys %toping) { my $title=pagetitle(basename($page), 0); - my $url="$config{url}/".htmlpage($page); + my $url="$config{url}/".urlto($page, ""); foreach my $pingurl (@{$config{pingurl}}) { debug("Pinging $pingurl for $page"); eval {