mirror of
https://github.com/sbrow/thor.git
synced 2026-08-26 11:23:32 -04:00
feat: Removed static dir from sites.
This commit is contained in:
@@ -15,6 +15,7 @@
|
|||||||
- [ ] ensure sidenote numbers render in display order and not in declaration order.
|
- [ ] ensure sidenote numbers render in display order and not in declaration order.
|
||||||
- [x] Search up for `thor.json` files.
|
- [x] Search up for `thor.json` files.
|
||||||
- [ ] OpenGraph meta tags — verify all fields match production site
|
- [ ] OpenGraph meta tags — verify all fields match production site
|
||||||
|
- [ ] Add Opt-in deflist support.
|
||||||
- [ ] set opengraph tags / description automatically if unset. (Like hugo does)
|
- [ ] set opengraph tags / description automatically if unset. (Like hugo does)
|
||||||
- [ ] Table of contents support.
|
- [ ] Table of contents support.
|
||||||
- [ ] Nav items should be active when the current page is selected.
|
- [ ] Nav items should be active when the current page is selected.
|
||||||
|
|||||||
+1
-43
@@ -217,47 +217,8 @@ strip_extension :: proc(name: string) -> string {
|
|||||||
return name[:dot]
|
return name[:dot]
|
||||||
}
|
}
|
||||||
|
|
||||||
// copy_static_dir recursively copies all files from static_dir to output_dir.
|
|
||||||
// Silently skips if static_dir doesn't exist.
|
|
||||||
copy_static_dir :: proc(static_dir: string, output_dir: string) {
|
|
||||||
if !os.exists(static_dir) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
copy_static_recursive(static_dir, "", output_dir)
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_static_recursive :: proc(current: string, rel_prefix: string, output_dir: string) {
|
|
||||||
entries, err := os.read_all_directory_by_path(current, context.allocator)
|
|
||||||
if err != nil {
|
|
||||||
log.warnf("thor: cannot read %s: %v", current, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer os.file_info_slice_delete(entries, context.allocator)
|
|
||||||
|
|
||||||
for entry in entries {
|
|
||||||
rel := rel_prefix == "" ? entry.name : fmt.tprintf("%s/%s", rel_prefix, entry.name)
|
|
||||||
switch entry.type {
|
|
||||||
case .Regular:
|
|
||||||
dest := fmt.tprintf("%s/%s", output_dir, rel)
|
|
||||||
if idx := strings.last_index(dest, "/"); idx >= 0 {
|
|
||||||
if err := os.make_directory_all(dest[:idx]); err != nil && err != .Exist {
|
|
||||||
log.warnf("thor: cannot create %s: %v", dest[:idx], err)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err := os.copy_file(dest, entry.fullpath); err != nil {
|
|
||||||
log.warnf("thor: cannot copy %s: %v", entry.fullpath, err)
|
|
||||||
}
|
|
||||||
case .Directory:
|
|
||||||
copy_static_recursive(entry.fullpath, rel, output_dir)
|
|
||||||
case .Undetermined, .Symlink, .Named_Pipe, .Socket, .Block_Device, .Character_Device:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// copy_assets_dir recursively copies files from assets_dir to output_dir.
|
// copy_assets_dir recursively copies files from assets_dir to output_dir.
|
||||||
// .css files are minified when .Minify is enabled; all other files are copied
|
// .css files are minified when .Minify is enabled; all other files are copied verbatim.
|
||||||
// verbatim with a warning suggesting they belong in static/.
|
|
||||||
// Silently skips if assets_dir doesn't exist.
|
// Silently skips if assets_dir doesn't exist.
|
||||||
copy_assets_dir :: proc(assets_dir: string, output_dir: string, features: bit_set[Feature]) {
|
copy_assets_dir :: proc(assets_dir: string, output_dir: string, features: bit_set[Feature]) {
|
||||||
if !os.exists(assets_dir) {
|
if !os.exists(assets_dir) {
|
||||||
@@ -299,9 +260,6 @@ copy_assets_recursive :: proc(
|
|||||||
minified := minify_css(string(data))
|
minified := minify_css(string(data))
|
||||||
write_file(dest, minified)
|
write_file(dest, minified)
|
||||||
} else {
|
} else {
|
||||||
if !strings.has_suffix(entry.name, ".css") {
|
|
||||||
log.warnf("thor: %s is not a CSS file; consider moving it to static/", entry.fullpath)
|
|
||||||
}
|
|
||||||
if err := os.copy_file(dest, entry.fullpath); err != nil {
|
if err := os.copy_file(dest, entry.fullpath); err != nil {
|
||||||
log.warnf("thor: cannot copy %s: %v", entry.fullpath, err)
|
log.warnf("thor: cannot copy %s: %v", entry.fullpath, err)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-4
@@ -134,10 +134,7 @@ render_site :: proc(pages: []Page, config: Site) {
|
|||||||
sitemap := generate_sitemap(pages, config.base_url)
|
sitemap := generate_sitemap(pages, config.base_url)
|
||||||
write_file(fmt.tprintf("%s/sitemap.xml", config.output_dir), sitemap)
|
write_file(fmt.tprintf("%s/sitemap.xml", config.output_dir), sitemap)
|
||||||
|
|
||||||
// Copy static directory (favicon, CSS, images, etc.)
|
// Copy and optionally minify assets directory
|
||||||
copy_static_dir(config.static_dir, config.output_dir)
|
|
||||||
|
|
||||||
// Copy and maybe minify assets directory
|
|
||||||
copy_assets_dir(config.assets_dir, config.output_dir, config.features)
|
copy_assets_dir(config.assets_dir, config.output_dir, config.features)
|
||||||
|
|
||||||
// Generate robots.txt
|
// Generate robots.txt
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ Site :: struct {
|
|||||||
base_url: string,
|
base_url: string,
|
||||||
config_path: string,
|
config_path: string,
|
||||||
content_dir: string,
|
content_dir: string,
|
||||||
static_dir: string,
|
|
||||||
assets_dir: string,
|
assets_dir: string,
|
||||||
output_dir: string,
|
output_dir: string,
|
||||||
layouts_dir: string,
|
layouts_dir: string,
|
||||||
@@ -38,7 +37,6 @@ Flags :: struct {
|
|||||||
description: string,
|
description: string,
|
||||||
base_url: string `args:"name=base-url"`,
|
base_url: string `args:"name=base-url"`,
|
||||||
content_dir: string `args:"name=content"`,
|
content_dir: string `args:"name=content"`,
|
||||||
static_dir: string `args:"name=static"`,
|
|
||||||
assets_dir: string `args:"name=assets"`,
|
assets_dir: string `args:"name=assets"`,
|
||||||
output_dir: string `args:"name=output"`,
|
output_dir: string `args:"name=output"`,
|
||||||
layouts_dir: string,
|
layouts_dir: string,
|
||||||
@@ -87,9 +85,6 @@ init_site :: proc(site: ^Site, args: []string) {
|
|||||||
if site.content_dir == "" {
|
if site.content_dir == "" {
|
||||||
site.content_dir = fmt.tprintf("%s/content", config_dir)
|
site.content_dir = fmt.tprintf("%s/content", config_dir)
|
||||||
}
|
}
|
||||||
if site.static_dir == "" {
|
|
||||||
site.static_dir = fmt.tprintf("%s/static", config_dir)
|
|
||||||
}
|
|
||||||
if site.assets_dir == "" {
|
if site.assets_dir == "" {
|
||||||
site.assets_dir = fmt.tprintf("%s/assets", config_dir)
|
site.assets_dir = fmt.tprintf("%s/assets", config_dir)
|
||||||
}
|
}
|
||||||
@@ -133,9 +128,6 @@ merge_flags :: proc(config: ^Flags, flags: Flags) {
|
|||||||
if flags.content_dir != "" {
|
if flags.content_dir != "" {
|
||||||
config.content_dir = flags.content_dir
|
config.content_dir = flags.content_dir
|
||||||
}
|
}
|
||||||
if flags.static_dir != "" {
|
|
||||||
config.static_dir = flags.static_dir
|
|
||||||
}
|
|
||||||
if flags.assets_dir != "" {
|
if flags.assets_dir != "" {
|
||||||
config.assets_dir = flags.assets_dir
|
config.assets_dir = flags.assets_dir
|
||||||
}
|
}
|
||||||
@@ -164,7 +156,6 @@ site_apply_flags :: proc(site: ^Site, flags: Flags) {
|
|||||||
site.base_url = flags.base_url
|
site.base_url = flags.base_url
|
||||||
site.config_path = flags.config_path
|
site.config_path = flags.config_path
|
||||||
site.content_dir = flags.content_dir
|
site.content_dir = flags.content_dir
|
||||||
site.static_dir = flags.static_dir
|
|
||||||
site.assets_dir = flags.assets_dir
|
site.assets_dir = flags.assets_dir
|
||||||
site.output_dir = flags.output_dir
|
site.output_dir = flags.output_dir
|
||||||
site.layouts_dir = flags.layouts_dir
|
site.layouts_dir = flags.layouts_dir
|
||||||
|
|||||||
Reference in New Issue
Block a user