publify_core 9.1.0 → 9.2.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 (357) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +34 -1
  3. data/app/assets/javascripts/bootstrap-sprockets.js +8 -0
  4. data/app/assets/javascripts/bootstrap/affix.js +164 -0
  5. data/app/assets/javascripts/bootstrap/alert.js +95 -0
  6. data/app/assets/javascripts/bootstrap/button.js +125 -0
  7. data/app/assets/javascripts/bootstrap/collapse.js +212 -0
  8. data/app/assets/javascripts/bootstrap/dropdown.js +165 -0
  9. data/app/assets/javascripts/bootstrap/modal.js +358 -0
  10. data/app/assets/javascripts/bootstrap/tab.js +155 -0
  11. data/app/assets/javascripts/bootstrap/transition.js +59 -0
  12. data/app/assets/javascripts/lightbox.js +4 -4
  13. data/app/assets/javascripts/publify_admin.js +1 -35
  14. data/app/assets/stylesheets/_bootstrap-compass.scss +9 -0
  15. data/app/assets/stylesheets/_bootstrap-mincer.scss +19 -0
  16. data/app/assets/stylesheets/_bootstrap-sprockets.scss +9 -0
  17. data/app/assets/stylesheets/_bootstrap.scss +42 -0
  18. data/app/assets/stylesheets/administration_structure.css.scss +1 -45
  19. data/app/assets/stylesheets/bootstrap/_alerts.scss +73 -0
  20. data/app/assets/stylesheets/bootstrap/_button-groups.scss +242 -0
  21. data/app/assets/stylesheets/bootstrap/_buttons.scss +168 -0
  22. data/app/assets/stylesheets/bootstrap/_close.scss +37 -0
  23. data/app/assets/stylesheets/bootstrap/_code.scss +69 -0
  24. data/app/assets/stylesheets/bootstrap/_component-animations.scss +38 -0
  25. data/app/assets/stylesheets/bootstrap/_dropdowns.scss +213 -0
  26. data/app/assets/stylesheets/bootstrap/_forms.scss +586 -0
  27. data/app/assets/stylesheets/bootstrap/_grid.scss +94 -0
  28. data/app/assets/stylesheets/bootstrap/_labels.scss +66 -0
  29. data/app/assets/stylesheets/bootstrap/_media.scss +66 -0
  30. data/app/assets/stylesheets/bootstrap/_mixins.scss +37 -0
  31. data/app/assets/stylesheets/bootstrap/_modals.scss +150 -0
  32. data/app/assets/stylesheets/bootstrap/_navbar.scss +479 -0
  33. data/app/assets/stylesheets/bootstrap/_navs.scss +242 -0
  34. data/app/assets/stylesheets/bootstrap/_normalize.scss +427 -0
  35. data/app/assets/stylesheets/bootstrap/_pagination.scss +86 -0
  36. data/app/assets/stylesheets/bootstrap/_panels.scss +222 -0
  37. data/app/assets/stylesheets/bootstrap/_print.scss +99 -0
  38. data/app/assets/stylesheets/bootstrap/_scaffolding.scss +160 -0
  39. data/app/assets/stylesheets/bootstrap/_tables.scss +234 -0
  40. data/app/assets/stylesheets/bootstrap/_theme.scss +224 -0
  41. data/app/assets/stylesheets/bootstrap/_type.scss +296 -0
  42. data/app/assets/stylesheets/bootstrap/_utilities.scss +55 -0
  43. data/app/assets/stylesheets/bootstrap/_variables.scss +638 -0
  44. data/app/assets/stylesheets/bootstrap/_wells.scss +29 -0
  45. data/app/assets/stylesheets/bootstrap/mixins/_alerts.scss +15 -0
  46. data/app/assets/stylesheets/bootstrap/mixins/_background-variant.scss +12 -0
  47. data/app/assets/stylesheets/bootstrap/mixins/_border-radius.scss +18 -0
  48. data/app/assets/stylesheets/bootstrap/mixins/_buttons.scss +56 -0
  49. data/app/assets/stylesheets/bootstrap/mixins/_center-block.scss +7 -0
  50. data/app/assets/stylesheets/bootstrap/mixins/_clearfix.scss +22 -0
  51. data/app/assets/stylesheets/bootstrap/mixins/_forms.scss +82 -0
  52. data/app/assets/stylesheets/bootstrap/mixins/_gradients.scss +56 -0
  53. data/app/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +81 -0
  54. data/app/assets/stylesheets/bootstrap/mixins/_grid.scss +122 -0
  55. data/app/assets/stylesheets/bootstrap/mixins/_hide-text.scss +21 -0
  56. data/app/assets/stylesheets/bootstrap/mixins/_image.scss +28 -0
  57. data/app/assets/stylesheets/bootstrap/mixins/_labels.scss +12 -0
  58. data/app/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +10 -0
  59. data/app/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +9 -0
  60. data/app/assets/stylesheets/bootstrap/mixins/_opacity.scss +7 -0
  61. data/app/assets/stylesheets/bootstrap/mixins/_pagination.scss +24 -0
  62. data/app/assets/stylesheets/bootstrap/mixins/_panels.scss +20 -0
  63. data/app/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +8 -0
  64. data/app/assets/stylesheets/bootstrap/mixins/_resize.scss +6 -0
  65. data/app/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +17 -0
  66. data/app/assets/stylesheets/bootstrap/mixins/_size.scss +10 -0
  67. data/app/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +9 -0
  68. data/app/assets/stylesheets/bootstrap/mixins/_table-row.scss +28 -0
  69. data/app/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +12 -0
  70. data/app/assets/stylesheets/bootstrap/mixins/_text-overflow.scss +8 -0
  71. data/app/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +222 -0
  72. data/app/assets/stylesheets/lightbox.css +3 -3
  73. data/app/assets/stylesheets/publify_admin.css.scss +0 -1
  74. data/app/controllers/accounts_controller.rb +2 -0
  75. data/app/controllers/admin/base_controller.rb +8 -5
  76. data/app/controllers/admin/content_controller.rb +37 -24
  77. data/app/controllers/admin/dashboard_controller.rb +16 -64
  78. data/app/controllers/admin/feedback_controller.rb +45 -38
  79. data/app/controllers/admin/notes_controller.rb +15 -9
  80. data/app/controllers/admin/pages_controller.rb +18 -15
  81. data/app/controllers/admin/post_types_controller.rb +7 -5
  82. data/app/controllers/admin/profiles_controller.rb +4 -2
  83. data/app/controllers/admin/redirects_controller.rb +9 -5
  84. data/app/controllers/admin/resources_controller.rb +7 -4
  85. data/app/controllers/admin/seo_controller.rb +14 -10
  86. data/app/controllers/admin/settings_controller.rb +7 -5
  87. data/app/controllers/admin/sidebar_controller.rb +7 -4
  88. data/app/controllers/admin/tags_controller.rb +6 -3
  89. data/app/controllers/admin/themes_controller.rb +10 -7
  90. data/app/controllers/admin/users_controller.rb +9 -6
  91. data/app/controllers/articles_controller.rb +49 -33
  92. data/app/controllers/authors_controller.rb +6 -3
  93. data/app/controllers/base_controller.rb +9 -5
  94. data/app/controllers/comments_controller.rb +12 -8
  95. data/app/controllers/content_controller.rb +4 -2
  96. data/app/controllers/feedback_controller.rb +4 -2
  97. data/app/controllers/notes_controller.rb +5 -3
  98. data/app/controllers/setup_controller.rb +14 -10
  99. data/app/controllers/tags_controller.rb +6 -4
  100. data/app/controllers/text_controller.rb +2 -4
  101. data/app/controllers/textfilter_controller.rb +2 -0
  102. data/app/controllers/theme_controller.rb +14 -12
  103. data/app/controllers/xml_controller.rb +2 -0
  104. data/app/helpers/admin/base_helper.rb +28 -28
  105. data/app/helpers/admin/feedback_helper.rb +34 -24
  106. data/app/helpers/articles_helper.rb +4 -2
  107. data/app/helpers/authors_helper.rb +6 -3
  108. data/app/helpers/base_helper.rb +50 -34
  109. data/app/helpers/blog_helper.rb +4 -2
  110. data/app/helpers/xml_helper.rb +2 -0
  111. data/app/jobs/application_job.rb +2 -0
  112. data/app/mailers/notification_mailer.rb +5 -3
  113. data/app/models/ability.rb +25 -23
  114. data/app/models/archives_sidebar.rb +14 -11
  115. data/app/models/article.rb +44 -32
  116. data/app/models/article/factory.rb +14 -6
  117. data/app/models/blog.rb +85 -65
  118. data/app/models/comment.rb +10 -7
  119. data/app/models/config_manager.rb +4 -2
  120. data/app/models/content.rb +34 -40
  121. data/app/models/content_base.rb +9 -3
  122. data/app/models/feedback.rb +19 -16
  123. data/app/models/meta_sidebar.rb +5 -2
  124. data/app/models/note.rb +25 -23
  125. data/app/models/page.rb +8 -6
  126. data/app/models/page_sidebar.rb +4 -2
  127. data/app/models/ping.rb +2 -0
  128. data/app/models/post_type.rb +3 -1
  129. data/app/models/redirect.rb +11 -6
  130. data/app/models/redirection.rb +2 -0
  131. data/app/models/resource.rb +4 -2
  132. data/app/models/search_sidebar.rb +4 -2
  133. data/app/models/sidebar.rb +10 -5
  134. data/app/models/static_sidebar.rb +15 -12
  135. data/app/models/tag.rb +14 -10
  136. data/app/models/tag_sidebar.rb +6 -3
  137. data/app/models/text_filter.rb +85 -11
  138. data/app/models/trackback.rb +7 -11
  139. data/app/models/trigger.rb +6 -3
  140. data/app/models/user.rb +43 -42
  141. data/app/services/title_builder.rb +56 -45
  142. data/app/uploaders/resource_uploader.rb +7 -3
  143. data/app/views/accounts/confirm.html.erb +3 -3
  144. data/app/views/admin/content/_article_list.html.erb +23 -8
  145. data/app/views/admin/content/_form.html.erb +71 -47
  146. data/app/views/admin/content/edit.html.erb +1 -1
  147. data/app/views/admin/content/index.html.erb +25 -15
  148. data/app/views/admin/content/new.html.erb +2 -2
  149. data/app/views/admin/dashboard/_comment.html.erb +5 -5
  150. data/app/views/admin/dashboard/_comments.html.erb +2 -2
  151. data/app/views/admin/dashboard/_drafts.html.erb +5 -5
  152. data/app/views/admin/dashboard/_overview.html.erb +7 -9
  153. data/app/views/admin/dashboard/_welcome.html.erb +11 -11
  154. data/app/views/admin/dashboard/index.html.erb +12 -7
  155. data/app/views/admin/feedback/_button.html.erb +6 -6
  156. data/app/views/admin/feedback/_feedback.html.erb +3 -3
  157. data/app/views/admin/feedback/_ham.html.erb +27 -9
  158. data/app/views/admin/feedback/_spam.html.erb +26 -16
  159. data/app/views/admin/feedback/article.html.erb +20 -21
  160. data/app/views/admin/feedback/edit.html.erb +14 -15
  161. data/app/views/admin/feedback/{ham.js → ham.js.erb} +0 -0
  162. data/app/views/admin/feedback/index.html.erb +25 -23
  163. data/app/views/admin/feedback/{spam.js → spam.js.erb} +0 -0
  164. data/app/views/admin/migrations/show.html.erb +10 -11
  165. data/app/views/admin/notes/_form.html.erb +13 -13
  166. data/app/views/admin/notes/_list.html.erb +19 -8
  167. data/app/views/admin/notes/_note.html.erb +12 -7
  168. data/app/views/admin/notes/edit.html.erb +6 -1
  169. data/app/views/admin/notes/index.html.erb +5 -1
  170. data/app/views/admin/notes/show.html.erb +2 -2
  171. data/app/views/admin/pages/_form.html.erb +86 -77
  172. data/app/views/admin/pages/_pages.html.erb +11 -4
  173. data/app/views/admin/pages/edit.html.erb +3 -1
  174. data/app/views/admin/pages/index.html.erb +10 -6
  175. data/app/views/admin/pages/new.html.erb +3 -1
  176. data/app/views/admin/post_types/_index_and_form.html.erb +15 -16
  177. data/app/views/admin/post_types/edit.html.erb +1 -1
  178. data/app/views/admin/post_types/index.html.erb +1 -1
  179. data/app/views/admin/profiles/index.html.erb +2 -3
  180. data/app/views/admin/redirects/_index_and_form.html.erb +10 -11
  181. data/app/views/admin/redirects/edit.html.erb +1 -1
  182. data/app/views/admin/redirects/index.html.erb +1 -1
  183. data/app/views/admin/resources/index.html.erb +19 -16
  184. data/app/views/admin/seo/_general.html.erb +23 -47
  185. data/app/views/admin/seo/_permalinks.html.erb +14 -14
  186. data/app/views/admin/seo/_titles.html.erb +63 -64
  187. data/app/views/admin/seo/show.html.erb +14 -19
  188. data/app/views/admin/settings/display.html.erb +22 -25
  189. data/app/views/admin/settings/feedback.html.erb +31 -32
  190. data/app/views/admin/settings/index.html.erb +23 -24
  191. data/app/views/admin/settings/write.html.erb +21 -22
  192. data/app/views/admin/shared/_edit.html.erb +3 -3
  193. data/app/views/admin/shared/_menu.html.erb +26 -26
  194. data/app/views/admin/shared/_twitter_alert.html.erb +1 -1
  195. data/app/views/admin/sidebar/_config.html.erb +5 -5
  196. data/app/views/admin/sidebar/_target_sidebar.html.erb +4 -4
  197. data/app/views/admin/sidebar/index.html.erb +7 -7
  198. data/app/views/admin/tags/_index_and_form.html.erb +11 -12
  199. data/app/views/admin/tags/edit.html.erb +1 -1
  200. data/app/views/admin/tags/index.html.erb +1 -1
  201. data/app/views/admin/themes/index.html.erb +5 -6
  202. data/app/views/admin/users/_form.html.erb +34 -34
  203. data/app/views/admin/users/edit.html.erb +2 -2
  204. data/app/views/admin/users/index.html.erb +10 -12
  205. data/app/views/admin/users/new.html.erb +2 -2
  206. data/app/views/archives_sidebar/_content.html.erb +2 -2
  207. data/app/views/articles/_archives_article.html.erb +3 -3
  208. data/app/views/articles/_article.html.erb +7 -9
  209. data/app/views/articles/_article_author.html.erb +4 -0
  210. data/app/views/articles/_article_content.html.erb +2 -2
  211. data/app/views/articles/_article_excerpt.html.erb +2 -2
  212. data/app/views/articles/_article_links.html.erb +1 -1
  213. data/app/views/articles/_comment_errors.html.erb +1 -1
  214. data/app/views/articles/_comment_form.html.erb +12 -12
  215. data/app/views/articles/_comment_preview.html.erb +3 -3
  216. data/app/views/articles/_password_form.html.erb +4 -4
  217. data/app/views/articles/_trackback.html.erb +2 -2
  218. data/app/views/articles/archives.html.erb +1 -1
  219. data/app/views/articles/feedback_atom_feed.atom.builder +3 -1
  220. data/app/views/articles/feedback_rss_feed.rss.builder +9 -7
  221. data/app/views/articles/index_atom_feed.atom.builder +5 -3
  222. data/app/views/articles/index_rss_feed.rss.builder +10 -8
  223. data/app/views/articles/live_search.html.erb +3 -3
  224. data/app/views/articles/read.html.erb +16 -8
  225. data/app/views/articles/search.html.erb +2 -2
  226. data/app/views/articles/trackback.xml.builder +3 -1
  227. data/app/views/articles/view_page.html.erb +1 -1
  228. data/app/views/authors/show.html.erb +9 -9
  229. data/app/views/authors/show_atom_feed.atom.builder +4 -2
  230. data/app/views/authors/show_rss_feed.rss.builder +10 -8
  231. data/app/views/comments/_comment.html.erb +3 -3
  232. data/app/views/devise/mailer/reset_password_instructions.html.erb +7 -9
  233. data/app/views/devise/passwords/edit.html.erb +4 -4
  234. data/app/views/devise/passwords/new.html.erb +1 -1
  235. data/app/views/devise/registrations/new.html.erb +5 -5
  236. data/app/views/devise/sessions/new.html.erb +3 -3
  237. data/app/views/errors/404.html.erb +2 -2
  238. data/app/views/feedback/index.atom.builder +3 -1
  239. data/app/views/feedback/index.rss.builder +9 -7
  240. data/app/views/layouts/accounts.html.erb +26 -26
  241. data/app/views/layouts/administration.html.erb +31 -31
  242. data/app/views/layouts/default.html.erb +3 -3
  243. data/app/views/layouts/editor.html.erb +5 -19
  244. data/app/views/meta_sidebar/_content.html.erb +2 -2
  245. data/app/views/notes/_note.html.erb +1 -1
  246. data/app/views/notes/index.html.erb +1 -1
  247. data/app/views/notes/show_in_reply.html.erb +1 -1
  248. data/app/views/notification_mailer/_mail_footer.html.erb +3 -3
  249. data/app/views/notification_mailer/article.html.erb +2 -2
  250. data/app/views/notification_mailer/comment.html.erb +5 -5
  251. data/app/views/notification_mailer/notif_user.html.erb +1 -1
  252. data/app/views/page_sidebar/_content.html.erb +1 -1
  253. data/app/views/search_sidebar/_content.html.erb +2 -2
  254. data/app/views/settings/install.html.erb +2 -2
  255. data/app/views/setup/index.html.erb +7 -7
  256. data/app/views/shared/_atom_header.atom.builder +4 -2
  257. data/app/views/shared/_atom_item_article.atom.builder +11 -6
  258. data/app/views/shared/_atom_item_comment.atom.builder +4 -2
  259. data/app/views/shared/_atom_item_trackback.atom.builder +4 -2
  260. data/app/views/shared/_page_header.html.erb +9 -12
  261. data/app/views/shared/_rss_item_article.rss.builder +6 -3
  262. data/app/views/shared/_rss_item_comment.rss.builder +3 -1
  263. data/app/views/shared/_rss_item_trackback.rss.builder +3 -1
  264. data/app/views/sidebar/display_plugins.html.erb +1 -1
  265. data/app/views/tag_sidebar/_content.html.erb +1 -1
  266. data/app/views/tags/index.html.erb +1 -1
  267. data/app/views/xml/_googlesitemap_item_article.googlesitemap.builder +2 -0
  268. data/app/views/xml/_googlesitemap_item_category.googlesitemap.builder +2 -0
  269. data/app/views/xml/_googlesitemap_item_page.googlesitemap.builder +2 -0
  270. data/app/views/xml/_googlesitemap_item_tag.googlesitemap.builder +2 -0
  271. data/app/views/xml/sitemap.googlesitemap.builder +4 -2
  272. data/config/i18n-tasks.yml +0 -5
  273. data/config/initializers/devise.rb +10 -4
  274. data/config/initializers/mime_types.rb +3 -1
  275. data/config/locales/da.yml +134 -71
  276. data/config/locales/de.yml +142 -75
  277. data/config/locales/en.yml +128 -66
  278. data/config/locales/es-MX.yml +135 -69
  279. data/config/locales/fr.yml +167 -86
  280. data/config/locales/he.yml +128 -70
  281. data/config/locales/it.yml +136 -72
  282. data/config/locales/ja.yml +110 -64
  283. data/config/locales/lt.yml +153 -74
  284. data/config/locales/nb-NO.yml +123 -65
  285. data/config/locales/nl.yml +140 -75
  286. data/config/locales/pl.yml +160 -69
  287. data/config/locales/pt-BR.yml +137 -70
  288. data/config/locales/ro.yml +148 -70
  289. data/config/locales/ru.yml +161 -69
  290. data/config/locales/zh-CN.yml +106 -59
  291. data/config/locales/zh-TW.yml +109 -61
  292. data/config/routes.rb +68 -63
  293. data/db/migrate/113_initial_schema.rb +192 -190
  294. data/db/migrate/114_fixes_buggy_articles_and_notes.rb +9 -6
  295. data/db/migrate/115_drops_categories_for_tags.rb +3 -1
  296. data/db/migrate/20150207131657_add_missing_indexes.rb +2 -0
  297. data/db/migrate/20150807134129_simplify_redirect_relations.rb +8 -1
  298. data/db/migrate/20150808052637_add_blog_ids.rb +4 -2
  299. data/db/migrate/20150808191127_add_blog_id_to_redirects.rb +2 -0
  300. data/db/migrate/20150810094754_add_blog_id_to_tags.rb +2 -0
  301. data/db/migrate/20160108111120_add_devise_to_users.rb +4 -2
  302. data/db/migrate/20160108184201_move_last_connection_to_last_sign_in_at.rb +2 -0
  303. data/db/migrate/20160110094906_remove_profiles_rights.rb +2 -0
  304. data/db/migrate/20160605103918_replace_profile_id_with_string.rb +2 -0
  305. data/db/migrate/20160605154632_remove_profiles.rb +10 -5
  306. data/db/migrate/20160701061851_demand_blog_id_on_contents.rb +2 -0
  307. data/db/migrate/20160701062604_add_blog_id_to_resources.rb +2 -0
  308. data/db/migrate/20170528093024_move_resources_to_content.rb +2 -0
  309. data/db/migrate/20170528094923_move_tags_to_content.rb +2 -0
  310. data/db/migrate/20170528201606_remove_separate_published_flag.rb +2 -0
  311. data/db/migrate/20170605071626_remove_extra_state_columns_from_feedback.rb +2 -0
  312. data/db/migrate/20170702105201_remove_published_at_from_feedback.rb +2 -0
  313. data/db/migrate/20190208151235_add_text_filter_name_fields.rb +9 -0
  314. data/db/migrate/20190208152646_move_text_filter_to_name.rb +97 -0
  315. data/db/migrate/20190209155717_remove_text_filter_ids.rb +19 -0
  316. data/db/migrate/20190209160610_remove_text_filters.rb +17 -0
  317. data/db/migrate/20200413140440_add_unique_indexes.rb +10 -0
  318. data/db/seeds.rb +9 -19
  319. data/lib/email_notify.rb +3 -1
  320. data/lib/format.rb +4 -2
  321. data/lib/publify_core.rb +36 -35
  322. data/lib/publify_core/engine.rb +8 -6
  323. data/lib/publify_core/lang.rb +5 -1
  324. data/lib/publify_core/testing_support/dns_mock.rb +15 -0
  325. data/lib/publify_core/testing_support/factories.rb +240 -0
  326. data/lib/publify_core/testing_support/feed_assertions.rb +48 -0
  327. data/lib/publify_core/testing_support/fixtures/exploit.svg +4 -0
  328. data/lib/publify_core/testing_support/fixtures/fakepng.png +1 -0
  329. data/lib/publify_core/testing_support/fixtures/otherfile.txt +1 -0
  330. data/lib/publify_core/testing_support/fixtures/testfile.png +0 -0
  331. data/lib/publify_core/testing_support/fixtures/testfile.txt +1 -0
  332. data/lib/publify_core/testing_support/upload_fixtures.rb +15 -0
  333. data/lib/publify_core/version.rb +3 -1
  334. data/lib/publify_guid.rb +3 -1
  335. data/lib/publify_plugins.rb +10 -5
  336. data/lib/publify_textfilter_markdown.rb +38 -25
  337. data/lib/publify_textfilter_none.rb +5 -3
  338. data/lib/publify_textfilter_smartypants.rb +5 -3
  339. data/lib/publify_textfilter_textile.rb +7 -4
  340. data/lib/publify_textfilter_twitterfilter.rb +13 -7
  341. data/lib/publify_time.rb +4 -0
  342. data/lib/sidebar_field.rb +15 -13
  343. data/lib/sidebar_registry.rb +5 -3
  344. data/lib/spam_protection.rb +16 -13
  345. data/lib/tasks/i18n.rake +9 -0
  346. data/lib/tasks/manifest.rake +30 -0
  347. data/lib/tasks/publify_core_tasks.rake +2 -0
  348. data/lib/text_filter_plugin.rb +27 -25
  349. data/lib/theme.rb +5 -3
  350. data/lib/transforms.rb +22 -19
  351. metadata +217 -87
  352. data/app/assets/javascripts/widearea.js +0 -486
  353. data/app/assets/stylesheets/widearea.css +0 -133
  354. data/app/controllers/admin/textfilters_controller.rb +0 -6
  355. data/app/views/admin/dashboard/_inbound.html.erb +0 -31
  356. data/app/views/admin/notes/_header.html.erb +0 -6
  357. data/app/views/articles/_protected_article_content.html.erb +0 -6
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Admin::NotesController < Admin::BaseController
2
- layout 'administration'
4
+ layout "administration"
3
5
 
4
6
  before_action :load_existing_notes, only: [:index, :edit]
5
7
  before_action :find_note, only: [:edit, :update, :show, :destroy]
@@ -10,7 +12,7 @@ class Admin::NotesController < Admin::BaseController
10
12
 
11
13
  def show
12
14
  unless @note.access_by?(current_user)
13
- flash[:error] = I18n.t('admin.base.not_allowed')
15
+ flash[:error] = I18n.t("admin.base.not_allowed")
14
16
  redirect_to admin_notes_url
15
17
  end
16
18
  end
@@ -20,18 +22,18 @@ class Admin::NotesController < Admin::BaseController
20
22
  def create
21
23
  note = new_note
22
24
 
23
- note.state = 'published'
25
+ note.state = "published"
24
26
  note.attributes = params[:note].permit!
25
- note.text_filter ||= current_user.default_text_filter
27
+ note.text_filter ||= default_text_filter
26
28
  note.published_at ||= Time.zone.now
27
29
  if note.save
28
30
  if params[:push_to_twitter] && note.twitter_id.blank?
29
31
  unless note.send_to_twitter
30
- flash[:error] = I18n.t('errors.problem_sending_to_twitter')
31
- flash[:error] += " : #{note.errors.full_messages.join(' ')}"
32
+ flash[:error] = I18n.t("errors.problem_sending_to_twitter")
33
+ flash[:error] += " : #{note.errors.full_messages.join(" ")}"
32
34
  end
33
35
  end
34
- flash[:notice] = I18n.t('notice.note_successfully_created')
36
+ flash[:notice] = I18n.t("notice.note_successfully_created")
35
37
  else
36
38
  flash[:error] = note.errors.full_messages
37
39
  end
@@ -46,7 +48,7 @@ class Admin::NotesController < Admin::BaseController
46
48
 
47
49
  def destroy
48
50
  @note.destroy
49
- flash[:notice] = I18n.t('admin.base.successfully_deleted', name: 'note')
51
+ flash[:notice] = I18n.t("admin.base.successfully_deleted", name: "note")
50
52
  redirect_to admin_notes_url
51
53
  end
52
54
 
@@ -62,6 +64,10 @@ class Admin::NotesController < Admin::BaseController
62
64
 
63
65
  def new_note
64
66
  this_blog.notes.build(author: current_user,
65
- text_filter: current_user.text_filter)
67
+ text_filter_name: default_text_filter)
68
+ end
69
+
70
+ def default_text_filter
71
+ current_user.text_filter_name || this_blog.text_filter
66
72
  end
67
73
  end
@@ -1,25 +1,28 @@
1
- require 'base64'
1
+ # frozen_string_literal: true
2
+
3
+ require "base64"
2
4
 
3
5
  class Admin::PagesController < Admin::BaseController
4
6
  before_action :set_macro, only: [:new, :edit]
5
7
  before_action :set_page, only: [:edit, :update, :destroy]
6
8
 
7
9
  def index
8
- @search = params[:search] ? params[:search] : {}
9
- @pages = Page.search_with(@search).page(params[:page]).per(this_blog.admin_display_elements)
10
+ @search = params[:search] || {}
11
+ @pages = Page.search_with(@search).page(params[:page]).
12
+ per(this_blog.admin_display_elements)
10
13
  end
11
14
 
12
15
  def new
13
16
  @page = Page.new
14
- @page.text_filter ||= default_textfilter
17
+ @page.text_filter_name ||= default_text_filter
15
18
  @page.user_id = current_user.id
16
- @page.state = 'published'
17
- render layout: 'editor'
19
+ @page.state = "published"
20
+ render layout: "editor"
18
21
  end
19
22
 
20
23
  def edit
21
- @page.text_filter ||= default_textfilter
22
- render layout: 'editor'
24
+ @page.text_filter_name ||= default_text_filter
25
+ render layout: "editor"
23
26
  end
24
27
 
25
28
  def create
@@ -29,16 +32,16 @@ class Admin::PagesController < Admin::BaseController
29
32
  @page.user_id = current_user.id
30
33
 
31
34
  if @page.save
32
- redirect_to admin_pages_url, notice: I18n.t('admin.pages.new.success')
35
+ redirect_to admin_pages_url, notice: I18n.t("admin.pages.new.success")
33
36
  else
34
- render :new, layout: 'editor'
37
+ render :new, layout: "editor"
35
38
  end
36
39
  end
37
40
 
38
41
  def update
39
- @page.text_filter ||= default_textfilter
42
+ @page.text_filter_name ||= default_text_filter
40
43
  if @page.update(page_params)
41
- redirect_to admin_pages_url, notice: I18n.t('admin.pages.edit.success')
44
+ redirect_to admin_pages_url, notice: I18n.t("admin.pages.edit.success")
42
45
  else
43
46
  render :edit
44
47
  end
@@ -50,8 +53,8 @@ class Admin::PagesController < Admin::BaseController
50
53
 
51
54
  private
52
55
 
53
- def default_textfilter
54
- current_user.text_filter || blog.text_filter
56
+ def default_text_filter
57
+ current_user.text_filter_name || this_blog.text_filter
55
58
  end
56
59
 
57
60
  def set_macro
@@ -65,6 +68,6 @@ class Admin::PagesController < Admin::BaseController
65
68
 
66
69
  # Never trust parameters from the scary internet, only allow the white list through.
67
70
  def page_params
68
- params.require(:page).permit(:title, :body, :name, :state, :text_filter_id)
71
+ params.require(:page).permit(:title, :body, :name, :state, :text_filter_name)
69
72
  end
70
73
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Admin::PostTypesController < Admin::BaseController
2
4
  before_action :set_post_type, only: [:edit, :update, :destroy]
3
5
 
@@ -14,7 +16,7 @@ class Admin::PostTypesController < Admin::BaseController
14
16
  @post_type = PostType.new(post_type_params)
15
17
 
16
18
  if @post_type.save
17
- redirect_to admin_post_types_url, notice: 'Post type was successfully created.'
19
+ redirect_to admin_post_types_url, notice: "Post type was successfully created."
18
20
  else
19
21
  render :index
20
22
  end
@@ -22,7 +24,7 @@ class Admin::PostTypesController < Admin::BaseController
22
24
 
23
25
  def update
24
26
  if @post_type.update(post_type_params)
25
- redirect_to admin_post_types_url, notice: 'Post type was successfully updated.'
27
+ redirect_to admin_post_types_url, notice: "Post type was successfully updated."
26
28
  else
27
29
  render :edit
28
30
  end
@@ -32,13 +34,13 @@ class Admin::PostTypesController < Admin::BaseController
32
34
  # Reset all Articles from the PostType we're destroying to the default PostType
33
35
  # Wrap it in a transaction for safety
34
36
  @post_type.transaction do
35
- Article.where('post_type = ?', @post_type.permalink).each do |article|
36
- article.post_type = 'read'
37
+ Article.where("post_type = ?", @post_type.permalink).each do |article|
38
+ article.post_type = "read"
37
39
  article.save
38
40
  end
39
41
  @post_type.destroy
40
42
  end
41
- redirect_to admin_post_types_url, notice: 'Post was successfully destroyed.'
43
+ redirect_to admin_post_types_url, notice: "Post was successfully destroyed."
42
44
  end
43
45
 
44
46
  private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This controller handles updating your own user data.
2
4
  class Admin::ProfilesController < Admin::BaseController
3
5
  before_action :set_user, only: [:index, :update]
@@ -8,7 +10,7 @@ class Admin::ProfilesController < Admin::BaseController
8
10
  @user.resource = upload_avatar if params[:user][:filename]
9
11
 
10
12
  if @user.update(update_params)
11
- redirect_to admin_profiles_url, notice: I18n.t('admin.profiles.index.success')
13
+ redirect_to admin_profiles_url, notice: I18n.t("admin.profiles.index.success")
12
14
  else
13
15
  render :index
14
16
  end
@@ -22,7 +24,7 @@ class Admin::ProfilesController < Admin::BaseController
22
24
  mime = if file.content_type
23
25
  file.content_type.chomp
24
26
  else
25
- 'text/plain'
27
+ "text/plain"
26
28
  end
27
29
 
28
30
  Resource.create(upload: file, mime: mime, created_at: Time.zone.now)
@@ -1,20 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Admin::RedirectsController < Admin::BaseController
2
4
  before_action :set_redirect, only: [:edit, :update, :destroy]
3
5
 
4
6
  def index
5
- @redirects = Redirect.where(content_id: nil).order('id desc').page(params[:page]).per(this_blog.admin_display_elements)
7
+ @redirects = Redirect.where(content_id: nil).order("id desc").page(params[:page]).
8
+ per(this_blog.admin_display_elements)
6
9
  @redirect = Redirect.new
7
10
  end
8
11
 
9
12
  def edit
10
- @redirects = Redirect.where(content_id: nil).order('id desc').page(params[:page]).per(this_blog.admin_display_elements)
13
+ @redirects = Redirect.where(content_id: nil).order("id desc").page(params[:page]).
14
+ per(this_blog.admin_display_elements)
11
15
  end
12
16
 
13
17
  def create
14
18
  @redirect = this_blog.redirects.build(redirect_params)
15
19
 
16
20
  if @redirect.save
17
- redirect_to admin_redirects_url, notice: 'Redirect was successfully created.'
21
+ redirect_to admin_redirects_url, notice: "Redirect was successfully created."
18
22
  else
19
23
  render :index
20
24
  end
@@ -22,7 +26,7 @@ class Admin::RedirectsController < Admin::BaseController
22
26
 
23
27
  def update
24
28
  if @redirect.update(redirect_params)
25
- redirect_to admin_redirects_url, notice: 'Redirect was successfully updated.'
29
+ redirect_to admin_redirects_url, notice: "Redirect was successfully updated."
26
30
  else
27
31
  render :edit
28
32
  end
@@ -30,7 +34,7 @@ class Admin::RedirectsController < Admin::BaseController
30
34
 
31
35
  def destroy
32
36
  @redirect.destroy
33
- redirect_to admin_redirects_url, notice: I18n.t('admin.redirects.destroy.success')
37
+ redirect_to admin_redirects_url, notice: I18n.t("admin.redirects.destroy.success")
34
38
  end
35
39
 
36
40
  private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Admin::ResourcesController < Admin::BaseController
2
4
  def upload
3
5
  file = params[:upload]
@@ -6,9 +8,9 @@ class Admin::ResourcesController < Admin::BaseController
6
8
  @up.mime = @up.upload.content_type
7
9
 
8
10
  if @up.save
9
- flash[:success] = I18n.t('admin.resources.upload.success')
11
+ flash[:success] = I18n.t("admin.resources.upload.success")
10
12
  else
11
- flash[:warning] = I18n.t('admin.resources.upload.warning')
13
+ flash[:warning] = I18n.t("admin.resources.upload.warning")
12
14
  end
13
15
 
14
16
  redirect_to admin_resources_url
@@ -16,13 +18,14 @@ class Admin::ResourcesController < Admin::BaseController
16
18
 
17
19
  def index
18
20
  @r = Resource.new
19
- @resources = Resource.order('created_at DESC').page(params[:page]).per(this_blog.admin_display_elements)
21
+ @resources = Resource.order("created_at DESC").page(params[:page]).
22
+ per(this_blog.admin_display_elements)
20
23
  end
21
24
 
22
25
  def destroy
23
26
  @record = Resource.find(params[:id])
24
27
  @record.destroy
25
- flash[:notice] = I18n.t('admin.resources.destroy.notice')
28
+ flash[:notice] = I18n.t("admin.resources.destroy.notice")
26
29
  redirect_to admin_resources_url
27
30
  end
28
31
  end
@@ -1,24 +1,28 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Admin::SeoController < Admin::BaseController
2
4
  before_action :set_setting
3
5
  before_action :set_section
4
6
 
5
7
  def show
6
- if @setting.permalink_format != '/%year%/%month%/%day%/%title%' &&
7
- @setting.permalink_format != '/%year%/%month%/%title%' &&
8
- @setting.permalink_format != '/%title%'
8
+ if @setting.permalink_format != "/%year%/%month%/%day%/%title%" &&
9
+ @setting.permalink_format != "/%year%/%month%/%title%" &&
10
+ @setting.permalink_format != "/%title%"
9
11
  @setting.custom_permalink = @setting.permalink_format
10
- @setting.permalink_format = 'custom'
12
+ @setting.permalink_format = "custom"
11
13
  end
12
14
  end
13
15
 
14
16
  def update
15
- settings_params[:permalink_format] = settings_params[:custom_permalink] if settings_params[:permalink_format] == 'custom'
16
- if @setting.update_attributes(settings_params)
17
- flash[:success] = I18n.t('admin.settings.update.success')
17
+ if settings_params[:permalink_format] == "custom"
18
+ settings_params[:permalink_format] = settings_params[:custom_permalink]
19
+ end
20
+ if @setting.update(settings_params)
21
+ flash[:success] = I18n.t("admin.settings.update.success")
18
22
  redirect_to admin_seo_path(section: @section)
19
23
  else
20
- flash[:error] = I18n.t('admin.settings.update.error',
21
- messages: this_blog.errors.full_messages.join(', '))
24
+ flash[:error] = I18n.t("admin.settings.update.error",
25
+ messages: this_blog.errors.full_messages.join(", "))
22
26
  render :show
23
27
  end
24
28
  end
@@ -33,7 +37,7 @@ class Admin::SeoController < Admin::BaseController
33
37
 
34
38
  def set_section
35
39
  section = params[:section]
36
- @section = VALID_SECTIONS.include?(section) ? section : 'general'
40
+ @section = VALID_SECTIONS.include?(section) ? section : "general"
37
41
  end
38
42
 
39
43
  def set_setting
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Admin::SettingsController < Admin::BaseController
2
4
  def index
3
5
  this_blog.base_url = blog_base_url if this_blog.base_url.blank?
@@ -18,13 +20,13 @@ class Admin::SettingsController < Admin::BaseController
18
20
 
19
21
  def update
20
22
  load_settings
21
- if @setting.update_attributes(settings_params)
23
+ if @setting.update(settings_params)
22
24
  load_lang
23
- flash[:success] = I18n.t('admin.settings.update.success')
25
+ flash[:success] = I18n.t("admin.settings.update.success")
24
26
  redirect_to action: action_param
25
27
  else
26
- flash[:error] = I18n.t('admin.settings.update.error',
27
- messages: this_blog.errors.full_messages.join(', '))
28
+ flash[:error] = I18n.t("admin.settings.update.error",
29
+ messages: this_blog.errors.full_messages.join(", "))
28
30
  render action_param
29
31
  end
30
32
  end
@@ -41,7 +43,7 @@ class Admin::SettingsController < Admin::BaseController
41
43
  @action_param ||=
42
44
  begin
43
45
  value = params[:from]
44
- VALID_ACTIONS.include?(value) ? value : 'index'
46
+ VALID_ACTIONS.include?(value) ? value : "index"
45
47
  end
46
48
  end
47
49
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Admin::SidebarController < Admin::BaseController
2
4
  def index
3
5
  @available = SidebarRegistry.available_sidebars
@@ -8,7 +10,7 @@ class Admin::SidebarController < Admin::BaseController
8
10
  def update
9
11
  @sidebar = Sidebar.where(id: params[:id]).first
10
12
  @old_s_index = @sidebar.staged_position || @sidebar.active_position
11
- @sidebar.update_attributes params[:configure][@sidebar.id.to_s].permit!
13
+ @sidebar.update params[:configure][@sidebar.id.to_s].permit!
12
14
  respond_to do |format|
13
15
  format.js
14
16
  format.html do
@@ -19,7 +21,7 @@ class Admin::SidebarController < Admin::BaseController
19
21
 
20
22
  def destroy
21
23
  @sidebar = Sidebar.where(id: params[:id]).first
22
- @sidebar && @sidebar.destroy
24
+ @sidebar&.destroy
23
25
  respond_to do |format|
24
26
  format.html { return redirect_to(admin_sidebar_index_path) }
25
27
  format.js
@@ -43,11 +45,12 @@ class Admin::SidebarController < Admin::BaseController
43
45
  # IT'S OVER NINE THOUSAND! considering we'll never reach 9K Sidebar
44
46
  # instances or Sidebar specializations
45
47
  sidebar = if sidebar_id >= 9000
46
- SidebarRegistry.available_sidebars[sidebar_id - 9000].new(blog: this_blog)
48
+ SidebarRegistry.available_sidebars[sidebar_id - 9000].
49
+ new(blog: this_blog)
47
50
  else
48
51
  Sidebar.valid.find(sidebar_id)
49
52
  end
50
- sidebar.update_attributes(staged_position: staged_index)
53
+ sidebar.update(staged_position: staged_index)
51
54
  end
52
55
  end
53
56
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Admin::TagsController < Admin::BaseController
2
4
  before_action :fetch_tags, only: [:index, :edit]
3
5
  before_action :set_tag, only: [:edit, :update, :destroy]
@@ -12,7 +14,7 @@ class Admin::TagsController < Admin::BaseController
12
14
  @tag = this_blog.tags.new(tag_params)
13
15
 
14
16
  if @tag.save
15
- redirect_to admin_tags_url, notice: 'Tag was successfully created.'
17
+ redirect_to admin_tags_url, notice: "Tag was successfully created."
16
18
  else
17
19
  fetch_tags
18
20
  render :index
@@ -24,7 +26,7 @@ class Admin::TagsController < Admin::BaseController
24
26
  if @tag.update(tag_params)
25
27
  # TODO: Check whether these redirects are useful or ignored.
26
28
  Redirect.create(from_path: "/tag/#{old_name}", to_path: @tag.permalink_url(nil, true))
27
- redirect_to admin_tags_url, notice: I18n.t('admin.tags.edit.success')
29
+ redirect_to admin_tags_url, notice: I18n.t("admin.tags.edit.success")
28
30
  else
29
31
  render :edit
30
32
  end
@@ -47,6 +49,7 @@ class Admin::TagsController < Admin::BaseController
47
49
  end
48
50
 
49
51
  def fetch_tags
50
- @tags = Tag.order('display_name').page(params[:page]).per(this_blog.admin_display_elements)
52
+ @tags = Tag.order("display_name").page(params[:page]).
53
+ per(this_blog.admin_display_elements)
51
54
  end
52
55
  end
@@ -1,28 +1,31 @@
1
- require 'open-uri'
2
- require 'time'
3
- require 'rexml/document'
1
+ # frozen_string_literal: true
2
+
3
+ require "open-uri"
4
+ require "time"
5
+ require "rexml/document"
4
6
 
5
7
  class Admin::ThemesController < Admin::BaseController
6
8
  def index
7
9
  @themes = Theme.find_all
8
10
  @themes.each do |theme|
9
11
  # TODO: Move to Theme
10
- theme.description_html = TextFilter.filter_text(theme.description, [:markdown, :smartypants])
12
+ theme.description_html = TextFilter.filter_text(theme.description,
13
+ [:markdown, :smartypants])
11
14
  end
12
15
  @active = this_blog.current_theme
13
16
  end
14
17
 
15
18
  def preview
16
19
  theme = Theme.find(params[:theme])
17
- send_file File.join(theme.path, 'preview.png'),
18
- type: 'image/png', disposition: 'inline', stream: false
20
+ send_file File.join(theme.path, "preview.png"),
21
+ type: "image/png", disposition: "inline", stream: false
19
22
  end
20
23
 
21
24
  def switchto
22
25
  this_blog.theme = params[:theme]
23
26
  this_blog.save
24
27
  this_blog.current_theme(:reload)
25
- flash[:success] = I18n.t('admin.themes.switchto.success')
28
+ flash[:success] = I18n.t("admin.themes.switchto.success")
26
29
  redirect_to admin_themes_url
27
30
  end
28
31
  end