15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 2853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/shadow/DateTimeFieldElement.h" 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "HTMLNames.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/KeyboardEvent.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Text.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/LocalizedStrings.h" 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/text/PlatformLocale.h" 35e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/text/WTFString.h" 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace HTMLNames; 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)DateTimeFieldElement::FieldOwner::~FieldOwner() 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)DateTimeFieldElement::DateTimeFieldElement(Document* document, FieldOwner& fieldOwner) 4653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) : HTMLSpanElement(spanTag, document) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_fieldOwner(&fieldOwner) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void DateTimeFieldElement::defaultEventHandler(Event* event) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event->type() == eventNames().blurEvent) 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) didBlur(); 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event->type() == eventNames().focusEvent) 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) didFocus(); 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (event->isKeyboardEvent()) { 60591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch KeyboardEvent* keyboardEvent = toKeyboardEvent(event); 61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!isDisabled() && !isFieldOwnerDisabled() && !isFieldOwnerReadOnly()) { 62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) handleKeyboardEvent(keyboardEvent); 63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (keyboardEvent->defaultHandled()) 64926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) defaultKeyboardEventHandler(keyboardEvent); 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (keyboardEvent->defaultHandled()) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HTMLElement::defaultEventHandler(event); 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void DateTimeFieldElement::defaultKeyboardEventHandler(KeyboardEvent* keyboardEvent) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (keyboardEvent->type() != eventNames().keydownEvent) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (isDisabled() || isFieldOwnerDisabled()) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const String& keyIdentifier = keyboardEvent->keyIdentifier(); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (keyIdentifier == "Left") { 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_fieldOwner) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // FIXME: We'd like to use FocusController::advanceFocus(FocusDirectionLeft, ...) 88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // but it doesn't work for shadow nodes. webkit.org/b/104650 89926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!localeForOwner().isRTL() && m_fieldOwner->focusOnPreviousField(*this)) 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) keyboardEvent->setDefaultHandled(); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (keyIdentifier == "Right") { 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_fieldOwner) 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // FIXME: We'd like to use FocusController::advanceFocus(FocusDirectionRight, ...) 98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // but it doesn't work for shadow nodes. webkit.org/b/104650 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!localeForOwner().isRTL() && m_fieldOwner->focusOnNextField(*this)) 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) keyboardEvent->setDefaultHandled(); 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (isFieldOwnerReadOnly()) 105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (keyIdentifier == "Down") { 108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (keyboardEvent->getModifierState("Alt")) 109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 110926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) keyboardEvent->setDefaultHandled(); 111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) stepDown(); 112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (keyIdentifier == "Up") { 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) keyboardEvent->setDefaultHandled(); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) stepUp(); 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (keyIdentifier == "U+0008" || keyIdentifier == "U+007F") { 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) keyboardEvent->setDefaultHandled(); 123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setEmptyValue(DispatchEvent); 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void DateTimeFieldElement::didBlur() 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_fieldOwner) 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_fieldOwner->didBlurFromField(); 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void DateTimeFieldElement::didFocus() 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_fieldOwner) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_fieldOwner->didFocusOnField(); 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void DateTimeFieldElement::focusOnNextField() 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_fieldOwner) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_fieldOwner->focusOnNextField(*this); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 147926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void DateTimeFieldElement::initialize(const AtomicString& pseudo, const String& axHelpText, int axMinimum, int axMaximum) 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 149521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) // On accessibility, DateTimeFieldElement acts like spin button. 150521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) setAttribute(roleAttr, AtomicString("spinbutton", AtomicString::ConstructFromLiteral)); 151521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) setAttribute(aria_valuetextAttr, AXDateTimeFieldEmptyValueText()); 152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setAttribute(aria_valueminAttr, String::number(axMinimum)); 153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setAttribute(aria_valuemaxAttr, String::number(axMaximum)); 154521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 155521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) setAttribute(aria_helpAttr, axHelpText); 156e6d4491e48613634a83c1957c72759da80987961Ben Murdoch setPart(pseudo); 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) appendChild(Text::create(document(), visibleValue())); 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 160926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool DateTimeFieldElement::isDateTimeFieldElement() const 161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 162926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return true; 163926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 164926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 165926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool DateTimeFieldElement::isFieldOwnerDisabled() const 166926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 167926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_fieldOwner && m_fieldOwner->isFieldOwnerDisabled(); 168926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 169926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 170926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool DateTimeFieldElement::isFieldOwnerReadOnly() const 171926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 172926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_fieldOwner && m_fieldOwner->isFieldOwnerReadOnly(); 173926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 174926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 175926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool DateTimeFieldElement::isDisabled() const 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 177926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return fastHasAttribute(disabledAttr); 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 180926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Locale& DateTimeFieldElement::localeForOwner() const 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 182926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return document()->getCachedLocale(localeIdentifier()); 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)AtomicString DateTimeFieldElement::localeIdentifier() const 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_fieldOwner ? m_fieldOwner->localeIdentifier() : nullAtom; 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 190926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)float DateTimeFieldElement::maximumWidth(const Font&) 191926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 192926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const float paddingLeftAndRight = 2; // This should match to html.css. 193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return paddingLeftAndRight; 194926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 195926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 196926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)void DateTimeFieldElement::setDisabled() 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 198926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Set HTML attribute disabled to change apperance. 199926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setBooleanAttribute(disabledAttr, true); 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsStyleRecalc(); 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool DateTimeFieldElement::supportsFocus() const 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 205521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return !isDisabled() && !isFieldOwnerDisabled(); 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void DateTimeFieldElement::updateVisibleValue(EventBehavior eventBehavior) 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Text* const textNode = toText(firstChild()); 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String newVisibleValue = visibleValue(); 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(newVisibleValue.length() > 0); 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (textNode->wholeText() == newVisibleValue) 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 217e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) textNode->replaceWholeText(newVisibleValue); 218926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (hasValue()) { 219926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setAttribute(aria_valuetextAttr, newVisibleValue); 220926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setAttribute(aria_valuenowAttr, String::number(valueForARIAValueNow())); 221926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } else { 222926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setAttribute(aria_valuetextAttr, AXDateTimeFieldEmptyValueText()); 223926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) removeAttribute(aria_valuenowAttr); 224926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (eventBehavior == DispatchEvent && m_fieldOwner) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_fieldOwner->fieldValueChanged(); 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 230926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)int DateTimeFieldElement::valueForARIAValueNow() const 231926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 232926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return valueAsInteger(); 233926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 234926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 238