proclaim 0.5.6 → 0.6.0

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 (236) hide show
  1. checksums.yaml +5 -5
  2. data/Rakefile +5 -38
  3. data/app/assets/config/proclaim_manifest.js +2 -0
  4. data/app/assets/images/{ajax_loader.gif → proclaim/ajax_loader.gif} +0 -0
  5. data/app/assets/javascripts/proclaim.js +7 -7
  6. data/app/assets/javascripts/proclaim/{comments_handler.js.coffee → comments_handler.coffee} +16 -10
  7. data/app/assets/javascripts/proclaim/editor.coffee +55 -0
  8. data/app/assets/stylesheets/{proclaim.css.scss → proclaim.scss} +7 -8
  9. data/app/assets/stylesheets/proclaim/{comments.css.scss → comments.scss} +0 -0
  10. data/app/assets/stylesheets/proclaim/{posts.css.scss → posts.scss} +60 -25
  11. data/app/assets/stylesheets/proclaim/{subscriptions.css.scss → subscriptions.scss} +0 -0
  12. data/app/controllers/proclaim/application_controller.rb +60 -56
  13. data/app/controllers/proclaim/comments_controller.rb +13 -42
  14. data/app/controllers/proclaim/posts_controller.rb +25 -57
  15. data/app/controllers/proclaim/subscriptions_controller.rb +3 -3
  16. data/app/jobs/proclaim/application_job.rb +4 -0
  17. data/app/mailers/proclaim/application_mailer.rb +5 -0
  18. data/app/mailers/proclaim/subscription_mailer.rb +19 -17
  19. data/app/models/proclaim/application_record.rb +5 -0
  20. data/app/models/proclaim/comment.rb +6 -1
  21. data/app/models/proclaim/post.rb +20 -28
  22. data/app/models/proclaim/subscription.rb +33 -11
  23. data/app/views/layouts/proclaim/subscription_mailer.html.erb +15 -36
  24. data/app/views/proclaim/comments/_comment.html.erb +7 -7
  25. data/app/views/proclaim/comments/_form.html.erb +7 -5
  26. data/app/views/proclaim/posts/_form.html.erb +34 -21
  27. data/app/views/proclaim/posts/show.html.erb +16 -3
  28. data/app/views/proclaim/subscription_mailer/welcome_email.html.erb +2 -6
  29. data/config/initializers/friendly_id.rb +20 -1
  30. data/config/routes.rb +1 -5
  31. data/db/migrate/20141108222616_create_proclaim_posts.rb +8 -1
  32. data/db/migrate/20141114235359_create_proclaim_comments.rb +1 -1
  33. data/db/migrate/20141115022230_create_proclaim_comment_hierarchies.rb +1 -1
  34. data/db/migrate/20141210234057_create_proclaim_subscriptions.rb +5 -4
  35. data/db/migrate/20150213015321_create_friendly_id_slugs.rb +1 -1
  36. data/lib/generators/proclaim/install_generator.rb +1 -1
  37. data/lib/generators/proclaim/templates/initialize_proclaim.rb +31 -29
  38. data/lib/generators/proclaim/views_generator.rb +1 -1
  39. data/lib/proclaim.rb +15 -15
  40. data/lib/proclaim/engine.rb +21 -19
  41. data/lib/proclaim/version.rb +1 -1
  42. data/vendor/assets/fonts/KaTeX_AMS-Regular.ttf +0 -0
  43. data/vendor/assets/fonts/KaTeX_AMS-Regular.woff +0 -0
  44. data/vendor/assets/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  45. data/vendor/assets/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  46. data/vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  47. data/vendor/assets/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  48. data/vendor/assets/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  49. data/vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  50. data/vendor/assets/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  51. data/vendor/assets/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  52. data/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  53. data/vendor/assets/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  54. data/vendor/assets/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  55. data/vendor/assets/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  56. data/vendor/assets/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  57. data/vendor/assets/fonts/KaTeX_Main-Bold.ttf +0 -0
  58. data/vendor/assets/fonts/KaTeX_Main-Bold.woff +0 -0
  59. data/vendor/assets/fonts/KaTeX_Main-Bold.woff2 +0 -0
  60. data/vendor/assets/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  61. data/vendor/assets/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  62. data/vendor/assets/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  63. data/vendor/assets/fonts/KaTeX_Main-Italic.ttf +0 -0
  64. data/vendor/assets/fonts/KaTeX_Main-Italic.woff +0 -0
  65. data/vendor/assets/fonts/KaTeX_Main-Italic.woff2 +0 -0
  66. data/vendor/assets/fonts/KaTeX_Main-Regular.ttf +0 -0
  67. data/vendor/assets/fonts/KaTeX_Main-Regular.woff +0 -0
  68. data/vendor/assets/fonts/KaTeX_Main-Regular.woff2 +0 -0
  69. data/vendor/assets/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  70. data/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  71. data/vendor/assets/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  72. data/vendor/assets/fonts/KaTeX_Math-Italic.ttf +0 -0
  73. data/vendor/assets/fonts/KaTeX_Math-Italic.woff +0 -0
  74. data/vendor/assets/fonts/KaTeX_Math-Italic.woff2 +0 -0
  75. data/vendor/assets/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  76. data/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  77. data/vendor/assets/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  78. data/vendor/assets/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  79. data/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  80. data/vendor/assets/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  81. data/vendor/assets/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  82. data/vendor/assets/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  83. data/vendor/assets/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  84. data/vendor/assets/fonts/KaTeX_Script-Regular.ttf +0 -0
  85. data/vendor/assets/fonts/KaTeX_Script-Regular.woff +0 -0
  86. data/vendor/assets/fonts/KaTeX_Script-Regular.woff2 +0 -0
  87. data/vendor/assets/fonts/KaTeX_Size1-Regular.ttf +0 -0
  88. data/vendor/assets/fonts/KaTeX_Size1-Regular.woff +0 -0
  89. data/vendor/assets/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  90. data/vendor/assets/fonts/KaTeX_Size2-Regular.ttf +0 -0
  91. data/vendor/assets/fonts/KaTeX_Size2-Regular.woff +0 -0
  92. data/vendor/assets/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  93. data/vendor/assets/fonts/KaTeX_Size3-Regular.ttf +0 -0
  94. data/vendor/assets/fonts/KaTeX_Size3-Regular.woff +0 -0
  95. data/vendor/assets/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  96. data/vendor/assets/fonts/KaTeX_Size4-Regular.ttf +0 -0
  97. data/vendor/assets/fonts/KaTeX_Size4-Regular.woff +0 -0
  98. data/vendor/assets/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  99. data/vendor/assets/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  100. data/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  101. data/vendor/assets/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  102. data/vendor/assets/javascripts/contrib/auto-render.js +339 -0
  103. data/vendor/assets/javascripts/contrib/auto-render.min.js +1 -0
  104. data/vendor/assets/javascripts/contrib/auto-render.mjs +215 -0
  105. data/vendor/assets/javascripts/contrib/copy-tex.css +14 -0
  106. data/vendor/assets/javascripts/contrib/copy-tex.js +213 -0
  107. data/vendor/assets/javascripts/contrib/copy-tex.min.css +1 -0
  108. data/vendor/assets/javascripts/contrib/copy-tex.min.js +1 -0
  109. data/vendor/assets/javascripts/contrib/copy-tex.mjs +85 -0
  110. data/vendor/assets/javascripts/contrib/mathtex-script-type.js +137 -0
  111. data/vendor/assets/javascripts/contrib/mathtex-script-type.min.js +1 -0
  112. data/vendor/assets/javascripts/contrib/mathtex-script-type.mjs +24 -0
  113. data/vendor/assets/javascripts/contrib/mhchem.js +3241 -0
  114. data/vendor/assets/javascripts/contrib/mhchem.min.js +1 -0
  115. data/vendor/assets/javascripts/contrib/mhchem.mjs +3109 -0
  116. data/vendor/assets/javascripts/katex.js +16517 -0
  117. data/vendor/assets/javascripts/katex.min.js +1 -0
  118. data/vendor/assets/javascripts/katex.mjs +16122 -0
  119. data/vendor/assets/javascripts/quill.core.js +8522 -0
  120. data/vendor/assets/javascripts/quill.js +11489 -0
  121. data/vendor/assets/javascripts/quill.min.js +8 -0
  122. data/vendor/assets/javascripts/quill.min.js.map +1 -0
  123. data/vendor/assets/stylesheets/katex.css +1011 -0
  124. data/vendor/assets/stylesheets/katex.min.css +1 -0
  125. data/vendor/assets/stylesheets/quill.bubble.css +952 -0
  126. data/vendor/assets/stylesheets/quill.core.css +397 -0
  127. data/vendor/assets/stylesheets/quill.snow.css +945 -0
  128. metadata +169 -278
  129. data/CHANGELOG +0 -77
  130. data/Gemfile +0 -14
  131. data/VERSION +0 -1
  132. data/app/assets/javascripts/proclaim/editor.js.coffee +0 -52
  133. data/app/assets/javascripts/proclaim/images.js.coffee +0 -3
  134. data/app/assets/javascripts/proclaim/subscriptions.js.coffee +0 -3
  135. data/app/assets/stylesheets/proclaim/images.scss +0 -3
  136. data/app/controllers/proclaim/images_controller.rb +0 -67
  137. data/app/helpers/proclaim/comments_helper.rb +0 -4
  138. data/app/helpers/proclaim/images_helper.rb +0 -4
  139. data/app/helpers/proclaim/subscriptions_helper.rb +0 -4
  140. data/app/models/proclaim/image.rb +0 -19
  141. data/app/policies/proclaim/image_policy.rb +0 -29
  142. data/app/uploaders/proclaim/image_uploader.rb +0 -82
  143. data/db/migrate/20141222224905_create_proclaim_images.rb +0 -12
  144. data/db/migrate/20150123115226_add_name_to_subscriptions.rb +0 -7
  145. data/db/migrate/20150213015850_add_slug_to_posts.rb +0 -20
  146. data/proclaim.gemspec +0 -51
  147. data/test/controllers/proclaim/comments_controller_test.rb +0 -228
  148. data/test/controllers/proclaim/images_controller_test.rb +0 -166
  149. data/test/controllers/proclaim/posts_controller_test.rb +0 -465
  150. data/test/controllers/proclaim/subscriptions_controller_test.rb +0 -154
  151. data/test/dummy/README.rdoc +0 -28
  152. data/test/dummy/Rakefile +0 -6
  153. data/test/dummy/app/assets/javascripts/application.js +0 -14
  154. data/test/dummy/app/assets/stylesheets/application.css +0 -16
  155. data/test/dummy/app/controllers/application_controller.rb +0 -15
  156. data/test/dummy/app/helpers/application_helper.rb +0 -28
  157. data/test/dummy/app/models/user.rb +0 -7
  158. data/test/dummy/app/views/layouts/application.html.erb +0 -16
  159. data/test/dummy/bin/bundle +0 -3
  160. data/test/dummy/bin/rails +0 -4
  161. data/test/dummy/bin/rake +0 -4
  162. data/test/dummy/config.ru +0 -4
  163. data/test/dummy/config/application.rb +0 -24
  164. data/test/dummy/config/boot.rb +0 -5
  165. data/test/dummy/config/database.yml +0 -25
  166. data/test/dummy/config/environment.rb +0 -5
  167. data/test/dummy/config/environments/development.rb +0 -45
  168. data/test/dummy/config/environments/production.rb +0 -80
  169. data/test/dummy/config/environments/test.rb +0 -49
  170. data/test/dummy/config/initializers/assets.rb +0 -8
  171. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  172. data/test/dummy/config/initializers/cookies_serializer.rb +0 -3
  173. data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  174. data/test/dummy/config/initializers/inflections.rb +0 -16
  175. data/test/dummy/config/initializers/mime_types.rb +0 -4
  176. data/test/dummy/config/initializers/session_store.rb +0 -3
  177. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  178. data/test/dummy/config/locales/en.yml +0 -23
  179. data/test/dummy/config/routes.rb +0 -5
  180. data/test/dummy/config/secrets.yml +0 -22
  181. data/test/dummy/db/migrate/20141117214323_create_users.rb +0 -10
  182. data/test/dummy/db/schema.rb +0 -91
  183. data/test/dummy/public/404.html +0 -67
  184. data/test/dummy/public/422.html +0 -67
  185. data/test/dummy/public/500.html +0 -66
  186. data/test/dummy/public/favicon.ico +0 -0
  187. data/test/factories/proclaim/comment.rb +0 -11
  188. data/test/factories/proclaim/image.rb +0 -6
  189. data/test/factories/proclaim/post.rb +0 -14
  190. data/test/factories/proclaim/subscription.rb +0 -14
  191. data/test/factories/user.rb +0 -6
  192. data/test/helpers/proclaim/comments_helper_test.rb +0 -6
  193. data/test/helpers/proclaim/posts_helper_test.rb +0 -6
  194. data/test/helpers/proclaim/subscriptions_helper_test.rb +0 -6
  195. data/test/integration/with_javascript/comment_test.rb +0 -391
  196. data/test/integration/with_javascript/post_form_test.rb +0 -225
  197. data/test/integration/with_javascript/post_show_test.rb +0 -47
  198. data/test/integration/with_javascript/post_subscription_test.rb +0 -302
  199. data/test/integration/without_javascript/blog_subscription_test.rb +0 -114
  200. data/test/integration/without_javascript/manage_subscriptions_test.rb +0 -37
  201. data/test/integration/without_javascript/post_test.rb +0 -234
  202. data/test/integration/without_javascript/subscription_email_test.rb +0 -95
  203. data/test/integration/without_javascript/unsubscribe_test.rb +0 -32
  204. data/test/mailers/previews/proclaim/subscription_mailer_preview.rb +0 -22
  205. data/test/mailers/proclaim/subscription_mailer_test.rb +0 -91
  206. data/test/models/proclaim/comment_test.rb +0 -41
  207. data/test/models/proclaim/image_test.rb +0 -70
  208. data/test/models/proclaim/post_test.rb +0 -193
  209. data/test/models/proclaim/subscription_test.rb +0 -77
  210. data/test/policies/application_policy_test.rb +0 -87
  211. data/test/policies/proclaim/comment_policy_test.rb +0 -71
  212. data/test/policies/proclaim/image_policy_test.rb +0 -83
  213. data/test/policies/proclaim/post_policy_test.rb +0 -98
  214. data/test/policies/proclaim/subscription_policy_test.rb +0 -103
  215. data/test/proclaim_test.rb +0 -7
  216. data/test/support/images/test.jpg +0 -0
  217. data/test/support/pages/posts/edit_page.rb +0 -5
  218. data/test/support/pages/posts/show_page.rb +0 -47
  219. data/test/support/wait_for_ajax.rb +0 -11
  220. data/test/test_helper.rb +0 -71
  221. data/test/unit/proclaim/new_comment_callback_test.rb +0 -62
  222. data/test/unit/proclaim/new_subscription_callback_test.rb +0 -62
  223. data/test/unit/proclaim/post_published_callback_test.rb +0 -74
  224. data/vendor/assets/images/link.png +0 -0
  225. data/vendor/assets/images/remove.png +0 -0
  226. data/vendor/assets/images/resize-bigger.png +0 -0
  227. data/vendor/assets/images/resize-smaller.png +0 -0
  228. data/vendor/assets/images/unlink.png +0 -0
  229. data/vendor/assets/javascripts/addons/medium-editor-insert-embeds.js +0 -197
  230. data/vendor/assets/javascripts/addons/medium-editor-insert-images.js +0 -572
  231. data/vendor/assets/javascripts/addons/medium-editor-insert-maps.js +0 -50
  232. data/vendor/assets/javascripts/addons/medium-editor-insert-plugin.js +0 -496
  233. data/vendor/assets/javascripts/addons/medium-editor-insert-tables.js +0 -132
  234. data/vendor/assets/javascripts/medium-editor-insert-plugin.all.js +0 -1415
  235. data/vendor/assets/stylesheets/medium-editor-insert-plugin-frontend.css.scss +0 -55
  236. data/vendor/assets/stylesheets/medium-editor-insert-plugin.css.scss +0 -277
@@ -43,55 +43,35 @@
43
43
  padding: 0;
44
44
  }
45
45
 
46
- .mediumInsert
47
- {
48
- margin: 0px;
49
- }
50
-
51
- .mediumInsert.small
46
+ p img
52
47
  {
53
48
  float: left;
54
49
  max-width: 35%;
55
- min-height: 18px;
56
- }
57
-
58
- .mediumInsert img
59
- {
60
- margin: 0px;
61
- vertical-align: top;
62
- max-width: 100%;
63
- border: 0px none;
64
- }
65
-
66
- .mediumInsert.small img
67
- {
68
- max-width: 100%;
50
+ margin-right: 15px;
69
51
  }
70
52
 
71
- figure.mediumInsert-images
53
+ p.ql-align-right
72
54
  {
73
- width: 100%;
74
- margin: 0px;
75
- text-align: center;
76
- display: inline-block;
55
+ text-align: right;
77
56
  }
78
57
 
79
- figure.mediumInsert-images.small
58
+ p.ql-align-right img
80
59
  {
81
- padding-bottom: 18px;
82
- padding-right: 30px;
60
+ float: right;
61
+ max-width: 35%;
62
+ margin-left: 15px;
83
63
  }
84
64
 
85
- figure.mediumInsert-images:first-child
65
+ p.ql-align-center img
86
66
  {
87
- margin-right: 0px;
88
- width: 100%;
67
+ float: inherit;
68
+ max-width: 100%;
89
69
  }
90
70
 
91
- .medium-editor-insert-plugin p
71
+ p.ql-align-justify img
92
72
  {
93
- margin: 0px 0px 10px;
94
- box-sizing: border-box;
73
+ float: inherit;
74
+ max-width: 100%;
95
75
  }
96
76
 
97
77
  td.post_body
@@ -159,8 +139,7 @@
159
139
  <% url = root_url.gsub(/\A.*:\/\//, '').gsub(/\A(.*?)\/*\z/, '\1') %>
160
140
 
161
141
  <% if @subscription.post %>
162
- You're receiving this email because you requested to be notified if a new comment was made on <%= link_to "this post", @subscription.post %>
163
- at <%= link_to url, posts_url %>.
142
+ You're receiving this email because you requested to be notified if a new comment was made on <%= link_to "this post", @subscription.post %> at <%= link_to url, posts_url %>.
164
143
  <% else %>
165
144
  You're receiving this email because you requested to be notified if a new post was made at <%= link_to url, posts_url %>.
166
145
  <% end %>
@@ -15,16 +15,16 @@
15
15
  %>
16
16
 
17
17
  <%= link_to "Reply", "#", class: "reply",
18
- data: {
19
- form: "#{render(partial: "proclaim/comments/form", locals: {comment: replyComment, target: target})}",
20
- target: target
21
- } %>
18
+ data: {
19
+ form: "#{render(partial: "proclaim/comments/form", locals: {comment: replyComment, target: target})}",
20
+ target: target
21
+ } %>
22
22
 
23
23
  <% if policy(comment).destroy? %>
24
24
  <%= link_to "Edit", "#", class: "edit",
25
- data: {
26
- form: "#{render(partial: "proclaim/comments/form", locals: {comment: comment})}"
27
- } %>
25
+ data: {
26
+ form: "#{render(partial: "proclaim/comments/form", locals: {comment: comment})}"
27
+ } %>
28
28
  <% end %>
29
29
 
30
30
  <% if policy(comment).destroy? %>
@@ -34,12 +34,14 @@
34
34
  <% end %>
35
35
 
36
36
  <%= label namespace_space+"subscription", "subscribe", "Notify me of other comments on this post" %><br />
37
- <%= check_box "subscription", "subscribe", {id: namespace_space+"subscription_subscribe", class: "subscription_subscribe"}, "true", nil %><br />
37
+ <%= check_box_tag "subscribe", "subscribe", false, {id: namespace_space+"subscription_subscribe", class: "subscription_subscribe"} %><br />
38
38
 
39
- <div class = "subscription_email" style = "display: none;">
40
- <%= label namespace_space+"subscription", "email"%><br />
41
- <%= text_field "subscription", "email", id: namespace_space+"subscription_email" %>
42
- </div>
39
+ <%= f.fields_for :subscription, Proclaim::Subscription.new do |f| %>
40
+ <div class = "subscription_email" style = "display: none;">
41
+ <%= f.label :email, "Email" %><br />
42
+ <%= f.email_field :email %>
43
+ </div>
44
+ <% end %>
43
45
 
44
46
  <%= f.hidden_field :post_id %>
45
47
  <%= f.hidden_field :parent_id %>
@@ -1,20 +1,36 @@
1
1
  <script type="text/javascript">
2
2
  $(document).ready(function()
3
3
  {
4
+ <%
5
+ quill_body = @post.quill_body.html_safe
6
+ if quill_body.empty?
7
+ quill_body = '{}'
8
+ end
9
+ %>
4
10
  <% if @post.new_record? %>
5
11
  new Editor($(document).find("form.new_post"),
6
12
  $(document).find("input#post_title"),
7
- $(document).find("form.new_post h1.editable"),
13
+ $(document).find("form.new_post h1.editable"),
14
+ '<%= @post.title.html_safe.strip %>',
8
15
  $(document).find("input#post_body"),
9
- $(document).find("form.new_post div.editable"),
10
- <%= Proclaim.editor_toolbar_buttons.to_json.html_safe %>);
16
+ $(document).find("input#post_quill_body"),
17
+ $(document).find("form.new_post div.editable"),
18
+ $(document).find("div#scrolling-container"),
19
+ <%= quill_body %>,
20
+ <%= Proclaim.editor_toolbar.to_json.html_safe %>,
21
+ <%= Proclaim.editor_formats.to_json.html_safe %>);
11
22
  <% else %>
12
23
  new Editor($(document).find("form.edit_post"),
13
24
  $(document).find("input#post_title"),
14
- $(document).find("form.edit_post h1.editable"),
25
+ $(document).find("form.edit_post h1.editable"),
26
+ '<%= @post.title.html_safe.strip %>',
15
27
  $(document).find("input#post_body"),
16
- $(document).find("form.edit_post div.editable"),
17
- <%= Proclaim.editor_toolbar_buttons.to_json.html_safe %>);
28
+ $(document).find("input#post_quill_body"),
29
+ $(document).find("form.edit_post div.editable"),
30
+ $(document).find("div#scrolling-container"),
31
+ <%= quill_body %>,
32
+ <%= Proclaim.editor_toolbar.to_json.html_safe %>,
33
+ <%= Proclaim.editor_formats.to_json.html_safe %>);
18
34
  <% end %>
19
35
  });
20
36
  </script>
@@ -36,24 +52,20 @@
36
52
  <%=
37
53
  fake_form_field @post, :title do
38
54
  content_tag :h1, @post.title, class: "post_title editable",
39
- data: {
40
- placeholder: "Post Title",
41
- disable_return: "true",
42
- disable_toolbar: "true",
43
- }
55
+ contenteditable: true, placeholder: "Post Title"
44
56
  end
45
57
  %>
46
58
 
47
- <%=
48
- fake_form_field @post, :body do
49
- content_tag :div, @post.body.html_safe, class: "post_body editable",
50
- data: {
51
- placeholder: "Post Body",
52
- image_upload_path: cache_image_path,
53
- image_delete_path: discard_image_path,
54
- }
55
- end
56
- %>
59
+ <div id="scrolling-container">
60
+ <%=
61
+ fake_form_field @post, :body do
62
+ content_tag :div, '', class: "post_body editable",
63
+ data: {
64
+ placeholder: "Post Body",
65
+ }
66
+ end
67
+ %>
68
+ </div>
57
69
 
58
70
  <div class = "post_information" style = "margin-bottom: 30px;">
59
71
  <% if @post.published? %>
@@ -68,6 +80,7 @@
68
80
 
69
81
  <%= f.hidden_field :title %>
70
82
  <%= f.hidden_field :body %>
83
+ <%= f.hidden_field :quill_body %>
71
84
 
72
85
  <% if @post.published? and not @post.new_record? %>
73
86
  This post has already been published
@@ -12,7 +12,19 @@
12
12
  'a.edit',
13
13
  'a.delete',
14
14
  'input.subscription_subscribe',
15
- 'div.subscription_email')
15
+ 'div.subscription_email');
16
+
17
+ <%
18
+ quill_body = @post.quill_body.html_safe
19
+ if quill_body.empty?
20
+ quill_body = '{}'
21
+ end
22
+ %>
23
+ new Quill('div.post_body', {
24
+ scrollingContainer: 'div#scrolling-container',
25
+ theme: 'bubble',
26
+ readOnly: true,
27
+ }).setContents(<%= quill_body %>)
16
28
  });
17
29
  </script>
18
30
 
@@ -32,8 +44,9 @@
32
44
  <div class = "post">
33
45
  <h1 class = "post_title"><%= content_for :proclaim_title %></h1>
34
46
 
35
- <div class = "post_body show">
36
- <%= @post.body.html_safe %>
47
+ <div id="scrolling-container">
48
+ <div class = "post_body show">
49
+ </div>
37
50
  </div>
38
51
 
39
52
  <div class = "post_information">
@@ -9,15 +9,11 @@
9
9
  <td class = "post_body">
10
10
  <% if @subscription.post %>
11
11
  <p>
12
- You signed up to be notified of any new comments on
13
- <%= link_to "this post", @subscription.post %>.
12
+ You signed up to be notified of any new comments on <%= link_to "this post", @subscription.post %>.
14
13
  </p>
15
14
  <% else %>
16
15
  <p>
17
- You signed up to receive a notification each time a new post is
18
- made at
19
- <%= link_to root_url.gsub(/\A.*:\/\//, '').gsub(/\A(.*?)\/*\z/, '\1'),
20
- posts_url %>.
16
+ You signed up to receive a notification each time a new post is made at <%= link_to root_url.gsub(/\A.*:\/\//, '').gsub(/\A(.*?)\/*\z/, '\1'), posts_url %>.
21
17
  </p>
22
18
 
23
19
  <p>Thanks for subscribing!</p>
@@ -18,6 +18,12 @@ FriendlyId.defaults do |config|
18
18
 
19
19
  config.reserved_words = %w(new edit index session login logout users admin
20
20
  stylesheets assets javascripts images)
21
+
22
+ # This adds an option to treat reserved words as conflicts rather than exceptions.
23
+ # When there is no good candidate, a UUID will be appended, matching the existing
24
+ # conflict behavior.
25
+
26
+ # config.treat_reserved_as_conflict = true
21
27
 
22
28
  # ## Friendly Finders
23
29
  #
@@ -52,6 +58,10 @@ FriendlyId.defaults do |config|
52
58
  #
53
59
  # config.slug_column = 'slug'
54
60
  #
61
+ # By default, slug has no size limit, but you can change it if you wish.
62
+ #
63
+ # config.slug_limit = 255
64
+ #
55
65
  # When FriendlyId can not generate a unique ID from your base method, it appends
56
66
  # a UUID, separated by a single dash. You can configure the character used as the
57
67
  # separator. If you're upgrading from FriendlyId 4, you may wish to replace this
@@ -59,16 +69,25 @@ FriendlyId.defaults do |config|
59
69
  #
60
70
  # config.sequence_separator = '-'
61
71
  #
72
+ # Note that you must use the :slugged addon **prior** to the line which
73
+ # configures the sequence separator, or else FriendlyId will raise an undefined
74
+ # method error.
75
+ #
62
76
  # ## Tips and Tricks
63
77
  #
64
78
  # ### Controlling when slugs are generated
65
79
  #
66
80
  # As of FriendlyId 5.0, new slugs are generated only when the slug field is
67
81
  # nil, but if you're using a column as your base method can change this
68
- # behavior by overriding the `should_generate_new_friendly_id` method that
82
+ # behavior by overriding the `should_generate_new_friendly_id?` method that
69
83
  # FriendlyId adds to your model. The change below makes FriendlyId 5.0 behave
70
84
  # more like 4.0.
85
+ # Note: Use(include) Slugged module in the config if using the anonymous module.
86
+ # If you have `friendly_id :name, use: slugged` in the model, Slugged module
87
+ # is included after the anonymous module defined in the initializer, so it
88
+ # overrides the `should_generate_new_friendly_id?` method from the anonymous module.
71
89
  #
90
+ # config.use :slugged
72
91
  # config.use Module.new {
73
92
  # def should_generate_new_friendly_id?
74
93
  # slug.blank? || <your_column_name_here>_changed?
@@ -1,14 +1,10 @@
1
1
  Proclaim::Engine.routes.draw do
2
2
  resources :posts
3
-
4
- resources :images, only: [:create, :destroy]
5
- post 'images/cache' => 'images#cache', as: :cache_image
6
- post 'images/discard' => 'images#discard', as: :discard_image
7
-
8
3
  resources :comments, only: [:create, :update, :destroy]
9
4
 
10
5
  # Subscription administration is authenticated via tokens
11
6
  resources :subscriptions, param: :token, except: [:edit, :update]
12
7
 
13
8
  root 'posts#index'
9
+ default_url_options Rails.application.config.action_mailer.default_url_options
14
10
  end
@@ -1,15 +1,22 @@
1
- class CreateProclaimPosts < ActiveRecord::Migration
1
+ class CreateProclaimPosts < ActiveRecord::Migration[5.2]
2
2
  def change
3
3
  create_table :proclaim_posts do |t|
4
4
  t.belongs_to :author, index: true
5
5
 
6
6
  t.string :title, null: false, default: ""
7
7
  t.text :body, null: false, default: ""
8
+ t.text :quill_body, null: false, default: ""
8
9
 
9
10
  t.string :state, null: false, default: "draft", index: true
11
+ t.string :slug
10
12
 
11
13
  t.datetime :published_at
12
14
  t.timestamps null: false
13
15
  end
16
+
17
+ # This ensures that even if two clients try to create the same
18
+ # post slug at exactly the same time, the database won't accept
19
+ # one of them (Rails would have)
20
+ add_index :proclaim_posts, :slug, unique: true
14
21
  end
15
22
  end
@@ -1,4 +1,4 @@
1
- class CreateProclaimComments < ActiveRecord::Migration
1
+ class CreateProclaimComments < ActiveRecord::Migration[5.2]
2
2
  def change
3
3
  create_table :proclaim_comments do |t|
4
4
  t.belongs_to :post, index: true
@@ -1,4 +1,4 @@
1
- class CreateProclaimCommentHierarchies < ActiveRecord::Migration
1
+ class CreateProclaimCommentHierarchies < ActiveRecord::Migration[5.2]
2
2
  def change
3
3
  create_table :proclaim_comment_hierarchies, :id => false do |t|
4
4
  # ID of the parent/grandparent/great-grandparent/etc. comments
@@ -1,17 +1,18 @@
1
- class CreateProclaimSubscriptions < ActiveRecord::Migration
1
+ class CreateProclaimSubscriptions < ActiveRecord::Migration[5.2]
2
2
  def change
3
3
  create_table :proclaim_subscriptions do |t|
4
- t.belongs_to :post, index: true
4
+ t.belongs_to :comment, index: true
5
+ t.string :name, null: false, default: ""
5
6
  t.string :email
6
7
 
7
8
  t.timestamps null: false
8
9
  end
9
10
 
10
- add_foreign_key :proclaim_subscriptions, :proclaim_posts, column: :post_id
11
+ add_foreign_key :proclaim_subscriptions, :proclaim_comments, column: :comment_id
11
12
 
12
13
  # This ensures that even if two clients try to create the same
13
14
  # subscription at exactly the same time, the database won't accept
14
15
  # one of them (Rails would have)
15
- add_index :proclaim_subscriptions, [:post_id, :email], :unique => true
16
+ add_index :proclaim_subscriptions, [:comment_id, :email], :unique => true
16
17
  end
17
18
  end
@@ -1,4 +1,4 @@
1
- class CreateFriendlyIdSlugs < ActiveRecord::Migration
1
+ class CreateFriendlyIdSlugs < ActiveRecord::Migration[5.2]
2
2
  def change
3
3
  create_table :friendly_id_slugs do |t|
4
4
  t.string :slug, :null => false
@@ -20,4 +20,4 @@ module Proclaim
20
20
  end
21
21
  end
22
22
  end
23
- end
23
+ end
@@ -3,58 +3,60 @@ Proclaim.setup do |config|
3
3
  # `current_author_method` and `authentication_method`. For example, setting
4
4
  # `author_class = "Admin"` changes the default `current_author_method` to be
5
5
  # `:current_admin`, etc.
6
- #config.author_class = "User"
6
+ # config.author_class = "User"
7
7
 
8
8
  # Method to obtain the name of the author. This should be a method on the
9
9
  # author class.
10
- #config.author_name_method = :name
10
+ # config.author_name_method = :name
11
11
 
12
12
  # Method to obtain the currently-authenticated user. Should return nil if
13
13
  # no user is currently authenticated.
14
- #config.current_author_method = :current_user
14
+ # config.current_author_method = :current_user
15
15
 
16
16
  # Method to verify that a user is authenticated, and if not, will redirect
17
17
  # to some sort of authentication page.
18
- #config.authentication_method = :authenticate_user!
18
+ # config.authentication_method = :authenticate_user!
19
19
 
20
20
  # Maximum length for the excerpts shown on the posts index.
21
- #config.excerpt_length = 500
21
+ # config.excerpt_length = 500
22
22
 
23
23
  # Buttons to display on post editor toolbar
24
- #config.editor_toolbar_buttons = ['bold', 'italic', 'underline', 'anchor',
25
- # 'header1', 'header2', 'quote']
26
-
27
- # Whitelist of HTML tags to be supported by the editor
28
- #config.editor_whitelist_tags = %w(h1 h2 h3 h4 h5 h6
29
- # div p blockquote
30
- # ul ol li
31
- # a b strong i u
32
- # img figure
33
- # pre sup sub br)
34
-
35
- # Whitelist of HTML attributes to be supported by the editor
36
- #config.editor_whitelist_attributes = %w(class id style href title src alt
37
- # align draggable)
24
+ # config.editor_toolbar = [
25
+ # ['bold', 'italic', 'underline', 'strike', 'code'],
26
+ # [{ 'header': 1 }, { 'header': 2 }],
27
+ # ['code-block'],
28
+ # [{ 'align': []}],
29
+ # [{ 'list': 'ordered'}, { 'list': 'bullet'}],
30
+ # ['link', 'image', 'video', 'formula']
31
+ # ]
32
+
33
+ # Formats to allow in the editor (can be a superset of the toolbar)
34
+ # config.editor_formats = [
35
+ # 'align', 'blockquote', 'bold', 'code', 'code-block', 'formula', 'header',
36
+ # 'image', 'italic', 'link', 'list', 'strike', 'underline', 'video'
37
+ # ]
38
38
 
39
39
  # Email address to use in the "from" field of all emails
40
- #config.mailer_sender = '"My Blog" <blog@example.com>'
40
+ # config.mailer_sender = '"My Blog" <blog@example.com>'
41
41
 
42
- # Secret key to use for subscription tokens. Changing this will invalidate
43
- # any tokens already generated.
44
- #config.secret_key = nil
42
+ # The secret key used by Proclaim for subscription tokens. Changing this will
43
+ # invalidate any tokens already generated, making it impossible to unsubscribe from
44
+ # old links. Proclaim will use the `secret_key_base` as its `secret_key` by default.
45
+ # You can change it below and use your own secret key.
46
+ # config.secret_key = '<%= SecureRandom.hex(64) %>'
45
47
 
46
48
  # Register a callback to be called when a post is published
47
- #config.after_post_published do |post|
49
+ # config.after_post_published do |post|
48
50
  # puts "A post was just published!"
49
- #end
51
+ # end
50
52
 
51
53
  # Register a callback to be called when a new comment is created
52
- #config.after_new_comment do |comment|
54
+ # config.after_new_comment do |comment|
53
55
  # puts "A new comment was just made!"
54
- #end
56
+ # end
55
57
 
56
58
  # Register a callback to be called when a new subscription is created
57
- #config.after_new_subscription do |subscription|
59
+ # config.after_new_subscription do |subscription|
58
60
  # puts "A new subscription was just created!"
59
- #end
61
+ # end
60
62
  end