From 58d80d1a6b6adecdae81e6ac0bd9924f3e26fa8f Mon Sep 17 00:00:00 2001 From: MiharyR Date: Wed, 27 Oct 2021 01:48:30 +0200 Subject: [PATCH] commencement de la 'page search' --- src/app/app-routing.module.ts | 2 +- src/app/app.module.ts | 26 +++++- .../page-connexion.component.html | 2 +- .../page-connexion.component.ts | 2 +- .../page-register.component.html | 2 +- .../page-register/page-register.component.ts | 2 +- .../page-search/page-search.component.html | 1 - .../user/page-search/page-search.component.ts | 15 ---- .../page-search/page-search.component.html | 77 +++++++++++++++++ .../page-search/page-search.component.scss | 41 +++++++++ .../page-search/page-search.component.spec.ts | 0 .../page-search/page-search.component.ts | 79 ++++++++++++++++++ .../video-cell/video-cell.component.html | 9 ++ .../video-cell/video-cell.component.scss | 5 ++ .../video-cell/video-cell.component.spec.ts | 25 ++++++ .../search/video-cell/video-cell.component.ts | 33 ++++++++ .../video-grid/video-grid.component.html | 11 +++ .../video-grid/video-grid.component.scss | 13 +++ .../video-grid/video-grid.component.spec.ts | 25 ++++++ .../search/video-grid/video-grid.component.ts | 34 ++++++++ .../components/nav-bar/nav-bar.component.html | 38 +++++++++ .../components/nav-bar/nav-bar.component.scss | 68 +++++++++++++++ .../nav-bar/nav-bar.component.spec.ts | 0 .../nav-bar/nav-bar.component.ts | 2 +- ...opup-add-video-to-playlists.component.html | 41 +++++++++ ...opup-add-video-to-playlists.component.scss | 19 +++++ ...p-add-video-to-playlists.component.spec.ts | 25 ++++++ .../popup-add-video-to-playlists.component.ts | 36 ++++++++ .../utils/components/pub/pub.component.html | 3 + .../components/pub/pub.component.scss} | 0 .../components/pub/pub.component.spec.ts | 25 ++++++ src/app/utils/components/pub/pub.component.ts | 19 +++++ src/app/utils/interfaces/playlist.ts | 10 +++ src/app/utils/interfaces/video.ts | 8 ++ src/app/utils/nav-bar/nav-bar.component.html | 23 ----- src/app/utils/nav-bar/nav-bar.component.scss | 34 -------- .../fictitious-datas.service.spec.ts | 16 ++++ .../fictitious-datas.service.ts | 56 +++++++++++++ .../message/message.service.spec.ts | 0 .../{ => services}/message/message.service.ts | 2 +- .../playlist/playlist.service.spec.ts | 16 ++++ .../services/playlist/playlist.service.ts | 60 +++++++++++++ .../videoUrl/video-url.service.spec.ts | 16 ++++ .../services/videoUrl/video-url.service.ts | 45 ++++++++++ src/assets/logo_plateforms/Dailymotion.png | Bin 0 -> 6478 bytes src/assets/logo_plateforms/Youtube.png | Bin 0 -> 7858 bytes src/proxy.conf.json | 7 ++ 47 files changed, 889 insertions(+), 84 deletions(-) delete mode 100644 src/app/user/page-search/page-search.component.html delete mode 100644 src/app/user/page-search/page-search.component.ts create mode 100644 src/app/user/search/page-search/page-search.component.html create mode 100644 src/app/user/search/page-search/page-search.component.scss rename src/app/user/{ => search}/page-search/page-search.component.spec.ts (100%) create mode 100644 src/app/user/search/page-search/page-search.component.ts create mode 100644 src/app/user/search/video-cell/video-cell.component.html create mode 100644 src/app/user/search/video-cell/video-cell.component.scss create mode 100644 src/app/user/search/video-cell/video-cell.component.spec.ts create mode 100644 src/app/user/search/video-cell/video-cell.component.ts create mode 100644 src/app/user/search/video-grid/video-grid.component.html create mode 100644 src/app/user/search/video-grid/video-grid.component.scss create mode 100644 src/app/user/search/video-grid/video-grid.component.spec.ts create mode 100644 src/app/user/search/video-grid/video-grid.component.ts create mode 100644 src/app/utils/components/nav-bar/nav-bar.component.html create mode 100644 src/app/utils/components/nav-bar/nav-bar.component.scss rename src/app/utils/{ => components}/nav-bar/nav-bar.component.spec.ts (100%) rename src/app/utils/{ => components}/nav-bar/nav-bar.component.ts (90%) create mode 100644 src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.html create mode 100644 src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.scss create mode 100644 src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.spec.ts create mode 100644 src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.ts create mode 100644 src/app/utils/components/pub/pub.component.html rename src/app/{user/page-search/page-search.component.scss => utils/components/pub/pub.component.scss} (100%) create mode 100644 src/app/utils/components/pub/pub.component.spec.ts create mode 100644 src/app/utils/components/pub/pub.component.ts create mode 100644 src/app/utils/interfaces/playlist.ts create mode 100644 src/app/utils/interfaces/video.ts delete mode 100644 src/app/utils/nav-bar/nav-bar.component.html delete mode 100644 src/app/utils/nav-bar/nav-bar.component.scss create mode 100644 src/app/utils/services/fictitiousDatas/fictitious-datas.service.spec.ts create mode 100644 src/app/utils/services/fictitiousDatas/fictitious-datas.service.ts rename src/app/utils/{ => services}/message/message.service.spec.ts (100%) rename src/app/utils/{ => services}/message/message.service.ts (87%) create mode 100644 src/app/utils/services/playlist/playlist.service.spec.ts create mode 100644 src/app/utils/services/playlist/playlist.service.ts create mode 100644 src/app/utils/services/videoUrl/video-url.service.spec.ts create mode 100644 src/app/utils/services/videoUrl/video-url.service.ts create mode 100644 src/assets/logo_plateforms/Dailymotion.png create mode 100644 src/assets/logo_plateforms/Youtube.png create mode 100644 src/proxy.conf.json diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index af394a3..6590845 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -2,7 +2,7 @@ import { NgModule } from '@angular/core'; import { RouterModule, Routes } from '@angular/router'; import {PageConnexionComponent} from './pourLes3Roles/page-connexion/page-connexion.component'; import {PageRegisterComponent} from './pourLes3Roles/register/page-register/page-register.component'; -import {PageSearchComponent} from "./user/page-search/page-search.component"; +import {PageSearchComponent} from "./user/search/page-search/page-search.component"; const routes: Routes = [ { path: '', component: PageConnexionComponent }, diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 6a06b61..e327b2a 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -5,15 +5,24 @@ import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { PageConnexionComponent } from './pourLes3Roles/page-connexion/page-connexion.component'; import { PageRegisterComponent } from './pourLes3Roles/register/page-register/page-register.component'; -import { NavBarComponent } from './utils/nav-bar/nav-bar.component'; +import { NavBarComponent } from './utils/components/nav-bar/nav-bar.component'; import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; import {MatSlideToggleModule} from '@angular/material/slide-toggle'; import {FormsModule} from "@angular/forms"; -import { PageSearchComponent } from './user/page-search/page-search.component'; +import { PageSearchComponent } from './user/search/page-search/page-search.component'; import {HttpClientModule} from "@angular/common/http"; import { PopupConfirmationComponent } from './pourLes3Roles/register/popup-confirmation/popup-confirmation.component'; import {MatDialogModule} from '@angular/material/dialog'; import {MatButtonModule} from "@angular/material/button"; +import { PubComponent } from './utils/components/pub/pub.component'; +import { VideoCellComponent } from './user/search/video-cell/video-cell.component'; +import { VideoGridComponent } from './user/search/video-grid/video-grid.component'; +import {MatIconModule} from "@angular/material/icon"; +import { PopupAddVideoToPlaylistsComponent } from './utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component'; +import {MatInputModule} from "@angular/material/input"; +import {MatDividerModule} from "@angular/material/divider"; +import {MatCheckboxModule} from "@angular/material/checkbox"; +import {MatFormFieldModule} from "@angular/material/form-field"; @NgModule({ @@ -23,7 +32,11 @@ import {MatButtonModule} from "@angular/material/button"; PageRegisterComponent, NavBarComponent, PageSearchComponent, - PopupConfirmationComponent + PopupConfirmationComponent, + PubComponent, + VideoCellComponent, + VideoGridComponent, + PopupAddVideoToPlaylistsComponent ], imports: [ BrowserModule, @@ -33,7 +46,12 @@ import {MatButtonModule} from "@angular/material/button"; FormsModule, HttpClientModule, MatDialogModule, - MatButtonModule + MatButtonModule, + MatIconModule, + MatInputModule, + MatDividerModule, + MatCheckboxModule, + MatFormFieldModule ], providers: [], bootstrap: [AppComponent] diff --git a/src/app/pourLes3Roles/page-connexion/page-connexion.component.html b/src/app/pourLes3Roles/page-connexion/page-connexion.component.html index f77d943..6966d79 100644 --- a/src/app/pourLes3Roles/page-connexion/page-connexion.component.html +++ b/src/app/pourLes3Roles/page-connexion/page-connexion.component.html @@ -1,6 +1,6 @@
- +

Connexion

diff --git a/src/app/pourLes3Roles/page-connexion/page-connexion.component.ts b/src/app/pourLes3Roles/page-connexion/page-connexion.component.ts index a3be2e7..abf9d28 100644 --- a/src/app/pourLes3Roles/page-connexion/page-connexion.component.ts +++ b/src/app/pourLes3Roles/page-connexion/page-connexion.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import {MessageService} from "../../utils/message/message.service"; +import {MessageService} from "../../utils/services/message/message.service"; import {Router} from "@angular/router"; diff --git a/src/app/pourLes3Roles/register/page-register/page-register.component.html b/src/app/pourLes3Roles/register/page-register/page-register.component.html index 5ea96d6..364a1e4 100644 --- a/src/app/pourLes3Roles/register/page-register/page-register.component.html +++ b/src/app/pourLes3Roles/register/page-register/page-register.component.html @@ -1,6 +1,6 @@
- +

Inscription

diff --git a/src/app/pourLes3Roles/register/page-register/page-register.component.ts b/src/app/pourLes3Roles/register/page-register/page-register.component.ts index 7edfecb..fb7f049 100644 --- a/src/app/pourLes3Roles/register/page-register/page-register.component.ts +++ b/src/app/pourLes3Roles/register/page-register/page-register.component.ts @@ -1,5 +1,5 @@ import { Component, OnInit } from '@angular/core'; -import {MessageService} from "../../../utils/message/message.service"; +import {MessageService} from "../../../utils/services/message/message.service"; import {Router} from "@angular/router"; import {MatDialog} from "@angular/material/dialog"; import {PopupConfirmationComponent} from "../popup-confirmation/popup-confirmation.component"; diff --git a/src/app/user/page-search/page-search.component.html b/src/app/user/page-search/page-search.component.html deleted file mode 100644 index 3ef4668..0000000 --- a/src/app/user/page-search/page-search.component.html +++ /dev/null @@ -1 +0,0 @@ -

page-search works!

diff --git a/src/app/user/page-search/page-search.component.ts b/src/app/user/page-search/page-search.component.ts deleted file mode 100644 index 2e28c69..0000000 --- a/src/app/user/page-search/page-search.component.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Component, OnInit } from '@angular/core'; - -@Component({ - selector: 'app-page-search', - templateUrl: './page-search.component.html', - styleUrls: ['./page-search.component.scss'] -}) -export class PageSearchComponent implements OnInit { - - constructor() { } - - ngOnInit(): void { - } - -} diff --git a/src/app/user/search/page-search/page-search.component.html b/src/app/user/search/page-search/page-search.component.html new file mode 100644 index 0000000..f72da7c --- /dev/null +++ b/src/app/user/search/page-search/page-search.component.html @@ -0,0 +1,77 @@ +
+ + +
+ +
+ + + + +
+ + +
+
+ +
+
+ + + + +
+ + +
+
+   + +
+
+ + +
+
+ +   + + image + +   + +
+
+ + +
+ +
+ +
+ + + + +
+
+ +
+
+ +
+ + + + +
+
+
+
+ +
+
+
+
+ +
diff --git a/src/app/user/search/page-search/page-search.component.scss b/src/app/user/search/page-search/page-search.component.scss new file mode 100644 index 0000000..d21e578 --- /dev/null +++ b/src/app/user/search/page-search/page-search.component.scss @@ -0,0 +1,41 @@ +.conteneur { + text-align: center; + max-width: 100%; + max-height: 100vh; + overflow-x: hidden; + overflow-y: hidden; +} + +.blocMilieu1 { + height: 70vh; + margin-bottom: 70px +} + +.inputSearchBar { + width: 50%; +} + +.btnRechercher { + border: solid black 1px; + border-radius: 5px; +} + +.conteneurPubGauche { + border: solid black 2px; + height: 75vh; + margin-left: 20px; +} + +.conteneurPubDroite { + border: solid black 2px; + height: 75vh; + margin-right: 20px; +} + +.conteneurPubBas { + //width: 80%; + //margin-left: auto; + //margin-right: auto; + height: 100%; + border: solid black 2px; +} diff --git a/src/app/user/page-search/page-search.component.spec.ts b/src/app/user/search/page-search/page-search.component.spec.ts similarity index 100% rename from src/app/user/page-search/page-search.component.spec.ts rename to src/app/user/search/page-search/page-search.component.spec.ts diff --git a/src/app/user/search/page-search/page-search.component.ts b/src/app/user/search/page-search/page-search.component.ts new file mode 100644 index 0000000..f8109be --- /dev/null +++ b/src/app/user/search/page-search/page-search.component.ts @@ -0,0 +1,79 @@ +import { Component, OnInit } from '@angular/core'; +import {MessageService} from "../../../utils/services/message/message.service"; +import {FictitiousDatasService} from "../../../utils/services/fictitiousDatas/fictitious-datas.service"; +import {PlaylistService} from "../../../utils/services/playlist/playlist.service"; +import {Video} from "../../../utils/interfaces/video"; + + + +let TAB_PLATEFORM = [ + { name: "Youtube", isSelected: false }, + { name: "Dailymotion", isSelected: false } +]; + + + +@Component({ + selector: 'app-page-search', + templateUrl: './page-search.component.html', + styleUrls: ['./page-search.component.scss'] +}) +export class PageSearchComponent implements OnInit +{ + tabPlateform = TAB_PLATEFORM; + tabVideo: Video[] = []; + search: string = ""; + + + constructor( private messageService: MessageService, + private fictitiousDatasService: FictitiousDatasService) { } + + + ngOnInit(): void + { + // --- DONNEES FICTIVES --- + this.tabVideo = this.fictitiousDatasService.load_pageSeach(7); + + + // --- VRAI CODE --- + /* + let tabPlateformName = []; + for(let plateform of this.tabPlateform) tabPlateformName.push(plateform.name); + let data = { search: "", plaateforms: tabPlateformName }; + this.messageService + .sendMessage("user/searchVideo", data) + .subscribe(retour => { + if(retour.status === "error") console.log(retour.data); + else this.tabVideo = retour.data; + }); + */ + } + + + onSearch() + { + // --- DONNEES FICTIVES --- + console.log(this.tabPlateform) + this.tabVideo = []; + console.log(this.tabVideo) + //this.fictitiousDatasService.load_pageSeach(4); + + + // --- VRAI CODE --- + /* + let tabPlateformName = []; + for(let plateform of this.tabPlateform) + { + if(plateform.isSelected) tabPlateformName.push(plateform.name); + } + let data = { search: "", plaateforms: tabPlateformName }; + this.messageService + .sendMessage("user/searchVideo", data) + .subscribe(retour => { + if(retour.status === "error") console.log(retour.data); + else this.tabVideo = retour.data; + }); + */ + } + +} diff --git a/src/app/user/search/video-cell/video-cell.component.html b/src/app/user/search/video-cell/video-cell.component.html new file mode 100644 index 0000000..299766c --- /dev/null +++ b/src/app/user/search/video-cell/video-cell.component.html @@ -0,0 +1,9 @@ + + +
+ + {{video.title}} + +
diff --git a/src/app/user/search/video-cell/video-cell.component.scss b/src/app/user/search/video-cell/video-cell.component.scss new file mode 100644 index 0000000..a56bfce --- /dev/null +++ b/src/app/user/search/video-cell/video-cell.component.scss @@ -0,0 +1,5 @@ +.conteneur { + text-align: center; + //border: solid black 2px; + //border-radius: 5px; +} diff --git a/src/app/user/search/video-cell/video-cell.component.spec.ts b/src/app/user/search/video-cell/video-cell.component.spec.ts new file mode 100644 index 0000000..c41f534 --- /dev/null +++ b/src/app/user/search/video-cell/video-cell.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { VideoCellComponent } from './video-cell.component'; + +describe('RectangleVideoComponent', () => { + let component: VideoCellComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ VideoCellComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(VideoCellComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/user/search/video-cell/video-cell.component.ts b/src/app/user/search/video-cell/video-cell.component.ts new file mode 100644 index 0000000..3891b2d --- /dev/null +++ b/src/app/user/search/video-cell/video-cell.component.ts @@ -0,0 +1,33 @@ +import {Component, Input, OnInit} from '@angular/core'; +import {VideoUrlService} from "../../../utils/services/videoUrl/video-url.service"; +import {PlaylistService} from "../../../utils/services/playlist/playlist.service"; +import {Video} from "../../../utils/interfaces/video"; + + +@Component({ + selector: 'app-video-cell', + templateUrl: './video-cell.component.html', + styleUrls: ['./video-cell.component.scss'] +}) +export class VideoCellComponent implements OnInit +{ + @Input() video: Video; + safeUrl; + + + constructor( private videoUrlService: VideoUrlService, + private playlistService: PlaylistService ) {} + + + ngOnInit(): void + { + this.safeUrl = this.videoUrlService.safeUrl(this.video.url); + } + + + onAdd(): void + { + this.playlistService.addVideoToPlaylists(this.video) + console.log("onAdd:" + this.video.title); + } +} diff --git a/src/app/user/search/video-grid/video-grid.component.html b/src/app/user/search/video-grid/video-grid.component.html new file mode 100644 index 0000000..e3552ca --- /dev/null +++ b/src/app/user/search/video-grid/video-grid.component.html @@ -0,0 +1,11 @@ +
+ +
diff --git a/src/app/user/search/video-grid/video-grid.component.scss b/src/app/user/search/video-grid/video-grid.component.scss new file mode 100644 index 0000000..3d2de80 --- /dev/null +++ b/src/app/user/search/video-grid/video-grid.component.scss @@ -0,0 +1,13 @@ +.conteneur { + border: solid black 2px; +} + +nav ul { + overflow: hidden; + overflow-y: scroll; + height: 66vh; +} + +.ligne { + margin: 30px 0px 30px 0px; +} diff --git a/src/app/user/search/video-grid/video-grid.component.spec.ts b/src/app/user/search/video-grid/video-grid.component.spec.ts new file mode 100644 index 0000000..17cea62 --- /dev/null +++ b/src/app/user/search/video-grid/video-grid.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { VideoGridComponent } from './video-grid.component'; + +describe('VideoGridComponent', () => { + let component: VideoGridComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ VideoGridComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(VideoGridComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/user/search/video-grid/video-grid.component.ts b/src/app/user/search/video-grid/video-grid.component.ts new file mode 100644 index 0000000..b42c91a --- /dev/null +++ b/src/app/user/search/video-grid/video-grid.component.ts @@ -0,0 +1,34 @@ +import {Component, Input, OnChanges, OnInit, SimpleChanges} from '@angular/core'; +import {Video} from "../../../utils/interfaces/video"; + + +@Component({ + selector: 'app-video-grid', + templateUrl: './video-grid.component.html', + styleUrls: ['./video-grid.component.scss'] +}) +export class VideoGridComponent implements OnChanges +{ + @Input() tabVideo: Video[] = []; + tabTriplet = []; + + ngOnChanges(changes: SimpleChanges): void + { + this.tabTriplet = []; + let n = this.tabVideo.length; + let i = 0; + while(i < n) + { + let triplet = [] + let compteur = 0; + while((compteur < 3) && (i < n)) + { + triplet.push(this.tabVideo[i]); + i++ ; + compteur++ ; + } + this.tabTriplet.push(triplet) + } + } + +} diff --git a/src/app/utils/components/nav-bar/nav-bar.component.html b/src/app/utils/components/nav-bar/nav-bar.component.html new file mode 100644 index 0000000..583da41 --- /dev/null +++ b/src/app/utils/components/nav-bar/nav-bar.component.html @@ -0,0 +1,38 @@ + +
+ +
+ + + + diff --git a/src/app/utils/components/nav-bar/nav-bar.component.scss b/src/app/utils/components/nav-bar/nav-bar.component.scss new file mode 100644 index 0000000..e1a6e80 --- /dev/null +++ b/src/app/utils/components/nav-bar/nav-bar.component.scss @@ -0,0 +1,68 @@ +.StreamNotFound { + font-style: oblique; + font-family: cursive; + font-size: xx-large; +} + + +mat-icon { + margin-top: 2px; + font-size: xx-large; +} + + +mat-slide-toggle { + margin-top: 20px; +} + + +ul { + list-style-type: none; + margin: 0; + padding: 0; + overflow: hidden; + background-color: black; + height: 70px; + color: white; +} + + +li { + float: left; + font-size: x-large; + background-color: black; +} + + +li a { + display: block; + color: white; + text-align: center; + padding: 14px 16px; + text-decoration: none; + background-color: black; +} + + +.cliquable a:hover:not(.active) { + background-color: #c8c8c8; +} + + + + +::ng-deep .mat-slide-toggle-thumb { + background-color: #ffffff; +} + +::ng-deep .mat-slide-toggle-bar { + background-color: #c8c8c8; +} + +::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-thumb { + background-color: #ffffff; +} + +::ng-deep .mat-slide-toggle.mat-checked:not(.mat-disabled) .mat-slide-toggle-bar { + background-color: #646464; +} diff --git a/src/app/utils/nav-bar/nav-bar.component.spec.ts b/src/app/utils/components/nav-bar/nav-bar.component.spec.ts similarity index 100% rename from src/app/utils/nav-bar/nav-bar.component.spec.ts rename to src/app/utils/components/nav-bar/nav-bar.component.spec.ts diff --git a/src/app/utils/nav-bar/nav-bar.component.ts b/src/app/utils/components/nav-bar/nav-bar.component.ts similarity index 90% rename from src/app/utils/nav-bar/nav-bar.component.ts rename to src/app/utils/components/nav-bar/nav-bar.component.ts index 959b270..c1ba65b 100644 --- a/src/app/utils/nav-bar/nav-bar.component.ts +++ b/src/app/utils/components/nav-bar/nav-bar.component.ts @@ -7,7 +7,7 @@ import {Component, Input, OnInit} from '@angular/core'; }) export class NavBarComponent implements OnInit { - @Input() complete = false; + @Input() pour = "3roles"; constructor() { } diff --git a/src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.html b/src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.html new file mode 100644 index 0000000..c3e1dc1 --- /dev/null +++ b/src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.html @@ -0,0 +1,41 @@ +

Ajouter dans

+ + + + + +
+
+ {{playlist.name}} +
+
+ + + + + +
+ +
+ +
+ + Nom playlist + + + +
+ + + + + + + + + diff --git a/src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.scss b/src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.scss new file mode 100644 index 0000000..ca6c275 --- /dev/null +++ b/src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.scss @@ -0,0 +1,19 @@ +h3 { + text-align: center; + margin-bottom: 10px +} + +.conteneurPlaylists { + margin-top: 10px; + margin-bottom: 10px; +} + +.conteneurBtnCreerPlaylist { + margin-top: 10px; + margin-bottom: 10px; +} + +.conteneurInputNewPlaylist { + margin-top: 10px; + margin-bottom: 10px; +} diff --git a/src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.spec.ts b/src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.spec.ts new file mode 100644 index 0000000..5ace846 --- /dev/null +++ b/src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PopupAddVideoToPlaylistsComponent } from './popup-add-video-to-playlists.component'; + +describe('PopupAddVideoToPlaylistsComponent', () => { + let component: PopupAddVideoToPlaylistsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PopupAddVideoToPlaylistsComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PopupAddVideoToPlaylistsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.ts b/src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.ts new file mode 100644 index 0000000..381f107 --- /dev/null +++ b/src/app/utils/components/popup-add-video-to-playlists/popup-add-video-to-playlists.component.ts @@ -0,0 +1,36 @@ +import {Component, Inject, OnInit} from '@angular/core'; +import {MAT_DIALOG_DATA, MatDialogRef} from "@angular/material/dialog"; +import {Video} from "../../interfaces/video"; + +@Component({ + selector: 'app-popup-add-video-to-playlists', + templateUrl: './popup-add-video-to-playlists.component.html', + styleUrls: ['./popup-add-video-to-playlists.component.scss'] +}) +export class PopupAddVideoToPlaylistsComponent implements OnInit +{ + video: Video; + tabPlaylistAndBool = []; + goToCreatePlaylist = false; + newPlaylistName = ""; + + constructor( public dialogRef: MatDialogRef, + @Inject(MAT_DIALOG_DATA) public data ) { } + + + ngOnInit(): void + { + this.video = this.data.video; + const tabPlaylist = this.data.playlists; + for(let playlist of tabPlaylist) + { + playlist["isSelected"] = false; + this.tabPlaylistAndBool.push(playlist); + } + } + + onValider(): void + { + + } +} diff --git a/src/app/utils/components/pub/pub.component.html b/src/app/utils/components/pub/pub.component.html new file mode 100644 index 0000000..6522d0a --- /dev/null +++ b/src/app/utils/components/pub/pub.component.html @@ -0,0 +1,3 @@ +
+

Je suis une pub

+
diff --git a/src/app/user/page-search/page-search.component.scss b/src/app/utils/components/pub/pub.component.scss similarity index 100% rename from src/app/user/page-search/page-search.component.scss rename to src/app/utils/components/pub/pub.component.scss diff --git a/src/app/utils/components/pub/pub.component.spec.ts b/src/app/utils/components/pub/pub.component.spec.ts new file mode 100644 index 0000000..f9328bc --- /dev/null +++ b/src/app/utils/components/pub/pub.component.spec.ts @@ -0,0 +1,25 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { PubComponent } from './pub.component'; + +describe('PubComponent', () => { + let component: PubComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ PubComponent ] + }) + .compileComponents(); + }); + + beforeEach(() => { + fixture = TestBed.createComponent(PubComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/utils/components/pub/pub.component.ts b/src/app/utils/components/pub/pub.component.ts new file mode 100644 index 0000000..d23b635 --- /dev/null +++ b/src/app/utils/components/pub/pub.component.ts @@ -0,0 +1,19 @@ +import { Component, OnInit } from '@angular/core'; + + + +@Component({ + selector: 'app-pub', + templateUrl: './pub.component.html', + styleUrls: ['./pub.component.scss'] +}) +export class PubComponent implements OnInit +{ + + constructor() { } + + + ngOnInit(): void { + } + +} diff --git a/src/app/utils/interfaces/playlist.ts b/src/app/utils/interfaces/playlist.ts new file mode 100644 index 0000000..09a6140 --- /dev/null +++ b/src/app/utils/interfaces/playlist.ts @@ -0,0 +1,10 @@ +import {Video} from "./video"; + +export interface Playlist +{ + _id: string, + user: any, + name: string, + count: number + videos: Video[] +} diff --git a/src/app/utils/interfaces/video.ts b/src/app/utils/interfaces/video.ts new file mode 100644 index 0000000..1d6f375 --- /dev/null +++ b/src/app/utils/interfaces/video.ts @@ -0,0 +1,8 @@ +export interface Video +{ + _id: string, + url: string, + title: string, + description: string, + views: number +} diff --git a/src/app/utils/nav-bar/nav-bar.component.html b/src/app/utils/nav-bar/nav-bar.component.html deleted file mode 100644 index ece85d2..0000000 --- a/src/app/utils/nav-bar/nav-bar.component.html +++ /dev/null @@ -1,23 +0,0 @@ -
- -
- - - -
- -
diff --git a/src/app/utils/nav-bar/nav-bar.component.scss b/src/app/utils/nav-bar/nav-bar.component.scss deleted file mode 100644 index d6337b7..0000000 --- a/src/app/utils/nav-bar/nav-bar.component.scss +++ /dev/null @@ -1,34 +0,0 @@ -mat-slide-toggle { - margin-top: 20px; -} - - -ul { - list-style-type: none; - margin: 0; - padding: 0; - overflow: hidden; - background-color: black; - height: 70px; -} - -li { - float: left; - font-size: x-large; -} - -li a { - display: block; - color: white; - text-align: center; - padding: 14px 16px; - text-decoration: none; -} - -li a:hover:not(.active) { - background-color: #5caaff; -} - -.active { - background-color: #ff0000; -} diff --git a/src/app/utils/services/fictitiousDatas/fictitious-datas.service.spec.ts b/src/app/utils/services/fictitiousDatas/fictitious-datas.service.spec.ts new file mode 100644 index 0000000..17d518a --- /dev/null +++ b/src/app/utils/services/fictitiousDatas/fictitious-datas.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { FictitiousDatasService } from './fictitious-datas.service'; + +describe('FictitiousDatasService', () => { + let service: FictitiousDatasService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(FictitiousDatasService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/utils/services/fictitiousDatas/fictitious-datas.service.ts b/src/app/utils/services/fictitiousDatas/fictitious-datas.service.ts new file mode 100644 index 0000000..99bc4c3 --- /dev/null +++ b/src/app/utils/services/fictitiousDatas/fictitious-datas.service.ts @@ -0,0 +1,56 @@ +import { Injectable } from '@angular/core'; +import {Video} from "../../interfaces/video"; +import {Playlist} from "../../interfaces/playlist"; + +@Injectable({ + providedIn: 'root' +}) +export class FictitiousDatasService +{ + constructor() { } + + + load_pageSeach(n: number): Video[] + { + let tabVideo = []; + + let url0 = "" ; + for(let i=0 ; i { + let service: PlaylistService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(PlaylistService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/utils/services/playlist/playlist.service.ts b/src/app/utils/services/playlist/playlist.service.ts new file mode 100644 index 0000000..3dc64ec --- /dev/null +++ b/src/app/utils/services/playlist/playlist.service.ts @@ -0,0 +1,60 @@ +import { Injectable } from '@angular/core'; +import {MessageService} from "../message/message.service"; +import {MatDialog} from "@angular/material/dialog"; +import {PopupAddVideoToPlaylistsComponent} from "../../components/popup-add-video-to-playlists/popup-add-video-to-playlists.component"; +import {FictitiousDatasService} from "../fictitiousDatas/fictitious-datas.service"; +import {Video} from "../../interfaces/video"; + +@Injectable({ + providedIn: 'root' +}) +export class PlaylistService +{ + + constructor( private messageService: MessageService, + public dialog: MatDialog, + private fictitiousDatasService: FictitiousDatasService ) { } + + + addVideoToPlaylists(video0: Video): void + { + // --- DONNEES FICTIVES --- + const config = { + width: '30%', + data: { + video: video0, + playlists: this.fictitiousDatasService.getTabPlaylist() + } + } + this.dialog + .open(PopupAddVideoToPlaylistsComponent, config) + .afterClosed() + .subscribe(result => {}); + + + // --- VRAI CODE --- + /* + this.messageService + .sendMessage('user/get/playlists', null) + .subscribe( retour => { + + if(retour.status === "error") console.log(retour.data); + else + { + const config = { + width: '30%', + data: { + video: video0, + playlists: retour.data, + } + }; + this.dialog + .open(PopupAddVideoToPlaylistsComponent, config ) + .afterClosed() + .subscribe(result => {}); + } + }) + */ + } + +} diff --git a/src/app/utils/services/videoUrl/video-url.service.spec.ts b/src/app/utils/services/videoUrl/video-url.service.spec.ts new file mode 100644 index 0000000..7ded62b --- /dev/null +++ b/src/app/utils/services/videoUrl/video-url.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { VideoUrlService } from './video-url.service'; + +describe('VideoUrlService', () => { + let service: VideoUrlService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(VideoUrlService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/utils/services/videoUrl/video-url.service.ts b/src/app/utils/services/videoUrl/video-url.service.ts new file mode 100644 index 0000000..9317046 --- /dev/null +++ b/src/app/utils/services/videoUrl/video-url.service.ts @@ -0,0 +1,45 @@ +import { Injectable } from '@angular/core'; +import {DomSanitizer, SafeResourceUrl} from "@angular/platform-browser"; + +@Injectable({ + providedIn: 'root' +}) +export class VideoUrlService +{ + + constructor(private _sanitizer: DomSanitizer) { } + + + safeUrl(videoUrl: string): SafeResourceUrl + { + if(videoUrl.includes("youtu")) videoUrl = this.youtubeSafeUrl(videoUrl); + if(videoUrl.includes("dailymotion")) videoUrl = this.daylimotionSafeUrl(videoUrl); + return this._sanitizer.bypassSecurityTrustResourceUrl(videoUrl); + } + + + youtubeSafeUrl(videoUrl: string): string + { + if(videoUrl.includes("youtu.be")) + { + console.log("de la forme: https://youtu.be/blablabla"); + const tab = videoUrl.split("youtu.be/"); + videoUrl = tab[0] + "www.youtube.com/embed/" + tab[1]; + } + else if(videoUrl.includes("youtube.com/watch?v=")) + { + console.log("de la forme: https://www.youtube.com/watch?v=blablabla"); + const tab = videoUrl.split("youtube.com/watch?v="); + videoUrl = tab[0] + "youtube.com/embed/" + tab[1]; + } + return videoUrl; + } + + + daylimotionSafeUrl(videoUrl: string): string + { + console.log("de la forme: https://www.dailymotion.com/video/blablabla"); + const n = "https://www.dailymotion.com/".length; + return videoUrl.slice(0, n) + "embed/" + videoUrl.slice(n); + } +} diff --git a/src/assets/logo_plateforms/Dailymotion.png b/src/assets/logo_plateforms/Dailymotion.png new file mode 100644 index 0000000000000000000000000000000000000000..d35ee8a8b0e209615e57966d3d6f108844b2135d GIT binary patch literal 6478 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 literal 0 HcmV?d00001 diff --git a/src/proxy.conf.json b/src/proxy.conf.json new file mode 100644 index 0000000..f1e4285 --- /dev/null +++ b/src/proxy.conf.json @@ -0,0 +1,7 @@ +{ + "/api/*": { + "target": "http://localhost:3000", + "secure": false, + "logLevel": "debug" + } +}