Compare commits

...

14 commits

24 changed files with 132 additions and 46 deletions

5
_config/shortcodes.js Normal file
View file

@ -0,0 +1,5 @@
import link from "./shortcodes/link.js"
export default function (eleventyConfig, pluginOptions) {
eleventyConfig.addPairedShortcode("link", link);
}

View file

@ -0,0 +1,3 @@
export default (content, url, target = "_blank", attr = "") => {
return `<a href="${url}" target="${target}" ${attr} class="button">${content}</a>`
}

View file

@ -2,6 +2,7 @@ import { inspect } from "util";
import pluginIcons from 'eleventy-plugin-icons';
import pluginPDF from "./_config/eleventy-plugin-pdf.js";
import pluginTokens from "./_config/eleventy-plugin-tokens.js";
import shortcodes from "./_config/shortcodes.js";
export default async function (eleventyConfig) {
eleventyConfig.setUseGitIgnore(false);
@ -29,6 +30,7 @@ export default async function (eleventyConfig) {
eleventyConfig.addPassthroughCopy('src/favicon.ico')
eleventyConfig.addPlugin(shortcodes);
eleventyConfig.addPlugin(pluginTokens, { tokens: "./src/_data/tokens.json", destination: "./src/css/theme.css" });
eleventyConfig.addPlugin(pluginPDF);
eleventyConfig.addPlugin(pluginIcons, {

View file

@ -9,10 +9,13 @@
"skills": [
"HTML",
"CSS",
"Bootstrap",
"Javascript",
"Accessibilité",
"Bootstrap",
"Figma",
"jQuery",
"Figma"
"SCSS",
"Git"
],
"lang": [
"Français (langue maternelle)",

View file

@ -3,7 +3,24 @@
<h1 class="hero-title">{% if section.data.displayedTitle %}{{ section.data.displayedTitle }}{% else %}{{ section.data.title }}{% endif %}</h1>
<p>{{section.data.description}}</p>
{{ section.templateContent }}
{% render 'partials/components/socials', socials: author.socials, mail: author.mail, showLabel: true %}
<ul class="list-inline socials-list socials-list--label">
{% if author.socials %}
{% for social in author.socials %}
<li>
{% link social.link, "_blank", "data-ghost-button" %}{% icon social.icon %} {{ social.title }}{% endlink %}
</li>
{% endfor %}
{% endif %}
{% if author.mail %}
<li>
{% capture href %}mailto:{{ author.mail }}{% endcapture %}
{% link href, "_blank", "data-ghost-button" %}{% icon "mail" %} Me contacter{% endlink %}
</li>
{% endif %}
<li>
{% link "/resume.pdf", "_blank", "data-ghost-button" %}{% icon "download" %} Télécharger en PDF{% endlink %}
</li>
</ul>
</div>
</section>

View file

@ -4,13 +4,18 @@
<span></span>
<div class="links">
{%- for link in links -%}
{% render 'partials/components/link', icon: link.icon, showLabel: false, label: link.title, href: link.link, class: classes, target: "_blank" %}
{% link link.link, "_blank", "data-ghost-button" %}{% icon link.icon %} <span class="sr-only">{{ social.title }}</span>{% endlink %}
{%- endfor -%}
</div>
</div>
<div class="content">
<h3>{{ title }}</h3>
<p>{{ description }}</p>
<ul class="list-inline">
{% for tag in tags %}
<li><span class="badge">{{ tag }}</span></li>
{% endfor %}
</ul>
</div>
</article>
</li>

View file

@ -6,7 +6,8 @@
background: data.background,
links: data.links,
title: data.title,
description: data.description %}
description: data.description,
tags: data.tags %}
{%- endfor -%}
</ul>
{% endif %}

View file

@ -2,13 +2,13 @@
{% if socials %}
{% for social in socials %}
<li>
{% render 'partials/components/link', icon: social.icon, showLabel: showLabel, label: social.title, href: social.link, class: "button", attr: "data-ghost-button", target: "_blank" %}
{% link social.link, "_blank", "data-ghost-button" %}{% icon social.icon %} <span class="sr-only">{{social.title}}</span>{% endlink %}
</li>
{% endfor %}
{% if mail %}
<li>
{% capture href %}mailto:{{ mail }}{% endcapture %}
{% render 'partials/components/link', icon: "mail", showLabel: showLabel, label: "Contactez moi par mail", href: href, class: "button", attr: "data-ghost-button", target: "_blank" %}
{% link href, "_blank", "data-ghost-button" %}{% icon "mail" %} <span class="sr-only">Me contacter</span>{% endlink %}
</li>
{% endif %}
{% endif %}

View file

@ -76,5 +76,8 @@
--button-bg: transparent;
--button-border-color: transparent;
--button-color: currentColor;
--button-hover-bg: transparent;
--button-hover-bg: color-mix(in srgb, var(--color-neutral-500) 35%, transparent 65%);
--button-hover-color: currentColor;
--button-padding: .2em .4em;
}

View file

@ -1,12 +1,23 @@
.competences-section .col {
width: 100%;
margin-bottom: 2rem;
.skills-gallery {
display: grid;
gap: 1rem;
grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
}
@media screen and (min-width: 991px) {
.competences-section > div {
flex-direction: row;
.skill {
font-size: 2rem;
font-size: clamp(2rem, 1.2967rem + 2.1978vw, 3rem);
font-weight: 500;
text-align: center;
}
@media screen and (min-width: 768px) {
.skill {
text-align: left;
}
.competences-section .col {
width: 40%;
}
@media screen and (min-width: 991px) {
.skills-gallery {
row-gap: 3.5rem;
}
}

View file

@ -1,14 +1,17 @@
.project-grid {
grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
gap: 1rem;
display: grid;
}
.project-grid li {
.project-grid > li {
border-radius: var(--border-radius);
overflow: hidden;
}
.project-grid .button {
--button-padding: .2em;
}
.card {
--background: url(https://placehold.co/200x150);
--background: linear-gradient(45deg, var(--color-neutral-100) 30%, var(--color-neutral-300) 100%);
z-index: 1;
background: var(--background);
background-repeat: no-repeat;
@ -45,4 +48,7 @@
}
.card .content {
padding: 1rem 0.4rem 0;
}
.card .list-inline {
gap: 0.5ch;
}

View file

@ -8,6 +8,7 @@
.timeline:before {
content: "";
background-color: var(--color-neutral-200);
background: linear-gradient(180deg, var(--color-neutral-200) 0%, var(--color-neutral-200) 85%, transparent 100%);
inline-size: 6px;
margin-inline-start: -3px;
position: absolute;
@ -31,7 +32,7 @@
aspect-ratio: 1;
inline-size: var(--size);
background-color: var(--color-neutral-200);
border: 6px solid var(--color-primary-400);
border: 6px solid var(--color-primary-600);
z-index: 1;
border-radius: 50%;
transition: all 0.2s ease-in-out;
@ -41,5 +42,5 @@
transform: translateY(50%);
}
.timeline li:hover:before {
border-color: var(--color-primary-700);
border-color: var(--color-secondary-600);
}

View file

@ -16,4 +16,7 @@ footer .socials-list {
--item-gap: 0.2ch;
--item-separator: "";
margin: 0;
}
footer .button.button {
--button-padding: .2em;
}

View file

@ -5,6 +5,10 @@ header {
inset-block-start: 0;
inset-inline: 0;
}
header.scroll {
box-shadow: hsla(0 0% 0% / 0.1) 0 0.5rem 1rem;
transition-duration: 400ms;
}
header nav ul {
flex-wrap: wrap;
justify-content: flex-end;

View file

@ -104,4 +104,16 @@ main li {
section {
margin-block: 3.5rem;
padding-block: 2rem;
}
.badge {
display: inline-flex;
justify-content: center;
line-height: 1;
padding: .2em .3em;
font-size: .75em;
border-radius: .4em;
color: var(--badge-color, var(--color-secondary-600));
background: color-mix(in srgb, var(--badge-color, var(--color-secondary-600)) 40%, white 100%);
border: 1px solid color-mix(in srgb, var(--badge-color, var(--color-secondary-600)) 90%, white 100%);
}

View file

@ -1,11 +1,24 @@
// Javascript is active
document.documentElement.classList.add('js');
// Add class when scrolling in the page
const header = document.getElementById("site-header");
const intercept = document.createElement("div");
intercept.setAttribute("data-observer-intercept", "");
header.before(intercept);
const observer = new IntersectionObserver(([entry]) => {
header.classList.toggle("scroll", !entry.isIntersecting);
});
observer.observe(intercept);
// Update navigation according to page scroll
const options = {
rootMargin: '0px 0px -60% 0px'
};
const observer = new IntersectionObserver(entries => {
const sectionObserver = new IntersectionObserver(entries => {
entries.forEach(entry => {
const id = entry.target.getAttribute("id");
if (entry.isIntersecting) {
@ -21,7 +34,7 @@ const observer = new IntersectionObserver(entries => {
},options);
document.querySelectorAll('section').forEach(function(section, i) {
observer.observe(section);
sectionObserver.observe(section);
});
// Random accent font & color

View file

@ -2,15 +2,12 @@
title: Compétences
displayedTitle: Mes compétences
order: 1
classes: 'competences-section langues-section'
showTitle: false
---
<div class="flex justify-center">
<div class="col">
{% render "partials/components/list", title: "Compétences techniques", content: author.skills %}
</div>
<div class="col">
{% render "partials/components/list", title: "Langues", content: author.lang %}
</div>
</div>
<ul class="skills-gallery">
{% for skill in author.skills %}
<li class="skill">{{skill}}</li>
{% endfor %}
</ul>

View file

@ -1,12 +0,0 @@
---
title: Téléchargement
showTitle: false
excludeFromPdf: true
order: 4
---
<div class="flex justify-center items-center download">
<p>Vous souhaitez imprimer ce document ?</p>
<i>--></i>
<button type="button" onclick="window.print()" class="button">Télécharger en PDF {% icon "download" %}</button>
</div>

View file

@ -1,6 +1,6 @@
---
layout: pdf
permalink: "pdf.pdf"
permalink: "resume.pdf"
eleventyComputed:
title: "{{author.firstName}} {{author.name}}, {{author.occupation}}"
links:

View file

@ -5,6 +5,9 @@ links:
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
tags:
- C#
- Unity
---
* desc1

View file

@ -5,4 +5,6 @@ links:
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
tags:
- Python
---

View file

@ -8,4 +8,7 @@ links:
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
tags:
- PHP
- LDAP
---

View file

@ -8,4 +8,7 @@ links:
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
tags:
- JS
- IOT
---

View file

@ -1,9 +1,10 @@
---
title: Snake
description: Un snake réalisé en Java
background: rgb(255, 143, 143)
links:
- title: Voir sur Github
link: https://github.com
icon: simple-icons:github
tags:
- Java
---