This commit is contained in:
Mateusz Gruszczyński
2026-09-17 08:52:02 +02:00
parent ff4f2b60e7
commit b7846c3b9f
87 changed files with 3783 additions and 1418 deletions
+16 -11
View File
@@ -53,7 +53,7 @@ const APP_JS_MODULES: &[&str] = &[
];
fn bundle_app_js(web_dir: &Path) -> String {
let js_dir = web_dir.join("js");
let js_dir = web_dir.join("js-dynamic");
println!("cargo:rerun-if-changed={}", js_dir.display());
let mut bundle = String::new();
@@ -78,12 +78,12 @@ fn main() {
println!("cargo:rerun-if-changed={}", lang_dir.display());
println!("cargo:rerun-if-changed={}", preset_dir.display());
let theme_init_path = web_dir.join("theme-init.js");
let lang_init_path = web_dir.join("lang-init.js");
let styles_path = web_dir.join("styles.css");
let theme_init_path = web_dir.join("js/theme-init.js");
let lang_init_path = web_dir.join("js/lang-init.js");
let styles_path = web_dir.join("css/styles.css");
let index_path = web_dir.join("index.html");
let not_found_path = web_dir.join("404.html");
let sw_path = web_dir.join("sw.js");
let sw_path = web_dir.join("js/sw.js");
let manifest_path = web_dir.join("manifest.webmanifest");
let favicon_path = web_dir.join("favicon.svg");
for path in [
@@ -143,9 +143,10 @@ fn main() {
panic!("no language files found in {}", lang_dir.display());
}
let default_language = "en";
let mut assets = Vec::new();
let mut manifest_languages = Vec::new();
let mut has_english = false;
let mut has_default_language = false;
for path in files {
println!("cargo:rerun-if-changed={}", path.display());
@@ -193,8 +194,8 @@ fn main() {
if !document.get("translations").is_some_and(Value::is_object) {
panic!("{filename}: translations must be a JSON object");
}
if code == "en" {
has_english = true;
if code == default_language {
has_default_language = true;
}
let language_hash = content_hash(source.as_bytes());
@@ -208,8 +209,8 @@ fn main() {
assets.push((code.to_owned(), path));
}
if !has_english {
panic!("lang/en.json is required as the default fallback language");
if !has_default_language {
panic!("lang/{default_language}.json is required as the default fallback language");
}
let mut preset_files: Vec<PathBuf> = fs::read_dir(&preset_dir)
@@ -286,7 +287,7 @@ fn main() {
}
let manifest_json = serde_json::to_string(&json!({
"default": "en",
"default": default_language,
"languages": manifest_languages
}))
.expect("serialize language manifest");
@@ -323,6 +324,10 @@ fn main() {
"pub const LANGUAGE_MANIFEST_JSON: &str = {:?};\n",
manifest_json
));
generated.push_str(&format!(
"pub const DEFAULT_LANGUAGE_CODE: &str = {:?};\n",
default_language
));
generated.push_str("pub const LANGUAGE_ASSETS: &[(&str, &str)] = &[\n");
for (code, path) in assets {
generated.push_str(&format!(