protected void printStartTag(String name, EnumSet<EOpt> opts) { indent(opts); sb.setLength(0); out.print(sb.append('<').append(name).toString()); // for easier mock test }
protected void addAttr(String name, String value) { checkState(!attrsClosed, "attribute added after content"); startIfNeeded(); printAttr(name, value); }
@Override public T __() { closeAttrs(); --nestLevel; printEndTag(name, opts); return parent; }
@Override public TR<THEAD<T>> tr(String selector) { return setSelector(tr(), selector); } }
@Override public HTML<T> script(String src) { return setScriptSrc(script(), src).__(); }
@Override public HTML<T> link(String href) { return setLinkHref(link(), href).__(); }
private void startIfNeeded() { if (!started) { printStartTag(name, opts); started = true; } }
public <T extends __> Generic<T> root(String name) { return root(name, of(ENDTAG)); }
protected void _v(Class<? extends SubView> cls) { closeAttrs(); subView(cls); }
/** * Set id and/or class attributes for an element. * @param <E> type of the element * @param e the element * @param selector Haml form of "(#id)?(.class)*" * @return the element */ public static <E extends CoreAttrs> E setSelector(E e, String selector) { String[] res = parseSelector(selector); if (res[S_ID] != null) { e.$id(res[S_ID]); } if (res[S_CLASS] != null) { e.$class(res[S_CLASS]); } return e; }
@Override public FIELDSET<MAP<T>> fieldset(String selector) { return setSelector(fieldset(), selector); } }
@Override public CAPTION<T> script(String src) { return setScriptSrc(script(), src).__(); }
@Override public HEAD<T> link(String href) { return setLinkHref(link(), href).__(); }
@Override public TR<TFOOT<T>> tr(String selector) { return setSelector(tr(), selector); } }
@Override public LEGEND<T> script(String src) { return setScriptSrc(script(), src).__(); }
/** * Sub-classes should override this to do something interesting. * @param cls the sub-view class */ protected void subView(Class<? extends SubView> cls) { indent(of(ENDTAG)); // not an inline view sb.setLength(0); out.print(sb.append('[').append(cls.getName()).append(']').toString()); out.println(); }
@Override public OBJECT<HEAD<T>> object(String selector) { return setSelector(object(), selector); } }
@Override public LI<T> script(String src) { return setScriptSrc(script(), src).__(); }
protected void printEndTag(String name, EnumSet<EOpt> opts) { if (!opts.contains(ENDTAG)) { return; } if (!opts.contains(PRE)) { indent(opts); } else { wasInline = opts.contains(INLINE); } sb.setLength(0); out.print(sb.append("</").append(name).append('>').toString()); // ditto if (!opts.contains(INLINE)) { out.println(); } }
@Override public FIELDSET<FORM<T>> fieldset(String selector) { return setSelector(fieldset(), selector); } }