]> sipb.mit.edu Git - ikiwiki.git/commitdiff
Merge branch 'tova'
authorJoey Hess <joey@kodama.kitenet.net>
Wed, 1 Oct 2008 19:54:10 +0000 (15:54 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Wed, 1 Oct 2008 19:54:10 +0000 (15:54 -0400)
IkiWiki.pm
IkiWiki/Plugin/aggregate.pm
IkiWiki/Plugin/autoindex.pm
IkiWiki/Plugin/editpage.pm
IkiWiki/Plugin/rename.pm
debian/changelog
doc/plugins/write.mdwn
doc/todo/index.html_allowed.mdwn

index 9b7baa0eeabfd367f6706f6b2b2c3d3006670b7a..34b315bbc36914919a83433fa58e94086f7fa15e 100644 (file)
@@ -20,7 +20,7 @@ use Exporter q{import};
 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
-                add_underlay pagetitle titlepage linkpage
+                add_underlay pagetitle titlepage linkpage newpagefile
                  %config %links %pagestate %wikistate %renderedfiles
                  %pagesources %destsources);
 our $VERSION = 2.00; # plugin interface version, next is ikiwiki version
@@ -198,6 +198,13 @@ sub getsetup () { #{{{
                safe => 0, # changing requires manual transition
                rebuild => 1,
        },
+       indexpages => {
+               type => "boolean",
+               defualt => 0,
+               description => "use page/index.mdwn source files",
+               safe => 1,
+               rebuild => 1,
+       },
        discussion => {
                type => "boolean",
                default => 1,
@@ -619,16 +626,32 @@ sub pagename ($) { #{{{
        my $type=pagetype($file);
        my $page=$file;
        $page=~s/\Q.$type\E*$// if defined $type && !$hooks{htmlize}{$type}{keepextension};
+       if ($config{indexpages} && $page=~/(.*)\/index$/) {
+               $page=$1;
+       }
        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 ($$) { #{{{
        my $page=shift;
        my $ext=shift;
        
-       if (! $config{usedirs} || $page =~ /^index$/ ) {
+       if (! $config{usedirs} || $page eq 'index') {
                return $page.".".$ext;
-       } else {
+       }
+       else {
                return $page."/index.".$ext;
        }
 } #}}}
index c7bd1875a2b1a6f6fb4161b84485c5a2235eaa23..26c5cc9ae209bd63c90adb573014c333ecb34644 100644 (file)
@@ -158,11 +158,11 @@ sub migrate_to_internal { #{{{
                next if $data->{expired};
                
                $config{aggregateinternal} = 0;
-               my $oldname = pagefile($data->{page});
+               my $oldname = "$config{srcdir}/".htmlfn($data->{page});
                my $oldoutput = $config{destdir}."/".IkiWiki::htmlpage($data->{page});
                
                $config{aggregateinternal} = 1;
-               my $newname = pagefile($data->{page});
+               my $newname = "$config{srcdir}/".htmlfn($data->{page});
                
                debug "moving $oldname -> $newname";
                if (-e $newname) {
@@ -364,13 +364,13 @@ sub garbage_collect () { #{{{
        foreach my $guid (values %guids) {
                # any guid whose feed is gone should be removed
                if (! exists $feeds{$guid->{feed}}) {
-                       unlink pagefile($guid->{page})
+                       unlink "$config{srcdir}/".htmlfn($guid->{page})
                                if exists $guid->{page};
                        delete $guids{$guid->{guid}};
                }
                # handle expired guids
                elsif ($guid->{expired} && exists $guid->{page}) {
-                       unlink pagefile($guid->{page});
+                       unlink "$config{srcdir}/".htmlfn($guid->{page});
                        delete $guid->{page};
                        delete $guid->{md5};
                }
@@ -570,7 +570,7 @@ sub add_page (@) { #{{{
                }
                my $c="";
                while (exists $IkiWiki::pagecase{lc $page.$c} ||
-                      -e pagefile($page.$c)) {
+                      -e "$config{srcdir}/".htmlfn($page.$c)) {
                        $c++
                }
 
@@ -581,7 +581,7 @@ sub add_page (@) { #{{{
                        $c="";
                        $page=$feed->{dir}."/item";
                        while (exists $IkiWiki::pagecase{lc $page.$c} ||
-                              -e pagefile($page.$c)) {
+                              -e "$config{srcdir}/".htmlfn($page.$c)) {
                                $c++
                        }
                }
@@ -621,7 +621,7 @@ sub add_page (@) { #{{{
        if (defined $mtime && $mtime <= time) {
                # Set the mtime, this lets the build process get the right
                # 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.
                $IkiWiki::pagectime{$guid->{page}}=$mtime;
        }
@@ -679,12 +679,6 @@ sub htmlabs ($$) { #{{{
        return $ret;
 } #}}}
 
-sub pagefile ($) { #{{{
-       my $page=shift;
-
-       return "$config{srcdir}/".htmlfn($page);
-} #}}}
-
 sub htmlfn ($) { #{{{
        return shift().".".($config{aggregateinternal} ? "_aggregated" : $config{htmlext});
 } #}}}
index 6ff06538f3a17d1a723d8384cd20d760a4bd167f..a79a06314900e42346e0cb4972e778a7b35df930 100644 (file)
@@ -21,7 +21,7 @@ sub getsetup () { #{{{
 
 sub genindex ($) { #{{{
        my $page=shift;
-       my $file=$page.".".$config{default_pageext};
+       my $file=newpagefile($page, $config{default_pageext});
        my $template=template("autoindex.tmpl");
        $template->param(page => $page);
        writefile($file, $config{srcdir}, $template->output);
index 8ab02cabc364f7f99b8cf1b963c3d9f1b36af562..794548c6de933d03f1e2755ae3ad8cdefc2ca8a8 100644 (file)
@@ -156,7 +156,7 @@ sub cgi_editpage ($$) { #{{{
                        $type=pagetype($pagesources{$from});
                }
                $type=$config{default_pageext} unless defined $type;
-               $file=$page.".".$type;
+               $file=newpagefile($page, $type);
                if (! $form->submitted) {
                        $form->field(name => "rcsinfo", value => "", force => 1);
                }
@@ -230,8 +230,8 @@ sub cgi_editpage ($$) { #{{{
                # Previewing may have created files on disk.
                # Keep a list of these to be deleted later.
                my %previews = map { $_ => 1 } @{$wikistate{editpage}{previews}};
-               foreach my $file (@{$renderedfiles{$page}}) {
-                       $previews{$file}=1 unless $wasrendered{$file};
+               foreach my $f (@{$renderedfiles{$page}}) {
+                       $previews{$f}=1 unless $wasrendered{$f};
                }
                @{$wikistate{editpage}{previews}} = keys %previews;
                $renderedfiles{$page}=[keys %wasrendered];
index 3ee457ff09e0d8bc7ff4b24e21cc8e6077839294..6c131487a3527c46c00b1ce57ca0a15936f04f49 100644 (file)
@@ -279,7 +279,7 @@ sub sessioncgi ($$) { #{{{
                                        $type=$ext;
                                }
                                
-                               $destfile.=".".$type;
+                               $destfile=newpagefile($dest, $type);
                        }
                        push @torename, {
                                src => $src,
@@ -292,17 +292,21 @@ sub sessioncgi ($$) { #{{{
                        # See if any subpages need to be renamed.
                        if ($q->param("subpages") && $src ne $dest) {
                                foreach my $p (keys %pagesources) {
-                                       if ($pagesources{$p}=~m/^\Q$src\E\//) {
-                                               my $d=$pagesources{$p};
-                                               $d=~s/^\Q$src\E\//$dest\//;
-                                               push @torename, {
-                                                       src => $p,
-                                                       srcfile => $pagesources{$p},
-                                                       dest => pagename($d),
-                                                       destfile => $d,
-                                                       required => 0,
-                                               };
-                                       }
+                                       next unless $pagesources{$p}=~m/^\Q$src\E\//;
+                                       # If indexpages is enabled, the
+                                       # srcfile should not be confused
+                                       # with a subpage.
+                                       next if $pagesources{$p} eq $srcfile;
+
+                                       my $d=$pagesources{$p};
+                                       $d=~s/^\Q$src\E\//$dest\//;
+                                       push @torename, {
+                                               src => $p,
+                                               srcfile => $pagesources{$p},
+                                               dest => pagename($d),
+                                               destfile => $d,
+                                               required => 0,
+                                       };
                                }
                        }
                        
index d7cbf38b5bb1cba9db2c39057acecb225c3d67e1..1320e4f413855402c17f8b421401e1d4d2c9716b 100644 (file)
@@ -25,6 +25,11 @@ ikiwiki (2.66) UNRELEASED; urgency=low
     page, and is preserved across rebuilds.
   * editpage: Be more aggressive (and less buggy) about cleaning up
     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
     authentication. Closes: #500524 
 
index 4e27d361d36d06353230318a5e31f98539f5dee4..1b78f5900b2de71ee10c4a4bd94f17c8c6d62bf1 100644 (file)
@@ -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
 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($$)`
 
 Passed a page and an extension, returns the filename that page will be
index 13ed492117143b231be13656f355113f0fe709c1..f030f9eea1ded22216fca48f3301d09dcb77dd16 100644 (file)
@@ -121,4 +121,6 @@ diff -ru ikiwiki-2.4/IkiWiki.pm ikiwiki/IkiWiki.pm
  
 </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
\ No newline at end of file
+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.