ClientJS: Argumente nur dann säubern, wenn sie richtigen Typ haben
authorMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 1 Aug 2013 08:58:51 +0000 (10:58 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Thu, 1 Aug 2013 08:59:13 +0000 (10:59 +0200)
- Stringifizierung nur für Instanzen von SL::Presenter::EscapedText
- Leading whitespace trimming nur für Skalare

Hintergrund ist, dass manche Funktionen komplexere Strukturen als
Parameter übergeben bekommen, namentlich jstree:create_node, das ein
Hash von key/value-Paaren benötigt. Diese dürfen nicht forçiert
stringifiziert werden.

SL/ClientJS.pm

index 93bbd74..7d1bb38 100644 (file)
@@ -132,10 +132,10 @@ sub action {
   croak "Unsupported jQuery action: $method"                                                    unless defined $num_args;
   croak "Parameter count mismatch for $method(actual: " . scalar(@args) . " wanted: $num_args)" if     scalar(@args) != $num_args;
 
-  foreach my $idx (1..$num_args) {
-    # Force flattening from SL::Presenter::EscapedText: "" . $...
-    $args[$idx - 1] =  "" . $args[$idx - 1];
-    $args[$idx - 1] =~ s/^\s+//;
+  foreach my $idx (0..$num_args - 1) {
+    # Force flattening from SL::Presenter::EscapedText and trim leading whitespace for scalars
+    $args[$idx] =  "" . $args[$idx] if  ref($args[$idx]) eq 'SL::Presenter::EscapedText';
+    $args[$idx] =~ s/^\s+//         if !ref($args[$idx]);
   }
 
   push @{ $self->_actions }, [ $method, @args ];