169 lines
5.0 KiB
JavaScript
169 lines
5.0 KiB
JavaScript
document.addEventListener('DOMContentLoaded', function() {
|
|
var user_actions_modal = document.getElementById("user_actions_modal");
|
|
var modal_content = document.getElementById("modal_content");
|
|
var profile_picture_input = document.getElementById("profile_picture");
|
|
|
|
// Event listener on the file input
|
|
profile_picture_input.addEventListener('change', function() {
|
|
if (profile_picture_input.files && profile_picture_input.files[0]) {
|
|
var file = profile_picture_input.files[0];
|
|
var form_data = new FormData();
|
|
form_data.append('upload', file);
|
|
form_data.append('test_key', 'test_value');
|
|
|
|
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open('POST', 'http://localhost:2025/functions/functions.php', true);
|
|
xhr.setRequestHeader('enctype', 'multipart/form-data');
|
|
|
|
xhr.onload = function() {
|
|
if (xhr.status >= 200 && xhr.status < 300) {
|
|
filepath = '/data/tmp/' + profile_picture_input.files[0].name;
|
|
openModal('profile_cropper', filepath);
|
|
} else {
|
|
console.error('Error uploading file:', xhr.status, xhr.statusText);
|
|
}
|
|
|
|
xhr.onerror = function() {
|
|
console.error('Network error occurred.');
|
|
};
|
|
};
|
|
|
|
xhr.send(form_data);
|
|
}
|
|
});
|
|
|
|
// Open modal function
|
|
function openModal(formId, filePath = null) {
|
|
let content = document.getElementById(formId).innerHTML;
|
|
if (filePath) {
|
|
content = content.replace('IMG_UPLOAD_PATH', filePath);
|
|
}
|
|
modal_content.innerHTML = content;
|
|
user_actions_modal.style.display = "block";
|
|
|
|
cropper();
|
|
}
|
|
|
|
function cropper() {
|
|
let img_to_crop = document.getElementById('img_to_crop');
|
|
let selection_box = document.getElementById('img_crop_selection');
|
|
let crop_button = document.getElementById('crop_button');
|
|
let corners = document.querySelectorAll('.corner');
|
|
|
|
let selection = {
|
|
x: 0,
|
|
y: 0,
|
|
width: 100,
|
|
height: 100,
|
|
is_resizing: false,
|
|
is_dragging: false,
|
|
resize_corner: null,
|
|
};
|
|
|
|
function updateSelection() {
|
|
selection_box.style.left = `${selection.x}px`;
|
|
selection_box.style.top = `${selection.y}px`;
|
|
selection_box.style.width = `${selection.width}px`;
|
|
selection_box.style.height = `${selection.height}px`;
|
|
}
|
|
|
|
img_to_crop.addEventListener('mousemove', (e) => {
|
|
const { clientX, clientY } = e;
|
|
if (!selection_box.classList.contains('stop')) {
|
|
|
|
// const img_bounds = img_to_crop.getBoundingClientRect();
|
|
// const box_bounds = selection_box.getBoundingClientRect();
|
|
//
|
|
// console.log('img_bounds: ' + img_bounds.top);
|
|
// console.log('box_bounds: ' + box_bounds.top);
|
|
// if (box_bounds.left > img_bounds.left || box_bounds.right < img_bounds.right)
|
|
selection.x = clientX;
|
|
// if (box_bounds.top > img_bounds.top || box_bounds.bottom > img_bounds.bottom)
|
|
selection.y = clientY;
|
|
|
|
updateSelection();
|
|
} else if (selection.is_resizing) {
|
|
resizing(e);
|
|
}
|
|
});
|
|
|
|
img_to_crop.addEventListener('click', function(event) {
|
|
if (selection_box.classList.contains('stop')) {
|
|
selection.is_resizing = false;
|
|
selection_box.classList.remove('stop');
|
|
}
|
|
else {
|
|
selection_box.classList.add('stop');
|
|
}
|
|
})
|
|
|
|
corners.forEach((corner) => {
|
|
corner.addEventListener('mousedown', (e) => {
|
|
console.log('resizing');
|
|
selection.resize_corner = corner.id;
|
|
selection.is_resizing = true;
|
|
e.stopPropagation(); // Prevent image click event
|
|
});
|
|
|
|
corner.addEventListener('dragstart', (e) => {
|
|
e.preventDefault();
|
|
})
|
|
});
|
|
|
|
crop_button.addEventListener('click', () => {
|
|
document.getElementById('crop_x').value = selection.x + (selection.width / 1.5);
|
|
document.getElementById('crop_y').value = selection.y + (selection.width / 1.5);
|
|
document.getElementById('crop_width').value = selection.width;
|
|
|
|
closeModal();
|
|
});
|
|
|
|
function resizing(e) {
|
|
if (!selection.is_resizing) return;
|
|
|
|
const aspect_ratio = 1;
|
|
|
|
let newWidth = selection.width;
|
|
|
|
switch (selection.resize_corner) {
|
|
case 'corner_nw':
|
|
newWidth = selection.x - e.clientX;
|
|
break;
|
|
case 'corner_sw':
|
|
newWidth = selection.x - e.clientX;
|
|
break;
|
|
case 'corner_ne':
|
|
newWidth = e.clientX - selection.x;
|
|
break;
|
|
case 'corner_se':
|
|
newWidth = e.clientX - selection.x;
|
|
break;
|
|
}
|
|
|
|
selection.width = newWidth;
|
|
selection.height = newWidth / aspect_ratio;
|
|
// }
|
|
updateSelection();
|
|
}
|
|
}
|
|
|
|
modal_content.addEventListener('click', function(event) {
|
|
if (event.target.classList.contains('modal_close')) {
|
|
closeModal();
|
|
}
|
|
});
|
|
|
|
window.onclick = function(event) {
|
|
if (event.target.classList.contains('modal')) {
|
|
closeModal();
|
|
}
|
|
};
|
|
|
|
// Close modal function
|
|
function closeModal() {
|
|
modal_content.innerHTML = ""; // Clear content when closing
|
|
user_actions_modal.style.display = "none";
|
|
}
|
|
});
|