8000 [Form] Add allow_html5 option to date and time FormType to disable HTML5 input type by csanquer · Pull Request #8291 · symfony/symfony · GitHub
[go: up one dir, main page]

Skip to content

[Form] Add allow_html5 option to date and time FormType to disable HTML5 input type #8291

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 23, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
add allow_html5 option to date and time FormType to disable HTML5 dat…
…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
commit 392d6c789bde3a6775a328b1b38af84e19b4fcdf
4 changes: 4 additions & 0 deletions src/Symfony/Component/Form/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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