Merge branch 'next'
commit
ffec680608
52
IkiWiki.pm
52
IkiWiki.pm
|
@ -24,7 +24,7 @@ our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
|
|||
inject
|
||||
%config %links %pagestate %wikistate %renderedfiles
|
||||
%pagesources %destsources);
|
||||
our $VERSION = 2.00; # plugin interface version, next is ikiwiki version
|
||||
our $VERSION = 3.00; # plugin interface version, next is ikiwiki version
|
||||
our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE
|
||||
my $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE
|
||||
|
||||
|
@ -194,7 +194,7 @@ sub getsetup () {
|
|||
},
|
||||
prefix_directives => {
|
||||
type => "boolean",
|
||||
default => 0,
|
||||
default => 1,
|
||||
description => "use '!'-prefixed preprocessor directives?",
|
||||
safe => 0, # changing requires manual transition
|
||||
rebuild => 1,
|
||||
|
@ -1600,40 +1600,6 @@ sub rcs_receive () {
|
|||
$hooks{rcs}{rcs_receive}{call}->();
|
||||
}
|
||||
|
||||
sub globlist_to_pagespec ($) {
|
||||
my @globlist=split(' ', shift);
|
||||
|
||||
my (@spec, @skip);
|
||||
foreach my $glob (@globlist) {
|
||||
if ($glob=~/^!(.*)/) {
|
||||
push @skip, $glob;
|
||||
}
|
||||
else {
|
||||
push @spec, $glob;
|
||||
}
|
||||
}
|
||||
|
||||
my $spec=join(' or ', @spec);
|
||||
if (@skip) {
|
||||
my $skip=join(' and ', @skip);
|
||||
if (length $spec) {
|
||||
$spec="$skip and ($spec)";
|
||||
}
|
||||
else {
|
||||
$spec=$skip;
|
||||
}
|
||||
}
|
||||
return $spec;
|
||||
}
|
||||
|
||||
sub is_globlist ($) {
|
||||
my $s=shift;
|
||||
my $ret= ( $s =~ /[^\s]+\s+([^\s]+)/ && $1 ne "and" && $1 ne "or" );
|
||||
print STDERR "warning: deprecated GlobList style PageSpec \"$s\" will stop working in ikiwiki version 3.0\n"
|
||||
if $ret && $s !~ /TMPL_VAR/; # hack alert
|
||||
return $ret;
|
||||
}
|
||||
|
||||
sub safequote ($) {
|
||||
my $s=shift;
|
||||
$s=~s/[{}]//g;
|
||||
|
@ -1725,26 +1691,12 @@ sub pagespec_merge ($$) {
|
|||
my $b=shift;
|
||||
|
||||
return $a if $a eq $b;
|
||||
|
||||
# Support for old-style GlobLists.
|
||||
if (is_globlist($a)) {
|
||||
$a=globlist_to_pagespec($a);
|
||||
}
|
||||
if (is_globlist($b)) {
|
||||
$b=globlist_to_pagespec($b);
|
||||
}
|
||||
|
||||
return "($a) or ($b)";
|
||||
}
|
||||
|
||||
sub pagespec_translate ($) {
|
||||
my $spec=shift;
|
||||
|
||||
# Support for old-style GlobLists.
|
||||
if (is_globlist($spec)) {
|
||||
$spec=globlist_to_pagespec($spec);
|
||||
}
|
||||
|
||||
# Convert spec to perl code.
|
||||
my $code="";
|
||||
while ($spec=~m{
|
||||
|
|
|
@ -203,25 +203,9 @@ sub cgi_prefs ($$) {
|
|||
|
||||
my $user_name=$session->param("name");
|
||||
|
||||
# XXX deprecated, should be removed eventually
|
||||
$form->field(name => "banned_users", size => 50, fieldset => "admin");
|
||||
if (! is_admin($user_name)) {
|
||||
$form->field(name => "banned_users", type => "hidden");
|
||||
}
|
||||
if (! $form->submitted) {
|
||||
$form->field(name => "email", force => 1,
|
||||
value => userinfo_get($user_name, "email"));
|
||||
if (is_admin($user_name)) {
|
||||
my $value=join(" ", get_banned_users());
|
||||
if (length $value) {
|
||||
$form->field(name => "banned_users", force => 1,
|
||||
value => join(" ", get_banned_users()),
|
||||
comment => "deprecated; please move to banned_users in setup file");
|
||||
}
|
||||
else {
|
||||
$form->field(name => "banned_users", type => "hidden");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($form->submitted eq 'Logout') {
|
||||
|
@ -239,17 +223,6 @@ sub cgi_prefs ($$) {
|
|||
error("failed to set email");
|
||||
}
|
||||
|
||||
# XXX deprecated, should be removed eventually
|
||||
if (is_admin($user_name)) {
|
||||
set_banned_users(grep { ! is_admin($_) }
|
||||
split(' ',
|
||||
$form->field("banned_users"))) ||
|
||||
error("failed saving changes");
|
||||
if (! length $form->field("banned_users")) {
|
||||
$form->field(name => "banned_users", type => "hidden");
|
||||
}
|
||||
}
|
||||
|
||||
$form->text(gettext("Preferences saved."));
|
||||
}
|
||||
|
||||
|
@ -262,10 +235,7 @@ sub check_banned ($$) {
|
|||
|
||||
my $name=$session->param("name");
|
||||
if (defined $name) {
|
||||
# XXX banned in userinfo is deprecated, should be removed
|
||||
# eventually, and only banned_users be checked.
|
||||
if (userinfo_get($session->param("name"), "banned") ||
|
||||
grep { $name eq $_ } @{$config{banned_users}}) {
|
||||
if (grep { $name eq $_ } @{$config{banned_users}}) {
|
||||
print $q->header(-status => "403 Forbidden");
|
||||
$session->delete();
|
||||
print gettext("You are banned.");
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::aggregate;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use HTML::Parser;
|
||||
use HTML::Tagset;
|
||||
use HTML::Entities;
|
||||
|
@ -46,7 +46,7 @@ sub getsetup () {
|
|||
},
|
||||
aggregateinternal => {
|
||||
type => "boolean",
|
||||
example => 0,
|
||||
example => 1,
|
||||
description => "enable aggregation to internal pages?",
|
||||
safe => 0, # enabling needs manual transition
|
||||
rebuild => 0,
|
||||
|
@ -61,6 +61,10 @@ sub getsetup () {
|
|||
}
|
||||
|
||||
sub checkconfig () {
|
||||
if (! defined $config{aggregateinternal}) {
|
||||
$config{aggregateinternal}=1;
|
||||
}
|
||||
|
||||
if ($config{aggregate} && ! ($config{post_commit} &&
|
||||
IkiWiki::commit_hook_enabled())) {
|
||||
launchaggregation();
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::amazon_s3;
|
|||
use warnings;
|
||||
no warnings 'redefine';
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use IkiWiki::Render;
|
||||
use Net::Amazon::S3;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::anonok;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "anonok", call => \&getsetup);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::attachment;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
add_underlay("javascript");
|
||||
|
@ -61,23 +61,6 @@ sub check_canattach ($$;$) {
|
|||
);
|
||||
}
|
||||
|
||||
# XXX deprecated, should be removed eventually
|
||||
if ($allowed) {
|
||||
foreach my $admin (@{$config{adminuser}}) {
|
||||
my $allowed_attachments=IkiWiki::userinfo_get($admin, "allowed_attachments");
|
||||
if (defined $allowed_attachments &&
|
||||
length $allowed_attachments) {
|
||||
$allowed=pagespec_match($dest,
|
||||
$allowed_attachments,
|
||||
file => $file,
|
||||
user => $session->param("name"),
|
||||
ip => $ENV{REMOTE_ADDR},
|
||||
);
|
||||
last if $allowed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (! $allowed) {
|
||||
error(gettext("prohibited by allowed_attachments")." ($allowed)");
|
||||
}
|
||||
|
@ -120,39 +103,6 @@ sub formbuilder_setup (@) {
|
|||
$form->tmpl_param("attachments-class" => "toggleable-open");
|
||||
}
|
||||
}
|
||||
elsif ($form->title eq "preferences") {
|
||||
# XXX deprecated, should remove eventually
|
||||
my $session=$params{session};
|
||||
my $user_name=$session->param("name");
|
||||
|
||||
$form->field(name => "allowed_attachments", size => 50,
|
||||
fieldset => "admin",
|
||||
comment => "deprecated; please move to allowed_attachments in setup file",
|
||||
);
|
||||
if (! IkiWiki::is_admin($user_name)) {
|
||||
$form->field(name => "allowed_attachments", type => "hidden");
|
||||
}
|
||||
if (! $form->submitted) {
|
||||
my $value=IkiWiki::userinfo_get($user_name, "allowed_attachments");
|
||||
if (length $value) {
|
||||
$form->field(name => "allowed_attachments", force => 1,
|
||||
value => IkiWiki::userinfo_get($user_name, "allowed_attachments"));
|
||||
}
|
||||
else {
|
||||
$form->field(name => "allowed_attachments", type => "hidden");
|
||||
}
|
||||
}
|
||||
if ($form->submitted && $form->submitted eq 'Save Preferences') {
|
||||
if (defined $form->field("allowed_attachments")) {
|
||||
IkiWiki::userinfo_set($user_name, "allowed_attachments",
|
||||
$form->field("allowed_attachments")) ||
|
||||
error("failed to set allowed_attachments");
|
||||
if (! length $form->field("allowed_attachments")) {
|
||||
$form->field(name => "allowed_attachments", type => "hidden");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub formbuilder (@) {
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::autoindex;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use Encode;
|
||||
|
||||
sub import {
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::brokenlinks;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "brokenlinks", call => \&getsetup);
|
||||
|
|
|
@ -20,7 +20,7 @@ package IkiWiki::Plugin::calendar;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use Time::Local;
|
||||
use POSIX;
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::camelcase;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
# This regexp is based on the one in Text::WikiFormat.
|
||||
my $link_regexp=qr{
|
||||
|
|
|
@ -5,7 +5,7 @@ package IkiWiki::Plugin::color;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "preprocess", id => "color", call => \&preprocess);
|
||||
|
|
|
@ -7,7 +7,7 @@ package IkiWiki::Plugin::comments;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use Encode;
|
||||
use POSIX qw(strftime);
|
||||
|
||||
|
@ -506,7 +506,10 @@ sub sessioncgi ($$) {
|
|||
error($conflict) if defined $conflict;
|
||||
|
||||
# Jump to the new comment on the page.
|
||||
IkiWiki::redirect($cgi, urlto($page, undef, 1)."#$location");
|
||||
# The trailing question mark tries to avoid broken
|
||||
# caches and get the most recent version of the page.
|
||||
IkiWiki::redirect($cgi, urlto($page, undef, 1)."#$location?updated");
|
||||
|
||||
}
|
||||
else {
|
||||
IkiWiki::showform ($form, \@buttons, $session, $cgi,
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::conditional;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use UNIVERSAL;
|
||||
|
||||
sub import {
|
||||
|
|
|
@ -5,7 +5,7 @@ package IkiWiki::Plugin::creole;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "creole", call => \&getsetup);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::cutpaste;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my %savedtext;
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# Discordian date support fnord ikiwiki.
|
||||
package IkiWiki::Plugin::ddate;
|
||||
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
no warnings;
|
||||
|
||||
sub import {
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::editdiff;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use HTML::Entities;
|
||||
use IPC::Open2;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::edittemplate;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use HTML::Template;
|
||||
use Encode;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::embed;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my $attribr=qr/[^<>"]+/;
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ package IkiWiki::Plugin::external;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use RPC::XML;
|
||||
use RPC::XML::Parser;
|
||||
use IPC::Open2;
|
||||
|
|
|
@ -5,7 +5,7 @@ package IkiWiki::Plugin::favicon;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "favicon", call => \&getsetup);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::filecheck;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my %units=( #{{{ # size in bytes
|
||||
B => 1,
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::format;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "preprocess", id => "format", call => \&preprocess);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::fortune;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "fortune", call => \&getsetup);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::goodstuff;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my @bundle=qw{
|
||||
brokenlinks
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::google;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use URI;
|
||||
|
||||
my $host;
|
||||
|
|
|
@ -1,57 +0,0 @@
|
|||
#!/usr/bin/perl
|
||||
package IkiWiki::Plugin::googlecalendar;
|
||||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
|
||||
print STDERR "warning: the googlecalendar plugin is deprecated and will be removed in ikiwiki 3.0 (use the embed plugin instead)\n";
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "googlecalendar",
|
||||
call => \&getsetup);
|
||||
hook(type => "preprocess", id => "googlecalendar",
|
||||
call => \&preprocess);
|
||||
hook(type => "format", id => "googlecalendar",
|
||||
call => \&format);
|
||||
}
|
||||
|
||||
sub getsetup () {
|
||||
return
|
||||
plugin => {
|
||||
safe => 1,
|
||||
rebuild => undef,
|
||||
},
|
||||
}
|
||||
|
||||
sub preprocess (@) {
|
||||
my %params=@_;
|
||||
|
||||
# Parse the html, looking for the url to embed for the calendar.
|
||||
# Avoid XSS attacks..
|
||||
my ($url)=$params{html}=~m#iframe\s+src="http://www\.google\.com/calendar/embed\?([^"<>]+)"#;
|
||||
if (! defined $url || ! length $url) {
|
||||
error gettext("failed to find url in html")
|
||||
}
|
||||
my ($height)=$params{html}=~m#height="(\d+)"#;
|
||||
my ($width)=$params{html}=~m#width="(\d+)"#;
|
||||
|
||||
return "<div class=\"googlecalendar\" src=\"$url\" height=\"$height\" width=\"$width\"></div>";
|
||||
}
|
||||
|
||||
sub format (@) {
|
||||
my %params=@_;
|
||||
|
||||
$params{content}=~s/<div class=\"googlecalendar" src="([^"]+)" height="([^"]+)" width="([^"]+)"><\/div>/gencal($1,$2,$3)/eg;
|
||||
|
||||
return $params{content};
|
||||
}
|
||||
|
||||
sub gencal ($$$) {
|
||||
my $url=shift;
|
||||
my $height=shift;
|
||||
my $width=shift;
|
||||
return qq{<iframe src="http://www.google.com/calendar/embed?$url" style=" border-width:0 " width="$width" frameborder="0" height="$height"></iframe>};
|
||||
}
|
||||
|
||||
1
|
|
@ -5,7 +5,7 @@ package IkiWiki::Plugin::graphviz;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use IPC::Open2;
|
||||
|
||||
sub import {
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::haiku;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "haiku", call => \&getsetup);
|
||||
|
|
|
@ -10,7 +10,7 @@ package IkiWiki::Plugin::hnb;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use File::Temp qw(:mktemp);
|
||||
|
||||
sub import {
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::html;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "html", call => \&getsetup);
|
||||
|
|
|
@ -9,8 +9,7 @@ package IkiWiki::Plugin::htmlbalance;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use HTML::TreeBuilder;
|
||||
use IkiWiki 3.00;
|
||||
use HTML::Entities;
|
||||
|
||||
sub import {
|
||||
|
@ -30,6 +29,8 @@ sub sanitize (@) {
|
|||
my %params=@_;
|
||||
my $ret = '';
|
||||
|
||||
eval q{use HTML::TreeBuilder};
|
||||
error $@ if $@;
|
||||
my $tree = HTML::TreeBuilder->new();
|
||||
$tree->ignore_unknown(0);
|
||||
$tree->ignore_ignorable_whitespace(0);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::htmlscrubber;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
# This regexp matches urls that are in a known safe scheme.
|
||||
# Feel free to use it from other plugins.
|
||||
|
|
|
@ -9,7 +9,7 @@ package IkiWiki::Plugin::htmltidy;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use IPC::Open2;
|
||||
|
||||
sub import {
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::httpauth;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "httpauth", call => \&getsetup);
|
||||
|
|
|
@ -5,7 +5,7 @@ package IkiWiki::Plugin::img;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my %imgdefaults;
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ package IkiWiki::Plugin::inline;
|
|||
use warnings;
|
||||
use strict;
|
||||
use Encode;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use URI;
|
||||
|
||||
my %knownfeeds;
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::link;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my $link_regexp;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::linkmap;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use IPC::Open2;
|
||||
|
||||
sub import {
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::listdirectives;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
add_underlay("directives");
|
||||
|
|
|
@ -3,13 +3,11 @@ package IkiWiki::Plugin::lockedit;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "lockedit", call => \&getsetup);
|
||||
hook(type => "canedit", id => "lockedit", call => \&canedit);
|
||||
hook(type => "formbuilder_setup", id => "lockedit",
|
||||
call => \&formbuilder_setup);
|
||||
}
|
||||
|
||||
sub getsetup () {
|
||||
|
@ -52,63 +50,7 @@ sub canedit ($$) {
|
|||
}
|
||||
}
|
||||
|
||||
# XXX deprecated, should be removed eventually
|
||||
foreach my $admin (@{$config{adminuser}}) {
|
||||
if (pagespec_match($page, IkiWiki::userinfo_get($admin, "locked_pages"),
|
||||
user => $session->param("name"),
|
||||
ip => $ENV{REMOTE_ADDR},
|
||||
)) {
|
||||
if (! defined $user ||
|
||||
! IkiWiki::userinfo_get($session->param("name"), "regdate")) {
|
||||
return sub { IkiWiki::needsignin($cgi, $session) };
|
||||
}
|
||||
else {
|
||||
return sprintf(gettext("%s is locked and cannot be edited"),
|
||||
htmllink("", "", $page, noimageinline => 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return undef;
|
||||
}
|
||||
|
||||
sub formbuilder_setup (@) {
|
||||
my %params=@_;
|
||||
|
||||
# XXX deprecated, should be removed eventually
|
||||
my $form=$params{form};
|
||||
if ($form->title eq "preferences") {
|
||||
my $session=$params{session};
|
||||
my $cgi=$params{cgi};
|
||||
my $user_name=$session->param("name");
|
||||
|
||||
$form->field(name => "locked_pages", size => 50,
|
||||
fieldset => "admin",
|
||||
comment => "deprecated; please move to locked_pages in setup file"
|
||||
);
|
||||
if (! IkiWiki::is_admin($user_name)) {
|
||||
$form->field(name => "locked_pages", type => "hidden");
|
||||
}
|
||||
if (! $form->submitted) {
|
||||
my $value=IkiWiki::userinfo_get($user_name, "locked_pages");
|
||||
if (length $value) {
|
||||
$form->field(name => "locked_pages", force => 1, value => $value);
|
||||
}
|
||||
else {
|
||||
$form->field(name => "locked_pages", type => "hidden");
|
||||
}
|
||||
}
|
||||
if ($form->submitted && $form->submitted eq 'Save Preferences') {
|
||||
if (defined $form->field("locked_pages")) {
|
||||
IkiWiki::userinfo_set($user_name, "locked_pages",
|
||||
$form->field("locked_pages")) ||
|
||||
error("failed to set locked_pages");
|
||||
if (! length $form->field("locked_pages")) {
|
||||
$form->field(name => "locked_pages", type => "hidden");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
1
|
||||
|
|
|
@ -9,7 +9,7 @@ package IkiWiki::Plugin::map;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "map", call => \&getsetup);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::mdwn;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "mdwn", call => \&getsetup);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::meta;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my %metaheaders;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::mirrorlist;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "mirrorlist", call => \&getsetup);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::more;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my $linktext = gettext("more");
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::opendiscussion;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "opendiscussion", call => \&getsetup);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::openid;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getopt", id => "openid", call => \&getopt);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::orphans;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "orphans", call => \&getsetup);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::otl;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use open qw{:utf8 :std};
|
||||
|
||||
sub import {
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::pagecount;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "pagecount", call => \&getsetup);
|
||||
|
|
|
@ -12,7 +12,7 @@ package IkiWiki::Plugin::pagestats;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
# Names of the HTML classes to use for the tag cloud
|
||||
our @classes = ('smallestPC', 'smallPC', 'normalPC', 'bigPC', 'biggestPC' );
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::pagetemplate;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my %templates;
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::parentlinks;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "parentlinks", id => "parentlinks", call => \&parentlinks);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::passwordauth;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "passwordauth", "call" => \&getsetup);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::pingee;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "pingee", call => \&getsetup);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::pinger;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my %pages;
|
||||
my $pinged=0;
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::poll;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use Encode;
|
||||
|
||||
sub import {
|
||||
|
|
|
@ -7,7 +7,7 @@ package IkiWiki::Plugin::polygen;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use File::Find;
|
||||
|
||||
sub import {
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::postsparkline;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
IkiWiki::loadplugin('sparkline');
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/perl
|
||||
package IkiWiki::Plugin::prettydate;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use warnings;
|
||||
no warnings 'redefine';
|
||||
use strict;
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::progress;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my $percentage_pattern = qr/[0-9]+\%?/; # pattern to validate percentages
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::rawhtml;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "rawhtml", call => \&getsetup);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::recentchanges;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use Encode;
|
||||
use HTML::Entities;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::recentchangesdiff;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use HTML::Entities;
|
||||
|
||||
my $maxlines=200;
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::relativedate;
|
|||
use warnings;
|
||||
no warnings 'redefine';
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use POSIX;
|
||||
use Encode;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::remove;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "remove", call => \&getsetup);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::rename;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "rename", call => \&getsetup);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::search;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "search", call => \&getsetup);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::shortcut;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "shortcut", call => \&getsetup);
|
||||
|
|
|
@ -6,7 +6,7 @@ package IkiWiki::Plugin::sidebar;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "sidebar", call => \&getsetup);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::signinedit;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "signinedit", call => \&getsetup);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::smiley;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my %smileys;
|
||||
my $smiley_regexp;
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::sparkline;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use IPC::Open2;
|
||||
|
||||
my $match_num=qr/[-+]?[0-9]+(?:\.[0-9]+)?/;
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::table;
|
|||
use warnings;
|
||||
use strict;
|
||||
use Encode;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "table", call => \&getsetup);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::tag;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my %tags;
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::template;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use HTML::Template;
|
||||
use Encode;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::testpagespec;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "testpagespec", call => \&getsetup);
|
||||
|
|
|
@ -8,7 +8,7 @@ use strict;
|
|||
use Digest::MD5 qw(md5_hex);
|
||||
use File::Temp qw(tempdir);
|
||||
use HTML::Entities;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
my $default_prefix = <<EOPREFIX;
|
||||
\\documentclass{article}
|
||||
|
|
|
@ -6,7 +6,7 @@ package IkiWiki::Plugin::textile;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use Encode;
|
||||
|
||||
sub import {
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::toc;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use HTML::Parser;
|
||||
|
||||
sub import {
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::toggle;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
add_underlay("javascript");
|
||||
|
|
|
@ -8,7 +8,7 @@ package IkiWiki::Plugin::txt;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
use HTML::Entities;
|
||||
|
||||
my $findurl=0;
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::typography;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getopt", id => "typography", call => \&getopt);
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::version;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "version", call => \&getsetup);
|
||||
|
|
|
@ -3,7 +3,7 @@ package IkiWiki::Plugin::websetup;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "websetup", call => \&getsetup);
|
||||
|
@ -139,7 +139,7 @@ sub showfields ($$$@) {
|
|||
my $value=$config{$key};
|
||||
|
||||
if ($info{safe} && (ref $value eq 'ARRAY' || ref $info{example} eq 'ARRAY')) {
|
||||
$value=[@{$value}, "", ""]; # blank items for expansion
|
||||
$value=[(ref $value eq 'ARRAY' ? @{$value} : ""), "", ""]; # blank items for expansion
|
||||
}
|
||||
|
||||
if ($info{type} eq "string") {
|
||||
|
|
|
@ -4,7 +4,7 @@ package IkiWiki::Plugin::wikitext;
|
|||
|
||||
use warnings;
|
||||
use strict;
|
||||
use IkiWiki 2.00;
|
||||
use IkiWiki 3.00;
|
||||
|
||||
sub import {
|
||||
hook(type => "getsetup", id => "wiki", call => \&getsetup);
|
||||
|
|
|
@ -74,24 +74,4 @@ sub is_admin ($) {
|
|||
return grep { $_ eq $user_name } @{$config{adminuser}};
|
||||
}
|
||||
|
||||
# XXX deprecated, should be removed eventually
|
||||
sub get_banned_users () {
|
||||
my @ret;
|
||||
my $userinfo=userinfo_retrieve();
|
||||
foreach my $user (keys %{$userinfo}) {
|
||||
push @ret, $user if $userinfo->{$user}->{banned};
|
||||
}
|
||||
return @ret;
|
||||
}
|
||||
|
||||
# XXX deprecated, should be removed eventually
|
||||
sub set_banned_users (@) {
|
||||
my %banned=map { $_ => 1 } @_;
|
||||
my $userinfo=userinfo_retrieve();
|
||||
foreach my $user (keys %{$userinfo}) {
|
||||
$userinfo->{$user}->{banned} = $banned{$user};
|
||||
}
|
||||
return userinfo_store($userinfo);
|
||||
}
|
||||
|
||||
1
|
||||
|
|
|
@ -40,6 +40,5 @@ IkiWiki::Setup::Automator->import(
|
|||
rss => 1,
|
||||
atom => 1,
|
||||
syslog => 1,
|
||||
prefix_directives => 1,
|
||||
hardlink => 1,
|
||||
)
|
||||
|
|
|
@ -1,3 +1,12 @@
|
|||
ikiwiki (3.00) unstable; urgency=low
|
||||
|
||||
The 3.0 release of ikiwiki changes several defaults and finishes
|
||||
some transitions. You will need to modify your wikis to work with
|
||||
ikiwiki 3.0. A document explaining the process is available
|
||||
in </usr/share/doc/ikiwiki/html/tips/upgrade_to_3.0.html>
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Tue, 23 Dec 2008 16:14:18 -0500
|
||||
|
||||
ikiwiki (2.62) unstable; urgency=low
|
||||
|
||||
TexImg standard preamble changed
|
||||
|
@ -101,10 +110,7 @@ ikiwiki (2.40) unstable; urgency=low
|
|||
in their setup files.
|
||||
|
||||
To convert your wiki to the new syntax, ikiwiki provides a new script
|
||||
ikiwiki-transition. It will convert preprocessor directives in
|
||||
all files given on the command line. To convert an entire wiki:
|
||||
|
||||
find wikidir/ -type f -name '*.mdwn' -print0 | xargs -0 ikiwiki-transition prefix_directives
|
||||
ikiwiki-transition.
|
||||
|
||||
Even with prefix_directives disabled, ikiwiki now allows an optional '!'
|
||||
prefix on preprocessor directives (but still requires a space). Thus, a
|
||||
|
|
|
@ -1,3 +1,30 @@
|
|||
ikiwiki (3.00) UNRELEASED; urgency=low
|
||||
|
||||
* Remove support for GlobLists.
|
||||
* Remove support for configuring allowed attachments, locked pages,
|
||||
and banned users from the admin preferences page. These can only be
|
||||
controlled via the setup file now.
|
||||
* ikiwiki-transition moveprefs can be used to move the above
|
||||
admin preferences into a setup file.
|
||||
* prefix_directives and aggregate_internal are now turned on by default.
|
||||
* ikiwiki-transition prefix_directives syntax changed
|
||||
* googlecalendar: removed this deprecated plugin. Use htmlscrubber_skip
|
||||
instead.
|
||||
* embed: This plugin is deprecated, use htmlscrubber_skip instead.
|
||||
Closes: ##462970.
|
||||
* Version 3.00 of the plugin API.
|
||||
* Replace blank OpenID placeholder logo with an unofficial OpenID
|
||||
logo developed by Anna Hess. The official logo does not seem destined to
|
||||
be free.
|
||||
* comments: Add cache avoidance.
|
||||
* htmlbalance: Demand-load HTML::TreeBuilder to avoid failing test suite
|
||||
if it is not present.
|
||||
* French translation update from Philippe Batailler. Closes: #510216
|
||||
* websetup: Avoid a crash when a new array setup item has been added in
|
||||
a new ikiwiki release, and is thus not present in the setup file yet.
|
||||
|
||||
-- Joey Hess <joeyh@debian.org> Wed, 24 Dec 2008 19:49:36 -0500
|
||||
|
||||
ikiwiki (2.72) unstable; urgency=low
|
||||
|
||||
* Avoid comments in recentchanges being broken links (smcv)
|
||||
|
|
|
@ -8,24 +8,23 @@ ikiwiki-transition type ...
|
|||
|
||||
# DESCRIPTION
|
||||
|
||||
`ikiwiki-transition` aids in converting wiki pages when
|
||||
there's a major change in ikiwiki syntax. It also handles other transitions
|
||||
not involving wiki pages.
|
||||
`ikiwiki-transition` aids in converting wiki pages when there's a major
|
||||
change in ikiwiki syntax. It also handles other transitions not involving
|
||||
wiki pages.
|
||||
|
||||
# prefix_directives
|
||||
# prefix_directives your.setup
|
||||
|
||||
The `prefix_directives` mode converts the specified ikiwiki page from
|
||||
the old preprocessor directive syntax, requiring a space, to the new
|
||||
syntax, prefixed by '!'.
|
||||
The `prefix_directives` mode converts all pages from the old preprocessor
|
||||
directive syntax, requiring a space, to the new syntax, prefixed by '!'.
|
||||
|
||||
Preprocessor directives which already use the new syntax will remain
|
||||
unchanged.
|
||||
|
||||
Note that if the page contains wiki links with spaces, which some
|
||||
Note that if a page contains wiki links with spaces, which some
|
||||
older versions of ikiwiki accepted, the prefix_directives transition will
|
||||
treat these as preprocessor directives and convert them.
|
||||
|
||||
# setupformat
|
||||
# setupformat your.setup
|
||||
|
||||
The `setupformat` mode converts a setup file from using a single `wrappers` block
|
||||
to using `cgi_wrapper`, `git_wrapper`, etc.
|
||||
|
@ -33,25 +32,30 @@ to using `cgi_wrapper`, `git_wrapper`, etc.
|
|||
Note that all comments and any unusual stuff like perl code in the setup
|
||||
file will be lost, as it is entirely rewritten by the transition.
|
||||
|
||||
# aggregateinternal
|
||||
# aggregateinternal your.setup
|
||||
|
||||
The `aggregateinternal` mode moves pages aggregated by the aggregate plugin
|
||||
so that the `aggregateinternal` option can be enabled.
|
||||
|
||||
# indexdb
|
||||
# moveprefs your.setup
|
||||
|
||||
Moves values that used to be admin preferences into the setup file.
|
||||
|
||||
Note that all comments and any unusual stuff like perl code in the setup
|
||||
file will be lost, as it is entirely rewritten by the move.
|
||||
|
||||
# indexdb srcdir
|
||||
|
||||
The `indexdb` mode handles converting a plain text `.ikiwiki/index` file to
|
||||
a binary `.ikiwiki/indexdb`. In this mode, you should specify the srcdir of
|
||||
the wiki as the second parameter. You do not normally need to run
|
||||
a binary `.ikiwiki/indexdb`. You do not normally need to run
|
||||
`ikiwiki-transition indexdb`; ikiwiki will automatically run it as
|
||||
necessary.
|
||||
|
||||
# hashpassword
|
||||
# hashpassword srcdir
|
||||
|
||||
The `hashpassword` mode forces any plaintext passwords stored in the
|
||||
`.ikiwiki/userdb` file to be replaced with password hashes. (The
|
||||
Authen::Passphrase perl module is needed to do this.) In this mode, you
|
||||
should specify the srcdir of the wiki as the second parameter.
|
||||
Authen::Passphrase perl module is needed to do this.)
|
||||
|
||||
If this is not done explicitly, a user's plaintext password will be
|
||||
automatically converted to a hash when a user logs in for the first time
|
||||
|
|
|
@ -28,15 +28,13 @@ of text with triple-quotes:
|
|||
3. "baz"
|
||||
"""]]
|
||||
|
||||
ikiwiki also has an older syntax for directives, which requires a
|
||||
space in directives to distinguish them from [[wikilinks|ikiwiki/wikilink]].
|
||||
This syntax has several disadvantages: it requires a space after directives
|
||||
with no parameters (such as `\[[pagecount ]]`), and it prohibits spaces in
|
||||
[[wikilinks|ikiwiki/wikilink]]. ikiwiki now provides the `!`-prefixed syntax
|
||||
shown above as the preferred alternative. However, ikiwiki still supports
|
||||
wikis using the older syntax, if the `prefix_directives` option is not enabled.
|
||||
For backward compatibility with existing wikis, this option currently
|
||||
defaults to off, so ikiwiki supports the old syntax.
|
||||
ikiwiki also has an older syntax for directives, which requires a space in
|
||||
directives to distinguish them from [[wikilinks|ikiwiki/wikilink]]. This
|
||||
syntax has several disadvantages: it requires a space after directives with
|
||||
no parameters (such as `\[[pagecount ]]`), and it prohibits spaces in
|
||||
[[wikilinks|ikiwiki/wikilink]]. ikiwiki now provides the `!`-prefixed
|
||||
syntax shown above as default. However, ikiwiki still supports wikis using
|
||||
the older syntax, if the `prefix_directives` option is disabled.
|
||||
|
||||
[[!if test="enabled(listdirectives)" then="""
|
||||
Here is a list of currently available directives in this wiki:
|
||||
|
|
|
@ -72,22 +72,3 @@ filenames of the pages in the wiki, so a pagespec "foo" used on page
|
|||
"a/b" will not match a page named "a/foo" or "a/b/foo". To match
|
||||
relative to the directory of the page containing the pagespec, you can
|
||||
use "./". For example, "./foo" on page "a/b" matches page "a/foo".
|
||||
|
||||
## Old syntax
|
||||
|
||||
The old PageSpec syntax was called a "GlobList", and worked differently in
|
||||
two ways:
|
||||
|
||||
1. "and" and "or" were not used; any page matching any item from the list
|
||||
matched.
|
||||
2. If an item was prefixed with "`!`", then no page matching that item
|
||||
matched, even if it matched an earlier list item.
|
||||
|
||||
For example, here is the old way to match all pages except for the SandBox
|
||||
and Discussion pages:
|
||||
|
||||
* !SandBox !*/Discussion
|
||||
|
||||
Using this old syntax is still supported. However, the old syntax is
|
||||
deprecated and will be removed at some point, and using the new syntax is
|
||||
recommended.
|
||||
|
|
|
@ -5,10 +5,6 @@ This plugin allows content from other feeds to be aggregated into the
|
|||
wiki. To specify feeds to aggregate, use the
|
||||
[[ikiwiki/directive/aggregate]] [[ikiwiki/directive]].
|
||||
|
||||
New users of aggregate should enable the `aggregateinternal => 1` option in the
|
||||
.setup file. If you don't do so, you will need to enable the [[html]] plugin
|
||||
as well as aggregate itself, since feed entries will be stored as HTML.
|
||||
|
||||
The [[meta]] and [[tag]] plugins are also recommended. Either the
|
||||
[[htmltidy]] or [[htmlbalance]] plugin is suggested, since feeds can easily
|
||||
contain html problems, some of which these plugins can fix.
|
||||
|
@ -27,37 +23,19 @@ visit is `http://whatever/ikiwiki.cgi?do=aggregate_webtrigger`. Anyone
|
|||
can visit the url to trigger an aggregation run, but it will only check
|
||||
each feed if its `updateinterval` has passed.
|
||||
|
||||
## internal pages and `aggregateinternal`
|
||||
## aggregated pages
|
||||
|
||||
This plugin creates a page for each aggregated item.
|
||||
|
||||
If the `aggregateinternal` option is enabled in the setup file (which is
|
||||
recommended), aggregated pages are stored in the source directory with a
|
||||
the default), aggregated pages are stored in the source directory with a
|
||||
"._aggregated" extension. These pages cannot be edited by web users, and
|
||||
do not generate first-class wiki pages. They can still be inlined into a
|
||||
blog, but you have to use `internal` in [[PageSpecs|IkiWiki/PageSpec]],
|
||||
like `internal(blog/*)`.
|
||||
|
||||
For backward compatibility, the default is that these pages have the
|
||||
".html" extension, and are first-class wiki pages -- each one generates
|
||||
a separate HTML page in the output, and they can even be edited.
|
||||
|
||||
That turns out to not be ideal for aggregated content, because publishing
|
||||
files for each of those pages is a waste of disk space and CPU, and you
|
||||
probably don't want to allow them to be edited. So, there is an alternative
|
||||
method that can be used (and is recommended), turned on by the
|
||||
`aggregateinternal` option in the setup file.
|
||||
|
||||
If you are already using aggregate and want to enable `aggregateinternal`,
|
||||
you should follow this process:
|
||||
|
||||
1. Update all [[PageSpecs|ikiwiki/PageSpec]] that refer to the aggregated
|
||||
pages -- such as those in inlines. Put "internal()" around globs
|
||||
in those PageSpecs. For example, if the PageSpec was `foo/*`, it should
|
||||
be changed to `internal(foo/*)`. This has to be done because internal
|
||||
pages are not matched by regular globs.
|
||||
2. Turn on `aggregateinternal` in the setup file.
|
||||
3. Use [[ikiwiki-transition]] to rename all existing aggregated `.html`
|
||||
files in the srcdir. The command to run is
|
||||
`ikiwiki-transition aggregateinternal $setupfile`,
|
||||
4. Refresh the wiki. (`ikiwiki -setup your.setup -refresh`)
|
||||
If `aggregateinternal` is disabled, you will need to enable the [[html]]
|
||||
plugin as well as aggregate itself, since feed entries will be stored as
|
||||
HTML, and as first-class wiki pages -- each one generates
|
||||
a separate HTML page in the output, and they can even be edited. This
|
||||
option is provided only for backwards compatability.
|
||||
|
|
|
@ -2,6 +2,6 @@ Contributed [[plugins]]:
|
|||
|
||||
(See [[install]] for installation help.)
|
||||
|
||||
[[!inline pages="plugins/contrib/* !*/Discussion"
|
||||
[[!inline pages="plugins/contrib/* and !*/Discussion"
|
||||
feedpages="created_after(plugins/contrib/navbar)" archive="yes"
|
||||
rootpage="plugins/contrib" postformtext="Add a new plugin named:" show=0]]
|
||||
|
|
|
@ -34,12 +34,3 @@ Any objections to listing plugins alphabetically rather than by creation date?
|
|||
>> "recently changed" list with the 10 most recently changed plugins
|
||||
>> at the top. That would allow what you suggested, but still allow
|
||||
>> the main list to be alphabetical. -- [[Will]]
|
||||
|
||||
How about adding a deprecated tag in order to clean up the plugin list?
|
||||
|
||||
> AFAIK it's currently the only one. --[[Joey]]
|
||||
|
||||
For instance [[googlecalendar]] is listed as plugin but should probably be removed from Ikiwiki in a future major version (v3?).
|
||||
|
||||
-- [[AlexandreDupas]]
|
||||
|
||||
|
|
|
@ -13,6 +13,14 @@ In the examples below, the parts of the html that you can change are denoted
|
|||
with "XXX"; everything else must appear exactly as shown to be accepted by the
|
||||
plugin.
|
||||
|
||||
*This plugin is deprecated.* Rather than relying on these complex lists
|
||||
of safe content, which constantly fall out of date, you're recommended to
|
||||
configure the [[htmlscrubber]] to not scrub some pages, which only trusted
|
||||
users can edit. Then you can embed anything from anywhere on those pages.
|
||||
See [[tips/embedding_content]] for details and examples.
|
||||
This plugin's lists of safe embedded content will not be maintained, and
|
||||
the plugin will be removed in a future release.
|
||||
|
||||
## google maps
|
||||
|
||||
Use html like this to embed a map:
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
[[!template id=plugin name=googlecalendar author="[[Joey]]"]]
|
||||
[[!tag type/special-purpose]]
|
||||
|
||||
*Note*: This plugin is deprecated. Please switch to the [[embed]] plugin.
|
||||
|
||||
This plugin allows embedding a google calendar iframe in the wiki.
|
||||
Normally, if the [[htmlscrubber]] is enabled, such iframes are scrubbed out
|
||||
of the wiki content since they're not very safe if created by malicious
|
||||
users. But some iframes are legitimate, and safe, if you trust the embedded
|
||||
content. This plugin is an example of how to deal with this in ikiwiki.
|
||||
|
||||
Example use:
|
||||
|
||||
\[[!googlecalendar html="""
|
||||
<iframe src="http://www.google.com/calendar/embed?src=adkrdken8mupngh13jshlbenoc%40group.calendar.google.com&title=OSEL%20Calendar&chrome=NAVIGATION&bgcolor=%2371d873&height=588" style=" border-width:0 " width="480" frameborder="0" height="588"></iframe>
|
||||
"""]]
|
||||
|
||||
The iframe should be the one provided by google. Note that it's used in a
|
||||
way that avoids cross-site scripting attacks, assuming you trust google's
|
||||
content.
|
|
@ -32,10 +32,10 @@ other HTML-related functionality, such as whether [[meta]] allows
|
|||
potentially unsafe HTML tags.
|
||||
|
||||
The `htmlscrubber_skip` configuration setting can be used to skip scrubbing
|
||||
of some pages. Set it to a [[ikiwiki/PageSpec]], such as "!*/Discussion", and pages
|
||||
matching that can have all the evil CSS, JavsScript, and unsafe html
|
||||
elements you like. One safe way to use this is to use [[lockedit]] to lock
|
||||
those pages, so only admins can edit them.
|
||||
of some pages. Set it to a [[ikiwiki/PageSpec]], such as "!*/Discussion",
|
||||
and pages matching that can have all the evil CSS, JavsScript, and unsafe
|
||||
html elements you like. One safe way to use this is to use [[lockedit]] to
|
||||
lock those pages, so only admins can edit them.
|
||||
|
||||
----
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue