#pragma once
#include "SVGGraphicsElement.h"
#include "SVGURIReference.h"
#include "SharedStringHash.h"
namespace WebCore {
class SVGAElement final : public SVGGraphicsElement, public SVGURIReference {
WTF_MAKE_ISO_ALLOCATED(SVGAElement);
public:
static Ref<SVGAElement> create(const QualifiedName&, Document&);
String target() const final { return m_target->currentValue(); }
Ref<SVGAnimatedString>& targetAnimated() { return m_target; }
SharedStringHash visitedLinkHash() const;
private:
SVGAElement(const QualifiedName&, Document&);
using PropertyRegistry = SVGPropertyOwnerRegistry<SVGAElement, SVGGraphicsElement, SVGURIReference>;
const SVGPropertyRegistry& propertyRegistry() const final { return m_propertyRegistry; }
void parseAttribute(const QualifiedName&, const AtomString&) final;
void svgAttributeChanged(const QualifiedName&) final;
RenderPtr<RenderElement> createElementRenderer(RenderStyle&&, const RenderTreePosition&) final;
bool childShouldCreateRenderer(const Node&) const final;
bool isValid() const final { return SVGTests::isValid(); }
String title() const final;
void defaultEventHandler(Event&) final;
bool supportsFocus() const final;
bool isMouseFocusable() const final;
bool isKeyboardFocusable(KeyboardEvent*) const final;
bool isURLAttribute(const Attribute&) const final;
bool canStartSelection() const final;
int defaultTabIndex() const final;
bool willRespondToMouseClickEvents() final;
PropertyRegistry m_propertyRegistry { *this };
Ref<SVGAnimatedString> m_target { SVGAnimatedString::create(this) };
mutable Optional<SharedStringHash> m_storedVisitedLinkHash;
};
}