Merge pull request #1 from Bubobubobubobubo/guides
Refonte de l'architecture du site
This commit is contained in:
@ -2,6 +2,9 @@ import { defineMDSveXConfig as defineConfig } from "mdsvex";
|
|||||||
|
|
||||||
const config = defineConfig({
|
const config = defineConfig({
|
||||||
extensions: [".svelte.md", ".md", ".svx"],
|
extensions: [".svelte.md", ".md", ".svx"],
|
||||||
|
layout: {
|
||||||
|
guides: 'src/routes/guides/guides.svelte'
|
||||||
|
},
|
||||||
|
|
||||||
smartypants: {
|
smartypants: {
|
||||||
dashes: "oldschool",
|
dashes: "oldschool",
|
||||||
@ -11,4 +14,4 @@ const config = defineConfig({
|
|||||||
rehypePlugins: [],
|
rehypePlugins: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
export default config;
|
export default config;
|
||||||
@ -11,7 +11,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@sveltejs/adapter-auto": "^2.0.0",
|
"@sveltejs/adapter-auto": "^2.0.0",
|
||||||
"@sveltejs/adapter-static": "^2.0.3",
|
"@sveltejs/adapter-static": "^3.0.1",
|
||||||
"@sveltejs/kit": "^1.20.4",
|
"@sveltejs/kit": "^1.20.4",
|
||||||
"@tailwindcss/typography": "^0.5.9",
|
"@tailwindcss/typography": "^0.5.9",
|
||||||
"@types/node": "^20.8.10",
|
"@types/node": "^20.8.10",
|
||||||
@ -29,6 +29,7 @@
|
|||||||
},
|
},
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"marked": "^9.1.5"
|
"marked": "^9.1.5",
|
||||||
|
"vite-plugin-markdown": "^2.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
19
public/site.webmanifest
Normal file
19
public/site.webmanifest
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"name": "Livecoding.fr",
|
||||||
|
"short_name": "Livecoding.fr",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "favicon/android-chrome-192x192.png",
|
||||||
|
"sizes": "192x192",
|
||||||
|
"type": "image/png"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "favicon/android-chrome-512x512.png",
|
||||||
|
"sizes": "512x512",
|
||||||
|
"type": "image/png"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"theme_color": "#ffffff",
|
||||||
|
"background_color": "#ffffff",
|
||||||
|
"display": "standalone"
|
||||||
|
}
|
||||||
@ -4,6 +4,7 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
|
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
|
<meta name="theme-color" content="#ffffff">
|
||||||
%sveltekit.head%
|
%sveltekit.head%
|
||||||
</head>
|
</head>
|
||||||
<body data-sveltekit-preload-data="hover">
|
<body data-sveltekit-preload-data="hover">
|
||||||
|
|||||||
@ -9,13 +9,13 @@
|
|||||||
@apply text-xl;
|
@apply text-xl;
|
||||||
}
|
}
|
||||||
li {
|
li {
|
||||||
@apply list-disc text-xl py-1;
|
@apply list-disc text-xl py-1 ml-8;
|
||||||
}
|
}
|
||||||
h1 {
|
h1 {
|
||||||
@apply text-3xl border-b-2 dark:border-b-white border-b-gray-400 py-2 font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-300 to-orange-200;
|
@apply text-3xl border-b-2 dark:border-b-white border-b-gray-400 py-2 font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-300 to-orange-200;
|
||||||
}
|
}
|
||||||
h2 {
|
h2 {
|
||||||
@apply text-2xl border-b-2 dark:border-b-white border-b-gray-400 py-2 font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-300 to-orange-200;
|
@apply text-2xl border-b-2 dark:border-b-white border-b-gray-400 py-2 font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-300 to-orange-200 mb-4 mt-4;
|
||||||
}
|
}
|
||||||
h3 {
|
h3 {
|
||||||
@apply text-2xl bg-white text-right underline py-2 font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-200 to-orange-300 pr-4;
|
@apply text-2xl bg-white text-right underline py-2 font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-200 to-orange-300 pr-4;
|
||||||
@ -23,6 +23,12 @@
|
|||||||
h4 {
|
h4 {
|
||||||
@apply text-2xl text-right underline py-2 font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-200 to-orange-300 pr-4;
|
@apply text-2xl text-right underline py-2 font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-200 to-orange-300 pr-4;
|
||||||
}
|
}
|
||||||
|
pre {
|
||||||
|
@apply bg-base-300 border-white border-l-2 my-4 px-2 py-2 pl-4
|
||||||
|
}
|
||||||
|
ul {
|
||||||
|
@apply my-2
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@tailwind components;
|
@tailwind components;
|
||||||
@tailwind utilities;
|
@tailwind utilities;
|
||||||
|
|||||||
@ -1,7 +0,0 @@
|
|||||||
<script>
|
|
||||||
import Info from "$lib/components/Info.svelte"
|
|
||||||
</script>
|
|
||||||
|
|
||||||
# Contact
|
|
||||||
|
|
||||||
<Info info="<b>Livecoding.fr</b> n'est pas ni un collectif ni une organisation. L'objectif de ce site est uniquement de centraliser l'information et de donner plus de visibilité à la scène <i>live coding</i> francophone." markdown=false />
|
|
||||||
86
src/lib/components/TitleBar.svelte
Normal file
86
src/lib/components/TitleBar.svelte
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
export let data;
|
||||||
|
const pages = data.pages;
|
||||||
|
let active_page = pages["accueil"];
|
||||||
|
function changePage(pageName: string): void {
|
||||||
|
const pageKey = pageName.toLowerCase();
|
||||||
|
if (pages[pageKey as keyof typeof pages]) {
|
||||||
|
active_page = pages[pageKey as keyof typeof pages];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<nav class="pl-8 py-2 md:flex md:justify-between md:items-center pr-8">
|
||||||
|
<div class="flex items-center justify-between">
|
||||||
|
<a
|
||||||
|
on:click={() => changePage("Accueil")}
|
||||||
|
class="text-3xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-300 to-orange-200 uppercase"
|
||||||
|
>livecoding.fr</a
|
||||||
|
>
|
||||||
|
<!-- Mobile menu button -->
|
||||||
|
<div on:click={toggleNavbar} class="flex md:hidden">
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
class="text-gray-100 hover:text-gray-400 focus:outline-none focus:text-gray-400"
|
||||||
|
>
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke-width="1.5"
|
||||||
|
stroke="currentColor"
|
||||||
|
class="w-6 h-6"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Mobile Menu open: "block", Menu closed: "hidden" -->
|
||||||
|
<div
|
||||||
|
class="flex-col mt-8 space-y-4 md:flex md:space-y-0 md:flex-row md:items-center md:space-x-10 md:mt-0 {showMenu
|
||||||
|
? 'flex'
|
||||||
|
: 'hidden'}"
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
on:click={() => changePage("Evenements")}
|
||||||
|
class="text-gray-100 hover:text-orange-300 flex md:hidden"
|
||||||
|
>Évènements</a
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
on:click={() => changePage("Membres")}
|
||||||
|
class="text-gray-100 hover:text-orange-300 flex md:hidden">Membres</a
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
on:click={() => changePage("Outils")}
|
||||||
|
class="text-gray-100 hover:text-orange-300 flex md:hidden">Outils</a
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
on:click={() => changePage("Guides")}
|
||||||
|
class="text-gray-100 hover:text-orange-300 flex md:hidden">Guides</a
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
on:click={() => changePage("Réseaux")}
|
||||||
|
class="text-gray-100 hover:text-orange-300 flex md:hidden">Réseaux</a
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
on:click={() => changePage("Ressources")}
|
||||||
|
class="text-gray-100 hover:text-orange-300 flex md:hidden"
|
||||||
|
>Ressources</a
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
on:click={() => changePage("Presse")}
|
||||||
|
class="text-gray-100 hover:text-orange-300 flex md:hidden">Presse</a
|
||||||
|
>
|
||||||
|
<a
|
||||||
|
on:click={() => changePage("Contact")}
|
||||||
|
class="text-gray-100 hover:text-orange-300 flex md:hidden">Contact</a
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
export const shuffleArray = (array) => {
|
|
||||||
for (let i = array.length - 1; i > 0; i--) {
|
|
||||||
const j = Math.floor(Math.random() * (i + 1));
|
|
||||||
[array[i], array[j]] = [array[j], array[i]];
|
|
||||||
}
|
|
||||||
};
|
|
||||||
24
src/lib/utils.ts
Normal file
24
src/lib/utils.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
export const shuffleArray = (array: any[]) => {
|
||||||
|
for (let i = array.length - 1; i > 0; i--) {
|
||||||
|
const j = Math.floor(Math.random() * (i + 1));
|
||||||
|
[array[i], array[j]] = [array[j], array[i]];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
export const fetchMarkdownGuides = async () => {
|
||||||
|
const allGuideFiles = import.meta.glob('/src/routes/guides/*.md');
|
||||||
|
const iterableGuideFiles = Object.entries(allGuideFiles);
|
||||||
|
// Also return the content
|
||||||
|
const allGuides = await Promise.all(
|
||||||
|
iterableGuideFiles.map(async ([path, resolver]) => {
|
||||||
|
const { metadata } = await (resolver() as Promise<{ metadata: any }>);
|
||||||
|
const guidePath = path.slice(11, -3);
|
||||||
|
return {
|
||||||
|
meta: metadata,
|
||||||
|
path: guidePath,
|
||||||
|
};
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
return allGuides;
|
||||||
|
};
|
||||||
8
src/routes/+error.svelte
Normal file
8
src/routes/+error.svelte
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
export let data;
|
||||||
|
const pages = data.pages;
|
||||||
|
let showMenu = false;
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<h1 class="text-center">404: Page non trouvée !</h1>
|
||||||
@ -1,6 +1,108 @@
|
|||||||
<script>
|
<script lang="ts">
|
||||||
export const prerender = true;
|
export const prerender = true;
|
||||||
import "../app.postcss";
|
import "../app.postcss";
|
||||||
|
let showMenu = false;
|
||||||
|
function toggleNavbar() { showMenu = !showMenu; }
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<slot />
|
<div>
|
||||||
|
<div class="bg-neutral-800 dark:bg-base-300">
|
||||||
|
<nav class="pl-8 py-2 md:flex md:justify-between md:items-center pr-8">
|
||||||
|
<div class="flex items-center justify-between">
|
||||||
|
<a href="/" class="text-3xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-300 to-orange-200 uppercase"
|
||||||
|
>livecoding.fr</a>
|
||||||
|
<!-- Mobile menu button -->
|
||||||
|
<div on:click={toggleNavbar} class="flex md:hidden">
|
||||||
|
<button type="button" class="text-gray-100 hover:text-gray-400 focus:outline-none focus:text-gray-400" >
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
fill="none"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
stroke-width="1.5"
|
||||||
|
stroke="currentColor"
|
||||||
|
class="w-6 h-6"
|
||||||
|
>
|
||||||
|
<path
|
||||||
|
stroke-linecap="round"
|
||||||
|
stroke-linejoin="round"
|
||||||
|
d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"
|
||||||
|
/>
|
||||||
|
</svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Mobile Menu open: "block", Menu closed: "hidden" -->
|
||||||
|
<div
|
||||||
|
class="flex-col mt-8 space-y-4 md:flex md:space-y-0 md:flex-row md:items-center md:space-x-10 md:mt-0 {showMenu
|
||||||
|
? 'flex'
|
||||||
|
: 'hidden'}"
|
||||||
|
>
|
||||||
|
<a href="/evenements" class="text-gray-100 hover:text-orange-300 flex md:hidden" >Évènements</a>
|
||||||
|
<a href="/membres" class="text-gray-100 hover:text-orange-300 flex md:hidden">Membres</a>
|
||||||
|
<a href="/outils" class="text-gray-100 hover:text-orange-300 flex md:hidden">Outils</a>
|
||||||
|
<a href="/guides" class="text-gray-100 hover:text-orange-300 flex md:hidden">Guides</a>
|
||||||
|
<a href="/reseaux" class="text-gray-100 hover:text-orange-300 flex md:hidden">Réseaux</a>
|
||||||
|
<a href="/ressources" class="text-gray-100 hover:text-orange-300 flex md:hidden">Ressources</a>
|
||||||
|
<a href="/presse" class="text-gray-100 hover:text-orange-300 flex md:hidden">Presse</a>
|
||||||
|
<a href="/contacts" class="text-gray-100 hover:text-orange-300 flex md:hidden">Contact</a>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<main class="bg-gray-100 dark:bg-base-100">
|
||||||
|
<div class="drawer lg:drawer-open">
|
||||||
|
<input id="my-drawer-2" type="checkbox" class="drawer-toggle" />
|
||||||
|
<div class="drawer-content space-y-4 flex flex-col lg:px-16 px-4 py-8">
|
||||||
|
<slot />
|
||||||
|
</div>
|
||||||
|
<div class="drawer-side">
|
||||||
|
<label
|
||||||
|
for="my-drawer-2"
|
||||||
|
aria-label="close sidebar"
|
||||||
|
class="drawer-overlay"
|
||||||
|
/>
|
||||||
|
<ul
|
||||||
|
class="menu p-4 w-40 min-h-full bg-neutral-800 dark:bg-base-300 text-base-content"
|
||||||
|
>
|
||||||
|
<li class="text-xl ml-0">
|
||||||
|
<a class="text-white hover:text-orange-300" href="/evenements">Évènements</a>
|
||||||
|
</li>
|
||||||
|
<li class="text-xl ml-0">
|
||||||
|
<a class="text-white hover:text-orange-300" href="/membres">Membres</a >
|
||||||
|
</li>
|
||||||
|
<li class="text-xl ml-0">
|
||||||
|
<a
|
||||||
|
class="text-white hover:text-orange-300" href="/outils">Outils</a>
|
||||||
|
</li>
|
||||||
|
<li class="text-xl ml-0">
|
||||||
|
<a class="text-white hover:text-orange-300" href="/guides">Guides</a>
|
||||||
|
</li>
|
||||||
|
<li class="text-xl ml-0">
|
||||||
|
<a class="text-white hover:text-orange-300" href="/reseaux">Réseaux</a>
|
||||||
|
</li>
|
||||||
|
<li class="text-xl ml-0">
|
||||||
|
<a class="text-white hover:text-orange-300" href="/ressources">Ressources</a>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li class="text-xl ml-0">
|
||||||
|
<a class="text-white hover:text-orange-300" href="/presse">Presse</a>
|
||||||
|
</li>
|
||||||
|
<li class="text-xl ml-0">
|
||||||
|
<a class="text-white hover:text-orange-300" href="/contacts">Contact</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
|
||||||
|
<footer
|
||||||
|
class="footer ml-0 pl-0 pb-4 pt-4 bg-neutral-800 dark:bg-base-300 justify-between pr-16"
|
||||||
|
>
|
||||||
|
<div class="flex justify-between">
|
||||||
|
<p class="inline indent-4 text-bold text-white">Raphaël Forment</p>
|
||||||
|
<p> <a class="inline pl-4" href="https://github.com/Bubobubobubobubo/livecodingfr" >GitHub</a></p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|||||||
1
src/routes/+layout.ts
Normal file
1
src/routes/+layout.ts
Normal file
@ -0,0 +1 @@
|
|||||||
|
export const prerender = true;
|
||||||
@ -1,187 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import Accueil from "$lib/base/Accueil.svelte.md";
|
|
||||||
import Evenements from "$lib/base/Evenements.svelte.md";
|
|
||||||
import Contact from "$lib/base/Contact.svelte.md";
|
|
||||||
import Presse from "$lib/base/Presse.svelte.md";
|
|
||||||
import Membres from "$lib/base/Membres.svelte.md";
|
|
||||||
import Outils from "$lib/base/Outils.svelte.md";
|
|
||||||
import Reseaux from "$lib/base/Reseaux.svelte.md";
|
|
||||||
import Ressources from "$lib/base/Ressources.svelte.md";
|
|
||||||
const pages = {
|
|
||||||
accueil: Accueil,
|
|
||||||
evenements: Evenements,
|
|
||||||
membres: Membres,
|
|
||||||
outils: Outils,
|
|
||||||
réseaux: Reseaux,
|
|
||||||
presse: Presse,
|
|
||||||
ressources: Ressources,
|
|
||||||
contact: Contact,
|
|
||||||
};
|
|
||||||
let active_page = pages["accueil"];
|
|
||||||
|
|
||||||
let showMenu = false;
|
|
||||||
|
|
||||||
function toggleNavbar() {
|
|
||||||
showMenu = !showMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Changes the active page based on the provided page name.
|
|
||||||
*
|
|
||||||
* @param {string} pageName - The name of the page to activate.
|
|
||||||
*/
|
|
||||||
function changePage(pageName: string): void {
|
|
||||||
const pageKey = pageName.toLowerCase(); // Convert to lowercase to match the keys in the pages object.
|
|
||||||
if (pages[pageKey]) {
|
|
||||||
active_page = pages[pageKey];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div class="bg-neutral-800 dark:bg-base-300">
|
|
||||||
<nav class="pl-8 py-2 md:flex md:justify-between md:items-center pr-8">
|
|
||||||
<div class="flex items-center justify-between">
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Accueil")}
|
|
||||||
class="text-3xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-300 to-orange-200 uppercase"
|
|
||||||
>livecoding.fr</a
|
|
||||||
>
|
|
||||||
<!-- Mobile menu button -->
|
|
||||||
<div on:click={toggleNavbar} class="flex md:hidden">
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="text-gray-100 hover:text-gray-400 focus:outline-none focus:text-gray-400"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke-width="1.5"
|
|
||||||
stroke="currentColor"
|
|
||||||
class="w-6 h-6"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Mobile Menu open: "block", Menu closed: "hidden" -->
|
|
||||||
<div
|
|
||||||
class="flex-col mt-8 space-y-4 md:flex md:space-y-0 md:flex-row md:items-center md:space-x-10 md:mt-0 {showMenu
|
|
||||||
? 'flex'
|
|
||||||
: 'hidden'}"
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Evenements")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden"
|
|
||||||
>Évènements</a
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Membres")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden">Membres</a
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Outils")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden">Outils</a
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Réseaux")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden">Réseaux</a
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Ressources")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden"
|
|
||||||
>Ressources</a
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Presse")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden">Presse</a
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Contact")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden">Contact</a
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<main class="bg-gray-100 dark:bg-base-100">
|
|
||||||
<div class="drawer lg:drawer-open">
|
|
||||||
<input id="my-drawer-2" type="checkbox" class="drawer-toggle" />
|
|
||||||
<div class="drawer-content space-y-4 flex flex-col lg:px-16 px-4 py-8">
|
|
||||||
<svelte:component this={active_page} />
|
|
||||||
</div>
|
|
||||||
<div class="drawer-side">
|
|
||||||
<label
|
|
||||||
for="my-drawer-2"
|
|
||||||
aria-label="close sidebar"
|
|
||||||
class="drawer-overlay"
|
|
||||||
/>
|
|
||||||
<ul
|
|
||||||
class="menu p-4 w-40 min-h-full bg-neutral-800 dark:bg-base-300 text-base-content"
|
|
||||||
>
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Evenements")}>Évènements</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Membres")}>Membres</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Outils")}>Outils</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Réseaux")}>Réseaux</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Ressources")}>Ressources</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Presse")}>Presse</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Contact")}>Contact</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer
|
|
||||||
class="footer ml-0 pl-0 pb-4 pt-4 bg-neutral-800 dark:bg-base-300 justify-between pr-16"
|
|
||||||
>
|
|
||||||
<p class="indent-4 text-bold text-white">Raphaël Forment</p>
|
|
||||||
<p>
|
|
||||||
<a class="pl-4" href="https://github.com/Bubobubobubobubo/livecodingfr"
|
|
||||||
>GitHub</a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
</footer>
|
|
||||||
</main>
|
|
||||||
@ -1,6 +1,11 @@
|
|||||||
<script>
|
<script>
|
||||||
import Info from "$lib/components/Info.svelte"
|
import Info from "$lib/components/Info.svelte"
|
||||||
</script>
|
</script>
|
||||||
|
<svelte:head>
|
||||||
|
<title>LC.FR</title>
|
||||||
|
</svelte:head>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Qu'est-ce que le live-coding ?
|
# Qu'est-ce que le live-coding ?
|
||||||
|
|
||||||
23
src/routes/accueil/+page.svelte.md
Normal file
23
src/routes/accueil/+page.svelte.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<script>
|
||||||
|
import Info from "$lib/components/Info.svelte"
|
||||||
|
</script>
|
||||||
|
<svelte:head>
|
||||||
|
<title>Accueil</title>
|
||||||
|
</svelte:head>
|
||||||
|
|
||||||
|
|
||||||
|
# Qu'est-ce que le live-coding ?
|
||||||
|
|
||||||
|
<Info info="Le <i>live coding</i> est une pratique artistique qui fait de l'acte de programmation un geste expressif et performatif. Les <i>live coders</i> considèrent l'interface de programmation comme un instrument de musique. Le <i>live coding</i> est un art au croisement entre synthèse sonore, improvisation musicale et musique algorithmique générative.<br><br> Le <i>live coding</i> est au croisement de plusieurs arts et encourage des approches transdisciplinaires de la création : musique, arts visuels, informatique, jeux vidéos, danse, etc. Plus largement, le <i>live coding</i> est un domaine critique qui encourage les artistes à repenser leur rapport à l'informatique. Le <i>live coding</i> est traversé par la culture <i>hacker</i>, par la philosophie du logiciel libre et <i>open source</i>. Il souhaite également développer une nouvelle forme d'expressivité au sein des arts, en considérant l'ordinateur comme une interface pour la <i>programmation exploratoire</i> ou <i>programmation conversationnelle</i>." markdown=false />
|
||||||
|
|
||||||
|
Historiquement, le _live coding_ est un type de création porté par le collectif [TOPLAP](https://toplap.org). Il existe de nombreux groupes en Europe et dans le monde qui sont issus de ce collectif : [TOPLAP Barcelona](https://toplap.cat/en/home), [Livecode NYC](https://livecode.nyc/), parmi d'autres. La pratique du _live coding_ s'est popularisée au travers du [Manifeste TOPLAP]() et des [Algoraves](https://algorave.com) (_algorithmic rave parties_). Il s'agit pourtant de _l'arbre qui cache la forêt_ : le _live coding_ est une pratique qui existe depuis la fin des années 1980, et que l'on retrouve un peu partout dans les arts numériques.
|
||||||
|
|
||||||
|
# À propos de ce site
|
||||||
|
|
||||||
|
Ce site est une collection de ressources. Il est conçu pour combler un vide. La communauté francophone du _live coding_ ne possédait pas de site permettant aux artistes et musiciens français de se trouver et d'échanger facilement. Disposer d'un site dédié permet de rompre avec la nécessité de se tenir informé sans cesse sur les réseaux sociaux sous peine de manquer une information. Ce site est conçu et maintenu par [Raphaël Forment](https://raphaelforment.fr) (BuboBubo).
|
||||||
|
|
||||||
|
L'information sur chacune des pages est randomisée pour favoriser la découverte.
|
||||||
|
|
||||||
|
# Comment contribuer ?
|
||||||
|
|
||||||
|
Le site est hébergé sur [GitHub](https://github.com/Bubobubobubobubo/livecodingfr). Pour ajouter une information au site, veuillez créer une [Pull Request](https://docs.github.com/fr/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request). Vous pouvez aussi contacter l'un des membres qui se chargera de transmettre l'information.
|
||||||
13
src/routes/api/guides/+server.ts
Normal file
13
src/routes/api/guides/+server.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import { fetchMarkdownGuides } from '$lib/utils';
|
||||||
|
import { json } from '@sveltejs/kit';
|
||||||
|
|
||||||
|
export const GET = async () => {
|
||||||
|
const allPosts = await fetchMarkdownGuides();
|
||||||
|
|
||||||
|
const sortedGuides = allPosts.sort((a, b) => {
|
||||||
|
return new Date(b.meta.date).getTime() - new Date(a.meta.date).getTime();
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(sortedGuides)
|
||||||
|
return json(sortedGuides);
|
||||||
|
};
|
||||||
19
src/routes/contacts/+page.svelte.md
Normal file
19
src/routes/contacts/+page.svelte.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<svelte:head>
|
||||||
|
<title>Contact</title>
|
||||||
|
</svelte:head>
|
||||||
|
<script>
|
||||||
|
import Info from "$lib/components/Info.svelte"
|
||||||
|
</script>
|
||||||
|
|
||||||
|
# Contact
|
||||||
|
|
||||||
|
[Livecoding.fr](https://livecoding.fr) n'est ni un collectif ni une organisation. L'objectif de ce site est uniquement de centraliser l'information et de donner plus de visibilité à la scène <i>live coding</i> francophone. Pour discuter et rencontre des _live coders_ francophones, voici quelques liens :
|
||||||
|
|
||||||
|
<div class="pl-8">
|
||||||
|
|
||||||
|
- [Cookie Collective](https://discord.gg/VZQGhUC) (Discord) : Discord du collectif parisien Cookie Collective, rassemble beaucoup de _live coders_.
|
||||||
|
- [Creative Code Lyon](https://discord.gg/zwjmAaeEAH) (Discord) : Discord du groupe _Creative Code Lyon_ pour l'est/sud-est de la France.
|
||||||
|
- [TOPLAP](https://discord.gg/jtYGAsUggT) (Discord) : Collectif international [TOPLAP](https://toplap.org), avec des sections francophones.
|
||||||
|
- Mais aussi, contacter individuellement des artistes et _performers_.
|
||||||
|
|
||||||
|
</div>
|
||||||
@ -1,3 +1,6 @@
|
|||||||
|
<svelte:head>
|
||||||
|
<title>Évènements</title>
|
||||||
|
</svelte:head>
|
||||||
<script>
|
<script>
|
||||||
import Calendar from "$lib/components/Calendar.svelte";
|
import Calendar from "$lib/components/Calendar.svelte";
|
||||||
import Info from "$lib/components/Info.svelte";
|
import Info from "$lib/components/Info.svelte";
|
||||||
23
src/routes/guides/+page.svelte
Normal file
23
src/routes/guides/+page.svelte
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
export let data;
|
||||||
|
import Info from "$lib/components/Info.svelte";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<h1>Guides</h1>
|
||||||
|
|
||||||
|
<Info info="Cette page est un recensement de guides proposés par les membres de la communauté pour apprendre à <i>live coder</i> ou se perfectionner. L'idée est de proposer des articles plus ou moins courts consacrés à un outil ou à une approche particulière du <i>live coding</i> Pour proposer un guide, référez-vous à l'article <a href='/guides/proposer_guide'>Proposer un guide</a>. Nous acceptons toutes les collaborations." markdown=false />
|
||||||
|
|
||||||
|
<h2>Articles publiés</h2>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
{#each data.guides as post}
|
||||||
|
<li class="px-4 pb-4 my-4 rounded-lg bg-base-300 dark:bg-base-300 hover:bg-base-200 hover:dark:bg-base-200 border-1 border-color-base-100">
|
||||||
|
<h2>
|
||||||
|
<a href={post.path}>
|
||||||
|
{post.meta.title}
|
||||||
|
</a>
|
||||||
|
</h2>
|
||||||
|
<p class="pt-2">Publié le : {post.meta.date} par {post.meta.author}</p>
|
||||||
|
</li>
|
||||||
|
{/each}
|
||||||
|
</ul>
|
||||||
5
src/routes/guides/+page.ts
Normal file
5
src/routes/guides/+page.ts
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
export const load = async ({ fetch }) => {
|
||||||
|
const response = await fetch(`/api/guides`);
|
||||||
|
const guides = await response.json();
|
||||||
|
return { guides };
|
||||||
|
};
|
||||||
14
src/routes/guides/[slug]/+page.svelte
Normal file
14
src/routes/guides/[slug]/+page.svelte
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<script>
|
||||||
|
export let data;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<article>
|
||||||
|
<h1>{data.title}</h1>
|
||||||
|
<div class="pt-4 flex justify-between mb-12">
|
||||||
|
<p class="inline font-bold">Publié le : {data.date}</p>
|
||||||
|
<p class="inline font-bold">Auteur : {data.author}</p>
|
||||||
|
</div>
|
||||||
|
<div class="px-12 content-center">
|
||||||
|
<svelte:component this={data.content} />
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
11
src/routes/guides/[slug]/+page.ts
Normal file
11
src/routes/guides/[slug]/+page.ts
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
export async function load({ params }) {
|
||||||
|
const guides = await import(`../${params.slug}.md`);
|
||||||
|
const { title, date, author } = guides.metadata;
|
||||||
|
const content = guides.default;
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
date,
|
||||||
|
author,
|
||||||
|
content
|
||||||
|
};
|
||||||
|
}
|
||||||
8
src/routes/guides/guides.svelte
Normal file
8
src/routes/guides/guides.svelte
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<script>
|
||||||
|
export let title;
|
||||||
|
export let date;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<article>
|
||||||
|
<slot />
|
||||||
|
</article>
|
||||||
31
src/routes/guides/proposer_guide.md
Normal file
31
src/routes/guides/proposer_guide.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
---
|
||||||
|
title: Comment proposer un guide ?
|
||||||
|
date: '2023-12-22'
|
||||||
|
author: "Raphaël Maurice Forment"
|
||||||
|
---
|
||||||
|
|
||||||
|
Les guides sont rédigés en [MarkDown](https://en.wikipedia.org/wiki/Markdown), un format de balisage léger qui facilite l'écriture et la publication. Une fois ajoutés au site, ces derniers sont automatiquement recensés et publiés. Chaque article reçoit un entête simple. Voici l'entête de l'article actuel :
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
title: Comment proposer un guide ?
|
||||||
|
date: '2023-12-22'
|
||||||
|
author: "Raphaël Maurice Forment"
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
Chaque balise se comprend assez facilement :
|
||||||
|
|
||||||
|
- **title** : le titre complet de l'article
|
||||||
|
- **date** : au format `AAAA-MM-JJ`
|
||||||
|
- **author** : nom complet ou votre pseudonyme
|
||||||
|
|
||||||
|
Le site utilise ensuite ces données pour générer un entête. Les données peuvent ensuite être utilisées sous plusieurs formes pour faire référence au guide sur d'autres pages.
|
||||||
|
|
||||||
|
## Contenu de l'article
|
||||||
|
|
||||||
|
Écrivez ce que vous voulez ! Notez que vous pouvez librement mélanger **MarkDown**, **HTML/CSS** et composants **Svelte** pour les plus confirmés. Vous ne devriez pas avoir de problème particulier à publier quoi que ce soit sous la forme que vous imaginez ! Si vous écrivez du **MarkDown** pur et simple, votre article recevra le style par défaut utilisé par le site.
|
||||||
|
|
||||||
|
## Publication
|
||||||
|
|
||||||
|
Une fois votre article prêt, il vous faudra faire une [Pull Request](https://docs.github.com/fr/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests) pour que ce dernier soit ajouté au [dépôt](https://github.com/Bubobubobubobubo/livecodingfr) du site et validé par un contributeur. Bonne chance ! Nous avons besoin de guides pour couvrir l'essentiel des plateformes existantes !
|
||||||
@ -5,6 +5,11 @@
|
|||||||
let members = Membres;
|
let members = Membres;
|
||||||
shuffleArray(members);
|
shuffleArray(members);
|
||||||
</script>
|
</script>
|
||||||
|
<svelte:head>
|
||||||
|
<title>Membres</title>
|
||||||
|
</svelte:head>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Membres
|
# Membres
|
||||||
|
|
||||||
@ -1,3 +1,6 @@
|
|||||||
|
<svelte:head>
|
||||||
|
<title>Outils</title>
|
||||||
|
</svelte:head>
|
||||||
<script>
|
<script>
|
||||||
import SoftwareCard from "$lib/components/SoftwareCard.svelte";
|
import SoftwareCard from "$lib/components/SoftwareCard.svelte";
|
||||||
import Software from "$lib/data/outils.json";
|
import Software from "$lib/data/outils.json";
|
||||||
@ -1,187 +0,0 @@
|
|||||||
<script lang="ts">
|
|
||||||
import Accueil from "$lib/base/Accueil.svelte.md";
|
|
||||||
import Evenements from "$lib/base/Evenements.svelte.md";
|
|
||||||
import Contact from "$lib/base/Contact.svelte.md";
|
|
||||||
import Presse from "$lib/base/Presse.svelte.md";
|
|
||||||
import Membres from "$lib/base/Membres.svelte.md";
|
|
||||||
import Outils from "$lib/base/Outils.svelte.md";
|
|
||||||
import Reseaux from "$lib/base/Reseaux.svelte.md";
|
|
||||||
import Ressources from "$lib/base/Ressources.svelte.md";
|
|
||||||
const pages = {
|
|
||||||
accueil: Accueil,
|
|
||||||
evenements: Evenements,
|
|
||||||
membres: Membres,
|
|
||||||
outils: Outils,
|
|
||||||
réseaux: Reseaux,
|
|
||||||
presse: Presse,
|
|
||||||
ressources: Ressources,
|
|
||||||
contact: Contact,
|
|
||||||
};
|
|
||||||
let active_page = pages["accueil"];
|
|
||||||
|
|
||||||
let showMenu = false;
|
|
||||||
|
|
||||||
function toggleNavbar() {
|
|
||||||
showMenu = !showMenu;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Changes the active page based on the provided page name.
|
|
||||||
*
|
|
||||||
* @param {string} pageName - The name of the page to activate.
|
|
||||||
*/
|
|
||||||
function changePage(pageName: string): void {
|
|
||||||
const pageKey = pageName.toLowerCase(); // Convert to lowercase to match the keys in the pages object.
|
|
||||||
if (pages[pageKey]) {
|
|
||||||
active_page = pages[pageKey];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div class="bg-neutral-800 dark:bg-base-300">
|
|
||||||
<nav class="pl-8 py-2 md:flex md:justify-between md:items-center pr-8">
|
|
||||||
<div class="flex items-center justify-between">
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Accueil")}
|
|
||||||
class="text-3xl font-extrabold text-transparent bg-clip-text bg-gradient-to-r from-orange-300 to-orange-200 uppercase"
|
|
||||||
>livecoding.fr</a
|
|
||||||
>
|
|
||||||
<!-- Mobile menu button -->
|
|
||||||
<div on:click={toggleNavbar} class="flex md:hidden">
|
|
||||||
<button
|
|
||||||
type="button"
|
|
||||||
class="text-gray-100 hover:text-gray-400 focus:outline-none focus:text-gray-400"
|
|
||||||
>
|
|
||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
fill="none"
|
|
||||||
viewBox="0 0 24 24"
|
|
||||||
stroke-width="1.5"
|
|
||||||
stroke="currentColor"
|
|
||||||
class="w-6 h-6"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Mobile Menu open: "block", Menu closed: "hidden" -->
|
|
||||||
<div
|
|
||||||
class="flex-col mt-8 space-y-4 md:flex md:space-y-0 md:flex-row md:items-center md:space-x-10 md:mt-0 {showMenu
|
|
||||||
? 'flex'
|
|
||||||
: 'hidden'}"
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Evenements")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden"
|
|
||||||
>Évènements</a
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Membres")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden">Membres</a
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Outils")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden">Outils</a
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Réseaux")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden">Réseaux</a
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Ressources")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden"
|
|
||||||
>Ressources</a
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Presse")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden">Presse</a
|
|
||||||
>
|
|
||||||
<a
|
|
||||||
on:click={() => changePage("Contact")}
|
|
||||||
class="text-gray-100 hover:text-orange-300 flex md:hidden">Contact</a
|
|
||||||
>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<main class="bg-gray-100 dark:bg-base-100">
|
|
||||||
<div class="drawer lg:drawer-open">
|
|
||||||
<input id="my-drawer-2" type="checkbox" class="drawer-toggle" />
|
|
||||||
<div class="drawer-content space-y-4 flex flex-col lg:px-16 px-4 py-8">
|
|
||||||
<svelte:component this={active_page} />
|
|
||||||
</div>
|
|
||||||
<div class="drawer-side">
|
|
||||||
<label
|
|
||||||
for="my-drawer-2"
|
|
||||||
aria-label="close sidebar"
|
|
||||||
class="drawer-overlay"
|
|
||||||
/>
|
|
||||||
<ul
|
|
||||||
class="menu p-4 w-40 min-h-full bg-neutral-800 dark:bg-base-300 text-base-content"
|
|
||||||
>
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Evenements")}>Évènements</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Membres")}>Membres</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Outils")}>Outils</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Réseaux")}>Réseaux</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Ressources")}>Ressources</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Presse")}>Presse</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li class="text-xl">
|
|
||||||
<a
|
|
||||||
class="text-white hover:text-orange-300"
|
|
||||||
on:click={() => changePage("Contact")}>Contact</a
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<footer
|
|
||||||
class="footer ml-0 pl-0 pb-4 pt-4 bg-neutral-800 dark:bg-base-300 justify-between pr-16"
|
|
||||||
>
|
|
||||||
<p class="indent-4 text-bold text-white">Raphaël Forment</p>
|
|
||||||
<p>
|
|
||||||
<a class="pl-4" href="https://github.com/Bubobubobubobubo/livecodingfr"
|
|
||||||
>GitHub</a
|
|
||||||
>
|
|
||||||
</p>
|
|
||||||
</footer>
|
|
||||||
</main>
|
|
||||||
@ -1,3 +1,6 @@
|
|||||||
|
<svelte:head>
|
||||||
|
<title>Presse</title>
|
||||||
|
</svelte:head>
|
||||||
<script>
|
<script>
|
||||||
import Press from "$lib/components/Press.svelte";
|
import Press from "$lib/components/Press.svelte";
|
||||||
import Presse from "$lib/data/presse.json";
|
import Presse from "$lib/data/presse.json";
|
||||||
@ -1,3 +1,6 @@
|
|||||||
|
<svelte:head>
|
||||||
|
<title>Réseaux</title>
|
||||||
|
</svelte:head>
|
||||||
<script>
|
<script>
|
||||||
import SoftwareCard from "$lib/components/SoftwareCard.svelte";
|
import SoftwareCard from "$lib/components/SoftwareCard.svelte";
|
||||||
import Info from "$lib/components/Info.svelte";
|
import Info from "$lib/components/Info.svelte";
|
||||||
@ -9,7 +12,7 @@
|
|||||||
|
|
||||||
# Réseaux
|
# Réseaux
|
||||||
|
|
||||||
<Info info="Il existe plusieurs collectifs et groupes qui promeuvent la pratique du <i>live coding</i>. Cette page est un recensement des groupes connus. Si vous êtes actifs, ajoutez quelque chose ici." markdown=false />
|
<Info info="Il existe plusieurs collectifs et groupes qui promeuvent la pratique du <i>live coding</i>. Cette page est un recensement des groupes connus. Si vous êtes actifs, faites-le nous savoir ou ajoutez quelque chose ici depuis le dépôt GitHub." markdown=false />
|
||||||
|
|
||||||
{#each reseaux as {name, place, description, image, link}, i}
|
{#each reseaux as {name, place, description, image, link}, i}
|
||||||
<SoftwareCard name={name} creator={place} description={description}
|
<SoftwareCard name={name} creator={place} description={description}
|
||||||
@ -1,3 +1,6 @@
|
|||||||
|
<svelte:head>
|
||||||
|
<title>Ressources</title>
|
||||||
|
</svelte:head>
|
||||||
<script>
|
<script>
|
||||||
import Info from "$lib/components/Info.svelte";
|
import Info from "$lib/components/Info.svelte";
|
||||||
</script>
|
</script>
|
||||||
BIN
static/favicon.ico
Normal file
BIN
static/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.2 KiB |
@ -6,7 +6,7 @@ import { vitePreprocess } from "@sveltejs/kit/vite";
|
|||||||
/** @type {import('@sveltejs/kit').Config} */
|
/** @type {import('@sveltejs/kit').Config} */
|
||||||
const config = {
|
const config = {
|
||||||
extensions: [".svelte", ...mdsvexConfig.extensions],
|
extensions: [".svelte", ...mdsvexConfig.extensions],
|
||||||
|
publicDir: "public",
|
||||||
// Consult https://kit.svelte.dev/docs/integrations#preprocessors
|
// Consult https://kit.svelte.dev/docs/integrations#preprocessors
|
||||||
// for more information about preprocessors
|
// for more information about preprocessors
|
||||||
preprocess: [vitePreprocess({}), mdsvex(mdsvexConfig)],
|
preprocess: [vitePreprocess({}), mdsvex(mdsvexConfig)],
|
||||||
|
|||||||
@ -2,7 +2,6 @@ import { sveltekit } from '@sveltejs/kit/vite';
|
|||||||
import { defineConfig } from 'vite';
|
import { defineConfig } from 'vite';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
base: '.',
|
base: '.',
|
||||||
resolve: {
|
resolve: {
|
||||||
|
|||||||
Reference in New Issue
Block a user