static 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +3 -1
- data/README.txt +65 -12
- data/bin/cli.rbml +69 -7
- data/bin/static +26 -4
- data/lib/collection.rb +36 -22
- data/lib/extentions/string.rb +1 -0
- data/lib/page.rb +15 -7
- data/lib/site.rb +17 -9
- data/lib/static.rb +44 -7
- data/lib/xhtml.rb +100 -16
- data/templates/disco/display +3 -1
- data/templates/disco/feed +21 -0
- data/templates/disco/link_list +1 -1
- data/templates/disco/{publish → paginate} +0 -0
- data/templates/layouts/default/contents.erbml +3 -3
- data/templates/layouts/default/copy/page.copy +4 -0
- data/templates/layouts/default/structure/default.rbml +1 -0
- data/templates/layouts/default/stylesheets/default.css +116 -42
- data/templates/site.info +0 -2
- metadata +5 -3
data/Manifest.txt
CHANGED
@@ -20,7 +20,8 @@ templates/site.info
|
|
20
20
|
templates/submenu.copy
|
21
21
|
templates/disco/attributes
|
22
22
|
templates/disco/display
|
23
|
-
templates/disco/
|
23
|
+
templates/disco/paginate
|
24
|
+
templates/disco/feed
|
24
25
|
templates/disco/link_list
|
25
26
|
templates/layouts/default/contents.erbml
|
26
27
|
templates/layouts/default/main_navigation.erbml
|
@@ -29,4 +30,5 @@ templates/layouts/default/submenu.erbml
|
|
29
30
|
templates/layouts/default/structure/default.rbml
|
30
31
|
templates/layouts/default/structure/footer.rbml
|
31
32
|
templates/layouts/default/stylesheets/default.css
|
33
|
+
templates/layouts/default/copy/page.copy
|
32
34
|
|
data/README.txt
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
static
|
1
|
+
=== static
|
2
2
|
by evan short
|
3
3
|
|
4
4
|
== DESCRIPTION:
|
@@ -11,6 +11,7 @@ paginated over a page. this allows such features as news, faqs,
|
|
11
11
|
blogs and other galleries.
|
12
12
|
|
13
13
|
== FEATURES:
|
14
|
+
|
14
15
|
- command line interface
|
15
16
|
- multiple site management
|
16
17
|
- yaml site map
|
@@ -28,19 +29,38 @@ blogs and other galleries.
|
|
28
29
|
- prompt context
|
29
30
|
- tab completion
|
30
31
|
- termios integration (or otherwise implemented command history)
|
31
|
-
- error messaging
|
32
|
+
- better error messaging
|
32
33
|
- documentation
|
33
34
|
- how layouts work
|
34
35
|
- how blueprints work
|
35
|
-
- word is out on how well it takes to switching the site map. my
|
36
|
-
own guess is not well.
|
37
36
|
- there are no specs
|
38
37
|
- ready for a re-factor
|
39
38
|
|
40
|
-
|
39
|
+
if i had to guess i would say that this will not work on windows. it
|
40
|
+
is organized for a mac, but works fine, im sure, under unix in general
|
41
|
+
i don't know that much about cygwin. i don't anticipate fixing this myself
|
42
|
+
(or even look into it) without some incentive. i will happily take patches.
|
43
|
+
|
44
|
+
== TODO:
|
45
|
+
|
46
|
+
- deal with resources (e.g. images, movies, etc)
|
47
|
+
- allow +display+ to take a block describing the layout
|
48
|
+
- command to preview in browser
|
49
|
+
- give better program hooks in the static home
|
50
|
+
- allow pages to override the default layout
|
51
|
+
- allow collections to override the default layout
|
52
|
+
- give a method to display the site map
|
53
|
+
- rename partials with underscores
|
54
|
+
- option to turn links off if current
|
55
|
+
- stop css from being overwritten when re-generating the blueprint
|
56
|
+
- simple site versioning
|
57
|
+
- css versioning
|
58
|
+
- page splitting in copy
|
59
|
+
|
60
|
+
== USAGE NOTES:
|
41
61
|
|
42
62
|
so, first thing's first open up a terminal and run static. the first
|
43
|
-
time it is run a folder called +static+ will be created in your
|
63
|
+
time it is run a folder called +static+ will be created in your <tt>~/</tt>.
|
44
64
|
in this folder your layouts and projects will be kept, along with a
|
45
65
|
few template files in <tt>.templates</tt> that will be used when
|
46
66
|
creating a site.
|
@@ -80,7 +100,19 @@ page in your site map. you may then run
|
|
80
100
|
to edit the contents of those pages. more desireably, perhaps, you may
|
81
101
|
zip this folder up and send it off to someone more suited to edit copy.
|
82
102
|
|
83
|
-
|
103
|
+
some things to note when editing copy:
|
104
|
+
|
105
|
+
- this must be a properly formatted yaml file
|
106
|
+
- use <tt>: |</tt> followed by an indented block of text to use multiline text in yaml
|
107
|
+
- use *s instead of -s to indicate list elements underneath <tt>: |</tt>s
|
108
|
+
|
109
|
+
if it is not a properly formatted yaml file, generate will simply fail. you will hardly
|
110
|
+
be given an error message, and certainly nothing helpful. it is for this reason i
|
111
|
+
suggest you check your contents files twice before sending them through the grinder.
|
112
|
+
definitely some robustness or something needed here.
|
113
|
+
given no me you will simp
|
114
|
+
|
115
|
+
anyway, next you must choose a layout.
|
84
116
|
|
85
117
|
-> layout
|
86
118
|
|
@@ -112,11 +144,18 @@ once the layout is satisfactory, running
|
|
112
144
|
|
113
145
|
will put the blueprint folder in place.
|
114
146
|
|
115
|
-
-> edit
|
147
|
+
-> edit blueprint
|
116
148
|
|
117
149
|
will take you there to edit.
|
118
150
|
|
119
|
-
|
151
|
+
to build the copy, choose a layout, and build the blueprint in one go:
|
152
|
+
|
153
|
+
-> build all
|
154
|
+
|
155
|
+
it is worth noting that the edit commands may be used at any time, not only
|
156
|
+
directly after building that particular section.
|
157
|
+
|
158
|
+
either way you get here, at this point you may generate your site by running
|
120
159
|
|
121
160
|
-> generate
|
122
161
|
|
@@ -215,18 +254,32 @@ as a lower-case symbol) as such:
|
|
215
254
|
|
216
255
|
get :page_name, :collection_name => :links
|
217
256
|
|
218
|
-
|
219
|
-
|
257
|
+
== A Note from the Author
|
258
|
+
|
259
|
+
there is much more to say, and there is no doubt that this is a first release,
|
260
|
+
but a lot of what is going on can be gleaned by looking at the stuff that is
|
261
|
+
generated by default. any questions may be directed to
|
220
262
|
|
221
263
|
evan.short @ pleasedontspam. gmail.please
|
222
264
|
|
265
|
+
suggestions and criticisms are welcome. i am aware that when things go sour
|
266
|
+
there is often no word as to what actually went wrong. you can tell me
|
267
|
+
about them if you feel so inclined, but i am of the opinion that some more
|
268
|
+
reasonable error messaging needs to happen in rbml rather than too much
|
269
|
+
more effort going into my dilligence at writing horribly nested if statements
|
270
|
+
in the cli script.
|
271
|
+
|
223
272
|
== REQUIREMENTS:
|
224
273
|
|
225
274
|
rbml v. 0.0.5.9.4.1
|
226
275
|
|
227
276
|
== INSTALL:
|
228
277
|
|
229
|
-
|
278
|
+
i looked into it briefly but found nothing about actually making a dependency
|
279
|
+
in a gem. if anyone knows how to do this, please let me know.
|
280
|
+
|
281
|
+
sudo gem install rbml
|
282
|
+
sudo gem install static
|
230
283
|
|
231
284
|
== LICENSE:
|
232
285
|
|
data/bin/cli.rbml
CHANGED
@@ -7,6 +7,24 @@ cli :name=>"static", :prompt=>"-> " do
|
|
7
7
|
puts "command not found: #{method} \nwith args: #{args.join(' ')}"
|
8
8
|
end
|
9
9
|
|
10
|
+
set :feed do |args|
|
11
|
+
flag(:new => 'n'){@new = true}
|
12
|
+
process(args)
|
13
|
+
feeds = []
|
14
|
+
name = (remaining_argument == '' ? '.' : remaining_argument)
|
15
|
+
feeds << unless @new
|
16
|
+
name = choice('please choose a collection:', items_under($active_site.home+'collections')[:folders], name)
|
17
|
+
name
|
18
|
+
else
|
19
|
+
name
|
20
|
+
end
|
21
|
+
$active_site.info['feeds'] ||= []
|
22
|
+
$active_site.info['feeds'] << feeds
|
23
|
+
$active_site.info['feeds'].flatten!.uniq!
|
24
|
+
$active_site.save_info 'site.info'
|
25
|
+
puts "add this to base/default.rbml to host:\n\t`feed :#{name}`"
|
26
|
+
end
|
27
|
+
|
10
28
|
set :start do |args|
|
11
29
|
key(:site){ @active = :site }
|
12
30
|
key(:collection){ @active = :collection }
|
@@ -14,7 +32,7 @@ cli :name=>"static", :prompt=>"-> " do
|
|
14
32
|
flag(:help => 'h'){ puts "helpdocs for 'start' go here" }
|
15
33
|
|
16
34
|
process(args)
|
17
|
-
name = (remaining_argument == '' ? '
|
35
|
+
name = (remaining_argument == '' ? request_value('please enter a name: ') : remaining_argument)
|
18
36
|
@active = ($active_site ? :collection : :site) unless @active
|
19
37
|
|
20
38
|
case @active
|
@@ -75,7 +93,11 @@ cli :name=>"static", :prompt=>"-> " do
|
|
75
93
|
if @page
|
76
94
|
paginate @page
|
77
95
|
else
|
78
|
-
$active_site.info['paginate']
|
96
|
+
if $active_site.info['paginate']
|
97
|
+
$active_site.info['paginate'].each { |page, collection| paginate page }
|
98
|
+
else
|
99
|
+
puts 'please use `assign` to assign a collection to a page before paginating'
|
100
|
+
end
|
79
101
|
end
|
80
102
|
else
|
81
103
|
puts 'please generate your blueprint before paginating'
|
@@ -115,8 +137,12 @@ cli :name=>"static", :prompt=>"-> " do
|
|
115
137
|
@collection = $active_collection.name unless @collection
|
116
138
|
@edit = [:attributes, :display]
|
117
139
|
}
|
140
|
+
flag(:entry){
|
141
|
+
@edit = :entry
|
142
|
+
}
|
118
143
|
flag(:collection => 'c'){ |name| @collection = name }
|
119
144
|
|
145
|
+
|
120
146
|
@edit = []
|
121
147
|
process args
|
122
148
|
file = remaining_argument
|
@@ -124,6 +150,10 @@ cli :name=>"static", :prompt=>"-> " do
|
|
124
150
|
|
125
151
|
if $active_site
|
126
152
|
case
|
153
|
+
when @edit == :entry
|
154
|
+
@collection ||= $active_collection
|
155
|
+
file ||= :last
|
156
|
+
puts 'getting ready to edit an entry'
|
127
157
|
when @collection
|
128
158
|
@edit.each { |item|
|
129
159
|
puts "opening #{@collection}'s attributes"
|
@@ -219,19 +249,19 @@ cli :name=>"static", :prompt=>"-> " do
|
|
219
249
|
flag(:force => 'f'){ @force = true }
|
220
250
|
process args
|
221
251
|
@active = :contents unless @active
|
252
|
+
set_layout(choice('please choose a layout:', items_under($ENV['LAYOUT_HOME'])[:folders]), false) unless $active_site.info['layout']
|
222
253
|
case @active
|
223
254
|
when :contents then
|
224
255
|
destroy $active_site.home+'contents' if @force
|
225
|
-
$active_site.build(:contents)
|
256
|
+
$active_site.build(:contents)
|
226
257
|
when :blueprint then
|
227
258
|
destroy $active_site.home+'blueprint' if @force
|
228
|
-
$active_site.
|
259
|
+
$active_site.build(:blueprint)
|
229
260
|
when :all then
|
230
|
-
destroy $active_site.home+'blueprint' if @force
|
261
|
+
destroy $active_site.home+'blueprint' if @force and not make_sure('do you want to destroy the blueprints?', 'N', 'y')
|
231
262
|
destroy $active_site.home+'contents' if @force and not make_sure('do you want to destroy the contents?', 'N', 'y')
|
232
263
|
$active_site.build(:contents)
|
233
|
-
$active_site.
|
234
|
-
$active_site.build(:blueprint) unless exists? :folder, $active_site.home+'blueprint'
|
264
|
+
$active_site.build(:blueprint)
|
235
265
|
end
|
236
266
|
end
|
237
267
|
|
@@ -239,7 +269,39 @@ cli :name=>"static", :prompt=>"-> " do
|
|
239
269
|
system 'clear'
|
240
270
|
end
|
241
271
|
|
272
|
+
set :publish do |args|
|
273
|
+
flag(:user => 'u'){ |value|
|
274
|
+
$active_site.info['user_name'] = value || request_value( 'username: ' )
|
275
|
+
}
|
276
|
+
flag(:address => 'a'){ |value|
|
277
|
+
$active_site.info['server'] ||= {}
|
278
|
+
$active_site.info['server']['address'] = value || request_value('server address: ' )
|
279
|
+
}
|
280
|
+
flag(:dir => 'd'){ |value|
|
281
|
+
$active_site.info['server'] ||= {}
|
282
|
+
$active_site.info['server']['location'] = value || request_value( 'site location on server: ' )
|
283
|
+
}
|
284
|
+
flag(:link => 'l'){ |value|
|
285
|
+
$active_site.info['server'] ||= {}
|
286
|
+
$active_site.info['server']['link'] = value || request_value( 'web address of site home: ' )
|
287
|
+
}
|
288
|
+
flag(:blank => 'b'){ @blank = true }
|
289
|
+
process args
|
290
|
+
$active_site.info['user_name'] ||= request_value 'username: '
|
291
|
+
$active_site.info['server'] ||= {}
|
292
|
+
$active_site.info['server']['address'] ||= request_value 'server address: '
|
293
|
+
$active_site.info['server']['directory'] ||= request_value 'directory on server: '
|
294
|
+
$active_site.info['server']['link'] ||= request_value('web address of site home: ' ).as_http
|
295
|
+
$active_site.info['server']['link'] = $active_site.info['server']['link'].as_http
|
296
|
+
|
297
|
+
$active_site.save_info 'site.info'
|
298
|
+
publish_feeds @blank
|
299
|
+
end
|
300
|
+
|
242
301
|
set :quit do
|
243
302
|
exit
|
244
303
|
end
|
304
|
+
set :exit do
|
305
|
+
exit
|
306
|
+
end
|
245
307
|
end
|
data/bin/static
CHANGED
@@ -49,10 +49,33 @@ include Static
|
|
49
49
|
::Rbml::Processor.run(File.dirname(__FILE__)+'/cli.rbml')
|
50
50
|
|
51
51
|
__END__
|
52
|
-
$active_site = load_site('
|
53
|
-
|
52
|
+
$active_site = load_site('static')
|
53
|
+
destroy $active_site.site_loc
|
54
|
+
$active_site.generate
|
55
|
+
set_layout($active_site.info['layout'], false)
|
56
|
+
$active_site.build :contents
|
57
|
+
$active_site.build :blueprint
|
58
|
+
$active_site.info['layout']='default'
|
59
|
+
$active_site.info['username'] = 'e'
|
60
|
+
$active_site.info['server'] = {}
|
61
|
+
$active_site.info['server']['link'] = 'http://newqdev.com'
|
62
|
+
$active_site.info['server']['address'] = 'newqdev.com'
|
63
|
+
$active_site.info['server']['directory'] = '~/newqdev.com'
|
64
|
+
$active_collection = $active_site.start_collection 'news', ['date', 'headline', 'entry']
|
65
|
+
$active_site.generate
|
66
|
+
destroy $active_site.site_loc
|
67
|
+
$active_site.generate
|
68
|
+
#system "vi #{$active_collection.home}attributes"
|
69
|
+
5.times do
|
70
|
+
puts $active_collection.add_entry
|
71
|
+
$active_collection.save_listing
|
72
|
+
gets
|
73
|
+
end
|
74
|
+
$active_site.info['feeds'] = ['news']
|
75
|
+
$active_site.save_info 'site.info'
|
76
|
+
publish_feeds true
|
54
77
|
|
55
|
-
|
78
|
+
__END__
|
56
79
|
#system "#{$ENV['EDITOR']} #{$active_site.home}"
|
57
80
|
paginate :the_copy
|
58
81
|
destroy $active_site.site_loc
|
@@ -61,7 +84,6 @@ $active_site.generate
|
|
61
84
|
$active_site = start_site('static')
|
62
85
|
$active_site.load_info
|
63
86
|
$active_site.load_pages
|
64
|
-
$active_site.start_collection 'news', ['date', 'headline', 'entry']
|
65
87
|
$active_site.start_collection 'blog', ['date', 'title', 'entry']
|
66
88
|
|
67
89
|
$active_site.build(:contents)
|
data/lib/collection.rb
CHANGED
@@ -21,16 +21,20 @@ class Collection
|
|
21
21
|
c = self.new base, where, name
|
22
22
|
c.attrs << attrs
|
23
23
|
c.attrs.flatten!
|
24
|
-
c.write_attribute_file
|
24
|
+
c.write_attribute_file
|
25
25
|
c.load_attributes
|
26
|
-
c.write_display_file
|
26
|
+
c.write_display_file rescue puts $!
|
27
|
+
c.write_feed_file
|
27
28
|
copy base+'.templates/disco/link_list', c.home
|
28
|
-
c.
|
29
|
+
c.write_paginate_file
|
29
30
|
c.write '', c.home+'listing'
|
30
31
|
c.mkdir c.home+'entries'
|
31
32
|
c
|
32
33
|
end
|
33
34
|
|
35
|
+
def display_file
|
36
|
+
home+'display'
|
37
|
+
end
|
34
38
|
def self.collection_exists?(base, where, name)
|
35
39
|
exists?(:folder, base) && exists?(:folder, where+'collections/'+name) && exists?(:file, where+"collections/#{name}/attributes")
|
36
40
|
end
|
@@ -45,7 +49,8 @@ class Collection
|
|
45
49
|
end
|
46
50
|
|
47
51
|
def save_listing
|
48
|
-
|
52
|
+
File.open(home+'listing', 'w') { |yf| YAML.dump(@listing, yf) }
|
53
|
+
@listing
|
49
54
|
end
|
50
55
|
|
51
56
|
def sanitize_listing
|
@@ -53,34 +58,32 @@ class Collection
|
|
53
58
|
@listing.each { |item|
|
54
59
|
entry = load_entry(item)
|
55
60
|
add = false
|
61
|
+
attrs = File.open( home+'attributes' ) { |yf| @attrs = YAML::load( yf )[name] }
|
56
62
|
entry.each { |key, value|
|
57
|
-
|
63
|
+
if attrs.include? key
|
64
|
+
add = true if value and not attrs[key]
|
65
|
+
end
|
58
66
|
}
|
59
67
|
tmp << item if add
|
60
68
|
}
|
61
69
|
@listing = tmp
|
70
|
+
save_listing
|
62
71
|
end
|
63
72
|
|
64
73
|
def write_attribute_file
|
65
|
-
write_template base+'.templates/disco/attributes', attributes
|
74
|
+
write_template base+'.templates/disco/attributes', home+'attributes'
|
66
75
|
end
|
67
76
|
def write_display_file
|
68
|
-
write_template base+'.templates/disco/display',
|
69
|
-
end
|
70
|
-
def write_publish_file
|
71
|
-
write_template base+'.templates/disco/publish', publish
|
77
|
+
write_template base+'.templates/disco/display', home+'display'
|
72
78
|
end
|
73
|
-
def
|
74
|
-
write_template base+'.templates/disco/
|
75
|
-
end
|
76
|
-
def publish
|
77
|
-
home+'publish'
|
79
|
+
def write_feed_file
|
80
|
+
write_template base+'.templates/disco/feed', home+'feed'
|
78
81
|
end
|
79
|
-
def
|
80
|
-
home+'
|
82
|
+
def write_paginate_file
|
83
|
+
write_template base+'.templates/disco/paginate', home+'paginate'
|
81
84
|
end
|
82
|
-
def
|
83
|
-
home+'
|
85
|
+
def write_link_list_file
|
86
|
+
write_template base+'.templates/disco/link_list', home+'link_list'
|
84
87
|
end
|
85
88
|
def load_attributes
|
86
89
|
File.open( home+'attributes' ) { |yf| @attrs = YAML::load( yf )[name] }
|
@@ -88,7 +91,7 @@ class Collection
|
|
88
91
|
def load_listing
|
89
92
|
File.open( home+'listing' ) { |yf| @listing = YAML::load( yf ) }
|
90
93
|
@listing ||= []
|
91
|
-
@listing = @listing.sort.reverse
|
94
|
+
@listing = @listing.sort{|x, y| x[:id] <=> y[:id]}.reverse
|
92
95
|
end
|
93
96
|
def load_entries
|
94
97
|
listing.each {|entry| entries << load_entry(entry) }
|
@@ -96,17 +99,28 @@ class Collection
|
|
96
99
|
end
|
97
100
|
def load_entry(file)
|
98
101
|
tmp = nil
|
99
|
-
File.open( home+'entries/'+file ) {|yf| tmp = YAML::load( yf )[name].merge(
|
102
|
+
File.open( home+'entries/'+file[:id].to_s ) {|yf| tmp = YAML::load( yf )[name].merge(file)} rescue puts "loading entry -- #{$!}"
|
100
103
|
tmp
|
101
104
|
end
|
102
105
|
def add_entry title=nil
|
103
106
|
timestamp = Time.now.to_i.to_s
|
104
107
|
title ||= timestamp
|
105
108
|
load_listing
|
106
|
-
listing.unshift timestamp
|
109
|
+
listing.unshift({:id => timestamp, :publish => true})
|
107
110
|
write_template home+'attributes', home+'entries/'+timestamp
|
108
111
|
return home+'entries/'+timestamp
|
109
112
|
end
|
113
|
+
def publish
|
114
|
+
tmp = {}
|
115
|
+
listing.each {|e|
|
116
|
+
if e[:publish] and not e[:publish].kind_of? String
|
117
|
+
e[:publish] = Time.now.to_s
|
118
|
+
end
|
119
|
+
}
|
120
|
+
save_listing
|
121
|
+
end
|
122
|
+
|
123
|
+
|
110
124
|
end
|
111
125
|
|
112
126
|
|
data/lib/extentions/string.rb
CHANGED
@@ -6,5 +6,6 @@ class String
|
|
6
6
|
def as_ext; self[0,0]='.' unless self[0,1]=='.'|| self==''; self end
|
7
7
|
def as_file_title; self.as_file.gsub /_/, ' ' end
|
8
8
|
def filename_as_symbol; self.as_file.to_sym end
|
9
|
+
def as_http; self =~ /^http\:\/\// ? "http://#{self.gsub(/^http\:\/\//, '').as_folder}" : "http://#{self.as_folder}" end
|
9
10
|
end
|
10
11
|
|
data/lib/page.rb
CHANGED
@@ -18,6 +18,12 @@
|
|
18
18
|
pages << self
|
19
19
|
end
|
20
20
|
|
21
|
+
def included_in? page_name, all_levels=false
|
22
|
+
ans = (file_name == page_name.to_s or Page.find(page_name).subs.include? name)
|
23
|
+
subs.each { |sub| ans = Page.find(sub.as_file).included_in?(page_name, all_levels) } if all_levels and !ans
|
24
|
+
ans
|
25
|
+
end
|
26
|
+
|
21
27
|
def file_name
|
22
28
|
name.as_file
|
23
29
|
end
|
@@ -40,16 +46,16 @@
|
|
40
46
|
if collection
|
41
47
|
Generator.class_eval { cattr_accessor :include_text }
|
42
48
|
Generator.include_text = File.read home+"blueprint/#{page_location}_#{collection_name}_for_#{file_name}/#{collection.first}"
|
43
|
-
write ::Rbml::Processor.new.instance_eval(File.read(home+'
|
49
|
+
write ::Rbml::Processor.new.instance_eval(File.read(home+'base/default.rbml')), in_site_location+'index.html'
|
44
50
|
puts 'writing the index'
|
45
51
|
collection.each { |col|
|
46
52
|
Generator.include_text = File.read home+"blueprint/#{page_location}_#{collection_name}_for_#{file_name}/#{col}"
|
47
|
-
write ::Rbml::Processor.new.instance_eval(File.read(home+'
|
53
|
+
write ::Rbml::Processor.new.instance_eval(File.read(home+'base/default.rbml')), in_site_location+col+'.html'
|
48
54
|
puts "writing the entry for #{col}"
|
49
55
|
}
|
50
56
|
Generator.class_eval { @include_text = nil }
|
51
57
|
else
|
52
|
-
write ::Rbml::Processor.new.instance_eval(File.read(home+'
|
58
|
+
write ::Rbml::Processor.new.instance_eval(File.read(home+'base/default.rbml')), in_site_location+'index.html'
|
53
59
|
end
|
54
60
|
puts "writing #{in_site_location}index.html"
|
55
61
|
end
|
@@ -81,7 +87,7 @@
|
|
81
87
|
end
|
82
88
|
|
83
89
|
def load_contents
|
84
|
-
File.open(home+ 'contents/'+page_location+name.as_file+'.copy') { |yf| @contents = YAML::load( yf ) }
|
90
|
+
File.open(home+ 'contents/'+page_location+name.as_file+'.copy') { |yf| @contents = YAML::load( yf ) } rescue puts $!
|
85
91
|
end
|
86
92
|
|
87
93
|
def extentions
|
@@ -96,14 +102,16 @@
|
|
96
102
|
page_path = home+type.to_s+'/'+page_location
|
97
103
|
mkdir page_path unless exists? :folder, page_path
|
98
104
|
template_file = case type
|
99
|
-
when :contents : {:main => home+'
|
105
|
+
when :contents : {:main => home+'layout/copy/page.copy', :sub => home+'layout/copy/submenu.copy'}
|
100
106
|
when :blueprint : {:main => home+'layout/contents.erbml', :sub => home+'layout/submenu.erbml'}
|
101
107
|
end
|
102
108
|
|
103
109
|
if subs && subs.kind_of?(Array)
|
104
110
|
unless exists?(:file, page_path+'submenu'+extentions[type])
|
105
|
-
|
106
|
-
|
111
|
+
unless type == :contents
|
112
|
+
write_template template_file[:sub], page_path+'_submenu'+extentions[type]
|
113
|
+
puts "writing #{page_path}submenu#{extentions[type]}"
|
114
|
+
end
|
107
115
|
else
|
108
116
|
puts "#{page_path}submenu#{extentions[type]} already exists"
|
109
117
|
end
|
data/lib/site.rb
CHANGED
@@ -30,9 +30,6 @@ class Site
|
|
30
30
|
site.setup_location 'project_info'
|
31
31
|
site.write_template templates+'site.map', site.path+'site.map'
|
32
32
|
site.write_template templates+'site.info', site.path+'site.info'
|
33
|
-
site.setup_location '.templates'
|
34
|
-
site.copy templates+'page.copy', site.path+'page.copy'
|
35
|
-
site.copy templates+'submenu.copy', site.path+'submenu.copy'
|
36
33
|
site.load_info
|
37
34
|
site
|
38
35
|
end
|
@@ -114,15 +111,23 @@ class Site
|
|
114
111
|
end
|
115
112
|
|
116
113
|
def build_header
|
117
|
-
|
118
|
-
write_template home+"layout/
|
119
|
-
write_template home+"layout/main_navigation.erbml", home+'layout/structure/main_navigation.rbml'
|
114
|
+
write_template home+"layout/page_head.erbml", home+'base/page_head.rbml'
|
115
|
+
write_template home+"layout/main_navigation.erbml", home+'base/main_navigation.rbml'
|
120
116
|
end
|
121
117
|
|
122
118
|
def build(type)
|
123
119
|
setup_location(type.to_s)
|
124
120
|
if type == :blueprint
|
125
121
|
@main_links = []
|
122
|
+
copy home+'layout/structure', home+'base'
|
123
|
+
begin
|
124
|
+
copy home+'layout/stylesheets', home+'base/stylesheets'
|
125
|
+
puts 'copied stylesheets'
|
126
|
+
rescue
|
127
|
+
puts "There are no stylesheets associated with this layout"
|
128
|
+
end
|
129
|
+
copy home+'layout/resources', home+'base/resources' rescue puts "There are no resources associated with this layout"
|
130
|
+
copy home+'layout/scripts', home+'base/scripts' rescue puts "There are no scripts associated with this layout"
|
126
131
|
load_main_links
|
127
132
|
build_header
|
128
133
|
end
|
@@ -131,13 +136,16 @@ puts info.inspect
|
|
131
136
|
|
132
137
|
def generate
|
133
138
|
mkdir site_loc unless exists? :folder, site_loc
|
134
|
-
copy home+'
|
139
|
+
copy home+'base/stylesheets', site_loc rescue puts $!
|
140
|
+
copy home+'base/resources', site_loc rescue puts $!
|
141
|
+
copy home+'base/scripts', site_loc rescue puts $!
|
135
142
|
pages.each do |page|
|
136
143
|
page.stylesheets = []
|
137
144
|
Generator.load(page)
|
138
145
|
page.load_contents
|
139
|
-
page.stylesheets << info['stylesheets']
|
140
|
-
page.generate info['paginate'] ? info['paginate'][page.file_name] : nil
|
146
|
+
page.stylesheets << info['stylesheets'] if info['stylesheets']
|
147
|
+
page.generate info['paginate'] ? info['paginate'][page.file_name] : nil rescue puts "site generator -- #{$!}"
|
148
|
+
Generator.unload
|
141
149
|
end
|
142
150
|
end
|
143
151
|
end
|
data/lib/static.rb
CHANGED
@@ -27,7 +27,7 @@ $ENV = {}
|
|
27
27
|
$ENV['EDITOR'] = 'vi'
|
28
28
|
|
29
29
|
module Static
|
30
|
-
VERSION = '0.0
|
30
|
+
VERSION = '0.1.0'
|
31
31
|
include FileBase
|
32
32
|
|
33
33
|
def start_site name
|
@@ -62,6 +62,7 @@ module Static
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def paginate page, publishing_to=nil
|
65
|
+
return nil unless page
|
65
66
|
@page = Page.find(page)
|
66
67
|
Generator.load(load_collection($active_site.info['paginate'][@page.file_name]))
|
67
68
|
Generator.class_eval {
|
@@ -73,24 +74,60 @@ module Static
|
|
73
74
|
@tmp_entries ||= self.act_on.entries.dup
|
74
75
|
@tmp_entries
|
75
76
|
end
|
77
|
+
def self.entry_bank= what
|
78
|
+
@tmp_entries = what
|
79
|
+
end
|
76
80
|
}
|
77
81
|
publishing_to ||= "#{@page.home}blueprint/#{@page.page_location}_#{Generator.act_on.name}_for_#{@page.file_name}/"
|
78
82
|
mkdir publishing_to, :force
|
79
83
|
@page_list = []
|
80
|
-
|
84
|
+
Generator.act_on.instance_eval { def level; @level end; def level=(what); @level=what end }
|
85
|
+
Generator.entry_bank
|
86
|
+
while(Generator.entry_bank)
|
81
87
|
rbml = ::Rbml::Processor.new
|
82
88
|
#Generator.contents = {:id => entry_bank.first[:id]}
|
83
|
-
publish_file = File.read(Generator.act_on.home+'
|
89
|
+
publish_file = File.read(Generator.act_on.home+'paginate')
|
84
90
|
id = Generator.entry_bank.first[:id]
|
85
91
|
puts "writing partial for #{id}"
|
86
|
-
|
92
|
+
hold = Generator.entry_bank.dup
|
93
|
+
begin
|
94
|
+
write rbml.render('xhtml', rbml.load_language('xhtml'), :partial => true) { eval(publish_file) }, publishing_to+id
|
95
|
+
rescue
|
96
|
+
Generator.entry_bank = hold
|
97
|
+
write rbml.render('xhtml', rbml.load_language('xhtml'), :format => false, :partial => true) { eval(publish_file) }, publishing_to+id rescue puts $!
|
98
|
+
end
|
87
99
|
@page_list << id
|
100
|
+
File.open(publishing_to+'page.list', 'w') { |yf| YAML.dump(@page_list, yf) }
|
101
|
+
write_template Generator.act_on.home+'link_list', "#{@page.home}blueprint/#{@page.page_location}/_#{@page.file_name}_#{Generator.act_on.name}_links.rbml" rescue puts "writing template -- #{$!}"
|
102
|
+
puts "writing link list _#{@page.file_name}_#{Generator.act_on.name}_links"
|
88
103
|
end
|
89
|
-
File.open(publishing_to+'page.list', 'w') { |yf| YAML.dump(@page_list, yf) }
|
90
|
-
write_template Generator.act_on.home+'link_list', "#{@page.home}blueprint/#{@page.page_location}/#{@page.file_name}_#{Generator.act_on.name}_links.rbml"
|
91
|
-
puts "writing link list #{@page.file_name}_#{Generator.act_on.name}_links"
|
92
104
|
@page_list = nil
|
105
|
+
Generator.act_on.instance_eval { @level = nil; undef :level; undef :level=}
|
93
106
|
Generator.unload
|
94
107
|
end
|
108
|
+
|
109
|
+
def publish_feeds blank = nil
|
110
|
+
$active_site.info['feeds'].each do |name|
|
111
|
+
col = load_collection(name) #Generator.load(name).inspect
|
112
|
+
col.publish
|
113
|
+
Generator.load col
|
114
|
+
Generator.act_on.instance_eval {
|
115
|
+
def level; @level end; def level=(what); @level=what end
|
116
|
+
def last_built
|
117
|
+
date = ''
|
118
|
+
listing.each {|item| date = item[:publish] if item[:publish] and not date}
|
119
|
+
date
|
120
|
+
end
|
121
|
+
}
|
122
|
+
write ::Rbml::Processor.run(col.home+'feed'), $active_site.site_loc.as_folder+name+'.rss' rescue puts $!
|
123
|
+
puts $active_site.site_loc.as_folder+name+'.rss'
|
124
|
+
Generator.act_on.instance_eval { @level = nil; undef :level; undef :level=}
|
125
|
+
Generator.unload
|
126
|
+
end if $active_site.info['feeds']
|
127
|
+
unless blank
|
128
|
+
puts "rsync -avz #{$active_site.site_loc}/* #{$active_site.info['user_name']}@#{$active_site.info['server']['address']}:#{$active_site.info['server']['directory']}"
|
129
|
+
system "rsync -avz #{$active_site.site_loc}/* #{$active_site.info['user_name']}@#{$active_site.info['server']['address']}:#{$active_site.info['server']['directory']}"
|
130
|
+
end
|
131
|
+
end
|
95
132
|
end
|
96
133
|
|
data/lib/xhtml.rb
CHANGED
@@ -10,10 +10,13 @@ module Inclusion
|
|
10
10
|
end
|
11
11
|
tmp+'.rbml'
|
12
12
|
end
|
13
|
+
def partial from, what
|
14
|
+
get from, "_#{what}"
|
15
|
+
end
|
13
16
|
def get from, what
|
14
17
|
case from
|
15
18
|
when :base
|
16
|
-
run_file Generator.act_on.home+"
|
19
|
+
run_file Generator.act_on.home+"base/#{what}.rbml"
|
17
20
|
when :page
|
18
21
|
run_file Generator.act_on.home+"blueprint/#{Generator.page_location}#{find_file_name(Generator.act_on, what)}"
|
19
22
|
else
|
@@ -21,21 +24,67 @@ module Inclusion
|
|
21
24
|
end
|
22
25
|
end
|
23
26
|
|
24
|
-
def display how_many, collection, entry_bank=nil
|
27
|
+
def display how_many, collection, entry_bank=nil, &blk
|
25
28
|
col = load_collection(collection.to_s)
|
29
|
+
level = Generator.level
|
26
30
|
how_many = col.entries.size if how_many == :all
|
27
31
|
entry_bank ||= col.entries.dup
|
28
32
|
Generator.load col
|
33
|
+
Generator.act_on.instance_eval { def level; @level end; def level=(what); @level=what end }
|
34
|
+
Generator.act_on.level = level
|
29
35
|
how_many.times {
|
30
36
|
break if entry_bank.empty?
|
31
|
-
Generator.contents = entry_bank.shift
|
32
|
-
run_file
|
37
|
+
Generator.act_on.contents = entry_bank.shift
|
38
|
+
block_given? ? run_block(&blk) : run_file(Generator.act_on.display_file) rescue puts $!
|
33
39
|
}
|
40
|
+
Generator.act_on.instance_eval { @level = nil; undef :level; undef :level=}
|
34
41
|
Generator.unload
|
35
42
|
end
|
36
43
|
|
37
44
|
def include_partial
|
38
45
|
i Generator.include_text
|
46
|
+
Generator.include_text
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
module Rbml
|
51
|
+
module Language
|
52
|
+
module Doc
|
53
|
+
module Rss
|
54
|
+
def address_for what, options={}
|
55
|
+
where = options[:page] ? options[:page]+'.html' : ''
|
56
|
+
say = $active_site.info['server']['link']
|
57
|
+
$active_site.pages.each { |page|
|
58
|
+
if page.name.as_file == what.to_s
|
59
|
+
text ||= page.name
|
60
|
+
say += "#{page.in_site_link}#{where}"
|
61
|
+
end
|
62
|
+
}
|
63
|
+
say
|
64
|
+
end
|
65
|
+
|
66
|
+
def process_cdata what
|
67
|
+
what = what.to_s
|
68
|
+
exp = /\<\[.+?\]\>/
|
69
|
+
while(what =~ exp) do
|
70
|
+
what.sub!(exp) { |match|
|
71
|
+
eval(match.sub(/^\<\[/,'').sub(/\]\>$/, ''))
|
72
|
+
}
|
73
|
+
end
|
74
|
+
"<![CDATA[#{what}]]>"
|
75
|
+
end
|
76
|
+
def link_to where, text='', options={}
|
77
|
+
say=''
|
78
|
+
$active_site.pages.each { |page|
|
79
|
+
if page.name.as_file == where.to_s
|
80
|
+
text ||= page.name
|
81
|
+
say = "\"#{text}\":#{$active_site.info['server']['link']}#{page.in_site_link}"
|
82
|
+
end
|
83
|
+
}
|
84
|
+
say
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
39
88
|
end
|
40
89
|
end
|
41
90
|
|
@@ -46,20 +95,43 @@ module Rbml
|
|
46
95
|
def put_title
|
47
96
|
title(Generator.contents['title'])
|
48
97
|
end
|
98
|
+
def use_stylesheets *sheets
|
99
|
+
tmp = []
|
100
|
+
sheets.each { |s| tmp << s.to_s }
|
101
|
+
stylesheets Generator.level+'stylesheets/', tmp
|
102
|
+
end
|
103
|
+
alias :use_stylesheet :use_stylesheets
|
104
|
+
|
105
|
+
def image which, alt=nil
|
106
|
+
i "< image src='#{place}/#{which.to_s}' alt='#{alt||which.to_s}' />"
|
107
|
+
"<image src='#{Generator.level}resources/#{which.to_s}' alt='#{alt||which.to_s}' />"
|
108
|
+
end
|
109
|
+
def resource_address which
|
110
|
+
i "#{Generator.level}resources/#{which.to_s}"
|
111
|
+
"#{Generator.level}resources/#{which.to_s}"
|
112
|
+
end
|
113
|
+
def script_address which
|
114
|
+
i "#{Generator.level}scripts/#{which.to_s}"
|
115
|
+
"#{Generator.level}scripts/#{which.to_s}"
|
116
|
+
end
|
117
|
+
|
49
118
|
def put_stylesheets
|
50
119
|
styles = []
|
51
|
-
Generator.stylesheets.each{|style| styles << style}
|
52
|
-
|
120
|
+
Generator.stylesheets.each{|style| styles << style if style}
|
121
|
+
styles.empty? ? '' : stylesheets(Generator.level+'stylesheets/', styles)
|
53
122
|
end
|
54
|
-
def breadcrumbs
|
123
|
+
def breadcrumbs(join_by=nil)
|
124
|
+
join_by ||= " >> "
|
55
125
|
links = []
|
56
126
|
Generator.breadcrumbs.each {|b| links << (Generator.act_on.name.as_file==b.to_s ? Generator.act_on.name : link_to(b)) }
|
57
|
-
|
58
|
-
links.join(" >> ")
|
127
|
+
links.join(join_by)
|
59
128
|
end
|
60
129
|
def main_link_for what
|
61
130
|
link_to what
|
62
131
|
end
|
132
|
+
def feed name, title=nil
|
133
|
+
"<link rel=\"alternate\" type=\"application/rss+xml\" title=\"#{title||name.to_s}\" href=\"#{Generator.act_on.level}#{name.to_s}.rss\" />"
|
134
|
+
end
|
63
135
|
def link_to what, text=nil, options={}
|
64
136
|
where = options[:page] ? options[:page]+'.html' : ''
|
65
137
|
say=''
|
@@ -69,16 +141,22 @@ module Rbml
|
|
69
141
|
say << "<a href='#{Generator.level}#{page.in_site_link}#{where}'>#{text}</a>"
|
70
142
|
end
|
71
143
|
}
|
72
|
-
i say
|
73
144
|
say
|
74
145
|
end
|
75
|
-
def put what
|
76
|
-
|
77
|
-
|
146
|
+
def put what, options={}
|
147
|
+
t find_contents(what, options)
|
148
|
+
end
|
149
|
+
def plain_put what, options={}
|
150
|
+
find_contents(what, options)
|
78
151
|
end
|
79
|
-
def
|
80
|
-
|
81
|
-
|
152
|
+
def truncate what, how_many, options={}
|
153
|
+
options[:trail] ||= '...'
|
154
|
+
contents = find_contents(what)
|
155
|
+
contents = contents.size > how_many ? contents[0, how_many] + options[:trail] : contents
|
156
|
+
options[:textile] ? t(contents) : i(contents)
|
157
|
+
end
|
158
|
+
def find_contents what, options={}
|
159
|
+
parse_context(Generator.contents[what.to_s] || '')
|
82
160
|
end
|
83
161
|
|
84
162
|
def parse_context(what)
|
@@ -89,6 +167,12 @@ module Rbml
|
|
89
167
|
eval(match.sub(/^\<\[/,'').sub(/\]\>$/, ''))
|
90
168
|
}
|
91
169
|
end
|
170
|
+
exp = /\<!\[.+?\]\>/
|
171
|
+
while(what =~ exp) do
|
172
|
+
what.sub!(exp) { |match|
|
173
|
+
match.sub!(/^\<!\[/,'<[')
|
174
|
+
}
|
175
|
+
end
|
92
176
|
what
|
93
177
|
end
|
94
178
|
|
data/templates/disco/display
CHANGED
@@ -0,0 +1,21 @@
|
|
1
|
+
rss{
|
2
|
+
title <%=name.inspect%>
|
3
|
+
link $active_site.info['server']['link']
|
4
|
+
# description ''
|
5
|
+
language 'en-us'
|
6
|
+
pubDate Time.now.to_s
|
7
|
+
lastBuildDate Generator.last_built
|
8
|
+
docs 'http://blogs.law.harvard.edu/tech/rss'
|
9
|
+
generator 'static+rbml'
|
10
|
+
# managingEditor ''
|
11
|
+
# webMaster ''
|
12
|
+
display(5, :<%=name.as_file%>){
|
13
|
+
item {
|
14
|
+
title Generator.contents['title']
|
15
|
+
link Generator.contents['link'] if Generator.contents['link']
|
16
|
+
description { process_cdata(Generator.contents['entry']) }
|
17
|
+
pubDate Generator.contents[:publish]
|
18
|
+
guid { address_for(:<%=name.as_file%>, :page => Generator.contents[:id]) }
|
19
|
+
}
|
20
|
+
}
|
21
|
+
}
|
data/templates/disco/link_list
CHANGED
File without changes
|
@@ -1,8 +1,8 @@
|
|
1
1
|
|
2
|
+
h3{plain_put :content_head}
|
2
3
|
|
3
|
-
h3 'Main Content for <%= name %>'
|
4
|
-
<%= 'breadcrumbs' if breadcrumbs.size > 1 %>
|
5
4
|
<% if has_subs? %>
|
6
|
-
div(:id => 'submenu'){
|
5
|
+
div(:id => 'submenu'){ partial :<%=menu_title.as_file%>, :submenu }
|
7
6
|
<% end %>
|
7
|
+
<%= 'breadcrumbs' if breadcrumbs.size > 1 %>
|
8
8
|
put :contents
|
@@ -1,18 +1,23 @@
|
|
1
|
-
body
|
2
|
-
|
1
|
+
body{
|
2
|
+
font-size: 62.5%;
|
3
|
+
font-family:"Lucida Grande", Arial, Verdana, sans-serif;
|
4
|
+
margin:0;
|
5
|
+
background:#f0ecd7 url(../resources/bg.jpg) top center repeat-y;
|
3
6
|
}
|
4
7
|
|
5
8
|
#container {
|
6
|
-
|
7
|
-
|
8
|
-
margin-
|
9
|
-
margin
|
10
|
-
background
|
9
|
+
font-size:1.1em;
|
10
|
+
width: 800px;
|
11
|
+
margin-bottom: 10px;
|
12
|
+
margin: auto;
|
13
|
+
background: #fff;
|
11
14
|
}
|
12
15
|
|
13
16
|
#header {
|
14
|
-
|
17
|
+
height:75px;
|
18
|
+
background:#456;
|
15
19
|
color: #eee;
|
20
|
+
border-bottom:1px solid #ccc;
|
16
21
|
}
|
17
22
|
#header h1 {
|
18
23
|
font: 38px 'verdana', sans-serif;
|
@@ -20,57 +25,117 @@ background-color: #fff;
|
|
20
25
|
margin-left:20px;
|
21
26
|
padding:0px;
|
22
27
|
padding-top:10px;
|
28
|
+
|
23
29
|
}
|
24
30
|
|
25
|
-
#
|
31
|
+
#news_header {
|
32
|
+
font-size: 1.6em;
|
33
|
+
padding-right: 10px;
|
34
|
+
font-family:"Lucida Grande", Arial, Verdana, sans-serif;
|
35
|
+
text-align: right;
|
36
|
+
color: #eee;
|
37
|
+
background:#456;
|
38
|
+
}
|
39
|
+
.news {
|
40
|
+
float: left;
|
41
|
+
padding-right: 10px;
|
42
|
+
padding-left: 10px;
|
43
|
+
width:350px;
|
44
|
+
border:1px solid #666;
|
45
|
+
margin-top:0px;
|
46
|
+
}
|
47
|
+
|
48
|
+
.clear { clear:both; }
|
49
|
+
.right { float:right; }
|
50
|
+
.left { float:left; }
|
51
|
+
.install {
|
52
|
+
width:80%;
|
26
53
|
margin:auto;
|
27
|
-
|
28
|
-
|
54
|
+
background:#eee;
|
55
|
+
border-bottom:1px solid #333;
|
56
|
+
margin-bottom:10px;
|
57
|
+
}
|
58
|
+
.install p {
|
59
|
+
margin-left: 20px;
|
60
|
+
padding-right:20px;
|
61
|
+
}
|
62
|
+
.install pre {
|
63
|
+
margin-left: 20px;
|
64
|
+
}
|
65
|
+
.install h4 {
|
66
|
+
font-family:"Lucida Grande", Arial, Verdana, sans-serif;
|
67
|
+
margin-top: 5px;
|
68
|
+
padding-right: 20px;
|
69
|
+
background:#456;
|
70
|
+
color:#eee;
|
29
71
|
text-align:right;
|
30
|
-
margin-right:20px;
|
31
72
|
}
|
32
73
|
|
33
|
-
|
34
|
-
|
35
|
-
|
74
|
+
.news .title {
|
75
|
+
font-size: 1.5em;
|
76
|
+
font-family:"Lucida Grande", Arial, Verdana, sans-serif;
|
77
|
+
border-bottom:1px solid #333;
|
78
|
+
margin-top:5px;
|
79
|
+
background-color: #eee;
|
80
|
+
}
|
81
|
+
|
82
|
+
.news .date {
|
83
|
+
font-size: .6em;
|
84
|
+
font-family:"Lucida Grande", Arial, Verdana, sans-serif;
|
85
|
+
margin-top: 0px;
|
86
|
+
text-align: right;
|
87
|
+
}
|
88
|
+
|
89
|
+
dt {
|
90
|
+
font-family: monospace;
|
36
91
|
}
|
37
92
|
|
93
|
+
dl {
|
94
|
+
margin-left: 50px;
|
95
|
+
}
|
96
|
+
dd {
|
97
|
+
margin-bottom: 10px;
|
98
|
+
}
|
99
|
+
|
100
|
+
|
101
|
+
#main_navigation{float:right; margin:1px 0px 0px 0px;}
|
102
|
+
|
38
103
|
#main_navigation li{
|
39
|
-
|
104
|
+
float:left;
|
40
105
|
}
|
41
106
|
|
42
107
|
a {
|
43
|
-
color:#
|
108
|
+
color:#456;
|
44
109
|
}
|
45
110
|
|
46
111
|
a:hover {
|
47
|
-
|
48
|
-
color:#fff;
|
112
|
+
color:#686;
|
49
113
|
}
|
50
114
|
.main_link a {
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
115
|
+
color:#333;
|
116
|
+
background:#fff;
|
117
|
+
padding:5px;
|
118
|
+
border: solid 1px #ccc;
|
119
|
+
border-bottom:none;
|
120
|
+
text-decoration:none;
|
55
121
|
}
|
56
122
|
|
57
123
|
.main_link a:hover {
|
58
|
-
|
59
|
-
|
60
|
-
border: solid 1px #fff;
|
124
|
+
padding:7px 7px 5px 7px;
|
125
|
+
font-size:1.15em;
|
61
126
|
}
|
62
127
|
|
63
128
|
#content {
|
64
129
|
padding:10px;
|
65
|
-
|
66
|
-
|
67
|
-
background
|
130
|
+
font-family:Baskerville, Times, Times New Roman, serif ;
|
131
|
+
font-size:1.5em;
|
132
|
+
background: #fff;}
|
68
133
|
|
69
134
|
#content h3 {
|
70
135
|
font: 22px 'verdana', sans-serif;
|
71
136
|
margin: 0px;
|
72
137
|
padding: 0px;
|
73
|
-
border-bottom: solid
|
138
|
+
border-bottom: solid 2px #456;
|
74
139
|
width:570px;
|
75
140
|
}
|
76
141
|
|
@@ -79,28 +144,37 @@ text-align:justify;
|
|
79
144
|
}
|
80
145
|
|
81
146
|
#submenu {
|
82
|
-
float: right;
|
83
|
-
width: 200px;
|
84
|
-
margin: 0px;
|
85
|
-
padding:
|
86
|
-
border: solid
|
87
|
-
|
147
|
+
float: right;
|
148
|
+
width: 200px;
|
149
|
+
margin: -3px 0px 0px 10px;
|
150
|
+
padding: 0;
|
151
|
+
border: solid 2px #456;
|
152
|
+
font-family:"Lucida Grande", Arial, Verdana, sans-serif;
|
88
153
|
}
|
89
154
|
|
90
|
-
|
91
|
-
|
155
|
+
#submenu a{
|
156
|
+
margin-left: 20px;
|
92
157
|
}
|
158
|
+
#submenu ul{
|
159
|
+
margin-left: 10px;
|
160
|
+
padding:0px 7px 0px 7px;}
|
93
161
|
|
94
|
-
|
95
|
-
|
162
|
+
ul li {
|
163
|
+
list-style:none;
|
96
164
|
}
|
97
165
|
|
166
|
+
|
98
167
|
#footer {
|
99
168
|
margin:auto;
|
100
|
-
color:#
|
169
|
+
color:#000;
|
170
|
+
background-color:#999;
|
101
171
|
font: 10px 'verdana', sans-serif;
|
102
172
|
padding-bottom:5px;
|
103
|
-
background-color: #333;
|
104
173
|
margin-top:0px;
|
174
|
+
border-top:1px solid #666;
|
175
|
+
border-bottom:1px solid #333;
|
105
176
|
padding-top:5px;
|
106
177
|
}
|
178
|
+
|
179
|
+
#footer .copyright{
|
180
|
+
text-align:center;}
|
data/templates/site.info
CHANGED
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: static
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0
|
7
|
-
date: 2007-
|
6
|
+
version: 0.1.0
|
7
|
+
date: 2007-07-20 00:00:00 -04:00
|
8
8
|
summary: The author was too lazy to write a summary
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -50,7 +50,8 @@ files:
|
|
50
50
|
- templates/submenu.copy
|
51
51
|
- templates/disco/attributes
|
52
52
|
- templates/disco/display
|
53
|
-
- templates/disco/
|
53
|
+
- templates/disco/paginate
|
54
|
+
- templates/disco/feed
|
54
55
|
- templates/disco/link_list
|
55
56
|
- templates/layouts/default/contents.erbml
|
56
57
|
- templates/layouts/default/main_navigation.erbml
|
@@ -59,6 +60,7 @@ files:
|
|
59
60
|
- templates/layouts/default/structure/default.rbml
|
60
61
|
- templates/layouts/default/structure/footer.rbml
|
61
62
|
- templates/layouts/default/stylesheets/default.css
|
63
|
+
- templates/layouts/default/copy/page.copy
|
62
64
|
test_files: []
|
63
65
|
|
64
66
|
rdoc_options:
|