summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile18
-rw-r--r--scripts/metadata.lua89
-rw-r--r--scripts/pages_content.lua (renamed from scripts/subpages.lua)0
3 files changed, 56 insertions, 51 deletions
diff --git a/Makefile b/Makefile
index 863fca1..52a90f9 100644
--- a/Makefile
+++ b/Makefile
@@ -50,13 +50,13 @@ subpages = $(patsubst content/%.md,.cache/meta/%.json, \
50 $(shell test -d $(patsubst .cache/meta%,content%,$(1)) && find $(patsubst .cache/meta%,content%,$(1)) -maxdepth 1 -type f -name "*.md" ! -name "index.md") \ 50 $(shell test -d $(patsubst .cache/meta%,content%,$(1)) && find $(patsubst .cache/meta%,content%,$(1)) -maxdepth 1 -type f -name "*.md" ! -name "index.md") \
51 $(shell test -d $(patsubst .cache/meta%,content%,$(1)) && find $(patsubst .cache/meta%,content%,$(1)) -mindepth 2 -maxdepth 2 -type f -name "index.md")) 51 $(shell test -d $(patsubst .cache/meta%,content%,$(1)) && find $(patsubst .cache/meta%,content%,$(1)) -mindepth 2 -maxdepth 2 -type f -name "index.md"))
52 52
53.cache/meta/%.json: content/%.md $$(call subpages,$$(call namespace,$$@,)) filters/*.lua scripts/subpages.lua scripts/subpages.jq scripts/metadata.json | .cache/meta 53.cache/meta/%.json: content/%.md $$(call subpages,$$(call namespace,$$@,)) filters/*.lua scripts/pages_content.lua scripts/subpages.jq scripts/metadata.json | .cache/meta
54 $(info [META] $< -> $@) 54 $(info [META] $< -> $@)
55 55
56 mkdir -p $(@D) 56 mkdir -p $(@D)
57 $(eval PAGES_FILES = $(filter .cache/meta/%.json,$^)) 57 $(eval PAGES_FILES = $(filter .cache/meta/%.json,$^))
58 $(eval NAMESPACE = $(call namespace,$@,.cache/meta)) 58 $(eval NAMESPACE = $(call namespace,$@,.cache/meta))
59 $(if $(PAGES_FILES),jq -s --arg namespace "$(NAMESPACE)" -f scripts/subpages.jq $(PAGES_FILES) > "$@.pages",echo "{}" > "$@.pages") 59 $(if $(PAGES_FILES),jq -s --arg namespace "$(NAMESPACE)" -f scripts/subpages.jq $(PAGES_FILES) > "$@.pages",echo "{ \"pages\": [] }" > "$@.pages")
60 pandoc \ 60 pandoc \
61 -f markdown-citations-implicit_figures \ 61 -f markdown-citations-implicit_figures \
62 -t html5 \ 62 -t html5 \
@@ -65,7 +65,7 @@ subpages = $(patsubst content/%.md,.cache/meta/%.json, \
65 --metadata-file "$@.pages" \ 65 --metadata-file "$@.pages" \
66 --template scripts/metadata.json \ 66 --template scripts/metadata.json \
67 --metadata namespace="$(NAMESPACE)" \ 67 --metadata namespace="$(NAMESPACE)" \
68 --metadata file_out="$(patsubst .cache/meta/%.json,out/%.html,$@)" \ 68 --metadata file_out="$(patsubst .cache/meta/%.json,/%.html,$@)" \
69 $(PANDOC_FILTERS) \ 69 $(PANDOC_FILTERS) \
70 -o "$@.meta" "$<" 70 -o "$@.meta" "$<"
71 rm "$@.pages" 71 rm "$@.pages"
@@ -74,11 +74,11 @@ subpages = $(patsubst content/%.md,.cache/meta/%.json, \
74 -t html5 \ 74 -t html5 \
75 --wrap preserve \ 75 --wrap preserve \
76 --lua-filter scripts/metadata.lua \ 76 --lua-filter scripts/metadata.lua \
77 --lua-filter scripts/subpages.lua \ 77 --lua-filter scripts/pages_content.lua \
78 $(GLOBAL_METADATA) \ 78 $(GLOBAL_METADATA) \
79 --metadata-file "$@.meta" \ 79 --metadata-file "$@.meta" \
80 --metadata build.mode="$(MODE)" \ 80 --metadata build.mode="$(MODE)" \
81 --metadata build.file_out="$@" \ 81 --metadata build.file_out="$(patsubst .cache/meta/%.json,/%.html,$@)" \
82 $(PANDOC_FILTERS) \ 82 $(PANDOC_FILTERS) \
83 -o "$@.content" "$<" 83 -o "$@.content" "$<"
84 jq '. + { content: $$content }' --rawfile content "$@.content" "$@.meta" > "$@" 84 jq '. + { content: $$content }' --rawfile content "$@.content" "$@.meta" > "$@"
@@ -92,6 +92,7 @@ out/%.html: content/%.md .cache/meta/%.json .cache/assets.json $(CONTENT_TEMPLAT
92 $(info [MARK] $< -> $@) 92 $(info [MARK] $< -> $@)
93 93
94 mkdir -p $(@D) 94 mkdir -p $(@D)
95 $(eval NAMESPACE = $(call namespace,$@,.cache/meta))
95 pandoc \ 96 pandoc \
96 -f markdown-citations-implicit_figures \ 97 -f markdown-citations-implicit_figures \
97 -t html5 \ 98 -t html5 \
@@ -103,7 +104,8 @@ out/%.html: content/%.md .cache/meta/%.json .cache/assets.json $(CONTENT_TEMPLAT
103 --metadata-file .cache/assets.json \ 104 --metadata-file .cache/assets.json \
104 --metadata-file "$(filter .cache/meta/%.json,$^)" \ 105 --metadata-file "$(filter .cache/meta/%.json,$^)" \
105 --metadata build.mode="$(MODE)" \ 106 --metadata build.mode="$(MODE)" \
106 --metadata build.file_out="$@" \ 107 --metadata build.namespace="$(NAMESPACE)" \
108 --metadata build.file_out="$(patsubst out/%,/%,$@)" \
107 $(PANDOC_FILTERS) \ 109 $(PANDOC_FILTERS) \
108 -o "$@" "$<" 110 -o "$@" "$<"
109 111
@@ -111,6 +113,7 @@ out/%.xml: content/%.md .cache/meta/%.json $(FEED_TEMPLATES_SRC) metadata/*.yaml
111 $(info [FEED] $< -> $@) 113 $(info [FEED] $< -> $@)
112 114
113 mkdir -p $(@D) 115 mkdir -p $(@D)
116 $(eval NAMESPACE = $(call namespace,$@,.cache/meta))
114 pandoc \ 117 pandoc \
115 -f markdown-citations-implicit_figures \ 118 -f markdown-citations-implicit_figures \
116 -t html5 \ 119 -t html5 \
@@ -121,7 +124,8 @@ out/%.xml: content/%.md .cache/meta/%.json $(FEED_TEMPLATES_SRC) metadata/*.yaml
121 $(GLOBAL_METADATA) \ 124 $(GLOBAL_METADATA) \
122 --metadata-file "$(filter .cache/meta/%.json,$^)" \ 125 --metadata-file "$(filter .cache/meta/%.json,$^)" \
123 --metadata build.mode="$(MODE)" \ 126 --metadata build.mode="$(MODE)" \
124 --metadata build.file_out="$@" \ 127 --metadata build.namespace="$(NAMESPACE)" \
128 --metadata build.file_out="$(patsubst out/%,/%,$@)" \
125 $(PANDOC_FILTERS) \ 129 $(PANDOC_FILTERS) \
126 -o "$@" "$<" 130 -o "$@" "$<"
127 131
diff --git a/scripts/metadata.lua b/scripts/metadata.lua
index cb6c6e6..7d9206f 100644
--- a/scripts/metadata.lua
+++ b/scripts/metadata.lua
@@ -111,8 +111,8 @@ function process_pages(global, build, order, pages_by_id)
111 local pages_date_desc = pandoc.List() 111 local pages_date_desc = pandoc.List()
112 112
113 if pages_by_id then 113 if pages_by_id then
114 for _, page in pairs(pages_by_id) do 114 for _, p in pairs(pages_by_id) do
115 local p = process(global, build, page) 115 process(global, build, p)
116 if not p.unlisted then 116 if not p.unlisted then
117 pages_all:insert(p) 117 pages_all:insert(p)
118 if p.last_update then pages_date_desc:insert(p) end 118 if p.last_update then pages_date_desc:insert(p) end
@@ -133,19 +133,35 @@ function find_depth(meta)
133 133
134 local depth = 0 134 local depth = 0
135 135
136 if meta.pages then 136 for _, p in pairs(meta.pages) do
137 for _, page in pairs(meta.pages) do 137 find_depth(p)
138 local p = find_depth(page) 138 if not p.unlisted then
139 if not p.unlisted then 139 local d = p.depth + 1
140 local d = p.depth + 1 140 if d > depth then depth = d end
141 if d > depth then depth = d end
142 end
143 end 141 end
144 end 142 end
145 143
146 meta.depth = depth 144 meta.depth = depth
145end
147 146
148 return meta 147function resolve_urls(global, build, meta)
148 meta.url = resolve_url(global.site.url, build.file_out, meta.url)
149
150 if meta.feed then
151 if meta.file_out:match(".html$") then
152 meta.feed = {
153 url = resolve_url(global.site.url, build.file_out, meta.file_out:gsub(".html$", ".xml")),
154 }
155 else
156 meta.page = {
157 url = resolve_url(global.site.url, build.file_out, meta.file_out:gsub(".xml$", ".html")),
158 }
159 end
160 end
161
162 if meta.thumbnail then
163 meta.thumbnail = resolve_url(global.site.url, build.file_out, meta.thumbnail)
164 end
149end 165end
150 166
151function d1_page_to_list_item(meta, p) 167function d1_page_to_list_item(meta, p)
@@ -249,40 +265,20 @@ end
249 265
250function process(global, build, meta) 266function process(global, build, meta)
251 meta.namespace = resolve_namespace(meta.namespace) 267 meta.namespace = resolve_namespace(meta.namespace)
252 meta.file_out = pandoc.utils.stringify(meta.file_out):gsub("^out", "") 268 meta.file_out = pandoc.utils.stringify(meta.file_out)
253 meta.unlisted = meta.unlisted or (meta.draft and build.mode ~= "dev") 269 meta.unlisted = meta.unlisted or (meta.draft and build.mode ~= "dev")
254 meta.redirect = meta.url and true 270 meta.redirect = meta.url and true
255 meta.url = meta.url and pandoc.utils.stringify(meta.url) 271 meta.url = meta.url and pandoc.utils.stringify(meta.url) or meta.file_out
256 meta.url = resolve_url(global.site.url, build.file_out, meta.url or meta.file_out) 272 meta.title = meta.title and pandoc.utils.stringify(meta.title) or ""
257 meta.title = (meta.title and pandoc.utils.stringify(meta.title)) or ""
258 meta.slug = slug(meta.title) 273 meta.slug = slug(meta.title)
259 meta.schema_type = (meta.schema_type and pandoc.utils.stringify(meta.schema_type)) or "CreativeWork" 274 meta.schema_type = meta.schema_type and pandoc.utils.stringify(meta.schema_type) or "CreativeWork"
260 if meta.list_order then meta.list_order = pandoc.utils.stringify(meta.list_order) end 275 meta.list_order = meta.list_order and pandoc.utils.stringify(meta.list_order)
261 meta.list_layout = prep_layout(meta.list_layout or "list") 276 meta.list_layout = prep_layout(meta.list_layout or "list")
262 if meta.list_limit then meta.list_limit = tonumber(pandoc.utils.stringify(meta.list_limit)) end 277 meta.list_limit = meta.list_limit and tonumber(pandoc.utils.stringify(meta.list_limit))
263 if meta.position then meta.position = tonumber(pandoc.utils.stringify(meta.position)) end 278 meta.position = meta.position and tonumber(pandoc.utils.stringify(meta.position))
279 meta.thumbnail = meta.thumbnail and make_absolute("thumbnail." .. pandoc.utils.stringify(meta.thumbnail), meta.file_out)
264 280
265 if meta.feed then 281 resolve_urls(global, build, meta)
266 if meta.file_out:match(".html$") then
267 meta.feed = {
268 url = resolve_url(global.site.url, build.file_out, meta.file_out:gsub(".html$", ".xml")),
269 }
270 else
271 meta.page = {
272 url = resolve_url(global.site.url, build.file_out, meta.file_out:gsub(".xml$", ".html")),
273 }
274 end
275 end
276
277 if meta.thumbnail then
278 meta.thumbnail = make_absolute("thumbnail." .. pandoc.utils.stringify(meta.thumbnail),
279 meta.file_out)
280 meta.thumbnail = resolve_url(global.site.url, build.file_out, meta.thumbnail)
281 end
282
283 if meta.menus and meta.menus.main then
284 meta.menus.main = prep_menu(meta.namespace.root.id, meta.menus.main)
285 end
286 282
287 meta.pages = process_pages(global, build, meta.list_order, meta.pages) 283 meta.pages = process_pages(global, build, meta.list_order, meta.pages)
288 meta.layout = prep_layout(meta.layout or (meta.redirect and "redirect") or resolve_layout(meta.depth)) 284 meta.layout = prep_layout(meta.layout or (meta.redirect and "redirect") or resolve_layout(meta.depth))
@@ -302,10 +298,6 @@ function process(global, build, meta)
302 end 298 end
303 299
304 meta.was_updated = meta.date and meta.last_update and meta.date.yyyy_mm_dd ~= meta.last_update.yyyy_mm_dd 300 meta.was_updated = meta.date and meta.last_update and meta.date.yyyy_mm_dd ~= meta.last_update.yyyy_mm_dd
305
306 meta.list = generate_list(meta)
307
308 return meta
309end 301end
310 302
311function Meta(meta) 303function Meta(meta)
@@ -316,11 +308,20 @@ function Meta(meta)
316 308
317 if suffix then 309 if suffix then
318 build[suffix] = value 310 build[suffix] = value
311 meta[key] = nil
319 end 312 end
320 end 313 end
321 314
322 meta.site.url = pandoc.utils.stringify(meta.site.url):gsub("/$", "") 315 meta.site.url = pandoc.utils.stringify(meta.site.url):gsub("/$", "")
323 316
324 find_depth(meta) 317 find_depth(meta)
325 return process(meta, build, meta) 318 process(meta, build, meta)
319
320 meta.list = generate_list(meta)
321
322 if meta.menus and meta.menus.main then
323 meta.menus.main = prep_menu(meta.namespace.root.id, meta.menus.main)
324 end
325
326 return meta
326end 327end
diff --git a/scripts/subpages.lua b/scripts/pages_content.lua
index b753b1e..b753b1e 100644
--- a/scripts/subpages.lua
+++ b/scripts/pages_content.lua