# coding: utf-8 require 'erb' require 'set' require 'yaml' require 'page_local' require 'page_remote' require 'config' class IndexPage < LocalPage def initialize(dirname) super(dirname) end def _metadata if @metadata.nil? yamlfile = _infile+"/index.yaml" if File::exist?(yamlfile) @metadata = YAML::load(File::read(yamlfile)) else @metadata = {} end end @metadata end def _ls @ls ||= Dir::entries(_infile) .select{|fname|not fname.start_with?(".")} .map{|fname|"#{_infile}/#{fname}"} .select{|path|Dir::exist?(path) or Config::get.html_suffixes.include?(File::extname(path).gsub(/^[.]/, ''))} end def pages if @pages.nil? @pages = [] for path in _ls if Dir::exist?(path) page = IndexPage::new(path) @pages.unshift(page) @pages += page.pages else @pages.unshift(LocalPage::new(path)) end end for data in _metadata['external'] @pages.unshift(RemotePage::new(data)) end end @pages end def _published return nil end def _updated return nil end def _years return Set[] end end ERB::new(File::read("tmpl/index.atom.erb")).def_method(IndexPage, 'atom()', "tmpl/index.atom.erb") ERB::new(File::read("tmpl/index.md.erb")).def_method(IndexPage, '_input()', "tmpl/index.md.erb")