my %knownfeeds;
my %page_numfeeds;
my @inline;
+my $nested=0;
sub import { #{{{
hook(type => "getopt", id => "inline", call => \&getopt);
my %params=@_;
if (! exists $params{pages}) {
- return "";
+ return "[[inline ".gettext("missing pages parameter")."]]";
}
my $raw=yesno($params{raw});
my $archive=yesno($params{archive});
if (! exists $params{show} && ! $archive) {
$params{show}=10;
}
+ if (! exists $params{feedshow} && exists $params{show}) {
+ $params{feedshow}=$params{show};
+ }
my $desc;
if (exists $params{description}) {
$desc = $params{description}
- } else {
+ }
+ else {
$desc = $config{wikiname};
}
my $actions=yesno($params{actions});
@list=@list[$params{skip} .. scalar @list - 1];
}
+ my @feedlist;
+ if ($feeds) {
+ if (exists $params{feedshow} &&
+ $params{feedshow} && @list > $params{feedshow}) {
+ @feedlist=@list[0..$params{feedshow} - 1];
+ }
+ else {
+ @feedlist=@list;
+ }
+ }
+
if ($params{show} && @list > $params{show}) {
@list=@list[0..$params{show} - 1];
}
# 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));
+ add_depends($params{page}, join(" or ", $#list >= $#feedlist ? @list : @feedlist));
my $feednum="";
}
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;
+ @feedlist=grep { pagespec_match($_, $params{feedpages}, location => $params{page}) } @feedlist;
}
if ($rss) {
if (! $params{preview}) {
writefile($rssp, $config{destdir},
genfeed("rss",
- $config{url}."/".rsspage($params{destpage}).$feednum, $desc, $params{destpage}, @list));
+ $config{url}."/".rsspage($params{destpage}).$feednum, $desc, $params{destpage}, @feedlist));
$toping{$params{destpage}}=1 unless $config{rebuild};
$feedlinks{$params{destpage}}=qq{<link rel="alternate" type="application/rss+xml" title="RSS" href="$rssurl" />};
}
will_render($params{destpage}, $atomp);
if (! $params{preview}) {
writefile($atomp, $config{destdir},
- genfeed("atom", $config{url}."/".atompage($params{destpage}).$feednum, $desc, $params{destpage}, @list));
+ genfeed("atom", $config{url}."/".atompage($params{destpage}).$feednum, $desc, $params{destpage}, @feedlist));
$toping{$params{destpage}}=1 unless $config{rebuild};
$feedlinks{$params{destpage}}=qq{<link rel="alternate" type="application/atom+xml" title="Atom" href="$atomurl" />};
}
}
}
- return $ret if $raw;
+ return $ret if $raw || $nested;
push @inline, $ret;
return "<div class=\"inline\" id=\"$#inline\"></div>\n\n";
} #}}}
my $file=$pagesources{$page};
my $type=pagetype($file);
if (defined $type) {
- return htmlize($page, $type,
+ $nested++;
+ my $ret=htmlize($page, $destpage, $type,
linkify($page, $destpage,
preprocess($page, $destpage,
filter($page, $destpage,
readfile(srcfile($file))))));
+ $nested--;
+ return $ret;
}
else {
return "";
my $url=$baseurl;
$url=~s/[^\/]+$//;
-
+
+ # what is the non path part of the url?
+ my $top_uri = URI->new($url);
+ $top_uri->path_query(""); # reset the path
+ my $urltop = $top_uri->as_string;
+
$content=~s/(<a(?:\s+(?:class|id)\s*="?\w+"?)?)\s+href=\s*"(#[^"]+)"/$1 href="$baseurl$2"/mig;
- $content=~s/(<a(?:\s+(?:class|id)\s*="?\w+"?)?)\s+href=\s*"(?!\w+:)([^"]+)"/$1 href="$url$2"/mig;
- $content=~s/(<img(?:\s+(?:class|id|width|height)\s*="?\w+"?)*)\s+src=\s*"(?!\w+:)([^"]+)"/$1 src="$url$2"/mig;
+ # relative to another wiki page
+ $content=~s/(<a(?:\s+(?:class|id)\s*="?\w+"?)?)\s+href=\s*"(?!\w+:)([^\/][^"]*)"/$1 href="$url$2"/mig;
+ $content=~s/(<img(?:\s+(?:class|id|width|height)\s*="?\w+"?)*)\s+src=\s*"(?!\w+:)([^\/][^"]*)"/$1 src="$url$2"/mig;
+ # relative to the top of the site
+ $content=~s/(<a(?:\s+(?:class|id)\s*="?\w+"?)?)\s+href=\s*"(?!\w+:)(\/[^"]*)"/$1 href="$urltop$2"/mig;
+ $content=~s/(<img(?:\s+(?:class|id|width|height)\s*="?\w+"?)*)\s+src=\s*"(?!\w+:)(\/[^"]*)"/$1 src="$urltop$2"/mig;
return $content;
} #}}}
$itemtemplate->param(content => $pcontent);
}
else {
- my ($a, $b, $c, $d, $e, $f, $g, $size) = stat(srcfile($file));
+ my $size=(srcfile_stat($file))[8];
my $mime="unknown";
eval q{use File::MimeInfo};
if (! $@) {
defined(my $pid = fork) or error("Can't fork: $!");
return if $pid;
chdir '/';
- setsid() or error("Can't start a new session: $!");
+ POSIX::setsid() or error("Can't start a new session: $!");
open STDIN, '/dev/null';
open STDOUT, '>/dev/null';
open STDERR, '>&STDOUT' or error("Can't dup stdout: $!");