this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

✨ Some more stuff

+184 -100
+2 -2
components/gallery.templ
··· 11 11 } 12 12 13 13 templ GalleryPage(works []ortfodb.AnalyzedWork, language string) { 14 - <main class={ galleryPageMain() }> 14 + <section class={ galleryPageMain() }> 15 15 { children... } 16 16 @WorksGrid(works, language, "works") 17 - </main> 17 + </section> 18 18 }
+77 -77
i18n/fr.po
··· 27 27 msgid "1791<sup>st</sup>" 28 28 msgstr "1791<sup>e</sup>" 29 29 30 + msgid "2022—now" 31 + msgstr "2022—maintenant" 32 + 33 + msgid "A <a href=\"https://svelte.dev\">Svelte</a>-powered framework for building web applications of all sizes, with a beautiful development experience and flexible filesystem-based routing" 34 + msgstr "Un framework basé sur <a href=\"https://svelte.dev\">Svelte</a> pour la construction d'applications web de toutes tailles, avec une belle expérience de développement et un routage flexible basé sur le système de fichiers" 35 + 30 36 msgid "A <a href='https://svelte.dev'>Svelte</a>-powered framework for building web applications of all sizes, with a beautiful development experience and flexible filesystem-based routing" 31 37 msgstr "Un framework alimenté par <a href='https://svelte.dev'>Svelte</a> pour construire des applications web de toutes tailles, avec une belle expérience de développement et un routage flexible basé sur le système de fichiers." 32 38 33 39 msgid "A PHP Model-View-Controller framework" 34 40 msgstr "Un framework PHP Modèle-Vue-Contrôleur" 35 41 36 - msgid "A high-performance template engine heavily influenced by <a href='https://haml.info/'>Haml</a> and implemented with JavaScript for Node.js and browsers." 37 - msgstr "Un moteur de template haute performance fortement influencé par <a href='https://haml.info/'>Haml</a> et implémenté avec JavaScript pour Node.js et les navigateurs." 38 - 39 - msgid "A simple cross-platform library to create graphical user interfaces in [Go](/using/go) that work on Android, iOS, Linux, MacOS and Windows." 40 - msgstr "Une bibliothèque multiplateforme simple pour créer des interfaces graphiques en [Go](/using/go) qui fonctionnent sur Android, iOS, Linux, MacOS et Windows." 41 - 42 - msgid "A strongly typed, safe programming language" 43 - msgstr "Un langage de programmation sûr et fortement typé" 44 - 45 - msgid "Application Programming Interfaces, mostly _Web_ APIs, meaning machine-redable sites that allow data processing and interaction without going to the client-facing website" 46 - msgstr "Interfaces de programmation d'applications, principalement des API _Web_, c'est-à-dire des sites accessibles aux machines qui permettent le traitement des données et l'interaction sans passer par le site web orienté vers le client." 47 - 48 - msgid "Get my resume" 49 - msgstr "Voir mon CV" 50 - 51 - msgid "Hi! I'm Ewen Le Bihan." 52 - msgstr "Hey! Je suis Ewen Le Bihan." 53 - 54 - msgid "I'm interested in almost anything that is both creative and digital." 55 - msgstr "Je suis intéressé par tout ce qui est à la fois créatif et numérique." 56 - 57 - msgid "Proudly powered by <a href=\"https://github.com/ortfo\">ortfo</a>, my portfolio database management system and <a href=\"https://github.com/a-h/templ\">templ</a>" 58 - msgstr "Fièrement propulsé par <a href=\"https://github.com/ortfo\">ortfo</a>, mon système de gestion de base de données pour les portfolios et <a href=\"https://github.com/a-h/templ\">templ</a>" 59 - 60 - msgid "Source code" 61 - msgstr "Code source" 62 - 63 - msgid "Un système de génération de portfolios faits maison." 64 - msgstr "Un système de génération de portfolios faits maison." 65 - 66 - msgid "2022—now" 67 - msgstr "2022—maintenant" 68 - 69 - msgid "A <a href=\"https://svelte.dev\">Svelte</a>-powered framework for building web applications of all sizes, with a beautiful development experience and flexible filesystem-based routing" 70 - msgstr "Un framework basé sur <a href=\"https://svelte.dev\">Svelte</a> pour la construction d'applications web de toutes tailles, avec une belle expérience de développement et un routage flexible basé sur le système de fichiers" 71 - 72 42 msgid "A bundler for javascript and friends. Packs many modules into a few bundled assets." 73 43 msgstr "Un bundler pour javascript et autres. Regroupe de nombreux modules en quelques fichiers groupés." 74 44 75 45 msgid "A collaborative web-based vector editor, UX design and prototyping tool" 76 46 msgstr "Un éditeur vectoriel, outil de conception et de prototypage UX collaboratif basé sur le web" 77 - 78 - msgid "Works" 79 - msgstr "Œuvres" 80 - 81 - msgid "command line" 82 - msgstr "terminal" 83 - 84 - msgid "personal account" 85 - msgstr "compte personnel" 86 - 87 - msgid "web extension" 88 - msgstr "extension pour navigateur" 89 47 90 48 msgid "A community-maintained Python library for creating mathematical animations" 91 49 msgstr "Une bibliothèque Python permettant la création d'animations mathématiques" ··· 114 72 msgid "A high-performance template engine heavily influenced by <a href=\"https://haml.info/\">Haml</a> and implemented with JavaScript for Node.js and browsers." 115 73 msgstr "Un moteur de template haute performance fortement influencé par <a href=\"https://haml.info\"/>Haml</a> et implémenté avec JavaScript pour Node.js et les navigateurs." 116 74 75 + msgid "A high-performance template engine heavily influenced by <a href='https://haml.info/'>Haml</a> and implemented with JavaScript for Node.js and browsers." 76 + msgstr "Un moteur de template haute performance fortement influencé par <a href='https://haml.info/'>Haml</a> et implémenté avec JavaScript pour Node.js et les navigateurs." 77 + 117 78 msgid "A high-quality typesetting & document preparation system" 118 79 msgstr "Un système de composition et de préparation des documents de haute qualité" 119 80 81 + msgid "A simple cross-platform library to create graphical user interfaces in [Go](/using/go) that work on Android, iOS, Linux, MacOS and Windows." 82 + msgstr "Une bibliothèque multiplateforme simple pour créer des interfaces graphiques en [Go](/using/go) qui fonctionnent sur Android, iOS, Linux, MacOS et Windows." 83 + 84 + msgid "A strongly typed, safe programming language" 85 + msgstr "Un langage de programmation sûr et fortement typé" 86 + 87 + msgid "Application Programming Interfaces, mostly _Web_ APIs, meaning machine-redable sites that allow data processing and interaction without going to the client-facing website" 88 + msgstr "Interfaces de programmation d'applications, principalement des API _Web_, c'est-à-dire des sites accessibles aux machines qui permettent le traitement des données et l'interaction sans passer par le site web orienté vers le client." 89 + 90 + msgid "Get my resume" 91 + msgstr "Voir mon CV" 92 + 120 93 msgid "A human friendly data serialization standard for all programming languages" 121 94 msgstr "Une norme de sérialisation des données pour tous les langages de programmation" 122 95 ··· 129 102 msgid "A language which compiles to JavaScript that adds many features to assist in functional style programming. LiveScript is an indirect descendant of CoffeeScript, with which it has much compatibility." 130 103 msgstr "Un langage qui se compile en JavaScript et qui ajoute de nombreuses fonctionnalités pour aider à la programmation de style fonctionnel. LiveScript est un descendant indirect de CoffeeScript, avec lequel il a une grande compatibilité." 131 104 132 - msgid "Computer science" 133 - msgstr "Sciences du numérique" 134 - 135 105 msgid "A library that parses command-line arguments based on a help message. “Don't write parser code: a good help message already has all the necessary information in it”" 136 106 msgstr "Une bibliothèque qui analyse les arguments de la ligne de commande sur la base d'un message d'aide. \"N'écrivez pas de code pour parser vos arguments : un bon message d'aide contient déjà toutes les informations nécessaires\"." 107 + 108 + msgid "Computer science" 109 + msgstr "Sciences du numérique" 137 110 138 111 msgid "A library that parses command-line arguments based on a help message. “Don’t write parser code: a good help message already has all the necessary information in it”" 139 112 msgstr "Une bibliothèque qui analyse les arguments de ligne de commande en fonction d'un message d'aide. « Ne pas écrire de code d'analyse : un bon message d'aide contient déjà toutes les informations nécessaires »" ··· 168 141 msgid "A programming language that compiles to JavaScript. It adds syntactic sugar inspired by Ruby, Python and Haskell in an effort to enhance JavaScript's brevity and readability. Specific additional features include list comprehension and destructuring assignment" 169 142 msgstr "Un langage de programmation qui se compile en JavaScript. Il ajoute du sucre syntactique inspiré de Ruby, Python et Haskell dans le but d'améliorer la brièveté et la lisibilité de JavaScript. Les caractéristiques supplémentaires spécifiques comprennent la définition de listes en compréhension et l'affectation par déstructuration" 170 143 144 + msgid "Hi! I'm Ewen Le Bihan." 145 + msgstr "Hey! Je suis Ewen Le Bihan." 146 + 147 + msgid "I'm interested in almost anything that is both creative and digital." 148 + msgstr "Je suis intéressé par tout ce qui est à la fois créatif et numérique." 149 + 150 + msgid "Proudly powered by <a href=\"https://github.com/ortfo\">ortfo</a>, my portfolio database management system and <a href=\"https://github.com/a-h/templ\">templ</a>" 151 + msgstr "Fièrement propulsé par <a href=\"https://github.com/ortfo\">ortfo</a>, mon système de gestion de base de données pour les portfolios et <a href=\"https://github.com/a-h/templ\">templ</a>" 152 + 153 + msgid "Source code" 154 + msgstr "Code source" 155 + 156 + msgid "Un système de génération de portfolios faits maison." 157 + msgstr "Un système de génération de portfolios faits maison." 158 + 159 + msgid "Works" 160 + msgstr "Œuvres" 161 + 162 + msgid "command line" 163 + msgstr "terminal" 164 + 165 + msgid "personal account" 166 + msgstr "compte personnel" 167 + 168 + msgid "web extension" 169 + msgstr "extension pour navigateur" 170 + 171 171 msgid "A programming language that compiles to JavaScript. It adds syntactic sugar inspired by Ruby, Python and Haskell in an effort to enhance JavaScript’s brevity and readability. Specific additional features include list comprehension and destructuring assignment" 172 172 msgstr "Un langage de programmation qui se compile en JavaScript. Il ajoute du sucre syntaxique inspiré de Ruby, Python et Haskell dans le but d'améliorer la brièveté et la lisibilité de JavaScript. Les fonctionnalités supplémentaires spécifiques incluent la compréhension de liste et l'affectation par décomposition" 173 173 ··· 342 342 msgid "Programs that run in the terminal, a text-based interface for computers." 343 343 msgstr "Programmes qui s'exécutent dans une console, une interface de texte pour les ordinateurs." 344 344 345 - msgid "Set of glyphs (letters, punctuation marks and more) that define how text looks." 346 - msgstr "Ensemble de glyphes (lettres, signes de ponctuation et plus encore) qui définissent l'apparence du texte." 347 - 348 345 msgid "Proudly\n" 349 346 " <strong>\n" 350 347 " not\n" ··· 365 362 msgid "Redirecting you to my github incubator..." 366 363 msgstr "Redirection vers mon incubateur github..." 367 364 365 + msgid "Set of glyphs (letters, punctuation marks and more) that define how text looks." 366 + msgstr "Ensemble de glyphes (lettres, signes de ponctuation et plus encore) qui définissent l'apparence du texte." 367 + 368 368 msgid "School projects and school-related projects" 369 369 msgstr "Projets scolaires et projets liés à l'école" 370 370 ··· 383 383 msgid "The standard markup language for documents designed to be displayed in a web browser" 384 384 msgstr "Le langage de balisage standard conçu pour représenter des pages web" 385 385 386 + msgid "The study of language" 387 + msgstr "L'étude du langage" 388 + 386 389 msgid "arts" 387 390 msgstr "arts" 388 391 389 392 msgid "education" 390 393 msgstr "éducation" 391 394 392 - msgid "experience" 393 - msgstr "expérience" 394 - 395 - msgid "hours of use" 396 - msgstr "heures d'utilisation" 397 - 398 - msgid "The study of language" 399 - msgstr "L'étude du langage" 400 - 401 395 msgid "These are my creations." 402 396 msgstr "Voici mes créations." 403 397 ··· 419 413 msgid "With a scientific side" 420 414 msgstr "Avec un côté scientifique" 421 415 416 + msgid "experience" 417 + msgstr "expérience" 418 + 422 419 msgid "a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache" 423 420 msgstr "un serveur web qui peut aussi être utilisé comme un proxy inverse, un répartiteur de charge, un proxy de courrier et un cache HTTP" 424 421 ··· 442 439 443 440 msgid "apis" 444 441 msgstr "APIs" 442 + 443 + msgid "hours of use" 444 + msgstr "heures d'utilisation" 445 445 446 446 msgid "app" 447 447 msgstr "application" ··· 677 677 msgid "skills" 678 678 msgstr "compétences" 679 679 680 - msgid "this work is part of the following collection" 681 - msgstr "ce projet fait partie de la collection suivante" 682 - 683 - msgid "what" 684 - msgstr "quoi" 685 - 686 680 msgid "slide into my dms at" 687 681 msgstr "contactez-moi par message privé à" 688 682 683 + msgid "slide into my twitter dms" 684 + msgstr "contactez-moi par message privé sur twitter à" 685 + 686 + msgid "this work is part of the following collection" 687 + msgstr "ce projet fait partie de la collection suivante" 688 + 689 689 msgid "thumbnails" 690 690 msgstr "miniatures" 691 691 ··· 695 695 msgid "typefaces" 696 696 msgstr "polices de caractères" 697 697 698 - msgid "work time tracked by <a href=\"https://wakatime.com\">WakaTime</a>" 699 - msgstr "temps de travail suivi par <a href=\"https://wakatime.com\">WakaTime</a>" 700 - 701 - msgid "slide into my twitter dms" 702 - msgstr "contactez-moi par message privé sur twitter à" 698 + msgid "what" 699 + msgstr "quoi" 703 700 704 701 msgid "source code at" 705 702 msgstr "code source disponible à" 706 - 707 - msgid "web extensions" 708 - msgstr "extensions web" 709 703 710 704 msgid "tags" 711 705 msgstr "catégories" ··· 739 733 740 734 msgid "web" 741 735 msgstr "web" 736 + 737 + msgid "web extensions" 738 + msgstr "extensions web" 739 + 740 + msgid "work time tracked by <a href=\"https://wakatime.com\">WakaTime</a>" 741 + msgstr "temps de travail suivi par <a href=\"https://wakatime.com\">WakaTime</a>" 742 742 743 743 msgid "work in progress" 744 744 msgstr "work in progress"
+1 -1
main.go
··· 54 54 55 55 translator := HttpTranslator{ 56 56 translations: translations, 57 - ch: templ.Handler(pages.Layout(page, collections.URLsToNames(true, translations.language), sites, translations.language)), 57 + ch: templ.Handler(pages.Layout(page, path, collections.URLsToNames(true, translations.language), sites, translations.language)), 58 58 } 59 59 60 60 server.Handle(fmt.Sprintf("/%s", path), translator)
+90 -18
pages/layout.templ
··· 3 3 import "github.com/ewen-lbh/portfolio/shared" 4 4 5 5 func domainPerLocale(locale string) string { 6 + // TODO generalize 6 7 if shared.IsDev() { 7 8 switch locale { 8 9 case "fr": 9 - return "localhost:8082" 10 + return "http://localhost:8082" 10 11 default: 11 - return "localhost:8081" 12 + return "http://localhost:8081" 12 13 } 13 14 } 14 15 15 16 switch locale { 16 17 case "fr": 17 - return "fr.ewen.works" 18 + return "https://fr.ewen.works" 18 19 default: 19 - return "en.ewen.works" 20 + return "https://en.ewen.works" 20 21 } 21 22 } 22 23 ··· 88 89 height: 1.5rem; 89 90 } 90 91 91 - templ Layout(contents templ.Component, collections map[string]string, sites []shared.Site, lang string) { 92 + func pathInOtherLanguage(language string, path string) templ.SafeURL { 93 + return templ.URL(domainPerLocale(otherLocale(language)) + "/" + path) 94 + } 95 + 96 + script toggleNav() { 97 + var id = (id) => document.getElementById(id); 98 + var open, btnIcon; 99 + open = id('nav').dataset.state === "open" 100 + btnIcon = id('nav-toggle'); 101 + if (open) { 102 + document.unlockBodyScroll(); 103 + btnIcon.innerText = '≡'; 104 + return id('nav').dataset.state = 'closed'; 105 + } else { 106 + document.lockBodyScroll(); 107 + btnIcon.innerText = '×'; 108 + return id('nav').dataset.state = 'open'; 109 + } 110 + } 111 + 112 + css navigation() { 113 + position: fixed; 114 + top: 0; 115 + right: 0; 116 + font-size: 2rem; 117 + z-index: 10; 118 + } 119 + 120 + css navigationLinks() { 121 + display: flex; 122 + flex-direction: column; 123 + flex-wrap: wrap; 124 + justify-content: center; 125 + list-style: none; 126 + padding: 1rem 2rem; 127 + margin: 0; 128 + } 129 + 130 + css navigationItem() { 131 + display: block; 132 + text-align: right; 133 + } 134 + 135 + css navigationLink() { 136 + font-weight: 600; 137 + text-decoration: none; 138 + opacity: 0.75; 139 + transition: all 0.125s ease; 140 + } 141 + 142 + templ Layout(contents templ.Component, currentPath string, collections map[string]string, sites []shared.Site, lang string) { 92 143 <!DOCTYPE html> 93 144 <html lang={ lang }> 94 145 <head> ··· 99 150 <link rel="stylesheet" href="https://assets.ewen.works/fonts/import.css"/> 100 151 <link rel="stylesheet" href="https://assets.ewen.works/global.css"/> 101 152 <script src={ string(shared.Asset("bricks.js")) }> </script> 102 - // <meta http-equiv="refresh" content="3"/> 103 153 </head> 104 154 <body> 105 155 <header> 106 - <nav> 107 - <a i18n href="/">Works</a> 108 - for _, entry := range shared.SortedKeys(collections) { 109 - <a href={ templ.URL("/" + entry.Key) }>{ entry.Value }</a> 110 - } 111 - switch otherLocale(lang) { 112 - case "fr": 113 - <button type="button" onclick={ switchDomain(domainPerLocale("fr")) }>Français</button> 114 - default: 115 - <button type="button" onclick={ switchDomain(domainPerLocale("en")) }>English</button> 116 - } 156 + @shared.OnHover(navigationLink(), shared.Declarations{ 157 + "opacity": "1", 158 + "font-weight": "800", 159 + }) 160 + @shared.CSS(shared.Selectors{ 161 + "#nav[data-state=closed] #nav-toggle": { 162 + "display": "none", 163 + }, 164 + }) 165 + <nav id="nav" data-state="closed" class={ navigation() }> 166 + <button id="nav-toggle" onclick={ toggleNav() }>≡</button> 167 + <ul class={ navigationLinks() }> 168 + <li class={ navigationItem() }> 169 + <a class={ navigationLink() } href="/" i18n>works</a> 170 + </li> 171 + for _, entry := range shared.SortedKeys(collections) { 172 + <li class={ navigationItem() }> 173 + <a class={ navigationLink() } href={ templ.URL("/" + entry.Key) }>{ entry.Value }</a> 174 + </li> 175 + } 176 + <li class={ navigationItem() }> 177 + <a class={ navigationLink() } href={ pathInOtherLanguage(lang, currentPath) }> 178 + switch otherLocale(lang) { 179 + case "fr": 180 + en français 181 + case "en": 182 + en anglais 183 + } 184 + </a> 185 + </li> 186 + </ul> 117 187 </nav> 118 188 </header> 119 - @contents 189 + <main> 190 + @contents 191 + </main> 120 192 <footer class={ footer() }> 121 193 <section> 122 194 <code>ewen.works/to/</code>
+14 -2
pages/work.templ
··· 118 118 } 119 119 120 120 css tagLink() { 121 - display: inline-block; 121 + display: inline-flex; 122 122 padding: 0.2em 0.5em; 123 123 text-decoration: none; 124 + align-items: center; 125 + column-gap: 0.25ch; 126 + opacity: 0.7; 124 127 } 125 128 126 129 css tagLinks() { ··· 129 132 justify-content: center; 130 133 } 131 134 135 + css hashtag() { 136 + font-family: Inconsolata, monospace; 137 + font-weight: 500; 138 + font-size: 1.5em; 139 + } 140 + 132 141 templ Work(work ortfodb.AnalyzedWork, tags []shared.Tag, techs []shared.Technology, lang string) { 133 142 @components.IntroWith( 134 143 shared.FormatDate(work.Metadata.CreatedAt(), "January 2006", lang), 135 144 work.Content[lang].Title.String(), 136 145 false, 137 146 ) { 147 + @shared.OnHover(tagLink(), shared.Declarations{ 148 + "opacity": "1", 149 + }) 138 150 <section class={ tagLinks() }> 139 151 for _, tag := range tags { 140 152 <a class={ tagLink() } href={ templ.URL("/" + tag.URLName()) }> 141 - #<i18n>{ tag.Singular }</i18n> 153 + <span class={ hashtag() }>#</span><i18n>{ tag.Singular }</i18n> 142 154 </a> 143 155 } 144 156 </section>