package xapi.dev.source;
import xapi.util.X_String;
import xapi.util.api.ConvertsValue;
public class DomBuffer extends XmlBuffer {
public DomBuffer() {
}
public DomBuffer(final String name) {
super(name);
}
public DomBuffer(final String name, boolean compact) {
super(name);
if (compact) {
setTrimWhitespace(true);
setNewLine(false);
}
}
/**
* This method is inherently unsafe;
* thus it is package-local, to force you to come read this comment.
*
* This is going to make a nameless, compact DomBuffer, with this
* builder inserted as it's target (the head of the string building),
* but when a new node is added, this builder will be finalized,
* and future appends will be ignored.
*
* This behavior may change (by passing references instead of calling .toString()
*/
DomBuffer(StringBuilder suffix) {
super(suffix);
setTrimWhitespace(true);
setNewLine(false);
}
public DomBuffer setData(final String key, String value) {
String keyName = toDataAttrName(key);
if (X_String.isEmpty(value)) {
return this;
} else {
setAttribute(keyName, value);
}
return this;
}
public String toDataAttrName(String key) {
key = key.replaceAll("[A-Z]", "-$1").toLowerCase();
key = maybePrefixDataAttr(key);
if (!key.startsWith("data-")) {
key = "data-"+key;
}
return key;
}
/**
* Override this method, or set the system / configuration property data-attr-withPrefix to add a withPrefix to all data uris.
* <p>
* This is helpful for namespacing your apis automatically.
*/
protected String maybePrefixDataAttr(String key) {
return System.getProperty("data-attr-withPrefix", "") + key;
}
public DomBuffer setClassName(final String clsName) {
setAttribute("class", clsName);
return this;
}
public DomBuffer addClassName(final String clsName) {
if (hasAttribute("class")) {
setAttribute("class", getAttribute("class") + " " + clsName);
} else {
setAttribute("class", clsName);
}
return this;
}
public DomBuffer setAlt(final String alt) {
setAttribute("alt", alt);
return this;
}
public DomBuffer setHref(final String href) {
setAttribute("href", href);
return this;
}
public DomBuffer setSrc(final String src) {
setAttribute("src", src);
return this;
}
public DomBuffer setName(final String name) {
setAttribute("name", name);
return this;
}
public DomBuffer setType(final String type) {
setAttribute("type", type);
return this;
}
public DomBuffer setValue(final String value) {
setAttribute("value", value);
return this;
}
public DomBuffer setAction(final String action) {
setAttribute("action", action);
return this;
}
public DomBuffer setTarget(final String target) {
setAttribute("target", target);
return this;
}
public DomBuffer setMethod(final String method) {
setAttribute("method", method);
return this;
}
public DomBuffer setEnctype(final String enctype) {
setAttribute("enctype", enctype);
return this;
}
public DomBuffer setRel(final String rel) {
setAttribute("rel", rel);
return this;
}
@Override
public DomBuffer setTagName(final String name) {
super.setTagName(name);
return this;
}
@Override
public DomBuffer setAttribute(final String name, final String value) {
super.setAttribute(name, value);
return this;
}
@Override
protected DomBuffer newChild() {
return new DomBuffer();
}
@Override
protected PrintBuffer newChild(StringBuilder suffix) {
final DomBuffer buffer = new DomBuffer(suffix);
buffer.append(suffix);
return buffer;
}
@Override
public DomBuffer makeChild() {
return (DomBuffer) super.makeChild();
}
public DomBuffer makeHiddenIframe() {
final DomBuffer iframe = makeTag("iframe")
.setClassName("hidden-frame")
.setAttribute("width", "0")
.setAttribute("height", "0")
.allowAbbreviation(false)
.setNewLine(false)
;
iframe.setAttribute("name", iframe.getId());
println();
return iframe;
}
public DomBuffer makeDiv() {
return makeTag("div");
}
public DomBuffer makeForm() {
return makeTag("form");
}
public DomBuffer makeLi() {
return makeTag("li");
}
public DomBuffer makeUl() {
return makeTag("ul");
}
public DomBuffer makeOl() {
return makeTag("ol");
}
public DomBuffer makeHeader(final int h) {
assert h > 0 && h < 7;
return makeTag("h"+h);
}
public DomBuffer makeBr() {
return makeTag("br")
.setNewLine(false)
.allowAbbreviation(true);
}
public DomBuffer makeFieldset() {
return makeTag("fieldset");
}
public DomBuffer makeParagraph() {
return makeTag("p");
}
public DomBuffer makeImg() {
return makeTag("img");
}
public DomBuffer makeInput() {
return makeTag("input");
}
public DomBuffer makeSpan() {
return makeTag("span");
}
public DomBuffer makeAnchor() {
return makeTag("a");
}
public DomBuffer makeAnchorEmpty() {
return makeTag("a").allowAbbreviation(false);
}
public DomBuffer makeAnchorInline() {
return makeTag("a").setNewLine(false);
}
@Override
public DomBuffer makeTag(final String name) {
final DomBuffer buffer = new DomBuffer(name);
buffer.setNewLine(printNewline);
buffer.setTrimWhitespace(trimWhitespace);
buffer.indent = isNoTagName() ? indent : indent + INDENT;
addToEnd(buffer);
return buffer;
}
@Override
public DomBuffer makeTagNoIndent(final String name) {
final DomBuffer buffer = new DomBuffer(name);
buffer.setNewLine(printNewline);
buffer.setTrimWhitespace(trimWhitespace);
buffer.indent = indent + INDENT;
buffer.setNewLine(false);
addToEnd(buffer);
return buffer;
}
@Override
public DomBuffer makeTagAtBeginning(final String name) {
final DomBuffer buffer = new DomBuffer(name);
buffer.setTrimWhitespace(trimWhitespace);
buffer.indent = indent + INDENT;
addToBeginning(buffer);
return buffer;
}
@Override
public DomBuffer makeTagAtBeginningNoIndent(final String name) {
final DomBuffer buffer = new DomBuffer(name);
buffer.setTrimWhitespace(trimWhitespace);
buffer.setNewLine(false);
buffer.indent = indent + INDENT;
addToBeginning(buffer);
return buffer;
}
@Override
public DomBuffer setNewLine(final boolean useNewLine) {
super.setNewLine(useNewLine);
return this;
}
@Override
public DomBuffer setTrimWhitespace(boolean trimWhitespace) {
super.setTrimWhitespace(trimWhitespace);
return this;
}
@Override
public DomBuffer append(final Object obj) {
super.append(obj);
return this;
}
@Override
public DomBuffer print(final String str) {
super.print(str);
return this;
}
@Override
public DomBuffer clearIndent() {
super.clearIndent();
return this;
}
@Override
public DomBuffer append(final String str) {
super.append(str);
return this;
}
@Override
public DomBuffer append(final CharSequence s) {
super.append(s);
return this;
}
@Override
public DomBuffer append(final CharSequence s, final int start, final int end) {
super.append(s, start, end);
return this;
}
@Override
public DomBuffer append(final char[] str) {
super.append(str);
return this;
}
@Override
public DomBuffer append(final char[] str, final int offset, final int len) {
super.append(str, offset, len);
return this;
}
@Override
public DomBuffer append(final boolean b) {
super.append(b);
return this;
}
@Override
public DomBuffer append(final char c) {
super.append(c);
return this;
}
@Override
public DomBuffer append(final int i) {
super.append(i);
return this;
}
@Override
public DomBuffer append(final long lng) {
super.append(lng);
return this;
}
@Override
public DomBuffer append(final float f) {
super.append(f);
return this;
}
@Override
public DomBuffer append(final double d) {
super.append(d);
return this;
}
@Override
public DomBuffer indent() {
super.indent();
return this;
}
@Override
public DomBuffer indentln(final Object obj) {
super.indentln(obj);
return this;
}
@Override
public DomBuffer indentln(final String str) {
super.indentln(str);
return this;
}
@Override
public DomBuffer indentln(final CharSequence s) {
super.indentln(s);
return this;
}
@Override
public DomBuffer indentln(final char[] str) {
super.indentln(str);
return this;
}
@Override
public DomBuffer outdent() {
super.outdent();
return this;
}
@Override
public DomBuffer println() {
super.println();
return this;
}
@Override
public DomBuffer println(final Object obj) {
super.println(obj);
return this;
}
@Override
public DomBuffer println(final String str) {
super.println(str);
return this;
}
@Override
public DomBuffer println(final CharSequence s) {
super.println(s);
return this;
}
@Override
public DomBuffer println(final char[] str) {
super.println(str);
return this;
}
@Override
public DomBuffer setId(final String id) {
setAttribute("id", id);
return this;
}
@Override
public DomBuffer clear() {
super.clear();
return this;
}
@Override
public DomBuffer allowAbbreviation(final boolean abbr) {
super.allowAbbreviation(abbr);
return this;
}
public DomBuffer makeTextArea() {
return makeTag("textarea")
.setNewLine(false)
.allowAbbreviation(false);
}
public void setPlaceholder(final String placeholder) {
setAttribute("placeholder", placeholder);
}
@Override
public DomBuffer setEscaper(final ConvertsValue<String, String> escaper) {
super.setEscaper(escaper);
return this;
}
public DomBuffer add(Object ... values) {
super.add(values);
return this;
}
@Override
public DomBuffer ln() {
super.ln();
return this;
}
public DomBuffer setTitle(final String title) {
setAttribute("title", title);
return this;
}
}