@@ -0,0 +1,43 @@ | |||
# See http://help.github.com/ignore-files/ for more about ignoring files. | |||
# compiled output | |||
/dist | |||
/tmp | |||
/out-tsc | |||
# dependencies | |||
/node_modules | |||
package-lock.json | |||
# IDEs and editors | |||
/.idea | |||
.project | |||
.classpath | |||
.c9/ | |||
*.launch | |||
.settings/ | |||
*.sublime-workspace | |||
# IDE - VSCode | |||
.vscode/* | |||
!.vscode/settings.json | |||
!.vscode/tasks.json | |||
!.vscode/launch.json | |||
!.vscode/extensions.json | |||
# misc | |||
/.sass-cache | |||
/connect.lock | |||
/coverage | |||
/libpeerconnection.log | |||
npm-debug.log | |||
testem.log | |||
/typings | |||
# e2e | |||
/e2e/*.js | |||
/e2e/*.map | |||
# System Files | |||
.DS_Store | |||
Thumbs.db |
@@ -0,0 +1,13 @@ | |||
<!-- | |||
IMPORTANT: Please use the following link to create a new issue: | |||
https://www.creative-tim.com/new-issue/paper-kit-2-angular | |||
**If your issue was not created using the app above, it will be closed immediately.** | |||
--> | |||
<!-- | |||
Love Creative Tim? Do you need Angular, React, Vuejs or HTML? You can visit: | |||
👉 https://www.creative-tim.com/bundles | |||
👉 https://www.creative-tim.com | |||
--> |
@@ -0,0 +1 @@ | |||
based on: https://github.com/creativetimofficial/pk2-angular.git |
@@ -0,0 +1,141 @@ | |||
{ | |||
"$schema": "./node_modules/@angular/cli/lib/config/schema.json", | |||
"version": 1, | |||
"newProjectRoot": "projects", | |||
"projects": { | |||
"pk2-angular": { | |||
"root": "", | |||
"sourceRoot": "src", | |||
"projectType": "application", | |||
"architect": { | |||
"build": { | |||
"builder": "@angular-devkit/build-angular:browser", | |||
"options": { | |||
"outputPath": "dist", | |||
"index": "src/index.html", | |||
"main": "src/main.ts", | |||
"tsConfig": "src/tsconfig.app.json", | |||
"polyfills": "src/polyfills.ts", | |||
"assets": [ | |||
"src/assets", | |||
"src/favicon.ico" | |||
], | |||
"styles": [ | |||
"node_modules/bootstrap/dist/css/bootstrap.min.css", | |||
"node_modules/@fortawesome/fontawesome-free/css/all.css", | |||
"src/assets/sass/paper-kit.scss", | |||
"src/assets/css/demo.css", | |||
"src/assets/css/nucleo-icons.css" | |||
], | |||
"scripts": [ | |||
"node_modules/@fortawesome/fontawesome-free/js/all.js", | |||
] | |||
}, | |||
"configurations": { | |||
"production": { | |||
"optimization": true, | |||
"outputHashing": "all", | |||
"sourceMap": false, | |||
"extractCss": true, | |||
"namedChunks": false, | |||
"aot": true, | |||
"extractLicenses": true, | |||
"vendorChunk": false, | |||
"buildOptimizer": true, | |||
"fileReplacements": [{ | |||
"replace": "src/environments/environment.ts", | |||
"with": "src/environments/environment.prod.ts" | |||
}] | |||
} | |||
} | |||
}, | |||
"serve": { | |||
"builder": "@angular-devkit/build-angular:dev-server", | |||
"options": { | |||
"browserTarget": "pk2-angular:build" | |||
}, | |||
"configurations": { | |||
"production": { | |||
"browserTarget": "pk2-angular:build:production" | |||
} | |||
} | |||
}, | |||
"extract-i18n": { | |||
"builder": "@angular-devkit/build-angular:extract-i18n", | |||
"options": { | |||
"browserTarget": "pk2-angular:build" | |||
} | |||
}, | |||
"test": { | |||
"builder": "@angular-devkit/build-angular:karma", | |||
"options": { | |||
"main": "src/test.ts", | |||
"karmaConfig": "./karma.conf.js", | |||
"polyfills": "src/polyfills.ts", | |||
"tsConfig": "src/tsconfig.spec.json", | |||
"scripts": [ | |||
"node_modules/@fortawesome/fontawesome-free/js/all.js" | |||
], | |||
"styles": [ | |||
"node_modules/bootstrap/dist/css/bootstrap.min.css", | |||
"node_modules/@fortawesome/fontawesome-free/css/all.css", | |||
"src/assets/sass/paper-kit.scss", | |||
"src/assets/css/demo.css", | |||
"src/assets/css/nucleo-icons.css" | |||
], | |||
"assets": [ | |||
"src/assets", | |||
"src/favicon.ico" | |||
] | |||
} | |||
}, | |||
"lint": { | |||
"builder": "@angular-devkit/build-angular:tslint", | |||
"options": { | |||
"tsConfig": [ | |||
"src/tsconfig.app.json", | |||
"src/tsconfig.spec.json" | |||
], | |||
"exclude": [] | |||
} | |||
} | |||
} | |||
}, | |||
"pk2-angular-e2e": { | |||
"root": "e2e", | |||
"sourceRoot": "e2e", | |||
"projectType": "application", | |||
"architect": { | |||
"e2e": { | |||
"builder": "@angular-devkit/build-angular:protractor", | |||
"options": { | |||
"protractorConfig": "./protractor.conf.js", | |||
"devServerTarget": "pk2-angular:serve" | |||
} | |||
}, | |||
"lint": { | |||
"builder": "@angular-devkit/build-angular:tslint", | |||
"options": { | |||
"tsConfig": [ | |||
"e2e/tsconfig.e2e.json" | |||
], | |||
"exclude": [] | |||
} | |||
} | |||
} | |||
} | |||
}, | |||
"defaultProject": "pk2-angular", | |||
"schematics": { | |||
"@schematics/angular:component": { | |||
"prefix": "app", | |||
"styleext": "scss" | |||
}, | |||
"@schematics/angular:directive": { | |||
"prefix": "app" | |||
} | |||
}, | |||
"cli": { | |||
"analytics": false | |||
} | |||
} |
@@ -0,0 +1,14 @@ | |||
import { Pk2AngularCliFreePage } from './app.po'; | |||
describe('pk2-angular-cli-free App', () => { | |||
let page: Pk2AngularCliFreePage; | |||
beforeEach(() => { | |||
page = new Pk2AngularCliFreePage(); | |||
}); | |||
it('should display welcome message', () => { | |||
page.navigateTo(); | |||
expect(page.getParagraphText()).toEqual('Welcome to app!!'); | |||
}); | |||
}); |
@@ -0,0 +1,11 @@ | |||
import { browser, by, element } from 'protractor'; | |||
export class Pk2AngularCliFreePage { | |||
navigateTo() { | |||
return browser.get('/'); | |||
} | |||
getParagraphText() { | |||
return element(by.css('app-root h1')).getText(); | |||
} | |||
} |
@@ -0,0 +1,12 @@ | |||
{ | |||
"extends": "../tsconfig.json", | |||
"compilerOptions": { | |||
"outDir": "../out-tsc/e2e", | |||
"module": "commonjs", | |||
"target": "es5", | |||
"types": [ | |||
"jasmine", | |||
"node" | |||
] | |||
} | |||
} |
@@ -0,0 +1,31 @@ | |||
// Karma configuration file, see link for more information | |||
// https://karma-runner.github.io/0.13/config/configuration-file.html | |||
module.exports = function (config) { | |||
config.set({ | |||
basePath: '', | |||
frameworks: ['jasmine', '@angular-devkit/build-angular'], | |||
plugins: [ | |||
require('karma-jasmine'), | |||
require('karma-chrome-launcher'), | |||
require('karma-jasmine-html-reporter'), | |||
require('karma-coverage-istanbul-reporter'), | |||
require('@angular-devkit/build-angular/plugins/karma') | |||
], | |||
client:{ | |||
clearContext: false // leave Jasmine Spec Runner output visible in browser | |||
}, | |||
coverageIstanbulReporter: { | |||
dir: require('path').join(__dirname, 'coverage'), reports: [ 'html', 'lcovonly' ], | |||
fixWebpackSourcePaths: true | |||
}, | |||
reporters: ['progress', 'kjhtml'], | |||
port: 9876, | |||
colors: true, | |||
logLevel: config.LOG_INFO, | |||
autoWatch: true, | |||
browsers: ['Chrome'], | |||
singleRun: false | |||
}); | |||
}; |
@@ -0,0 +1,58 @@ | |||
{ | |||
"name": "ziermach.de", | |||
"version": "1.3.0", | |||
"scripts": { | |||
"ng": "ng", | |||
"start": "ng serve", | |||
"build": "ng build", | |||
"test": "ng test", | |||
"lint": "ng lint", | |||
"e2e": "ng e2e", | |||
"install:clean": "rm -rf node_modules/ && rm -rf package-lock.json && npm install && npm start" | |||
}, | |||
"dependencies": { | |||
"@angular/animations": "9.0.6", | |||
"@angular/common": "9.0.6", | |||
"@angular/compiler": "9.0.6", | |||
"@angular/core": "9.0.6", | |||
"@angular/forms": "9.0.6", | |||
"@angular/http": "7.2.16", | |||
"@angular/localize": "^9.0.6", | |||
"@angular/platform-browser": "9.0.6", | |||
"@angular/platform-browser-dynamic": "9.0.6", | |||
"@angular/router": "9.0.6", | |||
"@fortawesome/fontawesome-free": "^5.13.0", | |||
"@ng-bootstrap/ng-bootstrap": "6.0.0", | |||
"bootstrap": "4.1.2", | |||
"core-js": "3.6.4", | |||
"jquery": "3.2.1", | |||
"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", | |||
"zone.js": "0.10.2" | |||
}, | |||
"devDependencies": { | |||
"@angular-devkit/build-angular": "0.900.6", | |||
"@angular/cli": "9.0.6", | |||
"@angular/compiler-cli": "9.0.6", | |||
"@angular/language-service": "9.0.6", | |||
"@types/jasmine": "3.5.9", | |||
"@types/node": "13.9.1", | |||
"codelyzer": "5.2.1", | |||
"jasmine-core": "3.5.0", | |||
"jasmine-spec-reporter": "4.2.1", | |||
"karma": "4.4.1", | |||
"karma-chrome-launcher": "3.1.0", | |||
"karma-cli": "2.0.0", | |||
"karma-coverage-istanbul-reporter": "2.1.1", | |||
"karma-jasmine": "3.1.1", | |||
"karma-jasmine-html-reporter": "1.5.2", | |||
"protractor": "5.4.3", | |||
"ts-node": "3.0.4", | |||
"tslint": "6.1.0", | |||
"typescript": "3.7.5" | |||
} | |||
} |
@@ -0,0 +1,28 @@ | |||
// Protractor configuration file, see link for more information | |||
// https://github.com/angular/protractor/blob/master/lib/config.ts | |||
const { SpecReporter } = require('jasmine-spec-reporter'); | |||
exports.config = { | |||
allScriptsTimeout: 11000, | |||
specs: [ | |||
'./e2e/**/*.e2e-spec.ts' | |||
], | |||
capabilities: { | |||
'browserName': 'chrome' | |||
}, | |||
directConnect: true, | |||
baseUrl: 'http://localhost:4200/', | |||
framework: 'jasmine', | |||
jasmineNodeOpts: { | |||
showColors: true, | |||
defaultTimeoutInterval: 30000, | |||
print: function() {} | |||
}, | |||
onPrepare() { | |||
require('ts-node').register({ | |||
project: 'e2e/tsconfig.e2e.json' | |||
}); | |||
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); | |||
} | |||
}; |
@@ -0,0 +1,79 @@ | |||
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'; | |||
import { ProjectDashboardComponent } from './pages/project-dashboard/project-dashboard.component'; | |||
import { MagneticRecyclingQueenComponent } from './pages/game-dashboard/magnetic-recycling-queen/magnetic-recycling-queen.component'; | |||
import { SaltyPiranhaComponent } from './pages/game-dashboard/salty-piranha/salty-piranha.component'; | |||
import { LaserBluesComponent } from './pages/game-dashboard/laser-blues/laser-blues.component'; | |||
import { WhatTheFungiComponent } from './pages/game-dashboard/what-the-fungi/what-the-fungi.component'; | |||
import { ImpressumComponent } from './shared/impressum/impressum.component'; | |||
const routes: Routes = [ | |||
{ | |||
path: 'resume', | |||
component: ResumeComponent, | |||
}, | |||
{ | |||
path: 'games', | |||
children: [ | |||
{ | |||
path: 'magnetic-recycling-queen', | |||
component: MagneticRecyclingQueenComponent | |||
}, | |||
{ | |||
path: 'salty-piranha', | |||
component: SaltyPiranhaComponent | |||
}, | |||
{ | |||
path: 'laser-blues', | |||
component: LaserBluesComponent | |||
}, | |||
{ | |||
path: 'what-the-fungi', | |||
component: WhatTheFungiComponent | |||
}, | |||
{ | |||
path: '', | |||
component: GamesDashboardComponent | |||
} | |||
] | |||
}, | |||
{ | |||
path: 'projects', | |||
component: ProjectDashboardComponent, | |||
}, | |||
{ | |||
path: 'about', | |||
component: AboutComponent, | |||
}, | |||
{ | |||
path: 'legal', | |||
component: ImpressumComponent, | |||
}, | |||
{ | |||
path: '', | |||
redirectTo: 'about', | |||
pathMatch: 'full' | |||
}, | |||
{ | |||
path: '**', | |||
component: NotFoundComponent, | |||
} | |||
]; | |||
@NgModule({ | |||
imports: [ | |||
RouterModule.forRoot(routes, { | |||
enableTracing: !environment.production | |||
}), | |||
], | |||
exports: [RouterModule] | |||
}) | |||
export class AppRoutingModule { } |
@@ -0,0 +1,3 @@ | |||
<app-navbar></app-navbar> | |||
<router-outlet></router-outlet> | |||
<app-footer *ngIf="removeFooter()"></app-footer> |
@@ -0,0 +1,32 @@ | |||
import { TestBed, async } from '@angular/core/testing'; | |||
import { AppComponent } from './app.component'; | |||
describe('AppComponent', () => { | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ | |||
AppComponent | |||
], | |||
}).compileComponents(); | |||
})); | |||
it('should create the app', async(() => { | |||
const fixture = TestBed.createComponent(AppComponent); | |||
const app = fixture.debugElement.componentInstance; | |||
expect(app).toBeTruthy(); | |||
})); | |||
it(`should have as title 'app'`, async(() => { | |||
const fixture = TestBed.createComponent(AppComponent); | |||
const app = fixture.debugElement.componentInstance; | |||
expect(app.title).toEqual('app'); | |||
})); | |||
it('should render title in a h1 tag', async(() => { | |||
const fixture = TestBed.createComponent(AppComponent); | |||
fixture.detectChanges(); | |||
const compiled = fixture.debugElement.nativeElement; | |||
expect(compiled.querySelector('h1').textContent).toContain('Welcome to app!!'); | |||
})); | |||
}); |
@@ -0,0 +1,63 @@ | |||
import { Component, OnInit, Inject, Renderer2, ElementRef, ViewChild } from '@angular/core'; | |||
import { Router, NavigationEnd } from '@angular/router'; | |||
import { Subscription } from 'rxjs/Subscription'; | |||
import 'rxjs/add/operator/filter'; | |||
import { DOCUMENT } from '@angular/common'; | |||
import { LocationStrategy, PlatformLocation, Location } from '@angular/common'; | |||
import { NavbarComponent } from './shared/navbar/navbar.component'; | |||
@Component({ | |||
selector: 'app-root', | |||
templateUrl: './app.component.html', | |||
styleUrls: ['./app.component.scss'] | |||
}) | |||
export class AppComponent implements OnInit { | |||
private _router: Subscription; | |||
@ViewChild(NavbarComponent) navbar: NavbarComponent; | |||
constructor( private renderer : Renderer2, private router: Router, @Inject(DOCUMENT,) private document: any, private element : ElementRef, public location: Location) {} | |||
ngOnInit() { | |||
var navbar : HTMLElement = this.element.nativeElement.children[0].children[0]; | |||
this._router = this.router.events.filter(event => event instanceof NavigationEnd).subscribe((event: NavigationEnd) => { | |||
if (window.outerWidth > 991) { | |||
window.document.children[0].scrollTop = 0; | |||
}else{ | |||
window.document.activeElement.scrollTop = 0; | |||
} | |||
this.navbar.sidebarClose(); | |||
}); | |||
this.renderer.listen('window', 'scroll', (event) => { | |||
const number = window.scrollY; | |||
if (number > 150 || window.pageYOffset > 150) { | |||
// add logic | |||
navbar.classList.remove('navbar-transparent'); | |||
} else { | |||
// remove logic | |||
navbar.classList.add('navbar-transparent'); | |||
} | |||
}); | |||
var ua = window.navigator.userAgent; | |||
var trident = ua.indexOf('Trident/'); | |||
if (trident > 0) { | |||
// IE 11 => return version number | |||
var rv = ua.indexOf('rv:'); | |||
var version = parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); | |||
} | |||
if (version) { | |||
var body = document.getElementsByTagName('body')[0]; | |||
body.classList.add('ie-background'); | |||
} | |||
} | |||
removeFooter() { | |||
var titlee = this.location.prepareExternalUrl(this.location.path()); | |||
titlee = titlee.slice( 1 ); | |||
if(titlee === 'signup' || titlee === 'nucleoicons'){ | |||
return false; | |||
} | |||
else { | |||
return true; | |||
} | |||
} | |||
} |
@@ -0,0 +1,54 @@ | |||
import { BrowserModule } from '@angular/platform-browser'; | |||
import { NgModule } from '@angular/core'; | |||
import { FormsModule } from '@angular/forms'; | |||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; | |||
import { RouterModule } from '@angular/router'; | |||
import { AppComponent } from './app.component'; | |||
import { NavbarComponent } from './shared/navbar/navbar.component'; | |||
import { FooterComponent } from './shared/footer/footer.component'; | |||
import { ComponentsModule } from './components/components.module'; | |||
import { NotFoundComponent } from './pages/not-found/not-found.component'; | |||
import { AppRoutingModule } from './app-routing.module'; | |||
import { ResumeComponent } from './pages/resume/resume.component'; | |||
import { GamesDashboardComponent } from './pages/games-dashboard/games-dashboard.component'; | |||
import { ProjectDashboardComponent } from './pages/project-dashboard/project-dashboard.component'; | |||
import { PageHeaderModule } from './page-header/page-header.module'; | |||
import { MagneticRecyclingQueenComponent } from './pages/game-dashboard/magnetic-recycling-queen/magnetic-recycling-queen.component'; | |||
import { WhatTheFungiComponent } from './pages/game-dashboard/what-the-fungi/what-the-fungi.component'; | |||
import { LaserBluesComponent } from './pages/game-dashboard/laser-blues/laser-blues.component'; | |||
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'; | |||
@NgModule({ | |||
declarations: [ | |||
AppComponent, | |||
NavbarComponent, | |||
FooterComponent, | |||
NotFoundComponent, | |||
ResumeComponent, | |||
GamesDashboardComponent, | |||
ProjectDashboardComponent, | |||
MagneticRecyclingQueenComponent, | |||
WhatTheFungiComponent, | |||
LaserBluesComponent, | |||
SaltyPiranhaComponent, | |||
KeepInTouchComponent, | |||
ImpressumComponent, | |||
], | |||
imports: [ | |||
BrowserModule, | |||
NgbModule, | |||
FormsModule, | |||
RouterModule, | |||
AppRoutingModule, | |||
ComponentsModule, | |||
PageHeaderModule, | |||
], | |||
providers: [], | |||
bootstrap: [AppComponent] | |||
}) | |||
export class AppModule { } |
@@ -0,0 +1,30 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { CommonModule } from '@angular/common'; | |||
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; | |||
import { FormsModule } from '@angular/forms'; | |||
import { NouisliderModule } from 'ng2-nouislider'; | |||
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({ | |||
imports: [ | |||
PageHeaderModule, | |||
CommonModule, | |||
FormsModule, | |||
NgbModule, | |||
NouisliderModule, | |||
RouterModule, | |||
JwBootstrapSwitchNg2Module, | |||
], | |||
declarations: [ | |||
AboutComponent, | |||
NotificationComponent, | |||
], | |||
entryComponents: [], | |||
exports: [ AboutComponent, NotificationComponent] | |||
}) | |||
export class ComponentsModule { } |
@@ -0,0 +1,14 @@ | |||
<p *ngFor="let alert of alerts"> | |||
<ngb-alert [type]="alert.type" [dismissible]="false"> | |||
<div class="container"> | |||
<ng-container *ngIf="alert.icon"> | |||
<i class="nc-icon {{alert.icon}}"></i> | |||
</ng-container> | |||
{{ alert.message }} | |||
<button type="button" name="button" class="close" (click)="closeAlert(alert)"> | |||
<i class="nc-icon nc-simple-remove"></i> | |||
</button> | |||
</div> | |||
</ngb-alert> | |||
</p> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { NotificationComponent } from './notification.component'; | |||
describe('NotificationComponent', () => { | |||
let component: NotificationComponent; | |||
let fixture: ComponentFixture<NotificationComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ NotificationComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(NotificationComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should be created', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,48 @@ | |||
import { Input, Component } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-notification', | |||
templateUrl: './notification.component.html', | |||
styleUrls: ['./notification.component.scss'] | |||
}) | |||
export class NotificationComponent { | |||
@Input() | |||
public alerts: Array<IAlert> = []; | |||
private backup: Array<IAlert>; | |||
constructor() { | |||
this.alerts.push({ | |||
id: 1, | |||
type: 'success', | |||
message: 'This is an success alert', | |||
}, { | |||
id: 2, | |||
type: 'info', | |||
message: 'This is an info alert', | |||
}, { | |||
id: 3, | |||
type: 'warning', | |||
message: 'This is a warning alert', | |||
icon: 'nc-bell-55' | |||
}, { | |||
id: 4, | |||
type: 'danger', | |||
message: 'This is a danger alert', | |||
icon: 'nc-bell-55' | |||
}); | |||
this.backup = this.alerts.map((alert: IAlert) => Object.assign({}, alert)); | |||
} | |||
public closeAlert(alert: IAlert) { | |||
const index: number = this.alerts.indexOf(alert); | |||
this.alerts.splice(index, 1); | |||
} | |||
} | |||
export interface IAlert { | |||
id: number; | |||
type: string; | |||
message: string; | |||
icon?: string; | |||
} |
@@ -0,0 +1 @@ | |||
<p>magnetic-recycling-queen works!</p> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { MagneticRecyclingQueenComponent } from './magnetic-recycling-queen.component'; | |||
describe('MagneticRecyclingQueenComponent', () => { | |||
let component: MagneticRecyclingQueenComponent; | |||
let fixture: ComponentFixture<MagneticRecyclingQueenComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ MagneticRecyclingQueenComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(MagneticRecyclingQueenComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,15 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-magnetic-recycling-queen', | |||
templateUrl: './magnetic-recycling-queen.component.html', | |||
styleUrls: ['./magnetic-recycling-queen.component.css'] | |||
}) | |||
export class MagneticRecyclingQueenComponent implements OnInit { | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@@ -0,0 +1,15 @@ | |||
<div class="page-header section-dark" style="background-image: url('assets/img/dark-fog-forest-haze.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> | |||
<div class="moving-clouds" style="background-image: url('assets/img/clouds.png'); "></div> | |||
</div> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { DefaultPageHeaderComponent } from './default-page-header.component'; | |||
describe('DefaultPageHeaderComponent', () => { | |||
let component: DefaultPageHeaderComponent; | |||
let fixture: ComponentFixture<DefaultPageHeaderComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ DefaultPageHeaderComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(DefaultPageHeaderComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,15 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-default-page-header', | |||
templateUrl: './default-page-header.component.html', | |||
styleUrls: ['./default-page-header.component.css'] | |||
}) | |||
export class DefaultPageHeaderComponent implements OnInit { | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@@ -0,0 +1,10 @@ | |||
<div class="page-header section-dark page-header-xs" style="background-image: url('assets/img/gaming-thumbnail.jpg')"> | |||
<div class="filter"></div> | |||
<div class="content-center"> | |||
<div class="container"> | |||
<div class="title-brand"> | |||
<h1 class="presentation-title">Games</h1> | |||
</div> | |||
</div> | |||
</div> | |||
</div> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { GameHeaderComponent } from './game-header.component'; | |||
describe('GameHeaderComponent', () => { | |||
let component: GameHeaderComponent; | |||
let fixture: ComponentFixture<GameHeaderComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ GameHeaderComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(GameHeaderComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,15 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-game-header', | |||
templateUrl: './game-header.component.html', | |||
styleUrls: ['./game-header.component.css'] | |||
}) | |||
export class GameHeaderComponent implements OnInit { | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@@ -0,0 +1,27 @@ | |||
import { NgModule } from '@angular/core'; | |||
import { CommonModule } from '@angular/common'; | |||
import { DefaultPageHeaderComponent } from './default-page-header/default-page-header.component'; | |||
import { GameHeaderComponent } from './game-header/game-header.component'; | |||
import { ProjectHeaderComponent } from './project-header/project-header.component'; | |||
import { ResumeHeaderComponent } from './resume-header/resume-header.component'; | |||
@NgModule({ | |||
declarations: [ | |||
DefaultPageHeaderComponent, | |||
GameHeaderComponent, | |||
ProjectHeaderComponent, | |||
ResumeHeaderComponent | |||
], | |||
imports: [ | |||
CommonModule | |||
], | |||
exports: [ | |||
DefaultPageHeaderComponent, | |||
GameHeaderComponent, | |||
ResumeHeaderComponent, | |||
ProjectHeaderComponent | |||
] | |||
}) | |||
export class PageHeaderModule { } |
@@ -0,0 +1,10 @@ | |||
<div class="page-header section-dark page-header-xs" style="background-image: url('assets/img/internet-technology-computer-display.jpg')"> | |||
<div class="filter"></div> | |||
<div class="content-center"> | |||
<div class="container"> | |||
<div class="title-brand"> | |||
<h1 class="presentation-title">Projects</h1> | |||
</div> | |||
</div> | |||
</div> | |||
</div> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { ProjectHeaderComponent } from './project-header.component'; | |||
describe('ProjectHeaderComponent', () => { | |||
let component: ProjectHeaderComponent; | |||
let fixture: ComponentFixture<ProjectHeaderComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ ProjectHeaderComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(ProjectHeaderComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,15 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-project-header', | |||
templateUrl: './project-header.component.html', | |||
styleUrls: ['./project-header.component.css'] | |||
}) | |||
export class ProjectHeaderComponent implements OnInit { | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@@ -0,0 +1,10 @@ | |||
<div class="page-header section-dark page-header-small" style="background-image: url('assets/img/about-thumbnail.jpg')"> | |||
<div class="filter"></div> | |||
<div class="content-center"> | |||
<div class="container"> | |||
<div class="title-brand"> | |||
<h1 class="presentation-title">About me</h1> | |||
</div> | |||
</div> | |||
</div> | |||
</div> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { ResumeHeaderComponent } from './resume-header.component'; | |||
describe('ResumeHeaderComponent', () => { | |||
let component: ResumeHeaderComponent; | |||
let fixture: ComponentFixture<ResumeHeaderComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ ResumeHeaderComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(ResumeHeaderComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,15 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-resume-header', | |||
templateUrl: './resume-header.component.html', | |||
styleUrls: ['./resume-header.component.css'] | |||
}) | |||
export class ResumeHeaderComponent implements OnInit { | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@@ -0,0 +1,72 @@ | |||
<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> |
@@ -0,0 +1,25 @@ | |||
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(); | |||
}); | |||
}); |
@@ -0,0 +1,16 @@ | |||
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,8 @@ | |||
<iframe | |||
frameborder="0" | |||
src="https://itch.io/embed-upload/1093367?color=010144" | |||
allowfullscreen="" | |||
class="game" | |||
[width]="innerWidth" | |||
[height]="innerHeight" | |||
></iframe> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { LaserBluesComponent } from './laser-blues.component'; | |||
describe('LaserBluesComponent', () => { | |||
let component: LaserBluesComponent; | |||
let fixture: ComponentFixture<LaserBluesComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ LaserBluesComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(LaserBluesComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,24 @@ | |||
import { Component, OnInit, HostListener } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-laser-blues', | |||
templateUrl: './laser-blues.component.html', | |||
styleUrls: ['./laser-blues.component.css'] | |||
}) | |||
export class LaserBluesComponent implements OnInit { | |||
public innerHeight: any; | |||
public innerWidth: any; | |||
ngOnInit() { | |||
this.innerHeight = window.innerHeight; | |||
this.innerWidth = window.innerWidth; | |||
} | |||
constructor() { } | |||
@HostListener('window:resize', ['$event']) | |||
onResize(event) { | |||
this.innerHeight = window.innerHeight; | |||
this.innerWidth = window.innerWidth; | |||
} | |||
} |
@@ -0,0 +1,8 @@ | |||
<iframe | |||
frameborder="0" | |||
src="https://itch.io/embed-upload/1120192?color=181a1b" | |||
allowfullscreen="" | |||
class="game" | |||
[width]="innerWidth" | |||
[height]="innerHeight" | |||
></iframe> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { MagneticRecyclingQueenComponent } from './magnetic-recycling-queen.component'; | |||
describe('MagneticRecyclingQueenComponent', () => { | |||
let component: MagneticRecyclingQueenComponent; | |||
let fixture: ComponentFixture<MagneticRecyclingQueenComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ MagneticRecyclingQueenComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(MagneticRecyclingQueenComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,24 @@ | |||
import { Component, OnInit, HostListener } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-magnetic-recycling-queen', | |||
templateUrl: './magnetic-recycling-queen.component.html', | |||
styleUrls: ['./magnetic-recycling-queen.component.css'] | |||
}) | |||
export class MagneticRecyclingQueenComponent implements OnInit { | |||
public innerHeight: any; | |||
public innerWidth: any; | |||
ngOnInit() { | |||
this.innerHeight = window.innerHeight; | |||
this.innerWidth = window.innerWidth; | |||
} | |||
constructor() { } | |||
@HostListener('window:resize', ['$event']) | |||
onResize(event) { | |||
this.innerHeight = window.innerHeight; | |||
this.innerWidth = window.innerWidth; | |||
} | |||
} |
@@ -0,0 +1,8 @@ | |||
<iframe | |||
frameborder="0" | |||
src="https://itch.io/embed-upload/1292627?color=2196f3" | |||
allowfullscreen="" | |||
class="game" | |||
[width]="innerWidth" | |||
[height]="innerHeight" | |||
></iframe> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { SaltyPiranhaComponent } from './salty-piranha.component'; | |||
describe('SaltyPiranhaComponent', () => { | |||
let component: SaltyPiranhaComponent; | |||
let fixture: ComponentFixture<SaltyPiranhaComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ SaltyPiranhaComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(SaltyPiranhaComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,24 @@ | |||
import { Component, OnInit, HostListener } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-salty-piranha', | |||
templateUrl: './salty-piranha.component.html', | |||
styleUrls: ['./salty-piranha.component.css'] | |||
}) | |||
export class SaltyPiranhaComponent implements OnInit { | |||
public innerHeight: any; | |||
public innerWidth: any; | |||
ngOnInit() { | |||
this.innerHeight = window.innerHeight; | |||
this.innerWidth = window.innerWidth; | |||
} | |||
constructor() { } | |||
@HostListener('window:resize', ['$event']) | |||
onResize(event) { | |||
this.innerHeight = window.innerHeight; | |||
this.innerWidth = window.innerWidth; | |||
} | |||
} |
@@ -0,0 +1,10 @@ | |||
<iframe | |||
class="game" | |||
frameborder="0" | |||
src="https://itch.io/embed-upload/1062906?color=4B7F52" | |||
allowfullscreen="" | |||
[width]="innerWidth" | |||
[height]="innerHeight" | |||
> | |||
></iframe | |||
> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { WhatTheFungiComponent } from './what-the-fungi.component'; | |||
describe('WhatTheFungiComponent', () => { | |||
let component: WhatTheFungiComponent; | |||
let fixture: ComponentFixture<WhatTheFungiComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ WhatTheFungiComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(WhatTheFungiComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,24 @@ | |||
import { Component, OnInit, HostListener } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-what-the-fungi', | |||
templateUrl: './what-the-fungi.component.html', | |||
styleUrls: ['./what-the-fungi.component.css'] | |||
}) | |||
export class WhatTheFungiComponent implements OnInit { | |||
public innerHeight: any; | |||
public innerWidth: any; | |||
ngOnInit() { | |||
this.innerHeight = window.innerHeight; | |||
this.innerWidth = window.innerWidth; | |||
} | |||
constructor() { } | |||
@HostListener('window:resize', ['$event']) | |||
onResize(event) { | |||
this.innerHeight = window.innerHeight; | |||
this.innerWidth = window.innerWidth; | |||
} | |||
} |
@@ -0,0 +1,7 @@ | |||
#disco-gif { | |||
position: absolute; | |||
} | |||
#disco-thumbnail { | |||
min-height: 485px; | |||
} |
@@ -0,0 +1,149 @@ | |||
<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 { GamesDashboardComponent } from './games-dashboard.component'; | |||
describe('GamesDashboardComponent', () => { | |||
let component: GamesDashboardComponent; | |||
let fixture: ComponentFixture<GamesDashboardComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ GamesDashboardComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(GamesDashboardComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,15 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-games-dashboard', | |||
templateUrl: './games-dashboard.component.html', | |||
styleUrls: ['./games-dashboard.component.css'] | |||
}) | |||
export class GamesDashboardComponent implements OnInit { | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@@ -0,0 +1,66 @@ | |||
<div class="section landing-section"> | |||
<div class="container"> | |||
<div class="row"> | |||
<div class="col-md-8 mr-auto ml-auto"> | |||
<h2 class="text-center">Keep in touch?</h2> | |||
<form class="contact-form"> | |||
<div class="row"> | |||
<div class="col-md-6"> | |||
<label>Name</label> | |||
<div | |||
class="input-group" | |||
[ngClass]="{ 'input-group-focus': focus === true }" | |||
> | |||
<div class="input-group-prepend"> | |||
<span class="input-group-text" | |||
><i class="nc-icon nc-single-02"></i | |||
></span> | |||
</div> | |||
<input | |||
type="text" | |||
class="form-control" | |||
placeholder="Name" | |||
(focus)="focus = true" | |||
(blur)="focus = false" | |||
/> | |||
</div> | |||
</div> | |||
<div class="col-md-6"> | |||
<label>Email</label> | |||
<div | |||
class="input-group" | |||
[ngClass]="{ 'input-group-focus': focus1 === true }" | |||
> | |||
<div class="input-group-prepend"> | |||
<span class="input-group-text"> | |||
<i class="nc-icon nc-email-85"></i | |||
></span> | |||
</div> | |||
<input | |||
type="text" | |||
class="form-control" | |||
placeholder="Email" | |||
(focus)="focus1 = true" | |||
(blur)="focus1 = false" | |||
/> | |||
</div> | |||
</div> | |||
</div> | |||
<label>Message</label> | |||
<textarea | |||
class="form-control" | |||
rows="4" | |||
placeholder="Tell us your thoughts and feelings..." | |||
></textarea> | |||
<div class="row"> | |||
<div class="col-md-4 mr-auto ml-auto"> | |||
<button class="btn btn-danger btn-lg btn-fill"> | |||
Send Message | |||
</button> | |||
</div> | |||
</div> | |||
</form> | |||
</div> | |||
</div> | |||
</div> | |||
</div> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { KeepInTouchComponent } from './keep-in-touch.component'; | |||
describe('KeepInTouchComponent', () => { | |||
let component: KeepInTouchComponent; | |||
let fixture: ComponentFixture<KeepInTouchComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ KeepInTouchComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(KeepInTouchComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,16 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-keep-in-touch', | |||
templateUrl: './keep-in-touch.component.html', | |||
styleUrls: ['./keep-in-touch.component.css'] | |||
}) | |||
export class KeepInTouchComponent implements OnInit { | |||
focus = true; | |||
focus1 = true; | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@@ -0,0 +1,50 @@ | |||
<body class="bg-purple"> | |||
<div class="stars"> | |||
<div class="central-body"> | |||
<img | |||
class="image-404" | |||
src="http://salehriaz.com/404Page/img/404.svg" | |||
width="300px" | |||
/> | |||
<a | |||
class="nav-item nav-link-edit pointer" | |||
[routerLink]="['']" | |||
class="btn-go-home" | |||
>GO BACK HOME</a | |||
> | |||
</div> | |||
<div class="objects"> | |||
<img | |||
class="object_rocket" | |||
src="http://salehriaz.com/404Page/img/rocket.svg" | |||
width="40px" | |||
/> | |||
<div class="earth-moon"> | |||
<img | |||
class="object_earth" | |||
src="http://salehriaz.com/404Page/img/earth.svg" | |||
width="100px" | |||
/> | |||
<img | |||
class="object_moon" | |||
src="http://salehriaz.com/404Page/img/moon.svg" | |||
width="80px" | |||
/> | |||
</div> | |||
<div class="box_astronaut"> | |||
<img | |||
class="object_astronaut" | |||
src="http://salehriaz.com/404Page/img/astronaut.svg" | |||
width="140px" | |||
/> | |||
</div> | |||
</div> | |||
<div class="glowing_stars"> | |||
<div class="star"></div> | |||
<div class="star"></div> | |||
<div class="star"></div> | |||
<div class="star"></div> | |||
<div class="star"></div> | |||
</div> | |||
</div> | |||
</body> |
@@ -0,0 +1,297 @@ | |||
/* | |||
VIEW IN FULL SCREEN MODE | |||
FULL SCREEN MODE: http://salehriaz.com/404Page/404.html | |||
DRIBBBLE: https://dribbble.com/shots/4330167-404-Page-Lost-In-Space | |||
*/ | |||
@import url('https://fonts.googleapis.com/css?family=Dosis:300,400,500'); | |||
@-moz-keyframes rocket-movement { 100% {-moz-transform: translate(1200px,-600px);} } | |||
@-webkit-keyframes rocket-movement {100% {-webkit-transform: translate(1200px,-600px); } } | |||
@keyframes rocket-movement { 100% {transform: translate(1200px,-600px);} } | |||
@-moz-keyframes spin-earth { 100% { -moz-transform: rotate(-360deg); transition: transform 20s; } } | |||
@-webkit-keyframes spin-earth { 100% { -webkit-transform: rotate(-360deg); transition: transform 20s; } } | |||
@keyframes spin-earth{ 100% { -webkit-transform: rotate(-360deg); transform:rotate(-360deg); transition: transform 20s; } } | |||
@-moz-keyframes move-astronaut { | |||
100% { -moz-transform: translate(-160px, -160px);} | |||
} | |||
@-webkit-keyframes move-astronaut { | |||
100% { -webkit-transform: translate(-160px, -160px);} | |||
} | |||
@keyframes move-astronaut{ | |||
100% { -webkit-transform: translate(-160px, -160px); transform:translate(-160px, -160px); } | |||
} | |||
@-moz-keyframes rotate-astronaut { | |||
100% { -moz-transform: rotate(-720deg);} | |||
} | |||
@-webkit-keyframes rotate-astronaut { | |||
100% { -webkit-transform: rotate(-720deg);} | |||
} | |||
@keyframes rotate-astronaut{ | |||
100% { -webkit-transform: rotate(-720deg); transform:rotate(-720deg); } | |||
} | |||
@-moz-keyframes glow-star { | |||
40% { -moz-opacity: 0.3;} | |||
90%,100% { -moz-opacity: 1; -moz-transform: scale(1.2);} | |||
} | |||
@-webkit-keyframes glow-star { | |||
40% { -webkit-opacity: 0.3;} | |||
90%,100% { -webkit-opacity: 1; -webkit-transform: scale(1.2);} | |||
} | |||
@keyframes glow-star{ | |||
40% { -webkit-opacity: 0.3; opacity: 0.3; } | |||
90%,100% { -webkit-opacity: 1; opacity: 1; -webkit-transform: scale(1.2); transform: scale(1.2); border-radius: 999999px;} | |||
} | |||
.spin-earth-on-hover{ | |||
transition: ease 200s !important; | |||
transform: rotate(-3600deg) !important; | |||
} | |||
html, body{ | |||
margin: 0; | |||
width: 100%; | |||
height: 100%; | |||
font-family: 'Dosis', sans-serif; | |||
font-weight: 300; | |||
-webkit-user-select: none; /* Safari 3.1+ */ | |||
-moz-user-select: none; /* Firefox 2+ */ | |||
-ms-user-select: none; /* IE 10+ */ | |||
user-select: none; /* Standard syntax */ | |||
} | |||
.bg-purple{ | |||
background: url(http://salehriaz.com/404Page/img/bg_purple.png); | |||
background-repeat: repeat-x; | |||
background-size: cover; | |||
background-position: left top; | |||
height: 100%; | |||
overflow: hidden; | |||
} | |||
.custom-navbar{ | |||
padding-top: 15px; | |||
} | |||
.brand-logo{ | |||
margin-left: 25px; | |||
margin-top: 5px; | |||
display: inline-block; | |||
} | |||
.navbar-links{ | |||
display: inline-block; | |||
float: right; | |||
margin-right: 15px; | |||
text-transform: uppercase; | |||
} | |||
ul { | |||
list-style-type: none; | |||
margin: 0; | |||
padding: 0; | |||
/* overflow: hidden;*/ | |||
display: flex; | |||
align-items: center; | |||
} | |||
li { | |||
float: left; | |||
padding: 0px 15px; | |||
} | |||
li a { | |||
display: block; | |||
color: white; | |||
text-align: center; | |||
text-decoration: none; | |||
letter-spacing : 2px; | |||
font-size: 12px; | |||
-webkit-transition: all 0.3s ease-in; | |||
-moz-transition: all 0.3s ease-in; | |||
-ms-transition: all 0.3s ease-in; | |||
-o-transition: all 0.3s ease-in; | |||
transition: all 0.3s ease-in; | |||
} | |||
li a:hover { | |||
color: #ffcb39; | |||
} | |||
.btn-request{ | |||
padding: 10px 25px; | |||
border: 1px solid #FFCB39; | |||
border-radius: 100px; | |||
font-weight: 400; | |||
} | |||
.btn-request:hover{ | |||
background-color: #FFCB39; | |||
color: #fff; | |||
transform: scale(1.05); | |||
box-shadow: 0px 20px 20px rgba(0,0,0,0.1); | |||
} | |||
.btn-go-home{ | |||
position: relative; | |||
z-index: 200; | |||
margin: 15px auto; | |||
width: 100px; | |||
padding: 10px 15px; | |||
border: 1px solid #FFCB39; | |||
border-radius: 100px; | |||
font-weight: 400; | |||
display: block; | |||
color: white; | |||
text-align: center; | |||
text-decoration: none; | |||
letter-spacing : 2px; | |||
font-size: 11px; | |||
-webkit-transition: all 0.3s ease-in; | |||
-moz-transition: all 0.3s ease-in; | |||
-ms-transition: all 0.3s ease-in; | |||
-o-transition: all 0.3s ease-in; | |||
transition: all 0.3s ease-in; | |||
} | |||
.btn-go-home:hover{ | |||
background-color: #FFCB39; | |||
color: #fff; | |||
transform: scale(1.05); | |||
box-shadow: 0px 20px 20px rgba(0,0,0,0.1); | |||
} | |||
.central-body{ | |||
/* width: 100%;*/ | |||
padding: 17% 5% 10% 5%; | |||
text-align: center; | |||
} | |||
.objects img{ | |||
z-index: 90; | |||
pointer-events: none; | |||
} | |||
.object_rocket{ | |||
z-index: 95; | |||
position: absolute; | |||
transform: translateX(-50px); | |||
top: 75%; | |||
pointer-events: none; | |||
animation: rocket-movement 200s linear infinite both running; | |||
} | |||
.object_earth{ | |||
position: absolute; | |||
top: 20%; | |||
left: 15%; | |||
z-index: 90; | |||
/* animation: spin-earth 100s infinite linear both;*/ | |||
} | |||
.object_moon{ | |||
position: absolute; | |||
top: 12%; | |||
left: 25%; | |||
/* | |||
transform: rotate(0deg); | |||
transition: transform ease-in 99999999999s; | |||
*/ | |||
} | |||
.earth-moon{ | |||
} | |||
.object_astronaut{ | |||
animation: rotate-astronaut 200s infinite linear both alternate; | |||
} | |||
.box_astronaut{ | |||
z-index: 110 !important; | |||
position: absolute; | |||
top: 60%; | |||
right: 20%; | |||
will-change: transform; | |||
animation: move-astronaut 50s infinite linear both alternate; | |||
} | |||
.image-404{ | |||
position: relative; | |||
z-index: 100; | |||
pointer-events: none; | |||
} | |||
.stars{ | |||
background: url(http://salehriaz.com/404Page/img/overlay_stars.svg); | |||
background-repeat: repeat; | |||
background-size: contain; | |||
background-position: left top; | |||
} | |||
.glowing_stars .star{ | |||
position: absolute; | |||
border-radius: 100%; | |||
background-color: #fff; | |||
width: 3px; | |||
height: 3px; | |||
opacity: 0.3; | |||
will-change: opacity; | |||
} | |||
.glowing_stars .star:nth-child(1){ | |||
top: 80%; | |||
left: 25%; | |||
animation: glow-star 2s infinite ease-in-out alternate 1s; | |||
} | |||
.glowing_stars .star:nth-child(2){ | |||
top: 20%; | |||
left: 40%; | |||
animation: glow-star 2s infinite ease-in-out alternate 3s; | |||
} | |||
.glowing_stars .star:nth-child(3){ | |||
top: 25%; | |||
left: 25%; | |||
animation: glow-star 2s infinite ease-in-out alternate 5s; | |||
} | |||
.glowing_stars .star:nth-child(4){ | |||
top: 75%; | |||
left: 80%; | |||
animation: glow-star 2s infinite ease-in-out alternate 7s; | |||
} | |||
.glowing_stars .star:nth-child(5){ | |||
top: 90%; | |||
left: 50%; | |||
animation: glow-star 2s infinite ease-in-out alternate 9s; | |||
} | |||
@media only screen and (max-width: 600px){ | |||
.navbar-links{ | |||
display: none; | |||
} | |||
.custom-navbar{ | |||
text-align: center; | |||
} | |||
.brand-logo img{ | |||
width: 120px; | |||
} | |||
.box_astronaut{ | |||
top: 70%; | |||
} | |||
.central-body{ | |||
padding-top: 25%; | |||
} | |||
} |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { NotFoundComponent } from './not-found.component'; | |||
describe('NotFoundComponent', () => { | |||
let component: NotFoundComponent; | |||
let fixture: ComponentFixture<NotFoundComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ NotFoundComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(NotFoundComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,15 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-not-found', | |||
templateUrl: './not-found.component.html', | |||
styleUrls: ['./not-found.component.scss'] | |||
}) | |||
export class NotFoundComponent implements OnInit { | |||
constructor() { } | |||
ngOnInit() { | |||
} | |||
} |
@@ -0,0 +1,100 @@ | |||
<div class="wrapper"> | |||
<app-project-header></app-project-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"></i> | |||
</div> | |||
<div class="description"> | |||
<h4 class="info-title">Web Projects</h4> | |||
<p class="description"> | |||
mainly created with Angular 2+ | |||
</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/ziermach-blog.jpg" | |||
alt="Card image cap" | |||
/> | |||
<div class="card-body"> | |||
<h4 class="card-title">This Blog</h4> | |||
<p class="card-text"> | |||
This Blog was made with angular 2+ and bootstrap. with help of | |||
the template | |||
<a | |||
href="https://www.creative-tim.com/product/paper-kit-2-angular" | |||
>paper-kit-2-angular</a | |||
> | |||
</p> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="col-md-6"> | |||
<div class="card"> | |||
<img | |||
class="card-img-top" | |||
src="/assets/img/pub-quiz-club.png" | |||
alt="Card image cap" | |||
/> | |||
<div class="card-body"> | |||
<h4 class="card-title">Pub Quiz Club (WIP)</h4> | |||
<p class="card-text"> | |||
I made an Only Quiz App for Pubs. It's created with Angular 2+ | |||
and | |||
<a href="https://material.angular.io/">Angular-Material</a> | |||
</p> | |||
<a href="https://pub-quiz.club" class="btn btn-primary" | |||
>Checkout</a | |||
> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="section section-dark"> | |||
<div class="container"> | |||
<div class="row"> | |||
<div class="col-sm-6"> | |||
<div class="info text-center"> | |||
<div class="icon icon-danger"> | |||
<i class="fab fa-github"></i> | |||
</div> | |||
<div class="description"> | |||
<h4 class="info-title"> | |||
<a class="btn" href="https://github.com/JackWolfskind">My Github Site</a> | |||
</h4> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="col-sm-6"> | |||
<div class="info text-center"> | |||
<div class="icon icon-danger"> | |||
<i class="fab fa-npm"></i> | |||
</div> | |||
<div class="description"> | |||
<h4 class="info-title"> | |||
<a class="btn" href="https://www.npmjs.com/~cziermann">My NPM Site</a> | |||
</h4> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { ProjectDashboardComponent } from './project-dashboard.component'; | |||
describe('ProjectDashboardComponent', () => { | |||
let component: ProjectDashboardComponent; | |||
let fixture: ComponentFixture<ProjectDashboardComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ ProjectDashboardComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(ProjectDashboardComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,15 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-project-dashboard', | |||
templateUrl: './project-dashboard.component.html', | |||
styleUrls: ['./project-dashboard.component.css'] | |||
}) | |||
export class ProjectDashboardComponent implements OnInit { | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { ResumeComponent } from './resume.component'; | |||
describe('ResumeComponent', () => { | |||
let component: ResumeComponent; | |||
let fixture: ComponentFixture<ResumeComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ ResumeComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(ResumeComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,24 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-resume', | |||
templateUrl: './resume.component.html', | |||
styleUrls: ['./resume.component.css'] | |||
}) | |||
export class ResumeComponent implements OnInit { | |||
displayedPersonalColumns = [ | |||
'name', | |||
'birthdate', | |||
'location' | |||
]; | |||
personalData = { | |||
name: 'Christian Ziermann', | |||
birthdate: new Date('September 3, 1996'), | |||
location: 'Aachner Straße 545 Cologne 50933', | |||
} | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@@ -0,0 +1,20 @@ | |||
<footer class="footer"> | |||
<div class="container"> | |||
<div class="row"> | |||
<nav class="footer-nav"> | |||
<ul> | |||
<li><a href="/legal">Impressum</a></li> | |||
</ul> | |||
</nav> | |||
<div class="credits ml-auto"> | |||
<span class="copyright"> | |||
made with <i class="fa fa-heart heart"></i> by cziermann with help of | |||
<a href="https://www.creative-tim.com/product/paper-kit-2-angular" | |||
>paper-kit-2</a | |||
> | |||
for angular | |||
</span> | |||
</div> | |||
</div> | |||
</div> | |||
</footer> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { FooterComponent } from './footer.component'; | |||
describe('FooterComponent', () => { | |||
let component: FooterComponent; | |||
let fixture: ComponentFixture<FooterComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ FooterComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(FooterComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should be created', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,14 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-footer', | |||
templateUrl: './footer.component.html', | |||
styleUrls: ['./footer.component.scss'] | |||
}) | |||
export class FooterComponent implements OnInit { | |||
test : Date = new Date(); | |||
constructor() { } | |||
ngOnInit() {} | |||
} |
@@ -0,0 +1,532 @@ | |||
<div class="wrapper"> | |||
<div class="main"> | |||
<div class="section section-gray text-center"> | |||
<div class=""> | |||
<div class=""> | |||
<h3>Angaben gemäß § 5 TMG</h3> | |||
<p> | |||
Christian Ziermann<br /> | |||
Aachner Straße 545<br /> | |||
50933 Köln | |||
</p> | |||
<h2>Kontakt</h2> | |||
<p> | |||
E-Mail: cziermann@mailbox.org | |||
</p> | |||
<h3>Haftung für Inhalte</h3> | |||
<p> | |||
Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG | |||
für eigene Inhalte auf diesen Seiten nach den allgemeinen | |||
Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als | |||
Diensteanbieter jedoch nicht verpflichtet, übermittelte oder | |||
gespeicherte fremde Informationen zu überwachen oder nach | |||
Umständen zu forschen, die auf eine rechtswidrige | |||
Tätigkeit hinweisen. | |||
</p> | |||
<p> | |||
Verpflichtungen zur Entfernung oder Sperrung der Nutzung von | |||
Informationen nach den allgemeinen Gesetzen bleiben hiervon | |||
unberührt. Eine diesbezügliche Haftung ist jedoch erst ab | |||
dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung | |||
möglich. Bei Bekanntwerden von entsprechenden | |||
Rechtsverletzungen werden wir diese Inhalte umgehend entfernen. | |||
</p> | |||
<h3>Haftung für Links</h3> | |||
<p> | |||
Unser Angebot enthält Links zu externen Websites Dritter, auf | |||
deren Inhalte wir keinen Einfluss haben. Deshalb können wir | |||
für diese fremden Inhalte auch keine Gewähr | |||
übernehmen. Für die Inhalte der verlinkten Seiten ist | |||
stets der jeweilige Anbieter oder Betreiber der Seiten | |||
verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der | |||
Verlinkung auf mögliche Rechtsverstöße | |||
überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der | |||
Verlinkung nicht erkennbar. | |||
</p> | |||
<p> | |||
Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist | |||
jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht | |||
zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir | |||
derartige Links umgehend entfernen. | |||
</p> | |||
<h3>Urheberrecht</h3> | |||
<p> | |||
Die durch die Seitenbetreiber erstellten Inhalte und Werke auf | |||
diesen Seiten unterliegen dem deutschen Urheberrecht. Die | |||
Vervielfältigung, Bearbeitung, Verbreitung und jede Art der | |||
Verwertung außerhalb der Grenzen des Urheberrechtes | |||
bedürfen der schriftlichen Zustimmung des jeweiligen Autors | |||
bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für | |||
den privaten, nicht kommerziellen Gebrauch gestattet. | |||
</p> | |||
<p> | |||
Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt | |||
wurden, werden die Urheberrechte Dritter beachtet. Insbesondere | |||
werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie | |||
trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten | |||
wir um einen entsprechenden Hinweis. Bei Bekanntwerden von | |||
Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen. | |||
</p> | |||
<h3>Nutzung personenbezogener Daten</h3> | |||
<h4>Erhobene Daten durch Google Anmeldung</h4> | |||
<p> | |||
Wenn der Nuter sich über den Google Service anmeldet, werden nur | |||
Vor-/Nachname und Technische Daten zu zurordnung gespeichert. Es | |||
können und werden keinerlei Passwörter gespeichert. | |||
</p> | |||
<h4>Weiteres</h4> | |||
<p> | |||
Desweitern werden nur Daten gespeichert und genutzt die für die | |||
Funktionalitäten der Seite erforderlich sind. | |||
</p> | |||
<p>Quelle: <a href="https://www.e-recht24.de">eRecht24</a></p> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="section section-gray text-center"> | |||
<div class=""> | |||
<div class=""> | |||
<h2>1. Datenschutz auf einen Blick</h2> | |||
<h3>Allgemeine Hinweise</h3> | |||
<p> | |||
Die folgenden Hinweise geben einen einfachen Überblick | |||
darüber, was mit Ihren personenbezogenen Daten passiert, wenn | |||
Sie diese Website besuchen. Personenbezogene Daten sind alle Daten, | |||
mit denen Sie persönlich identifiziert werden können. | |||
Ausführliche Informationen zum Thema Datenschutz entnehmen Sie | |||
unserer unter diesem Text aufgeführten | |||
Datenschutzerklärung. | |||
</p> | |||
<h3>Datenerfassung auf dieser Website</h3> | |||
<p> | |||
<strong | |||
>Wer ist verantwortlich für die Datenerfassung auf dieser | |||
Website?</strong | |||
> | |||
</p> | |||
<p> | |||
Die Datenverarbeitung auf dieser Website erfolgt durch den | |||
Websitebetreiber. Dessen Kontaktdaten können Sie dem Impressum | |||
dieser Website entnehmen. | |||
</p> | |||
<p><strong>Wie erfassen wir Ihre Daten?</strong></p> | |||
<p> | |||
Ihre Daten werden zum einen dadurch erhoben, dass Sie uns diese | |||
mitteilen. Hierbei kann es sich z. B. um Daten handeln, die Sie | |||
in ein Kontaktformular eingeben. | |||
</p> | |||
<p> | |||
Andere Daten werden automatisch oder nach Ihrer Einwilligung beim | |||
Besuch der Website durch unsere IT-Systeme erfasst. Das sind vor | |||
allem technische Daten (z. B. Internetbrowser, Betriebssystem | |||
oder Uhrzeit des Seitenaufrufs). Die Erfassung dieser Daten erfolgt | |||
automatisch, sobald Sie diese Website betreten. | |||
</p> | |||
<p><strong>Wofür nutzen wir Ihre Daten?</strong></p> | |||
<p> | |||
Ein Teil der Daten wird erhoben, um eine fehlerfreie Bereitstellung | |||
der Website zu gewährleisten. Andere Daten können zur | |||
Analyse Ihres Nutzerverhaltens verwendet werden. | |||
</p> | |||
<p> | |||
<strong>Welche Rechte haben Sie bezüglich Ihrer Daten?</strong> | |||
</p> | |||
<p> | |||
Sie haben jederzeit das Recht, unentgeltlich Auskunft über | |||
Herkunft, Empfänger und Zweck Ihrer gespeicherten | |||
personenbezogenen Daten zu erhalten. Sie haben außerdem ein | |||
Recht, die Berichtigung oder Löschung dieser Daten zu | |||
verlangen. Wenn Sie eine Einwilligung zur Datenverarbeitung erteilt | |||
haben, können Sie diese Einwilligung jederzeit für die | |||
Zukunft widerrufen. Außerdem haben Sie das Recht, unter | |||
bestimmten Umständen die Einschränkung der Verarbeitung | |||
Ihrer personenbezogenen Daten zu verlangen. Des Weiteren steht Ihnen | |||
ein Beschwerderecht bei der zuständigen Aufsichtsbehörde | |||
zu. | |||
</p> | |||
<p> | |||
Hierzu sowie zu weiteren Fragen zum Thema Datenschutz können | |||
Sie sich jederzeit unter der im Impressum angegebenen Adresse an uns | |||
wenden. | |||
</p> | |||
<h2>2. Hosting und Content Delivery Networks (CDN)</h2> | |||
<h3>Externes Hosting</h3> | |||
<p> | |||
Diese Website wird bei einem externen Dienstleister gehostet | |||
(Hoster). Die personenbezogenen Daten, die auf dieser Website | |||
erfasst werden, werden auf den Servern des Hosters gespeichert. | |||
Hierbei kann es sich v. a. um IP-Adressen, Kontaktanfragen, Meta- | |||
und Kommunikationsdaten, Vertragsdaten, Kontaktdaten, Namen, | |||
Webseitenzugriffe und sonstige Daten, die über eine Website | |||
generiert werden, handeln. | |||
</p> | |||
<p> | |||
Der Einsatz des Hosters erfolgt zum Zwecke der | |||
Vertragserfüllung gegenüber unseren potenziellen und | |||
bestehenden Kunden (Art. 6 Abs. 1 lit. b DSGVO) und im Interesse | |||
einer sicheren, schnellen und effizienten Bereitstellung unseres | |||
Online-Angebots durch einen professionellen Anbieter (Art. 6 Abs. 1 | |||
lit. f DSGVO). | |||
</p> | |||
<p> | |||
Unser Hoster wird Ihre Daten nur insoweit verarbeiten, wie dies zur | |||
Erfüllung seiner Leistungspflichten erforderlich ist und unsere | |||
Weisungen in Bezug auf diese Daten befolgen. | |||
</p> | |||
<p> | |||
<strong | |||
>Abschluss eines Vertrages über Auftragsverarbeitung</strong | |||
> | |||
</p> | |||
<p> | |||
Um die datenschutzkonforme Verarbeitung zu gewährleisten, haben | |||
wir einen Vertrag über Auftragsverarbeitung mit unserem Hoster | |||
geschlossen. | |||
</p> | |||
<h2>3. Allgemeine Hinweise und Pflichtinformationen</h2> | |||
<h3>Datenschutz</h3> | |||
<p> | |||
Die Betreiber dieser Seiten nehmen den Schutz Ihrer | |||
persönlichen Daten sehr ernst. Wir behandeln Ihre | |||
personenbezogenen Daten vertraulich und entsprechend der | |||
gesetzlichen Datenschutzvorschriften sowie dieser | |||
Datenschutzerklärung. | |||
</p> | |||
<p> | |||
Wenn Sie diese Website benutzen, werden verschiedene | |||
personenbezogene Daten erhoben. Personenbezogene Daten sind Daten, | |||
mit denen Sie persönlich identifiziert werden können. Die | |||
vorliegende Datenschutzerklärung erläutert, welche Daten | |||
wir erheben und wofür wir sie nutzen. Sie erläutert auch, | |||
wie und zu welchem Zweck das geschieht. | |||
</p> | |||
<p> | |||
Wir weisen darauf hin, dass die Datenübertragung im Internet | |||
(z. B. bei der Kommunikation per E-Mail) Sicherheitslücken | |||
aufweisen kann. Ein lückenloser Schutz der Daten vor dem | |||
Zugriff durch Dritte ist nicht möglich. | |||
</p> | |||
<h3>Hinweis zur verantwortlichen Stelle</h3> | |||
<p> | |||
Die verantwortliche Stelle für die Datenverarbeitung auf dieser | |||
Website ist: | |||
</p> | |||
<p> | |||
Christian Ziermann<br /> | |||
Aachener Straße 545<br /> | |||
50944 Köln | |||
</p> | |||
<p> | |||
Telefon: 01742046742<br /> | |||
E-Mail: cziermann@mailbox.org | |||
</p> | |||
<p> | |||
Verantwortliche Stelle ist die natürliche oder juristische | |||
Person, die allein oder gemeinsam mit anderen über die Zwecke | |||
und Mittel der Verarbeitung von personenbezogenen Daten (z. B. | |||
Namen, E-Mail-Adressen o. Ä.) entscheidet. | |||
</p> | |||
<h3>Widerruf Ihrer Einwilligung zur Datenverarbeitung</h3> | |||
<p> | |||
Viele Datenverarbeitungsvorgänge sind nur mit Ihrer | |||
ausdrücklichen Einwilligung möglich. Sie können eine | |||
bereits erteilte Einwilligung jederzeit widerrufen. Dazu reicht eine | |||
formlose Mitteilung per E-Mail an uns. Die Rechtmäßigkeit | |||
der bis zum Widerruf erfolgten Datenverarbeitung bleibt vom Widerruf | |||
unberührt. | |||
</p> | |||
<h3> | |||
Widerspruchsrecht gegen die Datenerhebung in besonderen Fällen | |||
sowie gegen Direktwerbung (Art. 21 DSGVO) | |||
</h3> | |||
<p> | |||
WENN DIE DATENVERARBEITUNG AUF GRUNDLAGE VON ART. 6 ABS. 1 LIT. E | |||
ODER F DSGVO ERFOLGT, HABEN SIE JEDERZEIT DAS RECHT, AUS | |||
GRÜNDEN, DIE SICH AUS IHRER BESONDEREN SITUATION ERGEBEN, GEGEN | |||
DIE VERARBEITUNG IHRER PERSONENBEZOGENEN DATEN WIDERSPRUCH | |||
EINZULEGEN; DIES GILT AUCH FÜR EIN AUF DIESE BESTIMMUNGEN | |||
GESTÜTZTES PROFILING. DIE JEWEILIGE RECHTSGRUNDLAGE, AUF DENEN | |||
EINE VERARBEITUNG BERUHT, ENTNEHMEN SIE DIESER | |||
DATENSCHUTZERKLÄRUNG. WENN SIE WIDERSPRUCH EINLEGEN, WERDEN WIR | |||
IHRE BETROFFENEN PERSONENBEZOGENEN DATEN NICHT MEHR VERARBEITEN, ES | |||
SEI DENN, WIR KÖNNEN ZWINGENDE SCHUTZWÜRDIGE GRÜNDE | |||
FÜR DIE VERARBEITUNG NACHWEISEN, DIE IHRE INTERESSEN, RECHTE | |||
UND FREIHEITEN ÜBERWIEGEN ODER DIE VERARBEITUNG DIENT DER | |||
GELTENDMACHUNG, AUSÜBUNG ODER VERTEIDIGUNG VON | |||
RECHTSANSPRÜCHEN (WIDERSPRUCH NACH ART. 21 ABS. 1 DSGVO). | |||
</p> | |||
<p> | |||
WERDEN IHRE PERSONENBEZOGENEN DATEN VERARBEITET, UM DIREKTWERBUNG ZU | |||
BETREIBEN, SO HABEN SIE DAS RECHT, JEDERZEIT WIDERSPRUCH GEGEN DIE | |||
VERARBEITUNG SIE BETREFFENDER PERSONENBEZOGENER DATEN ZUM ZWECKE | |||
DERARTIGER WERBUNG EINZULEGEN; DIES GILT AUCH FÜR DAS | |||
PROFILING, SOWEIT ES MIT SOLCHER DIREKTWERBUNG IN VERBINDUNG STEHT. | |||
WENN SIE WIDERSPRECHEN, WERDEN IHRE PERSONENBEZOGENEN DATEN | |||
ANSCHLIESSEND NICHT MEHR ZUM ZWECKE DER DIREKTWERBUNG VERWENDET | |||
(WIDERSPRUCH NACH ART. 21 ABS. 2 DSGVO). | |||
</p> | |||
<h3> | |||
Beschwerderecht bei der zuständigen Aufsichtsbehörde | |||
</h3> | |||
<p> | |||
Im Falle von Verstößen gegen die DSGVO steht den | |||
Betroffenen ein Beschwerderecht bei einer Aufsichtsbehörde, | |||
insbesondere in dem Mitgliedstaat ihres gewöhnlichen | |||
Aufenthalts, ihres Arbeitsplatzes oder des Orts des | |||
mutmaßlichen Verstoßes zu. Das Beschwerderecht besteht | |||
unbeschadet anderweitiger verwaltungsrechtlicher oder gerichtlicher | |||
Rechtsbehelfe. | |||
</p> | |||
<h3>Recht auf Datenübertragbarkeit</h3> | |||
<p> | |||
Sie haben das Recht, Daten, die wir auf Grundlage Ihrer Einwilligung | |||
oder in Erfüllung eines Vertrags automatisiert verarbeiten, an | |||
sich oder an einen Dritten in einem gängigen, maschinenlesbaren | |||
Format aushändigen zu lassen. Sofern Sie die direkte | |||
Übertragung der Daten an einen anderen Verantwortlichen | |||
verlangen, erfolgt dies nur, soweit es technisch machbar ist. | |||
</p> | |||
<h3>SSL- bzw. TLS-Verschlüsselung</h3> | |||
<p> | |||
Diese Seite nutzt aus Sicherheitsgründen und zum Schutz der | |||
Übertragung vertraulicher Inhalte, wie zum Beispiel | |||
Bestellungen oder Anfragen, die Sie an uns als Seitenbetreiber | |||
senden, eine SSL- bzw. TLS-Verschlüsselung. Eine | |||
verschlüsselte Verbindung erkennen Sie daran, dass die | |||
Adresszeile des Browsers von „http://“ auf | |||
„https://“ wechselt und an dem Schloss-Symbol in Ihrer | |||
Browserzeile. | |||
</p> | |||
<p> | |||
Wenn die SSL- bzw. TLS-Verschlüsselung aktiviert ist, | |||
können die Daten, die Sie an uns übermitteln, nicht von | |||
Dritten mitgelesen werden. | |||
</p> | |||
<h3>Auskunft, Löschung und Berichtigung</h3> | |||
<p> | |||
Sie haben im Rahmen der geltenden gesetzlichen Bestimmungen | |||
jederzeit das Recht auf unentgeltliche Auskunft über Ihre | |||
gespeicherten personenbezogenen Daten, deren Herkunft und | |||
Empfänger und den Zweck der Datenverarbeitung und ggf. ein | |||
Recht auf Berichtigung oder Löschung dieser Daten. Hierzu sowie | |||
zu weiteren Fragen zum Thema personenbezogene Daten können Sie | |||
sich jederzeit unter der im Impressum angegebenen Adresse an uns | |||
wenden. | |||
</p> | |||
<h3>Recht auf Einschränkung der Verarbeitung</h3> | |||
<p> | |||
Sie haben das Recht, die Einschränkung der Verarbeitung Ihrer | |||
personenbezogenen Daten zu verlangen. Hierzu können Sie sich | |||
jederzeit unter der im Impressum angegebenen Adresse an uns wenden. | |||
Das Recht auf Einschränkung der Verarbeitung besteht in | |||
folgenden Fällen: | |||
</p> | |||
<ul> | |||
<li> | |||
Wenn Sie die Richtigkeit Ihrer bei uns gespeicherten | |||
personenbezogenen Daten bestreiten, benötigen wir in der | |||
Regel Zeit, um dies zu überprüfen. Für die Dauer | |||
der Prüfung haben Sie das Recht, die Einschränkung der | |||
Verarbeitung Ihrer personenbezogenen Daten zu verlangen. | |||
</li> | |||
<li> | |||
Wenn die Verarbeitung Ihrer personenbezogenen Daten | |||
unrechtmäßig geschah/geschieht, können Sie statt | |||
der Löschung die Einschränkung der Datenverarbeitung | |||
verlangen. | |||
</li> | |||
<li> | |||
Wenn wir Ihre personenbezogenen Daten nicht mehr benötigen, | |||
Sie sie jedoch zur Ausübung, Verteidigung oder Geltendmachung | |||
von Rechtsansprüchen benötigen, haben Sie das Recht, | |||
statt der Löschung die Einschränkung der Verarbeitung | |||
Ihrer personenbezogenen Daten zu verlangen. | |||
</li> | |||
<li> | |||
Wenn Sie einen Widerspruch nach Art. 21 Abs. 1 DSGVO eingelegt | |||
haben, muss eine Abwägung zwischen Ihren und unseren | |||
Interessen vorgenommen werden. Solange noch nicht feststeht, | |||
wessen Interessen überwiegen, haben Sie das Recht, die | |||
Einschränkung der Verarbeitung Ihrer personenbezogenen Daten | |||
zu verlangen. | |||
</li> | |||
</ul> | |||
<p> | |||
Wenn Sie die Verarbeitung Ihrer personenbezogenen Daten | |||
eingeschränkt haben, dürfen diese Daten – von ihrer | |||
Speicherung abgesehen – nur mit Ihrer Einwilligung oder zur | |||
Geltendmachung, Ausübung oder Verteidigung von | |||
Rechtsansprüchen oder zum Schutz der Rechte einer anderen | |||
natürlichen oder juristischen Person oder aus Gründen | |||
eines wichtigen öffentlichen Interesses der Europäischen | |||
Union oder eines Mitgliedstaats verarbeitet werden. | |||
</p> | |||
<h2>4. Datenerfassung auf dieser Website</h2> | |||
<h3>Cookies</h3> | |||
<p> | |||
Unsere Internetseiten verwenden so genannte „Cookies“. | |||
Cookies sind kleine Textdateien und richten auf Ihrem Endgerät | |||
keinen Schaden an. Sie werden entweder vorübergehend für | |||
die Dauer einer Sitzung (Session-Cookies) oder dauerhaft (permanente | |||
Cookies) auf Ihrem Endgerät gespeichert. Session-Cookies werden | |||
nach Ende Ihres Besuchs automatisch gelöscht. Permanente | |||
Cookies bleiben auf Ihrem Endgerät gespeichert, bis Sie diese | |||
selbst löschen oder eine automatische Löschung durch | |||
Ihren Webbrowser erfolgt. | |||
</p> | |||
<p> | |||
Teilweise können auch Cookies von Drittunternehmen auf Ihrem | |||
Endgerät gespeichert werden, wenn Sie unsere Seite betreten | |||
(Third-Party-Cookies). Diese ermöglichen uns oder Ihnen die | |||
Nutzung bestimmter Dienstleistungen des Drittunternehmens (z.B. | |||
Cookies zur Abwicklung von Zahlungsdienstleistungen). | |||
</p> | |||
<p> | |||
Cookies haben verschiedene Funktionen. Zahlreiche Cookies sind | |||
technisch notwendig, da bestimmte Webseitenfunktionen ohne diese | |||
nicht funktionieren würden (z.B. die Warenkorbfunktion oder die | |||
Anzeige von Videos). Andere Cookies dienen dazu, das Nutzerverhalten | |||
auszuwerten oder Werbung anzuzeigen. | |||
</p> | |||
<p> | |||
Cookies, die zur Durchführung des elektronischen | |||
Kommunikationsvorgangs (notwendige Cookies) oder zur Bereitstellung | |||
bestimmter, von Ihnen erwünschter Funktionen (funktionale | |||
Cookies, z. B. für die Warenkorbfunktion) oder zur Optimierung | |||
der Webseite (z.B. Cookies zur Messung des Webpublikums) | |||
erforderlich sind, werden auf Grundlage von Art. 6 Abs. 1 lit. f | |||
DSGVO gespeichert, sofern keine andere Rechtsgrundlage angegeben | |||
wird. Der Websitebetreiber hat ein berechtigtes Interesse an der | |||
Speicherung von Cookies zur technisch fehlerfreien und optimierten | |||
Bereitstellung seiner Dienste. Sofern eine Einwilligung zur | |||
Speicherung von Cookies abgefragt wurde, erfolgt die Speicherung der | |||
betreffenden Cookies ausschließlich auf Grundlage dieser | |||
Einwilligung (Art. 6 Abs. 1 lit. a DSGVO); die Einwilligung ist | |||
jederzeit widerrufbar. | |||
</p> | |||
<p> | |||
Sie können Ihren Browser so einstellen, dass Sie über das | |||
Setzen von Cookies informiert werden und Cookies nur im Einzelfall | |||
erlauben, die Annahme von Cookies für bestimmte Fälle oder | |||
generell ausschließen sowie das automatische Löschen der | |||
Cookies beim Schließen des Browsers aktivieren. Bei der | |||
Deaktivierung von Cookies kann die Funktionalität dieser | |||
Website eingeschränkt sein. | |||
</p> | |||
<p> | |||
Soweit Cookies von Drittunternehmen oder zu Analysezwecken | |||
eingesetzt werden, werden wir Sie hierüber im Rahmen dieser | |||
Datenschutzerklärung gesondert informieren und ggf. eine | |||
Einwilligung abfragen. | |||
</p> | |||
<h3>Server-Log-Dateien</h3> | |||
<p> | |||
Der Provider der Seiten erhebt und speichert automatisch | |||
Informationen in so genannten Server-Log-Dateien, die Ihr Browser | |||
automatisch an uns übermittelt. Dies sind: | |||
</p> | |||
<ul> | |||
<li>Browsertyp und Browserversion</li> | |||
<li>verwendetes Betriebssystem</li> | |||
<li>Referrer URL</li> | |||
<li>Hostname des zugreifenden Rechners</li> | |||
<li>Uhrzeit der Serveranfrage</li> | |||
<li>IP-Adresse</li> | |||
</ul> | |||
<p> | |||
Eine Zusammenführung dieser Daten mit anderen Datenquellen wird | |||
nicht vorgenommen. | |||
</p> | |||
<p> | |||
Die Erfassung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. 1 | |||
lit. f DSGVO. Der Websitebetreiber hat ein berechtigtes Interesse an | |||
der technisch fehlerfreien Darstellung und der Optimierung seiner | |||
Website – hierzu müssen die Server-Log-Files erfasst | |||
werden. | |||
</p> | |||
<h3>Kontaktformular</h3> | |||
<p> | |||
Wenn Sie uns per Kontaktformular Anfragen zukommen lassen, werden | |||
Ihre Angaben aus dem Anfrageformular inklusive der von Ihnen dort | |||
angegebenen Kontaktdaten zwecks Bearbeitung der Anfrage und für | |||
den Fall von Anschlussfragen bei uns gespeichert. Diese Daten geben | |||
wir nicht ohne Ihre Einwilligung weiter. | |||
</p> | |||
<p> | |||
Die Verarbeitung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. | |||
1 lit. b DSGVO, sofern Ihre Anfrage mit der Erfüllung eines | |||
Vertrags zusammenhängt oder zur Durchführung | |||
vorvertraglicher Maßnahmen erforderlich ist. In allen | |||
übrigen Fällen beruht die Verarbeitung auf unserem | |||
berechtigten Interesse an der effektiven Bearbeitung der an uns | |||
gerichteten Anfragen (Art. 6 Abs. 1 lit. f DSGVO) oder auf Ihrer | |||
Einwilligung (Art. 6 Abs. 1 lit. a DSGVO) sofern diese abgefragt | |||
wurde. | |||
</p> | |||
<p> | |||
Die von Ihnen im Kontaktformular eingegebenen Daten verbleiben bei | |||
uns, bis Sie uns zur Löschung auffordern, Ihre Einwilligung zur | |||
Speicherung widerrufen oder der Zweck für die Datenspeicherung | |||
entfällt (z. B. nach abgeschlossener Bearbeitung Ihrer | |||
Anfrage). Zwingende gesetzliche Bestimmungen – insbesondere | |||
Aufbewahrungsfristen – bleiben unberührt. | |||
</p> | |||
<h2>5. Plugins und Tools</h2> | |||
<h3>Google Web Fonts</h3> | |||
<p> | |||
Diese Seite nutzt zur einheitlichen Darstellung von Schriftarten so | |||
genannte Web Fonts, die von Google bereitgestellt werden. Beim | |||
Aufruf einer Seite lädt Ihr Browser die benötigten Web | |||
Fonts in ihren Browsercache, um Texte und Schriftarten korrekt | |||
anzuzeigen. | |||
</p> | |||
<p> | |||
Zu diesem Zweck muss der von Ihnen verwendete Browser Verbindung zu | |||
den Servern von Google aufnehmen. Hierdurch erlangt Google Kenntnis | |||
darüber, dass über Ihre IP-Adresse diese Website | |||
aufgerufen wurde. Die Nutzung von Google WebFonts erfolgt auf | |||
Grundlage von Art. 6 Abs. 1 lit. f DSGVO. Der Webseitenbetreiber hat | |||
ein berechtigtes Interesse an der einheitlichen Darstellung des | |||
Schriftbildes auf seiner Webseite. Sofern eine entsprechende | |||
Einwilligung abgefragt wurde (z. B. eine Einwilligung zur | |||
Speicherung von Cookies), erfolgt die Verarbeitung | |||
ausschließlich auf Grundlage von Art. 6 Abs. 1 lit. a DSGVO; | |||
die Einwilligung ist jederzeit widerrufbar. | |||
</p> | |||
<p> | |||
Wenn Ihr Browser Web Fonts nicht unterstützt, wird eine | |||
Standardschrift von Ihrem Computer genutzt. | |||
</p> | |||
<p> | |||
Weitere Informationen zu Google Web Fonts finden Sie unter | |||
<a | |||
href="https://developers.google.com/fonts/faq" | |||
target="_blank" | |||
rel="noopener noreferrer" | |||
>https://developers.google.com/fonts/faq</a | |||
> | |||
und in der Datenschutzerklärung von Google: | |||
<a | |||
href="https://policies.google.com/privacy?hl=de" | |||
target="_blank" | |||
rel="noopener noreferrer" | |||
>https://policies.google.com/privacy?hl=de</a | |||
>. | |||
</p> | |||
<p> | |||
Quelle: | |||
<a href="https://www.e-recht24.de/muster-datenschutzerklaerung.html" | |||
>https://www.e-recht24.de/muster-datenschutzerklaerung.html</a | |||
> | |||
</p> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { ImpressumComponent } from './impressum.component'; | |||
describe('ImpressumComponent', () => { | |||
let component: ImpressumComponent; | |||
let fixture: ComponentFixture<ImpressumComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ ImpressumComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(ImpressumComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should create', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,15 @@ | |||
import { Component, OnInit } from '@angular/core'; | |||
@Component({ | |||
selector: 'app-impressum', | |||
templateUrl: './impressum.component.html', | |||
styleUrls: ['./impressum.component.css'] | |||
}) | |||
export class ImpressumComponent implements OnInit { | |||
constructor() { } | |||
ngOnInit(): void { | |||
} | |||
} |
@@ -0,0 +1,34 @@ | |||
<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> | |||
</div> | |||
</nav> |
@@ -0,0 +1,25 @@ | |||
import { async, ComponentFixture, TestBed } from '@angular/core/testing'; | |||
import { NavbarComponent } from './navbar.component'; | |||
describe('NavbarComponent', () => { | |||
let component: NavbarComponent; | |||
let fixture: ComponentFixture<NavbarComponent>; | |||
beforeEach(async(() => { | |||
TestBed.configureTestingModule({ | |||
declarations: [ NavbarComponent ] | |||
}) | |||
.compileComponents(); | |||
})); | |||
beforeEach(() => { | |||
fixture = TestBed.createComponent(NavbarComponent); | |||
component = fixture.componentInstance; | |||
fixture.detectChanges(); | |||
}); | |||
it('should be created', () => { | |||
expect(component).toBeTruthy(); | |||
}); | |||
}); |
@@ -0,0 +1,74 @@ | |||
import { Component, OnInit, ElementRef } from '@angular/core'; | |||
import { Location, LocationStrategy, PathLocationStrategy } from '@angular/common'; | |||
@Component({ | |||
selector: 'app-navbar', | |||
templateUrl: './navbar.component.html', | |||
styleUrls: ['./navbar.component.scss'] | |||
}) | |||
export class NavbarComponent implements OnInit { | |||
private toggleButton: any; | |||
private sidebarVisible: boolean; | |||
constructor(public location: Location, private element : ElementRef) { | |||
this.sidebarVisible = false; | |||
} | |||
ngOnInit() { | |||
const navbar: HTMLElement = this.element.nativeElement; | |||
this.toggleButton = navbar.getElementsByClassName('navbar-toggler')[0]; | |||
} | |||
sidebarOpen() { | |||
const toggleButton = this.toggleButton; | |||
const html = document.getElementsByTagName('html')[0]; | |||
// console.log(html); | |||
// console.log(toggleButton, 'toggle'); | |||
setTimeout(function(){ | |||
toggleButton.classList.add('toggled'); | |||
}, 500); | |||
html.classList.add('nav-open'); | |||
this.sidebarVisible = true; | |||
}; | |||
sidebarClose() { | |||
const html = document.getElementsByTagName('html')[0]; | |||
// console.log(html); | |||
this.toggleButton.classList.remove('toggled'); | |||
this.sidebarVisible = false; | |||
html.classList.remove('nav-open'); | |||
}; | |||
sidebarToggle() { | |||
// const toggleButton = this.toggleButton; | |||
// const body = document.getElementsByTagName('body')[0]; | |||
if (this.sidebarVisible === false) { | |||
this.sidebarOpen(); | |||
} else { | |||
this.sidebarClose(); | |||
} | |||
}; | |||
isHome() { | |||
var titlee = this.location.prepareExternalUrl(this.location.path()); | |||
if(titlee.charAt(0) === '#'){ | |||
titlee = titlee.slice( 1 ); | |||
} | |||
if( titlee === '/home' ) { | |||
return true; | |||
} | |||
else { | |||
return false; | |||
} | |||
} | |||
isDocumentation() { | |||
var titlee = this.location.prepareExternalUrl(this.location.path()); | |||
if(titlee.charAt(0) === '#'){ | |||
titlee = titlee.slice( 1 ); | |||
} | |||
if( titlee === '/documentation' ) { | |||
return true; | |||
} | |||
else { | |||
return false; | |||
} | |||
} | |||
} |
@@ -0,0 +1,566 @@ | |||
/*-------------------------------- | |||
nucleo-icons Web Font - built using nucleoapp.com | |||
License - nucleoapp.com/license/ | |||
-------------------------------- */ | |||
@font-face { | |||
font-family: 'nucleo-icons'; | |||
src: url('../fonts/nucleo-icons.eot'); | |||
src: url('../fonts/nucleo-icons.eot') format('embedded-opentype'), url('../fonts/nucleo-icons.woff2') format('woff2'), url('../fonts/nucleo-icons.woff') format('woff'), url('../fonts/nucleo-icons.ttf') format('truetype'); | |||
font-weight: normal; | |||
font-style: normal; | |||
} | |||
/*------------------------ | |||
base class definition | |||
-------------------------*/ | |||
.nc-icon { | |||
display: inline-block; | |||
font: normal normal normal 14px/1 'nucleo-icons'; | |||
font-size: inherit; | |||
speak: none; | |||
text-transform: none; | |||
/* Better Font Rendering */ | |||
-webkit-font-smoothing: antialiased; | |||
-moz-osx-font-smoothing: grayscale; | |||
} | |||
/*------------------------ | |||
change icon size | |||
-------------------------*/ | |||
.nc-icon.lg { | |||
font-size: 1.33333333em; | |||
vertical-align: -16%; | |||
} | |||
.nc-icon.x2 { | |||
font-size: 2em; | |||
} | |||
.nc-icon.x3 { | |||
font-size: 3em; | |||
} | |||
/*---------------------------------- | |||
add a square/circle background | |||
-----------------------------------*/ | |||
.nc-icon.square, | |||
.nc-icon.circle { | |||
padding: 0.33333333em; | |||
vertical-align: -16%; | |||
background-color: #eee; | |||
} | |||
.nc-icon.circle { | |||
border-radius: 50%; | |||
} | |||
/*------------------------ | |||
list icons | |||
-------------------------*/ | |||
.nc-icon-ul { | |||
padding-left: 0; | |||
margin-left: 2.14285714em; | |||
list-style-type: none; | |||
} | |||
.nc-icon-ul > li { | |||
position: relative; | |||
} | |||
.nc-icon-ul > li > .nc-icon { | |||
position: absolute; | |||
left: -1.57142857em; | |||
top: 0.14285714em; | |||
text-align: center; | |||
} | |||
.nc-icon-ul > li > .nc-icon.lg { | |||
top: 0; | |||
left: -1.35714286em; | |||
} | |||
.nc-icon-ul > li > .nc-icon.circle, | |||
.nc-icon-ul > li > .nc-icon.square { | |||
top: -0.19047619em; | |||
left: -1.9047619em; | |||
} | |||
/*------------------------ | |||
spinning icons | |||
-------------------------*/ | |||
.nc-icon.spin { | |||
-webkit-animation: nc-icon-spin 2s infinite linear; | |||
-moz-animation: nc-icon-spin 2s infinite linear; | |||
animation: nc-icon-spin 2s infinite linear; | |||
} | |||
@-webkit-keyframes nc-icon-spin { | |||
0% { | |||
-webkit-transform: rotate(0deg); | |||
} | |||
100% { | |||
-webkit-transform: rotate(360deg); | |||
} | |||
} | |||
@-moz-keyframes nc-icon-spin { | |||
0% { | |||
-moz-transform: rotate(0deg); | |||
} | |||
100% { | |||
-moz-transform: rotate(360deg); | |||
} | |||
} | |||
@keyframes nc-icon-spin { | |||
0% { | |||
-webkit-transform: rotate(0deg); | |||
-moz-transform: rotate(0deg); | |||
-ms-transform: rotate(0deg); | |||
-o-transform: rotate(0deg); | |||
transform: rotate(0deg); | |||
} | |||
100% { | |||
-webkit-transform: rotate(360deg); | |||
-moz-transform: rotate(360deg); | |||
-ms-transform: rotate(360deg); | |||
-o-transform: rotate(360deg); | |||
transform: rotate(360deg); | |||
} | |||
} | |||
/*------------------------ | |||
rotated/flipped icons | |||
-------------------------*/ | |||
.nc-icon.rotate-90 { | |||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1); | |||
-webkit-transform: rotate(90deg); | |||
-moz-transform: rotate(90deg); | |||
-ms-transform: rotate(90deg); | |||
-o-transform: rotate(90deg); | |||
transform: rotate(90deg); | |||
} | |||
.nc-icon.rotate-180 { | |||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); | |||
-webkit-transform: rotate(180deg); | |||
-moz-transform: rotate(180deg); | |||
-ms-transform: rotate(180deg); | |||
-o-transform: rotate(180deg); | |||
transform: rotate(180deg); | |||
} | |||
.nc-icon.rotate-270 { | |||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3); | |||
-webkit-transform: rotate(270deg); | |||
-moz-transform: rotate(270deg); | |||
-ms-transform: rotate(270deg); | |||
-o-transform: rotate(270deg); | |||
transform: rotate(270deg); | |||
} | |||
.nc-icon.flip-y { | |||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0); | |||
-webkit-transform: scale(-1, 1); | |||
-moz-transform: scale(-1, 1); | |||
-ms-transform: scale(-1, 1); | |||
-o-transform: scale(-1, 1); | |||
transform: scale(-1, 1); | |||
} | |||
.nc-icon.flip-x { | |||
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2); | |||
-webkit-transform: scale(1, -1); | |||
-moz-transform: scale(1, -1); | |||
-ms-transform: scale(1, -1); | |||
-o-transform: scale(1, -1); | |||
transform: scale(1, -1); | |||
} | |||
/*------------------------ | |||
font icons | |||
-------------------------*/ | |||
.nc-air-baloon::before { | |||
content: "\ea01"; | |||
} | |||
.nc-album-2::before { | |||
content: "\ea02"; | |||
} | |||
.nc-alert-circle-i::before { | |||
content: "\ea04"; | |||
} | |||
.nc-align-center::before { | |||
content: "\ea03"; | |||
} | |||
.nc-align-left-2::before { | |||
content: "\ea05"; | |||
} | |||
.nc-ambulance::before { | |||
content: "\ea06"; | |||
} | |||
.nc-app::before { | |||
content: "\ea07"; | |||
} | |||
.nc-atom::before { | |||
content: "\ea08"; | |||
} | |||
.nc-badge::before { | |||
content: "\ea09"; | |||
} | |||
.nc-bag-16::before { | |||
content: "\ea0a"; | |||
} | |||
.nc-bank::before { | |||
content: "\ea0b"; | |||
} | |||
.nc-basket::before { | |||
content: "\ea0c"; | |||
} | |||
.nc-bell-55::before { | |||
content: "\ea0d"; | |||
} | |||
.nc-bold::before { | |||
content: "\ea0e"; | |||
} | |||
.nc-book-bookmark::before { | |||
content: "\ea0f"; | |||
} | |||
.nc-bookmark-2::before { | |||
content: "\ea10"; | |||
} | |||
.nc-box-2::before { | |||
content: "\ea11"; | |||
} | |||
.nc-box::before { | |||
content: "\ea12"; | |||
} | |||
.nc-briefcase-24::before { | |||
content: "\ea13"; | |||
} | |||
.nc-bulb-63::before { | |||
content: "\ea14"; | |||
} | |||
.nc-bullet-list-67::before { | |||
content: "\ea15"; | |||
} | |||
.nc-bus-front-12::before { | |||
content: "\ea16"; | |||
} | |||
.nc-button-pause::before { | |||
content: "\ea17"; | |||
} | |||
.nc-button-play::before { | |||
content: "\ea18"; | |||
} | |||
.nc-button-power::before { | |||
content: "\ea19"; | |||
} | |||
.nc-calendar-60::before { | |||
content: "\ea1a"; | |||
} | |||
.nc-camera-compact::before { | |||
content: "\ea1b"; | |||
} | |||
.nc-caps-small::before { | |||
content: "\ea1c"; | |||
} | |||
.nc-cart-simple::before { | |||
content: "\ea1d"; | |||
} | |||
.nc-chart-bar-32::before { | |||
content: "\ea1e"; | |||
} | |||
.nc-chart-pie-36::before { | |||
content: "\ea1f"; | |||
} | |||
.nc-chat-33::before { | |||
content: "\ea20"; | |||
} | |||
.nc-check-2::before { | |||
content: "\ea21"; | |||
} | |||
.nc-circle-10::before { | |||
content: "\ea22"; | |||
} | |||
.nc-cloud-download-93::before { | |||
content: "\ea23"; | |||
} | |||
.nc-cloud-upload-94::before { | |||
content: "\ea24"; | |||
} | |||
.nc-compass-05::before { | |||
content: "\ea25"; | |||
} | |||
.nc-controller-modern::before { | |||
content: "\ea26"; | |||
} | |||
.nc-credit-card::before { | |||
content: "\ea27"; | |||
} | |||
.nc-delivery-fast::before { | |||
content: "\ea28"; | |||
} | |||
.nc-diamond::before { | |||
content: "\ea29"; | |||
} | |||
.nc-email-85::before { | |||
content: "\ea2a"; | |||
} | |||
.nc-favourite-28::before { | |||
content: "\ea2b"; | |||
} | |||
.nc-glasses-2::before { | |||
content: "\ea2c"; | |||
} | |||
.nc-globe-2::before { | |||
content: "\ea2d"; | |||
} | |||
.nc-globe::before { | |||
content: "\ea2e"; | |||
} | |||
.nc-hat-3::before { | |||
content: "\ea2f"; | |||
} | |||
.nc-headphones::before { | |||
content: "\ea30"; | |||
} | |||
.nc-html5::before { | |||
content: "\ea31"; | |||
} | |||
.nc-image::before { | |||
content: "\ea32"; | |||
} | |||
.nc-istanbul::before { | |||
content: "\ea33"; | |||
} | |||
.nc-key-25::before { | |||
content: "\ea34"; | |||
} | |||
.nc-laptop::before { | |||
content: "\ea35"; | |||
} | |||
.nc-layout-11::before { | |||
content: "\ea36"; | |||
} | |||
.nc-lock-circle-open::before { | |||
content: "\ea37"; | |||
} | |||
.nc-map-big::before { | |||
content: "\ea38"; | |||
} | |||
.nc-minimal-down::before { | |||
content: "\ea39"; | |||
} | |||
.nc-minimal-left::before { | |||
content: "\ea3a"; | |||
} | |||
.nc-minimal-right::before { | |||
content: "\ea3b"; | |||
} | |||
.nc-minimal-up::before { | |||
content: "\ea3c"; | |||
} | |||
.nc-mobile::before { | |||
content: "\ea3d"; | |||
} | |||
.nc-money-coins::before { | |||
content: "\ea3e"; | |||
} | |||
.nc-note-03::before { | |||
content: "\ea3f"; | |||
} | |||
.nc-palette::before { | |||
content: "\ea40"; | |||
} | |||
.nc-paper::before { | |||
content: "\ea41"; | |||
} | |||
.nc-pin-3::before { | |||
content: "\ea42"; | |||
} | |||
.nc-planet::before { | |||
content: "\ea43"; | |||
} | |||
.nc-refresh-69::before { | |||
content: "\ea44"; | |||
} | |||
.nc-ruler-pencil::before { | |||
content: "\ea45"; | |||
} | |||
.nc-satisfied::before { | |||
content: "\ea46"; | |||
} | |||
.nc-scissors::before { | |||
content: "\ea47"; | |||
} | |||
.nc-send::before { | |||
content: "\ea48"; | |||
} | |||
.nc-settings-gear-65::before { | |||
content: "\ea49"; | |||
} | |||
.nc-settings::before { | |||
content: "\ea4a"; | |||
} | |||
.nc-share-66::before { | |||
content: "\ea4b"; | |||
} | |||
.nc-shop::before { | |||
content: "\ea4c"; | |||
} | |||
.nc-simple-add::before { | |||
content: "\ea4d"; | |||
} | |||
.nc-simple-delete::before { | |||
content: "\ea4e"; | |||
} | |||
.nc-simple-remove::before { | |||
content: "\ea4f"; | |||
} | |||
.nc-single-02::before { | |||
content: "\ea50"; | |||
} | |||
.nc-single-copy-04::before { | |||
content: "\ea51"; | |||
} | |||
.nc-sound-wave::before { | |||
content: "\ea52"; | |||
} | |||
.nc-spaceship::before { | |||
content: "\ea53"; | |||
} | |||
.nc-sun-fog-29::before { | |||
content: "\ea54"; | |||
} | |||
.nc-support-17::before { | |||
content: "\ea55"; | |||
} | |||
.nc-tablet-2::before { | |||
content: "\ea56"; | |||
} | |||
.nc-tag-content::before { | |||
content: "\ea57"; | |||
} | |||
.nc-tap-01::before { | |||
content: "\ea58"; | |||
} | |||
.nc-tie-bow::before { | |||
content: "\ea59"; | |||
} | |||
.nc-tile-56::before { | |||
content: "\ea5a"; | |||
} | |||
.nc-time-alarm::before { | |||
content: "\ea5b"; | |||
} | |||
.nc-touch-id::before { | |||
content: "\ea5c"; | |||
} | |||
.nc-trophy::before { | |||
content: "\ea5d"; | |||
} | |||
.nc-tv-2::before { | |||
content: "\ea5e"; | |||
} | |||
.nc-umbrella-13::before { | |||
content: "\ea5f"; | |||
} | |||
.nc-user-run::before { | |||
content: "\ea60"; | |||
} | |||
.nc-vector::before { | |||
content: "\ea61"; | |||
} | |||
.nc-watch-time::before { | |||
content: "\ea62"; | |||
} | |||
.nc-world-2::before { | |||
content: "\ea63"; | |||
} | |||
.nc-zoom-split::before { | |||
content: "\ea64"; | |||
} | |||
/* all icon font classes list here */ |