Skip to content

Commit

Permalink
add allow_html5 option to date and time FormType to disable HTML5 dat…
Browse files Browse the repository at this point in the history
…e input when widget is set to single_text

remove unnecessary test when creating datetime format data transformer
  • Loading branch information
csanquer authored and Charles Sanquer committed Jul 24, 2014
1 parent b3b41d5 commit 392d6c7
Show file tree
Hide file tree
Showing 8 changed files with 52 additions and 5 deletions.
4 changes: 4 additions & 0 deletions src/Symfony/Component/Form/CHANGELOG.md
@@ -1,6 +1,10 @@
CHANGELOG
=========

2.6.0
-----
* added allow_html5 option to Date, Time and DateTimeFormType to disable HTML5 input date when widget option is single_text

2.5.0
------

Expand Down
Expand Up @@ -117,6 +117,7 @@ public function buildForm(FormBuilderInterface $builder, array $options)
'empty_value',
'required',
'translation_domain',
'allow_html5',
)));

$timeOptions = array_intersect_key($options, array_flip(array(
Expand All @@ -128,6 +129,7 @@ public function buildForm(FormBuilderInterface $builder, array $options)
'empty_value',
'required',
'translation_domain',
'allow_html5',
)));

if (null !== $options['date_widget']) {
Expand Down Expand Up @@ -180,10 +182,11 @@ public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['widget'] = $options['widget'];

// Change the input to a HTML5 date input if
// Change the input to a HTML5 datetime input if
// * the widget is set to "single_text"
// * the format matches the one expected by HTML5
if ('single_text' === $options['widget'] && self::HTML5_FORMAT === $options['format']) {
// * the allow_html5 is set to true
if ($options['allow_html5'] && 'single_text' === $options['widget'] && self::HTML5_FORMAT === $options['format']) {
$view->vars['type'] = 'datetime';
}
}
Expand Down Expand Up @@ -218,6 +221,7 @@ public function setDefaultOptions(OptionsResolverInterface $resolver)
'time_widget' => $timeWidget,
'with_minutes' => true,
'with_seconds' => false,
'allow_html5' => true,
// Don't modify \DateTime classes by reference, we treat
// them like immutable value objects
'by_reference' => false,
Expand Down
4 changes: 3 additions & 1 deletion src/Symfony/Component/Form/Extension/Core/Type/DateType.php
Expand Up @@ -130,7 +130,8 @@ public function finishView(FormView $view, FormInterface $form, array $options)
// Change the input to a HTML5 date input if
// * the widget is set to "single_text"
// * the format matches the one expected by HTML5
if ('single_text' === $options['widget'] && self::HTML5_FORMAT === $options['format']) {
// * the allow_html5 is set to true
if ($options['allow_html5'] && 'single_text' === $options['widget'] && self::HTML5_FORMAT === $options['format']) {
$view->vars['type'] = 'date';
}

Expand Down Expand Up @@ -199,6 +200,7 @@ public function setDefaultOptions(OptionsResolverInterface $resolver)
'model_timezone' => null,
'view_timezone' => null,
'empty_value' => $emptyValue,
'allow_html5' => true,
// Don't modify \DateTime classes by reference, we treat
// them like immutable value objects
'by_reference' => false,
Expand Down
6 changes: 5 additions & 1 deletion src/Symfony/Component/Form/Extension/Core/Type/TimeType.php
Expand Up @@ -138,7 +138,10 @@ public function buildView(FormView $view, FormInterface $form, array $options)
'with_seconds' => $options['with_seconds'],
));

if ('single_text' === $options['widget']) {
// Change the input to a HTML5 time input if
// * the widget is set to "single_text"
// * the allow_html5 is set to true
if ($options['allow_html5'] && 'single_text' === $options['widget']) {
$view->vars['type'] = 'time';

// we need to force the browser to display the seconds by
Expand Down Expand Up @@ -192,6 +195,7 @@ public function setDefaultOptions(OptionsResolverInterface $resolver)
'model_timezone' => null,
'view_timezone' => null,
'empty_value' => $emptyValue,
'allow_html5' => true,
// Don't modify \DateTime classes by reference, we treat
// them like immutable value objects
'by_reference' => false,
Expand Down
Expand Up @@ -32,7 +32,7 @@ protected function tearDown()
$this->dateTimeWithoutSeconds = null;
}

public static function assertEquals($expected, $actual, $message = '', $delta = 0, $maxDepth = 10, $canonicalize = FALSE, $ignoreCase = FALSE)
public static function assertEquals($expected, $actual, $message = '', $delta = 0, $maxDepth = 10, $canonicalize = false, $ignoreCase = false)
{
if ($expected instanceof \DateTime && $actual instanceof \DateTime) {
$expected = $expected->format('c');
Expand Down
Expand Up @@ -405,6 +405,17 @@ public function testPassHtml5TypeIfSingleTextAndHtml5Format()
$this->assertSame('datetime', $view->vars['type']);
}

public function testDontPassHtml5TypeIfHtml5NotAllowed()
{
$form = $this->factory->create('datetime', null, array(
'widget' => 'single_text',
'allow_html5' => false,
));

$view = $form->createView();
$this->assertFalse(isset($view->vars['type']));
}

public function testDontPassHtml5TypeIfNotHtml5Format()
{
$form = $this->factory->create('datetime', null, array(
Expand Down
Expand Up @@ -705,6 +705,17 @@ public function testPassHtml5TypeIfSingleTextAndHtml5Format()
$this->assertSame('date', $view->vars['type']);
}

public function testDontPassHtml5TypeIfHtml5NotAllowed()
{
$form = $this->factory->create('date', null, array(
'widget' => 'single_text',
'allow_html5' => false,
));

$view = $form->createView();
$this->assertFalse(isset($view->vars['type']));
}

public function testDontPassHtml5TypeIfNotHtml5Format()
{
$form = $this->factory->create('date', null, array(
Expand Down
Expand Up @@ -519,6 +519,17 @@ public function testSingleTextWidgetWithSecondsShouldNotOverrideStepAttribute()
$this->assertEquals(30, $view->vars['attr']['step']);
}

public function testDontPassHtml5TypeIfHtml5NotAllowed()
{
$form = $this->factory->create('time', null, array(
'widget' => 'single_text',
'allow_html5' => false,
));

$view = $form->createView();
$this->assertFalse(isset($view->vars['type']));
}

public function testPassDefaultEmptyValueToViewIfNotRequired()
{
$form = $this->factory->create('time', null, array(
Expand Down

0 comments on commit 392d6c7

Please sign in to comment.