Skip to content
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

Form field tel using JLayouts #13435

Merged
merged 9 commits into from Jan 5, 2017
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
72 changes: 72 additions & 0 deletions layouts/joomla/form/field/tel.php
@@ -0,0 +1,72 @@
<?php
/**
* @package Joomla.Site
* @subpackage Layout
*
* @copyright Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/

defined('JPATH_BASE') or die;

extract($displayData);

/**
* Layout variables
* -----------------
* @var string $autocomplete Autocomplete attribute for the field.
* @var boolean $autofocus Is autofocus enabled?
* @var string $class Classes for the input.
* @var string $description Description of the field.
* @var boolean $disabled Is this field disabled?
* @var string $group Group the field belongs to. <fields> 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 string $accept File types that are accepted.
* @var integer $maxLength The maximum length that the field shall accept.
*/

// Including fallback code for HTML5 non supported browsers.
JHtml::_('jquery.framework');
JHtml::_('script', 'system/html5fallback.js', false, true);

$autocomplete = !$autocomplete ? ' autocomplete="off"' : ' autocomplete="' . $autocomplete . '"';
$autocomplete = $autocomplete == ' autocomplete="on"' ? '' : $autocomplete;

$attributes = array(
!empty($size) ? 'size="' . $size . '"' : '',
$disabled ? 'disabled' : '',
$readonly ? 'readonly' : '',
strlen($hint) ? 'placeholder="' . $hint . '"' : '',
$autocomplete,
$autofocus ? ' autofocus' : '',
$spellcheck ? '' : 'spellcheck="false"',
$onchange ? ' onchange="' . $onchange . '"' : '',
!empty($maxLength) ? $maxLength : '',
$required ? 'required aria-required="true"' : '',
);
?>
<input type="tel" name="<?php
echo $name; ?>" <?php
echo !empty($class) ? ' class="' . $class . '"' : ''; ?> id="<?php
echo $id; ?> " value="<?php
echo htmlspecialchars($value, ENT_COMPAT, 'UTF-8'); ?>" <?php echo implode(' ', $attributes); ?> />
49 changes: 27 additions & 22 deletions libraries/joomla/form/fields/tel.php
Expand Up @@ -30,6 +30,14 @@ class JFormFieldTel extends JFormFieldText implements JFormDomfieldinterface
*/
protected $type = 'Tel';

/**
* Name of the layout being used to render the field
*
* @var string
* @since __DEPLOY_VERSION__
*/
protected $layout = 'joomla.form.field.tel';

/**
* Method to get the field input markup.
*
Expand All @@ -39,32 +47,29 @@ class JFormFieldTel extends JFormFieldText implements JFormDomfieldinterface
*/
protected function getInput()
{
// Translate placeholder text
$hint = $this->translateHint ? JText::_($this->hint) : $this->hint;
// 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 __DEPLOY_VERSION__
*/
protected function getLayoutData()
{
$data = parent::getLayoutData();

// Initialize some field attributes.
$size = !empty($this->size) ? ' size="' . $this->size . '"' : '';
$maxLength = !empty($this->maxLength) ? ' maxlength="' . $this->maxLength . '"' : '';
$class = !empty($this->class) ? ' class="' . $this->class . '"' : '';
$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' : '';
$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', array('version' => 'auto', 'relative' => true));
$extraData = array(
'maxLength' => $maxLength,
);

return '<input type="tel" name="' . $this->name . '"' . $class . ' id="' . $this->id . '" value="'
. htmlspecialchars($this->value, ENT_COMPAT, 'UTF-8') . '"' . $size . $disabled . $readonly
. $hint . $autocomplete . $autofocus . $spellcheck . $onchange . $maxLength . $required . ' />';
return array_merge($data, $extraData);
}

/**
Expand All @@ -77,7 +82,7 @@ protected function getInput()
*
* @return void
*
* @since 3.7.0
* @since __DEPLOY_VERSION__
*/
protected function postProcessDomNode($field, DOMElement $fieldNode, JForm $form)
{
Expand Down
Expand Up @@ -92,10 +92,8 @@ public function testGetInput($data, $expected)
TestReflection::setValue($formField, $attr, $value);
}

$this->assertEquals(
$expected,
TestReflection::invoke($formField, 'getInput'),
'Line:' . __LINE__ . ' The field did not produce the right html'
);
$replaces = array("\n", "\r"," ", "\t");

$this->assertEquals(str_replace($replaces, '', TestReflection::invoke($formField, 'getInput')), str_replace($replaces, '', $expected), 'Line:' . __LINE__ . ' The field did not produce the right html');
}
}