Skip to content
Open
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
48 changes: 38 additions & 10 deletions Core/Assets/JS/ListFilterAutocomplete.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

function listFilterAutocompleteMsg(key) {
return (typeof i18n !== 'undefined' && i18n[key]) ? i18n[key] : key;
}

function listFilterAutocompleteGetData(formId, formData, term) {
var rawForm = $("form[id=" + formId + "]").serializeArray();
$.each(rawForm, function (i, input) {
Expand Down Expand Up @@ -44,18 +48,42 @@ $(document).ready(function () {
data: listFilterAutocompleteGetData(formId, data, request.term),
dataType: "json",
success: function (results) {
var values = [];
results.forEach(function (element) {
if (element.key === null || element.key === element.value) {
values.push(element);
} else {
values.push({key: element.key, value: element.key + " | " + element.value});
try {
if (!Array.isArray(results)) {
throw new Error('response is not an array');
}
});
response(values);
var values = [];
results.forEach(function (element) {
if (!element || element.key === undefined || element.value === undefined || element.value === null) {
console.warn('filter-autocomplete: invalid element ignored', element);
return;
}
if (element.key === null || element.key === element.value) {
values.push(element);
} else {
values.push({key: element.key, value: element.key + " | " + element.value});
}
});
response(values);
} catch (e) {
console.error('filter-autocomplete: invalid JSON response', e);
alert(listFilterAutocompleteMsg('autocomplete-error-invalid-response'));
response([]);
}
},
error: function (msg) {
alert(msg.status + " " + msg.responseText);
error: function (msg, textStatus, errorThrown) {
console.error('filter-autocomplete AJAX error | status:', msg.status, '| textStatus:', textStatus, '| errorThrown:', errorThrown);
console.error('filter-autocomplete responseText:', msg.responseText);
if (msg.status === 0) {
alert(listFilterAutocompleteMsg('autocomplete-error-network'));
} else if (msg.status === 400) {
alert(listFilterAutocompleteMsg('autocomplete-error-bad-request'));
} else if (msg.status >= 500) {
alert(listFilterAutocompleteMsg('autocomplete-error-server'));
} else {
alert(listFilterAutocompleteMsg('autocomplete-error-generic'));
}
response([]);
}
});
},
Expand Down
51 changes: 37 additions & 14 deletions Core/Assets/JS/WidgetAutocomplete.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/

function widgetAutocompleteMsg(key) {
return (typeof i18n !== 'undefined' && i18n[key]) ? i18n[key] : key;
}

function widgetAutocompleteGetData(formId, formData, term) {
var rawForm = $("form[id=" + formId + "]").serializeArray();
$.each(rawForm, function (i, input) {
Expand Down Expand Up @@ -45,23 +49,42 @@ $(document).ready(function () {
data: widgetAutocompleteGetData(formId, data, request.term),
dataType: "json",
success: function (results) {
var values = [];
results.forEach(function (element) {
if (element.key === null || element.key === element.value) {
values.push(element);
} else {
values.push({key: element.key, value: element.key + " | " + element.value});
try {
if (!Array.isArray(results)) {
throw new Error('response is not an array');
}
});
response(values);
var values = [];
results.forEach(function (element) {
if (!element || element.key === undefined || element.value === undefined || element.value === null) {
console.warn('widget-autocomplete: invalid element ignored', element);
return;
}
if (element.key === null || element.key === element.value) {
values.push(element);
} else {
values.push({key: element.key, value: element.key + " | " + element.value});
}
});
response(values);
} catch (e) {
console.error('widget-autocomplete: invalid JSON response', e);
alert(widgetAutocompleteMsg('autocomplete-error-invalid-response'));
response([]);
}
},
error: function (msg, textStatus, errorThrown) {
console.log('widget-autocomplete AJAX ERROR');
console.log('status:', msg.status);
console.log('textStatus:', textStatus);
console.log('errorThrown:', errorThrown);
console.log('responseText:', msg.responseText);
alert(msg.status + " " + msg.responseText);
console.error('widget-autocomplete AJAX error | status:', msg.status, '| textStatus:', textStatus, '| errorThrown:', errorThrown);
console.error('widget-autocomplete responseText:', msg.responseText);
if (msg.status === 0) {
alert(widgetAutocompleteMsg('autocomplete-error-network'));
} else if (msg.status === 400) {
alert(widgetAutocompleteMsg('autocomplete-error-bad-request'));
} else if (msg.status >= 500) {
alert(widgetAutocompleteMsg('autocomplete-error-server'));
} else {
alert(widgetAutocompleteMsg('autocomplete-error-generic'));
}
response([]);
}
});
},
Expand Down
5 changes: 5 additions & 0 deletions Core/Translation/en_EN.json
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,11 @@
"authentication": "Authentication",
"auto": "Auto",
"auto-apply-to": "Automatically apply to",
"autocomplete-error-bad-request": "Bad request to the server. Please reload the page.",
"autocomplete-error-generic": "An error occurred while loading options. Please try again.",
"autocomplete-error-invalid-response": "The server response is not valid. Please reload the page.",
"autocomplete-error-network": "Could not connect to the server. Please check your internet connection.",
"autocomplete-error-server": "Internal server error. Please try again.",
"automatic": "Automatic",
"available": "Available",
"average": "Average",
Expand Down
5 changes: 5 additions & 0 deletions Core/Translation/es_ES.json
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,11 @@
"authentication": "Autenticación",
"auto": "Auto",
"auto-apply-to": "Aplicar automáticamente a",
"autocomplete-error-bad-request": "Solicitud incorrecta al servidor. Por favor, recarga la página.",
"autocomplete-error-generic": "Ha ocurrido un error al cargar las opciones. Por favor, inténtalo de nuevo.",
"autocomplete-error-invalid-response": "La respuesta del servidor no es válida. Por favor, recarga la página.",
"autocomplete-error-network": "No se ha podido conectar con el servidor. Comprueba tu conexión a internet.",
"autocomplete-error-server": "Error interno del servidor. Por favor, inténtalo de nuevo.",
"automatic": "Automático",
"available": "Disponible",
"average": "Media",
Expand Down
10 changes: 10 additions & 0 deletions Core/View/Master/MenuTemplate.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,16 @@
<script src="{{ asset('node_modules/@fortawesome/fontawesome-free/js/all.min.js') }}?v=6"></script>
<script src="{{ asset('Dinamic/Assets/JS/Custom.js') }}?v={{ 'now' | date('ymd') }}"></script>
{% endblock %}
{# Global translations for JS #}
<script>
var i18n = {
"autocomplete-error-network": "{{ trans('autocomplete-error-network') }}",
"autocomplete-error-bad-request": "{{ trans('autocomplete-error-bad-request') }}",
"autocomplete-error-server": "{{ trans('autocomplete-error-server') }}",
"autocomplete-error-generic": "{{ trans('autocomplete-error-generic') }}",
"autocomplete-error-invalid-response": "{{ trans('autocomplete-error-invalid-response') }}"
};
</script>
{# Adds custom JS assets #}
{% for js in assetManager.get('js') %}
<script src="{{ js }}"></script>
Expand Down
Loading