camping 1.4.2 → 1.5
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/CHANGELOG +44 -1
- data/README +4 -11
- data/Rakefile +10 -10
- data/bin/camping +155 -97
- data/doc/camping.1.gz +0 -0
- data/examples/{blog/blog.rb → blog.rb} +45 -59
- data/examples/{campsh/campsh.rb → campsh.rb} +38 -39
- data/examples/tepee.rb +242 -0
- data/lib/camping-unabridged.rb +203 -131
- data/lib/camping.rb +49 -48
- data/lib/camping/db.rb +78 -0
- data/lib/camping/fastcgi.rb +198 -0
- data/lib/camping/reloader.rb +169 -0
- data/lib/camping/session.rb +1 -1
- data/lib/camping/webrick.rb +51 -6
- metadata +73 -72
- data/examples/charts/charts.rb +0 -89
- data/examples/charts/pie.rb +0 -70
- data/examples/tepee/tepee.rb +0 -149
data/doc/camping.1.gz
ADDED
|
Binary file
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
3
|
$:.unshift File.dirname(__FILE__) + "/../../lib"
|
|
4
|
-
require '
|
|
5
|
-
require_gem 'camping', '>=1.4'
|
|
4
|
+
require 'camping'
|
|
6
5
|
require 'camping/session'
|
|
7
6
|
|
|
8
7
|
Camping.goes :Blog
|
|
@@ -12,35 +11,37 @@ module Blog
|
|
|
12
11
|
end
|
|
13
12
|
|
|
14
13
|
module Blog::Models
|
|
15
|
-
def self.schema(&block)
|
|
16
|
-
@@schema = block if block_given?
|
|
17
|
-
@@schema
|
|
18
|
-
end
|
|
19
|
-
|
|
20
14
|
class Post < Base; belongs_to :user; end
|
|
21
15
|
class Comment < Base; belongs_to :user; end
|
|
22
16
|
class User < Base; end
|
|
23
|
-
end
|
|
24
17
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
18
|
+
class CreateTheBasics < V 1.0
|
|
19
|
+
def self.up
|
|
20
|
+
create_table :blog_posts, :force => true do |t|
|
|
21
|
+
t.column :id, :integer, :null => false
|
|
22
|
+
t.column :user_id, :integer, :null => false
|
|
23
|
+
t.column :title, :string, :limit => 255
|
|
24
|
+
t.column :body, :text
|
|
25
|
+
end
|
|
26
|
+
create_table :blog_users, :force => true do |t|
|
|
27
|
+
t.column :id, :integer, :null => false
|
|
28
|
+
t.column :username, :string
|
|
29
|
+
t.column :password, :string
|
|
30
|
+
end
|
|
31
|
+
create_table :blog_comments, :force => true do |t|
|
|
32
|
+
t.column :id, :integer, :null => false
|
|
33
|
+
t.column :post_id, :integer, :null => false
|
|
34
|
+
t.column :username, :string
|
|
35
|
+
t.column :body, :text
|
|
36
|
+
end
|
|
37
|
+
User.create :username => 'admin', :password => 'camping'
|
|
38
|
+
end
|
|
39
|
+
def self.down
|
|
40
|
+
drop_table :blog_posts
|
|
41
|
+
drop_table :blog_users
|
|
42
|
+
drop_table :blog_comments
|
|
43
|
+
end
|
|
42
44
|
end
|
|
43
|
-
execute "INSERT INTO blog_users (username, password) VALUES ('admin', 'camping')"
|
|
44
45
|
end
|
|
45
46
|
|
|
46
47
|
module Blog::Controllers
|
|
@@ -60,9 +61,11 @@ module Blog::Controllers
|
|
|
60
61
|
render :add
|
|
61
62
|
end
|
|
62
63
|
def post
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
unless @state.user_id.blank?
|
|
65
|
+
post = Post.create :title => input.post_title, :body => input.post_body,
|
|
66
|
+
:user_id => @state.user_id
|
|
67
|
+
redirect View, post
|
|
68
|
+
end
|
|
66
69
|
end
|
|
67
70
|
end
|
|
68
71
|
|
|
@@ -70,7 +73,7 @@ module Blog::Controllers
|
|
|
70
73
|
def get(*args)
|
|
71
74
|
div do
|
|
72
75
|
code args.inspect; br; br
|
|
73
|
-
code
|
|
76
|
+
code @env.inspect; br
|
|
74
77
|
code "Link: #{R(Info, 1, 2)}"
|
|
75
78
|
end
|
|
76
79
|
end
|
|
@@ -94,9 +97,11 @@ module Blog::Controllers
|
|
|
94
97
|
end
|
|
95
98
|
|
|
96
99
|
def post
|
|
97
|
-
@
|
|
98
|
-
|
|
99
|
-
|
|
100
|
+
unless @state.user_id.blank?
|
|
101
|
+
@post = Post.find input.post_id
|
|
102
|
+
@post.update_attributes :title => input.post_title, :body => input.post_body
|
|
103
|
+
redirect View, @post
|
|
104
|
+
end
|
|
100
105
|
end
|
|
101
106
|
end
|
|
102
107
|
|
|
@@ -189,7 +194,7 @@ module Blog::Views
|
|
|
189
194
|
|
|
190
195
|
def add
|
|
191
196
|
if @user
|
|
192
|
-
_form(post, :action => R(Add))
|
|
197
|
+
_form(@post, :action => R(Add))
|
|
193
198
|
else
|
|
194
199
|
_login
|
|
195
200
|
end
|
|
@@ -197,14 +202,14 @@ module Blog::Views
|
|
|
197
202
|
|
|
198
203
|
def edit
|
|
199
204
|
if @user
|
|
200
|
-
_form(post, :action => R(Edit))
|
|
205
|
+
_form(@post, :action => R(Edit))
|
|
201
206
|
else
|
|
202
207
|
_login
|
|
203
208
|
end
|
|
204
209
|
end
|
|
205
210
|
|
|
206
211
|
def view
|
|
207
|
-
_post(post)
|
|
212
|
+
_post(@post)
|
|
208
213
|
|
|
209
214
|
p "Comment for this post:"
|
|
210
215
|
for c in @comments
|
|
@@ -217,7 +222,7 @@ module Blog::Views
|
|
|
217
222
|
input :name => 'post_username', :type => 'text'; br
|
|
218
223
|
label 'Comment', :for => 'post_body'; br
|
|
219
224
|
textarea :name => 'post_body' do; end; br
|
|
220
|
-
input :type => 'hidden', :name => 'post_id', :value => post.id
|
|
225
|
+
input :type => 'hidden', :name => 'post_id', :value => @post.id
|
|
221
226
|
input :type => 'submit'
|
|
222
227
|
end
|
|
223
228
|
end
|
|
@@ -239,16 +244,12 @@ module Blog::Views
|
|
|
239
244
|
h1 post.title
|
|
240
245
|
p post.body
|
|
241
246
|
p do
|
|
242
|
-
a
|
|
243
|
-
a "View", :href => R(View, post)
|
|
247
|
+
[a("Edit", :href => R(Edit, post)), a("View", :href => R(View, post))].join " | "
|
|
244
248
|
end
|
|
245
249
|
end
|
|
246
250
|
|
|
247
251
|
def _form(post, opts)
|
|
248
|
-
p
|
|
249
|
-
text "You are logged in as #{@user.username} | "
|
|
250
|
-
a 'Logout', :href => R(Logout)
|
|
251
|
-
end
|
|
252
|
+
p { "You are logged in as #{@user.username} | #{a 'Logout', :href => R(Logout)}" }
|
|
252
253
|
form({:method => 'post'}.merge(opts)) do
|
|
253
254
|
label 'Title', :for => 'post_title'; br
|
|
254
255
|
input :name => 'post_title', :type => 'text',
|
|
@@ -265,21 +266,6 @@ end
|
|
|
265
266
|
|
|
266
267
|
def Blog.create
|
|
267
268
|
Camping::Models::Session.create_schema
|
|
268
|
-
|
|
269
|
-
ActiveRecord::Schema.define(&Blog::Models.schema)
|
|
270
|
-
end
|
|
269
|
+
Blog::Models.create_schema :assume => (Blog::Models::Post.table_exists? ? 1.0 : 0.0)
|
|
271
270
|
end
|
|
272
271
|
|
|
273
|
-
if __FILE__ == $0
|
|
274
|
-
require 'mongrel/camping'
|
|
275
|
-
|
|
276
|
-
Blog::Models::Base.establish_connection :adapter => 'sqlite3', :database => 'blog.db'
|
|
277
|
-
Blog::Models::Base.logger = Logger.new('camping.log')
|
|
278
|
-
Blog::Models::Base.threaded_connections=false
|
|
279
|
-
Blog.create
|
|
280
|
-
|
|
281
|
-
server = Mongrel::Camping::start("0.0.0.0",3002,"/blog",Blog)
|
|
282
|
-
puts "** Blog example is running at http://localhost:3002/blog"
|
|
283
|
-
puts "** Default username is `admin', password is `camping'"
|
|
284
|
-
server.run.join
|
|
285
|
-
end
|
|
@@ -6,7 +6,7 @@ $:.unshift File.dirname(__FILE__) + "/../../lib"
|
|
|
6
6
|
Camping.goes :CampSh
|
|
7
7
|
|
|
8
8
|
module CampSh
|
|
9
|
-
NAME = '
|
|
9
|
+
NAME = 'CampSh'
|
|
10
10
|
DESCRIPTION = %{
|
|
11
11
|
Script your own URL commands, then run these commands through
|
|
12
12
|
the proxy with "cmd/CommandName". All scripts are versioned
|
|
@@ -22,19 +22,7 @@ module CampSh
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def self.create
|
|
25
|
-
|
|
26
|
-
ActiveRecord::Schema.define do
|
|
27
|
-
create_table :campsh_commands, :force => true do |t|
|
|
28
|
-
t.column :id, :integer, :null => false
|
|
29
|
-
t.column :author, :string, :limit => 40
|
|
30
|
-
t.column :name, :string, :limit => 255
|
|
31
|
-
t.column :created_at, :datetime
|
|
32
|
-
t.column :doc, :text
|
|
33
|
-
t.column :code, :text
|
|
34
|
-
end
|
|
35
|
-
CampSh::Models::Command.create_versioned_table
|
|
36
|
-
end
|
|
37
|
-
end
|
|
25
|
+
Models.create_schema :assume => (Models::Command.table_exists? ? 1.0 : 0.0)
|
|
38
26
|
end
|
|
39
27
|
end
|
|
40
28
|
|
|
@@ -44,6 +32,24 @@ module CampSh::Models
|
|
|
44
32
|
validates_presence_of :author
|
|
45
33
|
acts_as_versioned
|
|
46
34
|
end
|
|
35
|
+
class CreateBasics < V 1.0
|
|
36
|
+
def self.up
|
|
37
|
+
create_table :campsh_commands, :force => true do |t|
|
|
38
|
+
t.column :id, :integer, :null => false
|
|
39
|
+
t.column :author, :string, :limit => 40
|
|
40
|
+
t.column :name, :string, :limit => 255
|
|
41
|
+
t.column :created_at, :datetime
|
|
42
|
+
t.column :doc, :text
|
|
43
|
+
t.column :code, :text
|
|
44
|
+
end
|
|
45
|
+
Command.create_versioned_table
|
|
46
|
+
Command.reset_column_information
|
|
47
|
+
end
|
|
48
|
+
def self.down
|
|
49
|
+
drop_table :campsh_commands
|
|
50
|
+
Command.drop_versioned_table
|
|
51
|
+
end
|
|
52
|
+
end
|
|
47
53
|
end
|
|
48
54
|
|
|
49
55
|
module CampSh::Controllers
|
|
@@ -101,7 +107,7 @@ module CampSh::Controllers
|
|
|
101
107
|
class Show < R '/show/(\w+)', '/show/(\w+)/(\d+)', '/cancel_edit/(\w+)'
|
|
102
108
|
def get(name, version = nil)
|
|
103
109
|
unless @cmd = Command.find_by_name(name)
|
|
104
|
-
redirect(Edit,
|
|
110
|
+
redirect(Edit, name)
|
|
105
111
|
return
|
|
106
112
|
end
|
|
107
113
|
@version = (version.nil? or version == @cmd.version.to_s) ? @cmd : @cmd.versions.find_by_version(version)
|
|
@@ -127,13 +133,11 @@ module CampSh::Controllers
|
|
|
127
133
|
@cmd = Command.find_by_name(name)
|
|
128
134
|
@cmd = @cmd.versions.find_by_version(version) unless version.nil? or version == @cmd.version.to_s
|
|
129
135
|
@title = "Editing #{name}"
|
|
130
|
-
@author = cookies.cmd_author
|
|
136
|
+
@author = @cookies.cmd_author || CampSh::ANON
|
|
131
137
|
render :edit
|
|
132
138
|
end
|
|
133
139
|
def post(name)
|
|
134
|
-
|
|
135
|
-
cookies.cmd_author = input.author
|
|
136
|
-
end
|
|
140
|
+
@cookies.cmd_author = input.command.author
|
|
137
141
|
Command.find_or_create_by_name(name).update_attributes(input.command)
|
|
138
142
|
redirect Show, name
|
|
139
143
|
end
|
|
@@ -484,14 +488,13 @@ module CampSh::Views
|
|
|
484
488
|
|
|
485
489
|
def _navigation
|
|
486
490
|
form :id => "navigationForm", :class => "navigation", :style => "font-size: 10px" do
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
a "How To", :href => R(HowTo), :title => "How to use CampShell", :accesskey => "H"
|
|
491
|
+
[["Command List", R(List), "Alphabetical list of commands", "A"],
|
|
492
|
+
["Recently Revised", R(Recent), "Pages sorted by when they were last changed", "U"],
|
|
493
|
+
["Authors", R(Authors), "Who wrote what", "W"],
|
|
494
|
+
["How To", R(HowTo), "How to use CampShell", "H"]
|
|
495
|
+
].map do |txt, link, title, key|
|
|
496
|
+
a txt, :href => link, :title => title, :accesskey => key
|
|
497
|
+
end.join(" | ")
|
|
495
498
|
end
|
|
496
499
|
end
|
|
497
500
|
|
|
@@ -522,11 +525,8 @@ module CampSh::Views
|
|
|
522
525
|
ul.authorList! do
|
|
523
526
|
@authors.each do |author, cmds|
|
|
524
527
|
li do
|
|
525
|
-
strong
|
|
526
|
-
|
|
527
|
-
cmds.map { |cmd|
|
|
528
|
-
capture { a cmd.name, :href => R(Show, cmd.name) }
|
|
529
|
-
}.join(", ")
|
|
528
|
+
strong(author) + " worked on: " +
|
|
529
|
+
cmds.map { |cmd| a cmd.name, :href => R(Show, cmd.name) }.join(", ")
|
|
530
530
|
end
|
|
531
531
|
end
|
|
532
532
|
end
|
|
@@ -563,13 +563,18 @@ module CampSh::Views
|
|
|
563
563
|
a "Edit Page", :href => R(Edit, @version.name, @version.version),
|
|
564
564
|
:class => "navlink", :accesskey => "E"
|
|
565
565
|
unless @version.version == 1
|
|
566
|
+
text " | "
|
|
566
567
|
a 'Back in time', :href => R(Show, @version.name, @version.version-1)
|
|
567
568
|
end
|
|
568
569
|
unless @version.version == @cmd.version
|
|
570
|
+
text " | "
|
|
569
571
|
a 'Next', :href => R(Show, @version.name, @version.version+1)
|
|
572
|
+
text " | "
|
|
570
573
|
a 'Current', :href => R(Show, @version.name)
|
|
571
574
|
end
|
|
572
|
-
|
|
575
|
+
if @cmd.versions.size > 1
|
|
576
|
+
small "(#{ @cmd.versions.size } revisions)"
|
|
577
|
+
end
|
|
573
578
|
end
|
|
574
579
|
end
|
|
575
580
|
|
|
@@ -623,9 +628,3 @@ module CampSh::Views
|
|
|
623
628
|
end
|
|
624
629
|
end
|
|
625
630
|
|
|
626
|
-
if __FILE__ == $0
|
|
627
|
-
CampSh::Models::Base.establish_connection :adapter => 'sqlite3', :database => 'campsh.db'
|
|
628
|
-
CampSh::Models::Base.logger = Logger.new('camping.log')
|
|
629
|
-
CampSh.create
|
|
630
|
-
puts CampSh.run
|
|
631
|
-
end
|
data/examples/tepee.rb
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
#!/usr/bin/ruby
|
|
2
|
+
$:.unshift File.dirname(__FILE__) + "/../../lib"
|
|
3
|
+
%w(rubygems redcloth camping 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, :force => true 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
|
+
|