|
Lines 30-35
a/Source/WebCore/html/shadow/DateTimeFieldElements.cpp_sec1
|
| 30 |
#include "DateComponents.h" |
30 |
#include "DateComponents.h" |
| 31 |
#include "DateTimeFieldsState.h" |
31 |
#include "DateTimeFieldsState.h" |
| 32 |
#include "LocalizedStrings.h" |
32 |
#include "LocalizedStrings.h" |
|
|
33 |
#include <wtf/CurrentTime.h> |
| 34 |
#include <wtf/DateMath.h> |
| 33 |
|
35 |
|
| 34 |
namespace WebCore { |
36 |
namespace WebCore { |
| 35 |
|
37 |
|
|
Lines 70-76
void DateTimeAMPMFieldElement::setValueAsDateTimeFieldsState(const DateTimeField
a/Source/WebCore/html/shadow/DateTimeFieldElements.cpp_sec2
|
| 70 |
// ---------------------------- |
72 |
// ---------------------------- |
| 71 |
|
73 |
|
| 72 |
DateTimeHourFieldElement::DateTimeHourFieldElement(Document* document, FieldOwner& fieldOwner, int minimum, int maximum) |
74 |
DateTimeHourFieldElement::DateTimeHourFieldElement(Document* document, FieldOwner& fieldOwner, int minimum, int maximum) |
| 73 |
: DateTimeNumericFieldElement(document, fieldOwner, minimum, maximum) |
75 |
: DateTimeNumericFieldElement(document, fieldOwner, minimum, maximum, "--") |
| 74 |
, m_alignment(maximum + maximum % 2) |
76 |
, m_alignment(maximum + maximum % 2) |
| 75 |
{ |
77 |
{ |
| 76 |
ASSERT((!minimum && (maximum == 11 || maximum == 23)) || (minimum == 1 && (maximum == 12 || maximum == 24))); |
78 |
ASSERT((!minimum && (maximum == 11 || maximum == 23)) || (minimum == 1 && (maximum == 12 || maximum == 24))); |
|
Lines 175-181
int DateTimeHourFieldElement::valueAsInteger() const
a/Source/WebCore/html/shadow/DateTimeFieldElements.cpp_sec3
|
| 175 |
// ---------------------------- |
177 |
// ---------------------------- |
| 176 |
|
178 |
|
| 177 |
DateTimeMillisecondFieldElement::DateTimeMillisecondFieldElement(Document* document, FieldOwner& fieldOwner) |
179 |
DateTimeMillisecondFieldElement::DateTimeMillisecondFieldElement(Document* document, FieldOwner& fieldOwner) |
| 178 |
: DateTimeNumericFieldElement(document, fieldOwner, 0, 999) |
180 |
: DateTimeNumericFieldElement(document, fieldOwner, 0, 999, "---") |
| 179 |
{ |
181 |
{ |
| 180 |
} |
182 |
} |
| 181 |
|
183 |
|
|
Lines 216-222
void DateTimeMillisecondFieldElement::setValueAsDateTimeFieldsState(const DateTi
a/Source/WebCore/html/shadow/DateTimeFieldElements.cpp_sec4
|
| 216 |
// ---------------------------- |
218 |
// ---------------------------- |
| 217 |
|
219 |
|
| 218 |
DateTimeMinuteFieldElement::DateTimeMinuteFieldElement(Document* document, FieldOwner& fieldOwner) |
220 |
DateTimeMinuteFieldElement::DateTimeMinuteFieldElement(Document* document, FieldOwner& fieldOwner) |
| 219 |
: DateTimeNumericFieldElement(document, fieldOwner, 0, 59) |
221 |
: DateTimeNumericFieldElement(document, fieldOwner, 0, 59, "--") |
| 220 |
{ |
222 |
{ |
| 221 |
} |
223 |
} |
| 222 |
|
224 |
|
|
Lines 256-263
void DateTimeMinuteFieldElement::setValueAsDateTimeFieldsState(const DateTimeFie
a/Source/WebCore/html/shadow/DateTimeFieldElements.cpp_sec5
|
| 256 |
|
258 |
|
| 257 |
// ---------------------------- |
259 |
// ---------------------------- |
| 258 |
|
260 |
|
|
|
261 |
DateTimeMonthFieldElement::DateTimeMonthFieldElement(Document* document, FieldOwner& fieldOwner, const String& placeholder) |
| 262 |
: DateTimeNumericFieldElement(document, fieldOwner, 1, 12, placeholder) |
| 263 |
{ |
| 264 |
} |
| 265 |
|
| 266 |
PassRefPtr<DateTimeMonthFieldElement> DateTimeMonthFieldElement::create(Document* document, FieldOwner& fieldOwner, const String& placeholder) |
| 267 |
{ |
| 268 |
DEFINE_STATIC_LOCAL(AtomicString, monthPsuedoId, ("-webkit-datetime-edit-month-field")); |
| 269 |
RefPtr<DateTimeMonthFieldElement> field = adoptRef(new DateTimeMonthFieldElement(document, fieldOwner, placeholder)); |
| 270 |
field->initialize(monthPsuedoId, AXMonthFieldText()); |
| 271 |
return field.release(); |
| 272 |
} |
| 273 |
|
| 274 |
void DateTimeMonthFieldElement::populateDateTimeFieldsState(DateTimeFieldsState& dateTimeFieldsState) |
| 275 |
{ |
| 276 |
dateTimeFieldsState.setMonth(hasValue() ? valueAsInteger() : DateTimeFieldsState::emptyValue); |
| 277 |
} |
| 278 |
|
| 279 |
void DateTimeMonthFieldElement::setValueAsDate(const DateComponents& date) |
| 280 |
{ |
| 281 |
setValueAsInteger(date.month() + 1); |
| 282 |
} |
| 283 |
|
| 284 |
void DateTimeMonthFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState, const DateComponents& dateForReadOnlyField) |
| 285 |
{ |
| 286 |
if (!dateTimeFieldsState.hasMonth()) { |
| 287 |
setEmptyValue(dateForReadOnlyField); |
| 288 |
return; |
| 289 |
} |
| 290 |
|
| 291 |
const unsigned value = dateTimeFieldsState.month(); |
| 292 |
if (value > static_cast<unsigned>(maximum())) { |
| 293 |
setEmptyValue(dateForReadOnlyField); |
| 294 |
return; |
| 295 |
} |
| 296 |
|
| 297 |
setValueAsInteger(value); |
| 298 |
} |
| 299 |
|
| 300 |
// ---------------------------- |
| 301 |
|
| 259 |
DateTimeSecondFieldElement::DateTimeSecondFieldElement(Document* document, FieldOwner& fieldOwner) |
302 |
DateTimeSecondFieldElement::DateTimeSecondFieldElement(Document* document, FieldOwner& fieldOwner) |
| 260 |
: DateTimeNumericFieldElement(document, fieldOwner, 0, 59) |
303 |
: DateTimeNumericFieldElement(document, fieldOwner, 0, 59, "--") |
| 261 |
{ |
304 |
{ |
| 262 |
} |
305 |
} |
| 263 |
|
306 |
|
|
Lines 295-300
void DateTimeSecondFieldElement::setValueAsDateTimeFieldsState(const DateTimeFie
a/Source/WebCore/html/shadow/DateTimeFieldElements.cpp_sec6
|
| 295 |
setValueAsInteger(value); |
338 |
setValueAsInteger(value); |
| 296 |
} |
339 |
} |
| 297 |
|
340 |
|
|
|
341 |
// ---------------------------- |
| 342 |
|
| 343 |
// HTML5 uses ISO-8601 format with year >= 1. Gregorian calendar started in |
| 344 |
// 1582. However, we need to support 0001-01-01 in Gregorian calendar rule. |
| 345 |
static const int minimumYear = 1; |
| 346 |
// Date in ECMAScript can't represent dates later than 275760-09-13T00:00Z. |
| 347 |
// So, we have the same upper limit in HTML5 dates. |
| 348 |
static const int maximumYear = 275760; |
| 349 |
|
| 350 |
DateTimeYearFieldElement::DateTimeYearFieldElement(Document* document, FieldOwner& fieldOwner, const String& placeholder) |
| 351 |
: DateTimeNumericFieldElement(document, fieldOwner, minimumYear, maximumYear, placeholder) |
| 352 |
{ |
| 353 |
} |
| 354 |
|
| 355 |
PassRefPtr<DateTimeYearFieldElement> DateTimeYearFieldElement::create(Document* document, FieldOwner& fieldOwner, const String& placeholder) |
| 356 |
{ |
| 357 |
DEFINE_STATIC_LOCAL(AtomicString, yearPsuedoId, ("-webkit-datetime-edit-year-field")); |
| 358 |
RefPtr<DateTimeYearFieldElement> field = adoptRef(new DateTimeYearFieldElement(document, fieldOwner, placeholder)); |
| 359 |
field->initialize(yearPsuedoId, AXYearFieldText()); |
| 360 |
return field.release(); |
| 361 |
} |
| 362 |
|
| 363 |
int DateTimeYearFieldElement::defaultValueForStepDown() const |
| 364 |
{ |
| 365 |
double current = currentTimeMS(); |
| 366 |
double utcOffset = calculateUTCOffset(); |
| 367 |
double dstOffset = calculateDSTOffset(current, utcOffset); |
| 368 |
int offset = static_cast<int>((utcOffset + dstOffset) / msPerMinute); |
| 369 |
current += offset * msPerMinute; |
| 370 |
|
| 371 |
DateComponents date; |
| 372 |
date.setMillisecondsSinceEpochForMonth(current); |
| 373 |
return date.fullYear(); |
| 374 |
} |
| 375 |
|
| 376 |
int DateTimeYearFieldElement::defaultValueForStepUp() const |
| 377 |
{ |
| 378 |
return defaultValueForStepDown(); |
| 379 |
} |
| 380 |
|
| 381 |
void DateTimeYearFieldElement::populateDateTimeFieldsState(DateTimeFieldsState& dateTimeFieldsState) |
| 382 |
{ |
| 383 |
dateTimeFieldsState.setYear(hasValue() ? valueAsInteger() : DateTimeFieldsState::emptyValue); |
| 384 |
} |
| 385 |
|
| 386 |
void DateTimeYearFieldElement::setValueAsDate(const DateComponents& date) |
| 387 |
{ |
| 388 |
setValueAsInteger(date.fullYear()); |
| 389 |
} |
| 390 |
|
| 391 |
void DateTimeYearFieldElement::setValueAsDateTimeFieldsState(const DateTimeFieldsState& dateTimeFieldsState, const DateComponents& dateForReadOnlyField) |
| 392 |
{ |
| 393 |
if (!dateTimeFieldsState.hasYear()) { |
| 394 |
setEmptyValue(dateForReadOnlyField); |
| 395 |
return; |
| 396 |
} |
| 397 |
|
| 398 |
const unsigned value = dateTimeFieldsState.year(); |
| 399 |
if (value > static_cast<unsigned>(maximum())) { |
| 400 |
setEmptyValue(dateForReadOnlyField); |
| 401 |
return; |
| 402 |
} |
| 403 |
|
| 404 |
setValueAsInteger(value); |
| 405 |
} |
| 406 |
|
| 298 |
} // namespace WebCore |
407 |
} // namespace WebCore |
| 299 |
|
408 |
|
| 300 |
#endif |
409 |
#endif |