| Server IP : 54.36.91.62 / Your IP : 216.73.217.117 Web Server : Apache System : Linux webm013.cluster127.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : coopiak ( 151928) PHP Version : 8.3.23 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/coopiak/amisdesseniors-fr/nice2/media/plg_media-action_rotate/js/ |
Upload File : |
/**
* @copyright (C) 2018 Open Source Matters, Inc. <https://www.joomla.org>
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
let activated = false;
// Update image
const rotate = (angle, image) => {
// The canvas where we will rotate the image
let canvas = document.createElement('canvas');
// Pseudo rectangle calculation
if (angle >= 0 && angle < 45 || angle >= 135 && angle < 225 || angle >= 315 && angle <= 360) {
canvas.width = image.naturalWidth;
canvas.height = image.naturalHeight;
} else {
// swap
canvas.width = image.naturalHeight;
canvas.height = image.naturalWidth;
}
const ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.translate(canvas.width / 2, canvas.height / 2);
ctx.rotate(angle * Math.PI / 180);
ctx.drawImage(image, -image.naturalWidth / 2, -image.naturalHeight / 2);
// The format
const format = Joomla.MediaManager.Edit.original.extension.toLowerCase() === 'jpg' ? 'jpeg' : Joomla.MediaManager.Edit.original.extension.toLowerCase();
// The quality
const quality = document.getElementById('jform_rotate_quality').value;
// Creating the data from the canvas
Joomla.MediaManager.Edit.current.contents = canvas.toDataURL(`image/${format}`, quality);
// Updating the preview element
image.width = canvas.width;
image.height = canvas.height;
image.src = '';
requestAnimationFrame(() => requestAnimationFrame(() => {
image.src = Joomla.MediaManager.Edit.current.contents;
}));
// Update the angle input box
document.getElementById('jform_rotate_a').value = angle;
// Notify the app that a change has been made
window.dispatchEvent(new Event('mediaManager.history.point'));
canvas = null;
};
const initRotate = image => {
if (!activated) {
// The number input listener
document.getElementById('jform_rotate_a').addEventListener('change', ({
target
}) => {
rotate(parseInt(target.value, 10), image);
target.value = 0;
// Deselect all buttons
document.querySelectorAll('#jform_rotate_distinct label').forEach(element => element.classList.remove('active', 'focus'));
});
// The 90 degree rotate buttons listeners
document.querySelectorAll('#jform_rotate_distinct [type=radio]').forEach(element => {
element.addEventListener('click', ({
target
}) => {
rotate(parseInt(target.value, 10), image);
// Deselect all buttons
document.querySelectorAll('#jform_rotate_distinct label').forEach(el => el.classList.remove('active', 'focus'));
});
});
activated = true;
}
};
window.addEventListener('media-manager-edit-init', () => {
// Register the Events
Joomla.MediaManager.Edit.plugins.rotate = {
Activate(image) {
return new Promise(resolve => {
// Initialize
initRotate(image);
resolve();
});
},
Deactivate(/* image */
) {
return new Promise(resolve => {
resolve();
});
}
};
}, {
once: true
});