| # 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 |
| <!-- | |||||
| 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 | |||||
| --> |
| based on: https://github.com/creativetimofficial/pk2-angular.git |
| { | |||||
| "$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 | |||||
| } | |||||
| } |
| 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!!'); | |||||
| }); | |||||
| }); |
| import { browser, by, element } from 'protractor'; | |||||
| export class Pk2AngularCliFreePage { | |||||
| navigateTo() { | |||||
| return browser.get('/'); | |||||
| } | |||||
| getParagraphText() { | |||||
| return element(by.css('app-root h1')).getText(); | |||||
| } | |||||
| } |
| { | |||||
| "extends": "../tsconfig.json", | |||||
| "compilerOptions": { | |||||
| "outDir": "../out-tsc/e2e", | |||||
| "module": "commonjs", | |||||
| "target": "es5", | |||||
| "types": [ | |||||
| "jasmine", | |||||
| "node" | |||||
| ] | |||||
| } | |||||
| } |
| // 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 | |||||
| }); | |||||
| }; |
| { | |||||
| "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" | |||||
| } | |||||
| } |
| // 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 } })); | |||||
| } | |||||
| }; |
| 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 { } |
| <app-navbar></app-navbar> | |||||
| <router-outlet></router-outlet> | |||||
| <app-footer *ngIf="removeFooter()"></app-footer> |
| 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!!'); | |||||
| })); | |||||
| }); |
| 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; | |||||
| } | |||||
| } | |||||
| } |
| 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 { } |
| 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 { } |
| <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> |
| 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(); | |||||
| }); | |||||
| }); |
| 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; | |||||
| } |
| <p>magnetic-recycling-queen works!</p> |
| 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(); | |||||
| }); | |||||
| }); |
| 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 { | |||||
| } | |||||
| } |
| <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> |
| 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(); | |||||
| }); | |||||
| }); |
| 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 { | |||||
| } | |||||
| } |
| <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> |
| 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(); | |||||
| }); | |||||
| }); |
| 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 { | |||||
| } | |||||
| } |
| 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 { } |
| <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> |
| 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(); | |||||
| }); | |||||
| }); |
| 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 { | |||||
| } | |||||
| } |
| <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> |
| 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(); | |||||
| }); | |||||
| }); |
| 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 { | |||||
| } | |||||
| } |
| <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> |
| 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(); | |||||
| }); | |||||
| }); |
| 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() {} | |||||
| } |
| <iframe | |||||
| frameborder="0" | |||||
| src="https://itch.io/embed-upload/1093367?color=010144" | |||||
| allowfullscreen="" | |||||
| class="game" | |||||
| [width]="innerWidth" | |||||
| [height]="innerHeight" | |||||
| ></iframe> |
| 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(); | |||||
| }); | |||||
| }); |
| 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; | |||||
| } | |||||
| } |
| <iframe | |||||
| frameborder="0" | |||||
| src="https://itch.io/embed-upload/1120192?color=181a1b" | |||||
| allowfullscreen="" | |||||
| class="game" | |||||
| [width]="innerWidth" | |||||
| [height]="innerHeight" | |||||
| ></iframe> |
| 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(); | |||||
| }); | |||||
| }); |
| 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; | |||||
| } | |||||
| } |
| <iframe | |||||
| frameborder="0" | |||||
| src="https://itch.io/embed-upload/1292627?color=2196f3" | |||||
| allowfullscreen="" | |||||
| class="game" | |||||
| [width]="innerWidth" | |||||
| [height]="innerHeight" | |||||
| ></iframe> |
| 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(); | |||||
| }); | |||||
| }); |
| 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; | |||||
| } | |||||
| } |
| <iframe | |||||
| class="game" | |||||
| frameborder="0" | |||||
| src="https://itch.io/embed-upload/1062906?color=4B7F52" | |||||
| allowfullscreen="" | |||||
| [width]="innerWidth" | |||||
| [height]="innerHeight" | |||||
| > | |||||
| ></iframe | |||||
| > |
| 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(); | |||||
| }); | |||||
| }); |
| 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; | |||||
| } | |||||
| } |
| #disco-gif { | |||||
| position: absolute; | |||||
| } | |||||
| #disco-thumbnail { | |||||
| min-height: 485px; | |||||
| } |
| <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> |
| 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(); | |||||
| }); | |||||
| }); |
| 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 { | |||||
| } | |||||
| } |
| <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> |
| 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(); | |||||
| }); | |||||
| }); |
| 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 { | |||||
| } | |||||
| } |
| <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> |
| /* | |||||
| 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%; | |||||
| } | |||||
| } |
| 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(); | |||||
| }); | |||||
| }); |
| 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() { | |||||
| } | |||||
| } |
| <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> |
| 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(); | |||||
| }); | |||||
| }); |
| 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 { | |||||
| } | |||||
| } |
| 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(); | |||||
| }); | |||||
| }); |
| 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 { | |||||
| } | |||||
| } |
| <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> |
| 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(); | |||||
| }); | |||||
| }); |
| 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() {} | |||||
| } |
| <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> |
| 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(); | |||||
| }); | |||||
| }); |
| 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 { | |||||
| } | |||||
| } |
| <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> |
| 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(); | |||||
| }); | |||||
| }); |
| 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; | |||||
| } | |||||
| } | |||||
| } |
| /*-------------------------------- | |||||
| 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 */ |