Merge branch 'tova'
commit
18b1c7f012
29
IkiWiki.pm
29
IkiWiki.pm
|
@ -20,7 +20,7 @@ use Exporter q{import};
|
||||||
our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
|
our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
|
||||||
bestlink htmllink readfile writefile pagetype srcfile pagename
|
bestlink htmllink readfile writefile pagetype srcfile pagename
|
||||||
displaytime will_render gettext urlto targetpage
|
displaytime will_render gettext urlto targetpage
|
||||||
add_underlay pagetitle titlepage linkpage
|
add_underlay pagetitle titlepage linkpage newpagefile
|
||||||
%config %links %pagestate %wikistate %renderedfiles
|
%config %links %pagestate %wikistate %renderedfiles
|
||||||
%pagesources %destsources);
|
%pagesources %destsources);
|
||||||
our $VERSION = 2.00; # plugin interface version, next is ikiwiki version
|
our $VERSION = 2.00; # plugin interface version, next is ikiwiki version
|
||||||
|
@ -198,6 +198,13 @@ sub getsetup () { #{{{
|
||||||
safe => 0, # changing requires manual transition
|
safe => 0, # changing requires manual transition
|
||||||
rebuild => 1,
|
rebuild => 1,
|
||||||
},
|
},
|
||||||
|
indexpages => {
|
||||||
|
type => "boolean",
|
||||||
|
defualt => 0,
|
||||||
|
description => "use page/index.mdwn source files",
|
||||||
|
safe => 1,
|
||||||
|
rebuild => 1,
|
||||||
|
},
|
||||||
discussion => {
|
discussion => {
|
||||||
type => "boolean",
|
type => "boolean",
|
||||||
default => 1,
|
default => 1,
|
||||||
|
@ -619,16 +626,32 @@ sub pagename ($) { #{{{
|
||||||
my $type=pagetype($file);
|
my $type=pagetype($file);
|
||||||
my $page=$file;
|
my $page=$file;
|
||||||
$page=~s/\Q.$type\E*$// if defined $type && !$hooks{htmlize}{$type}{keepextension};
|
$page=~s/\Q.$type\E*$// if defined $type && !$hooks{htmlize}{$type}{keepextension};
|
||||||
|
if ($config{indexpages} && $page=~/(.*)\/index$/) {
|
||||||
|
$page=$1;
|
||||||
|
}
|
||||||
return $page;
|
return $page;
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
||||||
|
sub newpagefile ($$) { #{{{
|
||||||
|
my $page=shift;
|
||||||
|
my $type=shift;
|
||||||
|
|
||||||
|
if (! $config{indexpages} || $page eq 'index') {
|
||||||
|
return $page.".".$type;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return $page."/index.".$type;
|
||||||
|
}
|
||||||
|
} #}}}
|
||||||
|
|
||||||
sub targetpage ($$) { #{{{
|
sub targetpage ($$) { #{{{
|
||||||
my $page=shift;
|
my $page=shift;
|
||||||
my $ext=shift;
|
my $ext=shift;
|
||||||
|
|
||||||
if (! $config{usedirs} || $page =~ /^index$/ ) {
|
if (! $config{usedirs} || $page eq 'index') {
|
||||||
return $page.".".$ext;
|
return $page.".".$ext;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
return $page."/index.".$ext;
|
return $page."/index.".$ext;
|
||||||
}
|
}
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
|
@ -158,11 +158,11 @@ sub migrate_to_internal { #{{{
|
||||||
next if $data->{expired};
|
next if $data->{expired};
|
||||||
|
|
||||||
$config{aggregateinternal} = 0;
|
$config{aggregateinternal} = 0;
|
||||||
my $oldname = pagefile($data->{page});
|
my $oldname = "$config{srcdir}/".htmlfn($data->{page});
|
||||||
my $oldoutput = $config{destdir}."/".IkiWiki::htmlpage($data->{page});
|
my $oldoutput = $config{destdir}."/".IkiWiki::htmlpage($data->{page});
|
||||||
|
|
||||||
$config{aggregateinternal} = 1;
|
$config{aggregateinternal} = 1;
|
||||||
my $newname = pagefile($data->{page});
|
my $newname = "$config{srcdir}/".htmlfn($data->{page});
|
||||||
|
|
||||||
debug "moving $oldname -> $newname";
|
debug "moving $oldname -> $newname";
|
||||||
if (-e $newname) {
|
if (-e $newname) {
|
||||||
|
@ -364,13 +364,13 @@ sub garbage_collect () { #{{{
|
||||||
foreach my $guid (values %guids) {
|
foreach my $guid (values %guids) {
|
||||||
# any guid whose feed is gone should be removed
|
# any guid whose feed is gone should be removed
|
||||||
if (! exists $feeds{$guid->{feed}}) {
|
if (! exists $feeds{$guid->{feed}}) {
|
||||||
unlink pagefile($guid->{page})
|
unlink "$config{srcdir}/".htmlfn($guid->{page})
|
||||||
if exists $guid->{page};
|
if exists $guid->{page};
|
||||||
delete $guids{$guid->{guid}};
|
delete $guids{$guid->{guid}};
|
||||||
}
|
}
|
||||||
# handle expired guids
|
# handle expired guids
|
||||||
elsif ($guid->{expired} && exists $guid->{page}) {
|
elsif ($guid->{expired} && exists $guid->{page}) {
|
||||||
unlink pagefile($guid->{page});
|
unlink "$config{srcdir}/".htmlfn($guid->{page});
|
||||||
delete $guid->{page};
|
delete $guid->{page};
|
||||||
delete $guid->{md5};
|
delete $guid->{md5};
|
||||||
}
|
}
|
||||||
|
@ -570,7 +570,7 @@ sub add_page (@) { #{{{
|
||||||
}
|
}
|
||||||
my $c="";
|
my $c="";
|
||||||
while (exists $IkiWiki::pagecase{lc $page.$c} ||
|
while (exists $IkiWiki::pagecase{lc $page.$c} ||
|
||||||
-e pagefile($page.$c)) {
|
-e "$config{srcdir}/".htmlfn($page.$c)) {
|
||||||
$c++
|
$c++
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -581,7 +581,7 @@ sub add_page (@) { #{{{
|
||||||
$c="";
|
$c="";
|
||||||
$page=$feed->{dir}."/item";
|
$page=$feed->{dir}."/item";
|
||||||
while (exists $IkiWiki::pagecase{lc $page.$c} ||
|
while (exists $IkiWiki::pagecase{lc $page.$c} ||
|
||||||
-e pagefile($page.$c)) {
|
-e "$config{srcdir}/".htmlfn($page.$c)) {
|
||||||
$c++
|
$c++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -621,7 +621,7 @@ sub add_page (@) { #{{{
|
||||||
if (defined $mtime && $mtime <= time) {
|
if (defined $mtime && $mtime <= time) {
|
||||||
# Set the mtime, this lets the build process get the right
|
# Set the mtime, this lets the build process get the right
|
||||||
# creation time on record for the new page.
|
# creation time on record for the new page.
|
||||||
utime $mtime, $mtime, pagefile($guid->{page});
|
utime $mtime, $mtime, "$config{srcdir}/".htmlfn($guid->{page});
|
||||||
# Store it in pagectime for expiry code to use also.
|
# Store it in pagectime for expiry code to use also.
|
||||||
$IkiWiki::pagectime{$guid->{page}}=$mtime;
|
$IkiWiki::pagectime{$guid->{page}}=$mtime;
|
||||||
}
|
}
|
||||||
|
@ -679,12 +679,6 @@ sub htmlabs ($$) { #{{{
|
||||||
return $ret;
|
return $ret;
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
||||||
sub pagefile ($) { #{{{
|
|
||||||
my $page=shift;
|
|
||||||
|
|
||||||
return "$config{srcdir}/".htmlfn($page);
|
|
||||||
} #}}}
|
|
||||||
|
|
||||||
sub htmlfn ($) { #{{{
|
sub htmlfn ($) { #{{{
|
||||||
return shift().".".($config{aggregateinternal} ? "_aggregated" : $config{htmlext});
|
return shift().".".($config{aggregateinternal} ? "_aggregated" : $config{htmlext});
|
||||||
} #}}}
|
} #}}}
|
||||||
|
|
|
@ -21,7 +21,7 @@ sub getsetup () { #{{{
|
||||||
|
|
||||||
sub genindex ($) { #{{{
|
sub genindex ($) { #{{{
|
||||||
my $page=shift;
|
my $page=shift;
|
||||||
my $file=$page.".".$config{default_pageext};
|
my $file=newpagefile($page, $config{default_pageext});
|
||||||
my $template=template("autoindex.tmpl");
|
my $template=template("autoindex.tmpl");
|
||||||
$template->param(page => $page);
|
$template->param(page => $page);
|
||||||
writefile($file, $config{srcdir}, $template->output);
|
writefile($file, $config{srcdir}, $template->output);
|
||||||
|
|
|
@ -156,7 +156,7 @@ sub cgi_editpage ($$) { #{{{
|
||||||
$type=pagetype($pagesources{$from});
|
$type=pagetype($pagesources{$from});
|
||||||
}
|
}
|
||||||
$type=$config{default_pageext} unless defined $type;
|
$type=$config{default_pageext} unless defined $type;
|
||||||
$file=$page.".".$type;
|
$file=newpagefile($page, $type);
|
||||||
if (! $form->submitted) {
|
if (! $form->submitted) {
|
||||||
$form->field(name => "rcsinfo", value => "", force => 1);
|
$form->field(name => "rcsinfo", value => "", force => 1);
|
||||||
}
|
}
|
||||||
|
@ -230,8 +230,8 @@ sub cgi_editpage ($$) { #{{{
|
||||||
# Previewing may have created files on disk.
|
# Previewing may have created files on disk.
|
||||||
# Keep a list of these to be deleted later.
|
# Keep a list of these to be deleted later.
|
||||||
my %previews = map { $_ => 1 } @{$wikistate{editpage}{previews}};
|
my %previews = map { $_ => 1 } @{$wikistate{editpage}{previews}};
|
||||||
foreach my $file (@{$renderedfiles{$page}}) {
|
foreach my $f (@{$renderedfiles{$page}}) {
|
||||||
$previews{$file}=1 unless $wasrendered{$file};
|
$previews{$f}=1 unless $wasrendered{$f};
|
||||||
}
|
}
|
||||||
@{$wikistate{editpage}{previews}} = keys %previews;
|
@{$wikistate{editpage}{previews}} = keys %previews;
|
||||||
$renderedfiles{$page}=[keys %wasrendered];
|
$renderedfiles{$page}=[keys %wasrendered];
|
||||||
|
|
|
@ -279,7 +279,7 @@ sub sessioncgi ($$) { #{{{
|
||||||
$type=$ext;
|
$type=$ext;
|
||||||
}
|
}
|
||||||
|
|
||||||
$destfile.=".".$type;
|
$destfile=newpagefile($dest, $type);
|
||||||
}
|
}
|
||||||
push @torename, {
|
push @torename, {
|
||||||
src => $src,
|
src => $src,
|
||||||
|
@ -292,17 +292,21 @@ sub sessioncgi ($$) { #{{{
|
||||||
# See if any subpages need to be renamed.
|
# See if any subpages need to be renamed.
|
||||||
if ($q->param("subpages") && $src ne $dest) {
|
if ($q->param("subpages") && $src ne $dest) {
|
||||||
foreach my $p (keys %pagesources) {
|
foreach my $p (keys %pagesources) {
|
||||||
if ($pagesources{$p}=~m/^\Q$src\E\//) {
|
next unless $pagesources{$p}=~m/^\Q$src\E\//;
|
||||||
my $d=$pagesources{$p};
|
# If indexpages is enabled, the
|
||||||
$d=~s/^\Q$src\E\//$dest\//;
|
# srcfile should not be confused
|
||||||
push @torename, {
|
# with a subpage.
|
||||||
src => $p,
|
next if $pagesources{$p} eq $srcfile;
|
||||||
srcfile => $pagesources{$p},
|
|
||||||
dest => pagename($d),
|
my $d=$pagesources{$p};
|
||||||
destfile => $d,
|
$d=~s/^\Q$src\E\//$dest\//;
|
||||||
required => 0,
|
push @torename, {
|
||||||
};
|
src => $p,
|
||||||
}
|
srcfile => $pagesources{$p},
|
||||||
|
dest => pagename($d),
|
||||||
|
destfile => $d,
|
||||||
|
required => 0,
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,11 @@ ikiwiki (2.66) UNRELEASED; urgency=low
|
||||||
page, and is preserved across rebuilds.
|
page, and is preserved across rebuilds.
|
||||||
* editpage: Be more aggressive (and less buggy) about cleaning up
|
* editpage: Be more aggressive (and less buggy) about cleaning up
|
||||||
temporary files rendered during page preview.
|
temporary files rendered during page preview.
|
||||||
|
* Add an indexpages option, which causes foo/index.mdwn to be the source
|
||||||
|
for page foo when foo.mdwn doesn't exist. Also, when it's enabled,
|
||||||
|
creating a new page will save it to foo/index.mdwn by default.
|
||||||
|
Closes: #474611
|
||||||
|
(Sponsored by The TOVA Company.)
|
||||||
* httpauth: Document that ikiwiki.cgi has to be in a directory subject to
|
* httpauth: Document that ikiwiki.cgi has to be in a directory subject to
|
||||||
authentication. Closes: #500524
|
authentication. Closes: #500524
|
||||||
|
|
||||||
|
|
|
@ -691,6 +691,12 @@ destination file, as registered by `will_render`.
|
||||||
If the third parameter is passed and is true, an absolute url will be
|
If the third parameter is passed and is true, an absolute url will be
|
||||||
constructed instead of the default relative url.
|
constructed instead of the default relative url.
|
||||||
|
|
||||||
|
#### `newpagefile($$)`
|
||||||
|
|
||||||
|
This can be called when creating a new page, to determine what filename
|
||||||
|
to save the page to. It's passed a page name, and its type, and returns
|
||||||
|
the name of the file to create, relative to the srcdir.
|
||||||
|
|
||||||
#### `targetpage($$)`
|
#### `targetpage($$)`
|
||||||
|
|
||||||
Passed a page and an extension, returns the filename that page will be
|
Passed a page and an extension, returns the filename that page will be
|
||||||
|
|
|
@ -121,4 +121,6 @@ diff -ru ikiwiki-2.4/IkiWiki.pm ikiwiki/IkiWiki.pm
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
This just makes it so that all files named foo/index become pages called foo, which is the desired effect. I haven't tested everything so far, so be careful! But you can see it working at http://ikidev.betacantrips.com/one/ again, as before. --Ethan
|
This just makes it so that all files named foo/index become pages called foo, which is the desired effect. I haven't tested everything so far, so be careful! But you can see it working at http://ikidev.betacantrips.com/one/ again, as before. --Ethan
|
||||||
|
|
||||||
|
[[done]], the indexpages setting enables this.
|
||||||
|
|
Loading…
Reference in New Issue