— https://breq.dev/projects/eightyeightthirtyone — servizio che fa crawling di tutti i possibili siti seguendo i link dei bottoni 88x31, mostrando un grafico a rami
-Consiglio: Gli emblemi usati sul mio sito sono tutti ri-hostati da me, e nel processo di ricaricarli mi assicuro di comprimerli con i migliori algoritmi lossless in circolazione, così che occupino il minor spazio possibile pur senza perdere alcun grado di qualità dell'immagine. Consiglio a tutti gli altri di adoperarsi per fare lo stesso, ci sono solo vantaggi.
+Consiglio: Gli emblemi usati sul mio sito sono tutti ri-hostati da me, e nel processo di ricaricarli mi assicuro di comprimerli con i migliori algoritmi lossless in circolazione, qualora sia possibile (ad esempio, per i file PNG), così che occupino il minor spazio possibile pur senza perdere alcun grado di qualità dell'immagine. Consiglio a tutti gli altri di adoperarsi per fare lo stesso, ci sono solo vantaggi.
diff --git a/content/it/miscellanea/Raccolta-Videogiochi/Minesweeper.md b/content/it/miscellanea/Raccolta-Videogiochi/Minesweeper.md
index a216846..dd35abf 100644
--- a/content/it/miscellanea/Raccolta-Videogiochi/Minesweeper.md
+++ b/content/it/miscellanea/Raccolta-Videogiochi/Minesweeper.md
@@ -54,7 +54,8 @@ Accumulando quella singola o doppia partita giornaliera nelle settimane, nei mes
Parafrasando ciò che scrive [un autore di PCGamesN](https://www.pcgamesn.com/minesweeper/get-free): **Campo minato è una delle forme di escapismo digitale più pure** di cui si possa fare esperienza, perché è la dimostrazione pratica di come un gioco, per essere profondamente immersivo, non ha un vitale bisogno di un _open world_ dettagliato, narrativa elaborata, o personaggi a cui affezionarsi.
-...Scusa, ci sono lavori in corso su questa pagina, sto piazzando le mine in giro per trollare le prossime persone che verranno qui a leggere e inciamperanno su qualche parola... se nel frattempo vuoi imparare a giocare leggiti [Wikipedia](https://it.wikipedia.org/Campo_minato_(videogioco)), vai va...
+...Scusa, ci sono lavori in corso su questa pagina, sto piazzando le mine in giro per trollare le prossime persone che verranno qui a leggere e inciamperanno su qualche parola... se nel frattempo vuoi imparare a giocare leggiti [Wikipedia](https://it.wikipedia.org/wiki/Campo_minato_(videogioco)), vai va...
+{ style="background: #fde; padding: 0.5em;" }
{{< embed ouCe9OTmTUs youtube "16:9" "LGR — Minesweeper is Hardcore Gaming" >}}
@@ -109,4 +110,4 @@ Sto lavorando per rendere il gioco personalizzabile, per il momento si può solo
[^Windows_Vista_and_Windows_7]:
[^PageBg]: **Sfondo della Pagina**: [Fonte](https://www.techradar.com/news/gaming/the-most-successful-game-ever-a-history-of-minesweeper-596504)
-
+
diff --git a/content/it/miscellanea/sitoctt-Internals.md b/content/it/miscellanea/sitoctt-Internals.md
new file mode 100644
index 0000000..4314461
--- /dev/null
+++ b/content/it/miscellanea/sitoctt-Internals.md
@@ -0,0 +1,39 @@
++++
+Title = "⚙️ sitoctt Internals"
+Categories = [ "Meta" ]
+Lastmod = 2024-12-08
++++
+
+Negli interminabili anni della sua esistenza, il sitoctt si è evoluto e continua ad evolversi, ottenendo funzionalità epiche ed in generale un'aura di magia... e chi vuole diventare come me potrebbe voler iniziare dal creare un proprio sito prendendo anche il mio come ispirazione.
+
+Per questo, credo sia carino tenere una raccolta dettagliata delle varie specialità tecniche del sito, illustrate per bene; magari spiegate in modo che siano comprensibili anche a coloro che hanno un po' di curiosità ma non sono addetti ai lavori. (Il tutto, poi, sarebbe utile persino a me per tenere nota di dettagli mistissimi, quindi non ho di che indugiare.)
+
+Il sitoctt è in ogni caso completamente libero e open-source; le note sul copyright, le licenze e la struttura completa dei sorgenti sono descritte alla pagina "[🔓️ Open Source]({{< relref "/miscellanea/Open-Source-sitoctt/" >}})"!
+
+_...In costruzione..._
+
+## Generale
+
+Il sito è un cosidetto "sito statico", cioè una collezione di file HTML e risorse connesse senza un programma di backend server con logica e database. Questo comporta una manutenzione molto bassa e la possibilità di ospitare il sito praticamente ovunque, pure gratuitamente, nonché di distribuirlo senza troppe difficoltà in diversi formati.
+
+Nel mio caso, come ormai è usanza comune, le pagine statiche del sito sono compilate con un "generatore". Da maggio 2022 ad agosto 2024 ho tenuto il sito sotto _staticoso_, il mio generatore creato appositamente e poi deprecato, poiché il codice era diventato troppo [_spaghetti_](https://it.wikipedia.org/wiki/Spaghetti_code); da agosto 2024 ho migrato il sito ad [_Hugo_](https://gohugo.io).
+
+In passato, i template/temi del sito erano 3 molto semplici, non tecnicamente separabili da staticoso e creati da zero; dalla migrazione ad Hugo viene usato un tema personalizzato (con lievi modifiche a colori e layout) creato a partire da [_Ananke_](https://themes.gohugo.io/themes/gohugo-theme-ananke/), uno dei più consigliati per chi vuole fare modifiche.
+
+## Ricerca
+
+Il sitoctt integra un campo di ricerca testuale, con il quale si può raggiungere immediatamente qualsiasi altra pagina del sito. È implementato con due modalità:
+
+* **JavaScript (locale)**: Al caricamento di ogni pagina, viene caricato un indice (quello per la lingua corrente, visto che sono separati per tenere alte le prestazioni) con i metadati di tutte le pagine del sito, che viene poi gestito dallo [script `site-search.js`](https://gitlab.com/octtspacc/sitoctt/-/blob/sitoctt-next/static/res/site-search.js) e il template [`search-applet.html`](https://gitlab.com/octtspacc/sitoctt/-/blob/sitoctt-next/layouts/partials/search-applet.html); l'ho costruito prendendo il codice di ricerca dal tema [_Blowfish_](https://themes.gohugo.io/themes/blowfish/) per Hugo. (L'indice è in realtà un file JavaScript che inizializza un oggetto globale JSON, e non un file JSON puro, cosa che permette alla ricerca di funzionare anche quando il sito è navigato da file locali; è generato dal [template `index.searchindex.js`](https://gitlab.com/octtspacc/sitoctt/-/blob/sitoctt-next/layouts/index.searchindex.js).)
+* **Fallback**: Nel caso JavaScript non possa essere eseguito nel browser, la casella di ricerca funziona in modo più classico e si appoggia alla [mia istanza YaCy](https://yacy.spacc.eu.org), che funziona esattamente come un motore di ricerca web normale (Google, DuckDuckGo, ecc...) ma indicizza meglio tutte le mie pagine (e quindi non sta solo per bellezza).
+
+## Multilingua
+
+La gestione di lingue multiple per le varie pagine del sito è gestita con funzionalità integrate in Hugo.
+
+Quasi tutte le pagine e i post sono tradotti automaticamente dall'italiano ad altre lingue, nella mia speranza di rendere il sito un pochino più utile, perché potenzialmente individuabile da più persone tramite motori di ricerca; questo lo faccio con [uno script Python creato proprio per questo](https://gitlab.com/octtspacc/sitoctt/-/blob/sitoctt-next/Scripts/Translate/Main.py), che sfrutta _Google Traduttore_ attraverso [lo script/libreria _Translate Shell_](https://memos.octt.eu.org/m/aC95aGEzJi7DvU2teM3eos).
+
+## Altro?
+
+Non lo so. Non sperate mi venga in mente altro da aggiungere dal nulla; piuttosto, lasciate un commento su questa pagina se qualcosa vi incuriosisce e volete maggiori dettagli, spiegati al di là del codice...
+
diff --git a/layouts/partials/ImgButton.html b/layouts/partials/ImgButton.html
index 63c601c..bfab5f2 100644
--- a/layouts/partials/ImgButton.html
+++ b/layouts/partials/ImgButton.html
@@ -22,6 +22,9 @@
{{- $html := $img -}}
{{- if $extended -}}
{{- $html = (printf "%s %s" $img .alt) | safeHTML -}}
+ {{- if .oc -}}
+ {{- $html = (printf "%s [OC]" $html) | safeHTML -}}
+ {{- end -}}
{{- end -}}
{{- if .href -}}
{{- $html = (partial "anchor.html" (dict
diff --git a/layouts/partials/search-applet.html b/layouts/partials/search-applet.html
index 5e81f41..46e2a29 100644
--- a/layouts/partials/search-applet.html
+++ b/layouts/partials/search-applet.html
@@ -35,4 +35,4 @@
-
+
diff --git a/static/MinesweeperEmbed.js b/static/res/MinesweeperEmbed.js
similarity index 100%
rename from static/MinesweeperEmbed.js
rename to static/res/MinesweeperEmbed.js
diff --git a/static/ajax-navigation.js b/static/res/ajax-navigation.js
similarity index 65%
rename from static/ajax-navigation.js
rename to static/res/ajax-navigation.js
index bf02aa8..d3e38ac 100644
--- a/static/ajax-navigation.js
+++ b/static/res/ajax-navigation.js
@@ -6,7 +6,7 @@ window.SiteInitOnLoad = [];
var oldUrl = null;
// TODO before deploying this: handle page-specific scripts (comments, etc...)
-//if (location.protocol === 'file:') {
+//if (location.protocol === 'file:' /* && !isSingleFileBuild */) {
window.PatchAjaxNavigationAnchor = Void;
return; // HTTP requests don't work on local files with default browser configuration
//}
@@ -22,7 +22,7 @@ function initPage () {
}
oldUrl = location.href;
var langToken = ('/' + document.documentElement.lang + '/');
- var baseHref = (location.href.split(langToken)[0] + langToken);
+ var baseHref = (location.href.split(langToken)[0] + langToken); // we reload page on language change due to search index differences
Array.from(document.querySelectorAll('a[href]')).filter(function(anchorEl){
//var tokens = href.split('/' + document.documentElement.lang + '/');
//if (location.href.slice(0, href[0]))
@@ -31,26 +31,34 @@ function initPage () {
}).forEach(PatchAjaxNavigationAnchor);
}
-function loadContent (url, push) {
- function useFallback () {
- location.href = url;
+function setNewPage (html, pushUrl, fallbackTimeout) {
+ var domNew = (new DOMParser).parseFromString(html, 'text/html');
+ if (pushUrl) {
+ history.pushState(null, null, pushUrl);
}
- var fallbackTimeout = setTimeout(useFallback, 3000);
- fetch(url)
- .then(function(request){ return request.text(); })
- .then(function(html){
- var domNew = (new DOMParser).parseFromString(html, 'text/html');
- if (push) {
- history.pushState(null, null, url);
- }
- document.head.innerHTML = domNew.head.innerHTML;
- document.body.innerHTML = domNew.body.innerHTML;
- initPage();
- clearTimeout(fallbackTimeout);
- }).catch(function(err){
- console.error(err);
- useFallback();
- });
+ document.head.innerHTML = domNew.head.innerHTML;
+ document.body.innerHTML = domNew.body.innerHTML;
+ initPage();
+ clearTimeout(fallbackTimeout);
+}
+
+function loadContent (url, push) {
+ //if (isSingleFileBuild) { // TODO
+ // setNewPage(html, (push && url), fallbackTimeout);
+ //} else {
+ function useFallback () {
+ location.href = url;
+ }
+ var fallbackTimeout = setTimeout(useFallback, 3000);
+ fetch(url)
+ .then(function(request){ return request.text(); })
+ .then(function(html){
+ setNewPage(html, (push && url), fallbackTimeout);
+ }).catch(function(err){
+ console.error(err);
+ useFallback();
+ });
+ //}
}
window.PatchAjaxNavigationAnchor = (function PatchAjaxNavigationAnchor (anchorEl) {
@@ -64,7 +72,11 @@ window.PatchAjaxNavigationAnchor = (function PatchAjaxNavigationAnchor (anchorEl
}
});
-window.addEventListener('DOMContentLoaded', initPage);
+if (document.readyState === 'loading') {
+ document.addEventListener('DOMContentLoaded', initPage);
+} else {
+ initPage();
+}
window.addEventListener('popstate', (function(stateEvent){
if (toPathUrl(location.href) !== toPathUrl(oldUrl)) {
diff --git a/static/analytics.js b/static/res/analytics.js
similarity index 100%
rename from static/analytics.js
rename to static/res/analytics.js
diff --git a/static/desinenze-blink.css b/static/res/desinenze-blink.css
similarity index 100%
rename from static/desinenze-blink.css
rename to static/res/desinenze-blink.css
diff --git a/static/lib/forge.min.js b/static/res/lib/forge.min.js
similarity index 100%
rename from static/lib/forge.min.js
rename to static/res/lib/forge.min.js
diff --git a/static/lib/fuse.min.js b/static/res/lib/fuse.min.js
similarity index 100%
rename from static/lib/fuse.min.js
rename to static/res/lib/fuse.min.js
diff --git a/static/local-file-tweaks.js b/static/res/local-file-tweaks.js
similarity index 100%
rename from static/local-file-tweaks.js
rename to static/res/local-file-tweaks.js
diff --git a/static/markdown-editor.js b/static/res/markdown-editor.js
similarity index 100%
rename from static/markdown-editor.js
rename to static/res/markdown-editor.js
diff --git a/static/octt-runtime.js b/static/res/octt-runtime.js
similarity index 100%
rename from static/octt-runtime.js
rename to static/res/octt-runtime.js
diff --git a/static/site-search.js b/static/res/site-search.js
similarity index 100%
rename from static/site-search.js
rename to static/res/site-search.js
diff --git a/themes/ananke/layouts/partials/site-scripts.html b/themes/ananke/layouts/partials/site-scripts.html
index bb6ca42..705a981 100644
--- a/themes/ananke/layouts/partials/site-scripts.html
+++ b/themes/ananke/layouts/partials/site-scripts.html
@@ -8,13 +8,13 @@ window.Void = (function Void(){});
{{- end -}}
window.sitoctt.localStorage = (function localStorage(key, value){ return SpaccDotWeb.LocalStorage('org.eu.octt.sitoctt', key, value); });
-
-
+
+
-
-
-
+
+
+
{{ if hugo.IsProduction }}
-
+
{{ end }}
-
+