blob: 8d512dd0b085377066b01fecec607e70e18cdf3b [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "core/html/HTMLMenuItemElement.h"
#include "core/HTMLNames.h"
#include "core/dom/ElementTraversal.h"
#include "core/events/Event.h"
namespace blink {
using namespace HTMLNames;
inline HTMLMenuItemElement::HTMLMenuItemElement(Document& document)
: HTMLElement(HTMLNames::menuitemTag, document)
{
}
void HTMLMenuItemElement::defaultEventHandler(Event* event)
{
if (event->type() == EventTypeNames::click) {
if (equalIgnoringCase(fastGetAttribute(typeAttr), "checkbox")) {
if (fastHasAttribute(checkedAttr))
removeAttribute(checkedAttr);
else
setAttribute(checkedAttr, "checked");
} else if (equalIgnoringCase(fastGetAttribute(typeAttr), "radio")) {
if (Element* parent = parentElement()) {
const AtomicString& group = fastGetAttribute(radiogroupAttr);
for (HTMLMenuItemElement& menuItem : Traversal<HTMLMenuItemElement>::childrenOf(*parent)) {
if (!menuItem.fastHasAttribute(checkedAttr))
continue;
const AtomicString& groupAttr = menuItem.fastGetAttribute(radiogroupAttr);
if (equalIgnoringNullity(groupAttr.impl(), group.impl()))
menuItem.removeAttribute(checkedAttr);
}
}
setAttribute(checkedAttr, "checked");
}
event->setDefaultHandled();
}
}
DEFINE_NODE_FACTORY(HTMLMenuItemElement)
} // namespace blink