SHA256
CLI-Fixes: Help/Version vor Build, Content-Check, Default-Envs, Artefakte aus Git
- Program.cs: --help/--version werden vor Config-Laden und Directories.Init geprüft (verhindert Crashes außerhalb eines Site-Verzeichnisses) - Builder.cs: Pre-flight-Check ob content/ existiert; bei Fehlen klare Fehlermeldung + Exit 1 statt unhandled Exception. Build() gibt bool zurück, Program.cs setzt Environment.ExitCode. - BuildConfig.cs: Default-Environments von work/review/staging/deploy auf development/staging/deploy bereinigt (konsistent mit CLI-Aliasen) - .gitignore: build_log.txt/run_log.txt und webstatic.example/dist/ ignoriert; entsprechende Artefakte aus Git entfernt - tests/README.md: Platzhalter für künftige Test-Strategie - plans/01-offensichtliche-fixes.md: Fix-Plan dokumentiert
This commit is contained in:
@@ -20,6 +20,15 @@ artifacts/
|
||||
# Generated site output
|
||||
/dist/
|
||||
|
||||
# Build logs (written into the build root by every `webstatic build`)
|
||||
/build_log.txt
|
||||
/run_log.txt
|
||||
|
||||
# Example site output and logs (regenerated on build)
|
||||
webstatic.example/dist/
|
||||
webstatic.example/build_log.txt
|
||||
webstatic.example/run_log.txt
|
||||
|
||||
# Machine-translation drafts (never commit)
|
||||
.translation-drafts/
|
||||
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
=== Build Started: 2026-07-11 16:11:56.657 ===
|
||||
ENV: development
|
||||
BASE_URL: http://localhost:8000
|
||||
CDN_ASSETS: /assets
|
||||
ROOT: /mnt/brx5/work/OSS/build_webstatic
|
||||
|
||||
@@ -0,0 +1,158 @@
|
||||
# Plan 01 — Offensichtliche Fixes
|
||||
|
||||
> Status: Draft (2026-07-11). Aus der Code-Inspektion und Testläufen gegen das
|
||||
> GCBoK-Website-Repo (`/mnt/brx5/REPOS/GCC/gcbok.gitcover.org`) und das
|
||||
> Dev-Quell-Repo (`/mnt/brx5/work/OSS/build_webstatic`) abgeleitet.
|
||||
|
||||
## Kontext
|
||||
|
||||
Die GCBoK-Website nutzt jetzt ausschließlich die `webstatic`-CLI (alte
|
||||
`www/build.py`, `www/build.sh` und `www/oss/`-Vendor-Snapshot wurden entfernt).
|
||||
Dabei zeigten sich Probleme, die hier zur Behebung anstehen.
|
||||
|
||||
## Fix 1 — Installierte Binary ist veraltet (`/opt/GitCover/webstatic`)
|
||||
|
||||
**Symptom:** `webstatic --version` und `webstatic --help` crashen mit
|
||||
`DirectoryNotFoundException: .../content` — der Build läuft los, bevor
|
||||
`--help`/`--version` ausgewertet werden.
|
||||
|
||||
**Ursache:** `/opt/GitCover/webstatic/src/Program.cs` (7223 B, 11. Jul 15:59)
|
||||
ist älter als der aktuelle Dev-Stand (`src/Program.cs`, 380 Zeilen). Die
|
||||
installierte Binary wurde aus einem Zwischenstand gebaut, in dem
|
||||
`--help`/`--version`-Checks erst *nach* `Builder.Build()` kamen. Der aktuelle
|
||||
Dev-Stand hat die Checks bereits an richtiger Position (Zeile 50–64, vor dem
|
||||
Build-Aufruf Zeile 118).
|
||||
|
||||
**Maßnahme:**
|
||||
1. Dev-Quellbaum baut sauber (`dotnet build -c Release` ✓ verifiziert).
|
||||
2. System-Installation aktualisieren:
|
||||
```bash
|
||||
sudo env PATH="$PATH" \
|
||||
WEBSTATIC_INSTALL_DIR=/opt/GitCover/webstatic \
|
||||
WEBSTATIC_BIN_DIR=/usr/local/bin \
|
||||
/mnt/brx5/work/OSS/build_webstatic/install.sh
|
||||
```
|
||||
(oder `webstatic update`, falls die Installation ein Clone ist —
|
||||
`/opt/GitCover/webstatic/.git` prüfen).
|
||||
3. Verifizieren: `webstatic --version` (erwartet: `1.0.0.0` + Commit-Hash),
|
||||
`webstatic --help` (erwartet: Hilfe-Text, Exit 0),
|
||||
`webstatic build --root /mnt/brx5/REPOS/GCC/gcbok.gitcover.org/www --env development --verbose`
|
||||
(erwartet: erfolgreicher Build, Exit 0).
|
||||
|
||||
## Fix 2 — `--help`/`--version` sollten VOR Config-Laden und `Directories.Init` geprüft werden
|
||||
|
||||
**Symptom:** Aktuell läuft `BuildConfig.Load()` (Zeile 24) und
|
||||
`Directories.Init()` (Zeile 47), bevor `--help`/`--version` abgefragt werden
|
||||
(Zeile 50/57). Das funktioniert zwar (Load ist fehlertolerant), ist aber
|
||||
fragil und verschwendet Arbeit.
|
||||
|
||||
**Maßnahme:** In `src/Program.cs` die `--help`/`-h`/`help`/`--version`-Checks
|
||||
ganz an den Anfang der `Main` verschieben (direkt nach den Hilfsfunktionen
|
||||
`Has`/`Val`, vor `BuildConfig.Load`).
|
||||
|
||||
## Fix 3 — Fehlendes `content/`-Verzeichnis nicht graceful behandelt
|
||||
|
||||
**Symptom:** Wenn `--root` auf ein Verzeichnis ohne `content/` zeigt (z. B.
|
||||
Repo-Root statt `www/`), crasht `ContentLoader.LoadContent` (Zeile 22:
|
||||
`Directory.GetFiles(contentDir, ...)`) mit ungefangenem
|
||||
`DirectoryNotFoundException`.
|
||||
|
||||
**Maßnahme:** In `Builder.Build()` (oder `ContentLoader.LoadContent`) prüfen,
|
||||
ob `Directories.ContentDir` existiert. Wenn nicht: klare Fehlermeldung
|
||||
```
|
||||
ERROR: content directory not found: <path>
|
||||
Specify --root <dir> or --content <dir>.
|
||||
```
|
||||
und `return` (Exit 1), statt Exception-Stacktrace.
|
||||
|
||||
## Fix 4 — `webstatic.example/` enthält Build-Artefakte im Git
|
||||
|
||||
**Symptom:** `git ls-files webstatic.example/` zeigt `build_log.txt`,
|
||||
`run_log.txt` und das komplette `dist/`-Verzeichnis (HTML, Pagefind-Index)
|
||||
sind versioniert. Diese werden bei `webstatic init` mitkopiert.
|
||||
|
||||
**Maßnahme:**
|
||||
1. `webstatic.example/build_log.txt`, `webstatic.example/run_log.txt` aus Git
|
||||
entfernen (`git rm`).
|
||||
2. `webstatic.example/dist/` aus Git entfernen (`git rm -r`).
|
||||
3. `.gitignore` erweitern:
|
||||
```
|
||||
webstatic.example/dist/
|
||||
webstatic.example/build_log.txt
|
||||
webstatic.example/run_log.txt
|
||||
```
|
||||
4. Sicherstellen, dass `webstatic init` die Beispiel-Site sauber scaffoldet
|
||||
(ohne Artefakte).
|
||||
|
||||
## Fix 5 — Repo-eigene `build_log.txt`/`run_log.txt` werden beim Dev-Build geschrieben
|
||||
|
||||
**Symptom:** Ein Build im Dev-Quellbaum (z. B.
|
||||
`dotnet ... build --root webstatic.example`) schreibt `build_log.txt` und
|
||||
`run_log.txt` in den Build-Root (`webstatic.example/`). Das ist korrekt.
|
||||
Zusätzlich stehen aber `build_log.txt` und `run_log.txt` im Repo-Root
|
||||
(`/mnt/brx5/work/OSS/build_webstatic/`) und sind versioniert — sie werden bei
|
||||
jedem versehentlichen Build ohne `--root` (Default = cwd = Repo-Root)
|
||||
überschrieben.
|
||||
|
||||
**Maßnahme:**
|
||||
1. `build_log.txt` und `run_log.txt` im Repo-Root aus Git entfernen (`git rm`).
|
||||
2. In `.gitignore` aufnehmen:
|
||||
```
|
||||
/build_log.txt
|
||||
/run_log.txt
|
||||
```
|
||||
3. (Optional) Guard im Code: wenn kein Subcommand und keine Build-Flags
|
||||
gegeben sind, Hilfe ausgeben statt blind zu bauen (verhindert
|
||||
versehentliche Builds im falschen Verzeichnis).
|
||||
|
||||
## Fix 6 — `BuildConfig.Defaults()`-Umgebungen inkonsistent mit CLI-Aliasen
|
||||
|
||||
**Symptom:** `BuildConfig.Defaults()` (Zeile 82–88) definiert `work` und
|
||||
`review` als eigene Umgebungen. Die CLI mappt `--work`/`--review` aber auf
|
||||
`development` (Program.cs:103–105). Wenn ein Nutzer `--env work` direkt
|
||||
aufruft, bekommt er die Default-`work`-Umgebung (mit
|
||||
`BaseUrl=http://localhost:8000`), während `--work` auf `development` mappt.
|
||||
Da `webstatic.json` die Environments überschreibt, betrifft das nur Sites ohne
|
||||
eigene Config.
|
||||
|
||||
**Maßnahme:** `BuildConfig.Defaults()` bereinigen: `work`/`review` entfernen
|
||||
oder durch `development` ersetzen, so dass Defaults und CLI-Aliase
|
||||
konsistent sind. Dokumentation in `plans/00` und `README` anpassen.
|
||||
|
||||
## Fix 7 — `tests/` ist leer
|
||||
|
||||
**Symptom:** `tests/`-Verzeichnis existiert, ist aber leer. Keine
|
||||
Unit-/Integrationstests vorhanden.
|
||||
|
||||
**Maßnahme:** (nicht Teil dieses Plans — separater Plan für Test-Aufbau).
|
||||
Vorläufig: `tests/README.md` anlegen, das den Platzhalter erklärt und auf
|
||||
den künftigen Test-Plan verweist.
|
||||
|
||||
## Priorisierung
|
||||
|
||||
| Fix | Priorität | Aufwand | Risiko |
|
||||
|-----|-----------|---------|--------|
|
||||
| 1 — Installierte Binary aktualisieren | **hoch** | gering | gering |
|
||||
| 3 — Content-Verzeichnis-Check | **hoch** | gering | gering |
|
||||
| 4 — Example-Artefakte aus Git | **hoch** | gering | gering |
|
||||
| 5 — Repo-Root-Logs aus Git | mittel | gering | gering |
|
||||
| 2 — Help/Version frühe Prüfung | mittel | gering | gering |
|
||||
| 6 — Default-Environments bereinigen | mittel | gering | gering |
|
||||
| 7 — tests/ Platzhalter | niedrig | trivial | — |
|
||||
|
||||
## Verifizierung nach allen Fixes
|
||||
|
||||
```bash
|
||||
cd /mnt/brx5/work/OSS/build_webstatic
|
||||
dotnet build -c Release
|
||||
dotnet bin/Release/net10.0/webstatic.dll --version # Exit 0
|
||||
dotnet bin/Release/net10.0/webstatic.dll --help # Exit 0
|
||||
dotnet bin/Release/net10.0/webstatic.dll build --root . # klare Fehlermeldung, Exit 1
|
||||
dotnet bin/Release/net10.0/webstatic.dll build --root webstatic.example --env development # Exit 0
|
||||
git status # keine Artefakte, clean
|
||||
# System-Install aktualisieren und GCBoK bauen:
|
||||
sudo env PATH="$PATH" WEBSTATIC_INSTALL_DIR=/opt/GitCover/webstatic \
|
||||
WEBSTATIC_BIN_DIR=/usr/local/bin ./install.sh
|
||||
webstatic --version
|
||||
webstatic build --root /mnt/brx5/REPOS/GCC/gcbok.gitcover.org/www --env development --verbose
|
||||
```
|
||||
@@ -1,2 +0,0 @@
|
||||
|
||||
=== Run Started: 2026-07-11 16:11:56.696 ===
|
||||
+3
-4
@@ -22,7 +22,7 @@ public class PathsConfig
|
||||
public string I18n { get; set; } = "i18n.json";
|
||||
}
|
||||
|
||||
/// <summary>Build environment (work/review/staging/deploy) with base URL and CDN.</summary>
|
||||
/// <summary>Build environment (development/staging/deploy) with base URL and CDN.</summary>
|
||||
public class EnvironmentConfig
|
||||
{
|
||||
public string BaseUrl { get; set; } = "http://localhost:8000";
|
||||
@@ -81,9 +81,8 @@ public class BuildConfig
|
||||
},
|
||||
Environments = new()
|
||||
{
|
||||
["work"] = new EnvironmentConfig { BaseUrl = "http://localhost:8000", Cdn = "/assets" },
|
||||
["review"] = new EnvironmentConfig { BaseUrl = "https://review.gitcover.org", Cdn = "https://gitcover.org/assets" },
|
||||
["staging"] = new EnvironmentConfig { BaseUrl = "https://gcbok.gitcover.org", Cdn = "https://gitcover.org/assets" },
|
||||
["development"] = new EnvironmentConfig { BaseUrl = "http://localhost:8000", Cdn = "/assets" },
|
||||
["staging"] = new EnvironmentConfig { BaseUrl = "https://staging.gitcover.org", Cdn = "https://gitcover.org/assets" },
|
||||
["deploy"] = new EnvironmentConfig { BaseUrl = "https://gcbok.org", Cdn = "https://gitcover.org/assets" },
|
||||
},
|
||||
};
|
||||
|
||||
+17
-1
@@ -7,8 +7,22 @@ namespace GCBoK.WebStaticBuilder;
|
||||
/// <summary>Main build orchestrator.</summary>
|
||||
public static class Builder
|
||||
{
|
||||
public static void Build(BuildConfig cfg, EnvironmentConfig env, string envName, bool verbose, bool dryRun)
|
||||
/// <returns><c>true</c> if the build completed; <c>false</c> if it was
|
||||
/// aborted due to a pre-flight check failure (missing content directory).</returns>
|
||||
public static bool Build(BuildConfig cfg, EnvironmentConfig env, string envName, bool verbose, bool dryRun)
|
||||
{
|
||||
// Pre-flight: content directory must exist — otherwise ContentLoader
|
||||
// throws an unhandled DirectoryNotFoundException. Fail gracefully with
|
||||
// an actionable message instead of a stack trace.
|
||||
if (!Directory.Exists(Directories.ContentDir))
|
||||
{
|
||||
Console.Error.WriteLine(
|
||||
$"ERROR: content directory not found: {Directories.ContentDir}");
|
||||
Console.Error.WriteLine(
|
||||
" Specify --root <dir> or --content <dir>.");
|
||||
return false;
|
||||
}
|
||||
|
||||
File.WriteAllText(Directories.BuildLogPath,
|
||||
$"=== Build Started: {DateTime.Now:yyyy-MM-dd HH:mm:ss.fff} ===\n");
|
||||
File.AppendAllText(Directories.BuildLogPath,
|
||||
@@ -179,6 +193,8 @@ public static class Builder
|
||||
|
||||
if (cfg.Pagefind) BuildSearchIndex(verbose);
|
||||
else if (verbose) Console.WriteLine(" Pagefind disabled (config).");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static string LoadLayout()
|
||||
|
||||
+22
-18
@@ -15,6 +15,22 @@ string? Val(string f)
|
||||
var verbose = Has("--verbose") || Has("-v");
|
||||
var dryRun = Has("--dry-run") || Has("-n");
|
||||
|
||||
// Help / Version — check before any filesystem access to avoid crashes
|
||||
// when invoked outside a site directory (e.g. `webstatic --help` in $HOME).
|
||||
if (argsList.Contains("--help") || argsList.Contains("-h") || argsList.Contains("help"))
|
||||
{
|
||||
PrintHelp();
|
||||
return;
|
||||
}
|
||||
if (argsList.Contains("--version"))
|
||||
{
|
||||
var v = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
|
||||
Console.WriteLine($"GCBoK.WebStaticBuilder {v?.ToString() ?? "0.0.0"}");
|
||||
var hash = GitShortHash(AppContext.BaseDirectory);
|
||||
if (hash != null) Console.WriteLine($"commit: {hash}");
|
||||
return;
|
||||
}
|
||||
|
||||
// Resolve config file + site root
|
||||
var configPath = Val("--config");
|
||||
var root = Val("--root") ?? Directory.GetCurrentDirectory();
|
||||
@@ -46,23 +62,6 @@ if (Val("--cdn") is { } cdn) { /* applied to chosen env below */ }
|
||||
|
||||
Directories.Init(cfg, root);
|
||||
|
||||
// Help
|
||||
if (argsList.Contains("--help") || argsList.Contains("-h") || argsList.Contains("help"))
|
||||
{
|
||||
PrintHelp();
|
||||
return;
|
||||
}
|
||||
|
||||
// Version
|
||||
if (argsList.Contains("--version"))
|
||||
{
|
||||
var v = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
|
||||
Console.WriteLine($"GCBoK.WebStaticBuilder {v?.ToString() ?? "0.0.0"}");
|
||||
var hash = GitShortHash(AppContext.BaseDirectory);
|
||||
if (hash != null) Console.WriteLine($"commit: {hash}");
|
||||
return;
|
||||
}
|
||||
|
||||
// Self-update (Hermes-Konzept: lokale Aenderungen stashen, pull, mergen, rebuild)
|
||||
if (argsList.Contains("update"))
|
||||
{
|
||||
@@ -115,7 +114,12 @@ if (Val("--base-url") is { } bu2) env.BaseUrl = bu2;
|
||||
if (Val("--cdn") is { } cdn2) env.Cdn = cdn2;
|
||||
|
||||
if (verbose) Console.WriteLine($"GCBoK.WebStaticBuilder — building (env={envName})");
|
||||
Builder.Build(cfg, env, envName, verbose, dryRun);
|
||||
var ok = Builder.Build(cfg, env, envName, verbose, dryRun);
|
||||
if (!ok)
|
||||
{
|
||||
Environment.ExitCode = 1;
|
||||
return;
|
||||
}
|
||||
Console.WriteLine("Build completed successfully.");
|
||||
|
||||
static void PrintHelp()
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
# tests/
|
||||
|
||||
Dieses Verzeichnis ist für künftige Unit- und Integrationstests des
|
||||
GCBoK.WebStaticBuilder vorgesehen. Es ist derzeit leer.
|
||||
|
||||
Ein eigener Plan (`plans/02-tests.md`) wird die Test-Strategie festlegen
|
||||
(xUnit, Test-Runner, Coverage-Ziele, Smoke-Test für `webstatic build`).
|
||||
@@ -1,34 +0,0 @@
|
||||
=== Build Started: 2026-07-11 12:00:07.845 ===
|
||||
ENV: work
|
||||
BASE_URL: http://localhost:8000
|
||||
CDN_ASSETS: /assets
|
||||
ROOT: /mnt/brx5/work/OSS/build_webstatic/webstatic.example
|
||||
|
||||
Assets copied to: /mnt/brx5/work/OSS/build_webstatic/webstatic.example/dist/assets
|
||||
Legal: /mnt/brx5/work/OSS/build_webstatic/webstatic.example/dist/de/impressum.html
|
||||
Legal: /mnt/brx5/work/OSS/build_webstatic/webstatic.example/dist/en/impressum.html
|
||||
Legal: /mnt/brx5/work/OSS/build_webstatic/webstatic.example/dist/vi/impressum.html
|
||||
Pagefind (exit 0): Running Pagefind v1.5.2 (Extended)
|
||||
Running from: "/mnt/brx5/work/OSS/build_webstatic/webstatic.example"
|
||||
Source: "dist"
|
||||
Output: "dist/pagefind"
|
||||
|
||||
[Walking source directory]
|
||||
Found 10 files matching **/*.{html}
|
||||
|
||||
[Parsing files]
|
||||
Found a data-pagefind-body element on the site.
|
||||
↳ Ignoring pages without this tag.
|
||||
|
||||
[Reading languages]
|
||||
Discovered 3 languages: vi, en, de
|
||||
|
||||
[Building search indexes]
|
||||
Total:
|
||||
Indexed 3 languages
|
||||
Indexed 9 pages
|
||||
Indexed 337 words
|
||||
Indexed 0 filters
|
||||
Indexed 0 sorts
|
||||
|
||||
Finished in 0.036 seconds
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
:root { color-scheme: light dark; }
|
||||
body { font-family: system-ui, sans-serif; margin: 0; color: #1a1a1a; }
|
||||
.container { max-width: 760px; margin: 0 auto; padding: 1.5rem; }
|
||||
.skip-link { position: absolute; left: -999px; }
|
||||
.skip-link:focus { left: 1rem; top: 1rem; background: #0b5fff; color: #fff; padding: .5rem; }
|
||||
.site-header { display: flex; gap: 1rem; align-items: center; padding: .75rem 1.5rem; border-bottom: 1px solid #ddd; }
|
||||
.site-nav { display: flex; gap: 1rem; }
|
||||
.brand { font-weight: 700; text-decoration: none; color: #0b5fff; }
|
||||
.lang-dropdown__menu { list-style: none; display: flex; gap: .5rem; }
|
||||
.site-footer { border-top: 1px solid #ddd; padding: 1.5rem; margin-top: 2rem; color: #555; }
|
||||
.muted { color: #777; }
|
||||
.page-nav { display: flex; justify-content: space-between; margin-top: 2rem; }
|
||||
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><rect width="32" height="32" rx="6" fill="#0b5fff"/><text x="16" y="22" font-size="16" text-anchor="middle" fill="#fff" font-family="sans-serif">G</text></svg>
|
||||
|
Before Width: | Height: | Size: 220 B |
@@ -1,9 +0,0 @@
|
||||
{
|
||||
"name": "Meine Website",
|
||||
"short_name": "Website",
|
||||
"icons": [
|
||||
{ "src": "/assets/favicon/favicon.svg", "sizes": "any", "type": "image/svg+xml" }
|
||||
],
|
||||
"start_url": "/",
|
||||
"display": "standalone"
|
||||
}
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
// GCBoK.WebStaticBuilder example theme script.
|
||||
(function () {
|
||||
var t = localStorage.getItem('gc-theme') || 'light';
|
||||
document.documentElement.setAttribute('data-theme', t);
|
||||
var btn = document.getElementById('themeToggle');
|
||||
if (btn) btn.addEventListener('click', function () {
|
||||
var cur = document.documentElement.getAttribute('data-theme');
|
||||
var next = cur === 'light' ? 'dark' : 'light';
|
||||
document.documentElement.setAttribute('data-theme', next);
|
||||
localStorage.setItem('gc-theme', next);
|
||||
});
|
||||
})();
|
||||
-73
@@ -1,73 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Impressum</title>
|
||||
<meta name="description" content="Eine mehrsprachige, statische Website.">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="/assets/favicon/favicon-96x96.png">
|
||||
<link rel="icon" href="/assets/favicon/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<meta property="og:title" content="Impressum">
|
||||
<meta property="og:description" content="Eine mehrsprachige, statische Website.">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="http://localhost:8000/impressum/">
|
||||
<meta property="og:locale" content="">
|
||||
<meta property="og:image" content="/assets/favicon/web-app-manifest-512x512.png">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Impressum">
|
||||
<meta name="twitter:description" content="Eine mehrsprachige, statische Website.">
|
||||
<link rel="canonical" href="http://localhost:8000/impressum/">
|
||||
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
</head>
|
||||
<body>
|
||||
<a href="#main" class="skip-link">Zum Hauptinhalt springen</a>
|
||||
|
||||
<header class="site-header">
|
||||
<a href="index.html" class="brand" aria-label="Zur Startseite">Meine Website</a>
|
||||
<nav class="site-nav" aria-label="Hauptnavigation">
|
||||
<a class="nav-gcbok__link" href="ueber.html">Über</a>
|
||||
</nav>
|
||||
<div class="lang-dropdown" aria-label="Sprachumschalter">
|
||||
<ul class="lang-dropdown__menu">
|
||||
<li><a href="/de/" hreflang="de"><span>Deutsch</span> <span class="lang-dropdown__code">DE</span></a></li>
|
||||
<li><a href="/en/" hreflang="en"><span>English</span> <span class="lang-dropdown__code">EN</span></a></li>
|
||||
<li><a href="/vi/" hreflang="vi"><span>Tiếng Việt</span> <span class="lang-dropdown__code">VI</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main" tabindex="-1" data-pagefind-body>
|
||||
<div class="container">
|
||||
<h2 id="impressum">Impressum</h2>
|
||||
<p>Beispiel-Website · Ansprechpartner: webmaster@example.org</p>
|
||||
<p>© 2026 Beispiel-Website. Erstellt mit GCBoK.WebStaticBuilder (MIT).</p>
|
||||
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<h4>MEINE WEBSITE</h4>
|
||||
<p class="muted">Ein Beispiel für GCBoK.WebStaticBuilder</p>
|
||||
<ul>
|
||||
<li><a href="glossar.html">Glossar</a></li>
|
||||
<li><a href="impressum.html">Impressum</a></li>
|
||||
</ul>
|
||||
<p>© 2026 Meine Website</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="/assets/js/gcbok-theme.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
-85
@@ -1,85 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Startseite</title>
|
||||
<meta name="description" content="Die Landing-Page dieser Beispiel-Website">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="/assets/favicon/favicon-96x96.png">
|
||||
<link rel="icon" href="/assets/favicon/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<meta property="og:title" content="Startseite">
|
||||
<meta property="og:description" content="Die Landing-Page dieser Beispiel-Website">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="http://localhost:8000/">
|
||||
<meta property="og:locale" content="">
|
||||
<meta property="og:image" content="/assets/favicon/web-app-manifest-512x512.png">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Startseite">
|
||||
<meta name="twitter:description" content="Die Landing-Page dieser Beispiel-Website">
|
||||
<link rel="canonical" href="http://localhost:8000/">
|
||||
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
</head>
|
||||
<body>
|
||||
<a href="#main" class="skip-link">Zum Hauptinhalt springen</a>
|
||||
|
||||
<header class="site-header">
|
||||
<a href="index.html" class="brand" aria-label="Zur Startseite">Meine Website</a>
|
||||
<nav class="site-nav" aria-label="Hauptnavigation">
|
||||
<a class="nav-gcbok__link" href="ueber.html">Über</a>
|
||||
</nav>
|
||||
<div class="lang-dropdown" aria-label="Sprachumschalter">
|
||||
<ul class="lang-dropdown__menu">
|
||||
<li><a href="/de/" hreflang="de"><span>Deutsch</span> <span class="lang-dropdown__code">DE</span></a></li>
|
||||
<li><a href="/en/" hreflang="en"><span>English</span> <span class="lang-dropdown__code">EN</span></a></li>
|
||||
<li><a href="/vi/" hreflang="vi"><span>Tiếng Việt</span> <span class="lang-dropdown__code">VI</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main" tabindex="-1" data-pagefind-body>
|
||||
<div class="container">
|
||||
<h1 id="willkommen-bei-gcbok.webstaticbuilder">Willkommen bei GCBoK.WebStaticBuilder</h1>
|
||||
<p>Dies ist der Banner-Block (order 0), der auf der Startseite (Hero/Landing) eingebettet wird.</p>
|
||||
<h2 id="einfuhrung">Einführung</h2>
|
||||
<p>Diese Seite wurde mit <strong>GCBoK.WebStaticBuilder</strong> erzeugt — einem statischen, mehrsprachigen
|
||||
Generator für compliance-freundliche Websites (MIT, OSS).</p>
|
||||
<h2 id="funktionen">Funktionen</h2>
|
||||
<ul>
|
||||
<li>Markdown mit YAML-Frontmatter</li>
|
||||
<li>Mehrsprachigkeit (de / en / vi)</li>
|
||||
<li>SEO-Kopf, Sitemap, robots.txt</li>
|
||||
<li>Client-Suche via Pagefind</li>
|
||||
<li>UI-Lokalisierung über <code>{{ i18n.* }}</code></li>
|
||||
</ul>
|
||||
<h2 id="nachste-schritte">Nächste Schritte</h2>
|
||||
<p>Siehe <code>docs/</code> im Repository für die Einrichtung.</p>
|
||||
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<h4>MEINE WEBSITE</h4>
|
||||
<p class="muted">Ein Beispiel für GCBoK.WebStaticBuilder</p>
|
||||
<ul>
|
||||
<li><a href="glossar.html">Glossar</a></li>
|
||||
<li><a href="impressum.html">Impressum</a></li>
|
||||
</ul>
|
||||
<p>© 2026 Meine Website</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="/assets/js/gcbok-theme.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
-81
@@ -1,81 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Über das Projekt</title>
|
||||
<meta name="description" content="Hintergrund zum Beispiel-Projekt">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="/assets/favicon/favicon-96x96.png">
|
||||
<link rel="icon" href="/assets/favicon/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<meta property="og:title" content="Über das Projekt">
|
||||
<meta property="og:description" content="Hintergrund zum Beispiel-Projekt">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="http://localhost:8000/ueber/">
|
||||
<meta property="og:locale" content="">
|
||||
<meta property="og:image" content="/assets/favicon/web-app-manifest-512x512.png">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Über das Projekt">
|
||||
<meta name="twitter:description" content="Hintergrund zum Beispiel-Projekt">
|
||||
<link rel="canonical" href="http://localhost:8000/ueber/">
|
||||
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
</head>
|
||||
<body>
|
||||
<a href="#main" class="skip-link">Zum Hauptinhalt springen</a>
|
||||
|
||||
<header class="site-header">
|
||||
<a href="index.html" class="brand" aria-label="Zur Startseite">Meine Website</a>
|
||||
<nav class="site-nav" aria-label="Hauptnavigation">
|
||||
<a class="nav-gcbok__link" href="ueber.html">Über</a>
|
||||
</nav>
|
||||
<div class="lang-dropdown" aria-label="Sprachumschalter">
|
||||
<ul class="lang-dropdown__menu">
|
||||
<li><a href="/de/" hreflang="de"><span>Deutsch</span> <span class="lang-dropdown__code">DE</span></a></li>
|
||||
<li><a href="/en/" hreflang="en"><span>English</span> <span class="lang-dropdown__code">EN</span></a></li>
|
||||
<li><a href="/vi/" hreflang="vi"><span>Tiếng Việt</span> <span class="lang-dropdown__code">VI</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main" tabindex="-1" data-pagefind-body>
|
||||
<div class="container">
|
||||
<h2 id="uber">Über</h2>
|
||||
<p>GCBoK.WebStaticBuilder ist ein eigenständiges OSS-Tool der GitCover Commons.
|
||||
Es erzeugt statische Websites ohne Server, Datenbank oder Build-Service.</p>
|
||||
<div class="mermaid">graph TD
|
||||
A[Markdown] --> B(Builder)
|
||||
B --> C[HTML]
|
||||
C --> D[Pagefind Index]
|
||||
</div>
|
||||
|
||||
<nav class="page-nav" aria-label="Seitennavigation">
|
||||
<span class="page-nav__link"> </span>
|
||||
<span class="page-nav__link page-nav__link--next"> </span>
|
||||
</nav>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<h4>MEINE WEBSITE</h4>
|
||||
<p class="muted">Ein Beispiel für GCBoK.WebStaticBuilder</p>
|
||||
<ul>
|
||||
<li><a href="glossar.html">Glossar</a></li>
|
||||
<li><a href="impressum.html">Impressum</a></li>
|
||||
</ul>
|
||||
<p>© 2026 Meine Website</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="/assets/js/gcbok-theme.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
-73
@@ -1,73 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Impressum</title>
|
||||
<meta name="description" content="A multilingual, static website.">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="/assets/favicon/favicon-96x96.png">
|
||||
<link rel="icon" href="/assets/favicon/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<meta property="og:title" content="Impressum">
|
||||
<meta property="og:description" content="A multilingual, static website.">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="http://localhost:8000/impressum/">
|
||||
<meta property="og:locale" content="">
|
||||
<meta property="og:image" content="/assets/favicon/web-app-manifest-512x512.png">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Impressum">
|
||||
<meta name="twitter:description" content="A multilingual, static website.">
|
||||
<link rel="canonical" href="http://localhost:8000/impressum/">
|
||||
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
</head>
|
||||
<body>
|
||||
<a href="#main" class="skip-link">Skip to main content</a>
|
||||
|
||||
<header class="site-header">
|
||||
<a href="index.html" class="brand" aria-label="Back to home">My Website</a>
|
||||
<nav class="site-nav" aria-label="Main navigation">
|
||||
<a class="nav-gcbok__link" href="ueber.html">Über</a>
|
||||
</nav>
|
||||
<div class="lang-dropdown" aria-label="Language switcher">
|
||||
<ul class="lang-dropdown__menu">
|
||||
<li><a href="/de/" hreflang="de"><span>Deutsch</span> <span class="lang-dropdown__code">DE</span></a></li>
|
||||
<li><a href="/en/" hreflang="en"><span>English</span> <span class="lang-dropdown__code">EN</span></a></li>
|
||||
<li><a href="/vi/" hreflang="vi"><span>Tiếng Việt</span> <span class="lang-dropdown__code">VI</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main" tabindex="-1" data-pagefind-body>
|
||||
<div class="container">
|
||||
<h2 id="impressum">Impressum</h2>
|
||||
<p>Beispiel-Website · Ansprechpartner: webmaster@example.org</p>
|
||||
<p>© 2026 Beispiel-Website. Erstellt mit GCBoK.WebStaticBuilder (MIT).</p>
|
||||
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<h4>MY WEBSITE</h4>
|
||||
<p class="muted">An example for GCBoK.WebStaticBuilder</p>
|
||||
<ul>
|
||||
<li><a href="glossary.html">Glossary</a></li>
|
||||
<li><a href="impressum.html">Imprint</a></li>
|
||||
</ul>
|
||||
<p>© 2026 My Website</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="/assets/js/gcbok-theme.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
-85
@@ -1,85 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Startseite</title>
|
||||
<meta name="description" content="Die Landing-Page dieser Beispiel-Website">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="/assets/favicon/favicon-96x96.png">
|
||||
<link rel="icon" href="/assets/favicon/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<meta property="og:title" content="Startseite">
|
||||
<meta property="og:description" content="Die Landing-Page dieser Beispiel-Website">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="http://localhost:8000/">
|
||||
<meta property="og:locale" content="">
|
||||
<meta property="og:image" content="/assets/favicon/web-app-manifest-512x512.png">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Startseite">
|
||||
<meta name="twitter:description" content="Die Landing-Page dieser Beispiel-Website">
|
||||
<link rel="canonical" href="http://localhost:8000/">
|
||||
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
</head>
|
||||
<body>
|
||||
<a href="#main" class="skip-link">Skip to main content</a>
|
||||
|
||||
<header class="site-header">
|
||||
<a href="index.html" class="brand" aria-label="Back to home">My Website</a>
|
||||
<nav class="site-nav" aria-label="Main navigation">
|
||||
<a class="nav-gcbok__link" href="ueber.html">Über</a>
|
||||
</nav>
|
||||
<div class="lang-dropdown" aria-label="Language switcher">
|
||||
<ul class="lang-dropdown__menu">
|
||||
<li><a href="/de/" hreflang="de"><span>Deutsch</span> <span class="lang-dropdown__code">DE</span></a></li>
|
||||
<li><a href="/en/" hreflang="en"><span>English</span> <span class="lang-dropdown__code">EN</span></a></li>
|
||||
<li><a href="/vi/" hreflang="vi"><span>Tiếng Việt</span> <span class="lang-dropdown__code">VI</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main" tabindex="-1" data-pagefind-body>
|
||||
<div class="container">
|
||||
<h1 id="willkommen-bei-gcbok.webstaticbuilder">Willkommen bei GCBoK.WebStaticBuilder</h1>
|
||||
<p>Dies ist der Banner-Block (order 0), der auf der Startseite (Hero/Landing) eingebettet wird.</p>
|
||||
<h2 id="einfuhrung">Einführung</h2>
|
||||
<p>Diese Seite wurde mit <strong>GCBoK.WebStaticBuilder</strong> erzeugt — einem statischen, mehrsprachigen
|
||||
Generator für compliance-freundliche Websites (MIT, OSS).</p>
|
||||
<h2 id="funktionen">Funktionen</h2>
|
||||
<ul>
|
||||
<li>Markdown mit YAML-Frontmatter</li>
|
||||
<li>Mehrsprachigkeit (de / en / vi)</li>
|
||||
<li>SEO-Kopf, Sitemap, robots.txt</li>
|
||||
<li>Client-Suche via Pagefind</li>
|
||||
<li>UI-Lokalisierung über <code>{{ i18n.* }}</code></li>
|
||||
</ul>
|
||||
<h2 id="nachste-schritte">Nächste Schritte</h2>
|
||||
<p>Siehe <code>docs/</code> im Repository für die Einrichtung.</p>
|
||||
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<h4>MY WEBSITE</h4>
|
||||
<p class="muted">An example for GCBoK.WebStaticBuilder</p>
|
||||
<ul>
|
||||
<li><a href="glossary.html">Glossary</a></li>
|
||||
<li><a href="impressum.html">Imprint</a></li>
|
||||
</ul>
|
||||
<p>© 2026 My Website</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="/assets/js/gcbok-theme.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
-81
@@ -1,81 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Über das Projekt</title>
|
||||
<meta name="description" content="Hintergrund zum Beispiel-Projekt">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="/assets/favicon/favicon-96x96.png">
|
||||
<link rel="icon" href="/assets/favicon/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<meta property="og:title" content="Über das Projekt">
|
||||
<meta property="og:description" content="Hintergrund zum Beispiel-Projekt">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="http://localhost:8000/ueber/">
|
||||
<meta property="og:locale" content="">
|
||||
<meta property="og:image" content="/assets/favicon/web-app-manifest-512x512.png">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Über das Projekt">
|
||||
<meta name="twitter:description" content="Hintergrund zum Beispiel-Projekt">
|
||||
<link rel="canonical" href="http://localhost:8000/ueber/">
|
||||
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
</head>
|
||||
<body>
|
||||
<a href="#main" class="skip-link">Skip to main content</a>
|
||||
|
||||
<header class="site-header">
|
||||
<a href="index.html" class="brand" aria-label="Back to home">My Website</a>
|
||||
<nav class="site-nav" aria-label="Main navigation">
|
||||
<a class="nav-gcbok__link" href="ueber.html">Über</a>
|
||||
</nav>
|
||||
<div class="lang-dropdown" aria-label="Language switcher">
|
||||
<ul class="lang-dropdown__menu">
|
||||
<li><a href="/de/" hreflang="de"><span>Deutsch</span> <span class="lang-dropdown__code">DE</span></a></li>
|
||||
<li><a href="/en/" hreflang="en"><span>English</span> <span class="lang-dropdown__code">EN</span></a></li>
|
||||
<li><a href="/vi/" hreflang="vi"><span>Tiếng Việt</span> <span class="lang-dropdown__code">VI</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main" tabindex="-1" data-pagefind-body>
|
||||
<div class="container">
|
||||
<h2 id="uber">Über</h2>
|
||||
<p>GCBoK.WebStaticBuilder ist ein eigenständiges OSS-Tool der GitCover Commons.
|
||||
Es erzeugt statische Websites ohne Server, Datenbank oder Build-Service.</p>
|
||||
<div class="mermaid">graph TD
|
||||
A[Markdown] --> B(Builder)
|
||||
B --> C[HTML]
|
||||
C --> D[Pagefind Index]
|
||||
</div>
|
||||
|
||||
<nav class="page-nav" aria-label="Seitennavigation">
|
||||
<span class="page-nav__link"> </span>
|
||||
<span class="page-nav__link page-nav__link--next"> </span>
|
||||
</nav>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<h4>MY WEBSITE</h4>
|
||||
<p class="muted">An example for GCBoK.WebStaticBuilder</p>
|
||||
<ul>
|
||||
<li><a href="glossary.html">Glossary</a></li>
|
||||
<li><a href="impressum.html">Imprint</a></li>
|
||||
</ul>
|
||||
<p>© 2026 My Website</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="/assets/js/gcbok-theme.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
-30
@@ -1,30 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Meine Website</title>
|
||||
<script>
|
||||
(function() {
|
||||
var supported = ["de","en","vi"];
|
||||
var defaultLang = "de";
|
||||
var lang = defaultLang;
|
||||
if (navigator.languages && navigator.languages.length) {
|
||||
for (var i = 0; i < navigator.languages.length; i++) {
|
||||
var pref = navigator.languages[i].toLowerCase().split("-")[0];
|
||||
if (supported.indexOf(pref) !== -1) { lang = pref; break; }
|
||||
}
|
||||
} else if (navigator.language) {
|
||||
var pref = navigator.language.toLowerCase().split("-")[0];
|
||||
if (supported.indexOf(pref) !== -1) lang = pref;
|
||||
}
|
||||
window.location.replace("/" + lang + "/");
|
||||
})();
|
||||
</script>
|
||||
<meta http-equiv="refresh" content="0; url=/de/">
|
||||
<link rel="canonical" href="http://localhost:8000/de/">
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirecting to <a href="/de/">Deutsch</a> | <a href="/en/">English</a> | <a href="/vi/">Tiếng Việt</a></p>
|
||||
</body>
|
||||
</html>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
|
||||
{"version":"1.5.2","languages":{"de":{"hash":"de_8987bfa9ae","wasm":"de","page_count":3},"vi":{"hash":"vi_2270a45bad","wasm":null,"page_count":3},"en":{"hash":"en_9b2654cc0d","wasm":"en","page_count":3}},"include_characters":["_","‿","⁀","⁔","︳","︴","﹍","﹎","﹏","_"]}
|
||||
-1070
File diff suppressed because it is too large
Load Diff
@@ -1,214 +0,0 @@
|
||||
:root {
|
||||
--pagefind-ui-scale: 0.8;
|
||||
--pagefind-ui-primary: #034AD8;
|
||||
--pagefind-ui-fade: #707070;
|
||||
--pagefind-ui-text: #393939;
|
||||
--pagefind-ui-background: #ffffff;
|
||||
--pagefind-ui-border: #eeeeee;
|
||||
--pagefind-ui-tag: #eeeeee;
|
||||
--pagefind-ui-border-width: 2px;
|
||||
--pagefind-ui-border-radius: 8px;
|
||||
--pagefind-ui-image-border-radius: 8px;
|
||||
--pagefind-ui-image-box-ratio: 3 / 2;
|
||||
--pagefind-ui-font: system, -apple-system, ".SFNSText-Regular",
|
||||
"San Francisco", "Roboto", "Segoe UI", "Helvetica Neue",
|
||||
"Lucida Grande", sans-serif;
|
||||
}
|
||||
|
||||
[data-pfmod-hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
[data-pfmod-suppressed] {
|
||||
opacity: 0 !important;
|
||||
pointer-events: none !important;
|
||||
}
|
||||
|
||||
[data-pfmod-sr-hidden] {
|
||||
-webkit-clip: rect(0 0 0 0) !important;
|
||||
clip: rect(0 0 0 0) !important;
|
||||
-webkit-clip-path: inset(100%) !important;
|
||||
clip-path: inset(100%) !important;
|
||||
height: 1px !important;
|
||||
overflow: hidden !important;
|
||||
overflow: clip !important;
|
||||
position: absolute !important;
|
||||
white-space: nowrap !important;
|
||||
width: 1px !important;
|
||||
}
|
||||
|
||||
[data-pfmod-loading] {
|
||||
color: var(--pagefind-ui-text);
|
||||
background-color: var(--pagefind-ui-text);
|
||||
border-radius: var(--pagefind-ui-border-radius);
|
||||
opacity: 0.1;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
/* Input */
|
||||
|
||||
.pagefind-modular-input-wrapper {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.pagefind-modular-input-wrapper::before {
|
||||
background-color: var(--pagefind-ui-text);
|
||||
width: calc(18px * var(--pagefind-ui-scale));
|
||||
height: calc(18px * var(--pagefind-ui-scale));
|
||||
top: calc(23px * var(--pagefind-ui-scale));
|
||||
left: calc(20px * var(--pagefind-ui-scale));
|
||||
content: "";
|
||||
position: absolute;
|
||||
display: block;
|
||||
opacity: 0.7;
|
||||
-webkit-mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");
|
||||
mask-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12.7549 11.255H11.9649L11.6849 10.985C12.6649 9.845 13.2549 8.365 13.2549 6.755C13.2549 3.165 10.3449 0.255005 6.75488 0.255005C3.16488 0.255005 0.254883 3.165 0.254883 6.755C0.254883 10.345 3.16488 13.255 6.75488 13.255C8.36488 13.255 9.84488 12.665 10.9849 11.685L11.2549 11.965V12.755L16.2549 17.745L17.7449 16.255L12.7549 11.255ZM6.75488 11.255C4.26488 11.255 2.25488 9.245 2.25488 6.755C2.25488 4.26501 4.26488 2.255 6.75488 2.255C9.24488 2.255 11.2549 4.26501 11.2549 6.755C11.2549 9.245 9.24488 11.255 6.75488 11.255Z' fill='%23000000'/%3E%3C/svg%3E%0A");
|
||||
-webkit-mask-size: 100%;
|
||||
mask-size: 100%;
|
||||
z-index: 9;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.pagefind-modular-input {
|
||||
height: calc(64px * var(--pagefind-ui-scale));
|
||||
padding: 0 calc(70px * var(--pagefind-ui-scale)) 0 calc(54px * var(--pagefind-ui-scale));
|
||||
background-color: var(--pagefind-ui-background);
|
||||
border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);
|
||||
border-radius: var(--pagefind-ui-border-radius);
|
||||
font-size: calc(21px * var(--pagefind-ui-scale));
|
||||
position: relative;
|
||||
appearance: none;
|
||||
-webkit-appearance: none;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.pagefind-modular-input::placeholder {
|
||||
opacity: 0.2;
|
||||
}
|
||||
|
||||
.pagefind-modular-input-clear {
|
||||
position: absolute;
|
||||
top: calc(2px * var(--pagefind-ui-scale));
|
||||
right: calc(2px * var(--pagefind-ui-scale));
|
||||
height: calc(60px * var(--pagefind-ui-scale));
|
||||
border-radius: var(--pagefind-ui-border-radius);
|
||||
padding: 0 calc(15px * var(--pagefind-ui-scale)) 0 calc(2px * var(--pagefind-ui-scale));
|
||||
color: var(--pagefind-ui-text);
|
||||
font-size: calc(14px * var(--pagefind-ui-scale));
|
||||
cursor: pointer;
|
||||
background-color: var(--pagefind-ui-background);
|
||||
border: none;
|
||||
appearance: none;
|
||||
}
|
||||
|
||||
/* ResultList */
|
||||
|
||||
.pagefind-modular-list-result {
|
||||
list-style-type: none;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
gap: min(calc(40px * var(--pagefind-ui-scale)), 3%);
|
||||
padding: calc(30px * var(--pagefind-ui-scale)) 0 calc(40px * var(--pagefind-ui-scale));
|
||||
border-top: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border);
|
||||
}
|
||||
|
||||
.pagefind-modular-list-result:last-of-type {
|
||||
border-bottom: solid var(--pagefind-ui-border-width) var(--pagefind-ui-border);
|
||||
}
|
||||
|
||||
.pagefind-modular-list-thumb {
|
||||
width: min(30%,
|
||||
calc((30% - (100px * var(--pagefind-ui-scale))) * 100000));
|
||||
max-width: calc(120px * var(--pagefind-ui-scale));
|
||||
margin-top: calc(10px * var(--pagefind-ui-scale));
|
||||
aspect-ratio: var(--pagefind-ui-image-box-ratio);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.pagefind-modular-list-image {
|
||||
display: block;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
transform: translateX(-50%);
|
||||
font-size: 0;
|
||||
width: auto;
|
||||
height: auto;
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
border-radius: var(--pagefind-ui-image-border-radius);
|
||||
}
|
||||
|
||||
.pagefind-modular-list-inner {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
margin-top: calc(10px * var(--pagefind-ui-scale));
|
||||
}
|
||||
|
||||
.pagefind-modular-list-title {
|
||||
display: inline-block;
|
||||
font-weight: 700;
|
||||
font-size: calc(21px * var(--pagefind-ui-scale));
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.pagefind-modular-list-link {
|
||||
color: var(--pagefind-ui-text);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.pagefind-modular-list-link:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.pagefind-modular-list-excerpt {
|
||||
display: inline-block;
|
||||
font-weight: 400;
|
||||
font-size: calc(16px * var(--pagefind-ui-scale));
|
||||
margin-top: calc(4px * var(--pagefind-ui-scale));
|
||||
margin-bottom: 0;
|
||||
min-width: calc(250px * var(--pagefind-ui-scale));
|
||||
}
|
||||
|
||||
/* FilterPills */
|
||||
|
||||
.pagefind-modular-filter-pills-wrapper {
|
||||
overflow-x: scroll;
|
||||
padding: 15px 0;
|
||||
}
|
||||
|
||||
.pagefind-modular-filter-pills {
|
||||
display: flex;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.pagefind-modular-filter-pill {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border: none;
|
||||
appearance: none;
|
||||
padding: 0 calc(24px * var(--pagefind-ui-scale));
|
||||
background-color: var(--pagefind-ui-background);
|
||||
color: var(--pagefind-ui-fade);
|
||||
border: var(--pagefind-ui-border-width) solid var(--pagefind-ui-border);
|
||||
border-radius: calc(25px * var(--pagefind-ui-scale));
|
||||
font-size: calc(18px * var(--pagefind-ui-scale));
|
||||
height: calc(50px * var(--pagefind-ui-scale));
|
||||
cursor: pointer;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.pagefind-modular-filter-pill:hover {
|
||||
border-color: var(--pagefind-ui-primary);
|
||||
}
|
||||
|
||||
.pagefind-modular-filter-pill[aria-pressed="true"] {
|
||||
border-color: var(--pagefind-ui-primary);
|
||||
color: var(--pagefind-ui-primary);
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
-6
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Vendored
-3
@@ -1,3 +0,0 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
Sitemap: http://localhost:8000/sitemap.xml
|
||||
Vendored
-15
@@ -1,15 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url><loc>http://localhost:8000/de/</loc></url>
|
||||
<url><loc>http://localhost:8000/</loc></url>
|
||||
<url><loc>http://localhost:8000/</loc></url>
|
||||
<url><loc>http://localhost:8000/ueber/</loc></url>
|
||||
<url><loc>http://localhost:8000/en/</loc></url>
|
||||
<url><loc>http://localhost:8000/</loc></url>
|
||||
<url><loc>http://localhost:8000/</loc></url>
|
||||
<url><loc>http://localhost:8000/ueber/</loc></url>
|
||||
<url><loc>http://localhost:8000/vi/</loc></url>
|
||||
<url><loc>http://localhost:8000/</loc></url>
|
||||
<url><loc>http://localhost:8000/</loc></url>
|
||||
<url><loc>http://localhost:8000/ueber/</loc></url>
|
||||
</urlset>
|
||||
-73
@@ -1,73 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="vi">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Impressum</title>
|
||||
<meta name="description" content="Một trang web tĩnh, đa ngôn ngữ.">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="/assets/favicon/favicon-96x96.png">
|
||||
<link rel="icon" href="/assets/favicon/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<meta property="og:title" content="Impressum">
|
||||
<meta property="og:description" content="Một trang web tĩnh, đa ngôn ngữ.">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="http://localhost:8000/impressum/">
|
||||
<meta property="og:locale" content="">
|
||||
<meta property="og:image" content="/assets/favicon/web-app-manifest-512x512.png">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Impressum">
|
||||
<meta name="twitter:description" content="Một trang web tĩnh, đa ngôn ngữ.">
|
||||
<link rel="canonical" href="http://localhost:8000/impressum/">
|
||||
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
</head>
|
||||
<body>
|
||||
<a href="#main" class="skip-link">Đến nội dung chính</a>
|
||||
|
||||
<header class="site-header">
|
||||
<a href="index.html" class="brand" aria-label="Về trang chủ">Trang web của tôi</a>
|
||||
<nav class="site-nav" aria-label="Điều hướng chính">
|
||||
<a class="nav-gcbok__link" href="ueber.html">Über</a>
|
||||
</nav>
|
||||
<div class="lang-dropdown" aria-label="Chuyển ngôn ngữ">
|
||||
<ul class="lang-dropdown__menu">
|
||||
<li><a href="/de/" hreflang="de"><span>Deutsch</span> <span class="lang-dropdown__code">DE</span></a></li>
|
||||
<li><a href="/en/" hreflang="en"><span>English</span> <span class="lang-dropdown__code">EN</span></a></li>
|
||||
<li><a href="/vi/" hreflang="vi"><span>Tiếng Việt</span> <span class="lang-dropdown__code">VI</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main" tabindex="-1" data-pagefind-body>
|
||||
<div class="container">
|
||||
<h2 id="impressum">Impressum</h2>
|
||||
<p>Beispiel-Website · Ansprechpartner: webmaster@example.org</p>
|
||||
<p>© 2026 Beispiel-Website. Erstellt mit GCBoK.WebStaticBuilder (MIT).</p>
|
||||
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<h4>TRANG WEB CỦA TÔI</h4>
|
||||
<p class="muted">Một ví dụ cho GCBoK.WebStaticBuilder</p>
|
||||
<ul>
|
||||
<li><a href="b-ng-thu-t-ng.html">Bảng thuật ngữ</a></li>
|
||||
<li><a href="impressum.html">Thông tin pháp lý</a></li>
|
||||
</ul>
|
||||
<p>© 2026 Trang web của tôi</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="/assets/js/gcbok-theme.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
-85
@@ -1,85 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="vi">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Startseite</title>
|
||||
<meta name="description" content="Die Landing-Page dieser Beispiel-Website">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="/assets/favicon/favicon-96x96.png">
|
||||
<link rel="icon" href="/assets/favicon/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<meta property="og:title" content="Startseite">
|
||||
<meta property="og:description" content="Die Landing-Page dieser Beispiel-Website">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="http://localhost:8000/">
|
||||
<meta property="og:locale" content="">
|
||||
<meta property="og:image" content="/assets/favicon/web-app-manifest-512x512.png">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Startseite">
|
||||
<meta name="twitter:description" content="Die Landing-Page dieser Beispiel-Website">
|
||||
<link rel="canonical" href="http://localhost:8000/">
|
||||
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
</head>
|
||||
<body>
|
||||
<a href="#main" class="skip-link">Đến nội dung chính</a>
|
||||
|
||||
<header class="site-header">
|
||||
<a href="index.html" class="brand" aria-label="Về trang chủ">Trang web của tôi</a>
|
||||
<nav class="site-nav" aria-label="Điều hướng chính">
|
||||
<a class="nav-gcbok__link" href="ueber.html">Über</a>
|
||||
</nav>
|
||||
<div class="lang-dropdown" aria-label="Chuyển ngôn ngữ">
|
||||
<ul class="lang-dropdown__menu">
|
||||
<li><a href="/de/" hreflang="de"><span>Deutsch</span> <span class="lang-dropdown__code">DE</span></a></li>
|
||||
<li><a href="/en/" hreflang="en"><span>English</span> <span class="lang-dropdown__code">EN</span></a></li>
|
||||
<li><a href="/vi/" hreflang="vi"><span>Tiếng Việt</span> <span class="lang-dropdown__code">VI</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main" tabindex="-1" data-pagefind-body>
|
||||
<div class="container">
|
||||
<h1 id="willkommen-bei-gcbok.webstaticbuilder">Willkommen bei GCBoK.WebStaticBuilder</h1>
|
||||
<p>Dies ist der Banner-Block (order 0), der auf der Startseite (Hero/Landing) eingebettet wird.</p>
|
||||
<h2 id="einfuhrung">Einführung</h2>
|
||||
<p>Diese Seite wurde mit <strong>GCBoK.WebStaticBuilder</strong> erzeugt — einem statischen, mehrsprachigen
|
||||
Generator für compliance-freundliche Websites (MIT, OSS).</p>
|
||||
<h2 id="funktionen">Funktionen</h2>
|
||||
<ul>
|
||||
<li>Markdown mit YAML-Frontmatter</li>
|
||||
<li>Mehrsprachigkeit (de / en / vi)</li>
|
||||
<li>SEO-Kopf, Sitemap, robots.txt</li>
|
||||
<li>Client-Suche via Pagefind</li>
|
||||
<li>UI-Lokalisierung über <code>{{ i18n.* }}</code></li>
|
||||
</ul>
|
||||
<h2 id="nachste-schritte">Nächste Schritte</h2>
|
||||
<p>Siehe <code>docs/</code> im Repository für die Einrichtung.</p>
|
||||
|
||||
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<h4>TRANG WEB CỦA TÔI</h4>
|
||||
<p class="muted">Một ví dụ cho GCBoK.WebStaticBuilder</p>
|
||||
<ul>
|
||||
<li><a href="b-ng-thu-t-ng.html">Bảng thuật ngữ</a></li>
|
||||
<li><a href="impressum.html">Thông tin pháp lý</a></li>
|
||||
</ul>
|
||||
<p>© 2026 Trang web của tôi</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="/assets/js/gcbok-theme.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
-81
@@ -1,81 +0,0 @@
|
||||
<!doctype html>
|
||||
<html lang="vi">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Über das Projekt</title>
|
||||
<meta name="description" content="Hintergrund zum Beispiel-Projekt">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="/assets/favicon/favicon-96x96.png">
|
||||
<link rel="icon" href="/assets/favicon/favicon.ico">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
<meta name="msapplication-TileColor" content="#da532c">
|
||||
<meta name="theme-color" content="#ffffff">
|
||||
<meta property="og:title" content="Über das Projekt">
|
||||
<meta property="og:description" content="Hintergrund zum Beispiel-Projekt">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="http://localhost:8000/ueber/">
|
||||
<meta property="og:locale" content="">
|
||||
<meta property="og:image" content="/assets/favicon/web-app-manifest-512x512.png">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Über das Projekt">
|
||||
<meta name="twitter:description" content="Hintergrund zum Beispiel-Projekt">
|
||||
<link rel="canonical" href="http://localhost:8000/ueber/">
|
||||
|
||||
<link rel="stylesheet" href="/assets/css/main.css">
|
||||
<link rel="icon" type="image/svg+xml" href="/assets/favicon/favicon.svg">
|
||||
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
||||
</head>
|
||||
<body>
|
||||
<a href="#main" class="skip-link">Đến nội dung chính</a>
|
||||
|
||||
<header class="site-header">
|
||||
<a href="index.html" class="brand" aria-label="Về trang chủ">Trang web của tôi</a>
|
||||
<nav class="site-nav" aria-label="Điều hướng chính">
|
||||
<a class="nav-gcbok__link" href="ueber.html">Über</a>
|
||||
</nav>
|
||||
<div class="lang-dropdown" aria-label="Chuyển ngôn ngữ">
|
||||
<ul class="lang-dropdown__menu">
|
||||
<li><a href="/de/" hreflang="de"><span>Deutsch</span> <span class="lang-dropdown__code">DE</span></a></li>
|
||||
<li><a href="/en/" hreflang="en"><span>English</span> <span class="lang-dropdown__code">EN</span></a></li>
|
||||
<li><a href="/vi/" hreflang="vi"><span>Tiếng Việt</span> <span class="lang-dropdown__code">VI</span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main" tabindex="-1" data-pagefind-body>
|
||||
<div class="container">
|
||||
<h2 id="uber">Über</h2>
|
||||
<p>GCBoK.WebStaticBuilder ist ein eigenständiges OSS-Tool der GitCover Commons.
|
||||
Es erzeugt statische Websites ohne Server, Datenbank oder Build-Service.</p>
|
||||
<div class="mermaid">graph TD
|
||||
A[Markdown] --> B(Builder)
|
||||
B --> C[HTML]
|
||||
C --> D[Pagefind Index]
|
||||
</div>
|
||||
|
||||
<nav class="page-nav" aria-label="Seitennavigation">
|
||||
<span class="page-nav__link"> </span>
|
||||
<span class="page-nav__link page-nav__link--next"> </span>
|
||||
</nav>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<footer class="site-footer">
|
||||
<div class="container">
|
||||
<h4>TRANG WEB CỦA TÔI</h4>
|
||||
<p class="muted">Một ví dụ cho GCBoK.WebStaticBuilder</p>
|
||||
<ul>
|
||||
<li><a href="b-ng-thu-t-ng.html">Bảng thuật ngữ</a></li>
|
||||
<li><a href="impressum.html">Thông tin pháp lý</a></li>
|
||||
</ul>
|
||||
<p>© 2026 Trang web của tôi</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script src="/assets/js/gcbok-theme.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,5 +0,0 @@
|
||||
|
||||
=== Run Started: 2026-07-11 12:00:07.880 ===
|
||||
Language: de, Files: 3
|
||||
Language: en, Files: 3
|
||||
Language: vi, Files: 3
|
||||
Reference in New Issue
Block a user