ClientJS: Values nicht trimmen
authorSven Schöling <s.schoeling@linet-services.de>
Mon, 1 Jun 2015 14:07:32 +0000 (16:07 +0200)
committerSven Schöling <s.schoeling@linet-services.de>
Mon, 1 Jun 2015 14:07:32 +0000 (16:07 +0200)
Wenn numerische Werte (also IVs und NVs) per Regex getrimmt werden,
wird dabei das POK Flag gesetzt, das anzeigt, dass der Scalar auch ein
valider String ist.

JSON kann dann nicht mehr unterscheiden welcher Typ der Scalar ist, und
nimmt String. Das führt aber dazu, dass _alle_ Zahlen als Strings
encodiert werden.

Auch das wäre prinzipiell kein Problem, ausser dass Javascript keine
separaten Operatoren für Strings und Zahlen hat.

  json.val1 + json.val2

wird also immer als concat aufgefasst und nicht als Addition, und

  json.val ? true : false

ist immer true, weil "0" und "1" beide true in Javascript sind.

SL/ClientJS.pm

index d4775b8..c12b9ea 100644 (file)
@@ -152,7 +152,6 @@ sub action {
   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 ];