]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - IkiWiki.pm
Fix a couple of grammar errors.
[git.ikiwiki.info.git] / IkiWiki.pm
index d20a3709c9a9a4c911e0a0dfce6025e7de0e8f97..701f7137dd78483215637e205bbde0b720ea0387 100644 (file)
@@ -12,9 +12,9 @@ use open qw{:utf8 :std};
 
 use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
        %pagestate %wikistate %renderedfiles %oldrenderedfiles
 
 use vars qw{%config %links %oldlinks %pagemtime %pagectime %pagecase
        %pagestate %wikistate %renderedfiles %oldrenderedfiles
-       %pagesources %destsources %depends %depends_simple @mass_depends 
-       %hooks %forcerebuild %loaded_plugins %typedlinks %oldtypedlinks
-       %autofiles};
+       %pagesources %delpagesources %destsources %depends %depends_simple
+       @mass_depends %hooks %forcerebuild %loaded_plugins %typedlinks
+       %oldtypedlinks %autofiles};
 
 use Exporter q{import};
 our @EXPORT = qw(hook debug error htmlpage template template_depends
 
 use Exporter q{import};
 our @EXPORT = qw(hook debug error htmlpage template template_depends
@@ -441,6 +441,13 @@ sub getsetup () {
                safe => 0,
                rebuild => 0,
        },
                safe => 0,
                rebuild => 0,
        },
+       wrapper_background_command => {
+               type => "internal",
+               default => '',
+               description => "background shell command to run",
+               safe => 0,
+               rebuild => 0,
+       },
        gettime => {
                type => "internal",
                description => "running in gettime mode",
        gettime => {
                type => "internal",
                description => "running in gettime mode",
@@ -592,10 +599,11 @@ sub loadplugins () {
        return 1;
 }
 
        return 1;
 }
 
-sub loadplugin ($) {
+sub loadplugin ($;$) {
        my $plugin=shift;
        my $plugin=shift;
+       my $force=shift;
 
 
-       return if grep { $_ eq $plugin} @{$config{disable_plugins}};
+       return if ! $force && grep { $_ eq $plugin} @{$config{disable_plugins}};
 
        foreach my $dir (defined $config{libdir} ? possibly_foolish_untaint($config{libdir}) : undef,
                         "$installdir/lib/ikiwiki") {
 
        foreach my $dir (defined $config{libdir} ? possibly_foolish_untaint($config{libdir}) : undef,
                         "$installdir/lib/ikiwiki") {
@@ -1004,7 +1012,7 @@ sub displaytime ($;$$) {
        my $time=formattime($_[0], $_[1]);
        if ($config{html5}) {
                return '<time datetime="'.date_3339($_[0]).'"'.
        my $time=formattime($_[0], $_[1]);
        if ($config{html5}) {
                return '<time datetime="'.date_3339($_[0]).'"'.
-                       ($_[2] ? ' pubdate' : '').
+                       ($_[2] ? ' pubdate="pubdate"' : '').
                        '>'.$time.'</time>';
        }
        else {
                        '>'.$time.'</time>';
        }
        else {
@@ -1401,10 +1409,6 @@ sub filter ($$$) {
        return $content;
 }
 
        return $content;
 }
 
-sub indexlink () {
-       return "<a href=\"$config{url}\">$config{wikiname}</a>";
-}
-
 sub check_canedit ($$$;$) {
        my $page=shift;
        my $q=shift;
 sub check_canedit ($$$;$) {
        my $page=shift;
        my $q=shift;
@@ -1743,31 +1747,58 @@ sub template ($;@) {
 sub misctemplate ($$;@) {
        my $title=shift;
        my $content=shift;
 sub misctemplate ($$;@) {
        my $title=shift;
        my $content=shift;
+       my %params=@_;
        
        
-       my $template=template("misc.tmpl") || template("page.tmpl");
+       my $template=template("page.tmpl");
 
 
+       my $page="";
+       if (exists $params{page}) {
+               $page=delete $params{page};
+       }
        run_hooks(pagetemplate => sub {
        run_hooks(pagetemplate => sub {
-               shift->(page => "", destpage => "", template => $template);
+               shift->(
+                       page => $page,
+                       destpage => $page,
+                       template => $template,
+               );
        });
        });
+       templateactions($template, "");
 
        $template->param(
 
        $template->param(
+               dynamic => 1,
                title => $title,
                wikiname => $config{wikiname},
                content => $content,
                baseurl => baseurl(),
                html5 => $config{html5},
                title => $title,
                wikiname => $config{wikiname},
                content => $content,
                baseurl => baseurl(),
                html5 => $config{html5},
-               have_actions => 0, # force off
-               searchform => 0,   # ditto
-               parentlinks => [{  # override
-                       url => $config{url},
-                       page => $config{wikiname},
-               }],
-               @_,
+               %params,
        );
        );
-
+       
        return $template->output;
 }
 
        return $template->output;
 }
 
+sub templateactions ($$) {
+       my $template=shift;
+       my $page=shift;
+
+       my $have_actions=0;
+       my @actions;
+       run_hooks(pageactions => sub {
+               push @actions, map { { action => $_ } } 
+                       grep { defined } shift->(page => $page);
+       });
+       $template->param(actions => \@actions);
+
+       if ($config{cgiurl} && exists $hooks{auth}) {
+               $template->param(prefsurl => cgiurl(do => "prefs"));
+               $have_actions=1;
+       }
+
+       if ($have_actions || @actions) {
+               $template->param(have_actions => 1);
+       }
+}
+
 sub hook (@) {
        my %param=@_;
        
 sub hook (@) {
        my %param=@_;
        
@@ -1816,11 +1847,11 @@ sub rcs_prepedit ($) {
        $hooks{rcs}{rcs_prepedit}{call}->(@_);
 }
 
        $hooks{rcs}{rcs_prepedit}{call}->(@_);
 }
 
-sub rcs_commit ($$$;$$) {
+sub rcs_commit (@) {
        $hooks{rcs}{rcs_commit}{call}->(@_);
 }
 
        $hooks{rcs}{rcs_commit}{call}->(@_);
 }
 
-sub rcs_commit_staged ($$$) {
+sub rcs_commit_staged (@) {
        $hooks{rcs}{rcs_commit_staged}{call}->(@_);
 }
 
        $hooks{rcs}{rcs_commit_staged}{call}->(@_);
 }
 
@@ -2337,11 +2368,7 @@ sub match_glob ($$;@) {
 
        my $regexp=IkiWiki::glob2re($glob);
        if ($page=~/^$regexp$/i) {
 
        my $regexp=IkiWiki::glob2re($glob);
        if ($page=~/^$regexp$/i) {
-               if ($params{onlypage} &&
-                   ! defined IkiWiki::pagetype($IkiWiki::pagesources{$page})) {
-                       return IkiWiki::FailReason->new("$page is not a page");
-               }
-               elsif (! IkiWiki::isinternal($page) || $params{internal}) {
+               if (! IkiWiki::isinternal($page) || $params{internal}) {
                        return IkiWiki::SuccessReason->new("$glob matches $page");
                }
                else {
                        return IkiWiki::SuccessReason->new("$glob matches $page");
                }
                else {
@@ -2354,11 +2381,19 @@ sub match_glob ($$;@) {
 }
 
 sub match_internal ($$;@) {
 }
 
 sub match_internal ($$;@) {
-       return match_glob($_[0], $_[1], @_, internal => 1)
+       return match_glob(shift, shift, @_, internal => 1)
 }
 
 sub match_page ($$;@) {
 }
 
 sub match_page ($$;@) {
-       return match_glob($_[0], $_[1], @_, onlypage => 1)
+       my $page=shift;
+       my $match=match_glob($page, shift, @_);
+       if ($match && ! (exists $IkiWiki::pagesources{$page}
+           && defined IkiWiki::pagetype($IkiWiki::pagesources{$page}))) {
+               return IkiWiki::FailReason->new("$page is not a page");
+       }
+       else {
+               return $match;
+       }
 }
 
 sub match_link ($$;@) {
 }
 
 sub match_link ($$;@) {
@@ -2379,18 +2414,20 @@ sub match_link ($$;@) {
                unless $links && @{$links};
        my $bestlink = IkiWiki::bestlink($from, $link);
        foreach my $p (@{$links}) {
                unless $links && @{$links};
        my $bestlink = IkiWiki::bestlink($from, $link);
        foreach my $p (@{$links}) {
+               next unless (! defined $linktype || exists $IkiWiki::typedlinks{$page}{$linktype}{$p});
+
                if (length $bestlink) {
                if (length $bestlink) {
-                       if ((!defined $linktype || exists $IkiWiki::typedlinks{$page}{$linktype}{$p}) && $bestlink eq IkiWiki::bestlink($page, $p)) {
+                       if ($bestlink eq IkiWiki::bestlink($page, $p)) {
                                return IkiWiki::SuccessReason->new("$page links to $link$qualifier", $page => $IkiWiki::DEPEND_LINKS, "" => 1)
                        }
                }
                else {
                                return IkiWiki::SuccessReason->new("$page links to $link$qualifier", $page => $IkiWiki::DEPEND_LINKS, "" => 1)
                        }
                }
                else {
-                       if ((!defined $linktype || exists $IkiWiki::typedlinks{$page}{$linktype}{$p}) && match_glob($p, $link, %params)) {
+                       if (match_glob($p, $link, %params)) {
                                return IkiWiki::SuccessReason->new("$page links to page $p$qualifier, matching $link", $page => $IkiWiki::DEPEND_LINKS, "" => 1)
                        }
                        my ($p_rel)=$p=~/^\/?(.*)/;
                        $link=~s/^\///;
                                return IkiWiki::SuccessReason->new("$page links to page $p$qualifier, matching $link", $page => $IkiWiki::DEPEND_LINKS, "" => 1)
                        }
                        my ($p_rel)=$p=~/^\/?(.*)/;
                        $link=~s/^\///;
-                       if ((!defined $linktype || exists $IkiWiki::typedlinks{$page}{$linktype}{$p_rel}) && match_glob($p_rel, $link, %params)) {
+                       if (match_glob($p_rel, $link, %params)) {
                                return IkiWiki::SuccessReason->new("$page links to page $p_rel$qualifier, matching $link", $page => $IkiWiki::DEPEND_LINKS, "" => 1)
                        }
                }
                                return IkiWiki::SuccessReason->new("$page links to page $p_rel$qualifier, matching $link", $page => $IkiWiki::DEPEND_LINKS, "" => 1)
                        }
                }
@@ -2445,7 +2482,7 @@ sub match_created_after ($$;@) {
 }
 
 sub match_creation_day ($$;@) {
 }
 
 sub match_creation_day ($$;@) {
-       if ((gmtime($IkiWiki::pagectime{shift()}))[3] == shift) {
+       if ((localtime($IkiWiki::pagectime{shift()}))[3] == shift) {
                return IkiWiki::SuccessReason->new('creation_day matched');
        }
        else {
                return IkiWiki::SuccessReason->new('creation_day matched');
        }
        else {
@@ -2454,7 +2491,7 @@ sub match_creation_day ($$;@) {
 }
 
 sub match_creation_month ($$;@) {
 }
 
 sub match_creation_month ($$;@) {
-       if ((gmtime($IkiWiki::pagectime{shift()}))[4] + 1 == shift) {
+       if ((localtime($IkiWiki::pagectime{shift()}))[4] + 1 == shift) {
                return IkiWiki::SuccessReason->new('creation_month matched');
        }
        else {
                return IkiWiki::SuccessReason->new('creation_month matched');
        }
        else {
@@ -2463,7 +2500,7 @@ sub match_creation_month ($$;@) {
 }
 
 sub match_creation_year ($$;@) {
 }
 
 sub match_creation_year ($$;@) {
-       if ((gmtime($IkiWiki::pagectime{shift()}))[5] + 1900 == shift) {
+       if ((localtime($IkiWiki::pagectime{shift()}))[5] + 1900 == shift) {
                return IkiWiki::SuccessReason->new('creation_year matched');
        }
        else {
                return IkiWiki::SuccessReason->new('creation_year matched');
        }
        else {