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

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

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

revision 1.2 by wakaba, Sat Dec 22 06:57:46 2007 UTC revision 1.8 by wakaba, Fri Feb 8 15:08:04 2008 UTC
# Line 17  sub NAMESPACE_RULE () { 7 } Line 17  sub NAMESPACE_RULE () { 7 }
17  ## |CSSRule| attributes  ## |CSSRule| attributes
18    
19  sub css_text ($) {  sub css_text ($) {
20    die "$0: ".(ref $self)."->css_text: Not implemented";    die "$0: ".(ref $_[0])."->css_text: Not implemented";
21  } # css_text  } # css_text
22    
23  sub parent_rule ($) {  sub parent_rule ($) {
# Line 42  sub parent_style_sheet ($) { Line 42  sub parent_style_sheet ($) {
42  } # parent_style_sheet  } # parent_style_sheet
43    
44  sub type ($) {  sub type ($) {
45    die "$0: ".(ref $self)."->type: Not implemented";    die "$0: ".(ref $_[0])."->type: Not implemented";
46  } # type  } # type
47    
48  package Message::DOM::CSSStyleRule;  package Message::DOM::CSSStyleRule;
49  push our @ISA, 'Message::DOM::CSSRule', 'Message::IF::CSSStyleRule';  push our @ISA, 'Message::DOM::CSSRule', 'Message::IF::CSSStyleRule';
50    
51  sub ____new ($$$) {  sub ____new ($$$) {
52    my $self = bless \{_selector => $_[1], style => $_[2]}, $_[0];    my $self = bless \{_selectors => $_[1], style => $_[2]}, $_[0];
53    ${$_[2]}->{parent_rule} = $self;    ${$_[2]}->{parent_rule} = $self;
54    Scalar::Util::weaken (${$_[2]}->{parent_rule});    Scalar::Util::weaken (${$_[2]}->{parent_rule});
55    return $self;    return $self;
# Line 57  sub ____new ($$$) { Line 57  sub ____new ($$$) {
57    
58  ## |CSSRule| attributes  ## |CSSRule| attributes
59    
60  ## TODO: |css_text|  sub css_text ($;$) {
61      ## TODO: setter
62    
63      ## NOTE: Where and how white space characters are inserted are
64      ## intentionally changed from those in browsers so that properties are
65      ## more prettily printed.
66      ## See <http://suika.fam.cx/gate/2005/sw/cssText> for what browsers do.
67      local $Error::Depth = $Error::Depth + 1;
68      return $_[0]->selector_text . " {\n" . $_[0]->style->css_text . '}';
69    } # css_text
70    
71  sub type ($) { Message::DOM::CSSRule::STYLE_RULE }  sub type ($) { Message::DOM::CSSRule::STYLE_RULE }
72    
73  ## |CSSStyleRule| attributes  ## |CSSStyleRule| attributes
74    
75  ## TODO: |selector_text|  sub selector_text ($;$) {
76      ## TODO: setter
77    
78      ## TODO: Browser-compatible serializer
79      ## TODO: This code does not work for cases where default namespace
80      ## has no namespace prefix declared.
81      my $self = $_[0];
82      require Whatpm::CSS::SelectorsSerializer;
83      return Whatpm::CSS::SelectorsSerializer->serialize_selector_text
84          ($$self->{_selectors}, ${$self->parent_style_sheet}->{_nsmap});
85    } # selector_text
86    
87  sub style ($) {  sub style ($) {
88    return ${$_[0]}->{style};    return ${$_[0]}->{style};
# Line 78  sub ____new ($$) { Line 97  sub ____new ($$) {
97    
98  ## |CSSRule| attributes  ## |CSSRule| attributes
99    
100  ## TODO: |css_text|  sub css_text ($;$) {
101      ## TODO: setter
102    
103      ## NOTE: It will be broken if |encoding| contains |"| or |\|, but this
104      ## is what browsers do.
105      return '@charset "'.${$_[0]}->{encoding}.'";';
106    } # css_text
107    
108  sub type ($) { Message::DOM::CSSRule::CHARSET_RULE }  sub type ($) { Message::DOM::CSSRule::CHARSET_RULE }
109    
# Line 92  package Message::DOM::CSSImportRule; Line 117  package Message::DOM::CSSImportRule;
117  push our @ISA, 'Message::DOM::CSSRule', 'Message::IF::CSSImportRule';  push our @ISA, 'Message::DOM::CSSRule', 'Message::IF::CSSImportRule';
118    
119  sub ____new ($$$$) {  sub ____new ($$$$) {
120    my $self = bless \{href => $_[1], media => $_[2], style_sheet => $_[3]}, $_[0];    my $self = bless \{href => $_[1], media => \$_[2],
121                         style_sheet => $_[3]}, $_[0];
122      require Message::DOM::MediaList;
123      bless $$self->{media}, 'Message::DOM::MediaList';
124    ${$_[3]}->{owner_rule} = $self;    ${$_[3]}->{owner_rule} = $self;
125    Scalar::Util::weaken (${$_[3]}->{owner_rule});    Scalar::Util::weaken (${$_[3]}->{owner_rule});
126    return $self;    return $self;
# Line 122  package Message::DOM::CSSMediaRule; Line 150  package Message::DOM::CSSMediaRule;
150  push our @ISA, 'Message::DOM::CSSRule', 'Message::IF::CSSMediaRule';  push our @ISA, 'Message::DOM::CSSRule', 'Message::IF::CSSMediaRule';
151    
152  sub ____new ($$$) {  sub ____new ($$$) {
153    my $self = bless \{media => $_[1], css_rules => $_[2]}, $_[0];    my $self = bless \{media => \$_[1], css_rules => $_[2]}, $_[0];
154      require Message::DOM::MediaList;
155      bless $$self->{media}, 'Message::DOM::MediaList';
156    for (@{$_[2]}) {    for (@{$_[2]}) {
157      ${$_}->{parent_rule} = $self;      ${$_}->{parent_rule} = $self;
158      Scalar::Util::weaken (${$_}->{parent_rule});      Scalar::Util::weaken (${$_}->{parent_rule});
# Line 132  sub ____new ($$$) { Line 162  sub ____new ($$$) {
162    
163  ## |CSSRule| attributes  ## |CSSRule| attributes
164    
165  ## TODO: |css_text|  sub css_text ($;$) {
166      ## TODO: setter
167      my $v = '@media ' . $_[0]->media . " {\n";
168      for (@{${$_[0]}->{css_rules}}) {
169        $v .= $_->css_text . "\n";
170        ## BUG: Browsers do indent.
171      }
172      $v .= "}";
173      return $v;
174    } # css_text
175    
176  sub type ($) { Message::DOM::CSSRule::MEDIA_RULE }  sub type ($) { Message::DOM::CSSRule::MEDIA_RULE }
177    
# Line 173  package Message::DOM::CSSPageRule; Line 212  package Message::DOM::CSSPageRule;
212  push our @ISA, 'Message::DOM::CSSRule', 'Message::IF::CSSPageRule';  push our @ISA, 'Message::DOM::CSSRule', 'Message::IF::CSSPageRule';
213    
214  sub ____new ($$$) {  sub ____new ($$$) {
215    my $self = bless \{_selector => $_[1], style => $_[2]}, $_[0];    my $self = bless \{_selectors => $_[1], style => $_[2]}, $_[0];
216    ${$_[2]}->{parent_rule} = $self;    ${$_[2]}->{parent_rule} = $self;
217    Scalar::Util::weaken (${$_[2]}->{parent_rule});    Scalar::Util::weaken (${$_[2]}->{parent_rule});
218    return $self;    return $self;
# Line 187  sub type ($) { Message::DOM::CSSRule::PA Line 226  sub type ($) { Message::DOM::CSSRule::PA
226    
227  ## |CSSPageRule| attributes  ## |CSSPageRule| attributes
228    
229  ## TODO: |selector_text|  sub selector_text ($;$) {
230      ## TODO: setter
231    
232      ## TODO: Browser-compatible serializer
233      require Whatpm::CSS::SelectorsSerializer;
234      return Whatpm::CSS::SelectorsSerializer->serialize_test (${$_[0]}->{_selectors});
235    } # selector_text
236    
237  sub style ($) {  sub style ($) {
238    return ${$_[0]}->{style};    return ${$_[0]}->{style};
# Line 202  sub ____new ($$$) { Line 247  sub ____new ($$$) {
247    
248  ## |CSSRule| attributes  ## |CSSRule| attributes
249    
250  ## TODO: |css_text|  sub css_text ($;$) {
251      ## TODO: Setter
252    
253      ## NOTE: Sometimes ugly, but this is what Firefox does.
254      my $prefix = ${$_[0]}->{prefix};
255      return '@namespace '.($prefix ne '' ? $prefix.' ' : '').
256          'url('.${$_[0]}->{namespace_uri}.');';
257    } # css_text
258    
259  sub type ($) { Message::DOM::CSSRule::NAMESPACE_RULE }  sub type ($) { Message::DOM::CSSRule::NAMESPACE_RULE }
260    

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.8

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24