diff options
Diffstat (limited to 'IkiWiki')
-rw-r--r-- | IkiWiki/Plugin/cutpaste.pm | 68 | ||||
-rw-r--r-- | IkiWiki/Plugin/toggle.pm | 2 |
2 files changed, 69 insertions, 1 deletions
diff --git a/IkiWiki/Plugin/cutpaste.pm b/IkiWiki/Plugin/cutpaste.pm new file mode 100644 index 000000000..b1161ba06 --- /dev/null +++ b/IkiWiki/Plugin/cutpaste.pm @@ -0,0 +1,68 @@ +#!/usr/bin/perl +package IkiWiki::Plugin::cutpaste; + +use warnings; +use strict; +use IkiWiki 2.00; +use UNIVERSAL; + +my %savedtext; + +sub import { #{{{ + hook(type => "preprocess", id => "cut", call => \&preprocess_cut, scan => 1); + hook(type => "preprocess", id => "copy", call => \&preprocess_copy, scan => 1); + hook(type => "preprocess", id => "paste", call => \&preprocess_paste); +} # }}} + +sub preprocess_cut (@) { #{{{ + my %params=@_; + + foreach my $param (qw{id text}) { + if (! exists $params{$param}) { + error sprintf(gettext('%s parameter is required'), $param); + } + } + + $savedtext{$params{page}} = {} if not exists $savedtext{$params{"page"}}; + $savedtext{$params{page}}->{$params{id}} = $params{text}; + + return "" if defined wantarray; +} # }}} + +sub preprocess_copy (@) { #{{{ + my %params=@_; + + foreach my $param (qw{id text}) { + if (! exists $params{$param}) { + error sprintf(gettext('%s parameter is required'), $param); + } + } + + $savedtext{$params{page}} = {} if not exists $savedtext{$params{"page"}}; + $savedtext{$params{page}}->{$params{id}} = $params{text}; + + return IkiWiki::preprocess($params{page}, $params{destpage}, + IkiWiki::filter($params{page}, $params{destpage}, $params{text})) if defined wantarray; +} # }}} + +sub preprocess_paste (@) { #{{{ + my %params=@_; + + foreach my $param (qw{id}) { + if (! exists $params{$param}) { + error sprintf(gettext('%s parameter is required'), $param); + } + } + + if (! exists $savedtext{$params{page}}) { + error gettext('no text was copied in this page'); + } + if (! exists $savedtext{$params{page}}->{$params{id}}) { + error sprintf(gettext('no text was copied in this page with id %s'), $params{id}); + } + + return IkiWiki::preprocess($params{page}, $params{destpage}, + IkiWiki::filter($params{page}, $params{destpage}, $savedtext{$params{page}}->{$params{id}})); +} # }}} + +1; diff --git a/IkiWiki/Plugin/toggle.pm b/IkiWiki/Plugin/toggle.pm index cd9617e25..e203defb0 100644 --- a/IkiWiki/Plugin/toggle.pm +++ b/IkiWiki/Plugin/toggle.pm @@ -110,7 +110,7 @@ sub preprocess_toggleable (@) { #{{{ sub format (@) { #{{{ my %params=@_; - if ($params{content}=~s!(<div class="toggleable(?:-open)?" id="[^"]+">)</div>!$1!g) { + if ($params{content}=~s!(<div class="toggleable(?:-open)?" id="[^"]+">\s*)</div>!$1!g) { $params{content}=~s/<div class="toggleableend">//g; if (! ($params{content}=~s!^<body>!<body>$javascript!m)) { # no </body> tag, probably in preview mode |