[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/media/plg_installer_packageinstaller/js/ -> packageinstaller-es5.js (source)

   1  (function () {
   2    'use strict';
   3  
   4    /**
   5     * @copyright   (C) 2020 Open Source Matters, Inc. <https://www.joomla.org>
   6     * @license     GNU General Public License version 2 or later; see LICENSE.txt
   7     */
   8    Joomla = window.Joomla || {};
   9  
  10    (function (Joomla) {
  11      document.addEventListener('DOMContentLoaded', function () {
  12        Joomla.submitbuttonpackage = function () {
  13          var form = document.getElementById('adminForm'); // do field validation
  14  
  15          if (form.install_package.value === '') {
  16            Joomla.renderMessages({
  17              warning: [Joomla.Text._('PLG_INSTALLER_PACKAGEINSTALLER_NO_PACKAGE')]
  18            });
  19          } else if (form.install_package.files[0].size > form.max_upload_size.value) {
  20            Joomla.renderMessages({
  21              warning: [Joomla.Text._('COM_INSTALLER_MSG_WARNINGS_UPLOADFILETOOBIG')]
  22            });
  23          } else {
  24            var loading = document.getElementById('loading');
  25  
  26            if (loading) {
  27              loading.classList.remove('hidden');
  28            }
  29  
  30            form.installtype.value = 'upload';
  31            form.submit();
  32          }
  33        };
  34  
  35        if (typeof FormData === 'undefined') {
  36          document.querySelector('#legacy-uploader').classList.remove('hidden');
  37          document.querySelector('#uploader-wrapper').classList.add('hidden');
  38          return;
  39        }
  40  
  41        var uploading = false;
  42        var dragZone = document.querySelector('#dragarea');
  43        var fileInput = document.querySelector('#install_package');
  44        var fileSizeMax = document.querySelector('#max_upload_size').value;
  45        var button = document.querySelector('#select-file-button');
  46        var returnUrl = document.querySelector('#installer-return').value;
  47        var progress = document.getElementById('upload-progress');
  48        var progressBar = progress.querySelector('.progress-bar');
  49        var percentage = progress.querySelector('.uploading-number');
  50        var uploadUrl = 'index.php?option=com_installer&task=install.ajax_upload';
  51  
  52        function showError(res) {
  53          dragZone.setAttribute('data-state', 'pending');
  54  
  55          var message = Joomla.Text._('PLG_INSTALLER_PACKAGEINSTALLER_UPLOAD_ERROR_UNKNOWN');
  56  
  57          if (res == null) {
  58            message = Joomla.Text._('PLG_INSTALLER_PACKAGEINSTALLER_UPLOAD_ERROR_EMPTY');
  59          } else if (typeof res === 'string') {
  60            // Let's remove unnecessary HTML
  61            message = res.replace(/(<([^>]+)>|\s+)/g, ' ');
  62          } else if (res.message) {
  63            message = res.message;
  64          }
  65  
  66          Joomla.renderMessages({
  67            error: [message]
  68          });
  69        }
  70  
  71        if (returnUrl) {
  72          uploadUrl += "&return=" + returnUrl;
  73        }
  74  
  75        button.addEventListener('click', function () {
  76          fileInput.click();
  77        });
  78        fileInput.addEventListener('change', function () {
  79          if (uploading) {
  80            return;
  81          }
  82  
  83          Joomla.submitbuttonpackage();
  84        });
  85        dragZone.addEventListener('dragenter', function (event) {
  86          event.preventDefault();
  87          event.stopPropagation();
  88          dragZone.classList.add('hover');
  89          return false;
  90        }); // Notify user when file is over the drop area
  91  
  92        dragZone.addEventListener('dragover', function (event) {
  93          event.preventDefault();
  94          event.stopPropagation();
  95          dragZone.classList.add('hover');
  96          return false;
  97        });
  98        dragZone.addEventListener('dragleave', function (event) {
  99          event.preventDefault();
 100          event.stopPropagation();
 101          dragZone.classList.remove('hover');
 102          return false;
 103        });
 104        dragZone.addEventListener('drop', function (event) {
 105          event.preventDefault();
 106          event.stopPropagation();
 107  
 108          if (uploading) {
 109            return;
 110          }
 111  
 112          dragZone.classList.remove('hover');
 113          var files = event.target.files || event.dataTransfer.files;
 114  
 115          if (!files.length) {
 116            return;
 117          }
 118  
 119          var file = files[0];
 120          var data = new FormData();
 121  
 122          if (!file.type) {
 123            Joomla.renderMessages({
 124              error: [Joomla.Text._('PLG_INSTALLER_PACKAGEINSTALLER_NO_PACKAGE')]
 125            });
 126            return;
 127          }
 128  
 129          if (file.size > fileSizeMax) {
 130            Joomla.renderMessages({
 131              warning: [Joomla.Text._('COM_INSTALLER_MSG_WARNINGS_UPLOADFILETOOBIG')]
 132            });
 133            return;
 134          }
 135  
 136          data.append('install_package', file);
 137          data.append('installtype', 'upload');
 138          dragZone.setAttribute('data-state', 'uploading');
 139          progressBar.setAttribute('aria-valuenow', 0);
 140          uploading = true;
 141          progressBar.style.width = 0;
 142          percentage.textContent = '0'; // Upload progress
 143  
 144          var progressCallback = function progressCallback(evt) {
 145            if (evt.lengthComputable) {
 146              var percentComplete = evt.loaded / evt.total;
 147              var number = Math.round(percentComplete * 100);
 148              progressBar.style.width = number + "%";
 149              progressBar.setAttribute('aria-valuenow', number);
 150              percentage.textContent = "" + number;
 151  
 152              if (number === 100) {
 153                dragZone.setAttribute('data-state', 'installing');
 154              }
 155            }
 156          };
 157  
 158          Joomla.request({
 159            url: uploadUrl,
 160            method: 'POST',
 161            perform: true,
 162            data: data,
 163            onBefore: function onBefore(xhr) {
 164              xhr.upload.addEventListener('progress', progressCallback);
 165            },
 166            onSuccess: function onSuccess(response) {
 167              if (!response) {
 168                showError(response);
 169                return;
 170              }
 171  
 172              var res;
 173  
 174              try {
 175                res = JSON.parse(response);
 176              } catch (e) {
 177                showError(e);
 178                return;
 179              }
 180  
 181              if (!res.success && !res.data) {
 182                showError(res);
 183                return;
 184              } // Always redirect that can show message queue from session
 185  
 186  
 187              if (res.data.redirect) {
 188                window.location.href = res.data.redirect;
 189              } else {
 190                window.location.href = 'index.php?option=com_installer&view=install';
 191              }
 192            },
 193            onError: function onError(error) {
 194              uploading = false;
 195  
 196              if (error.status === 200) {
 197                var res = error.responseText || error.responseJSON;
 198                showError(res);
 199              } else {
 200                showError(error.statusText);
 201              }
 202            }
 203          });
 204        });
 205        document.getElementById('installbutton_package').addEventListener('click', function (event) {
 206          event.preventDefault();
 207          Joomla.submitbuttonpackage();
 208        });
 209      });
 210    })(Joomla);
 211  
 212  })();


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