From 4692eb5bd52b5b3ac24b6f59c37216e718d56051 Mon Sep 17 00:00:00 2001 From: Aspectis <tobias@aspectis.net> Date: Tue, 5 Jan 2021 09:47:22 +0100 Subject: [PATCH] refs #18779 [fid_bbi] redesign registration forms * Replace job title section * Add JS-based fix for headings and checkbox/radio inputs * Update form styles * open registration form outside lightbox --- themes/fid_bbi/languages/fid/de.ini | 1 + themes/fid_bbi/scss/base/form.scss | 6 + themes/fid_bbi/scss/blocks/alert.scss | 16 +- themes/fid_bbi/scss/blocks/form.scss | 7 + themes/fid_bbi/scss/blocks/required.scss | 7 + .../templates/Auth/AbstractBase/login.phtml | 1 + .../fid_bbi/templates/fid/user/create.phtml | 152 +++++++++--------- themes/fid_bbi/templates/layout/layout.phtml | 21 +++ 8 files changed, 132 insertions(+), 79 deletions(-) create mode 100644 themes/fid_bbi/scss/blocks/required.scss diff --git a/themes/fid_bbi/languages/fid/de.ini b/themes/fid_bbi/languages/fid/de.ini index 84c1b37636c..88710403b66 100644 --- a/themes/fid_bbi/languages/fid/de.ini +++ b/themes/fid_bbi/languages/fid/de.ini @@ -1,6 +1,7 @@ label_access_level_full_access = "Hochschullehrer*innen, wissenschaftliche Mitarbeiter*innen, Mitglieder von Fachgesellschaften, Doktorand*innen, Stipendiat*innen oder externe Wissenschaftler*innen (z. B. Lehrbeauftragte)" auth_error_account_blocked = "Ihr Konto wurde aus Sicherheitsgründen gesperrt. Bitte kontaktieren Sie uns unter fid@hab.de, um eine Entsperrung vorzunehmen." +job_title = Nutzergruppe job_title_0 = "Hochschullehrer*innen, wissenschaftliche Mitarbeiter*innen, Mitglieder von Fachgesellschaften, Doktorand*innen, Stipendiat*innen, externe Wissenschaftler*innen (z. B. Lehrbeauftragte)" job_title_1 = "Studierende und weitere Interessierte" job_title_2 = "Berufspraktiker*innen, wissenschaftliche Mitarbeiter*innen an Bibliotheken, Archiven und Sammlungsinstitutionen (Fachreferent*innen, Referendar*innen)" diff --git a/themes/fid_bbi/scss/base/form.scss b/themes/fid_bbi/scss/base/form.scss index d51fcb622d0..df285a5062b 100644 --- a/themes/fid_bbi/scss/base/form.scss +++ b/themes/fid_bbi/scss/base/form.scss @@ -112,6 +112,12 @@ textarea { opacity: 0; position: absolute; + // Preventing inputs from being hidden just in case they are wrapped inside the label + label & { + opacity: 1; + position: static; + } + + label { cursor: pointer; display: inline-block; diff --git a/themes/fid_bbi/scss/blocks/alert.scss b/themes/fid_bbi/scss/blocks/alert.scss index a83de1080c1..7ed908b92b2 100644 --- a/themes/fid_bbi/scss/blocks/alert.scss +++ b/themes/fid_bbi/scss/blocks/alert.scss @@ -8,19 +8,23 @@ padding-left: g(2.75); position: relative; - &.-success { - color: $text-muted-color; + &.alert-danger { + color: $text-color; } - &.-info { + &.alert-error { + color: $text-color; + } + + &.alert-info { color: $text-muted-color; } - &.-warning { - color: $text-color; + &.alert-success { + color: $text-muted-color; } - &.-error { + &.alert-warning { color: $text-color; } diff --git a/themes/fid_bbi/scss/blocks/form.scss b/themes/fid_bbi/scss/blocks/form.scss index 6a157ebdbb2..27e0b353642 100644 --- a/themes/fid_bbi/scss/blocks/form.scss +++ b/themes/fid_bbi/scss/blocks/form.scss @@ -3,6 +3,8 @@ } .form_footer { + @include paragraph; + @media #{$bp3} { align-items: center; display: flex; @@ -98,6 +100,11 @@ } } + // Used for error messages + > ul { + margin: g(.5) 0 0; + } + // "Back" link on some forms > .btn-link { margin: g(.5) g(.5) g(.5) 0; diff --git a/themes/fid_bbi/scss/blocks/required.scss b/themes/fid_bbi/scss/blocks/required.scss new file mode 100644 index 00000000000..4a32162abf2 --- /dev/null +++ b/themes/fid_bbi/scss/blocks/required.scss @@ -0,0 +1,7 @@ +.required { + &::after { + color: $color-a; + content: '*'; + font-weight: 500; + } +} diff --git a/themes/fid_bbi/templates/Auth/AbstractBase/login.phtml b/themes/fid_bbi/templates/Auth/AbstractBase/login.phtml index 20f6ca46e6c..51f297fcbfe 100644 --- a/themes/fid_bbi/templates/Auth/AbstractBase/login.phtml +++ b/themes/fid_bbi/templates/Auth/AbstractBase/login.phtml @@ -30,6 +30,7 @@ <a class="createAccountLink" href="<?=$this->url('myresearch-account')?>?auth_method=<?=$account->getAuthMethod()?>" + data-lightbox-ignore > <?=$this->transEsc('Create New Account')?> </a> diff --git a/themes/fid_bbi/templates/fid/user/create.phtml b/themes/fid_bbi/templates/fid/user/create.phtml index 93570c762ec..5b44ace6422 100644 --- a/themes/fid_bbi/templates/fid/user/create.phtml +++ b/themes/fid_bbi/templates/fid/user/create.phtml @@ -17,6 +17,7 @@ * * @author Gregor Gawol <gawol@ub.uni-leipzig.de> * @author Sebastian Kehr <kehr@ub.uni-leipzig.de> + * @author Tobias Schäfer <ts@aspectis.net> * @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2 */ @@ -50,13 +51,12 @@ $formElementErrors->setTranslatorTextDomain('fid'); $this->headTitle($title = $this->translate("fid::user_create_form_title")); ?> -<h2><?= $title ?></h2> -<div><?= $this->transEsc("fid::required_fields_note") ?></div> -<?= $this->flashmessages() ?> -<?= $this->form()->openTag($form) ?> -<br/> +<h2><?=$title?></h2> +<p><?=$this->transEsc("fid::required_fields_note")?></p> +<?=$this->flashmessages()?> +<?=$this->form()->openTag($form)?> -<? /* username */ ?> +<?php // username ?> <?php /** @var Element\Text $elemUsername */ $elemUsername = $form->get('username'); @@ -64,17 +64,17 @@ $elemUsername->setLabelAttributes(['class' => 'col-md-4']); $elemUsername->setAttributes(['class' => 'form-control', 'disabled' => 1]); ?> <div class="form-group"> - <?= $this->formLabel($elemUsername) ?> - <?= $this->formElement($elemUsername) ?> - <?= $this->formElementErrors($elemUsername) ?> + <?=$this->formLabel($elemUsername)?> + <?=$this->formElement($elemUsername)?> + <?=$this->formElementErrors($elemUsername)?> <?php $elemUsername->removeAttribute('disabled'); $elemUsername->setAttribute('type', 'hidden'); ?> - <?= $this->formElement($elemUsername) ?> + <?=$this->formElement($elemUsername)?> </div> -<? /* password */ ?> +<?php // password ?> <?php /** @var Element\Password $elemPassword */ $elemPassword = $form->get('password'); @@ -82,12 +82,12 @@ $elemPassword->setLabelAttributes(['class' => 'col-md-4']); $elemPassword->setAttributes(['class' => 'form-control']); ?> <div class="form-group"> - <?= $this->formLabel($elemPassword) ?> - <?= $this->formElement($elemPassword) ?> - <?= $this->formElementErrors($elemPassword) ?> + <?=$this->formLabel($elemPassword)?> + <?=$this->formElement($elemPassword)?> + <?=$this->formElementErrors($elemPassword)?> </div> -<? /* password confirmation */ ?> +<?php // password confirmation ?> <?php /** @var Element\Password $elemPasswordConfirmation */ $elemPasswordConfirmation = $form->get('password_confirmation'); @@ -95,25 +95,24 @@ $elemPasswordConfirmation->setLabelAttributes(['class' => 'col-md-4']); $elemPasswordConfirmation->setAttributes(['class' => 'form-control']); ?> <div class="form-group"> - <?= $this->formLabel($elemPasswordConfirmation) ?> - <?= $this->formElement($elemPasswordConfirmation) ?> - <?= $this->formElementErrors($elemPasswordConfirmation) ?> + <?=$this->formLabel($elemPasswordConfirmation)?> + <?=$this->formElement($elemPasswordConfirmation)?> + <?=$this->formElementErrors($elemPasswordConfirmation)?> </div> -<? /* home library */ ?> +<?php // salutation ?> <?php -/** @var Element\Select $elemHomeLibrary */ -$elemHomeLibrary = $form->get('home_library'); -$elemHomeLibrary->setLabelAttributes(['class' => 'col-md-4']); -$elemHomeLibrary->setAttributes(['class' => 'form-control']); +/** @var Element\Select $elemSalutation */ +$elemSalutation = $form->get('salutation'); +$elemSalutation->setLabelAttributes(['class' => 'col-md-4']); +$elemSalutation->setAttributes(['class' => 'form-control']); ?> <div class="form-group"> - <?= $this->formLabel($elemHomeLibrary) ?> - <?= $this->formSelect($elemHomeLibrary) ?> - <?= $this->formElementErrors($elemHomeLibrary) ?> + <?=$this->formLabel($elemSalutation)?> + <?=$this->formSelect($elemSalutation)?> </div> -<? /* academic title */ ?> +<?php // academic title ?> <?php /** @var Element\Text $elemAcademicTitle */ $elemAcademicTitle = $form->get('academic_title'); @@ -121,19 +120,11 @@ $elemAcademicTitle->setLabelAttributes(['class' => 'col-md-4']); $elemAcademicTitle->setAttributes(['class' => 'form-control']); ?> <div class="form-group"> - <?= $this->formLabel($elemAcademicTitle) ?> - <?= $this->formElement($elemAcademicTitle) ?> + <?=$this->formLabel($elemAcademicTitle)?> + <?=$this->formElement($elemAcademicTitle)?> </div> -<? /* salutation */ ?> -<?php -/** @var Element\Select $elemSalutation */ -$elemSalutation = $form->get('salutation'); -$elemSalutation->setAttribute('type', 'hidden'); -echo $this->formElement($elemSalutation); -?> - -<? /* firstname */ ?> +<?php // firstname ?> <?php /** @var Element\Text $elemFirstname */ $elemFirstname = $form->get('firstname'); @@ -141,12 +132,12 @@ $elemFirstname->setLabelAttributes(['class' => 'col-md-4']); $elemFirstname->setAttributes(['class' => 'form-control']); ?> <div class="form-group"> - <?= $this->formLabel($elemFirstname) ?> - <?= $this->formElement($elemFirstname) ?> - <?= $this->formElementErrors($elemFirstname) ?> + <?=$this->formLabel($elemFirstname)?> + <?=$this->formElement($elemFirstname)?> + <?=$this->formElementErrors($elemFirstname)?> </div> -<? /* lastname */ ?> +<?php // lastname ?> <?php /** @var Element\Text $elemLastname */ $elemLastname = $form->get('lastname'); @@ -154,43 +145,58 @@ $elemLastname->setLabelAttributes(['class' => 'col-md-4']); $elemLastname->setAttributes(['class' => 'form-control']); ?> <div class="form-group"> - <?= $this->formLabel($elemLastname) ?> - <?= $this->formElement($elemLastname) ?> - <?= $this->formElementErrors($elemLastname) ?> + <?=$this->formLabel($elemLastname)?> + <?=$this->formElement($elemLastname)?> + <?=$this->formElementErrors($elemLastname)?> </div> -<? /* college */ ?> +<?php // home library ?> <?php -/** @var Element\Text $elemCollege */ -$elemCollege = $form->get('college'); -$elemCollege->setLabelAttributes(['class' => 'col-md-4']); -$elemCollege->setAttributes(['class' => 'form-control']); +/** @var Element\Select $elemHomeLibrary */ +$elemHomeLibrary = $form->get('home_library'); +$elemHomeLibrary->setLabelAttributes(['class' => 'col-md-4']); +$elemHomeLibrary->setAttributes(['class' => 'form-control']); ?> <div class="form-group"> - <?= $this->formLabel($elemCollege) ?> - <?= $this->formElement($elemCollege) ?> - <?= $this->formElementErrors($elemCollege) ?> + <?=$this->formLabel($elemHomeLibrary)?> + <?=$this->formSelect($elemHomeLibrary)?> + <?=$this->formElementErrors($elemHomeLibrary)?> </div> -<? /* user group */ ?> +<?php // user group ?> <?php /** @var Element\Radio $elemJobTitle */ $elemJobTitle = $form->get('job_title'); ?> <div class="form-group"> - <div class="col-md-4"> - <?= $this->formLabel($elemJobTitle)?> + <div class="form_label" id="job-title-legend"> + <?=$this->translate("fid::{$elemJobTitle->getName()}")?> + <span class="required" title="benötigt" aria-label="benötigt"></span> </div> - <div class="col-md-8"> - <?= $this->formRadio($elemJobTitle)?> + <div class="form_control" aria-labelledby="job-title-legend"> + <p><?=$this->translate("fid::{$elemJobTitle->getLabel()}")?>:</p> + <?=$this->formRadio($elemJobTitle)?> </div> - <?= $this->formElementErrors($elemJobTitle)?> + <?=$this->formElementErrors($elemJobTitle)?> +</div> + +<?php // college ?> +<?php +/** @var Element\Text $elemCollege */ +$elemCollege = $form->get('college'); +$elemCollege->setLabelAttributes(['class' => 'col-md-4']); +$elemCollege->setAttributes(['class' => 'form-control']); +?> +<div class="form-group"> + <?=$this->formLabel($elemCollege)?> + <?=$this->formElement($elemCollege)?> + <?=$this->formElementErrors($elemCollege)?> </div> -<? /* addresses */ ?> -<?= $this->render('address-collection.phtml') ?> +<?php // addresses ?> +<?=$this->render('address-collection.phtml')?> -<? /* eula privacy policy */ ?> +<?php // eula privacy policy ?> <?php /** @var Checkbox $elemEulaAccepted */ $elemEulaAccepted = $form->get('eula_accepted'); @@ -198,27 +204,27 @@ $elemEulaAccepted->setAttribute('id', 'eula-accepted'); ?> <div class="form-group eula"> <div> - <?= $this->formElement($elemEulaAccepted) ?> - <?= $this->formLabel()->openTag($elemEulaAccepted) ?> - <?= $this->translate("fid::policy_text") ?> + <?=$this->formElement($elemEulaAccepted)?> + <?=$this->formLabel()->openTag($elemEulaAccepted)?> + <?=$this->translate("fid::policy_text")?> <?php $url = $this->url('fid/user/policy') ?> <a data-lightbox - href="<?= $url ?>"><?= $this->translate("fid::policy") ?></a> - <?= $this->translate("fid::terms_text") ?> + href="<?=$url?>"><?=$this->translate("fid::policy")?></a> + <?=$this->translate("fid::terms_text")?> <?php $url = $this->url('fid/user/terms') ?> <a data-lightbox - href="<?= $url ?>"><?= $this->translate("fid::terms") ?></a>. - <?= $this->formLabel()->closeTag($elemEulaAccepted) ?> + href="<?=$url?>"><?=$this->translate("fid::terms")?></a>. + <?=$this->formLabel()->closeTag($elemEulaAccepted)?> </div> - <?= $this->formElementErrors($elemEulaAccepted) ?> + <?=$this->formElementErrors($elemEulaAccepted)?> </div> -<? /* submit button */ ?> +<?php // submit button ?> <?php /** @var Submit $elemSubmit */ $elemSubmit = $form->get('submit'); $elemSubmit->setAttributes(['class' => 'btn btn-primary']); ?> -<div class="form-group"><?= $this->formSubmit($elemSubmit) ?></div> -<?= $this->form()->closeTag($form) ?> +<div class="form-group"><?=$this->formSubmit($elemSubmit)?></div> +<?=$this->form()->closeTag($form)?> diff --git a/themes/fid_bbi/templates/layout/layout.phtml b/themes/fid_bbi/templates/layout/layout.phtml index 5717ae04a19..610fe11e98a 100644 --- a/themes/fid_bbi/templates/layout/layout.phtml +++ b/themes/fid_bbi/templates/layout/layout.phtml @@ -77,5 +77,26 @@ ); } ?> + + <script> + // For styling checkbox and radio inputs, the label must be appended to the + // input, but Zend only generates inputs within labels. + const checkboxRadioInputs = document.querySelectorAll('[type=checkbox], [type=radio]') + for (let i = 0; i < checkboxRadioInputs.length; i++) { + const input = checkboxRadioInputs[i] + const parent = input.parentNode + if (parent.nodeName !== 'LABEL') { + continue + } + + input.id = input.id || input.name + input.value + + const newLabel = document.createElement('label') + newLabel.setAttribute('for', input.id) + newLabel.innerHTML = parent.textContent + + parent.outerHTML = '<p>' + input.outerHTML + newLabel.outerHTML + '</p>' + } + </script> </body> <!-- fid_bbi: layout - layout - END --> -- GitLab