Compare commits
14 commits
8ac322868e
...
00b0f4b79a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
00b0f4b79a | ||
|
|
2851ada65c | ||
|
|
3b397ef81f | ||
|
|
3b7afad40a | ||
|
|
50d5a67f2c | ||
|
|
ade213e11a | ||
|
|
83b9e84d5c | ||
|
|
b0ed278a52 | ||
|
|
1a19666952 | ||
|
|
513a975459 | ||
|
|
1d0d83b24e | ||
|
|
44629924c4 | ||
|
|
7a56c72071 | ||
|
|
d406b07ee7 |
5
_config/shortcodes.js
Normal file
5
_config/shortcodes.js
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
import link from "./shortcodes/link.js"
|
||||||
|
|
||||||
|
export default function (eleventyConfig, pluginOptions) {
|
||||||
|
eleventyConfig.addPairedShortcode("link", link);
|
||||||
|
}
|
||||||
3
_config/shortcodes/link.js
Normal file
3
_config/shortcodes/link.js
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
export default (content, url, target = "_blank", attr = "") => {
|
||||||
|
return `<a href="${url}" target="${target}" ${attr} class="button">${content}</a>`
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,7 @@ import { inspect } from "util";
|
||||||
import pluginIcons from 'eleventy-plugin-icons';
|
import pluginIcons from 'eleventy-plugin-icons';
|
||||||
import pluginPDF from "./_config/eleventy-plugin-pdf.js";
|
import pluginPDF from "./_config/eleventy-plugin-pdf.js";
|
||||||
import pluginTokens from "./_config/eleventy-plugin-tokens.js";
|
import pluginTokens from "./_config/eleventy-plugin-tokens.js";
|
||||||
|
import shortcodes from "./_config/shortcodes.js";
|
||||||
|
|
||||||
export default async function (eleventyConfig) {
|
export default async function (eleventyConfig) {
|
||||||
eleventyConfig.setUseGitIgnore(false);
|
eleventyConfig.setUseGitIgnore(false);
|
||||||
|
|
@ -29,6 +30,7 @@ export default async function (eleventyConfig) {
|
||||||
|
|
||||||
eleventyConfig.addPassthroughCopy('src/favicon.ico')
|
eleventyConfig.addPassthroughCopy('src/favicon.ico')
|
||||||
|
|
||||||
|
eleventyConfig.addPlugin(shortcodes);
|
||||||
eleventyConfig.addPlugin(pluginTokens, { tokens: "./src/_data/tokens.json", destination: "./src/css/theme.css" });
|
eleventyConfig.addPlugin(pluginTokens, { tokens: "./src/_data/tokens.json", destination: "./src/css/theme.css" });
|
||||||
eleventyConfig.addPlugin(pluginPDF);
|
eleventyConfig.addPlugin(pluginPDF);
|
||||||
eleventyConfig.addPlugin(pluginIcons, {
|
eleventyConfig.addPlugin(pluginIcons, {
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,13 @@
|
||||||
"skills": [
|
"skills": [
|
||||||
"HTML",
|
"HTML",
|
||||||
"CSS",
|
"CSS",
|
||||||
"Bootstrap",
|
|
||||||
"Javascript",
|
"Javascript",
|
||||||
|
"Accessibilité",
|
||||||
|
"Bootstrap",
|
||||||
|
"Figma",
|
||||||
"jQuery",
|
"jQuery",
|
||||||
"Figma"
|
"SCSS",
|
||||||
|
"Git"
|
||||||
],
|
],
|
||||||
"lang": [
|
"lang": [
|
||||||
"Français (langue maternelle)",
|
"Français (langue maternelle)",
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,24 @@
|
||||||
<h1 class="hero-title">{% if section.data.displayedTitle %}{{ section.data.displayedTitle }}{% else %}{{ section.data.title }}{% endif %}</h1>
|
<h1 class="hero-title">{% if section.data.displayedTitle %}{{ section.data.displayedTitle }}{% else %}{{ section.data.title }}{% endif %}</h1>
|
||||||
<p>{{section.data.description}}</p>
|
<p>{{section.data.description}}</p>
|
||||||
{{ section.templateContent }}
|
{{ 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>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,13 +4,18 @@
|
||||||
<span></span>
|
<span></span>
|
||||||
<div class="links">
|
<div class="links">
|
||||||
{%- for link in 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 -%}
|
{%- endfor -%}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h3>{{ title }}</h3>
|
<h3>{{ title }}</h3>
|
||||||
<p>{{ description }}</p>
|
<p>{{ description }}</p>
|
||||||
|
<ul class="list-inline">
|
||||||
|
{% for tag in tags %}
|
||||||
|
<li><span class="badge">{{ tag }}</span></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</article>
|
||||||
</li>
|
</li>
|
||||||
|
|
@ -6,7 +6,8 @@
|
||||||
background: data.background,
|
background: data.background,
|
||||||
links: data.links,
|
links: data.links,
|
||||||
title: data.title,
|
title: data.title,
|
||||||
description: data.description %}
|
description: data.description,
|
||||||
|
tags: data.tags %}
|
||||||
{%- endfor -%}
|
{%- endfor -%}
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
@ -2,13 +2,13 @@
|
||||||
{% if socials %}
|
{% if socials %}
|
||||||
{% for social in socials %}
|
{% for social in socials %}
|
||||||
<li>
|
<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>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if mail %}
|
{% if mail %}
|
||||||
<li>
|
<li>
|
||||||
{% capture href %}mailto:{{ mail }}{% endcapture %}
|
{% 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>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
||||||
|
|
@ -76,5 +76,8 @@
|
||||||
--button-bg: transparent;
|
--button-bg: transparent;
|
||||||
--button-border-color: transparent;
|
--button-border-color: transparent;
|
||||||
--button-color: currentColor;
|
--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;
|
--button-padding: .2em .4em;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,23 @@
|
||||||
.competences-section .col {
|
.skills-gallery {
|
||||||
width: 100%;
|
display: grid;
|
||||||
margin-bottom: 2rem;
|
gap: 1rem;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
|
||||||
}
|
}
|
||||||
@media screen and (min-width: 991px) {
|
.skill {
|
||||||
.competences-section > div {
|
font-size: 2rem;
|
||||||
flex-direction: row;
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,14 +1,17 @@
|
||||||
.project-grid {
|
.project-grid {
|
||||||
grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
|
grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr));
|
||||||
gap: 1rem;
|
gap: 1rem;
|
||||||
display: grid;
|
display: grid;
|
||||||
}
|
}
|
||||||
.project-grid li {
|
.project-grid > li {
|
||||||
border-radius: var(--border-radius);
|
border-radius: var(--border-radius);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
.project-grid .button {
|
||||||
|
--button-padding: .2em;
|
||||||
|
}
|
||||||
.card {
|
.card {
|
||||||
--background: url(https://placehold.co/200x150);
|
--background: linear-gradient(45deg, var(--color-neutral-100) 30%, var(--color-neutral-300) 100%);
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
background: var(--background);
|
background: var(--background);
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
|
@ -45,4 +48,7 @@
|
||||||
}
|
}
|
||||||
.card .content {
|
.card .content {
|
||||||
padding: 1rem 0.4rem 0;
|
padding: 1rem 0.4rem 0;
|
||||||
|
}
|
||||||
|
.card .list-inline {
|
||||||
|
gap: 0.5ch;
|
||||||
}
|
}
|
||||||
|
|
@ -8,6 +8,7 @@
|
||||||
.timeline:before {
|
.timeline:before {
|
||||||
content: "";
|
content: "";
|
||||||
background-color: var(--color-neutral-200);
|
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;
|
inline-size: 6px;
|
||||||
margin-inline-start: -3px;
|
margin-inline-start: -3px;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
|
|
@ -31,7 +32,7 @@
|
||||||
aspect-ratio: 1;
|
aspect-ratio: 1;
|
||||||
inline-size: var(--size);
|
inline-size: var(--size);
|
||||||
background-color: var(--color-neutral-200);
|
background-color: var(--color-neutral-200);
|
||||||
border: 6px solid var(--color-primary-400);
|
border: 6px solid var(--color-primary-600);
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
transition: all 0.2s ease-in-out;
|
transition: all 0.2s ease-in-out;
|
||||||
|
|
@ -41,5 +42,5 @@
|
||||||
transform: translateY(50%);
|
transform: translateY(50%);
|
||||||
}
|
}
|
||||||
.timeline li:hover:before {
|
.timeline li:hover:before {
|
||||||
border-color: var(--color-primary-700);
|
border-color: var(--color-secondary-600);
|
||||||
}
|
}
|
||||||
|
|
@ -16,4 +16,7 @@ footer .socials-list {
|
||||||
--item-gap: 0.2ch;
|
--item-gap: 0.2ch;
|
||||||
--item-separator: "";
|
--item-separator: "";
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
}
|
||||||
|
footer .button.button {
|
||||||
|
--button-padding: .2em;
|
||||||
}
|
}
|
||||||
|
|
@ -5,6 +5,10 @@ header {
|
||||||
inset-block-start: 0;
|
inset-block-start: 0;
|
||||||
inset-inline: 0;
|
inset-inline: 0;
|
||||||
}
|
}
|
||||||
|
header.scroll {
|
||||||
|
box-shadow: hsla(0 0% 0% / 0.1) 0 0.5rem 1rem;
|
||||||
|
transition-duration: 400ms;
|
||||||
|
}
|
||||||
header nav ul {
|
header nav ul {
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
|
|
|
||||||
|
|
@ -104,4 +104,16 @@ main li {
|
||||||
section {
|
section {
|
||||||
margin-block: 3.5rem;
|
margin-block: 3.5rem;
|
||||||
padding-block: 2rem;
|
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%);
|
||||||
}
|
}
|
||||||
|
|
@ -1,11 +1,24 @@
|
||||||
// Javascript is active
|
// Javascript is active
|
||||||
document.documentElement.classList.add('js');
|
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
|
// Update navigation according to page scroll
|
||||||
const options = {
|
const options = {
|
||||||
rootMargin: '0px 0px -60% 0px'
|
rootMargin: '0px 0px -60% 0px'
|
||||||
};
|
};
|
||||||
const observer = new IntersectionObserver(entries => {
|
const sectionObserver = new IntersectionObserver(entries => {
|
||||||
entries.forEach(entry => {
|
entries.forEach(entry => {
|
||||||
const id = entry.target.getAttribute("id");
|
const id = entry.target.getAttribute("id");
|
||||||
if (entry.isIntersecting) {
|
if (entry.isIntersecting) {
|
||||||
|
|
@ -21,7 +34,7 @@ const observer = new IntersectionObserver(entries => {
|
||||||
},options);
|
},options);
|
||||||
|
|
||||||
document.querySelectorAll('section').forEach(function(section, i) {
|
document.querySelectorAll('section').forEach(function(section, i) {
|
||||||
observer.observe(section);
|
sectionObserver.observe(section);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Random accent font & color
|
// Random accent font & color
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,12 @@
|
||||||
title: Compétences
|
title: Compétences
|
||||||
displayedTitle: Mes compétences
|
displayedTitle: Mes compétences
|
||||||
order: 1
|
order: 1
|
||||||
classes: 'competences-section langues-section'
|
showTitle: false
|
||||||
---
|
---
|
||||||
|
|
||||||
<div class="flex justify-center">
|
|
||||||
<div class="col">
|
<ul class="skills-gallery">
|
||||||
{% render "partials/components/list", title: "Compétences techniques", content: author.skills %}
|
{% for skill in author.skills %}
|
||||||
</div>
|
<li class="skill">{{skill}}</li>
|
||||||
|
{% endfor %}
|
||||||
<div class="col">
|
</ul>
|
||||||
{% render "partials/components/list", title: "Langues", content: author.lang %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
layout: pdf
|
layout: pdf
|
||||||
permalink: "pdf.pdf"
|
permalink: "resume.pdf"
|
||||||
eleventyComputed:
|
eleventyComputed:
|
||||||
title: "{{author.firstName}} {{author.name}}, {{author.occupation}}"
|
title: "{{author.firstName}} {{author.name}}, {{author.occupation}}"
|
||||||
links:
|
links:
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,9 @@ links:
|
||||||
- title: Voir sur Github
|
- title: Voir sur Github
|
||||||
link: https://github.com
|
link: https://github.com
|
||||||
icon: simple-icons:github
|
icon: simple-icons:github
|
||||||
|
tags:
|
||||||
|
- C#
|
||||||
|
- Unity
|
||||||
---
|
---
|
||||||
|
|
||||||
* desc1
|
* desc1
|
||||||
|
|
|
||||||
|
|
@ -5,4 +5,6 @@ links:
|
||||||
- title: Voir sur Github
|
- title: Voir sur Github
|
||||||
link: https://github.com
|
link: https://github.com
|
||||||
icon: simple-icons:github
|
icon: simple-icons:github
|
||||||
|
tags:
|
||||||
|
- Python
|
||||||
---
|
---
|
||||||
|
|
@ -8,4 +8,7 @@ links:
|
||||||
- title: Voir sur Github
|
- title: Voir sur Github
|
||||||
link: https://github.com
|
link: https://github.com
|
||||||
icon: simple-icons:github
|
icon: simple-icons:github
|
||||||
|
tags:
|
||||||
|
- PHP
|
||||||
|
- LDAP
|
||||||
---
|
---
|
||||||
|
|
@ -8,4 +8,7 @@ links:
|
||||||
- title: Voir sur Github
|
- title: Voir sur Github
|
||||||
link: https://github.com
|
link: https://github.com
|
||||||
icon: simple-icons:github
|
icon: simple-icons:github
|
||||||
|
tags:
|
||||||
|
- JS
|
||||||
|
- IOT
|
||||||
---
|
---
|
||||||
|
|
@ -1,9 +1,10 @@
|
||||||
---
|
---
|
||||||
title: Snake
|
title: Snake
|
||||||
description: Un snake réalisé en Java
|
description: Un snake réalisé en Java
|
||||||
background: rgb(255, 143, 143)
|
|
||||||
links:
|
links:
|
||||||
- title: Voir sur Github
|
- title: Voir sur Github
|
||||||
link: https://github.com
|
link: https://github.com
|
||||||
icon: simple-icons:github
|
icon: simple-icons:github
|
||||||
|
tags:
|
||||||
|
- Java
|
||||||
---
|
---
|
||||||
Loading…
Reference in a new issue