Skip to content

Commit 391e4b1

Browse files
committed
feat(image-loader): update to angular-inviewport 4
BREAKING CHANGE: Updated to @thisissoon/angular-inviewport v4 which removes the need to manually check inviewport status
1 parent 7faac32 commit 391e4b1

File tree

10 files changed

+24
-104
lines changed

10 files changed

+24
-104
lines changed

README.md

Lines changed: 4 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,11 @@ import {
2828
ImageLoaderModule,
2929
VideoLoaderModule,
3030
} from '@thisissoon/angular-image-loader';
31-
import { InViewportModule, WindowRef } from '@thisissoon/angular-inviewport';
32-
33-
// Provide window object for platform browser
34-
export const providers: Provider[] = [
35-
{ provide: WindowRef, useFactory: () => window },
36-
];
31+
import { InViewportModule } from '@thisissoon/angular-inviewport';
3732

3833
@NgModule({
3934
imports: [
40-
InViewportModule.forRoot(providers),
35+
InViewportModule,
4136
ImageLoaderModule, // Only this import required if using just the image loader
4237
VideoLoaderModule, // Only this import required if using just the video loader
4338
],
@@ -52,12 +47,7 @@ import { ImageLoaderModule } from '@thisissoon/angular-image-loader';
5247
import { InViewportModule, WindowRef } from '@thisissoon/angular-inviewport';
5348

5449
@NgModule({
55-
imports: [
56-
// No need to provide WindowRef
57-
InViewportModule.forRoot(),
58-
ImageLoaderModule,
59-
VideoLoaderModule,
60-
],
50+
imports: [InViewportModule.forServer(), ImageLoaderModule, VideoLoaderModule],
6151
})
6252
export class AppModule {}
6353
```
@@ -134,25 +124,10 @@ export class AppComponent {
134124
}
135125

136126
.sn-image-loaded ::ng-deep .img {
137-
filter: blur(0px);
127+
filter: blur(0);
138128
}
139129
```
140130

141-
### Check inviewport status manually
142-
143-
```html
144-
<sn-image-loader
145-
[image]="image"
146-
[sizes]="sizes"
147-
imgClass="img"
148-
alt="lorem ipsum"
149-
#imgEl
150-
>
151-
</sn-image-loader>
152-
153-
<button (click)="imgEl.checkInViewportStatus()">Check status</button>
154-
```
155-
156131
## Video Loader Example
157132

158133
### `app.component.html`
@@ -208,27 +183,6 @@ export class AppComponent {
208183
}
209184
```
210185

211-
### Check inviewport status manually
212-
213-
```html
214-
<sn-video-loader
215-
[sizes]="sizes"
216-
[video]="video"
217-
[loop]="true"
218-
[muted]="true"
219-
[autoplay]="true"
220-
[controls]="true"
221-
[playsInline]="true"
222-
type="video/mp4"
223-
videoClass="video"
224-
posterClass="img"
225-
#videoEl
226-
>
227-
</sn-video-loader>
228-
229-
<button (click)="videoEl.checkInViewportStatus()">Check status</button>
230-
```
231-
232186
## Development server
233187

234188
Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"dependencies": {},
5151
"peerDependencies": {
5252
"@angular/core": ">=5.0.0 <8.0.0",
53-
"@thisissoon/angular-inviewport": ">=3.0.0 <4.0.0",
53+
"@thisissoon/angular-inviewport": ">=4.0.0 <5.0.0",
5454
"rxjs": ">=6.0.0 <7.0.0"
5555
},
5656
"devDependencies": {
@@ -67,7 +67,7 @@
6767
"@angular/platform-browser": "^7.0.4",
6868
"@angular/platform-browser-dynamic": "^7.0.4",
6969
"@angular/router": "^7.0.4",
70-
"@thisissoon/angular-inviewport": "^3.0.0",
70+
"@thisissoon/angular-inviewport": "^4.1.0",
7171
"@thisissoon/schematics": "^1.0.0-alpha.18",
7272
"@types/jasmine": "~3.3.0",
7373
"@types/jasminewd2": "~2.0.2",

src/app/app.component.html

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ <h3>Bottom image</h3>
2222
class="sn-image-loader sn-image-loader--bottom"
2323
#imgEl>
2424
</sn-image-loader>
25-
<button (click)="imgEl.checkInViewportStatus()">Check</button>
2625
<h3>Bottom image imageLoaded event count: <span class="image-loaded-count">{{ imageLoadedEventCount }}</span></h3>
2726
<div class="spacer"></div>
2827

@@ -39,5 +38,3 @@ <h3>Bottom image imageLoaded event count: <span class="image-loaded-count">{{ im
3938
posterClass="img"
4039
#videoEl>
4140
</sn-video-loader>
42-
43-
<button (click)="videoEl.checkInViewportStatus()">Check</button>

src/app/app.module.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,16 @@
11
import { BrowserModule } from '@angular/platform-browser';
22
import { NgModule, Provider } from '@angular/core';
3-
import { InViewportModule, WindowRef } from '@thisissoon/angular-inviewport';
3+
import { InViewportModule } from '@thisissoon/angular-inviewport';
44

55
import { ImageLoaderModule } from './image-loader/image-loader.module';
66
import { VideoLoaderModule } from './video-loader/video-loader.module';
77
import { AppComponent } from './app.component';
88

9-
export const getWindow = () => window;
10-
export const providers: Provider[] = [
11-
{ provide: WindowRef, useFactory: getWindow },
12-
];
13-
149
@NgModule({
1510
declarations: [AppComponent],
1611
imports: [
1712
BrowserModule,
18-
InViewportModule.forRoot(providers),
13+
InViewportModule,
1914
ImageLoaderModule,
2015
VideoLoaderModule,
2116
],

src/app/image-loader/image-loader/image-loader.component.html

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
[class]="imgClass"
88
snInViewport
99
(inViewportChange)="onInViewportChange($event)"
10-
[debounce]="0"
1110
(load)="onImageLoad($event)">
1211

1312
<img

src/app/image-loader/image-loader/image-loader.component.spec.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import { InViewportModule } from '@thisissoon/angular-inviewport';
77
import { ImageLoaderComponent } from './image-loader.component';
88
import { ResponsiveImage } from '../shared/image.model';
99
import { Breakpoint } from '../shared/breakpoint.model';
10-
import { ImageLoadedEvent } from '../shared/image-loaded-event.model';
1110

1211
describe('ImageLoaderComponent', () => {
1312
let fixture: ComponentFixture<ImageLoaderComponent>;
@@ -45,7 +44,7 @@ describe('ImageLoaderComponent', () => {
4544
testBed = TestBed.configureTestingModule({
4645
schemas: [NO_ERRORS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA],
4746
declarations: [ImageLoaderComponent],
48-
imports: [InViewportModule.forRoot()],
47+
imports: [InViewportModule.forServer()],
4948
});
5049

5150
testBed.compileComponents();
@@ -209,12 +208,6 @@ describe('ImageLoaderComponent', () => {
209208
expect(component.src).toEqual('');
210209
});
211210

212-
it('should check inviewport status', () => {
213-
const spy = spyOn(component.snInViewport, 'calculateInViewportStatus');
214-
component.checkInViewportStatus();
215-
expect(spy).toHaveBeenCalled();
216-
});
217-
218211
it('should set placeholder on changes', () => {
219212
const spy = spyOn(component, 'setPlaceholder');
220213
component.ngOnChanges();

src/app/image-loader/image-loader/image-loader.component.ts

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ import {
1111
ElementRef,
1212
NgZone,
1313
OnChanges,
14+
Inject,
1415
} from '@angular/core';
1516
import { Subject, fromEvent } from 'rxjs';
1617
import { takeUntil, debounceTime } from 'rxjs/operators';
17-
import { WindowRef, InViewportDirective } from '@thisissoon/angular-inviewport';
18+
import { InViewportDirective, WINDOW } from '@thisissoon/angular-inviewport';
1819

1920
import * as classes from '../shared/classes';
2021
import * as events from '../shared/events';
@@ -178,14 +179,14 @@ export class ImageLoaderComponent
178179
*
179180
* @memberof ImageLoaderComponent
180181
*/
181-
constructor(private windowRef: WindowRef, private ngZone: NgZone) {}
182+
constructor(@Inject(WINDOW) private window: Window, private ngZone: NgZone) {}
182183
/**
183184
* Set placeholder image as image on component init
184185
*
185186
* @memberof ImageLoaderComponent
186187
*/
187188
public ngOnInit(): void {
188-
this.onWidthChange(this.windowRef.innerWidth);
189+
this.onWidthChange(this.window.innerWidth);
189190
this.setPlaceholder();
190191
}
191192
/**
@@ -197,7 +198,7 @@ export class ImageLoaderComponent
197198
public ngAfterViewInit(): void {
198199
// Listen for window scroll/resize events.
199200
this.ngZone.runOutsideAngular(() => {
200-
fromEvent(this.windowRef as any, events.eventResize)
201+
fromEvent(this.window, events.eventResize)
201202
.pipe(
202203
takeUntil(this.ngUnsubscribe$),
203204
debounceTime(this.debounce),
@@ -207,12 +208,6 @@ export class ImageLoaderComponent
207208
);
208209
});
209210
}
210-
/**
211-
* Checks if image element is in viewport
212-
*/
213-
public checkInViewportStatus(): void {
214-
this.snInViewport.calculateInViewportStatus();
215-
}
216211
/**
217212
* If element is in viewport preload image by setting the src
218213
* of the dummy image element.

src/app/video-loader/video-loader/video-loader.component.spec.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ describe('VideoLoaderComponent', () => {
1111

1212
beforeEach(async(() => {
1313
TestBed.configureTestingModule({
14-
imports: [InViewportModule.forRoot()],
14+
imports: [InViewportModule.forServer()],
1515
schemas: [NO_ERRORS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA],
1616
declarations: [VideoLoaderComponent],
1717
}).compileComponents();
@@ -98,10 +98,4 @@ describe('VideoLoaderComponent', () => {
9898
component.onImageLoad(event as any);
9999
expect(component.poster).toEqual('foo');
100100
});
101-
102-
it('should check inviewport status', () => {
103-
const spy = spyOn(component.snInViewport, 'calculateInViewportStatus');
104-
component.checkInViewportStatus();
105-
expect(spy).toHaveBeenCalled();
106-
});
107101
});

src/app/video-loader/video-loader/video-loader.component.ts

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ import {
99
OnDestroy,
1010
ChangeDetectorRef,
1111
ElementRef,
12+
Inject,
1213
} from '@angular/core';
1314
import { Subject, fromEvent } from 'rxjs';
1415
import { takeUntil, debounceTime, startWith } from 'rxjs/operators';
15-
import { WindowRef, InViewportDirective } from '@thisissoon/angular-inviewport';
16+
import { WINDOW, InViewportDirective } from '@thisissoon/angular-inviewport';
1617

1718
import { Size } from '../../image-loader/shared/image.model';
1819
import { Breakpoint } from '../../image-loader/shared/breakpoint.model';
@@ -188,7 +189,7 @@ export class VideoLoaderComponent implements OnInit, AfterViewInit, OnDestroy {
188189
* @memberof VideoLoaderComponent
189190
*/
190191
constructor(
191-
private windowRef: WindowRef,
192+
@Inject(WINDOW) private window: Window,
192193
private ngZone: NgZone,
193194
private cdRef: ChangeDetectorRef,
194195
) {}
@@ -212,11 +213,11 @@ export class VideoLoaderComponent implements OnInit, AfterViewInit, OnDestroy {
212213
public ngAfterViewInit(): void {
213214
// Listen for window scroll/resize events.
214215
this.ngZone.runOutsideAngular(() => {
215-
fromEvent(this.windowRef as any, events.eventResize)
216+
fromEvent(this.window, events.eventResize)
216217
.pipe(
217218
takeUntil(this.ngUnsubscribe$),
218219
debounceTime(this.debounce),
219-
startWith({ target: { innerWidth: this.windowRef.innerWidth } }),
220+
startWith({ target: { innerWidth: this.window.innerWidth } }),
220221
)
221222
.subscribe((event: any) =>
222223
this.ngZone.run(() => this.onWidthChange(event.target.innerWidth)),
@@ -233,14 +234,6 @@ export class VideoLoaderComponent implements OnInit, AfterViewInit, OnDestroy {
233234
this.inViewport = inViewport;
234235
this.loadVideo();
235236
}
236-
/**
237-
* Checks if video element is in viewport
238-
*
239-
* @memberof VideoLoaderComponent
240-
*/
241-
public checkInViewportStatus(): void {
242-
this.snInViewport.calculateInViewportStatus();
243-
}
244237
/**
245238
* On width change, determine if device has changed and
246239
* reset directive

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -418,10 +418,10 @@
418418
semver "5.5.1"
419419
semver-intersect "1.4.0"
420420

421-
"@thisissoon/angular-inviewport@^3.0.0":
422-
version "3.0.1"
423-
resolved "https://registry.yarnpkg.com/@thisissoon/angular-inviewport/-/angular-inviewport-3.0.1.tgz#3f17ab5f25d694a0bdb7b0c7506e948fc6a99a30"
424-
integrity sha512-twIb1S+K7EOffgZ6o6zGJVKdHl9kHqoA7bljN1scRv6OzlLj7M7tmVTmqAOePb+Ue+xMhCiaZ56sKyNySqArAA==
421+
"@thisissoon/angular-inviewport@^4.1.0":
422+
version "4.1.0"
423+
resolved "https://registry.yarnpkg.com/@thisissoon/angular-inviewport/-/angular-inviewport-4.1.0.tgz#b37507e7b227a3e3239ba62749dfcd44fc95fc1f"
424+
integrity sha512-27rbbIlhDc814za5Tvnjrshckje6hu9+cl1unpAb60LgyP8QjPf3kHjOuFRfqhHUREUXPWmbaQMVE+3caOEjrA==
425425
dependencies:
426426
tslib "^1.9.0"
427427

0 commit comments

Comments
 (0)