cambium 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/cambium.gemspec +25 -23
  3. data/lib/cambium/version.rb +1 -1
  4. data/lib/generators/cambium/helpers/_autoloader.rb +12 -0
  5. data/lib/generators/cambium/helpers/dependencies_helper.rb +58 -0
  6. data/lib/generators/cambium/helpers/generators_helper.rb +227 -0
  7. data/lib/generators/cambium/install/admin_generator.rb +68 -74
  8. data/lib/generators/cambium/install/app_generator.rb +86 -95
  9. data/lib/generators/cambium/install/config_generator.rb +98 -108
  10. data/lib/generators/cambium/install/utilities_generator.rb +2 -50
  11. data/lib/generators/cambium/model/image_generator.rb +67 -0
  12. data/lib/generators/cambium/model/page_generator.rb +131 -0
  13. data/lib/generators/cambium/model/post_generator.rb +71 -0
  14. data/lib/generators/cambium/model/tag_generator.rb +40 -0
  15. data/lib/generators/cambium/model/user_generator.rb +78 -0
  16. data/lib/generators/cambium/templates/Gemfile +43 -0
  17. data/lib/generators/cambium/templates/_partials/pages/admin_icon.rb +6 -0
  18. data/lib/generators/cambium/templates/app/assets/javascripts/admin/admin.js.coffee +3 -1
  19. data/lib/generators/cambium/templates/app/assets/javascripts/admin/models/image.js.coffee +14 -0
  20. data/lib/generators/cambium/templates/app/assets/javascripts/admin/models/tag.js.coffee +14 -0
  21. data/lib/generators/cambium/templates/app/assets/javascripts/admin/parser_rules/custom.js +552 -0
  22. data/lib/generators/cambium/templates/app/assets/javascripts/admin/routers/router.js.coffee +21 -0
  23. data/lib/generators/cambium/templates/app/assets/javascripts/admin/tag.jst.ejs +7 -0
  24. data/lib/generators/cambium/templates/app/assets/javascripts/admin/templates/image.jst.ejs +3 -0
  25. data/lib/generators/cambium/templates/app/assets/javascripts/admin/templates/post_tag.jst.ejs +1 -0
  26. data/lib/generators/cambium/templates/app/assets/javascripts/admin/views/image_upload.js.coffee +28 -0
  27. data/lib/generators/cambium/templates/app/assets/javascripts/admin/views/tags.js.coffee +158 -0
  28. data/lib/generators/cambium/templates/app/assets/javascripts/admin/views/wysiwyg.js.coffee +77 -0
  29. data/lib/generators/cambium/templates/app/controllers/admin/images_controller.rb +45 -0
  30. data/lib/generators/cambium/templates/app/controllers/admin/pages_controller.rb +42 -0
  31. data/lib/generators/cambium/templates/app/controllers/admin/posts_controller.rb +39 -0
  32. data/lib/generators/cambium/templates/app/controllers/admin/taggings_controller.rb +69 -0
  33. data/lib/generators/cambium/templates/app/controllers/admin/tags_controller.rb +11 -0
  34. data/lib/generators/cambium/templates/app/controllers/admin_controller.rb +11 -2
  35. data/lib/generators/cambium/templates/app/controllers/application_controller.rb +2 -2
  36. data/lib/generators/cambium/templates/app/controllers/images_controller.rb +45 -0
  37. data/lib/generators/cambium/templates/app/controllers/pages_controller.rb +12 -0
  38. data/lib/generators/cambium/templates/app/controllers/posts_controller.rb +11 -0
  39. data/lib/generators/cambium/templates/app/helpers/admin/pages_controller.rb +47 -0
  40. data/lib/generators/cambium/templates/app/helpers/admin_helper.rb +1 -1
  41. data/lib/generators/cambium/templates/app/models/concerns/image_cropper.rb +24 -0
  42. data/lib/generators/cambium/templates/app/models/concerns/publishable.rb +32 -4
  43. data/lib/generators/cambium/templates/app/models/concerns/slug.rb +4 -0
  44. data/lib/generators/cambium/templates/app/models/concerns/tags.rb +6 -1
  45. data/lib/generators/cambium/templates/app/models/image.rb +43 -0
  46. data/lib/generators/cambium/templates/app/models/page.rb +81 -0
  47. data/lib/generators/cambium/templates/app/models/post.rb +45 -0
  48. data/lib/generators/cambium/templates/app/models/tag.rb +33 -0
  49. data/lib/generators/cambium/templates/app/models/tagging.rb +20 -0
  50. data/lib/generators/cambium/templates/app/uploaders/image_uploader.rb +91 -0
  51. data/lib/generators/cambium/templates/app/views/admin/images/_image.html.erb +1 -0
  52. data/lib/generators/cambium/templates/app/views/admin/images/create.js.erb +7 -0
  53. data/lib/generators/cambium/templates/app/views/admin/images/index.json.jbuilder +4 -0
  54. data/lib/generators/cambium/templates/app/views/admin/pages/_form.html.erb +26 -0
  55. data/lib/generators/cambium/templates/app/views/admin/posts/_form.html.erb +40 -0
  56. data/lib/generators/cambium/templates/app/views/admin/shared/_insert_image.html.erb +12 -0
  57. data/lib/generators/cambium/templates/app/views/admin/shared/forms/_editor.html.erb +3 -3
  58. data/lib/generators/cambium/templates/app/views/admin/shared/forms/_form_page.html.erb +5 -1
  59. data/lib/generators/cambium/templates/app/views/home/index.html.erb +7 -0
  60. data/lib/generators/cambium/templates/app/views/page_templates/default.html.erb +2 -0
  61. data/lib/generators/cambium/templates/app/views/posts/_post.html.erb +4 -0
  62. data/lib/generators/cambium/templates/app/views/posts/index.html.erb +1 -0
  63. data/lib/generators/cambium/templates/app/views/posts/show.html.erb +10 -0
  64. data/lib/generators/cambium/templates/config/app_routes.rb +77 -0
  65. data/lib/generators/cambium/templates/config/routes.rb.erb +11 -2
  66. data/lib/generators/cambium/templates/db/migrate/create_pages.rb.erb +24 -0
  67. data/lib/generators/cambium/templates/db/migrate/create_posts.rb +19 -0
  68. data/lib/generators/cambium/templates/gitignore +1 -0
  69. metadata +52 -256
  70. data/lib/generators/cambium/install/users_generator.rb +0 -104
  71. data/lib/generators/cambium/templates/app/assets/stylesheets/admin/partials/_icons.scss +0 -5194
@@ -0,0 +1,552 @@
1
+ /**
2
+ * Full HTML5 compatibility rule set
3
+ * These rules define which tags and CSS classes are supported and which tags should be specially treated.
4
+ *
5
+ * Examples based on this rule set:
6
+ *
7
+ * <a href="http://foobar.com">foo</a>
8
+ * ... becomes ...
9
+ * <a href="http://foobar.com" target="_blank" rel="nofollow">foo</a>
10
+ *
11
+ * <img align="left" src="http://foobar.com/image.png">
12
+ * ... becomes ...
13
+ * <img class="wysiwyg-float-left" src="http://foobar.com/image.png" alt="">
14
+ *
15
+ * <div>foo<script>alert(document.cookie)</script></div>
16
+ * ... becomes ...
17
+ * <div>foo</div>
18
+ *
19
+ * <marquee>foo</marquee>
20
+ * ... becomes ...
21
+ * <span>foo</span>
22
+ *
23
+ * foo <br clear="both"> bar
24
+ * ... becomes ...
25
+ * foo <br class="wysiwyg-clear-both"> bar
26
+ *
27
+ * <div>hello <iframe src="http://google.com"></iframe></div>
28
+ * ... becomes ...
29
+ * <div>hello </div>
30
+ *
31
+ * <center>hello</center>
32
+ * ... becomes ...
33
+ * <div class="wysiwyg-text-align-center">hello</div>
34
+ */
35
+ var wysihtml5ParserRules = {
36
+ /**
37
+ * CSS Class white-list
38
+ * Following CSS classes won't be removed when parsed by the wysihtml5 HTML parser
39
+ */
40
+ "classes": {
41
+ "wysiwyg-clear-both": 1,
42
+ "wysiwyg-clear-left": 1,
43
+ "wysiwyg-clear-right": 1,
44
+ "wysiwyg-color-aqua": 1,
45
+ "wysiwyg-color-black": 1,
46
+ "wysiwyg-color-blue": 1,
47
+ "wysiwyg-color-fuchsia": 1,
48
+ "wysiwyg-color-gray": 1,
49
+ "wysiwyg-color-green": 1,
50
+ "wysiwyg-color-lime": 1,
51
+ "wysiwyg-color-maroon": 1,
52
+ "wysiwyg-color-navy": 1,
53
+ "wysiwyg-color-olive": 1,
54
+ "wysiwyg-color-purple": 1,
55
+ "wysiwyg-color-red": 1,
56
+ "wysiwyg-color-silver": 1,
57
+ "wysiwyg-color-teal": 1,
58
+ "wysiwyg-color-white": 1,
59
+ "wysiwyg-color-yellow": 1,
60
+ "wysiwyg-float-left": 1,
61
+ "wysiwyg-float-right": 1,
62
+ "wysiwyg-font-size-large": 1,
63
+ "wysiwyg-font-size-larger": 1,
64
+ "wysiwyg-font-size-medium": 1,
65
+ "wysiwyg-font-size-small": 1,
66
+ "wysiwyg-font-size-smaller": 1,
67
+ "wysiwyg-font-size-x-large": 1,
68
+ "wysiwyg-font-size-x-small": 1,
69
+ "wysiwyg-font-size-xx-large": 1,
70
+ "wysiwyg-font-size-xx-small": 1,
71
+ "wysiwyg-text-align-center": 1,
72
+ "wysiwyg-text-align-justify": 1,
73
+ "wysiwyg-text-align-left": 1,
74
+ "wysiwyg-text-align-right": 1
75
+ },
76
+ /**
77
+ * Tag list
78
+ *
79
+ * The following options are available:
80
+ *
81
+ * - add_class: converts and deletes the given HTML4 attribute (align, clear, ...) via the given method to a css class
82
+ * The following methods are implemented in wysihtml5.dom.parse:
83
+ * - align_text: converts align attribute values (right/left/center/justify) to their corresponding css class "wysiwyg-text-align-*")
84
+ * <p align="center">foo</p> ... becomes ... <p> class="wysiwyg-text-align-center">foo</p>
85
+ * - clear_br: converts clear attribute values left/right/all/both to their corresponding css class "wysiwyg-clear-*"
86
+ * <br clear="all"> ... becomes ... <br class="wysiwyg-clear-both">
87
+ * - align_img: converts align attribute values (right/left) on <img> to their corresponding css class "wysiwyg-float-*"
88
+ *
89
+ * - remove: removes the element and its content
90
+ *
91
+ * - rename_tag: renames the element to the given tag
92
+ *
93
+ * - set_class: adds the given class to the element (note: make sure that the class is in the "classes" white list above)
94
+ *
95
+ * - set_attributes: sets/overrides the given attributes
96
+ *
97
+ * - check_attributes: checks the given HTML attribute via the given method
98
+ * - url: allows only valid urls (starting with http:// or https://)
99
+ * - src: allows something like "/foobar.jpg", "http://google.com", ...
100
+ * - href: allows something like "mailto:bert@foo.com", "http://google.com", "/foobar.jpg"
101
+ * - alt: strips unwanted characters. if the attribute is not set, then it gets set (to ensure valid and compatible HTML)
102
+ * - numbers: ensures that the attribute only contains numeric characters
103
+ */
104
+ "tags": {
105
+ "tr": {
106
+ "add_class": {
107
+ "align": "align_text"
108
+ }
109
+ },
110
+ "strike": {
111
+ "remove": 1
112
+ },
113
+ "form": {
114
+ "rename_tag": "div"
115
+ },
116
+ "rt": {
117
+ "rename_tag": "span"
118
+ },
119
+ "code": {},
120
+ "acronym": {
121
+ "rename_tag": "span"
122
+ },
123
+ "br": {
124
+ "add_class": {
125
+ "clear": "clear_br"
126
+ }
127
+ },
128
+ "details": {
129
+ "rename_tag": "div"
130
+ },
131
+ "h4": {
132
+ "add_class": {
133
+ "align": "align_text"
134
+ }
135
+ },
136
+ "em": {},
137
+ "title": {
138
+ "remove": 1
139
+ },
140
+ "multicol": {
141
+ "rename_tag": "div"
142
+ },
143
+ "figure": {
144
+ "rename_tag": "div"
145
+ },
146
+ "xmp": {
147
+ "rename_tag": "span"
148
+ },
149
+ "small": {
150
+ "rename_tag": "span",
151
+ "set_class": "wysiwyg-font-size-smaller"
152
+ },
153
+ "area": {
154
+ "remove": 1
155
+ },
156
+ "time": {
157
+ "rename_tag": "span"
158
+ },
159
+ "dir": {
160
+ "rename_tag": "ul"
161
+ },
162
+ "bdi": {
163
+ "rename_tag": "span"
164
+ },
165
+ "command": {
166
+ "remove": 1
167
+ },
168
+ "ul": {},
169
+ "progress": {
170
+ "rename_tag": "span"
171
+ },
172
+ "dfn": {
173
+ "rename_tag": "span"
174
+ },
175
+ "iframe": {
176
+ "remove": 1
177
+ },
178
+ "figcaption": {
179
+ "rename_tag": "div"
180
+ },
181
+ "a": {
182
+ "check_attributes": {
183
+ "href": "url" // if you compiled master manually then change this from 'url' to 'href'
184
+ },
185
+ "set_attributes": {
186
+ "rel": "nofollow"
187
+ }
188
+ },
189
+ "img": {
190
+ "check_attributes": {
191
+ "width": "numbers",
192
+ "alt": "alt",
193
+ "src": "url", // if you compiled master manually then change this from 'url' to 'src'
194
+ "height": "numbers"
195
+ },
196
+ "add_class": {
197
+ "align": "align_img"
198
+ }
199
+ },
200
+ "rb": {
201
+ "rename_tag": "span"
202
+ },
203
+ "footer": {
204
+ "rename_tag": "div"
205
+ },
206
+ "noframes": {
207
+ "remove": 1
208
+ },
209
+ "abbr": {
210
+ "rename_tag": "span"
211
+ },
212
+ "u": {},
213
+ "bgsound": {
214
+ "remove": 1
215
+ },
216
+ "sup": {
217
+ "rename_tag": "span"
218
+ },
219
+ "address": {
220
+ "rename_tag": "div"
221
+ },
222
+ "basefont": {
223
+ "remove": 1
224
+ },
225
+ "nav": {
226
+ "rename_tag": "div"
227
+ },
228
+ "h1": {
229
+ "add_class": {
230
+ "align": "align_text"
231
+ }
232
+ },
233
+ "head": {
234
+ "remove": 1
235
+ },
236
+ "tbody": {
237
+ "add_class": {
238
+ "align": "align_text"
239
+ }
240
+ },
241
+ "dd": {
242
+ "rename_tag": "div"
243
+ },
244
+ "s": {
245
+ "rename_tag": "span"
246
+ },
247
+ "li": {},
248
+ "td": {
249
+ "check_attributes": {
250
+ "rowspan": "numbers",
251
+ "colspan": "numbers"
252
+ },
253
+ "add_class": {
254
+ "align": "align_text"
255
+ }
256
+ },
257
+ "object": {
258
+ "remove": 1
259
+ },
260
+ "div": {
261
+ "add_class": {
262
+ "align": "align_text"
263
+ }
264
+ },
265
+ "option": {
266
+ "rename_tag": "span"
267
+ },
268
+ "select": {
269
+ "rename_tag": "span"
270
+ },
271
+ "i": {},
272
+ "track": {
273
+ "remove": 1
274
+ },
275
+ "wbr": {
276
+ "remove": 1
277
+ },
278
+ "fieldset": {
279
+ "rename_tag": "div"
280
+ },
281
+ "big": {
282
+ "rename_tag": "span",
283
+ "set_class": "wysiwyg-font-size-larger"
284
+ },
285
+ "button": {
286
+ "rename_tag": "span"
287
+ },
288
+ "noscript": {
289
+ "remove": 1
290
+ },
291
+ "svg": {
292
+ "remove": 1
293
+ },
294
+ "input": {
295
+ "remove": 1
296
+ },
297
+ "table": {},
298
+ "keygen": {
299
+ "remove": 1
300
+ },
301
+ "h5": {
302
+ "add_class": {
303
+ "align": "align_text"
304
+ }
305
+ },
306
+ "meta": {
307
+ "remove": 1
308
+ },
309
+ "map": {
310
+ "rename_tag": "div"
311
+ },
312
+ "isindex": {
313
+ "remove": 1
314
+ },
315
+ "mark": {
316
+ "rename_tag": "span"
317
+ },
318
+ "caption": {
319
+ "add_class": {
320
+ "align": "align_text"
321
+ }
322
+ },
323
+ "tfoot": {
324
+ "add_class": {
325
+ "align": "align_text"
326
+ }
327
+ },
328
+ "base": {
329
+ "remove": 1
330
+ },
331
+ "video": {
332
+ "remove": 1
333
+ },
334
+ "strong": {},
335
+ "canvas": {
336
+ "remove": 1
337
+ },
338
+ "output": {
339
+ "rename_tag": "span"
340
+ },
341
+ "marquee": {
342
+ "rename_tag": "span"
343
+ },
344
+ "b": {},
345
+ "q": {
346
+ "check_attributes": {
347
+ "cite": "url"
348
+ }
349
+ },
350
+ "applet": {
351
+ "remove": 1
352
+ },
353
+ "span": {},
354
+ "rp": {
355
+ "rename_tag": "span"
356
+ },
357
+ "spacer": {
358
+ "remove": 1
359
+ },
360
+ "source": {
361
+ "remove": 1
362
+ },
363
+ "aside": {
364
+ "rename_tag": "div"
365
+ },
366
+ "frame": {
367
+ "remove": 1
368
+ },
369
+ "section": {
370
+ "rename_tag": "div"
371
+ },
372
+ "body": {
373
+ "rename_tag": "div"
374
+ },
375
+ "ol": {},
376
+ "nobr": {
377
+ "rename_tag": "span"
378
+ },
379
+ "html": {
380
+ "rename_tag": "div"
381
+ },
382
+ "summary": {
383
+ "rename_tag": "span"
384
+ },
385
+ "var": {
386
+ "rename_tag": "span"
387
+ },
388
+ "del": {
389
+ "remove": 1
390
+ },
391
+ "blockquote": {
392
+ "check_attributes": {
393
+ "cite": "url"
394
+ }
395
+ },
396
+ "style": {
397
+ "remove": 1
398
+ },
399
+ "device": {
400
+ "remove": 1
401
+ },
402
+ "meter": {
403
+ "rename_tag": "span"
404
+ },
405
+ "h3": {
406
+ "add_class": {
407
+ "align": "align_text"
408
+ }
409
+ },
410
+ "textarea": {
411
+ "rename_tag": "span"
412
+ },
413
+ "embed": {
414
+ "remove": 1
415
+ },
416
+ "hgroup": {
417
+ "rename_tag": "div"
418
+ },
419
+ "font": {
420
+ "rename_tag": "span",
421
+ "add_class": {
422
+ "size": "size_font"
423
+ }
424
+ },
425
+ "tt": {
426
+ "rename_tag": "span"
427
+ },
428
+ "noembed": {
429
+ "remove": 1
430
+ },
431
+ "thead": {
432
+ "add_class": {
433
+ "align": "align_text"
434
+ }
435
+ },
436
+ "blink": {
437
+ "rename_tag": "span"
438
+ },
439
+ "plaintext": {
440
+ "rename_tag": "span"
441
+ },
442
+ "xml": {
443
+ "remove": 1
444
+ },
445
+ "h6": {
446
+ "add_class": {
447
+ "align": "align_text"
448
+ }
449
+ },
450
+ "param": {
451
+ "remove": 1
452
+ },
453
+ "th": {
454
+ "check_attributes": {
455
+ "rowspan": "numbers",
456
+ "colspan": "numbers"
457
+ },
458
+ "add_class": {
459
+ "align": "align_text"
460
+ }
461
+ },
462
+ "legend": {
463
+ "rename_tag": "span"
464
+ },
465
+ "hr": {},
466
+ "label": {
467
+ "rename_tag": "span"
468
+ },
469
+ "dl": {
470
+ "rename_tag": "div"
471
+ },
472
+ "kbd": {
473
+ "rename_tag": "span"
474
+ },
475
+ "listing": {
476
+ "rename_tag": "div"
477
+ },
478
+ "dt": {
479
+ "rename_tag": "span"
480
+ },
481
+ "nextid": {
482
+ "remove": 1
483
+ },
484
+ "pre": {},
485
+ "center": {
486
+ "rename_tag": "div",
487
+ "set_class": "wysiwyg-text-align-center"
488
+ },
489
+ "audio": {
490
+ "remove": 1
491
+ },
492
+ "datalist": {
493
+ "rename_tag": "span"
494
+ },
495
+ "samp": {
496
+ "rename_tag": "span"
497
+ },
498
+ "col": {
499
+ "remove": 1
500
+ },
501
+ "article": {
502
+ "rename_tag": "div"
503
+ },
504
+ "cite": {},
505
+ "link": {
506
+ "remove": 1
507
+ },
508
+ "script": {
509
+ "remove": 1
510
+ },
511
+ "bdo": {
512
+ "rename_tag": "span"
513
+ },
514
+ "menu": {
515
+ "rename_tag": "ul"
516
+ },
517
+ "colgroup": {
518
+ "remove": 1
519
+ },
520
+ "ruby": {
521
+ "rename_tag": "span"
522
+ },
523
+ "h2": {
524
+ "add_class": {
525
+ "align": "align_text"
526
+ }
527
+ },
528
+ "ins": {
529
+ "rename_tag": "span"
530
+ },
531
+ "p": {
532
+ "add_class": {
533
+ "align": "align_text"
534
+ }
535
+ },
536
+ "sub": {
537
+ "rename_tag": "span"
538
+ },
539
+ "comment": {
540
+ "remove": 1
541
+ },
542
+ "frameset": {
543
+ "remove": 1
544
+ },
545
+ "optgroup": {
546
+ "rename_tag": "span"
547
+ },
548
+ "header": {
549
+ "rename_tag": "div"
550
+ }
551
+ }
552
+ };
@@ -6,11 +6,32 @@ class Admin.Routers.Router extends Backbone.Router
6
6
  autoLoad: =>
7
7
  if $(".wysihtml5").length > 0
8
8
  for wysiwyg in $(".wysihtml5")
9
+ console.log 'wysihtml5'
9
10
  new Admin.Views.Wysiwyg
10
11
  id: $(wysiwyg).children('textarea').attr('id')
11
12
  toolbarID: $(wysiwyg).siblings('.wysihtml5-toolbar').attr('id')
13
+ image_upload: true
14
+ url: "/admin/json/images"
12
15
  new Admin.Views.Publishable if $("[class*=_active_date]").length > 0
13
16
  new Admin.Views.InitCounter if $('input').length > 0
14
17
  new Admin.Views.Paginator if $('table').length > 0
15
18
  new Admin.Views.DropdownToggle if $('.dropdown-toggle').length > 0
16
19
  new Admin.Views.Accordion if $('.accordion').length > 0
20
+
21
+ routes:
22
+ 'admin': 'initAdmin'
23
+ "admin/posts": "initPosts"
24
+ "admin/posts/new": "initNewPost"
25
+ "admin/posts/:id/edit": "initEditPost"
26
+
27
+ initAdmin: =>
28
+ console.log "Welcome to your CMS, powered by Ruby on Rails and Cambium!"
29
+
30
+ initEditPost: (id) =>
31
+ new Admin.Views.Tags
32
+ id: id
33
+ taggable: "Post"
34
+ url: "/admin/json/posts/#{id}/taggings"
35
+
36
+ initNewPost: =>
37
+ $('#tag-container').closest('.fields').hide()
@@ -0,0 +1,7 @@
1
+ <li data-id="<%= id %>" data-tag-id="<%= tag_id %>" data-title="<%= title %>">
2
+ <span class="title"><%= title %></span>
3
+ <a class="delete-tag" href="#">
4
+ <i class="icon-remove2"></i>
5
+ </a>
6
+ </li>
7
+ <span class="separator">//</span>
@@ -0,0 +1,3 @@
1
+ <div class="image">
2
+ <img src="<%= image.filename.thumb.url %>" data-src="<%= image.filename.url %>">
3
+ </div>
@@ -0,0 +1 @@
1
+ <li><%= name %><a href="" data-tag="<%= name %>" class="margin-left-medium">x</a></li>
@@ -0,0 +1,28 @@
1
+ class Admin.Views.ImageUpload extends Backbone.View
2
+
3
+ el: "body"
4
+
5
+ # events:
6
+ # "click form.edit_project input[type=submit]": "submitForm"
7
+
8
+ initialize: (options) =>
9
+ @model = options.model
10
+ $("form.edit_#{@model} input[type=submit]").click @submitForm
11
+ $("#image_filename").attr "name", "image[filename]"
12
+ $(".images-container").after ->
13
+ $("#new_image").clone()
14
+ $(".new_image").last().remove()
15
+ $("#new_image").fileupload
16
+ add: (e,data) ->
17
+ $(".images-container").append """
18
+ <div class="loading">Uploading #{data.files[0].name}...</div>
19
+ """
20
+ data.submit()
21
+ complete: (e,data) ->
22
+ $(".images-container div.loading").first().remove()
23
+ $(".images-container div.loading").insertAfter( $(".images-container img").last() )
24
+
25
+ submitForm: (e) =>
26
+ e.preventDefault()
27
+ $("#new_image").remove()
28
+ $("form.edit_#{@model}").submit()