Compare commits
21 commits
f09135319a
...
ebbd2d3ec5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ebbd2d3ec5 | ||
|
|
2ae2354750 | ||
|
|
c745c49080 | ||
|
|
c1449d0a5b | ||
|
|
c957e34325 | ||
|
|
0309652be2 | ||
|
|
3d230cdd6a | ||
|
|
39a9ec10ca | ||
|
|
7465735919 | ||
|
|
d37ad6b485 | ||
|
|
89db9d66ad | ||
|
|
f0753d0e7a | ||
|
|
22ca1dec59 | ||
|
|
6cb2d09e90 | ||
|
|
0d11cad3a8 | ||
|
|
2abbdf84a4 | ||
|
|
c10055dda6 | ||
|
|
c287bd7cef | ||
|
|
bc3fabec78 | ||
|
|
3bf1442ddc | ||
|
|
057c7768df |
|
|
@ -1,49 +0,0 @@
|
|||
import PuppeteerHTMLPDF from "puppeteer-html-pdf";
|
||||
import { nanoid } from 'nanoid';
|
||||
import fs from 'fs';
|
||||
|
||||
const pluginDefaults = {
|
||||
// Plugin defaults
|
||||
tempDir: "dist", // Directory where the temporary files are created
|
||||
debug: false, // Keep the generated temporary html file for debugging
|
||||
format: "A4", // Default pdf format
|
||||
margin: { // PDF file margins
|
||||
top: "1cm",
|
||||
right: "1.25cm",
|
||||
bottom: "1cm",
|
||||
left: "1.25cm",
|
||||
}
|
||||
};
|
||||
|
||||
export default function (eleventyConfig, options = {}) {
|
||||
const pluginConfig = Object.assign(pluginDefaults, options);
|
||||
|
||||
eleventyConfig.addTransform("toPDF", async (content) => {
|
||||
if (this.outputPath && this.outputPath.toLowerCase().endsWith('.pdf')) {
|
||||
let tempFileName = pluginConfig.debug ? this.page.fileSlug : nanoid();
|
||||
let htmlFile = `./${pluginConfig.tempDir}/${tempFileName}.html`;
|
||||
let pdfFile = `./${pluginConfig.tempDir}/${tempFileName}.pdf`;
|
||||
|
||||
fs.writeFileSync(htmlFile, content);
|
||||
|
||||
const htmlPDF = new PuppeteerHTMLPDF();
|
||||
const pdfOptions = {
|
||||
format: pluginConfig.format,
|
||||
margin: pluginConfig.margin,
|
||||
path: pdfFile,
|
||||
};
|
||||
htmlPDF.setOptions(pdfOptions);
|
||||
|
||||
const pdfContent = await htmlPDF.readFile(htmlFile, "utf8");
|
||||
await htmlPDF.create(pdfContent);
|
||||
let contents = fs.readFileSync(pdfFile, 'binary');
|
||||
|
||||
if (!pluginConfig.debug) {
|
||||
fs.unlinkSync(htmlFile);
|
||||
fs.unlinkSync(pdfFile);
|
||||
}
|
||||
|
||||
return Buffer.from(contents,'binary');
|
||||
} else return content;
|
||||
});
|
||||
};
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
import { inspect } from "util";
|
||||
import eleventyPluginPDF from "eleventy-plugin-pdf";
|
||||
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";
|
||||
|
||||
|
|
@ -16,6 +16,12 @@ export default async function (eleventyConfig) {
|
|||
process.env.DEBUG && console.log(inspect(sections));
|
||||
return sections;
|
||||
});
|
||||
eleventyConfig.addCollection("pdfSections", (collectionApi) => {
|
||||
const sections = collectionApi.getFilteredByGlob("./src/pages/sections/**")
|
||||
.sort((a, b) => (a.data?.pdf?.order ?? a.data.order) - (b.data?.pdf?.order ?? b.data.order));
|
||||
process.env.DEBUG && console.log(inspect(sections));
|
||||
return sections;
|
||||
});
|
||||
eleventyConfig.addCollection("projects", (collectionApi) => {
|
||||
const projects = collectionApi.getFilteredByGlob("./src/projects/**")
|
||||
.sort((a, b) => a.data.order - b.data.order);
|
||||
|
|
@ -28,11 +34,11 @@ export default async function (eleventyConfig) {
|
|||
.sort((a, b) => a.data.dates.start - b.data.dates.start).reverse();
|
||||
});
|
||||
|
||||
eleventyConfig.addPassthroughCopy('src/favicon.ico')
|
||||
eleventyConfig.addPassthroughCopy({'src/assets': '/'})
|
||||
|
||||
eleventyConfig.addPlugin(shortcodes);
|
||||
eleventyConfig.addPlugin(pluginTokens, { tokens: "./src/_data/tokens.json", destination: "./src/css/theme.css" });
|
||||
eleventyConfig.addPlugin(pluginPDF);
|
||||
eleventyConfig.addPlugin(eleventyPluginPDF);
|
||||
eleventyConfig.addPlugin(pluginIcons, {
|
||||
sources: [
|
||||
{ name: 'lucide', path: 'node_modules/lucide-static/icons', default: true },
|
||||
|
|
|
|||
7
package-lock.json
generated
7
package-lock.json
generated
|
|
@ -11,6 +11,7 @@
|
|||
"devDependencies": {
|
||||
"@11ty/eleventy": "^3.0.0",
|
||||
"eleventy-plugin-icons": "^4.5.3",
|
||||
"eleventy-plugin-pdf": "^1.0.1",
|
||||
"lucide-static": "^0.503.0",
|
||||
"nanoid": "^5.1.5",
|
||||
"puppeteer-html-pdf": "^4.0.8",
|
||||
|
|
@ -1289,6 +1290,12 @@
|
|||
"node": ">=16.20.2"
|
||||
}
|
||||
},
|
||||
"node_modules/eleventy-plugin-pdf": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/eleventy-plugin-pdf/-/eleventy-plugin-pdf-1.0.1.tgz",
|
||||
"integrity": "sha512-kmbjyhSZnXJktYR8WHYQIATPvbSbC7kjxr22FUIx/khEnXG3aHDFcKOB4HNGpUeajee524AHgkBZZDV8sRmYwg==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/emoji-regex": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
"devDependencies": {
|
||||
"@11ty/eleventy": "^3.0.0",
|
||||
"eleventy-plugin-icons": "^4.5.3",
|
||||
"eleventy-plugin-pdf": "^1.0.1",
|
||||
"lucide-static": "^0.503.0",
|
||||
"nanoid": "^5.1.5",
|
||||
"puppeteer-html-pdf": "^4.0.8",
|
||||
|
|
|
|||
|
|
@ -18,10 +18,13 @@
|
|||
"Git"
|
||||
],
|
||||
"lang": [
|
||||
"Français (langue maternelle)",
|
||||
"Français",
|
||||
"Anglais",
|
||||
"Allemand (Connaissance scolaires)"
|
||||
],
|
||||
"other": [
|
||||
"Permis de voiture (Catégorie B)"
|
||||
],
|
||||
"socials": [
|
||||
{
|
||||
"title": "Mon Github",
|
||||
|
|
|
|||
|
|
@ -4,6 +4,6 @@ export default {
|
|||
url: "http://localhost:8080",
|
||||
description: "A blog built with Eleventy",
|
||||
lang: "fr",
|
||||
repository: "https://github.com/TheThomaas",
|
||||
repoSrc: "Github"
|
||||
repository: "https://codeberg.org/TheThomaas/11ty-resume",
|
||||
repoSrc: "Codeberg"
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
<section id="{{ section.data.title | slug }}" class="{{ section.data.classes }} wrapper-full">
|
||||
{% if section.data.showTitle != false %}
|
||||
<h2>{% if section.data.displayedTitle %}{{ section.data.displayedTitle }}{% else %}{{ section.data.title }}{% endif %}</h2>
|
||||
<h2 class="underline">{% if section.data.displayedTitle %}{{ section.data.displayedTitle }}{% else %}{{ section.data.title }}{% endif %}</h2>
|
||||
{% endif %}
|
||||
{{ section.templateContent }}
|
||||
</section>
|
||||
|
|
@ -4,7 +4,8 @@
|
|||
<span></span>
|
||||
<div class="links">
|
||||
{%- for link in links -%}
|
||||
{% link link.link, "_blank", "data-ghost-button" %}{% icon link.icon %} <span class="sr-only">{{ social.title }}</span>{% endlink %}
|
||||
{% render "partials/components/project-link",
|
||||
link: link %}
|
||||
{%- endfor -%}
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,31 +1,80 @@
|
|||
{% assign showTitle = true %}
|
||||
{% if section.data.showTitle == true or section.data.showTitle == false %}
|
||||
{% assign showTitle = section.data.showTitle %}
|
||||
{% endif %}
|
||||
{% if section.data.pdf.showTitle == true or section.data.pdf.showTitle == false %}
|
||||
{% assign showTitle = section.data.pdf.showTitle %}
|
||||
{% endif %}
|
||||
|
||||
{% assign title = section.data.title %}
|
||||
{% if section.data.pdf.title %}
|
||||
{% assign title = section.data.pdf.title %}
|
||||
{% endif %}
|
||||
<section>
|
||||
{% if section.data.showTitle != false %}
|
||||
{% if showTitle %}
|
||||
<div class="title">
|
||||
<h2>
|
||||
{% if section.data.displayedTitle %}
|
||||
{{ section.data.displayedTitle }}
|
||||
{% else %}
|
||||
{{ section.data.title }}
|
||||
{% endif %}
|
||||
</h2>
|
||||
<h2>{{ title }}</h2>
|
||||
<hr>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% for item in items %}
|
||||
<div class="subtitle">
|
||||
<h3>{{ item.data.title }}</h3>
|
||||
<p class="underline">
|
||||
<strong>{{ item.data.role }}</strong>
|
||||
</p>
|
||||
{% if item.data.dates %}
|
||||
<div class="timeSection">
|
||||
<span>{{ item.data.location }}</span>
|
||||
<strong>{{ item.data.dates.start }} - {{ item.data.dates.end }}</strong>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% if items %}
|
||||
{% for item in items %}
|
||||
<div class="subtitle">
|
||||
<h4>{{ item.data.title }}</h4>
|
||||
{% if item.data.role %}
|
||||
<p class="underline">
|
||||
<strong>{{ item.data.role }}</strong>
|
||||
</p>
|
||||
{% else %}
|
||||
<span></span>
|
||||
{% endif %}
|
||||
{% if item.data.dates %}
|
||||
<div class="timeSection">
|
||||
<span>{{ item.data.location }}</span>
|
||||
<strong>{{ item.data.dates.start }} - {{ item.data.dates.end }}</strong>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if item.data.links %}
|
||||
<ul class="list-inline">
|
||||
|
||||
{{ item.templateContent }}
|
||||
{% endfor %}
|
||||
{% for link in item.data.links %}
|
||||
{% assign linkHref = link %}
|
||||
{% if link.link %}
|
||||
{% assign linkHref = link.link %}
|
||||
{% endif %}
|
||||
|
||||
{% assign linkTitle = "Voir sur " | append: linkHref %}
|
||||
{% if linkHref contains "codeberg.org" or linkHref contains "github.com" %}
|
||||
{% assign linkTitle = "Source" %}
|
||||
{% endif %}
|
||||
|
||||
{% if linkHref contains "npmjs.com" %}
|
||||
{% assign linkTitle = "Demo" %}
|
||||
{% endif %}
|
||||
|
||||
{% if link.title %}
|
||||
{% assign linkTitle = link.title %}
|
||||
{% endif %}
|
||||
|
||||
<li>
|
||||
{% link linkHref, "_blank" %}{{ linkTitle }}{% endlink %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{{ item.templateContent }}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<ul>
|
||||
<li><strong>Compétences techniques</strong>: {{ author.skills | join: ", " }}</li>
|
||||
<li><strong>Langues</strong>: {{ author.lang | join: ", " }}</li>
|
||||
<li><strong>Autre</strong>: {{ author.other | join: ", " }}</li>
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
|
||||
</section>
|
||||
40
src/_includes/partials/components/project-link.liquid
Normal file
40
src/_includes/partials/components/project-link.liquid
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
{% assign linkHref = link %}
|
||||
{% if link.link %}
|
||||
{% assign linkHref = link.link %}
|
||||
{% endif %}
|
||||
|
||||
{% assign iconName = "link" %}
|
||||
{% if linkHref contains "codeberg.org" %}
|
||||
{% assign iconName = "simple-icons:codeberg" %}
|
||||
{% endif %}
|
||||
|
||||
{% if linkHref contains "npmjs.com" %}
|
||||
{% assign iconName = "simple-icons:npm" %}
|
||||
{% endif %}
|
||||
|
||||
{% if linkHref contains "github.com" %}
|
||||
{% assign iconName = "simple-icons:github" %}
|
||||
{% endif %}
|
||||
|
||||
{% if link.icon %}
|
||||
{% assign iconName = link.icon %}
|
||||
{% endif %}
|
||||
|
||||
{% assign linkTitle = "Voir sur " | append: linkHref %}
|
||||
{% if linkHref contains "codeberg.org" %}
|
||||
{% assign linkTitle = "Source sur Codeberg" %}
|
||||
{% endif %}
|
||||
|
||||
{% if linkHref contains "npmjs.com" %}
|
||||
{% assign linkTitle = "Voir sur NPM" %}
|
||||
{% endif %}
|
||||
|
||||
{% if linkHref contains "github.com" %}
|
||||
{% assign linkTitle = "Source sur Github" %}
|
||||
{% endif %}
|
||||
|
||||
{% if link.title %}
|
||||
{% assign linkTitle = link.title %}
|
||||
{% endif %}
|
||||
|
||||
{% link linkHref, "_blank", "data-ghost-button" %}{% icon iconName %} <span class="sr-only">{{ linkTitle }}</span>{% endlink %}
|
||||
|
|
@ -8,7 +8,8 @@
|
|||
link: data.link,
|
||||
title: data.title,
|
||||
location: data.location,
|
||||
description: data.description %}
|
||||
description: data.description,
|
||||
templateContent: elements.templateContent %}
|
||||
{%- endfor -%}
|
||||
</ol>
|
||||
{% endif %}
|
||||
|
|
@ -1,13 +1,12 @@
|
|||
<footer class="wrapper-full">
|
||||
<div>
|
||||
{% render 'partials/components/socials', socials: author.socials, mail: author.mail, showLabel: false %}
|
||||
<ul class="list-inline">
|
||||
<li>Réalisé avec {% render 'partials/components/link', label: "Eleventy", href: "https://11ty.dev/", target: "_blank", rel: "nofollow" %}</li>
|
||||
{% if site.repository and site.repository != "" %}
|
||||
<li>Source sur {% render 'partials/components/link', label: site.repoSrc, href: site.repository, target: "_blank", rel: "nofollow" %}</li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
|
||||
{% render 'partials/components/socials', socials: author.socials, mail: author.mail, showLabel: false %}
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
|
|
|
|||
|
|
@ -21,3 +21,5 @@
|
|||
<meta property="og:url" content="{{ currentUrl }}" />
|
||||
|
||||
<link rel="icon" href="/favicon.ico" sizes="any">
|
||||
<link rel="icon" href="/favicon.svg" type="image/svg+xml">
|
||||
<meta name="theme-color" content="#4a7798">
|
||||
|
|
|
|||
BIN
src/assets/favicon.ico
Normal file
BIN
src/assets/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
3
src/assets/favicon.svg
Normal file
3
src/assets/favicon.svg
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
<svg width="513" height="512" viewBox="0 0 513 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M193.735 176.324C230.875 112.227 291.301 94.8749 342.331 109.561C393.504 124.288 435.509 171.284 435.509 236.933V240.933H439.509C462.102 240.933 479.224 251.012 490.768 266.21C502.388 281.51 508.402 302.095 508.254 322.848C508.106 343.597 501.801 364.144 489.25 379.423C476.784 394.599 457.974 404.82 432.143 404.82C419.241 404.82 340.344 405.127 260.395 405.434C180.56 405.741 99.6731 406.046 82.3157 406.047C56.4777 405.153 37.3048 394.406 24.4192 378.889C11.458 363.281 4.72155 342.665 4.27759 322.024C3.83347 301.373 9.69302 281.024 21.5002 265.929C33.2262 250.938 50.95 240.934 74.8645 240.934H79.0627L78.8606 236.741C77.096 200.273 94.3112 178.238 116.632 168.794C139.268 159.218 167.541 162.413 187.889 177.529L191.488 180.203L193.735 176.324Z" fill="#FAFAFA" stroke="#0A0A0A" stroke-width="8"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 919 B |
1
src/assets/line.svg
Normal file
1
src/assets/line.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="6.65 41.33 76.65 7.35"><path fill="#3e688b" d="M73.529 46.831c.428-.098.875-.162 1.334-.213.963-.115 1.953-.142 2.818-.256-2.631-.395-5.303-.28-7.434-.291-2.525-.011-5.484.01-9.316-.038-7.313-.088-17.271-.14-27.152.303-2.921.136-5.844.254-8.754.469l-3.281.25c-1.917.151-3.833.303-5.751.438-1.624.114-3.624.693-5.374.646-1.995-.054-3.385-1.032-3.818-2.912-.161-.683-.265-1.683.088-2.265.355-.584.552-.75.767-.907.52-.369 1.162-.656 1.468-.667 4.218-.12 8.926-.016 12.702.088 2.964.084 5.934.163 9.838.167 4.678.073 18.688.324 23.364.329 3.1.004 6.193.261 9.277.594 2.566.276 5.16.568 7.797.896 2.551.312 4.066.333 6.645.692.402.052.875.104 1.387.167.426.041.979.114 1.395.141.418.02.996.333 1.771 1.197.041 1.287-.313 1.958-.885 1.98-.521.254-.938.38-1.209.427-1.041.229-2.016.301-2.75.187-.494-.077-1.975.157-3.271.329-.957.135-1.5.156-2.984-.026-.781-.203-.801-.803.109-1.307a7.01 7.01 0 0 1 1.219-.418z"/></svg>
|
||||
|
After Width: | Height: | Size: 983 B |
|
|
@ -1,5 +1,7 @@
|
|||
.clouds-zone {
|
||||
top: 70px;
|
||||
overflow-x: hidden;
|
||||
top: 0;
|
||||
padding-top: 70px;
|
||||
inset-inline: 0;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
margin-bottom: .4em;
|
||||
}
|
||||
.hero-title .accent-font {
|
||||
font-size: 1.5em;
|
||||
font-size: clamp(1.25em, 3vmax, 1.5em);
|
||||
line-height: 1;
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
|
|
|
|||
|
|
@ -14,20 +14,20 @@
|
|||
position: absolute;
|
||||
inset: 1.5rem 0 0 1.5rem;
|
||||
}
|
||||
.timeline li {
|
||||
.timeline > li {
|
||||
--size: 3rem;
|
||||
padding: 0 0 0 calc(var(--size) + 0.8rem);
|
||||
margin: 1.4rem 0;
|
||||
position: relative;
|
||||
list-style: none;
|
||||
}
|
||||
.timeline li:last-child {
|
||||
.timeline > li:last-child {
|
||||
margin-bottom: 3rem;
|
||||
}
|
||||
.timeline li:first-child {
|
||||
.timeline > li:first-child {
|
||||
margin-top: -20px;
|
||||
}
|
||||
.timeline li:before {
|
||||
.timeline > li:before {
|
||||
content: "";
|
||||
aspect-ratio: 1;
|
||||
inline-size: var(--size);
|
||||
|
|
@ -41,6 +41,6 @@
|
|||
inset-inline-start: 0;
|
||||
transform: translateY(50%);
|
||||
}
|
||||
.timeline li:hover:before {
|
||||
.timeline > li:hover:before {
|
||||
border-color: var(--color-secondary-600);
|
||||
}
|
||||
|
|
@ -4,14 +4,18 @@ footer {
|
|||
}
|
||||
footer > div {
|
||||
place-content: center space-between;
|
||||
align-items: center;
|
||||
align-items: start;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
footer .list-inline a {
|
||||
--item-color: var(--text-2);
|
||||
text-decoration: underline;
|
||||
}
|
||||
footer .list-inline a:hover {
|
||||
--item-color: var(--text);
|
||||
}
|
||||
footer .socials-list {
|
||||
--item-gap: 0.2ch;
|
||||
--item-separator: "";
|
||||
|
|
@ -19,4 +23,10 @@ footer .socials-list {
|
|||
}
|
||||
footer .button.button {
|
||||
--button-padding: .2em;
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
footer > div {
|
||||
align-items: center;
|
||||
flex-direction: row-reverse;
|
||||
}
|
||||
}
|
||||
|
|
@ -25,14 +25,20 @@ header nav li {
|
|||
header nav a {
|
||||
text-underline-offset: 0.4rem;
|
||||
text-decoration: none;
|
||||
position: relative;
|
||||
}
|
||||
header nav a:hover {
|
||||
text-decoration: underline;
|
||||
text-decoration-thickness: 0.12rem;
|
||||
}
|
||||
header nav a:hover,
|
||||
header nav a[aria-current="page"] {
|
||||
color: var(--text-2);
|
||||
font-weight: var(--font-weight-semibold);
|
||||
text-decoration: underline;
|
||||
text-decoration-thickness: 0.12rem;
|
||||
color: var(--color-secondary-950);
|
||||
text-shadow: 1px 0 0 currentColor;
|
||||
}
|
||||
header nav a:hover::after,
|
||||
header nav a[aria-current="page"]:after {
|
||||
content: "";
|
||||
background: no-repeat url("/line.svg");
|
||||
position: absolute;
|
||||
height: 7px;
|
||||
width: 100%;
|
||||
bottom: -6px;
|
||||
left: 0;
|
||||
}
|
||||
|
|
@ -116,4 +116,18 @@ section {
|
|||
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%);
|
||||
}
|
||||
|
||||
|
||||
.underline {
|
||||
position: relative;
|
||||
}
|
||||
.underline::after {
|
||||
content: "";
|
||||
background: no-repeat url("/line.svg");
|
||||
position: absolute;
|
||||
height: 10px;
|
||||
width: 100%;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
|
@ -1,11 +1,10 @@
|
|||
:root {
|
||||
--accent-color: blue;
|
||||
--font-body: Arial, sans-serif;
|
||||
--font-display: 'Times New Roman', Times, serif;
|
||||
--accent-color: #1155CC;
|
||||
--font-body: Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
html {
|
||||
font-family: var(--font-body, Arial, sans-serif);
|
||||
font-family: var(--font-body, Helvetica, Arial, sans-serif);
|
||||
margin: 0;
|
||||
}
|
||||
body {
|
||||
|
|
@ -19,14 +18,13 @@ body {
|
|||
}
|
||||
|
||||
h1 {
|
||||
text-align:center;
|
||||
font-family: var(--font-display, 'Times New Roman', Times, serif);
|
||||
font-size: 2rem;
|
||||
text-align: center;
|
||||
font-size: 1.8rem;
|
||||
margin: 0;
|
||||
line-height: 1.6;
|
||||
}
|
||||
h2 {
|
||||
color : var(--accent-color, blue);
|
||||
color : var(--accent-color, #1155CC);
|
||||
}
|
||||
p {
|
||||
margin: 0;
|
||||
|
|
@ -37,6 +35,7 @@ ul {
|
|||
li::marker {
|
||||
color: var(--accent-color, blue);
|
||||
}
|
||||
a { color : var(--accent-color, #1155CC); }
|
||||
section {margin-bottom: 1.2rem;}
|
||||
|
||||
.justify-center {
|
||||
|
|
@ -56,7 +55,7 @@ section {margin-bottom: 1.2rem;}
|
|||
display: contents;
|
||||
}
|
||||
.list-inline li + li::before {
|
||||
content: '|';
|
||||
content: var(--item-separator, '|');
|
||||
}
|
||||
|
||||
.title {
|
||||
|
|
@ -82,9 +81,12 @@ section ul {padding: 0;margin-left: 1.2rem;}
|
|||
margin-inline: 1rem;
|
||||
margin-bottom: .4rem;
|
||||
}
|
||||
.subtitle .list-inline { --item-separator: "•"; gap: .4rem; }
|
||||
.subtitle .timeSection { font-size: .9rem; }
|
||||
.subtitle h3,
|
||||
.subtitle h4,
|
||||
.subtitle p { margin: 0; }
|
||||
.subtitle a { font-size: .9em; }
|
||||
.subtitle > :first-child {justify-self: start;}
|
||||
.subtitle > :last-child {justify-self: end;}
|
||||
.subtitle ~ ul {font-size: .9rem;}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
---
|
||||
title: Artionet - Web Agency
|
||||
role: Stagiaire
|
||||
role: Stagiaire Front-End
|
||||
description: Stage de 4ème année de CFC, développement web
|
||||
location: Delémont
|
||||
location: Delémont, JU
|
||||
link: https://www.artionet.ch
|
||||
dates:
|
||||
start: 2021
|
||||
end: 2022
|
||||
---
|
||||
|
||||
* Stage de 4ème année de CFC, développement web
|
||||
* Stage de 4ème année de CFC
|
||||
* **Travail de diplôme**: Amélioration d'un logiciel de l'entreprise en PHP
|
||||
* Création et intégration de nouveaux sites à l'aide du CMS IceCube2.Net
|
||||
|
|
|
|||
|
|
@ -1,12 +1,16 @@
|
|||
---
|
||||
title: Artionet - Web Agency
|
||||
role: Développeur
|
||||
role: Développeur Front-End
|
||||
description: Développeur Front-End et Support Client
|
||||
location: Delémont
|
||||
location: Delémont, JU
|
||||
link: https://www.artionet.ch
|
||||
dates:
|
||||
start: 2022
|
||||
end: 2025
|
||||
---
|
||||
|
||||
* Développeur Front-End et Support Client
|
||||
* Design et développement de sites web
|
||||
* Intégration de nouveaux sites à l'aide du CMS IceCube2.Net
|
||||
* Traitement des demandes du support client et maintenance des sites
|
||||
* Améliorations du CMS IceCube2.Net
|
||||
* **Technologies utilisées**: HTML, CSS, JS, Figma, jQuery, Booststrap
|
||||
|
|
@ -2,10 +2,11 @@
|
|||
title: Ecole des métiers Technique
|
||||
role: Etudiant
|
||||
description: CFC d'informaticien d'entreprise
|
||||
location: Porrentruy
|
||||
location: Porrentruy, JU
|
||||
dates:
|
||||
start: 2018
|
||||
end: 2022
|
||||
---
|
||||
|
||||
* CFC d'informaticien d'entreprise
|
||||
* CFC d'informaticien d'entreprise
|
||||
* **Sujets couverts**: HTML, CSS, JS, SQL, Git, Gestion de projet, Réseau/NAS, C++, Java, Linux, Docker
|
||||
BIN
src/favicon.ico
BIN
src/favicon.ico
Binary file not shown.
|
Before Width: | Height: | Size: 15 KiB |
|
|
@ -3,6 +3,9 @@ title: Compétences
|
|||
displayedTitle: Mes compétences
|
||||
order: 1
|
||||
showTitle: false
|
||||
pdf:
|
||||
order: 3
|
||||
showTitle: true
|
||||
---
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ title: Expériences
|
|||
displayedTitle: Mes expériences
|
||||
collection: experiences
|
||||
order: 3
|
||||
pdf:
|
||||
order: 1
|
||||
---
|
||||
|
||||
{% assign experiences = collections[collection] %}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@
|
|||
title: A propos
|
||||
order: 0
|
||||
template: 'hero'
|
||||
excludeFromPdf: true
|
||||
pdf:
|
||||
exclude: true
|
||||
eleventyComputed:
|
||||
description: "{{ author.about }}"
|
||||
displayedTitle: "Moi c'est <span class='accent-font'>{{ author.firstName }}</span><br>Et je suis {{ author.occupation }}"
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ title: Projets
|
|||
displayedTitle: Mes projets
|
||||
collection: projects
|
||||
order: 2
|
||||
pdf:
|
||||
order: 2
|
||||
---
|
||||
|
||||
{% assign projects = collections[collection] %}
|
||||
|
|
|
|||
|
|
@ -25,13 +25,10 @@ links:
|
|||
</ul>
|
||||
</section>
|
||||
|
||||
<p>
|
||||
The time is {{ "now" | date: "%Y-%m-%d %H:%M" }}
|
||||
<p style="margin-bottom: 1ch;">{{ author.about }}</p>
|
||||
|
||||
</p>
|
||||
|
||||
{% for section in collections.sections %}
|
||||
{% if section.data.excludeFromPdf != true %}
|
||||
{% for section in collections.pdfSections %}
|
||||
{% if section.data.pdf.exclude != true %}
|
||||
{% assign items = collections[section.data.collection] %}
|
||||
{% include 'partials/components/pdf/section' %}
|
||||
{% endif %}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,13 @@
|
|||
---
|
||||
title: Cancre Simulator
|
||||
description: Un jeu fait pour les Portes Ouvertes 2020
|
||||
description: Un jeu multijoueur réalisé pour les Portes Ouvertes 2020 de l'EMT
|
||||
background: linear-gradient(45deg, rgb(255, 241, 241) 30%, rgb(255, 196, 196) 100%)
|
||||
links:
|
||||
- title: Voir sur Github
|
||||
link: https://github.com
|
||||
icon: simple-icons:github
|
||||
- https://github.com/divtec-cejef/2020-JCO-CancreSimulator
|
||||
tags:
|
||||
- C#
|
||||
- Unity
|
||||
---
|
||||
|
||||
* desc1
|
||||
* desc2
|
||||
* {{description}}
|
||||
* **Technologies** : {{ tags | join: ", " }}
|
||||
16
src/projects/eleventy-plugin-pdf.md
Normal file
16
src/projects/eleventy-plugin-pdf.md
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
title: eleventy-plugin-pdf
|
||||
description: Un plugin pour Eleventy qui permet de créer un fichier PDF
|
||||
background: linear-gradient(45deg, rgb(255, 226, 224) 30%, rgb(255, 157, 154) 100%)
|
||||
order: 0
|
||||
links:
|
||||
- https://www.npmjs.com/package/eleventy-plugin-pdf
|
||||
- https://codeberg.org/TheThomaas/eleventy-plugin-pdf
|
||||
tags:
|
||||
- 11ty
|
||||
- NPM
|
||||
- JS
|
||||
---
|
||||
|
||||
* Un plugin pour Eleventy qui permet de créer un fichier PDF à l'aide de Puppeteer
|
||||
* **Technologies** : {{ tags | join: ", " }}
|
||||
|
|
@ -1,10 +1,14 @@
|
|||
---
|
||||
title: Qui est-ce ?
|
||||
description: Un "Qui est-ce ?" fait en Python et avec des LEGO Mindstorms
|
||||
description: Un "Qui est-ce ?" fait en Python et avec des LEGO Mindstorms (Projet scolaire)
|
||||
order: 9
|
||||
links:
|
||||
- title: Voir sur Github
|
||||
link: https://github.com
|
||||
icon: simple-icons:github
|
||||
- https://github.com/divtec-cejef/2019-CCH-BrickPi7-Thomas-Mathieu
|
||||
tags:
|
||||
- Python
|
||||
---
|
||||
- TTS
|
||||
---
|
||||
|
||||
* {{description}}
|
||||
* Le joueur affronte l'ordinateur. Les deux se posent des questions à l'aide d'un sélecteur rotatif
|
||||
* Le robot pose également les questions à haute voix
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
---
|
||||
title: LDAP
|
||||
description: Ajouter, voir et se connecter à des utilisateurs LDAP depuis un site
|
||||
description: Edition d'utilisateurs d'un annuaire LDAP depuis un site (Projet scolaire)
|
||||
background: linear-gradient(45deg, rgb(220, 246, 255) 30%, rgb(178, 239, 255) 100%)
|
||||
links:
|
||||
- title: Voir le site
|
||||
link: https://google.com
|
||||
icon: link
|
||||
- title: Voir sur Github
|
||||
link: https://github.com
|
||||
icon: simple-icons:github
|
||||
- https://github.com/TheThomaas/PHP-M159-LDAP
|
||||
tags:
|
||||
- PHP
|
||||
- LDAP
|
||||
---
|
||||
- SQL
|
||||
---
|
||||
|
||||
* {{description}}
|
||||
* **Technologies** : {{ tags | join: ", " }}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
{
|
||||
"permalink": false,
|
||||
"order": 1
|
||||
"order": 8
|
||||
}
|
||||
|
|
@ -1,14 +1,14 @@
|
|||
---
|
||||
title: Sigfox Temperature
|
||||
description: Des capteurs de température affichés sur un tableau de bord
|
||||
title: Capteurs de temperature
|
||||
description: Des capteurs de température affichés sur un tableau de bord (Projet scolaire)
|
||||
background: linear-gradient(45deg, var(--color-secondary-100) 30%, var(--color-secondary-300) 100%)
|
||||
links:
|
||||
- title: Voir le site
|
||||
link: https://google.com
|
||||
icon: link
|
||||
- title: Voir sur Github
|
||||
link: https://github.com
|
||||
icon: simple-icons:github
|
||||
- https://github.com/TheThomaas/iot_temperature_humidity
|
||||
tags:
|
||||
- JS
|
||||
- IOT
|
||||
---
|
||||
- PHP
|
||||
- Arduino
|
||||
---
|
||||
|
||||
* {{description}}
|
||||
* **Technologies** : {{ tags | join: ", " }}
|
||||
|
|
@ -1,10 +1,11 @@
|
|||
---
|
||||
title: Snake
|
||||
description: Un snake réalisé en Java
|
||||
description: Un snake réalisé en Java (Projet scolaire)
|
||||
background: linear-gradient(45deg, var(--color-primary-50) 30%, var(--color-primary-200) 100%)
|
||||
links:
|
||||
- title: Voir sur Github
|
||||
link: https://github.com
|
||||
icon: simple-icons:github
|
||||
- https://github.com/TheThomaas/snake
|
||||
tags:
|
||||
- Java
|
||||
---
|
||||
---
|
||||
|
||||
* {{description}}
|
||||
Loading…
Reference in a new issue