X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/kivitendo-erp.git/blobdiff_plain/6a8787147ad643549eb26cb4f9a373b5b354b8b9..8fd886849e68f:/SL/Template/Plugin/JavaScript.pm diff --git a/SL/Template/Plugin/JavaScript.pm b/SL/Template/Plugin/JavaScript.pm index 241ea0ea3..48158307f 100644 --- a/SL/Template/Plugin/JavaScript.pm +++ b/SL/Template/Plugin/JavaScript.pm @@ -1,33 +1,55 @@ package SL::Template::Plugin::JavaScript; -use base qw( Template::Plugin ); -use Template::Plugin; +use base qw( Template::Plugin::Filter ); use strict; +my $cached_instance; + sub new { - my ($class, $context, @args) = @_; + my $class = shift; + + return $cached_instance ||= $class->SUPER::new(@_); +} + +sub init { + my $self = shift; + + $self->install_filter($self->{ _ARGS }->[0] || 'js'); - return bless { - CONTEXT => $context, - }, $class; + return $self; } # # public interface # +# see ecmascript spec section 7.8.4 +my @escape_chars = ('\\', '\'', '"'); +my %control_chars = ( + "\n" => 'n', + "\t" => 't', + "\r" => 'r', + "\f" => 'f', + "\x08" => 'b', + "\x0B" => 'v', # noone uses vertical tab anyway... +); +my $re = join '', map { qr/($_)/s } join '|', keys(%control_chars), map { "\Q$_\E" } @escape_chars; + sub escape { my $self = shift; my $text = shift; - $text =~ s|\\|\\\\|g; - $text =~ s|\"|\\\"|g; - $text =~ s|\n|\\n|g; + $text =~ s/$re/'\\' . ($control_chars{$1} || $1)/egs; return $text; } +sub filter { + my ($self, $text) = @_; + return $self->escape($text); +} + sub replace_with { return _replace_helper('replaceWith', @_); } @@ -82,6 +104,11 @@ value is not wrapped in quotes. Example: +You can also use the filter syntax instead: + + + =item C Returns code replacing the DOM elements matched by C<$selector> with