kublog 0.0.1.1

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.
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