Changeset 49104 in webkit
- Timestamp:
- Oct 5, 2009 11:14:50 AM (15 years ago)
- Location:
- trunk
- Files:
-
- 15 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r49103 r49104 1 2009-10-05 Kent Tamura <tkent@chromium.org> 2 3 Reviewed by Darin Adler. 4 5 Implement min/max attributes, ValidityState.rangeUnderflow and 6 ValidityState.rangeOverflow for <input type=number> and <input type=range> 7 https://bugs.webkit.org/show_bug.cgi?id=29069 8 9 * fast/forms/ValidityState-rangeOverflow-number-expected.txt: Added. 10 * fast/forms/ValidityState-rangeOverflow-number.html: Added. 11 * fast/forms/ValidityState-rangeOverflow-range-expected.txt: Added. 12 * fast/forms/ValidityState-rangeOverflow-range.html: Added. 13 * fast/forms/ValidityState-rangeUnderflow-number-expected.txt: Added. 14 * fast/forms/ValidityState-rangeUnderflow-number.html: Added. 15 * fast/forms/ValidityState-rangeUnderflow-range-expected.txt: Added. 16 * fast/forms/ValidityState-rangeUnderflow-range.html: Added. 17 * fast/forms/input-minmax-expected.txt: Added. 18 * fast/forms/input-minmax.html: Added. 19 * fast/forms/script-tests/ValidityState-rangeOverflow-number.js: Added. 20 * fast/forms/script-tests/ValidityState-rangeOverflow-range.js: Added. 21 * fast/forms/script-tests/ValidityState-rangeUnderflow-number.js: Added. 22 * fast/forms/script-tests/ValidityState-rangeUnderflow-range.js: Added. 23 * fast/forms/script-tests/input-minmax.js: Added. 24 1 25 2009-10-05 Kent Tamura <tkent@chromium.org> 2 26 -
trunk/WebCore/ChangeLog
r49103 r49104 1 2009-10-05 Kent Tamura <tkent@chromium.org> 2 3 Reviewed by Darin Adler. 4 5 Implement min/max attributes, ValidityState.rangeUnderflow and 6 ValidityState.rangeOverflow for <input type=number> and <input type=range> 7 https://bugs.webkit.org/show_bug.cgi?id=29069 8 9 Tests: fast/forms/ValidityState-rangeOverflow-number.html 10 fast/forms/ValidityState-rangeOverflow-range.html 11 fast/forms/ValidityState-rangeUnderflow-number.html 12 fast/forms/ValidityState-rangeUnderflow-range.html 13 fast/forms/input-minmax.html 14 15 * html/HTMLInputElement.cpp: 16 (WebCore::HTMLInputElement::rangeUnderflow): 17 (WebCore::HTMLInputElement::rangeOverflow): 18 (WebCore::HTMLInputElement::rangeMinimum): 19 (WebCore::HTMLInputElement::rangeMaximum): 20 * html/HTMLInputElement.h: 21 * html/HTMLInputElement.idl: 22 * html/ValidityState.cpp: 23 (WebCore::ValidityState::rangeUnderflow): 24 (WebCore::ValidityState::rangeOverflow): 25 * html/ValidityState.h: 26 * rendering/RenderSlider.cpp: 27 (WebCore::SliderRange::SliderRange): 28 (WebCore::SliderRange::valueFromElement): 29 1 30 2009-10-05 Kent Tamura <tkent@chromium.org> 2 31 -
trunk/WebCore/html/HTMLInputElement.cpp
r49051 r49104 231 231 ASSERT_NOT_REACHED(); 232 232 return false; 233 } 234 235 bool HTMLInputElement::rangeUnderflow() const 236 { 237 if (inputType() == NUMBER) { 238 double min; 239 double doubleValue; 240 if (formStringToDouble(getAttribute(minAttr), &min) && formStringToDouble(value(), &doubleValue)) 241 return doubleValue < min; 242 } else if (inputType() == RANGE) { 243 double doubleValue; 244 if (formStringToDouble(value(), &doubleValue)) 245 return doubleValue < rangeMinimum(); 246 } 247 return false; 248 } 249 250 bool HTMLInputElement::rangeOverflow() const 251 { 252 if (inputType() == NUMBER) { 253 double max; 254 double doubleValue; 255 if (formStringToDouble(getAttribute(maxAttr), &max) && formStringToDouble(value(), &doubleValue)) 256 return doubleValue > max; 257 } else if (inputType() == RANGE) { 258 double doubleValue; 259 if (formStringToDouble(value(), &doubleValue)) 260 return doubleValue > rangeMaximum(); 261 } 262 return false; 263 } 264 265 double HTMLInputElement::rangeMinimum() const 266 { 267 ASSERT(inputType() == RANGE); 268 // The range type's "default minimum" is 0. 269 double min = 0.0; 270 formStringToDouble(getAttribute(minAttr), &min); 271 return min; 272 } 273 274 double HTMLInputElement::rangeMaximum() const 275 { 276 ASSERT(inputType() == RANGE); 277 // The range type's "default maximum" is 100. 278 static const double defaultMaximum = 100.0; 279 double max = defaultMaximum; 280 formStringToDouble(getAttribute(maxAttr), &max); 281 const double min = rangeMinimum(); 282 283 if (max < min) { 284 // A remedy for the inconsistent min/max values. 285 // Sets the maxmimum to the default (100.0) or the minimum value. 286 max = min < defaultMaximum ? defaultMaximum : min; 287 } 288 return max; 233 289 } 234 290 -
trunk/WebCore/html/HTMLInputElement.h
r49051 r49104 95 95 virtual bool patternMismatch() const; 96 96 virtual bool tooLong() const; 97 // For ValidityState 98 bool rangeUnderflow() const; 99 bool rangeOverflow() const; 100 // Returns the minimum value for type=range. Don't call this for other types. 101 double rangeMinimum() const; 102 // Returns the maximum value for type=range. Don't call this for other types. 103 // This always returns a value which is <= rangeMinimum(). 104 double rangeMaximum() const; 97 105 98 106 bool isTextButton() const { return m_type == SUBMIT || m_type == RESET || m_type == BUTTON; } -
trunk/WebCore/html/HTMLInputElement.idl
r48903 r49104 43 43 readonly attribute HTMLElement list; 44 44 #endif 45 attribute [Reflect] DOMString max; 45 46 attribute long maxLength 46 47 setter raises(DOMException); 48 attribute [Reflect] DOMString min; 47 49 attribute boolean multiple; 48 50 attribute [ConvertNullToNullString] DOMString name; -
trunk/WebCore/html/ValidityState.cpp
r48319 r49104 61 61 } 62 62 63 bool ValidityState::rangeUnderflow() 64 { 65 if (!control()->hasTagName(inputTag)) 66 return false; 67 return static_cast<HTMLInputElement*>(control())->rangeUnderflow(); 68 } 69 70 bool ValidityState::rangeOverflow() 71 { 72 if (!control()->hasTagName(inputTag)) 73 return false; 74 return static_cast<HTMLInputElement*>(control())->rangeOverflow(); 75 } 76 63 77 bool ValidityState::valid() 64 78 { -
trunk/WebCore/html/ValidityState.h
r48959 r49104 45 45 bool patternMismatch() { return control()->patternMismatch(); } 46 46 bool tooLong() { return control()->tooLong(); } 47 bool rangeUnderflow() { return false; }48 bool rangeOverflow() { return false; }47 bool rangeUnderflow(); 48 bool rangeOverflow(); 49 49 bool stepMismatch() { return false; } 50 50 bool customError() { return !m_customErrorMessage.isEmpty(); } -
trunk/WebCore/rendering/RenderSlider.cpp
r47744 r49104 51 51 bool isIntegral; 52 52 double minimum; 53 double maximum; 53 double maximum; // maximum must be >= minimum. 54 54 55 55 explicit SliderRange(HTMLInputElement*); … … 81 81 isIntegral = !equalIgnoringCase(element->getAttribute(precisionAttr), "float"); 82 82 83 // FIXME: This treats maximum strings that can't be parsed as 0, but perhaps 100 would be more appropriate. 84 const AtomicString& maxString = element->getAttribute(maxAttr); 85 maximum = maxString.isNull() ? 100.0 : maxString.toDouble(); 86 87 // If the maximum is smaller, use it as the minimum. 88 minimum = min(element->getAttribute(minAttr).toDouble(), maximum); 83 maximum = element->rangeMaximum(); 84 minimum = element->rangeMinimum(); 89 85 } 90 86 … … 97 93 double SliderRange::valueFromElement(HTMLInputElement* element, bool* wasClamped) 98 94 { 99 String valueString = element->value(); 100 double oldValue = valueString.isNull() ? (minimum + maximum) / 2 : valueString.toDouble(); 95 double oldValue; 96 bool parseSuccess = HTMLInputElement::formStringToDouble(element->value(), &oldValue); 97 if (!parseSuccess) 98 oldValue = (minimum + maximum) / 2; 101 99 double newValue = clampValue(oldValue); 102 100 103 101 if (wasClamped) 104 *wasClamped = valueString.isNull()|| newValue != oldValue;102 *wasClamped = !parseSuccess || newValue != oldValue; 105 103 106 104 return newValue;
Note: See TracChangeset
for help on using the changeset viewer.