Skip to content
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions Resources/Private/Language/de.locallang.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -717,6 +717,14 @@
<source><![CDATA[validate]]></source>
<target><![CDATA[Validieren]]></target>
</trans-unit>
<trans-unit id="validation.form.error.generic" approved="yes">
<source><![CDATA[The validation request could not be completed. Please check the URL and try again.]]></source>
<target><![CDATA[Die Validierungsanfrage konnte nicht abgeschlossen werden. Bitte prüfen Sie die URL und versuchen Sie es erneut.]]></target>
</trans-unit>
<trans-unit id="validation.form.error.timeout" approved="yes">
<source><![CDATA[The validation request timed out. Please try again.]]></source>
<target><![CDATA[Die Validierungsanfrage ist abgelaufen. Bitte versuchen Sie es erneut.]]></target>
</trans-unit>
</body>
</file>
</xliff>
6 changes: 6 additions & 0 deletions Resources/Private/Language/locallang.xlf
Original file line number Diff line number Diff line change
Expand Up @@ -536,6 +536,12 @@
<trans-unit id="validation.form.validate">
<source><![CDATA[validate]]></source>
</trans-unit>
<trans-unit id="validation.form.error.generic">
<source><![CDATA[The validation request could not be completed. Please check the URL and try again.]]></source>
</trans-unit>
<trans-unit id="validation.form.error.timeout">
<source><![CDATA[The validation request timed out. Please try again.]]></source>
</trans-unit>
</body>
</file>
</xliff>
2 changes: 2 additions & 0 deletions Resources/Private/Templates/Validation/Main.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
data-i18n-headline-notice="<f:translate key='validation.form.headline.notice' extensionName='dlf' />"
data-i18n-headline-success="<f:translate key='validation.form.headline.success' extensionName='dlf' />"
data-i18n-headline-warning="<f:translate key='validation.form.headline.warning' extensionName='dlf'/>"
data-i18n-error="<f:translate key='validation.form.error.generic' extensionName='dlf'/>"
data-i18n-timeout="<f:translate key='validation.form.error.timeout' extensionName='dlf'/>"
>
<input type="hidden" name="validationType" value="{settings.type}">
<label>
Expand Down
86 changes: 67 additions & 19 deletions Resources/Public/JavaScript/Validation/Validation.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
* LICENSE.txt file that was distributed with this source code.
*/

// Abort the validation request if the server does not answer within this
// time (in milliseconds), so the user is not left with a spinner forever.

Check notice on line 12 in Resources/Public/JavaScript/Validation/Validation.js

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

Resources/Public/JavaScript/Validation/Validation.js#L12

Comments should not begin with a lowercase character.
const dlfValidationRequestTimeout = 60000;

const dlfValidationForms = document.querySelectorAll('.tx-dlf-validation form');

/**
Expand Down Expand Up @@ -151,33 +155,77 @@
return entryContainer;
}

const loader = buildLoader(event.target);
const form = event.target.parentElement;
const submitButton = event.target.querySelector('.submit');

/**
* Show the given error message below the form.
*
* @param {string} message The message to show
*/
function showError(message) {
let validation = form.querySelector('.validation');
if (validation) {
form.removeChild(validation);
}
validation = document.createElement('div');
validation.classList.add("validation");
validation.appendChild(createMessagesContainer('error', [message], validationForm.dataset.i18nHeadlineError));
form.appendChild(validation);
}

// a new request aborts a pending one so the requests do not stack

Check notice on line 177 in Resources/Public/JavaScript/Validation/Validation.js

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

Resources/Public/JavaScript/Validation/Validation.js#L177

Comments should not begin with a lowercase character.
let controller = new AbortController();

Check notice on line 178 in Resources/Public/JavaScript/Validation/Validation.js

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

Resources/Public/JavaScript/Validation/Validation.js#L178

'controller' is never reassigned. Use 'const' instead.
const abortTimer = window.setTimeout(() => controller.abort(), dlfValidationRequestTimeout);
// lock the form so repeated clicks do not start parallel requests

Check notice on line 180 in Resources/Public/JavaScript/Validation/Validation.js

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

Resources/Public/JavaScript/Validation/Validation.js#L180

Comments should not begin with a lowercase character.
if (submitButton) {
submitButton.disabled = true;
}

let dataUrl = this.action + '&validationType=' + encodeURIComponent(data.validationType) + '&url=' + encodeURIComponent(data.url);
if (data.enableValidator && Array.isArray(data.enableValidator)) {
dataUrl += '&enableValidators=' + encodeURIComponent(data.enableValidator.join(','));
}

fetch(dataUrl)
const loader = buildLoader(event.target);

fetch(dataUrl, {signal: controller.signal})
.then(response => {
response.json().then(data => {
let validation = form.querySelector('.validation');
if (validation) {
form.removeChild(validation);
}
validation = document.createElement('div');
validation.classList.add("validation");
if (response.ok) {
data.forEach(item => {
validation.appendChild(createValidationEntry(item));
});
} else {
validation.appendChild(createMessagesContainer('error', [data], validationForm.dataset.i18nHeadlineError));
}
form.appendChild(validation);
loader.remove();
});
return response.json().catch(() => {

Check notice on line 194 in Resources/Public/JavaScript/Validation/Validation.js

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

Resources/Public/JavaScript/Validation/Validation.js#L194

.catch is a syntax error.
// a non-JSON response (e.g. an HTML error page) must not leave

Check notice on line 195 in Resources/Public/JavaScript/Validation/Validation.js

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

Resources/Public/JavaScript/Validation/Validation.js#L195

Comments should not begin with a lowercase character.
// the loader running: report it like a plain error

Check notice on line 196 in Resources/Public/JavaScript/Validation/Validation.js

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

Resources/Public/JavaScript/Validation/Validation.js#L196

Comments should not begin with a lowercase character.
throw new TypeError('The server did not respond with JSON (status ' + response.status + ').');
}).then(data => ({ok: response.ok, data: data}));

Check notice on line 198 in Resources/Public/JavaScript/Validation/Validation.js

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

Resources/Public/JavaScript/Validation/Validation.js#L198

Expected property shorthand.
})
.then(({ok, data}) => {
let validation = form.querySelector('.validation');
if (validation) {
form.removeChild(validation);
}
validation = document.createElement('div');
validation.classList.add("validation");
if (ok) {
data.forEach(item => {
validation.appendChild(createValidationEntry(item));
});
} else {
validation.appendChild(createMessagesContainer('error', [data], validationForm.dataset.i18nHeadlineError));
}
form.appendChild(validation);
})
.catch(error => {

Check notice on line 216 in Resources/Public/JavaScript/Validation/Validation.js

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

Resources/Public/JavaScript/Validation/Validation.js#L216

.catch is a syntax error.
if (error && error.name === 'AbortError') {
showError(validationForm.dataset.i18nTimeout);
} else {
showError(validationForm.dataset.i18nError);
}
})
.finally(() => {

Check notice on line 223 in Resources/Public/JavaScript/Validation/Validation.js

View check run for this annotation

Codacy Production / Codacy Static Code Analysis

Resources/Public/JavaScript/Validation/Validation.js#L223

.finally is a syntax error.
window.clearTimeout(abortTimer);
if (submitButton) {
submitButton.disabled = false;
}
loader.remove();
});
});
});
Loading