diff --git a/administrator/components/com_finder/tmpl/indexer/default.php b/administrator/components/com_finder/tmpl/indexer/default.php index 0a20021c301e4..709b1843ea384 100644 --- a/administrator/components/com_finder/tmpl/indexer/default.php +++ b/administrator/components/com_finder/tmpl/indexer/default.php @@ -13,7 +13,11 @@ use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; -Text::script('COM_FINDER_INDEXER_MESSAGE_COMPLETE', true); +Text::script('COM_FINDER_INDEXER_MESSAGE_COMPLETE'); +Text::script('COM_FINDER_AN_ERROR_HAS_OCCURRED'); +Text::script('COM_FINDER_MESSAGE_RETURNED'); +Text::script('JLIB_JS_AJAX_ERROR_OTHER'); +Text::script('JLIB_JS_AJAX_ERROR_PARSE'); /** @var Joomla\CMS\WebAsset\WebAssetManager $wa */ $wa = $this->document->getWebAssetManager(); diff --git a/build/media_source/com_finder/js/finder.es6.js b/build/media_source/com_finder/js/finder.es6.js index 3775eccc88d8a..61870b2d04faf 100644 --- a/build/media_source/com_finder/js/finder.es6.js +++ b/build/media_source/com_finder/js/finder.es6.js @@ -16,21 +16,21 @@ Joomla.request({ url: `${Joomla.getOptions('finder-search').url}&q=${target.value}`, - method: 'GET', - data: { q: target.value }, - perform: true, - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - onSuccess: (resp) => { - const response = JSON.parse(resp); - if (Object.prototype.toString.call(response.suggestions) === '[object Array]') { - target.awesomplete.list = response.suggestions; - } - }, - onError: (xhr) => { - if (xhr.status > 0) { - Joomla.renderMessages(Joomla.ajaxErrorsMessages(xhr)); - } - }, + promise: true, + }).then((xhr) => { + let response; + try { + response = JSON.parse(xhr.responseText); + } catch (e) { + Joomla.renderMessages(Joomla.ajaxErrorsMessages(xhr, 'parsererror')); + return; + } + + if (Object.prototype.toString.call(response.suggestions) === '[object Array]') { + target.awesomplete.list = response.suggestions; + } + }).catch((xhr) => { + Joomla.renderMessages(Joomla.ajaxErrorsMessages(xhr)); }); } }; diff --git a/build/media_source/com_finder/js/indexer.es6.js b/build/media_source/com_finder/js/indexer.es6.js index 65ceab92a7ef5..53a89bcd0be64 100644 --- a/build/media_source/com_finder/js/indexer.es6.js +++ b/build/media_source/com_finder/js/indexer.es6.js @@ -130,17 +130,33 @@ return true; }; - const handleFailure = (xhr) => { + const handleFailure = (error) => { const progressHeader = document.getElementById('finder-progress-header'); const progressMessage = document.getElementById('finder-progress-message'); + let data; - let data = (typeof xhr === 'object' && xhr.responseText) ? xhr.responseText : null; - data = data ? JSON.parse(data) : null; + if (error instanceof Error) { + // Encode any html in the message + const div = document.createElement('div'); + div.textContent = error.message; + data = div.innerHTML; + + if (error instanceof SyntaxError) { + data = Joomla.Text._('JLIB_JS_AJAX_ERROR_PARSE').replace('%s', data); + } + } else if (typeof error === 'object' && error.responseText) { + data = error.responseText; + try { + data = JSON.parse(data); + } catch (e) { + data = Joomla.Text._('JLIB_JS_AJAX_ERROR_OTHER').replace('%s', error.status); + } + } removeElement('progress'); - const header = data ? data.header : Joomla.Text._('COM_FINDER_AN_ERROR_HAS_OCCURRED'); - const message = data ? data.message : `${Joomla.Text._('COM_FINDER_MESSAGE_RETURNED')}
${data}`; + const header = data && data.header ? data.header : Joomla.Text._('COM_FINDER_AN_ERROR_HAS_OCCURRED'); + const message = data && data.message ? data.message : `${Joomla.Text._('COM_FINDER_MESSAGE_RETURNED')}
${data}`; if (progressHeader) { progressHeader.innerText = header; @@ -155,16 +171,11 @@ getRequest = (task) => { Joomla.request({ url: `${path}&task=${task}${token}`, - method: 'GET', - data: '', - perform: true, - headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, - onSuccess: (response) => { - handleResponse(JSON.parse(response)); - }, - onError: (xhr) => { - handleFailure(xhr); - }, + promise: true, + }).then((xhr) => { + handleResponse(JSON.parse(xhr.responseText)); + }).catch((error) => { + handleFailure(error); }); }; diff --git a/components/com_finder/tmpl/search/default_form.php b/components/com_finder/tmpl/search/default_form.php index 69024cb49d9d4..0ec0bffd0dd79 100644 --- a/components/com_finder/tmpl/search/default_form.php +++ b/components/com_finder/tmpl/search/default_form.php @@ -20,6 +20,9 @@ if ($this->params->get('show_autosuggest', 1)) { $this->document->getWebAssetManager()->usePreset('awesomplete'); $this->document->addScriptOptions('finder-search', ['url' => Route::_('index.php?option=com_finder&task=suggestions.suggest&format=json&tmpl=component', false)]); + + Text::script('JLIB_JS_AJAX_ERROR_OTHER'); + Text::script('JLIB_JS_AJAX_ERROR_PARSE'); } ?> diff --git a/modules/mod_finder/tmpl/default.php b/modules/mod_finder/tmpl/default.php index e3156994382eb..281dcb66abaf2 100644 --- a/modules/mod_finder/tmpl/default.php +++ b/modules/mod_finder/tmpl/default.php @@ -39,7 +39,7 @@ $output .= $input; } -Text::script('MOD_FINDER_SEARCH_VALUE', true); +Text::script('MOD_FINDER_SEARCH_VALUE'); /** @var Joomla\CMS\WebAsset\WebAssetManager $wa */ $wa = $app->getDocument()->getWebAssetManager(); @@ -51,6 +51,9 @@ if ($params->get('show_autosuggest', 1)) { $wa->usePreset('awesomplete'); $app->getDocument()->addScriptOptions('finder-search', ['url' => Route::_('index.php?option=com_finder&task=suggestions.suggest&format=json&tmpl=component', false)]); + + Text::script('JLIB_JS_AJAX_ERROR_OTHER'); + Text::script('JLIB_JS_AJAX_ERROR_PARSE'); } $wa->useScript('com_finder.finder');