class Jekyll::JekyllSitemap

def destination_path(file = "sitemap.xml")

Destination for sitemap.xml file within the site source directory
def destination_path(file = "sitemap.xml")
  @site.in_dest_dir(file)
end

def file_exists?(file_path)

Checks if a file already exists in the site source
def file_exists?(file_path)
  pages_and_files.any? { |p| p.url == "/#{file_path}" }
end

def generate(site)

Main plugin action, called by Jekyll-core
def generate(site)
  @site = site
  @site.pages << sitemap unless file_exists?("sitemap.xml")
  @site.pages << robots unless file_exists?("robots.txt")
end

def pages_and_files

def pages_and_files
  @pages_and_files ||= @site.pages + @site.static_files
end

def robots

def robots
  robots = PageWithoutAFile.new(@site, __dir__, "", "robots.txt")
  robots.content = File.read(source_path("robots.txt"))
  robots.data["layout"] = nil
  robots
end

def sitemap

def sitemap
  site_map = PageWithoutAFile.new(@site, __dir__, "", "sitemap.xml")
  site_map.content = File.read(source_path).gsub(MINIFY_REGEX, "")
  site_map.data["layout"] = nil
  site_map.data["static_files"] = static_files.map(&:to_liquid)
  site_map.data["xsl"] = file_exists?("sitemap.xsl")
  site_map
end

def source_path(file = "sitemap.xml")

Path to sitemap.xml template file
def source_path(file = "sitemap.xml")
  File.expand_path "../#{file}", __dir__
end

def static_files

Array of all non-jekyll site files with an HTML extension
def static_files
  @site.static_files.select { |file| INCLUDED_EXTENSIONS.include? file.extname }
end