hydeweb 0.0.3.pre → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.yardopts +5 -2
- data/AUTHORS +6 -0
- data/CHANGELOG +1 -0
- data/LICENSE +1 -1
- data/README.md +4 -1
- data/Rakefile +4 -0
- data/VERSION +1 -1
- data/hydeweb.gemspec +21 -11
- data/lib/hyde/helpers.rb +9 -2
- data/lib/hyde/init.rb +11 -1
- data/lib/hyde/page.rb +9 -53
- data/lib/hyde/page_factory.rb +63 -0
- data/lib/hyde/partial.rb +7 -0
- data/lib/hyde/project.rb +58 -34
- data/lib/hyde.rb +13 -11
- data/{docs → manual}/Extending/ExtendingHyde.md +1 -1
- data/manual/Hyde.md +58 -0
- data/{docs → manual}/Introduction/Configuration.md +2 -0
- data/manual/Introduction/GettingStarted.md +66 -0
- data/{docs/Introduction/Partials.md → manual/Introduction/Metadata.md} +1 -1
- data/manual/Introduction/Partials.md +63 -0
- data/manual/Introduction/TemplateLanguages.md +59 -0
- data/test/fixtures/custom/layouts/default.haml +1 -0
- data/test/fixtures/custom/layouts/shared/sidebar.haml +4 -0
- data/test/fixtures/custom/site/about/index.html +1 -1
- data/test/fixtures/custom/www_control/about/index.html +1 -1
- data/test/fixtures/custom/www_control/index.html +7 -0
- data/test/fixtures/custom/www_control/layout_test.html +7 -0
- data/test/fixtures/custom/www_control/markdown.html +7 -0
- data/test/fixtures/default/extensions/custom/custom.rb +2 -0
- data/test/helper.rb +8 -0
- data/test/test_all_fixtures.rb +6 -2
- data/test/test_hyde.rb +29 -10
- data/test/test_page.rb +26 -0
- metadata +25 -18
- data/docs/Hyde.md +0 -17
- data/docs/Introduction/GettingStarted.md +0 -32
- data/docs/Introduction/TemplateLanguages.md +0 -15
- /data/{docs → manual}/Introduction/Installation.md +0 -0
- /data/{docs → manual}/Introduction/Layouts.md +0 -0
data/.yardopts
CHANGED
data/AUTHORS
ADDED
data/CHANGELOG
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
|
data/LICENSE
CHANGED
data/README.md
CHANGED
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.4
|
data/hydeweb.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
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.4"
|
9
9
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
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-05-
|
12
|
+
s.date = %q{2010-05-25}
|
13
13
|
s.default_executable = %q{hyde}
|
14
14
|
s.description = %q{Website preprocessor}
|
15
15
|
s.email = %q{rico@sinefunc.com}
|
@@ -21,6 +21,8 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.files = [
|
22
22
|
".gitignore",
|
23
23
|
".yardopts",
|
24
|
+
"AUTHORS",
|
25
|
+
"CHANGELOG",
|
24
26
|
"LICENSE",
|
25
27
|
"README.md",
|
26
28
|
"Rakefile",
|
@@ -31,14 +33,6 @@ Gem::Specification.new do |s|
|
|
31
33
|
"data/new_site/hyde.conf",
|
32
34
|
"data/new_site/layouts/default.haml",
|
33
35
|
"data/new_site/site/index.html.haml",
|
34
|
-
"docs/Extending/ExtendingHyde.md",
|
35
|
-
"docs/Hyde.md",
|
36
|
-
"docs/Introduction/Configuration.md",
|
37
|
-
"docs/Introduction/GettingStarted.md",
|
38
|
-
"docs/Introduction/Installation.md",
|
39
|
-
"docs/Introduction/Layouts.md",
|
40
|
-
"docs/Introduction/Partials.md",
|
41
|
-
"docs/Introduction/TemplateLanguages.md",
|
42
36
|
"hydeweb.gemspec",
|
43
37
|
"lib/hyde.rb",
|
44
38
|
"lib/hyde/clicommand.rb",
|
@@ -48,14 +42,26 @@ Gem::Specification.new do |s|
|
|
48
42
|
"lib/hyde/layout.rb",
|
49
43
|
"lib/hyde/ostruct.rb",
|
50
44
|
"lib/hyde/page.rb",
|
45
|
+
"lib/hyde/page_factory.rb",
|
46
|
+
"lib/hyde/partial.rb",
|
51
47
|
"lib/hyde/project.rb",
|
52
48
|
"lib/hyde/renderer.rb",
|
53
49
|
"lib/hyde/renderers.rb",
|
54
50
|
"lib/hyde/utils.rb",
|
51
|
+
"manual/Extending/ExtendingHyde.md",
|
52
|
+
"manual/Hyde.md",
|
53
|
+
"manual/Introduction/Configuration.md",
|
54
|
+
"manual/Introduction/GettingStarted.md",
|
55
|
+
"manual/Introduction/Installation.md",
|
56
|
+
"manual/Introduction/Layouts.md",
|
57
|
+
"manual/Introduction/Metadata.md",
|
58
|
+
"manual/Introduction/Partials.md",
|
59
|
+
"manual/Introduction/TemplateLanguages.md",
|
55
60
|
"test/fixtures/custom/_config.yml",
|
56
61
|
"test/fixtures/custom/extensions/custom/custom.rb",
|
57
62
|
"test/fixtures/custom/layouts/default.haml",
|
58
63
|
"test/fixtures/custom/layouts/erbtest.erb",
|
64
|
+
"test/fixtures/custom/layouts/shared/sidebar.haml",
|
59
65
|
"test/fixtures/custom/site/about/index.html",
|
60
66
|
"test/fixtures/custom/site/assets/common.css.less",
|
61
67
|
"test/fixtures/custom/site/assets/style.css.less",
|
@@ -75,6 +81,7 @@ Gem::Specification.new do |s|
|
|
75
81
|
"test/fixtures/custom/www_control/markdown.html",
|
76
82
|
"test/fixtures/custom/www_control/yes.html",
|
77
83
|
"test/fixtures/default/_config.yml",
|
84
|
+
"test/fixtures/default/extensions/custom/custom.rb",
|
78
85
|
"test/fixtures/default/layouts/default.haml",
|
79
86
|
"test/fixtures/default/site/about/index.html",
|
80
87
|
"test/fixtures/default/site/foo.html.haml",
|
@@ -90,6 +97,7 @@ Gem::Specification.new do |s|
|
|
90
97
|
"test/test_all_fixtures.rb",
|
91
98
|
"test/test_build.rb",
|
92
99
|
"test/test_hyde.rb",
|
100
|
+
"test/test_page.rb",
|
93
101
|
"test/test_utils.rb"
|
94
102
|
]
|
95
103
|
s.homepage = %q{http://github.com/sinefunc/hyde}
|
@@ -99,10 +107,12 @@ Gem::Specification.new do |s|
|
|
99
107
|
s.summary = %q{Website preprocessor}
|
100
108
|
s.test_files = [
|
101
109
|
"test/fixtures/custom/extensions/custom/custom.rb",
|
110
|
+
"test/fixtures/default/extensions/custom/custom.rb",
|
102
111
|
"test/helper.rb",
|
103
112
|
"test/test_all_fixtures.rb",
|
104
113
|
"test/test_build.rb",
|
105
114
|
"test/test_hyde.rb",
|
115
|
+
"test/test_page.rb",
|
106
116
|
"test/test_utils.rb"
|
107
117
|
]
|
108
118
|
|
data/lib/hyde/helpers.rb
CHANGED
@@ -1,8 +1,15 @@
|
|
1
1
|
module Hyde
|
2
2
|
module Helpers
|
3
3
|
module Default
|
4
|
-
|
5
|
-
|
4
|
+
def render_partial(partial_path, args = {})
|
5
|
+
locals = args[:locals] || {}
|
6
|
+
p = Partial.create partial_path.to_s, project
|
7
|
+
p.render locals
|
8
|
+
end
|
9
|
+
|
10
|
+
def partial(*a)
|
11
|
+
render_partial *a
|
12
|
+
end
|
6
13
|
end
|
7
14
|
end
|
8
15
|
end
|
data/lib/hyde/init.rb
CHANGED
@@ -33,13 +33,23 @@ class Main < Sinatra::Base
|
|
33
33
|
path = params[:splat][0]
|
34
34
|
type = File.extname(path)[1..-1]
|
35
35
|
content_type type.to_sym if type.is_a? String
|
36
|
-
|
36
|
+
|
37
|
+
page = Hyde::Page.create path, @@project
|
38
|
+
|
39
|
+
# Send the last modified time
|
40
|
+
last_modified File.mtime(page.filename)
|
41
|
+
cache_control :public, :must_revalidate, :max_age => 60
|
42
|
+
|
43
|
+
page.render
|
44
|
+
|
37
45
|
rescue Hyde::RenderError => e
|
38
46
|
puts " * `#{path}` error"
|
39
47
|
puts " *** #{e.message}".gsub("\n","\n *** ")
|
40
48
|
e.message
|
49
|
+
|
41
50
|
rescue Hyde::NotFound
|
42
51
|
raise Sinatra::NotFound
|
52
|
+
|
43
53
|
end
|
44
54
|
end
|
45
55
|
end
|
data/lib/hyde/page.rb
CHANGED
@@ -13,6 +13,7 @@ module Hyde
|
|
13
13
|
# @example
|
14
14
|
# puts page.name
|
15
15
|
# puts page.filename
|
16
|
+
#
|
16
17
|
# # about/index.html
|
17
18
|
# # about/index.html.haml
|
18
19
|
attr_accessor :filename
|
@@ -28,17 +29,13 @@ module Hyde
|
|
28
29
|
attr_reader :project
|
29
30
|
|
30
31
|
# Factory
|
31
|
-
#
|
32
|
-
def self.create(path, project,
|
33
|
-
|
34
|
-
page = page_class.new(path, project, info[:renderer], info[:filename])
|
32
|
+
#
|
33
|
+
def self.create(path, project, def_page_class = Page)
|
34
|
+
PageFactory.create path, project, def_page_class
|
35
35
|
end
|
36
36
|
|
37
37
|
# Returns the rendered output.
|
38
38
|
def render(data = {}, &block)
|
39
|
-
if self.is_a? Layout
|
40
|
-
# puts debug
|
41
|
-
end
|
42
39
|
output = @renderer.render(data, &block)
|
43
40
|
# BUG: @layout should build on top of that data
|
44
41
|
output = @layout.render(@meta.merge data) { output } unless @layout.nil?
|
@@ -46,13 +43,7 @@ module Hyde
|
|
46
43
|
end
|
47
44
|
|
48
45
|
def method_missing(meth, *args, &blk)
|
49
|
-
|
50
|
-
meta[meth.to_s]
|
51
|
-
elsif meta.keys.include?(meth.to_sym)
|
52
|
-
meta[meth.to_sym]
|
53
|
-
else
|
54
|
-
raise NoMethodError.new "Undefined method `#{self.class}::#{meth}`"
|
55
|
-
end
|
46
|
+
meta[meth.to_s] || meta[meth.to_sym] || super
|
56
47
|
end
|
57
48
|
|
58
49
|
def get_binding
|
@@ -67,18 +58,21 @@ module Hyde
|
|
67
58
|
# Called by Renderer::Base.
|
68
59
|
#
|
69
60
|
def set_meta(meta)
|
61
|
+
# TODO: OStruct and stuff
|
70
62
|
# Merge
|
71
63
|
@meta ||= Hash.new
|
72
64
|
@meta.merge! meta
|
73
65
|
|
74
66
|
# Set the Layout
|
75
|
-
@layout =
|
67
|
+
@layout = Layout.create(@meta['layout'], @project) if @meta['layout']
|
76
68
|
end
|
77
69
|
|
78
70
|
protected
|
71
|
+
|
79
72
|
# Constructor.
|
80
73
|
# The `page` argument is a page name
|
81
74
|
# Don't use me: use {Project#create}
|
75
|
+
#
|
82
76
|
def initialize(path, project, renderer, filename)
|
83
77
|
@project = project
|
84
78
|
@name ||= path
|
@@ -90,43 +84,5 @@ module Hyde
|
|
90
84
|
def self.get_filename(path, project)
|
91
85
|
project.root(:site, path)
|
92
86
|
end
|
93
|
-
|
94
|
-
def self.get_page_info(path, project)
|
95
|
-
renderer = nil
|
96
|
-
filename = get_filename(path, project)
|
97
|
-
|
98
|
-
if File.exists? filename
|
99
|
-
renderer = Hyde::Renderer::Passthru
|
100
|
-
|
101
|
-
else
|
102
|
-
# Look for the file
|
103
|
-
matches = Dir["#{filename}.*"]
|
104
|
-
raise NotFound.new("Can't find `#{path}{,.*}` -- #{filename}") \
|
105
|
-
if matches.empty?
|
106
|
-
|
107
|
-
# Check for a matching renderer
|
108
|
-
exts = []
|
109
|
-
matches.each do |match|
|
110
|
-
begin
|
111
|
-
ext = File.extname(match)[1..-1].capitalize.to_sym
|
112
|
-
exts << File.extname(match)
|
113
|
-
r_class = Hyde::Renderers.const_get(ext)
|
114
|
-
renderer ||= r_class
|
115
|
-
filename = match
|
116
|
-
rescue NoMethodError
|
117
|
-
# pass
|
118
|
-
rescue NameError # Renderer not found
|
119
|
-
# pass
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
raise NotFound.new("No matching (#{exts.join(", ")}) renderers found for `#{path}`") \
|
124
|
-
if renderer.nil?
|
125
|
-
end
|
126
|
-
|
127
|
-
{ :renderer => renderer,
|
128
|
-
:filename => filename
|
129
|
-
}
|
130
|
-
end
|
131
87
|
end
|
132
88
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Hyde
|
2
|
+
class PageFactory
|
3
|
+
def self.create(path, project, def_page_class = Page)
|
4
|
+
begin
|
5
|
+
do_create path, project, def_page_class
|
6
|
+
rescue NotFound
|
7
|
+
do_create "#{path}/index.html".squeeze('/'), project, def_page_class
|
8
|
+
rescue NotFound => e
|
9
|
+
raise e
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.do_create(path, project, def_page_class = Page)
|
14
|
+
info = get_page_info(path, project, def_page_class)
|
15
|
+
page_class = info[:page_class]
|
16
|
+
page_class.new(path, project, info[:renderer], info[:filename])
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def self.get_page_info(path, project, page_class)
|
22
|
+
renderer = nil
|
23
|
+
filename = page_class.get_filename(path, project)
|
24
|
+
|
25
|
+
if File.directory? filename
|
26
|
+
raise NotFound, "`#{path}` is a directory, not a file"
|
27
|
+
|
28
|
+
elsif File.exists? filename
|
29
|
+
renderer = Hyde::Renderer::Passthru
|
30
|
+
|
31
|
+
else
|
32
|
+
# Look for the file
|
33
|
+
matches = Dir["#{filename}.*"]
|
34
|
+
raise NotFound, "Can't find `#{path}{,.*}` -- #{filename}" \
|
35
|
+
if matches.empty?
|
36
|
+
|
37
|
+
# Check for a matching renderer
|
38
|
+
exts = []
|
39
|
+
matches.each do |match|
|
40
|
+
begin
|
41
|
+
ext = File.extname(match)[1..-1].capitalize.to_sym
|
42
|
+
exts << File.extname(match)
|
43
|
+
r_class = Hyde::Renderers.const_get(ext)
|
44
|
+
renderer ||= r_class
|
45
|
+
filename = match
|
46
|
+
rescue NoMethodError
|
47
|
+
# pass
|
48
|
+
rescue NameError # Renderer not found
|
49
|
+
# pass
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
raise NotFound, "No matching (#{exts.join(", ")}) renderers found for `#{path}`" \
|
54
|
+
if renderer.nil?
|
55
|
+
end
|
56
|
+
|
57
|
+
{ :renderer => renderer,
|
58
|
+
:filename => filename,
|
59
|
+
:page_class => page_class
|
60
|
+
}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/hyde/partial.rb
ADDED
data/lib/hyde/project.rb
CHANGED
@@ -4,9 +4,12 @@ module Hyde
|
|
4
4
|
include Hyde::Utils
|
5
5
|
|
6
6
|
# The root path (String).
|
7
|
+
#
|
8
|
+
# @example
|
7
9
|
# root
|
8
10
|
# root :layouts
|
9
11
|
# root :site, 'blah'
|
12
|
+
#
|
10
13
|
def root(*args)
|
11
14
|
where = ''
|
12
15
|
where = send("#{args.shift.to_s}_path") if args[0].class == Symbol
|
@@ -14,68 +17,57 @@ module Hyde
|
|
14
17
|
File.expand_path(File.join [@root, where, path].reject(&:empty?))
|
15
18
|
end
|
16
19
|
|
17
|
-
# The filename of the configuration file, relative to the project root.
|
20
|
+
# The filename of the configuration file, relative to the project root. (String)
|
21
|
+
#
|
18
22
|
attr :config_file
|
19
23
|
|
20
|
-
# The configuration k/v storage (
|
24
|
+
# The configuration k/v storage (OStruct)
|
25
|
+
#
|
21
26
|
attr_accessor :config
|
22
27
|
|
23
28
|
# Can raise a NoRootError
|
24
|
-
|
29
|
+
#
|
30
|
+
def initialize(root = Dir.pwd)
|
25
31
|
@config = OStruct.new defaults
|
26
32
|
@root, @config_file = find_root_from root
|
27
33
|
@config.merge! YAML::load_file(@config_file) if File.exists? @config_file
|
28
34
|
load_extensions
|
29
35
|
end
|
30
36
|
|
31
|
-
def find_root_from(start)
|
32
|
-
check = File.expand_path(start)
|
33
|
-
ret = nil
|
34
|
-
while ret.nil?
|
35
|
-
# See if any of these files exist
|
36
|
-
['_config.yml', 'hyde.conf'].each do |config_name|
|
37
|
-
config_file = File.join(check, config_name)
|
38
|
-
ret ||= [check, config_file] if File.exists? config_file
|
39
|
-
end
|
40
|
-
|
41
|
-
# Traverse back (die if we reach the root)
|
42
|
-
old_check = check
|
43
|
-
check = File.expand_path(File.join(check, '..'))
|
44
|
-
raise NoRootError if check == old_check
|
45
|
-
end
|
46
|
-
ret
|
47
|
-
end
|
48
|
-
|
49
37
|
def method_missing(meth, *args, &blk)
|
50
|
-
|
38
|
+
super unless @config.include?(meth)
|
51
39
|
@config.send meth
|
52
40
|
end
|
53
41
|
|
54
42
|
# Returns a page in a certain URL path.
|
55
43
|
# @return {Page} or a subclass of it
|
44
|
+
#
|
56
45
|
def get_page(path)
|
57
|
-
|
58
|
-
Page.create path, self
|
46
|
+
Page.create path, self
|
59
47
|
end
|
60
48
|
|
49
|
+
# Returns a layout
|
50
|
+
# (Try Layout.create path, @project instead)
|
51
|
+
#
|
61
52
|
def get_layout(path)
|
62
53
|
Layout.create path, self
|
63
54
|
end
|
64
55
|
|
65
56
|
# Can throw a NotFound.
|
57
|
+
#
|
66
58
|
def render(path)
|
67
|
-
|
59
|
+
Page.create(path, self).render
|
68
60
|
end
|
69
61
|
|
70
62
|
# Writes the output files.
|
71
63
|
# @param
|
72
64
|
# ostream - (Stream) Where to send the messages
|
65
|
+
#
|
73
66
|
def build(ostream = nil)
|
74
67
|
raise Errno::EEXISTS if File.exists? root(:output) and not File.directory? root(:output)
|
75
|
-
Dir.mkdir
|
68
|
+
Dir.mkdir(root :output) unless File.directory?(root :output)
|
76
69
|
|
77
70
|
begin
|
78
|
-
continue = true
|
79
71
|
files.each do |path|
|
80
72
|
ostream << " * #{output_path}/#{path}\n" if ostream
|
81
73
|
begin
|
@@ -88,11 +80,12 @@ module Hyde
|
|
88
80
|
end
|
89
81
|
end
|
90
82
|
rescue NoGemError => e
|
91
|
-
ostream << "Error: #{e.message}\n"
|
83
|
+
ostream << " *** Error: #{e.message}\n"
|
92
84
|
end
|
93
85
|
end
|
94
86
|
|
95
87
|
# Returns a list of all URL paths
|
88
|
+
#
|
96
89
|
def files
|
97
90
|
@file_list = Dir[File.join(root(:site), '**', '*')].inject([]) do |a, match|
|
98
91
|
# Make sure its the canonical name
|
@@ -111,6 +104,9 @@ module Hyde
|
|
111
104
|
end
|
112
105
|
end
|
113
106
|
|
107
|
+
# Returns a list of file specs to be excluded from processing.
|
108
|
+
# @see {#ignored_files}
|
109
|
+
#
|
114
110
|
def ignore_list
|
115
111
|
@ignore_list ||= [
|
116
112
|
root(:layouts, '**/*'),
|
@@ -120,21 +116,47 @@ module Hyde
|
|
120
116
|
]
|
121
117
|
end
|
122
118
|
|
123
|
-
# Returns a list of ignored files.
|
119
|
+
# Returns a list of ignored files based on the {ignore_list}.
|
124
120
|
# TODO: This is innefficient... do it another way
|
121
|
+
#
|
125
122
|
def ignored_files
|
126
|
-
@ignored_files ||= ignore_list.inject([])
|
123
|
+
@ignored_files ||= ignore_list.inject([]) do |a, spec|
|
127
124
|
Dir[spec].each { |file| a << File.expand_path(file) }; a
|
128
|
-
|
125
|
+
end
|
129
126
|
end
|
130
127
|
|
131
128
|
protected
|
132
129
|
|
133
|
-
|
134
|
-
|
135
|
-
|
130
|
+
# Looks for the hyde config file to determine the project root.
|
131
|
+
#
|
132
|
+
def find_root_from(start)
|
133
|
+
check = File.expand_path(start)
|
134
|
+
ret = nil
|
135
|
+
while ret.nil?
|
136
|
+
# See if any of these files exist
|
137
|
+
['_config.yml', 'hyde.conf'].each do |config_name|
|
138
|
+
config_file = File.join(check, config_name)
|
139
|
+
ret ||= [check, config_file] if File.exists? config_file
|
140
|
+
end
|
141
|
+
|
142
|
+
# Traverse back (die if we reach the root)
|
143
|
+
old_check = check
|
144
|
+
check = File.expand_path(File.join(check, '..'))
|
145
|
+
raise NoRootError if check == old_check
|
136
146
|
end
|
147
|
+
ret
|
148
|
+
end
|
149
|
+
|
150
|
+
# Loads the ruby files in the extensions folder
|
151
|
+
#
|
152
|
+
def load_extensions
|
153
|
+
# Load the init.rb file
|
154
|
+
require(root 'init.rb') if File.exists?(root 'init.rb')
|
137
155
|
|
156
|
+
# Load the gems in the config file
|
157
|
+
@config.gems.each { |gem| require gem }
|
158
|
+
|
159
|
+
# Load the extensions
|
138
160
|
ext_roots = Dir[root :extensions, '*'].select { |d| File.directory? d }
|
139
161
|
ext_roots.each do |dir|
|
140
162
|
ext = File.basename(dir)
|
@@ -149,6 +171,7 @@ module Hyde
|
|
149
171
|
require ext_files[0] if ext_files[0]
|
150
172
|
end
|
151
173
|
end
|
174
|
+
|
152
175
|
def defaults
|
153
176
|
{ 'layouts_path' => 'layouts',
|
154
177
|
'extensions_path' => 'extensions',
|
@@ -159,6 +182,7 @@ module Hyde
|
|
159
182
|
end
|
160
183
|
|
161
184
|
# Returns the renderer associated with the given file extension.
|
185
|
+
#
|
162
186
|
def get_renderer(name)
|
163
187
|
begin
|
164
188
|
class_name = name.to_s.capitalize.to_sym
|
data/lib/hyde.rb
CHANGED
@@ -2,17 +2,19 @@ require 'yaml'
|
|
2
2
|
|
3
3
|
module Hyde
|
4
4
|
prefix = File.dirname(__FILE__)
|
5
|
-
autoload :OStruct,
|
6
|
-
autoload :Project,
|
7
|
-
autoload :Layout,
|
8
|
-
autoload :Page,
|
9
|
-
autoload :
|
10
|
-
autoload :
|
11
|
-
autoload :
|
12
|
-
autoload :
|
13
|
-
autoload :
|
14
|
-
autoload :
|
15
|
-
autoload :
|
5
|
+
autoload :OStruct, "#{prefix}/hyde/ostruct"
|
6
|
+
autoload :Project, "#{prefix}/hyde/project"
|
7
|
+
autoload :Layout, "#{prefix}/hyde/layout"
|
8
|
+
autoload :Page, "#{prefix}/hyde/page"
|
9
|
+
autoload :PageFactory, "#{prefix}/hyde/page_factory"
|
10
|
+
autoload :Renderer, "#{prefix}/hyde/renderer"
|
11
|
+
autoload :Renderers, "#{prefix}/hyde/renderers"
|
12
|
+
autoload :Utils, "#{prefix}/hyde/utils"
|
13
|
+
autoload :Scope, "#{prefix}/hyde/scope"
|
14
|
+
autoload :CLICommand, "#{prefix}/hyde/clicommand"
|
15
|
+
autoload :CLICommands, "#{prefix}/hyde/clicommands"
|
16
|
+
autoload :Helpers, "#{prefix}/hyde/helpers"
|
17
|
+
autoload :Partial, "#{prefix}/hyde/partial"
|
16
18
|
|
17
19
|
Error = Class.new(::StandardError)
|
18
20
|
NoGemError = Class.new(Error)
|
data/manual/Hyde.md
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
Hyde
|
2
|
+
====
|
3
|
+
|
4
|
+
Hyde is a website preprocessor.
|
5
|
+
|
6
|
+
- __Layouts and Partials:__ Hyde lets you define your site's header and footer
|
7
|
+
layouts in a separate file, and even separate snippets of your site
|
8
|
+
into reuseable components (partials). Your code will be much cleaner and
|
9
|
+
DRYer!
|
10
|
+
|
11
|
+
- __Template languages:__ Hyde lets you write your site in any template
|
12
|
+
language you need -- the translation will be taken care of for you.
|
13
|
+
Hyde supports HAML, LessCSS, Markdown, SASS and Textile by default, and
|
14
|
+
more can be added through extensions.
|
15
|
+
|
16
|
+
- __Extendable:__ Hyde is easily customizable with extensions. You can add
|
17
|
+
new helpers, new commands, support for new languages and many more by
|
18
|
+
simply adding the extensions to your project folder. Some are even
|
19
|
+
available as simple Ruby gems!
|
20
|
+
|
21
|
+
- __Design fast:__ Hyde comes with a web server that lets you serve up
|
22
|
+
your site locally. Any changes to your files will be seen on your next
|
23
|
+
browser refresh!
|
24
|
+
|
25
|
+
- __Build your site as static HTMLs:__ You can export your site as plain
|
26
|
+
HTML files with one simple command.
|
27
|
+
|
28
|
+
Why use Hyde?
|
29
|
+
-------------
|
30
|
+
|
31
|
+
It's like building a static site, but better! You can use Hyde for:
|
32
|
+
|
33
|
+
- Building HTML prototypes
|
34
|
+
- Building sites with no dynamic logic
|
35
|
+
- Creating a blog where the entries are stored in a source repository
|
36
|
+
|
37
|
+
Introduction
|
38
|
+
------------
|
39
|
+
|
40
|
+
- `++++` {file:Installation Installation} -- Start here
|
41
|
+
- `++++` {file:GettingStarted Getting started}
|
42
|
+
- `++--` {file:TemplateLanguages Template languages}
|
43
|
+
- `----` {file:Layouts Layouts}
|
44
|
+
- `----` {file:Partials Partials}
|
45
|
+
- `----` {file:Metadata Metadata}
|
46
|
+
- `----` {file:Configuration Configuration}
|
47
|
+
|
48
|
+
Extending Hyde
|
49
|
+
--------------
|
50
|
+
|
51
|
+
- `+++-` {file:ExtendingHyde Extending Hyde}
|
52
|
+
|
53
|
+
Basic info
|
54
|
+
----------
|
55
|
+
|
56
|
+
- {file:AUTHORS Credits}
|
57
|
+
- {file:LICENSE License}
|
58
|
+
|
@@ -0,0 +1,66 @@
|
|
1
|
+
Getting started
|
2
|
+
===============
|
3
|
+
|
4
|
+
Starting your first project
|
5
|
+
---------------------------
|
6
|
+
|
7
|
+
Create your first project with:
|
8
|
+
|
9
|
+
hyde create <name>
|
10
|
+
|
11
|
+
Where `<name>` is the name of your project. This will create a folder with that
|
12
|
+
name, along with some sample files to get you started.
|
13
|
+
|
14
|
+
Starting
|
15
|
+
--------
|
16
|
+
|
17
|
+
Begin working on your project by starting the Hyde webserver. This is optional,
|
18
|
+
but is recommended as it's a nice way to see your changes in real time.
|
19
|
+
|
20
|
+
hyde start
|
21
|
+
|
22
|
+
After typing this, you will see the server has started. Point your web browser to
|
23
|
+
`http://localhost:4567` to see your site. You should now see your project's
|
24
|
+
default "welcome" page.
|
25
|
+
|
26
|
+
|
27
|
+
Editing your site
|
28
|
+
-----------------
|
29
|
+
|
30
|
+
Your project has a subfolder called `site` -- this is where all the site's files are
|
31
|
+
stored. In general, dropping any file in this folder will make it accessible with the
|
32
|
+
same filename.
|
33
|
+
|
34
|
+
Try this: create a file called `products.html` and fill it up like you would an
|
35
|
+
HTML page. After that, point your browser to `http://localhost:4567/products.html`,
|
36
|
+
which should now show the page you were working on.
|
37
|
+
|
38
|
+
You may also put your files in subfolders. If you were to create the file
|
39
|
+
`site/assets/my_style.css`, it should be accessible through
|
40
|
+
`http://localhost:4567/assets/my_style.css`.
|
41
|
+
|
42
|
+
Dynamic files
|
43
|
+
-------------
|
44
|
+
|
45
|
+
There are files with two extensions, for instance, `index.html.haml`. If a file
|
46
|
+
ends in one of Hyde's dynamic file extensions (like `.haml`), it will be stripped
|
47
|
+
out and the file will be rendered using the template engine in that extension (in
|
48
|
+
this case, HAML).
|
49
|
+
|
50
|
+
More about this in the next section.
|
51
|
+
|
52
|
+
Building HTML files
|
53
|
+
-------------------
|
54
|
+
|
55
|
+
The `hyde start` webserver is good for local development, but when it's time to
|
56
|
+
deploy your site, you will need to build your files. This process outputs raw
|
57
|
+
HTML files for your entire site (for the dynamic files), with Hyde translating
|
58
|
+
any files that need translation (e.g., HAML and ERB files).
|
59
|
+
|
60
|
+
Build your files by typing this in the command prompt:
|
61
|
+
|
62
|
+
hyde build
|
63
|
+
|
64
|
+
This will create a folder called `public/` where the built files are stored.
|
65
|
+
You can now deploy this folder to your webserver.
|
66
|
+
|
@@ -1,2 +1,2 @@
|
|
1
|
-
|
1
|
+
Metadata
|
2
2
|
========
|
@@ -0,0 +1,63 @@
|
|
1
|
+
Partials
|
2
|
+
========
|
3
|
+
|
4
|
+
A partial is a snippet of code that you can reuse in any page of your site.
|
5
|
+
This is particularly useful for repetitive sections, and for sections that may
|
6
|
+
make your files too large to manage.
|
7
|
+
|
8
|
+
Creating partials
|
9
|
+
-----------------
|
10
|
+
|
11
|
+
Put your partial file anywhere in the `layouts` folder, e.g.:
|
12
|
+
|
13
|
+
<!-- layouts/shared/sidebar.erb -->
|
14
|
+
<div id='#sidebar'>
|
15
|
+
<h2><span>Sidebar</span><h2>
|
16
|
+
<div class='description'>
|
17
|
+
<p>This is a sidebar partial defined in a separate file.</p>
|
18
|
+
</div>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
In your site's files, you can invoke a partial through:
|
22
|
+
|
23
|
+
<!-- site/index.html.erb -->
|
24
|
+
<h1>Partial:</h1>
|
25
|
+
<%= partial 'shared/sidebar' %>
|
26
|
+
<span>End of partial.</span>
|
27
|
+
<span>This is now text from index.html.</span>
|
28
|
+
|
29
|
+
This will output:
|
30
|
+
|
31
|
+
<!-- public/index.html -->
|
32
|
+
<h1>Partial:</h1>
|
33
|
+
<div id='#sidebar'>
|
34
|
+
<h2><span>Sidebar</span><h2>
|
35
|
+
<div class='description'>
|
36
|
+
<p>This is a sidebar partial defined in a separate file.</p>
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
<span>End of partial.</span>
|
40
|
+
<span>This is now text from index.html.</span>
|
41
|
+
|
42
|
+
Partials with local variables
|
43
|
+
-----------------------------
|
44
|
+
|
45
|
+
You can define a partial with some local variables that will be passed
|
46
|
+
to it by the caller.
|
47
|
+
|
48
|
+
<!-- layouts/shared/product.erb -->
|
49
|
+
<div class='product'>
|
50
|
+
<div class='title'>
|
51
|
+
<h2><%= name %></h2>
|
52
|
+
</div>
|
53
|
+
<div class='desc'>
|
54
|
+
<p><%= description %></p>
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
|
58
|
+
In your files, call a partial by:
|
59
|
+
|
60
|
+
<!-- site/index.html.erb -->
|
61
|
+
<%= partial 'shared/product', { :name => '5MP Camera CX-300', :description => 'This is a camera with an adjustable focal length and Bluetooth support.' } %>
|
62
|
+
|
63
|
+
|
@@ -0,0 +1,59 @@
|
|
1
|
+
Template languages
|
2
|
+
==================
|
3
|
+
|
4
|
+
Hyde comes with support for some common template languages. This means you can
|
5
|
+
write your site in a language like Markdown or HAML, and have Hyde take care
|
6
|
+
of translating them accordingly.
|
7
|
+
|
8
|
+
If a file ends in one of Hyde's supported file extensions (like `.haml`), it will be stripped
|
9
|
+
out and the file will be rendered using the template engine in that extension (in
|
10
|
+
this case, HAML).
|
11
|
+
|
12
|
+
Supported languages
|
13
|
+
-------------------
|
14
|
+
|
15
|
+
Hyde supports the following languages out-of-the-box:
|
16
|
+
|
17
|
+
- HTML template languages
|
18
|
+
- `.haml` -- HAML
|
19
|
+
- `.md` -- Markdown
|
20
|
+
- `.textile` -- Textile
|
21
|
+
- `.erb` -- ERB (Embedded Ruby)
|
22
|
+
|
23
|
+
- CSS template languages
|
24
|
+
- `.less` -- LessCSS
|
25
|
+
- `.sass` -- SASS
|
26
|
+
|
27
|
+
This means that the following files will be translated accordingly:
|
28
|
+
|
29
|
+
| products.html.haml | becomes `products.html` (rendered through HAML) |
|
30
|
+
| control.css.less | becomes `control.css` (rendered through Less CSS) |
|
31
|
+
| site.xml.erb | becomes `site.xml` (rendered through Embedded Ruby) |
|
32
|
+
|
33
|
+
Example
|
34
|
+
-------
|
35
|
+
|
36
|
+
When creating a new site, have a look at `index.html.haml`.
|
37
|
+
|
38
|
+
...
|
39
|
+
|
40
|
+
Headers
|
41
|
+
-------
|
42
|
+
|
43
|
+
...
|
44
|
+
|
45
|
+
Layouts
|
46
|
+
-------
|
47
|
+
|
48
|
+
Layouts are supported for these languages.
|
49
|
+
|
50
|
+
...
|
51
|
+
|
52
|
+
Embedded Ruby features
|
53
|
+
----------------------
|
54
|
+
|
55
|
+
Some languages (like HAML and ERB) has support for embedding Ruby code in the
|
56
|
+
documents. This will let you do some nifty things in Hyde:
|
57
|
+
|
58
|
+
- Partials
|
59
|
+
- Helpers
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
About page.
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
About page.
|
data/test/helper.rb
CHANGED
data/test/test_all_fixtures.rb
CHANGED
@@ -28,13 +28,17 @@ class TestAllFixtures < Test::Unit::TestCase
|
|
28
28
|
@project = Hyde::Project.new File.join(@@root, site)
|
29
29
|
@project.build
|
30
30
|
|
31
|
-
unknown_root = @project.root :
|
31
|
+
unknown_root = @project.root :output
|
32
32
|
control_root = @project.root 'www_control'
|
33
33
|
|
34
34
|
if not File.directory? control_root
|
35
35
|
flunk "No www_control"
|
36
36
|
else
|
37
|
-
@project.files.
|
37
|
+
@project.files.reject { |f| File.directory? f }.each do |path|
|
38
|
+
unknown_path = File.join(unknown_root, path)
|
39
|
+
flunk "file #{unknown_path} doesn't exist" \
|
40
|
+
unless File.exists?(unknown_path)
|
41
|
+
|
38
42
|
unknown = File.open(File.join(unknown_root, path)).read
|
39
43
|
control = File.open(File.join(control_root, path)).read
|
40
44
|
|
data/test/test_hyde.rb
CHANGED
@@ -5,20 +5,12 @@ class TestHyde < Test::Unit::TestCase
|
|
5
5
|
@project = get_project site
|
6
6
|
end
|
7
7
|
|
8
|
-
def get_project(site)
|
9
|
-
Hyde::Project.new fixture(site)
|
10
|
-
end
|
11
|
-
|
12
|
-
def fixture(site)
|
13
|
-
File.join File.dirname(__FILE__), 'fixtures', site
|
14
|
-
end
|
15
|
-
|
16
8
|
should "return the right paths" do
|
17
9
|
root_path = fixture 'default'
|
18
10
|
assert_same_file root_path, @project.root
|
19
|
-
assert_same_file File.join(root_path, '
|
11
|
+
assert_same_file File.join(root_path, 'layouts'), \
|
20
12
|
@project.root(:layouts)
|
21
|
-
assert_same_file File.join(root_path, '
|
13
|
+
assert_same_file File.join(root_path, 'layouts', 'abc'), \
|
22
14
|
@project.root(:layouts, 'abc')
|
23
15
|
assert_same_file File.join(root_path, 'layouts', 'abc'), \
|
24
16
|
@project.root('layouts', 'abc')
|
@@ -35,12 +27,39 @@ class TestHyde < Test::Unit::TestCase
|
|
35
27
|
end
|
36
28
|
end
|
37
29
|
|
30
|
+
should "load extensions" do
|
31
|
+
begin
|
32
|
+
CustomExtensionClass # Defined in the site's extensions/custom/custom.rb
|
33
|
+
rescue NameError
|
34
|
+
flunk "Extension wasn't loaded"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
38
|
should "use layouts" do
|
39
39
|
output = @project.render 'layout_test.html'
|
40
40
|
assert_match /This is the meta title/, output
|
41
41
|
assert_match /<!-- \(default layout\) -->/, output
|
42
42
|
end
|
43
43
|
|
44
|
+
should "account for index.html" do
|
45
|
+
home_output = @project.render('index.html')
|
46
|
+
assert_equal home_output, @project.render('/')
|
47
|
+
assert_equal home_output, @project.render('/index.html')
|
48
|
+
|
49
|
+
about_output = @project.render('/about/index.html')
|
50
|
+
assert_equal about_output, @project.render('/about')
|
51
|
+
assert_equal about_output, @project.render('/about/')
|
52
|
+
end
|
53
|
+
|
54
|
+
should "get types right" do
|
55
|
+
page = @project.get_page('index.html')
|
56
|
+
assert page.is_a? Hyde::Page
|
57
|
+
|
58
|
+
layout = Hyde::Layout.create 'default', @project
|
59
|
+
assert layout.is_a? Hyde::Layout
|
60
|
+
assert layout.is_a? Hyde::Page
|
61
|
+
end
|
62
|
+
|
44
63
|
should "list the project files properly" do
|
45
64
|
files = @project.files
|
46
65
|
assert files.include? 'index.html'
|
data/test/test_page.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestPage < Test::Unit::TestCase
|
4
|
+
def setup(site = 'default')
|
5
|
+
@project = get_project site
|
6
|
+
@page = @project.get_page 'index.html'
|
7
|
+
end
|
8
|
+
|
9
|
+
should "raise a method missing error" do
|
10
|
+
assert_raises NoMethodError do
|
11
|
+
@page.xxx
|
12
|
+
end
|
13
|
+
|
14
|
+
# Should NOT raise a method missing error
|
15
|
+
@page.layout
|
16
|
+
@page.filename
|
17
|
+
@page.renderer
|
18
|
+
@page.meta
|
19
|
+
@page.layout
|
20
|
+
@page.project
|
21
|
+
end
|
22
|
+
|
23
|
+
should "register the right project" do
|
24
|
+
assert_equal @project, @page.project
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hydeweb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
4
|
+
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
|
10
|
-
version: 0.0.3.pre
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Rico Sta. Cruz
|
@@ -16,7 +15,7 @@ autorequire:
|
|
16
15
|
bindir: bin
|
17
16
|
cert_chain: []
|
18
17
|
|
19
|
-
date: 2010-05-
|
18
|
+
date: 2010-05-25 00:00:00 +08:00
|
20
19
|
default_executable: hyde
|
21
20
|
dependencies:
|
22
21
|
- !ruby/object:Gem::Dependency
|
@@ -73,6 +72,8 @@ extra_rdoc_files:
|
|
73
72
|
files:
|
74
73
|
- .gitignore
|
75
74
|
- .yardopts
|
75
|
+
- AUTHORS
|
76
|
+
- CHANGELOG
|
76
77
|
- LICENSE
|
77
78
|
- README.md
|
78
79
|
- Rakefile
|
@@ -83,14 +84,6 @@ files:
|
|
83
84
|
- data/new_site/hyde.conf
|
84
85
|
- data/new_site/layouts/default.haml
|
85
86
|
- data/new_site/site/index.html.haml
|
86
|
-
- docs/Extending/ExtendingHyde.md
|
87
|
-
- docs/Hyde.md
|
88
|
-
- docs/Introduction/Configuration.md
|
89
|
-
- docs/Introduction/GettingStarted.md
|
90
|
-
- docs/Introduction/Installation.md
|
91
|
-
- docs/Introduction/Layouts.md
|
92
|
-
- docs/Introduction/Partials.md
|
93
|
-
- docs/Introduction/TemplateLanguages.md
|
94
87
|
- hydeweb.gemspec
|
95
88
|
- lib/hyde.rb
|
96
89
|
- lib/hyde/clicommand.rb
|
@@ -100,14 +93,26 @@ files:
|
|
100
93
|
- lib/hyde/layout.rb
|
101
94
|
- lib/hyde/ostruct.rb
|
102
95
|
- lib/hyde/page.rb
|
96
|
+
- lib/hyde/page_factory.rb
|
97
|
+
- lib/hyde/partial.rb
|
103
98
|
- lib/hyde/project.rb
|
104
99
|
- lib/hyde/renderer.rb
|
105
100
|
- lib/hyde/renderers.rb
|
106
101
|
- lib/hyde/utils.rb
|
102
|
+
- manual/Extending/ExtendingHyde.md
|
103
|
+
- manual/Hyde.md
|
104
|
+
- manual/Introduction/Configuration.md
|
105
|
+
- manual/Introduction/GettingStarted.md
|
106
|
+
- manual/Introduction/Installation.md
|
107
|
+
- manual/Introduction/Layouts.md
|
108
|
+
- manual/Introduction/Metadata.md
|
109
|
+
- manual/Introduction/Partials.md
|
110
|
+
- manual/Introduction/TemplateLanguages.md
|
107
111
|
- test/fixtures/custom/_config.yml
|
108
112
|
- test/fixtures/custom/extensions/custom/custom.rb
|
109
113
|
- test/fixtures/custom/layouts/default.haml
|
110
114
|
- test/fixtures/custom/layouts/erbtest.erb
|
115
|
+
- test/fixtures/custom/layouts/shared/sidebar.haml
|
111
116
|
- test/fixtures/custom/site/about/index.html
|
112
117
|
- test/fixtures/custom/site/assets/common.css.less
|
113
118
|
- test/fixtures/custom/site/assets/style.css.less
|
@@ -127,6 +132,7 @@ files:
|
|
127
132
|
- test/fixtures/custom/www_control/markdown.html
|
128
133
|
- test/fixtures/custom/www_control/yes.html
|
129
134
|
- test/fixtures/default/_config.yml
|
135
|
+
- test/fixtures/default/extensions/custom/custom.rb
|
130
136
|
- test/fixtures/default/layouts/default.haml
|
131
137
|
- test/fixtures/default/site/about/index.html
|
132
138
|
- test/fixtures/default/site/foo.html.haml
|
@@ -142,6 +148,7 @@ files:
|
|
142
148
|
- test/test_all_fixtures.rb
|
143
149
|
- test/test_build.rb
|
144
150
|
- test/test_hyde.rb
|
151
|
+
- test/test_page.rb
|
145
152
|
- test/test_utils.rb
|
146
153
|
has_rdoc: true
|
147
154
|
homepage: http://github.com/sinefunc/hyde
|
@@ -161,13 +168,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
168
|
version: "0"
|
162
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
170
|
requirements:
|
164
|
-
- - "
|
171
|
+
- - ">="
|
165
172
|
- !ruby/object:Gem::Version
|
166
173
|
segments:
|
167
|
-
-
|
168
|
-
|
169
|
-
- 1
|
170
|
-
version: 1.3.1
|
174
|
+
- 0
|
175
|
+
version: "0"
|
171
176
|
requirements: []
|
172
177
|
|
173
178
|
rubyforge_project:
|
@@ -177,8 +182,10 @@ specification_version: 3
|
|
177
182
|
summary: Website preprocessor
|
178
183
|
test_files:
|
179
184
|
- test/fixtures/custom/extensions/custom/custom.rb
|
185
|
+
- test/fixtures/default/extensions/custom/custom.rb
|
180
186
|
- test/helper.rb
|
181
187
|
- test/test_all_fixtures.rb
|
182
188
|
- test/test_build.rb
|
183
189
|
- test/test_hyde.rb
|
190
|
+
- test/test_page.rb
|
184
191
|
- test/test_utils.rb
|
data/docs/Hyde.md
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
Hyde manual
|
2
|
-
===========
|
3
|
-
|
4
|
-
Introduction
|
5
|
-
------------
|
6
|
-
|
7
|
-
- `++++` {file:Installation Installation}
|
8
|
-
- `++--` {file:GettingStarted Getting started}
|
9
|
-
- `+---` {file:TemplateLanguages Template languages}
|
10
|
-
- `----` {file:Layouts Layouts}
|
11
|
-
- `----` {file:Partials Partials}
|
12
|
-
- `----` {file:Configuration Configuration}
|
13
|
-
|
14
|
-
Extending Hyde
|
15
|
-
--------------
|
16
|
-
|
17
|
-
- `+++-` {file:ExtendingHyde Extending Hyde}
|
@@ -1,32 +0,0 @@
|
|
1
|
-
Getting started
|
2
|
-
===============
|
3
|
-
|
4
|
-
Starting your first project
|
5
|
-
---------------------------
|
6
|
-
|
7
|
-
Create your first project with:
|
8
|
-
|
9
|
-
hyde create <name>
|
10
|
-
|
11
|
-
Where `<name>` is the name of your project. This will create a folder with that
|
12
|
-
name, along with some sample files to get you started.
|
13
|
-
|
14
|
-
Starting
|
15
|
-
--------
|
16
|
-
|
17
|
-
hyde start
|
18
|
-
|
19
|
-
Making your site files
|
20
|
-
----------------------
|
21
|
-
|
22
|
-
Edit files under the `site` folder
|
23
|
-
|
24
|
-
(todo)
|
25
|
-
|
26
|
-
Building HTML files
|
27
|
-
-------------------
|
28
|
-
|
29
|
-
Build your files by typing
|
30
|
-
|
31
|
-
hyde build
|
32
|
-
|
File without changes
|
File without changes
|