[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
1 /** 2 * @copyright (C) 2020 Open Source Matters, Inc. <https://www.joomla.org> 3 * @license GNU General Public License version 2 or later; see LICENSE.txt 4 */ 5 Joomla = window.Joomla || {}; 6 7 (Joomla => { 8 9 document.addEventListener('DOMContentLoaded', () => { 10 Joomla.submitbuttonpackage = () => { 11 const form = document.getElementById('adminForm'); // do field validation 12 13 if (form.install_package.value === '') { 14 Joomla.renderMessages({ 15 warning: [Joomla.Text._('PLG_INSTALLER_PACKAGEINSTALLER_NO_PACKAGE')] 16 }); 17 } else if (form.install_package.files[0].size > form.max_upload_size.value) { 18 Joomla.renderMessages({ 19 warning: [Joomla.Text._('COM_INSTALLER_MSG_WARNINGS_UPLOADFILETOOBIG')] 20 }); 21 } else { 22 const loading = document.getElementById('loading'); 23 24 if (loading) { 25 loading.classList.remove('hidden'); 26 } 27 28 form.installtype.value = 'upload'; 29 form.submit(); 30 } 31 }; 32 33 if (typeof FormData === 'undefined') { 34 document.querySelector('#legacy-uploader').classList.remove('hidden'); 35 document.querySelector('#uploader-wrapper').classList.add('hidden'); 36 return; 37 } 38 39 let uploading = false; 40 const dragZone = document.querySelector('#dragarea'); 41 const fileInput = document.querySelector('#install_package'); 42 const fileSizeMax = document.querySelector('#max_upload_size').value; 43 const button = document.querySelector('#select-file-button'); 44 const returnUrl = document.querySelector('#installer-return').value; 45 const progress = document.getElementById('upload-progress'); 46 const progressBar = progress.querySelector('.progress-bar'); 47 const percentage = progress.querySelector('.uploading-number'); 48 let uploadUrl = 'index.php?option=com_installer&task=install.ajax_upload'; 49 50 function showError(res) { 51 dragZone.setAttribute('data-state', 'pending'); 52 53 let message = Joomla.Text._('PLG_INSTALLER_PACKAGEINSTALLER_UPLOAD_ERROR_UNKNOWN'); 54 55 if (res == null) { 56 message = Joomla.Text._('PLG_INSTALLER_PACKAGEINSTALLER_UPLOAD_ERROR_EMPTY'); 57 } else if (typeof res === 'string') { 58 // Let's remove unnecessary HTML 59 message = res.replace(/(<([^>]+)>|\s+)/g, ' '); 60 } else if (res.message) { 61 ({ 62 message 63 } = res); 64 } 65 66 Joomla.renderMessages({ 67 error: [message] 68 }); 69 } 70 71 if (returnUrl) { 72 uploadUrl += `&return=$returnUrl}`; 73 } 74 75 button.addEventListener('click', () => { 76 fileInput.click(); 77 }); 78 fileInput.addEventListener('change', () => { 79 if (uploading) { 80 return; 81 } 82 83 Joomla.submitbuttonpackage(); 84 }); 85 dragZone.addEventListener('dragenter', 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', event => { 93 event.preventDefault(); 94 event.stopPropagation(); 95 dragZone.classList.add('hover'); 96 return false; 97 }); 98 dragZone.addEventListener('dragleave', event => { 99 event.preventDefault(); 100 event.stopPropagation(); 101 dragZone.classList.remove('hover'); 102 return false; 103 }); 104 dragZone.addEventListener('drop', event => { 105 event.preventDefault(); 106 event.stopPropagation(); 107 108 if (uploading) { 109 return; 110 } 111 112 dragZone.classList.remove('hover'); 113 const files = event.target.files || event.dataTransfer.files; 114 115 if (!files.length) { 116 return; 117 } 118 119 const file = files[0]; 120 const 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 const progressCallback = evt => { 145 if (evt.lengthComputable) { 146 const percentComplete = evt.loaded / evt.total; 147 const 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, 163 onBefore: xhr => { 164 xhr.upload.addEventListener('progress', progressCallback); 165 }, 166 onSuccess: response => { 167 if (!response) { 168 showError(response); 169 return; 170 } 171 172 let 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: error => { 194 uploading = false; 195 196 if (error.status === 200) { 197 const 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', event => { 206 event.preventDefault(); 207 Joomla.submitbuttonpackage(); 208 }); 209 }); 210 })(Joomla);
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 |