publify_core 9.0.0 → 9.2.2

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 (360) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +92 -37
  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 -16
  76. data/app/controllers/admin/content_controller.rb +38 -36
  77. data/app/controllers/admin/dashboard_controller.rb +16 -65
  78. data/app/controllers/admin/feedback_controller.rb +45 -37
  79. data/app/controllers/admin/notes_controller.rb +16 -10
  80. data/app/controllers/admin/pages_controller.rb +19 -29
  81. data/app/controllers/admin/post_types_controller.rb +7 -5
  82. data/app/controllers/admin/profiles_controller.rb +15 -5
  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 +12 -10
  86. data/app/controllers/admin/settings_controller.rb +7 -5
  87. data/app/controllers/admin/sidebar_controller.rb +6 -5
  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 +10 -7
  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 -11
  94. data/app/controllers/comments_controller.rb +13 -13
  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 +15 -12
  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 +18 -13
  103. data/app/controllers/xml_controller.rb +2 -0
  104. data/app/helpers/admin/base_helper.rb +28 -29
  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 +7 -16
  108. data/app/helpers/base_helper.rb +56 -52
  109. data/app/helpers/blog_helper.rb +4 -2
  110. data/app/helpers/xml_helper.rb +3 -1
  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 +42 -42
  116. data/app/models/article/factory.rb +14 -6
  117. data/app/models/blog.rb +86 -75
  118. data/app/models/comment.rb +10 -11
  119. data/app/models/config_manager.rb +4 -2
  120. data/app/models/content.rb +37 -50
  121. data/app/models/content_base.rb +10 -4
  122. data/app/models/feedback.rb +21 -17
  123. data/app/models/meta_sidebar.rb +4 -3
  124. data/app/models/note.rb +26 -25
  125. data/app/models/page.rb +9 -8
  126. data/app/models/page_sidebar.rb +4 -2
  127. data/app/models/ping.rb +3 -1
  128. data/app/models/post_type.rb +3 -3
  129. data/app/models/redirect.rb +13 -7
  130. data/app/models/redirection.rb +3 -1
  131. data/app/models/resource.rb +5 -3
  132. data/app/models/search_sidebar.rb +4 -2
  133. data/app/models/sidebar.rb +11 -6
  134. data/app/models/static_sidebar.rb +14 -13
  135. data/app/models/tag.rb +15 -11
  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 +7 -4
  140. data/app/models/user.rb +44 -43
  141. data/app/services/title_builder.rb +52 -45
  142. data/app/uploaders/resource_uploader.rb +5 -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/autosave.js.erb +2 -2
  147. data/app/views/admin/content/edit.html.erb +1 -1
  148. data/app/views/admin/content/index.html.erb +25 -15
  149. data/app/views/admin/content/new.html.erb +2 -2
  150. data/app/views/admin/dashboard/_comment.html.erb +5 -5
  151. data/app/views/admin/dashboard/_comments.html.erb +2 -2
  152. data/app/views/admin/dashboard/_drafts.html.erb +5 -5
  153. data/app/views/admin/dashboard/_overview.html.erb +7 -9
  154. data/app/views/admin/dashboard/_welcome.html.erb +11 -11
  155. data/app/views/admin/dashboard/index.html.erb +12 -7
  156. data/app/views/admin/feedback/_button.html.erb +6 -6
  157. data/app/views/admin/feedback/_feedback.html.erb +3 -3
  158. data/app/views/admin/feedback/_ham.html.erb +27 -9
  159. data/app/views/admin/feedback/_spam.html.erb +26 -16
  160. data/app/views/admin/feedback/article.html.erb +20 -21
  161. data/app/views/admin/feedback/edit.html.erb +14 -15
  162. data/app/views/admin/feedback/{ham.js → ham.js.erb} +0 -0
  163. data/app/views/admin/feedback/index.html.erb +25 -23
  164. data/app/views/admin/feedback/{spam.js → spam.js.erb} +0 -0
  165. data/app/views/admin/migrations/show.html.erb +10 -11
  166. data/app/views/admin/notes/_form.html.erb +13 -13
  167. data/app/views/admin/notes/_list.html.erb +19 -8
  168. data/app/views/admin/notes/_note.html.erb +12 -7
  169. data/app/views/admin/notes/edit.html.erb +6 -1
  170. data/app/views/admin/notes/index.html.erb +5 -1
  171. data/app/views/admin/notes/show.html.erb +2 -2
  172. data/app/views/admin/pages/_form.html.erb +86 -77
  173. data/app/views/admin/pages/_pages.html.erb +11 -4
  174. data/app/views/admin/pages/edit.html.erb +3 -1
  175. data/app/views/admin/pages/index.html.erb +10 -6
  176. data/app/views/admin/pages/new.html.erb +3 -1
  177. data/app/views/admin/post_types/_index_and_form.html.erb +15 -16
  178. data/app/views/admin/post_types/edit.html.erb +1 -1
  179. data/app/views/admin/post_types/index.html.erb +1 -1
  180. data/app/views/admin/profiles/index.html.erb +2 -3
  181. data/app/views/admin/redirects/_index_and_form.html.erb +10 -11
  182. data/app/views/admin/redirects/edit.html.erb +1 -1
  183. data/app/views/admin/redirects/index.html.erb +1 -1
  184. data/app/views/admin/resources/index.html.erb +19 -16
  185. data/app/views/admin/seo/_general.html.erb +23 -47
  186. data/app/views/admin/seo/_permalinks.html.erb +16 -16
  187. data/app/views/admin/seo/_titles.html.erb +63 -64
  188. data/app/views/admin/seo/show.html.erb +14 -19
  189. data/app/views/admin/settings/display.html.erb +22 -25
  190. data/app/views/admin/settings/feedback.html.erb +31 -32
  191. data/app/views/admin/settings/index.html.erb +23 -24
  192. data/app/views/admin/settings/write.html.erb +21 -22
  193. data/app/views/admin/shared/_edit.html.erb +3 -3
  194. data/app/views/admin/shared/_menu.html.erb +26 -26
  195. data/app/views/admin/shared/_twitter_alert.html.erb +1 -1
  196. data/app/views/admin/sidebar/_config.html.erb +5 -5
  197. data/app/views/admin/sidebar/_target_sidebar.html.erb +4 -4
  198. data/app/views/admin/sidebar/index.html.erb +7 -7
  199. data/app/views/admin/tags/_index_and_form.html.erb +11 -12
  200. data/app/views/admin/tags/edit.html.erb +1 -1
  201. data/app/views/admin/tags/index.html.erb +1 -1
  202. data/app/views/admin/themes/index.html.erb +5 -6
  203. data/app/views/admin/users/_form.html.erb +34 -34
  204. data/app/views/admin/users/edit.html.erb +2 -2
  205. data/app/views/admin/users/index.html.erb +10 -12
  206. data/app/views/admin/users/new.html.erb +2 -2
  207. data/app/views/archives_sidebar/_content.html.erb +2 -2
  208. data/app/views/articles/_archives_article.html.erb +3 -3
  209. data/app/views/articles/_article.html.erb +7 -9
  210. data/app/views/articles/_article_author.html.erb +4 -0
  211. data/app/views/articles/_article_content.html.erb +2 -2
  212. data/app/views/articles/_article_excerpt.html.erb +2 -2
  213. data/app/views/articles/_article_links.html.erb +1 -1
  214. data/app/views/articles/_comment_errors.html.erb +1 -1
  215. data/app/views/articles/_comment_form.html.erb +12 -12
  216. data/app/views/articles/_comment_preview.html.erb +3 -3
  217. data/app/views/articles/_password_form.html.erb +4 -4
  218. data/app/views/articles/_trackback.html.erb +2 -2
  219. data/app/views/articles/archives.html.erb +1 -1
  220. data/app/views/articles/feedback_atom_feed.atom.builder +3 -1
  221. data/app/views/articles/feedback_rss_feed.rss.builder +9 -8
  222. data/app/views/articles/index_atom_feed.atom.builder +5 -3
  223. data/app/views/articles/index_rss_feed.rss.builder +10 -9
  224. data/app/views/articles/live_search.html.erb +3 -3
  225. data/app/views/articles/read.html.erb +16 -8
  226. data/app/views/articles/search.html.erb +2 -2
  227. data/app/views/articles/trackback.xml.builder +3 -1
  228. data/app/views/articles/view_page.html.erb +2 -2
  229. data/app/views/authors/show.html.erb +9 -9
  230. data/app/views/authors/show_atom_feed.atom.builder +4 -2
  231. data/app/views/authors/show_rss_feed.rss.builder +10 -9
  232. data/app/views/comments/_comment.html.erb +3 -3
  233. data/app/views/devise/mailer/reset_password_instructions.html.erb +7 -9
  234. data/app/views/devise/passwords/edit.html.erb +4 -4
  235. data/app/views/devise/passwords/new.html.erb +1 -1
  236. data/app/views/devise/registrations/new.html.erb +5 -5
  237. data/app/views/devise/sessions/new.html.erb +3 -3
  238. data/app/views/errors/404.html.erb +2 -2
  239. data/app/views/feedback/index.atom.builder +3 -1
  240. data/app/views/feedback/index.rss.builder +9 -8
  241. data/app/views/layouts/accounts.html.erb +26 -26
  242. data/app/views/layouts/administration.html.erb +31 -31
  243. data/app/views/layouts/default.html.erb +4 -3
  244. data/app/views/layouts/editor.html.erb +5 -19
  245. data/app/views/meta_sidebar/_content.html.erb +2 -2
  246. data/app/views/notes/_note.html.erb +1 -1
  247. data/app/views/notes/index.html.erb +1 -1
  248. data/app/views/notes/show_in_reply.html.erb +1 -1
  249. data/app/views/notification_mailer/_mail_footer.html.erb +3 -3
  250. data/app/views/notification_mailer/article.html.erb +2 -2
  251. data/app/views/notification_mailer/comment.html.erb +5 -5
  252. data/app/views/notification_mailer/notif_user.html.erb +1 -1
  253. data/app/views/page_sidebar/_content.html.erb +1 -1
  254. data/app/views/search_sidebar/_content.html.erb +2 -2
  255. data/app/views/settings/install.html.erb +2 -2
  256. data/app/views/setup/index.html.erb +7 -7
  257. data/app/views/shared/_atom_header.atom.builder +4 -4
  258. data/app/views/shared/_atom_item_article.atom.builder +19 -29
  259. data/app/views/shared/_atom_item_comment.atom.builder +4 -2
  260. data/app/views/shared/_atom_item_trackback.atom.builder +4 -2
  261. data/app/views/shared/_google_analytics.html.erb +8 -0
  262. data/app/views/shared/_page_header.html.erb +9 -12
  263. data/app/views/shared/_rss_item_article.rss.builder +9 -7
  264. data/app/views/shared/_rss_item_comment.rss.builder +3 -1
  265. data/app/views/shared/_rss_item_trackback.rss.builder +3 -1
  266. data/app/views/sidebar/display_plugins.html.erb +1 -1
  267. data/app/views/tag_sidebar/_content.html.erb +1 -1
  268. data/app/views/tags/index.html.erb +1 -1
  269. data/app/views/xml/_googlesitemap_item_article.googlesitemap.builder +2 -0
  270. data/app/views/xml/_googlesitemap_item_category.googlesitemap.builder +2 -0
  271. data/app/views/xml/_googlesitemap_item_page.googlesitemap.builder +2 -0
  272. data/app/views/xml/_googlesitemap_item_tag.googlesitemap.builder +2 -0
  273. data/app/views/xml/sitemap.googlesitemap.builder +4 -2
  274. data/config/i18n-tasks.yml +0 -5
  275. data/config/initializers/devise.rb +10 -4
  276. data/config/initializers/mime_types.rb +3 -1
  277. data/config/locales/da.yml +134 -73
  278. data/config/locales/de.yml +142 -77
  279. data/config/locales/en.yml +128 -68
  280. data/config/locales/es-MX.yml +135 -71
  281. data/config/locales/fr.yml +167 -88
  282. data/config/locales/he.yml +128 -72
  283. data/config/locales/it.yml +136 -74
  284. data/config/locales/ja.yml +110 -66
  285. data/config/locales/lt.yml +153 -76
  286. data/config/locales/nb-NO.yml +123 -67
  287. data/config/locales/nl.yml +140 -77
  288. data/config/locales/pl.yml +329 -240
  289. data/config/locales/pt-BR.yml +137 -72
  290. data/config/locales/ro.yml +148 -72
  291. data/config/locales/ru.yml +161 -71
  292. data/config/locales/zh-CN.yml +106 -61
  293. data/config/locales/zh-TW.yml +109 -63
  294. data/config/routes.rb +68 -63
  295. data/db/migrate/113_initial_schema.rb +191 -191
  296. data/db/migrate/114_fixes_buggy_articles_and_notes.rb +10 -7
  297. data/db/migrate/115_drops_categories_for_tags.rb +5 -4
  298. data/db/migrate/20150207131657_add_missing_indexes.rb +2 -0
  299. data/db/migrate/20150807134129_simplify_redirect_relations.rb +5 -0
  300. data/db/migrate/20150808052637_add_blog_ids.rb +9 -3
  301. data/db/migrate/20150808191127_add_blog_id_to_redirects.rb +2 -0
  302. data/db/migrate/20150810094754_add_blog_id_to_tags.rb +2 -0
  303. data/db/migrate/20160108111120_add_devise_to_users.rb +4 -2
  304. data/db/migrate/20160108184201_move_last_connection_to_last_sign_in_at.rb +2 -0
  305. data/db/migrate/20160110094906_remove_profiles_rights.rb +2 -0
  306. data/db/migrate/20160605103918_replace_profile_id_with_string.rb +2 -0
  307. data/db/migrate/20160605154632_remove_profiles.rb +10 -5
  308. data/db/migrate/20160701061851_demand_blog_id_on_contents.rb +2 -0
  309. data/db/migrate/20160701062604_add_blog_id_to_resources.rb +2 -0
  310. data/db/migrate/20170528093024_move_resources_to_content.rb +2 -0
  311. data/db/migrate/20170528094923_move_tags_to_content.rb +2 -0
  312. data/db/migrate/20170528201606_remove_separate_published_flag.rb +2 -0
  313. data/db/migrate/20170605071626_remove_extra_state_columns_from_feedback.rb +2 -0
  314. data/db/migrate/20170702105201_remove_published_at_from_feedback.rb +2 -0
  315. data/db/migrate/20190208151235_add_text_filter_name_fields.rb +9 -0
  316. data/db/migrate/20190208152646_move_text_filter_to_name.rb +97 -0
  317. data/db/migrate/20190209155717_remove_text_filter_ids.rb +19 -0
  318. data/db/migrate/20190209160610_remove_text_filters.rb +17 -0
  319. data/db/migrate/20200413140440_add_unique_indexes.rb +10 -0
  320. data/db/seeds.rb +8 -20
  321. data/lib/email_notify.rb +3 -1
  322. data/lib/format.rb +4 -12
  323. data/lib/publify_core.rb +36 -35
  324. data/lib/publify_core/engine.rb +11 -4
  325. data/lib/publify_core/lang.rb +5 -1
  326. data/lib/publify_core/testing_support/dns_mock.rb +15 -0
  327. data/lib/publify_core/testing_support/factories.rb +240 -0
  328. data/lib/publify_core/testing_support/feed_assertions.rb +48 -0
  329. data/lib/publify_core/testing_support/fixtures/exploit.svg +4 -0
  330. data/lib/publify_core/testing_support/fixtures/fakepng.png +1 -0
  331. data/lib/publify_core/testing_support/fixtures/otherfile.txt +1 -0
  332. data/lib/publify_core/testing_support/fixtures/testfile.png +0 -0
  333. data/lib/publify_core/testing_support/fixtures/testfile.txt +1 -0
  334. data/lib/publify_core/testing_support/upload_fixtures.rb +15 -0
  335. data/lib/publify_core/version.rb +3 -1
  336. data/lib/publify_guid.rb +3 -1
  337. data/lib/publify_plugins.rb +10 -5
  338. data/lib/publify_textfilter_markdown.rb +38 -25
  339. data/lib/publify_textfilter_none.rb +5 -3
  340. data/lib/publify_textfilter_smartypants.rb +5 -3
  341. data/lib/publify_textfilter_textile.rb +7 -4
  342. data/lib/publify_textfilter_twitterfilter.rb +13 -7
  343. data/lib/publify_time.rb +4 -0
  344. data/lib/sidebar_field.rb +15 -13
  345. data/lib/sidebar_registry.rb +5 -3
  346. data/lib/spam_protection.rb +19 -17
  347. data/lib/tasks/i18n.rake +9 -0
  348. data/lib/tasks/manifest.rake +30 -0
  349. data/lib/tasks/publify_core_tasks.rake +2 -0
  350. data/lib/text_filter_plugin.rb +30 -29
  351. data/lib/theme.rb +5 -5
  352. data/lib/transforms.rb +21 -20
  353. data/themes/plain/javascripts/theme.js +0 -0
  354. metadata +247 -109
  355. data/app/assets/javascripts/widearea.js +0 -486
  356. data/app/assets/stylesheets/widearea.css +0 -133
  357. data/app/controllers/admin/textfilters_controller.rb +0 -6
  358. data/app/views/admin/dashboard/_inbound.html.erb +0 -31
  359. data/app/views/admin/notes/_header.html.erb +0 -6
  360. 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
26
- note.published_at ||= Time.now
27
+ note.text_filter ||= default_text_filter
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,46 +1,47 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- require 'base64'
3
+ require "base64"
4
4
 
5
5
  class Admin::PagesController < Admin::BaseController
6
6
  before_action :set_macro, only: [:new, :edit]
7
- before_action :set_page, only: [:show, :edit, :update, :destroy]
8
-
9
- layout :get_layout
7
+ before_action :set_page, only: [:edit, :update, :destroy]
10
8
 
11
9
  def index
12
- @search = params[:search] ? params[:search] : {}
13
- @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)
14
13
  end
15
14
 
16
15
  def new
17
16
  @page = Page.new
18
- @page.text_filter ||= default_textfilter
17
+ @page.text_filter_name ||= default_text_filter
19
18
  @page.user_id = current_user.id
20
- @page.state = 'published'
19
+ @page.state = "published"
20
+ render layout: "editor"
21
21
  end
22
22
 
23
23
  def edit
24
- @page.text_filter ||= default_textfilter
24
+ @page.text_filter_name ||= default_text_filter
25
+ render layout: "editor"
25
26
  end
26
27
 
27
28
  def create
28
29
  @page = Page.new(page_params)
29
- @page.published_at = Time.now
30
+ @page.published_at = Time.zone.now
30
31
  @page.blog = this_blog
31
32
  @page.user_id = current_user.id
32
33
 
33
34
  if @page.save
34
- 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")
35
36
  else
36
- render :new
37
+ render :new, layout: "editor"
37
38
  end
38
39
  end
39
40
 
40
41
  def update
41
- @page.text_filter ||= default_textfilter
42
+ @page.text_filter_name ||= default_text_filter
42
43
  if @page.update(page_params)
43
- 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")
44
45
  else
45
46
  render :edit
46
47
  end
@@ -52,25 +53,14 @@ class Admin::PagesController < Admin::BaseController
52
53
 
53
54
  private
54
55
 
55
- def default_textfilter
56
- current_user.text_filter || blog.text_filter
56
+ def default_text_filter
57
+ current_user.text_filter_name || this_blog.text_filter
57
58
  end
58
59
 
59
60
  def set_macro
60
61
  @macros = TextFilterPlugin.macro_filters
61
62
  end
62
63
 
63
- def get_layout
64
- case action_name
65
- when 'new', 'edit', 'create'
66
- 'editor'
67
- when 'show'
68
- nil
69
- else
70
- 'administration'
71
- end
72
- end
73
-
74
64
  # Use callbacks to share common setup or constraints between actions.
75
65
  def set_page
76
66
  @page = Page.find(params[:id])
@@ -78,6 +68,6 @@ class Admin::PagesController < Admin::BaseController
78
68
 
79
69
  # Never trust parameters from the scary internet, only allow the white list through.
80
70
  def page_params
81
- params.require(:page).permit(:title, :body, :name, :state, :text_filter)
71
+ params.require(:page).permit(:title, :body, :name, :state, :text_filter_name)
82
72
  end
83
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]
@@ -7,8 +9,8 @@ class Admin::ProfilesController < Admin::BaseController
7
9
  def update
8
10
  @user.resource = upload_avatar if params[:user][:filename]
9
11
 
10
- if @user.update(user_params)
11
- redirect_to admin_profiles_url, notice: I18n.t('admin.profiles.index.success')
12
+ if @user.update(update_params)
13
+ redirect_to admin_profiles_url, notice: I18n.t("admin.profiles.index.success")
12
14
  else
13
15
  render :index
14
16
  end
@@ -22,10 +24,10 @@ 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
- Resource.create(upload: file, mime: mime, created_at: Time.now)
30
+ Resource.create(upload: file, mime: mime, created_at: Time.zone.now)
29
31
  end
30
32
 
31
33
  # Use callbacks to share common setup or constraints between actions.
@@ -37,11 +39,19 @@ class Admin::ProfilesController < Admin::BaseController
37
39
  def user_params
38
40
  params.require(:user).permit(:login, :password, :password_confirmation,
39
41
  :email, :firstname, :lastname, :nickname,
40
- :display_name, :notify_via_email,
42
+ :name, :notify_via_email,
41
43
  :notify_on_new_articles, :notify_on_comments,
42
44
  :text_filter_id, :state,
43
45
  :twitter_account, :twitter_oauth_token,
44
46
  :twitter_oauth_token_secret, :description,
45
47
  :url, :msn, :yahoo, :jabber, :aim, :twitter)
46
48
  end
49
+
50
+ def update_params
51
+ if user_params[:password].blank? && user_params[:password_confirmation].blank?
52
+ user_params.except(:password_confirmation, :password)
53
+ else
54
+ user_params
55
+ end
56
+ end
47
57
  end
@@ -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,26 +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
- if settings_params[:permalink_format] == 'custom'
17
+ if settings_params[:permalink_format] == "custom"
16
18
  settings_params[:permalink_format] = settings_params[:custom_permalink]
17
19
  end
18
- if @setting.update_attributes(settings_params)
19
- flash[:success] = I18n.t('admin.settings.update.success')
20
+ if @setting.update(settings_params)
21
+ flash[:success] = I18n.t("admin.settings.update.success")
20
22
  redirect_to admin_seo_path(section: @section)
21
23
  else
22
- flash[:error] = I18n.t('admin.settings.update.error',
23
- messages: this_blog.errors.full_messages.join(', '))
24
+ flash[:error] = I18n.t("admin.settings.update.error",
25
+ messages: this_blog.errors.full_messages.join(", "))
24
26
  render :show
25
27
  end
26
28
  end
@@ -35,7 +37,7 @@ class Admin::SeoController < Admin::BaseController
35
37
 
36
38
  def set_section
37
39
  section = params[:section]
38
- @section = VALID_SECTIONS.include?(section) ? section : 'general'
40
+ @section = VALID_SECTIONS.include?(section) ? section : "general"
39
41
  end
40
42
 
41
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,4 +1,4 @@
1
- # coding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  class Admin::SidebarController < Admin::BaseController
4
4
  def index
@@ -10,7 +10,7 @@ class Admin::SidebarController < Admin::BaseController
10
10
  def update
11
11
  @sidebar = Sidebar.where(id: params[:id]).first
12
12
  @old_s_index = @sidebar.staged_position || @sidebar.active_position
13
- @sidebar.update_attributes params[:configure][@sidebar.id.to_s].permit!
13
+ @sidebar.update params[:configure][@sidebar.id.to_s].permit!
14
14
  respond_to do |format|
15
15
  format.js
16
16
  format.html do
@@ -21,7 +21,7 @@ class Admin::SidebarController < Admin::BaseController
21
21
 
22
22
  def destroy
23
23
  @sidebar = Sidebar.where(id: params[:id]).first
24
- @sidebar && @sidebar.destroy
24
+ @sidebar&.destroy
25
25
  respond_to do |format|
26
26
  format.html { return redirect_to(admin_sidebar_index_path) }
27
27
  format.js
@@ -45,11 +45,12 @@ class Admin::SidebarController < Admin::BaseController
45
45
  # IT'S OVER NINE THOUSAND! considering we'll never reach 9K Sidebar
46
46
  # instances or Sidebar specializations
47
47
  sidebar = if sidebar_id >= 9000
48
- SidebarRegistry.available_sidebars[sidebar_id - 9000].new(blog: this_blog)
48
+ SidebarRegistry.available_sidebars[sidebar_id - 9000].
49
+ new(blog: this_blog)
49
50
  else
50
51
  Sidebar.valid.find(sidebar_id)
51
52
  end
52
- sidebar.update_attributes(staged_position: staged_index)
53
+ sidebar.update(staged_position: staged_index)
53
54
  end
54
55
  end
55
56