hydeweb 0.0.5 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +28 -1
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/data/new_site/hyde.conf +4 -0
- data/data/new_site/layouts/default.haml +3 -2
- data/hydeweb.gemspec +115 -105
- data/lib/hyde/clicommand.rb +2 -1
- data/lib/hyde/clicommands.rb +13 -2
- data/lib/hyde/helpers.rb +16 -9
- data/lib/hyde/layout.rb +5 -0
- data/lib/hyde/meta.rb +1 -1
- data/lib/hyde/page.rb +124 -7
- data/lib/hyde/page_factory.rb +12 -2
- data/lib/hyde/project.rb +17 -6
- data/lib/hyde/renderer.rb +17 -3
- data/lib/hyde/renderers.rb +45 -12
- data/lib/hyde/sinatra/init.rb +5 -3
- data/lib/hyde/utils.rb +10 -0
- data/lib/hyde.rb +15 -14
- data/lib/hyde_misc/console.rb +4 -0
- data/manual/Extending/ExtendingHyde.md +3 -2
- data/manual/Hyde.md +9 -4
- data/manual/Introduction/Configuration.md +67 -1
- data/manual/Introduction/GettingStarted.md +7 -9
- data/manual/Introduction/Installation.md +2 -2
- data/manual/Introduction/Layouts.md +11 -1
- data/manual/Introduction/Metadata.md +92 -0
- data/manual/Introduction/Partials.md +10 -0
- data/manual/Introduction/TemplateLanguages.md +5 -5
- data/manual/Tips/Tips.md +42 -0
- data/test/fixtures/content_for/layouts/cf-args.haml +2 -0
- data/test/fixtures/content_for/layouts/cf.haml +14 -0
- data/test/fixtures/content_for/site/cf-args-default.haml +2 -0
- data/test/fixtures/content_for/site/cf-args.haml +5 -0
- data/test/fixtures/content_for/site/cf.haml +6 -0
- data/test/fixtures/content_for/site/cf2.haml +3 -0
- data/test/fixtures/content_for/www_control/cf-args-default.html +1 -0
- data/test/fixtures/content_for/www_control/cf-args.html +2 -0
- data/test/fixtures/content_for/www_control/cf.html +17 -0
- data/test/fixtures/content_for/www_control/cf2.html +19 -0
- metadata +38 -16
- data/.gitignore +0 -25
- /data/test/fixtures/{two → content_for}/_config.yml +0 -0
- /data/test/fixtures/{two → content_for}/layouts/default.haml +0 -0
- /data/test/fixtures/{two → content_for}/layouts/shared/test.haml +0 -0
- /data/test/fixtures/{two → content_for}/site/default.html.haml +0 -0
- /data/test/fixtures/{two → content_for}/site/index.html.haml +0 -0
- /data/test/fixtures/{two → content_for}/site/var.html.haml +0 -0
- /data/test/fixtures/{two → content_for}/www_control/default.html +0 -0
- /data/test/fixtures/{two → content_for}/www_control/index.html +0 -0
- /data/test/fixtures/{two → content_for}/www_control/var.html +0 -0
data/CHANGELOG
CHANGED
@@ -1,4 +1,30 @@
|
|
1
|
-
v0.0.
|
1
|
+
v0.0.7
|
2
|
+
------
|
3
|
+
|
4
|
+
- Add support for Sass and SCSS.
|
5
|
+
- Add support for ignored files.
|
6
|
+
|
7
|
+
v0.0.6
|
8
|
+
------
|
9
|
+
|
10
|
+
- Added support for blocks for `yield_content` (as default text).
|
11
|
+
- `Page#referrer` now is a page (instead of a string of the name).
|
12
|
+
- Partials path is now not ignored by default.
|
13
|
+
- Add support for page ordering (by the `position` key in metadata).
|
14
|
+
- You can now start an IRB session with the `hyde console` command.
|
15
|
+
- Implement traversion methods for page: #next, #previous, #siblings,
|
16
|
+
and #parent.
|
17
|
+
- Implement the 'page' variable to be available in pages.
|
18
|
+
- Add Page#title.
|
19
|
+
- Add Page#path.
|
20
|
+
- Add Page#breadcrumbs.
|
21
|
+
- Implement Utils#escape_html.
|
22
|
+
- Hyde now always tries 'layouts/default.*' as the default layout, if none's
|
23
|
+
specified. (TODO: layout: false)
|
24
|
+
- Implement Renderer.layoutable?, which dictates if a renderer is capable of
|
25
|
+
having a layout.
|
26
|
+
|
27
|
+
v0.0.5 - 2010-05-30
|
2
28
|
-------------------
|
3
29
|
|
4
30
|
- Implemented `content_for` and `yield_content` helpers
|
@@ -11,4 +37,5 @@ v0.0.5 - 2010-xx-xx
|
|
11
37
|
|
12
38
|
v0.0.4 - 2010-05-25
|
13
39
|
-------------------
|
40
|
+
|
14
41
|
- First public release
|
data/Rakefile
CHANGED
@@ -45,7 +45,7 @@ Rake::RDocTask.new do |rdoc|
|
|
45
45
|
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
46
46
|
|
47
47
|
rdoc.rdoc_dir = 'rdoc'
|
48
|
-
rdoc.title = "
|
48
|
+
rdoc.title = "Hyde #{version}"
|
49
49
|
rdoc.rdoc_files.include('README*')
|
50
50
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
51
51
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.7
|
data/data/new_site/hyde.conf
CHANGED
@@ -21,6 +21,10 @@ partials_path: layouts
|
|
21
21
|
# The folder where the HTML files are to be built when typing `hyde build`.
|
22
22
|
output_path: public
|
23
23
|
|
24
|
+
# Any files matching these in the site_path will be excluded.
|
25
|
+
ignore:
|
26
|
+
- **/*~
|
27
|
+
|
24
28
|
# Put any custom gems here.
|
25
29
|
# gems:
|
26
30
|
# - hyde-rst
|
data/hydeweb.gemspec
CHANGED
@@ -1,137 +1,147 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{hydeweb}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Rico Sta. Cruz", "Sinefunc, Inc."]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-11-24}
|
13
13
|
s.default_executable = %q{hyde}
|
14
14
|
s.description = %q{Website preprocessor}
|
15
15
|
s.email = %q{rico@sinefunc.com}
|
16
16
|
s.executables = ["hyde"]
|
17
17
|
s.extra_rdoc_files = [
|
18
18
|
"LICENSE",
|
19
|
-
|
19
|
+
"README.md"
|
20
20
|
]
|
21
21
|
s.files = [
|
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
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
22
|
+
".yardopts",
|
23
|
+
"AUTHORS",
|
24
|
+
"CHANGELOG",
|
25
|
+
"LICENSE",
|
26
|
+
"README.md",
|
27
|
+
"Rakefile",
|
28
|
+
"VERSION",
|
29
|
+
"bin/hyde",
|
30
|
+
"data/new_site/.gitignore",
|
31
|
+
"data/new_site/README.md",
|
32
|
+
"data/new_site/hyde.conf",
|
33
|
+
"data/new_site/layouts/default.haml",
|
34
|
+
"data/new_site/site/index.html.haml",
|
35
|
+
"data/pages/404.html",
|
36
|
+
"hydeweb.gemspec",
|
37
|
+
"lib/hyde.rb",
|
38
|
+
"lib/hyde/clicommand.rb",
|
39
|
+
"lib/hyde/clicommands.rb",
|
40
|
+
"lib/hyde/helpers.rb",
|
41
|
+
"lib/hyde/layout.rb",
|
42
|
+
"lib/hyde/meta.rb",
|
43
|
+
"lib/hyde/ostruct.rb",
|
44
|
+
"lib/hyde/page.rb",
|
45
|
+
"lib/hyde/page_factory.rb",
|
46
|
+
"lib/hyde/partial.rb",
|
47
|
+
"lib/hyde/project.rb",
|
48
|
+
"lib/hyde/renderer.rb",
|
49
|
+
"lib/hyde/renderers.rb",
|
50
|
+
"lib/hyde/sinatra/init.rb",
|
51
|
+
"lib/hyde/utils.rb",
|
52
|
+
"lib/hyde_misc/console.rb",
|
53
|
+
"manual/Extending/ExtendingHyde.md",
|
54
|
+
"manual/Hyde.md",
|
55
|
+
"manual/Introduction/Configuration.md",
|
56
|
+
"manual/Introduction/GettingStarted.md",
|
57
|
+
"manual/Introduction/Installation.md",
|
58
|
+
"manual/Introduction/Layouts.md",
|
59
|
+
"manual/Introduction/Metadata.md",
|
60
|
+
"manual/Introduction/Partials.md",
|
61
|
+
"manual/Introduction/TemplateLanguages.md",
|
62
|
+
"manual/Tips/Tips.md",
|
63
|
+
"test/fixtures/content_for/_config.yml",
|
64
|
+
"test/fixtures/content_for/layouts/cf-args.haml",
|
65
|
+
"test/fixtures/content_for/layouts/cf.haml",
|
66
|
+
"test/fixtures/content_for/layouts/default.haml",
|
67
|
+
"test/fixtures/content_for/layouts/shared/test.haml",
|
68
|
+
"test/fixtures/content_for/site/cf-args-default.haml",
|
69
|
+
"test/fixtures/content_for/site/cf-args.haml",
|
70
|
+
"test/fixtures/content_for/site/cf.haml",
|
71
|
+
"test/fixtures/content_for/site/cf2.haml",
|
72
|
+
"test/fixtures/content_for/site/default.html.haml",
|
73
|
+
"test/fixtures/content_for/site/index.html.haml",
|
74
|
+
"test/fixtures/content_for/site/var.html.haml",
|
75
|
+
"test/fixtures/content_for/www_control/cf-args-default.html",
|
76
|
+
"test/fixtures/content_for/www_control/cf-args.html",
|
77
|
+
"test/fixtures/content_for/www_control/cf.html",
|
78
|
+
"test/fixtures/content_for/www_control/cf2.html",
|
79
|
+
"test/fixtures/content_for/www_control/default.html",
|
80
|
+
"test/fixtures/content_for/www_control/index.html",
|
81
|
+
"test/fixtures/content_for/www_control/var.html",
|
82
|
+
"test/fixtures/custom/_config.yml",
|
83
|
+
"test/fixtures/custom/extensions/custom/custom.rb",
|
84
|
+
"test/fixtures/custom/layouts/default.haml",
|
85
|
+
"test/fixtures/custom/layouts/erbtest.erb",
|
86
|
+
"test/fixtures/custom/layouts/shared/sidebar.haml",
|
87
|
+
"test/fixtures/custom/site/about/index.html",
|
88
|
+
"test/fixtures/custom/site/assets/common.css.less",
|
89
|
+
"test/fixtures/custom/site/assets/style.css.less",
|
90
|
+
"test/fixtures/custom/site/foo.html.haml",
|
91
|
+
"test/fixtures/custom/site/index.html.haml",
|
92
|
+
"test/fixtures/custom/site/layout_test.html.haml",
|
93
|
+
"test/fixtures/custom/site/lol.html.erb",
|
94
|
+
"test/fixtures/custom/site/markdown.html.md",
|
95
|
+
"test/fixtures/custom/site/yes.html",
|
96
|
+
"test/fixtures/custom/www_control/about/index.html",
|
97
|
+
"test/fixtures/custom/www_control/assets/common.css",
|
98
|
+
"test/fixtures/custom/www_control/assets/style.css",
|
99
|
+
"test/fixtures/custom/www_control/foo.html",
|
100
|
+
"test/fixtures/custom/www_control/index.html",
|
101
|
+
"test/fixtures/custom/www_control/layout_test.html",
|
102
|
+
"test/fixtures/custom/www_control/lol.html",
|
103
|
+
"test/fixtures/custom/www_control/markdown.html",
|
104
|
+
"test/fixtures/custom/www_control/yes.html",
|
105
|
+
"test/fixtures/default/_config.yml",
|
106
|
+
"test/fixtures/default/extensions/custom/custom.rb",
|
107
|
+
"test/fixtures/default/layouts/default.haml",
|
108
|
+
"test/fixtures/default/site/about/index.html",
|
109
|
+
"test/fixtures/default/site/foo.html.haml",
|
110
|
+
"test/fixtures/default/site/index.html.haml",
|
111
|
+
"test/fixtures/default/site/layout_test.html.haml",
|
112
|
+
"test/fixtures/default/site/yes.html",
|
113
|
+
"test/fixtures/default/www_control/about/index.html",
|
114
|
+
"test/fixtures/default/www_control/foo.html",
|
115
|
+
"test/fixtures/default/www_control/index.html",
|
116
|
+
"test/fixtures/default/www_control/layout_test.html",
|
117
|
+
"test/fixtures/default/www_control/yes.html",
|
118
|
+
"test/helper.rb",
|
119
|
+
"test/test_all_fixtures.rb",
|
120
|
+
"test/test_build.rb",
|
121
|
+
"test/test_hyde.rb",
|
122
|
+
"test/test_page.rb",
|
123
|
+
"test/test_utils.rb"
|
113
124
|
]
|
114
125
|
s.homepage = %q{http://github.com/sinefunc/hyde}
|
115
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
116
126
|
s.require_paths = ["lib"]
|
117
|
-
s.rubygems_version = %q{1.3.
|
127
|
+
s.rubygems_version = %q{1.3.7}
|
118
128
|
s.summary = %q{Website preprocessor}
|
119
129
|
s.test_files = [
|
120
130
|
"test/fixtures/custom/extensions/custom/custom.rb",
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
131
|
+
"test/fixtures/default/extensions/custom/custom.rb",
|
132
|
+
"test/helper.rb",
|
133
|
+
"test/test_all_fixtures.rb",
|
134
|
+
"test/test_build.rb",
|
135
|
+
"test/test_hyde.rb",
|
136
|
+
"test/test_page.rb",
|
137
|
+
"test/test_utils.rb"
|
128
138
|
]
|
129
139
|
|
130
140
|
if s.respond_to? :specification_version then
|
131
141
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
132
142
|
s.specification_version = 3
|
133
143
|
|
134
|
-
if Gem::Version.new(Gem::
|
144
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
135
145
|
s.add_runtime_dependency(%q<sinatra>, [">= 1.0.0"])
|
136
146
|
s.add_runtime_dependency(%q<less>, [">= 1.2.21"])
|
137
147
|
s.add_runtime_dependency(%q<haml>, [">= 2.2.20"])
|
data/lib/hyde/clicommand.rb
CHANGED
@@ -25,7 +25,8 @@ module Hyde
|
|
25
25
|
|
26
26
|
def self.project
|
27
27
|
if $project.nil?
|
28
|
-
|
28
|
+
files = Hyde::Project.config_filenames.join(", ")
|
29
|
+
log "Error: Hyde config file not found. (looking for: #{files})"
|
29
30
|
log "Run this command in a Hyde project directory.\nTo start a new Hyde project, type `hyde create <name>`"
|
30
31
|
exit
|
31
32
|
end
|
data/lib/hyde/clicommands.rb
CHANGED
@@ -67,7 +67,7 @@ module Hyde
|
|
67
67
|
project.build ostream
|
68
68
|
end
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
class Start < CLICommand
|
72
72
|
desc "Starts the local webserver"
|
73
73
|
def self.run(*a)
|
@@ -76,17 +76,28 @@ module Hyde
|
|
76
76
|
end
|
77
77
|
|
78
78
|
def self.help
|
79
|
+
port = project.config.port
|
79
80
|
log "Usage: hyde start"
|
80
81
|
log ""
|
81
82
|
log "This command starts the local webserver. You may then be able to"
|
82
83
|
log "see your site locally by visiting the URL:"
|
83
84
|
log ""
|
84
|
-
log " http://127.0.0.1
|
85
|
+
log " http://127.0.0.1:#{port}"
|
85
86
|
log ""
|
86
87
|
log "You may shut the server down by pressing Ctrl-C."
|
87
88
|
end
|
88
89
|
end
|
89
90
|
|
91
|
+
class Console < CLICommand
|
92
|
+
desc "Starts a console"
|
93
|
+
|
94
|
+
def self.run(*a)
|
95
|
+
path = File.join(Hyde::LIB_PATH, 'hyde_misc', 'console.rb')
|
96
|
+
cmd = "irb -r\"#{path}\""
|
97
|
+
system cmd
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
90
101
|
class Create < CLICommand
|
91
102
|
desc "Starts a new Hyde project"
|
92
103
|
def self.run(*a)
|
data/lib/hyde/helpers.rb
CHANGED
@@ -3,40 +3,47 @@ module Hyde
|
|
3
3
|
def partial(partial_path, locals = {})
|
4
4
|
begin
|
5
5
|
p = project[partial_path.to_s, :Partial]
|
6
|
-
p.referrer = self
|
6
|
+
p.referrer = (referrer || self)
|
7
7
|
p.render locals
|
8
|
+
|
8
9
|
rescue ::Hyde::NotFound
|
9
10
|
"<!-- Can't find #{partial_path.to_s} -->"
|
10
11
|
end
|
11
12
|
end
|
12
13
|
|
13
14
|
def content_for(key, &block)
|
14
|
-
|
15
|
+
content_block[key.to_sym] = block
|
15
16
|
end
|
16
17
|
|
17
18
|
def has_content?(key)
|
18
|
-
|
19
|
+
content_block.keys.include? key.to_sym
|
19
20
|
end
|
20
21
|
|
21
|
-
def yield_content(key, *args)
|
22
|
-
block =
|
23
|
-
return '' if block.nil?
|
22
|
+
def yield_content(key, *args, &default_block)
|
23
|
+
block = content_block[key.to_sym]
|
24
24
|
|
25
25
|
if respond_to?(:block_is_haml?) && block_is_haml?(block)
|
26
26
|
capture_haml *args, &block
|
27
|
-
|
27
|
+
|
28
|
+
elsif block.respond_to?(:call)
|
28
29
|
block.call *args
|
30
|
+
|
31
|
+
elsif block_given? and respond_to(:block_is_haml?) and block_is_haml?(default_block)
|
32
|
+
capture_haml *args, &default_block
|
33
|
+
|
29
34
|
elsif block_given?
|
30
35
|
yield
|
36
|
+
|
31
37
|
else
|
32
38
|
''
|
33
39
|
end
|
34
40
|
end
|
35
41
|
|
36
42
|
protected
|
37
|
-
def
|
43
|
+
def content_block
|
44
|
+
file_key = (referrer || self).to_sym
|
38
45
|
@@content_blocks ||= Hash.new
|
39
|
-
@@content_blocks[
|
46
|
+
@@content_blocks[file_key] ||= Hash.new
|
40
47
|
end
|
41
48
|
end
|
42
49
|
end
|
data/lib/hyde/layout.rb
CHANGED
data/lib/hyde/meta.rb
CHANGED
data/lib/hyde/page.rb
CHANGED
@@ -25,9 +25,9 @@ module Hyde
|
|
25
25
|
# A reference to the parent {Project} instance
|
26
26
|
attr_reader :project
|
27
27
|
|
28
|
-
attr_accessor :
|
28
|
+
attr_accessor :referrer
|
29
29
|
|
30
|
-
|
30
|
+
DEFAULT_LAYOUT = 'default'
|
31
31
|
|
32
32
|
# Factory
|
33
33
|
#
|
@@ -35,22 +35,139 @@ module Hyde
|
|
35
35
|
PageFactory.create path, project, def_page_class
|
36
36
|
end
|
37
37
|
|
38
|
-
def referrer
|
39
|
-
@referrer.nil? ? name : @referrer
|
40
|
-
end
|
41
|
-
|
42
38
|
# Returns the rendered output.
|
43
39
|
def render(data = {}, &block)
|
44
40
|
data = @meta | data
|
41
|
+
data[:page] ||= self
|
45
42
|
output = @renderer.render(data, &block)
|
46
|
-
output =
|
43
|
+
output = layout.render(data) { output } unless layout.nil?
|
47
44
|
output
|
48
45
|
end
|
49
46
|
|
47
|
+
def layout=(val)
|
48
|
+
@layout = val
|
49
|
+
end
|
50
|
+
|
51
|
+
def layout
|
52
|
+
begin
|
53
|
+
@layout ||= project[DEFAULT_LAYOUT, :Layout] if !@renderer.nil? and @renderer.layoutable?
|
54
|
+
@layout
|
55
|
+
rescue NotFound
|
56
|
+
nil
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def title
|
61
|
+
@title ||= if meta.title
|
62
|
+
meta.title
|
63
|
+
elsif is_index?
|
64
|
+
File.basename(File.dirname(filename))
|
65
|
+
else
|
66
|
+
File.basename(filename, '.*')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Returns the URL path for the page.
|
71
|
+
def path
|
72
|
+
return @url unless @url.nil?
|
73
|
+
|
74
|
+
url = File.split(@name)
|
75
|
+
url[1] = File.basename(url[1], '.*')
|
76
|
+
url[1] = (url[1] + @renderer.default_ext) unless url[1].include?('.')
|
77
|
+
@url = '/' + url.join('/')
|
78
|
+
end
|
79
|
+
|
50
80
|
def get_binding #(&blk)
|
51
81
|
binding
|
52
82
|
end
|
53
83
|
|
84
|
+
def to_s
|
85
|
+
name
|
86
|
+
end
|
87
|
+
|
88
|
+
def to_sym
|
89
|
+
(filename).to_sym
|
90
|
+
end
|
91
|
+
|
92
|
+
def <=>(other)
|
93
|
+
result = self.position <=> other.position
|
94
|
+
result ||= self.position.to_s <=> other.position.to_s
|
95
|
+
result
|
96
|
+
end
|
97
|
+
|
98
|
+
def position
|
99
|
+
meta.position || title
|
100
|
+
end
|
101
|
+
|
102
|
+
def parent
|
103
|
+
folder = File.dirname(@name)
|
104
|
+
folder = File.join(folder, '..') if is_index?
|
105
|
+
folder = File.expand_path(folder)
|
106
|
+
|
107
|
+
files = Dir[File.join(folder, 'index.*')]
|
108
|
+
return nil if files.empty?
|
109
|
+
|
110
|
+
page = PageFactory.create(files.first, @project)
|
111
|
+
return nil if page === self
|
112
|
+
|
113
|
+
page
|
114
|
+
end
|
115
|
+
|
116
|
+
def children
|
117
|
+
return [] unless is_index?
|
118
|
+
folder = File.dirname(@name)
|
119
|
+
|
120
|
+
get_pages_from folder
|
121
|
+
end
|
122
|
+
|
123
|
+
def siblings
|
124
|
+
folder = File.dirname(@name)
|
125
|
+
folder = File.join(folder, '..') if is_index?
|
126
|
+
|
127
|
+
get_pages_from folder
|
128
|
+
end
|
129
|
+
|
130
|
+
def get_pages_from(folder)
|
131
|
+
# Sanity check: don't go beyond the root
|
132
|
+
return [] unless File.expand_path(folder).include?(File.expand_path(@project.root(:site)))
|
133
|
+
|
134
|
+
files = Dir[@project.root(:site, folder, '*')]
|
135
|
+
files.inject([]) do |a, name|
|
136
|
+
if File.directory?(name)
|
137
|
+
name = Dir[File.join(name, 'index.*')].first
|
138
|
+
a << PageFactory.create(name, @project) unless name.nil?
|
139
|
+
|
140
|
+
else
|
141
|
+
page = PageFactory.create name, @project
|
142
|
+
a << page unless page.is_index?
|
143
|
+
|
144
|
+
end
|
145
|
+
a
|
146
|
+
end.sort
|
147
|
+
end
|
148
|
+
|
149
|
+
# Returns an array of the page's ancestors, starting from the root page.
|
150
|
+
def breadcrumbs
|
151
|
+
@crumbs ||= parent.nil? ? [] : (parent.breadcrumbs + [parent])
|
152
|
+
end
|
153
|
+
|
154
|
+
def ===(other)
|
155
|
+
return false if other.nil?
|
156
|
+
super || (File.expand_path(self.filename) === File.expand_path(other.filename))
|
157
|
+
end
|
158
|
+
|
159
|
+
def next
|
160
|
+
siblings.each_cons(2) { |(i, other)| return other if i === self }
|
161
|
+
end
|
162
|
+
|
163
|
+
def previous
|
164
|
+
siblings.each_cons(2) { |(other, i)| return other if i === self }
|
165
|
+
end
|
166
|
+
|
167
|
+
def is_index?
|
168
|
+
!@name.match(/(^|\/)index/).nil?
|
169
|
+
end
|
170
|
+
|
54
171
|
protected
|
55
172
|
|
56
173
|
# Constructor.
|
data/lib/hyde/page_factory.rb
CHANGED
@@ -1,6 +1,15 @@
|
|
1
1
|
module Hyde
|
2
2
|
class PageFactory
|
3
|
+
# Creates a Page with the right class, as defined in the Page's metadata.
|
4
|
+
#
|
5
|
+
# Params:
|
6
|
+
# path - A path, or a filename
|
7
|
+
#
|
3
8
|
def self.create(path, project, def_page_class = Page)
|
9
|
+
# Remove prefix
|
10
|
+
path.gsub!(project.root(:site), '')
|
11
|
+
path.gsub!(/^\/+/, '')
|
12
|
+
|
4
13
|
ext = File.extname(path)
|
5
14
|
begin
|
6
15
|
do_create path, project, def_page_class
|
@@ -29,7 +38,8 @@ module Hyde
|
|
29
38
|
raise NotFound, "`#{path}` is a directory, not a file"
|
30
39
|
|
31
40
|
elsif File.exists? filename
|
32
|
-
|
41
|
+
ext = File.extname(filename)[1..-1]
|
42
|
+
renderer = Hyde::Renderer.get(ext)
|
33
43
|
|
34
44
|
else
|
35
45
|
# Look for the file
|
@@ -43,7 +53,7 @@ module Hyde
|
|
43
53
|
begin
|
44
54
|
ext = File.extname(match)[1..-1].capitalize.to_sym
|
45
55
|
exts << File.extname(match)
|
46
|
-
r_class = Hyde::Renderers.const_get(ext)
|
56
|
+
r_class = Hyde::Renderers.const_get(ext) # .get(ext, nil)
|
47
57
|
renderer ||= r_class
|
48
58
|
filename = match
|
49
59
|
rescue NoMethodError
|