diff --git a/Resources/Private/Language/de.locallang.xlf b/Resources/Private/Language/de.locallang.xlf index e3503e4d338b484cc00bffedd4670dddced37dae..76684cd2fa4e1238e7dd87a039bfb91fb698236d 100644 --- a/Resources/Private/Language/de.locallang.xlf +++ b/Resources/Private/Language/de.locallang.xlf @@ -526,6 +526,10 @@ <source><![CDATA[Vacancies worldwide]]></source> <target><![CDATA[Offene Stellen weltweit]]></target> </trans-unit> + <trans-unit id="frontend.button.download" resname="frontend.button.download"> + <source><![CDATA[Download button]]></source> + <target><![CDATA[Download Schaltfläche]]></target> + </trans-unit> <trans-unit id="pagebrowser.label" resname="pagebrowser.label" approved="yes"> <source><![CDATA[Jobs pagination]]></source> <target><![CDATA[Stellen Paginierung]]></target> diff --git a/Resources/Private/Language/locallang.xlf b/Resources/Private/Language/locallang.xlf index fdd7432a0dc4de79c6426b37bc889b18248ddd41..6fa35a5feb4eed825cb080b3e9806f488712814e 100644 --- a/Resources/Private/Language/locallang.xlf +++ b/Resources/Private/Language/locallang.xlf @@ -336,6 +336,9 @@ <trans-unit id="frontend.filter.countries" resname="frontend.filter.countries"> <source><![CDATA[Country]]></source> </trans-unit> + <trans-unit id="frontend.button.download" resname="frontend.button.download"> + <source><![CDATA[Download button]]></source> + </trans-unit> <trans-unit id="frontend.filter.countriesfunctions" resname="frontend.filter.countriesfunctions"> <source><![CDATA[Function]]></source> </trans-unit> diff --git a/Resources/Private/Partials/Bootstrap5/Filter.html b/Resources/Private/Partials/Bootstrap5/Filter.html index 7936ab9090a0e18820332ae0634942d3d5c61c08..86da238cb28903a3e2310a27739a1db478aca265 100644 --- a/Resources/Private/Partials/Bootstrap5/Filter.html +++ b/Resources/Private/Partials/Bootstrap5/Filter.html @@ -16,7 +16,9 @@ options="{countries}" prependOptionLabel="{f:translate(key: 'frontend.filter.selections.all')}" prependOptionValue="0" - id="filter-countries"/> + id="filter-countries" + additionalAttributes="{autocomplete: 'off'}" + /> </div> <div class="col-md-3 col-sm-6 col-12"> <label for="filter-locations" class="form-label"> @@ -31,7 +33,9 @@ options="{cities}" prependOptionLabel="{f:translate(key: 'frontend.filter.selections.all')}" prependOptionValue="0" - id="filter-locations"/> + id="filter-locations" + additionalAttributes="{autocomplete: 'off'}" + /> </div> <div class="col-md-3 col-sm-6 col-12"> <label for="filter-departments" class="form-label"> @@ -47,7 +51,9 @@ options="{departments}" prependOptionLabel="{f:translate(key: 'frontend.filter.selections.all')}" prependOptionValue="0" - id="filter-departments"/> + id="filter-departments" + additionalAttributes="{autocomplete: 'off'}" + /> </div> <div class="col-md-3 col-sm-6 col-12"> <label for="filter-experienceLevels" class="form-label"> @@ -63,7 +69,9 @@ options="{experienceLevels}" prependOptionLabel="{f:translate(key: 'frontend.filter.selections.all')}" prependOptionValue="0" - id="filter-experienceLevels"/> + id="filter-experienceLevels" + additionalAttributes="{autocomplete: 'off'}" + /> </div> </div> <div class="row default-content-element"> diff --git a/Resources/Private/Templates/Bootstrap5/Joblist/ApplyForm.html b/Resources/Private/Templates/Bootstrap5/Joblist/ApplyForm.html index 4ea85810a632d6d8cea999b4d9a6753dd4820056..390057639a714d03260c4b2569b8ff8f1a714c6b 100644 --- a/Resources/Private/Templates/Bootstrap5/Joblist/ApplyForm.html +++ b/Resources/Private/Templates/Bootstrap5/Joblist/ApplyForm.html @@ -25,7 +25,8 @@ <f:if condition="{job.attachment}"> <div class="ms-auto"> <f:link.typolink target="_blank" parameter="{job.attachment.0.originalResource.publicUrl}" class="btn btn-outline-dark" additionalAttributes="{alt: '{f:translate(key: \'frontend.attachment\', extensionName: \'SgJobs\')} (PDF, {job.attachment.0.originalResource.size -> f:format.bytes()})'}"> - <sg:renderSvg name="fontawesome/solid/download" width="20" height="20" color="currentColor" createColorAttribute="TRUE" /> + <sg:renderSvg name="fontawesome/solid/download" width="20" height="20" color="currentColor" createColorAttribute="TRUE" role="img" aria-label="Download icon"/> + <span class="visually-hidden"><f:translate key="frontend.button.download" /></span> </f:link.typolink> </div> </f:if> @@ -40,7 +41,7 @@ <sg:renderSvg name="fontawesome/solid/clock" width="16" height="16" color="currentColor" createColorAttribute="TRUE" - class="d-inline-block translate-y-px-1" /> + class="d-inline-block translate-y-px-1" role="presentation" /> <span class="text-muted"> <f:format.raw> <f:translate key="frontend.jobStart" /> @@ -61,7 +62,7 @@ <sg:renderSvg name="fontawesome/solid/arrow-trend-up" width="16" height="16" color="currentColor" createColorAttribute="TRUE" - class="d-inline-block translate-y-px-1" /> + class="d-inline-block translate-y-px-1" role="presentation" /> <span class="text-muted"> <strong> <f:translate key="frontend.experienceLevel" />: @@ -77,7 +78,7 @@ <sg:renderSvg name="fontawesome/solid/map-location-dot" width="16" height="16" color="currentColor" createColorAttribute="TRUE" - class="d-inline-block translate-y-px-1" /> + class="d-inline-block translate-y-px-1" role="presentation" /> <f:if condition="!{job.telecommutePossible}"> <f:then> <span class="text-muted"> @@ -260,53 +261,53 @@ <f:if condition="!{job}"> <div class="col"> <f:render section="formLabel" arguments="{label-for: 'company', label-text: 'company'}" /> - <f:form.select property="company" multiple="0" size="1" id="apply-company" class="form-select" options="{companies}" optionLabelField="city" optionValueField="uid" prependOptionLabel="{f:translate(key:'frontend.apply.country.empty')}" required="required" /> + <f:form.select property="company" multiple="0" size="1" id="apply-company" class="form-select" options="{companies}" optionLabelField="city" optionValueField="uid" prependOptionLabel="{f:translate(key:'frontend.apply.country.empty')}" required="required" additionalAttributes="{autocomplete: 'off'}" /> <f:render section="formValidation" arguments="{form-field: 'company'}" /> </div> </f:if> <div class="col"> <f:render section="formLabel" arguments="{label-for: 'gender', label-text: 'gender'}" /> - <f:form.select property="gender" id="apply-gender" class="form-select" options="{male: '{f:translate(key: \'frontend.apply.gender.male\')}', female: '{f:translate(key: \'frontend.apply.gender.female\')}', other: '{f:translate(key: \'frontend.apply.gender.other\')}'}" /> + <f:form.select property="gender" id="apply-gender" class="form-select" options="{male: '{f:translate(key: \'frontend.apply.gender.male\')}', female: '{f:translate(key: \'frontend.apply.gender.female\')}', other: '{f:translate(key: \'frontend.apply.gender.other\')}'}" additionalAttributes="{autocomplete: 'off'}" /> <f:render section="formValidation" arguments="{form-field: 'gender'}" /> </div> </div> <div class="row"> - <f:render section="formTextField" arguments="{wrapper-class: 'col', field-id: 'firstName', field-text: 'first_name', required: 'required'}" /> - <f:render section="formTextField" arguments="{wrapper-class: 'col', field-id: 'lastName', field-text: 'last_name', required: 'required'}" /> + <f:render section="formTextField" arguments="{wrapper-class: 'col', field-id: 'firstName', field-text: 'first_name', required: 'required', autocomplete: 'given-name'}" /> + <f:render section="formTextField" arguments="{wrapper-class: 'col', field-id: 'lastName', field-text: 'last_name', required: 'required', autocomplete: 'family-name'}" /> </div> <div class="row"> - <f:render section="formTextField" arguments="{wrapper-class: 'col col-sm-6', field-id: 'street', field-text: 'street', required: 'required'}" /> - <f:render section="formTextField" arguments="{wrapper-class: 'col-6 col-sm-4', field-id: 'city', field-text: 'city', required: 'required'}" /> - <f:render section="formTextField" arguments="{wrapper-class: 'col-6 col-sm-2', field-id: 'zip', field-text: 'zip', required: 'required'}" /> + <f:render section="formTextField" arguments="{wrapper-class: 'col col-sm-6', field-id: 'street', field-text: 'street', required: 'required', autocomplete: 'street-address'}" /> + <f:render section="formTextField" arguments="{wrapper-class: 'col-6 col-sm-4', field-id: 'city', field-text: 'city', required: 'required', autocomplete: 'address-level2'}" /> + <f:render section="formTextField" arguments="{wrapper-class: 'col-6 col-sm-2', field-id: 'zip', field-text: 'zip', required: 'required', autocomplete: 'postal-code'}" /> </div> <div class="row"> <div class="col"> <f:render section="formLabel" arguments="{label-for: 'country', label-text: 'country'}" /> - <f:form.countrySelect value="DE" property="country" id="apply-country" class="form-select" required="required" /> + <f:form.countrySelect value="DE" property="country" id="apply-country" class="form-select" required="required" additionalAttributes="{autocomplete: 'off'}" /> <f:render section="formValidation" arguments="{form-field: 'county'}" /> </div> <div class="col"> <f:render section="formLabel" arguments="{label-for: 'nationality', label-text: 'nationality'}" /> - <f:form.countrySelect value="DE" property="nationality" id="apply-nationality" class="form-select" required="required" /> + <f:form.countrySelect value="DE" property="nationality" id="apply-nationality" class="form-select" required="required" additionalAttributes="{autocomplete: 'off'}" /> <f:render section="formValidation" arguments="{form-field: 'nationality'}" /> </div> </div> <div class="row"> - <f:render section="formTextField" arguments="{wrapper-class: 'col', field-id: 'education', field-text: 'education', required: 'required'}" /> + <f:render section="formTextField" arguments="{wrapper-class: 'col', field-id: 'education', field-text: 'education', required: 'required', autocomplete: 'off'}" /> <div class="col"> <f:render section="formLabel" arguments="{label-for: 'birthDate', label-text: 'birthDate'}" /> - <f:form.textfield type="date" property="birthDate" id="apply-birthDate" class="form-control" placeholder="{f:translate(key:'frontend.apply.birthDate')}" required="required" /> + <f:form.textfield type="date" property="birthDate" id="apply-birthDate" class="form-control" placeholder="{f:translate(key:'frontend.apply.birthDate')}" required="required" additionalAttributes="{autocomplete: 'off'}" /> <f:render section="formValidation" arguments="{form-field: 'birthDate'}" /> </div> </div> <div class="row"> - <f:render section="formTextField" arguments="{wrapper-class: 'col', field-id: 'phone', field-text: 'phone', required: 'required'}" /> - <f:render section="formTextField" arguments="{wrapper-class: 'col', field-id: 'mobile', field-text: 'mobile'}" /> + <f:render section="formTextField" arguments="{wrapper-class: 'col', field-id: 'phone', field-text: 'phone', required: 'required', autocomplete: 'tel'}" /> + <f:render section="formTextField" arguments="{wrapper-class: 'col', field-id: 'mobile', field-text: 'mobile', autocomplete: 'tel'}" /> </div> <div class="row"> <div class="col-6"> <f:render section="formLabel" arguments="{label-for: 'email', label-text: 'email'}" /> - <f:form.textfield type="email" property="email" id="apply-email" class="form-control" placeholder="{f:translate(key:'frontend.apply.email')}" required="required" /> + <f:form.textfield type="email" property="email" id="apply-email" class="form-control" placeholder="{f:translate(key:'frontend.apply.email')}" required="required" additionalAttributes="{autocomplete: 'email'}" /> <f:render section="formValidation" arguments="{form-field: 'email'}" /> </div> </div> @@ -388,7 +389,7 @@ <div class="row mb-4"> <div class="col"> <f:render section="formLabel" arguments="{label-for: 'message', label-text: 'message'}" /> - <f:form.textarea class="form-control" rows="10" property="message" id="apply-message" placeholder="{f:translate(key:'frontend.apply.message')}" /> + <f:form.textarea class="form-control" rows="10" property="message" id="apply-message" placeholder="{f:translate(key:'frontend.apply.message')}" additionalAttributes="{autocomplete: 'on'}" /> </div> </div> <div class="form-check mb-4"> @@ -467,7 +468,7 @@ <f:else> <sg:renderSvg name="fontawesome/solid/user" width="50" height="50" color="currentColor" createColorAttribute="TRUE" - class="px-4 py-4 bg-light o-50" /> + class="px-4 py-4 bg-light o-50" role="img" aria-label="User icon" /> </f:else> </f:if> </div> @@ -486,7 +487,7 @@ <sg:renderSvg name="fontawesome/solid/envelope" width="16" height="16" color="currentColor" createColorAttribute="TRUE" - class="d-inline-block me-2 translate-y-px-1" /> + class="d-inline-block me-2 translate-y-px-1" role="presentation"/> <f:format.html parseFuncTSPath="lib.parseFunc"> <a href="mailto:{contact.email}" class="stretched-link"> <f:translate key="frontend.emailContact" /> @@ -522,17 +523,19 @@ <label for="apply-{field-id}" class="form-label"> <f:translate key="frontend.apply.{field-text}" /> </label> - <f:form.textfield property="{field-id}" id="apply-{field-id}" class="form-control" placeholder="{f:translate(key:'frontend.apply.{field-text}')}" required="{required}" /> + <f:form.textfield property="{field-id}" id="apply-{field-id}" class="form-control" placeholder="{f:translate(key:'frontend.apply.{field-text}')}" required="{required}" additionalAttributes="{autocomplete: '{autocomplete}'}"/> <f:render section="formValidation" arguments="{form-field: '{field-id}'}" /> </div> </f:section> <f:section name="formValidation"> <f:form.validationResults for="applyData.{form-field}"> - <ul class="text-danger mb-0"> - <f:for each="{validationResults.errors}" as="error"> - <li class="pt-2">{error.message}</li> - </f:for> - </ul> + <f:if condition="{validationResults.errors}"> + <ul class="text-danger mb-0"> + <f:for each="{validationResults.errors}" as="error"> + <li class="pt-2">{error.message}</li> + </f:for> + </ul> + </f:if> </f:form.validationResults> </f:section>