mirror of
https://github.com/getzola/zola
synced 2024-11-10 06:14:19 +00:00
Preserve folder structure of SCSS content
This commit is contained in:
parent
2eacb8247b
commit
9fbbcca3c6
6 changed files with 28 additions and 10 deletions
|
@ -528,11 +528,16 @@ impl Site {
|
|||
self.copy_static_directories()
|
||||
}
|
||||
|
||||
pub fn compile_sass(&self, base_path: &PathBuf) -> Result<()> {
|
||||
pub fn compile_sass(&self, base_path: &Path) -> Result<()> {
|
||||
ensure_directory_exists(&self.output_path)?;
|
||||
|
||||
let base_path = base_path.to_string_lossy().replace("\\", "/");
|
||||
let sass_glob = format!("{}/{}", base_path, "sass/**/*.scss");
|
||||
let sass_path = {
|
||||
let mut sass_path = PathBuf::from(base_path);
|
||||
sass_path.push("sass");
|
||||
sass_path
|
||||
};
|
||||
|
||||
let sass_glob = format!("{}/**/*.scss", sass_path.display());
|
||||
let files = glob(&sass_glob)
|
||||
.unwrap()
|
||||
.filter_map(|e| e.ok())
|
||||
|
@ -542,13 +547,16 @@ impl Site {
|
|||
let mut sass_options = Options::default();
|
||||
sass_options.output_style = OutputStyle::Compressed;
|
||||
for file in files {
|
||||
let name = file.as_path().file_stem().unwrap().to_string_lossy();
|
||||
let css = match compile_file(file.as_path(), sass_options.clone()) {
|
||||
Ok(c) => c,
|
||||
Err(e) => bail!(e)
|
||||
};
|
||||
let css = compile_file(&file, sass_options.clone())?;
|
||||
|
||||
create_file(&self.output_path.join(format!("{}.css", name)), &css)?;
|
||||
let path_inside_sass = file.strip_prefix(&sass_path).unwrap();
|
||||
let parent_inside_sass = path_inside_sass.parent();
|
||||
let css_output_path = self.output_path.join(path_inside_sass).with_extension("css");
|
||||
|
||||
if parent_inside_sass.is_some() {
|
||||
create_dir_all(&css_output_path.parent().unwrap())?;
|
||||
}
|
||||
create_file(&css_output_path, &css)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
|
|
@ -100,7 +100,7 @@ fn can_build_site_without_live_reload() {
|
|||
site.set_output_path(&public);
|
||||
site.build().unwrap();
|
||||
|
||||
assert!(Path::new(&public).exists());
|
||||
assert!(&public.exists());
|
||||
assert!(file_exists!(public, "index.html"));
|
||||
assert!(file_exists!(public, "sitemap.xml"));
|
||||
assert!(file_exists!(public, "robots.txt"));
|
||||
|
@ -140,6 +140,16 @@ fn can_build_site_without_live_reload() {
|
|||
assert!(file_exists!(public, "sample.css"));
|
||||
assert!(file_exists!(public, "some.js"));
|
||||
|
||||
// SASS and SCSS files compile correctly
|
||||
assert!(file_exists!(public, "blog.css"));
|
||||
assert!(file_contains!(public, "blog.css", "red"));
|
||||
assert!(file_contains!(public, "blog.css", "blue"));
|
||||
assert!(!file_contains!(public, "blog.css", "@import \"included\""));
|
||||
assert!(file_contains!(public, "blog.css", "2rem")); // check include
|
||||
assert!(!file_exists!(public, "_included.css"));
|
||||
assert!(file_exists!(public, "scss.css"));
|
||||
assert!(file_exists!(public, "nested_sass/scss.css"));
|
||||
|
||||
// no live reload code
|
||||
assert_eq!(file_contains!(public, "index.html", "/livereload.js?port=1112&mindelay=10"), false);
|
||||
|
||||
|
|
0
test_site/sass/nested_sass/sass.sass
Normal file
0
test_site/sass/nested_sass/sass.sass
Normal file
0
test_site/sass/nested_sass/scss.scss
Normal file
0
test_site/sass/nested_sass/scss.scss
Normal file
0
test_site/sass/sass.sass
Normal file
0
test_site/sass/sass.sass
Normal file
0
test_site/sass/scss.scss
Normal file
0
test_site/sass/scss.scss
Normal file
Loading…
Reference in a new issue