From 5d966d8e0cf8f4eb76c08cfa53f6f93171f81a4c Mon Sep 17 00:00:00 2001 From: Jason Kulatunga Date: Wed, 13 Dec 2023 03:28:28 -0800 Subject: [PATCH] adding image placeholders. fix #353 --- .../medical-sources-card.component.html | 2 +- .../src/app/directives/directives.module.ts | 9 ++++++--- .../directives/image-fallback.directive.spec.ts | 8 ++++++++ .../app/directives/image-fallback.directive.ts | 16 ++++++++++++++++ frontend/src/assets/banner/banner-trimmed.png | Bin 0 -> 14063 bytes frontend/src/assets/images/no-image.svg | 4 ++++ 6 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 frontend/src/app/directives/image-fallback.directive.spec.ts create mode 100644 frontend/src/app/directives/image-fallback.directive.ts create mode 100644 frontend/src/assets/banner/banner-trimmed.png create mode 100644 frontend/src/assets/images/no-image.svg diff --git a/frontend/src/app/components/medical-sources-card/medical-sources-card.component.html b/frontend/src/app/components/medical-sources-card/medical-sources-card.component.html index 212bf223..0f31ec28 100644 --- a/frontend/src/app/components/medical-sources-card/medical-sources-card.component.html +++ b/frontend/src/app/components/medical-sources-card/medical-sources-card.component.html @@ -2,7 +2,7 @@
- +
failed
diff --git a/frontend/src/app/directives/directives.module.ts b/frontend/src/app/directives/directives.module.ts index 10322dc2..2b838e53 100644 --- a/frontend/src/app/directives/directives.module.ts +++ b/frontend/src/app/directives/directives.module.ts @@ -3,16 +3,19 @@ import { NgModule } from '@angular/core'; // Directives import {ExternalLinkDirective} from './external-link.directive'; +import { ImageFallbackDirective } from './image-fallback.directive'; @NgModule({ declarations: [ ExternalLinkDirective, + ImageFallbackDirective, ], imports: [ ], - exports: [ - ExternalLinkDirective, - ] + exports: [ + ExternalLinkDirective, + ImageFallbackDirective, + ] }) export class DirectivesModule {} diff --git a/frontend/src/app/directives/image-fallback.directive.spec.ts b/frontend/src/app/directives/image-fallback.directive.spec.ts new file mode 100644 index 00000000..bc5e23d0 --- /dev/null +++ b/frontend/src/app/directives/image-fallback.directive.spec.ts @@ -0,0 +1,8 @@ +import { ImageFallbackDirective } from './image-fallback.directive'; + +describe('ImageFallbackDirective', () => { + it('should create an instance', () => { + const directive = new ImageFallbackDirective(); + expect(directive).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/directives/image-fallback.directive.ts b/frontend/src/app/directives/image-fallback.directive.ts new file mode 100644 index 00000000..1fb52a36 --- /dev/null +++ b/frontend/src/app/directives/image-fallback.directive.ts @@ -0,0 +1,16 @@ +import {Directive, ElementRef, HostListener, Input} from '@angular/core'; + +@Directive({ + selector: 'img[imageFallback]' +}) +export class ImageFallbackDirective { + + @Input() imageFallback?: string; + constructor(private elementRef: ElementRef) {} + + @HostListener('error') + loadFallbackOnError() { + this.elementRef.nativeElement.src = this.imageFallback || 'assets/images/no-image.svg'; + } + +} diff --git a/frontend/src/assets/banner/banner-trimmed.png b/frontend/src/assets/banner/banner-trimmed.png new file mode 100644 index 0000000000000000000000000000000000000000..519ebc956b34a929210f34faf0d51327d499965c GIT binary patch literal 14063 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 + + +