Revert "JavaScript-Plugin: auch als Filter einsetzen können"
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 11 Jan 2016 15:32:34 +0000 (16:32 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 11 Jan 2016 15:32:34 +0000 (16:32 +0100)
Dies revertet Commit 20d730acdbb52b5b75af783aa010609e25b73024. Grund
ist, dass aus bisher nicht zu analysierenden Gründen in manchen
Situationen der Template-Toolkit-Compiler oder eine andere Komponente
Quark erzeugt und daher das Plugin nicht findet.

Wenn es geht, dann sieht das compilierte Template an der Stelle wie
folgt aus:

------ snip ------
$output .=  do {
    my $output = '';
    my $_tt_filter = $context->filter('js')
              || $context->throw($context->error);
------ snip ------

Wenn es aber nicht geht, dann wie folgt:

------ snip ------
$output .=  do {
    my $output = '';
    my $_tt_filter = $context->filter($stash->get('js'))
              || $context->throw($context->error);
------ snip ------

Im nicht funktionierenden Fall wird das Plugin selber im Stash gesucht,
wo es aber nicht vorhanden ist.

Warum das passiert ist noch rätselhaft und wird mangels Zeit erst einmal
nicht weiter untersucht.

SL/Template/Plugin/JavaScript.pm

index 4815830..16989e9 100644 (file)
@@ -1,23 +1,16 @@
 package SL::Template::Plugin::JavaScript;
 
-use base qw( Template::Plugin::Filter );
+use base qw( Template::Plugin );
+use Template::Plugin;
 
 use strict;
 
-my $cached_instance;
-
 sub new {
-  my $class = shift;
-
-  return $cached_instance ||= $class->SUPER::new(@_);
-}
-
-sub init {
-  my $self = shift;
-
-  $self->install_filter($self->{ _ARGS }->[0] || 'js');
+  my ($class, $context, @args) = @_;
 
-  return $self;
+  return bless {
+    CONTEXT => $context,
+  }, $class;
 }
 
 #
@@ -45,11 +38,6 @@ sub escape {
   return $text;
 }
 
-sub filter {
-  my ($self, $text) = @_;
-  return $self->escape($text);
-}
-
 sub replace_with {
   return _replace_helper('replaceWith', @_);
 }
@@ -104,11 +92,6 @@ 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