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