| /* |
| * 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.core.shared.GWT; |
| |
| /** |
| * Factory for creating element builders. |
| * |
| * <p> |
| * Use {@link ElementBuilderFactory#get()} to fetch the builder factory |
| * optimized for the browser platform. |
| * </p> |
| * |
| * <p> |
| * If you are using the builder on a server, use |
| * {@link HtmlBuilderFactory#get()} instead. {@link HtmlBuilderFactory} can |
| * construct a {@link com.google.gwt.safehtml.shared.SafeHtml} string and will |
| * work on the server. Other implementations may only work on a browser client. |
| * </p> |
| * |
| * <p> |
| * Element builder methods can be chained together as with a traditional |
| * builder: |
| * </p> |
| * |
| * <pre> |
| * DivBuilder divBuilder = ElementBuilderFactory.get().createDivBuilder(); |
| * divBuilder.id("myId").text("Hello World!").endDiv(); |
| * </pre> |
| * |
| * <p> |
| * See this example: {@example |
| * com.google.gwt.examples.dom.builder.ElementBuilderFactoryChainingExample}. |
| * </p> |
| * |
| * <p> |
| * Alternatively, builders can be used as separate objects and operated on |
| * individually. This may be the preferred method if you are creating a complex |
| * or dynamic element. The code below produces the same output as the code |
| * above. |
| * </p> |
| * |
| * <pre> |
| * DivBuilder divBuilder = ElementBuilderFactory.get().createDivBuilder(); |
| * divBuilder.id("myId"); |
| * divBuilder.text("Hello World!"); |
| * divBuilder.endDiv(); |
| * </pre> |
| * |
| * <p> |
| * See an example: {@example |
| * com.google.gwt.examples.dom.builder.ElementBuilderFactoryNonChainingExample}. |
| * </p> |
| * |
| * <p> |
| * You can also mix chaining and non-chaining methods when appropriate. For |
| * example, you can add attributes to an element by chaining methods, but use a |
| * separate builder object for each separate element. |
| * </p> |
| * |
| * <p> |
| * NOTE: Builders always operate on the current element. For example, in the |
| * code below, we create two divBuilders, one a child of the other. However, |
| * they are actually the same builder instance! Implementations of |
| * ElementBuilderFactory use a single instance of each builder type to improve |
| * performance. The implication is that all element builders operate on the |
| * current element, so the call to <code>divBuilder0.id("div1")</code> will set |
| * the "id" of the child div, and is functionally equivalent to |
| * <code>divBuilder1.id("div1")</code>. Its important to always call end() |
| * before resuming work on the previous element builder. |
| * </p> |
| * |
| * <pre> |
| * DivBuilder divBuilder0 = ElementBuilderFactory.get().createDivBuilder(); |
| * DivBuilder divBuilder1 = divBuilder0.startDiv(); |
| * divBuilder0.id("div1"); // Operates on the first element! |
| * </pre> |
| */ |
| public abstract class ElementBuilderFactory { |
| |
| private static ElementBuilderFactory instance; |
| |
| /** |
| * Get the instance of the {@link ElementBuilderFactory}. |
| * |
| * @return the {@link ElementBuilderFactory} |
| */ |
| public static ElementBuilderFactory get() { |
| if (instance == null) { |
| if (GWT.isClient()) { |
| instance = GWT.create(ElementBuilderFactory.class); |
| } else { |
| // The DOM implementation will not work on the server. |
| instance = HtmlBuilderFactory.get(); |
| } |
| } |
| return instance; |
| } |
| |
| /** |
| * Created from static factory method. |
| */ |
| protected ElementBuilderFactory() { |
| } |
| |
| public abstract AnchorBuilder createAnchorBuilder(); |
| |
| public abstract AreaBuilder createAreaBuilder(); |
| |
| public abstract AudioBuilder createAudioBuilder(); |
| |
| public abstract BaseBuilder createBaseBuilder(); |
| |
| public abstract QuoteBuilder createBlockQuoteBuilder(); |
| |
| public abstract BodyBuilder createBodyBuilder(); |
| |
| public abstract BRBuilder createBRBuilder(); |
| |
| public abstract InputBuilder createButtonInputBuilder(); |
| |
| public abstract CanvasBuilder createCanvasBuilder(); |
| |
| public abstract InputBuilder createCheckboxInputBuilder(); |
| |
| public abstract TableColBuilder createColBuilder(); |
| |
| public abstract TableColBuilder createColGroupBuilder(); |
| |
| public abstract DivBuilder createDivBuilder(); |
| |
| public abstract DListBuilder createDListBuilder(); |
| |
| public abstract FieldSetBuilder createFieldSetBuilder(); |
| |
| public abstract InputBuilder createFileInputBuilder(); |
| |
| public abstract FormBuilder createFormBuilder(); |
| |
| public abstract FrameBuilder createFrameBuilder(); |
| |
| public abstract FrameSetBuilder createFrameSetBuilder(); |
| |
| public abstract HeadingBuilder createH1Builder(); |
| |
| public abstract HeadingBuilder createH2Builder(); |
| |
| public abstract HeadingBuilder createH3Builder(); |
| |
| public abstract HeadingBuilder createH4Builder(); |
| |
| public abstract HeadingBuilder createH5Builder(); |
| |
| public abstract HeadingBuilder createH6Builder(); |
| |
| public abstract HeadBuilder createHeadBuilder(); |
| |
| public abstract InputBuilder createHiddenInputBuilder(); |
| |
| public abstract HRBuilder createHRBuilder(); |
| |
| public abstract IFrameBuilder createIFrameBuilder(); |
| |
| public abstract ImageBuilder createImageBuilder(); |
| |
| public abstract InputBuilder createImageInputBuilder(); |
| |
| public abstract LabelBuilder createLabelBuilder(); |
| |
| public abstract LegendBuilder createLegendBuilder(); |
| |
| public abstract LIBuilder createLIBuilder(); |
| |
| public abstract LinkBuilder createLinkBuilder(); |
| |
| public abstract MapBuilder createMapBuilder(); |
| |
| public abstract MetaBuilder createMetaBuilder(); |
| |
| public abstract OListBuilder createOListBuilder(); |
| |
| public abstract OptGroupBuilder createOptGroupBuilder(); |
| |
| public abstract OptionBuilder createOptionBuilder(); |
| |
| public abstract ParagraphBuilder createParagraphBuilder(); |
| |
| public abstract ParamBuilder createParamBuilder(); |
| |
| public abstract InputBuilder createPasswordInputBuilder(); |
| |
| public abstract PreBuilder createPreBuilder(); |
| |
| public abstract ButtonBuilder createPushButtonBuilder(); |
| |
| public abstract QuoteBuilder createQuoteBuilder(); |
| |
| /** |
| * Create a builder for an <input type='radio'> element. |
| * |
| * @param name name the name of the radio input (used for grouping) |
| * @return the builder for the new element |
| */ |
| public abstract InputBuilder createRadioInputBuilder(String name); |
| |
| public abstract ButtonBuilder createResetButtonBuilder(); |
| |
| public abstract InputBuilder createResetInputBuilder(); |
| |
| public abstract ScriptBuilder createScriptBuilder(); |
| |
| public abstract SelectBuilder createSelectBuilder(); |
| |
| public abstract SourceBuilder createSourceBuilder(); |
| |
| public abstract SpanBuilder createSpanBuilder(); |
| |
| public abstract StyleBuilder createStyleBuilder(); |
| |
| public abstract ButtonBuilder createSubmitButtonBuilder(); |
| |
| public abstract InputBuilder createSubmitInputBuilder(); |
| |
| public abstract TableBuilder createTableBuilder(); |
| |
| public abstract TableCaptionBuilder createTableCaptionBuilder(); |
| |
| public abstract TableSectionBuilder createTBodyBuilder(); |
| |
| public abstract TableCellBuilder createTDBuilder(); |
| |
| public abstract TextAreaBuilder createTextAreaBuilder(); |
| |
| public abstract InputBuilder createTextInputBuilder(); |
| |
| public abstract TableSectionBuilder createTFootBuilder(); |
| |
| public abstract TableCellBuilder createTHBuilder(); |
| |
| public abstract TableSectionBuilder createTHeadBuilder(); |
| |
| public abstract TableRowBuilder createTRBuilder(); |
| |
| public abstract UListBuilder createUListBuilder(); |
| |
| public abstract VideoBuilder createVideoBuilder(); |
| |
| /** |
| * Create an {@link ElementBuilder} for an arbitrary tag name. The tag name |
| * will will not be checked or escaped. The calling code should be carefully |
| * reviewed to ensure that the provided tag name will not cause a security |
| * issue if including in an HTML document. In general, this means limiting the |
| * code to HTML tagName constants supported by the HTML specification. |
| * |
| * |
| * @param tagName the tag name of the new element |
| * @return an {@link ElementBuilder} used to build the element |
| */ |
| public abstract ElementBuilder trustedCreate(String tagName); |
| } |