merb 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/README +64 -80
- data/Rakefile +25 -12
- data/bin/merb +2 -223
- data/examples/README_EXAMPLES +10 -0
- data/examples/skeleton.tar +0 -0
- data/lib/merb.rb +48 -21
- data/lib/merb/core_ext.rb +12 -2
- data/lib/merb/core_ext/merb_class.rb +21 -21
- data/lib/merb/core_ext/merb_kernel.rb +60 -0
- data/lib/merb/core_ext/merb_object.rb +14 -0
- data/lib/merb/core_ext/merb_string.rb +3 -13
- data/lib/merb/generators/merb_app/merb_app.rb +33 -0
- data/lib/merb/merb_constants.rb +7 -0
- data/lib/merb/merb_controller.rb +31 -23
- data/lib/merb/merb_drb_server.rb +6 -60
- data/lib/merb/merb_exceptions.rb +162 -2
- data/lib/merb/merb_handler.rb +8 -19
- data/lib/merb/merb_mailer.rb +60 -0
- data/lib/merb/merb_router.rb +1 -1
- data/lib/merb/merb_server.rb +240 -0
- data/lib/merb/merb_upload_handler.rb +1 -1
- data/lib/merb/merb_view_context.rb +11 -6
- data/lib/merb/mixins/basic_authentication_mixin.rb +11 -13
- data/lib/merb/mixins/controller_mixin.rb +12 -6
- data/lib/merb/mixins/form_control_mixin.rb +94 -0
- data/lib/merb/mixins/render_mixin.rb +50 -24
- data/lib/merb/mixins/view_context_mixin.rb +122 -0
- data/lib/merb/session/merb_ar_session.rb +13 -14
- data/lib/merb/session/merb_memory_session.rb +105 -0
- metadata +13 -132
- data/examples/app_skeleton/Rakefile +0 -82
- data/examples/app_skeleton/dist/app/helpers/global_helper.rb +0 -6
- data/examples/app_skeleton/dist/conf/merb.yml +0 -11
- data/examples/app_skeleton/dist/conf/merb_init.rb +0 -16
- data/examples/app_skeleton/dist/conf/mup.conf +0 -5
- data/examples/app_skeleton/dist/conf/router.rb +0 -19
- data/examples/app_skeleton/scripts/merb_stop +0 -13
- data/examples/app_skeleton/scripts/new_migration +0 -21
- data/examples/app_skeleton/test/test_helper.rb +0 -1
- data/examples/sample_app/Rakefile +0 -82
- data/examples/sample_app/dist/app/controllers/files.rb +0 -31
- data/examples/sample_app/dist/app/controllers/posts.rb +0 -71
- data/examples/sample_app/dist/app/controllers/test.rb +0 -40
- data/examples/sample_app/dist/app/helpers/global_helper.rb +0 -7
- data/examples/sample_app/dist/app/helpers/posts_helper.rb +0 -4
- data/examples/sample_app/dist/app/models/comment.rb +0 -3
- data/examples/sample_app/dist/app/models/post.rb +0 -4
- data/examples/sample_app/dist/app/views/files/progress.jerb +0 -3
- data/examples/sample_app/dist/app/views/files/start.herb +0 -62
- data/examples/sample_app/dist/app/views/files/upload.herb +0 -6
- data/examples/sample_app/dist/app/views/layout/application.herb +0 -61
- data/examples/sample_app/dist/app/views/layout/foo.herb +0 -6
- data/examples/sample_app/dist/app/views/posts/_comments.herb +0 -11
- data/examples/sample_app/dist/app/views/posts/comment.jerb +0 -1
- data/examples/sample_app/dist/app/views/posts/list.herb +0 -5
- data/examples/sample_app/dist/app/views/posts/new.herb +0 -37
- data/examples/sample_app/dist/app/views/posts/show.herb +0 -37
- data/examples/sample_app/dist/app/views/posts/xml_test.xerb +0 -3
- data/examples/sample_app/dist/app/views/shared/_test.herb +0 -1
- data/examples/sample_app/dist/app/views/test/foo.herb +0 -2
- data/examples/sample_app/dist/app/views/test/hello.herb +0 -5
- data/examples/sample_app/dist/app/views/test/json.jerb +0 -1
- data/examples/sample_app/dist/conf/merb.yml +0 -11
- data/examples/sample_app/dist/conf/merb_init.rb +0 -24
- data/examples/sample_app/dist/conf/mup.conf +0 -5
- data/examples/sample_app/dist/conf/router.rb +0 -19
- data/examples/sample_app/dist/public/images/bg.jpg +0 -0
- data/examples/sample_app/dist/public/images/book.gif +0 -0
- data/examples/sample_app/dist/public/images/booksmall.gif +0 -0
- data/examples/sample_app/dist/public/images/greenright.jpg +0 -0
- data/examples/sample_app/dist/public/images/louiecon.gif +0 -0
- data/examples/sample_app/dist/public/images/menu.gif +0 -0
- data/examples/sample_app/dist/public/images/menuleft.gif +0 -0
- data/examples/sample_app/dist/public/images/menuright.gif +0 -0
- data/examples/sample_app/dist/public/images/mountain.jpg +0 -0
- data/examples/sample_app/dist/public/images/n3.jpg +0 -0
- data/examples/sample_app/dist/public/images/nautica.jpg +0 -0
- data/examples/sample_app/dist/public/javascripts/application.js +0 -0
- data/examples/sample_app/dist/public/javascripts/effects.js +0 -975
- data/examples/sample_app/dist/public/javascripts/mup.js +0 -113
- data/examples/sample_app/dist/public/javascripts/prototype.js +0 -2264
- data/examples/sample_app/dist/public/stylesheets/merb.css +0 -277
- data/examples/sample_app/dist/public/test.html +0 -5
- data/examples/sample_app/dist/schema/migrations/001_add_comments_to_posts.rb +0 -22
- data/examples/sample_app/dist/schema/migrations/002_add_sessions_table.rb +0 -14
- data/examples/sample_app/dist/schema/schema.rb +0 -28
- data/examples/sample_app/foo.txt +0 -0
- data/examples/sample_app/log/merb.4000.pid +0 -1
- data/examples/sample_app/script/merb_stop +0 -13
- data/examples/sample_app/script/new_migration +0 -21
- data/examples/sample_app/test/test_helper.rb +0 -1
- data/lib/merb/mixins/javascript_mixin.rb +0 -147
- data/lib/merb/session/merb_drb_session.rb +0 -65
- data/test/test_helper.rb +0 -1
- data/test/unit/route_matcher_test.rb +0 -46
@@ -1,277 +0,0 @@
|
|
1
|
-
|
2
|
-
html{
|
3
|
-
padding:0;
|
4
|
-
margin:0;
|
5
|
-
}
|
6
|
-
|
7
|
-
body{
|
8
|
-
background:#ffffff url('/images/bg.jpg') top center repeat-x;
|
9
|
-
margin:0;
|
10
|
-
padding:0;
|
11
|
-
color:#999999;
|
12
|
-
font-family:"Trebuchet MS",arial,sans-serif;
|
13
|
-
font-size:62.5%;
|
14
|
-
text-align:center;
|
15
|
-
}
|
16
|
-
|
17
|
-
h1{
|
18
|
-
font-family:"Trebuchet MS",arial,sans-serif;
|
19
|
-
font-size:2.6em;
|
20
|
-
font-weight:normal;
|
21
|
-
background:#fff url(/images/booksmall.gif) no-repeat bottom left;
|
22
|
-
padding:0 0 10px 50px;
|
23
|
-
margin:20px 5px 5px 5px;
|
24
|
-
}
|
25
|
-
|
26
|
-
h3{
|
27
|
-
color:#9aba11;
|
28
|
-
font-family:geneva,arial,sans-serif;
|
29
|
-
font-weight:normal;
|
30
|
-
text-transform:uppercase;
|
31
|
-
word-spacing:4px;
|
32
|
-
letter-spacing:3px;
|
33
|
-
font-size:0.8em;
|
34
|
-
font-weight:bold;
|
35
|
-
padding:0 2px;
|
36
|
-
margin:0;
|
37
|
-
}
|
38
|
-
|
39
|
-
h2{
|
40
|
-
font-family:"Lucida Grande","Lucida Sans Unicode",arial,sans-serif;
|
41
|
-
font-size:1.4em;
|
42
|
-
margin:auto;
|
43
|
-
text-transform:capitalize;
|
44
|
-
}
|
45
|
-
|
46
|
-
h2 span{
|
47
|
-
background:#fff url(/images/booksmall.gif) no-repeat bottom right;
|
48
|
-
padding:10px 50px 0px 0;
|
49
|
-
margin:auto;
|
50
|
-
line-height:2em;
|
51
|
-
}
|
52
|
-
|
53
|
-
p{
|
54
|
-
line-height:1.8em;
|
55
|
-
}
|
56
|
-
|
57
|
-
a{
|
58
|
-
text-decoration:none;
|
59
|
-
color:#72a12d;
|
60
|
-
border-bottom:1px solid #dbe6be;
|
61
|
-
}
|
62
|
-
|
63
|
-
a:hover{
|
64
|
-
color:#999999;
|
65
|
-
background-color:#fcfded;
|
66
|
-
border-bottom:1px solid #aecb6e;
|
67
|
-
}
|
68
|
-
|
69
|
-
#border{
|
70
|
-
width:700px;
|
71
|
-
padding:0;
|
72
|
-
margin:15px auto;
|
73
|
-
background:#fff
|
74
|
-
|
75
|
-
}
|
76
|
-
|
77
|
-
#blogtitle{
|
78
|
-
width:700px;
|
79
|
-
margin:10px auto;
|
80
|
-
padding:0 0 5px 0;
|
81
|
-
text-align:left;
|
82
|
-
padding-left: 20px;
|
83
|
-
font-size:1.1em;
|
84
|
-
line-height:1.2em;
|
85
|
-
|
86
|
-
}
|
87
|
-
|
88
|
-
#small{
|
89
|
-
background: url(/images/nautica.jpg) no-repeat;
|
90
|
-
padding-left: 20px;
|
91
|
-
}
|
92
|
-
|
93
|
-
#blogtitle a:link, a:visited{
|
94
|
-
color:#b8ce83;
|
95
|
-
}
|
96
|
-
|
97
|
-
#blogtitle a:hover, a:active{
|
98
|
-
color:#cccccc;
|
99
|
-
}
|
100
|
-
|
101
|
-
#container{
|
102
|
-
font-size:1.2em;
|
103
|
-
text-align:left;
|
104
|
-
margin:0px 0 0px 0;
|
105
|
-
padding:10px;
|
106
|
-
border-color:#686923;
|
107
|
-
border-style:solid;
|
108
|
-
border-width:0 0px;
|
109
|
-
}
|
110
|
-
|
111
|
-
#introduction{
|
112
|
-
float:right;
|
113
|
-
width:170px;
|
114
|
-
padding:10px 20px;
|
115
|
-
margin:20px 0 20px 20px;
|
116
|
-
background: url(/images/menu.gif) no-repeat;
|
117
|
-
text-align:center;
|
118
|
-
line-height:1.5em;
|
119
|
-
color:#999999;
|
120
|
-
font-size:1.0em;
|
121
|
-
font-family:"Lucida Grande","Lucida Sans Unicode",arial,sans-serif;
|
122
|
-
letter-spacing:0px;
|
123
|
-
}
|
124
|
-
|
125
|
-
#introduction ul, #introduction li {
|
126
|
-
text-align:center;
|
127
|
-
list-style: none;
|
128
|
-
margin: 0;
|
129
|
-
padding: 0;
|
130
|
-
}
|
131
|
-
|
132
|
-
#introduction a {
|
133
|
-
border-bottom: none;
|
134
|
-
color:#999999;
|
135
|
-
}
|
136
|
-
|
137
|
-
#introduction h3{
|
138
|
-
text-align: center;
|
139
|
-
position:static;
|
140
|
-
}
|
141
|
-
|
142
|
-
.splitright {
|
143
|
-
background-color: #ffffff;
|
144
|
-
margin:19px 0 0 0;
|
145
|
-
width: 45%;
|
146
|
-
float: right;
|
147
|
-
overflow: hidden;
|
148
|
-
}
|
149
|
-
|
150
|
-
.splitleft {
|
151
|
-
background-color: #ffffff;
|
152
|
-
margin:19px 0 0 0;
|
153
|
-
width: 45%;
|
154
|
-
float: left;
|
155
|
-
overflow: hidden;
|
156
|
-
}
|
157
|
-
|
158
|
-
.maintext {
|
159
|
-
background-color: #ffffff;
|
160
|
-
text-align:justify;
|
161
|
-
margin:0px auto;
|
162
|
-
padding-top:5px;
|
163
|
-
width: 65%;
|
164
|
-
float: left;
|
165
|
-
overflow: hidden;
|
166
|
-
}
|
167
|
-
|
168
|
-
.maintext img{
|
169
|
-
display:inline;
|
170
|
-
color:#303030;
|
171
|
-
border: 2px dashed #CCCCCC;
|
172
|
-
background-color: #FFFFFF;
|
173
|
-
top: 0px;
|
174
|
-
clip: rect(0px,auto,auto,auto);
|
175
|
-
padding: 2px;
|
176
|
-
}
|
177
|
-
|
178
|
-
.maintext2 {
|
179
|
-
background-color: #ffffff;
|
180
|
-
padding:5px;
|
181
|
-
margin:0px auto;
|
182
|
-
width: 75%;
|
183
|
-
height:45px;
|
184
|
-
float: left;
|
185
|
-
overflow: hidden;
|
186
|
-
}
|
187
|
-
|
188
|
-
.maintext3 {
|
189
|
-
background-color: #ffffff;
|
190
|
-
margin:0px 0px 0px 0px;
|
191
|
-
width: 100%;
|
192
|
-
float: left;
|
193
|
-
|
194
|
-
}
|
195
|
-
|
196
|
-
#footer{
|
197
|
-
background-color: #ffffff;
|
198
|
-
border-top: 1px solid #86C32A;
|
199
|
-
margin:80px 0 0 0;
|
200
|
-
padding-top: 5px;
|
201
|
-
width: 100%;
|
202
|
-
float: left;
|
203
|
-
overflow: hidden;
|
204
|
-
}
|
205
|
-
|
206
|
-
|
207
|
-
#footer a{
|
208
|
-
background-color:#fff;
|
209
|
-
border:0;
|
210
|
-
}
|
211
|
-
#footer a:link, a:visited{
|
212
|
-
color:#b8ce83;
|
213
|
-
}
|
214
|
-
|
215
|
-
#footer a:hover, a:active{
|
216
|
-
color:#999999;
|
217
|
-
}
|
218
|
-
|
219
|
-
/* ~~~~~~~~~ PROPS FOR THE MENU GO OUT TO EXPLODING-BOY.COM ~~~~~~~~~ */
|
220
|
-
|
221
|
-
#topmenu {
|
222
|
-
position: relative;
|
223
|
-
top: 13px;
|
224
|
-
left: 0px;
|
225
|
-
width: 600px;
|
226
|
-
font-size:93%;
|
227
|
-
margin: 0;
|
228
|
-
line-height:normal;
|
229
|
-
height: 35px;
|
230
|
-
}
|
231
|
-
#topmenu ul {
|
232
|
-
margin:0;
|
233
|
-
padding:0px 0px 0 0px;
|
234
|
-
list-style:none;
|
235
|
-
}
|
236
|
-
#topmenu li {
|
237
|
-
display:inline;
|
238
|
-
margin:0;
|
239
|
-
padding:0;
|
240
|
-
}
|
241
|
-
#topmenu a {
|
242
|
-
float:left;
|
243
|
-
background:url(/images/menuleft.gif) no-repeat left top;
|
244
|
-
margin:0;
|
245
|
-
padding:0 0 0 4px;
|
246
|
-
text-decoration:none;
|
247
|
-
}
|
248
|
-
#topmenu a span {
|
249
|
-
float:left;
|
250
|
-
display:block;
|
251
|
-
background:url(/images/menuright.gif) no-repeat right top;
|
252
|
-
padding:5px 15px 4px 6px;
|
253
|
-
color:#669900;
|
254
|
-
}
|
255
|
-
|
256
|
-
/* Commented Backslash Hack hides rule from IE5-Mac \*/
|
257
|
-
#topmenu a span {float:none;}
|
258
|
-
/* End IE5-Mac hack */
|
259
|
-
#topmenu a:hover span {
|
260
|
-
color:#999999;
|
261
|
-
}
|
262
|
-
#topmenu a:hover {
|
263
|
-
background-position:0% -42px;
|
264
|
-
}
|
265
|
-
#topmenu a:hover span {
|
266
|
-
background-position:100% -42px;
|
267
|
-
}
|
268
|
-
|
269
|
-
.left{
|
270
|
-
margin:10px 10px 5px 0;
|
271
|
-
float:left;
|
272
|
-
}
|
273
|
-
|
274
|
-
.right{
|
275
|
-
margin:2px 0 2px 2px;
|
276
|
-
float:right;
|
277
|
-
}
|
@@ -1,22 +0,0 @@
|
|
1
|
-
class AddCommentsToPosts < ActiveRecord::Migration
|
2
|
-
def self.up
|
3
|
-
create_table "posts", :force => true do |t|
|
4
|
-
t.column "title", :string
|
5
|
-
t.column "body", :text
|
6
|
-
t.column "created_at", :datetime
|
7
|
-
t.column "updated_at", :datetime
|
8
|
-
end
|
9
|
-
create_table "comments" do |t|
|
10
|
-
t.column "post_id", :integer
|
11
|
-
t.column "name", :string
|
12
|
-
t.column "body", :text
|
13
|
-
t.column "created_at", :datetime
|
14
|
-
t.column "updated_at", :datetime
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.down
|
19
|
-
drop_table "comments"
|
20
|
-
drop_table "posts"
|
21
|
-
end
|
22
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
class AddSessionsTable < ActiveRecord::Migration
|
2
|
-
def self.up
|
3
|
-
create_table :sessions, :force => true do |t|
|
4
|
-
t.column :id, :integer, :null => false
|
5
|
-
t.column :session_id, :string, :limit => 32
|
6
|
-
t.column :created_at, :datetime
|
7
|
-
t.column :data, :text
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.down
|
12
|
-
drop_table :sessions
|
13
|
-
end
|
14
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# This file is autogenerated. Instead of editing this file, please use the
|
2
|
-
# migrations feature of ActiveRecord to incrementally modify your database, and
|
3
|
-
# then regenerate this schema definition.
|
4
|
-
|
5
|
-
ActiveRecord::Schema.define(:version => 2) do
|
6
|
-
|
7
|
-
create_table "comments", :force => true do |t|
|
8
|
-
t.column "post_id", :integer
|
9
|
-
t.column "name", :string
|
10
|
-
t.column "body", :text
|
11
|
-
t.column "created_at", :datetime
|
12
|
-
t.column "updated_at", :datetime
|
13
|
-
end
|
14
|
-
|
15
|
-
create_table "posts", :force => true do |t|
|
16
|
-
t.column "title", :string
|
17
|
-
t.column "body", :text
|
18
|
-
t.column "created_at", :datetime
|
19
|
-
t.column "updated_at", :datetime
|
20
|
-
end
|
21
|
-
|
22
|
-
create_table "sessions", :force => true do |t|
|
23
|
-
t.column "session_id", :string, :limit => 32
|
24
|
-
t.column "created_at", :datetime
|
25
|
-
t.column "data", :text
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
data/examples/sample_app/foo.txt
DELETED
File without changes
|
@@ -1 +0,0 @@
|
|
1
|
-
2006
|
@@ -1,13 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'fileutils'
|
3
|
-
|
4
|
-
pids=[]
|
5
|
-
|
6
|
-
port_or_star = ARGV[0] || '*'
|
7
|
-
|
8
|
-
Dir[File.dirname(__FILE__)+"/../log/merb.#{port_or_star}.pid"].each do |f|
|
9
|
-
pid = IO.read(f).chomp.to_i
|
10
|
-
puts "killing PID: #{pid}"
|
11
|
-
Process.kill(9, pid)
|
12
|
-
FileUtils.rm f
|
13
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
require 'rubygems'
|
3
|
-
require 'merb'
|
4
|
-
|
5
|
-
TMPL = <<EOF
|
6
|
-
class <%= class_name.snake_case.camel_case %> < ActiveRecord::Migration
|
7
|
-
def self.up
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.down
|
11
|
-
end
|
12
|
-
end
|
13
|
-
EOF
|
14
|
-
|
15
|
-
class_name = ARGV[0]
|
16
|
-
highest_migration = Dir[Dir.pwd+'/dist/schema/migrations/*'].map{|f| File.basename(f) =~ /^(\d+)/; $1}.max
|
17
|
-
filename = format("%03d_%s", (highest_migration.to_i+1), class_name.snake_case)
|
18
|
-
|
19
|
-
File.open(Dir.pwd+"/dist/schema/migrations/#{filename}.rb", 'w+') do |file|
|
20
|
-
file.write Erubis::Eruby.new(TMPL).result(binding)
|
21
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
@@ -1,147 +0,0 @@
|
|
1
|
-
module Merb
|
2
|
-
module JavascriptMixin
|
3
|
-
|
4
|
-
# escape text for javascript.
|
5
|
-
def escape_js(javascript)
|
6
|
-
(javascript || '').gsub('\\','\0\0').gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\#{m}" }
|
7
|
-
end
|
8
|
-
|
9
|
-
# creates an <a> tag with with an onclick containing
|
10
|
-
# a js function
|
11
|
-
# link_to_function('click me', "alert('hi!')")
|
12
|
-
def link_to_function(name, function)
|
13
|
-
%{<a href="#" onclick="#{function}; return false;">#{name}</a>}
|
14
|
-
end
|
15
|
-
|
16
|
-
# calls .to_json on data. This will use fjson if installed
|
17
|
-
# so it can be faster than escape_js
|
18
|
-
def js(data)
|
19
|
-
if data.respond_to? :to_json
|
20
|
-
data.to_json
|
21
|
-
else
|
22
|
-
data.inspect.to_json
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
# Requiring javascripts and stylesheets:
|
27
|
-
# you can use require_js(:prototype) or require_css(:shinystyles)
|
28
|
-
# from any view or layout and the scripts will only be included once
|
29
|
-
# in the head of the final page. In the head of your layout you will
|
30
|
-
# need to add these two tags:
|
31
|
-
#
|
32
|
-
# <%= include_required_js %>
|
33
|
-
# <%= include_required_css %>
|
34
|
-
#
|
35
|
-
# --app/views/layouts/application.rhtml
|
36
|
-
#
|
37
|
-
# <html>
|
38
|
-
# <head>
|
39
|
-
# <%= include_required_js %>
|
40
|
-
# <%= include_required_css %>
|
41
|
-
# </head>
|
42
|
-
# <body>
|
43
|
-
# <%= catch_content :layout %>
|
44
|
-
# </body>
|
45
|
-
# </html>
|
46
|
-
#
|
47
|
-
# --app/views/whatever/index.rhtml
|
48
|
-
#
|
49
|
-
# <%= partial(:part1) %>
|
50
|
-
# <%= partial(:part2) %>
|
51
|
-
#
|
52
|
-
# --app/views/whatever/_part1.rhtml
|
53
|
-
#
|
54
|
-
# <% require_js 'this' -%>
|
55
|
-
# <% require_css 'that', 'another_one' -%>
|
56
|
-
#
|
57
|
-
# --app/views/whatever/_part2.rhtml
|
58
|
-
#
|
59
|
-
# <% require_js 'this', 'something_else' -%>
|
60
|
-
# <% require_css 'that' -%>
|
61
|
-
|
62
|
-
|
63
|
-
# require_js(:myjs) can be used to require any javascript
|
64
|
-
# file anywhere in your templates. It will only include the
|
65
|
-
# javascript tag once in the header
|
66
|
-
def require_js(*js)
|
67
|
-
@required_js ||= []
|
68
|
-
@required_js |= js
|
69
|
-
end
|
70
|
-
|
71
|
-
# require_css(:mystyles) can be used to require any javascript
|
72
|
-
# file anywhere in your templates. It will only include the
|
73
|
-
# javascript tag once in the header
|
74
|
-
def require_css(*css)
|
75
|
-
@required_css ||= []
|
76
|
-
@required_css |= css
|
77
|
-
end
|
78
|
-
|
79
|
-
# this goes in the head of your layout if you will be using
|
80
|
-
# require_js
|
81
|
-
def include_required_js
|
82
|
-
js_include_tag(*@required_js)
|
83
|
-
end
|
84
|
-
|
85
|
-
# this goes in the head of your layout if you will be using
|
86
|
-
# require_css
|
87
|
-
def include_required_css
|
88
|
-
css_link_tag(*@required_js)
|
89
|
-
end
|
90
|
-
|
91
|
-
# js_include_tag(:foo, :bar, :baz) will create a javascript
|
92
|
-
# include tag for each script in the arguments. It will append
|
93
|
-
# '.js' if it is left out of the call.
|
94
|
-
def js_include_tag(*scripts)
|
95
|
-
return nil if scripts.empty?
|
96
|
-
scripts.inject('') do |memo,script|
|
97
|
-
script = script.to_s
|
98
|
-
memo << %Q|<script src="/javascripts/#{script=~/\.js$/ ? script : script+'.js' }" type="text/javascript">//</script>\n|
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
# css_include_tag(:foo, :bar, :baz) will create a stylesheet
|
103
|
-
# link tag for each stylesheet in the arguments. It will append
|
104
|
-
# '.css' if it is left out of the call.
|
105
|
-
def css_include_tag(*scripts)
|
106
|
-
return nil if scripts.empty?
|
107
|
-
scripts.inject('') do |memo,script|
|
108
|
-
script = script.to_s
|
109
|
-
memo << %Q|<link href="/stylesheets/#{script=~/\.css$/ ? script : script+'.css' }" media="all" rel="Stylesheet" type="text/css"/>\n|
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
##
|
114
|
-
# Prototype library helpers.
|
115
|
-
##
|
116
|
-
|
117
|
-
# insert_html takes a position, a dom id and html to be inserted.
|
118
|
-
# insert_html(:before, 'my_dom_id', partial(:foo) )
|
119
|
-
def insert_html(position, id, html)
|
120
|
-
position = options.fetch(:where, :before)
|
121
|
-
"new Insertion.#{position.to_s.camel_case}('#{id}', '#{js html}');"
|
122
|
-
end
|
123
|
-
|
124
|
-
# replace_html takes a dom id and html to replace the contents with
|
125
|
-
# replace_html('my_dom_id', partial(:foo))
|
126
|
-
def replace_html(id, html)
|
127
|
-
"Element.update('#{id}', '#{js html}');"
|
128
|
-
end
|
129
|
-
|
130
|
-
# takes a dom id and hides the corresponding element.
|
131
|
-
def hide(id)
|
132
|
-
"$('#{id}').style.display = 'none';"
|
133
|
-
end
|
134
|
-
|
135
|
-
# takes a dom id and shows the corresponding element.
|
136
|
-
def show(id)
|
137
|
-
"$('#{id}').style.display = 'block';"
|
138
|
-
end
|
139
|
-
|
140
|
-
# takes a dom id and toggles it to either on or off depending
|
141
|
-
# on its current state.
|
142
|
-
def toggle(id)
|
143
|
-
"Element.toggle('#{id}');"
|
144
|
-
end
|
145
|
-
|
146
|
-
end
|
147
|
-
end
|