/[suikacvs]/messaging/manakai/lib/Message/DOM/CSSStyleDeclaration.pm
Suika

Diff of /messaging/manakai/lib/Message/DOM/CSSStyleDeclaration.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.12 by wakaba, Mon Jan 14 13:56:35 2008 UTC revision 1.13 by wakaba, Fri Jan 25 16:06:13 2008 UTC
# Line 18  sub AUTOLOAD { Line 18  sub AUTOLOAD {
18    
19    if ($prop_def) {    if ($prop_def) {
20      no strict 'refs';      no strict 'refs';
21      *{ $method_name } = sub {      if ($prop_def->{serialize}) {
22        ## TODO: setter        *{ $method_name } = sub {
23            ## TODO: setter
24        my $self = $_[0];    
25        my $value = $$self->{$prop_def->{key}};          my $self = $_[0];
26        if ($value) {          my $value = $$self->{$prop_def->{key}};
27          return $prop_def->{serialize}->($self, $prop_def->{css}, $value->[0]);          if ($value) {
28        } else {            return $prop_def->{serialize}->($self, $prop_def->{css}, $value->[0]);
29          return "";          } else {
30        }            return '';
31        ## ISSUE: If one of shorthand component properties is !important?          }
32      };        };
33        } elsif ($prop_def->{serialize_shorthand} or
34                 $prop_def->{serialize_multiple}) {
35          *{ $method_name } = sub {
36            ## TODO: setter
37      
38            my $self = $_[0];
39            my $v = ($prop_def->{serialize_shorthand} or
40                     $prop_def->{serialize_multiple})->($self);
41            if (defined $v->{$prop_def->{css}}) {
42              return $v->{$prop_def->{css}}->[0];
43            } else {
44              return '';
45            }
46            ## ISSUE: If one of shorthand component properties is !important?
47          };
48        } else {
49          die qq<Implementation error: Can't load serializer for "$AUTOLOAD">;
50        }
51      goto &{ $AUTOLOAD };      goto &{ $AUTOLOAD };
52    } else {    } else {
53      require Carp;      require Carp;
# Line 60  sub css_text ($;$) { Line 78  sub css_text ($;$) {
78    my $self = $_[0];    my $self = $_[0];
79    my $r = '';    my $r = '';
80    my %serialized;    my %serialized;
81    for (grep {$$self->{$_}} keys %$$self) {    for (sort {$a cmp $b} grep {$$self->{$_}} keys %$$self) {
82      my $prop_def = $Whatpm::CSS::Parser::Key->{$_};      my $prop_def = $Whatpm::CSS::Parser::Key->{$_};
83      next unless $prop_def;      next unless $prop_def;
84    
# Line 69  sub css_text ($;$) { Line 87  sub css_text ($;$) {
87          $serialized{$prop_def->{serialize_multiple}} = 1;          $serialized{$prop_def->{serialize_multiple}} = 1;
88          my $v = $prop_def->{serialize_multiple}->($self);          my $v = $prop_def->{serialize_multiple}->($self);
89          for my $prop_name (sort {$a cmp $b} keys %$v) {          for my $prop_name (sort {$a cmp $b} keys %$v) {
90            $r .= '  ' . $prop_name . ': ' . $v->{$prop_name} . ";\n"            $r .= '  ' . $prop_name . ': ' . $v->{$prop_name}->[0]
91                  . $v->{$prop_name}->[1] . ";\n"
92          }          }
93        }        }
94      } else {      } else {
# Line 153  sub AUTOLOAD { Line 172  sub AUTOLOAD {
172    
173    if ($prop_def) {    if ($prop_def) {
174      no strict 'refs';      no strict 'refs';
175      *{ $method_name } = sub {      if ($prop_def->{compute} or $prop_def->{compute_multiple}) {
176        ## TODO: setter        *{ $method_name } = sub {
177            ## TODO: setter
178        my $self = $_[0];    
179        if ($prop_def->{compute} or $prop_def->{compute_multiple}) {          my $self = $_[0];
180          my $value = $$self->{cascade}->get_computed_value          my $value = $$self->{cascade}->get_computed_value
181              ($$self->{element}, $prop_def->{css});              ($$self->{element}, $prop_def->{css});
182          if ($value) {          if ($value) {
# Line 165  sub AUTOLOAD { Line 184  sub AUTOLOAD {
184          } else {          } else {
185            return '';            return '';
186          }          }
187        } elsif ($prop_def->{serialize_multiple}) {        };
188          my $v = $prop_def->{serialize_multiple}->($self);      } elsif ($prop_def->{serialize_shorthand} or
189                 $prop_def->{serialize_multiple}) {
190          *{ $method_name } = sub {
191            ## TODO: setter
192            my $self = shift;
193    
194            my $v = ($prop_def->{serialize_shorthand} or
195                     $prop_def->{serialize_multiple})->($self);
196          if (defined $v->{$prop_def->{css}}) {          if (defined $v->{$prop_def->{css}}) {
197            return $v->{$prop_def->{css}};            return $v->{$prop_def->{css}}->[0];
198          } else {          } else {
199            return '';            return '';
200          }          }
201        } else {        };
202          ## TODO: This should be an error of the implementation.      } else {
203          ## However, currently some shorthand properties does not have        ## TODO: This should be an error of the implementation.
204          ## serializer.        ## However, currently some shorthand properties does not have
205          ## TODO: Remove {serialize} from shorthand properties, since        ## serializer.
206          ## they have no effect.        ## TODO: Remove {serialize} from shorthand properties, since
207          warn "$0: No computed value function for $method_name";        ## they have no effect.
208          #die "$0: No computed value function for $method_name";        warn "$0: No computed value function for $method_name";
209        }        #die "$0: No computed value function for $method_name";
210      };        *{ $method_name } = sub { };
211        }
212      goto &{ $AUTOLOAD };      goto &{ $AUTOLOAD };
213    } else {    } else {
214      require Carp;      require Carp;
# Line 224  sub css_text ($;$) { Line 251  sub css_text ($;$) {
251          $serialized{$prop_def->{serialize_multiple}} = 1;          $serialized{$prop_def->{serialize_multiple}} = 1;
252          my $v = $prop_def->{serialize_multiple}->($self);          my $v = $prop_def->{serialize_multiple}->($self);
253          for my $prop_name (sort {$a cmp $b} keys %$v) {          for my $prop_name (sort {$a cmp $b} keys %$v) {
254            $r .= '  ' . $prop_name . ': ' . $v->{$prop_name} . ";\n"            $r .= '  ' . $prop_name . ': ' . $v->{$prop_name}->[0]
255                  . $v->{$prop_name}->[1] . ";\n"
256          }          }
257        }        }
258      } else {      } else {

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.13

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24