From 422ceaff8516fc16c91a18ba735f5fe2039b6e02 Mon Sep 17 00:00:00 2001 From: ADmad Date: Sat, 26 Jan 2013 03:17:45 +0530 Subject: [PATCH] Added "tel" and "email" input type guessing. Closes #3557 --- .../Test/Case/View/Helper/FormHelperTest.php | 34 +++++++++---------- lib/Cake/View/Helper/FormHelper.php | 8 ++++- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php b/lib/Cake/Test/Case/View/Helper/FormHelperTest.php index 6e5ad6ecd..18153647b 100644 --- a/lib/Cake/Test/Case/View/Helper/FormHelperTest.php +++ b/lib/Cake/Test/Case/View/Helper/FormHelperTest.php @@ -1826,12 +1826,12 @@ class FormHelperTest extends CakeTestCase { $result = $this->Form->input('Contact.email', array('id' => 'custom')); $expected = array( - 'div' => array('class' => 'input text'), + 'div' => array('class' => 'input email'), 'label' => array('for' => 'custom'), 'Email', '/label', array('input' => array( - 'type' => 'text', 'name' => 'data[Contact][email]', + 'type' => 'email', 'name' => 'data[Contact][email]', 'id' => 'custom', 'maxlength' => 255 )), '/div' @@ -1845,7 +1845,7 @@ class FormHelperTest extends CakeTestCase { 'Email', '/label', array('input' => array( - 'type' => 'text', 'name' => 'data[Contact][email]', + 'type' => 'email', 'name' => 'data[Contact][email]', 'id' => 'ContactEmail', 'maxlength' => 255 )), '/div' @@ -1920,12 +1920,12 @@ class FormHelperTest extends CakeTestCase { $this->Form->request->data = array('Contact' => array('phone' => 'Hello & World > weird chars')); $result = $this->Form->input('Contact.phone'); $expected = array( - 'div' => array('class' => 'input text'), + 'div' => array('class' => 'input tel'), 'label' => array('for' => 'ContactPhone'), 'Phone', '/label', array('input' => array( - 'type' => 'text', 'name' => 'data[Contact][phone]', + 'type' => 'tel', 'name' => 'data[Contact][phone]', 'value' => 'Hello & World > weird chars', 'id' => 'ContactPhone', 'maxlength' => 255 )), @@ -2808,9 +2808,9 @@ class FormHelperTest extends CakeTestCase { 'input' => array('type' => 'hidden', 'name' => 'data[Contact][id]', 'id' => 'ContactId'), array('div' => array('class' => 'input text')), '*/div', - array('div' => array('class' => 'input text')), + array('div' => array('class' => 'input email')), '*/div', - array('div' => array('class' => 'input text')), + array('div' => array('class' => 'input tel')), '*/div', array('div' => array('class' => 'input password')), '*/div', @@ -2833,9 +2833,9 @@ class FormHelperTest extends CakeTestCase { 'input' => array('type' => 'hidden', 'name' => 'data[Contact][id]', 'id' => 'ContactId'), array('div' => array('class' => 'input text')), '*/div', - array('div' => array('class' => 'input text')), + array('div' => array('class' => 'input email')), '*/div', - array('div' => array('class' => 'input text')), + array('div' => array('class' => 'input tel')), '*/div', array('div' => array('class' => 'input password')), '*/div', @@ -2863,9 +2863,9 @@ class FormHelperTest extends CakeTestCase { 'input' => array('type' => 'hidden', 'name' => 'data[Contact][id]', 'id' => 'ContactId'), array('div' => array('class' => 'input text')), '*/div', - array('div' => array('class' => 'input text')), + array('div' => array('class' => 'input email')), '*/div', - array('div' => array('class' => 'input text')), + array('div' => array('class' => 'input tel')), '*/div', array('div' => array('class' => 'input password')), '*/div', @@ -2889,9 +2889,9 @@ class FormHelperTest extends CakeTestCase { 'input' => array('type' => 'hidden', 'name' => 'data[Contact][id]', 'id' => 'ContactId'), array('div' => array('class' => 'input text')), '*/div', - array('div' => array('class' => 'input text')), + array('div' => array('class' => 'input email')), '*/div', - array('div' => array('class' => 'input text')), + array('div' => array('class' => 'input tel')), '*/div', array('div' => array('class' => 'input password')), '*/div', @@ -2922,9 +2922,9 @@ class FormHelperTest extends CakeTestCase { 'input' => array('type' => 'hidden', 'name' => 'data[Contact][id]', 'id' => 'ContactId'), array('div' => array('class' => 'input text')), '*/div', - array('div' => array('class' => 'input text')), + array('div' => array('class' => 'input email')), '*/div', - array('div' => array('class' => 'input text')), + array('div' => array('class' => 'input tel')), '*/div', array('div' => array('class' => 'input password')), '*/div', @@ -2952,9 +2952,9 @@ class FormHelperTest extends CakeTestCase { 'input' => array('type' => 'hidden', 'name' => 'data[Contact][id]', 'id' => 'ContactId'), array('div' => array('class' => 'input text')), '*/div', - array('div' => array('class' => 'input text')), + array('div' => array('class' => 'input email')), '*/div', - array('div' => array('class' => 'input text')), + array('div' => array('class' => 'input tel')), '*/div', array('div' => array('class' => 'input password')), '*/div', diff --git a/lib/Cake/View/Helper/FormHelper.php b/lib/Cake/View/Helper/FormHelper.php index a77333f2d..eac615994 100644 --- a/lib/Cake/View/Helper/FormHelper.php +++ b/lib/Cake/View/Helper/FormHelper.php @@ -1129,6 +1129,10 @@ class FormHelper extends AppHelper { $options['type'] = 'select'; } elseif (in_array($fieldKey, array('psword', 'passwd', 'password'))) { $options['type'] = 'password'; + } elseif (in_array($fieldKey, array('tel', 'telephone', 'phone'))) { + $options['type'] = 'tel'; + } elseif ($fieldKey === 'email') { + $options['type'] = 'email'; } elseif (isset($options['checked'])) { $options['type'] = 'checkbox'; } elseif ($fieldDef = $this->_introspectModel($modelKey, 'fields', $fieldKey)) { @@ -1235,7 +1239,9 @@ class FormHelper extends AppHelper { is_scalar($fieldDef['length']) && $options['type'] !== 'select' ); - if ($autoLength && $options['type'] == 'text') { + if ($autoLength && + in_array($options['type'], array('text', 'email', 'tel', 'url')) + ) { $options['maxlength'] = $fieldDef['length']; } if ($autoLength && $fieldDef['type'] == 'float') {