kublog 0.0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. data/.gitignore +9 -0
  2. data/Gemfile +8 -0
  3. data/Gemfile.lock +177 -0
  4. data/MIT-LICENSE +20 -0
  5. data/README.rdoc +102 -0
  6. data/Rakefile +39 -0
  7. data/app/assets/images/kublog/.gitkeep +0 -0
  8. data/app/assets/images/kublog/missing_image.png +0 -0
  9. data/app/assets/javascripts/kublog/application.js +13 -0
  10. data/app/assets/javascripts/kublog/categories.js.coffee +48 -0
  11. data/app/assets/javascripts/kublog/comments.js.coffee +30 -0
  12. data/app/assets/javascripts/kublog/email.js.coffee +32 -0
  13. data/app/assets/javascripts/kublog/images.js.coffee +77 -0
  14. data/app/assets/javascripts/kublog/posts.js.coffee +44 -0
  15. data/app/assets/javascripts/kublog/shared.js.coffee.erb +19 -0
  16. data/app/assets/javascripts/kublog/wysiwyg.controls.js.coffee +68 -0
  17. data/app/assets/plugins/kublog/ajaxyupload/images/ajax-loader.gif +0 -0
  18. data/app/assets/plugins/kublog/ajaxyupload/javascripts/jquery.ajaxyupload.js +126 -0
  19. data/app/assets/plugins/kublog/fancybox/images/blank.gif +0 -0
  20. data/app/assets/plugins/kublog/fancybox/images/fancy_close.png +0 -0
  21. data/app/assets/plugins/kublog/fancybox/images/fancy_loading.png +0 -0
  22. data/app/assets/plugins/kublog/fancybox/images/fancy_nav_left.png +0 -0
  23. data/app/assets/plugins/kublog/fancybox/images/fancy_nav_right.png +0 -0
  24. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_e.png +0 -0
  25. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_n.png +0 -0
  26. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_ne.png +0 -0
  27. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_nw.png +0 -0
  28. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_s.png +0 -0
  29. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_se.png +0 -0
  30. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_sw.png +0 -0
  31. data/app/assets/plugins/kublog/fancybox/images/fancy_shadow_w.png +0 -0
  32. data/app/assets/plugins/kublog/fancybox/images/fancy_title_left.png +0 -0
  33. data/app/assets/plugins/kublog/fancybox/images/fancy_title_main.png +0 -0
  34. data/app/assets/plugins/kublog/fancybox/images/fancy_title_over.png +0 -0
  35. data/app/assets/plugins/kublog/fancybox/images/fancy_title_right.png +0 -0
  36. data/app/assets/plugins/kublog/fancybox/images/fancybox-x.png +0 -0
  37. data/app/assets/plugins/kublog/fancybox/images/fancybox-y.png +0 -0
  38. data/app/assets/plugins/kublog/fancybox/images/fancybox.png +0 -0
  39. data/app/assets/plugins/kublog/fancybox/javascripts/fancybox-1.3.4.js +46 -0
  40. data/app/assets/plugins/kublog/fancybox/stylesheets/fancybox-1.3.4.css +359 -0
  41. data/app/assets/plugins/kublog/livequery/javascripts/jquery.livequery.js +250 -0
  42. data/app/assets/plugins/kublog/wysiwyg/images/ajax-loader.gif +0 -0
  43. data/app/assets/plugins/kublog/wysiwyg/images/jquery.wysiwyg.bg.png +0 -0
  44. data/app/assets/plugins/kublog/wysiwyg/images/jquery.wysiwyg.gif +0 -0
  45. data/app/assets/plugins/kublog/wysiwyg/images/jquery.wysiwyg.jpg +0 -0
  46. data/app/assets/plugins/kublog/wysiwyg/images/jquery.wysiwyg.no-alpha.gif +0 -0
  47. data/app/assets/plugins/kublog/wysiwyg/javascripts/jquery.wysiwyg.js +2377 -0
  48. data/app/assets/plugins/kublog/wysiwyg/javascripts/wysiwyg.image.js +284 -0
  49. data/app/assets/plugins/kublog/wysiwyg/javascripts/wysiwyg.link.js +249 -0
  50. data/app/assets/plugins/kublog/wysiwyg/stylesheets/jquery.wysiwyg.css +94 -0
  51. data/app/assets/stylesheets/kublog/application.css +9 -0
  52. data/app/assets/stylesheets/kublog/categories.css +4 -0
  53. data/app/assets/stylesheets/kublog/comments.css +4 -0
  54. data/app/assets/stylesheets/kublog/email.css +7 -0
  55. data/app/assets/stylesheets/kublog/images.css +41 -0
  56. data/app/assets/stylesheets/kublog/posts.css +39 -0
  57. data/app/controllers/kublog/application_controller.rb +12 -0
  58. data/app/controllers/kublog/categories_controller.rb +47 -0
  59. data/app/controllers/kublog/comments_controller.rb +37 -0
  60. data/app/controllers/kublog/images_controller.rb +44 -0
  61. data/app/controllers/kublog/posts_controller.rb +66 -0
  62. data/app/helpers/kublog/application_helper.rb +4 -0
  63. data/app/helpers/kublog/posts_helper.rb +38 -0
  64. data/app/mailers/kublog/post_mailer.rb +11 -0
  65. data/app/models/kublog/category.rb +26 -0
  66. data/app/models/kublog/comment.rb +46 -0
  67. data/app/models/kublog/image.rb +23 -0
  68. data/app/models/kublog/post.rb +51 -0
  69. data/app/presenters/kublog/post_presenter.rb +23 -0
  70. data/app/presenters/kublog/posts_presenter.rb +29 -0
  71. data/app/uploaders/kublog/file_uploader.rb +56 -0
  72. data/app/views/kublog/post_mailer/new_post.html.erb +1 -0
  73. data/app/views/kublog/post_mailer/new_post.liquid.html.erb +7 -0
  74. data/app/views/kublog/posts/_email_form.html.erb +13 -0
  75. data/app/views/kublog/posts/_form.html.erb +71 -0
  76. data/app/views/kublog/posts/_image_form.html.erb +26 -0
  77. data/app/views/kublog/posts/edit.html.erb +3 -0
  78. data/app/views/kublog/posts/index.atom.builder +15 -0
  79. data/app/views/kublog/posts/index.html.erb +36 -0
  80. data/app/views/kublog/posts/new.html.erb +3 -0
  81. data/app/views/kublog/posts/show.html.erb +46 -0
  82. data/app/views/layouts/kublog/application.html.erb +14 -0
  83. data/config/locales/kublog/en.yml +54 -0
  84. data/config/routes.rb +13 -0
  85. data/db/migrate/20110816211552_create_kublog_posts.rb +27 -0
  86. data/db/migrate/20110817215828_create_kublog_images.rb +11 -0
  87. data/db/migrate/20110818181434_create_kublog_categories.rb +11 -0
  88. data/db/migrate/20110822194341_create_kublog_comments.rb +14 -0
  89. data/kublog.gemspec +39 -0
  90. data/lib/kublog.rb +92 -0
  91. data/lib/kublog/author.rb +13 -0
  92. data/lib/kublog/engine.rb +5 -0
  93. data/lib/kublog/notifiable.rb +26 -0
  94. data/lib/kublog/notification/email.rb +86 -0
  95. data/lib/kublog/notification/email_job.rb +14 -0
  96. data/lib/kublog/notification/fb_post.rb +43 -0
  97. data/lib/kublog/notification/fb_post_job.rb +16 -0
  98. data/lib/kublog/notification/tweet.rb +68 -0
  99. data/lib/kublog/notification/tweet_job.rb +16 -0
  100. data/lib/kublog/user_integration/common.rb +31 -0
  101. data/lib/kublog/user_integration/devise.rb +23 -0
  102. data/lib/kublog/version.rb +3 -0
  103. data/lib/kublog/xhr_upload/file_helper.rb +36 -0
  104. data/lib/tasks/kublog_tasks.rake +4 -0
  105. data/script/rails +6 -0
  106. data/test/dummy/Rakefile +7 -0
  107. data/test/dummy/app/assets/javascripts/application.js +9 -0
  108. data/test/dummy/app/assets/javascripts/sessions.js +2 -0
  109. data/test/dummy/app/assets/javascripts/users.js +2 -0
  110. data/test/dummy/app/assets/stylesheets/application.css +157 -0
  111. data/test/dummy/app/assets/stylesheets/sessions.css +4 -0
  112. data/test/dummy/app/assets/stylesheets/users.css +4 -0
  113. data/test/dummy/app/controllers/application_controller.rb +19 -0
  114. data/test/dummy/app/controllers/sessions_controller.rb +22 -0
  115. data/test/dummy/app/controllers/users_controller.rb +17 -0
  116. data/test/dummy/app/helpers/application_helper.rb +2 -0
  117. data/test/dummy/app/helpers/error_messages_helper.rb +23 -0
  118. data/test/dummy/app/helpers/layout_helper.rb +22 -0
  119. data/test/dummy/app/helpers/sessions_helper.rb +2 -0
  120. data/test/dummy/app/helpers/users_helper.rb +2 -0
  121. data/test/dummy/app/mailers/.gitkeep +0 -0
  122. data/test/dummy/app/models/.gitkeep +0 -0
  123. data/test/dummy/app/models/ability.rb +2 -0
  124. data/test/dummy/app/models/user.rb +25 -0
  125. data/test/dummy/app/views/layouts/_account.html.erb +8 -0
  126. data/test/dummy/app/views/layouts/application.html.erb +29 -0
  127. data/test/dummy/app/views/layouts/kublog/application.html.erb +31 -0
  128. data/test/dummy/app/views/sessions/new.html.erb +15 -0
  129. data/test/dummy/app/views/users/new.html.erb +28 -0
  130. data/test/dummy/config.ru +4 -0
  131. data/test/dummy/config/application.rb +42 -0
  132. data/test/dummy/config/boot.rb +10 -0
  133. data/test/dummy/config/database.yml +25 -0
  134. data/test/dummy/config/environment.rb +5 -0
  135. data/test/dummy/config/environments/development.rb +38 -0
  136. data/test/dummy/config/environments/production.rb +51 -0
  137. data/test/dummy/config/environments/test.rb +39 -0
  138. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  139. data/test/dummy/config/initializers/inflections.rb +10 -0
  140. data/test/dummy/config/initializers/mime_types.rb +5 -0
  141. data/test/dummy/config/initializers/secret_token.rb +7 -0
  142. data/test/dummy/config/initializers/session_store.rb +8 -0
  143. data/test/dummy/config/initializers/wrap_parameters.rb +12 -0
  144. data/test/dummy/config/locales/en.yml +54 -0
  145. data/test/dummy/config/routes.rb +13 -0
  146. data/test/dummy/db/migrate/20110816225222_create_users.rb +11 -0
  147. data/test/dummy/db/migrate/20110819135547_create_delayed_jobs.rb +21 -0
  148. data/test/dummy/db/schema.rb +96 -0
  149. data/test/dummy/lib/assets/.gitkeep +0 -0
  150. data/test/dummy/log/.gitkeep +0 -0
  151. data/test/dummy/public/404.html +26 -0
  152. data/test/dummy/public/422.html +26 -0
  153. data/test/dummy/public/500.html +26 -0
  154. data/test/dummy/public/favicon.ico +0 -0
  155. data/test/dummy/script/delayed_job +5 -0
  156. data/test/dummy/script/rails +6 -0
  157. data/test/dummy/test/fixtures/users.yml +9 -0
  158. data/test/dummy/test/functional/sessions_controller_test.rb +7 -0
  159. data/test/dummy/test/functional/users_controller_test.rb +7 -0
  160. data/test/dummy/test/unit/helpers/sessions_helper_test.rb +4 -0
  161. data/test/dummy/test/unit/helpers/users_helper_test.rb +4 -0
  162. data/test/dummy/test/unit/user_test.rb +7 -0
  163. data/test/factories.rb +9 -0
  164. data/test/fixtures/kublog/categories.yml +7 -0
  165. data/test/fixtures/kublog/comments.yml +7 -0
  166. data/test/fixtures/kublog/images.yml +9 -0
  167. data/test/fixtures/kublog/posts.yml +9 -0
  168. data/test/functional/kublog/categories_controller_test.rb +9 -0
  169. data/test/functional/kublog/comments_controller_test.rb +9 -0
  170. data/test/functional/kublog/images_controller_test.rb +9 -0
  171. data/test/functional/kublog/post_mailer_test.rb +9 -0
  172. data/test/functional/kublog/posts_controller_test.rb +9 -0
  173. data/test/integration/navigation_test.rb +10 -0
  174. data/test/kublog_test.rb +7 -0
  175. data/test/test_helper.rb +12 -0
  176. data/test/unit/helpers/kublog/categories_helper_test.rb +6 -0
  177. data/test/unit/helpers/kublog/comments_helper_test.rb +6 -0
  178. data/test/unit/helpers/kublog/images_helper_test.rb +6 -0
  179. data/test/unit/helpers/kublog/posts_helper_test.rb +6 -0
  180. data/test/unit/kublog/category_test.rb +9 -0
  181. data/test/unit/kublog/comment_test.rb +9 -0
  182. data/test/unit/kublog/image_test.rb +9 -0
  183. data/test/unit/kublog/post_test.rb +19 -0
  184. metadata +439 -0
@@ -0,0 +1,94 @@
1
+ div.wysiwyg { border: 1px solid #999; padding: 5px; background: #fff url('/assets/kublog/wysiwyg/images/jquery.wysiwyg.bg.png') repeat-x top; }
2
+ div.wysiwyg * { margin: 0; padding: 0; }
3
+
4
+ div.wysiwyg ul.toolbar li.jwysiwyg-custom-command { overflow: hidden; }
5
+
6
+ div.wysiwyg ul.toolbar { border-bottom: 1px solid #ccc; float: left; width: 100%; padding: 0; }
7
+ div.wysiwyg ul.toolbar li { list-style: none; float: left; margin: 1px 2px 3px 0; background: rgb(240, 240, 240); -moz-user-select: none; -webkit-user-select: none; user-select: none; clear: none; padding: 0 }
8
+ div.wysiwyg ul.toolbar li.separator { width: 1px; height: 16px; margin: 0 4px; border-left: 1px solid #ccc; }
9
+ div.wysiwyg ul.toolbar li { text-indent: -5000px; opacity: 0.85; filter: alpha(opacity=85); display: block; width: 16px; height: 16px; background: url('/assets/kublog/wysiwyg/images/jquery.wysiwyg.gif') no-repeat -64px -80px; border: 1px dotted rgb(240, 240, 240); cursor: pointer; margin: 0px; }
10
+ div.wysiwyg ul.toolbar li.wysiwyg-button-hover, div.wysiwyg ul.toolbar li.active { opacity: 1.00; filter:alpha(opacity=100); border: 1px outset rgb(224, 224, 224); }
11
+ div.wysiwyg ul.toolbar li.active { background-color: rgb(255, 255, 64); border: 1px solid rgb(208, 208, 208); border-left-color: #aaa; border-top-color: #aaa; margin: 0; }
12
+
13
+ div.wysiwyg ul.toolbar li.disabled, div.wysiwyg ul.toolbar li.wysiwyg-button-hover.disabled, div.wysiwyg ul.toolbar li.active.disabled { opacity: 0.5; filter:alpha(opacity=50); border: 0px none transparent; padding: 1px; cursor: auto; }
14
+
15
+
16
+ div.wysiwyg ul.toolbar li.bold { background-position: 0 -16px; }
17
+ div.wysiwyg ul.toolbar li.italic { background-position: -16px -16px; }
18
+ div.wysiwyg ul.toolbar li.strikeThrough { background-position: -32px -16px; }
19
+ div.wysiwyg ul.toolbar li.underline { background-position: -48px -16px; }
20
+ div.wysiwyg ul.toolbar li.highlight { background-position: -48px -96px; }
21
+
22
+ div.wysiwyg ul.toolbar li.justifyLeft { background-position: 0 0; }
23
+ div.wysiwyg ul.toolbar li.justifyCenter { background-position: -16px 0; }
24
+ div.wysiwyg ul.toolbar li.justifyRight { background-position: -32px 0; }
25
+ div.wysiwyg ul.toolbar li.justifyFull { background-position: -48px 0; }
26
+
27
+ div.wysiwyg ul.toolbar li.indent { background-position: -64px 0; }
28
+ div.wysiwyg ul.toolbar li.outdent { background-position: -80px 0; }
29
+
30
+ div.wysiwyg ul.toolbar li.subscript { background-position: -64px -16px; }
31
+ div.wysiwyg ul.toolbar li.superscript { background-position: -80px -16px; }
32
+
33
+ div.wysiwyg ul.toolbar li.undo { background-position: 0 -64px; }
34
+ div.wysiwyg ul.toolbar li.redo { background-position: -16px -64px; }
35
+
36
+ div.wysiwyg ul.toolbar li.insertOrderedList { background-position: -32px -48px; }
37
+ div.wysiwyg ul.toolbar li.insertUnorderedList { background-position: -16px -48px; }
38
+ div.wysiwyg ul.toolbar li.insertHorizontalRule { background-position: 0 -48px; }
39
+
40
+ div.wysiwyg ul.toolbar li.h1 { background-position: 0 -32px; }
41
+ div.wysiwyg ul.toolbar li.h2 { background-position: -16px -32px; }
42
+ div.wysiwyg ul.toolbar li.h3 { background-position: -32px -32px; }
43
+ div.wysiwyg ul.toolbar li.h4 { background-position: -48px -32px; }
44
+ div.wysiwyg ul.toolbar li.h5 { background-position: -64px -32px; }
45
+ div.wysiwyg ul.toolbar li.h6 { background-position: -80px -32px; }
46
+
47
+ div.wysiwyg ul.toolbar li.paragraph { background-position: 0px -96px; }
48
+ div.wysiwyg ul.toolbar li.colorpicker { background-position: -16px -96px; }
49
+ div.wysiwyg ul.toolbar li.fullscreen { background-position: -32px -96px; }
50
+
51
+ div.wysiwyg ul.toolbar li.cut { background-position: -32px -64px; }
52
+ div.wysiwyg ul.toolbar li.copy { background-position: -48px -64px; }
53
+ div.wysiwyg ul.toolbar li.paste { background-position: -64px -64px; }
54
+ div.wysiwyg ul.toolbar li.insertTable { background-position: -64px -48px; }
55
+
56
+ div.wysiwyg ul.toolbar li.increaseFontSize { background-position: -16px -80px; }
57
+ div.wysiwyg ul.toolbar li.decreaseFontSize { background-position: -32px -80px; }
58
+
59
+ div.wysiwyg ul.toolbar li.createLink { background-position: -80px -48px; }
60
+ div.wysiwyg ul.toolbar li.insertImage { background-position: -80px -80px; }
61
+
62
+ div.wysiwyg ul.toolbar li.html { background-position: -48px -48px; }
63
+ div.wysiwyg ul.toolbar li.removeFormat { background-position: -80px -64px; }
64
+
65
+ div.wysiwyg ul.toolbar li.empty { background-position: -64px -80px; }
66
+
67
+ div.wysiwyg ul.toolbar li.code { background-position: -64px -96px; }
68
+ div.wysiwyg ul.toolbar li.cssWrap { background-position: -80px -96px; }
69
+
70
+ div.wysiwyg-dialogRow { float:left; width:100%; font-size: 16px; }
71
+
72
+ div.wysiwyg iframe { border: 1px solid #999; clear: left;
73
+ -moz-box-shadow :inset 0 0 10px rgba(0, 0, 0, 0.4);
74
+ -webkit-box-shadow :inset 0 0 10px rgba(0, 0, 0, 0.4);
75
+ box-shadow :inset 0 0 10px rgba(0, 0, 0, 0.4);
76
+ background-color:white; padding:0px; margin:0; display:block; width: 100%; }
77
+
78
+ /* dialog */
79
+ .wysiwyg-dialog { position:fixed; top:50px; left:50px; width:450px; height:300px; background:transparent; font:14px "Helvetic Neue", Helvetica,Arial,sans-serif; }
80
+ .wysiwyg-dialog .wysiwyg-dialog-topbar { background:#333; border:1px #111 solid; color:white; padding:10px; position:relative; }
81
+ .wysiwyg-dialog .wysiwyg-dialog-topbar .wysiwyg-dialog-close-wrapper .wysiwyg-dialog-close-button { color:white; text-decoration:none; display:block; padding:6px 10px; position:absolute; right:12px; top:50%; height:14px; margin-top:-12px; }
82
+ .wysiwyg-dialog .wysiwyg-dialog-topbar .wysiwyg-dialog-close-wrapper a.wysiwyg-dialog-close-button:hover { background:#666; }
83
+ .wysiwyg-dialog .wysiwyg-dialog-topbar .wysiwyg-dialog-title { font-size:20px; font-weight:bold; padding:5px; }
84
+ .wysiwyg-dialog .wysiwyg-dialog-content { border:1px #ccc solid; border-top:0; padding:15px; background:white; }
85
+ .wysiwyg-dialog-modal-div { position:absolute; top:0px; left:0px; width:100%; height:100%; background-color:rgb(255,255,255); background-color:rgba(0,0,0,0.5); filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); -ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";}
86
+ .wysiwyg-dialog-content form.wysiwyg fieldset { border:1px #ccc solid; }
87
+ .wysiwyg-dialog-content form.wysiwyg legend { padding:7px; }
88
+ .wysiwyg-dialog-content form.wysiwyg .form-row { clear:both; padding:4px 0; }
89
+ .wysiwyg-dialog-content form.wysiwyg .form-row label, .wysiwyg-dialog form.wysiwyg .form-row .form-row-key { display:block; float:left; width:35%; text-align:right; padding:4px 5px; }
90
+ .wysiwyg-dialog-content form.wysiwyg .form-row .form-row-value { display:block; float:left; width:55%; }
91
+ .wysiwyg-dialog-content form.wysiwyg .form-row input.width-auto { width:auto; }
92
+ .wysiwyg-dialog-content form.wysiwyg input.width-small { width:50px; min-width:50px; max-width:50px; }
93
+ .wysiwyg-dialog-content form.wysiwyg input, .wysiwyg-dialog form.wysiwyg select { padding:2px; width:100%; margin:2px; }
94
+ .wysiwyg-dialog-content form.wysiwyg input[type=submit], .wysiwyg-dialog form.wysiwyg input[type=reset] { padding:2px 7px; width:auto; }
@@ -0,0 +1,9 @@
1
+ /*
2
+ * This is a manifest file that'll automatically include all the stylesheets available in this directory
3
+ * and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
4
+ * the top of the compiled file, but it's generally better to create a new file per style scope.
5
+ *= require_self
6
+ *= require_directory ../../plugins/kublog/wysiwyg/stylesheets
7
+ *= require_directory ../../plugins/kublog/fancybox/stylesheets
8
+ *= require_tree .
9
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
@@ -0,0 +1,7 @@
1
+ #kublog #email-template{
2
+ width:620px;
3
+ }
4
+
5
+ #kublog #post_email_body{
6
+ width:600px;
7
+ }
@@ -0,0 +1,41 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
5
+
6
+ #kublog #image-upload h2{
7
+ margin-top:0px;
8
+ }
9
+
10
+ #kublog #image-upload small{
11
+ display:block;
12
+ margin-top:5px;
13
+ }
14
+
15
+ #kublog .image-file .container{
16
+ display: table-cell;
17
+ text-align: center;
18
+ vertical-align: middle;
19
+ width:150px;
20
+ height:150px;
21
+ border:1px solid #ccc;
22
+ }
23
+
24
+ #kublog .image-file .container * {
25
+ vertical-align: middle;
26
+ }
27
+
28
+ /*\*//*/
29
+ #kublog .image-file .container {
30
+ display: block;
31
+ }
32
+ #kublog .image-file .container span {
33
+ display: inline-block;
34
+ height: 100%;
35
+ width: 1px;
36
+ }
37
+ /**/
38
+
39
+ #kublog #image-upload{
40
+ padding:5px;
41
+ }
@@ -0,0 +1,39 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
5
+
6
+ #kublog textarea#post_body{
7
+ width:550px;
8
+ }
9
+
10
+ #kublog div.optional{
11
+ display:none;
12
+ }
13
+
14
+ #kublog textarea.small{
15
+ width:250px;
16
+ display:block;
17
+ }
18
+
19
+ #kublog .field{
20
+ margin:10px 0px;
21
+ }
22
+
23
+ /* Sets up a little margin for Wysiwyg editor */
24
+
25
+ #kublog .toolbar li{
26
+ margin:0px 8px 3px 0px;
27
+ }
28
+
29
+ #kublog label.error{
30
+ color:#f00;
31
+ }
32
+
33
+ #kublog input.error,#kublog textarea.error{
34
+ border:1px solid red;
35
+ }
36
+
37
+ small.error_description{
38
+ margin-left:5px;
39
+ }
@@ -0,0 +1,12 @@
1
+ module Kublog
2
+ class ApplicationController < ActionController::Base
3
+ include UserIntegration::Common
4
+
5
+ before_filter :require_admin
6
+
7
+ def require_admin
8
+ redirect_to root_path unless is_admin?
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,47 @@
1
+ module Kublog
2
+ class CategoriesController < ApplicationController
3
+
4
+ skip_filter :require_admin, :only => [:show]
5
+
6
+ def show
7
+ @category = Category.find(params[:id])
8
+ @presenter = PostsPresenter.new(@category)
9
+ respond_to do |format|
10
+ format.atom { render "/kublog/posts/index", :layout => false }
11
+ format.rss { redirect_to category_path(@category, :format => :atom), :status => :moved_permanently }
12
+ format.html { render "/kublog/posts/index" }
13
+ end
14
+ end
15
+
16
+ def create
17
+ @category = Category.new(params[:category])
18
+ respond_to do |format|
19
+ if @category.save
20
+ format.json { render :json => @category }
21
+ else
22
+ format.json { render :json => @category.errors.messages, :status => 'unprocessable_entity' }
23
+ end
24
+ end
25
+ end
26
+
27
+ def update
28
+ @category = Category.find(params[:id])
29
+ respond_to do |format|
30
+ if @category.update_attributes(params[:category])
31
+ format.json { render :json => @category }
32
+ else
33
+ format.json { render :json => @category.errors.messages, :status => 'unprocessable_entity' }
34
+ end
35
+ end
36
+ end
37
+
38
+ def destroy
39
+ @category = Category.find(params[:id])
40
+ @category.destroy
41
+ respond_to do |format|
42
+ format.json{ render :json => @category }
43
+ end
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,37 @@
1
+ module Kublog
2
+ class CommentsController < ApplicationController
3
+
4
+ skip_filter :require_admin
5
+ before_filter :set_comment_user, :only => [:create]
6
+
7
+ def create
8
+ @post = Post.find(params[:post_id])
9
+ @comment = @post.comments.build(params[:comment])
10
+ respond_to do |format|
11
+ if @comment.save
12
+ format.json { render :json => @comment}
13
+ else
14
+ format.json { render :json => @comment.errors.to_json, :status => :unprocessable_entity }
15
+ end
16
+ end
17
+ end
18
+
19
+ def destroy
20
+ @post = Post.find(params[:post_id])
21
+ @comment = @post.comments.find(params[:id])
22
+ @comment.destroy
23
+ respond_to do |format|
24
+ format.json{ render :json => @comment }
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def set_comment_user
31
+ if current_user
32
+ params[:comment].merge!({:user => current_user})
33
+ end
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,44 @@
1
+ module Kublog
2
+ class ImagesController < ApplicationController
3
+ include XhrUpload::FileHelper
4
+
5
+ before_filter :set_image_file, :only => :create
6
+
7
+ def create
8
+ @image = Image.new(params[:image])
9
+ respond_to do |format|
10
+ if @image.save
11
+ format.json { render :json => @image }
12
+ else
13
+ format.json { render :json => @image.errors.messages, :status => :unprocessable_entity }
14
+ end
15
+ end
16
+ end
17
+
18
+ def update
19
+ @image = Image.find(params[:id])
20
+ respond_to do |format|
21
+ if @image.update_attributes(params[:image])
22
+ format.json { render :json => @image }
23
+ else
24
+ format.json { render :json => @image.errors.messages, :status => :unprocessable_entity }
25
+ end
26
+ end
27
+ end
28
+
29
+ def destroy
30
+ @image = Image.find(params[:id])
31
+ @image.destroy
32
+ respond_to do |format|
33
+ format.json{ render :json => @image }
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def set_image_file
40
+ params[:image] ||= {:file => received_file}
41
+ end
42
+
43
+ end
44
+ end
@@ -0,0 +1,66 @@
1
+ module Kublog
2
+ class PostsController < ApplicationController
3
+
4
+ skip_filter :require_admin, :only => [:index, :show]
5
+
6
+ def index
7
+ @presenter = PostsPresenter.new
8
+ respond_to do |format|
9
+ format.atom { render :layout => false }
10
+ format.rss { redirect_to posts_path(:format => :atom), :status => :moved_permanently }
11
+ format.html { }
12
+ end
13
+ end
14
+
15
+ def new
16
+ @post = Post.new
17
+ end
18
+
19
+ def show
20
+ post = Post.find(params[:id])
21
+ @presenter = PostPresenter.new(post)
22
+ end
23
+
24
+ #TODO: Figure out a proxy method to access User
25
+ def create
26
+ @post = current_user.posts.build(params[:post])
27
+ if @post.save
28
+ redirect_to @post
29
+ else
30
+ render 'new'
31
+ end
32
+ end
33
+
34
+ def edit
35
+ @post = Post.find(params[:id])
36
+ end
37
+
38
+ def update
39
+ @post = Post.find(params[:id])
40
+ if @post.update_attributes(params[:post])
41
+ redirect_to @post
42
+ else
43
+ render 'edit'
44
+ end
45
+ end
46
+
47
+ def destroy
48
+ @post = Post.find(params[:id])
49
+ @post.destroy
50
+ redirect_to posts_path
51
+ end
52
+
53
+ def check
54
+ @post = current_user.posts.build(params[:post])
55
+ respond_to do |format|
56
+ if @post.valid?
57
+ format.json { render :json => @post }
58
+ else
59
+ format.json { render :json => @post.errors.messages, :status => :unprocessable_entity }
60
+ end
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+ end
@@ -0,0 +1,4 @@
1
+ module Kublog
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,38 @@
1
+ module Kublog
2
+ module PostsHelper
3
+ VERSIONS = [['',''],
4
+ ['original', 'Insert Original'],
5
+ ['small', 'Insert Small (140x140)'],
6
+ ['thumb', 'Insert Thumbnail (54x54)']]
7
+
8
+ def size_options
9
+ @size_options ||= options_from_collection_for_select(VERSIONS, :first, :second)
10
+ end
11
+
12
+ def category_options(post)
13
+ categories = Kublog::Category.all
14
+ category_options = options_from_collection_for_select(categories, :id, :name, post.category.try(:id))
15
+ options = "<option value='' class='blank'></option>"
16
+ options += category_options
17
+ options += "<option value='create_new_category'>New category...</option>"
18
+ options
19
+ end
20
+
21
+ def user_kinds
22
+ Kublog.user_kinds
23
+ end
24
+
25
+ def missing_image_url
26
+ Kublog::FileUploader.new.default_url
27
+ end
28
+
29
+ def display?(should)
30
+ should ? 'display:block' : 'display:none'
31
+ end
32
+
33
+ def admin_comment?(comment)
34
+ comment.admin? ? 'admin' : ''
35
+ end
36
+
37
+ end
38
+ end