blob: 82e0423cb086eb9a80ee64d01262e01bc89509f9 [file] [log] [blame]
/*
* Copyright 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.dom.builder.shared;
import com.google.gwt.dom.client.TitleElement;
import com.google.gwt.safehtml.shared.SafeHtml;
/**
* Implementation of {@link ElementBuilderBase} that delegates to an
* {@link HtmlBuilderImpl}.
*
* <p>
* Subclasses of {@link HtmlElementBuilderBase} act as typed wrappers around a
* shared {@link ElementBuilderBase} implementation that handles the actual
* building. The wrappers merely delegate to the shared implementation, so
* wrapper instances can be reused, avoiding object creation. This approach is
* necessary so that the return value of common methods, such as
* {@link #id(String)}, return a typed builder instead of the generic
* {@link ElementBuilderBase}.
* </p>
*
* @param <R> the builder type returned from build methods
*/
public class HtmlElementBuilderBase<R extends ElementBuilderBase<?>> extends
AbstractElementBuilderBase<R> {
private final HtmlBuilderImpl delegate;
/**
* Construct a new {@link HtmlElementBuilderBase}.
*
* @param delegate the delegate that builds the element
*/
HtmlElementBuilderBase(HtmlBuilderImpl delegate) {
this(delegate, false);
}
/**
* Construct a new {@link HtmlElementBuilderBase}.
*
* @param delegate the delegate that builds the element
* @param isEndTagForbidden true if the end tag is forbidden for this element
*/
HtmlElementBuilderBase(HtmlBuilderImpl delegate, boolean isEndTagForbidden) {
super(delegate, isEndTagForbidden);
this.delegate = delegate;
}
/**
* Return the HTML as a {@link SafeHtml} string.
*/
public SafeHtml asSafeHtml() {
return delegate.asSafeHtml();
}
@Override
public R attribute(String name, int value) {
delegate.attribute(name, value);
return getReturnBuilder();
}
@Override
public R attribute(String name, String value) {
delegate.attribute(name, value);
return getReturnBuilder();
}
@Override
public R className(String className) {
return trustedAttribute("class", className);
}
@Override
public R dir(String dir) {
return trustedAttribute("dir", dir);
}
@Override
public R draggable(String draggable) {
return trustedAttribute("draggable", draggable);
}
/**
* End the current element.
*
* @see #end()
*/
public void endTitle() {
end(TitleElement.TAG);
}
@Override
public R id(String id) {
return trustedAttribute("id", id);
}
@Override
public R lang(String lang) {
return trustedAttribute("lang", lang);
}
@Override
public AnchorBuilder startAnchor() {
return delegate.startAnchor();
}
@Override
public AreaBuilder startArea() {
return delegate.startArea();
}
@Override
public AudioBuilder startAudio() {
return delegate.startAudio();
}
@Override
public BaseBuilder startBase() {
return delegate.startBase();
}
@Override
public QuoteBuilder startBlockQuote() {
return delegate.startBlockQuote();
}
@Override
public BodyBuilder startBody() {
return delegate.startBody();
}
@Override
public BRBuilder startBR() {
return delegate.startBR();
}
@Override
public InputBuilder startButtonInput() {
return delegate.startButtonInput();
}
@Override
public CanvasBuilder startCanvas() {
return delegate.startCanvas();
}
@Override
public InputBuilder startCheckboxInput() {
return delegate.startCheckboxInput();
}
@Override
public TableColBuilder startCol() {
return delegate.startCol();
}
@Override
public TableColBuilder startColGroup() {
return delegate.startColGroup();
}
@Override
public DivBuilder startDiv() {
return delegate.startDiv();
}
@Override
public DListBuilder startDList() {
return delegate.startDList();
}
@Override
public FieldSetBuilder startFieldSet() {
return delegate.startFieldSet();
}
@Override
public InputBuilder startFileInput() {
return delegate.startFileInput();
}
@Override
public FormBuilder startForm() {
return delegate.startForm();
}
@Override
public FrameBuilder startFrame() {
return delegate.startFrame();
}
@Override
public FrameSetBuilder startFrameSet() {
return delegate.startFrameSet();
}
@Override
public HeadingBuilder startH1() {
return delegate.startH1();
}
@Override
public HeadingBuilder startH2() {
return delegate.startH2();
}
@Override
public HeadingBuilder startH3() {
return delegate.startH3();
}
@Override
public HeadingBuilder startH4() {
return delegate.startH4();
}
@Override
public HeadingBuilder startH5() {
return delegate.startH5();
}
@Override
public HeadingBuilder startH6() {
return delegate.startH6();
}
@Override
public HeadBuilder startHead() {
return delegate.startHead();
}
@Override
public InputBuilder startHiddenInput() {
return delegate.startHiddenInput();
}
@Override
public HRBuilder startHR() {
return delegate.startHR();
}
@Override
public IFrameBuilder startIFrame() {
return delegate.startIFrame();
}
@Override
public ImageBuilder startImage() {
return delegate.startImage();
}
@Override
public InputBuilder startImageInput() {
return delegate.startImageInput();
}
@Override
public LabelBuilder startLabel() {
return delegate.startLabel();
}
@Override
public LegendBuilder startLegend() {
return delegate.startLegend();
}
@Override
public LIBuilder startLI() {
return delegate.startLI();
}
@Override
public LinkBuilder startLink() {
return delegate.startLink();
}
@Override
public MapBuilder startMap() {
return delegate.startMap();
}
@Override
public MetaBuilder startMeta() {
return delegate.startMeta();
}
@Override
public OListBuilder startOList() {
return delegate.startOList();
}
@Override
public OptGroupBuilder startOptGroup() {
return delegate.startOptGroup();
}
@Override
public OptionBuilder startOption() {
return delegate.startOption();
}
@Override
public ParagraphBuilder startParagraph() {
return delegate.startParagraph();
}
@Override
public ParamBuilder startParam() {
return delegate.startParam();
}
@Override
public InputBuilder startPasswordInput() {
return delegate.startPasswordInput();
}
@Override
public PreBuilder startPre() {
return delegate.startPre();
}
@Override
public ButtonBuilder startPushButton() {
return delegate.startPushButton();
}
@Override
public QuoteBuilder startQuote() {
return delegate.startQuote();
}
@Override
public InputBuilder startRadioInput(String name) {
return delegate.startRadioInput(name);
}
@Override
public ButtonBuilder startResetButton() {
return delegate.startResetButton();
}
@Override
public InputBuilder startResetInput() {
return delegate.startResetInput();
}
@Override
public ScriptBuilder startScript() {
return delegate.startScript();
}
@Override
public SelectBuilder startSelect() {
return delegate.startSelect();
}
@Override
public SourceBuilder startSource() {
return delegate.startSource();
}
@Override
public SpanBuilder startSpan() {
return delegate.startSpan();
}
@Override
public StyleBuilder startStyle() {
return delegate.startStyle();
}
@Override
public ButtonBuilder startSubmitButton() {
return delegate.startSubmitButton();
}
@Override
public InputBuilder startSubmitInput() {
return delegate.startSubmitInput();
}
@Override
public TableBuilder startTable() {
return delegate.startTable();
}
@Override
public TableCaptionBuilder startTableCaption() {
return delegate.startTableCaption();
}
@Override
public TableSectionBuilder startTBody() {
return delegate.startTBody();
}
@Override
public TableCellBuilder startTD() {
return delegate.startTD();
}
@Override
public TextAreaBuilder startTextArea() {
return delegate.startTextArea();
}
@Override
public InputBuilder startTextInput() {
return delegate.startTextInput();
}
@Override
public TableSectionBuilder startTFoot() {
return delegate.startTFoot();
}
@Override
public TableCellBuilder startTH() {
return delegate.startTH();
}
@Override
public TableSectionBuilder startTHead() {
return delegate.startTHead();
}
/**
* Append a title element.
*
* @return the builder for the new element
*/
public TitleBuilder startTitle() {
return delegate.startTitle();
}
@Override
public TableRowBuilder startTR() {
return delegate.startTR();
}
@Override
public UListBuilder startUList() {
return delegate.startUList();
}
@Override
public VideoBuilder startVideo() {
return delegate.startVideo();
}
@Override
public R tabIndex(int tabIndex) {
return trustedAttribute("tabIndex", tabIndex);
}
@Override
public R title(String title) {
return trustedAttribute("title", title);
}
@Override
public ElementBuilder trustedStart(String tagName) {
return delegate.trustedStart(tagName);
}
/**
* Add an attribute with a trusted name.
*/
R trustedAttribute(String name, int value) {
delegate.trustedAttribute(name, value);
return getReturnBuilder();
}
/**
* Add an attribute with a trusted name. The name is still escaped.
*/
R trustedAttribute(String name, String value) {
delegate.trustedAttribute(name, value);
return getReturnBuilder();
}
}