class Middleman::BlogExtension
Attributes
@return [CalendarPages] calendar page handler for this blog
@return [Hash<CustomPages>] custom pages handlers for this blog, indexed by property name
@return [BlogData] blog data for this blog, which has all information about the blog articles
@return [Symbol] the name of this blog (autogenerated if not provided).
@return [Paginator] pagination handler for this blog
@return [TagPages] tag page handler for this blog
Public Class Methods
# File lib/middleman-blog/extension.rb, line 66 def initialize(app, options_hash = {}, &block) super @custom_pages = {} # NAME is the name of this particular blog, and how you reference it from #blog_controller or frontmatter. @name = options.name.to_sym if options.name # Allow one setting to set all the calendar templates if options.calendar_template options.year_template ||= options.calendar_template options.month_template ||= options.calendar_template options.day_template ||= options.calendar_template end # If "prefix" option is specified, all other paths are relative to it. if options.prefix options.prefix = "/#{options.prefix}" unless options.prefix.start_with? '/' options.permalink = File.join(options.prefix, options.permalink) options.sources = File.join(options.prefix, options.sources) options.taglink = File.join(options.prefix, options.taglink) options.year_link = File.join(options.prefix, options.year_link) options.month_link = File.join(options.prefix, options.month_link) options.day_link = File.join(options.prefix, options.day_link) options.custom_collections.each do |_key, opts| opts[:link] = File.join(options.prefix, opts[:link]) end end end
Public Instance Methods
# File lib/middleman-blog/extension.rb, line 97 def after_configuration @name ||= begin found_name = nil app.extensions[:blog].values.each_with_index do |ext, i| found_name = "blog#{i + 1}" if ext == self end found_name end # TODO: break up into private methods? @app.ignore(options.calendar_template) if options.calendar_template @app.ignore(options.year_template) if options.year_template @app.ignore(options.month_template) if options.month_template @app.ignore(options.day_template) if options.day_template @app.ignore options.tag_template if options.tag_template # Make sure ActiveSupport's TimeZone stuff has something to work with, # allowing people to set their desired time zone via Time.zone or # set :time_zone Time.zone = app.config[:time_zone] if app.config[:time_zone] time_zone = Time.zone || 'UTC' zone_default = Time.find_zone!(time_zone) raise 'Value assigned to time_zone not recognized.' unless zone_default Time.zone_default = zone_default # Initialize blog with options @data = Blog::BlogData.new(@app, self, options) @app.sitemap.register_resource_list_manipulator(:"blog_#{name}_articles", @data) if options.tag_template @app.ignore options.tag_template require 'middleman-blog/tag_pages' @tag_pages = Blog::TagPages.new(@app, self) @app.sitemap.register_resource_list_manipulator(:"blog_#{name}_tags", @tag_pages) end if options.year_template || options.month_template || options.day_template require 'middleman-blog/calendar_pages' @calendar_pages = Blog::CalendarPages.new(@app, self) @app.sitemap.register_resource_list_manipulator(:"blog_#{name}_calendar", @calendar_pages) end if options.custom_collections require 'middleman-blog/custom_pages' register_custom_pages end if options.paginate require 'middleman-blog/paginator' @paginator = Blog::Paginator.new(@app, self) @app.sitemap.register_resource_list_manipulator(:"blog_#{name}_paginate", @paginator) end logger.info "== Blog Sources: #{options.sources} (:prefix + :sources)" end
Private Instance Methods
Register any custom page collections that may be set in the config
A custom resource list manipulator will be generated for each key in the custom collections hash.
The following will collect posts on the “category” frontmatter property:
``` activate :blog do |blog| blog.custom_collections = { category: { link: "/categories/:category.html", template: "/category.html" } } end ```
Category pages in the example above will use the category.html as a template file and it will be ignored when building.
# File lib/middleman-blog/extension.rb, line 180 def register_custom_pages options.custom_collections.each do |property, options| @app.ignore options[:template] @custom_pages[property] = Blog::CustomPages.new(property, @app, self, options) @app.sitemap.register_resource_list_manipulator(:"blog_#{name}_#{property}", @custom_pages[property]) Blog::Helpers.generate_custom_helper(property) end end