View Javadoc
1   /*
2    * Copyright (c) 2002-2025 Gargoyle Software Inc.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * https://www.apache.org/licenses/LICENSE-2.0
8    *
9    * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  package org.htmlunit.css;
16  
17  import java.util.Collections;
18  import java.util.Map;
19  
20  import org.htmlunit.BrowserVersion;
21  import org.htmlunit.BrowserVersionFeatures;
22  import org.htmlunit.css.StyleAttributes.Definition;
23  import org.htmlunit.cssparser.dom.AbstractCSSRuleImpl;
24  import org.htmlunit.cssparser.dom.CSSStyleDeclarationImpl;
25  import org.htmlunit.cssparser.parser.selector.SelectorSpecificity;
26  
27  /**
28   * A css StyleDeclaration backed by a {@link CSSStyleDeclarationImpl}.
29   *
30   * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a>
31   * @author <a href="mailto:cse@dynabean.de">Christian Sell</a>
32   * @author Daniel Gredler
33   * @author Chris Erskine
34   * @author Ahmed Ashour
35   * @author Rodney Gitzel
36   * @author Sudhan Moghe
37   * @author Ronald Brill
38   * @author Frank Danek
39   * @author Dennis Duysak
40   * @author cd alexndr
41   */
42  public class WrappedCssStyleDeclaration extends AbstractCssStyleDeclaration {
43  
44      // private static final Log LOG = LogFactory.getLog(WrappedCssStyleDeclaration.class);
45  
46      /** The wrapped CSSStyleDeclaration. */
47      private final CSSStyleDeclarationImpl cssStyleDeclarationImpl_;
48      private final BrowserVersion browserVersion_;
49  
50      /**
51       * Creates an instance which wraps the specified style declaration implementation.
52       * @param cssStyleDeclarationImpl the style declaration to wrap
53       * @param browserVersion the {@link BrowserVersion}
54       */
55      public WrappedCssStyleDeclaration(final CSSStyleDeclarationImpl cssStyleDeclarationImpl,
56                  final BrowserVersion browserVersion) {
57          super();
58          cssStyleDeclarationImpl_ = cssStyleDeclarationImpl;
59          browserVersion_ = browserVersion;
60      }
61  
62      /**
63       * {@inheritDoc}
64       */
65      @Override
66      public String getStylePriority(final String name) {
67          return cssStyleDeclarationImpl_.getPropertyPriority(name);
68      }
69  
70      /**
71       * {@inheritDoc}
72       */
73      @Override
74      public String getCssText() {
75          final String text = cssStyleDeclarationImpl_.getCssText();
76          if (cssStyleDeclarationImpl_.getLength() > 0) {
77              return text + ";";
78          }
79          return text;
80      }
81  
82      /**
83       * {@inheritDoc}
84       */
85      @Override
86      public String getStyleAttribute(final String name) {
87          return cssStyleDeclarationImpl_.getPropertyValue(name);
88      }
89  
90      /**
91       * {@inheritDoc}
92       */
93      @Override
94      public String getStyleAttribute(final Definition definition, final boolean getDefaultValueIfEmpty) {
95          return getStyleAttribute(definition.getAttributeName());
96      }
97  
98      /**
99       * {@inheritDoc}
100      */
101     @Override
102     public void setCssText(final String value) {
103         cssStyleDeclarationImpl_.setCssText(value);
104     }
105 
106     /**
107      * {@inheritDoc}
108      */
109     @Override
110     public void setStyleAttribute(final String name, final String newValue, final String important) {
111         cssStyleDeclarationImpl_.setProperty(name, newValue, important);
112     }
113 
114     /**
115      * {@inheritDoc}
116      */
117     @Override
118     public String removeStyleAttribute(final String name) {
119         return cssStyleDeclarationImpl_.removeProperty(name);
120     }
121 
122     /**
123      * {@inheritDoc}
124      */
125     @Override
126     public int getLength() {
127         return cssStyleDeclarationImpl_.getProperties().size();
128     }
129 
130     /**
131      * {@inheritDoc}
132      */
133     @Override
134     public String item(final int index) {
135         return cssStyleDeclarationImpl_.getProperties().get(index).toString();
136     }
137 
138     /**
139      * {@inheritDoc}
140      */
141     @Override
142     public AbstractCSSRuleImpl getParentRule() {
143         return cssStyleDeclarationImpl_.getParentRule();
144     }
145 
146     /**
147      * {@inheritDoc}
148      */
149     @Override
150     public StyleElement getStyleElement(final String name) {
151         final String value = cssStyleDeclarationImpl_.getPropertyValue(name);
152         if (value.isEmpty()) {
153             return null;
154         }
155         final String priority = cssStyleDeclarationImpl_.getPropertyPriority(name);
156         return new StyleElement(name, value, priority, SelectorSpecificity.FROM_STYLE_ATTRIBUTE);
157     }
158 
159     /**
160      * {@inheritDoc}
161      */
162     @Override
163     public StyleElement getStyleElementCaseInSensitive(final String name) {
164         return null;
165     }
166 
167     /**
168      * {@inheritDoc}
169      */
170     @Override
171     public Map<String, StyleElement> getStyleMap() {
172         return Collections.emptyMap();
173     }
174 
175     /**
176      * {@inheritDoc}
177      */
178     @Override
179     public boolean hasFeature(final BrowserVersionFeatures property) {
180         return browserVersion_.hasFeature(property);
181     }
182 
183     /**
184      * {@inheritDoc}
185      */
186     @Override
187     public BrowserVersion getBrowserVersion() {
188         return browserVersion_;
189     }
190 }