[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/media/com_finder/js/ -> indexer-es5.js (source)

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


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer