1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
module Gentoo
module Tags
class NavigationTag < Liquid::Tag
def initialize(tag_name, level, tokens)
super
@level = level.strip
end
def render(context)
all_pages = context.registers[:site].pages
current_page = context.registers[:page]
if @level == 'primary'
primary(all_pages, current_page)
elsif @level == 'secondary'
secondary(all_pages, current_page)
elsif @level == 'tertiary'
tertiary(all_pages, current_page)
elsif @level =~ /^sitemap:(.*)$/
sitemap(all_pages, $1)
else
'unknown navigation level'
end
end
private
def primary(all_pages, current_page)
pages = all_pages.select { |page| page.data['nav1-show'] == true }
generate(pages, current_page, '1')
end
def secondary(all_pages, current_page)
pages = all_pages.select { |page| page.data['nav1'] == current_page['nav1'] && page.data['nav2-show'] == true }
generate(pages, current_page, '2')
end
def tertiary(all_pages, current_page)
pages = all_pages.select do |page|
page.data['nav1'] == current_page['nav1'] &&
page.data['nav2'] == current_page['nav2'] &&
page.data['nav3-show'] == true
end
generate(pages, current_page, '3')
end
def sitemap(all_pages, nav1)
pages = all_pages.select { |page| page.data['nav1'] == nav1 && page.data['nav2-show'] == true }
generate(pages, {}, '2')
end
def generate(all_pages, current_page, level)
level_show = 'nav%s-show' % level
level_weight = 'nav%s-weight' % level
level_str = 'nav%s' % level
pages = all_pages.select { |page| page.data[level_show] == true }
pages.sort! do |a, b|
if a.data.key?(level_weight) && b.data.key?(level_weight)
a.data[level_weight] <=> b.data[level_weight]
else
a_title = a.data['navtitle'] || a.data['title']
b_title = b.data['navtitle'] || b.data['title']
a_title <=> b_title
end
end
html = ''
pages.each do |page|
css_class = current_page[level_str] == page.data[level_str] ? 'active' : ''
html += "<li class=\"%s\">" % css_class
if page.data.key? 'redirect'
html += '<a href="' + page.data['redirect'] + '">'
else
html += '<a href="' + page.url.gsub('index.html', '') + '">'
end
if page.data.key? 'navtitle'
html += page.data['navtitle']
else
html += page.data['title']
end
if page.data.key? 'redirect'
html += ' <span class="fa fa-fw fa-external-link-square external-link" title="This link will leave www.gentoo.org."></span>'
end
html += "</a></li>\n"
end
html
end
end
end
end
Liquid::Template.register_tag('navigation', Gentoo::Tags::NavigationTag)
|