@@ -33,7 +33,6 @@ local Projects = package.loaded.Projects
33
33
local Remixes = package.loaded .Remixes
34
34
local Collections = package.loaded .Collections
35
35
local FlaggedProjects = package.loaded .FlaggedProjects
36
- local db = package.loaded .db
37
36
local assert_exists = require (' validation' ).assert_exists
38
37
39
38
require ' controllers.user'
@@ -45,30 +44,52 @@ require 'dialogs'
45
44
app :enable (' etlua' )
46
45
app .layout = require ' views.layout'
47
46
48
- local views = {
49
- -- Static pages
50
- ' about' , ' bjc' , ' coc' , ' contact' , ' credits' , ' dmca' , ' extensions' ,
47
+ local static_pages = {
48
+ ' about' , ' bjc' , ' blog' , ' coc' , ' contact' , ' credits' , ' dmca' , ' extensions' ,
51
49
' materials' , ' mirrors' , ' offline' , ' partners' , ' privacy' , ' research' ,
52
- ' snapinator' , ' snapp' , ' source' , ' tos' ,
50
+ ' snapinator' , ' snapp' , ' source' , ' tos'
51
+ }
53
52
53
+ local views = {
54
54
-- Simple pages
55
- ' blog ' , ' change_email' , ' change_password' , ' delete_user' , ' forgot_password' ,
56
- ' forgot_username' , ' sign_up' , ' login' ,
55
+ ' change_email' , ' change_password' , ' delete_user' , ' forgot_password' ,
56
+ ' forgot_username' , ' sign_up' , ' login'
57
57
}
58
58
59
+ -- Temporary during a front-end rewrite.
60
+ -- This allows testing anypage with adding ?bootstrap=true to the URL
61
+ app :before_filter (function (self )
62
+ if self .current_user and self .current_user :isadmin () then
63
+ if self .params [' bootstrap' ] == ' true' then
64
+ app .layout = ' layout_bs'
65
+ end
66
+ end
67
+ end )
68
+
59
69
app :get (' index' , ' /' , capture_errors (cached (function (self )
60
70
self .snapcloud_id = Users :find ({ username = ' snapcloud' }).id
61
- return { render = ' index' }
71
+ -- return { render = 'index' }
72
+ return { render = ' index_bs' , layout = ' layout_bs' }
62
73
end )))
63
74
64
75
-- Backwards compatibility.
65
76
app :get (' /index' , function ()
66
77
return { redirect_to = ' /' }
67
78
end )
68
79
80
+ for _ , page in pairs (static_pages ) do
81
+ app :get (' /' .. page , capture_errors (cached (function (self )
82
+ return { render = ' static/' .. page , layout = ' layout_bs' }
83
+ end )))
84
+ end
85
+
69
86
for _ , view in pairs (views ) do
70
87
app :get (' /' .. view , capture_errors (cached (function (self )
71
- return { render = view }
88
+ if self .params [' bootstrap' ] then
89
+ return { render = view .. ' _bs' , layout = ' layout_bs' }
90
+ else
91
+ return { render = view }
92
+ end
72
93
end )))
73
94
end
74
95
@@ -84,30 +105,30 @@ end))
84
105
85
106
app :get (' /explore' , capture_errors (cached (function (self )
86
107
self .items = ProjectController .fetch (self )
87
- return { render = ' explore' }
108
+ return { render = ' explore' , layout = ' layout_bs ' }
88
109
end )))
89
110
90
111
app :get (' /collections' , capture_errors (cached (function (self )
91
112
self .items = CollectionController .fetch (self )
92
- return { render = ' collections' }
113
+ return { render = ' collections' , layout = ' layout_bs ' }
93
114
end )))
94
115
95
116
app :get (' /all_totms' , capture_errors (cached (function (self )
96
117
self .items = CollectionController .totms (self )
97
- return { render = ' all_totms' }
118
+ return { render = ' all_totms' , layout = ' layout_bs ' }
98
119
end )))
99
120
100
121
app :get (' /users' , capture_errors (cached (function (self )
101
122
self .items_per_page = 51
102
123
self .items = UserController .fetch (self )
103
124
if not self .params .search_term then self .params .search_term = ' ' end
104
- return { render = ' users' }
125
+ return { render = ' users' , layout = ' layout_bs ' }
105
126
end )))
106
127
107
128
app :get (' /my_projects' , capture_errors (function (self )
108
129
if self .current_user then
109
130
self .items = ProjectController .my_projects (self )
110
- return { render = ' my_projects' }
131
+ return { render = ' my_projects' , layout = ' layout_bs ' }
111
132
else
112
133
return { redirect_to = self :build_url (' /' ) }
113
134
end
@@ -116,7 +137,7 @@ end))
116
137
app :get (' /my_collections' , capture_errors (function (self )
117
138
if self .current_user then
118
139
self .items = CollectionController .my_collections (self )
119
- return { render = ' my_collections' }
140
+ return { render = ' my_collections' , layout = ' layout_bs ' }
120
141
else
121
142
return { redirect_to = self :build_url (' /' ) }
122
143
end
@@ -153,20 +174,20 @@ app:get('/user', capture_errors(function (self)
153
174
assert_user_exists (self )
154
175
self .username = self .queried_user .username
155
176
self .user_id = self .queried_user .id
156
- return { render = ' user' }
177
+ return { render = ' user' , layout = ' layout_bs ' }
157
178
end ))
158
179
159
180
app :get (' /user_collections/:username' , capture_errors (cached (function (self )
160
181
assert_user_exists (self )
161
182
self .params .user_id = self .queried_user .id
162
183
self .items = CollectionController .user_collections (self )
163
- return { render = ' collections' }
184
+ return { render = ' collections' , layout = ' layout_bs ' }
164
185
end )))
165
186
166
187
app :get (' /user_projects/:username' , capture_errors (cached (function (self )
167
188
assert_user_exists (self )
168
189
self .items = ProjectController .user_projects (self )
169
- return { render = ' explore' }
190
+ return { render = ' explore' , layout = ' layout_bs ' }
170
191
end )))
171
192
172
193
-- Display an embedded collection view.
@@ -187,7 +208,7 @@ end)))
187
208
app :get (' /followed' , capture_errors (cached (function (self )
188
209
if self .current_user then
189
210
self .items = ProjectController .followed_projects (self )
190
- return { render = ' followed' }
211
+ return { render = ' followed' , layout = ' layout_bs ' }
191
212
else
192
213
return { redirect_to = self :build_url (' /' ) }
193
214
end
@@ -196,7 +217,7 @@ end)))
196
217
app :get (' /followed_users' , capture_errors (cached (function (self )
197
218
if self .current_user then
198
219
self .items = UserController .followed_users (self )
199
- return { render = ' followed_users' }
220
+ return { render = ' followed_users' , layout = ' layout_bs ' }
200
221
else
201
222
return { redirect_to = self :build_url (' /' ) }
202
223
end
@@ -205,7 +226,7 @@ end)))
205
226
app :get (' /my_followers' , capture_errors (cached (function (self )
206
227
if self .current_user then
207
228
self .items = UserController .follower_users (self )
208
- return { render = ' my_followers' }
229
+ return { render = ' my_followers' , layout = ' layout_bs ' }
209
230
else
210
231
return { redirect_to = self :build_url (' /' ) }
211
232
end
@@ -256,23 +277,23 @@ app:match('project', '/project', capture_errors(function (self)
256
277
return { render = ' project' }
257
278
end ))
258
279
280
+ -- TODO: Should be able to consolidate these pages.
259
281
app :get (' /examples' , capture_errors (cached (function (self )
260
282
self .snapcloud_id = Users :find ({ username = ' snapcloud' }).id
261
- return { render = ' examples' }
283
+ return { render = ' examples' , layout = ' layout_bs ' }
262
284
end )))
263
285
264
286
app :get (' /events' , capture_errors (cached (function (self )
265
287
self .snapcloud_id = Users :find ({ username = ' snapcloud' }).id
266
- return { render = ' events' }
288
+ return { render = ' events' , layout = ' layout_bs ' }
267
289
end )))
268
290
269
291
app :get (' /search' , capture_errors (function (self )
270
292
self .reviewer_controls =
271
293
self .current_user and self .current_user :has_min_role (' reviewer' )
272
- return { render = ' search' }
294
+ return { render = ' search' , layout = ' layout_bs ' }
273
295
end ))
274
296
275
- -- Administration and data management pages
276
297
277
298
app :get (' /profile' , capture_errors (function (self )
278
299
if self .current_user then
@@ -283,10 +304,12 @@ app:get('/profile', capture_errors(function (self)
283
304
end
284
305
end ))
285
306
307
+ -- Administration and data management pages
308
+
286
309
app :get (' /admin' , capture_errors (function (self )
287
310
if self .current_user then
288
311
assert_min_role (self , ' reviewer' )
289
- return { render = ' admin' }
312
+ return { render = ' admin/index ' , layout = ' layout_bs ' }
290
313
else
291
314
return { redirect_to = self :build_url (' /' ) }
292
315
end
@@ -296,7 +319,7 @@ app:get('/flags', capture_errors(function (self)
296
319
if self .current_user then
297
320
assert_min_role (self , ' reviewer' )
298
321
items = ProjectController .flagged_projects (self )
299
- return { render = ' flags' }
322
+ return { render = ' admin/ flags' }
300
323
else
301
324
return { redirect_to = self :build_url (' /' ) }
302
325
end
@@ -307,7 +330,7 @@ app:get('/user_admin', capture_errors(function (self)
307
330
if self .current_user then
308
331
assert_min_role (self , ' moderator' )
309
332
self .items = UserController .fetch (self )
310
- return { render = ' user_admin' }
333
+ return { render = ' admin/ user_admin' , layout = ' layout_bs ' }
311
334
else
312
335
return { redirect_to = self :build_url (' /' ) }
313
336
end
@@ -318,17 +341,17 @@ app:get('/zombie_admin', capture_errors(function (self)
318
341
if self .current_user then
319
342
assert_min_role (self , ' moderator' )
320
343
self .items = UserController .zombies (self )
321
- return { render = ' zombie_admin' }
344
+ return { render = ' admin/ zombie_admin' }
322
345
else
323
346
return { redirect_to = self :build_url (' /' ) }
324
347
end
325
348
end ))
326
349
327
- app :match (' /totm' , respond_to ({
350
+ app :match (' admin/totm ' , ' /totm' , respond_to ({
328
351
GET = capture_errors (function (self )
329
352
if self .current_user then
330
353
assert_min_role (self , ' moderator' )
331
- return { render = ' totm ' }
354
+ return { render = true , layout = ' layout_bs ' }
332
355
else
333
356
return { redirect_to = self :build_url (' /' ) }
334
357
end
@@ -339,7 +362,7 @@ app:match('/totm', respond_to({
339
362
if file then
340
363
local disk = package.loaded .disk
341
364
if disk :save_totm_banner (file ) then
342
- return { render = ' totm ' }
365
+ return { render = true , layout = ' layout_bs ' }
343
366
end
344
367
end
345
368
return errorResponse (self )
@@ -348,13 +371,13 @@ app:match('/totm', respond_to({
348
371
349
372
app :get (' /carousel_admin' , capture_errors (function (self )
350
373
assert_min_role (self , ' moderator' )
351
- return { render = ' carousel_admin' }
374
+ return { render = ' admin/ carousel_admin' }
352
375
end ))
353
376
354
377
app :get (' /ip_admin' , capture_errors (function (self )
355
378
assert_min_role (self , ' admin' )
356
379
self .ips = SiteController .banned_ips (self )
357
- return { render = ' ip_admin' }
380
+ return { render = ' admin/ ip_admin' }
358
381
end ))
359
382
360
383
-- Teachers
@@ -364,15 +387,15 @@ app:get('/teacher', capture_errors(function (self)
364
387
if (not self .current_user .is_teacher ) then
365
388
assert_admin (self )
366
389
end
367
- return { render = ' teacher' }
390
+ return { render = ' teacher/index ' , layout = ' layout_bs ' }
368
391
end ))
369
392
370
393
app :get (' /bulk' , capture_errors (function (self )
371
394
assert_exists (self .current_user )
372
395
if (not self .current_user .is_teacher ) then
373
396
assert_admin (self )
374
397
end
375
- return { render = ' bulk' }
398
+ return { render = ' teacher/ bulk' , layout = ' layout_bs ' }
376
399
end ))
377
400
378
401
app :get (' /learners' , capture_errors (function (self )
@@ -384,14 +407,13 @@ app:get('/learners', capture_errors(function (self)
384
407
self .items_per_page = 150
385
408
if self .current_user and self .current_user .is_teacher then
386
409
self .items = UserController .learners (self )
387
- return { render = ' learners' }
410
+ return { render = ' teacher/ learners' , layout = ' layout_bs ' }
388
411
else
389
412
return { redirect_to = self :build_url (' index' ) }
390
413
end
391
414
end ))
392
415
393
416
-- Tools
394
-
395
417
--[[
396
418
app:get('/localize', capture_errors(function (self)
397
419
return { render = 'localize' }
0 commit comments