summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin/inline.pm
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2007-08-05 22:07:32 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2007-08-05 22:07:32 +0000
commit46a80d9cbe249d0acba26f1378d30c951f2f9cfd (patch)
tree281f7b493cb8658dfa67fe5b9fa800134bc05957 /IkiWiki/Plugin/inline.pm
parent8ca85b699d264986f01bc7122cb5ade3bd122bc6 (diff)
* Move blog form code out of CGI.pm and into the inline plugin.
Diffstat (limited to 'IkiWiki/Plugin/inline.pm')
-rw-r--r--IkiWiki/Plugin/inline.pm24
1 files changed, 24 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
index 08e1f2769..5378cc939 100644
--- a/IkiWiki/Plugin/inline.pm
+++ b/IkiWiki/Plugin/inline.pm
@@ -4,12 +4,14 @@ package IkiWiki::Plugin::inline;
use warnings;
use strict;
+use Encode;
use IkiWiki 2.00;
use URI;
sub import { #{{{
hook(type => "getopt", id => "inline", call => \&getopt);
hook(type => "checkconfig", id => "inline", call => \&checkconfig);
+ hook(type => "sessioncgi", id => "skeleton", call => \&sessioncgi);
hook(type => "preprocess", id => "inline",
call => \&IkiWiki::preprocess_inline);
hook(type => "pagetemplate", id => "inline",
@@ -19,6 +21,7 @@ sub import { #{{{
# pings interrupting page builds.
hook(type => "change", id => "inline",
call => \&IkiWiki::pingurl);
+
} # }}}
sub getopt () { #{{{
@@ -43,6 +46,27 @@ sub checkconfig () { #{{{
}
} #}}}
+sub sessioncgi () { #{{{
+ my $q=shift;
+ my $session=shift;
+
+ if ($q->param('do') eq 'blog') {
+ my $page=decode_utf8($q->param('title'));
+ $page=~s/\///g; # no slashes in blog posts
+ # if the page already exists, munge it to be unique
+ my $from=$q->param('from');
+ my $add="";
+ while (exists $IkiWiki::pagecase{lc($from."/".IkiWiki::titlepage($page).$add)}) {
+ $add=1 unless length $add;
+ $add++;
+ }
+ $q->param('page', $page.$add);
+ # now go create the page
+ $q->param('do', 'create');
+ IkiWiki::cgi_editpage($q, $session);
+ }
+}
+
# Back to ikiwiki namespace for the rest, this code is very much
# internal to ikiwiki even though it's separated into a plugin.
package IkiWiki;