diff --git a/.gitignore b/.gitignore index c3cc163..0074e6d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,7 @@ temp/* mdp.php antopie/css antopie/*.html +!antopie/*.inc.html /docs +/miraty +.directory diff --git a/README.md b/README.md index 23f3bae..f3b9c55 100755 --- a/README.md +++ b/README.md @@ -4,25 +4,14 @@ Ceci est le code source du générateur de sites statiques qui créé le [site w # Utilisation -Placer les pages dans `/md/.md`. Le format est principalement du Markdown Extra mais il est aussi possible de rajouter de l'HTML et du PHP. Elles sont ensuite transformées par `compil.php` en pages HTML statiques, placées dans `/.html` +`compil.php ` -`compil.php ` - -Avec `site` qui est le dossier contenant le site et pour `destination` : +Avec `destination` : * Pour déployer en DNS en liant vers `page`, utiliser `dns`. * Pour déployer en Onion en liant vert `page`, utiliser `onion`. -* Pour déployer en DNS en liant vert `page.html`, ignorer ce dernier argument. +* Pour déployer en DNS en liant vert `page.html`, utiliser `local`. -Les droits d'écriture sont requis sur `/css` et `temp/` par l'user qui exécute PHP. - -`compil.php` va chercher à utiliser [static-compress](https://github.com/neosmart/static-compress) dans `/usr/local/bin/static-compress` pour compresser les fichiers CSS et HTML créés. - -``` -$ cargo install static-compress -$ sudo mv ~/.cargo/bin/static-compress /usr/local/bin/ -``` - -Exemple de commande pour tester le développement en local après avoir modifié le site : `php compil.php antopie local && python3 -m http.server -b 127.0.0.1 -d antopie` +Exemple pour le site d'Antopie : `compil.php antopie local Antopie` # Bibliothèques utilisées @@ -33,12 +22,6 @@ Le dossier `bibli` contient les dépendances incluses dans le générateur de si | less.php | Compilateur Less en PHP | https://github.com/wikimedia/less.php | | parsedown | Compilateur Markdown en PHP | https://parsedown.org | -Il y a aussi une dépendance spécifique au site d'Antopie : - -| Nom | Description | Source | -| --------- | ------------------- | ---------------------------------------- | -| fontello | Pack d'icônes | http://fontello.com | - # Licence Le générateur de sites web d'Antopie est un logiciel libre ; vous pouvez le diffuser et le modifier suivant les termes de la GNU Affero General Public License telle que publiée par la Free Software Foundation ; soit la version 3 de cette licence, soit (à votre convenance) une version ultérieure. diff --git a/antopie/end.inc.html b/antopie/end.inc.html new file mode 100644 index 0000000..9a7ce07 --- /dev/null +++ b/antopie/end.inc.html @@ -0,0 +1,40 @@ + diff --git a/antopie/head.inc.html b/antopie/head.inc.html new file mode 100644 index 0000000..eabb032 --- /dev/null +++ b/antopie/head.inc.html @@ -0,0 +1,6 @@ + + + + + + diff --git a/antopie/img/antopiev5-500.webp b/antopie/img/logo.webp similarity index 100% rename from antopie/img/antopiev5-500.webp rename to antopie/img/logo.webp diff --git a/antopie/manifeste-sur-le-contenu.md b/antopie/manifeste-sur-le-contenu.md index 19b3e1f..c41eef1 100644 --- a/antopie/manifeste-sur-le-contenu.md +++ b/antopie/manifeste-sur-le-contenu.md @@ -2,7 +2,7 @@ Antopie est hostile à la propagation de contenus droitistes, et est susceptible d'appliquer une modération en conséquence. -Le terme droitiste peut par exemple comprendre *essentialiste*, *spéciste*, *genriste*, *raciste*, *nationaliste*, *autoritariste*, *capitaliste*, *propriétariste*, *productiviste*, *capacitiste*, *socio-normativiste*, *théiste*, *spiritualiste* ou *conspirationniste*. +Le terme droitiste peut par exemple comprendre *essentialiste*, *spéciste*, *socionormativiste*, *genriste*, *masculiniste*, *hétérosexualiste*, *raciste*, *nationaliste*, *autoritariste*, *capitaliste*, *propriétariste*, *productiviste*, *théiste*, *spiritualiste* ou *conspirationniste*. Ceci a été exprimé plus dans le but de guider les personnes dans leur choix de service avant leur établissement sur Antopie que de limiter l'expression des personnes qui sont déjà dessus. Aussi, si vous êtes d'accord avec ce qui est dit dans ce manifeste, vous ne devriez pas avoir besoin de vérifier la compatibilité de tout ce que vous dites avec. La modération sur Antopie est faite avec bienveillance et est ouverte à discussion. L'immense majorité des contenus retirés d'Antopie sont du spam ou sont publiés par des personnes n'ayant pas lu ce manifeste. diff --git a/antopie/style.less b/antopie/style.less new file mode 100644 index 0000000..40c0511 --- /dev/null +++ b/antopie/style.less @@ -0,0 +1,143 @@ + + +.action::before { + content: "➡ "; +} + +.grid { + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-gap: 30px; + + @media (min-width: 2500px) { + grid-template-columns: 1fr 1fr 1fr 1fr 1fr; + } + + @media (min-width: 3000px) { + grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr; + } + + @media (max-width: 1500px) { + grid-template-columns: 1fr 1fr 1fr; + } + + @media (max-width: 1000px) { + grid-template-columns: 1fr 1fr; + } + + @media (max-width: 600px) { + grid-template-columns: 1fr; + } + +} + +.metaService { + margin: 6px; + margin-bottom: 0px; +} + +.metasService { + display: flex; + flex-direction: row; + justify-content: center; + font-size: 0.7em; +} + +.logoService { + text-align: center; +} + +.elLogoServ { + max-width: 150px; + max-height: 100px; +} + +.descService { + padding-top: 5px; + padding-bottom: 10px; + text-align: left; +} + +.domService { + font-family: monospace; + overflow-wrap: anywhere; + margin-top: -6px; + font-size: 0.8em; + @media @light { + color: @darkerColor; + } + @media @dark { + color: @lightlessColor; + } +} + +#lienHeader { + margin: 0px; + padding: 30px; + padding-bottom: 20px; + margin-left: 35px; + margin-right: 35px; + + @media (max-width: 600px) { + padding: 0px; + margin-top: 20px; + margin-left: 20px; + margin-right: 20px; + } +} + +footer.antopie { + display: flex; + flex-direction: column; +} + +.logofooter { + padding-left: 6%; + margin-top: 20px; + text-align: center; +} + +.interlude { + display: flex; + justify-content: center; +} + +.traitinterlude > hr { + display: none; +} + +.traitinterlude { + border-top: 2px gray dashed; + width: 450px; +} + + +.liensfooter { + display: flex; + flex-direction: row; + padding: 20px; +} + +.lienfooter { + margin: 10px; +} + +h1.titreService { + font-size: 1.3em; + text-align: center; + margin: 0px; + padding-bottom: 0px; + padding-top: 0px; +} + +@media (max-width: 800px) { + + .basfooter { + flex-direction: column; + } + + .logofooter { + padding: 0px; + } + +} diff --git a/compil.php b/compil.php index 60fbd6a..26472cf 100755 --- a/compil.php +++ b/compil.php @@ -1,20 +1,48 @@ +#!/usr/bin/php CSS +require ROOT . "/bibli/less.php/lib/Less/Autoloader.php"; +Less_Autoloader::register(); +$options = array('cache_dir' => SITE . '/css', 'compress' => true); - foreach ($pages as $page) { +if (file_exists(SITE . "/style.less")) + $lessFiles = array(ROOT . '/style.less' => '', SITE . '/style.less' => ''); +else + $lessFiles = array(ROOT . '/style.less' => ''); - $pathParts = pathinfo($page); +define("CSS_FILENAME", Less_Cache::Get($lessFiles, $options)); - // Convert Gemtext to Markdown +exec(FIND . " " . SITE . " -name '*.gmi' -o -name '*.md'", $pages); + +require "inc/url.php"; + +foreach ($pages as $page) { + + $pathParts = pathinfo($page); + + // Convert Gemtext to Markdown + if ($pathParts['extension'] === "gmi") { $gmilines = explode("\n", file_get_contents($page)); if (substr($gmilines[0], 0, 2) === "# ") @@ -26,9 +54,18 @@ if (php_sapi_name() === "cli") { if (substr($line, 0, 2) === "=>") { preg_match("/=> +(.[^ ]+)/", $line, $lnUrl); preg_match("/=> +.[^ ]+ +(.+)/", $line, $lnTitle); + + // Escape Markdown special characters $mdSpecial = array("[", "]", "(", ")"); $htmlEntities = array("[", "]", "(", ")"); $lnUrl[1] = str_replace($mdSpecial, $htmlEntities, $lnUrl[1]); + + $urlPathParts = pathinfo(parse_url($lnUrl[1], PHP_URL_PATH)); + + // .gmi > .md for local links + if (!str_contains($lnUrl[1], ":") AND $urlPathParts['extension'] === "gmi") // If it's a local link + $lnUrl[1] = $urlPathParts['dirname'] . "/" . $urlPathParts['filename'] . ".md"; + if (isset($lnTitle[1])) { $lnTitle[1] = str_replace($mdSpecial, $htmlEntities, $lnTitle[1]); $gmilines[$key] = "[" . $lnTitle[1] . "](" . $lnUrl[1] . ")"; @@ -41,47 +78,52 @@ if (php_sapi_name() === "cli") { foreach ($gmilines as $line) { $code = $code . "\n" . $line; } - - // pages/exemple.md > temp/exemple.temp - // Exécute le PHP vers du HTML - ob_start(); - eval("?>" . $code); - $contenuPage = ob_get_contents(); - ob_end_clean(); - - // temp/exemple.temp > temp2/exemple.temp2 - // Compile le Markdown vers du HTML - $Parsedown = new ParsedownExtra; - $Parsedown = $Parsedown->setUrlsLinked(false); - $Parsedown = $Parsedown->setMarkupEscaped(false); - $Parsedown = $Parsedown->setBreaksEnabled(true); - $contenuPage = $Parsedown->text($contenuPage); - - // temp2/exemple.temp2 > exemple.html - // Ajoute header et footer au HTML - ob_start(); - - require "inc/debut.php"; - if ($pathParts['filename'] === "index") { - echo "
"; - } else { - echo "
"; - } - echo $contenuPage; - if ($pathParts['filename'] === "index") { - echo "
"; - } else { - echo ""; - } - require "inc/footer.php"; - file_put_contents($pathParts['dirname'] . "/" . $pathParts['filename'] . ".html", ob_get_contents()); - ob_end_clean(); - + file_put_contents($pathParts['dirname'] . "/" . $pathParts['filename'] . ".md", $code); } - // exemple.html > exemple.html.gz - // Compresse les fichiers textes statiques HTML & CSS - exec('/usr/local/bin/static-compress -c zopfli "' . SITE . '/*.html" "' . SITE . '/*.js" "' . SITE . '/css/*.css"'); -} else { - exit("Must be run from CLI"); + + // Execute PHP code + ob_start(); + eval("?>" . file_get_contents($pathParts['dirname'] . "/" . $pathParts['filename'] . ".md")); + $pageContent = ob_get_contents(); + ob_end_clean(); + + + // Compile Markdown to HTML with Parsedown + $Parsedown = new ParsedownExtra; + $Parsedown = $Parsedown->setUrlsLinked(false); + $Parsedown = $Parsedown->setMarkupEscaped(false); + $Parsedown = $Parsedown->setBreaksEnabled(true); + $pageContent = $Parsedown->text($pageContent); + + + // .md > .html for local links + $pageContent = preg_replace('##', '', $pageContent); + + + // Add header and footer to HTML + + ob_start(); + + require "inc/debut.php"; + if ($pathParts['filename'] === "index") { + echo "
"; + } else { + echo "
"; + } + echo $pageContent; + if ($pathParts['filename'] === "index") { + echo "
"; + } else { + echo ""; + } + require "inc/footer.php"; + file_put_contents($pathParts['dirname'] . "/" . $pathParts['filename'] . ".html", ob_get_contents()); + ob_end_clean(); + + + // Gzip compression + exec(GZIP . " --keep --fast --force " . $pathParts['dirname'] . "/" . $pathParts['filename'] . ".html"); } + +exec(GZIP . " --keep --fast --force " . SITE . "/css/" . CSS_FILENAME); diff --git a/inc/debut.php b/inc/debut.php index 7bfcbb9..52e02bd 100755 --- a/inc/debut.php +++ b/inc/debut.php @@ -3,59 +3,33 @@ <?php - if (!is_null($title)) - echo $title . " · Antopie"; + if (isset($title) AND !is_null($title)) + echo $title . " · " . SITE_TITLE; else - echo "Antopie"; + echo SITE_TITLE; ?> + SITE . '/css', 'compress' => true); - $lessFiles = array('style.less' => ''); - $cssFileName = Less_Cache::Get($lessFiles, $options); + if (file_exists(SITE . "/head.inc.html")) + echo file_get_contents(SITE . "/head.inc.html"); ?> - - - - - - - - -
- - + - - - - - - - -
diff --git a/inc/footer.php b/inc/footer.php index b51fd1b..ee5b42d 100755 --- a/inc/footer.php +++ b/inc/footer.php @@ -1,55 +1,10 @@
- - - -
- Site créé avec Base Antopie -
- Documentation sous CC BY-SA. -
- Source du contenu | Kopimi -
- - diff --git a/style.less b/style.less index 4855b96..6e0caf2 100755 --- a/style.less +++ b/style.less @@ -174,7 +174,7 @@ strong { pre, code, var, samp { font-family: monospace; - overflow: scroll; + overflow: scroll; padding: 5px; border-radius: 10px; font-style: normal; @@ -216,77 +216,6 @@ p { padding-bottom: 10px; } -.action::before { - content: "➡ "; -} - -.grid { - display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr; - grid-gap: 30px; - - @media (min-width: 2500px) { - grid-template-columns: 1fr 1fr 1fr 1fr 1fr; - } - - @media (min-width: 3000px) { - grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr; - } - - @media (max-width: 1500px) { - grid-template-columns: 1fr 1fr 1fr; - } - - @media (max-width: 1000px) { - grid-template-columns: 1fr 1fr; - } - - @media (max-width: 600px) { - grid-template-columns: 1fr; - } - -} - -.metaService { - margin: 6px; - margin-bottom: 0px; -} - -.metasService { - display: flex; - flex-direction: row; - justify-content: center; - font-size: 0.7em; -} - -.logoService { - text-align: center; -} - -.elLogoServ { - max-width: 150px; - max-height: 100px; -} - -.descService { - padding-top: 5px; - padding-bottom: 10px; - text-align: left; -} - -.domService { - font-family: monospace; - overflow-wrap: anywhere; - margin-top: -6px; - font-size: 0.8em; - @media @light { - color: @darkerColor; - } - @media @dark { - color: @lightlessColor; - } -} - .centre { text-align: center; justify-content: center; @@ -315,75 +244,23 @@ article { text-align: center; } -.interlude { - display: flex; - justify-content: center; -} - -.traitinterlude > hr { - display: none; -} - -.traitinterlude { - border-top: 2px gray dashed; - width: 450px; -} - footer { text-align: center; } -footer.antopie { - display: flex; - flex-direction: column; -} - -.logofooter { - padding-left: 6%; - margin-top: 20px; - text-align: center; -} - -.liensfooter { - display: flex; - flex-direction: row; - padding: 20px; -} - -.lienfooter { - margin: 10px; -} - -/* ----------------------- HEADER ------------------------ */ - -#lienHeader { - margin: 0px; - padding: 30px; - padding-bottom: 20px; - margin-left: 35px; - margin-right: 35px; - - @media (max-width: 600px) { - padding: 0px; - margin-top: 20px; - margin-left: 20px; - margin-right: 20px; - } -} - header { display: flex; justify-content: center; } -// ----- TITRES ----- +// ----- TITLES ----- h1, h2, h3, h4, h5, h6 { font-weight: normal; line-height: 100%; } -h1:not(.titreService) { +h1 { font-size: 250%; text-align: center; margin: 0px; @@ -391,12 +268,6 @@ h1:not(.titreService) { padding-top: 15px; } -h1.titreService { - font-size: 1.3em; - text-align: center; - margin: 0px; -} - h2 { font-size: 200%; margin-top: 50px; @@ -422,15 +293,3 @@ h5 { h6 { font-size: 107%; } - -@media (max-width: 800px) { - - .basfooter { - flex-direction: column; - } - - .logofooter { - padding: 0px; - } - -}