JavaScript-Plugin: auch als Filter einsetzen können
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 14 Dec 2015 13:15:05 +0000 (14:15 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 14 Dec 2015 13:15:05 +0000 (14:15 +0100)
SL/Template/Plugin/JavaScript.pm

index 16989e9..4815830 100644 (file)
@@ -1,16 +1,23 @@
 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;
 }
 
 #
@@ -38,6 +45,11 @@ sub escape {
   return $text;
 }
 
+sub filter {
+  my ($self, $text) = @_;
+  return $self->escape($text);
+}
+
 sub replace_with {
   return _replace_helper('replaceWith', @_);
 }
@@ -92,6 +104,11 @@ value is not wrapped in quotes. Example:
   <input type="submit" value="Delete"
          onclick="if (confirm('Do you really want to delete this: [% JavaScript.escape(obj.description) %]') return true; else return false;">
 
+You can also use the filter syntax instead:
+
+  <input type="submit" value="Delete"
+         onclick="if (confirm('Do you really want to delete this: [% obj.description | js %]') return true; else return false;">
+
 =item C<replace_with $selector, $template, %locals>
 
 Returns code replacing the DOM elements matched by C<$selector> with