Skip to content

Commit c374050

Browse files
authored
Merge pull request #3754 from AlchemyCMS/refactor-image-cropper-settings-object
refactor(image cropper): accept settings object instead of positional args
2 parents acce176 + 3b94fb9 commit c374050

3 files changed

Lines changed: 36 additions & 37 deletions

File tree

app/javascript/alchemy_admin/image_cropper.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@ export default class ImageCropper {
66
#cropFromField = null
77
#cropSizeField = null
88

9-
constructor(image, defaultBox, aspectRatio, formFieldIds, elementId) {
9+
constructor(image, settings) {
1010
this.image = image
11-
this.defaultBox = defaultBox
12-
this.aspectRatio = aspectRatio
13-
this.#cropFromField = document.getElementById(formFieldIds[0])
14-
this.#cropSizeField = document.getElementById(formFieldIds[1])
15-
this.elementId = elementId
11+
this.defaultBox = settings.default_box
12+
this.aspectRatio = settings.ratio
13+
this.#cropFromField = document.getElementById(
14+
settings.crop_from_form_field_id
15+
)
16+
this.#cropSizeField = document.getElementById(
17+
settings.crop_size_form_field_id
18+
)
19+
this.elementId = settings.element_id
1620
this.dialog = Alchemy.currentDialog()
1721
if (this.dialog) {
1822
this.dialog.options.closed = () => this.destroy()

app/views/alchemy/admin/crop.html.erb

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,10 @@
2222

2323
const image = document.getElementById("imageToCrop")?.querySelector("img");
2424

25-
new ImageCropper(
26-
image,
27-
<%= @settings[:default_box].to_json %>,
28-
<%= @settings[:ratio] %>,
29-
[
30-
"<%= params[:crop_from_form_field_id] %>",
31-
"<%= params[:crop_size_form_field_id] %>",
32-
],
33-
<%= @element.id %>
34-
);
25+
new ImageCropper(image, <%= @settings.merge(
26+
crop_from_form_field_id: params[:crop_from_form_field_id],
27+
crop_size_form_field_id: params[:crop_size_form_field_id],
28+
element_id: @element.id
29+
).to_json %>);
3530
</script>
3631
<% end %>

spec/javascript/alchemy_admin/image_cropper.spec.js

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ describe("ImageCropper", () => {
1515

1616
it("is sets initial data", () => {
1717
const image = new Image()
18-
const cropper = new ImageCropper(
19-
image,
20-
{},
21-
1,
22-
["crop_from", "crop_size"],
23-
"element_id"
24-
)
18+
const cropper = new ImageCropper(image, {
19+
default_box: {},
20+
ratio: 1,
21+
crop_from_form_field_id: "crop_from",
22+
crop_size_form_field_id: "crop_size",
23+
element_id: "element_id"
24+
})
2525
expect(cropper.cropperOptions["data"]).toEqual({
2626
height: 480,
2727
width: 1200,
@@ -32,26 +32,26 @@ describe("ImageCropper", () => {
3232

3333
it("does not set min crop size", () => {
3434
const image = new Image()
35-
const cropper = new ImageCropper(
36-
image,
37-
{},
38-
1,
39-
["crop_from", "crop_size"],
40-
"element_id"
41-
)
35+
const cropper = new ImageCropper(image, {
36+
default_box: {},
37+
ratio: 1,
38+
crop_from_form_field_id: "crop_from",
39+
crop_size_form_field_id: "crop_size",
40+
element_id: "element_id"
41+
})
4242
expect(cropper.cropperOptions["minCropBoxWidth"]).toBeUndefined()
4343
expect(cropper.cropperOptions["minCropBoxHeight"]).toBeUndefined()
4444
})
4545

4646
it("prevents CORS issues", () => {
4747
const image = new Image()
48-
const cropper = new ImageCropper(
49-
image,
50-
{},
51-
1,
52-
["crop_from", "crop_size"],
53-
"element_id"
54-
)
48+
const cropper = new ImageCropper(image, {
49+
default_box: {},
50+
ratio: 1,
51+
crop_from_form_field_id: "crop_from",
52+
crop_size_form_field_id: "crop_size",
53+
element_id: "element_id"
54+
})
5555
expect(cropper.cropperOptions["checkCrossOrigin"]).toBe(false)
5656
expect(cropper.cropperOptions["checkOrientation"]).toBe(false)
5757
})

0 commit comments

Comments
 (0)