summaryrefslogtreecommitdiff
path: root/lib/page_index.rb
blob: 073537e72b462881912ae5e89e6622af9e022286 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 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")