diff --git a/layouts/joomla/form/field/email.php b/layouts/joomla/form/field/email.php
new file mode 100644
index 0000000000000..3ee9827cc0ae3
--- /dev/null
+++ b/layouts/joomla/form/field/email.php
@@ -0,0 +1,75 @@
+ section in form XML.
+ * @var boolean $hidden Is this field hidden in the form?
+ * @var string $hint Placeholder for the field.
+ * @var string $id DOM id of the field.
+ * @var string $label Label of the field.
+ * @var string $labelclass Classes to apply to the label.
+ * @var boolean $multiple Does this field support multiple values?
+ * @var string $name Name of the input field.
+ * @var string $onchange Onchange attribute for the field.
+ * @var string $onclick Onclick attribute for the field.
+ * @var string $pattern Pattern (Reg Ex) of value of the form field.
+ * @var boolean $readonly Is this field read only?
+ * @var boolean $repeat Allows extensions to duplicate elements.
+ * @var boolean $required Is this field required?
+ * @var integer $size Size attribute of the input.
+ * @var boolean $spellcheck Spellcheck state for the form field.
+ * @var string $validate Validation rules to apply.
+ * @var string $value Value attribute of the field.
+ * @var array $checkedOptions Options that will be set as checked.
+ * @var boolean $hasValue Has this field a value assigned?
+ * @var array $options Options available for this field.
+ * @var array $inputType Options available for this field.
+ * @var array $spellcheck Options available for this field.
+ * @var string $accept File types that are accepted.
+ */
+
+$autocomplete = !$autocomplete ? 'autocomplete="off"' : 'autocomplete="' . $autocomplete . '"';
+$autocomplete = $autocomplete == 'autocomplete="on"' ? '' : $autocomplete;
+
+$attributes = array(
+ $spellcheck ? '' : 'spellcheck="false"',
+ !empty($size) ? 'size="' . $size . '"' : '',
+ $disabled ? 'disabled' : '',
+ $readonly ? 'readonly' : '',
+ $onchange ? 'onchange="' . $onchange . '"' : '',
+ $autocomplete,
+ $multiple ? 'multiple' : '',
+ !empty($maxLength) ? 'maxlength="' . $maxLength . '"' : '',
+ strlen($hint) ? 'placeholder="' . $hint . '"' : '',
+ $required ? 'required aria-required="true"' : '',
+ $autofocus ? 'autofocus' : '',
+);
+
+// Including fallback code for HTML5 non supported browsers.
+JHtml::_('jquery.framework');
+JHtml::_('script', 'system/html5fallback.js', false, true);
+
+?>
+ id="" value=""
+ />
diff --git a/libraries/joomla/form/fields/email.php b/libraries/joomla/form/fields/email.php
index 15a5fa3d640f5..0e986514a910a 100644
--- a/libraries/joomla/form/fields/email.php
+++ b/libraries/joomla/form/fields/email.php
@@ -29,6 +29,14 @@ class JFormFieldEMail extends JFormFieldText
*/
protected $type = 'Email';
+ /**
+ * Name of the layout being used to render the field
+ *
+ * @var string
+ * @since 3.7
+ */
+ protected $layout = 'joomla.form.field.email';
+
/**
* Method to get the field input markup for e-mail addresses.
*
@@ -38,32 +46,24 @@ class JFormFieldEMail extends JFormFieldText
*/
protected function getInput()
{
- // Translate placeholder text
- $hint = $this->translateHint ? JText::_($this->hint) : $this->hint;
-
- // Initialize some field attributes.
- $size = !empty($this->size) ? ' size="' . $this->size . '"' : '';
- $maxLength = !empty($this->maxLength) ? ' maxlength="' . $this->maxLength . '"' : '';
- $class = !empty($this->class) ? ' class="validate-email ' . $this->class . '"' : ' class="validate-email"';
- $readonly = $this->readonly ? ' readonly' : '';
- $disabled = $this->disabled ? ' disabled' : '';
- $required = $this->required ? ' required aria-required="true"' : '';
- $hint = strlen($hint) ? ' placeholder="' . $hint . '"' : '';
- $autocomplete = !$this->autocomplete ? ' autocomplete="off"' : ' autocomplete="' . $this->autocomplete . '"';
- $autocomplete = $autocomplete == ' autocomplete="on"' ? '' : $autocomplete;
- $autofocus = $this->autofocus ? ' autofocus' : '';
- $multiple = $this->multiple ? ' multiple' : '';
- $spellcheck = $this->spellcheck ? '' : ' spellcheck="false"';
-
- // Initialize JavaScript field attributes.
- $onchange = $this->onchange ? ' onchange="' . $this->onchange . '"' : '';
-
- // Including fallback code for HTML5 non supported browsers.
- JHtml::_('jquery.framework');
- JHtml::_('script', 'system/html5fallback.js', false, true);
+ // Trim the trailing line in the layout file
+ return rtrim($this->getRenderer($this->layout)->render($this->getLayoutData()), PHP_EOL);
+ }
+ /**
+ * Method to get the data to be passed to the layout for rendering.
+ *
+ * @return array
+ *
+ * @since 3.5
+ */
+ protected function getLayoutData()
+ {
+ $data = parent::getLayoutData();
- return '';
+ $extraData = array(
+ 'maxLength' => $this->maxLength,
+ 'multiple' => $this->multiple,
+ );
+ return array_merge($data, $extraData);
}
}
diff --git a/tests/unit/suites/libraries/joomla/form/fields/JFormFieldEmailTest.php b/tests/unit/suites/libraries/joomla/form/fields/JFormFieldEmailTest.php
index 67d6493bbee23..ab529a5734801 100644
--- a/tests/unit/suites/libraries/joomla/form/fields/JFormFieldEmailTest.php
+++ b/tests/unit/suites/libraries/joomla/form/fields/JFormFieldEmailTest.php
@@ -91,9 +91,11 @@ public function testGetInput($data, $expected)
TestReflection::setValue($formField, $attr, $value);
}
+ $replaces = array("\n", "\r"," ", "\t");
+
$this->assertEquals(
- $expected,
- TestReflection::invoke($formField, 'getInput'),
+ str_replace($replaces, '', $expected),
+ str_replace($replaces, '', TestReflection::invoke($formField, 'getInput')),
'Line:' . __LINE__ . ' The field with no value and no checked attribute did not produce the right html'
);
}