summaryrefslogtreecommitdiffstats
path: root/vendor/ipl/html/src/FormElement/PasswordElement.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/ipl/html/src/FormElement/PasswordElement.php')
-rw-r--r--vendor/ipl/html/src/FormElement/PasswordElement.php55
1 files changed, 55 insertions, 0 deletions
diff --git a/vendor/ipl/html/src/FormElement/PasswordElement.php b/vendor/ipl/html/src/FormElement/PasswordElement.php
new file mode 100644
index 0000000..dfa6d8c
--- /dev/null
+++ b/vendor/ipl/html/src/FormElement/PasswordElement.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace ipl\Html\FormElement;
+
+use ipl\Html\Attributes;
+use ipl\Html\Form;
+
+class PasswordElement extends InputElement
+{
+ /** @var string Dummy passwd of this element to be rendered */
+ public const DUMMYPASSWORD = '_ipl_form_5847ed1b5b8ca';
+
+ protected $type = 'password';
+
+ /** @var bool Status of the form */
+ protected $isFormValid = true;
+
+ protected function registerAttributeCallbacks(Attributes $attributes)
+ {
+ parent::registerAttributeCallbacks($attributes);
+
+ $attributes->registerAttributeCallback(
+ 'value',
+ function () {
+ if ($this->hasValue() && count($this->getValueCandidates()) === 1 && $this->isFormValid) {
+ return self::DUMMYPASSWORD;
+ }
+
+ if (parent::getValue() === self::DUMMYPASSWORD) {
+ return self::DUMMYPASSWORD;
+ }
+
+ return null;
+ }
+ );
+ }
+
+ public function onRegistered(Form $form)
+ {
+ $form->on(Form::ON_VALIDATE, function ($form) {
+ $this->isFormValid = $form->isValid();
+ });
+ }
+
+ public function getValue()
+ {
+ $value = parent::getValue();
+ $candidates = $this->getValueCandidates();
+ while ($value === self::DUMMYPASSWORD) {
+ $value = array_pop($candidates);
+ }
+
+ return $value;
+ }
+}