diff --git a/assets/js/error_handler.js b/assets/js/error_handler.js index 2b2e35e8..579f4298 100644 --- a/assets/js/error_handler.js +++ b/assets/js/error_handler.js @@ -27,7 +27,9 @@ class ErrorHandlerHelper { constructor() { console.log('Error Handler registered'); - const content = document.getElementById('content'); + //const content = document.getElementById('content'); + //It seems that the content element is unreliable for these events, so we use the document instead + const content = document; //content.addEventListener('turbo:before-fetch-response', (event) => this.handleError(event)); content.addEventListener('turbo:fetch-request-error', (event) => this.handleError(event)); content.addEventListener('turbo:frame-missing', (event) => this.handleError(event)); @@ -37,6 +39,55 @@ class ErrorHandlerHelper { _showAlert(statusText, statusCode, location, responseHTML) { + const httpStatusToText = { + '200': 'OK', + '201': 'Created', + '202': 'Accepted', + '203': 'Non-Authoritative Information', + '204': 'No Content', + '205': 'Reset Content', + '206': 'Partial Content', + '300': 'Multiple Choices', + '301': 'Moved Permanently', + '302': 'Found', + '303': 'See Other', + '304': 'Not Modified', + '305': 'Use Proxy', + '306': 'Unused', + '307': 'Temporary Redirect', + '400': 'Bad Request', + '401': 'Unauthorized', + '402': 'Payment Required', + '403': 'Forbidden', + '404': 'Not Found', + '405': 'Method Not Allowed', + '406': 'Not Acceptable', + '407': 'Proxy Authentication Required', + '408': 'Request Timeout', + '409': 'Conflict', + '410': 'Gone', + '411': 'Length Required', + '412': 'Precondition Required', + '413': 'Request Entry Too Large', + '414': 'Request-URI Too Long', + '415': 'Unsupported Media Type', + '416': 'Requested Range Not Satisfiable', + '417': 'Expectation Failed', + '418': 'I\'m a teapot', + '429': 'Too Many Requests', + '500': 'Internal Server Error', + '501': 'Not Implemented', + '502': 'Bad Gateway', + '503': 'Service Unavailable', + '504': 'Gateway Timeout', + '505': 'HTTP Version Not Supported', + }; + + //If the statusText is empty, we use the status code as text + if (!statusText) { + statusText = httpStatusToText[statusCode]; + } + //Create error text const title = statusText + ' (Status ' + statusCode + ')'; @@ -104,6 +155,7 @@ class ErrorHandlerHelper { return; } + if(!response.ok) { response.text().then(responseHTML => { this._showAlert(response.statusText, response.status, response.url, responseHTML);