gumdrop 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -1
- data/ChangeLog.md +3 -0
- data/Notes.md +2 -1
- data/examples/simple/Gemfile +19 -0
- data/examples/simple/Rakefile +42 -0
- data/examples/simple/config.ru +15 -0
- data/examples/simple/data/config.yml +2 -0
- data/examples/simple/lib/view_helpers.rb +17 -0
- data/examples/simple/source/favicon.ico +0 -0
- data/examples/simple/source/index.html.erb +1 -0
- data/examples/simple/source/theme/screen.css.scss +10 -0
- data/examples/simple/source/theme/scripts/app.js.coffee +0 -0
- data/examples/simple/source/theme/styles/_tools.scss +434 -0
- data/examples/simple/source/theme/templates/site.template.haml +33 -0
- data/lib/gumdrop.rb +16 -24
- data/lib/gumdrop/cli.rb +2 -1
- data/lib/gumdrop/server.rb +40 -61
- data/lib/gumdrop/template/Rakefile +11 -1
- data/lib/gumdrop/template/config.ru +3 -1
- data/lib/gumdrop/utils.rb +20 -0
- data/lib/gumdrop/version.rb +1 -1
- metadata +25 -13
data/.gitignore
CHANGED
data/ChangeLog.md
CHANGED
data/Notes.md
CHANGED
@@ -1,3 +1,4 @@
|
|
1
1
|
# Future Features/Changes
|
2
2
|
- Generator support of some kind... Where you can define how pages can be built from data. Include support for paging and RSS/ATOM feeds.
|
3
|
-
- Add options to config for `source/` and `output/` folder names. `data/` too?
|
3
|
+
- Add options to config for `source/` and `output/` folder names. `data/` too?
|
4
|
+
- Some kind of admin? What would that even do?
|
@@ -0,0 +1,19 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
|
3
|
+
here= File.dirname(__FILE__)
|
4
|
+
|
5
|
+
gem "sinatra"
|
6
|
+
gem "active_support"
|
7
|
+
gem "i18n"
|
8
|
+
gem "rake"
|
9
|
+
gem "gumdrop", :path=>"#{here}/../../"
|
10
|
+
|
11
|
+
# Add your dependencies here:
|
12
|
+
|
13
|
+
gem "sass"
|
14
|
+
gem "coffee-script"
|
15
|
+
|
16
|
+
# gem "rdiscount"
|
17
|
+
# gem "less"
|
18
|
+
# gem "haml"
|
19
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require "bundler/setup"
|
3
|
+
require 'gumdrop'
|
4
|
+
|
5
|
+
# For the SYNC task
|
6
|
+
USER='user'
|
7
|
+
SERVER='server.com'
|
8
|
+
FOLDER="~/#{SERVER}"
|
9
|
+
|
10
|
+
|
11
|
+
task :default do
|
12
|
+
sh 'rake -T'
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "Build source files into output"
|
16
|
+
task :build do
|
17
|
+
Gumdrop.run()
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
desc "Run development server"
|
22
|
+
task :serve do
|
23
|
+
Gumdrop.config.auto_run= true
|
24
|
+
Gumdrop::Server
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "Syncs with public server using rsync (if configured)"
|
28
|
+
task :sync do
|
29
|
+
cmd= "rsync -avz --delete output/ #{USER}@#{SERVER}:#{FOLDER}"
|
30
|
+
puts "Running:\n#{cmd}\n"
|
31
|
+
system(cmd)
|
32
|
+
puts "Done."
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Outputs the Gumdrop version"
|
36
|
+
task :version do
|
37
|
+
puts Gumdrop::VERSION
|
38
|
+
end
|
39
|
+
|
40
|
+
task :default do
|
41
|
+
`rake -T`
|
42
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'gumdrop'
|
12
|
+
|
13
|
+
Gumdrop.config.auto_run= false
|
14
|
+
|
15
|
+
run Gumdrop::Server
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Gumdrop::ViewHelpers
|
2
|
+
|
3
|
+
# Calculate the years for a copyright
|
4
|
+
def copyright_years(start_year, divider="–")
|
5
|
+
end_year = Date.today.year
|
6
|
+
if start_year == end_year
|
7
|
+
"#{start_year}"
|
8
|
+
else
|
9
|
+
"#{start_year}#{divider}#{end_year}"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
#
|
14
|
+
# Your custom helpers go here!
|
15
|
+
#
|
16
|
+
|
17
|
+
end
|
File without changes
|
@@ -0,0 +1 @@
|
|
1
|
+
<p>Welcome to <%= data.config.title %></p>
|
File without changes
|
@@ -0,0 +1,434 @@
|
|
1
|
+
// Layout Tools v 1.2
|
2
|
+
|
3
|
+
// Sample Usage:
|
4
|
+
// #container {
|
5
|
+
// @include border-radius(5px);
|
6
|
+
// }
|
7
|
+
|
8
|
+
// GRID
|
9
|
+
|
10
|
+
// = The 1Kb Grid = (slightly modified)
|
11
|
+
@mixin grid($columns:12, $column_width:60, $column_margin:20) {
|
12
|
+
.row, section {
|
13
|
+
overflow: hidden;
|
14
|
+
margin: 0 auto;
|
15
|
+
width: #{$columns * $column_width + $columns * $column_margin}px;
|
16
|
+
|
17
|
+
.row {
|
18
|
+
margin: 0 #{$column_margin - $column_margin * 1.5}px;
|
19
|
+
display: inline-block;
|
20
|
+
width: auto;
|
21
|
+
}
|
22
|
+
|
23
|
+
.col {
|
24
|
+
margin: 0 #{$column_margin / 2}px;
|
25
|
+
overflow: hidden;
|
26
|
+
float: left;
|
27
|
+
display: inline;
|
28
|
+
width: #{$column_width * 1 + $column_margin * (1 - 1)}px;
|
29
|
+
|
30
|
+
@for $i from 2 through $columns {
|
31
|
+
&.span-#{$i} {
|
32
|
+
width: #{$column_width * $i + $column_margin * ($i - 1)}px;
|
33
|
+
//&:hover
|
34
|
+
// outline: 1px solid red
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
// TEST
|
42
|
+
@mixin gridTest($columns:12, $column_width:60, $column_margin:20) {
|
43
|
+
row {
|
44
|
+
display: block;
|
45
|
+
overflow: hidden;
|
46
|
+
margin: 0 auto;
|
47
|
+
width: #{$columns * $column_width + $columns * $column_margin}px;
|
48
|
+
|
49
|
+
row {
|
50
|
+
margin: 0 #{$column_margin - $column_margin * 1.5}px;
|
51
|
+
display: inline-block;
|
52
|
+
width: auto;
|
53
|
+
}
|
54
|
+
|
55
|
+
col {
|
56
|
+
margin: 0 #{$column_margin / 2}px;
|
57
|
+
overflow: hidden;
|
58
|
+
float: left;
|
59
|
+
display: inline;
|
60
|
+
width: #{$column_width * 1 + $column_margin * (1 - 1)}px;
|
61
|
+
}
|
62
|
+
@for $i from 2 through $columns {
|
63
|
+
col#{$i} {
|
64
|
+
margin: 0 #{$column_margin / 2}px;
|
65
|
+
overflow: hidden;
|
66
|
+
float: left;
|
67
|
+
display: inline;
|
68
|
+
width: #{$column_width * $i + $column_margin * ($i - 1)}px;
|
69
|
+
//&:hover
|
70
|
+
// outline: 1px solid red
|
71
|
+
}
|
72
|
+
}
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
// CSS RESET
|
77
|
+
|
78
|
+
@mixin css-clear($boxmodel:'border-box') {
|
79
|
+
* {
|
80
|
+
@include box-model($boxmodel);
|
81
|
+
}
|
82
|
+
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,textarea,p,blockquote,th,td {
|
83
|
+
margin:0;
|
84
|
+
padding:0;
|
85
|
+
}
|
86
|
+
article, aside, dialog, figure, footer, header, hgroup, menu, nav, section {
|
87
|
+
display: block;
|
88
|
+
}
|
89
|
+
table {
|
90
|
+
border-collapse:collapse;
|
91
|
+
border-spacing:0;
|
92
|
+
}
|
93
|
+
fieldset,img {
|
94
|
+
border:0;
|
95
|
+
}
|
96
|
+
address,caption,cite,code,dfn,em,strong,th,var {
|
97
|
+
font-style:normal;
|
98
|
+
font-weight:normal;
|
99
|
+
}
|
100
|
+
ol,ul {
|
101
|
+
list-style:none;
|
102
|
+
}
|
103
|
+
caption,th {
|
104
|
+
text-align:left;
|
105
|
+
}
|
106
|
+
h1,h2,h3,h4,h5,h6 {
|
107
|
+
font-size:100%;
|
108
|
+
font-weight:normal;
|
109
|
+
}
|
110
|
+
q:before,q:after {
|
111
|
+
content:'';
|
112
|
+
}
|
113
|
+
abbr,acronym {
|
114
|
+
border:0;
|
115
|
+
}
|
116
|
+
}
|
117
|
+
|
118
|
+
@mixin css-reset($size:14px, $boxmodel:'border-box') {
|
119
|
+
@include css-clear($boxmodel);
|
120
|
+
body {
|
121
|
+
font-size: $size;
|
122
|
+
line-height: 1.3em;
|
123
|
+
}
|
124
|
+
h1, h2, h3, h4, h5, h6 {
|
125
|
+
font-weight: bold;
|
126
|
+
}
|
127
|
+
h1 {
|
128
|
+
font-size: 175%;
|
129
|
+
}
|
130
|
+
h2 {
|
131
|
+
font-size: 155%;
|
132
|
+
}
|
133
|
+
h3 {
|
134
|
+
font-size: 135%;
|
135
|
+
}
|
136
|
+
h4 {
|
137
|
+
font-size: 120%;
|
138
|
+
}
|
139
|
+
h5 {
|
140
|
+
font-size: 105%;
|
141
|
+
}
|
142
|
+
h6 {
|
143
|
+
font-size: 100%;
|
144
|
+
}
|
145
|
+
p, blockquote, h1, h2, h3, h4, h5, h6, pre, ol, ul {
|
146
|
+
padding: 0.5em 0;
|
147
|
+
}
|
148
|
+
b, strong {
|
149
|
+
font-weight: bold;
|
150
|
+
}
|
151
|
+
i, em {
|
152
|
+
font-style: italic;
|
153
|
+
}
|
154
|
+
ul, ol {
|
155
|
+
padding-left: 2em;
|
156
|
+
}
|
157
|
+
ul {
|
158
|
+
list-style: circle;
|
159
|
+
}
|
160
|
+
ol {
|
161
|
+
list-style: decimal;
|
162
|
+
}
|
163
|
+
blockquote {
|
164
|
+
padding-left: 4em;
|
165
|
+
}
|
166
|
+
}
|
167
|
+
|
168
|
+
@mixin debug-hover($color:'red') {
|
169
|
+
&:hover {
|
170
|
+
outline: 1px solid $color;
|
171
|
+
}
|
172
|
+
}
|
173
|
+
|
174
|
+
|
175
|
+
// Vertical Background Gradient
|
176
|
+
@mixin vbg-gradient($fc: #FFF, $tc: #FFF) {
|
177
|
+
background: $fc;
|
178
|
+
background: -webkit-gradient(linear, left top, left bottom, from($fc), to($tc));
|
179
|
+
background: -moz-linear-gradient(top, $fc, $tc);
|
180
|
+
}
|
181
|
+
|
182
|
+
// Vertical Background Gradient, 3 color
|
183
|
+
@mixin vbg-gradient3($fc: #FFF, $mc: #FFF, $tc: #FFF) {
|
184
|
+
background: $fc;
|
185
|
+
background: -webkit-gradient(linear, left top, left bottom, from($fc), color-stop(0.5, $mc), to($tc));
|
186
|
+
background: -moz-linear-gradient(top, $fc, $mc, $tc);
|
187
|
+
}
|
188
|
+
|
189
|
+
// Horizontal Background Gradient
|
190
|
+
@mixin hbg-gradient($fc: #FFF, $tc: #FFF) {
|
191
|
+
background: $fc;
|
192
|
+
background: -webkit-gradient(linear, left top, right top, from($fc), to($tc));
|
193
|
+
background: -moz-linear-gradient(left, $fc, $tc);
|
194
|
+
}
|
195
|
+
|
196
|
+
|
197
|
+
// Box Model
|
198
|
+
@mixin box-model($type:'border-box') {
|
199
|
+
box-sizing: $type;
|
200
|
+
-moz-box-sizing: $type;
|
201
|
+
-ms-box-sizing: $type;
|
202
|
+
-webkit-box-sizing: $type;
|
203
|
+
}
|
204
|
+
|
205
|
+
@mixin hbox ($boxAlign:stretch, $boxPack:left) {
|
206
|
+
@include display-box();
|
207
|
+
@include box-orient(horizontal);
|
208
|
+
@include box-align($boxAlign);
|
209
|
+
@include box-pack($boxPack);
|
210
|
+
}
|
211
|
+
|
212
|
+
@mixin vbox ($boxAlign:stretch, $boxPack:left) {
|
213
|
+
@include display-box();
|
214
|
+
@include box-orient(vertical);
|
215
|
+
@include box-align($boxAlign);
|
216
|
+
@include box-pack($boxPack);
|
217
|
+
}
|
218
|
+
|
219
|
+
@mixin display-box () {
|
220
|
+
display: box;
|
221
|
+
display: -webkit-box;
|
222
|
+
display: -moz-box;
|
223
|
+
}
|
224
|
+
|
225
|
+
|
226
|
+
@mixin box-flex ($s: 0) {
|
227
|
+
box-flex: $s;
|
228
|
+
-webkit-box-flex: $s;
|
229
|
+
-moz-box-flex: $s;
|
230
|
+
}
|
231
|
+
|
232
|
+
|
233
|
+
@mixin box-orient($dir:horizontal) {
|
234
|
+
box-orient: $dir;
|
235
|
+
-webkit-box-orient: $dir;
|
236
|
+
-moz-box-orient: $dir;
|
237
|
+
}
|
238
|
+
|
239
|
+
@mixin box-pack($dir:left) {
|
240
|
+
box-pack: $dir;
|
241
|
+
-webkit-box-pack: $dir;
|
242
|
+
-moz-box-pack: $dir;
|
243
|
+
}
|
244
|
+
|
245
|
+
@mixin box-align($dir:stretch) {
|
246
|
+
box-align: $dir;
|
247
|
+
-webkit-box-align: $dir;
|
248
|
+
-moz-box-align: $dir;
|
249
|
+
}
|
250
|
+
|
251
|
+
@mixin box-lines($rows:single) {
|
252
|
+
box-lines: $rows;
|
253
|
+
-webkit-box-lines: $rows;
|
254
|
+
-moz-box-lines: $rows;
|
255
|
+
}
|
256
|
+
|
257
|
+
|
258
|
+
// SHADOWS
|
259
|
+
|
260
|
+
// TEXT shadow
|
261
|
+
@mixin text-shadow($props) {
|
262
|
+
text-shadow: $props;
|
263
|
+
-moz-text-shadow: $props;
|
264
|
+
-webkit-text-shadow: $props; }
|
265
|
+
|
266
|
+
// BOX shadow
|
267
|
+
@mixin box-shadow($props) {
|
268
|
+
box-shadow: $props;
|
269
|
+
-moz-box-shadow: $props;
|
270
|
+
-webkit-box-shadow: $props; }
|
271
|
+
|
272
|
+
@mixin inset-box-shadow ($h: 0px, $v: 0px, $b: 4px, $c: #333) {
|
273
|
+
box-shadow: inset $h $v $b $c;
|
274
|
+
-moz-box-shadow: inset $h $v $b $c;
|
275
|
+
-webkit-box-shadow: inset $h $v $b $c;
|
276
|
+
}
|
277
|
+
|
278
|
+
@mixin border-as-shadow($tlc:#000, $brc:#FFF, $width:1px, $style:solid) {
|
279
|
+
border: {
|
280
|
+
top: $width $style $tlc;
|
281
|
+
left: $width $style $tlc;
|
282
|
+
right: $width $style $brc;
|
283
|
+
bottom: $width $style $brc;
|
284
|
+
};
|
285
|
+
}
|
286
|
+
|
287
|
+
|
288
|
+
// BORDER RADIUS
|
289
|
+
|
290
|
+
// All corners
|
291
|
+
@mixin border-radius($radius) {
|
292
|
+
border-radius: $radius;
|
293
|
+
-moz-border-radius: $radius;
|
294
|
+
-webkit-border-radius: $radius; }
|
295
|
+
|
296
|
+
// Top Right
|
297
|
+
@mixin border-radius-top-right($radius) {
|
298
|
+
@include border-radius-top-right($radius); }
|
299
|
+
|
300
|
+
// Bottom Right
|
301
|
+
@mixin border-radius-bottom-right($radius) {
|
302
|
+
@include border-radius-bottom-right($radius); }
|
303
|
+
|
304
|
+
// Bottom Left
|
305
|
+
@mixin border-radius-bottom-left($radius) {
|
306
|
+
@include border-radius-bottom-left($radius); }
|
307
|
+
|
308
|
+
// Top Left
|
309
|
+
@mixin border-radius-top-left($radius) {
|
310
|
+
@include border-radius-top-left($radius); }
|
311
|
+
|
312
|
+
// Top
|
313
|
+
@mixin border-radius-top($radius) {
|
314
|
+
@include border-radius-top-left($radius);
|
315
|
+
@include border-radius-top-right($radius); }
|
316
|
+
|
317
|
+
// Right
|
318
|
+
@mixin border-radius-right($radius) {
|
319
|
+
@include border-radius-top-right($radius);
|
320
|
+
@include border-radius-bottom-right($radius); }
|
321
|
+
|
322
|
+
// Bottom
|
323
|
+
@mixin border-radius-bottom($radius) {
|
324
|
+
@include border-radius-bottom-right($radius);
|
325
|
+
@include border-radius-bottom-left($radius); }
|
326
|
+
|
327
|
+
// Left
|
328
|
+
@mixin border-radius-left($radius) {
|
329
|
+
@include border-radius-top-left($radius);
|
330
|
+
@include border-radius-bottom-left($radius); }
|
331
|
+
|
332
|
+
// Let's setup the rules so we don't have to repeat ourselves
|
333
|
+
// These are mixins for this mixin and are re-used above
|
334
|
+
@mixin border-radius-top-right($radius) {
|
335
|
+
border-top-right-radius: $radius;
|
336
|
+
-moz-border-radius-topright: $radius;
|
337
|
+
-webkit-border-top-right-radius: $radius; }
|
338
|
+
|
339
|
+
@mixin border-radius-bottom-right($radius) {
|
340
|
+
border-bottom-right-radius: $radius;
|
341
|
+
-moz-border-radius-bottomright: $radius;
|
342
|
+
-webkit-border-bottom-right-radius: $radius; }
|
343
|
+
|
344
|
+
@mixin border-radius-bottom-left($radius) {
|
345
|
+
border-bottom-left-radius: $radius;
|
346
|
+
-moz-border-radius-bottomleft: $radius;
|
347
|
+
-webkit-border-bottom-left-radius: $radius; }
|
348
|
+
|
349
|
+
@mixin border-radius-top-left($radius) {
|
350
|
+
border-top-left-radius: $radius;
|
351
|
+
-moz-border-radius-topleft: $radius;
|
352
|
+
-webkit-border-top-left-radius: $radius; }
|
353
|
+
|
354
|
+
@mixin animate($name, $dur:1s, $easing:ease-in-out, $iter:infinite, $dir:alternate) {
|
355
|
+
-webkit-animation-name: $name;
|
356
|
+
-webkit-animation-duration: $dur;
|
357
|
+
-webkit-animation-direction: $dir;
|
358
|
+
-webkit-animation-iteration-count: $iter;
|
359
|
+
-webkit-animation-timing-function: $easing;
|
360
|
+
}
|
361
|
+
|
362
|
+
@mixin transition($info:all 250 ease-out) {
|
363
|
+
-webkit-transition: $info;
|
364
|
+
-moz-transition: $info;
|
365
|
+
-o-transition: $info;
|
366
|
+
transition: $info;
|
367
|
+
}
|
368
|
+
|
369
|
+
@mixin transform( $s:'rotate(45deg)') {
|
370
|
+
-moz-transform: $s;
|
371
|
+
-webkit-transform: $s;
|
372
|
+
-o-transform: $s;
|
373
|
+
transform: $s;
|
374
|
+
}
|
375
|
+
|
376
|
+
@mixin box-attrs() {
|
377
|
+
*[box-flex="0"] { @include box-flex(0); }
|
378
|
+
*[box-flex="1"] { @include box-flex(1); }
|
379
|
+
*[box-flex="2"] { @include box-flex(2); }
|
380
|
+
*[box-flex="3"] { @include box-flex(3); }
|
381
|
+
*[box-flex="4"] { @include box-flex(4); }
|
382
|
+
*[box-flex="5"] { @include box-flex(5); }
|
383
|
+
*[box-flex="6"] { @include box-flex(6); }
|
384
|
+
*[box-flex="7"] { @include box-flex(7); }
|
385
|
+
*[box-flex="8"] { @include box-flex(8); }
|
386
|
+
*[box-flex="9"] { @include box-flex(9); }
|
387
|
+
*[box-flex="10"] { @include box-flex(10); }
|
388
|
+
|
389
|
+
*[box-align="start"] { @include box-align(start); }
|
390
|
+
*[box-align="center"] { @include box-align(center); }
|
391
|
+
*[box-align="end"] { @include box-align(end); }
|
392
|
+
*[box-align="baseline"] { @include box-align(baseline); }
|
393
|
+
*[box-align="stretch"] { @include box-align(stretch); }
|
394
|
+
|
395
|
+
*[box-pack="start"] { @include box-pack(start); }
|
396
|
+
*[box-pack="center"] { @include box-pack(center); }
|
397
|
+
*[box-pack="end"] { @include box-pack(end); }
|
398
|
+
*[box-pack="justify"] { @include box-pack(justify); }
|
399
|
+
*[box-pack="stretch"] { @include box-pack(justify); }
|
400
|
+
|
401
|
+
*[box-lines="single"] { @include box-lines(single); }
|
402
|
+
*[box-lines="multiple"] { @include box-lines(multiple); }
|
403
|
+
|
404
|
+
*[box-orient="horizontal"] { @include box-orient(horizontal); }
|
405
|
+
*[box-orient="vertical"] { @include box-orient(vertical); }
|
406
|
+
|
407
|
+
}
|
408
|
+
|
409
|
+
// Font stuff
|
410
|
+
|
411
|
+
@mixin web-font($family, $url, $format:'truetype') {
|
412
|
+
@font-face {
|
413
|
+
font-family: $family;
|
414
|
+
src: url($url) format($format);
|
415
|
+
}
|
416
|
+
}
|
417
|
+
|
418
|
+
// Color stuff
|
419
|
+
|
420
|
+
@function strengthen($color, $multiplier: 1, $reversed: $reversed-text) {
|
421
|
+
@if $reversed {
|
422
|
+
@return lighten($color, 20% * $multiplier);
|
423
|
+
} @else {
|
424
|
+
@return darken($color, 20% * $multiplier);
|
425
|
+
}
|
426
|
+
}
|
427
|
+
|
428
|
+
@function soften($color, $multiplier: 1, $reversed: $reversed-text) {
|
429
|
+
@if $reversed {
|
430
|
+
@return darken($color, 20% * $multiplier);
|
431
|
+
} @else {
|
432
|
+
@return lighten($color, 20% * $multiplier);
|
433
|
+
}
|
434
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
!!! 5
|
2
|
+
%html( lang="en" )
|
3
|
+
%head
|
4
|
+
%meta( charset="utf-8" )
|
5
|
+
%title= data.config.title
|
6
|
+
/[if le IE 9]
|
7
|
+
%script( src="http://html5shiv.googlecode.com/svn/trunk/html5.js" )
|
8
|
+
%link( rel="stylesheet" href="#{uri 'theme/screen.css'}" type="text/css" media="screen" charset="utf-8")
|
9
|
+
%script( src="#{uri 'theme/scripts/app.js'}" )
|
10
|
+
%body
|
11
|
+
.row
|
12
|
+
.col.span-12
|
13
|
+
%header
|
14
|
+
%h1= data.config.title
|
15
|
+
%h4= data.config.tagline
|
16
|
+
.row
|
17
|
+
.col.span-12
|
18
|
+
%nav
|
19
|
+
%ul
|
20
|
+
%li
|
21
|
+
%a(href="#{uri 'index.html'}") Home
|
22
|
+
%article
|
23
|
+
.row
|
24
|
+
.col.span-8
|
25
|
+
%section
|
26
|
+
= content
|
27
|
+
.col.span-4
|
28
|
+
%aside
|
29
|
+
= render 'sidebar'
|
30
|
+
.row
|
31
|
+
.col.span-12
|
32
|
+
%footer
|
33
|
+
= copyright_years 2011
|
data/lib/gumdrop.rb
CHANGED
@@ -5,18 +5,20 @@ require 'active_support/all'
|
|
5
5
|
DEFAULT_OPTIONS= {
|
6
6
|
:cache_data => false,
|
7
7
|
:relative_paths => true,
|
8
|
+
:auto_run => false,
|
8
9
|
:root => "."
|
9
10
|
}
|
10
11
|
|
11
12
|
module Gumdrop
|
12
13
|
|
13
|
-
autoload :HashObject, "gumdrop/hash_object"
|
14
|
-
autoload :VERSION, "gumdrop/version"
|
15
|
-
autoload :ViewHelpers, "gumdrop/view_helpers"
|
16
14
|
autoload :Context, "gumdrop/context"
|
17
15
|
autoload :Content, "gumdrop/content"
|
18
|
-
autoload :Server, "gumdrop/server"
|
19
16
|
autoload :Generator, "gumdrop/generator"
|
17
|
+
autoload :HashObject, "gumdrop/hash_object"
|
18
|
+
autoload :Server, "gumdrop/server"
|
19
|
+
autoload :Utils, "gumdrop/utils"
|
20
|
+
autoload :VERSION, "gumdrop/version"
|
21
|
+
autoload :ViewHelpers, "gumdrop/view_helpers"
|
20
22
|
|
21
23
|
class << self
|
22
24
|
|
@@ -33,17 +35,17 @@ module Gumdrop
|
|
33
35
|
require 'view_helpers'
|
34
36
|
end
|
35
37
|
|
36
|
-
@site= Hash.new {|h,k| h[k]= nil }
|
37
|
-
@layouts= Hash.new {|h,k| h[k]= nil }
|
38
|
-
@generators= Hash.new {|h,k| h[k]= nil }
|
39
|
-
@partials= Hash.new {|h,k| h[k]= nil }
|
40
|
-
@root_path= root.split '/'
|
41
|
-
@source_path= src.split '/'
|
38
|
+
@site = Hash.new {|h,k| h[k]= nil }
|
39
|
+
@layouts = Hash.new {|h,k| h[k]= nil }
|
40
|
+
@generators = Hash.new {|h,k| h[k]= nil }
|
41
|
+
@partials = Hash.new {|h,k| h[k]= nil }
|
42
|
+
@root_path = root.split '/'
|
43
|
+
@source_path = src.split '/'
|
42
44
|
|
43
45
|
# Scan
|
44
46
|
#puts "Running in: #{root}"
|
45
47
|
Dir.glob("#{src}/**/*", File::FNM_DOTMATCH).each do |path|
|
46
|
-
unless File.directory? path or File.basename(path) == '.DS_Store'
|
48
|
+
unless File.directory? path or File.basename(path) == '.DS_Store' # should be smarter about this?
|
47
49
|
file_path = (path.split('/') - @root_path).join '/'
|
48
50
|
node= Content.new(file_path)
|
49
51
|
@site[node.to_s]= node
|
@@ -76,17 +78,7 @@ module Gumdrop
|
|
76
78
|
puts "Done."
|
77
79
|
end
|
78
80
|
end
|
79
|
-
|
80
|
-
end
|
81
81
|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
Gumdrop.config= Gumdrop::HashObject.new(DEFAULT_OPTIONS)
|
86
|
-
|
87
|
-
# require "#{base}/gumdrop/version.rb"
|
88
|
-
# require "#{base}/gumdrop/view_helpers.rb"
|
89
|
-
# require "#{base}/gumdrop/context.rb"
|
90
|
-
# require "#{base}/gumdrop/content.rb"
|
91
|
-
# require "#{base}/gumdrop/server.rb"
|
92
|
-
# require "#{base}/gumdrop/generator.rb"
|
82
|
+
Gumdrop.config= Gumdrop::HashObject.new(DEFAULT_OPTIONS)
|
83
|
+
|
84
|
+
end
|
data/lib/gumdrop/cli.rb
CHANGED
data/lib/gumdrop/server.rb
CHANGED
@@ -1,72 +1,51 @@
|
|
1
|
+
# Rework this to be nicer.. Extend Sintra::Base
|
2
|
+
|
3
|
+
require 'sinatra/base'
|
4
|
+
|
1
5
|
module Gumdrop
|
2
|
-
|
3
|
-
module Server
|
4
|
-
|
5
|
-
class << self
|
6
|
-
|
7
|
-
def start(opts={})
|
8
|
-
# Opts
|
9
|
-
opts.reverse_merge! :auto_run => true, :cache_data => false
|
10
|
-
Gumdrop.config.merge! opts
|
11
6
|
|
12
|
-
|
7
|
+
class Server < Sinatra::Base
|
13
8
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
Gumdrop.site= Gumdrop.layouts= Gumdrop.generators= Hash.new do |hash, key|
|
26
|
-
templates= Dir["source/**/#{key}*"]
|
27
|
-
if templates.length > 0
|
28
|
-
Content.new( templates[0] )
|
29
|
-
else
|
30
|
-
puts "NOT FOUND: #{key}"
|
31
|
-
nil
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
Gumdrop.partials= Hash.new do |hash, key|
|
36
|
-
templates= Dir["source/**/_#{key}*"]
|
37
|
-
if templates.length > 0
|
38
|
-
Content.new( templates[0] )
|
39
|
-
else
|
40
|
-
puts "NOT FOUND: #{key}"
|
41
|
-
nil
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
content= Content.new matches[0]
|
46
|
-
if content.useLayout?
|
47
|
-
content_type :css if content.ext == '.css' # Meh?
|
48
|
-
content_type :js if content.ext == '.js' # Meh?
|
49
|
-
content_type :xml if content.ext == '.xml' # Meh?
|
50
|
-
content.render
|
51
|
-
else
|
52
|
-
send_file matches[0]
|
53
|
-
end
|
54
|
-
else
|
55
|
-
puts "NOT FOUND: #{file_path}"
|
56
|
-
"#{file_path} Not Found"
|
57
|
-
end
|
58
|
-
end
|
9
|
+
set :port, Gumdrop.config.port if Gumdrop.config.port
|
10
|
+
|
11
|
+
get '/' do
|
12
|
+
redirect '/index.html'
|
13
|
+
end
|
14
|
+
|
15
|
+
get '/*' do
|
16
|
+
file_path= params[:splat].join('/')
|
17
|
+
matches= Dir["source/#{file_path}*"]
|
18
|
+
if matches.length > 0
|
59
19
|
|
60
|
-
|
61
|
-
|
20
|
+
Gumdrop.site= Gumdrop.layouts= Gumdrop.generators= Utils.content_hash("source/**/")
|
21
|
+
Gumdrop.partials= Utils.content_hash("source/**/_")
|
22
|
+
|
23
|
+
content= Content.new matches[0]
|
24
|
+
if content.useLayout?
|
25
|
+
content_type :css if content.ext == '.css' # Meh?
|
26
|
+
content_type :js if content.ext == '.js' # Meh?
|
27
|
+
content_type :xml if content.ext == '.xml' # Meh?
|
28
|
+
content.render
|
62
29
|
else
|
63
|
-
|
30
|
+
send_file matches[0]
|
64
31
|
end
|
32
|
+
else
|
33
|
+
puts "NOT FOUND: #{file_path}"
|
34
|
+
"#{file_path} Not Found"
|
65
35
|
end
|
66
|
-
|
67
36
|
end
|
68
37
|
|
69
|
-
|
38
|
+
if Gumdrop.config.auto_run
|
39
|
+
run!
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.start(opts={})
|
43
|
+
# Options
|
44
|
+
opts.reverse_merge! :auto_run => true, :cache_data => false
|
45
|
+
Gumdrop.config.merge! opts
|
46
|
+
::Gumdrop::Server
|
47
|
+
end
|
48
|
+
|
70
49
|
end
|
71
|
-
|
50
|
+
|
72
51
|
end
|
@@ -20,7 +20,8 @@ end
|
|
20
20
|
|
21
21
|
desc "Run development server"
|
22
22
|
task :serve do
|
23
|
-
Gumdrop
|
23
|
+
Gumdrop.config.auto_run= true
|
24
|
+
Gumdrop::Server
|
24
25
|
end
|
25
26
|
|
26
27
|
desc "Syncs with public server using rsync (if configured)"
|
@@ -29,4 +30,13 @@ task :sync do
|
|
29
30
|
puts "Running:\n#{cmd}\n"
|
30
31
|
system(cmd)
|
31
32
|
puts "Done."
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "Outputs the Gumdrop version"
|
36
|
+
task :version do
|
37
|
+
puts Gumdrop::VERSION
|
38
|
+
end
|
39
|
+
|
40
|
+
task :default do
|
41
|
+
`rake -T`
|
32
42
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
module Gumdrop
|
3
|
+
|
4
|
+
module Utils
|
5
|
+
|
6
|
+
def self.content_hash(base_path)
|
7
|
+
Hash.new do |hash, key|
|
8
|
+
templates= Dir["#{base_path}#{key}*"]
|
9
|
+
if templates.length > 0
|
10
|
+
Content.new( templates[0] )
|
11
|
+
else
|
12
|
+
puts "NOT FOUND: #{key}"
|
13
|
+
nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
data/lib/gumdrop/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gumdrop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-07-22 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: sinatra
|
16
|
-
requirement: &
|
16
|
+
requirement: &70163031231440 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70163031231440
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: tilt
|
27
|
-
requirement: &
|
27
|
+
requirement: &70163031231020 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70163031231020
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: active_support
|
38
|
-
requirement: &
|
38
|
+
requirement: &70163031230600 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70163031230600
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: trollop
|
49
|
-
requirement: &
|
49
|
+
requirement: &70163031230180 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70163031230180
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: haml
|
60
|
-
requirement: &
|
60
|
+
requirement: &70163031229760 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70163031229760
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: sass
|
71
|
-
requirement: &
|
71
|
+
requirement: &70163031229340 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,7 +76,7 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70163031229340
|
80
80
|
description: A simple cms/prototyping tool.
|
81
81
|
email: matt@elucidata.net
|
82
82
|
executables:
|
@@ -92,6 +92,17 @@ files:
|
|
92
92
|
- Rakefile
|
93
93
|
- Readme.md
|
94
94
|
- bin/gumdrop
|
95
|
+
- examples/simple/Gemfile
|
96
|
+
- examples/simple/Rakefile
|
97
|
+
- examples/simple/config.ru
|
98
|
+
- examples/simple/data/config.yml
|
99
|
+
- examples/simple/lib/view_helpers.rb
|
100
|
+
- examples/simple/source/favicon.ico
|
101
|
+
- examples/simple/source/index.html.erb
|
102
|
+
- examples/simple/source/theme/screen.css.scss
|
103
|
+
- examples/simple/source/theme/scripts/app.js.coffee
|
104
|
+
- examples/simple/source/theme/styles/_tools.scss
|
105
|
+
- examples/simple/source/theme/templates/site.template.haml
|
95
106
|
- gumdrop.gemspec
|
96
107
|
- lib/gumdrop.rb
|
97
108
|
- lib/gumdrop/cli.rb
|
@@ -112,6 +123,7 @@ files:
|
|
112
123
|
- lib/gumdrop/template/source/theme/scripts/app.js.coffee
|
113
124
|
- lib/gumdrop/template/source/theme/styles/_tools.scss
|
114
125
|
- lib/gumdrop/template/source/theme/templates/site.template.haml
|
126
|
+
- lib/gumdrop/utils.rb
|
115
127
|
- lib/gumdrop/version.rb
|
116
128
|
- lib/gumdrop/view_helpers.rb
|
117
129
|
homepage: https://github.com/darthapo/gumdrop
|