diff options
Diffstat (limited to 'scripts/page.lua')
-rw-r--r-- | scripts/page.lua | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/scripts/page.lua b/scripts/page.lua index dcbb36f..7378bfc 100644 --- a/scripts/page.lua +++ b/scripts/page.lua | |||
@@ -130,32 +130,35 @@ function generate_list(meta) | |||
130 | end | 130 | end |
131 | end | 131 | end |
132 | 132 | ||
133 | function deref_page(pages) | ||
134 | return function(ref) | ||
135 | return pages[utils.stringify(ref)] | ||
136 | end | ||
137 | end | ||
138 | |||
133 | function generate_related(meta) | 139 | function generate_related(meta) |
134 | if not meta.parent then return nil end | 140 | if not meta.parent then return nil end |
135 | 141 | ||
136 | meta = meta.parent | 142 | local deref = deref_page(meta.parent.pages.by_id) |
137 | 143 | ||
138 | local items = meta.pages.random:take(2):map(function (p) return d1_page_to_list_item(p) end) | 144 | meta.prev = meta.prev and d1_page_to_list_item(deref(meta.prev)) |
145 | meta.next = meta.next and d1_page_to_list_item(deref(meta.next)) | ||
139 | 146 | ||
140 | if #items == 0 then return nil end | 147 | if not meta.prev and not meta.next then return nil end |
141 | 148 | ||
142 | return { | 149 | return { |
143 | url = meta.url, | 150 | url = meta.parent.url, |
144 | layout = meta.list_layout, | 151 | layout = meta.parent.list_layout, |
145 | items = items | 152 | prev = meta.prev, |
153 | next = meta.next | ||
146 | } | 154 | } |
147 | end | 155 | end |
148 | 156 | ||
149 | function deref_page(pages) | ||
150 | return function(ref) | ||
151 | return pages[utils.stringify(ref)] | ||
152 | end | ||
153 | end | ||
154 | |||
155 | function process_pages(meta) | 157 | function process_pages(meta) |
156 | meta.pages.all = meta.pages.all:filterMap(deref_page(meta.pages.by_id)) | 158 | local deref = deref_page(meta.pages.by_id) |
157 | meta.pages.date_desc = meta.pages.date_desc:filterMap(deref_page(meta.pages.by_id)) | 159 | |
158 | meta.pages.random = meta.pages.all :clone():shuffle() | 160 | meta.pages.all = meta.pages.all:filterMap(deref) |
161 | meta.pages.date_desc = meta.pages.date_desc:filterMap(deref) | ||
159 | end | 162 | end |
160 | 163 | ||
161 | function resolve_urls(global, build, meta) | 164 | function resolve_urls(global, build, meta) |
@@ -179,6 +182,7 @@ function resolve_urls(global, build, meta) | |||
179 | end | 182 | end |
180 | 183 | ||
181 | function process_base(meta) | 184 | function process_base(meta) |
185 | meta.id = utils.stringify(meta.id) | ||
182 | meta.depth = tonumber(utils.stringify(meta.depth)) | 186 | meta.depth = tonumber(utils.stringify(meta.depth)) |
183 | meta.file_out = utils.stringify(meta.file_out) | 187 | meta.file_out = utils.stringify(meta.file_out) |
184 | meta.url = utils.stringify(meta.url) | 188 | meta.url = utils.stringify(meta.url) |
@@ -187,6 +191,8 @@ function process_base(meta) | |||
187 | meta.list_order = meta.list_order and utils.stringify(meta.list_order) | 191 | meta.list_order = meta.list_order and utils.stringify(meta.list_order) |
188 | meta.position = meta.position and tonumber(utils.stringify(meta.position)) | 192 | meta.position = meta.position and tonumber(utils.stringify(meta.position)) |
189 | meta.thumbnail = meta.thumbnail and utils.stringify(meta.thumbnail) | 193 | meta.thumbnail = meta.thumbnail and utils.stringify(meta.thumbnail) |
194 | meta.prev = meta.prev and utils.stringify(meta.prev) | ||
195 | meta.next = meta.next and utils.stringify(meta.next) | ||
190 | end | 196 | end |
191 | 197 | ||
192 | function process(global, build, meta, dir) | 198 | function process(global, build, meta, dir) |
@@ -207,7 +213,6 @@ function process(global, build, meta, dir) | |||
207 | end | 213 | end |
208 | 214 | ||
209 | function prune_pages(meta, up, down) | 215 | function prune_pages(meta, up, down) |
210 | meta.pages.random = pandoc.List() | ||
211 | meta.pages.by_id = {} | 216 | meta.pages.by_id = {} |
212 | 217 | ||
213 | if down == 0 then | 218 | if down == 0 then |
@@ -231,8 +236,6 @@ function prune(meta, up, down) | |||
231 | end | 236 | end |
232 | 237 | ||
233 | function Meta(meta) | 238 | function Meta(meta) |
234 | math.randomseed(os.time()) | ||
235 | |||
236 | local build = {} | 239 | local build = {} |
237 | 240 | ||
238 | for key, value in pairs(meta) do | 241 | for key, value in pairs(meta) do |
@@ -254,7 +257,7 @@ function Meta(meta) | |||
254 | 257 | ||
255 | meta = meta.tree | 258 | meta = meta.tree |
256 | 259 | ||
257 | local parts = utils.stringify(build.namespace):split('/'):skip(1) | 260 | local parts = build.namespace:split('/'):skip(1) |
258 | for i = 1, #parts do | 261 | for i = 1, #parts do |
259 | local part = parts[i] | 262 | local part = parts[i] |
260 | local p = meta.pages.by_id[part] | 263 | local p = meta.pages.by_id[part] |