package org.lobobrowser.html.style;
import java.util.ArrayList;
import java.util.List;
import org.lobobrowser.html.domimpl.HTMLElementImpl;
import org.w3c.dom.DOMException;
import org.w3c.dom.Element;
import cz.vutbr.web.css.NodeData;
import cz.vutbr.web.css.StyleSheet;
import cz.vutbr.web.domassign.DirectAnalyzer;
public final class LocalJStyleProperties extends JStyleProperties {
private final HTMLElementImpl element;
public LocalJStyleProperties(final HTMLElementImpl element) {
super(element, false);
this.element = element;
}
@Override
public void setAzimuth(final String azimuth) throws DOMException {
updateInlineStyle("azimuth", azimuth);
}
@Override
public void setBackground(final String background) throws DOMException {
updateInlineStyle("background", background);
}
@Override
public void setBackgroundAttachment(final String backgroundAttachment) throws DOMException {
updateInlineStyle("background-attachment", backgroundAttachment);
}
@Override
public void setBackgroundColor(final String backgroundColor) throws DOMException {
updateInlineStyle("background-color", backgroundColor);
}
@Override
public void setBackgroundImage(final String backgroundImage) throws DOMException {
updateInlineStyle("background-image", backgroundImage);
}
@Override
public void setBackgroundPosition(final String backgroundPosition) throws DOMException {
updateInlineStyle("background-position", backgroundPosition);
}
@Override
public void setBackgroundRepeat(final String backgroundRepeat) throws DOMException {
updateInlineStyle("background-repeat", backgroundRepeat);
}
@Override
public void setBorder(final String border) throws DOMException {
updateInlineStyle("border", border);
}
@Override
public void setBorderCollapse(final String borderCollapse) throws DOMException {
updateInlineStyle("border-collapse", borderCollapse);
}
@Override
public void setBorderColor(final String borderColor) throws DOMException {
updateInlineStyle("border-color", borderColor);
}
@Override
public void setBorderSpacing(final String borderSpacing) throws DOMException {
updateInlineStyle("border-spacing", borderSpacing);
}
@Override
public void setBorderStyle(final String borderStyle) throws DOMException {
updateInlineStyle("border-style", borderStyle);
}
@Override
public void setBorderTop(final String borderTop) throws DOMException {
updateInlineStyle("border-top", borderTop);
}
@Override
public void setBorderRight(final String borderRight) throws DOMException {
updateInlineStyle("border-right", borderRight);
}
@Override
public void setBorderBottom(final String borderBottom) throws DOMException {
updateInlineStyle("border-bottom", borderBottom);
}
@Override
public void setBorderLeft(final String borderLeft) throws DOMException {
updateInlineStyle("border-left", borderLeft);
}
@Override
public void setBorderTopColor(final String borderTopColor) throws DOMException {
updateInlineStyle("border-top-color", borderTopColor);
}
@Override
public void setBorderRightColor(final String borderRightColor) throws DOMException {
updateInlineStyle("border-right-color", borderRightColor);
}
@Override
public void setBorderBottomColor(final String borderBottomColor) throws DOMException {
updateInlineStyle("border-bottom-color", borderBottomColor);
}
@Override
public void setBorderLeftColor(final String borderLeftColor) throws DOMException {
updateInlineStyle("border-left-color", borderLeftColor);
}
@Override
public void setBorderTopStyle(final String borderTopStyle) throws DOMException {
updateInlineStyle("border-top-style", borderTopStyle);
}
@Override
public void setBorderRightStyle(final String borderRightStyle) throws DOMException {
updateInlineStyle("border-right-style", borderRightStyle);
}
@Override
public void setBorderBottomStyle(final String borderBottomStyle) throws DOMException {
updateInlineStyle("border-bottom-style", borderBottomStyle);
}
@Override
public void setBorderLeftStyle(final String borderLeftStyle) throws DOMException {
updateInlineStyle("border-left-style", borderLeftStyle);
}
@Override
public void setBorderTopWidth(final String borderTopWidth) throws DOMException {
updateInlineStyle("border-top-width", borderTopWidth);
}
@Override
public void setBorderRightWidth(final String borderRightWidth) throws DOMException {
updateInlineStyle("border-right-width", borderRightWidth);
}
@Override
public void setBorderBottomWidth(final String borderBottomWidth) throws DOMException {
updateInlineStyle("border-bottom-width", borderBottomWidth);
}
@Override
public void setBorderLeftWidth(final String borderLeftWidth) throws DOMException {
updateInlineStyle("border-left-width", borderLeftWidth);
}
@Override
public void setBorderWidth(final String borderWidth) throws DOMException {
updateInlineStyle("border-width", borderWidth);
}
@Override
public void setBottom(final String bottom) throws DOMException {
updateInlineStyle("bottom", bottom);
}
@Override
public void setCaptionSide(final String captionSide) throws DOMException {
updateInlineStyle("caption-side", captionSide);
}
@Override
public void setClear(final String clear) throws DOMException {
updateInlineStyle("clear", clear);
}
@Override
public void setClip(final String clip) throws DOMException {
updateInlineStyle("clip", clip);
}
@Override
public void setColor(final String color) throws DOMException {
updateInlineStyle("color", color);
}
@Override
public void setContent(final String content) throws DOMException {
updateInlineStyle("content", content);
}
@Override
public void setCounterIncrement(final String counterIncrement) throws DOMException {
updateInlineStyle("counter-increment", counterIncrement);
}
@Override
public void setCounterReset(final String counterReset) throws DOMException {
updateInlineStyle("counter-reset", counterReset);
}
@Override
public void setCue(final String cue) throws DOMException {
updateInlineStyle("cue", cue);
}
@Override
public void setCueAfter(final String cueAfter) throws DOMException {
updateInlineStyle("cue-after", cueAfter);
}
@Override
public void setCueBefore(final String cueBefore) throws DOMException {
updateInlineStyle("cue-before", cueBefore);
}
@Override
public void setCursor(final String cursor) throws DOMException {
updateInlineStyle("cursor", cursor);
}
@Override
public void setDirection(final String direction) throws DOMException {
updateInlineStyle("direction", direction);
}
@Override
public void setDisplay(final String display) throws DOMException {
updateInlineStyle("display", display);
}
@Override
public void setElevation(final String elevation) throws DOMException {
updateInlineStyle("elevation", elevation);
}
@Override
public void setEmptyCells(final String emptyCells) throws DOMException {
updateInlineStyle("empty-cells", emptyCells);
}
@Override
public void setCssFloat(final String cssFloat) throws DOMException {
updateInlineStyle("css-float", cssFloat);
}
@Override
public void setFont(final String font) throws DOMException {
updateInlineStyle("font", font);
}
@Override
public void setFontFamily(final String fontFamily) throws DOMException {
updateInlineStyle("font-family", fontFamily);
}
@Override
public void setFontSize(final String fontSize) throws DOMException {
updateInlineStyle("font-size", fontSize);
}
@Override
public void setFontSizeAdjust(final String fontSizeAdjust) throws DOMException {
updateInlineStyle("font-size-adjust", fontSizeAdjust);
}
@Override
public void setFontStretch(final String fontStretch) throws DOMException {
updateInlineStyle("font-stretch", fontStretch);
}
@Override
public void setFontStyle(final String fontStyle) throws DOMException {
updateInlineStyle("font-style", fontStyle);
}
@Override
public void setFontVariant(final String fontVariant) throws DOMException {
updateInlineStyle("font-Variant", fontVariant);
}
@Override
public void setFontWeight(final String fontWeight) throws DOMException {
updateInlineStyle("font-weight", fontWeight);
}
@Override
public void setHeight(final String height) throws DOMException {
updateInlineStyle("height", height);
}
@Override
public void setLeft(final String left) throws DOMException {
updateInlineStyle("left", left);
}
@Override
public void setLetterSpacing(final String letterSpacing) throws DOMException {
updateInlineStyle("letter-spacing", letterSpacing);
}
@Override
public void setLineHeight(final String lineHeight) throws DOMException {
updateInlineStyle("line-height", lineHeight);
}
@Override
public void setListStyle(final String listStyle) throws DOMException {
updateInlineStyle("list-Style", listStyle);
}
@Override
public void setListStyleImage(final String listStyleImage) throws DOMException {
updateInlineStyle("list-style-image", listStyleImage);
}
@Override
public void setListStylePosition(final String listStylePosition) throws DOMException {
updateInlineStyle("list-style-position", listStylePosition);
}
@Override
public void setListStyleType(final String listStyleType) throws DOMException {
updateInlineStyle("list-style-type", listStyleType);
}
@Override
public void setMargin(final String margin) throws DOMException {
updateInlineStyle("margin", margin);
}
@Override
public void setMarginTop(final String marginTop) throws DOMException {
updateInlineStyle("margin-top", marginTop);
}
@Override
public void setMarginRight(final String marginRight) throws DOMException {
updateInlineStyle("margin-right", marginRight);
}
@Override
public void setMarginBottom(final String marginBottom) throws DOMException {
updateInlineStyle("margin-bottom", marginBottom);
}
@Override
public void setMarginLeft(final String marginLeft) throws DOMException {
updateInlineStyle("margin-left", marginLeft);
}
@Override
public void setMarkerOffset(final String markerOffset) throws DOMException {
updateInlineStyle("marker-offset", markerOffset);
}
@Override
public void setMarks(final String marks) throws DOMException {
updateInlineStyle("marks", marks);
}
@Override
public void setMaxHeight(final String maxHeight) throws DOMException {
updateInlineStyle("max-height", maxHeight);
}
@Override
public void setMaxWidth(final String maxWidth) throws DOMException {
updateInlineStyle("max-width", maxWidth);
}
@Override
public void setMinHeight(final String minHeight) throws DOMException {
updateInlineStyle("min-height", minHeight);
}
@Override
public void setMinWidth(final String minWidth) throws DOMException {
updateInlineStyle("min-width", minWidth);
}
@Override
public void setOrphans(final String orphans) throws DOMException {
updateInlineStyle("orphans", orphans);
}
@Override
public void setOutline(final String outline) throws DOMException {
updateInlineStyle("outline", outline);
}
@Override
public void setOutlineColor(final String outlineColor) throws DOMException {
updateInlineStyle("outline-color", outlineColor);
}
@Override
public void setOutlineStyle(final String outlineStyle) throws DOMException {
updateInlineStyle("outline-style", outlineStyle);
}
@Override
public void setOutlineWidth(final String outlineWidth) throws DOMException {
updateInlineStyle("outline-width", outlineWidth);
}
@Override
public void setOverflow(final String overflow) throws DOMException {
updateInlineStyle("overflow", overflow);
}
@Override
public void setPadding(final String padding) throws DOMException {
updateInlineStyle("padding", padding);
}
@Override
public void setPaddingTop(final String paddingTop) throws DOMException {
updateInlineStyle("padding-top", paddingTop);
}
@Override
public void setPaddingRight(final String paddingRight) throws DOMException {
updateInlineStyle("padding-right", paddingRight);
}
@Override
public void setPaddingBottom(final String paddingBottom) throws DOMException {
updateInlineStyle("padding-bottom", paddingBottom);
}
@Override
public void setPaddingLeft(final String paddingLeft) throws DOMException {
updateInlineStyle("padding-left", paddingLeft);
}
@Override
public void setPage(final String page) throws DOMException {
updateInlineStyle("page", page);
}
@Override
public void setPageBreakAfter(final String pageBreakAfter) throws DOMException {
updateInlineStyle("page-break-after", pageBreakAfter);
}
@Override
public void setPageBreakBefore(final String pageBreakBefore) throws DOMException {
updateInlineStyle("page-break-before", pageBreakBefore);
}
@Override
public void setPageBreakInside(final String pageBreakInside) throws DOMException {
updateInlineStyle("page-break-inside", pageBreakInside);
}
@Override
public void setPause(final String pause) throws DOMException {
updateInlineStyle("pause", pause);
}
@Override
public void setPauseAfter(final String pauseAfter) throws DOMException {
updateInlineStyle("pause-after", pauseAfter);
}
@Override
public void setPauseBefore(final String pauseBefore) throws DOMException {
updateInlineStyle("pause-before", pauseBefore);
}
@Override
public void setPitch(final String pitch) throws DOMException {
updateInlineStyle("pitch", pitch);
}
@Override
public void setPitchRange(final String pitchRange) throws DOMException {
updateInlineStyle("pitch-range", pitchRange);
}
@Override
public void setPlayDuring(final String playDuring) throws DOMException {
updateInlineStyle("play-during", playDuring);
}
@Override
public void setPosition(final String position) throws DOMException {
updateInlineStyle("position", position);
}
@Override
public void setQuotes(final String quotes) throws DOMException {
updateInlineStyle("quotes", quotes);
}
@Override
public void setRichness(final String richness) throws DOMException {
updateInlineStyle("richness", richness);
}
@Override
public void setRight(final String right) throws DOMException {
updateInlineStyle("right", right);
}
@Override
public void setSize(final String size) throws DOMException {
updateInlineStyle("size", size);
}
@Override
public void setSpeak(final String speak) throws DOMException {
updateInlineStyle("speak", speak);
}
@Override
public void setSpeakHeader(final String speakHeader) throws DOMException {
updateInlineStyle("speak-header", speakHeader);
}
@Override
public void setSpeakNumeral(final String speakNumeral) throws DOMException {
updateInlineStyle("speak-numeral", speakNumeral);
}
@Override
public void setSpeakPunctuation(final String speakPunctuation) throws DOMException {
updateInlineStyle("speak-punctuation", speakPunctuation);
}
@Override
public void setSpeechRate(final String speechRate) throws DOMException {
updateInlineStyle("speech-rate", speechRate);
}
@Override
public void setStress(final String stress) throws DOMException {
updateInlineStyle("stress", stress);
}
@Override
public void setTableLayout(final String tableLayout) throws DOMException {
updateInlineStyle("table-layout", tableLayout);
}
@Override
public void setTextAlign(final String textAlign) throws DOMException {
updateInlineStyle("text-align", textAlign);
}
@Override
public void setTextDecoration(final String textDecoration) throws DOMException {
updateInlineStyle("text-decoration", textDecoration);
}
@Override
public void setTextIndent(final String textIndent) throws DOMException {
updateInlineStyle("text-indent", textIndent);
}
@Override
public void setTextShadow(final String textShadow) throws DOMException {
updateInlineStyle("text-shadow", textShadow);
}
@Override
public void setTextTransform(final String textTransform) throws DOMException {
updateInlineStyle("text-transform", textTransform);
}
@Override
public void setTop(final String top) throws DOMException {
updateInlineStyle("top", top);
}
@Override
public void setUnicodeBidi(final String unicodeBidi) throws DOMException {
updateInlineStyle("unicode-bidi", unicodeBidi);
}
@Override
public void setVerticalAlign(final String verticalAlign) throws DOMException {
updateInlineStyle("vertical-align", verticalAlign);
}
@Override
public void setVisibility(final String visibility) throws DOMException {
updateInlineStyle("visibility", visibility);
}
@Override
public void setVoiceFamily(final String voiceFamily) throws DOMException {
updateInlineStyle("voice-family", voiceFamily);
}
@Override
public void setVolume(final String volume) throws DOMException {
updateInlineStyle("volume", volume);
}
@Override
public void setWhiteSpace(final String whiteSpace) throws DOMException {
updateInlineStyle("white-space", whiteSpace);
}
@Override
public void setWidows(final String widows) throws DOMException {
updateInlineStyle("widows", widows);
}
@Override
public void setWidth(final String width) throws DOMException {
updateInlineStyle("width", width);
}
@Override
public void setWordSpacing(final String wordSpacing) throws DOMException {
updateInlineStyle("word-spacing", wordSpacing);
}
@Override
public void setZIndex(final String zIndex) throws DOMException {
updateInlineStyle("z-index", zIndex);
}
@Override
protected NodeData getNodeData() {
final HTMLElementImpl ele = this.element;
final String inlineStyle = ele.getAttribute("style");
if ((inlineStyle != null) && (inlineStyle.length() > 0)) {
final List<StyleSheet> jSheets = new ArrayList<>();
final StyleSheet jSheet = CSSUtilities.jParseInlineStyle(inlineStyle, null, ele, true);
jSheets.add(jSheet);
final DirectAnalyzer domAnalyser = new cz.vutbr.web.domassign.DirectAnalyzer(jSheets);
return domAnalyser.getElementStyle(ele, null, "screen");
}
return null;
}
private void updateInlineStyle(final String propertyName, final String propertyValue) {
final Element ele = this.element;
if (ele != null) {
final StringBuilder sb = new StringBuilder();
final String inlineStyle = ele.getAttribute("style");
if ((inlineStyle != null) && (inlineStyle.length() > 0)) {
final String propertyNameLC = propertyName.toLowerCase();
final String[] styleDeclarations = inlineStyle.split(";");
for (final String styleDeclaration : styleDeclarations) {
final String[] nameValue = styleDeclaration.split(":");
if (nameValue.length == 2) {
final String oldPropertyName = nameValue[0].toLowerCase().trim();
if (!(oldPropertyName.equals(propertyNameLC))) {
sb.append(styleDeclaration + ";");
}
}
}
}
sb.append(propertyName + ":" + propertyValue + ";");
ele.setAttribute("style", sb.toString());
}
}
}