| @@ -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 */ | |||