| @@ -39,7 +39,7 @@ | |||
| "extractCss": true, | |||
| "namedChunks": false, | |||
| "aot": true, | |||
| "extractLicenses": true, | |||
| "extractLicenses": false, | |||
| "vendorChunk": false, | |||
| "buildOptimizer": true, | |||
| "fileReplacements": [{ | |||
| @@ -23,15 +23,18 @@ | |||
| "@angular/router": "9.0.6", | |||
| "@fortawesome/fontawesome-free": "^5.13.0", | |||
| "@ng-bootstrap/ng-bootstrap": "6.0.0", | |||
| "bootstrap": "4.1.2", | |||
| "bootstrap": "^4.5.0", | |||
| "core-js": "3.6.4", | |||
| "jquery": "3.2.1", | |||
| "html2canvas": "^1.0.0-rc.5", | |||
| "jquery": "^3.5.1", | |||
| "jspdf": "^1.5.3", | |||
| "jw-bootstrap-switch-ng2": "2.0.1", | |||
| "ng2-nouislider": "1.7.12", | |||
| "nouislider": "9.2.0", | |||
| "popper.js": "1.14.4", | |||
| "rxjs": "6.5.4", | |||
| "rxjs-compat": "6.5.4", | |||
| "spotify-web-api-node": "^4.0.0", | |||
| "zone.js": "0.10.2" | |||
| }, | |||
| "devDependencies": { | |||
| @@ -40,7 +43,7 @@ | |||
| "@angular/compiler-cli": "9.0.6", | |||
| "@angular/language-service": "9.0.6", | |||
| "@types/jasmine": "3.5.9", | |||
| "@types/node": "13.9.1", | |||
| "@types/spotify-web-api-node": "^4.0.1", | |||
| "codelyzer": "5.2.1", | |||
| "jasmine-core": "3.5.0", | |||
| "jasmine-spec-reporter": "4.2.1", | |||
| @@ -1,7 +1,6 @@ | |||
| import { NgModule } from '@angular/core'; | |||
| import { RouterModule, Routes } from '@angular/router'; | |||
| import { environment } from 'environments/environment'; | |||
| import { AboutComponent } from 'app/pages/about/about.component'; | |||
| import { NotFoundComponent } from 'app/pages/not-found/not-found.component'; | |||
| import { ResumeComponent } from './pages/resume/resume.component'; | |||
| import { GamesDashboardComponent } from './pages/games-dashboard/games-dashboard.component'; | |||
| @@ -48,17 +47,13 @@ const routes: Routes = [ | |||
| path: 'projects', | |||
| component: ProjectDashboardComponent, | |||
| }, | |||
| { | |||
| path: 'about', | |||
| component: AboutComponent, | |||
| }, | |||
| { | |||
| path: 'legal', | |||
| component: ImpressumComponent, | |||
| }, | |||
| { | |||
| path: '', | |||
| redirectTo: 'about', | |||
| redirectTo: 'resume', | |||
| pathMatch: 'full' | |||
| }, | |||
| { | |||
| @@ -21,6 +21,7 @@ import { LaserBluesComponent } from './pages/game-dashboard/laser-blues/laser-bl | |||
| import { SaltyPiranhaComponent } from './pages/game-dashboard/salty-piranha/salty-piranha.component'; | |||
| import { KeepInTouchComponent } from './pages/keep-in-touch/keep-in-touch.component'; | |||
| import { ImpressumComponent } from './shared/impressum/impressum.component'; | |||
| import { HobbyDashboardComponent } from './pages/hobby-dashboard/hobby-dashboard.component'; | |||
| @NgModule({ | |||
| @@ -38,6 +39,7 @@ import { ImpressumComponent } from './shared/impressum/impressum.component'; | |||
| SaltyPiranhaComponent, | |||
| KeepInTouchComponent, | |||
| ImpressumComponent, | |||
| HobbyDashboardComponent, | |||
| ], | |||
| imports: [ | |||
| BrowserModule, | |||
| @@ -7,7 +7,6 @@ import { JwBootstrapSwitchNg2Module } from 'jw-bootstrap-switch-ng2'; | |||
| import { RouterModule, Router } from '@angular/router'; | |||
| import { NotificationComponent } from './notification/notification.component'; | |||
| import { AboutComponent } from 'app/pages/about/about.component'; | |||
| import { PageHeaderModule } from 'app/page-header/page-header.module'; | |||
| @NgModule({ | |||
| @@ -21,10 +20,9 @@ import { PageHeaderModule } from 'app/page-header/page-header.module'; | |||
| JwBootstrapSwitchNg2Module, | |||
| ], | |||
| declarations: [ | |||
| AboutComponent, | |||
| NotificationComponent, | |||
| ], | |||
| entryComponents: [], | |||
| exports: [ AboutComponent, NotificationComponent] | |||
| exports: [ NotificationComponent] | |||
| }) | |||
| export class ComponentsModule { } | |||
| @@ -0,0 +1,61 @@ | |||
| export namespace ServiceHelper { | |||
| export class GenericHelper { | |||
| public static deepClone(obj: Object) { | |||
| return JSON.parse(JSON.stringify(obj)); | |||
| } | |||
| } | |||
| export const SPOTIFY_STAUS_CODES = { | |||
| OK: 200, | |||
| CREATED: 201, | |||
| ACCEPTED: 202, | |||
| NO_CONTENT: 204, | |||
| NOT_MODIFIED: 304, | |||
| BAD_REQUEST: 400, | |||
| UNAUTHORIZED: 401, | |||
| FORBIDDEN: 403, | |||
| NOT_FOUND: 404, | |||
| TOO_MANY: 429, | |||
| INTERNAL: 500, | |||
| BAD_GATEWAY: 502, | |||
| SERVICE_UNAVAILABLE: 503, | |||
| } | |||
| export class PaginationOptions { limit: number; offset: number; total: number; current: number; }; | |||
| export class OfssetHelper { | |||
| /** | |||
| * Exptract Offset from URL. | |||
| * | |||
| * @param url url with offset GET Param | |||
| * @returns offset if found if not -1 | |||
| */ | |||
| public getNextOffsetFromUrl(url: string): number { | |||
| const extractOffsetRegex = /(?:offset=)(\d+)/; | |||
| const offset = extractOffsetRegex.exec(url); | |||
| if (offset[1]) { | |||
| return parseInt(offset[1]); | |||
| } | |||
| return -1 | |||
| } | |||
| public getNextOffset(responseBody: PaginationOptions) { | |||
| const maxOffset = responseBody.total - responseBody.limit; | |||
| if ( | |||
| responseBody.total <= responseBody.limit || | |||
| responseBody.offset >= responseBody.limit || | |||
| responseBody.offset >= maxOffset | |||
| ) { | |||
| return -1; | |||
| } | |||
| if (responseBody.offset < 0) { | |||
| throw new Error("offset can't be smaller than 0!"); | |||
| } | |||
| // if limit + current offset not overflows maxOffset return | |||
| if ((responseBody.limit + responseBody.offset) <= maxOffset) { | |||
| return responseBody.limit + responseBody.offset; | |||
| } | |||
| // return the rest | |||
| return responseBody.limit % responseBody.total; | |||
| } | |||
| } | |||
| } | |||
| @@ -1,15 +1,21 @@ | |||
| <div class="page-header section-dark" style="background-image: url('assets/img/dark-fog-forest-haze-small.jpg')"> | |||
| <div class="filter"></div> | |||
| <div class="content-center"> | |||
| <div class="container"> | |||
| <div class="title-brand"> | |||
| <div class="logo"> | |||
| </div> | |||
| <h1 class="presentation-title">ZIERMACH³</h1> | |||
| </div> | |||
| <h2 class="presentation-subtitle text-center"></h2> | |||
| </div> | |||
| <div | |||
| class="page-header section-dark" | |||
| style="background-image: url('assets/img/dark-fog-forest-haze-small.jpg');" | |||
| > | |||
| <div class="filter"></div> | |||
| <div class="container-left slide-in-right"> | |||
| <div class="title-brand text-left"> | |||
| <h1 class="presentation-title">Christian Ziermann</h1> | |||
| <h1>Web Developer</h1> | |||
| </div> | |||
| <div class="moving-clouds" style="background-image: url('assets/img/clouds.png'); "></div> | |||
| </div> | |||
| </div> | |||
| <div | |||
| class="moving-clouds" | |||
| style="background-image: url('assets/img/clouds.png');" | |||
| ></div> | |||
| <div | |||
| class="avatar-head" | |||
| style="background-image: url('assets/img/avatar-transparent.png');" | |||
| ></div> | |||
| </div> | |||
| @@ -4,6 +4,7 @@ import { DefaultPageHeaderComponent } from './default-page-header/default-page-h | |||
| import { GameHeaderComponent } from './game-header/game-header.component'; | |||
| import { ProjectHeaderComponent } from './project-header/project-header.component'; | |||
| import { ResumeHeaderComponent } from './resume-header/resume-header.component'; | |||
| import { RouterModule } from '@angular/router'; | |||
| @@ -15,7 +16,8 @@ import { ResumeHeaderComponent } from './resume-header/resume-header.component'; | |||
| ResumeHeaderComponent | |||
| ], | |||
| imports: [ | |||
| CommonModule | |||
| CommonModule, | |||
| RouterModule | |||
| ], | |||
| exports: [ | |||
| DefaultPageHeaderComponent, | |||
| @@ -1,10 +1,13 @@ | |||
| <div class="page-header section-dark page-header-small" style="background-image: url('assets/img/about-thumbnail.jpg')"> | |||
| <div class="page-header section-dark page-header-small" style="background-image: url('assets/img/dark-fog-forest-haze-small.jpg')"> | |||
| <div class="filter"></div> | |||
| <div class="content-center"> | |||
| <div class="container"> | |||
| <div class="title-brand"> | |||
| <h1 class="presentation-title">About me</h1> | |||
| </div> | |||
| <h2 class="presentation-subtitle text-center"></h2> | |||
| </div> | |||
| </div> | |||
| <div class="moving-clouds" style="background-image: url('assets/img/clouds.png'); "></div> | |||
| </div> | |||
| @@ -1,72 +0,0 @@ | |||
| <div class="wrapper"> | |||
| <app-default-page-header></app-default-page-header> | |||
| <div class="main"> | |||
| <div class="section section-gray profile-content"> | |||
| <div class="container"> | |||
| <div class="owner"> | |||
| <div class="avatar"> | |||
| <img | |||
| src="./assets/img/avatar/profilbild.jpg" | |||
| alt="Circle Image" | |||
| class="img-circle img-no-padding img-responsive" | |||
| /> | |||
| </div> | |||
| <div class="name"> | |||
| <h4 class="title">Christian Ziermann<br /></h4> | |||
| <h6 class="description">Web Developer</h6> | |||
| </div> | |||
| </div> | |||
| <div class="row"> | |||
| <div class="col-md-6 ml-auto mr-auto text-center"> | |||
| <a | |||
| [routerLink]="['/resume']" | |||
| class="btn btn-link btn-danger" | |||
| >See more</a | |||
| > | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="section section-dark text-center"> | |||
| <div class="container"> | |||
| <div class="row"> | |||
| <div class="col-md-6"> | |||
| <div class="info"> | |||
| <div class="icon icon-danger"> | |||
| <i class="fas fa-gamepad"></i> | |||
| </div> | |||
| <div class="description"> | |||
| <h4 class="info-title">Games</h4> | |||
| <p class="description"> | |||
| some small Games i made with some friends. | |||
| </p> | |||
| <a | |||
| [routerLink]="['/games']" | |||
| class="btn btn-link btn-danger" | |||
| >See more</a | |||
| > | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="col-md-6"> | |||
| <div class="info"> | |||
| <div class="icon icon-danger"> | |||
| <i class="fas fa-code"></i> | |||
| </div> | |||
| <div class="description"> | |||
| <h4 class="info-title">Projects</h4> | |||
| <p>from simple Script to bigger Web-Projects.</p> | |||
| <a | |||
| [routerLink]="['/projects']" | |||
| class="btn btn-link btn-danger" | |||
| >See more</a | |||
| > | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -1,25 +0,0 @@ | |||
| import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
| import { AboutComponent } from './about.component'; | |||
| describe('AboutComponent', () => { | |||
| let component: AboutComponent; | |||
| let fixture: ComponentFixture<AboutComponent>; | |||
| beforeEach(async(() => { | |||
| TestBed.configureTestingModule({ | |||
| declarations: [ AboutComponent ] | |||
| }) | |||
| .compileComponents(); | |||
| })); | |||
| beforeEach(() => { | |||
| fixture = TestBed.createComponent(AboutComponent); | |||
| component = fixture.componentInstance; | |||
| fixture.detectChanges(); | |||
| }); | |||
| it('should be created', () => { | |||
| expect(component).toBeTruthy(); | |||
| }); | |||
| }); | |||
| @@ -1,16 +0,0 @@ | |||
| import { Component, OnInit } from '@angular/core'; | |||
| @Component({ | |||
| selector: 'app-about', | |||
| templateUrl: './about.component.html', | |||
| styleUrls: ['./about.component.scss'] | |||
| }) | |||
| export class AboutComponent implements OnInit { | |||
| focus = true; | |||
| focus1 = true; | |||
| constructor() { } | |||
| ngOnInit() {} | |||
| } | |||
| @@ -0,0 +1,150 @@ | |||
| <div class="wrapper"> | |||
| <app-game-header></app-game-header> | |||
| <div class="main"> | |||
| <div class="section section-dark"> | |||
| <div class="container"> | |||
| <div class="row"> | |||
| <div class="col-sm-4 offset-md-4"> | |||
| <div class="info text-center"> | |||
| <div class="icon icon-danger"> | |||
| <i class="fab fa-itch-io"></i> | |||
| </div> | |||
| <div class="description"> | |||
| <h4 class="info-title">Mini Beans Jam Games</h4> | |||
| <p class="description"> | |||
| All these games bellow where made for an GameJam called Mini | |||
| Beans Jam. The Challange was to create an game for an motto | |||
| given by 3 random words in 42 Hours (Friday - Sunday). I made | |||
| this Games with an small Hobby Team called WhyMonkeys. | |||
| </p> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="section section-gray"> | |||
| <div class="container"> | |||
| <div class="row"> | |||
| <div class="col-md-6"> | |||
| <div class="card"> | |||
| <img | |||
| class="card-img-top" | |||
| src="/assets/img/mrq-thumbnail.png" | |||
| alt="Card image cap" | |||
| /> | |||
| <div class="card-body"> | |||
| <h4 class="card-title">Magnetic Recycling Queen</h4> | |||
| <p class="card-text"> | |||
| The first game i helped to Develop. | |||
| Made with Unity. | |||
| </p> | |||
| <a | |||
| routerLink="/games/magnetic-recycling-queen" | |||
| class="btn btn-primary" | |||
| >Play Now!</a | |||
| > | |||
| <a href="https://karotofel.itch.io/mrq" class="btn btn-primary"> | |||
| Check out on <i class="fab fa-itch-io"></i> | |||
| </a> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="col-md-6"> | |||
| <div class="card"> | |||
| <img | |||
| class="card-img-top" | |||
| src="/assets/img/wtf-thumbnail.png" | |||
| alt="Card image cap" | |||
| /> | |||
| <div class="card-body"> | |||
| <h4 class="card-title">What the fungi</h4> | |||
| <p class="card-text"> | |||
| In this game i tried my self at an A* search algorithm It went | |||
| okay ... | |||
| </p> | |||
| <p> | |||
| Made with Unity. | |||
| </p> | |||
| <a routerLink="/games/what-the-fungi" class="btn btn-primary" | |||
| >Play Now!</a | |||
| > | |||
| <a | |||
| href="https://karotofel.itch.io/wtfungi" | |||
| class="btn btn-primary" | |||
| > | |||
| Check out on <i class="fab fa-itch-io"></i> | |||
| </a> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="row"> | |||
| <div class="col-md-6"> | |||
| <div class="card"> | |||
| <img | |||
| class="card-img-top" | |||
| id="disco-thumbnail" | |||
| src="/assets/img/disco-blues-thumbnail.png" | |||
| alt="Card image cap" | |||
| /> | |||
| <img | |||
| class="card-img-top" | |||
| id="disco-gif" | |||
| src="/assets/img/disco-blues.gif" | |||
| alt="Card image cap" | |||
| /> | |||
| <div class="card-body"> | |||
| <h4 class="card-title">Disc(o) Blues</h4> | |||
| <p class="card-text"> | |||
| This is game was far the most Complex i helped with. It's | |||
| Primary made for Mobile so the UI is in web a bit messy. The | |||
| idea and the Style is great but i was to much for the size of | |||
| team and the given time. | |||
| Made with Unity. | |||
| </p> | |||
| <a routerLink="/games/laser-blues" class="btn btn-primary" | |||
| >Play Now!</a | |||
| > | |||
| <a | |||
| href="https://karotofel.itch.io/laser-blues" | |||
| class="btn btn-primary" | |||
| > | |||
| Check out on <i class="fab fa-itch-io"></i> | |||
| </a> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="col-md-6"> | |||
| <div class="card"> | |||
| <img | |||
| class="card-img-top" | |||
| src="/assets/img/salty-piranha-thumbnail.png" | |||
| alt="Card image cap" | |||
| /> | |||
| <div class="card-body"> | |||
| <h4 class="card-title">Salty Prianha</h4> | |||
| <p class="card-text"> | |||
| First game where i did 100% of the coding. A small but nice | |||
| project only done by 2 people in less than 42 hours. Also my | |||
| first experience with the Godot Engine. | |||
| Made with Godot. | |||
| </p> | |||
| <a routerLink="/games/salty-piranha" class="btn btn-primary" | |||
| >Play Now!</a | |||
| > | |||
| <a | |||
| href="https://karotofel.itch.io/salty-piranha" | |||
| class="btn btn-primary" | |||
| > | |||
| Check out on <i class="fab fa-itch-io"></i> | |||
| </a> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @@ -0,0 +1,25 @@ | |||
| import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
| import { HobbyDashboardComponent } from './hobby-dashboard.component'; | |||
| describe('HobbyDashboardComponent', () => { | |||
| let component: HobbyDashboardComponent; | |||
| let fixture: ComponentFixture<HobbyDashboardComponent>; | |||
| beforeEach(async(() => { | |||
| TestBed.configureTestingModule({ | |||
| declarations: [ HobbyDashboardComponent ] | |||
| }) | |||
| .compileComponents(); | |||
| })); | |||
| beforeEach(() => { | |||
| fixture = TestBed.createComponent(HobbyDashboardComponent); | |||
| component = fixture.componentInstance; | |||
| fixture.detectChanges(); | |||
| }); | |||
| it('should create', () => { | |||
| expect(component).toBeTruthy(); | |||
| }); | |||
| }); | |||
| @@ -0,0 +1,16 @@ | |||
| import { Component, OnInit } from '@angular/core'; | |||
| import { SpotifyService } from './spotify.service'; | |||
| @Component({ | |||
| selector: 'app-hobby-dashboard', | |||
| templateUrl: './hobby-dashboard.component.html', | |||
| styleUrls: ['./hobby-dashboard.component.css'] | |||
| }) | |||
| export class HobbyDashboardComponent implements OnInit { | |||
| constructor(public spotifyService: SpotifyService) { } | |||
| ngOnInit(): void { | |||
| } | |||
| } | |||
| @@ -0,0 +1,16 @@ | |||
| import { TestBed } from '@angular/core/testing'; | |||
| import { SpotifyService } from './spotify.service'; | |||
| describe('SpotifyService', () => { | |||
| let service: SpotifyService; | |||
| beforeEach(() => { | |||
| TestBed.configureTestingModule({}); | |||
| service = TestBed.inject(SpotifyService); | |||
| }); | |||
| it('should be created', () => { | |||
| expect(service).toBeTruthy(); | |||
| }); | |||
| }); | |||
| @@ -0,0 +1,147 @@ | |||
| import { Injectable } from '@angular/core'; | |||
| import { ServiceHelper } from 'app/helper/service-helper'; | |||
| @Injectable({ | |||
| providedIn: 'root' | |||
| }) | |||
| export class SpotifyService { | |||
| // protected _playlists: Array<Object> = []; | |||
| // protected spotifyWebApi = require('spotify-web-api-node'); | |||
| // constructor( | |||
| // protected offsetHelper: ServiceHelper.OfssetHelper, | |||
| // ) { } | |||
| // public async setUserPlaylists(): Promise<Object[]> { | |||
| // return new Promise<Object[]>( | |||
| // (resolve, reject) => { | |||
| // // get All Playlists of user | |||
| // this.getAllUserPlaylists().then( | |||
| // (playlists) => { | |||
| // this.resolvePlaylists(playlists).then(resolvedPlaylists => { | |||
| // this._playlists = resolvedPlaylists as Object[]; | |||
| // resolve(this._playlists); | |||
| // }); | |||
| // }, | |||
| // (err) => { | |||
| // reject(err); | |||
| // }); | |||
| // }); | |||
| // } | |||
| // public get playlists(): Array<Object> { | |||
| // return this._playlists; | |||
| // } | |||
| // public getPlaylistById(playlistId: string): Object | null { | |||
| // return this._playlists.find((playlist) => { | |||
| // return playlist['id'] === playlistId; | |||
| // }); | |||
| // } | |||
| // protected enlistPlaylistInQueue(playlist: Object) { | |||
| // console.debug(`Too many Requests save ${playlist} in Queue`); | |||
| // // TODO enlist Playlist in DB | |||
| // } | |||
| // protected async getAllUserPlaylists(pagingObject?: Object): Promise<Array<Object>> { | |||
| // return new Promise<Array<Object>>(async (resolve, reject) => { | |||
| // let playlists = new Array<Object>(); | |||
| // this.spotifyWebApi.getUserPlaylists({ offset: !!pagingObject ? pagingObject['offset'] : 0 }).then( | |||
| // async (paginatePlaylistsResponse) => { | |||
| // if (!paginatePlaylistsResponse) { | |||
| // reject(`Can't get Playlists of current user, response empty.`); | |||
| // } | |||
| // playlists = paginatePlaylistsResponse.body.items; | |||
| // pagingObject = paginatePlaylistsResponse.body; | |||
| // if (paginatePlaylistsResponse.body.next) { | |||
| // const offset = this.offsetHelper.getNextOffsetFromUrl(paginatePlaylistsResponse.body.next); | |||
| // if (offset === -1) { | |||
| // resolve(playlists); | |||
| // } | |||
| // pagingObject['offset'] = offset; | |||
| // this.getAllUserPlaylists(pagingObject).then((paginatePlaylists) => { | |||
| // playlists = playlists.concat(paginatePlaylists); | |||
| // resolve(playlists); | |||
| // }, | |||
| // (err) => { | |||
| // reject(err); | |||
| // }); | |||
| // return; | |||
| // } | |||
| // resolve(playlists); | |||
| // }, | |||
| // (err) => { | |||
| // if (err.statusCode === ServiceHelper.SPOTIFY_STAUS_CODES.TOO_MANY) { | |||
| // playlists.forEach(playlist => { | |||
| // this.enlistPlaylistInQueue(playlist) | |||
| // }); | |||
| // resolve(); | |||
| // return; | |||
| // } | |||
| // reject(`Can't get Playlists of current user ${err}`); | |||
| // } | |||
| // ); | |||
| // }); | |||
| // } | |||
| // protected async resolvePlaylists(playlists: Array<Object>): Promise<Object> { | |||
| // const getPlaylistTracksPromises = Array<Promise<Object>>(); | |||
| // for (const playlist of playlists) { | |||
| // getPlaylistTracksPromises.push( | |||
| // this.resolvePlaylist(playlist) | |||
| // ); | |||
| // } | |||
| // return Promise.all(getPlaylistTracksPromises); | |||
| // } | |||
| // protected resolvePlaylist( | |||
| // playlist, | |||
| // pagingObject? | |||
| // ): Promise<Object> { | |||
| // return new Promise<Object>(async (resolve, reject) => { | |||
| // this.spotifyWebApi.getPlaylistTracks(playlist.id, { offset: !!pagingObject ? pagingObject.offset : 0 }).then( | |||
| // (tracksResponse) => { | |||
| // const fullPlaylist = ServiceHelper.GenericHelper.deepClone(playlist); | |||
| // if (!playlist) { | |||
| // resolve(fullPlaylist); | |||
| // return; | |||
| // } | |||
| // fullPlaylist.tracks = tracksResponse.body; | |||
| // pagingObject = tracksResponse.body; | |||
| // if (tracksResponse.body.next) { | |||
| // const offset = this.offsetHelper.getNextOffsetFromUrl(tracksResponse.body.next); | |||
| // if (offset === -1) { | |||
| // resolve(fullPlaylist); | |||
| // return; | |||
| // } | |||
| // pagingObject.offset = offset; | |||
| // this.resolvePlaylist(fullPlaylist, pagingObject).then( | |||
| // (fullTracksResponse) => { | |||
| // if (fullTracksResponse) { | |||
| // fullPlaylist.tracks.items = fullPlaylist.tracks.items.concat(fullTracksResponse['tracks'].items); | |||
| // } | |||
| // resolve(fullPlaylist); | |||
| // }, | |||
| // (err) => { | |||
| // reject(err); | |||
| // }); | |||
| // return; | |||
| // } | |||
| // resolve(fullPlaylist); | |||
| // }, (err) => { | |||
| // if (err.statusCode === ServiceHelper.SPOTIFY_STAUS_CODES.TOO_MANY) { | |||
| // this.enlistPlaylistInQueue(playlist) | |||
| // resolve(); | |||
| // return; | |||
| // } | |||
| // reject(`Can't get Playlist: ${playlist.name}. ${err}`); | |||
| // }) | |||
| // }); | |||
| // } | |||
| } | |||
| @@ -3,9 +3,9 @@ | |||
| <div class="main"> | |||
| <div class="section section-dark"> | |||
| <div class="container"> | |||
| <div class="row"> | |||
| <div class="row text-center title"> | |||
| <div class="col-sm-4 offset-md-4"> | |||
| <div class="info text-center"> | |||
| <div class="info text-center logo"> | |||
| <i class="fas fa-globe"></i> | |||
| </div> | |||
| <div class="description"> | |||
| @@ -80,7 +80,7 @@ | |||
| </div> | |||
| <div class="description"> | |||
| <h4 class="info-title"> | |||
| <a class="btn" href="https://github.com/JackWolfskind" | |||
| <a class="btn btn-link" href="https://github.com/JackWolfskind" | |||
| >My Github Site</a | |||
| > | |||
| </h4> | |||
| @@ -94,7 +94,7 @@ | |||
| </div> | |||
| <div class="description"> | |||
| <h4 class="info-title"> | |||
| <a class="btn" href="https://www.npmjs.com/~cziermann" | |||
| <a class="btn btn-link" href="https://www.npmjs.com/~cziermann" | |||
| >My NPM Site</a | |||
| > | |||
| </h4> | |||
| @@ -0,0 +1,50 @@ | |||
| .no-border { | |||
| border: none; | |||
| } | |||
| .skill-logo { | |||
| font-size: 30px; | |||
| min-height: 1em !important; | |||
| min-width: 0.875em !important; | |||
| } | |||
| .skill-logo > div > img { | |||
| background-color: white; | |||
| } | |||
| .skill { | |||
| padding-left: 2%; | |||
| padding-right: 2%; | |||
| padding-bottom: 2%; | |||
| padding-top: 2%; | |||
| } | |||
| table { | |||
| color: white; | |||
| } | |||
| .section-experience { | |||
| background-image: url("/assets/img/pexels-photo-370799.jpeg"); | |||
| } | |||
| .section-soft-skills { | |||
| background-image: url("/assets/img/pexels-photo-1629236.jpeg"); | |||
| } | |||
| .section-transparent { | |||
| border-bottom: 1px solid transparent; | |||
| box-shadow: none; | |||
| background: transparent !important; | |||
| } | |||
| html, .main { | |||
| background-image: url("/assets/img/pexels-photo-1252890.jpeg"); | |||
| background-position: center center; | |||
| background-size: cover; | |||
| background-attachment: fixed; | |||
| margin-top: 0; | |||
| } | |||
| @@ -1,11 +1,29 @@ | |||
| import { Component, OnInit } from '@angular/core'; | |||
| import * as jspdf from 'jspdf'; | |||
| import html2canvas from 'html2canvas'; | |||
| export type Star = 0 | 0.5 | 1 | 1.5 | 2 | 2.5 | 3 | 3.5 | 4 | 4.5 | 5; | |||
| export const STAR_CLASS_MAP = { | |||
| 0: 'far fa-star', | |||
| 0.5: 'fas fa-star-half', | |||
| 1: 'fas fa-star', | |||
| } | |||
| export const MAX_STARS = 5; | |||
| export interface Skill { | |||
| name: string; | |||
| iconHtml: string; | |||
| starCount: Star; | |||
| } | |||
| @Component({ | |||
| selector: 'app-resume', | |||
| templateUrl: './resume.component.html', | |||
| styleUrls: ['./resume.component.css'] | |||
| styleUrls: ['./resume.component.scss'] | |||
| }) | |||
| export class ResumeComponent implements OnInit { | |||
| public focus = false; | |||
| public focus1 = false; | |||
| displayedPersonalColumns = [ | |||
| 'name', | |||
| 'birthdate', | |||
| @@ -16,9 +34,212 @@ export class ResumeComponent implements OnInit { | |||
| birthdate: new Date('September 3, 1996'), | |||
| location: 'Aachner Straße 545 Cologne 50933', | |||
| } | |||
| public softSkills: Skill[] = [ | |||
| { | |||
| name: 'Teamwork', | |||
| iconHtml: '<i class="fas fa-users"></i>', | |||
| starCount: 4 | |||
| }, | |||
| { | |||
| name: 'Communication', | |||
| iconHtml: '<i class="fas fa-comments"></i>', | |||
| starCount: 4.5 | |||
| }, | |||
| ]; | |||
| public likeToLearn: Skill[] = [ | |||
| { | |||
| name: 'IoT', | |||
| iconHtml: 'fas fa-microchip', | |||
| starCount: 0 | |||
| }, | |||
| { | |||
| name: 'Deep Learning', | |||
| iconHtml: 'fas fa-cogs', | |||
| starCount: 0 | |||
| }, | |||
| { | |||
| name: 'Game Development', | |||
| iconHtml: 'fas fa-gamepad', | |||
| starCount: 2 | |||
| }, | |||
| { | |||
| name: 'Vuejs', | |||
| iconHtml: 'fab fa-vuejs', | |||
| starCount: 0 | |||
| }, | |||
| ]; | |||
| public languages: Skill[] = [ | |||
| { | |||
| name: 'German (native language)', | |||
| iconHtml: '<img height="30" src="/assets/icons/flags/german.png" alt="German">', | |||
| starCount: 5 | |||
| }, | |||
| { | |||
| name: 'English', | |||
| iconHtml: '<img height="30" src="/assets/icons/flags/english.png" alt="English">', | |||
| starCount: 3.5 | |||
| }, | |||
| ]; | |||
| public skills: Skill[] = [ | |||
| { | |||
| name: 'Unit-testing', | |||
| iconHtml: '<i class="fas fa-vial"></i>', | |||
| starCount: 3 | |||
| }, | |||
| { | |||
| name: 'Jira', | |||
| iconHtml: '<i class="fab fa-jira"></i> ', | |||
| starCount: 4 | |||
| }, | |||
| { | |||
| name: 'Apache', | |||
| iconHtml: '<img height="30" src="/assets/icons/apache.png" alt="Apache">', | |||
| starCount: 2.5 | |||
| }, | |||
| { | |||
| name: 'Nginx', | |||
| iconHtml: '<img height="30" src="/assets/icons/nginx.svg" alt="Nginx">', | |||
| starCount: 4.5 | |||
| }, | |||
| { | |||
| name: 'Jenkins', | |||
| iconHtml: '<i class="fab fa-jenkins"></i>', | |||
| starCount: 3 | |||
| }, | |||
| { | |||
| name: 'SQL', | |||
| iconHtml: '<i class="fas fa-database"></i>', | |||
| starCount: 3.5 | |||
| }, | |||
| { | |||
| name: 'Python', | |||
| iconHtml: '<i class="fab fa-python"></i>', | |||
| starCount: 2 | |||
| }, | |||
| { | |||
| name: 'PHP', | |||
| iconHtml: '<i class="fab fa-php"></i>', | |||
| starCount: 4 | |||
| }, | |||
| { | |||
| name: 'HTML & CSS', | |||
| iconHtml: '<i class="fab fa-html5"></i>', | |||
| starCount: 4.5 | |||
| }, | |||
| { | |||
| name: 'Angular 2+ & AngularJS', | |||
| iconHtml: '<i class="fab fa-angular"></i>', | |||
| starCount: 4.5 | |||
| }, | |||
| { | |||
| name: 'NestJs', | |||
| iconHtml: '<img height="30" src="/assets/icons/nestjs.svg" alt="NestJs">', | |||
| starCount: 4 | |||
| }, | |||
| { | |||
| name: 'Twig', | |||
| iconHtml: '<img height="30" src="/assets/icons/twig.png" alt="NestJs">', | |||
| starCount: 4.5 | |||
| }, | |||
| { | |||
| name: 'Electron', | |||
| iconHtml: '<i class="fas fa-atom"></i>', | |||
| starCount: 4 | |||
| }, | |||
| { | |||
| name: 'Typescript', | |||
| iconHtml: '<img height="30" color="white" class="skill-logo" src="/assets/icons/typescript.svg" alt="Typescript">', | |||
| starCount: 4 | |||
| }, | |||
| { | |||
| name: 'Ubuntu', | |||
| iconHtml: '<i class="fab fa-ubuntu"></i>', | |||
| starCount: 4 | |||
| }, | |||
| { | |||
| name: 'Docker', | |||
| iconHtml: '<i class="fab fa-docker"></i>', | |||
| starCount: 3 | |||
| }, | |||
| { | |||
| name: 'Kubernetes', | |||
| iconHtml: '<img height="30" src="/assets/icons/kubernetes.png" alt="Kubernetes">', | |||
| starCount: 2 | |||
| }, | |||
| { | |||
| name: 'Git', | |||
| iconHtml: '<i class="fab fa-git"></i>', | |||
| starCount: 4.5 | |||
| }, | |||
| { | |||
| name: 'NPM', | |||
| iconHtml: '<i class="fab fa-npm"></i>', | |||
| starCount: 5 | |||
| }, | |||
| { | |||
| name: 'Unity', | |||
| iconHtml: '<i class="fab fa-unity"></i>', | |||
| starCount: 2 | |||
| }, | |||
| { | |||
| name: 'Godot', | |||
| iconHtml: '<img height="30" src="/assets/icons/kubernetes.png" alt="Godot">', | |||
| starCount: 4.5 | |||
| }, | |||
| { | |||
| name: 'C#', | |||
| iconHtml: '<div height="30">C#</div>', | |||
| starCount: 4.5 | |||
| }, | |||
| ]; | |||
| constructor() { } | |||
| ngOnInit(): void { | |||
| } | |||
| public captureScreen() { | |||
| debugger; | |||
| let data = document.getElementById('contentToConvert'); | |||
| html2canvas(data).then(canvas => { | |||
| // Few necessary setting options | |||
| let imgWidth = 208; | |||
| let pageHeight = 295; | |||
| let imgHeight = canvas.height * imgWidth / canvas.width; | |||
| let heightLeft = imgHeight; | |||
| const contentDataURL = canvas.toDataURL('image/png') | |||
| let pdf = new jspdf('p', 'mm', 'a4'); // A4 size page of PDF | |||
| let position = 0; | |||
| pdf.addImage(contentDataURL, 'PNG', 0, position, imgWidth, imgHeight) | |||
| pdf.save('MYPdf.pdf'); // Generated PDF | |||
| }); | |||
| } | |||
| getStarClass(starCount: Star, starIndex: number) { | |||
| const starSizes: number[] = []; | |||
| let starCountWorker = starCount; | |||
| for (let starIterator = 1; starIterator <= MAX_STARS; starIterator++) { | |||
| if (starCountWorker >= 1) { | |||
| starCountWorker = (starCountWorker - 1) as Star; | |||
| starSizes.push(1); | |||
| } else { | |||
| if (starCountWorker === 0) { | |||
| starSizes.push(starCountWorker); | |||
| continue; | |||
| } | |||
| starSizes.push(starCountWorker); | |||
| starCountWorker = 0; | |||
| } | |||
| } | |||
| return STAR_CLASS_MAP[starSizes[starIndex]]; | |||
| } | |||
| } | |||
| @@ -1,34 +1,110 @@ | |||
| <nav class="navbar navbar-expand-lg fixed-top navbar-transparent" color-on-scroll="500"> | |||
| <div class="container"> | |||
| <div class="navbar-translate"> | |||
| <a class="navbar-brand" href="">ziermach³</a> | |||
| <button class="navbar-toggler navbar-burger" type="button" data-toggle="collapse" data-target="#navbarToggler" aria-controls="navbarTogglerDemo02" aria-expanded="false" aria-label="Toggle navigation" (click)="sidebarToggle()"> | |||
| <span class="navbar-toggler-bar"></span> | |||
| <span class="navbar-toggler-bar"></span> | |||
| <span class="navbar-toggler-bar"></span> | |||
| </button> | |||
| </div> | |||
| <div class="navbar-collapse" id="navbarToggler"> | |||
| <ul class="navbar-nav ml-auto"> | |||
| <li class="nav-item" *ngIf="!isDocumentation()"> | |||
| <a class="nav-link" rel="tooltip" title="Star on GitHub" data-placement="bottom" href="https://github.com/JackWolfskind" target="_blank"> | |||
| <i class="fab fa-github"></i> | |||
| <p class="d-lg-none">GitHub</p> | |||
| </a> | |||
| </li> | |||
| <li class="nav-item" *ngIf="!isDocumentation()"> | |||
| <a class="nav-link" rel="tooltip" title="my NPM Stuff" data-placement="bottom" href="https://www.npmjs.com/~cziermann" target="_blank"> | |||
| <i class="fab fa-npm"></i> | |||
| <p class="d-lg-none">NPM</p> | |||
| </a> | |||
| </li> | |||
| <li class="nav-item" *ngIf="!isDocumentation()"> | |||
| <a class="nav-link" rel="tooltip" title="My Xing" data-placement="bottom" href="https://www.xing.com/profile/Christian_Ziermann3" target="_blank"> | |||
| <i class="fab fa-xing"></i> | |||
| <p class="d-lg-none">Xing</p> | |||
| </a> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| <nav | |||
| class="navbar navbar-expand-lg fixed-top navbar-transparent" | |||
| color-on-scroll="500" | |||
| > | |||
| <div class="container"> | |||
| <div class="navbar-translate"> | |||
| <a class="navbar-brand" href="">ziermach</a> | |||
| <button | |||
| class="navbar-toggler navbar-burger" | |||
| type="button" | |||
| data-toggle="collapse" | |||
| data-target="#navbarToggler" | |||
| aria-controls="navbarTogglerDemo02" | |||
| aria-expanded="false" | |||
| aria-label="Toggle navigation" | |||
| (click)="sidebarToggle()" | |||
| > | |||
| <span class="navbar-toggler-bar" [routerLink]="['/resume']" | |||
| >Resume</span | |||
| > | |||
| <span class="navbar-toggler-bar" [routerLink]="['/games']">Games</span> | |||
| <span class="navbar-toggler-bar" [routerLink]="['/projects']" | |||
| >Projects</span | |||
| > | |||
| </button> | |||
| </div> | |||
| <div class="navbar-collapse" id="navbarToggler"> | |||
| <ul class="navbar-nav ml-auto"> | |||
| <li class="nav-item" *ngIf="!isDocumentation()"> | |||
| <a | |||
| class="nav-link" | |||
| rel="tooltip" | |||
| title="Star on GitHub" | |||
| data-placement="bottom" | |||
| href="https://github.com/JackWolfskind" | |||
| target="_blank" | |||
| > | |||
| <i class="fab fa-github"></i> | |||
| <p class="d-lg-none">GitHub</p> | |||
| </a> | |||
| </li> | |||
| <li class="nav-item" *ngIf="!isDocumentation()"> | |||
| <a | |||
| class="nav-link" | |||
| rel="tooltip" | |||
| title="my NPM Stuff" | |||
| data-placement="bottom" | |||
| href="https://www.npmjs.com/~cziermann" | |||
| target="_blank" | |||
| > | |||
| <i class="fab fa-npm"></i> | |||
| <p class="d-lg-none">NPM</p> | |||
| </a> | |||
| </li> | |||
| <li class="nav-item" *ngIf="!isDocumentation()"> | |||
| <a | |||
| class="nav-link" | |||
| rel="tooltip" | |||
| title="My Xing" | |||
| data-placement="bottom" | |||
| href="https://www.xing.com/profile/Christian_Ziermann3" | |||
| target="_blank" | |||
| > | |||
| <i class="fab fa-xing"></i> | |||
| <p class="d-lg-none">Xing</p> | |||
| </a> | |||
| </li> | |||
| <li class="nav-item" *ngIf="!isDocumentation()"> | |||
| <a | |||
| class="nav-link" | |||
| rel="tooltip" | |||
| title="About Me" | |||
| data-placement="bottom" | |||
| [routerLink]="['/resume']" | |||
| > | |||
| <i class="fas fa-address-card"></i> | |||
| <p class="d-lg-none">About Me</p> | |||
| </a> | |||
| </li> | |||
| <li class="nav-item" *ngIf="!isDocumentation()"> | |||
| <a | |||
| class="nav-link" | |||
| rel="tooltip" | |||
| title="Games" | |||
| data-placement="bottom" | |||
| [routerLink]="['/games']" | |||
| > | |||
| <i class="fas fa-gamepad"></i> | |||
| <p class="d-lg-none">Games</p> | |||
| </a> | |||
| </li> | |||
| <li class="nav-item" *ngIf="!isDocumentation()"> | |||
| <a | |||
| class="nav-link" | |||
| rel="tooltip" | |||
| title="Projects" | |||
| data-placement="bottom" | |||
| [routerLink]="['/projects']" | |||
| > | |||
| <i class="fas fa-code"></i> | |||
| <p class="d-lg-none">Projects</p> | |||
| </a> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </nav> | |||
| @@ -0,0 +1,139 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |||
| <!-- Created with Inkscape (http://www.inkscape.org/) --> | |||
| <svg | |||
| xmlns:dc="http://purl.org/dc/elements/1.1/" | |||
| xmlns:cc="http://creativecommons.org/ns#" | |||
| xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |||
| xmlns:svg="http://www.w3.org/2000/svg" | |||
| xmlns="http://www.w3.org/2000/svg" | |||
| xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |||
| xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |||
| width="1024" | |||
| height="1024" | |||
| id="svg3030" | |||
| version="1.1" | |||
| inkscape:version="0.92.1 r15371" | |||
| sodipodi:docname="icon.svg" | |||
| inkscape:export-filename="/home/akien/Projects/godot/godot.git/icon.png" | |||
| inkscape:export-xdpi="24" | |||
| inkscape:export-ydpi="24"> | |||
| <defs | |||
| id="defs3032" /> | |||
| <sodipodi:namedview | |||
| id="base" | |||
| pagecolor="#ffffff" | |||
| bordercolor="#666666" | |||
| borderopacity="1.0" | |||
| inkscape:pageopacity="0.0" | |||
| inkscape:pageshadow="2" | |||
| inkscape:zoom="0.35" | |||
| inkscape:cx="707.24666" | |||
| inkscape:cy="14.063809" | |||
| inkscape:document-units="px" | |||
| inkscape:current-layer="layer1" | |||
| showgrid="false" | |||
| inkscape:window-width="1920" | |||
| inkscape:window-height="1011" | |||
| inkscape:window-x="0" | |||
| inkscape:window-y="0" | |||
| inkscape:window-maximized="1" /> | |||
| <metadata | |||
| id="metadata3035"> | |||
| <rdf:RDF> | |||
| <cc:Work | |||
| rdf:about=""> | |||
| <dc:format>image/svg+xml</dc:format> | |||
| <dc:type | |||
| rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |||
| <dc:title /> | |||
| </cc:Work> | |||
| </rdf:RDF> | |||
| </metadata> | |||
| <g | |||
| inkscape:label="Layer 1" | |||
| inkscape:groupmode="layer" | |||
| id="layer1" | |||
| transform="translate(0,-98.519719)"> | |||
| <g | |||
| id="g78" | |||
| transform="matrix(4.162611,0,0,-4.162611,919.24059,771.67186)" | |||
| style="stroke-width:0.32031175"> | |||
| <path | |||
| d="m 0,0 c 0,0 -0.325,1.994 -0.515,1.976 l -36.182,-3.491 c -2.879,-0.278 -5.115,-2.574 -5.317,-5.459 l -0.994,-14.247 -27.992,-1.997 -1.904,12.912 c -0.424,2.872 -2.932,5.037 -5.835,5.037 h -38.188 c -2.902,0 -5.41,-2.165 -5.834,-5.037 l -1.905,-12.912 -27.992,1.997 -0.994,14.247 c -0.202,2.886 -2.438,5.182 -5.317,5.46 l -36.2,3.49 c -0.187,0.018 -0.324,-1.978 -0.511,-1.978 l -0.049,-7.83 30.658,-4.944 1.004,-14.374 c 0.203,-2.91 2.551,-5.263 5.463,-5.472 l 38.551,-2.75 c 0.146,-0.01 0.29,-0.016 0.434,-0.016 2.897,0 5.401,2.166 5.825,5.038 l 1.959,13.286 h 28.005 l 1.959,-13.286 c 0.423,-2.871 2.93,-5.037 5.831,-5.037 0.142,0 0.284,0.005 0.423,0.015 l 38.556,2.75 c 2.911,0.209 5.26,2.562 5.463,5.472 l 1.003,14.374 30.645,4.966 z" | |||
| style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175" | |||
| id="path80" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| id="g82-3" | |||
| transform="matrix(4.162611,0,0,-4.162611,104.69892,525.90697)" | |||
| style="stroke-width:0.32031175"> | |||
| <path | |||
| d="m 0,0 v -47.514 -6.035 -5.492 c 0.108,-0.001 0.216,-0.005 0.323,-0.015 l 36.196,-3.49 c 1.896,-0.183 3.382,-1.709 3.514,-3.609 l 1.116,-15.978 31.574,-2.253 2.175,14.747 c 0.282,1.912 1.922,3.329 3.856,3.329 h 38.188 c 1.933,0 3.573,-1.417 3.855,-3.329 l 2.175,-14.747 31.575,2.253 1.115,15.978 c 0.133,1.9 1.618,3.425 3.514,3.609 l 36.182,3.49 c 0.107,0.01 0.214,0.014 0.322,0.015 v 4.711 l 0.015,0.005 V 0 h 0.134 c 4.795,6.12 9.232,12.569 13.487,19.449 -5.651,9.62 -12.575,18.217 -19.976,26.182 -6.864,-3.455 -13.531,-7.369 -19.828,-11.534 -3.151,3.132 -6.7,5.694 -10.186,8.372 -3.425,2.751 -7.285,4.768 -10.946,7.118 1.09,8.117 1.629,16.108 1.846,24.448 -9.446,4.754 -19.519,7.906 -29.708,10.17 -4.068,-6.837 -7.788,-14.241 -11.028,-21.479 -3.842,0.642 -7.702,0.88 -11.567,0.926 v 0.006 c -0.027,0 -0.052,-0.006 -0.075,-0.006 -0.024,0 -0.049,0.006 -0.073,0.006 V 63.652 C 93.903,63.606 90.046,63.368 86.203,62.726 82.965,69.964 79.247,77.368 75.173,84.205 64.989,81.941 54.915,78.789 45.47,74.035 45.686,65.695 46.225,57.704 47.318,49.587 43.65,47.237 39.795,45.22 36.369,42.469 32.888,39.791 29.333,37.229 26.181,34.097 19.884,38.262 13.219,42.176 6.353,45.631 -1.048,37.666 -7.968,29.069 -13.621,19.449 -9.368,12.569 -4.928,6.12 -0.134,0 Z" | |||
| style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175" | |||
| id="path84-6" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| id="g86-7" | |||
| transform="matrix(4.162611,0,0,-4.162611,784.07144,817.24284)" | |||
| style="stroke-width:0.32031175"> | |||
| <path | |||
| d="m 0,0 -1.121,-16.063 c -0.135,-1.936 -1.675,-3.477 -3.611,-3.616 l -38.555,-2.751 c -0.094,-0.007 -0.188,-0.01 -0.281,-0.01 -1.916,0 -3.569,1.406 -3.852,3.33 l -2.211,14.994 H -81.09 l -2.211,-14.994 c -0.297,-2.018 -2.101,-3.469 -4.133,-3.32 l -38.555,2.751 c -1.936,0.139 -3.476,1.68 -3.611,3.616 L -130.721,0 -163.268,3.138 c 0.015,-3.498 0.06,-7.33 0.06,-8.093 0,-34.374 43.605,-50.896 97.781,-51.086 h 0.066 0.067 c 54.176,0.19 97.766,16.712 97.766,51.086 0,0.777 0.047,4.593 0.063,8.093 z" | |||
| style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175" | |||
| id="path88-5" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| id="g90-3" | |||
| transform="matrix(4.162611,0,0,-4.162611,389.21484,625.67104)" | |||
| style="stroke-width:0.32031175"> | |||
| <path | |||
| d="m 0,0 c 0,-12.052 -9.765,-21.815 -21.813,-21.815 -12.042,0 -21.81,9.763 -21.81,21.815 0,12.044 9.768,21.802 21.81,21.802 C -9.765,21.802 0,12.044 0,0" | |||
| style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175" | |||
| id="path92-5" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| id="g94-6" | |||
| transform="matrix(4.162611,0,0,-4.162611,367.36686,631.05679)" | |||
| style="stroke-width:0.32031175"> | |||
| <path | |||
| d="m 0,0 c 0,-7.994 -6.479,-14.473 -14.479,-14.473 -7.996,0 -14.479,6.479 -14.479,14.473 0,7.994 6.483,14.479 14.479,14.479 C -6.479,14.479 0,7.994 0,0" | |||
| style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175" | |||
| id="path96-2" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| id="g98-9" | |||
| transform="matrix(4.162611,0,0,-4.162611,511.99336,724.73954)" | |||
| style="stroke-width:0.32031175"> | |||
| <path | |||
| d="m 0,0 c -3.878,0 -7.021,2.858 -7.021,6.381 v 20.081 c 0,3.52 3.143,6.381 7.021,6.381 3.878,0 7.028,-2.861 7.028,-6.381 V 6.381 C 7.028,2.858 3.878,0 0,0" | |||
| style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175" | |||
| id="path100-1" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| id="g102-2" | |||
| transform="matrix(4.162611,0,0,-4.162611,634.78706,625.67104)" | |||
| style="stroke-width:0.32031175"> | |||
| <path | |||
| d="m 0,0 c 0,-12.052 9.765,-21.815 21.815,-21.815 12.041,0 21.808,9.763 21.808,21.815 0,12.044 -9.767,21.802 -21.808,21.802 C 9.765,21.802 0,12.044 0,0" | |||
| style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175" | |||
| id="path104-7" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| <g | |||
| id="g106-0" | |||
| transform="matrix(4.162611,0,0,-4.162611,656.64056,631.05679)" | |||
| style="stroke-width:0.32031175"> | |||
| <path | |||
| d="m 0,0 c 0,-7.994 6.477,-14.473 14.471,-14.473 8.002,0 14.479,6.479 14.479,14.473 0,7.994 -6.477,14.479 -14.479,14.479 C 6.477,14.479 0,7.994 0,0" | |||
| style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.32031175" | |||
| id="path108-9" | |||
| inkscape:connector-curvature="0" /> | |||
| </g> | |||
| </g> | |||
| </svg> | |||
| @@ -0,0 +1 @@ | |||
| <svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" viewBox="0 0 128 128"><path d="M127.08009,57.4463A4.50927,4.50927,0,0,0,122.67479,54H50.63619a10.00287,10.00287,0,1,0,0,20h51.6275L87.75289,99.4404a5.81432,5.81432,0,0,1-4.3803,2.4912H46.06349a5.813,5.813,0,0,1-4.3804-2.4912L22.9004,66.5107a5.88865,5.88865,0,0,1-.0005-5.0185l18.7842-32.9336a5.80915,5.80915,0,0,1,4.3794-2.4902h37.3091a5.8125,5.8125,0,0,1,4.3798,2.4912l8.4698,14.8486a5.83,5.83,0,0,0,4.7959,2.7588h14.5561a3.2128,3.2128,0,0,0,2.9024-1.5274,3.15525,3.15525,0,0,0-.1245-3.2197l-17.961-30.9101A9.67814,9.67814,0,0,0,92.53609,6H36.89889a9.67976,9.67976,0,0,0-7.855,4.5088L1.0952,59.5098a9.75557,9.75557,0,0,0,0,8.9824l27.9483,48.999A9.68175,9.68175,0,0,0,36.89889,122h55.6372a9.68745,9.68745,0,0,0,7.8706-4.5371l26.9029-48.9717C128.564,66.2939,127.877,61.2725,127.08009,57.4463Z"/></svg> | |||
| @@ -0,0 +1 @@ | |||
| <svg aria-hidden="true" focusable="false" data-prefix="far" data-icon="star" class="svg-inline--fa fa-star fa-w-18" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M528.1 171.5L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6zM388.6 312.3l23.7 138.4L288 385.4l-124.3 65.3 23.7-138.4-100.6-98 139-20.2 62.2-126 62.2 126 139 20.2-100.6 98z"></path></svg> | |||
| @@ -0,0 +1 @@ | |||
| <svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="star" class="svg-inline--fa fa-star fa-w-18" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path fill="currentColor" d="M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"></path></svg> | |||
| @@ -0,0 +1 @@ | |||
| <svg fill="#000000" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50 50" width="50px" height="50px"><rect width="40" height="40" x="5" y="5" fill="none" stroke="#000000" stroke-linejoin="round" stroke-miterlimit="10" stroke-width="2"/><polygon points="15,26.445 20,26.445 20,42 24,42 24,26.445 29,26.445 29,23 15,23"/><path d="M34.209,28.15c0-1.083,0.769-2.096,2.9-2.096s4.018,1.258,4.018,1.258l0.14-3.704c0,0-11.25-3.075-11.25,4.717 c0,5.73,7.721,5.73,7.721,8.315c0,0.245,0.105,2.026-2.62,2.026c-2.725,0-4.996-1.712-4.996-1.712v4.158 c0,0,11.879,3.843,11.879-4.822C42,30.665,34.209,30.945,34.209,28.15z"/></svg> | |||
| @@ -52,4 +52,5 @@ | |||
| @import "paper-kit/responsive"; | |||
| @import "paper-kit/plugins/datetimepicker"; | |||
| @import "paper-kit/social-buttons"; | |||
| @import "paper-kit/animations"; | |||
| @import "paper-kit/ziermach"; | |||
| @@ -0,0 +1,41 @@ | |||
| .slide-in-right { | |||
| -webkit-animation: slide-in-right 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards; | |||
| animation: slide-in-right 0.7s cubic-bezier(0.25, 0.46, 0.45, 0.94) forwards; | |||
| } | |||
| /* ---------------------------------------------- | |||
| * Generated by Animista on 2020-5-14 23:22:38 | |||
| * Licensed under FreeBSD License. | |||
| * See http://animista.net/license for more info. | |||
| * w: http://animista.net, t: @cssanimista | |||
| * ---------------------------------------------- */ | |||
| /** | |||
| * ---------------------------------------- | |||
| * animation slide-in-right | |||
| * ---------------------------------------- | |||
| */ | |||
| @-webkit-keyframes slide-in-right { | |||
| 0% { | |||
| -webkit-transform: translateX(1000px); | |||
| transform: translateX(1000px); | |||
| opacity: 0; | |||
| } | |||
| 100% { | |||
| -webkit-transform: translateX(0); | |||
| transform: translateX(0); | |||
| opacity: 1; | |||
| } | |||
| } | |||
| @keyframes slide-in-right { | |||
| 0% { | |||
| -webkit-transform: translateX(1000px); | |||
| transform: translateX(1000px); | |||
| opacity: 0; | |||
| } | |||
| 100% { | |||
| -webkit-transform: translateX(0); | |||
| transform: translateX(0); | |||
| opacity: 1; | |||
| } | |||
| } | |||
| @@ -1,111 +1,110 @@ | |||
| .section-nucleo-icons{ | |||
| .section-nucleo-icons { | |||
| padding: 100px 0; | |||
| .icons-container{ | |||
| .icons-container { | |||
| position: relative; | |||
| max-width: 450px; | |||
| height: 300px; | |||
| max-height: 300px; | |||
| margin: 0 auto; | |||
| i{ | |||
| i { | |||
| font-size: 34px; | |||
| position: absolute; | |||
| top: 0; | |||
| left: 0; | |||
| &:nth-child(1){ | |||
| &:nth-child(1) { | |||
| top: 5%; | |||
| left: 7%; | |||
| } | |||
| &:nth-child(2){ | |||
| &:nth-child(2) { | |||
| top: 28%; | |||
| left: 24%; | |||
| } | |||
| &:nth-child(3){ | |||
| &:nth-child(3) { | |||
| top: 40%; | |||
| } | |||
| &:nth-child(4){ | |||
| &:nth-child(4) { | |||
| top: 18%; | |||
| left: 62%; | |||
| } | |||
| &:nth-child(5){ | |||
| &:nth-child(5) { | |||
| top: 74%; | |||
| left: 3%; | |||
| } | |||
| &:nth-child(6){ | |||
| &:nth-child(6) { | |||
| top: 36%; | |||
| left: 44%; | |||
| font-size: 65px; | |||
| color: $danger-color; | |||
| padding: 1px; | |||
| } | |||
| &:nth-child(7){ | |||
| &:nth-child(7) { | |||
| top: 59%; | |||
| left: 26%; | |||
| } | |||
| &:nth-child(8){ | |||
| &:nth-child(8) { | |||
| top: 60%; | |||
| left: 69%; | |||
| } | |||
| &:nth-child(9){ | |||
| &:nth-child(9) { | |||
| top: 72%; | |||
| left: 47%; | |||
| } | |||
| &:nth-child(10){ | |||
| &:nth-child(10) { | |||
| top: 88%; | |||
| left: 27%; | |||
| } | |||
| &:nth-child(11){ | |||
| &:nth-child(11) { | |||
| top: 31%; | |||
| left: 80%; | |||
| } | |||
| &:nth-child(12){ | |||
| &:nth-child(12) { | |||
| top: 88%; | |||
| left: 68%; | |||
| } | |||
| &:nth-child(13){ | |||
| &:nth-child(13) { | |||
| top: 5%; | |||
| left: 81%; | |||
| } | |||
| &:nth-child(14){ | |||
| &:nth-child(14) { | |||
| top: 58%; | |||
| left: 90%; | |||
| } | |||
| &:nth-child(15){ | |||
| &:nth-child(15) { | |||
| top: 6%; | |||
| left: 40%; | |||
| } | |||
| } | |||
| } | |||
| } | |||
| .section-dark{ | |||
| .icons-container{ | |||
| .section-dark { | |||
| .icons-container { | |||
| color: $white-color; | |||
| } | |||
| } | |||
| .info{ | |||
| .icon{ | |||
| .info { | |||
| .icon { | |||
| margin-top: 0; | |||
| font-size: 3.4em; | |||
| } | |||
| } | |||
| .icon-primary{ | |||
| .icon-primary { | |||
| color: $primary-color; | |||
| } | |||
| .icon-info{ | |||
| .icon-info { | |||
| color: $info-color; | |||
| } | |||
| .icon-success{ | |||
| .icon-success { | |||
| color: $success-color; | |||
| } | |||
| .icon-warning{ | |||
| .icon-warning { | |||
| color: $warning-color; | |||
| } | |||
| .icon-danger{ | |||
| .icon-danger { | |||
| color: $danger-color; | |||
| } | |||
| .icon-neutral{ | |||
| .icon-neutral { | |||
| color: $white-color; | |||
| } | |||
| @@ -49,7 +49,7 @@ | |||
| .description, | |||
| .card-plain .card-description, | |||
| .card-plain .card-category{ | |||
| color: rgba($white-color, .7); | |||
| color: $white-color; | |||
| } | |||
| hr{ | |||
| border-color: rgba(255, 255, 255, 0.19); | |||
| @@ -60,7 +60,7 @@ h1 small, h2 small, h3 small, h1 .small, h2 .small, h3 .small { | |||
| &, | |||
| a{ | |||
| color: $card-black-color; | |||
| color: $card-muted-color; | |||
| text-decoration: none; | |||
| } | |||
| } | |||
| @@ -68,7 +68,7 @@ h1 small, h2 small, h3 small, h1 .small, h2 .small, h3 .small { | |||
| text-transform: uppercase; | |||
| } | |||
| .description{ | |||
| color: $dark-gray; | |||
| color: $white-color; | |||
| } | |||
| blockquote small{ | |||
| font-style: normal; | |||
| @@ -1,4 +1,4 @@ | |||
| $font-color: #66615b !default; | |||
| $font-color: white !default; | |||
| $fill-font-color: rgba(255, 255, 255, 0.8); | |||
| $font-family-sans-serif: 'Montserrat', "Helvetica", Arial, sans-serif; | |||
| @@ -24,7 +24,7 @@ $black-hr: #444444 !default; | |||
| $default-gray: #181a1b !default; | |||
| $light-gray: #423e3e !default; | |||
| $medium-gray: #DDDDDD !default; | |||
| $dark-gray: #9A9A9A !default; | |||
| $dark-gray: rgb(202, 202, 202) !default; | |||
| $placeholder-gray: rgba(210, 210, 210, 1) !default; | |||
| @@ -36,7 +36,7 @@ $transparent-bg: transparent !default; | |||
| $default-color: #66615B !default; | |||
| $default-bg: #66615B !default; | |||
| $default-states-color: #403D39 !default; | |||
| $default-states-color: white !default; | |||
| $primary-color: #51cbce !default; | |||
| $primary-states-color: darken($primary-color, 10%) !default; | |||
| @@ -130,8 +130,8 @@ $btn-round-radius: 30px !default; | |||
| $height-base: 40px !default; | |||
| $font-size-base: 14px !default; | |||
| $font-size-small: 12px !default; | |||
| $font-size-base: 16px !default; | |||
| $font-size-small: 14px !default; | |||
| $font-size-medium: 16px !default; | |||
| $font-size-large: 20px !default; | |||
| $font-size-large-navbar: 22px !default; | |||
| @@ -279,7 +279,7 @@ $brown-font-color-hover: #F1EAE0 !default; | |||
| //variables used in cards | |||
| $card-black-color: #333333 !default; | |||
| $card-muted-color: #ccc !default; | |||
| $card-muted-color: white !default; | |||
| $card-background-blue: #b8d8d8 !default; | |||
| $card-font-blue: #506568 !default; | |||
| @@ -93,6 +93,11 @@ | |||
| #register-navbar a { | |||
| color: #fff; | |||
| } | |||
| .container-left { | |||
| padding-right: 25%; | |||
| } | |||
| .register-background .container { | |||
| margin-top: 11%; | |||
| position: relative; | |||
| @@ -257,6 +262,18 @@ | |||
| //margin-top: 85px; | |||
| } | |||
| } | |||
| .avatar-head { | |||
| position: absolute; | |||
| z-index: -1; | |||
| bottom: 0; | |||
| left: 31%; | |||
| width: 100%; | |||
| height: 100%; | |||
| background-repeat: no-repeat; | |||
| background-size: contain; | |||
| } | |||
| .moving-clouds { | |||
| position: absolute; | |||
| z-index: 1; | |||
| @@ -16,7 +16,7 @@ | |||
| <html lang="en"> | |||
| <head> | |||
| <meta charset="utf-8"> | |||
| <title>ZIERMACH³</title> | |||
| <title>ZIERMACH</title> | |||
| <base href="/"> | |||
| <link rel="icon" type="image/png" href="assets/img/favicon.ico"> | |||
| @@ -1,6 +1,9 @@ | |||
| { | |||
| "extends": "../tsconfig.json", | |||
| "compilerOptions": { | |||
| "importHelpers": true, | |||
| "esModuleInterop": true, | |||
| "allowSyntheticDefaultImports": true, | |||
| "outDir": "../out-tsc/app", | |||
| "module": "es2015", | |||
| "baseUrl": "", | |||
| @@ -5,17 +5,13 @@ | |||
| "baseUrl": "src", | |||
| "sourceMap": true, | |||
| "declaration": false, | |||
| "allowSyntheticDefaultImports": true, | |||
| "moduleResolution": "node", | |||
| "emitDecoratorMetadata": true, | |||
| "experimentalDecorators": true, | |||
| "target": "es5", | |||
| "typeRoots": [ | |||
| "node_modules/@types" | |||
| ], | |||
| "lib": [ | |||
| "es2016", | |||
| "dom" | |||
| ], | |||
| "typeRoots": ["node_modules/@types"], | |||
| "lib": ["es2016", "dom"], | |||
| "module": "es2015" | |||
| } | |||
| } | |||
| } | |||