primo commit
This commit is contained in:
187
media/plg_installer_packageinstaller/js/packageinstaller.js
Normal file
187
media/plg_installer_packageinstaller/js/packageinstaller.js
Normal file
@ -0,0 +1,187 @@
|
||||
/**
|
||||
* @copyright (C) 2020 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/
|
||||
|
||||
Joomla = window.Joomla || {};
|
||||
(Joomla => {
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
Joomla.submitbuttonpackage = () => {
|
||||
const form = document.getElementById('adminForm');
|
||||
|
||||
// do field validation
|
||||
if (form.install_package.value === '') {
|
||||
Joomla.renderMessages({
|
||||
warning: [Joomla.Text._('PLG_INSTALLER_PACKAGEINSTALLER_NO_PACKAGE')]
|
||||
});
|
||||
} else if (form.install_package.files[0].size > form.max_upload_size.value) {
|
||||
Joomla.renderMessages({
|
||||
warning: [Joomla.Text._('COM_INSTALLER_MSG_WARNINGS_UPLOADFILETOOBIG')]
|
||||
});
|
||||
} else {
|
||||
const loading = document.getElementById('loading');
|
||||
if (loading) {
|
||||
loading.classList.remove('hidden');
|
||||
}
|
||||
form.installtype.value = 'upload';
|
||||
form.submit();
|
||||
}
|
||||
};
|
||||
if (typeof FormData === 'undefined') {
|
||||
document.querySelector('#legacy-uploader').classList.remove('hidden');
|
||||
document.querySelector('#uploader-wrapper').classList.add('hidden');
|
||||
return;
|
||||
}
|
||||
let uploading = false;
|
||||
const dragZone = document.querySelector('#dragarea');
|
||||
const fileInput = document.querySelector('#install_package');
|
||||
const fileSizeMax = document.querySelector('#max_upload_size').value;
|
||||
const button = document.querySelector('#select-file-button');
|
||||
const returnUrl = document.querySelector('#installer-return').value;
|
||||
const progress = document.getElementById('upload-progress');
|
||||
const progressBar = progress.querySelector('.progress-bar');
|
||||
const percentage = progress.querySelector('.uploading-number');
|
||||
let uploadUrl = 'index.php?option=com_installer&task=install.ajax_upload';
|
||||
function showError(res) {
|
||||
dragZone.setAttribute('data-state', 'pending');
|
||||
let message = Joomla.Text._('PLG_INSTALLER_PACKAGEINSTALLER_UPLOAD_ERROR_UNKNOWN');
|
||||
if (res == null) {
|
||||
message = Joomla.Text._('PLG_INSTALLER_PACKAGEINSTALLER_UPLOAD_ERROR_EMPTY');
|
||||
} else if (typeof res === 'string') {
|
||||
// Let's remove unnecessary HTML
|
||||
message = res.replace(/(<([^>]+)>|\s+)/g, ' ');
|
||||
} else if (res.message) {
|
||||
({
|
||||
message
|
||||
} = res);
|
||||
}
|
||||
Joomla.renderMessages({
|
||||
error: [message]
|
||||
});
|
||||
}
|
||||
if (returnUrl) {
|
||||
uploadUrl += `&return=${returnUrl}`;
|
||||
}
|
||||
button.addEventListener('click', () => fileInput.click());
|
||||
fileInput.addEventListener('change', () => {
|
||||
if (uploading) {
|
||||
return;
|
||||
}
|
||||
Joomla.submitbuttonpackage();
|
||||
});
|
||||
dragZone.addEventListener('dragenter', event => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
dragZone.classList.add('hover');
|
||||
return false;
|
||||
});
|
||||
|
||||
// Notify user when file is over the drop area
|
||||
dragZone.addEventListener('dragover', event => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
dragZone.classList.add('hover');
|
||||
return false;
|
||||
});
|
||||
dragZone.addEventListener('dragleave', event => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
dragZone.classList.remove('hover');
|
||||
return false;
|
||||
});
|
||||
dragZone.addEventListener('drop', event => {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
if (uploading) {
|
||||
return;
|
||||
}
|
||||
dragZone.classList.remove('hover');
|
||||
const files = event.target.files || event.dataTransfer.files;
|
||||
if (!files.length) {
|
||||
return;
|
||||
}
|
||||
const file = files[0];
|
||||
const data = new FormData();
|
||||
if (!file.type) {
|
||||
Joomla.renderMessages({
|
||||
error: [Joomla.Text._('PLG_INSTALLER_PACKAGEINSTALLER_NO_PACKAGE')]
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (file.size > fileSizeMax) {
|
||||
Joomla.renderMessages({
|
||||
warning: [Joomla.Text._('COM_INSTALLER_MSG_WARNINGS_UPLOADFILETOOBIG')]
|
||||
});
|
||||
return;
|
||||
}
|
||||
data.append('install_package', file);
|
||||
data.append('installtype', 'upload');
|
||||
dragZone.setAttribute('data-state', 'uploading');
|
||||
progressBar.setAttribute('aria-valuenow', 0);
|
||||
uploading = true;
|
||||
progressBar.style.width = 0;
|
||||
percentage.textContent = '0';
|
||||
|
||||
// Upload progress
|
||||
const progressCallback = evt => {
|
||||
if (evt.lengthComputable) {
|
||||
const percentComplete = evt.loaded / evt.total;
|
||||
const number = Math.round(percentComplete * 100);
|
||||
progressBar.style.width = `${number}%`;
|
||||
progressBar.setAttribute('aria-valuenow', number);
|
||||
percentage.textContent = `${number}`;
|
||||
if (number === 100) {
|
||||
dragZone.setAttribute('data-state', 'installing');
|
||||
}
|
||||
}
|
||||
};
|
||||
Joomla.request({
|
||||
url: uploadUrl,
|
||||
method: 'POST',
|
||||
perform: true,
|
||||
data,
|
||||
onBefore: xhr => {
|
||||
xhr.upload.addEventListener('progress', progressCallback);
|
||||
},
|
||||
onSuccess: response => {
|
||||
if (!response) {
|
||||
showError(response);
|
||||
return;
|
||||
}
|
||||
let res;
|
||||
try {
|
||||
res = JSON.parse(response);
|
||||
} catch (e) {
|
||||
showError(e);
|
||||
return;
|
||||
}
|
||||
if (!res.success && !res.data) {
|
||||
showError(res);
|
||||
return;
|
||||
}
|
||||
|
||||
// Always redirect that can show message queue from session
|
||||
if (res.data.redirect) {
|
||||
window.location.href = res.data.redirect;
|
||||
} else {
|
||||
window.location.href = 'index.php?option=com_installer&view=install';
|
||||
}
|
||||
},
|
||||
onError: error => {
|
||||
uploading = false;
|
||||
if (error.status === 200) {
|
||||
const res = error.responseText || error.responseJSON;
|
||||
showError(res);
|
||||
} else {
|
||||
showError(error.statusText);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
document.getElementById('installbutton_package').addEventListener('click', event => {
|
||||
event.preventDefault();
|
||||
Joomla.submitbuttonpackage();
|
||||
});
|
||||
});
|
||||
})(Joomla);
|
||||
4
media/plg_installer_packageinstaller/js/packageinstaller.min.js
vendored
Normal file
4
media/plg_installer_packageinstaller/js/packageinstaller.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
/**
|
||||
* @copyright (C) 2020 Open Source Matters, Inc. <https://www.joomla.org>
|
||||
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
||||
*/Joomla=window.Joomla||{},(t=>{document.addEventListener("DOMContentLoaded",()=>{if(t.submitbuttonpackage=()=>{const e=document.getElementById("adminForm");if(e.install_package.value==="")t.renderMessages({warning:[t.Text._("PLG_INSTALLER_PACKAGEINSTALLER_NO_PACKAGE")]});else if(e.install_package.files[0].size>e.max_upload_size.value)t.renderMessages({warning:[t.Text._("COM_INSTALLER_MSG_WARNINGS_UPLOADFILETOOBIG")]});else{const n=document.getElementById("loading");n&&n.classList.remove("hidden"),e.installtype.value="upload",e.submit()}},typeof FormData>"u"){document.querySelector("#legacy-uploader").classList.remove("hidden"),document.querySelector("#uploader-wrapper").classList.add("hidden");return}let o=!1;const a=document.querySelector("#dragarea"),p=document.querySelector("#install_package"),E=document.querySelector("#max_upload_size").value,A=document.querySelector("#select-file-button"),g=document.querySelector("#installer-return").value,f=document.getElementById("upload-progress"),d=f.querySelector(".progress-bar"),L=f.querySelector(".uploading-number");let _="index.php?option=com_installer&task=install.ajax_upload";function l(e){a.setAttribute("data-state","pending");let n=t.Text._("PLG_INSTALLER_PACKAGEINSTALLER_UPLOAD_ERROR_UNKNOWN");e==null?n=t.Text._("PLG_INSTALLER_PACKAGEINSTALLER_UPLOAD_ERROR_EMPTY"):typeof e=="string"?n=e.replace(/(<([^>]+)>|\s+)/g," "):e.message&&({message:n}=e),t.renderMessages({error:[n]})}g&&(_+=`&return=${g}`),A.addEventListener("click",()=>p.click()),p.addEventListener("change",()=>{o||t.submitbuttonpackage()}),a.addEventListener("dragenter",e=>(e.preventDefault(),e.stopPropagation(),a.classList.add("hover"),!1)),a.addEventListener("dragover",e=>(e.preventDefault(),e.stopPropagation(),a.classList.add("hover"),!1)),a.addEventListener("dragleave",e=>(e.preventDefault(),e.stopPropagation(),a.classList.remove("hover"),!1)),a.addEventListener("drop",e=>{if(e.preventDefault(),e.stopPropagation(),o)return;a.classList.remove("hover");const n=e.target.files||e.dataTransfer.files;if(!n.length)return;const u=n[0],c=new FormData;if(!u.type){t.renderMessages({error:[t.Text._("PLG_INSTALLER_PACKAGEINSTALLER_NO_PACKAGE")]});return}if(u.size>E){t.renderMessages({warning:[t.Text._("COM_INSTALLER_MSG_WARNINGS_UPLOADFILETOOBIG")]});return}c.append("install_package",u),c.append("installtype","upload"),a.setAttribute("data-state","uploading"),d.setAttribute("aria-valuenow",0),o=!0,d.style.width=0,L.textContent="0";const m=r=>{if(r.lengthComputable){const s=r.loaded/r.total,i=Math.round(s*100);d.style.width=`${i}%`,d.setAttribute("aria-valuenow",i),L.textContent=`${i}`,i===100&&a.setAttribute("data-state","installing")}};t.request({url:_,method:"POST",perform:!0,data:c,onBefore:r=>{r.upload.addEventListener("progress",m)},onSuccess:r=>{if(!r){l(r);return}let s;try{s=JSON.parse(r)}catch(i){l(i);return}if(!s.success&&!s.data){l(s);return}s.data.redirect?window.location.href=s.data.redirect:window.location.href="index.php?option=com_installer&view=install"},onError:r=>{if(o=!1,r.status===200){const s=r.responseText||r.responseJSON;l(s)}else l(r.statusText)}})}),document.getElementById("installbutton_package").addEventListener("click",e=>{e.preventDefault(),t.submitbuttonpackage()})})})(Joomla);
|
||||
Binary file not shown.
Reference in New Issue
Block a user