mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-28 07:13:20 +00:00
Bug 1322938 - Basic implementation of HTMLDialogElement. r=smaug, masayuki
MozReview-Commit-ID: AU92mq2QZIc
This commit is contained in:
parent
fb00ea2d92
commit
d7db347638
@ -421,7 +421,7 @@
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// HTML:dialog
|
||||
|
||||
todo(isAccessible("dialog"), "dialog element is not accessible");
|
||||
ok(isAccessible("dialog"), "dialog element is not accessible");
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// HTML:div
|
||||
|
65
dom/html/HTMLDialogElement.cpp
Normal file
65
dom/html/HTMLDialogElement.cpp
Normal file
@ -0,0 +1,65 @@
|
||||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "mozilla/dom/HTMLDialogElement.h"
|
||||
#include "mozilla/dom/HTMLDialogElementBinding.h"
|
||||
|
||||
NS_IMPL_NS_NEW_HTML_ELEMENT(Dialog)
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
HTMLDialogElement::~HTMLDialogElement()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMPL_ELEMENT_CLONE(HTMLDialogElement)
|
||||
|
||||
void
|
||||
HTMLDialogElement::Close(const mozilla::dom::Optional<nsAString>& aReturnValue)
|
||||
{
|
||||
if (!Open()) {
|
||||
return;
|
||||
}
|
||||
if (aReturnValue.WasPassed()) {
|
||||
SetReturnValue(aReturnValue.Value());
|
||||
}
|
||||
ErrorResult ignored;
|
||||
SetOpen(false, ignored);
|
||||
ignored.SuppressException();
|
||||
}
|
||||
|
||||
void
|
||||
HTMLDialogElement::Show()
|
||||
{
|
||||
if (Open()) {
|
||||
return;
|
||||
}
|
||||
ErrorResult ignored;
|
||||
SetOpen(true, ignored);
|
||||
ignored.SuppressException();
|
||||
}
|
||||
|
||||
void
|
||||
HTMLDialogElement::ShowModal(ErrorResult& aError)
|
||||
{
|
||||
if (!IsInComposedDoc() || Open()) {
|
||||
aError.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
|
||||
return;
|
||||
}
|
||||
|
||||
SetOpen(true, aError);
|
||||
aError.SuppressException();
|
||||
}
|
||||
|
||||
JSObject*
|
||||
HTMLDialogElement::WrapNode(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
return HTMLDialogElementBinding::Wrap(aCx, this, aGivenProto);
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
58
dom/html/HTMLDialogElement.h
Normal file
58
dom/html/HTMLDialogElement.h
Normal file
@ -0,0 +1,58 @@
|
||||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef HTMLDialogElement_h
|
||||
#define HTMLDialogElement_h
|
||||
|
||||
#include "mozilla/Attributes.h"
|
||||
#include "nsGenericHTMLElement.h"
|
||||
#include "nsGkAtoms.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
class HTMLDialogElement final : public nsGenericHTMLElement
|
||||
{
|
||||
public:
|
||||
explicit HTMLDialogElement(already_AddRefed<mozilla::dom::NodeInfo>& aNodeInfo) : nsGenericHTMLElement(aNodeInfo)
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMPL_FROMCONTENT_HTML_WITH_TAG(HTMLDialogElement, dialog)
|
||||
|
||||
virtual nsresult Clone(mozilla::dom::NodeInfo* aNodeInfo, nsINode** aResult) const override;
|
||||
|
||||
bool Open() const { return GetBoolAttr(nsGkAtoms::open); }
|
||||
void SetOpen(bool aOpen, ErrorResult& aError)
|
||||
{
|
||||
SetHTMLBoolAttr(nsGkAtoms::open, aOpen, aError);
|
||||
}
|
||||
|
||||
void GetReturnValue(nsAString& aReturnValue)
|
||||
{
|
||||
aReturnValue = mReturnValue;
|
||||
}
|
||||
void SetReturnValue(const nsAString& aReturnValue)
|
||||
{
|
||||
mReturnValue = aReturnValue;
|
||||
}
|
||||
|
||||
void Close(const mozilla::dom::Optional<nsAString>& aReturnValue);
|
||||
void Show();
|
||||
void ShowModal(ErrorResult& aError);
|
||||
|
||||
nsString mReturnValue;
|
||||
|
||||
protected:
|
||||
virtual ~HTMLDialogElement();
|
||||
JSObject* WrapNode(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aGivenProto) override;
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
||||
#endif
|
@ -55,6 +55,7 @@ EXPORTS.mozilla.dom += [
|
||||
'HTMLDataElement.h',
|
||||
'HTMLDataListElement.h',
|
||||
'HTMLDetailsElement.h',
|
||||
'HTMLDialogElement.h',
|
||||
'HTMLDivElement.h',
|
||||
'HTMLFieldSetElement.h',
|
||||
'HTMLFontElement.h',
|
||||
@ -133,6 +134,7 @@ UNIFIED_SOURCES += [
|
||||
'HTMLDataElement.cpp',
|
||||
'HTMLDataListElement.cpp',
|
||||
'HTMLDetailsElement.cpp',
|
||||
'HTMLDialogElement.cpp',
|
||||
'HTMLDivElement.cpp',
|
||||
'HTMLElement.cpp',
|
||||
'HTMLFieldSetElement.cpp',
|
||||
|
@ -1658,6 +1658,7 @@ NS_DECLARE_NS_NEW_HTML_ELEMENT(Mod)
|
||||
NS_DECLARE_NS_NEW_HTML_ELEMENT(Data)
|
||||
NS_DECLARE_NS_NEW_HTML_ELEMENT(DataList)
|
||||
NS_DECLARE_NS_NEW_HTML_ELEMENT(Details)
|
||||
NS_DECLARE_NS_NEW_HTML_ELEMENT(Dialog)
|
||||
NS_DECLARE_NS_NEW_HTML_ELEMENT(Div)
|
||||
NS_DECLARE_NS_NEW_HTML_ELEMENT(FieldSet)
|
||||
NS_DECLARE_NS_NEW_HTML_ELEMENT(Font)
|
||||
|
@ -446,6 +446,8 @@ var interfaceNamesInGlobalScope =
|
||||
"HTMLDataListElement",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
"HTMLDetailsElement",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
"HTMLDialogElement",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
"HTMLDirectoryElement",
|
||||
// IMPORTANT: Do not change this list without review from a DOM peer!
|
||||
|
22
dom/webidl/HTMLDialogElement.webidl
Normal file
22
dom/webidl/HTMLDialogElement.webidl
Normal file
@ -0,0 +1,22 @@
|
||||
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* The origin of this IDL file is
|
||||
* https://html.spec.whatwg.org/multipage/forms.html#the-dialog-element
|
||||
*
|
||||
* © Copyright 2004-2011 Apple Computer, Inc., Mozilla Foundation, and
|
||||
* Opera Software ASA. You are granted a license to use, reproduce
|
||||
* and create derivative works of this document.
|
||||
*/
|
||||
|
||||
interface HTMLDialogElement : HTMLElement {
|
||||
[SetterThrows] attribute boolean open;
|
||||
attribute DOMString returnValue;
|
||||
|
||||
void show();
|
||||
[Throws] void showModal();
|
||||
|
||||
void close(optional DOMString returnValue);
|
||||
};
|
@ -189,6 +189,7 @@ WEBIDL_FILES = [
|
||||
'HTMLDataElement.webidl',
|
||||
'HTMLDataListElement.webidl',
|
||||
'HTMLDetailsElement.webidl',
|
||||
'HTMLDialogElement.webidl',
|
||||
'HTMLDirectoryElement.webidl',
|
||||
'HTMLDivElement.webidl',
|
||||
'HTMLDListElement.webidl',
|
||||
|
@ -517,9 +517,9 @@ HTMLEditUtils::SupportsAlignAttr(nsIDOMNode* aNode)
|
||||
#define GROUP_FORMCONTROL (1 << 6)
|
||||
|
||||
// address, applet, article, aside, blockquote, button, center, del, details,
|
||||
// dir, div, dl, fieldset, figure, footer, form, h1, h2, h3, h4, h5, h6, header,
|
||||
// hgroup, hr, iframe, ins, main, map, menu, nav, noframes, noscript, object,
|
||||
// ol, p, pre, table, section, summary, ul
|
||||
// dialog, dir, div, dl, fieldset, figure, footer, form, h1, h2, h3, h4, h5,
|
||||
// h6, header, hgroup, hr, iframe, ins, main, map, menu, nav, noframes,
|
||||
// noscript, object, ol, p, pre, table, section, summary, ul
|
||||
#define GROUP_BLOCK (1 << 7)
|
||||
|
||||
// frame, frameset
|
||||
@ -638,6 +638,7 @@ static const ElementInfo kElements[eHTMLTag_userdefined] = {
|
||||
ELEM(del, true, true, GROUP_PHRASE | GROUP_BLOCK, GROUP_FLOW_ELEMENT),
|
||||
ELEM(details, true, true, GROUP_BLOCK, GROUP_FLOW_ELEMENT),
|
||||
ELEM(dfn, true, true, GROUP_PHRASE, GROUP_INLINE_ELEMENT),
|
||||
ELEM(dialog, true, true, GROUP_BLOCK, GROUP_FLOW_ELEMENT),
|
||||
ELEM(dir, true, false, GROUP_BLOCK, GROUP_LI),
|
||||
ELEM(div, true, true, GROUP_BLOCK, GROUP_FLOW_ELEMENT),
|
||||
ELEM(dl, true, false, GROUP_BLOCK, GROUP_DL_CONTENT),
|
||||
|
@ -798,6 +798,27 @@ details > summary:first-of-type > *|* {
|
||||
list-style-position: initial;
|
||||
}
|
||||
|
||||
/* <dialog> element styles */
|
||||
|
||||
dialog {
|
||||
position: absolute;
|
||||
offset-inline-start: 0;
|
||||
offset-inline-end: 0;
|
||||
color: black;
|
||||
margin: auto;
|
||||
border-width: initial;
|
||||
border-style: solid;
|
||||
border-color: initial;
|
||||
border-image: initial;
|
||||
padding: 1em;
|
||||
background: white;
|
||||
width: -moz-fit-content;
|
||||
}
|
||||
|
||||
dialog:not([open]) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* emulation of non-standard HTML <marquee> tag */
|
||||
marquee {
|
||||
inline-size: -moz-available;
|
||||
|
@ -151,6 +151,10 @@ const nsHTMLElement gHTMLElements[] = {
|
||||
/*tag*/ eHTMLTag_dfn,
|
||||
/*parent,leaf*/ kPhrase, false
|
||||
},
|
||||
{
|
||||
/*tag*/ eHTMLTag_dialog,
|
||||
/*parent,leaf*/ kBlock, false
|
||||
},
|
||||
{
|
||||
/*tag*/ eHTMLTag_dir,
|
||||
/*parent,leaf*/ kList, false
|
||||
|
@ -73,6 +73,7 @@ HTML_HTMLELEMENT_TAG(dd)
|
||||
HTML_TAG(del, Mod, Mod)
|
||||
HTML_TAG(details, Details, Details)
|
||||
HTML_HTMLELEMENT_TAG(dfn)
|
||||
HTML_TAG(dialog, Dialog, Dialog)
|
||||
HTML_TAG(dir, Shared, Directory)
|
||||
HTML_TAG(div, Div, Div)
|
||||
HTML_TAG(dl, SharedList, DList)
|
||||
|
Loading…
Reference in New Issue
Block a user