#include "config.h"
#include "TimeInputType.h"
#include "DateComponents.h"
#include "HTMLInputElement.h"
#include "HTMLNames.h"
#include <wtf/CurrentTime.h>
#include <wtf/DateMath.h>
#include <wtf/MathExtras.h>
#include <wtf/PassOwnPtr.h>
namespace WebCore {
using namespace HTMLNames;
static const double timeDefaultStep = 60.0;
static const double timeStepScaleFactor = 1000.0;
PassOwnPtr<InputType> TimeInputType::create(HTMLInputElement* element)
{
return adoptPtr(new TimeInputType(element));
}
const AtomicString& TimeInputType::formControlType() const
{
return InputTypeNames::time();
}
DateComponents::Type TimeInputType::dateType() const
{
return DateComponents::Time;
}
double TimeInputType::defaultValueForStepUp() const
{
double current = currentTimeMS();
double utcOffset = calculateUTCOffset();
double dstOffset = calculateDSTOffset(current, utcOffset);
int offset = static_cast<int>((utcOffset + dstOffset) / msPerMinute);
current += offset * msPerMinute;
DateComponents date;
date.setMillisecondsSinceMidnight(current);
double milliseconds = date.millisecondsSinceEpoch();
ASSERT(isfinite(milliseconds));
return milliseconds;
}
double TimeInputType::minimum() const
{
return parseToDouble(element()->fastGetAttribute(minAttr), DateComponents::minimumTime());
}
double TimeInputType::maximum() const
{
return parseToDouble(element()->fastGetAttribute(maxAttr), DateComponents::maximumTime());
}
double TimeInputType::defaultStep() const
{
return timeDefaultStep;
}
double TimeInputType::stepScaleFactor() const
{
return timeStepScaleFactor;
}
bool TimeInputType::scaledStepValueShouldBeInteger() const
{
return true;
}
bool TimeInputType::parseToDateComponentsInternal(const UChar* characters, unsigned length, DateComponents* out) const
{
ASSERT(out);
unsigned end;
return out->parseTime(characters, length, 0, end) && end == length;
}
bool TimeInputType::setMillisecondToDateComponents(double value, DateComponents* date) const
{
ASSERT(date);
return date->setMillisecondsSinceMidnight(value);
}
}