Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(267)

Unified Diff: Source/WebCore/html/shadow/DateTimeNumericFieldElement.cpp

Issue 11801035: Merge 138365 (Closed) Base URL: http://svn.webkit.org/repository/webkit/branches/chromium/1364/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/WebCore/html/shadow/DateTimeNumericFieldElement.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/WebCore/html/shadow/DateTimeNumericFieldElement.cpp
===================================================================
--- Source/WebCore/html/shadow/DateTimeNumericFieldElement.cpp (revision 139034)
+++ Source/WebCore/html/shadow/DateTimeNumericFieldElement.cpp (working copy)
@@ -107,7 +107,10 @@
void DateTimeNumericFieldElement::didBlur()
{
- m_lastDigitCharTime = 0;
+ int value = typeAheadValue();
+ m_typeAheadBuffer.clear();
+ if (value >= 0)
+ setValueAsInteger(value, DispatchEvent);
DateTimeFieldElement::didBlur();
}
@@ -130,23 +133,28 @@
return;
UChar charCode = static_cast<UChar>(keyboardEvent->charCode());
- if (charCode < ' ')
- return;
-
- DOMTimeStamp delta = keyboardEvent->timeStamp() - m_lastDigitCharTime;
- m_lastDigitCharTime = 0;
-
String number = localeForOwner().convertFromLocalizedNumber(String(&charCode, 1));
const int digit = number[0] - '0';
if (digit < 0 || digit > 9)
return;
+ DOMTimeStamp delta = keyboardEvent->timeStamp() - m_lastDigitCharTime;
+ m_lastDigitCharTime = keyboardEvent->timeStamp();
+
+ if (delta > typeAheadTimeout)
+ m_typeAheadBuffer.clear();
+ m_typeAheadBuffer.append(number);
+
+ int newValue = typeAheadValue();
+ if (m_range.isInRange(newValue))
+ setValueAsInteger(newValue, DispatchEvent);
+ else
+ updateVisibleValue(DispatchEvent);
+
+ if (m_typeAheadBuffer.length() >= DateTimeNumericFieldElement::formatValue(m_range.maximum).length() || newValue * 10 > m_range.maximum)
+ focusOnNextField();
+
keyboardEvent->setDefaultHandled();
- setValueAsInteger(m_hasValue && delta < typeAheadTimeout ? m_value * 10 + digit : digit, DispatchEvent);
- if (m_value * 10 > m_range.maximum)
- focusOnNextField();
- else
- m_lastDigitCharTime = keyboardEvent->timeStamp();
}
bool DateTimeNumericFieldElement::hasValue() const
@@ -166,13 +174,12 @@
void DateTimeNumericFieldElement::setEmptyValue(EventBehavior eventBehavior)
{
- m_lastDigitCharTime = 0;
-
if (isReadOnly())
return;
m_hasValue = false;
m_value = 0;
+ m_typeAheadBuffer.clear();
updateVisibleValue(eventBehavior);
}
@@ -181,7 +188,6 @@
m_value = clampValueForHardLimits(value);
m_hasValue = true;
updateVisibleValue(eventBehavior);
- m_lastDigitCharTime = 0;
}
void DateTimeNumericFieldElement::stepDown()
@@ -189,6 +195,7 @@
int newValue = roundDown(m_hasValue ? m_value - 1 : defaultValueForStepDown());
if (!m_range.isInRange(newValue))
newValue = roundDown(m_range.maximum);
+ m_typeAheadBuffer.clear();
setValueAsInteger(newValue, DispatchEvent);
}
@@ -197,6 +204,7 @@
int newValue = roundUp(m_hasValue ? m_value + 1 : defaultValueForStepUp());
if (!m_range.isInRange(newValue))
newValue = roundUp(m_range.minimum);
+ m_typeAheadBuffer.clear();
setValueAsInteger(newValue, DispatchEvent);
}
@@ -210,8 +218,17 @@
return m_hasValue ? m_value : -1;
}
+int DateTimeNumericFieldElement::typeAheadValue() const
+{
+ if (m_typeAheadBuffer.length())
+ return m_typeAheadBuffer.toString().toInt();
+ return -1;
+}
+
String DateTimeNumericFieldElement::visibleValue() const
{
+ if (m_typeAheadBuffer.length())
+ return formatValue(typeAheadValue());
return m_hasValue ? value() : m_placeholder;
}
« no previous file with comments | « Source/WebCore/html/shadow/DateTimeNumericFieldElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698