111 lines
3.3 KiB
Perl
111 lines
3.3 KiB
Perl
# Plugin for TWiki Enterprise Collaboration Platform, http://TWiki.org/
|
|
#
|
|
# Copyright (C) 2002-2006 Peter Thoeny, peter@thoeny.org
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version. For
|
|
# more details read LICENSE in the root of this distribution.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
#
|
|
# As per the GPL, removal of this notice is prohibited.
|
|
#
|
|
# This is the EditTablePlugin used to edit tables in place.
|
|
|
|
package TWiki::Plugins::EditTablePlugin;
|
|
|
|
use vars qw(
|
|
$web $topic $user $VERSION $RELEASE $debug
|
|
$query $renderingWeb
|
|
);
|
|
|
|
# This should always be $Rev: 11646 $ so that TWiki can determine the checked-in
|
|
# status of the plugin. It is used by the build automation tools, so
|
|
# you should leave it alone.
|
|
$VERSION = '$Rev: 11646 $';
|
|
|
|
# This is a free-form string you can use to "name" your own plugin version.
|
|
# It is *not* used by the build automation tools, but is reported as part
|
|
# of the version number in PLUGINDESCRIPTIONS.
|
|
$RELEASE = 'any TWiki';
|
|
|
|
$encodeStart = '--EditTableEncodeStart--';
|
|
$encodeEnd = '--EditTableEncodeEnd--';
|
|
|
|
sub initPlugin {
|
|
( $topic, $web, $user ) = @_;
|
|
|
|
# check for Plugins.pm versions
|
|
if( $TWiki::Plugins::VERSION < 1.026 ) {
|
|
TWiki::Func::writeWarning( "Version mismatch between EditTablePlugin and Plugins.pm" );
|
|
return 0;
|
|
}
|
|
|
|
$query = TWiki::Func::getCgiQuery();
|
|
if( ! $query ) {
|
|
return 0;
|
|
}
|
|
|
|
# Get plugin debug flag
|
|
$debug = TWiki::Func::getPreferencesFlag( 'EDITTABLEPLUGIN_DEBUG' );
|
|
|
|
$prefsInitialized = 0;
|
|
$renderingWeb = $web;
|
|
|
|
# Plugin correctly initialized
|
|
TWiki::Func::writeDebug( "- TWiki::Plugins::EditTablePlugin::initPlugin( $web.$topic ) is OK" ) if $debug;
|
|
|
|
# Initialize $table such that the code will correctly detect when to
|
|
# read in a topic.
|
|
undef $table;
|
|
|
|
return 1;
|
|
}
|
|
|
|
sub commonTagsHandler {
|
|
### my ( $text, $topic, $web ) = @_; # do not uncomment, use $_[0], $_[1]... instead
|
|
|
|
return unless $_[0] =~ /%EDIT(TABLE|CELL){(.*)}%/os;
|
|
|
|
require TWiki::Plugins::EditTablePlugin::Core;
|
|
|
|
TWiki::Plugins::EditTablePlugin::Core::process( @_ );
|
|
}
|
|
|
|
sub postRenderingHandler {
|
|
### my ( $text ) = @_; # do not uncomment, use $_[0] instead
|
|
|
|
$_[0] =~ s/$encodeStart(.*?)$encodeEnd/decodeValue($1)/geos;
|
|
}
|
|
|
|
sub encodeValue {
|
|
my( $theText ) = @_;
|
|
|
|
# FIXME: *very* crude encoding to escape Wiki rendering inside form fields
|
|
$theText =~ s/\./%dot%/gos;
|
|
$theText =~ s/(.)/\.$1/gos;
|
|
|
|
# convert <br /> markup to unicode linebreak character for text areas
|
|
$theText =~ s/.<.b.r. .\/.>/ /gos;
|
|
return $encodeStart.$theText.$encodeEnd;
|
|
}
|
|
|
|
sub decodeValue {
|
|
my( $theText ) = @_;
|
|
|
|
$theText =~ s/\.(.)/$1/gos;
|
|
$theText =~ s/%dot%/\./gos;
|
|
$theText =~ s/\&([^#a-z])/&$1/go; # escape non-entities
|
|
$theText =~ s/</\</go; # change < to entity
|
|
$theText =~ s/>/\>/go; # change > to entity
|
|
$theText =~ s/\"/\"/go; # change " to entity
|
|
|
|
return $theText;
|
|
}
|
|
|
|
1;
|