123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- /* -*- Mode: C++; 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/. */
- #include "HTMLElementAccessibles.h"
- #include "DocAccessible.h"
- #include "nsAccUtils.h"
- #include "nsIPersistentProperties2.h"
- #include "nsTextEquivUtils.h"
- #include "Relation.h"
- #include "Role.h"
- #include "States.h"
- #include "mozilla/dom/HTMLLabelElement.h"
- #include "mozilla/dom/HTMLDetailsElement.h"
- #include "mozilla/dom/HTMLSummaryElement.h"
- using namespace mozilla::a11y;
- ////////////////////////////////////////////////////////////////////////////////
- // HTMLHRAccessible
- ////////////////////////////////////////////////////////////////////////////////
- role
- HTMLHRAccessible::NativeRole()
- {
- return roles::SEPARATOR;
- }
- ////////////////////////////////////////////////////////////////////////////////
- // HTMLBRAccessible
- ////////////////////////////////////////////////////////////////////////////////
- role
- HTMLBRAccessible::NativeRole()
- {
- return roles::WHITESPACE;
- }
- uint64_t
- HTMLBRAccessible::NativeState()
- {
- return states::READONLY;
- }
- ENameValueFlag
- HTMLBRAccessible::NativeName(nsString& aName)
- {
- aName = static_cast<char16_t>('\n'); // Newline char
- return eNameOK;
- }
- ////////////////////////////////////////////////////////////////////////////////
- // HTMLLabelAccessible
- ////////////////////////////////////////////////////////////////////////////////
- NS_IMPL_ISUPPORTS_INHERITED0(HTMLLabelAccessible, HyperTextAccessible)
- ENameValueFlag
- HTMLLabelAccessible::NativeName(nsString& aName)
- {
- nsTextEquivUtils::GetNameFromSubtree(this, aName);
- return aName.IsEmpty() ? eNameOK : eNameFromSubtree;
- }
- Relation
- HTMLLabelAccessible::RelationByType(RelationType aType)
- {
- Relation rel = AccessibleWrap::RelationByType(aType);
- if (aType == RelationType::LABEL_FOR) {
- dom::HTMLLabelElement* label = dom::HTMLLabelElement::FromContent(mContent);
- rel.AppendTarget(mDoc, label->GetControl());
- }
- return rel;
- }
- uint8_t
- HTMLLabelAccessible::ActionCount()
- {
- return nsCoreUtils::IsLabelWithControl(mContent) ? 1 : 0;
- }
- void
- HTMLLabelAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
- {
- if (aIndex == 0) {
- if (nsCoreUtils::IsLabelWithControl(mContent))
- aName.AssignLiteral("click");
- }
- }
- bool
- HTMLLabelAccessible::DoAction(uint8_t aIndex)
- {
- if (aIndex != 0)
- return false;
- DoCommand();
- return true;
- }
- ////////////////////////////////////////////////////////////////////////////////
- // nsHTMLOuputAccessible
- ////////////////////////////////////////////////////////////////////////////////
- NS_IMPL_ISUPPORTS_INHERITED0(HTMLOutputAccessible, HyperTextAccessible)
- Relation
- HTMLOutputAccessible::RelationByType(RelationType aType)
- {
- Relation rel = AccessibleWrap::RelationByType(aType);
- if (aType == RelationType::CONTROLLED_BY)
- rel.AppendIter(new IDRefsIterator(mDoc, mContent, nsGkAtoms::_for));
- return rel;
- }
- ////////////////////////////////////////////////////////////////////////////////
- // HTMLSummaryAccessible
- ////////////////////////////////////////////////////////////////////////////////
- HTMLSummaryAccessible::
- HTMLSummaryAccessible(nsIContent* aContent, DocAccessible* aDoc) :
- HyperTextAccessibleWrap(aContent, aDoc)
- {
- mGenericTypes |= eButton;
- }
- uint8_t
- HTMLSummaryAccessible::ActionCount()
- {
- return 1;
- }
- void
- HTMLSummaryAccessible::ActionNameAt(uint8_t aIndex, nsAString& aName)
- {
- if (aIndex != eAction_Click) {
- return;
- }
- dom::HTMLSummaryElement* summary = dom::HTMLSummaryElement::FromContent(mContent);
- if (!summary) {
- return;
- }
- dom::HTMLDetailsElement* details = summary->GetDetails();
- if (!details) {
- return;
- }
- if (details->Open()) {
- aName.AssignLiteral("collapse");
- } else {
- aName.AssignLiteral("expand");
- }
- }
- bool
- HTMLSummaryAccessible::DoAction(uint8_t aIndex)
- {
- if (aIndex != eAction_Click)
- return false;
- DoCommand();
- return true;
- }
- uint64_t
- HTMLSummaryAccessible::NativeState()
- {
- uint64_t state = HyperTextAccessibleWrap::NativeState();
- dom::HTMLSummaryElement* summary = dom::HTMLSummaryElement::FromContent(mContent);
- if (!summary) {
- return state;
- }
- dom::HTMLDetailsElement* details = summary->GetDetails();
- if (!details) {
- return state;
- }
- if (details->Open()) {
- state |= states::EXPANDED;
- } else {
- state |= states::COLLAPSED;
- }
- return state;
- }
- ////////////////////////////////////////////////////////////////////////////////
- // HTMLSummaryAccessible: Widgets
- bool
- HTMLSummaryAccessible::IsWidget() const
- {
- return true;
- }
|