feat: add skill card title and skill picker media queries
This commit is contained in:
parent
f8f3b0e282
commit
e6179034e9
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<div class='skill-card' ref='root' :data-active='active ? "1" : "0"' @click='onClick()'>
|
<div class='skill-card' ref='root' :data-active='active ? "1" : "0"' @click='onClick()' :title='name()'>
|
||||||
<img class='icon' :src='icon()' />
|
<img class='icon' :src='icon()' />
|
||||||
<span class='name'>
|
<span class='name'>
|
||||||
<span v-html='name()'></span>
|
<span v-html='name()'></span>
|
||||||
|
@ -17,10 +17,6 @@
|
||||||
// id of the skill to display (string representation)
|
// id of the skill to display (string representation)
|
||||||
@Prop(Number) readonly id: tID|undefined;
|
@Prop(Number) readonly id: tID|undefined;
|
||||||
|
|
||||||
// undefined -> automatic size
|
|
||||||
// value -> fixed size applied (valid css value with unit)
|
|
||||||
@Prop(String) readonly width: string|undefined;
|
|
||||||
|
|
||||||
// whether it has the active style
|
// whether it has the active style
|
||||||
@Prop(Boolean) active: boolean|undefined;
|
@Prop(Boolean) active: boolean|undefined;
|
||||||
|
|
||||||
|
@ -29,13 +25,7 @@
|
||||||
// empty -> this.id is used to fetch the skill
|
// empty -> this.id is used to fetch the skill
|
||||||
@Prop(String) folder: string|undefined;
|
@Prop(String) folder: string|undefined;
|
||||||
|
|
||||||
protected mounted() {
|
protected mounted() {}
|
||||||
if( this.width == undefined ){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const el = this.$refs.root as HTMLElement;
|
|
||||||
el.style.width = this.width;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected icon(): string {
|
protected icon(): string {
|
||||||
const unknown = () => require('../assets/skills/unknown.svg');
|
const unknown = () => require('../assets/skills/unknown.svg');
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
:key='t'
|
:key='t'
|
||||||
:active='t == tag'
|
:active='t == tag'
|
||||||
:folder='t'
|
:folder='t'
|
||||||
width='18rem'
|
|
||||||
@pick='onTag(t, $event)'/>
|
@pick='onTag(t, $event)'/>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
@ -18,7 +17,6 @@
|
||||||
v-show='filtered.indexOf(id) >= 0'
|
v-show='filtered.indexOf(id) >= 0'
|
||||||
:id='id'
|
:id='id'
|
||||||
:active='id == sel'
|
:active='id == sel'
|
||||||
width='18rem'
|
|
||||||
@pick='onPick(id, $event)'/>
|
@pick='onPick(id, $event)'/>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
@ -199,6 +197,8 @@
|
||||||
|
|
||||||
background: linear-gradient(0, #564ba4, #745cfc);
|
background: linear-gradient(0, #564ba4, #745cfc);
|
||||||
|
|
||||||
|
font-size: 1rem;
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
display: flex;
|
display: flex;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -231,6 +231,7 @@
|
||||||
|
|
||||||
.skill-card {
|
.skill-card {
|
||||||
margin: .3em 0;
|
margin: .3em 0;
|
||||||
|
width: 12em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,6 +250,7 @@
|
||||||
|
|
||||||
.skill-card {
|
.skill-card {
|
||||||
margin: .3em 0;
|
margin: .3em 0;
|
||||||
|
width: 12em;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -310,6 +312,7 @@
|
||||||
|
|
||||||
font-size: 1.7em;
|
font-size: 1.7em;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
|
text-align: justify;
|
||||||
color: #c1c1c1;
|
color: #c1c1c1;
|
||||||
padding: 1em;
|
padding: 1em;
|
||||||
|
|
||||||
|
@ -359,4 +362,23 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// width > 1800px : center the container
|
||||||
|
@media screen and (min-width: 1800px) {
|
||||||
|
.container {
|
||||||
|
left: calc( 100vw/2 - 1800px/2 );
|
||||||
|
max-width: 1800px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// screen less than 1400 p
|
||||||
|
@media screen and (max-width: 1400px) {
|
||||||
|
#skill-picker {
|
||||||
|
font-size: 1vw;
|
||||||
|
|
||||||
|
.skill-card {
|
||||||
|
width: 18vw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -62,21 +62,21 @@ export const Skills: tSkills = {
|
||||||
link: 'https://mariadb.org',
|
link: 'https://mariadb.org',
|
||||||
icon: 'skills/mariadb.svg',
|
icon: 'skills/mariadb.svg',
|
||||||
tags: ['web', 'storage'],
|
tags: ['web', 'storage'],
|
||||||
info: "",
|
info: "I started using mysql then MariaDB as my first introduction to SQL, mostly when I started learning web with PHP. I now prefer using postgreSQL instead as it tends to be more robust and performant overall.",
|
||||||
},
|
},
|
||||||
[tID.Postgres]: {
|
[tID.Postgres]: {
|
||||||
name: 'PostgreSQL',
|
name: 'PostgreSQL',
|
||||||
link: 'https://postgresql.org',
|
link: 'https://postgresql.org',
|
||||||
icon: 'skills/postgres.svg',
|
icon: 'skills/postgres.svg',
|
||||||
tags: ['web', 'storage'],
|
tags: ['web', 'storage'],
|
||||||
info: "",
|
info: "My main choice of dbms when using sql orfor relational databases. Had some experience with it mainly with go services with docker.",
|
||||||
},
|
},
|
||||||
[tID.Mongo]: {
|
[tID.Mongo]: {
|
||||||
name: 'MongoDB',
|
name: 'MongoDB',
|
||||||
link: 'https://mongodb.com',
|
link: 'https://mongodb.com',
|
||||||
icon: 'skills/mongo.svg',
|
icon: 'skills/mongo.svg',
|
||||||
tags: ['web', 'storage'],
|
tags: ['web', 'storage'],
|
||||||
info: "",
|
info: "I learned it during my Master's degree. I used advanced Mongo with schema validation and complex filter requests. I find this technology really interesting over SQL, but I find classical relational databases are easier to comprehend and I am more used to it.",
|
||||||
},
|
},
|
||||||
|
|
||||||
[tID.Vue]: {
|
[tID.Vue]: {
|
||||||
|
@ -91,28 +91,28 @@ export const Skills: tSkills = {
|
||||||
link: 'https://angular.io',
|
link: 'https://angular.io',
|
||||||
icon: 'skills/angular.svg',
|
icon: 'skills/angular.svg',
|
||||||
tags: ['web', 'UI'],
|
tags: ['web', 'UI'],
|
||||||
info: "",
|
info: "I used it only once to break it apart in a R&D project. I had to \"hack\" it in order to inject services and components on-the-fly.<br><br>You had a kind of App store where you could install modules. The Angular-powered website would inject new navigation menus, pages and services according to the modules you had installed.<br><br>I do not like Angular, as I think Vue.js does a better job achieving the same goal with a cleaner API, and does not force you to embrace the Angular/Google way of coding and organizing things."
|
||||||
},
|
},
|
||||||
[tID.Parcel]: {
|
[tID.Parcel]: {
|
||||||
name: 'Parcel',
|
name: 'Parcel',
|
||||||
link: 'https://parceljs.org/',
|
link: 'https://parceljs.org/',
|
||||||
icon: 'skills/parcel.svg',
|
icon: 'skills/parcel.svg',
|
||||||
tags: ['web'],
|
tags: ['web'],
|
||||||
info: "",
|
info: "I used it often back in my Master's Degree period along with PHP backends. It allows to get away from webpack which I find overly complicated and a major point of failure for most frontends.<br><br>I haven't used it in a while but would highly consider it as it has no real prerequisite.",
|
||||||
},
|
},
|
||||||
[tID.Cordova]: {
|
[tID.Cordova]: {
|
||||||
name: 'Apache Cordova',
|
name: 'Apache Cordova',
|
||||||
link: 'https://cordova.apache.org/',
|
link: 'https://cordova.apache.org/',
|
||||||
icon: 'skills/cordova.svg',
|
icon: 'skills/cordova.svg',
|
||||||
tags: ['system', 'web', 'mobile'],
|
tags: ['system', 'web', 'mobile'],
|
||||||
info: "",
|
info: "I used it often to transform single-page applications into android, iOS or desktop apps at low cost. I haven't needed this kind of software for a while, it might now be favorable to use Capacitor or other \"alternatives\".",
|
||||||
},
|
},
|
||||||
[tID.Webpack]: {
|
[tID.Webpack]: {
|
||||||
name: 'Webpack',
|
name: 'Webpack',
|
||||||
link: 'https://webpack.js.org/',
|
link: 'https://webpack.js.org/',
|
||||||
icon: 'skills/webpack.svg',
|
icon: 'skills/webpack.svg',
|
||||||
tags: ['web'],
|
tags: ['web'],
|
||||||
info: "",
|
info: "... I used it a lot because it is often required. But I hate that it is so complex that most users use it without understanding what is really does. I avoid it whenever possible, the issue can be transposed to node_modules and the whole node ecosystem.",
|
||||||
},
|
},
|
||||||
|
|
||||||
[tID.WebGL]: {
|
[tID.WebGL]: {
|
||||||
|
@ -120,21 +120,21 @@ export const Skills: tSkills = {
|
||||||
link: 'https://www.khronos.org/webgl/',
|
link: 'https://www.khronos.org/webgl/',
|
||||||
icon: null,
|
icon: null,
|
||||||
tags: ['web'],
|
tags: ['web'],
|
||||||
info: "",
|
info: "I used it during my graduation years, the potential is great but I need to find a time to explore what's new.",
|
||||||
},
|
},
|
||||||
[tID.AudioAPI]: {
|
[tID.AudioAPI]: {
|
||||||
name: 'Audio API',
|
name: 'Audio API',
|
||||||
link: 'https://webaudio.github.io/web-audio-api/',
|
link: 'https://webaudio.github.io/web-audio-api/',
|
||||||
icon: null,
|
icon: null,
|
||||||
tags: ['web'],
|
tags: ['web'],
|
||||||
info: "",
|
info: "I used it mainly to build a discord clone (audio and video full-duplex streaming) as a school project. I also tried the Fourier transform to build nice graphics (c.f. Soundcloud) but have not succeeded at the time.",
|
||||||
},
|
},
|
||||||
[tID.Websocket]: {
|
[tID.Websocket]: {
|
||||||
name: 'Websocket',
|
name: 'Websocket',
|
||||||
link: 'https://tools.ietf.org/html/rfc6455',
|
link: 'https://tools.ietf.org/html/rfc6455',
|
||||||
icon: null,
|
icon: null,
|
||||||
tags: ['web', 'networking', 'IoT'],
|
tags: ['web', 'networking', 'IoT'],
|
||||||
info: "",
|
info: "I use them whenever possible to avoid the classical expensive polling.<br><br>I also created my own websocket client & server implementation in Go following nothing but the RFC for learning purposes.<br><br>I've used, designed and implemented websocket communications among personal and professional projects.",
|
||||||
},
|
},
|
||||||
|
|
||||||
[tID.Docker]: {
|
[tID.Docker]: {
|
||||||
|
@ -142,21 +142,21 @@ export const Skills: tSkills = {
|
||||||
link: 'https://docker.com',
|
link: 'https://docker.com',
|
||||||
icon: 'skills/docker.svg',
|
icon: 'skills/docker.svg',
|
||||||
tags: ['web', 'system'],
|
tags: ['web', 'system'],
|
||||||
info: "",
|
info: "I am using it for a while now. Most of my go projects use it as it costs no memory for your executable (multi-stage build from scratch) and allows for isolation and a better control over the running environment. I am learning docker a bit more every time I use it. It is often coupled with docker-compose in my projects.",
|
||||||
},
|
},
|
||||||
[tID.Bash]: {
|
[tID.Bash]: {
|
||||||
name: 'bash',
|
name: 'bash',
|
||||||
link: 'https://www.gnu.org/software/bash/',
|
link: 'https://www.gnu.org/software/bash/',
|
||||||
icon: null,
|
icon: null,
|
||||||
tags: ['system'],
|
tags: ['system'],
|
||||||
info: "",
|
info: "Felt in love with GNU/linux and its ecosystem a while back (was 14yo back then) and I've never stopped. I'm often the linux/bash guy of the team.<br><br>I use it extensively to automate anything a human can do as it avoids a lot of mistakes in most workflows.",
|
||||||
},
|
},
|
||||||
[tID.Linux]: {
|
[tID.Linux]: {
|
||||||
name: 'GNU/Linux',
|
name: 'GNU/Linux',
|
||||||
link: 'https://www.linux.org',
|
link: 'https://www.linux.org',
|
||||||
icon: 'skills/linux.svg',
|
icon: 'skills/linux.svg',
|
||||||
tags: ['system'],
|
tags: ['system'],
|
||||||
info: "",
|
info: "Felt in love with GNU/linux and its ecosystem a while back (was 14yo back then) and I've never stopped. <br><br>Linux has been my main OS choice since then. I stepped through Ubuntu, Debian, Manjaro, Elementary, Tails (live), and I am now on Solus for a few years.",
|
||||||
},
|
},
|
||||||
[tID.Systemd]: {
|
[tID.Systemd]: {
|
||||||
name: 'systemd',
|
name: 'systemd',
|
||||||
|
|
Loading…
Reference in New Issue