/* * 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(); } }