Class: Jekyll_Tagger::Tagger
- Inherits:
-
Jekyll::Generator
- Object
- Jekyll::Generator
- Jekyll_Tagger::Tagger
- Defined in:
- lib/jekyll_tagger/tagger.rb
Class Attribute Summary collapse
-
.main ⇒ Object
Returns the value of attribute main.
Instance Attribute Summary collapse
-
#indexes ⇒ Object
Returns the value of attribute indexes.
-
#tags ⇒ Object
Returns the value of attribute tags.
Instance Method Summary collapse
-
#add_feed(tag, posts) ⇒ Object
—.
- #add_page(tag, pager, number) ⇒ Object
- #add_pages(tag, posts) ⇒ Object
- #find_indexes ⇒ Object
- #find_layout(tag, type) ⇒ Object
- #find_posts(posts, include, exclude) ⇒ Object
- #find_tags ⇒ Object
- #generate(site) ⇒ Object
- #generate_tags(tag_posts) ⇒ Object
- #index_name(tag) ⇒ Object
- #init(site) ⇒ Object
- #layout_valid?(layout, warn = false) ⇒ Boolean
- #tag_file(tag, type, number = 1) ⇒ Object
- #tag_folder(tag, type, number = 1) ⇒ Object
- #tag_name(tag) ⇒ Object
- #tag_slug(tag) ⇒ Object
- #tag_url(tag, type, number = 1) ⇒ Object
- #validate_posts(posts) ⇒ Object
Class Attribute Details
.main ⇒ Object
Returns the value of attribute main.
18 19 20 |
# File 'lib/jekyll_tagger/tagger.rb', line 18 def main @main end |
Instance Attribute Details
#indexes ⇒ Object
Returns the value of attribute indexes.
19 20 21 |
# File 'lib/jekyll_tagger/tagger.rb', line 19 def indexes @indexes end |
#tags ⇒ Object
Returns the value of attribute tags.
19 20 21 |
# File 'lib/jekyll_tagger/tagger.rb', line 19 def end |
Instance Method Details
#add_feed(tag, posts) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/jekyll_tagger/tagger.rb', line 22 def add_feed(tag,posts) layout = find_layout(tag,'feed') return unless layout tag_name = (self.tag_name tag ) tag_slug = (self.tag_slug tag ) tag_file = (self.tag_file tag,'feed') tag_folder = (self.tag_folder tag,'feed') tag_data = { 'layout' => layout, 'posts' => posts, 'tag' => tag, 'tag_slug' => tag_slug, 'tag_name' => tag_name } @site.pages << TagPage.new( @site, @site.source, tag_folder, tag_file , tag_data ) end |
#add_page(tag, pager, number) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/jekyll_tagger/tagger.rb', line 39 def add_page(tag,pager,number) layout = find_layout(tag,'page') return if !layout tag_name = (self.tag_name tag ) tag_slug = (self.tag_slug tag ) tag_folder = (self.tag_folder tag,'page',number) tag_file = (self.tag_file tag,'page',number) data = { 'layout' => layout, 'posts' => pager.page_items(number), 'tag' => tag, 'tag_slug' => tag_slug, 'tag_name' => tag_name, 'title' => (number > 1 ? sprintf('%s - page %d', tag_name , number) : tag_name) , 'page_list' => (pager.page_list number, @config.page_show , number), 'page_next' => (pager.page_next number), 'page_prev' => (pager.page_prev number), 'page_first'=> (pager.page_first number), 'page_last' => (pager.page_last number), 'page_curr' => number } @site.pages << TagPage.new( @site, @site.source, tag_folder, tag_file , data ) end |
#add_pages(tag, posts) ⇒ Object
63 64 65 66 67 68 |
# File 'lib/jekyll_tagger/tagger.rb', line 63 def add_pages(tag,posts) pager = Pager.new( posts , @config.page_size , lambda { |number| return self.tag_url(tag,'page',number) }) for kk in 1..(pager.page_count) add_page(tag,pager,kk) end end |
#find_indexes ⇒ Object
152 153 154 155 156 157 158 159 160 |
# File 'lib/jekyll_tagger/tagger.rb', line 152 def find_indexes() indexes = {} @config.indexes.each do |index| if index == '@' indexes['@'] = find_posts( @site.posts.docs.dup , @config.include , @config.exclude ) end end return indexes end |
#find_layout(tag, type) ⇒ Object
179 180 181 182 183 184 185 186 |
# File 'lib/jekyll_tagger/tagger.rb', line 179 def find_layout(tag,type) layout = @config.layouts["#{type}_#{tag}"] ; return layout if layout_valid?(layout,true) layout = @config.layouts["#{type}"] ; return layout if layout_valid?(layout,true) layout = @config.layouts['*'] ; return layout if layout_valid?(layout,true) layout = "tag_#{type}_#{tag}" ; return layout if layout_valid?(layout) layout = "tag_#{type}" ; return layout if layout_valid?(layout,true) return false end |
#find_posts(posts, include, exclude) ⇒ Object
162 163 164 165 166 167 168 169 170 171 |
# File 'lib/jekyll_tagger/tagger.rb', line 162 def find_posts(posts,include,exclude) if not include.empty? posts.delete_if { |post| (post.data['tags'] & include).empty? } end if not exclude.empty? posts.keep_if { |post| (post.data['tags'] & exclude).empty? } end validate_posts(posts) return posts end |
#find_tags ⇒ Object
140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/jekyll_tagger/tagger.rb', line 140 def () = @site. if not @config.include.empty? .reject! { |tag| not @config.include.include? tag } end if not @config.exclude.empty? .reject! { |tag| @config.exclude.include? tag } end .each { |tag,posts| validate_posts(posts) } return end |
#generate(site) ⇒ Object
3 4 5 6 7 |
# File 'lib/jekyll_tagger/tagger.rb', line 3 def generate(site) init(site) ( ) (@indexes) end |
#generate_tags(tag_posts) ⇒ Object
9 10 11 12 13 14 15 16 |
# File 'lib/jekyll_tagger/tagger.rb', line 9 def (tag_posts) @config.types.each do |type| tag_posts.each do |tag,posts| if type == 'feed' then (add_feed tag,posts) end if type == 'page' then (add_pages tag,posts) end end end end |
#index_name(tag) ⇒ Object
127 128 129 130 |
# File 'lib/jekyll_tagger/tagger.rb', line 127 def index_name(tag) return nil if tag[0] != '@' return "Recent Posts" end |
#init(site) ⇒ Object
132 133 134 135 136 137 138 |
# File 'lib/jekyll_tagger/tagger.rb', line 132 def init(site) Tagger.main = self @site = site @config = Config.new( @site.config['tagger'] || {} ) = () @indexes = find_indexes() end |
#layout_valid?(layout, warn = false) ⇒ Boolean
188 189 190 191 192 193 194 195 196 197 198 199 200 |
# File 'lib/jekyll_tagger/tagger.rb', line 188 def layout_valid?(layout,warn = false) if layout == nil return false end body = @site.layouts[layout] if body return body end if warn Jekyll.logger.warn("Build Warning:", "Layout <#{layout}> is invalid") end return false end |
#tag_file(tag, type, number = 1) ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/jekyll_tagger/tagger.rb', line 95 def tag_file(tag,type,number=1) tag_slug = self.tag_slug(tag) if type == 'feed' return @config.pretty || tag == "@" ? 'feed.xml' : "#{tag_slug}.xml" end if type == 'page' slug = tag_slug if tag == "@" slug = 'index' end if number == 1 name = @config.pretty ? 'index' : slug else name = @config.pretty ? 'index' : "#{slug}-#{number}" end return "#{name}.html" end end |
#tag_folder(tag, type, number = 1) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/jekyll_tagger/tagger.rb', line 78 def tag_folder(tag,type,number=1) tag_folder = @config.folders[tag] if not tag_folder tag_folder = @config.folders[type] || @config.folders['*' ] || 'tag' if @config.pretty tag_slug = self.tag_slug(tag) if tag_slug != '@' tag_folder = File.join(tag_folder, tag_slug) end end end if number > 1 && @config.pretty tag_folder = File.join(tag_folder, 'page',number.to_s) end return tag_folder end |
#tag_name(tag) ⇒ Object
70 71 72 |
# File 'lib/jekyll_tagger/tagger.rb', line 70 def tag_name(tag) @config.names[tag] || index_name(tag) || tag end |
#tag_slug(tag) ⇒ Object
74 75 76 |
# File 'lib/jekyll_tagger/tagger.rb', line 74 def tag_slug(tag) @config.slugs[tag] || tag end |
#tag_url(tag, type, number = 1) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/jekyll_tagger/tagger.rb', line 114 def tag_url(tag,type, number = 1) tag_folder = (self.tag_folder tag,type,number) tag_file = (self.tag_file tag,type,number) url_base = File.join('/', @site.config['baseurl'].to_s, tag_folder) if tag_file == 'index.html' if url_base[-1] != '/' url_base += '/' end return url_base end return File.join(url_base, tag_file ) end |
#validate_posts(posts) ⇒ Object
173 174 175 176 177 178 |
# File 'lib/jekyll_tagger/tagger.rb', line 173 def validate_posts(posts) posts.reject! { |post| post.data['tag_opts'] && post.data['tag_opts'].include?('hide') } if @config.post_order == 'descending' posts.sort!.reverse! end end |