HtmlElementBuilderBase (GWT Javadoc)

Overview | Package | Class | Use | Deprecated | Help
| GWT 2.7.0
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## com.google.gwt.dom.builder.shared
Class HtmlElementBuilderBase<R extends ElementBuilderBase<?>>

    java.lang.Object
      com.google.gwt.dom.builder.shared.AbstractElementBuilderBase<R>
          com.google.gwt.dom.builder.shared.HtmlElementBuilderBase<R>

Type Parameters:
  `R` - the builder type returned from build methods

All Implemented Interfaces:
  ElementBuilderBase<R>

Direct Known Subclasses:
  HtmlAnchorBuilder, HtmlAreaBuilder, HtmlBaseBuilder, HtmlBodyBuilder, HtmlBRBuilder, HtmlButtonBuilder, HtmlCanvasBuilder, HtmlDivBuilder, HtmlDListBuilder, HtmlElementBuilder, HtmlFieldSetBuilder, HtmlFormBuilder, HtmlFrameBuilder, HtmlFrameSetBuilder, HtmlHeadBuilder, HtmlHeadingBuilder, HtmlHRBuilder, HtmlIFrameBuilder, HtmlImageBuilder, HtmlInputBuilder, HtmlLabelBuilder, HtmlLegendBuilder, HtmlLIBuilder, HtmlLinkBuilder, HtmlMapBuilder, HtmlMediaBuilderBase, HtmlMetaBuilder, HtmlOListBuilder, HtmlOptGroupBuilder, HtmlOptionBuilder, HtmlParagraphBuilder, HtmlParamBuilder, HtmlPreBuilder, HtmlQuoteBuilder, HtmlScriptBuilder, HtmlSelectBuilder, HtmlSourceBuilder, HtmlSpanBuilder, HtmlStyleBuilder, HtmlTableBuilder, HtmlTableCaptionBuilder, HtmlTableCellBuilder, HtmlTableColBuilder, HtmlTableRowBuilder, HtmlTableSectionBuilder, HtmlTextAreaBuilder, HtmlTitleBuilder, HtmlUListBuilder

    public class HtmlElementBuilderBase<R extends ElementBuilderBase<?>>

extends AbstractElementBuilderBase<R>

Implementation of `ElementBuilderBase` that delegates to an `HtmlBuilderImpl`.

Subclasses of `HtmlElementBuilderBase` act as typed wrappers around a shared `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 `id(String)`, return a typed builder instead of the generic `ElementBuilderBase`.

Constructor Summary
`HtmlElementBuilderBase(HtmlBuilderImpl delegate)` Construct a new `HtmlElementBuilderBase`.
`HtmlElementBuilderBase(HtmlBuilderImpl delegate, boolean isEndTagForbidden)` Construct a new `HtmlElementBuilderBase`.

Method Summary
`SafeHtml` | `asSafeHtml()` Return the HTML as a `SafeHtml` string.
`R` | `attribute(java.lang.String name, int value)` Add an integer attribute to the object.
`R` | `attribute(java.lang.String name, java.lang.String value)` Add a string attribute to the object.
`R` | `className(java.lang.String className)` The class attribute of the element.
`R` | `dir(java.lang.String dir)` Specifies the base direction of directionally neutral text and the directionality of tables.
`R` | `draggable(java.lang.String draggable)` Changes the draggable attribute to one of `Element.DRAGGABLE_AUTO`, `Element.DRAGGABLE_FALSE`, or `Element.DRAGGABLE_TRUE`.
`void` | `endTitle()` End the current element.
`R` | `id(java.lang.String id)` Set the id.
`R` | `lang(java.lang.String lang)` Language code defined in RFC 1766.
`AnchorBuilder` | `startAnchor()` Append a anchor element.
`AreaBuilder` | `startArea()` Append a area element.
`AudioBuilder` | `startAudio()` Append a audio element.
`BaseBuilder` | `startBase()` Append a base element.
`QuoteBuilder` | `startBlockQuote()` Append a block quote element.
`BodyBuilder` | `startBody()` Append a body element.
`BRBuilder` | `startBR()` Append a br element.
`InputBuilder` | `startButtonInput()` Append an <input type='button'> element.
`CanvasBuilder` | `startCanvas()` Append a canvas element.
`InputBuilder` | `startCheckboxInput()` Append an <input type='check'> element.
`TableColBuilder` | `startCol()` Append a tablecol element.
`TableColBuilder` | `startColGroup()` Append a tablecol element.
`DivBuilder` | `startDiv()` Append a div element.
`DListBuilder` | `startDList()` Append a dlist element.
`FieldSetBuilder` | `startFieldSet()` Append a fieldset element.
`InputBuilder` | `startFileInput()` Append an <input type='file'> element.
`FormBuilder` | `startForm()` Append a form element.
`FrameBuilder` | `startFrame()` Append a frame element.
`FrameSetBuilder` | `startFrameSet()` Append a frameset element.
`HeadingBuilder` | `startH1()` Append a heading element.
`HeadingBuilder` | `startH2()` Append a heading element.
`HeadingBuilder` | `startH3()` Append a heading element.
`HeadingBuilder` | `startH4()` Append a heading element.
`HeadingBuilder` | `startH5()` Append a heading element.
`HeadingBuilder` | `startH6()` Append a heading element.
`HeadBuilder` | `startHead()` Append a head element.
`InputBuilder` | `startHiddenInput()` Append an <input type='hidden'> element.
`HRBuilder` | `startHR()` Append a hr element.
`IFrameBuilder` | `startIFrame()` Append a iframe element.
`ImageBuilder` | `startImage()` Append a image element.
`InputBuilder` | `startImageInput()` Append an <input type='image'> element.
`LabelBuilder` | `startLabel()` Append a label element.
`LegendBuilder` | `startLegend()` Append a legend element.
`LIBuilder` | `startLI()` Append a li element.
`LinkBuilder` | `startLink()` Append a link element.
`MapBuilder` | `startMap()` Append a map element.
`MetaBuilder` | `startMeta()` Append a meta element.
`OListBuilder` | `startOList()` Append a olist element.
`OptGroupBuilder` | `startOptGroup()` Append a optgroup element.
`OptionBuilder` | `startOption()` Append an option element.
`ParagraphBuilder` | `startParagraph()` Append a paragraph element.
`ParamBuilder` | `startParam()` Append a param element.
`InputBuilder` | `startPasswordInput()` Append an <input type='password'> element.
`PreBuilder` | `startPre()` Append a pre element.
`ButtonBuilder` | `startPushButton()` Append a button element with type "button".
`QuoteBuilder` | `startQuote()` Append a quote element.
`InputBuilder` | `startRadioInput(java.lang.String name)` Append an <input type='radio'> element.
`ButtonBuilder` | `startResetButton()` Append a button element with type "reset".
`InputBuilder` | `startResetInput()` Append an <input type='reset'> element.
`ScriptBuilder` | `startScript()` Append a script element.
`SelectBuilder` | `startSelect()` Append a select element.
`SourceBuilder` | `startSource()` Append a source element.
`SpanBuilder` | `startSpan()` Append a span element.
`StyleBuilder` | `startStyle()` Append a style element.
`ButtonBuilder` | `startSubmitButton()` Append a button element with type "submit".
`InputBuilder` | `startSubmitInput()` Append an <input type='submit'> element.
`TableBuilder` | `startTable()` Append a table element.
`TableCaptionBuilder` | `startTableCaption()` Append a table caption element.
`TableSectionBuilder` | `startTBody()` Append a tbody element.
`TableCellBuilder` | `startTD()` Append a td element.
`TextAreaBuilder` | `startTextArea()` Append a textarea element.
`InputBuilder` | `startTextInput()` Append an <input type='text'> element.
`TableSectionBuilder` | `startTFoot()` Append a tfoot element.
`TableCellBuilder` | `startTH()` Append a th element.
`TableSectionBuilder` | `startTHead()` Append a thead element.
`TitleBuilder` | `startTitle()` Append a title element.
`TableRowBuilder` | `startTR()` Append a tablerow element.
`UListBuilder` | `startUList()` Append a ulist element.
`VideoBuilder` | `startVideo()` Append a video element.
`R` | `tabIndex(int tabIndex)` Set the tab index.
`R` | `title(java.lang.String title)` The element's advisory title.
`(package private) R` | `trustedAttribute(java.lang.String name, int value)` Add an attribute with a trusted name.
`(package private) R` | `trustedAttribute(java.lang.String name, java.lang.String value)` Add an attribute with a trusted name.
`ElementBuilder` | `trustedStart(java.lang.String tagName)` Append a new element with the specified trusted tag name.

Methods inherited from class com.google.gwt.dom.builder.shared.AbstractElementBuilderBase
`end, end, endAnchor, endArea, endAudio, endBase, endBlockQuote, endBody, endBR, endButton, endCanvas, endCol, endColGroup, endDiv, endDList, endFieldSet, endForm, endFrame, endFrameSet, endH1, endH2, endH3, endH4, endH5, endH6, endHead, endHR, endIFrame, endImage, endInput, endLabel, endLegend, endLI, endLink, endMap, endMeta, endOList, endOptGroup, endOption, endParagraph, endParam, endPre, endQuote, endScript, endSelect, endSource, endSpan, endStyle, endTable, endTableCaption, endTBody, endTD, endTextArea, endTFoot, endTH, endTHead, endTR, endUList, endVideo, finish, getDepth, getReturnBuilder, html, isChildElementSupported, isEndTagForbidden, style, text`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### HtmlElementBuilderBase

    HtmlElementBuilderBase(HtmlBuilderImpl delegate)

  Construct a new `HtmlElementBuilderBase`.

  Parameters:
    `delegate` - the delegate that builds the element

### HtmlElementBuilderBase

    HtmlElementBuilderBase(HtmlBuilderImpl delegate,
                           boolean isEndTagForbidden)

  Construct a new `HtmlElementBuilderBase`.

  Parameters:
    `delegate` - the delegate that builds the element
    `isEndTagForbidden` - true if the end tag is forbidden for this element

Method Detail

### asSafeHtml

    public SafeHtml asSafeHtml()

  Return the HTML as a `SafeHtml` string.

### attribute

    public R attribute(java.lang.String name,
                       int value)

  Description copied from interface: `ElementBuilderBase`
  Add an integer attribute to the object.

  Returns:
    this builder

### attribute

    public R attribute(java.lang.String name,
                       java.lang.String value)

  Description copied from interface: `ElementBuilderBase`
  Add a string attribute to the object.

  Returns:
    this builder

### className

    public R className(java.lang.String className)

  Description copied from interface: `ElementBuilderBase`
  The class attribute of the element. This attribute has been renamed due to conflicts with the "class" keyword exposed by many languages.

  Returns:
    this builder
  See Also:
    W3C HTML Specification

### dir

    public R dir(java.lang.String dir)

  Description copied from interface: `ElementBuilderBase`
  Specifies the base direction of directionally neutral text and the directionality of tables.

  Returns:
    this builder

### draggable

    public R draggable(java.lang.String draggable)

  Description copied from interface: `ElementBuilderBase`
  Changes the draggable attribute to one of `Element.DRAGGABLE_AUTO`, `Element.DRAGGABLE_FALSE`, or `Element.DRAGGABLE_TRUE`.

  Parameters:
    `draggable` - a String constant
  Returns:
    this builder

### endTitle

    public void endTitle()

  End the current element.

  See Also:
    `AbstractElementBuilderBase.end()`

### id

    public R id(java.lang.String id)

  Description copied from interface: `ElementBuilderBase`
  Set the id.

  Parameters:
    `id` - the id
  Returns:
    this builder

### lang

    public R lang(java.lang.String lang)

  Description copied from interface: `ElementBuilderBase`
  Language code defined in RFC 1766.

  Returns:
    this builder

### startAnchor

    public AnchorBuilder startAnchor()

  Description copied from interface: `ElementBuilderBase`
  Append a anchor element.

  Returns:
    the builder for the new element

### startArea

    public AreaBuilder startArea()

  Description copied from interface: `ElementBuilderBase`
  Append a area element.

  Returns:
    the builder for the new element

### startAudio

    public AudioBuilder startAudio()

  Description copied from interface: `ElementBuilderBase`
  Append a audio element.

  Returns:
    the builder for the new element

### startBase

    public BaseBuilder startBase()

  Description copied from interface: `ElementBuilderBase`
  Append a base element.

  Returns:
    the builder for the new element

### startBlockQuote

    public QuoteBuilder startBlockQuote()

  Description copied from interface: `ElementBuilderBase`
  Append a block quote element.

  Returns:
    the builder for the new element

### startBody

    public BodyBuilder startBody()

  Description copied from interface: `ElementBuilderBase`
  Append a body element.

  Returns:
    the builder for the new element

### startBR

    public BRBuilder startBR()

  Description copied from interface: `ElementBuilderBase`
  Append a br element.

  Returns:
    the builder for the new element

### startButtonInput

    public InputBuilder startButtonInput()

  Description copied from interface: `ElementBuilderBase`
  Append an <input type='button'> element.

  Returns:
    the builder for the new element

### startCanvas

    public CanvasBuilder startCanvas()

  Description copied from interface: `ElementBuilderBase`
  Append a canvas element.

  Returns:
    the builder for the new element

### startCheckboxInput

    public InputBuilder startCheckboxInput()

  Description copied from interface: `ElementBuilderBase`
  Append an <input type='check'> element.

  Returns:
    the builder for the new element

### startCol

    public TableColBuilder startCol()

  Description copied from interface: `ElementBuilderBase`
  Append a tablecol element.

  Returns:
    the builder for the new element

### startColGroup

    public TableColBuilder startColGroup()

  Description copied from interface: `ElementBuilderBase`
  Append a tablecol element.

  Returns:
    the builder for the new element

### startDiv

    public DivBuilder startDiv()

  Description copied from interface: `ElementBuilderBase`
  Append a div element.

  Returns:
    the builder for the new element

### startDList

    public DListBuilder startDList()

  Description copied from interface: `ElementBuilderBase`
  Append a dlist element.

  Returns:
    the builder for the new element

### startFieldSet

    public FieldSetBuilder startFieldSet()

  Description copied from interface: `ElementBuilderBase`
  Append a fieldset element.

  Returns:
    the builder for the new element

### startFileInput

    public InputBuilder startFileInput()

  Description copied from interface: `ElementBuilderBase`
  Append an <input type='file'> element.

  Returns:
    the builder for the new element

### startForm

    public FormBuilder startForm()

  Description copied from interface: `ElementBuilderBase`
  Append a form element.

  Returns:
    the builder for the new element

### startFrame

    public FrameBuilder startFrame()

  Description copied from interface: `ElementBuilderBase`
  Append a frame element.

  Returns:
    the builder for the new element

### startFrameSet

    public FrameSetBuilder startFrameSet()

  Description copied from interface: `ElementBuilderBase`
  Append a frameset element.

  Returns:
    the builder for the new element

### startH1

    public HeadingBuilder startH1()

  Description copied from interface: `ElementBuilderBase`
  Append a heading element.

  Returns:
    the builder for the new element

### startH2

    public HeadingBuilder startH2()

  Description copied from interface: `ElementBuilderBase`
  Append a heading element.

  Returns:
    the builder for the new element

### startH3

    public HeadingBuilder startH3()

  Description copied from interface: `ElementBuilderBase`
  Append a heading element.

  Returns:
    the builder for the new element

### startH4

    public HeadingBuilder startH4()

  Description copied from interface: `ElementBuilderBase`
  Append a heading element.

  Returns:
    the builder for the new element

### startH5

    public HeadingBuilder startH5()

  Description copied from interface: `ElementBuilderBase`
  Append a heading element.

  Returns:
    the builder for the new element

### startH6

    public HeadingBuilder startH6()

  Description copied from interface: `ElementBuilderBase`
  Append a heading element.

  Returns:
    the builder for the new element

### startHead

    public HeadBuilder startHead()

  Description copied from interface: `ElementBuilderBase`
  Append a head element.

  Returns:
    the builder for the new element

### startHiddenInput

    public InputBuilder startHiddenInput()

  Description copied from interface: `ElementBuilderBase`
  Append an <input type='hidden'> element.

  Returns:
    the builder for the new element

### startHR

    public HRBuilder startHR()

  Description copied from interface: `ElementBuilderBase`
  Append a hr element.

  Returns:
    the builder for the new element

### startIFrame

    public IFrameBuilder startIFrame()

  Description copied from interface: `ElementBuilderBase`
  Append a iframe element.

  Returns:
    the builder for the new element

### startImage

    public ImageBuilder startImage()

  Description copied from interface: `ElementBuilderBase`
  Append a image element.

  Returns:
    the builder for the new element

### startImageInput

    public InputBuilder startImageInput()

  Description copied from interface: `ElementBuilderBase`
  Append an <input type='image'> element.

  Returns:
    the builder for the new element

### startLabel

    public LabelBuilder startLabel()

  Description copied from interface: `ElementBuilderBase`
  Append a label element.

  Returns:
    the builder for the new element

### startLegend

    public LegendBuilder startLegend()

  Description copied from interface: `ElementBuilderBase`
  Append a legend element.

  Returns:
    the builder for the new element

### startLI

    public LIBuilder startLI()

  Description copied from interface: `ElementBuilderBase`
  Append a li element.

  Returns:
    the builder for the new element

### startLink

    public LinkBuilder startLink()

  Description copied from interface: `ElementBuilderBase`
  Append a link element.

  Returns:
    the builder for the new element

### startMap

    public MapBuilder startMap()

  Description copied from interface: `ElementBuilderBase`
  Append a map element.

  Returns:
    the builder for the new element

### startMeta

    public MetaBuilder startMeta()

  Description copied from interface: `ElementBuilderBase`
  Append a meta element.

  Returns:
    the builder for the new element

### startOList

    public OListBuilder startOList()

  Description copied from interface: `ElementBuilderBase`
  Append a olist element.

  Returns:
    the builder for the new element

### startOptGroup

    public OptGroupBuilder startOptGroup()

  Description copied from interface: `ElementBuilderBase`
  Append a optgroup element.

  Returns:
    the builder for the new element

### startOption

    public OptionBuilder startOption()

  Description copied from interface: `ElementBuilderBase`
  Append an option element.

  Returns:
    the builder for the new element

### startParagraph

    public ParagraphBuilder startParagraph()

  Description copied from interface: `ElementBuilderBase`
  Append a paragraph element.

  Returns:
    the builder for the new element

### startParam

    public ParamBuilder startParam()

  Description copied from interface: `ElementBuilderBase`
  Append a param element.

  Returns:
    the builder for the new element

### startPasswordInput

    public InputBuilder startPasswordInput()

  Description copied from interface: `ElementBuilderBase`
  Append an <input type='password'> element.

  Returns:
    the builder for the new element

### startPre

    public PreBuilder startPre()

  Description copied from interface: `ElementBuilderBase`
  Append a pre element.

  Returns:
    the builder for the new element

### startPushButton

    public ButtonBuilder startPushButton()

  Description copied from interface: `ElementBuilderBase`
  Append a button element with type "button".

  Returns:
    the builder for the new element

### startQuote

    public QuoteBuilder startQuote()

  Description copied from interface: `ElementBuilderBase`
  Append a quote element.

  Returns:
    the builder for the new element

### startRadioInput

    public InputBuilder startRadioInput(java.lang.String name)

  Description copied from interface: `ElementBuilderBase`
  Append an <input type='radio'> element.

  Parameters:
    `name` - name the name of the radio input (used for grouping)
  Returns:
    the builder for the new element

### startResetButton

    public ButtonBuilder startResetButton()

  Description copied from interface: `ElementBuilderBase`
  Append a button element with type "reset".

  Returns:
    the builder for the new element

### startResetInput

    public InputBuilder startResetInput()

  Description copied from interface: `ElementBuilderBase`
  Append an <input type='reset'> element.

  Returns:
    the builder for the new element

### startScript

    public ScriptBuilder startScript()

  Description copied from interface: `ElementBuilderBase`
  Append a script element.

  Returns:
    the builder for the new element

### startSelect

    public SelectBuilder startSelect()

  Description copied from interface: `ElementBuilderBase`
  Append a select element.

  Returns:
    the builder for the new element

### startSource

    public SourceBuilder startSource()

  Description copied from interface: `ElementBuilderBase`
  Append a source element.

  Returns:
    the builder for the new element

### startSpan

    public SpanBuilder startSpan()

  Description copied from interface: `ElementBuilderBase`
  Append a span element.

  Returns:
    the builder for the new element

### startStyle

    public StyleBuilder startStyle()

  Description copied from interface: `ElementBuilderBase`
  Append a style element.

  Returns:
    the builder for the new element

### startSubmitButton

    public ButtonBuilder startSubmitButton()

  Description copied from interface: `ElementBuilderBase`
  Append a button element with type "submit".

  Returns:
    the builder for the new element

### startSubmitInput

    public InputBuilder startSubmitInput()

  Description copied from interface: `ElementBuilderBase`
  Append an <input type='submit'> element.

  Returns:
    the builder for the new element

### startTable

    public TableBuilder startTable()

  Description copied from interface: `ElementBuilderBase`
  Append a table element.

  Returns:
    the builder for the new element

### startTableCaption

    public TableCaptionBuilder startTableCaption()

  Description copied from interface: `ElementBuilderBase`
  Append a table caption element.

  Returns:
    the builder for the new element

### startTBody

    public TableSectionBuilder startTBody()

  Description copied from interface: `ElementBuilderBase`
  Append a tbody element.

  Returns:
    the builder for the new element

### startTD

    public TableCellBuilder startTD()

  Description copied from interface: `ElementBuilderBase`
  Append a td element.

  Returns:
    the builder for the new element

### startTextArea

    public TextAreaBuilder startTextArea()

  Description copied from interface: `ElementBuilderBase`
  Append a textarea element.

  Returns:
    the builder for the new element

### startTextInput

    public InputBuilder startTextInput()

  Description copied from interface: `ElementBuilderBase`
  Append an <input type='text'> element.

  Returns:
    the builder for the new element

### startTFoot

    public TableSectionBuilder startTFoot()

  Description copied from interface: `ElementBuilderBase`
  Append a tfoot element.

  Returns:
    the builder for the new element

### startTH

    public TableCellBuilder startTH()

  Description copied from interface: `ElementBuilderBase`
  Append a th element.

  Returns:
    the builder for the new element

### startTHead

    public TableSectionBuilder startTHead()

  Description copied from interface: `ElementBuilderBase`
  Append a thead element.

  Returns:
    the builder for the new element

### startTitle

    public TitleBuilder startTitle()

  Append a title element.

  Returns:
    the builder for the new element

### startTR

    public TableRowBuilder startTR()

  Description copied from interface: `ElementBuilderBase`
  Append a tablerow element.

  Returns:
    the builder for the new element

### startUList

    public UListBuilder startUList()

  Description copied from interface: `ElementBuilderBase`
  Append a ulist element.

  Returns:
    the builder for the new element

### startVideo

    public VideoBuilder startVideo()

  Description copied from interface: `ElementBuilderBase`
  Append a video element.

  Returns:
    the builder for the new element

### tabIndex

    public R tabIndex(int tabIndex)

  Description copied from interface: `ElementBuilderBase`
  Set the tab index.

  Parameters:
    `tabIndex` - the tab index
  Returns:
    this builder

### title

    public R title(java.lang.String title)

  Description copied from interface: `ElementBuilderBase`
  The element's advisory title.

  Returns:
    this builder

### trustedStart

    public ElementBuilder trustedStart(java.lang.String tagName)

  Description copied from interface: `ElementBuilderBase`
  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.

  Parameters:
    `tagName` - the tag name
  Returns:
    the `ElementBuilder` for the new element

### trustedAttribute

    R trustedAttribute(java.lang.String name,
                       int value)

  Add an attribute with a trusted name.

### trustedAttribute

    R trustedAttribute(java.lang.String name,
                       java.lang.String value)

  Add an attribute with a trusted name. The name is still escaped.

Overview | Package | Class | Use | Deprecated | Help
| GWT 2.7.0
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD