easy_html_creator 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +19 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.md +51 -0
- data/bin/generateFiles +5 -0
- data/bin/initDevRoot +21 -0
- data/bin/startServer +3 -0
- data/dev_root/shared/helper/activesupport_override.rb +40 -0
- data/dev_root/shared/helper/shared_helper.rb +5 -0
- data/dev_root/shared/sass/_css3.sass +266 -0
- data/dev_root/test1/coffee/test.coffee +28 -0
- data/dev_root/test1/helper/test_helper.rb +5 -0
- data/dev_root/test1/index.haml +15 -0
- data/dev_root/test1/layout.haml +10 -0
- data/dev_root/test1/partials/_assets.haml +11 -0
- data/dev_root/test1/partials/_footer.haml +1 -0
- data/dev_root/test1/partials/_header.haml +1 -0
- data/dev_root/test1/partials/_metadata.haml +9 -0
- data/dev_root/test1/public/robots.txt +0 -0
- data/dev_root/test1/sass/main.sass +3 -0
- data/dev_root/test2/coffee/test.coffee +28 -0
- data/dev_root/test2/index.haml +4 -0
- data/dev_root/test2/layout.haml +7 -0
- data/dev_root/test2/partials/title.haml +1 -0
- data/dev_root/test2/sass/test.sass +3 -0
- data/lib/easy_html_creator.rb +6 -0
- data/lib/generator/coffee_generator.rb +26 -0
- data/lib/generator/generator.rb +52 -0
- data/lib/generator/haml_generator.rb +99 -0
- data/lib/generator/sass_generator.rb +31 -0
- data/lib/generator/structure_generator.rb +24 -0
- data/lib/server/dispatcher.rb +52 -0
- data/lib/server/request.rb +51 -0
- data/lib/server/response.rb +82 -0
- data/lib/server/server.rb +42 -0
- metadata +202 -0
data/CHANGELOG.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
0.1.2
|
2
|
+
=================
|
3
|
+
Project helper and add actionview for hml files
|
4
|
+
|
5
|
+
0.1.1
|
6
|
+
=================
|
7
|
+
Copy images and other static files
|
8
|
+
|
9
|
+
0.1.0
|
10
|
+
=================
|
11
|
+
Add SASS and CoffeeScript
|
12
|
+
|
13
|
+
0.0.2
|
14
|
+
=================
|
15
|
+
Dynamic rendering and remove all old files before rendering
|
16
|
+
|
17
|
+
0.0.1
|
18
|
+
=================
|
19
|
+
First working version
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2014, Tom Hanolt and Dennis van de Hoef
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
easy-html-creator
|
2
|
+
=================
|
3
|
+
Easy_html_creator is a gem that makes developing static HTML websites easy and joyful.
|
4
|
+
|
5
|
+
Once you learned the joy of haml or sass, it get boring to program in "plain old" html and css.
|
6
|
+
|
7
|
+
Using our Gem you could generate and maintain multiple static websites and program them in your preferred languages.
|
8
|
+
|
9
|
+
Currently supported by our fast and lightweight re-generation server:
|
10
|
+
HAML
|
11
|
+
Sass (with bootstarp)
|
12
|
+
CoffeeScript
|
13
|
+
|
14
|
+
We also included the "actionview" gem, to enable the use of rails standard functions like "text_field_tag".
|
15
|
+
|
16
|
+
Installation
|
17
|
+
=======
|
18
|
+
Add folliwing to your Gemfile
|
19
|
+
|
20
|
+
`gem 'easy-html-editor'`
|
21
|
+
|
22
|
+
than run
|
23
|
+
|
24
|
+
`bundle install`
|
25
|
+
|
26
|
+
Usage
|
27
|
+
=======
|
28
|
+
|
29
|
+
`initDevRoot`
|
30
|
+
This command will generate a sample dev_root and web_root folder
|
31
|
+
|
32
|
+
`generateFiles`
|
33
|
+
This command will generate all the files
|
34
|
+
|
35
|
+
`startServer`
|
36
|
+
This command will start a webserver with will automatically regenerate all the files
|
37
|
+
|
38
|
+
|
39
|
+
TODO
|
40
|
+
========
|
41
|
+
- clean/refactor code
|
42
|
+
- Add tests
|
43
|
+
|
44
|
+
Credits
|
45
|
+
=======
|
46
|
+
|
47
|
+
./ruby_files/generate.rb (*in the first commit and/or version 0.0.1*) is based on:
|
48
|
+
https://github.com/scarpenter/command_line_haml/blob/master/generate.rb
|
49
|
+
|
50
|
+
./ruby_files/server.rb (*in the first commit and/or version 0.0.1*) is based on:
|
51
|
+
https://practicingruby.com/articles/implementing-an-http-file-server
|
data/bin/generateFiles
ADDED
data/bin/initDevRoot
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
source_dir = File.expand_path(File.dirname(__FILE__))[0..-4]
|
6
|
+
output_folder = "#{Dir.pwd}/dev_root"
|
7
|
+
|
8
|
+
puts "Creating dev_root with sample website"
|
9
|
+
|
10
|
+
unless File.directory? output_folder
|
11
|
+
FileUtils::mkdir_p output_folder
|
12
|
+
FileUtils::copy_entry("#{source_dir}dev_root", output_folder)
|
13
|
+
end
|
14
|
+
|
15
|
+
puts "Createweb_root directory"
|
16
|
+
|
17
|
+
unless File.directory? "#{Dir.pwd}/web_root"
|
18
|
+
FileUtils::mkdir_p "#{Dir.pwd}/web_root"
|
19
|
+
end
|
20
|
+
|
21
|
+
puts "All done, use 'startServer' to start the development server."
|
data/bin/startServer
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
module ActivesupportOverride
|
2
|
+
def stylesheet_link_tag(path, media='screen')
|
3
|
+
'<link href="'+path_to_css(path)+'" media="'+media+'" rel="stylesheet" type="text/css" />'
|
4
|
+
end
|
5
|
+
|
6
|
+
def javascript_include_tag(path)
|
7
|
+
'<script src="'+path_to_js(path)+'"></script>'
|
8
|
+
end
|
9
|
+
|
10
|
+
def meta_tag(type, content)
|
11
|
+
'<meta name="'+type+'" content="'+content+'" />'
|
12
|
+
end
|
13
|
+
|
14
|
+
def meta_tag_http(type, content)
|
15
|
+
'<meta http-equiv="'+type+'" content="'+content+'" />'
|
16
|
+
end
|
17
|
+
|
18
|
+
def link_tag(source, relation, type)
|
19
|
+
'<link rel="'+relation+'" href="'+source+'" type="'+type+'" />'
|
20
|
+
end
|
21
|
+
|
22
|
+
def path_to_css(path)
|
23
|
+
return path if external_path?(path)
|
24
|
+
"css/#{path}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def path_to_js(path)
|
28
|
+
return path if external_path? path
|
29
|
+
"js/#{path}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def path_to_image(path)
|
33
|
+
return path if external_path? path
|
34
|
+
"images/#{path}"
|
35
|
+
end
|
36
|
+
|
37
|
+
def external_path? path
|
38
|
+
path.start_with?('//') || path.start_with?('http')
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,266 @@
|
|
1
|
+
/* -------------------------------------------------------------
|
2
|
+
* Sass CSS3 Mixins! The Cross-Browser CSS3 Sass Library
|
3
|
+
* By: Matthieu Aussaguel, http://www.mynameismatthieu.com, @matthieu_tweets
|
4
|
+
*
|
5
|
+
* List of CSS3 Sass Mixins File to be @imported and @included as you need
|
6
|
+
*
|
7
|
+
* The purpose of this library is to facilitate the use of CSS3 on different browsers avoiding HARD TO READ and NEVER
|
8
|
+
* ENDING css files
|
9
|
+
*
|
10
|
+
* note: All CSS3 Properties are being supported by Safari 5
|
11
|
+
* more info: http://www.findmebyip.com/litmus/#css3-properties
|
12
|
+
*
|
13
|
+
* Mixins available:
|
14
|
+
* - background-gradient - arguments: Start Color: #3C3C3C, End Color: #999999
|
15
|
+
* - background-size - arguments: Width: 100%, Height: 100%
|
16
|
+
* - border-radius - arguments: Radius: 5px
|
17
|
+
* - border-radius-separate - arguments: Top Left: 5px, Top Left: 5px, Bottom Left: 5px, Bottom Right: 5px
|
18
|
+
* - box - arguments: Orientation: horizontal, Pack: center, Align: center
|
19
|
+
* - box-rgba - arguments: R: 60, G: 3, B: 12, Opacity: 0.23, Color: #3C3C3C
|
20
|
+
* - box-shadow - arguments: X: 2px, Y: 2px, Blur: 5px, Color: rgba(0,0,0,.4, inset: "")
|
21
|
+
* - box-sizing - arguments: Type: border-box
|
22
|
+
* - columns - arguments: Count: 3, Gap: 10
|
23
|
+
* - double-borders - arguments: Color One: #3C3C3C, Color Two: #999999, Radius: 0
|
24
|
+
* - flex - arguments: Value: 1
|
25
|
+
* - flip - arguments: ScaleX: -1
|
26
|
+
* - font-face - arguments: Font Family: myFont, Eot File Src: myFont.eot, Woff File Src: myFont.woff, Ttf File Src: myFont.ttf
|
27
|
+
* - opacity - arguments: Opacity: 0.5
|
28
|
+
* - outline radius - arguments: Radius: 5px
|
29
|
+
* - resize - arguments: Direction: both
|
30
|
+
* - rotate - arguments: Degree: 0, M11: 0, M12: 0, M21: 0, M22: 0
|
31
|
+
* CSS Matrix Rotation Calculator http://www.boogdesign.com/examples/transforms/matrix-calculator.html
|
32
|
+
* - text-shadow - arguments: X: 2px, Y: 2px, Blur: 5px, Color: rgba(0,0,0,.4)
|
33
|
+
* - transform - arguments: Parameters: null
|
34
|
+
* - transition - arguments: What: all, Length: 1s, Easing: ease-in-out
|
35
|
+
* - triple-borders - arguments: Color One: #3C3C3C, Color Two: #999999, Color Three: #000000, Radius: 0
|
36
|
+
*
|
37
|
+
*-------------------------------------------------------------*/
|
38
|
+
|
39
|
+
/* BACKGROUND GRADIENT */
|
40
|
+
@mixin background-gradient($startColor: #3C3C3C, $endColor: #999999)
|
41
|
+
background-color: $startColor
|
42
|
+
background-image: -webkit-gradient(linear, left top, left bottom, from($startColor), to($endColor))
|
43
|
+
background-image: -webkit-linear-gradient(top, $startColor, $endColor)
|
44
|
+
background-image: -moz-linear-gradient(top, $startColor, $endColor)
|
45
|
+
background-image: -ms-linear-gradient(top, $startColor, $endColor)
|
46
|
+
background-image: -o-linear-gradient(top, $startColor, $endColor)
|
47
|
+
background-image: linear-gradient(top, $startColor, $endColor)
|
48
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#{$startColor}', endColorStr='#{$endColor}')
|
49
|
+
|
50
|
+
|
51
|
+
/* BACKGROUND SIZE */
|
52
|
+
@mixin background-size($width: 100%, $height: 100%)
|
53
|
+
-moz-background-size: $width $height
|
54
|
+
-webkit-background-size: $width $height
|
55
|
+
background-size: $width $height
|
56
|
+
|
57
|
+
|
58
|
+
/* BORDER RADIUS */
|
59
|
+
@mixin border-radius($radius: 5px)
|
60
|
+
-moz-border-radius: $radius
|
61
|
+
-webkit-border-radius: $radius
|
62
|
+
border-radius: $radius
|
63
|
+
|
64
|
+
@mixin border-radius-separate($topLeftRadius: 5px, $topRightRadius: 5px, $bottomLeftRadius: 5px, $bottomRightRadius: 5px)
|
65
|
+
-webkit-border-top-left-radius: $topLeftRadius
|
66
|
+
-webkit-border-top-right-radius: $topRightRadius
|
67
|
+
-webkit-border-bottom-right-radius: $bottomRightRadius
|
68
|
+
-webkit-border-bottom-left-radius: $bottomLeftRadius
|
69
|
+
|
70
|
+
-moz-border-radius-topleft: $topLeftRadius
|
71
|
+
-moz-border-radius-topright: $topRightRadius
|
72
|
+
-moz-border-radius-bottomright: $bottomRightRadius
|
73
|
+
-moz-border-radius-bottomleft: $bottomLeftRadius
|
74
|
+
|
75
|
+
border-top-left-radius: $topLeftRadius
|
76
|
+
border-top-right-radius: $topRightRadius
|
77
|
+
border-bottom-right-radius: $bottomRightRadius
|
78
|
+
border-bottom-left-radius: $bottomLeftRadius
|
79
|
+
|
80
|
+
/* BOX */
|
81
|
+
@mixin box($orient: horizontal, $pack: center, $align: center)
|
82
|
+
display: -webkit-box
|
83
|
+
display: -moz-box
|
84
|
+
display: box
|
85
|
+
|
86
|
+
-webkit-box-orient: $orient
|
87
|
+
-moz-box-orient: $orient
|
88
|
+
box-orient: $orient
|
89
|
+
|
90
|
+
-webkit-box-pack: $pack
|
91
|
+
-moz-box-pack: $pack
|
92
|
+
box-pack: $pack
|
93
|
+
|
94
|
+
-webkit-box-align: $align
|
95
|
+
-moz-box-align: $align
|
96
|
+
box-align: $align
|
97
|
+
|
98
|
+
/* BOX RGBA */
|
99
|
+
@mixin box-rgba($r: 60, $g: 3, $b: 12, $opacity: 0.23, $color: #3C3C3C)
|
100
|
+
background-color: transparent
|
101
|
+
background-color: rgba($r, $g, $b, $opacity)
|
102
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{$color}',endColorstr='#{$color}')
|
103
|
+
zoom: 1
|
104
|
+
|
105
|
+
|
106
|
+
/* BOX SHADOW */
|
107
|
+
@mixin box-shadow($x: 2px, $y: 2px, $blur: 5px, $color: rgba(0,0,0,.4), $inset: "")
|
108
|
+
@if ($inset != "")
|
109
|
+
-webkit-box-shadow: $inset $x $y $blur $color
|
110
|
+
-moz-box-shadow: $inset $x $y $blur $color
|
111
|
+
box-shadow: $inset $x $y $blur $color
|
112
|
+
@else
|
113
|
+
-webkit-box-shadow: $x $y $blur $color
|
114
|
+
-moz-box-shadow: $x $y $blur $color
|
115
|
+
box-shadow: $x $y $blur $color
|
116
|
+
|
117
|
+
/* BOX SIZING */
|
118
|
+
@mixin box-sizing($type: border-box)
|
119
|
+
-webkit-box-sizing: $type
|
120
|
+
-moz-box-sizing: $type
|
121
|
+
box-sizing: $type
|
122
|
+
|
123
|
+
/* COLUMNS */
|
124
|
+
@mixin columns($count: 3, $gap: 10)
|
125
|
+
-webkit-column-count: $count
|
126
|
+
-moz-column-count: $count
|
127
|
+
column-count: $count
|
128
|
+
|
129
|
+
-webkit-column-gap: $gap
|
130
|
+
-moz-column-gap: $gap
|
131
|
+
column-gap: $gap
|
132
|
+
|
133
|
+
/* DOUBLE BORDERS */
|
134
|
+
@mixin double-borders($colorOne: #3C3C3C, $colorTwo: #999999, $radius: 0)
|
135
|
+
border: 1px solid $colorOne
|
136
|
+
|
137
|
+
-webkit-box-shadow: 0 0 0 1px $colorTwo
|
138
|
+
-moz-box-shadow: 0 0 0 1px $colorTwo
|
139
|
+
box-shadow: 0 0 0 1px $colorTwo
|
140
|
+
|
141
|
+
@include border-radius( $radius )
|
142
|
+
|
143
|
+
/* FLEX */
|
144
|
+
@mixin flex($value: 1)
|
145
|
+
-webkit-box-flex: $value
|
146
|
+
-moz-box-flex: $value
|
147
|
+
box-flex: $value
|
148
|
+
|
149
|
+
/* FLIP */
|
150
|
+
@mixin flip($scaleX: -1)
|
151
|
+
-moz-transform: scaleX($scaleX)
|
152
|
+
-o-transform: scaleX($scaleX)
|
153
|
+
-webkit-transform: scaleX($scaleX)
|
154
|
+
transform: scaleX($scaleX)
|
155
|
+
filter: FlipH
|
156
|
+
-ms-filter: "FlipH"
|
157
|
+
|
158
|
+
/* FONT FACE */
|
159
|
+
@mixin font-face($fontFamily: myFont, $eotFileSrc: 'myFont.eot', $woffFileSrc: 'myFont.woff', $ttfFileSrc: 'myFont.ttf')
|
160
|
+
font-family: $fontFamily
|
161
|
+
src: url($eotFileSrc) format('eot'), url($woffFileSrc) format('woff'), url($ttfFileSrc) format('truetype')
|
162
|
+
|
163
|
+
/* OPACITY */
|
164
|
+
@mixin opacity($opacity: 0.5)
|
165
|
+
filter: alpha(opacity=($opacity * 100))
|
166
|
+
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=" + ($opacity * 100) + ")"
|
167
|
+
-moz-opacity: $opacity
|
168
|
+
-khtml-opacity: $opacity
|
169
|
+
opacity: $opacity
|
170
|
+
|
171
|
+
|
172
|
+
/* OUTLINE RADIUS */
|
173
|
+
@mixin outline-radius($radius: 5px)
|
174
|
+
-webkit-outline-radius: $radius
|
175
|
+
-moz-outline-radius: $radius
|
176
|
+
outline-radius: $radius
|
177
|
+
|
178
|
+
/* RESIZE */
|
179
|
+
@mixin resize($direction: both)
|
180
|
+
-webkit-resize: $direction
|
181
|
+
-moz-resize: $direction
|
182
|
+
resize: $direction
|
183
|
+
|
184
|
+
/* ROTATE*/
|
185
|
+
@mixin rotate($deg: 0, $m11: 0, $m12: 0, $m21: 0, $m22: 0)
|
186
|
+
-moz-transform: rotate($deg + deg)
|
187
|
+
-o-transform: rotate($deg + deg)
|
188
|
+
-webkit-transform: rotate($deg + deg)
|
189
|
+
-ms-transform: rotate($deg + deg)
|
190
|
+
transform: rotate($deg + deg)
|
191
|
+
filter: progid:DXImageTransform.Microsoft.Matrix(M11=#{$m11}, M12=#{$m12}, M21=#{$m21}, M22=#{$m22}, sizingMethod='auto expand')
|
192
|
+
zoom: 1
|
193
|
+
|
194
|
+
/* TEXT SHADOW */
|
195
|
+
@mixin text-shadow($x: 2px, $y: 2px, $blur: 5px, $color: rgba(0,0,0,.4))
|
196
|
+
text-shadow: $x $y $blur $color
|
197
|
+
|
198
|
+
/* TRANSFORM */
|
199
|
+
@mixin transform($params)
|
200
|
+
-webkit-transform: $params
|
201
|
+
-moz-transform: $params
|
202
|
+
transform: $params
|
203
|
+
|
204
|
+
/* TRANSITION */
|
205
|
+
@mixin transition($what: all, $length: 1s, $easing: ease-in-out)
|
206
|
+
-moz-transition: $what $length $easing
|
207
|
+
-o-transition: $what $length $easing
|
208
|
+
-webkit-transition: $what $length $easing
|
209
|
+
-ms-transition: $what $length $easing
|
210
|
+
transition: $what $length $easing
|
211
|
+
|
212
|
+
@mixin multi-transition($args...)
|
213
|
+
-moz-transition: $args
|
214
|
+
-o-transition: $args
|
215
|
+
-webkit-transition: $args
|
216
|
+
-ms-transition: $args
|
217
|
+
transition: $args
|
218
|
+
|
219
|
+
@mixin transform-transition($length, $easing: linear)
|
220
|
+
-moz-transition: -moz-transform $length $easing
|
221
|
+
-o-transition: -o-transform $length $easing
|
222
|
+
-webkit-transition: -webkit-transform $length $easing
|
223
|
+
-ms-transition: -ms-transform $length $easing
|
224
|
+
transition: transform $length $easing
|
225
|
+
|
226
|
+
@mixin transition-timing($timing_function)
|
227
|
+
-webkit-transition-timing-function: $timing_function
|
228
|
+
-moz-transition-timing-function: $timing_function
|
229
|
+
-o-transition-timing-function: $timing_function
|
230
|
+
transition-timing-function: $timing_function
|
231
|
+
|
232
|
+
@mixin backface-visibility($what)
|
233
|
+
backface-visibility: $what
|
234
|
+
-moz-backface-visibility: $what
|
235
|
+
-webkit-backface-visibility: $what
|
236
|
+
|
237
|
+
|
238
|
+
/* TRIPLE BORDERS */
|
239
|
+
@mixin triple-borders($colorOne: #3C3C3C, $colorTwo: #999999, $colorThree: #000000, $radius: 0)
|
240
|
+
border: 1px solid $colorOne
|
241
|
+
|
242
|
+
@include border-radius($radius)
|
243
|
+
|
244
|
+
-webkit-box-shadow: 0 0 0 1px $colorTwo, 0 0 0 2px $colorThree
|
245
|
+
-moz-box-shadow: 0 0 0 1px $colorTwo, 0 0 0 2px $colorThree
|
246
|
+
box-shadow: 0 0 0 1px $colorTwo, 0 0 0 2px $colorThree
|
247
|
+
|
248
|
+
@mixin filter($what)
|
249
|
+
filter: $what
|
250
|
+
-moz-filter: $what
|
251
|
+
-webkit-filter: $what
|
252
|
+
|
253
|
+
@mixin perspective($value)
|
254
|
+
perspective: $value
|
255
|
+
-moz-perspective: $value
|
256
|
+
-webkit-perspective: $value
|
257
|
+
|
258
|
+
@mixin transform-style($value)
|
259
|
+
transform-style: $value
|
260
|
+
-moz-transform-style: $value
|
261
|
+
-webkit-transform-style: $value
|
262
|
+
|
263
|
+
@mixin gradient-vertical-three-colors-no-filter($start-color, $mid-color, $color-stop, $end-color)
|
264
|
+
background-image: -webkit-linear-gradient($start-color, $mid-color $color-stop, $end-color)
|
265
|
+
background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color)
|
266
|
+
background-repeat: no-repeat
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Assignment:
|
2
|
+
number = 42
|
3
|
+
opposite = true
|
4
|
+
|
5
|
+
# Conditions:
|
6
|
+
number = -42 if opposite
|
7
|
+
|
8
|
+
# Functions:
|
9
|
+
square = (x) -> x * x
|
10
|
+
|
11
|
+
# Arrays:
|
12
|
+
list = [1, 2, 3, 4, 5]
|
13
|
+
|
14
|
+
# Objects:
|
15
|
+
math =
|
16
|
+
root: Math.sqrt
|
17
|
+
square: square
|
18
|
+
cube: (x) -> x * square x
|
19
|
+
|
20
|
+
# Splats:
|
21
|
+
race = (winner, runners...) ->
|
22
|
+
print winner, runners
|
23
|
+
|
24
|
+
# Existence:
|
25
|
+
alert "I knew it!" if elvis?
|
26
|
+
|
27
|
+
# Array comprehensions:
|
28
|
+
cubes = (math.cube num for num in list)
|
@@ -0,0 +1,11 @@
|
|
1
|
+
= link_tag 'favicon.ico', 'icon', 'image/x-icon'
|
2
|
+
= link_tag 'favicon.ico', 'shortcut icon', 'image/x-icon'
|
3
|
+
= stylesheet_link_tag 'http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css'
|
4
|
+
= stylesheet_link_tag 'main.css'
|
5
|
+
= javascript_include_tag 'https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js'
|
6
|
+
= javascript_include_tag 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js'
|
7
|
+
/[if lt IE 9]
|
8
|
+
= javascript_include_tag 'https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js'
|
9
|
+
= javascript_include_tag 'https://oss.maxcdn.com/respond/1.4.2/respond.min.js'
|
10
|
+
%script
|
11
|
+
var ltie9 = true
|
@@ -0,0 +1 @@
|
|
1
|
+
FOOTER
|
@@ -0,0 +1 @@
|
|
1
|
+
HEADER
|
@@ -0,0 +1,9 @@
|
|
1
|
+
%title
|
2
|
+
test 1
|
3
|
+
|
4
|
+
= meta_tag_http 'Content-Type', 'text/html; charset=utf-8'
|
5
|
+
= meta_tag_http 'X-UA-Compatible', 'IE=edge'
|
6
|
+
= meta_tag 'robots', 'noindex,follow,noodp,noydir'
|
7
|
+
= meta_tag 'description', ''
|
8
|
+
= meta_tag 'keywords', ''
|
9
|
+
= meta_tag 'viewport', 'width=device-width, initial-scale=1.0'
|
File without changes
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Assignment:
|
2
|
+
number = 42
|
3
|
+
opposite = true
|
4
|
+
|
5
|
+
# Conditions:
|
6
|
+
number = -42 if opposite
|
7
|
+
|
8
|
+
# Functions:
|
9
|
+
square = (x) -> x * x
|
10
|
+
|
11
|
+
# Arrays:
|
12
|
+
list = [1, 2, 3, 4, 5]
|
13
|
+
|
14
|
+
# Objects:
|
15
|
+
math =
|
16
|
+
root: Math.sqrt
|
17
|
+
square: square
|
18
|
+
cube: (x) -> x * square x
|
19
|
+
|
20
|
+
# Splats:
|
21
|
+
race = (winner, runners...) ->
|
22
|
+
print winner, runners
|
23
|
+
|
24
|
+
# Existence:
|
25
|
+
alert "I knew it!" if elvis?
|
26
|
+
|
27
|
+
# Array comprehensions:
|
28
|
+
cubes = (math.cube num for num in list)
|
@@ -0,0 +1 @@
|
|
1
|
+
Default Page Title
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'coffee-script'
|
3
|
+
|
4
|
+
module Generator
|
5
|
+
class CoffeeGenerator
|
6
|
+
def generate input_folder, output_folder
|
7
|
+
Dir.glob("#{input_folder}/*.coffee").select do |file|
|
8
|
+
next unless File.file? file
|
9
|
+
|
10
|
+
result = compile(file)
|
11
|
+
file_name = file.split('/')[-1].gsub('.coffee', '.js')
|
12
|
+
write File.join(output_folder, file_name), result
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def compile file
|
17
|
+
CoffeeScript.compile(File.read(file))
|
18
|
+
end
|
19
|
+
|
20
|
+
def write file, content
|
21
|
+
File.open(file, "w") do |f|
|
22
|
+
f.write content
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require_relative 'sass_generator.rb'
|
2
|
+
require_relative 'coffee_generator.rb'
|
3
|
+
require_relative 'haml_generator.rb'
|
4
|
+
require_relative 'structure_generator.rb'
|
5
|
+
|
6
|
+
module Generator
|
7
|
+
class Generator
|
8
|
+
def initialize
|
9
|
+
@haml = HamlGenerator.new
|
10
|
+
@sass = SassGenerator.new
|
11
|
+
@coffee = CoffeeGenerator.new
|
12
|
+
@structure = StructureGenerator.new
|
13
|
+
end
|
14
|
+
|
15
|
+
def web_root
|
16
|
+
return 'web_root/'
|
17
|
+
end
|
18
|
+
|
19
|
+
def dev_root
|
20
|
+
return 'dev_root/'
|
21
|
+
end
|
22
|
+
|
23
|
+
def projects_folder
|
24
|
+
Dir.glob("#{dev_root}/*")
|
25
|
+
end
|
26
|
+
|
27
|
+
def project_name project_folder
|
28
|
+
project_folder.split('/')[-1]
|
29
|
+
end
|
30
|
+
|
31
|
+
def project_web_folder project
|
32
|
+
"#{web_root}/#{project}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def generate
|
36
|
+
FileUtils.rm_rf(Dir.glob("web_root/*"))
|
37
|
+
|
38
|
+
projects_folder.each do |project_folder|
|
39
|
+
next unless File.directory? project_folder
|
40
|
+
next if project_folder.include? 'shared'
|
41
|
+
|
42
|
+
project_name = project_folder.split('/')[-1]
|
43
|
+
project_output_folder = project_web_folder(project_name)
|
44
|
+
|
45
|
+
@structure.generate project_folder, project_output_folder
|
46
|
+
@haml.generate project_folder, project_output_folder
|
47
|
+
@coffee.generate "#{project_folder}/coffee", "#{project_output_folder}/js"
|
48
|
+
@sass.generate "#{project_folder}/sass" , "#{project_output_folder}/css"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'haml'
|
3
|
+
require 'action_view'
|
4
|
+
|
5
|
+
#require shared helper
|
6
|
+
$shared_helper = Dir.glob('./dev_root/shared/helper/*.rb')
|
7
|
+
$shared_helper.each do |file| require file end
|
8
|
+
|
9
|
+
module Generator
|
10
|
+
class HamlGenerator
|
11
|
+
def initialize()
|
12
|
+
@example_boolean = false
|
13
|
+
@haml_options = { attr_wrapper: '"', format: :html5 }
|
14
|
+
end
|
15
|
+
|
16
|
+
def generate input_folder, output_folder
|
17
|
+
layout = "#{input_folder}/layout.haml"
|
18
|
+
|
19
|
+
Dir.glob("#{input_folder}/*.haml").select do |file|
|
20
|
+
next unless File.file? file and !file.include? 'layout.haml'
|
21
|
+
|
22
|
+
result = compile(file, layout, input_folder, output_folder)
|
23
|
+
file_name = file.split('/')[-1].gsub('.haml', '.html')
|
24
|
+
write File.join(output_folder, file_name), result
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def compile file, layout, input_folder, output_folder
|
29
|
+
scope = file.split('/')[-1].split('.').first
|
30
|
+
layout = Haml::Engine.new(File.read(layout), @haml_options)
|
31
|
+
c = Context.new @example_boolean, scope, @haml_options, input_folder, output_folder
|
32
|
+
|
33
|
+
# If the file being processed by Haml contains a yield statement, the block passed to
|
34
|
+
# "render" will be called when it's hit.
|
35
|
+
layout.render c, body_class: scope do
|
36
|
+
# Render the actual page contents in place of the call to "yield".
|
37
|
+
body = Haml::Engine.new(File.read(file), @haml_options)
|
38
|
+
body.render(c)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def write file, content
|
43
|
+
File.open(file, "w") do |f|
|
44
|
+
f.write content
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Calls to "render" can take a context object that will be accessible from the templates.
|
50
|
+
class Context
|
51
|
+
# Any properties of this object are available in the Haml templates.
|
52
|
+
attr_reader :example_boolean
|
53
|
+
|
54
|
+
include ActionView::Helpers
|
55
|
+
|
56
|
+
$shared_helper.each do |path|
|
57
|
+
file_without_ext = path.split('/')[-1].split('.').first
|
58
|
+
module_name = file_without_ext.classify
|
59
|
+
STDERR.puts 'loading helper -> '+module_name
|
60
|
+
include module_name.constantize
|
61
|
+
end
|
62
|
+
|
63
|
+
def initialize(example_boolean, scope, options, input_folder, output_folder)
|
64
|
+
@example_boolean = example_boolean
|
65
|
+
@scope = scope
|
66
|
+
@options = options
|
67
|
+
@input_folder = input_folder
|
68
|
+
@output_folder = output_folder
|
69
|
+
Dir.glob("./#{input_folder}/helper/*.rb").each do |path|
|
70
|
+
require path
|
71
|
+
file_without_ext = path.split('/')[-1].split('.').first
|
72
|
+
module_name = file_without_ext.classify
|
73
|
+
STDERR.puts 'loading project helper -> '+module_name
|
74
|
+
self.class.send(:include, module_name.constantize)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# This function is no different from the "copyright_year" function above. It just uses some
|
79
|
+
# conventions to render another template file when it's called.
|
80
|
+
def render_partial(file_name)
|
81
|
+
# The "default" version of the partial.
|
82
|
+
file_to_render = "#{@input_folder}/partials/#{file_name.to_s}.haml"
|
83
|
+
if @scope
|
84
|
+
# Look for a partial prefixed with the current "scope" (which is just the name of the
|
85
|
+
# primary template being rendered).
|
86
|
+
scope_file = "#{@input_folder}/partials/#{@scope.to_s}_#{file_name.to_s}.haml"
|
87
|
+
# Use it if it's there.
|
88
|
+
file_to_render = scope_file if File.exists? scope_file
|
89
|
+
end
|
90
|
+
# If we found a matching partial (either the scoped one or the default), render it now.
|
91
|
+
if File.exists? file_to_render
|
92
|
+
partial = Haml::Engine.new(File.read(file_to_render), @options)
|
93
|
+
partial.render self
|
94
|
+
else
|
95
|
+
nil
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'sass'
|
3
|
+
|
4
|
+
#just require bootsrap and it will be in the sass path
|
5
|
+
require 'bootstrap-sass'
|
6
|
+
|
7
|
+
module Generator
|
8
|
+
class SassGenerator
|
9
|
+
def generate input_folder, output_folder
|
10
|
+
Dir.glob("#{input_folder}/*.sass").select do |file|
|
11
|
+
file_name = file.split('/')[-1]
|
12
|
+
next unless File.file? file and file_name[0] != '_'
|
13
|
+
|
14
|
+
result = compile(file)
|
15
|
+
file_name = file.split('/')[-1].gsub('.sass', '.css')
|
16
|
+
write File.join(output_folder, file_name), result
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def compile file
|
21
|
+
engine = Sass::Engine.new(File.read(file))
|
22
|
+
engine.render
|
23
|
+
end
|
24
|
+
|
25
|
+
def write file, content
|
26
|
+
File.open(file, "w") do |f|
|
27
|
+
f.write content
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Generator
|
4
|
+
class StructureGenerator
|
5
|
+
def generate input_folder, output_folder
|
6
|
+
return if File.directory? output_folder
|
7
|
+
|
8
|
+
FileUtils::mkdir_p output_folder
|
9
|
+
copy_public_content(input_folder, output_folder)
|
10
|
+
FileUtils::mkdir_p "#{output_folder}/css/"
|
11
|
+
FileUtils::mkdir_p "#{output_folder}/js/"
|
12
|
+
end
|
13
|
+
|
14
|
+
def copy_public_content input_folder, output_folder
|
15
|
+
src_dir = "#{input_folder}/public"
|
16
|
+
return unless File.directory? src_dir
|
17
|
+
|
18
|
+
FileUtils::copy_entry(src_dir, output_folder)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require_relative '../generator/generator.rb'
|
2
|
+
|
3
|
+
module Server
|
4
|
+
class Dispatcher
|
5
|
+
WEB_ROOT = 'web_root'
|
6
|
+
|
7
|
+
def execute_php(path, params)
|
8
|
+
params_s = ''
|
9
|
+
params.each do |key, value|
|
10
|
+
params_s+=key+'='+value[0]+' '
|
11
|
+
end
|
12
|
+
executors = ['php', 'php-cgi', 'php-fpm']
|
13
|
+
cmd = "#{executors[0]} #{path} #{params_s}"
|
14
|
+
STDERR.puts(cmd)
|
15
|
+
%x[ #{cmd} ]
|
16
|
+
end
|
17
|
+
|
18
|
+
def regenerate_files_if(path, server)
|
19
|
+
return unless path.include? '.html'
|
20
|
+
|
21
|
+
#no html? no reload -> no regenarate
|
22
|
+
server.log "Renew all files"
|
23
|
+
Generator::Generator.new.generate
|
24
|
+
end
|
25
|
+
|
26
|
+
def dispatch(request, response, server)
|
27
|
+
path = request.path
|
28
|
+
server.log path
|
29
|
+
|
30
|
+
regenerate_files_if(path, server)
|
31
|
+
|
32
|
+
# Make sure the file exists and is not a directory
|
33
|
+
# before attempting to open it.
|
34
|
+
if File.exist?(path) && !File.directory?(path)
|
35
|
+
if path.include? '.php'
|
36
|
+
response.send(200, execute_php(path, request.params))
|
37
|
+
else
|
38
|
+
response.send_file path
|
39
|
+
end
|
40
|
+
elsif File.exist?(path) && File.directory?(path)
|
41
|
+
path = "#{path}/index.html"
|
42
|
+
if File.exist?(path) && !File.directory?(path)
|
43
|
+
response.send_301 path
|
44
|
+
else
|
45
|
+
response.send_404
|
46
|
+
end
|
47
|
+
else
|
48
|
+
response.send_404
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module Server
|
4
|
+
class Request
|
5
|
+
attr_reader :request, :socket
|
6
|
+
|
7
|
+
def initialize(socket)
|
8
|
+
@request = socket.gets
|
9
|
+
@socket = socket
|
10
|
+
end
|
11
|
+
|
12
|
+
def uri
|
13
|
+
@request.split(" ")[1]
|
14
|
+
end
|
15
|
+
|
16
|
+
def params
|
17
|
+
@params ||= CGI::parse(URI(uri).query)
|
18
|
+
end
|
19
|
+
|
20
|
+
def path
|
21
|
+
clean = []
|
22
|
+
|
23
|
+
# Split the path into components
|
24
|
+
parts = original_path.split("/")
|
25
|
+
|
26
|
+
parts.each do |part|
|
27
|
+
# skip any empty or current directory (".") path components
|
28
|
+
next if part.empty? || part == '.'
|
29
|
+
# If the path component goes up one directory level (".."),
|
30
|
+
# remove the last clean component.
|
31
|
+
# Otherwise, add the component to the Array of clean components
|
32
|
+
part == '..' ? clean.pop : clean << part
|
33
|
+
end
|
34
|
+
|
35
|
+
# return the web root joined to the clean path
|
36
|
+
File.join(Dispatcher::WEB_ROOT, *clean)
|
37
|
+
end
|
38
|
+
|
39
|
+
def original_path
|
40
|
+
URI.unescape(URI(uri).path)
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_s
|
44
|
+
@request
|
45
|
+
end
|
46
|
+
|
47
|
+
def empty?
|
48
|
+
return @request ? false : true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module Server
|
2
|
+
# Map extensions to their content type
|
3
|
+
CONTENT_TYPE_MAPPING = {
|
4
|
+
'html' => 'text/html',
|
5
|
+
'txt' => 'text/plain',
|
6
|
+
'png' => 'image/png',
|
7
|
+
'jpg' => 'image/jpeg',
|
8
|
+
'ico' => 'image/x-icon',
|
9
|
+
'js' => 'text/javascript',
|
10
|
+
'css' => 'text/css',
|
11
|
+
'php' => 'text/html'
|
12
|
+
}
|
13
|
+
|
14
|
+
# Treat as binary data if content type cannot be found
|
15
|
+
DEFAULT_CONTENT_TYPE = 'application/octet-stream'
|
16
|
+
|
17
|
+
# This helper function parses the extension of the
|
18
|
+
# requested file and then looks up its content type.
|
19
|
+
|
20
|
+
class Response
|
21
|
+
def initialize(request, server)
|
22
|
+
@request = request
|
23
|
+
@socket = request.socket
|
24
|
+
@server = server
|
25
|
+
end
|
26
|
+
|
27
|
+
def log msg
|
28
|
+
@server.log msg
|
29
|
+
end
|
30
|
+
|
31
|
+
def print msg
|
32
|
+
@socket.print msg
|
33
|
+
end
|
34
|
+
|
35
|
+
def send_404
|
36
|
+
code = 404
|
37
|
+
message = "404: File '#{@request.path}' not found\n"
|
38
|
+
log "404: File not found #{@request.path}"
|
39
|
+
|
40
|
+
send(code, message)
|
41
|
+
end
|
42
|
+
|
43
|
+
def content_type file
|
44
|
+
ext = File.extname(file).split(".").last
|
45
|
+
CONTENT_TYPE_MAPPING.fetch(ext, DEFAULT_CONTENT_TYPE)
|
46
|
+
end
|
47
|
+
|
48
|
+
def send_301 redirect_to
|
49
|
+
redirect_to.slice!("web_root")
|
50
|
+
redirect_to = "http://#{@socket.addr[2]}:#{@socket.addr[1]}#{redirect_to}"
|
51
|
+
|
52
|
+
log "301: redirect to #{redirect_to}"
|
53
|
+
|
54
|
+
# respond with a 301 error code to redirect
|
55
|
+
print "HTTP/1.1 301 Moved Permanently\r\n" +
|
56
|
+
"Location: #{redirect_to}\r\n"+
|
57
|
+
"Connection: close\r\n"
|
58
|
+
end
|
59
|
+
|
60
|
+
def send_file path
|
61
|
+
File.open(@request.path, "rb") do |file|
|
62
|
+
print "HTTP/1.1 200 OK\r\n" +
|
63
|
+
"Content-Type: #{content_type(file)}\r\n" +
|
64
|
+
"Content-Length: #{file.size}\r\n" +
|
65
|
+
"Connection: close\r\n" +
|
66
|
+
"\r\n"
|
67
|
+
|
68
|
+
# write the contents of the file to the socket
|
69
|
+
IO.copy_stream(file, @socket)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def send(code, message)
|
74
|
+
print "HTTP/1.1 #{code} Not Found\r\n" +
|
75
|
+
"Content-Type: text/plain\r\n" +
|
76
|
+
"Content-Length: #{message.size}\r\n" +
|
77
|
+
"Connection: close\r\n" +
|
78
|
+
"\r\n" +
|
79
|
+
message
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'socket'
|
2
|
+
|
3
|
+
require_relative 'request.rb'
|
4
|
+
require_relative 'response.rb'
|
5
|
+
|
6
|
+
module Server
|
7
|
+
class Server
|
8
|
+
def initialize(dispatcher)
|
9
|
+
@dispatcher = dispatcher
|
10
|
+
end
|
11
|
+
|
12
|
+
def listen(port, host='127.0.0.1')
|
13
|
+
server = TCPServer.new(host, port)
|
14
|
+
log "Server binded to http://#{host}:#{port}"
|
15
|
+
|
16
|
+
loop do
|
17
|
+
socket = server.accept
|
18
|
+
request = Request.new socket
|
19
|
+
response = Response.new request, self
|
20
|
+
|
21
|
+
log request
|
22
|
+
next if request.empty?
|
23
|
+
|
24
|
+
begin
|
25
|
+
@dispatcher.dispatch(request, response, self)
|
26
|
+
rescue Exception => e
|
27
|
+
msg = "#{e.backtrace.first}: #{e.message} (#{e.class})", e.backtrace.drop(1).map{|s| "\t#{s}"}
|
28
|
+
socket.print '<pre style="max-width: 100%; color: red; width: 100%; font-size:20px; white-space: normal;">'
|
29
|
+
socket.print msg
|
30
|
+
socket.print '</pre>'
|
31
|
+
log msg
|
32
|
+
end
|
33
|
+
|
34
|
+
socket.close
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def log msg
|
39
|
+
STDERR.puts msg
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
metadata
ADDED
@@ -0,0 +1,202 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: easy_html_creator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Tom Hanolt
|
9
|
+
- Dennis van de Hoef
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2014-11-09 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: haml
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ! '>='
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '0'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: sass
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ! '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
type: :runtime
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ! '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: coffee-script
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: rake
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
type: :runtime
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: bootstrap-sass
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
type: :runtime
|
88
|
+
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: actionview
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
type: :runtime
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: ! 'Easy_html_creator is a gem that makes developing static HTML websites
|
112
|
+
easy and joyful.
|
113
|
+
|
114
|
+
|
115
|
+
Once you learned the joy of haml or sass, it get boring to program in ''plain old''
|
116
|
+
html and css.
|
117
|
+
|
118
|
+
|
119
|
+
Using our Gem you could generate and maintain multiple static websites and program
|
120
|
+
them in your preferred languages.
|
121
|
+
|
122
|
+
|
123
|
+
Currently supported by our fast and lightweight re-generation server:
|
124
|
+
|
125
|
+
HAML
|
126
|
+
|
127
|
+
Sass (with bootstarp)
|
128
|
+
|
129
|
+
CoffeeScript
|
130
|
+
|
131
|
+
|
132
|
+
We also included the ''actionview'' gem, to enable the use of rails standard functions
|
133
|
+
like ''text_field_tag''.'
|
134
|
+
email:
|
135
|
+
executables:
|
136
|
+
- startServer
|
137
|
+
- generateFiles
|
138
|
+
- initDevRoot
|
139
|
+
extensions: []
|
140
|
+
extra_rdoc_files: []
|
141
|
+
files:
|
142
|
+
- bin/generateFiles
|
143
|
+
- bin/initDevRoot
|
144
|
+
- bin/startServer
|
145
|
+
- lib/server/server.rb
|
146
|
+
- lib/server/response.rb
|
147
|
+
- lib/server/dispatcher.rb
|
148
|
+
- lib/server/request.rb
|
149
|
+
- lib/easy_html_creator.rb
|
150
|
+
- lib/generator/sass_generator.rb
|
151
|
+
- lib/generator/structure_generator.rb
|
152
|
+
- lib/generator/generator.rb
|
153
|
+
- lib/generator/haml_generator.rb
|
154
|
+
- lib/generator/coffee_generator.rb
|
155
|
+
- dev_root/test2/layout.haml
|
156
|
+
- dev_root/test2/coffee/test.coffee
|
157
|
+
- dev_root/test2/partials/title.haml
|
158
|
+
- dev_root/test2/sass/test.sass
|
159
|
+
- dev_root/test2/index.haml
|
160
|
+
- dev_root/test1/layout.haml
|
161
|
+
- dev_root/test1/coffee/test.coffee
|
162
|
+
- dev_root/test1/partials/_metadata.haml
|
163
|
+
- dev_root/test1/partials/_assets.haml
|
164
|
+
- dev_root/test1/partials/_footer.haml
|
165
|
+
- dev_root/test1/partials/_header.haml
|
166
|
+
- dev_root/test1/sass/main.sass
|
167
|
+
- dev_root/test1/helper/test_helper.rb
|
168
|
+
- dev_root/test1/public/robots.txt
|
169
|
+
- dev_root/test1/index.haml
|
170
|
+
- dev_root/shared/sass/_css3.sass
|
171
|
+
- dev_root/shared/helper/activesupport_override.rb
|
172
|
+
- dev_root/shared/helper/shared_helper.rb
|
173
|
+
- LICENSE
|
174
|
+
- README.md
|
175
|
+
- Gemfile
|
176
|
+
- CHANGELOG.md
|
177
|
+
homepage: https://github.com/dennisvandehoef/easy-html-creator
|
178
|
+
licenses:
|
179
|
+
- MIT
|
180
|
+
post_install_message:
|
181
|
+
rdoc_options: []
|
182
|
+
require_paths:
|
183
|
+
- lib
|
184
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
190
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
191
|
+
none: false
|
192
|
+
requirements:
|
193
|
+
- - ! '>='
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
|
+
requirements: []
|
197
|
+
rubyforge_project:
|
198
|
+
rubygems_version: 1.8.23
|
199
|
+
signing_key:
|
200
|
+
specification_version: 3
|
201
|
+
summary: A simple project for fast and easy HTML website createmend
|
202
|
+
test_files: []
|