| 1 21 24 package org.lobobrowser.html.domimpl; 25 26 import org.lobobrowser.html.style.CSSUtilities; 27 import org.w3c.css.sac.InputSource; 28 import org.w3c.dom.UserDataHandler ; 29 import org.w3c.dom.css.CSSStyleSheet; 30 import org.w3c.dom.html2.HTMLStyleElement; 31 import com.steadystate.css.parser.CSSOMParser; 32 33 public class HTMLStyleElementImpl extends HTMLElementImpl implements 34 HTMLStyleElement { 35 public HTMLStyleElementImpl() { 36 super("STYLE", true); 37 } 38 39 public HTMLStyleElementImpl(String name) { 40 super(name, true); 41 } 42 43 private boolean disabled; 44 public boolean getDisabled() { 45 return this.disabled; 46 } 47 48 public void setDisabled(boolean disabled) { 49 this.disabled = disabled; 50 } 51 52 public String getMedia() { 53 return this.getAttribute("media"); 54 } 55 56 public void setMedia(String media) { 57 this.setAttribute("media", media); 58 } 59 60 public String getType() { 61 return this.getAttribute("type"); 62 } 63 64 public void setType(String type) { 65 this.setAttribute("type", type); 66 } 67 68 public Object setUserData(String key, Object data, UserDataHandler handler) { 69 if(org.lobobrowser.html.parser.HtmlParser.MODIFYING_KEY.equals(key) && data != Boolean.TRUE) { 70 this.processStyle(); 71 } 72 return super.setUserData(key, data, handler); 73 } 74 75 protected void processStyle() { 76 if(CSSUtilities.matchesMedia(this.getMedia(), this.getHtmlRendererContext())) { 77 String text = this.getRawInnerText(true); 78 if(text != null && !"".equals(text)) { 79 String processedText = CSSUtilities.preProcessCss(text); 80 HTMLDocumentImpl doc = (HTMLDocumentImpl) this.getOwnerDocument(); 81 CSSOMParser parser = new CSSOMParser(); 82 InputSource is = CSSUtilities.getCssInputSourceForStyleSheet(processedText); 83 try { 84 CSSStyleSheet sheet = parser.parseStyleSheet(is); 85 doc.addStyleSheet(sheet); 86 } catch(Throwable err) { 87 this.warn("Unable to parse style sheet", err); 88 } 89 } 90 } 91 } 92 } 93 | Popular Tags |