/* * 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.Element; import com.google.gwt.safehtml.shared.SafeHtml; /** * Base class for element builders used to builder DOM elements. * * @param <T> the builder type returns from build methods */ public interface ElementBuilderBase<T extends ElementBuilderBase<?>> { /** * Add an integer attribute to the object. * * @return this builder */ T attribute(String name, int value); /** * Add a string attribute to the object. * * @return this builder */ T attribute(String name, String value); /** * The class attribute of the element. This attribute has been renamed due to * conflicts with the "class" keyword exposed by many languages. * * @return this builder * @see <a * href="http://www.w3.org/TR/1999/REC-html401-19991224/struct/global.html#adef-class">W3C * HTML Specification</a> */ T className(String className); /** * Specifies the base direction of directionally neutral text and the * directionality of tables. * * @return this builder */ T dir(String dir); /** * Changes the draggable attribute to one of {@link Element#DRAGGABLE_AUTO}, * {@link Element#DRAGGABLE_FALSE}, or {@link Element#DRAGGABLE_TRUE}. * * @param draggable a String constant * @return this builder */ T draggable(String draggable); /** * End the current element without checking its type. */ void end(); /** * End the current element after checking that its tag is the specified * tagName. * * @param tagName the expected tagName of the current element * @see #end() */ void end(String tagName); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endAnchor(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endArea(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endAudio(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endBase(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endBlockQuote(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endBody(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endBR(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endButton(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endCanvas(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endCol(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endColGroup(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endDiv(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endDList(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endFieldSet(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endForm(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endFrame(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endFrameSet(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endH1(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endH2(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endH3(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endH4(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endH5(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endH6(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endHead(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endHR(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endIFrame(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endImage(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endInput(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endLabel(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endLegend(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endLI(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endLink(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endMap(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endMeta(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endOList(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endOptGroup(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endOption(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endParagraph(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endParam(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endPre(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endQuote(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endScript(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endSelect(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endSource(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endSpan(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endStyle(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endTable(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endTableCaption(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endTBody(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endTD(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endTextArea(); /** * End the current element. . * * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endTFoot(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endTH(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endTHead(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endTR(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endUList(); /** * End the current element. * * @throws IllegalStateException if the current element has the wrong tag * @see #end() */ void endVideo(); /** * Return the built DOM as an {@link Element}. * * <p> * Any lingering open elements are automatically closed. Once you call * {@link #finish()}, you can not longer call any other methods in this class. * </p> * * @return the {@link Element} that was built * @throws IllegalStateException if called twice */ Element finish(); /** * Get the element depth of the current builder. */ int getDepth(); /** * Append html within the node. * * <p> * Once you append HTML to the element, you can no longer set attributes. * * @param html the HTML to append * @return this builder */ T html(SafeHtml html); /** * Set the id. * * @param id the id * @return this builder */ T id(String id); /** * Check if child elements are supported. * * @return true if supported, false if not. */ boolean isChildElementSupported(); /** * Check if an end tag is forbidden for this element. If the end tag is * forbidden, then setting inner html or text or appending an element will * trigger an {@link UnsupportedOperationException}. * * @return true if forbidden, false if not */ boolean isEndTagForbidden(); /** * Language code defined in RFC 1766. * * @return this builder */ T lang(String lang); /** * Append a anchor element. * * @return the builder for the new element */ AnchorBuilder startAnchor(); /** * Append a area element. * * @return the builder for the new element */ AreaBuilder startArea(); /** * Append a audio element. * * @return the builder for the new element */ AudioBuilder startAudio(); /** * Append a base element. * * @return the builder for the new element */ BaseBuilder startBase(); /** * Append a block quote element. * * @return the builder for the new element */ QuoteBuilder startBlockQuote(); /** * Append a body element. * * @return the builder for the new element */ BodyBuilder startBody(); /** * Append a br element. * * @return the builder for the new element */ BRBuilder startBR(); /** * Append an <input type='button'> element. * * @return the builder for the new element */ InputBuilder startButtonInput(); /** * Append a canvas element. * * @return the builder for the new element */ CanvasBuilder startCanvas(); /** * Append an <input type='check'> element. * * @return the builder for the new element */ InputBuilder startCheckboxInput(); /** * Append a tablecol element. * * @return the builder for the new element */ TableColBuilder startCol(); /** * Append a tablecol element. * * @return the builder for the new element */ TableColBuilder startColGroup(); /** * Append a div element. * * @return the builder for the new element */ DivBuilder startDiv(); /** * Append a dlist element. * * @return the builder for the new element */ DListBuilder startDList(); /** * Append a fieldset element. * * @return the builder for the new element */ FieldSetBuilder startFieldSet(); /** * Append an <input type='file'> element. * * @return the builder for the new element */ InputBuilder startFileInput(); /** * Append a form element. * * @return the builder for the new element */ FormBuilder startForm(); /** * Append a frame element. * * @return the builder for the new element */ FrameBuilder startFrame(); /** * Append a frameset element. * * @return the builder for the new element */ FrameSetBuilder startFrameSet(); /** * Append a heading element. * * @return the builder for the new element */ HeadingBuilder startH1(); /** * Append a heading element. * * @return the builder for the new element */ HeadingBuilder startH2(); /** * Append a heading element. * * @return the builder for the new element */ HeadingBuilder startH3(); /** * Append a heading element. * * @return the builder for the new element */ HeadingBuilder startH4(); /** * Append a heading element. * * @return the builder for the new element */ HeadingBuilder startH5(); /** * Append a heading element. * * @return the builder for the new element */ HeadingBuilder startH6(); /** * Append a head element. * * @return the builder for the new element */ HeadBuilder startHead(); /** * Append an <input type='hidden'> element. * * @return the builder for the new element */ InputBuilder startHiddenInput(); /** * Append a hr element. * * @return the builder for the new element */ HRBuilder startHR(); /** * Append a iframe element. * * @return the builder for the new element */ IFrameBuilder startIFrame(); /** * Append a image element. * * @return the builder for the new element */ ImageBuilder startImage(); /** * Append an <input type='image'> element. * * @return the builder for the new element */ InputBuilder startImageInput(); /** * Append a label element. * * @return the builder for the new element */ LabelBuilder startLabel(); /** * Append a legend element. * * @return the builder for the new element */ LegendBuilder startLegend(); /** * Append a li element. * * @return the builder for the new element */ LIBuilder startLI(); /** * Append a link element. * * @return the builder for the new element */ LinkBuilder startLink(); /** * Append a map element. * * @return the builder for the new element */ MapBuilder startMap(); /** * Append a meta element. * * @return the builder for the new element */ MetaBuilder startMeta(); /** * Append a olist element. * * @return the builder for the new element */ OListBuilder startOList(); /** * Append a optgroup element. * * @return the builder for the new element */ OptGroupBuilder startOptGroup(); /** * Append an option element. * * @return the builder for the new element */ OptionBuilder startOption(); /** * Append a paragraph element. * * @return the builder for the new element */ ParagraphBuilder startParagraph(); /** * Append a param element. * * @return the builder for the new element */ ParamBuilder startParam(); /** * Append an <input type='password'> element. * * @return the builder for the new element */ InputBuilder startPasswordInput(); /** * Append a pre element. * * @return the builder for the new element */ PreBuilder startPre(); /** * Append a button element with type "button". * * @return the builder for the new element */ ButtonBuilder startPushButton(); /** * Append a quote element. * * @return the builder for the new element */ QuoteBuilder startQuote(); /** * Append an <input type='radio'> element. * * @param name name the name of the radio input (used for grouping) * @return the builder for the new element */ InputBuilder startRadioInput(String name); /** * Append a button element with type "reset". * * @return the builder for the new element */ ButtonBuilder startResetButton(); /** * Append an <input type='reset'> element. * * @return the builder for the new element */ InputBuilder startResetInput(); /** * Append a script element. * * @return the builder for the new element */ ScriptBuilder startScript(); /** * Append a select element. * * @return the builder for the new element */ SelectBuilder startSelect(); /** * Append a source element. * * @return the builder for the new element */ SourceBuilder startSource(); /** * Append a span element. * * @return the builder for the new element */ SpanBuilder startSpan(); /** * Append a style element. * * @return the builder for the new element */ StyleBuilder startStyle(); /** * Append a button element with type "submit". * * @return the builder for the new element */ ButtonBuilder startSubmitButton(); /** * Append an <input type='submit'> element. * * @return the builder for the new element */ InputBuilder startSubmitInput(); /** * Append a table element. * * @return the builder for the new element */ TableBuilder startTable(); /** * Append a table caption element. * * @return the builder for the new element */ TableCaptionBuilder startTableCaption(); /** * Append a tbody element. * * @return the builder for the new element */ TableSectionBuilder startTBody(); /** * Append a td element. * * @return the builder for the new element */ TableCellBuilder startTD(); /** * Append a textarea element. * * @return the builder for the new element */ TextAreaBuilder startTextArea(); /** * Append an <input type='text'> element. * * @return the builder for the new element */ InputBuilder startTextInput(); /** * Append a tfoot element. * * @return the builder for the new element */ TableSectionBuilder startTFoot(); /** * Append a th element. * * @return the builder for the new element */ TableCellBuilder startTH(); /** * Append a thead element. * * @return the builder for the new element */ TableSectionBuilder startTHead(); /** * Append a tablerow element. * * @return the builder for the new element */ TableRowBuilder startTR(); /** * Append a ulist element. * * @return the builder for the new element */ UListBuilder startUList(); /** * Append a video element. * * @return the builder for the new element */ VideoBuilder startVideo(); /** * Start the {@link StylesBuilder} used to add style properties to the style * attribute of the current element. * * @return the {@link StylesBuilder} */ StylesBuilder style(); /** * Set the tab index. * * @param tabIndex the tab index * @return this builder */ T tabIndex(int tabIndex); /** * Append text within the node. * * <p> * Once you append text to the element, you can no longer set attributes. * </p> * * <p> * A string-based implementation will escape the text to prevent * HTML/javascript code from executing. DOM based implementations are not * required to escape the text if they directly set the innerText of an * element. * </p> * * @param text the text to append * @return this builder */ T text(String text); /** * The element's advisory title. * * @return this builder */ T title(String title); /** * Append a new element with the specified trusted 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 * @return the {@link ElementBuilder} for the new element */ ElementBuilder trustedStart(String tagName); }