All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.gwt.dom.builder.shared.ElementBuilderFactory Maven / Gradle / Ivy

There is a newer version: 2.10.0
Show newest version
/*
 * 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.
 * 
 * 

* Use {@link ElementBuilderFactory#get()} to fetch the builder factory * optimized for the browser platform. *

* *

* 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. *

* *

* Element builder methods can be chained together as with a traditional * builder: *

* *
 * DivBuilder divBuilder = ElementBuilderFactory.get().createDivBuilder();
 * divBuilder.id("myId").text("Hello World!").endDiv();
 * 
* *

* See this example: {@example * com.google.gwt.examples.dom.builder.ElementBuilderFactoryChainingExample}. *

* *

* 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. *

* *
 * DivBuilder divBuilder = ElementBuilderFactory.get().createDivBuilder();
 * divBuilder.id("myId");
 * divBuilder.text("Hello World!");
 * divBuilder.endDiv();
 * 
* *

* See an example: {@example * com.google.gwt.examples.dom.builder.ElementBuilderFactoryNonChainingExample}. *

* *

* 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. *

* *

* 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 divBuilder0.id("div1") will set * the "id" of the child div, and is functionally equivalent to * divBuilder1.id("div1"). Its important to always call end() * before resuming work on the previous element builder. *

* *
 * DivBuilder divBuilder0 = ElementBuilderFactory.get().createDivBuilder();
 * DivBuilder divBuilder1 = divBuilder0.startDiv();
 * divBuilder0.id("div1"); // Operates on the first element!
 * 
*/ 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); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy