diff options
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/page.lua | 31 | 
1 files changed, 22 insertions, 9 deletions
diff --git a/scripts/page.lua b/scripts/page.lua index e846dd5..3df55ec 100644 --- a/scripts/page.lua +++ b/scripts/page.lua  | |||
| @@ -16,17 +16,19 @@ function resolve_url(site_url, ref_file, target_file) | |||
| 16 | return { abs = abs, rel = rel, full = full } | 16 | return { abs = abs, rel = rel, full = full } | 
| 17 | end | 17 | end | 
| 18 | 18 | ||
| 19 | function prep_menu(active_id, main_menu) | 19 | function prep_menu(namespace, main_menu) | 
| 20 | active_id = utils.stringify(active_id) | 20 | namespace = utils.stringify(namespace) | 
| 21 | 21 | ||
| 22 | local active_item = nil | 22 | local active_item = nil | 
| 23 | local items = pandoc.List() | 23 | local items = pandoc.List() | 
| 24 | 24 | ||
| 25 | for i = 1, #main_menu do | 25 | for i = 1, #main_menu do | 
| 26 | local item = main_menu[i] | 26 | local item = main_menu[i] | 
| 27 | local active = utils.stringify(item.id) == active_id | 27 | for j = 1, #item.match do | 
| 28 | item.active = active | 28 | if active_item then break end | 
| 29 | if active then active_item = item end | 29 | item.active = not not namespace:match(utils.stringify(item.match[j])) | 
| 30 | if item.active then active_item = item end | ||
| 31 | end | ||
| 30 | if not item.hidden or item.active then items:insert(item) end | 32 | if not item.hidden or item.active then items:insert(item) end | 
| 31 | end | 33 | end | 
| 32 | 34 | ||
| @@ -35,7 +37,7 @@ end | |||
| 35 | 37 | ||
| 36 | function process_pages(global, build, meta) | 38 | function process_pages(global, build, meta) | 
| 37 | for _, p in pairs(meta.pages.by_id) do | 39 | for _, p in pairs(meta.pages.by_id) do | 
| 38 | process(global, build, p) | 40 | process_pages(global, build, p) | 
| 39 | end | 41 | end | 
| 40 | 42 | ||
| 41 | meta.pages = { | 43 | meta.pages = { | 
| @@ -178,7 +180,10 @@ end | |||
| 178 | function process(global, build, meta) | 180 | function process(global, build, meta) | 
| 179 | process_base(meta) | 181 | process_base(meta) | 
| 180 | resolve_urls(global, build, meta) | 182 | resolve_urls(global, build, meta) | 
| 181 | process_pages(global, build, meta) | 183 | |
| 184 | for _, p in pairs(meta.pages.by_id) do | ||
| 185 | process(global, build, p) | ||
| 186 | end | ||
| 182 | end | 187 | end | 
| 183 | 188 | ||
| 184 | function Meta(meta) | 189 | function Meta(meta) | 
| @@ -199,17 +204,25 @@ function Meta(meta) | |||
| 199 | menus = meta.menus | 204 | menus = meta.menus | 
| 200 | } | 205 | } | 
| 201 | 206 | ||
| 207 | meta = meta.tree | ||
| 208 | |||
| 202 | process(global, build, meta) | 209 | process(global, build, meta) | 
| 203 | 210 | ||
| 204 | local parts = utils.stringify(build.namespace):split('/'):skip(1) | 211 | local parts = utils.stringify(build.namespace):split('/'):skip(1) | 
| 205 | for i = 1, #parts do | 212 | for i = 1, #parts do | 
| 206 | meta = meta.pages.by_id[parts[i]] | 213 | local part = parts[i] | 
| 214 | local p = meta.pages.by_id[part] | ||
| 215 | meta.pages.by_id[part] = nil | ||
| 216 | p.parent = meta | ||
| 217 | meta = p | ||
| 207 | end | 218 | end | 
| 208 | 219 | ||
| 220 | process_pages(global, build, meta) | ||
| 221 | |||
| 209 | meta.list = generate_list(meta) | 222 | meta.list = generate_list(meta) | 
| 210 | 223 | ||
| 211 | if global.menus and global.menus.main then | 224 | if global.menus and global.menus.main then | 
| 212 | global.menus.main = prep_menu(meta.namespace.root.id, global.menus.main) | 225 | global.menus.main = prep_menu(meta.namespace.full, global.menus.main) | 
| 213 | end | 226 | end | 
| 214 | 227 | ||
| 215 | for key, value in pairs(global) do | 228 | for key, value in pairs(global) do | 
