| 1 | //! Make the CodeMirror bundle optional at compile time. |
| 2 | //! |
| 3 | //! `assets/editor.min.js` is produced by esbuild in a Docker build stage, so it |
| 4 | //! does not exist in a source checkout. `include_str!` needs *something* |
| 5 | //! though, and a missing file would make `cargo build` fail outside Docker — |
| 6 | //! which would mean the test suite could not run without a Node toolchain. |
| 7 | //! |
| 8 | //! An empty placeholder is the right fallback rather than a workaround: the |
| 9 | //! edit page ships a working `<textarea>` and the bundle only enhances it, so a |
| 10 | //! build without the bundle produces a product where editing still works, |
| 11 | //! plainly. That is the documented behaviour when the script fails to load, and |
| 12 | //! this makes it the behaviour when it was never built either. |
| 13 | |
| 14 | use std::path::Path; |
| 15 | |
| 16 | fn main() { |
| 17 | let bundle = Path::new("assets/editor.min.js"); |
| 18 | println!("cargo:rerun-if-changed=assets/editor.min.js"); |
| 19 | |
| 20 | if !bundle.exists() { |
| 21 | std::fs::write( |
| 22 | bundle, |
| 23 | "/* No editor bundle in this build. The edit page falls back to a \ |
| 24 | plain textarea, which is a working editor. */\n", |
| 25 | ) |
| 26 | .expect("writing the editor placeholder"); |
| 27 | println!( |
| 28 | "cargo:warning=assets/editor.min.js was not built; \ |
| 29 | the web editor will fall back to a plain textarea" |
| 30 | ); |
| 31 | } |
| 32 | } |
32 lines · Rust