Compare commits
3 Commits
feature/Fe
...
2822545273
| Author | SHA1 | Date | |
|---|---|---|---|
| 2822545273 | |||
| 2339423f16 | |||
| 32bf313825 |
13
Dockerfile
@@ -1,13 +0,0 @@
|
|||||||
FROM denoland/deno:latest
|
|
||||||
|
|
||||||
EXPOSE 8000
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
USER deno
|
|
||||||
|
|
||||||
COPY --chown=deno . .
|
|
||||||
|
|
||||||
RUN deno cache --unstable app.ts
|
|
||||||
|
|
||||||
CMD ["run", "--unstable", "--allow-net=0.0.0.0:8000", "--allow-read=less,public/assets", "--allow-write=public/assets/css", "app.ts"]
|
|
||||||
59
Jenkinsfile
vendored
@@ -1,76 +1,23 @@
|
|||||||
pipeline {
|
pipeline {
|
||||||
|
|
||||||
agent any
|
agent any
|
||||||
|
|
||||||
environment {
|
|
||||||
REGISTRY_CREDENTIALS = credentials('registry-credentials-id')
|
|
||||||
PORTAINER_CREDENTIALS = credentials('portainer-credentials-id')
|
|
||||||
}
|
|
||||||
|
|
||||||
stages {
|
stages {
|
||||||
|
|
||||||
stage('Installation') {
|
|
||||||
steps {
|
|
||||||
echo "start Installation"
|
|
||||||
echo "finish Installation"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Build') {
|
stage('Build') {
|
||||||
steps {
|
steps {
|
||||||
echo "Running ${env.BUILD_ID} on ${env.JENKINS_URL}"
|
echo "Running ${env.BUILD_ID} on ${env.JENKINS_URL}"
|
||||||
echo 'Building..'
|
echo 'Building..'
|
||||||
echo "docker build -t registry.proxyq.co/jenkins/website:${env.BUILD_ID} ."
|
|
||||||
sh "docker build -t registry.proxyq.co/jenkins/website:${env.BUILD_ID} ."
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('Testing') {
|
stage('Test') {
|
||||||
steps {
|
steps {
|
||||||
echo "start Testing"
|
echo "start Testing"
|
||||||
sh 'sleep 5'
|
sh 'sleep 5'
|
||||||
echo "finish Testing"
|
echo "finish Testing"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('Publish') {
|
stage('Deploy') {
|
||||||
steps {
|
steps {
|
||||||
sh "docker login https://registry.proxyq.co -u ${REGISTRY_CREDENTIALS_USR} --password ${REGISTRY_CREDENTIALS_PSW}"
|
echo "Deploying.... ${env.ENV_REGISTRY_URL} - ${env.ENV_REGISTRY_USER}"
|
||||||
sh "docker push registry.proxyq.co/jenkins/website:${env.BUILD_ID}"
|
|
||||||
sh "docker tag registry.proxyq.co/jenkins/website:${env.BUILD_ID} registry.proxyq.co/jenkins/website:latest"
|
|
||||||
sh "docker push registry.proxyq.co/jenkins/website:latest"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Redeploy') {
|
|
||||||
steps {
|
|
||||||
script {
|
|
||||||
def json = """
|
|
||||||
{"username": "${PORTAINER_CREDENTIALS_USR}", "password": "${PORTAINER_CREDENTIALS_PSW}"}
|
|
||||||
"""
|
|
||||||
def jwtResponse = httpRequest acceptType: 'APPLICATION_JSON',
|
|
||||||
contentType: 'APPLICATION_JSON',
|
|
||||||
validResponseCodes: '200',
|
|
||||||
httpMode: 'POST',
|
|
||||||
ignoreSslErrors: true,
|
|
||||||
consoleLogResponseBody: true,
|
|
||||||
requestBody: json,
|
|
||||||
url: "http://192.168.4.8:9000/api/auth"
|
|
||||||
def jwtObject = new groovy.json.JsonSlurper().parseText(jwtResponse.getContent())
|
|
||||||
env.JWTTOKEN = "Bearer ${jwtObject.jwt}"
|
|
||||||
}
|
|
||||||
echo "Authenticated"
|
|
||||||
script {
|
|
||||||
def json = """
|
|
||||||
|
|
||||||
"""
|
|
||||||
httpRequest acceptType: 'APPLICATION_JSON',
|
|
||||||
contentType: 'APPLICATION_JSON',
|
|
||||||
validResponseCodes: '204',
|
|
||||||
httpMode: 'POST',
|
|
||||||
ignoreSslErrors: true,
|
|
||||||
consoleLogResponseBody: true,
|
|
||||||
requestBody: json,
|
|
||||||
customHeaders: [["name": "Authorization", "value": "${env.JWTTOKEN}"]],
|
|
||||||
url: "http://192.168.4.8:9000/api/endpoints/26/docker/containers/145772505f27bcdef1fbd807ecbb7b4ccbe6fb86dbb3a2bd0e22951557a15a10/restart"
|
|
||||||
}
|
|
||||||
echo "Restarting Container"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
20
LICENSE
@@ -1,21 +1,9 @@
|
|||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
Copyright (c) 2020 Jan Rabcan
|
Copyright (c) <year> <copyright holders>
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
|
|||||||
51
app.ts
@@ -1,51 +0,0 @@
|
|||||||
import { serve } from "https://deno.land/std@0.100.0/http/server.ts";
|
|
||||||
import { copyFile, getFileList, readFile, readFileRaw } from "./tools/tool.ts";
|
|
||||||
import { template } from "./page.ts";
|
|
||||||
|
|
||||||
|
|
||||||
const PORT = 8000;
|
|
||||||
|
|
||||||
const s = serve( {
|
|
||||||
port : PORT
|
|
||||||
} );
|
|
||||||
|
|
||||||
await copyFile( "./less/index.css", "./public/assets/css/index.min.css" );
|
|
||||||
|
|
||||||
const indexCss = await readFile( "./public/assets/css/index.min.css" );
|
|
||||||
|
|
||||||
await copyFile( "./less/index.css.map", "./public/assets/css/index.min.css.map" );
|
|
||||||
|
|
||||||
const indexCssMap = await readFile( "./public/assets/css/index.min.css.map" );
|
|
||||||
|
|
||||||
const fileNames = await getFileList( "./public/assets/img" );
|
|
||||||
|
|
||||||
const assetsMap = new Map();
|
|
||||||
|
|
||||||
for ( const fileName of fileNames ) {
|
|
||||||
assetsMap.set( "/assets/img/" + fileName.path, await readFileRaw( fileName.absolutePath ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log( `Server running on http://localhost:${ PORT }` );
|
|
||||||
|
|
||||||
for await ( const req of s ) {
|
|
||||||
if ( req.url === "/" ) {
|
|
||||||
req.respond( { body : template } );
|
|
||||||
} else if ( req.url === "/css/index.min.css" ) {
|
|
||||||
req.respond( { body : indexCss } );
|
|
||||||
} else if ( req.url === "/css/index.css.map" ) {
|
|
||||||
req.respond( { body : indexCssMap } );
|
|
||||||
} else if ( req.url.startsWith( "/assets/img" ) ) {
|
|
||||||
let headers = new Headers();
|
|
||||||
if(req.url.endsWith('.svg')) {
|
|
||||||
headers.set("content-type", "image/svg+xml");
|
|
||||||
} else {
|
|
||||||
headers.set("content-type", "image/png");
|
|
||||||
}
|
|
||||||
req.respond( {
|
|
||||||
headers , body : assetsMap.get( req.url ), status : 200
|
|
||||||
} );
|
|
||||||
} else {
|
|
||||||
console.log( req.url );
|
|
||||||
req.respond( { status : 404 } );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
300
less/index.css
@@ -1,300 +0,0 @@
|
|||||||
body {
|
|
||||||
font-family: Nunito;
|
|
||||||
background: #232526;
|
|
||||||
background: -webkit-linear-gradient(to right, #414345, #232526);
|
|
||||||
background: linear-gradient(to right, #414345, #232526);
|
|
||||||
}
|
|
||||||
::-webkit-scrollbar-track {
|
|
||||||
background-color: #232526;
|
|
||||||
}
|
|
||||||
::-webkit-scrollbar {
|
|
||||||
width: 5px;
|
|
||||||
}
|
|
||||||
::-webkit-scrollbar-thumb {
|
|
||||||
border-radius: 10px;
|
|
||||||
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
|
|
||||||
background-color: #585858;
|
|
||||||
}
|
|
||||||
.page-wrapper {
|
|
||||||
margin-left: 50px;
|
|
||||||
padding-left: 50px;
|
|
||||||
margin-top: 100px;
|
|
||||||
position: relative;
|
|
||||||
padding-right: 100px;
|
|
||||||
margin-bottom: 100px;
|
|
||||||
}
|
|
||||||
@media only screen and (max-width: 800px) {
|
|
||||||
.page-wrapper {
|
|
||||||
padding-right: 50px;
|
|
||||||
margin-left: 20px;
|
|
||||||
padding-left: 25px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.page-wrapper::before {
|
|
||||||
content: '';
|
|
||||||
background-color: #585858;
|
|
||||||
position: absolute;
|
|
||||||
width: 3px;
|
|
||||||
height: calc(100% - 15px);
|
|
||||||
left: 0;
|
|
||||||
top: 10px;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list {
|
|
||||||
margin-bottom: 50px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li {
|
|
||||||
padding-left: 20px;
|
|
||||||
border-left: 2px solid #585858;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li:not(:last-child) {
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
@media only screen and (max-width: 800px) {
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
padding-right: 10px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left .project-item-left-icon {
|
|
||||||
display: flex;
|
|
||||||
min-width: 200px;
|
|
||||||
min-height: 200px;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
background-color: #444;
|
|
||||||
color: #666;
|
|
||||||
font-weight: bold;
|
|
||||||
text-transform: uppercase;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left .project-item-left-icon > img {
|
|
||||||
height: 100%;
|
|
||||||
position: absolute;
|
|
||||||
transition: 0.3s;
|
|
||||||
transform: scale(1);
|
|
||||||
filter: blur(2px);
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left .project-item-left-icon > img:hover {
|
|
||||||
filter: blur(0);
|
|
||||||
transform: scale(1.2);
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left .project-item-left-icon > .project-item-left-icon-badge {
|
|
||||||
position: absolute;
|
|
||||||
right: -35px;
|
|
||||||
top: 25px;
|
|
||||||
font-size: 12px;
|
|
||||||
padding: 5px 29px;
|
|
||||||
transform: rotate(45deg);
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left .project-item-left-icon > .project-item-left-icon-badge.open-source {
|
|
||||||
background: #666;
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left > .project-item-left-link-list {
|
|
||||||
color: #888;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left > .project-item-left-link-list > li > a.disabled {
|
|
||||||
opacity: 0.4;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left > .project-item-left-link-list > li > a > i {
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-right > ul > li {
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-right > ul > li .project-item-right-label > h5 {
|
|
||||||
margin: 0;
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-right > ul > li .project-item-right-content:not(.name) > h4 {
|
|
||||||
color: #777;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-right > ul > li .project-item-right-content > h4 {
|
|
||||||
margin: 0;
|
|
||||||
max-width: 700px;
|
|
||||||
color: #ccc;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-right > ul > li .project-item-right-content > h4 > .project-item-right-content-status {
|
|
||||||
color: #616161;
|
|
||||||
padding-left: 10px;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-right > ul > li .project-item-right-content.list {
|
|
||||||
margin-top: 5px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list {
|
|
||||||
margin-bottom: 50px;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list::before {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
top: 10px;
|
|
||||||
height: calc(100% - 20px);
|
|
||||||
width: 2px;
|
|
||||||
background-color: #585858;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li {
|
|
||||||
color: #888;
|
|
||||||
padding-left: 20px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li:first-child {
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-to {
|
|
||||||
position: relative;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-info {
|
|
||||||
position: relative;
|
|
||||||
padding: 10px;
|
|
||||||
padding-left: 20px;
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
@media only screen and (max-width: 800px) {
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-info {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-info > .work-item-wrapper-info-role {
|
|
||||||
padding-left: 10px;
|
|
||||||
opacity: 0.7;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-from {
|
|
||||||
position: relative;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-from::before,
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-to::before {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
left: -24px;
|
|
||||||
top: 5px;
|
|
||||||
background-color: #585858;
|
|
||||||
border-radius: 20px;
|
|
||||||
width: 10px;
|
|
||||||
height: 10px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-from::after,
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-to::after {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
left: -22px;
|
|
||||||
top: 7px;
|
|
||||||
background-color: #414345;
|
|
||||||
border-radius: 20px;
|
|
||||||
width: 6px;
|
|
||||||
height: 6px;
|
|
||||||
}
|
|
||||||
.page-wrapper > h2 {
|
|
||||||
color: #aaa;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro {
|
|
||||||
margin-bottom: 50px;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro h1 {
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro h2,
|
|
||||||
.page-wrapper .intro h3 {
|
|
||||||
color: #aaa;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro .contact-list {
|
|
||||||
display: flex;
|
|
||||||
color: #888;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro .contact-list > li {
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro .contact-list > li > a {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro .contact-list > li > a > i {
|
|
||||||
margin-right: 5px;
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
.page-wrapper .skill-wrapper {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
@media only screen and (max-width: 800px) {
|
|
||||||
.page-wrapper .skill-wrapper {
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: flex-start;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.page-wrapper .skill-wrapper .skill-caption {
|
|
||||||
white-space: nowrap;
|
|
||||||
padding-right: 10px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
.skill-list {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
}
|
|
||||||
.skill-list li {
|
|
||||||
background: #999;
|
|
||||||
padding: 3px 5px;
|
|
||||||
border-radius: 5px;
|
|
||||||
margin-right: 10px;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: bold;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
.skill-list li img,
|
|
||||||
.skill-list li i {
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
ul {
|
|
||||||
list-style: none;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
.clickable {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.clickable.disabled {
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
.clickable:not(.disabled) {
|
|
||||||
transition: 0.3s;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.clickable:not(.disabled):hover {
|
|
||||||
opacity: 0.6;
|
|
||||||
}
|
|
||||||
.footer {
|
|
||||||
padding-bottom: 10px;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #aaa;
|
|
||||||
}
|
|
||||||
.footer a {
|
|
||||||
text-transform: uppercase;
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
/*# sourceMappingURL=index.css.map */
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"version":3,"sources":["index.less"],"names":[],"mappings":"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","file":"index.css"}
|
|
||||||
390
less/index.less
@@ -1,390 +0,0 @@
|
|||||||
body {
|
|
||||||
font-family: Nunito;
|
|
||||||
background: #232526;
|
|
||||||
background: -webkit-linear-gradient(to right, #414345, #232526);
|
|
||||||
background: linear-gradient(to right, #414345, #232526);
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-scrollbar-track {
|
|
||||||
background-color: #232526;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-scrollbar {
|
|
||||||
width: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
::-webkit-scrollbar-thumb {
|
|
||||||
border-radius: 10px;
|
|
||||||
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, .3);
|
|
||||||
background-color: #585858;
|
|
||||||
}
|
|
||||||
|
|
||||||
.page-wrapper {
|
|
||||||
margin-left: 50px;
|
|
||||||
padding-left: 50px;
|
|
||||||
margin-top: 100px;
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
padding-right: 100px;
|
|
||||||
|
|
||||||
@media only screen and (max-width: 800px) {
|
|
||||||
padding-right: 50px;
|
|
||||||
margin-left: 20px;
|
|
||||||
padding-left: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
margin-bottom: 100px;
|
|
||||||
|
|
||||||
&::before {
|
|
||||||
content: '';
|
|
||||||
background-color: #585858;
|
|
||||||
position: absolute;
|
|
||||||
width: 3px;
|
|
||||||
height: calc(100% - 15px);
|
|
||||||
left: 0;
|
|
||||||
top: 10px;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&>.project-list {
|
|
||||||
margin-bottom: 50px;
|
|
||||||
|
|
||||||
&>li {
|
|
||||||
padding-left: 20px;
|
|
||||||
border-left: 2px solid #585858;
|
|
||||||
|
|
||||||
&:not(:last-child) {
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&>.project-item-wrapper {
|
|
||||||
display: flex;
|
|
||||||
|
|
||||||
@media only screen and (max-width: 800px) {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
&>.project-item-left {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
padding-right: 10px;
|
|
||||||
|
|
||||||
& .project-item-left-icon {
|
|
||||||
display: flex;
|
|
||||||
min-width: 200px;
|
|
||||||
min-height: 200px;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
background-color: #444;
|
|
||||||
color: #666;
|
|
||||||
font-weight: bold;
|
|
||||||
text-transform: uppercase;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
border-radius: 5px;
|
|
||||||
|
|
||||||
&>img {
|
|
||||||
height: 100%;
|
|
||||||
position: absolute;
|
|
||||||
transition: 0.3s;
|
|
||||||
transform: scale(1);
|
|
||||||
filter: blur(2px);
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
filter: blur(0);
|
|
||||||
transform: scale(1.2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&>.project-item-left-icon-badge {
|
|
||||||
position: absolute;
|
|
||||||
right: -35px;
|
|
||||||
top: 25px;
|
|
||||||
font-size: 12px;
|
|
||||||
padding: 5px 29px;
|
|
||||||
transform: rotate(45deg);
|
|
||||||
|
|
||||||
&.open-source {
|
|
||||||
background: #666;
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&>.project-item-left-link-list {
|
|
||||||
|
|
||||||
color: #888;
|
|
||||||
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
&>li {
|
|
||||||
&>a {
|
|
||||||
&.disabled {
|
|
||||||
opacity: 0.4;
|
|
||||||
}
|
|
||||||
|
|
||||||
&>i {
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&>.project-item-right {
|
|
||||||
&>ul {
|
|
||||||
|
|
||||||
&>li {
|
|
||||||
margin-bottom: 10px;
|
|
||||||
|
|
||||||
& .project-item-right-label {
|
|
||||||
&>h5 {
|
|
||||||
margin: 0;
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
& .project-item-right-content {
|
|
||||||
|
|
||||||
|
|
||||||
&:not(.name) {
|
|
||||||
&>h4 {
|
|
||||||
color: #777;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&>h4 {
|
|
||||||
margin: 0;
|
|
||||||
max-width: 700px;
|
|
||||||
color: #ccc;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
&>.project-item-right-content-status {
|
|
||||||
color: #616161;
|
|
||||||
padding-left: 10px;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&.list {
|
|
||||||
margin-top: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
&>.work-list {
|
|
||||||
margin-bottom: 50px;
|
|
||||||
position: relative;
|
|
||||||
|
|
||||||
&::before {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
top: 10px;
|
|
||||||
height: calc(100% - 20px);
|
|
||||||
width: 2px;
|
|
||||||
background-color: #585858;
|
|
||||||
}
|
|
||||||
|
|
||||||
&>li {
|
|
||||||
|
|
||||||
|
|
||||||
color: #888;
|
|
||||||
|
|
||||||
&:first-child {
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
padding-left: 20px;
|
|
||||||
|
|
||||||
&>.work-item-wrapper {
|
|
||||||
|
|
||||||
&>.work-item-wrapper-to {
|
|
||||||
position: relative;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
&>.work-item-wrapper-info {
|
|
||||||
position: relative;
|
|
||||||
padding: 10px;
|
|
||||||
padding-left: 20px;
|
|
||||||
display: flex;
|
|
||||||
@media only screen and (max-width: 800px) {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
&>.work-item-wrapper-info-role {
|
|
||||||
padding-left: 10px;
|
|
||||||
opacity: 0.7;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&>.work-item-wrapper-from {
|
|
||||||
position: relative;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
&>.work-item-wrapper-from,
|
|
||||||
&>.work-item-wrapper-to {
|
|
||||||
&::before {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
left: -24px;
|
|
||||||
top: 5px;
|
|
||||||
background-color: #585858;
|
|
||||||
border-radius: 20px;
|
|
||||||
width: 10px;
|
|
||||||
height: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&::after {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
left: -22px;
|
|
||||||
top: 7px;
|
|
||||||
background-color: #414345;
|
|
||||||
border-radius: 20px;
|
|
||||||
width: 6px;
|
|
||||||
height: 6px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
&>h2 {
|
|
||||||
color: #aaa;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
& .intro {
|
|
||||||
margin-bottom: 50px;
|
|
||||||
|
|
||||||
h1 {
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2,
|
|
||||||
h3 {
|
|
||||||
color: #aaa;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
& .contact-list {
|
|
||||||
display: flex;
|
|
||||||
color: #888;
|
|
||||||
|
|
||||||
&>li {
|
|
||||||
margin-right: 10px;
|
|
||||||
|
|
||||||
&>a {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
|
|
||||||
|
|
||||||
&>i {
|
|
||||||
margin-right: 5px;
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.skill-wrapper {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
|
|
||||||
@media only screen and (max-width: 800px) {
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: flex-start;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
.skill-caption {
|
|
||||||
white-space: nowrap;
|
|
||||||
padding-right: 10px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
.skill-list {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
|
|
||||||
li {
|
|
||||||
background: #999;
|
|
||||||
padding: 3px 5px;
|
|
||||||
border-radius: 5px;
|
|
||||||
margin-right: 10px;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: bold;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
|
|
||||||
img,
|
|
||||||
i {
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ul {
|
|
||||||
list-style: none;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.clickable {
|
|
||||||
font-weight: bold;
|
|
||||||
|
|
||||||
&.disabled {
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:not(.disabled) {
|
|
||||||
transition: 0.3s;
|
|
||||||
cursor: pointer;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
opacity: 0.6;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
padding-bottom: 10px;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #aaa;
|
|
||||||
|
|
||||||
a {
|
|
||||||
text-transform: uppercase;
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
480
page.ts
@@ -1,480 +0,0 @@
|
|||||||
interface ITechnologyListItem {
|
|
||||||
name : string,
|
|
||||||
icon : string,
|
|
||||||
alt? : string
|
|
||||||
}
|
|
||||||
|
|
||||||
let technologyListMap : Map<string, ITechnologyListItem> = new Map();
|
|
||||||
technologyListMap.set( "deno", {
|
|
||||||
name : "Deno",
|
|
||||||
icon : "https://deno.land/logo.svg"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "react", {
|
|
||||||
name : "React",
|
|
||||||
icon : "./assets/img/3rd/favicon-react.svg",
|
|
||||||
alt : "React Library"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "typescript", {
|
|
||||||
name : "TypeScript",
|
|
||||||
icon : "./assets/img/3rd/favicon-typescript.ico"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "javascript", {
|
|
||||||
name : "JavaScript",
|
|
||||||
icon : "./assets/img/3rd/favicon-javascript.png"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "less", {
|
|
||||||
name : "Less",
|
|
||||||
icon : "./assets/img/3rd/favicon-less.ico"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "angular", {
|
|
||||||
name : "Angular",
|
|
||||||
icon : "./assets/img/3rd/favicon-angular.ico",
|
|
||||||
alt : "Angular Framework"
|
|
||||||
} );
|
|
||||||
// technologyListMap.set( "mongodb", {
|
|
||||||
// name : "MongoDB",
|
|
||||||
// icon : "https://www.mongodb.com/assets/images/global/favicon.ico",
|
|
||||||
// alt : "MongoDB - NoSQL Database"
|
|
||||||
// } );
|
|
||||||
technologyListMap.set( "sql", {
|
|
||||||
name : "SQL",
|
|
||||||
icon : "./assets/img/3rd/favicon-sql.png",
|
|
||||||
alt : "SQL Database Language"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "redis", {
|
|
||||||
name : "Redis",
|
|
||||||
icon : "./assets/img/3rd/favicon-redis.png",
|
|
||||||
alt : "Redis Database"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "laravel", {
|
|
||||||
name : "Laravel",
|
|
||||||
icon : "./assets/img/3rd/favicon-laravel.ico",
|
|
||||||
alt : "Laravel PHP Framework"
|
|
||||||
} );
|
|
||||||
// technologyListMap.set( "jquery", {
|
|
||||||
// name : "JQuery",
|
|
||||||
// icon : "./assets/img/3rd/favicon-jquery.ico",
|
|
||||||
// alt : "JQuery Library"
|
|
||||||
// } );
|
|
||||||
// technologyListMap.set( "html", {
|
|
||||||
// name : "Html",
|
|
||||||
// icon : "./assets/img/3rd/favicon-html.png"
|
|
||||||
// } );
|
|
||||||
// technologyListMap.set( "css", {
|
|
||||||
// name : "CSS",
|
|
||||||
// icon : "./assets/img/3rd/favicon-css.svg"
|
|
||||||
// } );
|
|
||||||
technologyListMap.set( "googlecharts", {
|
|
||||||
name : "Google Charts",
|
|
||||||
icon : "./assets/img/3rd/favicon-googlecharts.png",
|
|
||||||
alt : "Google Charts JS Library"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "nodejs", {
|
|
||||||
name : "NodeJS",
|
|
||||||
icon : "./assets/img/3rd/favicon-nodejs.ico"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "socketio", {
|
|
||||||
name : "Socket.IO",
|
|
||||||
icon : "./assets/img/3rd/favicon-socketio.png"
|
|
||||||
} );
|
|
||||||
|
|
||||||
technologyListMap.set( "git", {
|
|
||||||
name : "Git",
|
|
||||||
icon : "./assets/img/3rd/favicon-git.ico"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "docker", {
|
|
||||||
name : "Docker",
|
|
||||||
icon : "./assets/img/3rd/favicon-docker.png"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "webpack", {
|
|
||||||
name : "Webpack",
|
|
||||||
icon : "https://raw.githubusercontent.com/webpack/media/master/logo/icon-square-small.png"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "yarn", {
|
|
||||||
name : "Yarn",
|
|
||||||
icon : "https://yarnpkg.com/favicon-32x32.png"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "npm", {
|
|
||||||
name : "Npm",
|
|
||||||
icon : "https://static.npmjs.com/3dc95981de4241b35cd55fe126ab6b2c.png"
|
|
||||||
} );
|
|
||||||
technologyListMap.set( "instagramapi", {
|
|
||||||
name : "Instagram - API",
|
|
||||||
icon : "./assets/img/3rd/favicon-instagram.png"
|
|
||||||
} );
|
|
||||||
|
|
||||||
interface IProjectListItem {
|
|
||||||
name : string;
|
|
||||||
previewImg? : string;
|
|
||||||
link : {
|
|
||||||
github? : string;
|
|
||||||
live? : string
|
|
||||||
},
|
|
||||||
date : number;
|
|
||||||
status : boolean | null;
|
|
||||||
description : string
|
|
||||||
clientSideList? : Array<ITechnologyListItem>;
|
|
||||||
serverSideList? : Array<ITechnologyListItem>;
|
|
||||||
}
|
|
||||||
|
|
||||||
const projectsListMap : Map<string, IProjectListItem> = new Map();
|
|
||||||
projectsListMap.set( "reactinstafeed", {
|
|
||||||
name : "Instagram User Media Feed Widget",
|
|
||||||
link : {
|
|
||||||
github : "https://github.com/Hellsos/insta-feed-widget"
|
|
||||||
},
|
|
||||||
date : 2021,
|
|
||||||
status : true,
|
|
||||||
description : `Instagram User Media Feed Widget using React.js.`,
|
|
||||||
serverSideList : [
|
|
||||||
technologyListMap.get( "react" )!,
|
|
||||||
technologyListMap.get( "typescript" )!,
|
|
||||||
technologyListMap.get( "javascript" )!,
|
|
||||||
technologyListMap.get( "git" )!,
|
|
||||||
]
|
|
||||||
} );
|
|
||||||
projectsListMap.set( "denoinstafeed", {
|
|
||||||
name : "Instagram User Media Feed",
|
|
||||||
link : {
|
|
||||||
github : "https://github.com/Hellsos/deno-insta-feed"
|
|
||||||
},
|
|
||||||
date : 2021,
|
|
||||||
status : true,
|
|
||||||
description : `Instagram User Media Feed API using Deno TypeScript Runtime.`,
|
|
||||||
serverSideList : [
|
|
||||||
technologyListMap.get( "deno" )!,
|
|
||||||
technologyListMap.get( "typescript" )!,
|
|
||||||
technologyListMap.get( "javascript" )!,
|
|
||||||
technologyListMap.get( "sql" )!,
|
|
||||||
technologyListMap.get( "git" )!,
|
|
||||||
technologyListMap.get( "instagramapi" )!,
|
|
||||||
]
|
|
||||||
} );
|
|
||||||
projectsListMap.set( "denodotenvfile", {
|
|
||||||
name : "DotEnv File for Deno",
|
|
||||||
link : {
|
|
||||||
github : "https://github.com/Hellsos/deno-dotenv-file"
|
|
||||||
},
|
|
||||||
date : 2020,
|
|
||||||
status : true,
|
|
||||||
description : `A library for Deno parsing .env file into object-oriented structure making it more friendly for working in IDEs.`,
|
|
||||||
serverSideList : [
|
|
||||||
technologyListMap.get( "deno" )!,
|
|
||||||
technologyListMap.get( "typescript" )!,
|
|
||||||
technologyListMap.get( "javascript" )!,
|
|
||||||
technologyListMap.get( "git" )!
|
|
||||||
]
|
|
||||||
} );
|
|
||||||
projectsListMap.set( "blogmihmanli", {
|
|
||||||
name : "Blog - Mihmanli",
|
|
||||||
previewImg : "./assets/img/asset_mihmanli.png",
|
|
||||||
link : {
|
|
||||||
live : "https://kristyna.mihmanli.com/"
|
|
||||||
},
|
|
||||||
date : 2017,
|
|
||||||
status : true,
|
|
||||||
description : `Personal blog with administration allowing logged user to create groups, posts, galleries publicly accessible or privately accessible with custom code.
|
|
||||||
<br>Data feed from Instagram is every hour synchronized via Instagram - API providing images, videos and its data. Images are stored on storage server and data are inserted into SQL database.`,
|
|
||||||
clientSideList : [
|
|
||||||
technologyListMap.get( "jquery" )!,
|
|
||||||
technologyListMap.get( "html" )!,
|
|
||||||
technologyListMap.get( "css" )!
|
|
||||||
],
|
|
||||||
serverSideList : [
|
|
||||||
technologyListMap.get( "laravel" )!,
|
|
||||||
technologyListMap.get( "sql" )!,
|
|
||||||
technologyListMap.get( "redis" )!,
|
|
||||||
technologyListMap.get( "instagramapi" )!,
|
|
||||||
]
|
|
||||||
} );
|
|
||||||
projectsListMap.set( "weatherstation", {
|
|
||||||
name : "WeatherStation Stats",
|
|
||||||
previewImg : "./assets/img/asset_weather_station.png",
|
|
||||||
link : {
|
|
||||||
live : "http://meteostanice-dev.kumpacka.eu"
|
|
||||||
},
|
|
||||||
date : 2016,
|
|
||||||
status : true,
|
|
||||||
description : `Web Application which shows data stored in redis cache collected by weather station.
|
|
||||||
<br>Shell script on server inserts current weather data to SQL database each 5 minutes and then refreshes views in redis cache.
|
|
||||||
<br> Sun/Moon moves around according to the time of last record :)`,
|
|
||||||
clientSideList : [
|
|
||||||
technologyListMap.get( "jquery" )!,
|
|
||||||
technologyListMap.get( "html" )!,
|
|
||||||
technologyListMap.get( "css" )!,
|
|
||||||
technologyListMap.get( "googlecharts" )!,
|
|
||||||
],
|
|
||||||
serverSideList : [
|
|
||||||
technologyListMap.get( "laravel" )!,
|
|
||||||
technologyListMap.get( "sql" )!,
|
|
||||||
technologyListMap.get( "redis" )!,
|
|
||||||
]
|
|
||||||
} );
|
|
||||||
|
|
||||||
|
|
||||||
export const template = `
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
|
|
||||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
|
||||||
<script async
|
|
||||||
src="https://www.googletagmanager.com/gtag/js?id=UA-155382150-1"></script>
|
|
||||||
<script>
|
|
||||||
window.dataLayer = window.dataLayer || [];
|
|
||||||
|
|
||||||
function gtag() { dataLayer.push( arguments ); }
|
|
||||||
|
|
||||||
gtag( 'js', new Date() );
|
|
||||||
|
|
||||||
gtag( 'config', 'UA-155382150-1' );
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<base href="/">
|
|
||||||
|
|
||||||
<title>Jan Rabčan - Front End Developer - Angular, React, Deno</title>
|
|
||||||
|
|
||||||
<meta name="title"
|
|
||||||
content="Jan Rabčan - Front End Developer - Angular, React, Deno" />
|
|
||||||
|
|
||||||
<meta name="description"
|
|
||||||
content="Jan Rabčan - Front End Developer, Front End, Back End, Full Stack, Front End, Back End, Web, Developer, Angular, React, Deno, JQuery, TypeScript, JavaScript, Less, NodeJS, Socket.IO, Redis, Git, Docker" />
|
|
||||||
|
|
||||||
<meta http-equiv="Content-Type"
|
|
||||||
content="text/html;charset=UTF-8" />
|
|
||||||
|
|
||||||
<meta name="google-site-verification"
|
|
||||||
content="2yvwVzwqeZ580ryQ8D9QgGbRcumZo4t-5PW0qQdvfqM" />
|
|
||||||
|
|
||||||
<meta charset="utf-8" />
|
|
||||||
|
|
||||||
<meta name="og:title"
|
|
||||||
property="og:title"
|
|
||||||
content="Jan Rabčan - Front End Developer - Angular, React, Deno" />
|
|
||||||
|
|
||||||
<meta name="twitter:card"
|
|
||||||
content="Jan Rabčan - Front End Developer - Angular, React, Deno" />
|
|
||||||
|
|
||||||
<meta name="robots"
|
|
||||||
content="nofollow" />
|
|
||||||
|
|
||||||
<meta name="viewport"
|
|
||||||
content="width=device-width, initial-scale=1" />
|
|
||||||
|
|
||||||
<meta name="keywords"
|
|
||||||
content="Full Stack, Front End, Back End, Web, Developer, Angular, React, Deno, JQuery, TypeScript, JavaScript, Less, NodeJS, Socket.IO, Redis, Git, Docker" />
|
|
||||||
|
|
||||||
<link rel="canonical"
|
|
||||||
href="https://rabcan.com">
|
|
||||||
|
|
||||||
<link rel="stylesheet"
|
|
||||||
href="css/index.min.css">
|
|
||||||
|
|
||||||
<link href="https://fonts.googleapis.com/css?family=Nunito:400,500,600,700&display=swap&subset=cyrillic,cyrillic-ext"
|
|
||||||
rel="stylesheet">
|
|
||||||
|
|
||||||
<link rel="icon"
|
|
||||||
type="image/x-icon"
|
|
||||||
href="favicon.ico">
|
|
||||||
|
|
||||||
<link rel="stylesheet"
|
|
||||||
href="https://cdn.proxyq.co/kit/bateokp34yt53h154qlp[agr==/css/all.min.css">
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
a {
|
|
||||||
text-decoration: inherit;
|
|
||||||
color: inherit;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div class="page-wrapper">
|
|
||||||
<div class="intro">
|
|
||||||
<h1>
|
|
||||||
Hello, I'm Jan
|
|
||||||
</h1>
|
|
||||||
<h2>
|
|
||||||
A Front End Developer living in Czech Republic
|
|
||||||
</h2>
|
|
||||||
<div class="skill-wrapper">
|
|
||||||
<h3 class="skill-caption">
|
|
||||||
Building Web Apps Using
|
|
||||||
</h3>
|
|
||||||
<ul class="skill-list"
|
|
||||||
id="skillList">
|
|
||||||
${ Array.from( technologyListMap.values() ).map( ( technology ) => {
|
|
||||||
return `<li><img src="${ technology.icon }" style="height: 18px" title="${ technology.name }" alt="${ technology.alt || technology.name }"> ${ technology.name } </li>`;
|
|
||||||
} ).join( "\n" ) }
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<ul class="contact-list">
|
|
||||||
<li>
|
|
||||||
<a class="clickable"
|
|
||||||
href="mailto:jan@rabcan.com"><i class="fas fa-envelope"></i> jan@rabcan.com</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a class="clickable"
|
|
||||||
href="https://www.linkedin.com/in/jan-rab%C4%8Dan-17917a61"
|
|
||||||
target="_blank"><i class="fab fa-linkedin"></i> Linkedin</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h2>
|
|
||||||
Projects
|
|
||||||
</h2>
|
|
||||||
<ul class="project-list"
|
|
||||||
id="projectList">
|
|
||||||
${ Array.from( projectsListMap.values() ).map( ( project ) => {
|
|
||||||
return `
|
|
||||||
<li>
|
|
||||||
<div class="project-item-wrapper">
|
|
||||||
<div class="project-item-left">
|
|
||||||
<a ${ project.link.live ? "href='" + project.link.live + "'" : null }
|
|
||||||
target="_blank">
|
|
||||||
<div class="project-item-left-icon">
|
|
||||||
${ project.link.github ? "<div class=\"project-item-left-icon-badge open-source\">Open Source</div>" : "" }
|
|
||||||
${ project.previewImg ? "<img src=\"" + project.previewImg + "\" alt=\"" + project.name + "\" title=\"" + project.name + "\">" : "Coming Soon" }
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
<ul class="project-item-left-link-list">
|
|
||||||
<li>
|
|
||||||
<a ${ project.link.github ? "href='" + project.link.github + "'" : "" }
|
|
||||||
target="_blank"
|
|
||||||
class="clickable ${ project.link.github == undefined ? "disabled" : "" }"><i class="fab fa-github"></i>Github</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<a ${ project.link.live ? "href='" + project.link.live + "'" : "" }
|
|
||||||
target="_blank"
|
|
||||||
class="clickable ${ project.link.live == null ? "disabled" : "" }"><i class="fas fa-magic"></i>Live</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="project-item-right">
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
<div class="project-item-right-label">
|
|
||||||
<h5>Name</h5>
|
|
||||||
</div>
|
|
||||||
<div class="project-item-right-content name">
|
|
||||||
<h4> ${ project.name } </h4>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<div class="project-item-right-label">
|
|
||||||
<h5>Date</h5>
|
|
||||||
</div>
|
|
||||||
<div class="project-item-right-content">
|
|
||||||
<h4>
|
|
||||||
${ project.date }
|
|
||||||
<span class="project-item-right-content-status
|
|
||||||
${ project.status === true ? "active" : "" }
|
|
||||||
${ project.status === null ? "progress" : "" }
|
|
||||||
${ project.status === false ? "inactive" : "" }">
|
|
||||||
${ project.status === true ? "Active" : "" }
|
|
||||||
${ project.status === null ? "In Progress" : "" }
|
|
||||||
${ project.status === false ? "Inactive" : "" }
|
|
||||||
</span>
|
|
||||||
</h4>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<div class="project-item-right-label">
|
|
||||||
<h5>Description</h5>
|
|
||||||
</div>
|
|
||||||
<div class="project-item-right-content">
|
|
||||||
<h4>${ project.description }</h4>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
${ project.clientSideList && project.clientSideList.length > 0 ?
|
|
||||||
`<li>
|
|
||||||
<div class="project-item-right-label">
|
|
||||||
<h5>Client Side</h5>
|
|
||||||
</div>
|
|
||||||
<div class="project-item-right-content list">
|
|
||||||
<ul class="skill-list">
|
|
||||||
${ project.clientSideList.map( ( technology ) => {
|
|
||||||
if ( technology == null ) return;
|
|
||||||
return `<li><img src="${ technology.icon }" style="height: 18px" title="${ technology.name }" alt="${ technology.alt || technology.name }"> ${ technology.name } </li>`;
|
|
||||||
} ).join( "\n" ) }
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</li>` : ""
|
|
||||||
}
|
|
||||||
${ project.serverSideList && project.serverSideList.length > 0 ? `<li>
|
|
||||||
<div class="project-item-right-label">
|
|
||||||
<h5>Server Side</h5>
|
|
||||||
</div>
|
|
||||||
<div class="project-item-right-content list">
|
|
||||||
<ul class="skill-list">
|
|
||||||
${ project.serverSideList.map( ( technology ) => {
|
|
||||||
if ( technology == null ) return;
|
|
||||||
return `<li><img src="${ technology.icon }" style="height: 18px" title="${ technology.name }" alt="${ technology.alt || technology.name }"> ${ technology.name } </li>`;
|
|
||||||
} ).join( "\n" ) }
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</li>` : ""
|
|
||||||
}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</li>`;
|
|
||||||
} ).join( "\n" ) }
|
|
||||||
</ul>
|
|
||||||
<h2>
|
|
||||||
Work Experience
|
|
||||||
</h2>
|
|
||||||
<ul class="work-list">
|
|
||||||
<li>
|
|
||||||
<div class="work-item-wrapper">
|
|
||||||
<div class="work-item-wrapper-to">Present</div>
|
|
||||||
<div class="work-item-wrapper-info">
|
|
||||||
<a href="https://lemonero.cz"
|
|
||||||
class="clickable"
|
|
||||||
target="_blank">Lemonero</a>
|
|
||||||
<div class="work-item-wrapper-info-role">
|
|
||||||
Front End Developer
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<div class="work-item-wrapper">
|
|
||||||
<div class="work-item-wrapper-to">1/2020</div>
|
|
||||||
<div class="work-item-wrapper-info">
|
|
||||||
<a href="https://monkeydata.com"
|
|
||||||
class="clickable"
|
|
||||||
target="_blank">MonkeyData</a>
|
|
||||||
<div class="work-item-wrapper-info-role">
|
|
||||||
Front End Developer
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="work-item-wrapper-from">12/2017</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<div class="work-item-wrapper">
|
|
||||||
<div class="work-item-wrapper-info">
|
|
||||||
<a href="https://monkeydata.com"
|
|
||||||
class="clickable"
|
|
||||||
target="_blank">MonkeyData</a>
|
|
||||||
<div class="work-item-wrapper-info-role">
|
|
||||||
Junior Developer
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="work-item-wrapper-from">6/2016</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<div class="footer">
|
|
||||||
<a href="/"
|
|
||||||
class="clickable"> Jan Rabčan </a> Ⓒ 2020
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
`;
|
|
||||||
300
public/assets/css/index.min.css
vendored
@@ -1,300 +0,0 @@
|
|||||||
body {
|
|
||||||
font-family: Nunito;
|
|
||||||
background: #232526;
|
|
||||||
background: -webkit-linear-gradient(to right, #414345, #232526);
|
|
||||||
background: linear-gradient(to right, #414345, #232526);
|
|
||||||
}
|
|
||||||
::-webkit-scrollbar-track {
|
|
||||||
background-color: #232526;
|
|
||||||
}
|
|
||||||
::-webkit-scrollbar {
|
|
||||||
width: 5px;
|
|
||||||
}
|
|
||||||
::-webkit-scrollbar-thumb {
|
|
||||||
border-radius: 10px;
|
|
||||||
-webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.3);
|
|
||||||
background-color: #585858;
|
|
||||||
}
|
|
||||||
.page-wrapper {
|
|
||||||
margin-left: 50px;
|
|
||||||
padding-left: 50px;
|
|
||||||
margin-top: 100px;
|
|
||||||
position: relative;
|
|
||||||
padding-right: 100px;
|
|
||||||
margin-bottom: 100px;
|
|
||||||
}
|
|
||||||
@media only screen and (max-width: 800px) {
|
|
||||||
.page-wrapper {
|
|
||||||
padding-right: 50px;
|
|
||||||
margin-left: 20px;
|
|
||||||
padding-left: 25px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.page-wrapper::before {
|
|
||||||
content: '';
|
|
||||||
background-color: #585858;
|
|
||||||
position: absolute;
|
|
||||||
width: 3px;
|
|
||||||
height: calc(100% - 15px);
|
|
||||||
left: 0;
|
|
||||||
top: 10px;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list {
|
|
||||||
margin-bottom: 50px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li {
|
|
||||||
padding-left: 20px;
|
|
||||||
border-left: 2px solid #585858;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li:not(:last-child) {
|
|
||||||
margin-bottom: 20px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
@media only screen and (max-width: 800px) {
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
padding-right: 10px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left .project-item-left-icon {
|
|
||||||
display: flex;
|
|
||||||
min-width: 200px;
|
|
||||||
min-height: 200px;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
background-color: #444;
|
|
||||||
color: #666;
|
|
||||||
font-weight: bold;
|
|
||||||
text-transform: uppercase;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
position: relative;
|
|
||||||
overflow: hidden;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left .project-item-left-icon > img {
|
|
||||||
height: 100%;
|
|
||||||
position: absolute;
|
|
||||||
transition: 0.3s;
|
|
||||||
transform: scale(1);
|
|
||||||
filter: blur(2px);
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left .project-item-left-icon > img:hover {
|
|
||||||
filter: blur(0);
|
|
||||||
transform: scale(1.2);
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left .project-item-left-icon > .project-item-left-icon-badge {
|
|
||||||
position: absolute;
|
|
||||||
right: -35px;
|
|
||||||
top: 25px;
|
|
||||||
font-size: 12px;
|
|
||||||
padding: 5px 29px;
|
|
||||||
transform: rotate(45deg);
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left .project-item-left-icon > .project-item-left-icon-badge.open-source {
|
|
||||||
background: #666;
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left > .project-item-left-link-list {
|
|
||||||
color: #888;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left > .project-item-left-link-list > li > a.disabled {
|
|
||||||
opacity: 0.4;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-left > .project-item-left-link-list > li > a > i {
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-right > ul > li {
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-right > ul > li .project-item-right-label > h5 {
|
|
||||||
margin: 0;
|
|
||||||
color: #999;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-right > ul > li .project-item-right-content:not(.name) > h4 {
|
|
||||||
color: #777;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-right > ul > li .project-item-right-content > h4 {
|
|
||||||
margin: 0;
|
|
||||||
max-width: 700px;
|
|
||||||
color: #ccc;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-right > ul > li .project-item-right-content > h4 > .project-item-right-content-status {
|
|
||||||
color: #616161;
|
|
||||||
padding-left: 10px;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .project-list > li > .project-item-wrapper > .project-item-right > ul > li .project-item-right-content.list {
|
|
||||||
margin-top: 5px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list {
|
|
||||||
margin-bottom: 50px;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list::before {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
top: 10px;
|
|
||||||
height: calc(100% - 20px);
|
|
||||||
width: 2px;
|
|
||||||
background-color: #585858;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li {
|
|
||||||
color: #888;
|
|
||||||
padding-left: 20px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li:first-child {
|
|
||||||
color: #ccc;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-to {
|
|
||||||
position: relative;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-info {
|
|
||||||
position: relative;
|
|
||||||
padding: 10px;
|
|
||||||
padding-left: 20px;
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
@media only screen and (max-width: 800px) {
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-info {
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-info > .work-item-wrapper-info-role {
|
|
||||||
padding-left: 10px;
|
|
||||||
opacity: 0.7;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-from {
|
|
||||||
position: relative;
|
|
||||||
font-size: 14px;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-from::before,
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-to::before {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
left: -24px;
|
|
||||||
top: 5px;
|
|
||||||
background-color: #585858;
|
|
||||||
border-radius: 20px;
|
|
||||||
width: 10px;
|
|
||||||
height: 10px;
|
|
||||||
}
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-from::after,
|
|
||||||
.page-wrapper > .work-list > li > .work-item-wrapper > .work-item-wrapper-to::after {
|
|
||||||
content: "";
|
|
||||||
position: absolute;
|
|
||||||
left: -22px;
|
|
||||||
top: 7px;
|
|
||||||
background-color: #414345;
|
|
||||||
border-radius: 20px;
|
|
||||||
width: 6px;
|
|
||||||
height: 6px;
|
|
||||||
}
|
|
||||||
.page-wrapper > h2 {
|
|
||||||
color: #aaa;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro {
|
|
||||||
margin-bottom: 50px;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro h1 {
|
|
||||||
color: white;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro h2,
|
|
||||||
.page-wrapper .intro h3 {
|
|
||||||
color: #aaa;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro .contact-list {
|
|
||||||
display: flex;
|
|
||||||
color: #888;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro .contact-list > li {
|
|
||||||
margin-right: 10px;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro .contact-list > li > a {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
.page-wrapper .intro .contact-list > li > a > i {
|
|
||||||
margin-right: 5px;
|
|
||||||
font-size: 13px;
|
|
||||||
}
|
|
||||||
.page-wrapper .skill-wrapper {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
@media only screen and (max-width: 800px) {
|
|
||||||
.page-wrapper .skill-wrapper {
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: flex-start;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.page-wrapper .skill-wrapper .skill-caption {
|
|
||||||
white-space: nowrap;
|
|
||||||
padding-right: 10px;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
.skill-list {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
}
|
|
||||||
.skill-list li {
|
|
||||||
background: #999;
|
|
||||||
padding: 3px 5px;
|
|
||||||
border-radius: 5px;
|
|
||||||
margin-right: 10px;
|
|
||||||
font-size: 12px;
|
|
||||||
font-weight: bold;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
.skill-list li img,
|
|
||||||
.skill-list li i {
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
ul {
|
|
||||||
list-style: none;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
.clickable {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
.clickable.disabled {
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
.clickable:not(.disabled) {
|
|
||||||
transition: 0.3s;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.clickable:not(.disabled):hover {
|
|
||||||
opacity: 0.6;
|
|
||||||
}
|
|
||||||
.footer {
|
|
||||||
padding-bottom: 10px;
|
|
||||||
font-size: 14px;
|
|
||||||
color: #aaa;
|
|
||||||
}
|
|
||||||
.footer a {
|
|
||||||
text-transform: uppercase;
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
/*# sourceMappingURL=index.css.map */
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
{"version":3,"sources":["index.less"],"names":[],"mappings":"AAAA;EACI,mBAAA;EACA,mBAAA;EACA,YAAY,mDAAZ;EACA,YAAY,2CAAZ;;AAGJ;EACI,yBAAA;;AAGJ;EACI,UAAA;;AAGJ;EACI,mBAAA;EACA,oDAAA;EACA,yBAAA;;AAGJ;EACI,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,kBAAA;EAEA,oBAAA;EASA,oBAAA;;AAPA,wBAA2C;EAA3C;IACI,mBAAA;IACA,iBAAA;IACA,kBAAA;;;AAMJ,aAAC;EACG,SAAS,EAAT;EACA,yBAAA;EACA,kBAAA;EACA,UAAA;EACA,QAAQ,iBAAR;EACA,OAAA;EACA,SAAA;EACA,kBAAA;;AAGJ,aAAC;EACG,mBAAA;;AAEA,aAHH,gBAGI;EACG,kBAAA;EACA,8BAAA;;AAEA,aAPP,gBAGI,KAII,IAAI;EACD,mBAAA;;AAGJ,aAXP,gBAGI,KAQI;EACG,aAAA;;AAEA,wBAA2C;EAA3C,aAdX,gBAGI,KAQI;IAIO,sBAAA;;;AAGJ,aAlBX,gBAGI,KAQI,wBAOI;EACG,aAAA;EACA,sBAAA;EACA,mBAAA;EACA,mBAAA;;AAEA,aAxBf,gBAGI,KAQI,wBAOI,qBAMK;EACE,aAAA;EACA,gBAAA;EACA,iBAAA;EACA,uBAAA;EACA,mBAAA;EACA,sBAAA;EACA,WAAA;EACA,iBAAA;EACA,yBAAA;EACA,mBAAA;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;;AAEA,aAvCnB,gBAGI,KAQI,wBAOI,qBAMK,wBAeG;EACG,YAAA;EACA,kBAAA;EACA,gBAAA;EACA,WAAW,QAAX;EACA,QAAQ,SAAR;;AAEA,aA9CvB,gBAGI,KAQI,wBAOI,qBAMK,wBAeG,MAOI;EACG,QAAQ,OAAR;EACA,WAAW,UAAX;;AAIR,aApDnB,gBAGI,KAQI,wBAOI,qBAMK,wBA4BG;EACG,kBAAA;EACA,YAAA;EACA,SAAA;EACA,eAAA;EACA,iBAAA;EACA,WAAW,aAAX;;AAEA,aA5DvB,gBAGI,KAQI,wBAOI,qBAMK,wBA4BG,gCAQI;EACG,gBAAA;EACA,WAAA;;AAKZ,aAnEf,gBAGI,KAQI,wBAOI,qBAiDI;EAEG,WAAA;EAEA,aAAA;EACA,sBAAA;EACA,mBAAA;;AAIQ,aA7E3B,gBAGI,KAQI,wBAOI,qBAiDI,+BAQI,KACI,IACI;EACG,YAAA;;AAGJ,aAjF3B,gBAGI,KAQI,wBAOI,qBAiDI,+BAQI,KACI,IAKI;EACG,iBAAA;;AAWZ,aA7FnB,gBAGI,KAQI,wBA+EI,sBACI,KAEI;EACG,mBAAA;;AAGI,aAjG3B,gBAGI,KAQI,wBA+EI,sBACI,KAEI,KAGK,0BACG;EACG,SAAA;EACA,WAAA;;AAQA,aA3G/B,gBAGI,KAQI,wBA+EI,sBACI,KAEI,KAUK,4BAGG,IAAI,OACA;EACG,WAAA;;AAIR,aAhH3B,gBAGI,KAQI,wBA+EI,sBACI,KAEI,KAUK,4BASG;EACG,SAAA;EACA,gBAAA;EACA,WAAA;EACA,aAAA;EACA,mBAAA;;AAEA,aAvH/B,gBAGI,KAQI,wBA+EI,sBACI,KAEI,KAUK,4BASG,KAOI;EACG,cAAA;EACA,kBAAA;EACA,eAAA;;AAIR,aA9H3B,gBAGI,KAQI,wBA+EI,sBACI,KAEI,KAUK,4BAuBG;EACG,eAAA;;AAWhC,aAAC;EACG,mBAAA;EACA,kBAAA;;AAEA,aAJH,aAII;EACG,SAAS,EAAT;EACA,kBAAA;EACA,OAAA;EACA,SAAA;EACA,QAAQ,iBAAR;EACA,UAAA;EACA,yBAAA;;AAGJ,aAdH,aAcI;EAGG,WAAA;EAMA,kBAAA;;AAJA,aAnBP,aAcI,KAKI;EACG,WAAA;;AAOA,aA3BX,aAcI,KAWI,qBAEI;EACG,kBAAA;EACA,eAAA;EACA,iBAAA;;AAGJ,aAjCX,aAcI,KAWI,qBAQI;EACG,kBAAA;EACA,aAAA;EACA,kBAAA;EACA,aAAA;;AACA,wBAA2C;EAA3C,aAtCf,aAcI,KAWI,qBAQI;IAMO,sBAAA;;;AAIJ,aA3Cf,aAcI,KAWI,qBAQI,0BAUI;EACG,kBAAA;EACA,YAAA;;AAIR,aAjDX,aAcI,KAWI,qBAwBI;EACG,kBAAA;EACA,eAAA;EACA,iBAAA;;AAKA,aAzDf,aAcI,KAWI,qBA8BI,0BAEI;AAAD,aAzDf,aAcI,KAWI,qBA+BI,wBACI;EACG,SAAS,EAAT;EACA,kBAAA;EACA,WAAA;EACA,QAAA;EACA,yBAAA;EACA,mBAAA;EACA,WAAA;EACA,YAAA;;AAGJ,aApEf,aAcI,KAWI,qBA8BI,0BAaI;AAAD,aApEf,aAcI,KAWI,qBA+BI,wBAYI;EACG,SAAS,EAAT;EACA,kBAAA;EACA,WAAA;EACA,QAAA;EACA,yBAAA;EACA,mBAAA;EACA,UAAA;EACA,WAAA;;AAQpB,aAAC;EACG,WAAA;;AAIJ,aAAE;EACE,mBAAA;;AADJ,aAAE,OAGE;EACI,YAAA;;AAJR,aAAE,OAOE;AAPJ,aAAE,OAQE;EACI,WAAA;;AAIJ,aAbF,OAaI;EACE,aAAA;EACA,WAAA;;AAEA,aAjBN,OAaI,cAIG;EACG,kBAAA;;AAEA,aApBV,OAaI,cAIG,KAGI;EACG,aAAA;EACA,mBAAA;;AAGA,aAzBd,OAaI,cAIG,KAGI,IAKI;EACG,iBAAA;EACA,eAAA;;AA1RxB,aAoSI;EACI,aAAA;EACA,mBAAA;EACA,mBAAA;;AAEA,wBAA2C;EAA3C,aALJ;IAMQ,sBAAA;IACA,uBAAA;;;AA3SZ,aAoSI,eAWI;EACI,mBAAA;EACA,mBAAA;EACA,mBAAA;EACA,aAAA;;AAOZ;EACI,aAAA;EACA,eAAA;;AAFJ,WAII;EACI,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,kBAAA;EACA,eAAA;EACA,iBAAA;EACA,aAAA;EACA,mBAAA;EACA,mBAAA;;AAbR,WAII,GAWI;AAfR,WAII,GAYI;EACI,iBAAA;;AAKZ;EACI,gBAAA;EACA,UAAA;EACA,SAAA;;AAGJ;EACI,iBAAA;;AAEA,UAAC;EACG,mBAAA;;AAGJ,UAAC,IAAI;EACD,gBAAA;EACA,eAAA;;AAEA,UAJH,IAAI,WAIA;EACG,YAAA;;AAKZ;EACI,oBAAA;EACA,eAAA;EACA,WAAA;;AAHJ,OAKI;EACI,yBAAA;EACA,iBAAA","file":"index.css"}
|
|
||||||
|
Before Width: | Height: | Size: 15 KiB |
@@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="2500" height="2500" viewBox="0 0 538.584 538.583"><path d="M0 0h538.584v538.583H0V0z" fill="none"/><path d="M405.5 467.454L269.29 504.13l-136.212-36.676-31.432-340.525h335.29L405.5 467.454z" fill="#2062af"/><path d="M269.289 154.511v320.367l.308.084 110.229-29.682 25.443-290.769h-135.98z" fill="#3c9cd7"/><path d="M191.985 76.899V56.631h29.571V34.453h-51.749v62.684h51.749V76.899h-29.571zm82.766-20.268h20.674V34.453h-51.754v22.178c6.924 6.924 10.535 10.238 20.549 20.252-5.854 0-20.549.021-20.549.02v20.234h51.754V76.899l-20.674-20.268zm73.352 0h20.673V34.453H317.02v22.178c6.924 6.924 10.537 10.238 20.551 20.252-5.852 0-20.551.021-20.551.02v20.234h51.757V76.899l-20.674-20.268z"/><path d="M269.168 239.656l-97.49 40.602 3.233 40.199 94.257-40.301 100.265-42.868 4.157-41.122-104.422 43.49z" fill="#fff"/><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="-825.508" y1="1338.301" x2="-825.508" y2="1419.102" gradientTransform="matrix(1 0 0 -1 1045.93 1658.759)"><stop offset=".387" stop-color="#d1d3d4" stop-opacity="0"/><stop offset="1" stop-color="#d1d3d4"/></linearGradient><path d="M171.677 280.258l3.233 40.199 94.257-40.301v-40.5l-97.49 40.602z" fill="url(#a)"/><linearGradient id="b" gradientUnits="userSpaceOnUse" x1="-724.552" y1="1378.602" x2="-724.552" y2="1462.591" gradientTransform="matrix(1 0 0 -1 1045.93 1658.759)"><stop offset=".387" stop-color="#d1d3d4" stop-opacity="0"/><stop offset="1" stop-color="#d1d3d4"/></linearGradient><path d="M373.59 196.167l-104.422 43.489v40.5l100.265-42.868 4.157-41.121z" fill="url(#b)"/><linearGradient id="c" gradientUnits="userSpaceOnUse" x1="-874.103" y1="1302.263" x2="-680.039" y2="1302.263" gradientTransform="matrix(1 0 0 -1 1045.93 1658.759)"><stop offset="0" stop-color="#e8e7e5"/><stop offset="1" stop-color="#fff"/></linearGradient><path d="M171.827 280.258l3.234 40.199 144.625.461-3.235 53.598-47.59 13.398-45.748-11.551-2.772-33.268h-42.508l5.545 64.225 85.945 25.412 85.479-24.951 11.09-127.523H171.827z" fill="url(#c)"/><path d="M269.168 280.258h-97.49l3.233 40.199 94.257.301v-40.5zm0 107.528l-.462.129-45.742-11.551-2.772-33.268h-42.507l5.544 64.225 85.939 25.412v-44.947z" opacity=".05"/><linearGradient id="d" gradientUnits="userSpaceOnUse" x1="-883.032" y1="1442.031" x2="-672.341" y2="1442.031" gradientTransform="matrix(1 0 0 -1 1045.93 1658.759)"><stop offset="0" stop-color="#e8e7e5"/><stop offset="1" stop-color="#fff"/></linearGradient><path d="M162.898 196.167H373.59l-4.157 41.122H167.98l-5.082-41.122z" fill="url(#d)"/><path d="M269.168 196.167h-106.27l5.082 41.122h101.188v-41.122z" opacity=".05"/></svg>
|
|
||||||
|
Before Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 302 B |
|
Before Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 9.0 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 15 KiB |
@@ -1,9 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-11.5 -10.23174 23 20.46348">
|
|
||||||
<title>React Logo</title>
|
|
||||||
<circle cx="0" cy="0" r="2.05" fill="#61dafb"/>
|
|
||||||
<g stroke="#61dafb" stroke-width="1" fill="none">
|
|
||||||
<ellipse rx="11" ry="4.2"/>
|
|
||||||
<ellipse rx="11" ry="4.2" transform="rotate(60)"/>
|
|
||||||
<ellipse rx="11" ry="4.2" transform="rotate(120)"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 366 B |
|
Before Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 7.2 KiB |
|
Before Width: | Height: | Size: 1.5 MiB |
|
Before Width: | Height: | Size: 210 KiB |
|
Before Width: | Height: | Size: 117 KiB |
@@ -1,60 +0,0 @@
|
|||||||
import { walk } from "https://deno.land/std/fs/mod.ts";
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param path
|
|
||||||
*/
|
|
||||||
async function readFile( path : string ) : Promise<string> {
|
|
||||||
console.log( `${ path }: Loading...` );
|
|
||||||
const file = await Deno.open( path );
|
|
||||||
const decoder = new TextDecoder( "utf-8" );
|
|
||||||
const text = decoder.decode( await Deno.readAll( file ) );
|
|
||||||
console.log( `${ path }: Loaded` );
|
|
||||||
return text;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param path
|
|
||||||
*/
|
|
||||||
async function readFileRaw( path : string ) : Promise<Uint8Array> {
|
|
||||||
console.log( `${ path }: Loading...` );
|
|
||||||
const raw = await Deno.readFile(path);
|
|
||||||
console.log( `${ path }: Loaded` );
|
|
||||||
return raw;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param sourcePath
|
|
||||||
* @param destinationPath
|
|
||||||
*/
|
|
||||||
async function copyFile( sourcePath : string, destinationPath : string ) {
|
|
||||||
console.log( `${ sourcePath } -> ${ destinationPath }: Copying assets` );
|
|
||||||
await Deno.copyFile( sourcePath, destinationPath );
|
|
||||||
console.log( `${ sourcePath } -> ${ destinationPath }: Copied` );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param directoryPath
|
|
||||||
*/
|
|
||||||
async function getFileList( directoryPath : string ) {
|
|
||||||
const fileNames = [];
|
|
||||||
for await ( const entry of walk( directoryPath ) ) {
|
|
||||||
const fileName = entry.path.substr( directoryPath.length - 1 );
|
|
||||||
|
|
||||||
if ( entry.isFile ) {
|
|
||||||
fileNames.push( {path: fileName, absolutePath: entry.path} );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fileNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
export {
|
|
||||||
readFileRaw,
|
|
||||||
readFile,
|
|
||||||
copyFile,
|
|
||||||
getFileList
|
|
||||||
};
|
|
||||||