Skip to content

Commit 313fd4b

Browse files
committed
resolve conflicts
2 parents 1fea179 + b3adb3e commit 313fd4b

File tree

11 files changed

+180
-41
lines changed

11 files changed

+180
-41
lines changed

__TESTS_BUNDLE_SIZE__/bundleSizeTestCases.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import importFromPackage from "./utils/stringGenerators/importFromPackage";
1515
const bundleSizeTestCases:ITestCase[] = [
1616
{
1717
name: 'Tests CloudinaryImage with Resize',
18-
sizeLimitInKB: 19,
18+
sizeLimitInKB: 20,
1919
importsArray: [
2020
importFromDist('assets/CloudinaryImage', 'CloudinaryImage'),
2121
importFromDist('instance/Cloudinary', 'Cloudinary'),
@@ -24,7 +24,7 @@ const bundleSizeTestCases:ITestCase[] = [
2424
},
2525
{
2626
name: 'Tests CloudinaryImage with Resize and Adjust',
27-
sizeLimitInKB: 23,
27+
sizeLimitInKB: 24,
2828
importsArray: [
2929
importFromDist('assets/CloudinaryImage', 'CloudinaryImage'),
3030
importFromDist('instance/Cloudinary', 'Cloudinary'),
@@ -34,7 +34,7 @@ const bundleSizeTestCases:ITestCase[] = [
3434
},
3535
{
3636
name: 'Tests CloudinaryImage with Resize, Adjust and Border',
37-
sizeLimitInKB: 23,
37+
sizeLimitInKB: 24,
3838
importsArray: [
3939
importFromDist('assets/CloudinaryImage', 'CloudinaryImage'),
4040
importFromDist('instance/Cloudinary', 'Cloudinary'),
@@ -45,7 +45,7 @@ const bundleSizeTestCases:ITestCase[] = [
4545
},
4646
{
4747
name: 'Tests CloudinaryImage image with Resize, adjust and delivery',
48-
sizeLimitInKB: 24,
48+
sizeLimitInKB: 25,
4949
importsArray: [
5050
importFromDist('assets/CloudinaryImage', 'CloudinaryImage'),
5151
importFromDist('instance/Cloudinary', 'Cloudinary'),
@@ -56,7 +56,7 @@ const bundleSizeTestCases:ITestCase[] = [
5656
},
5757
{
5858
name: 'Tests Overlay imports',
59-
sizeLimitInKB: 20,
59+
sizeLimitInKB: 21,
6060
importsArray: [
6161
importFromDist('assets/CloudinaryImage', 'CloudinaryImage'),
6262
importFromDist('actions/overlay', 'Overlay'),

__TESTS__/unit/fromJson/resize.fromJson.test.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ describe('resize.fromJson', () => {
77
{actionType: 'fit', dimensions: {height: 200, aspectRatio: '16:9'}, relative: true},
88
{actionType: 'limitFit', dimensions: {height: 200, aspectRatio: 'ignore_aspect_ratio'}, relative: true},
99
{actionType: 'minimumFit', dimensions: {width: 100}, regionRelative: true},
10-
{actionType: 'crop', dimensions: {width: 100}, regionRelative: true, gravity: 'north_east', y: 3, zoom: 7},
11-
{actionType: 'fill', dimensions: {width: 100}, relative: true, gravity: 'south', x: 4, y: 5},
12-
{actionType: 'limitFill', dimensions: {width: 100}, relative: true, gravity: 'south', x: 4, y: 5},
13-
{actionType: 'thumbnail', dimensions: {width: 100}, relative: true, gravity: 'south', zoom: 4},
14-
{actionType: 'pad', dimensions: {width: 100}, relative: true, gravity: 'south', x: 3, y:4, background: 'white'},
15-
{actionType: 'limitPad', dimensions: {width: 100}, relative: true, gravity: 'south', x: 3, y:4, background: 'white'},
16-
{actionType: 'minimumPad', dimensions: {width: 100}, relative: true, gravity: 'south', x: 3, y:4, background: 'white'},
10+
{actionType: 'crop', dimensions: {width: 100}, regionRelative: true, gravity: {gravityType: 'direction', compass: 'north_east'}, y: 3, zoom: 7},
11+
{actionType: 'fill', dimensions: {width: 100}, relative: true, gravity: {gravityType: 'ocr'}, x: 4, y: 5},
12+
{actionType: 'limitFill', dimensions: {width: 100}, relative: true, gravity: {gravityType: 'direction', compass: 'south'}, x: 4, y: 5},
13+
{actionType: 'thumbnail', dimensions: {width: 100}, relative: true, gravity: {gravityType: 'direction', compass: 'south'}, zoom: 4},
14+
{actionType: 'pad', dimensions: {width: 100}, relative: true, gravity: {gravityType: 'direction', compass: 'south'}, x: 3, y:4, background: 'white'},
15+
{actionType: 'limitPad', dimensions: {width: 100}, relative: true, gravity: {gravityType: 'direction', compass: 'south'}, x: 3, y:4, background: 'white'},
16+
{actionType: 'minimumPad', dimensions: {width: 100}, relative: true, gravity: {gravityType: 'direction', compass: 'south'}, x: 3, y:4, background: 'white'},
1717
]);
1818

1919
expect(transformation.toString()).toStrictEqual([
@@ -22,7 +22,7 @@ describe('resize.fromJson', () => {
2222
'c_limit,fl_ignore_aspect_ratio,fl_relative,h_200',
2323
'c_mfit,fl_region_relative,w_100',
2424
'c_crop,fl_region_relative,g_north_east,w_100,y_3,z_7',
25-
'c_fill,fl_relative,g_south,w_100,x_4,y_5',
25+
'c_fill,fl_relative,g_ocr_text,w_100,x_4,y_5',
2626
'c_lfill,fl_relative,g_south,w_100,x_4,y_5',
2727
'c_thumb,fl_relative,g_south,w_100,z_4',
2828
'b_white,c_pad,fl_relative,g_south,w_100,x_3,y_4',

__TESTS__/unit/toJson/resize.toJson.test.ts

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import {Transformation} from '../../../src';
22
import {Resize} from "../../../src/actions";
33
import {AspectRatio} from "../../../src/qualifiers";
4+
import {Gravity} from "../../../src/qualifiers";
5+
import {FocusOn} from "../../../src/qualifiers/focusOn";
46

57
describe('resize.toJson()', () => {
68
it('scale', () => {
@@ -28,7 +30,8 @@ describe('resize.toJson()', () => {
2830
.addAction(Resize.thumbnail(100).gravity('south').zoom(4))
2931
.addAction(Resize.pad(100).gravity('south').offsetX(3).offsetY(4))
3032
.addAction(Resize.limitPad(100).gravity('south').offsetX(3).offsetY(4))
31-
.addAction(Resize.minimumPad(100).gravity('south').offsetX(3).offsetY(4));
33+
.addAction(Resize.minimumPad(100).gravity('south').offsetX(3).offsetY(4))
34+
.addAction(Resize.fill(100, 200).gravity(Gravity.focusOn(FocusOn.ocr())));
3235
expect(transformation.toJson()).toStrictEqual([
3336
{
3437
"actionType": "scale",
@@ -66,7 +69,10 @@ describe('resize.toJson()', () => {
6669
},
6770
x: 3,
6871
y: 4,
69-
gravity: 'north_east',
72+
gravity: {
73+
compass: "north_east",
74+
gravityType: "direction"
75+
},
7076
zoom: 10
7177
},
7278
{
@@ -76,7 +82,10 @@ describe('resize.toJson()', () => {
7682
},
7783
x: 3,
7884
y: 4,
79-
gravity: 'south'
85+
gravity: {
86+
compass: "south",
87+
gravityType: "direction"
88+
}
8089
},
8190
{
8291
"actionType": "limitFill",
@@ -85,22 +94,31 @@ describe('resize.toJson()', () => {
8594
},
8695
x: 3,
8796
y: 4,
88-
gravity: 'south'
97+
gravity: {
98+
compass: "south",
99+
gravityType: "direction"
100+
}
89101
},
90102
{
91103
"actionType": "thumbnail",
92104
"dimensions": {
93105
"width": 100
94106
},
95-
gravity: 'south',
107+
gravity: {
108+
compass: "south",
109+
gravityType: "direction"
110+
},
96111
zoom: 4
97112
},
98113
{
99114
"actionType": "pad",
100115
"dimensions": {
101116
"width": 100
102117
},
103-
gravity: 'south',
118+
gravity: {
119+
compass: "south",
120+
gravityType: "direction"
121+
},
104122
x: 3,
105123
y: 4
106124
},
@@ -109,7 +127,10 @@ describe('resize.toJson()', () => {
109127
"dimensions": {
110128
"width": 100
111129
},
112-
gravity: 'south',
130+
gravity: {
131+
compass: "south",
132+
gravityType: "direction"
133+
},
113134
x: 3,
114135
y: 4
115136
},
@@ -118,9 +139,22 @@ describe('resize.toJson()', () => {
118139
"dimensions": {
119140
"width": 100
120141
},
121-
gravity: 'south',
142+
gravity: {
143+
compass: "south",
144+
gravityType: "direction"
145+
},
122146
x: 3,
123147
y: 4
148+
},
149+
{
150+
actionType: "fill",
151+
dimensions: {
152+
height: 200,
153+
width: 100,
154+
},
155+
gravity: {
156+
gravityType: "ocr",
157+
},
124158
}
125159
]);
126160
});

public/progress/cloudinary-base-progress-report.html

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

src/actions/resize/ResizeAdvancedAction.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,36 @@ import {ResizeSimpleAction} from "./ResizeSimpleAction.js";
22
import {IGravity} from "../../qualifiers/gravity/GravityQualifier.js";
33
import {Qualifier} from "../../internal/qualifier/Qualifier.js";
44
import {IActionModel} from "../../internal/models/IActionModel.js";
5-
6-
export type IShortenGravity = 'auto' | 'north' | 'center' | 'east' | 'west' | 'south' | 'north_west' | 'south_east' | 'south_west' | 'north_east';
5+
import {createGravityModel} from "../../internal/models/createGravityModel.js";
6+
import {createGravityFromModel} from "../../internal/models/createGravityFromModel.js";
7+
import {IResizeAdvancedActionModel} from "../../internal/models/IResizeAdvancedActionModel.js";
78

89
/**
910
* @description Defines an advanced resize.
1011
* @extends Actions.Resize.ResizeSimpleAction
1112
* @memberOf Actions.Resize
1213
* @see Visit {@link Actions.Resize| Resize} for examples
1314
*/
14-
class ResizeAdvancedAction extends ResizeSimpleAction {
15+
class ResizeAdvancedAction extends ResizeSimpleAction{
16+
protected _actionModel: IResizeAdvancedActionModel;
17+
1518
/**
1619
* @description Which part of the original image to include.
1720
* @param {Qualifiers.Gravity} gravity
1821
*/
19-
gravity(gravity: IGravity | IShortenGravity): this {
20-
if(typeof gravity === "string") {
21-
this._actionModel.gravity = gravity;
22-
return this.addQualifier(new Qualifier('g', gravity));
23-
}
22+
gravity(gravity: IGravity): this {
23+
this._actionModel.gravity = createGravityModel(gravity);
24+
const gravityQualifier = typeof gravity === "string" ? new Qualifier('g', gravity) : gravity;
2425

25-
this._actionModel.gravity = gravity.qualifierValue;
26-
27-
return this.addQualifier(gravity);
26+
return this.addQualifier(gravityQualifier);
2827
}
2928

3029
static fromJson(actionModel: IActionModel): ResizeAdvancedAction {
3130
const result = super.fromJson.apply(this, [actionModel]);
32-
actionModel.gravity && result.gravity(actionModel.gravity);
31+
32+
if (actionModel.gravity) {
33+
result.gravity(createGravityFromModel(actionModel.gravity));
34+
}
3335

3436
return result;
3537
}

src/actions/resize/ResizeSimpleAction.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import {ACTION_TYPE_TO_CROP_MODE_MAP, CROP_MODE_TO_ACTION_TYPE_MAP} from "../../
1717
* @see Visit {@link Actions.Resize| Resize} for examples
1818
*/
1919
class ResizeSimpleAction extends Action {
20-
protected _actionModel: IResizeSimpleActionModel = {dimensions: {}};
20+
protected _actionModel: IResizeSimpleActionModel;
2121

2222
/**
2323
* @param {string} cropType
@@ -26,7 +26,7 @@ class ResizeSimpleAction extends Action {
2626
*/
2727
constructor(cropType: string, cropWidth: number | string, cropHeight?: number | string) {
2828
super();
29-
29+
this._actionModel = {dimensions: {}};
3030
this._actionModel.actionType = CROP_MODE_TO_ACTION_TYPE_MAP[cropType] || cropType;
3131
this.addQualifier(new Qualifier('c', cropType));
3232
cropWidth && this.width(cropWidth);
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import {IResizeSimpleActionModel} from "./IResizeSimpleActionModel.js";
2+
import {IGravityModel} from "./createGravityModel.js";
23

34
interface IResizeAdvancedActionModel extends IResizeSimpleActionModel{
4-
gravity: string;
5+
gravity: IGravityModel;
56
}
67

78
export {IResizeAdvancedActionModel};
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import {ICompassGravityModel, IGravityModel, IOcrGravityModel} from "./createGravityModel.js";
2+
import {IGravity} from "../../qualifiers/gravity/GravityQualifier.js";
3+
import {focusOn} from "../../qualifiers/gravity.js";
4+
import {ocr} from "../../qualifiers/focusOn.js";
5+
6+
/**
7+
* Validates that gravityModel is an ICompassGravityModel
8+
* @param gravityModel
9+
*/
10+
function isCompassGravityModel(gravityModel: IGravityModel): gravityModel is ICompassGravityModel {
11+
return gravityModel.gravityType === 'direction';
12+
}
13+
14+
/**
15+
* Validates that gravityModel is an IOcrGravityModel
16+
* @param gravityModel
17+
*/
18+
function isOcrGravityModel(gravityModel: IGravityModel): gravityModel is IOcrGravityModel {
19+
return gravityModel.gravityType === 'ocr';
20+
}
21+
22+
/**
23+
* Create gravity instance from given gravity model
24+
* @param gravityModel
25+
*/
26+
function createGravityFromModel(gravityModel: IGravityModel): IGravity{
27+
if (isCompassGravityModel(gravityModel)){
28+
return gravityModel.compass;
29+
}
30+
31+
if (isOcrGravityModel(gravityModel)) {
32+
return focusOn(ocr());
33+
}
34+
}
35+
36+
export {createGravityFromModel};
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import {IGravity} from "../../qualifiers/gravity/GravityQualifier.js";
2+
import {ICompassGravity} from "../../qualifiers/gravity/compassGravity/CompassGravity.js";
3+
4+
export interface IGravityModel{
5+
gravityType?: string;
6+
}
7+
8+
export interface ICompassGravityModel extends IGravityModel{
9+
compass: ICompassGravity
10+
}
11+
12+
export interface IOcrGravityModel extends IGravityModel{}
13+
14+
/**
15+
* Validate that given val is an ICompassGravity
16+
* @param val
17+
*/
18+
function isICompassGravity(val: unknown): val is ICompassGravity{
19+
return ['north', 'center', 'east', 'west', 'south', 'north_west', 'south_east', 'south_west', 'north_east'].includes(val as string);
20+
}
21+
22+
/**
23+
* Creates a compassGravity model
24+
* @param compass
25+
*/
26+
function createCompassGravityModel(compass: ICompassGravity): ICompassGravityModel{
27+
return {
28+
compass,
29+
gravityType: 'direction'
30+
};
31+
}
32+
33+
/**
34+
* Validate that given string represents an ocr gravity
35+
* @param gravity
36+
*/
37+
function isIOcrGravity(gravity: string): boolean {
38+
return gravity === 'ocr_text';
39+
}
40+
41+
/**
42+
* Creates an ocr gravity model
43+
*/
44+
function createOcrGravityModel(): IOcrGravityModel {
45+
return {
46+
gravityType: 'ocr'
47+
};
48+
}
49+
50+
/**
51+
* Create a model of given gravity
52+
* @param gravity
53+
*/
54+
export function createGravityModel(gravity: IGravity): IGravityModel {
55+
const gravityString = `${(typeof gravity === "string" ? gravity : gravity.qualifierValue)}`;
56+
57+
if (isICompassGravity(gravityString)) {
58+
return createCompassGravityModel(gravityString);
59+
}
60+
61+
if (isIOcrGravity(gravityString)) {
62+
return createOcrGravityModel();
63+
}
64+
}

src/qualifiers/gravity/GravityQualifier.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import {Qualifier} from "../../internal/qualifier/Qualifier.js";
22
import {QualifierValue} from "../../internal/qualifier/QualifierValue.js";
3-
import {CompassGravity} from "./compassGravity/CompassGravity.js";
3+
import {CompassGravity, ICompassGravity} from "./compassGravity/CompassGravity.js";
44
import {AutoGravity} from "./autoGravity/AutoGravity.js";
55
import {FocusOnGravity} from "./focusOnGravity/FocusOnGravity.js";
66
import {FocusOnValue} from "../focusOn.js";
77
import {AutoFocus} from "../autoFocus.js";
88
import {CompassQualifier} from "./qualifiers/compass/CompassQualifier.js";
99
import {XYCenterGravity} from "./xyCenterGravity/XYCenterGravity.js";
1010

11-
export type IGravity = CompassGravity | AutoGravity | FocusOnGravity | XYCenterGravity;
11+
export type IGravityString = 'auto' | ICompassGravity;
12+
export type IGravity = CompassGravity | AutoGravity | FocusOnGravity | XYCenterGravity | IGravityString;
1213
export type IGravityValue = CompassQualifier | FocusOnValue | AutoFocus;
1314

14-
1515
/**
1616
* @memberOf Gravity.GravityQualifier
1717
* @extends {SDK.Qualifier}

0 commit comments

Comments
 (0)