diff options
Diffstat (limited to 'themes/danix-xyz-hacker')
| -rw-r--r-- | themes/danix-xyz-hacker/i18n/en.yaml | 15 | ||||
| -rw-r--r-- | themes/danix-xyz-hacker/i18n/it.yaml | 15 | ||||
| -rw-r--r-- | themes/danix-xyz-hacker/layouts/404.html | 169 |
3 files changed, 199 insertions, 0 deletions
diff --git a/themes/danix-xyz-hacker/i18n/en.yaml b/themes/danix-xyz-hacker/i18n/en.yaml index 164b6a8..be5e352 100644 --- a/themes/danix-xyz-hacker/i18n/en.yaml +++ b/themes/danix-xyz-hacker/i18n/en.yaml @@ -49,3 +49,18 @@ error: "An error occurred. Please try again." # Social follow: "Follow me" contactMe: "Contact me" + +# 404 Page +notFoundHeading: "404" +notFound: "Page Not Found" +notFoundMessage: "Sorry, the page you're looking for doesn't exist. Try searching or browse the articles below." +searchPlaceholder: "Search articles..." +noSearchResults: "No articles found matching your search." +recentArticles: "Recent Articles" +goHome: "Go Home" +browseArticles: "Browse Articles" +contactSupport: "Get in Touch" +followWhiteRabbit: "Follow the white rabbit..." +easterEggTitle: "Choose Your Path" +bluePill: "Stay Here" +redPill: "Show Me More" diff --git a/themes/danix-xyz-hacker/i18n/it.yaml b/themes/danix-xyz-hacker/i18n/it.yaml index 926bf01..4c2bf82 100644 --- a/themes/danix-xyz-hacker/i18n/it.yaml +++ b/themes/danix-xyz-hacker/i18n/it.yaml @@ -49,3 +49,18 @@ error: "Si è verificato un errore. Riprova." # Social follow: "Seguimi" contactMe: "Contattami" + +# 404 Page +notFoundHeading: "404" +notFound: "Pagina Non Trovata" +notFoundMessage: "Mi dispiace, la pagina che stai cercando non esiste. Prova a cercare o sfoglia gli articoli qui sotto." +searchPlaceholder: "Cerca articoli..." +noSearchResults: "Nessun articolo trovato che corrisponda alla tua ricerca." +recentArticles: "Articoli Recenti" +goHome: "Torna a Casa" +browseArticles: "Sfoglia Articoli" +contactSupport: "Contattami" +followWhiteRabbit: "Segui il coniglio bianco..." +easterEggTitle: "Scegli il Tuo Percorso" +bluePill: "Rimani Qui" +redPill: "Mostrami di Più" diff --git a/themes/danix-xyz-hacker/layouts/404.html b/themes/danix-xyz-hacker/layouts/404.html new file mode 100644 index 0000000..8cb694c --- /dev/null +++ b/themes/danix-xyz-hacker/layouts/404.html @@ -0,0 +1,169 @@ +{{ define "main" }} +<main class="min-h-screen flex items-center justify-center px-4"> + <div class="text-center max-w-2xl w-full" x-data="notFoundPage()"> + <!-- 404 Heading --> + <h1 class="text-7xl md:text-8xl font-bold text-accent mb-4 animate-fade-in"> + 404 + </h1> + + <!-- Error Message --> + <h2 class="text-3xl md:text-4xl font-bold mb-6"> + {{ i18n "notFound" }} + </h2> + + <p class="text-lg text-text-dim mb-8"> + {{ i18n "notFoundMessage" }} + </p> + + <!-- Search Box --> + <div class="mb-12"> + <form id="search-form" class="flex flex-col gap-4"> + <label for="search-input" class="sr-only">{{ i18n "searchPlaceholder" }}</label> + <input + id="search-input" + type="text" + placeholder="{{ (i18n "searchPlaceholder") }}" + class="px-4 py-3 border-2 border-gray-300 dark:border-gray-700 rounded focus:outline-none focus:ring-2 focus:ring-accent focus:border-transparent bg-bg text-text" + @input="filterArticles($el.value)" + /> + </form> + <div id="search-results" class="mt-4 text-left space-y-3" x-show="filteredArticles.length > 0"> + <template x-for="article in filteredArticles" :key="article.title"> + <div class="p-4 border-l-4 border-accent bg-gray-50 dark:bg-gray-900 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"> + <a :href="article.url" class="block text-left"> + <h4 class="font-bold text-accent hover:underline" x-text="article.title"></h4> + <p class="text-sm text-text-dim mt-1" x-text="article.date"></p> + </a> + </div> + </template> + </div> + <div x-show="searchQuery && filteredArticles.length === 0" class="mt-4 text-text-dim"> + {{ i18n "noSearchResults" }} + </div> + </div> + + <!-- Recent Articles Section --> + <div class="mb-12"> + <h3 class="text-2xl font-bold mb-6">{{ i18n "recentArticles" }}</h3> + <div class="space-y-4"> + {{ range first 5 (where .Site.RegularPages "Section" "articles") }} + <div class="p-4 border-l-4 border-accent bg-gray-50 dark:bg-gray-900 hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors"> + <a href="{{ .Permalink }}" class="block text-left"> + <h4 class="font-bold text-accent hover:underline">{{ .Title }}</h4> + <p class="text-sm text-text-dim mt-1"> + {{ .Date.Format "Jan 02, 2006" }} + </p> + </a> + </div> + {{ end }} + </div> + </div> + + <!-- Navigation Links --> + <div class="space-y-4 flex flex-col items-center mb-12"> + <a href="{{ .Site.BaseURL }}" class="btn btn-primary"> + {{ i18n "goHome" }} + </a> + <a href="{{ .Site.BaseURL }}{{ .Site.Language.Lang }}/articles/" class="btn btn-secondary"> + {{ i18n "browseArticles" }} + </a> + <a href="{{ .Site.BaseURL }}{{ .Site.Language.Lang }}/here/" class="btn btn-outline"> + {{ i18n "contactSupport" }} + </a> + </div> + + <!-- Easter Egg Trigger --> + <div class="mt-12 pt-8 border-t border-gray-300 dark:border-gray-700"> + <button + @click="toggleEasterEgg()" + class="text-sm text-text-dim hover:text-accent transition-colors underline" + > + {{ i18n "followWhiteRabbit" }} + </button> + </div> + + <!-- Easter Egg Modal (Hidden by default) --> + <div + class="fixed inset-0 z-50 hidden" + :class="{ 'flex items-center justify-center': showEasterEgg }" + x-show="showEasterEgg" + x-cloak + > + <!-- Overlay --> + <div + class="absolute inset-0 bg-black/50" + @click="showEasterEgg = false" + ></div> + + <!-- Modal Content --> + <div class="relative bg-bg border-2 border-accent p-8 rounded-lg shadow-xl max-w-md mx-4"> + <h2 class="text-2xl font-bold mb-6 text-accent">{{ i18n "easterEggTitle" }}</h2> + + <div class="space-y-4"> + <button + @click="showEasterEgg = false; window.location.href = '{{ .Site.BaseURL }}'" + class="w-full btn btn-primary" + > + 💊 {{ i18n "bluePill" }} + </button> + + <button + @click="goToRandomArticle()" + class="w-full btn btn-secondary" + > + 🐰 {{ i18n "redPill" }} + </button> + </div> + + <button + @click="showEasterEgg = false" + class="absolute top-4 right-4 text-text-dim hover:text-text dark:hover:text-text transition-colors" + aria-label="Close modal" + > + ✕ + </button> + </div> + </div> + </div> +</main> + +<script> +function notFoundPage() { + return { + showEasterEgg: false, + searchQuery: '', + filteredArticles: [], + allArticles: [ + {{ range (where .Site.RegularPages "Section" "articles") }} + { + title: '{{ .Title | safeJS }}', + url: '{{ .Permalink }}', + date: '{{ .Date.Format "Jan 02, 2006" }}', + content: '{{ (.Summary | plainify | safeJS) }}' + }, + {{ end }} + ], + filterArticles(query) { + this.searchQuery = query.toLowerCase(); + if (!this.searchQuery) { + this.filteredArticles = []; + return; + } + this.filteredArticles = this.allArticles.filter(article => + article.title.toLowerCase().includes(this.searchQuery) || + article.content.toLowerCase().includes(this.searchQuery) + ).slice(0, 5); + }, + toggleEasterEgg() { + this.showEasterEgg = !this.showEasterEgg; + }, + goToRandomArticle() { + if (this.allArticles.length > 0) { + const randomArticle = this.allArticles[Math.floor(Math.random() * this.allArticles.length)]; + window.location.href = randomArticle.url; + } + } + }; +} +</script> +{{ end }} |
