[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/media/com_finder/js/ -> finder.js (source)

   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  ((Awesomplete, Joomla, window, document) => {
   6  
   7    if (!Joomla) {
   8      throw new Error('core.js was not properly initialised');
   9    } // Handle the autocomplete
  10  
  11  
  12    const onInputChange = ({
  13      target
  14    }) => {
  15      if (target.value.length > 1) {
  16        target.awesomplete.list = [];
  17        Joomla.request({
  18          url: `$Joomla.getOptions('finder-search').url}&q=$target.value}`,
  19          method: 'GET',
  20          data: {
  21            q: target.value
  22          },
  23          perform: true,
  24          headers: {
  25            'Content-Type': 'application/x-www-form-urlencoded'
  26          },
  27          onSuccess: resp => {
  28            const response = JSON.parse(resp);
  29  
  30            if (Object.prototype.toString.call(response.suggestions) === '[object Array]') {
  31              target.awesomplete.list = response.suggestions;
  32            }
  33          },
  34          onError: xhr => {
  35            if (xhr.status > 0) {
  36              Joomla.renderMessages(Joomla.ajaxErrorsMessages(xhr));
  37            }
  38          }
  39        });
  40      }
  41    }; // Handle the submit
  42  
  43  
  44    const onSubmit = event => {
  45      event.stopPropagation();
  46      const advanced = event.target.querySelector('.js-finder-advanced'); // Disable select boxes with no value selected.
  47  
  48      if (advanced) {
  49        const fields = [].slice.call(advanced.querySelectorAll('select'));
  50        fields.forEach(field => {
  51          if (!field.value) {
  52            field.setAttribute('disabled', 'disabled');
  53          }
  54        });
  55      }
  56    }; // Submits the form programmatically
  57  
  58  
  59    const submitForm = event => {
  60      const form = event.target.closest('form');
  61  
  62      if (form) {
  63        form.submit();
  64      }
  65    }; // The boot sequence
  66  
  67  
  68    const onBoot = () => {
  69      const searchWords = [].slice.call(document.querySelectorAll('.js-finder-search-query'));
  70      searchWords.forEach(searchword => {
  71        // Handle the auto suggestion
  72        if (Joomla.getOptions('finder-search')) {
  73          searchword.awesomplete = new Awesomplete(searchword); // If the current value is empty, set the previous value.
  74  
  75          searchword.addEventListener('input', onInputChange);
  76          const advanced = searchword.closest('form').querySelector('.js-finder-advanced'); // Do not submit the form on suggestion selection, in case of advanced form.
  77  
  78          if (!advanced) {
  79            searchword.addEventListener('awesomplete-selectcomplete', submitForm);
  80          }
  81        }
  82      });
  83      const forms = [].slice.call(document.querySelectorAll('.js-finder-searchform'));
  84      forms.forEach(form => {
  85        form.addEventListener('submit', onSubmit);
  86      }); // Cleanup
  87  
  88      document.removeEventListener('DOMContentLoaded', onBoot);
  89    };
  90  
  91    document.addEventListener('DOMContentLoaded', onBoot);
  92  })(window.Awesomplete, window.Joomla, window, document);


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