merb 0.0.8 → 0.0.9
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/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
|