static 0.1.3 → 1.0.0

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.
@@ -1,198 +0,0 @@
1
-
2
- module Inclusion
3
- def find_file_name page, what
4
- tmp = nil
5
- case what
6
- when Hash
7
- what.each { |desc, item| tmp = "#{page.file_name}_#{desc}_#{item}" }
8
- else
9
- tmp = what==:contents ? page.file_name : what.to_s
10
- end
11
- tmp+'.rbml'
12
- end
13
- def partial from, what
14
- get from, "_#{what}"
15
- end
16
- def get from, what
17
- case from
18
- when :base
19
- run_file Generator.act_on.home+"base/#{what}.rbml"
20
- when :page
21
- run_file Generator.act_on.home+"blueprint/#{Generator.page_location}#{find_file_name(Generator.act_on, what)}"
22
- else
23
- $active_site.pages.each { |page| run_file page.home+'blueprint/'+page.page_location+find_file_name(page, what) if page.name.as_file == from.to_s }
24
- end
25
- end
26
-
27
- def display how_many, collection, entry_bank=nil, &blk
28
- col = load_collection(collection.to_s)
29
- level = Generator.level
30
- how_many = col.entries.size if how_many == :all
31
- entry_bank ||= col.entries.dup
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
35
- how_many.times {
36
- break if entry_bank.empty?
37
- Generator.act_on.contents = entry_bank.shift
38
- block_given? ? run_block(&blk) : run_file(Generator.act_on.display_file) rescue puts $!
39
- }
40
- Generator.act_on.instance_eval { @level = nil; undef :level; undef :level=}
41
- Generator.unload
42
- end
43
-
44
- def include_partial
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
88
- end
89
- end
90
-
91
- module Rbml
92
- module Language
93
- module Doc
94
- module Xhtml
95
- def put_title
96
- title(Generator.contents['title'])
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
-
118
- def put_stylesheets
119
- styles = []
120
- Generator.stylesheets.each{|style| styles << style if style}
121
- styles.empty? ? '' : stylesheets(Generator.level+'stylesheets/', styles)
122
- end
123
- def breadcrumbs(join_by=nil)
124
- join_by ||= " >> "
125
- links = []
126
- Generator.breadcrumbs.each {|b| links << (Generator.act_on.name.as_file==b.to_s ? Generator.act_on.name : link_to(b)) }
127
- links.join(join_by)
128
- end
129
- def main_link_for what
130
- link_to what
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
135
- def link_to what, text=nil, options={}
136
- where = options[:page] ? options[:page]+'.html' : ''
137
- say=''
138
- $active_site.pages.each { |page|
139
- if page.name.as_file == what.to_s
140
- text ||= page.name
141
- say << "<a href='#{Generator.level}#{page.in_site_link}#{where}'>#{text}</a>"
142
- end
143
- }
144
- say
145
- end
146
- def put what, options={}
147
- t find_contents(what, options)
148
- end
149
- def plain_put what, options={}
150
- find_contents(what, options)
151
- end
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] || '')
160
- end
161
-
162
- def parse_context(what)
163
- what = what.to_s
164
- exp = /\<\[.+?\]\>/
165
- while(what =~ exp) do
166
- what.sub!(exp) { |match|
167
- eval(match.sub(/^\<\[/,'').sub(/\]\>$/, ''))
168
- }
169
- end
170
- exp = /\<!\[.+?\]\>/
171
- while(what =~ exp) do
172
- what.sub!(exp) { |match|
173
- match.sub!(/^\<!\[/,'<[')
174
- }
175
- end
176
- what
177
- end
178
-
179
- def site_map(options={}, item=nil, first_time=true)
180
- pages = first_time ? "<ul>" : ''
181
- item ||= $active_site.map['site_map']
182
- case item
183
- when String
184
- pages << "<li>#{link_to(item.as_file)}</li>"
185
- when Array : item.each {|i| pages << site_map(options, i, false)}
186
- when Hash
187
- item.each do |key, value|
188
- pages << site_map(options, key, false)
189
- pages << "<ul>#{site_map(options, value, false)}</ul>"
190
- end
191
- end
192
- pages << "</ul>" if first_time
193
- pages
194
- end
195
- end
196
- end
197
- end
198
- end
@@ -1,3 +0,0 @@
1
- <%=name%>:
2
- <%attrs.each do |a| %> <%= a %>:
3
- <%end%>
@@ -1,6 +0,0 @@
1
- # describe the base display for <%=name%> here.
2
- div(:class => '<%=name%>'){
3
- <% if attrs %>
4
- <% attrs.each { |a, v| %> put :<%= a %> <% } %>
5
- <%end%>
6
- }
@@ -1,21 +0,0 @@
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
- }
@@ -1,6 +0,0 @@
1
- ul{
2
- <% Generator.listing.each { |entry| %>
3
- <% contents = Generator.load_entry entry %>
4
- li { link_to :<%=@page.file_name%>, <%= contents['title'].inspect || entry.inspect %>, :page => <%= entry.inspect %> }
5
- <% } %>
6
- }
@@ -1 +0,0 @@
1
- display 1, :<%=name%>, Generator.entry_bank
@@ -1,393 +0,0 @@
1
-
2
- require 'camping'
3
- require 'static'
4
-
5
- include Static
6
- Camping.goes :Content
7
-
8
- @home = File.dirname(__FILE__)+'/..'
9
- File.open("#{@home}/project_info/site.info") { |yf| $info = YAML::load( yf ) }
10
- Static::setup_home
11
-
12
- $active_site = load_site $info['working_name']
13
-
14
- module Content::Controllers
15
- class Static < R '/resource_bank/(.+)'
16
- MIME_TYPES = {'.css' => 'text/css', '.js' => 'text/javascript', '.jpg' => 'image/jpeg'}
17
- PATH = File.expand_path(File.dirname(__FILE__))
18
-
19
- def get(path)
20
- @headers['Content-Type'] = MIME_TYPES[path[/\.\w+$/, 0]] || "text/plain"
21
- unless path.include?("..")
22
- @headers['X-Sendfile'] = "#{PATH}/#{path}"
23
- else
24
- @status = "403"
25
- "403 - Invalid path"
26
- end
27
- end
28
- end
29
-
30
- class GenerateSite < R '/site/generate'
31
- def get
32
- $active_site.destroy $active_site.site_loc
33
- $active_site.info['paginate'].each { |page, collection| paginate page } if $active_site.info['paginate']
34
- $active_site.generate
35
- publish_feeds :local
36
- end
37
- end
38
-
39
- class PublishSite < R '/site/publish'
40
- def get
41
- $active_site.destroy $active_site.site_loc
42
- $active_site.info['paginate'].each { |page, collection| paginate page } if $active_site.info['paginate']
43
- $active_site.generate
44
- publish_feeds
45
- end
46
-
47
- end
48
-
49
- class HideCollection < R '/collection/hide/(.+)'
50
- def get name
51
- @headers['Content-Type'] = 'text/javascript'
52
- @name = name
53
- render :_hide_collection
54
- end
55
- end
56
-
57
- class ListCollection < R '/collection/list/(.+)'
58
- def get name
59
- @headers['Content-Type'] = 'text/javascript'
60
- @name = name
61
- @collection = load_collection name
62
- render :_list_collection
63
- end
64
- end
65
-
66
- class ViewEntry < R '/collection/(.+)/entry/(.+)'
67
- def get collection, entry
68
- @headers['Content-Type'] = 'text/javascript'
69
- @name = collection
70
- @collection = load_collection collection
71
- @collection.load_entries
72
- @entry = @collection.find_entry entry
73
- render :_view_entry
74
- end
75
- end
76
-
77
- class ReloadEntrySection < R '/reload/collection/(.+)/entry/(.+)/section/(.+)'
78
- def get collection, entry, key
79
- @headers['Content-Type'] = 'text/javascript'
80
- @name = collection
81
- @collection = load_collection collection
82
- @collection.load_entries
83
- @entry = @collection.find_entry entry
84
- @section = key
85
- render :_reload_entry_section
86
- end
87
- end
88
-
89
- class PublishEntry < R '/publish/collection/(\w+)/entry/(\w+)'
90
- def get collection, entry
91
- @headers['Content-Type'] = 'text/javascript'
92
- @name = collection
93
- @collection = load_collection collection
94
- @collection.set_to_publish entry
95
- @collection.load_entries
96
- render :_list_collection
97
- end
98
- end
99
-
100
- class DeleteEntry < R '/delete/collection/(.+)/entry/(.+)'
101
- def get collection, entry
102
- @headers['Content-Type'] = 'text/javascript'
103
- @name = collection
104
- @collection = load_collection collection
105
- @collection.delete entry
106
- @collection.load_entries
107
- render :_list_collection
108
- end
109
- end
110
-
111
- class EditEntry < R '/edit/collection/(.+)/entry/(.+)/section/(.+)'
112
- def get collection, entry, key
113
- @headers['Content-Type'] = 'text/javascript'
114
- @name = collection
115
- @collection = load_collection collection
116
- @collection.load_entries
117
- @entry = @collection.find_entry entry
118
- @section = key
119
- render :_edit_entry_section
120
- end
121
-
122
- def post collection, entry, key
123
- @headers['Content-Type'] = 'text/javascript'
124
-
125
- @name = collection
126
- @collection = load_collection collection
127
- @collection.load_entries
128
- @collection.find_entry(entry)[key] = input["#{key}_value"]
129
- @entry = @collection.save_entry entry
130
- @section = key
131
- render :_reload_entry_section
132
- end
133
- end
134
- class Index < R '/'
135
- def get
136
- render :index
137
- end
138
- end
139
-
140
- class Content < R '/(\w+)'
141
- def get page_name
142
- @page = Page.find page_name.as_file
143
- @page.load_contents
144
- render :_content
145
- end
146
- end
147
-
148
- class Reload < R '/reload/(\w+)/(\w+)'
149
- def get page_name, section
150
- @page = Page.find page_name.as_file
151
- @page.load_contents
152
- @key = section
153
- @value = @page.contents[section]
154
- render :_section
155
- end
156
- end
157
-
158
- class AddEntry < R '/add_entry/collection/(\w+)'
159
- def get collection
160
- @name = collection
161
- @collection = load_collection collection
162
- @collection.load_entries
163
- @entry = @collection.add_entry
164
- @entry = @collection.load_entry @entry
165
- @collection.load_entries
166
- render :_view_entry
167
- end
168
- end
169
-
170
- class Edit < R '/edit/(\w+)/(\w+)'
171
- def get page_name, section
172
- page = Page.find page_name.as_file
173
- page.load_contents
174
- @page_name = page_name.as_file
175
- @text = page.contents[section]
176
- @title = section
177
- render :_edit_section
178
- end
179
-
180
- def post page_name, section
181
- @headers['Content-Type'] = 'text/javascript'
182
- @page = Page.find page_name.as_file
183
- @page.load_contents
184
- @old_key = section
185
- @key = input["#{section}_key"]
186
- @value = input["#{section}_value"]
187
- if @key == section
188
- @page.contents[section] = @value
189
- else
190
- @page.contents[section] = nil
191
- @page.contents[@key] = @value
192
- end
193
- @page.save_contents
194
- @page.load_contents
195
-
196
- render :_reload_section
197
- end
198
- end
199
- end
200
-
201
- module Content::Views
202
- def site_map(options={}, item=nil, first_time=true)
203
- pages = first_time ? "<ul>" : ''
204
- item ||= $active_site.map['site_map']
205
- case item
206
- when String
207
- pages << "<li>#{link_to(item)}</li>"
208
- when Array : item.each {|i| pages << site_map(options, i, false)}
209
- when Hash
210
- item.each do |key, value|
211
- pages << site_map(options, key, false)
212
- pages << "<ul>#{site_map(options, value, false)}</ul>"
213
- end
214
- end
215
- pages << "</ul>" if first_time
216
- pages
217
- end
218
-
219
- def link_to page, name=nil; name||=page; a name, :href=>'#', :onclick => "new Ajax.Updater('main', '/#{page.as_file}',{asynchronous:true, evalScripts:true, method:'get'}); return false;" end
220
-
221
- def layout
222
- html do
223
- head{
224
- title { 'Content Editing For Static' }
225
- script :src => "resource_bank/prototype.js", :type => "text/javascript"
226
- }
227
- body {
228
- table {
229
- ul{
230
- li{
231
- self << a('generate site locally', :href => '#', :onclick => "new Ajax.Request('site/generate', {asynchronous:true, evalScripts:true, method:'get'}); return false;")
232
- }
233
- li{
234
- self << a('local preview', :href => $active_site.info['local']['link'], :target => 'blank')
235
- } if $active_site.info['local'] and $active_site.info['local']['link']
236
- li{
237
- self << a('publish site', :href => '#', :onclick => "new Ajax.Request('site/publish', {asynchronous:true, evalScripts:true, method:'get'}); return false;")
238
- } if $active_site.info['server'] and $active_site.info['server']['link'] and $active_site.info['server']['address'] and $active_site.info['server']['directory'] and $active_site.info['user_name']
239
- li{
240
- self << a('go to live site', :href => $active_site.info['server']['link'], :target => 'blank' )
241
- } if $active_site.info['server'] and $active_site.info['server']['link']
242
- }
243
- tr{
244
- td(:id => 'page_select', :valign=>'top', :width=> '250px'){
245
- self<< site_map({}, $active_site.map['site_map'])
246
- $active_site.info['feeds'].each do |f|
247
- div(:id=>"#{f}_collection"){self << a(f, :href=>'#', :onclick => "new Ajax.Request('collection/list/#{f}', {asynchronous:true, evalScripts:true, method:'get'}); return false;")}
248
- end if $active_site.info['feeds']
249
- }
250
- td(:id=>'main', :valign =>'top'){ self << yield }
251
- }
252
- }
253
- }
254
- end
255
- end
256
-
257
- def index
258
- p 'there are no instructions. do what feels right.'
259
- end
260
-
261
- def _content
262
- h4 "copy for #{@page.name}"
263
- if @page.contents['title']
264
- span(:id => 'title'){
265
- h4 {
266
- self << a('title', :href=>"#", :onclick => "new Ajax.Updater('title', 'edit/#{@page.file_name}/title', { asynchronous:true, method:'get' });")
267
- }
268
- pre @page.contents['title']
269
- }
270
- end
271
- @page.contents.each do |key, value|
272
- unless key == 'title' or key == 'stylesheets'
273
- span(:id => key){
274
- h4 {
275
- self << a(key, :href=>"#", :onclick => "new Ajax.Updater('#{key}', 'edit/#{@page.file_name}/#{key}', { asynchronous:true, method:'get' });")
276
- }
277
- pre value
278
- }
279
- end
280
- end
281
- end
282
-
283
- def _edit_section
284
- form(:onsubmit => "new Ajax.Request('/edit/#{@page_name}/#{@title}', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;"){
285
-
286
- if @title == 'title'
287
- h4 'title'
288
- input :type => 'hidden', :value => @title, :name =>"#{@title}_key"
289
- input :type => 'text', :name =>"#{@title}_value", :value => @text
290
- else
291
- input :type => 'text', :value => @title, :name =>"#{@title}_key"
292
- textarea(:cols => '90', :rows => '30', :name => "#{@title}_value"){
293
- self << @text
294
- }
295
- end
296
- input :type => 'submit', :value => 'submit', :name => 'submit'
297
- a 'cancel', :href=> "#", :onclick => "new Ajax.Updater('#{@title}', '/reload/#{@page_name}/#{@title}', {asynchronous:true, method:'get'}); return false;"
298
- }
299
- end
300
-
301
- def _edit_entry_section
302
- form(:onsubmit => "new Ajax.Request('/edit/collection/#{@name}/entry/#{@entry[:id]}/section/#{@section}', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;"){
303
- if @section == "title"
304
- input :type => 'text', :name =>"title_value", :value => @entry[@section]
305
- else
306
- textarea(:cols => '90', :rows => '30', :name => "#{@section}_value"){
307
- self << @entry[@section]
308
- }
309
- end
310
- input :type => 'submit', :value => 'submit', :name => 'submit'
311
- a 'cancel', :href=> "#", :onclick => "new Ajax.Updater('#{@section}_attribute', '/reload/collection/#{@name}/entry/#{@entry[:id]}/section/#{@section}', {asynchronous:true, method:'get'}); return false;"
312
- }
313
- end
314
-
315
- def _reload_entry_section
316
- self << _list_collection if @section == 'title'
317
- self << "$('attribute_#{@section}').replace("
318
- if @section =="title"
319
- h4(:id => "attribute_title"){self<< a(@entry["title"]||@entry[:id], :href=>'#', :onclick => "new Ajax.Updater('attribute_title', 'edit/collection/#{@name}/entry/#{@entry[:id]}/section/title', { asynchronous:true, method:'get' });")}
320
- else
321
- span(:id => "attribute_#{@section}"){
322
- self << a(@section, :href=>"#", :onclick => "new Ajax.Updater('attribute_#{@section}', 'edit/collection/#{@name}/entry/#{@entry[:id]}/section/#{@section}', { asynchronous:true, method:'get' });")
323
- pre(@entry[@section])
324
- }
325
- end
326
- self << ")"
327
- end
328
-
329
- def _section
330
- span(:id => @key){
331
- h4 {
332
- self << a(@key, :href=>"#", :onclick => "new Ajax.Updater('#{@key}', 'edit/#{@page.file_name}/#{@key}', { asynchronous:true, method:'get' });")
333
- }
334
- pre @value
335
- }
336
- end
337
-
338
- def _reload_section
339
- self << "$('#{@old_key}').replace("
340
- _section
341
- self << ")"
342
- end
343
-
344
- def _hide_collection
345
- self << "$('#{@name}_collection').replace("
346
- div(:id=>"#{@name}_collection"){self << a(@name, :href=>'#', :onclick => "new Ajax.Request('collection/list/#{@name}', {asynchronous:true, evalScripts:true, method:'get'}); return false;")}
347
- self << ")"
348
- end
349
-
350
- def _list_collection
351
- self << "$('#{@name}_collection').replace("
352
- div(:id => "#{@name}_collection"){
353
- a(@name, :href=>'#', :onclick => "new Ajax.Request('collection/hide/#{@name}', {asynchronous:true, evalScripts:true, method:'get'}); return false;")
354
- a("+add+", :href=>'#', :onclick => "new Ajax.Updater('main', 'add_entry/collection/#{@name}', {asynchronous:true, evalScripts:true, method:'get'}); return false;")
355
- ul{
356
- li "unpublished"
357
- @collection.unpublished.each do |e|
358
- li{
359
- self << a(e['title']||e[:id], :href=>'#', :onclick=>"new Ajax.Updater('main', 'collection/#{@name}/entry/#{e[:id]}',{asynchronous:true, evalScripts:true, method:'get'}); return false; ")
360
- self << a('publish', :href => '#', :onclick=>"new Ajax.Request('publish/collection/#{@name}/entry/#{e[:id]}',{asynchronous:true, evalScripts:true, method:'get'}); return false; ")
361
- self << a('delete', :href => '#', :onclick=>"new Ajax.Request('delete/collection/#{@name}/entry/#{e[:id]}',{asynchronous:true, evalScripts:true, method:'get'}); return false; ")
362
- }
363
- end
364
- }
365
- ul{
366
- li "published"
367
- @collection.entries.each do |e|
368
- li{
369
- self << a(e['title']||e[:id], :href=>'#', :onclick=>"new Ajax.Updater('main', 'collection/#{@name}/entry/#{e[:id]}',{asynchronous:true, evalScripts:true, method:'get'}); return false; ")
370
- unless e[:publish]
371
- self << a('publish', :href => '#', :onclick=>"new Ajax.Request('publish/collection/#{@name}/entry/#{e[:id]}', {asynchronous:true, evalScripts:true, method:'get'}); return false; ")
372
- self << a('delete', :href => '#', :onclick=>"new Ajax.Request('delete/collection/#{@name}/entry/#{e[:id]}',{asynchronous:true, evalScripts:true, method:'get'}); return false; ")
373
- end
374
- }
375
- end
376
- }
377
- }
378
- self << ");"
379
- end
380
-
381
- def _view_entry
382
- h4(:id => "attribute_title"){self<< a(@entry["title"]||@entry[:id], :href=>'#', :onclick => "new Ajax.Updater('attribute_title', 'edit/collection/#{@name}/entry/#{@entry[:id]}/section/title', { asynchronous:true, method:'get' });")}
383
- @entry.each {|key, value|
384
- unless key=='title' or key.kind_of? Symbol
385
- span(:id => "attribute_#{key}"){
386
- self << a(key, :href=>"#", :onclick => "new Ajax.Updater('attribute_#{key}', 'edit/collection/#{@name}/entry/#{@entry[:id]}/section/#{key}', { asynchronous:true, method:'get' });")
387
- pre(@entry[key])
388
- }
389
- end
390
- }
391
- end
392
- end
393
-