ngx-ratio-image 0.0.9 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/ratio-image/ratio-image.component.mjs +77 -0
- package/esm2022/lib/ratio-image.module.mjs +18 -0
- package/esm2022/ngx-ratio-image.mjs +5 -0
- package/esm2022/public-api.mjs +6 -0
- package/fesm2022/ngx-ratio-image.mjs +103 -0
- package/fesm2022/ngx-ratio-image.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/ratio-image/ratio-image.component.d.ts +31 -0
- package/lib/ratio-image.module.d.ts +8 -0
- package/package.json +44 -88
- package/{projects/ngx-ratio-image/src/public-api.ts → public-api.d.ts} +0 -4
- package/.editorconfig +0 -16
- package/.eslintrc.json +0 -38
- package/.github/workflows/node.js.yml +0 -38
- package/.github/workflows/npm-publish.yml +0 -42
- package/.nvmrc +0 -1
- package/.prettierignore +0 -3
- package/.run/lint.run.xml +0 -12
- package/.run/test.run.xml +0 -12
- package/.vscode/extensions.json +0 -4
- package/.vscode/launch.json +0 -20
- package/.vscode/tasks.json +0 -42
- package/angular.json +0 -144
- package/ng-package.json +0 -8
- package/prettier.config.js +0 -16
- package/projects/ngx-ratio-image/.eslintrc.json +0 -31
- package/projects/ngx-ratio-image/LICENSE +0 -21
- package/projects/ngx-ratio-image/README.md +0 -27
- package/projects/ngx-ratio-image/ng-package.json +0 -7
- package/projects/ngx-ratio-image/package.json +0 -25
- package/projects/ngx-ratio-image/src/lib/ratio-image/ratio-image.component.html +0 -42
- package/projects/ngx-ratio-image/src/lib/ratio-image/ratio-image.component.spec.ts +0 -21
- package/projects/ngx-ratio-image/src/lib/ratio-image/ratio-image.component.ts +0 -75
- package/projects/ngx-ratio-image/src/lib/ratio-image.module.ts +0 -10
- package/projects/ngx-ratio-image/tsconfig.lib.json +0 -12
- package/projects/ngx-ratio-image/tsconfig.lib.prod.json +0 -10
- package/projects/ngx-ratio-image/tsconfig.spec.json +0 -9
- package/projects/ratio-image-app/.eslintrc.json +0 -31
- package/projects/ratio-image-app/src/app/app-routing.module.ts +0 -26
- package/projects/ratio-image-app/src/app/app.component.html +0 -14
- package/projects/ratio-image-app/src/app/app.component.scss +0 -25
- package/projects/ratio-image-app/src/app/app.component.spec.ts +0 -38
- package/projects/ratio-image-app/src/app/app.component.ts +0 -19
- package/projects/ratio-image-app/src/app/app.module.ts +0 -33
- package/projects/ratio-image-app/src/app/header.component.html +0 -10
- package/projects/ratio-image-app/src/app/header.component.scss +0 -25
- package/projects/ratio-image-app/src/app/header.component.spec.ts +0 -35
- package/projects/ratio-image-app/src/app/header.component.ts +0 -13
- package/projects/ratio-image-app/src/app/home/home-routing.module.ts +0 -17
- package/projects/ratio-image-app/src/app/home/home.component.html +0 -24
- package/projects/ratio-image-app/src/app/home/home.component.scss +0 -0
- package/projects/ratio-image-app/src/app/home/home.component.spec.ts +0 -24
- package/projects/ratio-image-app/src/app/home/home.component.ts +0 -12
- package/projects/ratio-image-app/src/app/home/home.module.ts +0 -12
- package/projects/ratio-image-app/src/app/interactive/interactive-routing.module.ts +0 -17
- package/projects/ratio-image-app/src/app/interactive/interactive.component.html +0 -40
- package/projects/ratio-image-app/src/app/interactive/interactive.component.scss +0 -0
- package/projects/ratio-image-app/src/app/interactive/interactive.component.spec.ts +0 -43
- package/projects/ratio-image-app/src/app/interactive/interactive.component.ts +0 -32
- package/projects/ratio-image-app/src/app/interactive/interactive.module.ts +0 -31
- package/projects/ratio-image-app/src/assets/.gitkeep +0 -0
- package/projects/ratio-image-app/src/assets/1to1.jpg +0 -0
- package/projects/ratio-image-app/src/assets/3to4.jpg +0 -0
- package/projects/ratio-image-app/src/assets/4to3.jpg +0 -0
- package/projects/ratio-image-app/src/favicon.ico +0 -0
- package/projects/ratio-image-app/src/index.html +0 -16
- package/projects/ratio-image-app/src/main.ts +0 -7
- package/projects/ratio-image-app/src/styles.scss +0 -15
- package/projects/ratio-image-app/tsconfig.app.json +0 -10
- package/projects/ratio-image-app/tsconfig.spec.json +0 -9
- package/tsconfig.json +0 -33
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
export class RatioImageComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.src = '';
|
|
7
|
+
this.width = 0;
|
|
8
|
+
this.height = 0;
|
|
9
|
+
this.debug = false;
|
|
10
|
+
this.imageWidth = 0;
|
|
11
|
+
this.imageHeight = 0;
|
|
12
|
+
this.naturalWidth = 0;
|
|
13
|
+
this.naturalHeight = 0;
|
|
14
|
+
this.imageLeft = 0;
|
|
15
|
+
this.imageTop = 0;
|
|
16
|
+
this.ratioImage = 1;
|
|
17
|
+
this.ratioBox = 1;
|
|
18
|
+
this.scale = 1;
|
|
19
|
+
if (this.debug)
|
|
20
|
+
console.log('constructor', this.src);
|
|
21
|
+
}
|
|
22
|
+
ngAfterViewInit() {
|
|
23
|
+
if (this.debug)
|
|
24
|
+
console.log('ngAfterViewInit', this.src, this.width, this.height);
|
|
25
|
+
}
|
|
26
|
+
onImageLoad(img) {
|
|
27
|
+
if (this.debug)
|
|
28
|
+
console.log('onImageLoad ', img);
|
|
29
|
+
if (img) {
|
|
30
|
+
this.naturalWidth = img.naturalWidth;
|
|
31
|
+
this.naturalHeight = img.naturalHeight;
|
|
32
|
+
if (this.width > 0 && this.height > 0) {
|
|
33
|
+
this.calculate();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
ngOnChanges() {
|
|
38
|
+
this.calculate();
|
|
39
|
+
}
|
|
40
|
+
calculate() {
|
|
41
|
+
this.ratioImage = this.naturalWidth / this.naturalHeight;
|
|
42
|
+
this.ratioBox = this.width / this.height;
|
|
43
|
+
if (this.ratioBox > this.ratioImage) {
|
|
44
|
+
this.scale = this.height / this.naturalHeight;
|
|
45
|
+
this.imageLeft = (this.width - this.naturalWidth * this.scale) / 2;
|
|
46
|
+
}
|
|
47
|
+
else if (this.ratioBox < this.ratioImage) {
|
|
48
|
+
this.scale = this.width / this.naturalWidth;
|
|
49
|
+
this.imageTop = (this.height - this.naturalHeight * this.scale) / 2;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
this.scale = this.width / this.naturalWidth;
|
|
53
|
+
this.imageLeft = 0;
|
|
54
|
+
this.imageTop = 0;
|
|
55
|
+
}
|
|
56
|
+
if (this.debug)
|
|
57
|
+
console.log('calculate', this.src, this.naturalWidth + ' x ' + this.naturalHeight);
|
|
58
|
+
}
|
|
59
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: RatioImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: RatioImageComponent, selector: "ngx-ratio-image", inputs: { src: "src", width: "width", height: "height", debug: "debug" }, usesOnChanges: true, ngImport: i0, template: "<div\n\t[style.position]=\"'relative'\"\n\t[style.z-index]=\"2\"\n\t[style.border]=\"debug ? '1px solid red' : ''\"\n\t[style.width]=\"width + 'px'\"\n\t[style.height]=\"height + 'px'\"\n>\n\t<img\n\t\tclass=\"img-background\"\n\t\t#img\n\t\t[src]=\"src\"\n\t\t[style.position]=\"'absolute'\"\n\t\t[style.z-index]=\"1\"\n\t\t[style.filter]=\"'blur(5px)'\"\n\t\t[style.opacity]=\"0.5\"\n\t\t[width]=\"width\"\n\t\t[height]=\"height\"\n\t\t[style.overflow]=\"'hidden'\"\n\t\t(load)=\"onImageLoad(img)\"\n\t\talt=\"\"\n\t/>\n\t<img\n\t\tclass=\"img-main\"\n\t\t[src]=\"src\"\n\t\t[width]=\"naturalWidth * scale\"\n\t\t[height]=\"naturalHeight * scale\"\n\t\t[style.position]=\"'absolute'\"\n\t\t[style.z-index]=\"2\"\n\t\t[style.left]=\"imageLeft + 'px'\"\n\t\t[style.top]=\"imageTop + 'px'\"\n\t\talt=\"\"\n\t/>\n</div>\n<div *ngIf=\"debug\" style=\"margin-top: 10px\">\n\t<div>Container: {{ width }} x {{ height }}</div>\n\t<div>Natural: {{ naturalWidth }} x {{ naturalHeight }}</div>\n\t<div>Pos: {{ imageLeft }} , {{ imageTop }}</div>\n\t<div>Scale: {{ scale | number: '0.0-2' }}</div>\n\t<div>\n\t\tRatio Box , Image: {{ this.ratioBox | number: '0.0-2' }} : 1 , {{ this.ratioImage | number: '0.0-2' }} : 1\n\t</div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] }); }
|
|
61
|
+
}
|
|
62
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: RatioImageComponent, decorators: [{
|
|
63
|
+
type: Component,
|
|
64
|
+
args: [{ selector: 'ngx-ratio-image', template: "<div\n\t[style.position]=\"'relative'\"\n\t[style.z-index]=\"2\"\n\t[style.border]=\"debug ? '1px solid red' : ''\"\n\t[style.width]=\"width + 'px'\"\n\t[style.height]=\"height + 'px'\"\n>\n\t<img\n\t\tclass=\"img-background\"\n\t\t#img\n\t\t[src]=\"src\"\n\t\t[style.position]=\"'absolute'\"\n\t\t[style.z-index]=\"1\"\n\t\t[style.filter]=\"'blur(5px)'\"\n\t\t[style.opacity]=\"0.5\"\n\t\t[width]=\"width\"\n\t\t[height]=\"height\"\n\t\t[style.overflow]=\"'hidden'\"\n\t\t(load)=\"onImageLoad(img)\"\n\t\talt=\"\"\n\t/>\n\t<img\n\t\tclass=\"img-main\"\n\t\t[src]=\"src\"\n\t\t[width]=\"naturalWidth * scale\"\n\t\t[height]=\"naturalHeight * scale\"\n\t\t[style.position]=\"'absolute'\"\n\t\t[style.z-index]=\"2\"\n\t\t[style.left]=\"imageLeft + 'px'\"\n\t\t[style.top]=\"imageTop + 'px'\"\n\t\talt=\"\"\n\t/>\n</div>\n<div *ngIf=\"debug\" style=\"margin-top: 10px\">\n\t<div>Container: {{ width }} x {{ height }}</div>\n\t<div>Natural: {{ naturalWidth }} x {{ naturalHeight }}</div>\n\t<div>Pos: {{ imageLeft }} , {{ imageTop }}</div>\n\t<div>Scale: {{ scale | number: '0.0-2' }}</div>\n\t<div>\n\t\tRatio Box , Image: {{ this.ratioBox | number: '0.0-2' }} : 1 , {{ this.ratioImage | number: '0.0-2' }} : 1\n\t</div>\n</div>\n" }]
|
|
65
|
+
}], ctorParameters: function () { return []; }, propDecorators: { src: [{
|
|
66
|
+
type: Input,
|
|
67
|
+
args: [{ required: true }]
|
|
68
|
+
}], width: [{
|
|
69
|
+
type: Input,
|
|
70
|
+
args: [{ required: true }]
|
|
71
|
+
}], height: [{
|
|
72
|
+
type: Input,
|
|
73
|
+
args: [{ required: true }]
|
|
74
|
+
}], debug: [{
|
|
75
|
+
type: Input
|
|
76
|
+
}] } });
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW8taW1hZ2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJhdGlvLWltYWdlL3NyYy9saWIvcmF0aW8taW1hZ2UvcmF0aW8taW1hZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJhdGlvLWltYWdlL3NyYy9saWIvcmF0aW8taW1hZ2UvcmF0aW8taW1hZ2UuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDOzs7QUFjM0UsTUFBTSxPQUFPLG1CQUFtQjtJQW1CL0I7UUFsQmtDLFFBQUcsR0FBRyxFQUFFLENBQUM7UUFDVCxVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUM3QixVQUFLLEdBQUcsS0FBSyxDQUFDO1FBRXZCLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUVoQixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUVsQixjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBRWIsVUFBSyxHQUFHLENBQUMsQ0FBQztRQUdoQixJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxlQUFlO1FBQ2QsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVU7UUFDckIsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELElBQUksR0FBRyxFQUFFO1lBQ1IsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQztZQUN2QyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN0QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDakI7U0FDRDtJQUNGLENBQUM7SUFFRCxXQUFXO1FBQ1YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxTQUFTO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3pELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRXpDLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzlDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuRTthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzNDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQzVDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwRTthQUFNO1lBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7U0FDbEI7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEcsQ0FBQzs4R0EzRFcsbUJBQW1CO2tHQUFuQixtQkFBbUIsc0pDZGhDLDZzQ0EwQ0E7OzJGRDVCYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0MsaUJBQWlCOzBFQUtPLEdBQUc7c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNTLEtBQUs7c0JBQXRDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNTLE1BQU07c0JBQXZDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNULEtBQUs7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW50ZXJmYWNlIEltYWdlIHtcblx0Y2xpZW50V2lkdGg6IG51bWJlcjtcblx0Y2xpZW50SGVpZ2h0OiBudW1iZXI7XG5cdG5hdHVyYWxXaWR0aDogbnVtYmVyO1xuXHRuYXR1cmFsSGVpZ2h0OiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25neC1yYXRpby1pbWFnZScsXG5cdHRlbXBsYXRlVXJsOiAncmF0aW8taW1hZ2UuY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZXM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIFJhdGlvSW1hZ2VDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuXHRASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWMgc3JjID0gJyc7XG5cdEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyB3aWR0aCA9IDA7XG5cdEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpYyBoZWlnaHQgPSAwO1xuXHRASW5wdXQoKSBwdWJsaWMgZGVidWcgPSBmYWxzZTtcblxuXHRwdWJsaWMgaW1hZ2VXaWR0aCA9IDA7XG5cdHB1YmxpYyBpbWFnZUhlaWdodCA9IDA7XG5cblx0cHVibGljIG5hdHVyYWxXaWR0aCA9IDA7XG5cdHB1YmxpYyBuYXR1cmFsSGVpZ2h0ID0gMDtcblxuXHRwdWJsaWMgaW1hZ2VMZWZ0ID0gMDtcblx0cHVibGljIGltYWdlVG9wID0gMDtcblx0cHVibGljIHJhdGlvSW1hZ2UgPSAxO1xuXHRwdWJsaWMgcmF0aW9Cb3ggPSAxO1xuXG5cdHB1YmxpYyBzY2FsZSA9IDE7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0aWYgKHRoaXMuZGVidWcpIGNvbnNvbGUubG9nKCdjb25zdHJ1Y3RvcicsIHRoaXMuc3JjKTtcblx0fVxuXG5cdG5nQWZ0ZXJWaWV3SW5pdCgpIHtcblx0XHRpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5sb2coJ25nQWZ0ZXJWaWV3SW5pdCcsIHRoaXMuc3JjLCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cdH1cblxuXHRvbkltYWdlTG9hZChpbWc6IEltYWdlKSB7XG5cdFx0aWYgKHRoaXMuZGVidWcpIGNvbnNvbGUubG9nKCdvbkltYWdlTG9hZCAnLCBpbWcpO1xuXHRcdGlmIChpbWcpIHtcblx0XHRcdHRoaXMubmF0dXJhbFdpZHRoID0gaW1nLm5hdHVyYWxXaWR0aDtcblx0XHRcdHRoaXMubmF0dXJhbEhlaWdodCA9IGltZy5uYXR1cmFsSGVpZ2h0O1xuXHRcdFx0aWYgKHRoaXMud2lkdGggPiAwICYmIHRoaXMuaGVpZ2h0ID4gMCkge1xuXHRcdFx0XHR0aGlzLmNhbGN1bGF0ZSgpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuXHRcdHRoaXMuY2FsY3VsYXRlKCk7XG5cdH1cblxuXHRwcml2YXRlIGNhbGN1bGF0ZSgpIHtcblx0XHR0aGlzLnJhdGlvSW1hZ2UgPSB0aGlzLm5hdHVyYWxXaWR0aCAvIHRoaXMubmF0dXJhbEhlaWdodDtcblx0XHR0aGlzLnJhdGlvQm94ID0gdGhpcy53aWR0aCAvIHRoaXMuaGVpZ2h0O1xuXG5cdFx0aWYgKHRoaXMucmF0aW9Cb3ggPiB0aGlzLnJhdGlvSW1hZ2UpIHtcblx0XHRcdHRoaXMuc2NhbGUgPSB0aGlzLmhlaWdodCAvIHRoaXMubmF0dXJhbEhlaWdodDtcblx0XHRcdHRoaXMuaW1hZ2VMZWZ0ID0gKHRoaXMud2lkdGggLSB0aGlzLm5hdHVyYWxXaWR0aCAqIHRoaXMuc2NhbGUpIC8gMjtcblx0XHR9IGVsc2UgaWYgKHRoaXMucmF0aW9Cb3ggPCB0aGlzLnJhdGlvSW1hZ2UpIHtcblx0XHRcdHRoaXMuc2NhbGUgPSB0aGlzLndpZHRoIC8gdGhpcy5uYXR1cmFsV2lkdGg7XG5cdFx0XHR0aGlzLmltYWdlVG9wID0gKHRoaXMuaGVpZ2h0IC0gdGhpcy5uYXR1cmFsSGVpZ2h0ICogdGhpcy5zY2FsZSkgLyAyO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNjYWxlID0gdGhpcy53aWR0aCAvIHRoaXMubmF0dXJhbFdpZHRoO1xuXHRcdFx0dGhpcy5pbWFnZUxlZnQgPSAwO1xuXHRcdFx0dGhpcy5pbWFnZVRvcCA9IDA7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZGVidWcpIGNvbnNvbGUubG9nKCdjYWxjdWxhdGUnLCB0aGlzLnNyYywgdGhpcy5uYXR1cmFsV2lkdGggKyAnIHggJyArIHRoaXMubmF0dXJhbEhlaWdodCk7XG5cdH1cbn1cbiIsIjxkaXZcblx0W3N0eWxlLnBvc2l0aW9uXT1cIidyZWxhdGl2ZSdcIlxuXHRbc3R5bGUuei1pbmRleF09XCIyXCJcblx0W3N0eWxlLmJvcmRlcl09XCJkZWJ1ZyA/ICcxcHggc29saWQgcmVkJyA6ICcnXCJcblx0W3N0eWxlLndpZHRoXT1cIndpZHRoICsgJ3B4J1wiXG5cdFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0ICsgJ3B4J1wiXG4+XG5cdDxpbWdcblx0XHRjbGFzcz1cImltZy1iYWNrZ3JvdW5kXCJcblx0XHQjaW1nXG5cdFx0W3NyY109XCJzcmNcIlxuXHRcdFtzdHlsZS5wb3NpdGlvbl09XCInYWJzb2x1dGUnXCJcblx0XHRbc3R5bGUuei1pbmRleF09XCIxXCJcblx0XHRbc3R5bGUuZmlsdGVyXT1cIidibHVyKDVweCknXCJcblx0XHRbc3R5bGUub3BhY2l0eV09XCIwLjVcIlxuXHRcdFt3aWR0aF09XCJ3aWR0aFwiXG5cdFx0W2hlaWdodF09XCJoZWlnaHRcIlxuXHRcdFtzdHlsZS5vdmVyZmxvd109XCInaGlkZGVuJ1wiXG5cdFx0KGxvYWQpPVwib25JbWFnZUxvYWQoaW1nKVwiXG5cdFx0YWx0PVwiXCJcblx0Lz5cblx0PGltZ1xuXHRcdGNsYXNzPVwiaW1nLW1haW5cIlxuXHRcdFtzcmNdPVwic3JjXCJcblx0XHRbd2lkdGhdPVwibmF0dXJhbFdpZHRoICogc2NhbGVcIlxuXHRcdFtoZWlnaHRdPVwibmF0dXJhbEhlaWdodCAqIHNjYWxlXCJcblx0XHRbc3R5bGUucG9zaXRpb25dPVwiJ2Fic29sdXRlJ1wiXG5cdFx0W3N0eWxlLnotaW5kZXhdPVwiMlwiXG5cdFx0W3N0eWxlLmxlZnRdPVwiaW1hZ2VMZWZ0ICsgJ3B4J1wiXG5cdFx0W3N0eWxlLnRvcF09XCJpbWFnZVRvcCArICdweCdcIlxuXHRcdGFsdD1cIlwiXG5cdC8+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJkZWJ1Z1wiIHN0eWxlPVwibWFyZ2luLXRvcDogMTBweFwiPlxuXHQ8ZGl2PkNvbnRhaW5lcjoge3sgd2lkdGggfX0geCB7eyBoZWlnaHQgfX08L2Rpdj5cblx0PGRpdj5OYXR1cmFsOiB7eyBuYXR1cmFsV2lkdGggfX0geCB7eyBuYXR1cmFsSGVpZ2h0IH19PC9kaXY+XG5cdDxkaXY+UG9zOiB7eyBpbWFnZUxlZnQgfX0gLCB7eyBpbWFnZVRvcCB9fTwvZGl2PlxuXHQ8ZGl2PlNjYWxlOiB7eyBzY2FsZSB8IG51bWJlcjogJzAuMC0yJyB9fTwvZGl2PlxuXHQ8ZGl2PlxuXHRcdFJhdGlvIEJveCAsIEltYWdlOiB7eyB0aGlzLnJhdGlvQm94IHwgbnVtYmVyOiAnMC4wLTInIH19IDogMSAsIHt7IHRoaXMucmF0aW9JbWFnZSB8IG51bWJlcjogJzAuMC0yJyB9fSA6IDFcblx0PC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { RatioImageComponent } from './ratio-image/ratio-image.component';
|
|
3
|
+
import { DecimalPipe, NgIf } from '@angular/common';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class RatioImageModule {
|
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: RatioImageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
7
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.2", ngImport: i0, type: RatioImageModule, declarations: [RatioImageComponent], imports: [NgIf, DecimalPipe], exports: [RatioImageComponent] }); }
|
|
8
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: RatioImageModule }); }
|
|
9
|
+
}
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: RatioImageModule, decorators: [{
|
|
11
|
+
type: NgModule,
|
|
12
|
+
args: [{
|
|
13
|
+
declarations: [RatioImageComponent],
|
|
14
|
+
imports: [NgIf, DecimalPipe],
|
|
15
|
+
exports: [RatioImageComponent]
|
|
16
|
+
}]
|
|
17
|
+
}] });
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0aW8taW1hZ2UubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJhdGlvLWltYWdlL3NyYy9saWIvcmF0aW8taW1hZ2UubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDMUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFPcEQsTUFBTSxPQUFPLGdCQUFnQjs4R0FBaEIsZ0JBQWdCOytHQUFoQixnQkFBZ0IsaUJBSmIsbUJBQW1CLGFBQ3hCLElBQUksRUFBRSxXQUFXLGFBQ2pCLG1CQUFtQjsrR0FFakIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUw1QixRQUFRO21CQUFDO29CQUNULFlBQVksRUFBRSxDQUFDLG1CQUFtQixDQUFDO29CQUNuQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDO29CQUM1QixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDOUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmF0aW9JbWFnZUNvbXBvbmVudCB9IGZyb20gJy4vcmF0aW8taW1hZ2UvcmF0aW8taW1hZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IERlY2ltYWxQaXBlLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQE5nTW9kdWxlKHtcblx0ZGVjbGFyYXRpb25zOiBbUmF0aW9JbWFnZUNvbXBvbmVudF0sXG5cdGltcG9ydHM6IFtOZ0lmLCBEZWNpbWFsUGlwZV0sXG5cdGV4cG9ydHM6IFtSYXRpb0ltYWdlQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBSYXRpb0ltYWdlTW9kdWxlIHt9XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LXJhdGlvLWltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbmd4LXJhdGlvLWltYWdlL3NyYy9uZ3gtcmF0aW8taW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of ngx-ratio-image
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib/ratio-image/ratio-image.component';
|
|
5
|
+
export * from './lib/ratio-image.module';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1yYXRpby1pbWFnZS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYywwQkFBMEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LXJhdGlvLWltYWdlXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvcmF0aW8taW1hZ2UvcmF0aW8taW1hZ2UuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JhdGlvLWltYWdlLm1vZHVsZSc7XG4iXX0=
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { Component, Input, NgModule } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/common';
|
|
4
|
+
import { NgIf, DecimalPipe } from '@angular/common';
|
|
5
|
+
|
|
6
|
+
class RatioImageComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.src = '';
|
|
9
|
+
this.width = 0;
|
|
10
|
+
this.height = 0;
|
|
11
|
+
this.debug = false;
|
|
12
|
+
this.imageWidth = 0;
|
|
13
|
+
this.imageHeight = 0;
|
|
14
|
+
this.naturalWidth = 0;
|
|
15
|
+
this.naturalHeight = 0;
|
|
16
|
+
this.imageLeft = 0;
|
|
17
|
+
this.imageTop = 0;
|
|
18
|
+
this.ratioImage = 1;
|
|
19
|
+
this.ratioBox = 1;
|
|
20
|
+
this.scale = 1;
|
|
21
|
+
if (this.debug)
|
|
22
|
+
console.log('constructor', this.src);
|
|
23
|
+
}
|
|
24
|
+
ngAfterViewInit() {
|
|
25
|
+
if (this.debug)
|
|
26
|
+
console.log('ngAfterViewInit', this.src, this.width, this.height);
|
|
27
|
+
}
|
|
28
|
+
onImageLoad(img) {
|
|
29
|
+
if (this.debug)
|
|
30
|
+
console.log('onImageLoad ', img);
|
|
31
|
+
if (img) {
|
|
32
|
+
this.naturalWidth = img.naturalWidth;
|
|
33
|
+
this.naturalHeight = img.naturalHeight;
|
|
34
|
+
if (this.width > 0 && this.height > 0) {
|
|
35
|
+
this.calculate();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
ngOnChanges() {
|
|
40
|
+
this.calculate();
|
|
41
|
+
}
|
|
42
|
+
calculate() {
|
|
43
|
+
this.ratioImage = this.naturalWidth / this.naturalHeight;
|
|
44
|
+
this.ratioBox = this.width / this.height;
|
|
45
|
+
if (this.ratioBox > this.ratioImage) {
|
|
46
|
+
this.scale = this.height / this.naturalHeight;
|
|
47
|
+
this.imageLeft = (this.width - this.naturalWidth * this.scale) / 2;
|
|
48
|
+
}
|
|
49
|
+
else if (this.ratioBox < this.ratioImage) {
|
|
50
|
+
this.scale = this.width / this.naturalWidth;
|
|
51
|
+
this.imageTop = (this.height - this.naturalHeight * this.scale) / 2;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.scale = this.width / this.naturalWidth;
|
|
55
|
+
this.imageLeft = 0;
|
|
56
|
+
this.imageTop = 0;
|
|
57
|
+
}
|
|
58
|
+
if (this.debug)
|
|
59
|
+
console.log('calculate', this.src, this.naturalWidth + ' x ' + this.naturalHeight);
|
|
60
|
+
}
|
|
61
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: RatioImageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
62
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.2", type: RatioImageComponent, selector: "ngx-ratio-image", inputs: { src: "src", width: "width", height: "height", debug: "debug" }, usesOnChanges: true, ngImport: i0, template: "<div\n\t[style.position]=\"'relative'\"\n\t[style.z-index]=\"2\"\n\t[style.border]=\"debug ? '1px solid red' : ''\"\n\t[style.width]=\"width + 'px'\"\n\t[style.height]=\"height + 'px'\"\n>\n\t<img\n\t\tclass=\"img-background\"\n\t\t#img\n\t\t[src]=\"src\"\n\t\t[style.position]=\"'absolute'\"\n\t\t[style.z-index]=\"1\"\n\t\t[style.filter]=\"'blur(5px)'\"\n\t\t[style.opacity]=\"0.5\"\n\t\t[width]=\"width\"\n\t\t[height]=\"height\"\n\t\t[style.overflow]=\"'hidden'\"\n\t\t(load)=\"onImageLoad(img)\"\n\t\talt=\"\"\n\t/>\n\t<img\n\t\tclass=\"img-main\"\n\t\t[src]=\"src\"\n\t\t[width]=\"naturalWidth * scale\"\n\t\t[height]=\"naturalHeight * scale\"\n\t\t[style.position]=\"'absolute'\"\n\t\t[style.z-index]=\"2\"\n\t\t[style.left]=\"imageLeft + 'px'\"\n\t\t[style.top]=\"imageTop + 'px'\"\n\t\talt=\"\"\n\t/>\n</div>\n<div *ngIf=\"debug\" style=\"margin-top: 10px\">\n\t<div>Container: {{ width }} x {{ height }}</div>\n\t<div>Natural: {{ naturalWidth }} x {{ naturalHeight }}</div>\n\t<div>Pos: {{ imageLeft }} , {{ imageTop }}</div>\n\t<div>Scale: {{ scale | number: '0.0-2' }}</div>\n\t<div>\n\t\tRatio Box , Image: {{ this.ratioBox | number: '0.0-2' }} : 1 , {{ this.ratioImage | number: '0.0-2' }} : 1\n\t</div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.DecimalPipe, name: "number" }] }); }
|
|
63
|
+
}
|
|
64
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: RatioImageComponent, decorators: [{
|
|
65
|
+
type: Component,
|
|
66
|
+
args: [{ selector: 'ngx-ratio-image', template: "<div\n\t[style.position]=\"'relative'\"\n\t[style.z-index]=\"2\"\n\t[style.border]=\"debug ? '1px solid red' : ''\"\n\t[style.width]=\"width + 'px'\"\n\t[style.height]=\"height + 'px'\"\n>\n\t<img\n\t\tclass=\"img-background\"\n\t\t#img\n\t\t[src]=\"src\"\n\t\t[style.position]=\"'absolute'\"\n\t\t[style.z-index]=\"1\"\n\t\t[style.filter]=\"'blur(5px)'\"\n\t\t[style.opacity]=\"0.5\"\n\t\t[width]=\"width\"\n\t\t[height]=\"height\"\n\t\t[style.overflow]=\"'hidden'\"\n\t\t(load)=\"onImageLoad(img)\"\n\t\talt=\"\"\n\t/>\n\t<img\n\t\tclass=\"img-main\"\n\t\t[src]=\"src\"\n\t\t[width]=\"naturalWidth * scale\"\n\t\t[height]=\"naturalHeight * scale\"\n\t\t[style.position]=\"'absolute'\"\n\t\t[style.z-index]=\"2\"\n\t\t[style.left]=\"imageLeft + 'px'\"\n\t\t[style.top]=\"imageTop + 'px'\"\n\t\talt=\"\"\n\t/>\n</div>\n<div *ngIf=\"debug\" style=\"margin-top: 10px\">\n\t<div>Container: {{ width }} x {{ height }}</div>\n\t<div>Natural: {{ naturalWidth }} x {{ naturalHeight }}</div>\n\t<div>Pos: {{ imageLeft }} , {{ imageTop }}</div>\n\t<div>Scale: {{ scale | number: '0.0-2' }}</div>\n\t<div>\n\t\tRatio Box , Image: {{ this.ratioBox | number: '0.0-2' }} : 1 , {{ this.ratioImage | number: '0.0-2' }} : 1\n\t</div>\n</div>\n" }]
|
|
67
|
+
}], ctorParameters: function () { return []; }, propDecorators: { src: [{
|
|
68
|
+
type: Input,
|
|
69
|
+
args: [{ required: true }]
|
|
70
|
+
}], width: [{
|
|
71
|
+
type: Input,
|
|
72
|
+
args: [{ required: true }]
|
|
73
|
+
}], height: [{
|
|
74
|
+
type: Input,
|
|
75
|
+
args: [{ required: true }]
|
|
76
|
+
}], debug: [{
|
|
77
|
+
type: Input
|
|
78
|
+
}] } });
|
|
79
|
+
|
|
80
|
+
class RatioImageModule {
|
|
81
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: RatioImageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
82
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.2", ngImport: i0, type: RatioImageModule, declarations: [RatioImageComponent], imports: [NgIf, DecimalPipe], exports: [RatioImageComponent] }); }
|
|
83
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: RatioImageModule }); }
|
|
84
|
+
}
|
|
85
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: RatioImageModule, decorators: [{
|
|
86
|
+
type: NgModule,
|
|
87
|
+
args: [{
|
|
88
|
+
declarations: [RatioImageComponent],
|
|
89
|
+
imports: [NgIf, DecimalPipe],
|
|
90
|
+
exports: [RatioImageComponent]
|
|
91
|
+
}]
|
|
92
|
+
}] });
|
|
93
|
+
|
|
94
|
+
/*
|
|
95
|
+
* Public API Surface of ngx-ratio-image
|
|
96
|
+
*/
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Generated bundle index. Do not edit.
|
|
100
|
+
*/
|
|
101
|
+
|
|
102
|
+
export { RatioImageComponent, RatioImageModule };
|
|
103
|
+
//# sourceMappingURL=ngx-ratio-image.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-ratio-image.mjs","sources":["../../../projects/ngx-ratio-image/src/lib/ratio-image/ratio-image.component.ts","../../../projects/ngx-ratio-image/src/lib/ratio-image/ratio-image.component.html","../../../projects/ngx-ratio-image/src/lib/ratio-image.module.ts","../../../projects/ngx-ratio-image/src/public-api.ts","../../../projects/ngx-ratio-image/src/ngx-ratio-image.ts"],"sourcesContent":["import { AfterViewInit, Component, Input, OnChanges } from '@angular/core';\n\ninterface Image {\n\tclientWidth: number;\n\tclientHeight: number;\n\tnaturalWidth: number;\n\tnaturalHeight: number;\n}\n\n@Component({\n\tselector: 'ngx-ratio-image',\n\ttemplateUrl: 'ratio-image.component.html',\n\tstyles: []\n})\nexport class RatioImageComponent implements AfterViewInit, OnChanges {\n\t@Input({ required: true }) public src = '';\n\t@Input({ required: true }) public width = 0;\n\t@Input({ required: true }) public height = 0;\n\t@Input() public debug = false;\n\n\tpublic imageWidth = 0;\n\tpublic imageHeight = 0;\n\n\tpublic naturalWidth = 0;\n\tpublic naturalHeight = 0;\n\n\tpublic imageLeft = 0;\n\tpublic imageTop = 0;\n\tpublic ratioImage = 1;\n\tpublic ratioBox = 1;\n\n\tpublic scale = 1;\n\n\tconstructor() {\n\t\tif (this.debug) console.log('constructor', this.src);\n\t}\n\n\tngAfterViewInit() {\n\t\tif (this.debug) console.log('ngAfterViewInit', this.src, this.width, this.height);\n\t}\n\n\tonImageLoad(img: Image) {\n\t\tif (this.debug) console.log('onImageLoad ', img);\n\t\tif (img) {\n\t\t\tthis.naturalWidth = img.naturalWidth;\n\t\t\tthis.naturalHeight = img.naturalHeight;\n\t\t\tif (this.width > 0 && this.height > 0) {\n\t\t\t\tthis.calculate();\n\t\t\t}\n\t\t}\n\t}\n\n\tngOnChanges(): void {\n\t\tthis.calculate();\n\t}\n\n\tprivate calculate() {\n\t\tthis.ratioImage = this.naturalWidth / this.naturalHeight;\n\t\tthis.ratioBox = this.width / this.height;\n\n\t\tif (this.ratioBox > this.ratioImage) {\n\t\t\tthis.scale = this.height / this.naturalHeight;\n\t\t\tthis.imageLeft = (this.width - this.naturalWidth * this.scale) / 2;\n\t\t} else if (this.ratioBox < this.ratioImage) {\n\t\t\tthis.scale = this.width / this.naturalWidth;\n\t\t\tthis.imageTop = (this.height - this.naturalHeight * this.scale) / 2;\n\t\t} else {\n\t\t\tthis.scale = this.width / this.naturalWidth;\n\t\t\tthis.imageLeft = 0;\n\t\t\tthis.imageTop = 0;\n\t\t}\n\n\t\tif (this.debug) console.log('calculate', this.src, this.naturalWidth + ' x ' + this.naturalHeight);\n\t}\n}\n","<div\n\t[style.position]=\"'relative'\"\n\t[style.z-index]=\"2\"\n\t[style.border]=\"debug ? '1px solid red' : ''\"\n\t[style.width]=\"width + 'px'\"\n\t[style.height]=\"height + 'px'\"\n>\n\t<img\n\t\tclass=\"img-background\"\n\t\t#img\n\t\t[src]=\"src\"\n\t\t[style.position]=\"'absolute'\"\n\t\t[style.z-index]=\"1\"\n\t\t[style.filter]=\"'blur(5px)'\"\n\t\t[style.opacity]=\"0.5\"\n\t\t[width]=\"width\"\n\t\t[height]=\"height\"\n\t\t[style.overflow]=\"'hidden'\"\n\t\t(load)=\"onImageLoad(img)\"\n\t\talt=\"\"\n\t/>\n\t<img\n\t\tclass=\"img-main\"\n\t\t[src]=\"src\"\n\t\t[width]=\"naturalWidth * scale\"\n\t\t[height]=\"naturalHeight * scale\"\n\t\t[style.position]=\"'absolute'\"\n\t\t[style.z-index]=\"2\"\n\t\t[style.left]=\"imageLeft + 'px'\"\n\t\t[style.top]=\"imageTop + 'px'\"\n\t\talt=\"\"\n\t/>\n</div>\n<div *ngIf=\"debug\" style=\"margin-top: 10px\">\n\t<div>Container: {{ width }} x {{ height }}</div>\n\t<div>Natural: {{ naturalWidth }} x {{ naturalHeight }}</div>\n\t<div>Pos: {{ imageLeft }} , {{ imageTop }}</div>\n\t<div>Scale: {{ scale | number: '0.0-2' }}</div>\n\t<div>\n\t\tRatio Box , Image: {{ this.ratioBox | number: '0.0-2' }} : 1 , {{ this.ratioImage | number: '0.0-2' }} : 1\n\t</div>\n</div>\n","import { NgModule } from '@angular/core';\nimport { RatioImageComponent } from './ratio-image/ratio-image.component';\nimport { DecimalPipe, NgIf } from '@angular/common';\n\n@NgModule({\n\tdeclarations: [RatioImageComponent],\n\timports: [NgIf, DecimalPipe],\n\texports: [RatioImageComponent]\n})\nexport class RatioImageModule {}\n","/*\n * Public API Surface of ngx-ratio-image\n */\n\nexport * from './lib/ratio-image/ratio-image.component';\nexport * from './lib/ratio-image.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { AfterViewInit, OnChanges } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
interface Image {
|
|
4
|
+
clientWidth: number;
|
|
5
|
+
clientHeight: number;
|
|
6
|
+
naturalWidth: number;
|
|
7
|
+
naturalHeight: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class RatioImageComponent implements AfterViewInit, OnChanges {
|
|
10
|
+
src: string;
|
|
11
|
+
width: number;
|
|
12
|
+
height: number;
|
|
13
|
+
debug: boolean;
|
|
14
|
+
imageWidth: number;
|
|
15
|
+
imageHeight: number;
|
|
16
|
+
naturalWidth: number;
|
|
17
|
+
naturalHeight: number;
|
|
18
|
+
imageLeft: number;
|
|
19
|
+
imageTop: number;
|
|
20
|
+
ratioImage: number;
|
|
21
|
+
ratioBox: number;
|
|
22
|
+
scale: number;
|
|
23
|
+
constructor();
|
|
24
|
+
ngAfterViewInit(): void;
|
|
25
|
+
onImageLoad(img: Image): void;
|
|
26
|
+
ngOnChanges(): void;
|
|
27
|
+
private calculate;
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RatioImageComponent, never>;
|
|
29
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<RatioImageComponent, "ngx-ratio-image", never, { "src": { "alias": "src"; "required": true; }; "width": { "alias": "width"; "required": true; }; "height": { "alias": "height"; "required": true; }; "debug": { "alias": "debug"; "required": false; }; }, {}, never, never, false, never>;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./ratio-image/ratio-image.component";
|
|
3
|
+
import * as i2 from "@angular/common";
|
|
4
|
+
export declare class RatioImageModule {
|
|
5
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<RatioImageModule, never>;
|
|
6
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<RatioImageModule, [typeof i1.RatioImageComponent], [typeof i2.NgIf, typeof i2.DecimalPipe], [typeof i1.RatioImageComponent]>;
|
|
7
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<RatioImageModule>;
|
|
8
|
+
}
|
package/package.json
CHANGED
|
@@ -1,89 +1,45 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
"@angular/router": "^16.1.2",
|
|
47
|
-
"rxjs": "~7.8.0",
|
|
48
|
-
"tslib": "^2.3.0",
|
|
49
|
-
"zone.js": "~0.13.0"
|
|
50
|
-
},
|
|
51
|
-
"devDependencies": {
|
|
52
|
-
"@angular-devkit/build-angular": "^16.1.0",
|
|
53
|
-
"@angular-eslint/builder": "16.0.3",
|
|
54
|
-
"@angular-eslint/eslint-plugin": "16.0.3",
|
|
55
|
-
"@angular-eslint/eslint-plugin-template": "16.0.3",
|
|
56
|
-
"@angular-eslint/schematics": "16.0.3",
|
|
57
|
-
"@angular-eslint/template-parser": "16.0.3",
|
|
58
|
-
"@angular/cli": "~16.1.0",
|
|
59
|
-
"@angular/compiler-cli": "^16.1.2",
|
|
60
|
-
"@schuchard/prettier": "5.1.0",
|
|
61
|
-
"@types/jasmine": "~4.3.0",
|
|
62
|
-
"@typescript-eslint/eslint-plugin": "5.59.7",
|
|
63
|
-
"@typescript-eslint/parser": "5.59.7",
|
|
64
|
-
"eslint": "^8.40.0",
|
|
65
|
-
"husky": "latest",
|
|
66
|
-
"jasmine-core": "~4.6.0",
|
|
67
|
-
"karma": "~6.4.0",
|
|
68
|
-
"karma-chrome-launcher": "~3.2.0",
|
|
69
|
-
"karma-coverage": "~2.2.0",
|
|
70
|
-
"karma-jasmine": "~5.1.0",
|
|
71
|
-
"karma-jasmine-html-reporter": "~2.1.0",
|
|
72
|
-
"lint-staged": "latest",
|
|
73
|
-
"ng-packagr": "^16.1.0",
|
|
74
|
-
"prettier": "^2.8.8",
|
|
75
|
-
"rimraf": "^5.0.1",
|
|
76
|
-
"tslint-config-prettier": "latest",
|
|
77
|
-
"typescript": "~5.1.3"
|
|
78
|
-
},
|
|
79
|
-
"husky": {
|
|
80
|
-
"hooks": {
|
|
81
|
-
"pre-commit": "lint-staged"
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
"lint-staged": {
|
|
85
|
-
"*.{js,json,css,scss,less,md,ts,html,component.html}": [
|
|
86
|
-
"prettier --write"
|
|
87
|
-
]
|
|
88
|
-
}
|
|
89
|
-
}
|
|
2
|
+
"name": "ngx-ratio-image",
|
|
3
|
+
"version": "0.0.12",
|
|
4
|
+
"author": {
|
|
5
|
+
"name": "Gerd Siebert"
|
|
6
|
+
},
|
|
7
|
+
"keywords": [
|
|
8
|
+
"Image",
|
|
9
|
+
"Scaling",
|
|
10
|
+
"Ratio",
|
|
11
|
+
"Angular 16",
|
|
12
|
+
"Angular 17"
|
|
13
|
+
],
|
|
14
|
+
"description": "Asn Angular lib to show an image with variable ratio in container with a fixed ratio.",
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"peerDependencies": {
|
|
17
|
+
"@angular/common": "^16.0.0 || ^17.0.0",
|
|
18
|
+
"@angular/core": "^16.0.0 || ^17.0.0"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"tslib": "^2.3.0"
|
|
22
|
+
},
|
|
23
|
+
"sideEffects": false,
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "https://github.com/gerd-siebert/ngx-ratio-image.git"
|
|
27
|
+
},
|
|
28
|
+
"bugs": {
|
|
29
|
+
"url": "https://github.com/gerd-siebert/ngx-ratio-image/issues"
|
|
30
|
+
},
|
|
31
|
+
"homepage": "https://github.com/gerd-siebert/ngx-ratio-image#readme",
|
|
32
|
+
"module": "fesm2022/ngx-ratio-image.mjs",
|
|
33
|
+
"typings": "index.d.ts",
|
|
34
|
+
"exports": {
|
|
35
|
+
"./package.json": {
|
|
36
|
+
"default": "./package.json"
|
|
37
|
+
},
|
|
38
|
+
".": {
|
|
39
|
+
"types": "./index.d.ts",
|
|
40
|
+
"esm2022": "./esm2022/ngx-ratio-image.mjs",
|
|
41
|
+
"esm": "./esm2022/ngx-ratio-image.mjs",
|
|
42
|
+
"default": "./fesm2022/ngx-ratio-image.mjs"
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
package/.editorconfig
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# Editor configuration, see https://editorconfig.org
|
|
2
|
-
root = true
|
|
3
|
-
|
|
4
|
-
[*]
|
|
5
|
-
charset = utf-8
|
|
6
|
-
indent_style = tab
|
|
7
|
-
indent_size = 4
|
|
8
|
-
insert_final_newline = true
|
|
9
|
-
trim_trailing_whitespace = true
|
|
10
|
-
|
|
11
|
-
[*.ts]
|
|
12
|
-
quote_type = single
|
|
13
|
-
|
|
14
|
-
[*.md]
|
|
15
|
-
max_line_length = off
|
|
16
|
-
trim_trailing_whitespace = false
|
package/.eslintrc.json
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"root": true,
|
|
3
|
-
"ignorePatterns": ["projects/**/*"],
|
|
4
|
-
"overrides": [
|
|
5
|
-
{
|
|
6
|
-
"files": ["*.ts"],
|
|
7
|
-
"extends": [
|
|
8
|
-
"eslint:recommended",
|
|
9
|
-
"plugin:@typescript-eslint/recommended",
|
|
10
|
-
"plugin:@angular-eslint/recommended",
|
|
11
|
-
"plugin:@angular-eslint/template/process-inline-templates"
|
|
12
|
-
],
|
|
13
|
-
"rules": {
|
|
14
|
-
"@angular-eslint/directive-selector": [
|
|
15
|
-
"error",
|
|
16
|
-
{
|
|
17
|
-
"type": "attribute",
|
|
18
|
-
"prefix": "",
|
|
19
|
-
"style": "camelCase"
|
|
20
|
-
}
|
|
21
|
-
],
|
|
22
|
-
"@angular-eslint/component-selector": [
|
|
23
|
-
"error",
|
|
24
|
-
{
|
|
25
|
-
"type": "element",
|
|
26
|
-
"prefix": "",
|
|
27
|
-
"style": "kebab-case"
|
|
28
|
-
}
|
|
29
|
-
]
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"files": ["*.html"],
|
|
34
|
-
"extends": ["plugin:@angular-eslint/template/recommended", "plugin:@angular-eslint/template/accessibility"],
|
|
35
|
-
"rules": {}
|
|
36
|
-
}
|
|
37
|
-
]
|
|
38
|
-
}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node
|
|
2
|
-
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs
|
|
3
|
-
|
|
4
|
-
name: Node.js CI
|
|
5
|
-
|
|
6
|
-
on:
|
|
7
|
-
workflow_dispatch:
|
|
8
|
-
push:
|
|
9
|
-
branches: ['main']
|
|
10
|
-
pull_request:
|
|
11
|
-
branches: ['main']
|
|
12
|
-
|
|
13
|
-
env:
|
|
14
|
-
CI: true
|
|
15
|
-
DISPLAY: ':10.0'
|
|
16
|
-
CHROME_BIN: '/usr/bin/chromium'
|
|
17
|
-
|
|
18
|
-
jobs:
|
|
19
|
-
build:
|
|
20
|
-
runs-on: ubuntu-latest
|
|
21
|
-
timeout-minutes: 5
|
|
22
|
-
strategy:
|
|
23
|
-
matrix:
|
|
24
|
-
node-version: [16.x, 18.x]
|
|
25
|
-
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
|
|
26
|
-
|
|
27
|
-
steps:
|
|
28
|
-
- uses: actions/checkout@v3
|
|
29
|
-
- name: Use Node.js ${{ matrix.node-version }}
|
|
30
|
-
uses: actions/setup-node@v3
|
|
31
|
-
with:
|
|
32
|
-
node-version: ${{ matrix.node-version }}
|
|
33
|
-
cache: 'npm'
|
|
34
|
-
- name: Setup Chrome
|
|
35
|
-
uses: browser-actions/setup-chrome@v1.2.0
|
|
36
|
-
- run: npm ci
|
|
37
|
-
- run: npm run build --if-present
|
|
38
|
-
- run: npm run test:ci
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created
|
|
2
|
-
# For more information see: https://docs.github.com/en/actions/publishing-packages/publishing-nodejs-packages
|
|
3
|
-
|
|
4
|
-
name: Node.js Package
|
|
5
|
-
|
|
6
|
-
on:
|
|
7
|
-
release:
|
|
8
|
-
types: [created]
|
|
9
|
-
|
|
10
|
-
env:
|
|
11
|
-
CI: true
|
|
12
|
-
DISPLAY: ':10.0'
|
|
13
|
-
CHROME_BIN: '/usr/bin/chromium'
|
|
14
|
-
|
|
15
|
-
jobs:
|
|
16
|
-
build:
|
|
17
|
-
runs-on: ubuntu-latest
|
|
18
|
-
timeout-minutes: 10
|
|
19
|
-
steps:
|
|
20
|
-
- uses: actions/checkout@v3
|
|
21
|
-
- uses: actions/setup-node@v3
|
|
22
|
-
with:
|
|
23
|
-
node-version: 16
|
|
24
|
-
- run: npm ci
|
|
25
|
-
- run: npm run build
|
|
26
|
-
- name: Setup Chrome
|
|
27
|
-
uses: browser-actions/setup-chrome@v1.2.0
|
|
28
|
-
- run: npm run test:ci
|
|
29
|
-
|
|
30
|
-
publish-npm:
|
|
31
|
-
needs: build
|
|
32
|
-
runs-on: ubuntu-latest
|
|
33
|
-
steps:
|
|
34
|
-
- uses: actions/checkout@v3
|
|
35
|
-
- uses: actions/setup-node@v3
|
|
36
|
-
with:
|
|
37
|
-
node-version: 16
|
|
38
|
-
registry-url: https://registry.npmjs.org/
|
|
39
|
-
- run: npm ci
|
|
40
|
-
- run: npm publish
|
|
41
|
-
env:
|
|
42
|
-
NODE_AUTH_TOKEN: ${{secrets.npm_token}}
|
package/.nvmrc
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
18
|
package/.prettierignore
DELETED
package/.run/lint.run.xml
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<component name="ProjectRunConfigurationManager">
|
|
2
|
-
<configuration default="false" name="lint" type="js.build_tools.npm" singleton="false" nameIsGenerated="true">
|
|
3
|
-
<package-json value="$PROJECT_DIR$/package.json" />
|
|
4
|
-
<command value="run" />
|
|
5
|
-
<scripts>
|
|
6
|
-
<script value="lint" />
|
|
7
|
-
</scripts>
|
|
8
|
-
<node-interpreter value="project" />
|
|
9
|
-
<envs />
|
|
10
|
-
<method v="2" />
|
|
11
|
-
</configuration>
|
|
12
|
-
</component>
|
package/.run/test.run.xml
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<component name="ProjectRunConfigurationManager">
|
|
2
|
-
<configuration default="false" name="test" type="js.build_tools.npm" singleton="false" nameIsGenerated="true">
|
|
3
|
-
<package-json value="$PROJECT_DIR$/package.json" />
|
|
4
|
-
<command value="run" />
|
|
5
|
-
<scripts>
|
|
6
|
-
<script value="test" />
|
|
7
|
-
</scripts>
|
|
8
|
-
<node-interpreter value="project" />
|
|
9
|
-
<envs />
|
|
10
|
-
<method v="2" />
|
|
11
|
-
</configuration>
|
|
12
|
-
</component>
|
package/.vscode/extensions.json
DELETED