From: Moritz Bunkus Date: Thu, 1 Aug 2013 08:58:51 +0000 (+0200) Subject: ClientJS: Argumente nur dann säubern, wenn sie richtigen Typ haben X-Git-Tag: release-3.1.0beta1~114 X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/kivitendo-erp.git/commitdiff_plain/133e3be21233547506c2d7342c92ca7fd7b8354a ClientJS: Argumente nur dann säubern, wenn sie richtigen Typ haben - 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. --- diff --git a/SL/ClientJS.pm b/SL/ClientJS.pm index 93bbd7482..7d1bb383a 100644 --- a/SL/ClientJS.pm +++ b/SL/ClientJS.pm @@ -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 ];