mirror of
https://github.com/processwire/processwire.git
synced 2025-08-16 03:34:33 +02:00
Move the requiredAttr Inputfield config option from InputfieldText into Inputfield so that it can be used on other Inputfield types
This commit is contained in:
@@ -87,6 +87,7 @@
|
|||||||
* ===================
|
* ===================
|
||||||
* @property int|bool $required Set to true (or 1) to make input required, or false (or 0) to make not required (default=0). #pw-group-behavior
|
* @property int|bool $required Set to true (or 1) to make input required, or false (or 0) to make not required (default=0). #pw-group-behavior
|
||||||
* @property string $requiredIf Optional conditions under which input is required (selector string). #pw-group-behavior
|
* @property string $requiredIf Optional conditions under which input is required (selector string). #pw-group-behavior
|
||||||
|
* @property int|bool|null $requiredAttr Use HTML5 “required” attribute when used by Inputfield and $required is true? Default=null. #pw-group-behavior
|
||||||
* @property InputfieldWrapper|null $parent The parent InputfieldWrapper for this Inputfield or null if not set. #pw-internal
|
* @property InputfieldWrapper|null $parent The parent InputfieldWrapper for this Inputfield or null if not set. #pw-internal
|
||||||
* @property null|bool|Fieldtype $hasFieldtype The Fieldtype using this Inputfield, or boolean false when known not to have a Fieldtype, or null when not known. #pw-group-other
|
* @property null|bool|Fieldtype $hasFieldtype The Fieldtype using this Inputfield, or boolean false when known not to have a Fieldtype, or null when not known. #pw-group-other
|
||||||
* @property null|Field $hasField The Field object associated with this Inputfield, or null when not applicable or not known. #pw-group-other
|
* @property null|Field $hasField The Field object associated with this Inputfield, or null when not applicable or not known. #pw-group-other
|
||||||
@@ -878,11 +879,13 @@ abstract class Inputfield extends WireData implements Module {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public function getAttributes() {
|
public function getAttributes() {
|
||||||
$attributes = array();
|
$attrs = $this->attributes;
|
||||||
foreach($this->attributes as $key => $value) {
|
if(!isset($attrs['required']) && $this->getSetting('required') && $this->getSetting('requiredAttr')) {
|
||||||
$attributes[$key] = $value;
|
if(!$this->getSetting('showIf') && !$this->getSetting('requiredIf')) {
|
||||||
|
$attrs['required'] = 'required';
|
||||||
}
|
}
|
||||||
return $attributes;
|
}
|
||||||
|
return $attrs;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1493,6 +1496,22 @@ abstract class Inputfield extends WireData implements Module {
|
|||||||
$field->collapsed = $this->getSetting('required') ? Inputfield::collapsedNo : Inputfield::collapsedYes;
|
$field->collapsed = $this->getSetting('required') ? Inputfield::collapsedNo : Inputfield::collapsedYes;
|
||||||
$fields->add($field);
|
$fields->add($field);
|
||||||
|
|
||||||
|
$requiredAttr = $this->getSetting('requiredAttr');
|
||||||
|
if($requiredAttr !== null) {
|
||||||
|
// Inputfield must have set requiredAttr to some non-null value before this will appear as option in config
|
||||||
|
$field->columnWidth = 50; // required checkbox
|
||||||
|
/** @var InputfieldCheckbox $f */
|
||||||
|
$f = $this->modules->get('InputfieldCheckbox');
|
||||||
|
$f->attr('name', 'requiredAttr');
|
||||||
|
$f->label = $this->_('Also use HTML5 “required” attribute?');
|
||||||
|
$f->showIf = "required=1, showIf='', requiredIf=''";
|
||||||
|
$f->description = $this->_('Use only on fields *always* visible to the user.');
|
||||||
|
$f->icon = 'html5';
|
||||||
|
$f->columnWidth = 50;
|
||||||
|
if($requiredAttr) $f->attr('checked', 'checked');
|
||||||
|
$fields->add($f);
|
||||||
|
}
|
||||||
|
|
||||||
/** @var InputfieldText $field */
|
/** @var InputfieldText $field */
|
||||||
$field = $this->modules->get('InputfieldText');
|
$field = $this->modules->get('InputfieldText');
|
||||||
$field->label = $this->_('Required only if');
|
$field->label = $this->_('Required only if');
|
||||||
@@ -1569,6 +1588,7 @@ abstract class Inputfield extends WireData implements Module {
|
|||||||
'columnWidth',
|
'columnWidth',
|
||||||
'required',
|
'required',
|
||||||
'requiredIf',
|
'requiredIf',
|
||||||
|
'requiredAttr',
|
||||||
'showIf'
|
'showIf'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -136,10 +136,6 @@ class InputfieldText extends Inputfield {
|
|||||||
$attrs['value'] = $this->initValue;
|
$attrs['value'] = $this->initValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($this->required && $this->requiredAttr && !$this->getSetting('showIf') && !$this->getSetting('requiredIf')) {
|
|
||||||
$attrs['required'] = 'required';
|
|
||||||
}
|
|
||||||
|
|
||||||
if(isset($attrs['minlength'])) {
|
if(isset($attrs['minlength'])) {
|
||||||
// convert minlength attr to a data-minlength attr, since minlength doesn't have wide browser support
|
// convert minlength attr to a data-minlength attr, since minlength doesn't have wide browser support
|
||||||
if($attrs['minlength'] > 0) $attrs['data-minlength'] = $attrs['minlength'];
|
if($attrs['minlength'] > 0) $attrs['data-minlength'] = $attrs['minlength'];
|
||||||
@@ -278,23 +274,6 @@ class InputfieldText extends Inputfield {
|
|||||||
|
|
||||||
$inputfields = parent::___getConfigInputfields();
|
$inputfields = parent::___getConfigInputfields();
|
||||||
|
|
||||||
/** @var InputfieldCheckbox $required */
|
|
||||||
$required = $inputfields->getChildByName('required');
|
|
||||||
|
|
||||||
if($required) {
|
|
||||||
$required->set('columnWidth', 50);
|
|
||||||
/** @var InputfieldCheckbox $field */
|
|
||||||
$field = $this->modules->get('InputfieldCheckbox');
|
|
||||||
$field->attr('name', 'requiredAttr');
|
|
||||||
$field->label = $this->_('Also use HTML5 “required” attribute?');
|
|
||||||
$field->showIf = "required=1, showIf='', requiredIf=''";
|
|
||||||
$field->description = $this->_('Use only on fields *always* visible to the user.');
|
|
||||||
$field->icon = 'html5';
|
|
||||||
$field->columnWidth = 50;
|
|
||||||
if($this->requiredAttr) $field->attr('checked', 'checked');
|
|
||||||
$required->getParent()->insertAfter($field, $required);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** @var InputfieldInteger $field */
|
/** @var InputfieldInteger $field */
|
||||||
$field = $this->modules->get('InputfieldInteger');
|
$field = $this->modules->get('InputfieldInteger');
|
||||||
$field->setAttribute('name', 'minlength');
|
$field->setAttribute('name', 'minlength');
|
||||||
|
Reference in New Issue
Block a user