Port profile picture/header cropping functionality to TypeScript
This commit is contained in:
parent
12430aebf1
commit
9b6abb9148
|
@ -0,0 +1,62 @@
|
|||
import 'croppr/dist/croppr.css';
|
||||
import Croppr from 'croppr';
|
||||
|
||||
const readImage = (file, callback) => callback((window.URL || window.webkitURL).createObjectURL(file));
|
||||
|
||||
export function profilePictureChangeHandler(event: Event) {
|
||||
const input = event.target as HTMLInputElement;
|
||||
|
||||
const cropControls = document.querySelector('#profile-picture-crop-controls');
|
||||
cropControls.classList.toggle('d-none');
|
||||
|
||||
if (input.files && input.files[0]) {
|
||||
readImage(input.files[0], (src) => {
|
||||
const updateValues = (data) => {
|
||||
document.querySelector<HTMLInputElement>('#profile_picture_x').value = data.x;
|
||||
document.querySelector<HTMLInputElement>('#profile_picture_y').value = data.y;
|
||||
document.querySelector<HTMLInputElement>('#profile_picture_w').value = data.width;
|
||||
document.querySelector<HTMLInputElement>('#profile_picture_h').value = data.height;
|
||||
}
|
||||
|
||||
const cropper = document.querySelector<HTMLImageElement>('#profile-picture-cropper');
|
||||
cropper.src = src;
|
||||
|
||||
new Croppr(cropper, {
|
||||
aspectRatio: 1,
|
||||
startSize: [100, 100, '%'],
|
||||
onCropStart: updateValues,
|
||||
onCropMove: updateValues,
|
||||
onCropEnd: updateValues
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export function profileHeaderChangeHandler(event: Event) {
|
||||
const input = event.target as HTMLInputElement;
|
||||
|
||||
const cropControls = document.querySelector('#profile-header-crop-controls');
|
||||
cropControls.classList.toggle('d-none');
|
||||
|
||||
if (input.files && input.files[0]) {
|
||||
readImage(input.files[0], (src) => {
|
||||
const updateValues = (data) => {
|
||||
document.querySelector<HTMLInputElement>('#profile_header_x').value = data.x;
|
||||
document.querySelector<HTMLInputElement>('#profile_header_y').value = data.y;
|
||||
document.querySelector<HTMLInputElement>('#profile_header_w').value = data.width;
|
||||
document.querySelector<HTMLInputElement>('#profile_header_h').value = data.height;
|
||||
}
|
||||
|
||||
const cropper = document.querySelector<HTMLImageElement>('#profile-header-cropper');
|
||||
cropper.src = src;
|
||||
|
||||
new Croppr(cropper, {
|
||||
aspectRatio: 7/30,
|
||||
startSize: [100, 100, '%'],
|
||||
onCropStart: updateValues,
|
||||
onCropMove: updateValues,
|
||||
onCropEnd: updateValues
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue