Photos
Blog
Projects
vanrenterghem.biz
projects
/
git.ikiwiki.info.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
mention style.css changes
[git.ikiwiki.info.git]
/
IkiWiki
/
Plugin
/
inline.pm
diff --git
a/IkiWiki/Plugin/inline.pm
b/IkiWiki/Plugin/inline.pm
index 0fe0bd2e108a444b6b85c2ded93840f10e4fd2fc..715a3d6523cfcee4e57c125425d19cfdab110298 100644
(file)
--- a/
IkiWiki/Plugin/inline.pm
+++ b/
IkiWiki/Plugin/inline.pm
@@
-49,6
+49,7
@@
sub getsetup () {
plugin => {
safe => 1,
rebuild => undef,
plugin => {
safe => 1,
rebuild => undef,
+ section => "core",
},
rss => {
type => "boolean",
},
rss => {
type => "boolean",
@@
-159,7
+160,7
@@
sub preprocess_inline (@) {
my $rss=(($config{rss} || $config{allowrss}) && exists $params{rss}) ? yesno($params{rss}) : $config{rss};
my $atom=(($config{atom} || $config{allowatom}) && exists $params{atom}) ? yesno($params{atom}) : $config{atom};
my $quick=exists $params{quick} ? yesno($params{quick}) : 0;
my $rss=(($config{rss} || $config{allowrss}) && exists $params{rss}) ? yesno($params{rss}) : $config{rss};
my $atom=(($config{atom} || $config{allowatom}) && 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
;
+ my $feeds=
! $nested && (exists $params{feeds} ? yesno($params{feeds}) : !$quick && ! $raw)
;
my $emptyfeeds=exists $params{emptyfeeds} ? yesno($params{emptyfeeds}) : 1;
my $feedonly=yesno($params{feedonly});
if (! exists $params{show} && ! $archive) {
my $emptyfeeds=exists $params{emptyfeeds} ? yesno($params{emptyfeeds}) : 1;
my $feedonly=yesno($params{feedonly});
if (! exists $params{show} && ! $archive) {
@@
-209,10
+210,10
@@
sub preprocess_inline (@) {
if ($params{show}) {
$num=$params{show};
}
if ($params{show}) {
$num=$params{show};
}
- if ($params{feedshow} && $num < $params{feedshow}) {
+ if ($params{feedshow} && $num < $params{feedshow}
&& $num > 0
) {
$num=$params{feedshow};
}
$num=$params{feedshow};
}
- if ($params{skip}) {
+ if ($params{skip}
&& $num
) {
$num+=$params{skip};
}
$num+=$params{skip};
}
@@
-221,7
+222,7
@@
sub preprocess_inline (@) {
filter => sub { $_[0] eq $params{page} },
sort => exists $params{sort} ? $params{sort} : "age",
reverse => yesno($params{reverse}),
filter => sub { $_[0] eq $params{page} },
sort => exists $params{sort} ? $params{sort} : "age",
reverse => yesno($params{reverse}),
-
num => $num
,
+
($num ? (num => $num) : ())
,
);
}
);
}
@@
-298,7
+299,7
@@
sub preprocess_inline (@) {
(exists $params{postform} && yesno($params{postform}))) &&
IkiWiki->can("cgi_editpage")) {
# Add a blog post form, with feed buttons.
(exists $params{postform} && yesno($params{postform}))) &&
IkiWiki->can("cgi_editpage")) {
# Add a blog post form, with feed buttons.
- my $formtemplate=template
("blogpost.tmpl"
, blind_cache => 1);
+ my $formtemplate=template
_depends("blogpost.tmpl", $params{page}
, blind_cache => 1);
$formtemplate->param(cgiurl => $config{cgiurl});
$formtemplate->param(rootpage => rootpage(%params));
$formtemplate->param(rssurl => $rssurl) if $feeds && $rss;
$formtemplate->param(cgiurl => $config{cgiurl});
$formtemplate->param(rootpage => rootpage(%params));
$formtemplate->param(rssurl => $rssurl) if $feeds && $rss;
@@
-319,25
+320,35
@@
sub preprocess_inline (@) {
}
elsif ($feeds && !$params{preview} && ($emptyfeeds || @feedlist)) {
# Add feed buttons.
}
elsif ($feeds && !$params{preview} && ($emptyfeeds || @feedlist)) {
# Add feed buttons.
- my $linktemplate=template
("feedlink.tmpl"
, blind_cache => 1);
+ my $linktemplate=template
_depends("feedlink.tmpl", $params{page}
, blind_cache => 1);
$linktemplate->param(rssurl => $rssurl) if $rss;
$linktemplate->param(atomurl => $atomurl) if $atom;
$ret.=$linktemplate->output;
}
if (! $feedonly) {
$linktemplate->param(rssurl => $rssurl) if $rss;
$linktemplate->param(atomurl => $atomurl) if $atom;
$ret.=$linktemplate->output;
}
if (! $feedonly) {
- require HTML::Template;
- my @params=IkiWiki::template_params($params{template}.".tmpl", blind_cache => 1);
- if (! @params) {
- error sprintf(gettext("nonexistant template %s"), $params{template});
+ my $template;
+ if (! $raw) {
+ # cannot use wiki pages as templates; template not sanitized due to
+ # format hook hack
+ eval {
+ $template=template_depends($params{template}.".tmpl", $params{page},
+ blind_cache => 1);
+ };
+ if ($@) {
+ error gettext("failed to process template:")." $@";
+ }
+ if (! $template) {
+ error sprintf(gettext("template %s not found"), $params{template}.".tmpl");
+ }
}
}
- my $
template=HTML::Template->new(@params) unless $raw
;
+ my $
needcontent=$raw || (!($archive && $quick) && $template->query(name => 'content'))
;
foreach my $page (@list) {
my $file = $pagesources{$page};
my $type = pagetype($file);
foreach my $page (@list) {
my $file = $pagesources{$page};
my $type = pagetype($file);
- if (! $raw
|| ($raw && ! defined $type)
) {
-
unless ($archive && $quick
) {
+ if (! $raw) {
+
if ($needcontent
) {
# Get the content before populating the
# template, since getting the content uses
# the same template if inlines are nested.
# Get the content before populating the
# template, since getting the content uses
# the same template if inlines are nested.
@@
-347,18
+358,19
@@
sub preprocess_inline (@) {
$template->param(pageurl => urlto($page, $params{destpage}));
$template->param(inlinepage => $page);
$template->param(title => pagetitle(basename($page)));
$template->param(pageurl => urlto($page, $params{destpage}));
$template->param(inlinepage => $page);
$template->param(title => pagetitle(basename($page)));
- $template->param(ctime => displaytime($pagectime{$page}, $params{timeformat}));
+ $template->param(ctime => displaytime($pagectime{$page}, $params{timeformat}
, 1
));
$template->param(mtime => displaytime($pagemtime{$page}, $params{timeformat}));
$template->param(first => 1) if $page eq $list[0];
$template->param(last => 1) if $page eq $list[$#list];
$template->param(mtime => displaytime($pagemtime{$page}, $params{timeformat}));
$template->param(first => 1) if $page eq $list[0];
$template->param(last => 1) if $page eq $list[$#list];
+ $template->param(html5 => $config{html5});
if ($actions) {
my $file = $pagesources{$page};
my $type = pagetype($file);
if ($config{discussion}) {
if ($actions) {
my $file = $pagesources{$page};
my $type = pagetype($file);
if ($config{discussion}) {
- if ($page !~ /.*\/\Q$config{discussionpage}\E$/ &&
+ if ($page !~ /.*\/\Q$config{discussionpage}\E$/
i
&&
(length $config{cgiurl} ||
(length $config{cgiurl} ||
- exists $
links{$page."/".$config{discussionpage}
})) {
+ exists $
pagesources{$page."/".lc($config{discussionpage})
})) {
$template->param(have_actions => 1);
$template->param(discussionlink =>
htmllink($page,
$template->param(have_actions => 1);
$template->param(discussionlink =>
htmllink($page,
@@
-368,9
+380,12
@@
sub preprocess_inline (@) {
forcesubpage => 1));
}
}
forcesubpage => 1));
}
}
- if (length $config{cgiurl} && defined $type) {
+ if (length $config{cgiurl} &&
+ defined $type &&
+ IkiWiki->can("cgi_editpage")) {
$template->param(have_actions => 1);
$template->param(editurl => cgiurl(do => "edit", page => $page));
$template->param(have_actions => 1);
$template->param(editurl => cgiurl(do => "edit", page => $page));
+
}
}
}
}
@@
-390,6
+405,10
@@
sub preprocess_inline (@) {
filter($page, $params{destpage},
readfile(srcfile($file)))));
}
filter($page, $params{destpage},
readfile(srcfile($file)))));
}
+ else {
+ $ret.="\n".
+ readfile(srcfile($file));
+ }
}
}
}
}
}
}
@@
-418,6
+437,8
@@
sub preprocess_inline (@) {
}
}
}
}
+ clear_inline_content_cache();
+
return $ret if $raw || $nested;
push @inline, $ret;
return "<div class=\"inline\" id=\"$#inline\"></div>\n\n";
return $ret if $raw || $nested;
push @inline, $ret;
return "<div class=\"inline\" id=\"$#inline\"></div>\n\n";
@@
-432,43
+453,57
@@
sub pagetemplate_inline (@) {
if exists $feedlinks{$page} && $template->query(name => "feedlinks");
}
if exists $feedlinks{$page} && $template->query(name => "feedlinks");
}
+{
+my %inline_content;
+my $cached_destpage="";
+
sub get_inline_content ($$) {
my $page=shift;
my $destpage=shift;
sub get_inline_content ($$) {
my $page=shift;
my $destpage=shift;
+ if (exists $inline_content{$page} && $cached_destpage eq $destpage) {
+ return $inline_content{$page};
+ }
+
my $file=$pagesources{$page};
my $type=pagetype($file);
my $file=$pagesources{$page};
my $type=pagetype($file);
+ my $ret="";
if (defined $type) {
$nested++;
if (defined $type) {
$nested++;
-
my
$ret=htmlize($page, $destpage, $type,
+ $ret=htmlize($page, $destpage, $type,
linkify($page, $destpage,
preprocess($page, $destpage,
filter($page, $destpage,
readfile(srcfile($file))))));
$nested--;
linkify($page, $destpage,
preprocess($page, $destpage,
filter($page, $destpage,
readfile(srcfile($file))))));
$nested--;
- return $ret;
+ if (isinternal($page)) {
+ # make inlined text of internal pages searchable
+ run_hooks(indexhtml => sub {
+ shift->(page => $page, destpage => $page,
+ content => $ret);
+ });
+ }
}
}
- else {
- return "";
+
+ if ($cached_destpage ne $destpage) {
+ clear_inline_content_cache();
+ $cached_destpage=$destpage;
}
}
+ return $inline_content{$page}=$ret;
}
}
-sub date_822 ($) {
- my $time=shift;
+sub clear_inline_content_cache () {
+ %inline_content=();
+}
- 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));
- POSIX::setlocale(&POSIX::LC_TIME, $lc_time);
- return $ret;
}
}
-sub date_
3339
($) {
+sub date_
822
($) {
my $time=shift;
my $lc_time=POSIX::setlocale(&POSIX::LC_TIME);
POSIX::setlocale(&POSIX::LC_TIME, "C");
my $time=shift;
my $lc_time=POSIX::setlocale(&POSIX::LC_TIME);
POSIX::setlocale(&POSIX::LC_TIME, "C");
- my $ret=POSIX::strftime("%
Y-%m-%dT%H:%M:%SZ", gm
time($time));
+ my $ret=POSIX::strftime("%
a, %d %b %Y %H:%M:%S %z", local
time($time));
POSIX::setlocale(&POSIX::LC_TIME, $lc_time);
return $ret;
}
POSIX::setlocale(&POSIX::LC_TIME, $lc_time);
return $ret;
}
@@
-506,7
+541,7
@@
sub genfeed ($$$$$@) {
my $url=URI->new(encode_utf8(urlto($page,"",1)));
my $url=URI->new(encode_utf8(urlto($page,"",1)));
- my $itemtemplate=template
($feedtype."item.tmpl"
, blind_cache => 1);
+ my $itemtemplate=template
_depends($feedtype."item.tmpl", $page
, blind_cache => 1);
my $content="";
my $lasttime = 0;
foreach my $p (@pages) {
my $content="";
my $lasttime = 0;
foreach my $p (@pages) {
@@
-525,7
+560,8
@@
sub genfeed ($$$$$@) {
if (exists $pagestate{$p}) {
if (exists $pagestate{$p}{meta}{guid}) {
if (exists $pagestate{$p}) {
if (exists $pagestate{$p}{meta}{guid}) {
- $itemtemplate->param(guid => $pagestate{$p}{meta}{guid});
+ eval q{use HTML::Entities};
+ $itemtemplate->param(guid => HTML::Entities::encode_numeric($pagestate{$p}{meta}{guid}));
}
if (exists $pagestate{$p}{meta}{updated}) {
}
if (exists $pagestate{$p}{meta}{updated}) {
@@
-569,7
+605,7
@@
sub genfeed ($$$$$@) {
$lasttime = $pagemtime{$p} if $pagemtime{$p} > $lasttime;
}
$lasttime = $pagemtime{$p} if $pagemtime{$p} > $lasttime;
}
- my $template=template
($feedtype."page.tmpl"
, blind_cache => 1);
+ my $template=template
_depends($feedtype."page.tmpl", $page
, blind_cache => 1);
$template->param(
title => $page ne "index" ? pagetitle($page) : $config{wikiname},
wikiname => $config{wikiname},
$template->param(
title => $page ne "index" ? pagetitle($page) : $config{wikiname},
wikiname => $config{wikiname},