lib/middleman-core/sitemap.rb
require 'middleman-core/sitemap/store' require 'middleman-core/sitemap/resource' require 'middleman-core/sitemap/extensions/on_disk' require 'middleman-core/sitemap/extensions/redirects' require 'middleman-core/sitemap/extensions/request_endpoints' require 'middleman-core/sitemap/extensions/proxies' require 'middleman-core/sitemap/extensions/ignores' # Core Sitemap Extensions module Middleman module Sitemap # Setup Extension class << self # Once registered def registered(app) app.register Middleman::Sitemap::Extensions::RequestEndpoints app.register Middleman::Sitemap::Extensions::Proxies app.register Middleman::Sitemap::Extensions::Ignores app.register Middleman::Sitemap::Extensions::Redirects # Set to automatically convert some characters into a directory app.config.define_setting :automatic_directory_matcher, nil, 'Set to automatically convert some characters into a directory' # Setup callbacks which can exclude paths from the sitemap app.config.define_setting :ignored_sitemap_matchers, { # dotfiles and folders in the root root_dotfiles: proc { |file| file.start_with?('.') }, # Files starting with an dot, but not .htaccess source_dotfiles: proc { |file| file =~ %r{/\.} && file !~ %r{/\.(htaccess|htpasswd|nojekyll)} }, # Files starting with an underscore, but not a double-underscore partials: proc { |file| file =~ %r{/_[^_]} }, layout: proc { |file, sitemap_app| file.start_with?(File.join(sitemap_app.config[:source], 'layout.')) || file.start_with?(File.join(sitemap_app.config[:source], 'layouts/')) } }, 'Callbacks that can exclude paths from the sitemap' # Include instance methods app.send :include, InstanceMethods # Initialize Sitemap app.before_configuration do sitemap end end alias_method :included, :registered end # Sitemap instance methods module InstanceMethods # Get the sitemap class instance # @return [Middleman::Sitemap::Store] def sitemap @_sitemap ||= Store.new(self) end # Get the resource object for the current path # @return [Middleman::Sitemap::Resource] def current_page current_resource end # Get the resource object for the current path # @return [Middleman::Sitemap::Resource] def current_resource return nil unless current_path sitemap.find_resource_by_destination_path(current_path) end end end end