mirror of
https://github.com/Retrospring/retrospring.git
synced 2024-11-20 14:29:53 +01:00
Add Stimulus cropper controller
This commit is contained in:
parent
3b1f9bf4cb
commit
96ed2c864c
2 changed files with 51 additions and 0 deletions
49
app/javascript/retrospring/controllers/cropper_controller.ts
Normal file
49
app/javascript/retrospring/controllers/cropper_controller.ts
Normal file
|
@ -0,0 +1,49 @@
|
|||
import { Controller } from '@hotwired/stimulus';
|
||||
import Croppr from 'croppr';
|
||||
|
||||
export default class extends Controller {
|
||||
static targets = ['input', 'controls', 'cropper', 'x', 'y', 'w', 'h'];
|
||||
|
||||
declare readonly inputTarget: HTMLInputElement;
|
||||
declare readonly controlsTarget: HTMLElement;
|
||||
declare readonly cropperTarget: HTMLImageElement;
|
||||
declare readonly xTarget: HTMLInputElement;
|
||||
declare readonly yTarget: HTMLInputElement;
|
||||
declare readonly wTarget: HTMLInputElement;
|
||||
declare readonly hTarget: HTMLInputElement;
|
||||
|
||||
static values = {
|
||||
aspectRatio: String
|
||||
};
|
||||
|
||||
declare readonly aspectRatioValue: string;
|
||||
|
||||
readImage(file, callback) {
|
||||
callback((window.URL || window.webkitURL).createObjectURL(file));
|
||||
}
|
||||
|
||||
updateValues(data) {
|
||||
this.xTarget.value = data.x;
|
||||
this.yTarget.value = data.y;
|
||||
this.wTarget.value = data.width;
|
||||
this.hTarget.value = data.height;
|
||||
}
|
||||
|
||||
change() {
|
||||
this.controlsTarget.classList.toggle('d-none');
|
||||
|
||||
if (this.inputTarget.files && this.inputTarget.files[0]) {
|
||||
this.readImage(this.inputTarget.files[0], (src) => {
|
||||
this.cropperTarget.src = src;
|
||||
|
||||
new Croppr(this.cropperTarget, {
|
||||
aspectRatio: parseFloat(this.aspectRatioValue),
|
||||
startSize: [100, 100, '%'],
|
||||
onCropStart: this.updateValues.bind(this),
|
||||
onCropMove: this.updateValues.bind(this),
|
||||
onCropEnd: this.updateValues.bind(this)
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
|
@ -7,6 +7,7 @@ import FormatPopupController from "retrospring/controllers/format_popup_controll
|
|||
import CollapseController from "retrospring/controllers/collapse_controller";
|
||||
import ThemeController from "retrospring/controllers/theme_controller";
|
||||
import CapabilitiesController from "retrospring/controllers/capabilities_controller";
|
||||
import CropperController from "retrospring/controllers/cropper_controller";
|
||||
|
||||
/**
|
||||
* This module sets up Stimulus and our controllers
|
||||
|
@ -23,6 +24,7 @@ export default function (): void {
|
|||
window['Stimulus'].register('character-count', CharacterCountController);
|
||||
window['Stimulus'].register('character-count-warning', CharacterCountWarningController);
|
||||
window['Stimulus'].register('collapse', CollapseController);
|
||||
window['Stimulus'].register('cropper', CropperController);
|
||||
window['Stimulus'].register('format-popup', FormatPopupController);
|
||||
window['Stimulus'].register('theme', ThemeController);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue