Author: spadkins
Date: Fri Jun  8 11:11:46 2007
New Revision: 9636

Modified:
   p5ee/trunk/App-Widget-JSApp/lib/App/Widget/JSApp.pm

Log:
add serialize_as_javascript() method for deeply-nested structures to be passed 
to the widget config

Modified: p5ee/trunk/App-Widget-JSApp/lib/App/Widget/JSApp.pm
==============================================================================
--- p5ee/trunk/App-Widget-JSApp/lib/App/Widget/JSApp.pm (original)
+++ p5ee/trunk/App-Widget-JSApp/lib/App/Widget/JSApp.pm Fri Jun  8 11:11:46 2007
@@ -33,6 +33,34 @@
     &App::sub_exit() if ($App::trace);
 }
 
+sub serialize_as_javascript {
+    &App::sub_entry if ($App::trace);
+    my ($self, $value) = @_;
+    my $modified_value;
+    my ($val, $oneline);
+    if (ref ($value) eq 'ARRAY') {
+        $oneline = ($#$value > -1 && ref($value->[0])) ? 0 : 1;
+        $modified_value .= "[";
+        $modified_value .= "\n   " if (!$oneline);
+        for (my $i = 0; $i <= $#$value; $i++) {
+            $val = $value->[$i];
+            if (ref($val)) { 
+                $modified_value .= $self->serialize_as_javascript($val);
+            }
+            else {
+                $modified_value .= "'$val'";
+            }
+            $modified_value .= "," if ($i < $#$value);
+        }
+        $modified_value .= "]";
+        $modified_value .= "\n   " if (!$oneline);
+    }
+    $modified_value =~ s/,$//;
+    return $modified_value;
+
+    &App::sub_exit if ($App::trace);
+}
+
 sub html {
     &App::sub_entry if ($App::trace);
     my $self = shift;
@@ -56,11 +84,19 @@
     $value = join(",",@$value) if (ref($value) eq "ARRAY");
     push(@attrib, "default", $value);
     my $js_conf = "";
+    my ($var, $val);
     if ($#attrib > -1) {
         $js_conf .= ", {" if (!$js_conf);
         for (my $i = 0; $i < $#attrib; $i += 2) {
             $js_conf .= "," if ($i > 0);
-            $js_conf .= " \"$attrib[$i]\" : \"" . 
$self->escape_double_quoted_value($attrib[$i+1]) . "\"";
+            $var   = $attrib[$i];
+            $val   = $attrib[$i+1];
+            if (ref($val)) {
+                $js_conf .= " \"$var\" : " . 
$self->serialize_as_javascript($val);
+            }
+            else {
+                $js_conf .= " \"$var\" : \"" . 
$self->escape_double_quoted_value($val) . "\"";
+            }
         }
     }
     if ($self->{jsapp_conf}) {

Reply via email to