picnic 0.7.1 → 0.8.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.
Files changed (45) hide show
  1. data/History.txt +10 -0
  2. data/Manifest.txt +30 -13
  3. data/Rakefile +2 -0
  4. data/lib/picnic.rb +5 -120
  5. data/lib/picnic/authentication.rb +40 -4
  6. data/lib/picnic/cli.rb +86 -43
  7. data/lib/picnic/conf.rb +45 -43
  8. data/lib/picnic/logger.rb +41 -0
  9. data/lib/picnic/server.rb +99 -0
  10. data/lib/picnic/version.rb +2 -2
  11. data/picnic.gemspec +44 -0
  12. data/vendor/{camping-1.5.180 → camping-2.0.20090212}/CHANGELOG +17 -10
  13. data/vendor/{camping-1.5.180 → camping-2.0.20090212}/COPYING +0 -0
  14. data/vendor/{camping-1.5.180 → camping-2.0.20090212}/README +2 -2
  15. data/vendor/{camping-1.5.180 → camping-2.0.20090212}/Rakefile +62 -5
  16. data/vendor/camping-2.0.20090212/bin/camping +99 -0
  17. data/vendor/camping-2.0.20090212/doc/camping.1.gz +0 -0
  18. data/vendor/camping-2.0.20090212/examples/README +5 -0
  19. data/vendor/camping-2.0.20090212/examples/blog.rb +375 -0
  20. data/vendor/camping-2.0.20090212/examples/campsh.rb +629 -0
  21. data/vendor/camping-2.0.20090212/examples/tepee.rb +242 -0
  22. data/vendor/camping-2.0.20090212/extras/Camping.gif +0 -0
  23. data/vendor/camping-2.0.20090212/extras/flipbook_rdoc.rb +491 -0
  24. data/vendor/camping-2.0.20090212/extras/permalink.gif +0 -0
  25. data/vendor/{camping-1.5.180 → camping-2.0.20090212}/lib/camping-unabridged.rb +168 -294
  26. data/vendor/camping-2.0.20090212/lib/camping.rb +54 -0
  27. data/vendor/{camping-1.5.180/lib/camping/db.rb → camping-2.0.20090212/lib/camping/ar.rb} +4 -4
  28. data/vendor/{camping-1.5.180/lib/camping → camping-2.0.20090212/lib/camping/ar}/session.rb +23 -14
  29. data/vendor/camping-2.0.20090212/lib/camping/mab.rb +26 -0
  30. data/vendor/camping-2.0.20090212/lib/camping/reloader.rb +163 -0
  31. data/vendor/camping-2.0.20090212/lib/camping/server.rb +158 -0
  32. data/vendor/camping-2.0.20090212/lib/camping/session.rb +74 -0
  33. data/vendor/camping-2.0.20090212/setup.rb +1551 -0
  34. data/vendor/camping-2.0.20090212/test/apps/env_debug.rb +65 -0
  35. data/vendor/camping-2.0.20090212/test/apps/forms.rb +95 -0
  36. data/vendor/camping-2.0.20090212/test/apps/misc.rb +86 -0
  37. data/vendor/camping-2.0.20090212/test/apps/sessions.rb +38 -0
  38. data/vendor/camping-2.0.20090212/test/test_camping.rb +54 -0
  39. metadata +43 -16
  40. data/lib/picnic/postambles.rb +0 -292
  41. data/lib/picnic/utils.rb +0 -36
  42. data/vendor/camping-1.5.180/lib/camping.rb +0 -57
  43. data/vendor/camping-1.5.180/lib/camping/fastcgi.rb +0 -244
  44. data/vendor/camping-1.5.180/lib/camping/reloader.rb +0 -163
  45. data/vendor/camping-1.5.180/lib/camping/webrick.rb +0 -65
@@ -0,0 +1,242 @@
1
+ #!/usr/bin/ruby
2
+ $:.unshift File.dirname(__FILE__) + "/../lib"
3
+ %w(rubygems redcloth camping camping/ar acts_as_versioned).each { |lib| require lib }
4
+
5
+ Camping.goes :Tepee
6
+
7
+ module Tepee::Models
8
+
9
+ class Page < Base
10
+ PAGE_LINK = /\[\[([^\]|]*)[|]?([^\]]*)\]\]/
11
+ validates_uniqueness_of :title
12
+ before_save { |r| r.title = r.title.underscore }
13
+ acts_as_versioned
14
+ end
15
+
16
+ class CreateTepee < V 1.0
17
+ def self.up
18
+ create_table :tepee_pages do |t|
19
+ t.column :title, :string, :limit => 255
20
+ t.column :body, :text
21
+ end
22
+ Page.create_versioned_table
23
+ Page.reset_column_information
24
+ end
25
+ def self.down
26
+ drop_table :tepee_pages
27
+ Page.drop_versioned_table
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+ module Tepee::Controllers
34
+ class Index < R '/'
35
+ def get
36
+ redirect Show, 'home'
37
+ end
38
+ end
39
+
40
+ class Show < R '/(\w+)', '/(\w+)/(\d+)'
41
+ def get page_name, version = nil
42
+ redirect(Edit, page_name, 1) and return unless @page = Page.find_by_title(page_name)
43
+ @version = (version.nil? or version == @page.version.to_s) ? @page : @page.versions.find_by_version(version)
44
+ render :show
45
+ end
46
+ end
47
+
48
+ class Edit < R '/(\w+)/edit', '/(\w+)/(\d+)/edit'
49
+ def get page_name, version = nil
50
+ @page = Page.find_or_create_by_title(page_name)
51
+ @page = @page.versions.find_by_version(version) unless version.nil? or version == @page.version.to_s
52
+ render :edit
53
+ end
54
+
55
+ def post page_name
56
+ Page.find_or_create_by_title(page_name).update_attributes :body => input.post_body and redirect Show, page_name
57
+ end
58
+ end
59
+
60
+ class Versions < R '/(\w+)/versions'
61
+ def get page_name
62
+ @page = Page.find_or_create_by_title(page_name)
63
+ @versions = @page.versions
64
+ render :versions
65
+ end
66
+ end
67
+
68
+ class List < R '/all/list'
69
+ def get
70
+ @pages = Page.find :all, :order => 'title'
71
+ render :list
72
+ end
73
+ end
74
+
75
+ class Stylesheet < R '/css/tepee.css'
76
+ def get
77
+ @headers['Content-Type'] = 'text/css'
78
+ File.read(__FILE__).gsub(/.*__END__/m, '')
79
+ end
80
+ end
81
+ end
82
+
83
+ module Tepee::Views
84
+ def layout
85
+ html do
86
+ head do
87
+ title 'test'
88
+ link :href=>R(Stylesheet), :rel=>'stylesheet', :type=>'text/css'
89
+ end
90
+ style <<-END, :type => 'text/css'
91
+ body {
92
+ font-family: verdana, arial, sans-serif;
93
+ }
94
+ h1, h2, h3, h4, h5 {
95
+ font-weight: normal;
96
+ }
97
+ p.actions a {
98
+ margin-right: 6px;
99
+ }
100
+ END
101
+ body do
102
+ p do
103
+ small do
104
+ span "welcome to " ; a 'tepee', :href => "http://code.whytheluckystiff.net/svn/camping/trunk/examples/tepee.rb"
105
+ span '. go ' ; a 'home', :href => R(Show, 'home')
106
+ span '. list all ' ; a 'pages', :href => R(List)
107
+ end
108
+ end
109
+ div.content do
110
+ self << yield
111
+ end
112
+ end
113
+ end
114
+ end
115
+
116
+ def show
117
+ h1 @page.title
118
+ div { _markup @version.body }
119
+ p.actions do
120
+ _button 'edit', :href => R(Edit, @version.title, @version.version)
121
+ _button 'back', :href => R(Show, @version.title, @version.version-1) unless @version.version == 1
122
+ _button 'next', :href => R(Show, @version.title, @version.version+1) unless @version.version == @page.version
123
+ _button 'current', :href => R(Show, @version.title) unless @version.version == @page.version
124
+ _button 'versions', :href => R(Versions, @page.title)
125
+ end
126
+ end
127
+
128
+ def edit
129
+ h1 @page.title
130
+ form :method => 'post', :action => R(Edit, @page.title) do
131
+ p do
132
+ textarea @page.body, :name => 'post_body', :rows => 50, :cols => 100
133
+ end
134
+ input :type => 'submit', :value=>'change'
135
+ end
136
+ _button 'cancel', :href => R(Show, @page.title, @page.version)
137
+ a 'syntax', :href => 'http://hobix.com/textile/', :target=>'_blank'
138
+ end
139
+
140
+ def list
141
+ h1 'all pages'
142
+ ul { @pages.each { |p| li { a p.title, :href => R(Show, p.title) } } }
143
+ end
144
+
145
+ def versions
146
+ h1 @page.title
147
+ ul do
148
+ @versions.each do |page|
149
+ li do
150
+ span page.version
151
+ _button 'show', :href => R(Show, page.title, page.version)
152
+ _button 'edit', :href => R(Edit, page.title, page.version)
153
+ end
154
+ end
155
+ end
156
+ end
157
+
158
+ def _button(text, options={})
159
+ form :method=>:get, :action=>options[:href] do
160
+ input :type=>'submit', :name=>'submit', :value=>text
161
+ end
162
+ end
163
+
164
+ def _markup body
165
+ return '' if body.blank?
166
+ body.gsub!(Tepee::Models::Page::PAGE_LINK) do
167
+ page = title = $1
168
+ title = $2 unless $2.empty?
169
+ page = page.gsub /\W/, '_'
170
+ if Tepee::Models::Page.find(:all, :select => 'title').collect { |p| p.title }.include?(page)
171
+ %Q{<a href="#{self/R(Show, page)}">#{title}</a>}
172
+ else
173
+ %Q{<span>#{title}<a href="#{self/R(Edit, page, 1)}">?</a></span>}
174
+ end
175
+ end
176
+ RedCloth.new(body, [ :hard_breaks ]).to_html
177
+ end
178
+ end
179
+
180
+ def Tepee.create
181
+ Tepee::Models.create_schema :assume => (Tepee::Models::Page.table_exists? ? 1.0 : 0.0)
182
+ end
183
+ __END__
184
+ /** focus **/
185
+ /*
186
+ a:hover:active {
187
+ color: #10bae0;
188
+ }
189
+
190
+ a:not(:hover):active {
191
+ color: #0000ff;
192
+ }
193
+
194
+ *:focus {
195
+ -moz-outline: 2px solid #10bae0 !important;
196
+ -moz-outline-offset: 1px !important;
197
+ -moz-outline-radius: 3px !important;
198
+ }
199
+
200
+ button:focus,
201
+ input[type="reset"]:focus,
202
+ input[type="button"]:focus,
203
+ input[type="submit"]:focus,
204
+ input[type="file"] > input[type="button"]:focus {
205
+ -moz-outline-radius: 5px !important;
206
+ }
207
+
208
+ button:focus::-moz-focus-inner {
209
+ border-color: transparent !important;
210
+ }
211
+
212
+ button::-moz-focus-inner,
213
+ input[type="reset"]::-moz-focus-inner,
214
+ input[type="button"]::-moz-focus-inner,
215
+ input[type="submit"]::-moz-focus-inner,
216
+ input[type="file"] > input[type="button"]::-moz-focus-inner {
217
+ border: 1px dotted transparent !important;
218
+ }
219
+ textarea:focus, button:focus, select:focus, input:focus {
220
+ -moz-outline-offset: -1px !important;
221
+ }
222
+ input[type="radio"]:focus {
223
+ -moz-outline-radius: 12px;
224
+ -moz-outline-offset: 0px !important;
225
+ }
226
+ a:focus {
227
+ -moz-outline-offset: 0px !important;
228
+ }
229
+ */
230
+ form { display: inline; }
231
+
232
+ /** Gradient **/
233
+ small, pre, textarea, textfield, button, input, select {
234
+ color: #4B4B4C !important;
235
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAeCAMAAAAxfD/2AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAtUExURfT09PLy8vHx8fv7+/j4+PX19fn5+fr6+vf39/z8/Pb29vPz8/39/f7+/v///0c8Y4oAAAA5SURBVHjaXMZJDgAgCMDAuouA/3+uHPRiMmlKzmhCFRorLOakVnpnDEpBBDHM8ODs/bz372+PAAMAXIQCfD6uIDsAAAAASUVORK5CYII=) !important;
236
+ background-color: #FFF !important;
237
+ background-repeat: repeat-x !important;
238
+ border: 1px solid #CCC !important;
239
+ }
240
+
241
+ button, input { margin: 3px; }
242
+
@@ -0,0 +1,491 @@
1
+ CAMPING_EXTRAS_DIR = File.expand_path(File.dirname(__FILE__))
2
+
3
+ module Generators
4
+ class HTMLGenerator
5
+ def generate_html
6
+ @files_and_classes = {
7
+ 'allfiles' => gen_into_index(@files),
8
+ 'allclasses' => gen_into_index(@classes),
9
+ "initial_page" => main_url,
10
+ 'realtitle' => CGI.escapeHTML(@options.title),
11
+ 'charset' => @options.charset
12
+ }
13
+
14
+ # the individual descriptions for files and classes
15
+ gen_into(@files)
16
+ gen_into(@classes)
17
+ gen_main_index
18
+
19
+ # this method is defined in the template file
20
+ write_extra_pages if defined? write_extra_pages
21
+ end
22
+
23
+ def gen_into(list)
24
+ hsh = @files_and_classes.dup
25
+ list.each do |item|
26
+ if item.document_self
27
+ op_file = item.path
28
+ hsh['root'] = item.path.split("/").map { ".." }[1..-1].join("/")
29
+ item.instance_variable_set("@values", hsh)
30
+ File.makedirs(File.dirname(op_file))
31
+ File.open(op_file, "w") { |file| item.write_on(file) }
32
+ end
33
+ end
34
+ end
35
+
36
+ def gen_into_index(list)
37
+ res = []
38
+ list.each do |item|
39
+ hsh = item.value_hash
40
+ hsh['href'] = item.path
41
+ hsh['name'] = item.index_name
42
+ res << hsh
43
+ end
44
+ res
45
+ end
46
+
47
+ def gen_main_index
48
+ template = TemplatePage.new(RDoc::Page::INDEX)
49
+ File.open("index.html", "w") do |f|
50
+ values = @files_and_classes.dup
51
+ if @options.inline_source
52
+ values['inline_source'] = true
53
+ end
54
+ template.write_html_on(f, values)
55
+ end
56
+ ['Camping.gif', 'permalink.gif'].each do |img|
57
+ ipath = File.join(CAMPING_EXTRAS_DIR, img)
58
+ File.copy(ipath, img)
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+
65
+ module RDoc
66
+ module Page
67
+ ######################################################################
68
+ #
69
+ # The following is used for the -1 option
70
+ #
71
+
72
+ FONTS = "verdana,arial,'Bitstream Vera Sans',helvetica,sans-serif"
73
+
74
+ STYLE = %{
75
+ body, th, td {
76
+ font: normal 14px verdana,arial,'Bitstream Vera Sans',helvetica,sans-serif;
77
+ line-height: 160%;
78
+ padding: 0; margin: 0;
79
+ margin-bottom: 30px;
80
+ /* background-color: #402; */
81
+ background-color: #694;
82
+ }
83
+ h1, h2, h3, h4 {
84
+ font-family: Utopia, Georgia, serif;
85
+ font-weight: bold;
86
+ letter-spacing: -0.018em;
87
+ }
88
+ h1 { font-size: 24px; margin: .15em 1em 0 0 }
89
+ h2 { font-size: 24px }
90
+ h3 { font-size: 19px }
91
+ h4 { font-size: 17px; font-weight: normal; }
92
+ h4.ruled { border-bottom: solid 1px #CC9; }
93
+ h2.ruled { padding-top: 35px; border-top: solid 1px #AA5; }
94
+
95
+ /* Link styles */
96
+ :link, :visited {
97
+ color: #00b;
98
+ }
99
+ :link:hover, :visited:hover {
100
+ background-color: #eee;
101
+ color: #B22;
102
+ }
103
+ #fullpage {
104
+ width: 720px;
105
+ margin: 0 auto;
106
+ }
107
+ .page_shade, .page {
108
+ padding: 0px 5px 5px 0px;
109
+ background-color: #fcfcf9;
110
+ border: solid 1px #983;
111
+ }
112
+ .page {
113
+ margin-left: -5px;
114
+ margin-top: -5px;
115
+ padding: 20px 35px;
116
+ }
117
+ .page .header {
118
+ float: right;
119
+ color: #777;
120
+ font-size: 10px;
121
+ }
122
+ .page h1, .page h2, .page h3 {
123
+ clear: both;
124
+ text-align: center;
125
+ }
126
+ #pager {
127
+ padding: 10px 4px;
128
+ color: white;
129
+ font-size: 11px;
130
+ }
131
+ #pager :link, #pager :visited {
132
+ color: #bfb;
133
+ padding: 0px 5px;
134
+ }
135
+ #pager :link:hover, #pager :visited:hover {
136
+ background-color: #262;
137
+ color: white;
138
+ }
139
+ #logo { float: left; }
140
+ #menu { background-color: #dfa; padding: 4px 12px; margin: 0; }
141
+ #menu h3 { padding: 0; margin: 0; }
142
+ #menu #links { float: right; }
143
+ pre { font-weight: bold; color: #730; }
144
+ tt { color: #703; font-size: 12pt; }
145
+ .dyn-source { background-color: #775915; padding: 4px 8px; margin: 0; display: none; }
146
+ .dyn-source pre { color: #DDDDDD; font-size: 8pt; }
147
+ .source-link { text-align: right; font-size: 8pt; }
148
+ .ruby-comment { color: green; font-style: italic }
149
+ .ruby-constant { color: #CCDDFF; font-weight: bold; }
150
+ .ruby-identifier { color: #CCCCCC; }
151
+ .ruby-ivar { color: #BBCCFF; }
152
+ .ruby-keyword { color: #EEEEFF; font-weight: bold }
153
+ .ruby-node { color: #FFFFFF; }
154
+ .ruby-operator { color: #CCCCCC; }
155
+ .ruby-regexp { color: #DDFFDD; }
156
+ .ruby-value { color: #FFAAAA; font-style: italic }
157
+ .kw { color: #DDDDFF; font-weight: bold }
158
+ .cmt { color: #CCFFCC; font-style: italic }
159
+ .str { color: #EECCCC; font-style: italic }
160
+ .re { color: #EECCCC; }
161
+ }
162
+
163
+ CONTENTS_XML = %{
164
+ IF:description
165
+ %description%
166
+ ENDIF:description
167
+
168
+ IF:requires
169
+ <h4>Requires:</h4>
170
+ <ul>
171
+ START:requires
172
+ IF:aref
173
+ <li><a href="%aref%">%name%</a></li>
174
+ ENDIF:aref
175
+ IFNOT:aref
176
+ <li>%name%</li>
177
+ ENDIF:aref
178
+ END:requires
179
+ </ul>
180
+ ENDIF:requires
181
+
182
+ IF:attributes
183
+ <h4>Attributes</h4>
184
+ <table>
185
+ START:attributes
186
+ <tr><td>%name%</td><td>%rw%</td><td>%a_desc%</td></tr>
187
+ END:attributes
188
+ </table>
189
+ ENDIF:attributes
190
+
191
+ IF:includes
192
+ <h4>Includes</h4>
193
+ <ul>
194
+ START:includes
195
+ IF:aref
196
+ <li><a href="%aref%">%name%</a></li>
197
+ ENDIF:aref
198
+ IFNOT:aref
199
+ <li>%name%</li>
200
+ ENDIF:aref
201
+ END:includes
202
+ </ul>
203
+ ENDIF:includes
204
+
205
+ START:sections
206
+ IF:method_list
207
+ <h2 class="ruled">Methods</h2>
208
+ START:method_list
209
+ IF:methods
210
+ START:methods
211
+ <h4 class="ruled">%type% %category% method:
212
+ IF:callseq
213
+ <strong><a name="%aref%">%callseq%</a></strong> <a href="#%aref%"><img src="%root%/permalink.gif" border="0" title="Permalink to %callseq%" /></a>
214
+ ENDIF:callseq
215
+ IFNOT:callseq
216
+ <strong><a name="%aref%">%name%%params%</a></strong> <a href="#%aref%"><img src="%root%/permalink.gif" border="0" title="Permalink to %type% %category% method: %name%" /></a></h4>
217
+ ENDIF:callseq
218
+
219
+ IF:m_desc
220
+ %m_desc%
221
+ ENDIF:m_desc
222
+
223
+ IF:sourcecode
224
+ <div class="sourcecode">
225
+ <p class="source-link">[ <a href="javascript:toggleSource('%aref%_source')" id="l_%aref%_source">show source</a> ]</p>
226
+ <div id="%aref%_source" class="dyn-source">
227
+ <pre>
228
+ %sourcecode%
229
+ </pre>
230
+ </div>
231
+ </div>
232
+ ENDIF:sourcecode
233
+ END:methods
234
+ ENDIF:methods
235
+ END:method_list
236
+ ENDIF:method_list
237
+ END:sections
238
+ }
239
+
240
+ ############################################################################
241
+
242
+
243
+ BODY = %{
244
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
245
+ <html>
246
+ <head>
247
+ <title>
248
+ IF:title
249
+ %realtitle% &raquo; %title%
250
+ ENDIF:title
251
+ IFNOT:title
252
+ %realtitle%
253
+ ENDIF:title
254
+ </title>
255
+ <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
256
+ <link rel="stylesheet" href="%style_url%" type="text/css" media="screen" />
257
+ <script language="JavaScript" type="text/javascript">
258
+ // <![CDATA[
259
+
260
+ function toggleSource( id )
261
+ {
262
+ var elem
263
+ var link
264
+
265
+ if( document.getElementById )
266
+ {
267
+ elem = document.getElementById( id )
268
+ link = document.getElementById( "l_" + id )
269
+ }
270
+ else if ( document.all )
271
+ {
272
+ elem = eval( "document.all." + id )
273
+ link = eval( "document.all.l_" + id )
274
+ }
275
+ else
276
+ return false;
277
+
278
+ if( elem.style.display == "block" )
279
+ {
280
+ elem.style.display = "none"
281
+ link.innerHTML = "show source"
282
+ }
283
+ else
284
+ {
285
+ elem.style.display = "block"
286
+ link.innerHTML = "hide source"
287
+ }
288
+ }
289
+
290
+ function openCode( url )
291
+ {
292
+ window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" )
293
+ }
294
+ // ]]>
295
+ </script>
296
+ </head>
297
+ <body>
298
+ <div id="menu">
299
+ <div id="links">
300
+ <a href="http://redhanded.hobix.com/bits/campingAMicroframework.html">backstory</a> |
301
+ <a href="http://code.whytheluckystiff.net/camping/">wiki</a> |
302
+ <a href="http://code.whytheluckystiff.net/camping/newticket">bugs</a> |
303
+ <a href="http://code.whytheluckystiff.net/svn/camping/">svn</a>
304
+ </div>
305
+ <h3 class="title">%title%</h3>
306
+ </div>
307
+ <div id="fullpage">
308
+ <div id="logo"><img src="%root%/Camping.gif" /></div>
309
+ <div id="pager">
310
+ <strong>Files:</strong>
311
+ START:allfiles
312
+ <a href="%root%/%href%" value="%title%">%name%</a>
313
+ END:allfiles
314
+ IF:allclasses
315
+ |
316
+ <strong>classes:</strong>
317
+ START:allclasses
318
+ <a href="%root%/%href%" title="%title%">%name%</a>
319
+ END:allclasses
320
+ ENDIF:allclasses
321
+ </ul>
322
+ </div>
323
+
324
+ !INCLUDE!
325
+
326
+ </div>
327
+ </body>
328
+ </html>
329
+ }
330
+
331
+ ###############################################################################
332
+
333
+ FILE_PAGE = <<_FILE_PAGE_
334
+ <div id="%full_path%" class="page_shade">
335
+ <div class="page">
336
+ <div class="header">
337
+ <div class="path">%full_path% / %dtm_modified%</div>
338
+ </div>
339
+ #{CONTENTS_XML}
340
+ </div>
341
+ </div>
342
+ _FILE_PAGE_
343
+
344
+ ###################################################################
345
+
346
+ CLASS_PAGE = %{
347
+ <div id="%full_name%" class="page_shade">
348
+ <div class="page">
349
+ IF:parent
350
+ <h3>%classmod% %full_name% &lt; HREF:par_url:parent:</h3>
351
+ ENDIF:parent
352
+ IFNOT:parent
353
+ <h3>%classmod% %full_name%</h3>
354
+ ENDIF:parent
355
+
356
+ IF:infiles
357
+ (in files
358
+ START:infiles
359
+ HREF:full_path_url:full_path:
360
+ END:infiles
361
+ )
362
+ ENDIF:infiles
363
+ } + CONTENTS_XML + %{
364
+ </div>
365
+ </div>
366
+ }
367
+
368
+ ###################################################################
369
+
370
+ METHOD_LIST = %{
371
+ IF:includes
372
+ <div class="tablesubsubtitle">Included modules</div><br>
373
+ <div class="name-list">
374
+ START:includes
375
+ <span class="method-name">HREF:aref:name:</span>
376
+ END:includes
377
+ </div>
378
+ ENDIF:includes
379
+
380
+ IF:method_list
381
+ START:method_list
382
+ IF:methods
383
+ <table cellpadding=5 width="100%">
384
+ <tr><td class="tablesubtitle">%type% %category% methods</td></tr>
385
+ </table>
386
+ START:methods
387
+ <table width="100%" cellspacing = 0 cellpadding=5 border=0>
388
+ <tr><td class="methodtitle">
389
+ <a name="%aref%">
390
+ IF:callseq
391
+ <b>%callseq%</b>
392
+ ENDIF:callseq
393
+ IFNOT:callseq
394
+ <b>%name%</b>%params%
395
+ ENDIF:callseq
396
+ IF:codeurl
397
+ <a href="%codeurl%" target="source" class="srclink">src</a>
398
+ ENDIF:codeurl
399
+ </a></td></tr>
400
+ </table>
401
+ IF:m_desc
402
+ <div class="description">
403
+ %m_desc%
404
+ </div>
405
+ ENDIF:m_desc
406
+ IF:aka
407
+ <div class="aka">
408
+ This method is also aliased as
409
+ START:aka
410
+ <a href="%aref%">%name%</a>
411
+ END:aka
412
+ </div>
413
+ ENDIF:aka
414
+ IF:sourcecode
415
+ <div class="sourcecode">
416
+ <p class="source-link">[ <a href="javascript:toggleSource('%aref%_source')" id="l_%aref%_source">show source</a> ]</p>
417
+ <div id="%aref%_source" class="dyn-source">
418
+ <pre>
419
+ %sourcecode%
420
+ </pre>
421
+ </div>
422
+ </div>
423
+ ENDIF:sourcecode
424
+ END:methods
425
+ ENDIF:methods
426
+ END:method_list
427
+ ENDIF:method_list
428
+ }
429
+
430
+
431
+ ########################## Index ################################
432
+
433
+ FR_INDEX_BODY = %{
434
+ !INCLUDE!
435
+ }
436
+
437
+ FILE_INDEX = %{
438
+ <html>
439
+ <head>
440
+ <meta http-equiv="Content-Type" content="text/html; charset=%charset%">
441
+ <style>
442
+ <!--
443
+ body {
444
+ background-color: #ddddff;
445
+ font-family: #{FONTS};
446
+ font-size: 11px;
447
+ font-style: normal;
448
+ line-height: 14px;
449
+ color: #000040;
450
+ }
451
+ div.banner {
452
+ background: #0000aa;
453
+ color: white;
454
+ padding: 1;
455
+ margin: 0;
456
+ font-size: 90%;
457
+ font-weight: bold;
458
+ line-height: 1.1;
459
+ text-align: center;
460
+ width: 100%;
461
+ }
462
+
463
+ -->
464
+ </style>
465
+ <base target="docwin">
466
+ </head>
467
+ <body>
468
+ <div class="banner">%list_title%</div>
469
+ START:entries
470
+ <a href="%href%">%name%</a><br>
471
+ END:entries
472
+ </body></html>
473
+ }
474
+
475
+ CLASS_INDEX = FILE_INDEX
476
+ METHOD_INDEX = FILE_INDEX
477
+
478
+ INDEX = %{
479
+ <HTML>
480
+ <HEAD>
481
+ <META HTTP-EQUIV="refresh" content="0;URL=%initial_page%">
482
+ <TITLE>%realtitle%</TITLE>
483
+ </HEAD>
484
+ <BODY>
485
+ Click <a href="%initial_page%">here</a> to open the Camping docs.
486
+ </BODY>
487
+ </HTML>
488
+ }
489
+
490
+ end
491
+ end