[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
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 })();
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 |