static 0.1.0 → 0.1.3

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/Manifest.txt CHANGED
@@ -23,6 +23,8 @@ templates/disco/display
23
23
  templates/disco/paginate
24
24
  templates/disco/feed
25
25
  templates/disco/link_list
26
+ templates/helpers/content.rb
27
+ templates/helpers/prototype.js
26
28
  templates/layouts/default/contents.erbml
27
29
  templates/layouts/default/main_navigation.erbml
28
30
  templates/layouts/default/page_head.erbml
data/bin/cli.rbml CHANGED
@@ -26,13 +26,14 @@ cli :name=>"static", :prompt=>"-> " do
26
26
  end
27
27
 
28
28
  set :start do |args|
29
+ key(:editor){ @active = :editor }
29
30
  key(:site){ @active = :site }
30
31
  key(:collection){ @active = :collection }
31
32
  key(:with)
32
33
  flag(:help => 'h'){ puts "helpdocs for 'start' go here" }
33
34
 
34
35
  process(args)
35
- name = (remaining_argument == '' ? request_value('please enter a name: ') : remaining_argument)
36
+ name = (remaining_argument == '' ? request_value('please enter a name: ') : remaining_argument) unless @active == :editor
36
37
  @active = ($active_site ? :collection : :site) unless @active
37
38
 
38
39
  case @active
@@ -55,6 +56,18 @@ cli :name=>"static", :prompt=>"-> " do
55
56
  else
56
57
  puts 'gotta have a site to make a collection'
57
58
  end
59
+ when :editor
60
+ $active_site.info['user_name'] ||= request_value 'username on your server: '
61
+ $active_site.info['server'] ||= {}
62
+ $active_site.info['local'] ||= {}
63
+ $active_site.info['server']['address'] ||= request_value 'server address (that you would use to ssh): '
64
+ $active_site.info['server']['directory'] ||= request_value 'directory on server (e.g. ~/www): '
65
+ $active_site.info['server']['link'] ||= request_value('web address of site home (e.g. somesite.com): ' ).as_http
66
+ $active_site.info['local']['link'] ||= request_value('local address of site home (e.g. localhost/~username/): ' ).as_http+"static/#{$active_site.info['working_name']}"
67
+
68
+ $active_site.info['server']['link'] = $active_site.info['server']['link'].as_http
69
+ $active_site.save_info 'site.info'
70
+ system "camping #{$active_site.home}helpers/content.rb"
58
71
  end
59
72
  end
60
73
 
@@ -236,7 +249,7 @@ cli :name=>"static", :prompt=>"-> " do
236
249
  end
237
250
 
238
251
  set :add do |args|
239
- edit $active_collection.add_entry
252
+ edit $active_collection.add_entry[:file]
240
253
  $active_collection.sanitize_listing
241
254
  $active_collection.save_listing
242
255
  end
@@ -298,6 +311,7 @@ cli :name=>"static", :prompt=>"-> " do
298
311
  publish_feeds @blank
299
312
  end
300
313
 
314
+
301
315
  set :quit do
302
316
  exit
303
317
  end
data/bin/static CHANGED
@@ -3,16 +3,8 @@
3
3
  require File.dirname(__FILE__)+'/../lib/static'
4
4
 
5
5
 
6
- $ENV['STATIC_HOME'] = "#{ENV['HOME']}/static/"
7
- $ENV['STATIC_VIEWING'] = "#{ENV['HOME']}/Sites/static/"
8
- $ENV['REPO_HOME'] = $ENV['STATIC_HOME']+'/repos/'
9
- $ENV['SITE_BANK'] = $ENV['STATIC_HOME']+'projects/'
10
- $ENV['TEMPLATE_HOME'] = $ENV['STATIC_HOME']+'.templates/'
11
- $ENV['LAYOUT_HOME'] = $ENV['STATIC_HOME']+'layouts/'
12
- $ENV['SCRIPT_HOME'] = $ENV['STATIC_HOME']+'lib/'
13
- $ENV['TEMPLATE_BANK'] = File.dirname(__FILE__)+'/../templates'
14
-
15
-
6
+ include Static
7
+ Static::setup_home
16
8
  include FileBase
17
9
 
18
10
  #destroy $ENV['STATIC_HOME']
@@ -22,6 +14,7 @@ mkdir $ENV['STATIC_HOME'] unless exists? :folder, $ENV['STATIC_HOME']
22
14
  mkdir $ENV['SITE_BANK'] unless exists? :folder, $ENV['SITE_BANK']
23
15
 
24
16
  copy File.dirname(__FILE__)+'/../templates', $ENV['TEMPLATE_HOME'] unless exists? :folder, $ENV['TEMPLATE_HOME']
17
+ copy File.dirname(__FILE__)+'/../templates/helpers', $ENV['TEMPLATE_HOME']+'helpers' unless exists? :folder, $ENV['TEMPLATE_HOME']+'helpers'
25
18
  move $ENV['TEMPLATE_HOME']+'layouts', $ENV['LAYOUT_HOME'] unless exists? :folder, $ENV['LAYOUT_HOME']
26
19
  puts "home: #{$ENV['STATIC_HOME']}"
27
20
 
@@ -45,7 +38,6 @@ module Rbml
45
38
  end
46
39
  end
47
40
 
48
- include Static
49
41
  ::Rbml::Processor.run(File.dirname(__FILE__)+'/cli.rbml')
50
42
 
51
43
  __END__
data/lib/collection.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  class Collection
2
- attr_accessor :name, :attrs, :base, :listing, :entries, :contents
2
+ attr_accessor :name, :attrs, :base, :listing, :entries, :contents, :unpublished
3
3
  include FileBase
4
4
  def initialize base, where, name
5
5
  set_home where
@@ -8,6 +8,7 @@ class Collection
8
8
  @attrs = []
9
9
  @listing = []
10
10
  @entries = []
11
+ @unpublished = []
11
12
  setup_location 'collections'
12
13
  set_home path+name
13
14
  end
@@ -64,7 +65,8 @@ class Collection
64
65
  add = true if value and not attrs[key]
65
66
  end
66
67
  }
67
- tmp << item if add
68
+ item[:publish] = false unless add or item[:publish]
69
+ tmp << item
68
70
  }
69
71
  @listing = tmp
70
72
  save_listing
@@ -93,10 +95,31 @@ class Collection
93
95
  @listing ||= []
94
96
  @listing = @listing.sort{|x, y| x[:id] <=> y[:id]}.reverse
95
97
  end
98
+ def save_entry(id)
99
+ File.open( home+'entries/'+id, 'w' ) {|yf|
100
+ tmp={}
101
+ tmp[name] = find_entry id
102
+ tmp[name] = tmp[name].reject{|key, value| key.kind_of? Symbol }
103
+ YAML::dump( tmp, yf)
104
+ }
105
+ find_entry id
106
+ end
96
107
  def load_entries
97
- listing.each {|entry| entries << load_entry(entry) }
108
+ @entries = []
109
+ @unpublished = []
110
+ listing.each {|entry|
111
+ if entry[:publish]
112
+ @entries << load_entry(entry)
113
+ else
114
+ @unpublished << load_entry(entry)
115
+ end
116
+ }
98
117
  entries
99
118
  end
119
+ def delete entry
120
+ listing.delete_if{|e| e[:id] == entry }
121
+ save_listing
122
+ end
100
123
  def load_entry(file)
101
124
  tmp = nil
102
125
  File.open( home+'entries/'+file[:id].to_s ) {|yf| tmp = YAML::load( yf )[name].merge(file)} rescue puts "loading entry -- #{$!}"
@@ -105,10 +128,11 @@ class Collection
105
128
  def add_entry title=nil
106
129
  timestamp = Time.now.to_i.to_s
107
130
  title ||= timestamp
108
- load_listing
109
- listing.unshift({:id => timestamp, :publish => true})
131
+ listing.unshift({:id => timestamp})
132
+ save_listing
110
133
  write_template home+'attributes', home+'entries/'+timestamp
111
- return home+'entries/'+timestamp
134
+ load_entries
135
+ return {:id => timestamp, :file => home+'entries/'+timestamp}
112
136
  end
113
137
  def publish
114
138
  tmp = {}
@@ -120,6 +144,17 @@ class Collection
120
144
  save_listing
121
145
  end
122
146
 
147
+ def set_to_publish entry
148
+ listing.find{|e| e[:id] == entry}[:publish] = true
149
+ save_listing
150
+ end
151
+
152
+ def find_entry entry
153
+ tmp = entries.find{|e| e[:id] == entry}
154
+ tmp ||= unpublished.find{|e| e[:id] == entry}
155
+ tmp
156
+ end
157
+
123
158
 
124
159
  end
125
160
 
@@ -1,7 +1,7 @@
1
1
 
2
2
 
3
3
  class String
4
- def as_file; self.gsub(/([!?,]|[^a-zA-Z0-9\.]$)/, '').gsub(/[^a-zA-Z0-9\.\/]/, '_').downcase end
4
+ def as_file; self.gsub(/([!?,]|[^a-zA-Z0-9\.]$)/, '').gsub(/[^a-zA-Z0-9\.\/~]/, '_').downcase end
5
5
  def as_folder; self.as_file+((self.as_file=~/\/$/||self=='') ? '' : '/') end
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
data/lib/page.rb CHANGED
@@ -89,6 +89,9 @@
89
89
  def load_contents
90
90
  File.open(home+ 'contents/'+page_location+name.as_file+'.copy') { |yf| @contents = YAML::load( yf ) } rescue puts $!
91
91
  end
92
+ def save_contents
93
+ File.open(home+ 'contents/'+page_location+name.as_file+'.copy', 'w') { |yf| YAML.dump(@contents, yf) }
94
+ end
92
95
 
93
96
  def extentions
94
97
  {
data/lib/site.rb CHANGED
@@ -27,6 +27,7 @@ class Site
27
27
  return nil if self.site_exists?(where, name)
28
28
  site = Site.new(where, name, generate_to, templates)
29
29
  site.mkdir(site.home+'project_info')
30
+ site.copy(templates+'helpers', site.home) rescue puts $!
30
31
  site.setup_location 'project_info'
31
32
  site.write_template templates+'site.map', site.path+'site.map'
32
33
  site.write_template templates+'site.info', site.path+'site.info'
data/lib/static.rb CHANGED
@@ -24,12 +24,23 @@ require 'rbml'
24
24
  require 'xhtml'
25
25
 
26
26
  $ENV = {}
27
- $ENV['EDITOR'] = 'vi'
28
27
 
29
28
  module Static
30
- VERSION = '0.1.0'
29
+ VERSION = '0.1.3'
31
30
  include FileBase
32
31
 
32
+ def setup_home
33
+ $ENV['EDITOR'] = 'vi'
34
+ $ENV['STATIC_HOME'] = "#{ENV['HOME']}/static/"
35
+ $ENV['STATIC_VIEWING'] = "#{ENV['HOME']}/Sites/static/"
36
+ $ENV['REPO_HOME'] = $ENV['STATIC_HOME']+'/repos/'
37
+ $ENV['SITE_BANK'] = $ENV['STATIC_HOME']+'projects/'
38
+ $ENV['TEMPLATE_HOME'] = $ENV['STATIC_HOME']+'.templates/'
39
+ $ENV['LAYOUT_HOME'] = $ENV['STATIC_HOME']+'layouts/'
40
+ $ENV['SCRIPT_HOME'] = $ENV['STATIC_HOME']+'lib/'
41
+ $ENV['TEMPLATE_BANK'] = File.dirname(__FILE__)+'/../templates'
42
+ end
43
+
33
44
  def start_site name
34
45
  site = Site.start($ENV['SITE_BANK'], name, $ENV['STATIC_VIEWING'], $ENV['TEMPLATE_HOME'])
35
46
  site
@@ -109,6 +120,7 @@ module Static
109
120
  def publish_feeds blank = nil
110
121
  $active_site.info['feeds'].each do |name|
111
122
  col = load_collection(name) #Generator.load(name).inspect
123
+ col.load_entries
112
124
  col.publish
113
125
  Generator.load col
114
126
  Generator.act_on.instance_eval {
@@ -124,6 +136,7 @@ module Static
124
136
  Generator.act_on.instance_eval { @level = nil; undef :level; undef :level=}
125
137
  Generator.unload
126
138
  end if $active_site.info['feeds']
139
+
127
140
  unless blank
128
141
  puts "rsync -avz #{$active_site.site_loc}/* #{$active_site.info['user_name']}@#{$active_site.info['server']['address']}:#{$active_site.info['server']['directory']}"
129
142
  system "rsync -avz #{$active_site.site_loc}/* #{$active_site.info['user_name']}@#{$active_site.info['server']['address']}:#{$active_site.info['server']['directory']}"
data/lib/xhtml.rb CHANGED
@@ -176,6 +176,22 @@ module Rbml
176
176
  what
177
177
  end
178
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
179
195
  end
180
196
  end
181
197
  end
@@ -0,0 +1,393 @@
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
+