genit 1.0.1 → 2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/NEWS +12 -28
- data/README.markdown +6 -2
- data/Rakefile +1 -1
- data/TODO +177 -12
- data/VERSION +1 -1
- data/bin/genit +18 -20
- data/data/styles/screen.css +5 -9
- data/data/templates/main.html +0 -1
- data/lib/genit.rb +9 -4
- data/lib/genit/builders/body_link_builder.rb +8 -8
- data/lib/genit/builders/builder_base.rb +11 -11
- data/lib/genit/builders/head_link_builder.rb +8 -8
- data/lib/genit/builders/relativizer.rb +12 -12
- data/lib/genit/builders/script_builder.rb +7 -7
- data/lib/genit/documents/document_writer.rb +14 -14
- data/lib/genit/documents/fragment.rb +23 -22
- data/lib/genit/documents/xml_document.rb +5 -1
- data/lib/genit/project.rb +1 -0
- data/lib/genit/project/compiler.rb +54 -73
- data/lib/genit/project/page_compiler.rb +41 -41
- data/lib/genit/project/pages_finder.rb +6 -6
- data/lib/genit/project/project_creator.rb +116 -111
- data/lib/genit/project/root_cleaner.rb +31 -0
- data/lib/genit/project/rss_feed.rb +14 -14
- data/lib/genit/server.rb +2 -0
- data/lib/genit/server/server.rb +33 -0
- data/lib/genit/tags/class_fragment_tag.rb +2 -2
- data/lib/genit/tags/class_menu_tag.rb +2 -1
- data/lib/genit/tags/class_news_tag.rb +24 -24
- data/lib/genit/tags/class_pages_tag.rb +1 -1
- data/lib/genit/tags/here_tag.rb +22 -18
- data/lib/genit/utils/news_utils.rb +3 -3
- data/spec/class_news_tag_spec.rb +5 -5
- data/spec/compiler_spec.rb +51 -60
- data/spec/fragment_spec.rb +19 -19
- data/spec/html_document_spec.rb +10 -10
- data/spec/page_compiler_spec.rb +13 -9
- data/spec/pages_finder_spec.rb +11 -11
- data/spec/project_creator_spec.rb +53 -102
- data/spec/test-files/malformed.html +5 -0
- data/spec/xml_document_spec.rb +5 -0
- metadata +6 -9
- data/data/styles/alsa/all.css +0 -130
- data/data/styles/yui/all.css +0 -3
- data/data/styles/yui/base.css +0 -80
- data/data/styles/yui/fonts.css +0 -47
- data/data/styles/yui/reset.css +0 -126
- data/data/templates/xhtml_1.0_strict +0 -5
- data/data/templates/xhtml_1.0_transitional +0 -5
data/NEWS
CHANGED
@@ -1,89 +1,73 @@
|
|
1
|
-
|
1
|
+
v2.0 2013-03-29
|
2
|
+
* Improve the layout folder structure, which add interesting side effects:
|
3
|
+
- faster compilation
|
4
|
+
- less use of compile command
|
5
|
+
- takes less size on disk
|
6
|
+
* Genit is now html5 only
|
7
|
+
* Genit provide a web server for development
|
8
|
+
* Config file is no longer an hidden file
|
9
|
+
* I remove all css templates
|
10
|
+
* Genit put an error message when the main template is malformed
|
11
|
+
|
2
12
|
|
13
|
+
v1.0.1 2013-03-13
|
3
14
|
* Fix a bug that creates a bad html5 doctype
|
4
15
|
|
5
16
|
|
6
17
|
v1.0 2011-10-02
|
7
|
-
|
8
18
|
* Genit creates a sitemap.xml
|
9
|
-
|
10
19
|
* Genit puts an error message when:
|
11
20
|
- config file not present
|
12
21
|
- unknown tag
|
13
22
|
- bad or incomplete fragment tag
|
14
23
|
- syntax error in .config
|
15
|
-
|
16
24
|
* Genit puts a warning message when a here tag is used without its counterpart
|
17
|
-
|
18
25
|
* Version is added to the .genit file
|
19
26
|
|
20
27
|
|
21
28
|
v0.99 2011-09-25
|
22
|
-
|
23
29
|
* Genit creates an RSS feed for your news articles
|
24
30
|
|
25
31
|
|
26
32
|
v0.9 2011-09-04
|
27
|
-
|
28
33
|
* You can add news to your site with ease
|
29
|
-
|
30
34
|
* The tag 'var' does not exist anymore. It is replaced by the two-part tag
|
31
35
|
'here' & 'what'
|
32
|
-
|
33
36
|
* Put your public files (photo, text, pdf, etc.) in the 'public' folder
|
34
|
-
|
35
37
|
* Put your javascript in the 'scripts' folder
|
36
|
-
|
37
38
|
* Relative links should be written relative to the root (the index.hmtl file)
|
38
|
-
|
39
39
|
* New '--empty' switch for the 'create' command
|
40
|
-
|
41
40
|
* New '--doctype' option for the 'create' command
|
42
|
-
|
43
41
|
* Fix bug #38: named anchor crashes the compiler
|
44
42
|
|
45
43
|
|
46
44
|
v0.5 2011-08-06
|
47
|
-
|
48
45
|
* You can pass string variables from page to template
|
49
|
-
|
50
46
|
* Pages can be organized into subfolders
|
51
|
-
|
52
47
|
* fix a bug where the cli option -v crashed
|
53
48
|
|
54
49
|
|
55
50
|
v0.4.1 2011-07-30
|
56
|
-
|
57
51
|
* Fix a bug where the closing part of auto-closing tags were forgotten.
|
58
52
|
|
59
53
|
|
60
54
|
v0.4 2011-07-25
|
61
|
-
|
62
55
|
* better smoke test
|
63
|
-
|
64
56
|
* basic user documentation
|
65
|
-
|
66
57
|
* genit use a simple project file
|
67
|
-
|
68
58
|
* use clamp as a command line framework
|
69
59
|
|
70
60
|
|
71
61
|
v0.3 2011-07-23
|
72
|
-
|
73
62
|
* You can split a page in a multitude of fragments.
|
74
63
|
|
75
64
|
|
76
65
|
v0.2 2011-07-02
|
77
|
-
|
78
66
|
* Globally styling your site
|
79
|
-
|
80
67
|
* Manage a main menu
|
81
68
|
|
82
69
|
|
83
70
|
v0.1 2011-06-25
|
84
|
-
|
85
71
|
* Create a project
|
86
|
-
|
87
72
|
* Compile a project (one template, multiple pages)
|
88
|
-
|
89
73
|
* A page can be in html or in markdown format
|
data/README.markdown
CHANGED
@@ -6,8 +6,12 @@ and database. A genit site consists only of xhtml code (+ css, medias and eventu
|
|
6
6
|
|
7
7
|
Genit is written in Ruby but there is no needs to know the Ruby language.
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
**------------------------------------------------------------------------**
|
10
|
+
|
11
|
+
**This readme file and all the documentation refers to version 1.0 of genit.
|
12
|
+
I'm currently writing the doc for genit version 2.0**
|
13
|
+
|
14
|
+
**------------------------------------------------------------------------**
|
11
15
|
|
12
16
|
Description
|
13
17
|
-----------
|
data/Rakefile
CHANGED
data/TODO
CHANGED
@@ -1,25 +1,190 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
version 2
|
2
|
+
=============================================================
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
[done] improve the layout folder structure
|
5
|
+
[done] html5 uniquement
|
6
|
+
[done] ajouter un serveur
|
7
|
+
[done] config file should not be hidden
|
8
|
+
[done] retirer alsa et yui
|
9
|
+
[done] error msg when template is malformed
|
6
10
|
|
7
|
-
Update docs to reflect the fact that all tags MUST be closed.
|
8
11
|
|
12
|
+
version 2.x
|
13
|
+
===============================================================
|
14
|
+
menu: Pouvoir changer l'id "actif". Exemple li.active avec twitter bootstrap.
|
15
|
+
a custom class for the selected menu item
|
9
16
|
|
10
|
-
|
11
|
-
|
17
|
+
use haml
|
18
|
+
|
19
|
+
use sass/scss or less
|
20
|
+
|
21
|
+
Document the genit tag and its attributes
|
22
|
+
|
23
|
+
think about a deamon to auto-compile
|
24
|
+
|
25
|
+
think about a pager for the news
|
26
|
+
|
27
|
+
Think about i18n
|
28
|
+
|
29
|
+
per page script
|
30
|
+
|
31
|
+
per page style
|
12
32
|
|
33
|
+
--minimize option for the compile command
|
13
34
|
|
14
35
|
si j'écris <h1>news page (en oubliant le tag de fin) Genit ne dis
|
15
36
|
rien et ajoute silencieusement le </h1>. Voir si on peut lui faire
|
16
|
-
cracher
|
37
|
+
cracher une erreur.
|
17
38
|
|
18
39
|
Quand je fais reférence à une url interne inexistante, il serait bon
|
19
|
-
d'avoir
|
20
|
-
|
21
|
-
dans le dossier page on accepte uniquement .html et .markdown (warning)
|
40
|
+
d'avoir une erreur
|
22
41
|
|
23
42
|
si j'écris </br> (au lieu de <br/>) Genit ne dis rien, le tag est ignoré.
|
24
|
-
Voir si on peut lui faire cracher
|
43
|
+
Voir si on peut lui faire cracher une erreur.
|
44
|
+
|
45
|
+
Pouvoir utiliser les news avec markdown.
|
46
|
+
|
47
|
+
dans le dossier page on accepte uniquement .html et .markdown (sinon erreur)
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
Project guidelines
|
53
|
+
==================
|
54
|
+
|
55
|
+
Basic objectives
|
56
|
+
----------------
|
57
|
+
|
58
|
+
At a minimum, Genit should allow to do this :
|
59
|
+
|
60
|
+
+ include typical sections:
|
61
|
+
- header
|
62
|
+
- footer
|
63
|
+
- sitemap
|
64
|
+
- menu
|
65
|
+
+ generate the RSS feed (with all news, or only a certain number)
|
66
|
+
+ generate news section (with all news, or only a certain number)
|
67
|
+
+ include different css files per page
|
68
|
+
+ include different script files per page
|
69
|
+
+ generate different `<meta>` per page (title, keywords, etc.)
|
70
|
+
|
71
|
+
Implementation
|
72
|
+
--------------
|
73
|
+
|
74
|
+
### Create a project
|
75
|
+
|
76
|
+
We use the following command line :
|
77
|
+
|
78
|
+
genit create my-site
|
79
|
+
cd my-site
|
80
|
+
|
81
|
+
#### Project structure
|
82
|
+
|
83
|
+
my-site/
|
84
|
+
fragments/
|
85
|
+
news/
|
86
|
+
2011-06-19.markdown
|
87
|
+
pages/
|
88
|
+
index.markdown
|
89
|
+
scripts/
|
90
|
+
styles/
|
91
|
+
alsa/
|
92
|
+
all.css
|
93
|
+
yui/
|
94
|
+
all.css
|
95
|
+
handheld.css
|
96
|
+
print.css
|
97
|
+
screen.css
|
98
|
+
images/
|
99
|
+
templates/
|
100
|
+
main.html
|
101
|
+
menu.html
|
102
|
+
www/
|
103
|
+
|
104
|
+
#### Fragments folder
|
105
|
+
|
106
|
+
Here we are some fragments, pieces of page.
|
107
|
+
|
108
|
+
<genit class="fragment" file="foo.markdown" />
|
109
|
+
|
110
|
+
A fragment can be included in any page you want.
|
111
|
+
|
112
|
+
Thinking in page fragment help to modularize the xthml code, like any other "real" programing language.
|
113
|
+
|
114
|
+
#### News folder
|
115
|
+
|
116
|
+
To include the X latest news:
|
117
|
+
|
118
|
+
<genit class="news" number="5" />
|
119
|
+
|
120
|
+
Without number attribute, we include all news.
|
121
|
+
|
122
|
+
The news are marked with the file name, which is the date.
|
123
|
+
I know it allows only one daily news, but for a static web site, I see
|
124
|
+
no problem.
|
125
|
+
|
126
|
+
#### Pages folder
|
127
|
+
|
128
|
+
All site pages are in this folder. Written in .html or .markdown.
|
129
|
+
|
130
|
+
|
131
|
+
#### Scripts folder
|
132
|
+
|
133
|
+
I think to include prototype and scriptaculous by default, but:
|
134
|
+
|
135
|
+
* If you don't want to use javascript, don't use it.
|
136
|
+
* You can use any framework you want.
|
137
|
+
|
138
|
+
To include a script in the `<head></head>` tag of a particular page,
|
139
|
+
we can write (anywhere in the page but it's more readable at the beginning):
|
140
|
+
|
141
|
+
<genit class="script" file="foo.js" />
|
142
|
+
|
143
|
+
|
144
|
+
#### Styles folder
|
145
|
+
|
146
|
+
Everything that is related to the design of the site goes here.
|
147
|
+
|
148
|
+
To include a particular css file in the `<head></head>` tag of a particular page,
|
149
|
+
we can write (anywhere in the page but it's more readable at the beginning):
|
150
|
+
|
151
|
+
<genit class="css" file="foo.css" />
|
152
|
+
|
153
|
+
#### Templates folder
|
154
|
+
|
155
|
+
This is the wrapper(s) for all your site pages. Other frameworks may call it 'layout'.
|
156
|
+
|
157
|
+
Only written in .html.
|
158
|
+
For now, there is only two templates: the 'main.html' and the 'menu.html'.
|
159
|
+
|
160
|
+
To include a page in the template:
|
161
|
+
|
162
|
+
<genit class="pages" />
|
163
|
+
|
164
|
+
Some sections are found on the vast majority of web sites : header, footer,
|
165
|
+
main menu, bottom menu, left side, right side and sitemap. To include those
|
166
|
+
sections we'll write
|
167
|
+
|
168
|
+
<genit class="header" />
|
169
|
+
<genit class="footer" />
|
170
|
+
etc.
|
171
|
+
|
172
|
+
#### www folder
|
173
|
+
|
174
|
+
The "compiled" project will go here.
|
175
|
+
|
176
|
+
TODO il serait peut-être bien d'avoir une option pour changer ce nom de dossier ?
|
177
|
+
|
178
|
+
### Compiling the project
|
179
|
+
|
180
|
+
The following command will generate the web site in the www folder:
|
181
|
+
|
182
|
+
genit compile
|
183
|
+
|
184
|
+
A shortcut:
|
185
|
+
|
186
|
+
genit cc
|
187
|
+
|
188
|
+
The --minimize option minimize the size of the file, good for production phase:
|
25
189
|
|
190
|
+
genit compile --minimize
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.0
|
data/bin/genit
CHANGED
@@ -32,48 +32,46 @@ include Genit
|
|
32
32
|
module Genit
|
33
33
|
|
34
34
|
class AbstractCommand < Clamp::Command
|
35
|
-
|
36
35
|
option ['-v', '--version'], :flag, "print version" do
|
37
36
|
puts "genit #{File.read(File.join($GENIT_PATH, 'VERSION')).strip}"
|
38
37
|
exit 0
|
39
38
|
end
|
40
|
-
|
41
39
|
end
|
42
|
-
|
40
|
+
|
41
|
+
# Command to create a project.
|
43
42
|
class CreateCommand < AbstractCommand
|
44
43
|
|
45
|
-
parameter "NAME", "the name of the project",
|
46
|
-
|
47
|
-
option ["-e", "--empty"], :flag, "Do not produce smoke test",
|
48
|
-
|
44
|
+
parameter "NAME", "the name of the project",
|
45
|
+
:attribute_name => :project_name
|
46
|
+
option ["-e", "--empty"], :flag, "Do not produce smoke test",
|
47
|
+
:default => false
|
49
48
|
|
50
49
|
def execute
|
51
|
-
|
52
|
-
unless valid_doctypes.include? doctype
|
53
|
-
puts 'Valid doctypes are ' + valid_doctypes.inspect
|
54
|
-
exit 1
|
55
|
-
end
|
56
|
-
project = ProjectCreator.new project_name, doctype, empty?
|
50
|
+
project = ProjectCreator.new project_name, empty?
|
57
51
|
project.create
|
58
52
|
end
|
59
|
-
|
60
53
|
end
|
61
|
-
|
62
|
-
class CompileCommand < AbstractCommand
|
63
54
|
|
55
|
+
# Command to compile a project.
|
56
|
+
class CompileCommand < AbstractCommand
|
64
57
|
def execute
|
65
58
|
compiler = Compiler.new Dir.getwd
|
66
59
|
compiler.compile
|
67
60
|
end
|
68
|
-
|
69
61
|
end
|
70
|
-
|
62
|
+
|
63
|
+
# Command to start the web server.
|
64
|
+
class ServerCommand < AbstractCommand
|
65
|
+
def execute
|
66
|
+
Server.new(Dir.getwd).start
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
71
70
|
class MainCommand < AbstractCommand
|
72
|
-
|
73
71
|
subcommand "create", "Create a project.", CreateCommand
|
74
72
|
subcommand "compile", "Compile the web site.", CompileCommand
|
75
73
|
subcommand "cc", "Compile the web site.", CompileCommand
|
76
|
-
|
74
|
+
subcommand "server", "Run WEBrick.", ServerCommand
|
77
75
|
end
|
78
76
|
|
79
77
|
end
|
data/data/styles/screen.css
CHANGED
@@ -14,22 +14,18 @@ margin-top:50px;
|
|
14
14
|
#menu { display:none;}
|
15
15
|
|
16
16
|
p {
|
17
|
-
font-size:
|
18
|
-
color:#
|
17
|
+
font-size:16px;
|
18
|
+
color:#bbb;
|
19
19
|
}
|
20
20
|
|
21
|
-
p:hover {color:#
|
21
|
+
p:hover {color:#fff;}
|
22
22
|
|
23
|
-
|
23
|
+
a {
|
24
24
|
background-color:#003 !important;
|
25
25
|
color:white !important;
|
26
26
|
text-decoration:none !important;
|
27
27
|
}
|
28
28
|
|
29
|
-
|
30
|
-
color:#334 !important;
|
31
|
-
}
|
32
|
-
|
33
|
-
h1{color:#003;}
|
29
|
+
h1{color:#fff;}
|
34
30
|
|
35
31
|
html{background-color:#336;}
|
data/data/templates/main.html
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
<title>Genit - Static web site framework</title>
|
2
|
-
<link rel="stylesheet" type="text/css" media="all" href="styles/alsa/all.css" />
|
3
2
|
<link rel="stylesheet" type="text/css" media="screen" href="styles/screen.css" />
|
4
3
|
<link rel="stylesheet" type="text/css" media="print" href="styles/print.css" />
|
5
4
|
</head>
|
data/lib/genit.rb
CHANGED
@@ -5,6 +5,7 @@ require 'genit/documents'
|
|
5
5
|
require 'genit/utils'
|
6
6
|
require 'genit/builders'
|
7
7
|
require 'genit/tags'
|
8
|
+
require 'genit/server'
|
8
9
|
|
9
10
|
module Errors
|
10
11
|
|
@@ -12,14 +13,18 @@ module Errors
|
|
12
13
|
puts "Error: #{message}"
|
13
14
|
exit 1
|
14
15
|
end
|
15
|
-
|
16
|
+
|
16
17
|
def warning message
|
17
18
|
puts "Warning: #{message}"
|
18
19
|
end
|
19
|
-
|
20
|
+
|
20
21
|
end
|
21
|
-
|
22
|
+
|
22
23
|
module Genit
|
23
24
|
include Errors
|
24
|
-
|
25
|
+
|
26
|
+
PAGES_DIR = "src/pages"
|
27
|
+
TEMPLATES_DIR = "src/templates"
|
28
|
+
FRAGMENTS_DIR = "src/fragments"
|
29
|
+
NEWS_DIR = "src/news"
|
25
30
|
end
|