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
|
# File 'lib/alula/generators/paginate.rb', line 3
def generate
@languages = {}
self.site.content.posts.each do |post|
post.languages.each do |lang|
@languages[lang] ||= []
@languages[lang] << post
end
end
num_posts = self.site.content.posts.count
pages = (num_posts / self.options.items).ceil
(0..pages).each do |page|
languages = @languages.select { |lang, posts| posts.count > page * self.options.items }
posts = Hash[
languages.collect do |lang, posts|
[ lang, posts.slice(page * self.options.items, self.options.items) ]
end
]
titles = Hash[
languages.collect {|lang, x| [lang, I18n.t("paginate.title", locale: lang, page: (page + 1))]}
]
self.site.content.pages << Alula::Content::Page.new({
generator: self,
posts: posts,
pagenum: (page + 1),
pages: (pages + 1),
title: titles,
name: "page-#{(page + 1)}",
slug: "page-#{(page + 1)}",
sidebar: false,
template: self.options.template,
site: self.site,
view: self.options.view || "paginate",
},
:previous => ->(hook, locale) {
pos = self.navigation(locale).index(self)
if pos and pos < (self.navigation(locale).count - 1)
self.navigation(locale)[pos + 1]
else
nil
end
},
:next => ->(hook, locale) {
pos = self.navigation(locale).index(self)
if pos and pos > 0
self.navigation(locale)[pos - 1]
else
nil
end
},
:navigation => ->(hook, locale) {
locale ||= self.current_locale || self.site.config.locale
@navigation[locale] ||= self.site.content.pages.select { |item| item.metadata.generator == self.generator and item.languages.include?(locale) }
}
)
end
end
|