From 580c7ab85802ced07cbdd620c0da73c5056b7f5c Mon Sep 17 00:00:00 2001 From: Alnotz Date: Fri, 30 Dec 2022 22:52:57 +0100 Subject: [PATCH] Pentis subproject and new Bash script added --- Bash/move-gimp-directories.sh | 30 + Web/Pentis/Pentis.html | 55 ++ Web/Pentis/Pentis.js | 1510 +++++++++++++++++++++++++++++++++ Web/Pentis/Pentis_404.md | 5 + Web/Pentis/Pentis_clair.css | 32 + Web/Pentis/Pentis_icone.svg | 31 + Web/Pentis/Pentis_sombre.css | 32 + Web/Pentis/main.js | 116 +++ 8 files changed, 1811 insertions(+) create mode 100644 Bash/move-gimp-directories.sh create mode 100644 Web/Pentis/Pentis.html create mode 100644 Web/Pentis/Pentis.js create mode 100644 Web/Pentis/Pentis_404.md create mode 100644 Web/Pentis/Pentis_clair.css create mode 100644 Web/Pentis/Pentis_icone.svg create mode 100644 Web/Pentis/Pentis_sombre.css create mode 100644 Web/Pentis/main.js diff --git a/Bash/move-gimp-directories.sh b/Bash/move-gimp-directories.sh new file mode 100644 index 0000000..ff7042e --- /dev/null +++ b/Bash/move-gimp-directories.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +#Migration selon Freedesktop.org +cd || exit 1 +if [ ! -d .local/share/GIMP/2.10/ ] +then + mkdir -v -p .local/share/GIMP/2.10/ +fi +for GIMP_DIR in brushes dynamics patterns palettes gradients fonts tool-presets scripts themes icons fractalexplorer gfig gflare gimpressionist +do + if [ -d .config/GIMP/2.10/${GIMP_DIR} ] + then + mv -v .config/GIMP/2.10/${GIMP_DIR}/ .local/share/GIMP/2.10/${GIMP_DIR} + else + mkdir -v -p .local/share/GIMP/2.10/${GIMP_DIR} + fi +done +if [ ! -d .local/lib/GIMP/2.10/ ] +then + mkdir -v -p .local/lib/GIMP/2.10/ +fi +for GIMP_DIR in plug-ins modules interpreters environ +do + if [ -d .config/GIMP/2.10/${GIMP_DIR} ] + then + mv -v .config/GIMP/2.10/${GIMP_DIR}/ .local/lib/GIMP/2.10/${GIMP_DIR} + else + mkdir -v -p .local/lib/GIMP/2.10/${GIMP_DIR} + fi +done + diff --git a/Web/Pentis/Pentis.html b/Web/Pentis/Pentis.html new file mode 100644 index 0000000..0afb46d --- /dev/null +++ b/Web/Pentis/Pentis.html @@ -0,0 +1,55 @@ + + + + + + + Pentis + + + + + + + + + + + + +

+ Pentis +

+

+ Intéressé par les pentominos ? +

+ + Si ça ne peut pas marcher avec la + + Canvas API + + , on tentera autre chose. + +

+ Envie de voir derrière la scène ? Cliquer + ici + + + affichera la grille + . +

+
+ +
+        
+
+
+ + + + diff --git a/Web/Pentis/Pentis.js b/Web/Pentis/Pentis.js new file mode 100644 index 0000000..d5779a7 --- /dev/null +++ b/Web/Pentis/Pentis.js @@ -0,0 +1,1510 @@ +/**********************************| +| Code pour interagir avec Pentis. | +|**********************************/ +console.log("Début."); +/* Pour contrôler la visibilité de la grille. */ +/* Texte interactif. */ +var iciTexte = document.getElementById("iciTexte"); +/* Lien hypertexte pour masquer la grille. */ +var ici = document.getElementById("ici"); +/* Cadre de la grille. */ +var cadreGrille = document.getElementById("grille"); +var grilleCachee = true;//Besoin de préciser ? +function alterner(evt) +{ + if(grilleCachee)//Si caché. + { + cadreGrille.style.display = "block"; + iciTexte.innerText = "masquera la grille"; + grilleCachee = false; + } + else//Si visible. + { + cadreGrille.style.display = "none"; + iciTexte.innerText = "affichera la grille"; + grilleCachee = true; + } +} +/* Écoute des clics sur l'hypertexte "ici". */ +ici.addEventListener("click", alterner); +/******************************************************************************/ +/* Début du tableau principal appelé la grille. */ +var grille = [];//Tableau principal vide. +const NB_L = 24;//Total de ligne. +const NB_C = 40;//Total de colonnes. +for(let l=0; l fc.x-50 && cy < fc.y+50 && cy > fc.y-50) + { + console.log(`Curseur dans les flèches (x=${cx} y=${cy}).`); + } + if(cx < fc.x+50 && cx > fc.x-50 && cy < fc.y+50 && cy > fc.y-50) + { + console.log(`Curseur dans les flèches (x=${cx} y=${cy}).`); + } + if(cx < fc.x+50 && cx > fc.x-50 && cy < fc.y+50 && cy > fc.y-50) + { + console.log(`Curseur dans les flèches (x=${cx} y=${cy}).`); + } + if(cx < fc.x+50 && cx > fc.x-50 && cy < fc.y+50 && cy > fc.y-50) + { + console.log(`Curseur dans les flèches (x=${cx} y=${cy}).`); + } + /* Si dans les cercles. */ + if(cx < bc.x+40 && cx > bc.x-40 && cy < bc.y+40 && cy > bc.y-40) + { + console.log(`Curseur dans les cercles (x=${cx} y=${cy}).`); + } + /* Si dans les ellipses. */ + if(cx < ec.x+40 && cx > ec.x-40 && cy < ec.y+20 && cy > ec.y-20) + { + console.log(`Curseur dans les ellipses (x=${cx} y=${cy}).`); + } + +} +/* Écouteur de position. */ +document.querySelector("#toile").addEventListener("mousemove", suivre); +/* Écouteur de clic. */ +document.querySelector("#toile").addEventListener("click", action); +/* Construction du tableau secondaire : + * un pentomino est construit dans un + * tableau mobile. + */ +var pento = {//Pentomino nul. + l:0,//Ligne d'origine. + c:0,//Colonne d'origine. + mtx:[//Sous-tableau mobile. + [0,0,0,0,0], + [0,0,0,0,0], + [0,0,0,0,0], + [0,0,0,0,0], + [0,0,0,0,0] + ] +}; +nvPentomino(1,1,0,grille); +tblEcrire(grille);//Matrice initiale. +tblDessin(grille); +var accesd = accesADroite(1,1,0,grille); +var accesg = accesAGauche(1,1,0,grille); +sprPentomino(1,1,0,grille); +function essai(no) +{ + sprPentomino(no,0,0,grille); + nvPentomino(no+1,0,0,grille); + tblEcrire(grille); + tblDessin(grille); +} +var no=0; +var boucle = window.setInterval( ()=>{no++; essai(no);}, 1000); +window.setTimeout( ()=>{window.clearInterval(boucle);}, 64000); +console.log("Fin."); diff --git a/Web/Pentis/Pentis_404.md b/Web/Pentis/Pentis_404.md new file mode 100644 index 0000000..0a4d2a9 --- /dev/null +++ b/Web/Pentis/Pentis_404.md @@ -0,0 +1,5 @@ +# 404 ! + +## Fichier non trouvé. + +## :-( diff --git a/Web/Pentis/Pentis_clair.css b/Web/Pentis/Pentis_clair.css new file mode 100644 index 0000000..090a67f --- /dev/null +++ b/Web/Pentis/Pentis_clair.css @@ -0,0 +1,32 @@ +/* Style clair. */ +body +{ + background: white; + color: black; +} +/* Toile où dessiner les pentominos. */ +canvas#toile +{ + border: 2px solid red; + width: 600px; + height: 800px; + margin: 1em; +} +/* Texte où faire apparaître la grille. */ +a#ici +{ + text-decoration: none; +} +a#ici:hover +{ + text-decoration: underline; +} +/* Grille effective. */ +div#grille +{ + width: 50%; + height: auto; + border: 2px dotted yellow; + line-height:0.8em; + display: none; +} diff --git a/Web/Pentis/Pentis_icone.svg b/Web/Pentis/Pentis_icone.svg new file mode 100644 index 0000000..2a5f7fb --- /dev/null +++ b/Web/Pentis/Pentis_icone.svg @@ -0,0 +1,31 @@ + + + ]> + + + + Icone de Pentis. + + + Symbole du pentomino 'F'. + + + + + + + + + + diff --git a/Web/Pentis/Pentis_sombre.css b/Web/Pentis/Pentis_sombre.css new file mode 100644 index 0000000..ecdecb0 --- /dev/null +++ b/Web/Pentis/Pentis_sombre.css @@ -0,0 +1,32 @@ +/* Style sombre. */ +body +{ + background: black; + color: white; +} +/* Toile où dessiner les pentominos. */ +canvas#toile +{ + border: 2px solid red; + width: 600px; + height: 800px; + margin: 1em; +} +/* Texte où faire apparaître la grille. */ +a#ici +{ + text-decoration: none; +} +a#ici:hover +{ + text-decoration: underline; +} +/* Grille effective. */ +div#grille +{ + width: 50%; + height: auto; + border: 2px dotted yellow; + line-height:0.8em; + display: none; +} diff --git a/Web/Pentis/main.js b/Web/Pentis/main.js new file mode 100644 index 0000000..2dc1213 --- /dev/null +++ b/Web/Pentis/main.js @@ -0,0 +1,116 @@ +#!/bin/env node +var http = require('http'); +var url = require('url'); +var fs = require('fs'); +var console = require('console'); +console.log('Bonjour.'); +function deployment(req, res)//À déployer. +{ + var myURL = url.parse(req.url, true);//URL récupéré. + var name = myURL.query.name;//Option 'name'. + console.log('Début.'); + console.log("L'adresse est\' "+req.url+" \'avec "+myURL.pathname+" pour chemin."); + /* Contrôle des pages. */ + var uRLTest = (myURL.pathname !== "/Pentis.html") &&//Page principale. + (myURL.pathname !== "/Pentis.js") &&//JS principal. + (myURL.pathname !== "/Pentis_sombre.css") &&//CSS sombre. + (myURL.pathname !== "/Pentis_clair.css") &&//CSS clair. + (myURL.pathname !== "/Pentis_icone.svg") &&//Icone de page. + (myURL.pathname !== "/Pentis_404.md") &&//MD 404. + (myURL.pathname !== "/");//Racine. + function callback(err, data) + { + if(err) + { + console.error("Illisible ou inexistant!",err); + res.writeHead(302, {'Location': '/Pentis_404.md'}); + res.end(); + } + res.end(data); + } + if(uRLTest)//Page absente. + { + res.writeHead(302, {'Location': '/Pentis_404.md'}); + res.end(); + console.log("Adresse modifiée : /Pentis_404.md"); + } + if (myURL.pathname === "/Pentis_sombre.css")//Si on demande le CSS. + { + console.log('Début CSS sombre.'); + res.writeHead(200, {'Content-type' : 'text/css;charset=UTF-8', 'Content-Language': 'fr-FR, fr'}); + fs.readFile("Pentis_sombre.css", 'utf8', callback); + console.log('CSS sombre envoyé.'); + } + if (myURL.pathname === "/Pentis_clair.css")//Si on demande le CSS. + { + console.log('Début CSS clair.'); + res.writeHead(200, {'Content-type' : 'text/css;charset=UTF-8', 'Content-Language': 'fr-FR, fr'}); + fs.readFile("Pentis_clair.css", 'utf8', callback); + console.log('CSS clair envoyé.'); + } + if (myURL.pathname === "/Pentis.js")//Si on demande le JS. + { + console.log('Début JS.'); + res.writeHead(200, {'Content-type' : 'application/javascript;charset=UTF-8', 'Content-Language': 'fr-FR, fr'}); + fs.readFile("Pentis.js", 'utf8', callback); + console.log('JS envoyé.'); + } + if (myURL.pathname === "/Pentis_icone.svg")//Si on demande l'icone SVG. + { + console.log('Début icone-SVG.'); + res.writeHead(200, {'Content-type' : 'image/svg+xml;charset=UTF-8', 'Content-Language': 'fr-FR, fr'}); + fs.readFile("Pentis_icone.svg", 'utf8', callback); + console.log('icone-SVG envoyé.'); + } + + if(myURL.pathname === "/")//Redirection (alias) vers HTML. + { + res.writeHead(302, {'Location': '/Pentis.html'}); + res.end(); + console.log("Adresse modifiée : /Pentis.html"); + } + if(myURL.pathname === "/Pentis.html")//Si on demande le HTML. + { + console.log('Début HTML.'); + res.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8', 'Content-Language': 'fr-FR, fr'}); + fs.readFile('Pentis.html', 'utf8', callback); + console.log('HTML envoyé.'); + console.log("----------res"); + for(let item in res.headers) + { + console.log(item + ": " + res.headers[item]); + } + console.log("----------req"); + for(let item in req.headers) + { + console.log(item + ": " + req.headers[item]); + } + console.log("----------\nRequête début:\n"+req.rawHeaders+"\nRequête fin\n----------"); + console.log("----------\nRéponse début:\n"+res.rawHeaders+"\nRéponse fin\n----------"); + } + if(myURL.pathname === "/Pentis_404.md")//Si on demande le MD 404. + { + console.log('Début MD 404.'); + res.writeHead(200, {'Content-Type': 'text/markdown;charset=UTF-8, text/plain;charset=UTF-8', 'Content-Language': 'fr-FR, fr'}); + fs.readFile('Pentis_404.md', 'utf8', callback); + console.log('MD 404 envoyé.'); + } + console.log('Fin.'); +} +var server = http.createServer(deployment);//Objet serveur à déployer. +var listener = server.listen(1337, '127.0.0.1');//Sur écoute. +console.log('Server running at http://127.0.0.1:1337/'); +var opt = { + host: '127.0.0.1', + port: '1337', + path: '/Pentis.html'}; +function lecture(res) +{ + console.log('--En-tête de réponse HTTP (HTML)--'); + for(var item in res.headers) + { + console.log(item + ": " + res.headers[item]); + } + console.log('----'); +} +http.get(opt, lecture);