Compare commits
44 Commits
feature/pr
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| a115a65840 | |||
| b6682e7d79 | |||
| 58997e59bc | |||
| e31204a235 | |||
| aa125b836f | |||
| 877f94a89e | |||
| 3dfb91424c | |||
| 1bd02ad4e5 | |||
|
|
8cb4204800 | ||
| 26cc45cb45 | |||
| 16c8d4c6ae | |||
|
|
9e12a95bfe | ||
|
|
8789390c67 | ||
| c13b67dd82 | |||
| 1e24dc45dd | |||
|
|
2935df9b90 | ||
| a4e891c8b5 | |||
| 86f7aa143a | |||
| 8f3a17266e | |||
| 444f0f62fa | |||
| 0e22c689c8 | |||
|
|
585826a60f | ||
| a1341d5f06 | |||
| 72b99bb748 | |||
|
|
979481b39c | ||
| 671d34d552 | |||
| 0bbe8e4627 | |||
|
|
8ea795def4 | ||
|
|
17c578a1e2 | ||
|
|
ff1e72b3df | ||
|
|
8147d0db77 | ||
| f906145242 | |||
| 2c6d486967 | |||
|
|
ac430a46d1 | ||
|
|
5d754396da | ||
|
|
17e74a18a3 | ||
|
|
036f48b3f0 | ||
|
|
fbb00cdecc | ||
|
|
fd70c64fc2 | ||
| a6ef143e11 | |||
|
|
eec0319361 | ||
|
|
49c751b284 | ||
|
|
49baafc3c7 | ||
|
|
e5375d5df7 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -4,6 +4,7 @@
|
||||
/dist
|
||||
/tmp
|
||||
/out-tsc
|
||||
/.angular
|
||||
# Only exists if Bazel was run
|
||||
/bazel-out
|
||||
|
||||
@ -32,6 +33,7 @@ speed-measure-plugin*.json
|
||||
.history/*
|
||||
|
||||
# misc
|
||||
/.angular/cache
|
||||
/.sass-cache
|
||||
/.scss-cache
|
||||
/connect.lock
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
stages:
|
||||
- build
|
||||
- deploy
|
||||
- test
|
||||
|
||||
develop-build-job:
|
||||
stage: build
|
||||
tags:
|
||||
- build
|
||||
- node
|
||||
script:
|
||||
- echo "Install dependencies..."
|
||||
@ -17,7 +17,6 @@ develop-build-job:
|
||||
master-build-job:
|
||||
stage: build
|
||||
tags:
|
||||
- build
|
||||
- node
|
||||
script:
|
||||
- echo "Install dependencies..."
|
||||
@ -32,9 +31,7 @@ master-build-job:
|
||||
deploy-job:
|
||||
stage: deploy
|
||||
tags:
|
||||
- deploy
|
||||
- node
|
||||
when: manual
|
||||
environment:
|
||||
name: Production
|
||||
url: "$Live_Server_IP"
|
||||
@ -47,7 +44,16 @@ deploy-job:
|
||||
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" >> ~/.ssh/config'
|
||||
script:
|
||||
- tar zcf ../inkletblot-com.tar.gz ./dist
|
||||
- scp -P "$Live_Server_Access_Port" -o StrictHostKeyChecking=no ../inkletblot-com.tar.gz "$Live_Server_User"@"$Live_Server_IP":/var/www/html
|
||||
- ssh -p "$Live_Server_Access_Port" "$Live_Server_User"@"$Live_Server_IP" "rm -Rf /var/www/html/inkletblot-com_old && mv /var/www/html/inkletblot-com /var/www/html/inkletblot-com_old && mkdir /var/www/html/inkletblot-com_build && mkdir /var/www/html/inkletblot-com && tar zxf /var/www/html/inkletblot-com.tar.gz -C /var/www/html/inkletblot-com_build && mv /var/www/html/inkletblot-com_build/dist/inkletblot-com/* /var/www/html/inkletblot-com && rm -Rf /var/www/html/inkletblot-com_build && chmod -R 755 /var/www/html/inkletblot-com && exit"
|
||||
- scp -o 'ProxyJump "$Live_Server_User"@"$Live_Server_IP"' -o StrictHostKeyChecking=no ../inkletblot-com.tar.gz "$Live_Server_User"@"$Live_Server_Target":/var/www/html
|
||||
- ssh -J "$Live_Server_User"@"$Live_Server_IP" "$Live_Server_User"@"$Live_Server_Target" "rm -Rf /var/www/html/inkletblot-com_old && mv /var/www/html/inkletblot-com /var/www/html/inkletblot-com_old && mkdir /var/www/html/inkletblot-com_build && mkdir /var/www/html/inkletblot-com && tar zxf /var/www/html/inkletblot-com.tar.gz -C /var/www/html/inkletblot-com_build && mv /var/www/html/inkletblot-com_build/dist/inkletblot-com/* /var/www/html/inkletblot-com && rm -Rf /var/www/html/inkletblot-com_build && chmod -R 755 /var/www/html/inkletblot-com && exit"
|
||||
only:
|
||||
- master
|
||||
- master
|
||||
|
||||
test:
|
||||
stage: test
|
||||
tags:
|
||||
- node
|
||||
script:
|
||||
- echo "I don't care about standard merges into dev as a build has to happen for a merge into master, I don't think there is a way to specify that so I need this here."
|
||||
only:
|
||||
- merge_requests
|
||||
|
||||
25
angular.json
25
angular.json
@ -22,7 +22,6 @@
|
||||
"main": "src/main.ts",
|
||||
"polyfills": "src/polyfills.ts",
|
||||
"tsConfig": "tsconfig.app.json",
|
||||
"aot": true,
|
||||
"assets": [
|
||||
"src/favicon.ico",
|
||||
"src/assets"
|
||||
@ -30,7 +29,13 @@
|
||||
"styles": [
|
||||
"src/styles.scss"
|
||||
],
|
||||
"scripts": []
|
||||
"scripts": [],
|
||||
"vendorChunk": true,
|
||||
"extractLicenses": false,
|
||||
"buildOptimizer": false,
|
||||
"sourceMap": true,
|
||||
"optimization": false,
|
||||
"namedChunks": true
|
||||
},
|
||||
"configurations": {
|
||||
"production": {
|
||||
@ -60,7 +65,8 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"defaultConfiguration": ""
|
||||
},
|
||||
"serve": {
|
||||
"builder": "@angular-devkit/build-angular:dev-server",
|
||||
@ -96,19 +102,6 @@
|
||||
"scripts": []
|
||||
}
|
||||
},
|
||||
"lint": {
|
||||
"builder": "@angular-devkit/build-angular:tslint",
|
||||
"options": {
|
||||
"tsConfig": [
|
||||
"tsconfig.app.json",
|
||||
"tsconfig.spec.json",
|
||||
"e2e/tsconfig.json"
|
||||
],
|
||||
"exclude": [
|
||||
"**/node_modules/**"
|
||||
]
|
||||
}
|
||||
},
|
||||
"e2e": {
|
||||
"builder": "@angular-devkit/build-angular:protractor",
|
||||
"options": {
|
||||
|
||||
27480
package-lock.json
generated
27480
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
30
package.json
30
package.json
@ -11,28 +11,28 @@
|
||||
},
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@angular/animations": "~11.2.7",
|
||||
"@angular/common": "~11.2.7",
|
||||
"@angular/compiler": "~11.2.7",
|
||||
"@angular/core": "~11.2.7",
|
||||
"@angular/forms": "~11.2.7",
|
||||
"@angular/platform-browser": "~11.2.7",
|
||||
"@angular/platform-browser-dynamic": "~11.2.7",
|
||||
"@angular/router": "~11.2.7",
|
||||
"@angular/animations": "~13.1.1",
|
||||
"@angular/common": "~13.1.1",
|
||||
"@angular/compiler": "~13.1.1",
|
||||
"@angular/core": "~13.1.1",
|
||||
"@angular/forms": "~13.1.1",
|
||||
"@angular/platform-browser": "~13.1.1",
|
||||
"@angular/platform-browser-dynamic": "~13.1.1",
|
||||
"@angular/router": "~13.1.1",
|
||||
"rxjs": "~6.6.0",
|
||||
"tslib": "^2.0.0",
|
||||
"zone.js": "~0.11.3"
|
||||
"zone.js": "~0.11.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@angular-devkit/build-angular": "~0.1102.6",
|
||||
"@angular/cli": "~11.2.6",
|
||||
"@angular/compiler-cli": "~11.2.7",
|
||||
"@angular-devkit/build-angular": "^13.1.2",
|
||||
"@angular/cli": "~13.1.2",
|
||||
"@angular/compiler-cli": "~13.1.1",
|
||||
"@types/jasmine": "~3.6.0",
|
||||
"@types/node": "^12.11.1",
|
||||
"codelyzer": "^6.0.0",
|
||||
"jasmine-core": "~3.6.0",
|
||||
"jasmine-core": "~3.7.0",
|
||||
"jasmine-spec-reporter": "~5.0.0",
|
||||
"karma": "~6.1.0",
|
||||
"karma": "~6.3.9",
|
||||
"karma-chrome-launcher": "~3.1.0",
|
||||
"karma-coverage": "~2.0.3",
|
||||
"karma-jasmine": "~4.0.0",
|
||||
@ -40,6 +40,6 @@
|
||||
"protractor": "~7.0.0",
|
||||
"ts-node": "~8.3.0",
|
||||
"tslint": "~6.1.0",
|
||||
"typescript": "~4.1.5"
|
||||
"typescript": "~4.5.4"
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,11 +1,8 @@
|
||||
<div class="page-fixed-width">
|
||||
<app-header></app-header>
|
||||
|
||||
<app-nav></app-nav>
|
||||
|
||||
<div class="content no-scroll-bar">
|
||||
<app-nav></app-nav>
|
||||
<div class="page-fixed">
|
||||
<div class="no-scroll-bar">
|
||||
<app-header></app-header>
|
||||
<router-outlet></router-outlet>
|
||||
<app-footer></app-footer>
|
||||
</div>
|
||||
|
||||
<app-footer></app-footer>
|
||||
</div>
|
||||
|
||||
@ -3,33 +3,35 @@
|
||||
:host {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
overflow-y: auto;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.page-fixed-width {
|
||||
.page-fixed {
|
||||
width: 1000px;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
overflow-y: auto;
|
||||
border-left: colors.$inklets-color-fg 2px dashed;
|
||||
border-right: colors.$inklets-color-fg 2px dashed;
|
||||
}
|
||||
|
||||
.content {
|
||||
flex-grow: 1;
|
||||
overflow-y: auto;
|
||||
background-color: colors.$inklets-color-grey;
|
||||
}
|
||||
|
||||
/* Hide scrollbar for Chrome, Safari and Opera */
|
||||
.no-scroll-bar::-webkit-scrollbar {
|
||||
display: none;
|
||||
overflow: auto;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
/* Hide scrollbar for IE, Edge and Firefox */
|
||||
.no-scroll-bar {
|
||||
-ms-overflow-style: none; /* IE and Edge */
|
||||
scrollbar-width: none; /* Firefox */
|
||||
overflow: auto;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
import { NgModule } from '@angular/core';
|
||||
import { BrowserModule } from '@angular/platform-browser';
|
||||
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
|
||||
|
||||
import { AppRoutingModule } from './app-routing.module';
|
||||
import { AppComponent } from './app.component';
|
||||
@ -27,6 +28,7 @@ import { Page404Component } from './page404/page404.component';
|
||||
imports: [
|
||||
SharedModule,
|
||||
BrowserModule,
|
||||
BrowserAnimationsModule,
|
||||
AppRoutingModule,
|
||||
HttpClientModule
|
||||
],
|
||||
|
||||
@ -1,6 +1,5 @@
|
||||
@use 'src/app/shared/styles/_variables.color' as colors;
|
||||
|
||||
:host {
|
||||
padding: 0 40px 0 40px;
|
||||
margin: 10px 0 10px 0;
|
||||
padding: 0 20px 0 20px;
|
||||
}
|
||||
@ -1,56 +1,16 @@
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<p>home works!</p>
|
||||
<div class="bio">
|
||||
<div class="top">
|
||||
<img class="headshot" src="../../assets/head.jpg" alt="A headshot of Solomon Laing">
|
||||
<div class="text">
|
||||
<h1>Inkletblot
|
||||
<a href="https://www.linkedin.com/in/inkletblot/" target="_blank"><img class="contact-icon" src="../../assets/linkedin.png"></a>
|
||||
<a href="mailto:solomonlaing@pm.me"><img class="contact-icon" src="../../assets/envelope.png"></a>
|
||||
</h1>
|
||||
<p>My name is Solomon Laing. I'm a twenty something year old uni student and IT professional from Adelaide, Australia. I'm passionate about Technology and IT, it as been a hobby of mine for most of my life in one way or another and I predict will be for many years to come. Should you wish to know more, I'm sure you'll be able to find some footprint of me online. Regardless of how hard I try to remove it.</p>
|
||||
</div>
|
||||
</div>
|
||||
<p>This website serves as a personal website for myself. A place for me to put my projects, experiments, important links and the such-like. Projects relate to my publically accessable projects. Be it my linux config files, builds of applications, website, or anything else I decide to add. Links, the most important page to me, is where all of my services sit that I host myself.</p>
|
||||
<p>On of the projects that you will not find listed on the projects page is my server that I operate from my loungeroom. It hosts this website, nextcloud, a mail server and client, many game servers, my gitlab instance, and many local services which I use at home. Part of this is a small Kubernetes cluster consiting of Odroid-MC1s (by Hardkernel) which run the very simple api for this site and the slightly more complicated api for my forum.</p>
|
||||
<p>This site is a simple testement to my passion for technology, it is not supposed to be particularly eye-catching or engaging. I expect that few will ever see it. But if you are one of the few, 'Hello and Welcome'.</p>
|
||||
<div class="attributions">Icons made by <a href="https://www.freepik.com" title="Freepik">Freepik</a> and <a href="https://www.flaticon.com/authors/gregor-cresnar" title="Gregor Cresnar">Gregor Cresnar</a> from <a href="https://www.flaticon.com/" title="Flaticon">www.flaticon.com</a></div>
|
||||
</div>
|
||||
@ -6,5 +6,51 @@
|
||||
flex-grow: 1;
|
||||
overflow-y: auto;
|
||||
padding: 0 20px 0 20px;
|
||||
margin: 0 140px 10px 140px;
|
||||
}
|
||||
|
||||
.bio {
|
||||
text-align: justify;
|
||||
|
||||
.top {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
||||
|
||||
.headshot {
|
||||
width: 200px;
|
||||
height: 200px;
|
||||
border: colors.$inklets-color-red-light 5px solid;
|
||||
border-radius: 100px;
|
||||
}
|
||||
|
||||
.text {
|
||||
margin-left: 30px;
|
||||
|
||||
h1 {
|
||||
border-bottom: colors.$inklets-color-red-light 2px dashed;
|
||||
|
||||
img {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
p{
|
||||
padding-bottom: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.attributions {
|
||||
font-size: 8px;
|
||||
> a {
|
||||
text-decoration: none;
|
||||
color: colors.$inklets-color-white;
|
||||
}
|
||||
> a:hover {
|
||||
color: colors.$inklets-color-red-light;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2,7 +2,6 @@
|
||||
|
||||
:host {
|
||||
padding: 0 20px 0 20px;
|
||||
margin: 0 140px 10px 140px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-items: center;
|
||||
@ -10,6 +9,7 @@
|
||||
|
||||
// padding 20, total width 1000, width 700 so 280/2 = margin left and right of 140
|
||||
.card-wrapper {
|
||||
padding-top: 20px;
|
||||
display: grid;
|
||||
grid-template-columns: auto auto auto auto;
|
||||
grid-template-rows: auto auto auto auto;
|
||||
@ -20,15 +20,16 @@
|
||||
}
|
||||
|
||||
a {
|
||||
color: colors.$inklets-color-white;
|
||||
text-decoration: none;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-items: center;
|
||||
margin: 0;
|
||||
border: colors.$inklets-color-highlight-bg 2px dashed;
|
||||
background-color: colors.$inklets-color-fg;
|
||||
color: colors.$inklets-color-white;
|
||||
background-color: colors.$inklets-color-black;
|
||||
border: 2px solid colors.$inklets-color-red-dark;
|
||||
border-radius: 10px;
|
||||
|
||||
> * {
|
||||
margin: 10px;
|
||||
@ -37,6 +38,5 @@ a {
|
||||
}
|
||||
|
||||
a:hover {
|
||||
background-color: colors.$inklets-color-highlight-fg;
|
||||
color: colors.$inklets-color-black;
|
||||
border: colors.$inklets-color-red-light 2px solid;
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
<ul>
|
||||
<li><a routerLink="{{Pages.HOME}}" routerLinkActive="activeRoute">{{Pages.HOME}}</a></li>
|
||||
<li><a routerLink="{{Pages.PROJECTS}}" routerLinkActive="activeRoute">{{Pages.PROJECTS}}</a></li>
|
||||
<li (mouseover)="state[0] = 'bump'" (mouseout)="state[0] = 'norm'"><a [@openClose]="state[0]" routerLink="{{Pages.HOME}}" routerLinkActive="activeRoute">{{Pages.HOME}}</a></li>
|
||||
<li (mouseover)="state[1] = 'bump'" (mouseout)="state[1] = 'norm'"><a [@openClose]="state[1]" routerLink="{{Pages.PROJECTS}}" routerLinkActive="activeRoute">{{Pages.PROJECTS}}</a></li>
|
||||
<!-- <li><a routerLink="{{Pages.GALLERY}}" routerLinkActive="activeRoute">{{Pages.GALLERY}}</a></li> -->
|
||||
<li><a routerLink="{{Pages.LINKS}}" routerLinkActive="activeRoute">{{Pages.LINKS}}</a></li>
|
||||
<li (mouseover)="state[2] = 'bump'" (mouseout)="state[2] = 'norm'"><a [@openClose]="state[2]" routerLink="{{Pages.LINKS}}" routerLinkActive="activeRoute">{{Pages.LINKS}}</a></li>
|
||||
</ul>
|
||||
@ -1,10 +1,5 @@
|
||||
@use 'src/app/shared/styles/_variables.color'as colors;
|
||||
|
||||
:host {
|
||||
padding: 0 90px 0 90px;
|
||||
margin: 10px 0 60px 0;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: none;
|
||||
margin: 0;
|
||||
@ -13,23 +8,38 @@ ul {
|
||||
}
|
||||
|
||||
li {
|
||||
float: left;
|
||||
background-color: colors.$inklets-color-fg;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 25px;
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
}
|
||||
|
||||
li a {
|
||||
border-radius: 50px;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
line-height: 100px;
|
||||
color: colors.$inklets-color-white;
|
||||
background-color: colors.$inklets-color-red-dark;
|
||||
display: block;
|
||||
text-align: center;
|
||||
padding: 14px 16px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.activeRoute {
|
||||
background-color: colors.$inklets-color-highlight-bg;
|
||||
}
|
||||
|
||||
li a:hover {
|
||||
background-color: colors.$inklets-color-highlight-fg;
|
||||
li .activeRoute {
|
||||
background-color: colors.$inklets-color-red-light;
|
||||
color: colors.$inklets-color-black;
|
||||
}
|
||||
|
||||
// li a:hover {
|
||||
// background-color: colors.$inklets-color-blue-dark;
|
||||
// color: colors.$inklets-color-white;
|
||||
// }
|
||||
|
||||
|
||||
// li a:hover.activeRoute {
|
||||
// background-color: colors.$inklets-color-blue-light;
|
||||
// color: colors.$inklets-color-black;
|
||||
// }
|
||||
|
||||
@ -1,22 +1,84 @@
|
||||
import { Component, OnDestroy, OnInit } from '@angular/core';
|
||||
import { ActivatedRoute, Router } from '@angular/router';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
import { animate, keyframes, state, style, transition, trigger } from '@angular/animations';
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { Pages } from '../shared/models/pages.model';
|
||||
import { NavService } from './nav.service';
|
||||
|
||||
@Component({
|
||||
selector: 'app-nav',
|
||||
templateUrl: './nav.component.html',
|
||||
styleUrls: ['./nav.component.scss']
|
||||
selector: 'app-nav',
|
||||
animations: [
|
||||
trigger('openClose', [
|
||||
state(
|
||||
'bump',
|
||||
style({
|
||||
width: '110px',
|
||||
height: '110px',
|
||||
'line-height': '110px',
|
||||
'border-radius': '55px'
|
||||
})
|
||||
),
|
||||
state(
|
||||
'norm',
|
||||
style({
|
||||
width: '100px',
|
||||
height: '100px',
|
||||
'line-height': '100px',
|
||||
'border-radius': '50px'
|
||||
})
|
||||
),
|
||||
transition('norm => bump', [
|
||||
animate(
|
||||
'0.2s', keyframes([
|
||||
style({
|
||||
width: '100px',
|
||||
height: '100px',
|
||||
'line-height': '100px',
|
||||
'border-radius': '50px'
|
||||
}),
|
||||
style({
|
||||
width: '120px',
|
||||
height: '120px',
|
||||
'line-height': '120px',
|
||||
'border-radius': '60px'
|
||||
}),
|
||||
style({
|
||||
width: '110px',
|
||||
height: '110px',
|
||||
'line-height': '110px',
|
||||
'border-radius': '55px'
|
||||
})
|
||||
])
|
||||
)
|
||||
]),
|
||||
transition('bump => norm', [
|
||||
animate(
|
||||
'0.1s', keyframes([
|
||||
style({
|
||||
width: '110px',
|
||||
height: '110px',
|
||||
'line-height': '110px',
|
||||
'border-radius': '55px'
|
||||
}),
|
||||
style({
|
||||
width: '100px',
|
||||
height: '100px',
|
||||
'line-height': '100px',
|
||||
'border-radius': '50px'
|
||||
})
|
||||
])
|
||||
)
|
||||
])
|
||||
])
|
||||
],
|
||||
templateUrl: './nav.component.html',
|
||||
styleUrls: ['./nav.component.scss']
|
||||
})
|
||||
export class NavComponent implements OnInit {
|
||||
|
||||
Pages = Pages;
|
||||
Pages = Pages;
|
||||
state: string[] = ['norm', 'norm', 'norm'];
|
||||
|
||||
constructor() { }
|
||||
constructor() { }
|
||||
|
||||
ngOnInit(): void {
|
||||
}
|
||||
ngOnInit(): void {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
<a routerLink="{{project.slug}}">
|
||||
<h2>{{project.title}}</h2>
|
||||
<p>{{project.description}}</p>
|
||||
{{project.title + " - " + project.date}}
|
||||
<span class="right">{{project.category}}</span>
|
||||
</a>
|
||||
@ -3,20 +3,22 @@
|
||||
:host {
|
||||
flex-direction: column;
|
||||
display: flex;
|
||||
background-color: colors.$inklets-color-bg;
|
||||
margin-bottom: 20px;
|
||||
|
||||
a {
|
||||
color: colors.$inklets-color-white;
|
||||
border: colors.$inklets-color-highlight-bg 2px dashed;
|
||||
background-color: colors.$inklets-color-fg;
|
||||
background-color: colors.$inklets-color-black;
|
||||
border: 2px solid colors.$inklets-color-red-dark;
|
||||
text-decoration: none;
|
||||
padding: 0 20px 0 20px;
|
||||
padding: 15px 20px 15px 20px;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
background-color: colors.$inklets-color-highlight-fg;
|
||||
color: colors.$inklets-color-black;
|
||||
border: 2px solid colors.$inklets-color-red-light;
|
||||
}
|
||||
|
||||
.right {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
@ -1,2 +1,3 @@
|
||||
<p>project works!</p>
|
||||
{{project.title}}
|
||||
<a routerLink="..">< back</a>
|
||||
<span [innerHTML]="project.content"></span>
|
||||
<a routerLink="..">< back</a>
|
||||
@ -0,0 +1,9 @@
|
||||
@use 'src/app/shared/styles/_variables.color' as colors;
|
||||
|
||||
:host {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
overflow-y: auto;
|
||||
padding: 0 40px 0 40px;
|
||||
}
|
||||
@ -1,4 +1,4 @@
|
||||
import { Component, OnDestroy, OnInit } from '@angular/core';
|
||||
import { Component, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';
|
||||
import { ActivatedRoute } from '@angular/router';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
@ -8,17 +8,18 @@ import { ProjectsService } from '../projects.service';
|
||||
@Component({
|
||||
selector: 'app-project',
|
||||
templateUrl: './project.component.html',
|
||||
// encapsulation: ViewEncapsulation.None,
|
||||
styleUrls: ['./project.component.scss']
|
||||
})
|
||||
export class ProjectComponent implements OnInit, OnDestroy {
|
||||
_unsubscribe$: Subject<boolean> = new Subject();
|
||||
|
||||
project: Project = {
|
||||
title: '',
|
||||
description: '',
|
||||
slug: '',
|
||||
ct: '',
|
||||
body: '',
|
||||
title: '',
|
||||
date: '',
|
||||
category: '',
|
||||
content: '',
|
||||
};
|
||||
|
||||
constructor(
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
<h2>Projects on git</h2>
|
||||
<p>These are my projects as can be found on my <a href="https://gitlab.inkletblot.com/explore">gitlab</a>. Mainly my programming projects that are quality enough for me to be happy for the world to see them. There are more in the works but they are currently private.</p>
|
||||
<app-project-card *ngFor="let project of gitlabProjects()" [project]="project">
|
||||
</app-project-card>
|
||||
|
||||
<h2>Projects of a personal nature</h2>
|
||||
<p>This is (will be) a summary of my personal projects be they my homelab, general electronics projects, or anything else.</p>
|
||||
|
||||
<app-project-card *ngFor="let project of uncategorizedProjects" [project]="project">
|
||||
<app-project-card *ngFor="let project of uncategorizedProjects()" [project]="project">
|
||||
</app-project-card>
|
||||
@ -1,10 +1,13 @@
|
||||
@use 'src/app/shared/styles/_variables.color' as colors;
|
||||
@use 'src/app/shared/styles/_variables.color'as colors;
|
||||
|
||||
:host {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
overflow-y: auto;
|
||||
padding: 0 20px 0 20px;
|
||||
margin: 0 140px 10px 140px;
|
||||
}
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
overflow-y: auto;
|
||||
padding: 0 20px 0 20px;
|
||||
|
||||
h2 {
|
||||
border-bottom: colors.$inklets-color-red-light 2px dashed;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { Component, OnDestroy, OnInit } from '@angular/core';
|
||||
import { Subject } from 'rxjs/internal/Subject';
|
||||
import { Subject } from 'rxjs';
|
||||
import { takeUntil } from 'rxjs/operators';
|
||||
import { NavService } from '../nav/nav.service';
|
||||
import { Pages } from '../shared/models/pages.model';
|
||||
@ -14,7 +14,9 @@ import { ProjectsService } from './projects.service';
|
||||
export class ProjectsComponent implements OnInit, OnDestroy {
|
||||
_unsubscribe$: Subject<boolean> = new Subject();
|
||||
|
||||
uncategorizedProjects: Array<Project>;
|
||||
allProjects: Array<Project>;
|
||||
private _gitlabProjects: Array<Project> = new Array<Project>();
|
||||
private _uncategorizedProjects: Array<Project> = new Array<Project>();
|
||||
|
||||
constructor(private navService: NavService, private projectsService: ProjectsService) { }
|
||||
|
||||
@ -24,9 +26,10 @@ export class ProjectsComponent implements OnInit, OnDestroy {
|
||||
this.projectsService.allProjects$
|
||||
.pipe(takeUntil(this._unsubscribe$))
|
||||
.subscribe((result: Project[]) => {
|
||||
this.uncategorizedProjects = result;
|
||||
this.allProjects = result;
|
||||
});
|
||||
this.projectsService.getInvoicesToApprove();
|
||||
|
||||
this.projectsService.getProjects();
|
||||
}
|
||||
|
||||
ngOnDestroy(): void {
|
||||
@ -34,4 +37,26 @@ export class ProjectsComponent implements OnInit, OnDestroy {
|
||||
this._unsubscribe$.complete();
|
||||
}
|
||||
|
||||
filterProjects(): void {
|
||||
this._gitlabProjects = [];
|
||||
this._uncategorizedProjects = [];
|
||||
this.allProjects.forEach((project) => {
|
||||
if (project.category === 'gitlab') {
|
||||
this._gitlabProjects.push(project);
|
||||
} else {
|
||||
this._uncategorizedProjects.push(project);
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
gitlabProjects(): Array<Project> {
|
||||
this.filterProjects();
|
||||
return this._gitlabProjects;
|
||||
}
|
||||
|
||||
uncategorizedProjects(): Array<Project> {
|
||||
this.filterProjects();
|
||||
return this._uncategorizedProjects;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -43,7 +43,7 @@ export class ProjectsService {
|
||||
* I am actively avoiding any kind of environment management, this is a very basic site and currently this is the only api call.
|
||||
*/
|
||||
|
||||
private PROJECT_API_URL = "https://cms.inkletblot.com/"
|
||||
private PROJECT_API_URL = "https://cms.inkletblot.com"
|
||||
|
||||
constructor(private http: HttpClient, private router: Router) { }
|
||||
|
||||
@ -53,9 +53,9 @@ export class ProjectsService {
|
||||
})
|
||||
};
|
||||
|
||||
getInvoicesToApprove(): void {
|
||||
getProjects(): void {
|
||||
this.http
|
||||
.get(`${this.PROJECT_API_URL}`, this.httpOptions)
|
||||
.get(`${this.PROJECT_API_URL}/posts`, this.httpOptions)
|
||||
.subscribe(
|
||||
(response: Project[]) => {
|
||||
if (response) {
|
||||
@ -71,6 +71,25 @@ export class ProjectsService {
|
||||
);
|
||||
}
|
||||
|
||||
getSingleProject(id: string): void {
|
||||
this.http
|
||||
.get(`${this.PROJECT_API_URL}/post/${id}`, this.httpOptions)
|
||||
.subscribe(
|
||||
(response: Project) => {
|
||||
if (response) {
|
||||
// using text/plain so as to not get the preflight options request
|
||||
// as such : Project[] does not work as expected and objects must be parsed.
|
||||
this.currentProject = response;
|
||||
// filter out different categories here currently only one
|
||||
}
|
||||
},
|
||||
(error) => {
|
||||
this.apiErrored = true;
|
||||
this.router.navigate(['not-found'])
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is not very efficient code but I'm not planning on having that many projects and (if this turns into a blog) blog posts
|
||||
* If this does become a general blog, then I will make this a bit more efficient.
|
||||
@ -85,7 +104,7 @@ export class ProjectsService {
|
||||
}
|
||||
})
|
||||
if (!found) {
|
||||
this.router.navigate(['not-found'])
|
||||
this.getSingleProject(id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,35 +16,43 @@ export const Links: Array<Link> =
|
||||
location: "https://gitlab.inkletblot.com/"
|
||||
},
|
||||
{
|
||||
name: "forum",
|
||||
location: "https://www.inkletblot.com/forum/"
|
||||
name: "streamer",
|
||||
location: "https://streamer.inkletblot.com/"
|
||||
},
|
||||
{
|
||||
name: "books",
|
||||
location: "https://www.inkletblot.com/books/"
|
||||
name: "rancher",
|
||||
location: "https://rancher.inkletblot.com/"
|
||||
},
|
||||
{
|
||||
name: "known",
|
||||
location: "https://www.inkletblot.com/known/"
|
||||
name: "hab",
|
||||
location: "https://hab.inkletblot.com/"
|
||||
},
|
||||
{
|
||||
name: "tng",
|
||||
location: "https://www.inkletblot.com/tng/"
|
||||
},
|
||||
{
|
||||
name: "pico",
|
||||
location: "https://www.inkletblot.com/pico/"
|
||||
location: "https://proxy.inkletblot.com/tng/"
|
||||
},
|
||||
{
|
||||
name: "pasty",
|
||||
location: "https://www.inkletblot.com/pasty/"
|
||||
location: "https://proxy.inkletblot.com/pasty/"
|
||||
},
|
||||
{
|
||||
name: "mail",
|
||||
location: "https://www.inkletblot.com/webmail/"
|
||||
location: "https://mail.inkletblot.com/"
|
||||
},
|
||||
{
|
||||
name: "chk",
|
||||
location: "https://www.chkseven.com"
|
||||
},
|
||||
{
|
||||
name: "pve",
|
||||
location: "https://pve.inkletblot.com:8006/"
|
||||
},
|
||||
{
|
||||
name: "bitwarden",
|
||||
location: "https://bw.inkletblot.com/"
|
||||
},
|
||||
{
|
||||
name: "matrix",
|
||||
location: "https://homeserver.inkletblot.com/"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
export interface Project {
|
||||
slug: string,
|
||||
title: string,
|
||||
date: string,
|
||||
category: string,
|
||||
content: string
|
||||
|
||||
@ -11,10 +11,11 @@
|
||||
* e.g. body { background-color: colors.$inklets-color-black; }
|
||||
*/
|
||||
|
||||
$inklets-color-black: #0f0f0f;
|
||||
$inklets-color-white: #fafafa;
|
||||
$inklets-color-bg: #1b262c;
|
||||
$inklets-color-fg:#0f4c75;
|
||||
$inklets-color-highlight-bg:#3282b8;
|
||||
$inklets-color-highlight-fg:#bbe1fa;
|
||||
$inklets-color-text-highlight: #009fc1;
|
||||
$inklets-color-black: #0e0906;
|
||||
$inklets-color-grey: #191511;
|
||||
$inklets-color-white: #f4efea;
|
||||
$inklets-color-red-dark:#6d1d00;
|
||||
$inklets-color-red-light:#e6906c;
|
||||
$inklets-color-blue-dark: #181846;
|
||||
$inklets-color-blue-light:#6a9ccc;
|
||||
$inklets-color-text-highlight: #f5d870;
|
||||
BIN
src/assets/envelope.png
Normal file
BIN
src/assets/envelope.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
src/assets/head.jpg
Normal file
BIN
src/assets/head.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.0 KiB |
BIN
src/assets/linkedin.png
Normal file
BIN
src/assets/linkedin.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.1 KiB |
@ -13,4 +13,4 @@ export const environment = {
|
||||
* This import should be commented out in production mode because it will have a negative impact
|
||||
* on performance if an error is thrown.
|
||||
*/
|
||||
// import 'zone.js/dist/zone-error'; // Included with Angular CLI.
|
||||
// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.
|
||||
|
||||
@ -18,18 +18,6 @@
|
||||
* BROWSER POLYFILLS
|
||||
*/
|
||||
|
||||
/**
|
||||
* IE11 requires the following for NgClass support on SVG elements
|
||||
*/
|
||||
// import 'classlist.js'; // Run `npm install --save classlist.js`.
|
||||
|
||||
/**
|
||||
* Web Animations `@angular/platform-browser/animations`
|
||||
* Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
|
||||
* Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
|
||||
*/
|
||||
// import 'web-animations-js'; // Run `npm install --save web-animations-js`.
|
||||
|
||||
/**
|
||||
* By default, zone.js will patch all possible macroTask and DomEvents
|
||||
* user can disable parts of macroTask/DomEvents patch by setting following flags
|
||||
@ -57,7 +45,7 @@
|
||||
/***************************************************************************************************
|
||||
* Zone JS is required by default for Angular itself.
|
||||
*/
|
||||
import 'zone.js/dist/zone'; // Included with Angular CLI.
|
||||
import 'zone.js'; // Included with Angular CLI.
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
|
||||
@ -8,6 +8,101 @@ html, body {
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: Roboto, 'Helvetica Neue', sans-serif;
|
||||
background-color: colors.$inklets-color-black;
|
||||
background-color: colors.$inklets-color-grey;
|
||||
color: colors.$inklets-color-white;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Codehilite styles for api content
|
||||
|
||||
*/
|
||||
pre { line-height: 125%; }
|
||||
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||
td.linenos .special { color: #979797; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
span.linenos.special { color: #979797; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||
.codehilite .hll { background-color: #ffffcc }
|
||||
.codehilite { background: colors.$inklets-color-black; padding: 5px; }
|
||||
.codehilite .c { color: #408080; font-style: italic } /* Comment */
|
||||
.codehilite .err { border: 1px solid #FF0000 } /* Error */
|
||||
.codehilite .k { color: #008000; font-weight: bold } /* Keyword */
|
||||
.codehilite .o { color: #666666 } /* Operator */
|
||||
.codehilite .ch { color: #408080; font-style: italic } /* Comment.Hashbang */
|
||||
.codehilite .cm { color: #408080; font-style: italic } /* Comment.Multiline */
|
||||
.codehilite .cp { color: #BC7A00 } /* Comment.Preproc */
|
||||
.codehilite .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */
|
||||
.codehilite .c1 { color: #408080; font-style: italic } /* Comment.Single */
|
||||
.codehilite .cs { color: #408080; font-style: italic } /* Comment.Special */
|
||||
.codehilite .gd { color: #A00000 } /* Generic.Deleted */
|
||||
.codehilite .ge { font-style: italic } /* Generic.Emph */
|
||||
.codehilite .gr { color: #FF0000 } /* Generic.Error */
|
||||
.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||
.codehilite .gi { color: #00A000 } /* Generic.Inserted */
|
||||
.codehilite .go { color: #888888 } /* Generic.Output */
|
||||
.codehilite .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
|
||||
.codehilite .gs { font-weight: bold } /* Generic.Strong */
|
||||
.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||
.codehilite .gt { color: #0044DD } /* Generic.Traceback */
|
||||
.codehilite .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
|
||||
.codehilite .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
|
||||
.codehilite .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
|
||||
.codehilite .kp { color: #008000 } /* Keyword.Pseudo */
|
||||
.codehilite .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
|
||||
.codehilite .kt { color: #B00040 } /* Keyword.Type */
|
||||
.codehilite .m { color: #666666 } /* Literal.Number */
|
||||
.codehilite .s { color: #BA2121 } /* Literal.String */
|
||||
.codehilite .na { color: #7D9029 } /* Name.Attribute */
|
||||
.codehilite .nb { color: #008000 } /* Name.Builtin */
|
||||
.codehilite .nc { color: #0000FF; font-weight: bold } /* Name.Class */
|
||||
.codehilite .no { color: #880000 } /* Name.Constant */
|
||||
.codehilite .nd { color: #AA22FF } /* Name.Decorator */
|
||||
.codehilite .ni { color: #999999; font-weight: bold } /* Name.Entity */
|
||||
.codehilite .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
|
||||
.codehilite .nf { color: #0000FF } /* Name.Function */
|
||||
.codehilite .nl { color: #A0A000 } /* Name.Label */
|
||||
.codehilite .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
|
||||
.codehilite .nt { color: #008000; font-weight: bold } /* Name.Tag */
|
||||
.codehilite .nv { color: #19177C } /* Name.Variable */
|
||||
.codehilite .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
|
||||
.codehilite .w { color: #bbbbbb } /* Text.Whitespace */
|
||||
.codehilite .mb { color: #666666 } /* Literal.Number.Bin */
|
||||
.codehilite .mf { color: #666666 } /* Literal.Number.Float */
|
||||
.codehilite .mh { color: #666666 } /* Literal.Number.Hex */
|
||||
.codehilite .mi { color: #666666 } /* Literal.Number.Integer */
|
||||
.codehilite .mo { color: #666666 } /* Literal.Number.Oct */
|
||||
.codehilite .sa { color: #BA2121 } /* Literal.String.Affix */
|
||||
.codehilite .sb { color: #BA2121 } /* Literal.String.Backtick */
|
||||
.codehilite .sc { color: #BA2121 } /* Literal.String.Char */
|
||||
.codehilite .dl { color: #BA2121 } /* Literal.String.Delimiter */
|
||||
.codehilite .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
|
||||
.codehilite .s2 { color: #BA2121 } /* Literal.String.Double */
|
||||
.codehilite .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
|
||||
.codehilite .sh { color: #BA2121 } /* Literal.String.Heredoc */
|
||||
.codehilite .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
|
||||
.codehilite .sx { color: #008000 } /* Literal.String.Other */
|
||||
.codehilite .sr { color: #BB6688 } /* Literal.String.Regex */
|
||||
.codehilite .s1 { color: #BA2121 } /* Literal.String.Single */
|
||||
.codehilite .ss { color: #19177C } /* Literal.String.Symbol */
|
||||
.codehilite .bp { color: #008000 } /* Name.Builtin.Pseudo */
|
||||
.codehilite .fm { color: #0000FF } /* Name.Function.Magic */
|
||||
.codehilite .vc { color: #19177C } /* Name.Variable.Class */
|
||||
.codehilite .vg { color: #19177C } /* Name.Variable.Global */
|
||||
.codehilite .vi { color: #19177C } /* Name.Variable.Instance */
|
||||
.codehilite .vm { color: #19177C } /* Name.Variable.Magic */
|
||||
.codehilite .il { color: #666666 } /* Literal.Number.Integer.Long */
|
||||
|
||||
|
||||
* a {
|
||||
text-decoration: none;
|
||||
color: colors.$inklets-color-text-highlight;
|
||||
}
|
||||
|
||||
* a:hover {
|
||||
color: colors.$inklets-color-blue-light;
|
||||
}
|
||||
|
||||
* img {
|
||||
max-width: 400px;
|
||||
max-height: 500px;
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
|
||||
|
||||
import 'zone.js/dist/zone-testing';
|
||||
import 'zone.js/testing';
|
||||
import { getTestBed } from '@angular/core/testing';
|
||||
import {
|
||||
BrowserDynamicTestingModule,
|
||||
@ -17,7 +17,9 @@ declare const require: {
|
||||
// First, initialize the Angular testing environment.
|
||||
getTestBed().initTestEnvironment(
|
||||
BrowserDynamicTestingModule,
|
||||
platformBrowserDynamicTesting()
|
||||
platformBrowserDynamicTesting(), {
|
||||
teardown: { destroyAfterEach: false }
|
||||
}
|
||||
);
|
||||
// Then we find all the tests.
|
||||
const context = require.context('./', true, /\.spec\.ts$/);
|
||||
|
||||
Reference in New Issue
Block a user