* pagespec_match() has changed to take named parameters, to better allow
for extended pagespecs. The old calling convention will still work for back-compat for now. * The calling convention for functions in the IkiWiki::PageSpec namespace has changed so they are passed named parameters. * Plugin interface version increased to 2.00 since I don't anticipate any more interface changes before 2.0.master
parent
80aa0336e6
commit
ee1ad53c4c
58
IkiWiki.pm
58
IkiWiki.pm
|
@ -18,7 +18,7 @@ our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
|
|||
bestlink htmllink readfile writefile pagetype srcfile pagename
|
||||
displaytime will_render gettext urlto targetpage
|
||||
%config %links %renderedfiles %pagesources %destsources);
|
||||
our $VERSION = 1.02; # plugin interface version, next is ikiwiki version
|
||||
our $VERSION = 2.00; # plugin interface version, next is ikiwiki version
|
||||
our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE
|
||||
my $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE
|
||||
|
||||
|
@ -974,38 +974,42 @@ sub pagespec_translate ($) { #{{{
|
|||
}
|
||||
elsif ($word =~ /^(\w+)\((.*)\)$/) {
|
||||
if (exists $IkiWiki::PageSpec::{"match_$1"}) {
|
||||
$code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \$from)";
|
||||
$code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@params)";
|
||||
}
|
||||
else {
|
||||
$code.=" 0";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$code.=" IkiWiki::PageSpec::match_glob(\$page, ".safequote($word).", \$from)";
|
||||
$code.=" IkiWiki::PageSpec::match_glob(\$page, ".safequote($word).", \@params)";
|
||||
}
|
||||
}
|
||||
|
||||
return $code;
|
||||
} #}}}
|
||||
|
||||
sub pagespec_match ($$;$) { #{{{
|
||||
sub pagespec_match ($$;@) { #{{{
|
||||
my $page=shift;
|
||||
my $spec=shift;
|
||||
my $from=shift;
|
||||
my @params=@_;
|
||||
|
||||
# Backwards compatability with old calling convention.
|
||||
if (@params == 1) {
|
||||
unshift @params, "location";
|
||||
}
|
||||
|
||||
return eval pagespec_translate($spec);
|
||||
} #}}}
|
||||
|
||||
package IkiWiki::PageSpec;
|
||||
|
||||
sub match_glob ($$$) { #{{{
|
||||
sub match_glob ($$;@) { #{{{
|
||||
my $page=shift;
|
||||
my $glob=shift;
|
||||
my $from=shift;
|
||||
if (! defined $from){
|
||||
$from = "";
|
||||
}
|
||||
|
||||
my %params=@_;
|
||||
|
||||
my $from=exists $params{location} ? $params{location} : "";
|
||||
|
||||
# relative matching
|
||||
if ($glob =~ m!^\./!) {
|
||||
$from=~s!/?[^/]+$!!;
|
||||
|
@ -1021,13 +1025,12 @@ sub match_glob ($$$) { #{{{
|
|||
return $page=~/^$glob$/i;
|
||||
} #}}}
|
||||
|
||||
sub match_link ($$$) { #{{{
|
||||
sub match_link ($$;@) { #{{{
|
||||
my $page=shift;
|
||||
my $link=lc(shift);
|
||||
my $from=shift;
|
||||
if (! defined $from){
|
||||
$from = "";
|
||||
}
|
||||
my %params=@_;
|
||||
|
||||
my $from=exists $params{location} ? $params{location} : "";
|
||||
|
||||
# relative matching
|
||||
if ($link =~ m!^\.! && defined $from) {
|
||||
|
@ -1046,11 +1049,11 @@ sub match_link ($$$) { #{{{
|
|||
return 0;
|
||||
} #}}}
|
||||
|
||||
sub match_backlink ($$$) { #{{{
|
||||
match_link($_[1], $_[0], $_[3]);
|
||||
sub match_backlink ($$;@) { #{{{
|
||||
match_link($_[1], $_[0], @_);
|
||||
} #}}}
|
||||
|
||||
sub match_created_before ($$$) { #{{{
|
||||
sub match_created_before ($$;@) { #{{{
|
||||
my $page=shift;
|
||||
my $testpage=shift;
|
||||
|
||||
|
@ -1062,7 +1065,7 @@ sub match_created_before ($$$) { #{{{
|
|||
}
|
||||
} #}}}
|
||||
|
||||
sub match_created_after ($$$) { #{{{
|
||||
sub match_created_after ($$;@) { #{{{
|
||||
my $page=shift;
|
||||
my $testpage=shift;
|
||||
|
||||
|
@ -1074,16 +1077,25 @@ sub match_created_after ($$$) { #{{{
|
|||
}
|
||||
} #}}}
|
||||
|
||||
sub match_creation_day ($$$) { #{{{
|
||||
sub match_creation_day ($$;@) { #{{{
|
||||
return ((gmtime($IkiWiki::pagectime{shift()}))[3] == shift);
|
||||
} #}}}
|
||||
|
||||
sub match_creation_month ($$$) { #{{{
|
||||
sub match_creation_month ($$;@) { #{{{
|
||||
return ((gmtime($IkiWiki::pagectime{shift()}))[4] + 1 == shift);
|
||||
} #}}}
|
||||
|
||||
sub match_creation_year ($$$) { #{{{
|
||||
sub match_creation_year ($$;@) { #{{{
|
||||
return ((gmtime($IkiWiki::pagectime{shift()}))[5] + 1900 == shift);
|
||||
} #}}}
|
||||
|
||||
sub match_user ($$;@) { #{{{
|
||||
shift;
|
||||
my $user=shift;
|
||||
my %params=@_;
|
||||
|
||||
return unless exists $params{user};
|
||||
return $user eq $params{user};
|
||||
} #}}}
|
||||
|
||||
1
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::aggregate;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
use HTML::Entities;
|
||||
use HTML::Parser;
|
||||
use HTML::Tagset;
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::anonok;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "canedit", id => "anonok", call => \&canedit,);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::brokenlinks;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "preprocess", id => "brokenlinks", call => \&preprocess);
|
||||
|
@ -20,7 +20,7 @@ sub preprocess (@) { #{{{
|
|||
|
||||
my @broken;
|
||||
foreach my $page (keys %links) {
|
||||
if (pagespec_match($page, $params{pages}, $params{page})) {
|
||||
if (pagespec_match($page, $params{pages}, location => $params{page})) {
|
||||
my $discussion=gettext("discussion");
|
||||
foreach my $link (@{$links{$page}}) {
|
||||
next if $link =~ /.*\/\Q$discussion\E/i && $config{discussion};
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
# CamelCase links
|
||||
package IkiWiki::Plugin::camelcase;
|
||||
|
||||
use IkiWiki;
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "filter", id => "camelcase", call => \&filter);
|
||||
|
|
|
@ -3,12 +3,9 @@ package IkiWiki::Plugin::conditional;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
use UNIVERSAL;
|
||||
|
||||
# Globals used to pass information into the PageSpec functions.
|
||||
our ($sourcepage, $destpage);
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "preprocess", id => "if", call => \&preprocess_if);
|
||||
} # }}}
|
||||
|
@ -21,27 +18,28 @@ sub preprocess_if (@) { #{{{
|
|||
}
|
||||
|
||||
my $result=0;
|
||||
$sourcepage=$params{page};
|
||||
$destpage=$params{destpage};
|
||||
# An optimisation to avoid needless looping over every page
|
||||
# and adding of dependencies for simple uses of some of the
|
||||
# tests.
|
||||
if ($params{test} =~ /^(enabled|sourcepage|destpage)\((.*)\)$/) {
|
||||
$result=eval "IkiWiki::PageSpec::match_$1(undef, ".
|
||||
IkiWiki::safequote($2).", \$params{page})";
|
||||
$result=pagespec_match($params{page}, $params{test},
|
||||
location => $params{page},
|
||||
sourcepage => $params{page},
|
||||
destpage => $params{destpage});
|
||||
}
|
||||
else {
|
||||
add_depends($params{page}, $params{test});
|
||||
|
||||
foreach my $page (keys %pagesources) {
|
||||
if (pagespec_match($page, $params{test}, $params{page})) {
|
||||
if (pagespec_match($page, $params{test},
|
||||
location => $params{page},
|
||||
sourcepage => $params{page},
|
||||
destpage => $params{destpage})) {
|
||||
$result=1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
}
|
||||
$sourcepage="";
|
||||
$destpage="";
|
||||
|
||||
my $ret;
|
||||
if ($result) {
|
||||
|
@ -59,7 +57,7 @@ sub preprocess_if (@) { #{{{
|
|||
|
||||
package IkiWiki::PageSpec;
|
||||
|
||||
sub match_enabled ($$$) { #{{{
|
||||
sub match_enabled ($$;@) { #{{{
|
||||
shift;
|
||||
my $plugin=shift;
|
||||
|
||||
|
@ -67,24 +65,31 @@ sub match_enabled ($$$) { #{{{
|
|||
return UNIVERSAL::can("IkiWiki::Plugin::".$plugin, "import");
|
||||
} #}}}
|
||||
|
||||
sub match_sourcepage ($$$) { #{{{
|
||||
sub match_sourcepage ($$;@) { #{{{
|
||||
shift;
|
||||
my $glob=shift;
|
||||
|
||||
return match_glob($IkiWiki::Plugin::conditional::sourcepage, $glob,
|
||||
$IkiWiki::Plugin::conditional::sourcepage);
|
||||
my %params=@_;
|
||||
|
||||
return unless exists $params{sourcepage};
|
||||
return match_glob($params{sourcepage}, $glob, @_);
|
||||
} #}}}
|
||||
|
||||
sub match_destpage ($$$) { #{{{
|
||||
sub match_destpage ($$;@) { #{{{
|
||||
shift;
|
||||
my $glob=shift;
|
||||
my %params=@_;
|
||||
|
||||
return match_glob($IkiWiki::Plugin::conditional::destpage, $glob,
|
||||
$IkiWiki::Plugin::conditional::sourcepage);
|
||||
return unless exists $params{destpage};
|
||||
return match_glob($params{destpage}, $glob, @_);
|
||||
} #}}}
|
||||
|
||||
sub match_included ($$$) { #{{{
|
||||
return $IkiWiki::Plugin::conditional::sourcepage ne $IkiWiki::Plugin::conditional::destpage;
|
||||
sub match_included ($$;$) { #{{{
|
||||
shift;
|
||||
shift;
|
||||
my %params=@_;
|
||||
|
||||
return unless exists $params{sourcepage} && exists $params{destpage};
|
||||
return $params{sourcepage} ne $params{destpage};
|
||||
} #}}}
|
||||
|
||||
1
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
#!/usr/bin/perl
|
||||
# Discordian date support fnord ikiwiki.
|
||||
package IkiWiki::Plugin::ddate;
|
||||
use IkiWiki;
|
||||
|
||||
use IkiWiki 2.00;
|
||||
no warnings;
|
||||
|
||||
sub import { #{{{
|
||||
|
|
|
@ -5,7 +5,7 @@ package IkiWiki::Plugin::favicon;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "pagetemplate", id => "favicon", call => \&pagetemplate);
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
# Include a fortune in a page
|
||||
package IkiWiki::Plugin::fortune;
|
||||
|
||||
use IkiWiki;
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "preprocess", id => "fortune", call => \&preprocess);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::goodstuff;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
my @bundle=qw{
|
||||
brokenlinks
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::googlecalendar;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "preprocess", id => "googlecalendar",
|
||||
|
|
|
@ -5,7 +5,7 @@ package IkiWiki::Plugin::graphviz;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
use IPC::Open2;
|
||||
|
||||
sub import { #{{{
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::haiku;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "preprocess", id => "haiku", call => \&preprocess);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::html;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "htmlize", id => "html", call => \&htmlize);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::htmlscrubber;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "sanitize", id => "htmlscrubber", call => \&sanitize);
|
||||
|
|
|
@ -9,7 +9,7 @@ package IkiWiki::Plugin::htmltidy;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
use IPC::Open2;
|
||||
|
||||
sub import { #{{{
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::httpauth;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "auth", id => "httpauth", call => \&auth);
|
||||
|
|
|
@ -5,7 +5,7 @@ package IkiWiki::Plugin::img;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
my %imgdefaults;
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::inline;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 1.00;
|
||||
use IkiWiki 2.00;
|
||||
use URI;
|
||||
|
||||
sub import { #{{{
|
||||
|
@ -88,7 +88,7 @@ sub preprocess_inline (@) { #{{{
|
|||
my @list;
|
||||
foreach my $page (keys %pagesources) {
|
||||
next if $page eq $params{page};
|
||||
if (pagespec_match($page, $params{pages}, $params{page})) {
|
||||
if (pagespec_match($page, $params{pages}, location => $params{page})) {
|
||||
push @list, $page;
|
||||
}
|
||||
}
|
||||
|
@ -223,7 +223,7 @@ sub preprocess_inline (@) { #{{{
|
|||
@list=@list[0..$params{feedshow} - 1];
|
||||
}
|
||||
if (exists $params{feedpages}) {
|
||||
@list=grep { pagespec_match($_, $params{feedpages}, $params{page}) } @list;
|
||||
@list=grep { pagespec_match($_, $params{feedpages}, location => $params{page}) } @list;
|
||||
}
|
||||
|
||||
if ($rss) {
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::linkmap;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
use IPC::Open2;
|
||||
|
||||
sub import { #{{{
|
||||
|
@ -48,7 +48,7 @@ sub genmap ($) { #{{{
|
|||
# Get all the items to map.
|
||||
my %mapitems = ();
|
||||
foreach my $item (keys %links) {
|
||||
if (pagespec_match($item, $params{pages}, $params{page})) {
|
||||
if (pagespec_match($item, $params{pages}, location => $params{page})) {
|
||||
$mapitems{$item}=urlto($item, $params{destpage});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::lockedit;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "canedit", id => "lockedit", call => \&canedit);
|
||||
|
@ -20,7 +20,7 @@ sub canedit ($$) { #{{{
|
|||
return undef if defined $user && IkiWiki::is_admin($user);
|
||||
|
||||
foreach my $admin (@{$config{adminuser}}) {
|
||||
if (pagespec_match($page, IkiWiki::userinfo_get($admin, "locked_pages"), "")) {
|
||||
if (pagespec_match($page, IkiWiki::userinfo_get($admin, "locked_pages"))) {
|
||||
return sprintf(gettext("%s is locked by %s and cannot be edited"),
|
||||
htmllink("", "", $page, noimageinline => 1),
|
||||
IkiWiki::userlink($admin));
|
||||
|
|
|
@ -9,7 +9,7 @@ package IkiWiki::Plugin::map;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "preprocess", id => "map", call => \&preprocess);
|
||||
|
@ -26,7 +26,7 @@ sub preprocess (@) { #{{{
|
|||
# Get all the items to map.
|
||||
my @mapitems = ();
|
||||
foreach my $page (keys %links) {
|
||||
if (pagespec_match($page, $params{pages}, $params{page})) {
|
||||
if (pagespec_match($page, $params{pages}, location => $params{page})) {
|
||||
push @mapitems, $page;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::mdwn;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "htmlize", id => "mdwn", call => \&htmlize);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::meta;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
my %meta;
|
||||
my %title;
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::mirrorlist;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "pagetemplate", id => "mirrorlist", call => \&pagetemplate);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::more;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
my $linktext = gettext("more");
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::opendiscussion;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "canedit", id => "opendiscussion", call => \&canedit);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::openid;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "getopt", id => "openid", call => \&getopt);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::orphans;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "preprocess", id => "orphans", call => \&preprocess);
|
||||
|
@ -28,7 +28,7 @@ sub preprocess (@) { #{{{
|
|||
my $discussion=gettext("discussion");
|
||||
foreach my $page (keys %pagesources) {
|
||||
next if $linkedto{$page};
|
||||
next unless pagespec_match($page, $params{pages}, $params{page});
|
||||
next unless pagespec_match($page, $params{pages}, location => $params{page});
|
||||
# If the page has a link to some other page, it's
|
||||
# indirectly linked to a page via that page's backlinks.
|
||||
next if grep {
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::otl;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "filter", id => "otl", call => \&filter);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::pagecount;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "preprocess", id => "pagecount", call => \&preprocess);
|
||||
|
@ -21,7 +21,7 @@ sub preprocess (@) { #{{{
|
|||
return $#pages+1 if $params{pages} eq "*"; # optimisation
|
||||
my $count=0;
|
||||
foreach my $page (@pages) {
|
||||
$count++ if pagespec_match($page, $params{pages}, $params{page});
|
||||
$count++ if pagespec_match($page, $params{pages}, location => $params{page});
|
||||
}
|
||||
return $count;
|
||||
} # }}}
|
||||
|
|
|
@ -12,7 +12,7 @@ package IkiWiki::Plugin::pagestats;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
# Names of the HTML classes to use for the tag cloud
|
||||
our @classes = ('smallestPC', 'smallPC', 'normalPC', 'bigPC', 'biggestPC' );
|
||||
|
@ -33,7 +33,7 @@ sub preprocess (@) { #{{{
|
|||
my %counts;
|
||||
my $max = 0;
|
||||
foreach my $page (keys %links) {
|
||||
if (pagespec_match($page, $params{pages}, $params{page})) {
|
||||
if (pagespec_match($page, $params{pages}, location => $params{page})) {
|
||||
use IkiWiki::Render;
|
||||
my @bl = IkiWiki::backlinks($page);
|
||||
$counts{$page} = scalar(@bl);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::passwordauth;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "formbuilder_setup", id => "passwordauth",
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::poll;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "preprocess", id => "poll", call => \&preprocess);
|
||||
|
|
|
@ -7,7 +7,7 @@ package IkiWiki::Plugin::polygen;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
use File::Find;
|
||||
|
||||
sub import { #{{{
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::postsparkline;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
IkiWiki::loadplugin('sparkline');
|
||||
|
@ -37,7 +37,7 @@ sub preprocess (@) { #{{{
|
|||
my @list;
|
||||
foreach my $page (keys %pagesources) {
|
||||
next if $page eq $params{page};
|
||||
if (pagespec_match($page, $params{pages}, $params{page})) {
|
||||
if (pagespec_match($page, $params{pages}, location => $params{page})) {
|
||||
push @list, $page;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/perl
|
||||
package IkiWiki::Plugin::prettydate;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
use warnings;
|
||||
no warnings 'redefine';
|
||||
use strict;
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::rawhtml;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
$config{wiki_file_prune_regexps} = [ grep { !m/\\\.x\?html\?\$/ } @{$config{wiki_file_prune_regexps}} ];
|
||||
|
|
|
@ -18,7 +18,7 @@ package IkiWiki::Plugin::rst;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
use IPC::Open2;
|
||||
|
||||
# Simple python script, maybe it should be implemented using an external script.
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::search;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "getopt", id => "hyperestraier",
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::shortcut;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "checkconfig", id => "shortcut", call => \&checkconfig);
|
||||
|
|
|
@ -6,7 +6,7 @@ package IkiWiki::Plugin::sidebar;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "pagetemplate", id => "sidebar", call => \&pagetemplate);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::signinedit;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "canedit", id => "signinedit", call => \&canedit,
|
||||
|
|
|
@ -6,7 +6,7 @@ package IkiWiki::Plugin::skeleton;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki '1.02';
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "getopt", id => "skeleton", call => \&getopt);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::smiley;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
my %smileys;
|
||||
my $smiley_regexp;
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::sparkline;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
use IPC::Open2;
|
||||
|
||||
my $match_num=qr/[-+]?[0-9]+(?:\.[0-9]+)?/;
|
||||
|
|
|
@ -3,8 +3,7 @@ package IkiWiki::Plugin::table;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "preprocess", id => "table", call => \&preprocess);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::tag;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
my %tags;
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::template;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
use HTML::Template;
|
||||
use Encode;
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ package IkiWiki::Plugin::textile;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "htmlize", id => "txtl", call => \&htmlize);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::toc;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
use HTML::Parser;
|
||||
|
||||
sub import { #{{{
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::toggle;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
# Here's the javascript that makes this possible. A key feature is the use
|
||||
# of css to hide toggleables, to avoid any flashing on page load. The css
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::typography;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
IkiWiki::hook(type => "sanitize", id => "typography", call => \&sanitize);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::wikitext;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
sub import { #{{{
|
||||
hook(type => "htmlize", id => "wiki", call => \&htmlize);
|
||||
|
|
|
@ -365,7 +365,7 @@ sub refresh () { #{{{
|
|||
foreach my $file (keys %rendered, @del) {
|
||||
next if $f eq $file;
|
||||
my $page=pagename($file);
|
||||
if (pagespec_match($page, $depends{$p}, $p)) {
|
||||
if (pagespec_match($page, $depends{$p}, location => $p)) {
|
||||
debug(sprintf(gettext("rendering %s, which depends on %s"), $f, $page));
|
||||
render($f);
|
||||
$rendered{$f}=1;
|
||||
|
|
|
@ -92,11 +92,8 @@ sub set_banned_users (@) { #{{{
|
|||
return userinfo_store($userinfo);
|
||||
} #}}}
|
||||
|
||||
# Global used to pass information into the PageSpec function.
|
||||
our $committer;
|
||||
|
||||
sub commit_notify_list ($@) { #{{{
|
||||
$committer=shift;
|
||||
my $committer=shift;
|
||||
my @pages = map pagename($_), @_;
|
||||
|
||||
my @ret;
|
||||
|
@ -107,7 +104,9 @@ sub commit_notify_list ($@) { #{{{
|
|||
length $userinfo->{$user}->{subscriptions} &&
|
||||
exists $userinfo->{$user}->{email} &&
|
||||
length $userinfo->{$user}->{email} &&
|
||||
grep { pagespec_match($_, $userinfo->{$user}->{subscriptions}, "") }
|
||||
grep { pagespec_match($_,
|
||||
$userinfo->{$user}->{subscriptions},
|
||||
user => $committer) }
|
||||
map pagename($_), @_) {
|
||||
push @ret, $userinfo->{$user}->{email};
|
||||
}
|
||||
|
@ -180,13 +179,4 @@ sub send_commit_mails ($$$@) { #{{{
|
|||
}
|
||||
} #}}}
|
||||
|
||||
package IkiWiki::PageSpec;
|
||||
|
||||
sub match_user ($$$) { #{{{
|
||||
shift;
|
||||
my $user=shift;
|
||||
|
||||
return $user eq $committer;
|
||||
} #}}}
|
||||
|
||||
1
|
||||
|
|
|
@ -22,8 +22,15 @@ ikiwiki (1.51) UNRELEASED; urgency=low
|
|||
* Avoid .svn directories when installing from svn checkout.
|
||||
* Fix sending of commit mails when new pages are added via the web.
|
||||
* Add user(name) to the PageSpec for commit subscriptions.
|
||||
* pagespec_match() has changed to take named parameters, to better allow
|
||||
for extended pagespecs. The old calling convention will still work for
|
||||
back-compat for now.
|
||||
* The calling convention for functions in the IkiWiki::PageSpec namespace
|
||||
has changed so they are passed named parameters.
|
||||
* Plugin interface version increased to 2.00 since I don't anticipate any
|
||||
more interface changes before 2.0.
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Thu, 26 Apr 2007 20:25:53 -0400
|
||||
-- Joey Hess <joeyh@debian.org> Thu, 26 Apr 2007 22:18:47 -0400
|
||||
|
||||
ikiwiki (1.50) unstable; urgency=low
|
||||
|
||||
|
|
|
@ -20,6 +20,8 @@ being edited.
|
|||
## Registering plugins
|
||||
|
||||
All plugins should `use IkiWiki` to import the ikiwiki plugin interface.
|
||||
It's a good idea to include the version number of the plugin interface that
|
||||
your plugin expects: `use IkiWiki 2.00`
|
||||
|
||||
Plugins should, when imported, call `hook()` to hook into ikiwiki's
|
||||
processing. The function uses named parameters, and use varies depending on
|
||||
|
@ -316,12 +318,15 @@ page created from it. (Ie, it appends ".html".)
|
|||
|
||||
Makes the specified page depend on the specified [[PageSpec]].
|
||||
|
||||
#### `pagespec_match($$;$)`
|
||||
#### `pagespec_match($$;@)`
|
||||
|
||||
Passed a page name, a [[PageSpec]], and the location the [[PageSpec]] should
|
||||
be matched against, returns true if the [[PageSpec]] matches the page. (If
|
||||
the third parameter is not passed, relative PageSpecs will match relative to
|
||||
the top of the wiki.)
|
||||
Passed a page name, and [[PageSpec]], returns true if the [[PageSpec]]
|
||||
matches the page.
|
||||
|
||||
Additional named parameters can be passed, to further limit the match.
|
||||
The most often used is "location", which specifies the location the
|
||||
PageSpec should match against. If not passed, relative PageSpecs will match
|
||||
relative to the top of the wiki.
|
||||
|
||||
#### `bestlink($$)`
|
||||
|
||||
|
@ -441,6 +446,6 @@ It's also possible to write plugins that add new functions to
|
|||
[[PageSpecs|PageSpec]]. Such a plugin should add a function to the
|
||||
IkiWiki::PageSpec package, that is named `match_foo`, where "foo()" is
|
||||
how it will be accessed in a [[PageSpec]]. The function will be passed
|
||||
three parameters: The name of the page being matched, the thing to match
|
||||
against, and the page that the matching is occuring on. It should return
|
||||
two parameters: The name of the page being matched, and the thing to match
|
||||
against. It may also be passed additional, named parameters. It should return
|
||||
true if the page matches.
|
||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2007-04-26 20:28-0400\n"
|
||||
"POT-Creation-Date: 2007-04-26 22:52-0400\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -119,7 +119,7 @@ msgstr ""
|
|||
msgid "There are no broken links!"
|
||||
msgstr ""
|
||||
|
||||
#: ../IkiWiki/Plugin/conditional.pm:20
|
||||
#: ../IkiWiki/Plugin/conditional.pm:17
|
||||
msgid "\"test\" and \"then\" parameters are required"
|
||||
msgstr ""
|
||||
|
||||
|
@ -397,23 +397,23 @@ msgstr ""
|
|||
msgid "failed to run php"
|
||||
msgstr ""
|
||||
|
||||
#: ../IkiWiki/Plugin/table.pm:22
|
||||
#: ../IkiWiki/Plugin/table.pm:21
|
||||
msgid "cannot find file"
|
||||
msgstr ""
|
||||
|
||||
#: ../IkiWiki/Plugin/table.pm:45
|
||||
#: ../IkiWiki/Plugin/table.pm:44
|
||||
msgid "unknown data format"
|
||||
msgstr ""
|
||||
|
||||
#: ../IkiWiki/Plugin/table.pm:53
|
||||
#: ../IkiWiki/Plugin/table.pm:52
|
||||
msgid "empty data"
|
||||
msgstr ""
|
||||
|
||||
#: ../IkiWiki/Plugin/table.pm:73
|
||||
#: ../IkiWiki/Plugin/table.pm:72
|
||||
msgid "Direct data download"
|
||||
msgstr ""
|
||||
|
||||
#: ../IkiWiki/Plugin/table.pm:106
|
||||
#: ../IkiWiki/Plugin/table.pm:105
|
||||
#, perl-format
|
||||
msgid "parse fail at line %d: %s"
|
||||
msgstr ""
|
||||
|
@ -513,7 +513,7 @@ msgstr ""
|
|||
#. translators: A list of one or more pages that were changed,
|
||||
#. translators: And the name of the user making the change.
|
||||
#. translators: This is used as the subject of a commit email.
|
||||
#: ../IkiWiki/UserInfo.pm:146
|
||||
#: ../IkiWiki/UserInfo.pm:145
|
||||
#, perl-format
|
||||
msgid "update of %s's %s by %s"
|
||||
msgstr ""
|
||||
|
|
|
@ -1,29 +1,30 @@
|
|||
#!/usr/bin/perl
|
||||
use warnings;
|
||||
use strict;
|
||||
use Test::More tests => 46;
|
||||
use Test::More tests => 49;
|
||||
|
||||
BEGIN { use_ok("IkiWiki"); }
|
||||
|
||||
ok(pagespec_match("foo", "*", ""));
|
||||
ok(pagespec_match("page", "?ag?", ""));
|
||||
ok(! pagespec_match("page", "?a?g?", ""));
|
||||
ok(pagespec_match("foo.png", "*.*", ""));
|
||||
ok(! pagespec_match("foo", "*.*", ""));
|
||||
ok(pagespec_match("foo", "foo or bar", ""), "simple list");
|
||||
ok(pagespec_match("bar", "foo or bar", ""), "simple list 2");
|
||||
ok(pagespec_match("foo", "f?? and !foz", ""));
|
||||
ok(! pagespec_match("foo", "f?? and !foo", ""));
|
||||
ok(! pagespec_match("foo", "* and !foo", ""));
|
||||
ok(! pagespec_match("foo", "foo and !foo", ""));
|
||||
ok(! pagespec_match("foo.png", "* and !*.*", ""));
|
||||
ok(pagespec_match("foo", "(bar or ((meep and foo) or (baz or foo) or beep))", ""));
|
||||
ok(! pagespec_match("a/foo", "foo", "a/b"), "nonrelative fail");
|
||||
ok(! pagespec_match("foo", "./*", "a/b"), "relative fail");
|
||||
ok(pagespec_match("a/foo", "./*", "a/b"), "relative");
|
||||
ok(pagespec_match("a/b/foo", "./*", "a/b"), "relative 2");
|
||||
ok(pagespec_match("foo", "./*", "a"), "relative toplevel");
|
||||
ok(pagespec_match("foo/bar", "*", "baz"), "absolute");
|
||||
ok(pagespec_match("foo", "*"));
|
||||
ok(pagespec_match("page", "?ag?"));
|
||||
ok(! pagespec_match("page", "?a?g?"));
|
||||
ok(pagespec_match("foo.png", "*.*"));
|
||||
ok(! pagespec_match("foo", "*.*"));
|
||||
ok(pagespec_match("foo", "foo or bar"), "simple list");
|
||||
ok(pagespec_match("bar", "foo or bar"), "simple list 2");
|
||||
ok(pagespec_match("foo", "f?? and !foz"));
|
||||
ok(! pagespec_match("foo", "f?? and !foo"));
|
||||
ok(! pagespec_match("foo", "* and !foo"));
|
||||
ok(! pagespec_match("foo", "foo and !foo"));
|
||||
ok(! pagespec_match("foo.png", "* and !*.*"));
|
||||
ok(pagespec_match("foo", "(bar or ((meep and foo) or (baz or foo) or beep))"));
|
||||
ok(! pagespec_match("a/foo", "foo", location => "a/b"), "nonrelative fail");
|
||||
ok(! pagespec_match("foo", "./*", location => "a/b"), "relative fail");
|
||||
ok(pagespec_match("a/foo", "./*", location => "a/b"), "relative");
|
||||
ok(pagespec_match("a/b/foo", "./*", location => "a/b"), "relative 2");
|
||||
ok(pagespec_match("a/foo", "./*", "a/b"), "relative oldstyle call");
|
||||
ok(pagespec_match("foo", "./*", location => "a"), "relative toplevel");
|
||||
ok(pagespec_match("foo/bar", "*", location => "baz"), "absolute");
|
||||
|
||||
# The link and backlink stuff needs this.
|
||||
$config{userdir}="";
|
||||
|
@ -37,16 +38,16 @@ $links{"done"}=[];
|
|||
$links{"examples/softwaresite/bugs/fails_to_frobnicate"}=[qw{done}];
|
||||
$links{"examples/softwaresite/bugs/done"}=[];
|
||||
|
||||
ok(pagespec_match("foo", "link(bar)", ""), "link");
|
||||
ok(! pagespec_match("foo", "link(quux)", ""), "failed link");
|
||||
ok(pagespec_match("bugs/foo", "link(done)", "bugs/done"), "link match to bestlink");
|
||||
ok(pagespec_match("foo", "link(bar)"), "link");
|
||||
ok(! pagespec_match("foo", "link(quux)"), "failed link");
|
||||
ok(pagespec_match("bugs/foo", "link(done)", location => "bugs/done"), "link match to bestlink");
|
||||
ok(! pagespec_match("examples/softwaresite/bugs/done", "link(done)",
|
||||
"bugs/done"), "link match to bestlink");
|
||||
location => "bugs/done"), "link match to bestlink");
|
||||
ok(pagespec_match("examples/softwaresite/bugs/fails_to_frobnicate",
|
||||
"link(./done)", "examples/softwaresite/bugs/done"), "link relative");
|
||||
ok(! pagespec_match("foo", "link(./bar)", "foo/bar"), "link relative fail");
|
||||
ok(pagespec_match("bar", "backlink(foo)", ""), "backlink");
|
||||
ok(! pagespec_match("quux", "backlink(foo)", ""), "failed backlink");
|
||||
"link(./done)", location => "examples/softwaresite/bugs/done"), "link relative");
|
||||
ok(! pagespec_match("foo", "link(./bar)", location => "foo/bar"), "link relative fail");
|
||||
ok(pagespec_match("bar", "backlink(foo)"), "backlink");
|
||||
ok(! pagespec_match("quux", "backlink(foo)"), "failed backlink");
|
||||
|
||||
$IkiWiki::pagectime{foo}=1154532692; # Wed Aug 2 11:26 EDT 2006
|
||||
$IkiWiki::pagectime{bar}=1154532695; # after
|
||||
|
@ -63,6 +64,9 @@ ok(! pagespec_match("foo", "creation_day(3)"), "other day");
|
|||
|
||||
ok(! pagespec_match("foo", "no_such_function(foo)"), "foo");
|
||||
|
||||
ok(pagespec_match("foo", "foo and user(bar)", user => "bar"), "user");
|
||||
ok(! pagespec_match("foo", "foo and user(bar)", user => "baz"), "user fail");
|
||||
|
||||
# old style globlists
|
||||
ok(pagespec_match("foo", "foo bar"), "simple list");
|
||||
ok(pagespec_match("bar", "foo bar"), "simple list 2");
|
||||
|
|
Loading…
Reference in New Issue