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}) {