| @@ -12,11 +12,11 @@ | |||
| <button *ngIf="newsDetails.type === 'VIDEO'"> | |||
| <ion-icon name="play"></ion-icon> | |||
| </button> | |||
| </div> | |||
| <section class="content"> | |||
| <h4> {{ newsDetails.heading }} </h4> | |||
| </div> | |||
| <section class="content"> | |||
| <div class="details"> | |||
| {{ newsDetails.description }} | |||
| </div> | |||
| @@ -43,19 +43,49 @@ | |||
| height: 40%; | |||
| overflow: hidden; | |||
| h4 { | |||
| font-size: 1.2rem; | |||
| margin: 0px; | |||
| line-height: 1.5; | |||
| font-weight: 500; | |||
| transition: opacity 0.1s; | |||
| padding: 10px 0; | |||
| position: absolute; | |||
| color: white; | |||
| bottom: 45px; | |||
| left: 6%; | |||
| width: 88%; | |||
| animation: fadeInFromBottom 0.5s forwards; | |||
| } | |||
| button { | |||
| width: 40px; | |||
| height: 40px; | |||
| position: absolute; | |||
| bottom: 10px; | |||
| right: 10px; | |||
| top: calc(50% - 20px); | |||
| left: calc(50% - 20px); | |||
| display: flex; | |||
| align-items: center; | |||
| justify-content: center; | |||
| background-color: rgba(var(--brand-red-rgb), 0.5); | |||
| border-radius: 50%; | |||
| transform: translate(calc(-50vw + 40px), -15vh); | |||
| animation: popin 0.3s forwards; | |||
| animation-delay: 0.5s; | |||
| transform: scale(0); | |||
| @keyframes popin { | |||
| 0% { | |||
| transform: scale(0); | |||
| } | |||
| 50% { | |||
| transform: scale(1.4); | |||
| } | |||
| 100% { | |||
| transform: scale(1); | |||
| } | |||
| } | |||
| ion-icon { | |||
| color: white; | |||
| @@ -82,7 +112,7 @@ | |||
| .content { | |||
| background-color: white; | |||
| padding: 0px 5% 5% 5%; | |||
| padding: 5%; | |||
| margin: 0 auto; | |||
| border-radius: 0px; | |||
| transition: border-radius 0.3s, transform 0.3s, width 0.3s, margin 0.3s, box-shadow 0.3s; | |||
| @@ -107,17 +137,6 @@ | |||
| } | |||
| } | |||
| h4 { | |||
| font-size: 1.2rem; | |||
| margin: 0px; | |||
| line-height: 1.5; | |||
| font-weight: 500; | |||
| color: var(--brand-black); | |||
| transition: opacity 0.1s; | |||
| background-color: white; | |||
| padding: 10px 0; | |||
| } | |||
| .details { | |||
| margin: 0px; | |||
| font-size: 0.9rem; | |||
| @@ -14,9 +14,10 @@ | |||
| </section> | |||
| </div> | |||
| <ion-slides [options]="slideOpts" *ngIf="selectedTab === 'news'" #slides> | |||
| <ion-slides #slides [options]="slideOpts" *ngIf="selectedTab === 'news'" > | |||
| <ion-slide *ngFor="let news of newsData; let i = index"> | |||
| <ion-slide *ngFor="let news of newsData; let i = index" | |||
| [ngClass]="{'active' : selectedArticle === i}"> | |||
| <div class="image-holder"> | |||
| <figure> | |||
| <img [src]="news.image"> | |||
| @@ -26,9 +27,7 @@ | |||
| <ion-icon name="play"></ion-icon> | |||
| </button> | |||
| <button | |||
| [ngClass]="{'hide' : selectedArticle !== null}" | |||
| *ngIf="news.type === 'ARTICLE'"> | |||
| <button *ngIf="news.type === 'ARTICLE'"> | |||
| <ion-icon name="newspaper"></ion-icon> | |||
| </button> | |||
| </div> | |||
| @@ -55,7 +54,53 @@ | |||
| </button> | |||
| </section> | |||
| <button class="read-more" (click)="showNewsDetails(news)"> | |||
| <button class="read-more" (click)="showNewsDetails(news);"> | |||
| <span> More </span> | |||
| <ion-icon name="chevron-forward-outline"></ion-icon> | |||
| </button> | |||
| </section> | |||
| </ion-slide> | |||
| <ion-slide *ngFor="let news of newsData; let i = index" | |||
| [ngClass]="{'active' : selectedArticle === i}"> | |||
| <div class="image-holder"> | |||
| <figure> | |||
| <img [src]="news.image"> | |||
| </figure> | |||
| <button *ngIf="news.type === 'VIDEO'"> | |||
| <ion-icon name="play"></ion-icon> | |||
| </button> | |||
| <button *ngIf="news.type === 'ARTICLE'"> | |||
| <ion-icon name="newspaper"></ion-icon> | |||
| </button> | |||
| </div> | |||
| <section class="content"> | |||
| <h4> {{ news.heading }} </h4> | |||
| <div class="details"> | |||
| {{ news.description }} | |||
| </div> | |||
| </section> | |||
| <section class="action-buttons"> | |||
| <section class="shortcuts"> | |||
| <button class="wide-button" (click)="news.isLiked = !news.isLiked" | |||
| [ngClass]="{'active' : news.isLiked}"> | |||
| <ion-icon *ngIf="!news.isLiked" name="heart-outline"></ion-icon> | |||
| <ion-icon *ngIf="news.isLiked" name="heart"></ion-icon> | |||
| <span> {{ news.isLiked ? news.likes + 1 : news.likes }} </span> | |||
| </button> | |||
| <button> | |||
| <ion-icon name="share-social-outline"></ion-icon> | |||
| </button> | |||
| </section> | |||
| <button class="read-more" (click)="showNewsDetails(news);"> | |||
| <span> More </span> | |||
| <ion-icon name="chevron-forward-outline"></ion-icon> | |||
| </button> | |||
| @@ -202,14 +202,6 @@ ion-slides { | |||
| } | |||
| } | |||
| // &.bookmark-button { | |||
| // &.active { | |||
| // ion-icon, span { | |||
| // color: var(--light-grey); | |||
| // } | |||
| // } | |||
| // } | |||
| span { | |||
| vertical-align: middle; | |||
| color: var(--light-grey); | |||
| @@ -26,12 +26,17 @@ export type INews = { | |||
| }) | |||
| export class HomePage implements OnInit { | |||
| @ViewChild('slides', {static: false}) slides: IonSlides; | |||
| @ViewChild('slides') slides: IonSlides; | |||
| selectedTab: string = 'news'; | |||
| selectedArticle: number = null; | |||
| slideOpts = { }; | |||
| slideOpts = { | |||
| slidesPerView: 1.3, | |||
| spaceBetween: 30, | |||
| slidesOffsetBefore: 30, | |||
| slidesOffsetAfter: 30, | |||
| }; | |||
| newsData: Array<INews> = []; | |||
| @@ -78,44 +83,20 @@ export class HomePage implements OnInit { | |||
| isBookmarked: false, | |||
| likes: 308, | |||
| comments: [] | |||
| }]; | |||
| this.slideOpts = { | |||
| slidesPerView: 1.3, | |||
| spaceBetween: 30, | |||
| slidesOffsetBefore: 30, | |||
| slidesOffsetAfter: 30, | |||
| }; | |||
| }]; | |||
| } | |||
| expandArticle(index: number) { | |||
| this.selectedArticle = index; | |||
| this.slideOpts = { | |||
| slidesPerView: 1, | |||
| spaceBetween: 0, | |||
| slidesOffsetBefore: 0, | |||
| slidesOffsetAfter: 0, | |||
| }; | |||
| ngAfterViewInit() { | |||
| this.selectedArticle = 0; | |||
| } | |||
| // setTimeout(() => { | |||
| // this.slides.slideTo(index); | |||
| // }, 200); | |||
| getIndex(e: any) { | |||
| console.log(this.slides); | |||
| } | |||
| showNewsDetails(news: any) { | |||
| this.router.navigate(['/home-details', { news: JSON.stringify(news) }]) | |||
| } | |||
| closeArticle() { | |||
| this.selectedArticle = null; | |||
| this.slideOpts = { | |||
| slidesPerView: 1.3, | |||
| spaceBetween: 30, | |||
| slidesOffsetBefore: 30, | |||
| slidesOffsetAfter: 30, | |||
| }; | |||
| } | |||
| } | |||