[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
1 /** 2 * @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org> 3 * @license GNU General Public License version 2 or later; see LICENSE.txt 4 */ 5 // eslint-disable no-alert 6 ((Joomla, document) => { 7 8 if (!Joomla) { 9 throw new Error('core.js was not properly initialised'); 10 } 11 12 Joomla.finderIndexer = () => { 13 let getRequest; 14 let totalItems = null; 15 let offset = null; 16 let progress = null; 17 let optimized = false; 18 const path = 'index.php?option=com_finder&tmpl=component&format=json'; 19 const token = `&$document.getElementById('finder-indexer-token').getAttribute('name')}=1`; 20 21 const removeElement = id => { 22 const element = document.getElementById(id); 23 24 if (element) { 25 return element.parentNode.removeChild(element); 26 } 27 28 return null; 29 }; 30 31 const updateProgress = (header, message) => { 32 progress = offset / totalItems * 100; 33 const progressBar = document.getElementById('progress-bar'); 34 const progressHeader = document.getElementById('finder-progress-header'); 35 const progressMessage = document.getElementById('finder-progress-message'); 36 37 if (progressHeader) { 38 progressHeader.innerText = header; 39 } 40 41 if (progressMessage) { 42 progressMessage.innerHTML = Joomla.sanitizeHtml(message); 43 } 44 45 if (progressBar) { 46 if (progress < 100) { 47 progressBar.style.width = `$progress}%`; 48 progressBar.setAttribute('aria-valuenow', progress); 49 } else { 50 progressBar.classList.remove('bar-success'); 51 progressBar.classList.add('bar-warning'); 52 progressBar.setAttribute('aria-valuemin', 100); 53 progressBar.setAttribute('aria-valuemax', 200); 54 progressBar.style.width = `$progress}%`; 55 progressBar.setAttribute('aria-valuenow', progress); 56 } // Auto close the window 57 58 59 if (message === Joomla.Text._('COM_FINDER_INDEXER_MESSAGE_COMPLETE')) { 60 removeElement('progress'); 61 window.parent.Joomla.Modal.getCurrent().close(); 62 } 63 } 64 }; 65 66 const handleResponse = (json, resp) => { 67 const progressHeader = document.getElementById('finder-progress-header'); 68 const progressMessage = document.getElementById('finder-progress-message'); 69 70 try { 71 if (json === null) { 72 throw new Error(resp); 73 } 74 75 if (json.error) { 76 throw new Error(json); 77 } 78 79 if (json.start) { 80 // eslint-disable-next-line prefer-destructuring 81 totalItems = json.totalItems; 82 83 if (document.getElementById('finder-debug-data')) { 84 const debuglist = document.getElementById('finder-debug-data'); 85 Object.entries(json.pluginState).forEach(context => { 86 let item = `<dt class="col-sm-3">$context[0]}</dt>`; 87 item += `<dd id="finder-$context[0].replace(/\s+/g, '-').toLowerCase()}" class="col-sm-9"></dd>`; 88 debuglist.insertAdjacentHTML('beforeend', Joomla.sanitizeHtml(item, { 89 dd: ['class', 'id'], 90 dt: ['class'] 91 })); 92 }); 93 } 94 } 95 96 offset += json.batchOffset; 97 updateProgress(json.header, json.message); 98 99 if (document.getElementById('finder-debug-data')) { 100 Object.entries(json.pluginState).forEach(context => { 101 document.getElementById(`finder-$context[0].replace(/\s+/g, '-').toLowerCase()}`).innerHTML = Joomla.sanitizeHtml(`$json.pluginState[context[0]].offset} of $json.pluginState[context[0]].total}`); 102 }); 103 } 104 105 if (offset < totalItems) { 106 getRequest('indexer.batch'); 107 } else if (!optimized) { 108 optimized = true; 109 getRequest('indexer.optimize'); 110 } 111 } catch (error) { 112 removeElement('progress'); 113 114 try { 115 if (json.error) { 116 if (progressHeader) { 117 progressHeader.innerText = json.header; 118 progressHeader.classList.add('finder-error'); 119 } 120 121 if (progressMessage) { 122 progressMessage.innerHTML = Joomla.sanitizeHtml(json.message); 123 progressMessage.classList.add('finder-error'); 124 } 125 } 126 } catch (ignore) { 127 if (error === '') { 128 // eslint-disable-next-line no-ex-assign 129 error = Joomla.Text._('COM_FINDER_NO_ERROR_RETURNED'); 130 } 131 132 if (progressHeader) { 133 progressHeader.innerText = Joomla.Text._('COM_FINDER_AN_ERROR_HAS_OCCURRED'); 134 progressHeader.classList.add('finder-error'); 135 } 136 137 if (progressMessage) { 138 progressMessage.innerHTML = Joomla.sanitizeHtml(error); 139 progressMessage.classList.add('finder-error'); 140 } 141 } 142 } 143 144 return true; 145 }; 146 147 const handleFailure = xhr => { 148 const progressHeader = document.getElementById('finder-progress-header'); 149 const progressMessage = document.getElementById('finder-progress-message'); 150 let data = typeof xhr === 'object' && xhr.responseText ? xhr.responseText : null; 151 data = data ? JSON.parse(data) : null; 152 removeElement('progress'); 153 const header = data ? data.header : Joomla.Text._('COM_FINDER_AN_ERROR_HAS_OCCURRED'); 154 const message = data ? data.message : `$Joomla.Text._('COM_FINDER_MESSAGE_RETURNED')}<br>$data}`; 155 156 if (progressHeader) { 157 progressHeader.innerText = header; 158 progressHeader.classList.add('finder-error'); 159 } 160 161 if (progressMessage) { 162 progressMessage.innerHTML = Joomla.sanitizeHtml(message); 163 progressMessage.classList.add('finder-error'); 164 } 165 }; 166 167 getRequest = task => { 168 Joomla.request({ 169 url: `$path}&task=$task}$token}`, 170 method: 'GET', 171 data: '', 172 perform: true, 173 headers: { 174 'Content-Type': 'application/x-www-form-urlencoded' 175 }, 176 onSuccess: response => { 177 handleResponse(JSON.parse(response)); 178 }, 179 onError: xhr => { 180 handleFailure(xhr); 181 } 182 }); 183 }; 184 185 const initialize = () => { 186 offset = 0; 187 progress = 0; 188 getRequest('indexer.start'); 189 }; 190 191 initialize(); 192 }; 193 })(Joomla, document); // @todo use directly the Joomla.finderIndexer() instead of the Indexer()!!! 194 195 196 document.addEventListener('DOMContentLoaded', () => { 197 window.Indexer = Joomla.finderIndexer(); 198 });
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Sep 7 05:41:13 2022 | Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer |