pages_core 3.4.3 → 3.7.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 (375) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +74 -15
  3. data/Rakefile +2 -0
  4. data/app/assets/javascripts/pages/admin.jsx +17 -0
  5. data/app/assets/javascripts/pages/admin/components.jsx +2 -0
  6. data/app/assets/javascripts/pages/admin/components/attachment.jsx +130 -0
  7. data/app/assets/javascripts/pages/admin/components/attachment_editor.jsx +131 -0
  8. data/app/assets/javascripts/pages/admin/components/attachments.jsx +211 -0
  9. data/app/assets/javascripts/pages/admin/components/date_range_select.jsx +174 -0
  10. data/app/assets/javascripts/pages/admin/components/drag_uploader.jsx +174 -0
  11. data/app/assets/javascripts/pages/admin/components/editable_image.jsx +57 -0
  12. data/app/assets/javascripts/pages/admin/components/file_upload_button.jsx +44 -0
  13. data/app/assets/javascripts/pages/admin/components/focal_point.jsx +82 -0
  14. data/app/assets/javascripts/pages/admin/components/grid_image.jsx +124 -0
  15. data/app/assets/javascripts/pages/admin/components/image_editor.jsx +496 -0
  16. data/app/assets/javascripts/pages/admin/components/image_grid.jsx +306 -0
  17. data/app/assets/javascripts/pages/admin/components/image_uploader.jsx +176 -0
  18. data/app/assets/javascripts/pages/admin/components/modal.jsx +48 -0
  19. data/app/assets/javascripts/pages/admin/components/modal_store.jsx +20 -0
  20. data/app/assets/javascripts/pages/admin/components/page_dates.jsx +58 -0
  21. data/app/assets/javascripts/pages/admin/components/page_files.jsx +14 -0
  22. data/app/assets/javascripts/pages/admin/components/page_images.jsx +16 -0
  23. data/app/assets/javascripts/pages/admin/components/page_tree.jsx +300 -0
  24. data/app/assets/javascripts/pages/admin/components/page_tree_node.jsx +396 -0
  25. data/app/assets/javascripts/pages/admin/components/page_tree_store.jsx +203 -0
  26. data/app/assets/javascripts/pages/admin/components/rich_text_area.jsx +64 -0
  27. data/app/assets/javascripts/pages/admin/components/rich_text_toolbar.jsx +91 -0
  28. data/app/assets/javascripts/pages/admin/components/toast.jsx +34 -0
  29. data/app/assets/javascripts/pages/admin/components/toast_store.jsx +52 -0
  30. data/app/assets/javascripts/pages/admin/features/content_tabs.jsx +72 -0
  31. data/app/assets/javascripts/pages/admin/features/edit_page.jsx +97 -0
  32. data/app/assets/javascripts/pages/admin/features/rich_text.jsx +14 -0
  33. data/app/assets/javascripts/pages/admin/features/tag_editor.jsx +160 -0
  34. data/app/assets/javascripts/pages/admin/lib/tree.jsx +294 -0
  35. data/app/assets/javascripts/pages/login_form.jsx +21 -0
  36. data/app/assets/stylesheets/pages/admin.scss +144 -0
  37. data/app/assets/stylesheets/pages/admin/components/archive.scss +6 -0
  38. data/app/assets/stylesheets/pages/admin/components/attachments.scss +130 -0
  39. data/app/assets/stylesheets/pages/admin/components/buttons.scss +23 -0
  40. data/app/assets/stylesheets/pages/admin/components/forms.scss +169 -0
  41. data/app/assets/stylesheets/pages/admin/components/header.scss +157 -0
  42. data/app/assets/stylesheets/pages/admin/components/image_editor.scss +195 -0
  43. data/app/assets/stylesheets/pages/admin/components/image_grid.scss +181 -0
  44. data/app/assets/stylesheets/pages/admin/components/image_uploader.scss +53 -0
  45. data/app/assets/stylesheets/pages/admin/components/layout.scss +44 -0
  46. data/app/assets/stylesheets/pages/admin/components/links.scss +43 -0
  47. data/app/assets/stylesheets/pages/admin/components/list_table.scss +61 -0
  48. data/app/assets/stylesheets/pages/admin/{login.css.scss.erb → components/login.scss} +3 -9
  49. data/app/assets/stylesheets/pages/admin/components/modal.scss +106 -0
  50. data/app/assets/stylesheets/pages/admin/components/page_tree.scss +179 -0
  51. data/app/assets/stylesheets/pages/admin/components/pagination.scss +49 -0
  52. data/app/assets/stylesheets/pages/admin/components/sidebar.scss +28 -0
  53. data/app/assets/stylesheets/pages/admin/components/tag_editor.scss +59 -0
  54. data/app/assets/stylesheets/pages/admin/components/textarea.scss +6 -0
  55. data/app/assets/stylesheets/pages/admin/components/toast.scss +51 -0
  56. data/app/assets/stylesheets/pages/admin/components/toolbar.scss +108 -0
  57. data/app/assets/stylesheets/pages/admin/controllers/pages.scss +184 -0
  58. data/app/assets/stylesheets/pages/admin/controllers/{users.css.erb → users.scss} +2 -2
  59. data/app/assets/stylesheets/pages/admin/mixins/breakpoints.scss +21 -0
  60. data/app/assets/stylesheets/pages/admin/mixins/clearfix.scss +7 -0
  61. data/app/assets/stylesheets/pages/admin/mixins/gradients.scss +7 -0
  62. data/app/assets/stylesheets/pages/admin/vars.scss +30 -0
  63. data/app/assets/stylesheets/pages/errors.css +2 -0
  64. data/app/controller_dummies/admin/admin_controller.rb +1 -1
  65. data/app/controller_dummies/application_controller.rb +3 -3
  66. data/app/controller_dummies/attachments_controller.rb +4 -0
  67. data/app/controller_dummies/frontend_controller.rb +1 -1
  68. data/app/controller_dummies/images_controller.rb +1 -1
  69. data/app/controller_dummies/page_files_controller.rb +1 -1
  70. data/app/controller_dummies/pages_controller.rb +1 -1
  71. data/app/controller_dummies/sitemaps_controller.rb +1 -1
  72. data/app/controllers/admin/attachments_controller.rb +50 -0
  73. data/app/controllers/admin/categories_controller.rb +3 -4
  74. data/app/controllers/admin/images_controller.rb +29 -18
  75. data/app/controllers/admin/invites_controller.rb +20 -23
  76. data/app/controllers/admin/pages_controller.rb +59 -111
  77. data/app/controllers/admin/password_resets_controller.rb +23 -21
  78. data/app/controllers/admin/users_controller.rb +23 -23
  79. data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +67 -0
  80. data/app/controllers/concerns/pages_core/admin/persistent_params.rb +75 -0
  81. data/app/controllers/concerns/pages_core/authentication.rb +4 -3
  82. data/app/controllers/concerns/pages_core/error_renderer.rb +36 -0
  83. data/app/controllers/concerns/pages_core/error_reporting.rb +36 -0
  84. data/app/controllers/concerns/pages_core/policies_helper.rb +16 -13
  85. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +44 -0
  86. data/app/controllers/concerns/pages_core/process_titler.rb +4 -4
  87. data/app/controllers/concerns/pages_core/rss_controller.rb +25 -0
  88. data/app/controllers/concerns/pages_core/static_cache_controller.rb +48 -0
  89. data/app/controllers/errors_controller.rb +20 -30
  90. data/app/controllers/pages_core/admin_controller.rb +21 -70
  91. data/app/controllers/pages_core/attachments_controller.rb +40 -0
  92. data/app/controllers/pages_core/{application_controller.rb → base_controller.rb} +13 -8
  93. data/app/controllers/pages_core/frontend/page_files_controller.rb +7 -24
  94. data/app/controllers/pages_core/frontend/pages_controller.rb +39 -228
  95. data/app/controllers/pages_core/frontend_controller.rb +10 -3
  96. data/app/controllers/pages_core/images_controller.rb +2 -2
  97. data/app/controllers/pages_core/sitemaps_controller.rb +15 -10
  98. data/app/controllers/sessions_controller.rb +4 -14
  99. data/app/formatters/pages_core/html_formatter.rb +52 -48
  100. data/app/formatters/pages_core/image_embedder.rb +79 -0
  101. data/app/formatters/pages_core/link_renderer.rb +17 -0
  102. data/app/helpers/admin/admin_helper.rb +1 -1
  103. data/app/helpers/admin/menu_helper.rb +19 -16
  104. data/app/helpers/admin/pages_helper.rb +27 -30
  105. data/app/helpers/application_helper.rb +1 -1
  106. data/app/helpers/frontend_helper.rb +1 -1
  107. data/app/helpers/pages_core/admin/admin_helper.rb +44 -71
  108. data/app/helpers/pages_core/admin/content_tabs_helper.rb +28 -0
  109. data/app/helpers/pages_core/admin/date_range_helper.rb +55 -0
  110. data/app/helpers/pages_core/admin/form_builder.rb +44 -0
  111. data/app/helpers/pages_core/admin/image_uploads_helper.rb +48 -0
  112. data/app/helpers/pages_core/admin/labelled_field_helper.rb +19 -19
  113. data/app/helpers/pages_core/admin/page_blocks_helper.rb +66 -0
  114. data/app/helpers/pages_core/admin/page_json_helper.rb +23 -0
  115. data/app/helpers/pages_core/admin/tag_editor_helper.rb +16 -14
  116. data/app/helpers/pages_core/application_helper.rb +15 -26
  117. data/app/helpers/pages_core/attachments_helper.rb +40 -0
  118. data/app/helpers/pages_core/form_builder.rb +71 -134
  119. data/app/helpers/pages_core/frontend_helper.rb +2 -8
  120. data/app/helpers/pages_core/head_tags_helper.rb +36 -169
  121. data/app/helpers/pages_core/images_helper.rb +5 -4
  122. data/app/helpers/pages_core/meta_tags_helper.rb +96 -0
  123. data/app/helpers/pages_core/open_graph_tags_helper.rb +51 -0
  124. data/app/helpers/pages_core/page_path_helper.rb +66 -0
  125. data/app/jobs/pages_core/autopublish_job.rb +2 -2
  126. data/app/jobs/pages_core/sweep_cache_job.rb +3 -3
  127. data/app/mailers/admin_mailer.rb +8 -31
  128. data/app/models/attachment.rb +78 -0
  129. data/app/models/autopublisher.rb +7 -4
  130. data/app/models/category.rb +10 -11
  131. data/app/models/concerns/pages_core/has_roles.rb +5 -4
  132. data/app/models/concerns/pages_core/humanizable_param.rb +11 -8
  133. data/app/models/concerns/pages_core/page_model/attachments.rb +41 -0
  134. data/app/models/concerns/pages_core/page_model/autopublishable.rb +25 -0
  135. data/app/models/concerns/pages_core/page_model/dated_page.rb +59 -0
  136. data/app/models/concerns/pages_core/page_model/images.rb +51 -0
  137. data/app/models/concerns/pages_core/page_model/localizable.rb +38 -0
  138. data/app/models/concerns/pages_core/page_model/pathable.rb +114 -0
  139. data/app/models/concerns/pages_core/page_model/redirectable.rb +36 -0
  140. data/app/models/concerns/pages_core/page_model/sortable.rb +53 -0
  141. data/app/models/concerns/pages_core/page_model/status.rb +50 -0
  142. data/app/models/concerns/pages_core/page_model/templateable.rb +85 -0
  143. data/app/models/concerns/pages_core/page_model/tree.rb +134 -0
  144. data/app/models/concerns/pages_core/sweepable.rb +3 -3
  145. data/app/models/concerns/pages_core/taggable.rb +11 -4
  146. data/app/models/image.rb +15 -1
  147. data/app/models/invite.rb +3 -11
  148. data/app/models/invite_role.rb +5 -3
  149. data/app/models/page.rb +49 -234
  150. data/app/models/page_builder.rb +5 -7
  151. data/app/models/page_category.rb +7 -0
  152. data/app/models/page_exporter.rb +100 -0
  153. data/app/models/page_file.rb +26 -50
  154. data/app/models/page_image.rb +7 -40
  155. data/app/models/page_path.rb +52 -0
  156. data/app/models/password_reset_token.rb +7 -9
  157. data/app/models/role.rb +23 -7
  158. data/app/models/tag.rb +28 -19
  159. data/app/models/tagging.rb +6 -5
  160. data/app/models/user.rb +38 -32
  161. data/app/policies/invite_policy.rb +2 -0
  162. data/app/policies/page_file_policy.rb +15 -17
  163. data/app/policies/page_image_policy.rb +15 -17
  164. data/app/policies/page_policy.rb +29 -23
  165. data/app/policies/policy.rb +4 -8
  166. data/app/policies/user_policy.rb +34 -32
  167. data/app/serializers/admin/attachment_serializer.rb +31 -0
  168. data/app/serializers/admin/image_serializer.rb +55 -6
  169. data/app/serializers/admin/page_file_serializer.rb +8 -0
  170. data/app/serializers/admin/page_image_serializer.rb +3 -1
  171. data/app/serializers/page_export_serializer.rb +32 -0
  172. data/app/serializers/page_file_export_serializer.rb +6 -0
  173. data/app/serializers/page_image_export_serializer.rb +42 -0
  174. data/app/serializers/page_image_serializer.rb +4 -0
  175. data/app/serializers/page_serializer.rb +2 -0
  176. data/app/services/pages_core/create_user_service.rb +39 -0
  177. data/app/services/pages_core/destroy_invite_service.rb +25 -0
  178. data/app/services/pages_core/invite_service.rb +43 -0
  179. data/app/views/admin/images/show.json.jbuilder +8 -0
  180. data/app/views/admin/invites/new.html.erb +2 -1
  181. data/app/views/admin/invites/show.html.erb +3 -4
  182. data/app/views/admin/pages/_edit_content.html.erb +11 -2
  183. data/app/views/admin/pages/_edit_files.html.erb +8 -0
  184. data/app/views/admin/pages/_edit_images.html.erb +8 -84
  185. data/app/views/admin/pages/_edit_metadata.html.erb +23 -12
  186. data/app/views/admin/pages/_edit_options.html.erb +25 -25
  187. data/app/views/admin/pages/_list_item.html.erb +50 -0
  188. data/app/views/admin/pages/deleted.html.erb +42 -0
  189. data/app/views/admin/pages/edit.html.erb +11 -91
  190. data/app/views/admin/pages/index.html.erb +10 -54
  191. data/app/views/admin/pages/new.html.erb +5 -4
  192. data/app/views/admin/pages/news.html.erb +61 -47
  193. data/app/views/admin/password_resets/show.html.erb +6 -9
  194. data/app/views/admin/users/_access_control.html.erb +4 -1
  195. data/app/views/admin/users/_list.html.erb +12 -7
  196. data/app/views/admin/users/edit.html.erb +5 -11
  197. data/app/views/admin/users/login.html.erb +58 -15
  198. data/app/views/admin/users/show.html.erb +1 -1
  199. data/app/views/admin_mailer/invite.text.erb +1 -1
  200. data/app/views/admin_mailer/password_reset.text.erb +1 -1
  201. data/app/views/errors/401.html.erb +6 -0
  202. data/app/views/errors/403.html.erb +1 -1
  203. data/app/views/errors/422.html.erb +7 -0
  204. data/app/views/errors/500.html.erb +2 -15
  205. data/app/views/errors/_generic_help.html.erb +1 -1
  206. data/app/views/feeds/pages.rss.builder +2 -2
  207. data/app/views/layouts/admin.html.erb +83 -79
  208. data/app/views/layouts/admin/_analytics.html.erb +1 -3
  209. data/app/views/layouts/admin/_header.html.erb +4 -4
  210. data/app/views/layouts/errors.html.erb +3 -7
  211. data/app/views/sitemaps/show.xml.builder +2 -0
  212. data/config/locales/en.yml +50 -1
  213. data/config/routes.rb +57 -58
  214. data/db/migrate/20111219033112_create_pages_tables.rb +191 -276
  215. data/lib/pages_core.rb +34 -32
  216. data/lib/pages_core/admin_menu_item.rb +18 -4
  217. data/lib/pages_core/archive_finder.rb +49 -20
  218. data/lib/pages_core/attachment_embedder.rb +36 -0
  219. data/lib/pages_core/cache_sweeper.rb +9 -89
  220. data/lib/pages_core/configuration.rb +3 -3
  221. data/lib/pages_core/configuration/base.rb +8 -9
  222. data/lib/pages_core/configuration/pages.rb +8 -9
  223. data/lib/pages_core/digest_verifier.rb +70 -0
  224. data/lib/pages_core/engine.rb +72 -5
  225. data/lib/pages_core/extensions.rb +2 -3
  226. data/lib/pages_core/extensions/string_extensions.rb +2 -2
  227. data/lib/pages_core/page_path_constraint.rb +23 -0
  228. data/lib/pages_core/pages_plugin.rb +13 -2
  229. data/lib/pages_core/plugin.rb +8 -52
  230. data/lib/pages_core/pub_sub.rb +38 -0
  231. data/lib/pages_core/static_cache.rb +26 -0
  232. data/lib/pages_core/static_cache/null_handler.rb +17 -0
  233. data/lib/pages_core/static_cache/page_cache_handler.rb +56 -0
  234. data/lib/pages_core/static_cache/varnish_handler.rb +55 -0
  235. data/lib/pages_core/templates.rb +10 -10
  236. data/lib/pages_core/templates/block_configuration.rb +4 -3
  237. data/lib/pages_core/templates/configuration.rb +115 -34
  238. data/lib/pages_core/templates/configuration_handler.rb +9 -5
  239. data/lib/pages_core/templates/configuration_proxy.rb +12 -12
  240. data/lib/pages_core/templates/controller_actions.rb +1 -1
  241. data/lib/pages_core/templates/template_configuration.rb +102 -98
  242. data/lib/pages_core/version.rb +2 -2
  243. data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +11 -16
  244. data/lib/rails/generators/pages_core/frontend/templates/application.js.erb +1 -2
  245. data/lib/rails/generators/pages_core/frontend/templates/{application.css.scss.erb → application.scss.erb} +0 -0
  246. data/lib/rails/generators/pages_core/frontend/templates/{base.css.scss.erb → base.scss.erb} +0 -0
  247. data/lib/rails/generators/pages_core/frontend/templates/{breakpoints.css.scss.erb → breakpoints.scss.erb} +0 -0
  248. data/lib/rails/generators/pages_core/frontend/templates/clearfix.scss.erb +7 -0
  249. data/lib/rails/generators/pages_core/frontend/templates/layout.html.erb +0 -3
  250. data/lib/rails/generators/pages_core/install/install_generator.rb +25 -66
  251. data/lib/rails/generators/pages_core/install/templates/active_job_initializer.rb +2 -0
  252. data/lib/rails/generators/pages_core/install/templates/application_controller.rb +2 -2
  253. data/lib/rails/generators/pages_core/install/templates/application_helper.rb +1 -1
  254. data/lib/rails/generators/pages_core/install/templates/delayed_job +1 -0
  255. data/lib/rails/generators/pages_core/install/templates/delayed_job_initializer.rb +16 -1
  256. data/lib/rails/generators/pages_core/install/templates/frontend_controller.rb +1 -1
  257. data/lib/rails/generators/pages_core/install/templates/frontend_helper.rb +1 -1
  258. data/lib/rails/generators/pages_core/install/templates/gitignore.erb +12 -1
  259. data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +9 -15
  260. data/lib/rails/generators/pages_core/install/templates/pages_controller.rb +1 -1
  261. data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +5 -23
  262. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +19 -14
  263. data/lib/rails/generators/pages_core/rspec/templates/factories.rb +3 -8
  264. data/lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb +2 -0
  265. data/lib/rails/generators/pages_core/rspec/templates/page_templates_spec.rb +26 -0
  266. data/lib/rails/generators/pages_core/rspec/templates/rails_helper.rb +91 -0
  267. data/lib/rails/generators/pages_core/rspec/templates/spec_helper.rb +89 -45
  268. data/lib/tasks/pages.rake +2 -63
  269. data/lib/tasks/pages/cache.rake +12 -5
  270. data/lib/tasks/pages/export.rake +11 -0
  271. data/lib/tasks/pages/page_paths.rake +12 -0
  272. data/template.rb +5 -3
  273. data/vendor/assets/javascripts/ReactCrop.min.js +1 -0
  274. data/vendor/assets/javascripts/reflux.min.js +1 -0
  275. data/vendor/assets/stylesheets/ReactCrop.css +167 -0
  276. metadata +356 -192
  277. data/app/assets/images/pages/admin/description-bg.gif +0 -0
  278. data/app/assets/images/pages/admin/drag-handle.gif +0 -0
  279. data/app/assets/images/pages/admin/flash-error-bg.gif +0 -0
  280. data/app/assets/images/pages/admin/formelement-bg.gif +0 -0
  281. data/app/assets/images/pages/admin/header-tab-current-bg.gif +0 -0
  282. data/app/assets/images/pages/admin/list-table-td-bg.gif +0 -0
  283. data/app/assets/images/pages/admin/sidebar-bg.gif +0 -0
  284. data/app/assets/images/pages/admin/textarea_controls.gif +0 -0
  285. data/app/assets/javascripts/pages/admin.js.coffee +0 -54
  286. data/app/assets/javascripts/pages/admin/controllers/base.js.coffee +0 -4
  287. data/app/assets/javascripts/pages/admin/controllers/pages_controller.js.coffee +0 -139
  288. data/app/assets/javascripts/pages/admin/controllers/users_controller.js.coffee +0 -9
  289. data/app/assets/javascripts/pages/admin/features/content_tabs.js.coffee +0 -47
  290. data/app/assets/javascripts/pages/admin/features/editable_image.js.coffee.erb +0 -122
  291. data/app/assets/javascripts/pages/admin/features/modal.js.coffee +0 -66
  292. data/app/assets/javascripts/pages/admin/features/page_images.js +0 -329
  293. data/app/assets/javascripts/pages/admin/features/rich_text.js.coffee +0 -40
  294. data/app/assets/javascripts/pages/admin/features/tag_editor.js +0 -159
  295. data/app/assets/javascripts/pages/admin/lib/ajax_extensions.js.coffee +0 -17
  296. data/app/assets/javascripts/pages/admin/lib/center_on_screen.js.coffee +0 -21
  297. data/app/assets/javascripts/pages/admin/lib/jrichtextarea.js +0 -57
  298. data/app/assets/javascripts/pages/login_form.js.coffee +0 -17
  299. data/app/assets/stylesheets/pages/admin.css.erb +0 -404
  300. data/app/assets/stylesheets/pages/admin/buttons.css.erb +0 -5
  301. data/app/assets/stylesheets/pages/admin/controllers/artists.css.erb +0 -94
  302. data/app/assets/stylesheets/pages/admin/controllers/files.css.erb +0 -58
  303. data/app/assets/stylesheets/pages/admin/controllers/pages.css.scss.erb +0 -178
  304. data/app/assets/stylesheets/pages/admin/editable_image.css.erb +0 -19
  305. data/app/assets/stylesheets/pages/admin/forms.css.scss.erb +0 -73
  306. data/app/assets/stylesheets/pages/admin/header.css.erb +0 -129
  307. data/app/assets/stylesheets/pages/admin/images.css.scss.erb +0 -160
  308. data/app/assets/stylesheets/pages/admin/links.css.erb +0 -34
  309. data/app/assets/stylesheets/pages/admin/list_table.css.erb +0 -56
  310. data/app/assets/stylesheets/pages/admin/modal.css.erb +0 -14
  311. data/app/assets/stylesheets/pages/admin/pagination.css.scss +0 -22
  312. data/app/assets/stylesheets/pages/admin/print.css.erb +0 -17
  313. data/app/assets/stylesheets/pages/admin/sidebar.css.erb +0 -39
  314. data/app/assets/stylesheets/pages/admin/sortable_images.css.erb +0 -18
  315. data/app/assets/stylesheets/pages/admin/tag_editor.css.scss.erb +0 -48
  316. data/app/assets/stylesheets/pages/admin/textarea.css.erb +0 -55
  317. data/app/controllers/admin/page_comments_controller.rb +0 -61
  318. data/app/controllers/admin/page_files_controller.rb +0 -81
  319. data/app/controllers/admin/page_images_controller.rb +0 -116
  320. data/app/controllers/concerns/pages_core/domain_based_cache.rb +0 -28
  321. data/app/controllers/concerns/pages_core/exception_handler.rb +0 -114
  322. data/app/helpers/pages_core/login_helper.rb +0 -14
  323. data/app/indices/page_file_index.rb +0 -9
  324. data/app/indices/page_index.rb +0 -29
  325. data/app/indices/user_index.rb +0 -11
  326. data/app/models/concerns/pages_core/page_tree.rb +0 -85
  327. data/app/models/concerns/pages_core/searchable_page.rb +0 -33
  328. data/app/models/concerns/pages_core/templateable.rb +0 -85
  329. data/app/models/localization.rb +0 -27
  330. data/app/models/page_comment.rb +0 -18
  331. data/app/views/admin/pages/_edit_comments.html.erb +0 -21
  332. data/app/views/admin/pages/_pagelisting.html.erb +0 -63
  333. data/app/views/admin/users/_login_form.html.erb +0 -47
  334. data/app/views/admin_mailer/comment_notification.text.erb +0 -7
  335. data/app/views/admin_mailer/error_report.html.erb +0 -70
  336. data/app/views/errors/500_critical.html.erb +0 -7
  337. data/app/views/errors/report.html.erb +0 -4
  338. data/config/removed_migrations.yml +0 -60
  339. data/db/migrate/20120627033112_rename_textbits.rb +0 -19
  340. data/db/migrate/20121010055412_drop_removed_tables.rb +0 -83
  341. data/db/migrate/20130130053932_add_queue_to_delayed_jobs.rb +0 -11
  342. data/db/migrate/20130303053932_remove_filter_from_localizations.rb +0 -11
  343. data/db/migrate/20130303160632_remove_imagesets.rb +0 -24
  344. data/db/migrate/20130303161732_remove_sms_subscribers.rb +0 -16
  345. data/db/migrate/20130823133208_update_page_redirect_to.rb +0 -25
  346. data/db/migrate/20140203183900_create_roles.rb +0 -63
  347. data/db/migrate/20140414150500_change_locale_names.rb +0 -13
  348. data/db/migrate/20140515130100_remove_sphinx_deltas.rb +0 -15
  349. data/db/migrate/20140604142100_remove_openid_url.rb +0 -9
  350. data/db/migrate/20140920231700_convert_images_to_dis.rb +0 -79
  351. data/db/migrate/20140922124600_convert_page_files_to_dis.rb +0 -50
  352. data/db/migrate/20141004003100_create_password_reset_tokens.rb +0 -10
  353. data/db/migrate/20141006181300_remove_user_cruft.rb +0 -11
  354. data/db/migrate/20141007173000_create_invites.rb +0 -16
  355. data/db/migrate/20150204130800_update_delayed_job_table.rb +0 -9
  356. data/db/migrate/20150401131300_localize_images.rb +0 -39
  357. data/db/migrate/20150520174300_add_meta_image_to_page.rb +0 -5
  358. data/db/migrate/20150904164200_add_pinned_to_tags.rb +0 -5
  359. data/lib/pages_core/extensions/hash_extensions.rb +0 -23
  360. data/lib/pages_core/localizable.rb +0 -49
  361. data/lib/pages_core/localizable/active_record_extension.rb +0 -41
  362. data/lib/pages_core/localizable/class_methods.rb +0 -51
  363. data/lib/pages_core/localizable/configuration.rb +0 -50
  364. data/lib/pages_core/localizable/instance_methods.rb +0 -130
  365. data/lib/pages_core/localizable/localizer.rb +0 -72
  366. data/lib/pages_core/localizable/scope_extension.rb +0 -22
  367. data/lib/pages_core/paginates.rb +0 -102
  368. data/lib/rails/generators/pages_core/frontend/templates/hidpi.css.scss.erb +0 -8
  369. data/lib/rails/generators/pages_core/install/templates/cache_sweeper_initializer.rb +0 -11
  370. data/lib/rails/generators/pages_core/install/templates/thinking_sphinx.yml +0 -12
  371. data/lib/tasks/db.rake +0 -96
  372. data/lib/tasks/pages/assets.rake +0 -65
  373. data/lib/tasks/pages/update.rake +0 -19
  374. data/vendor/assets/javascripts/jquery.dimscreen.js +0 -77
  375. data/vendor/assets/javascripts/jquery.fieldselection.js +0 -59
data/lib/pages_core.rb CHANGED
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  # Ruby Standard Library
4
4
  require "digest/sha1"
@@ -21,47 +21,51 @@ require "active_model_serializers"
21
21
  require "acts_as_list"
22
22
  require "bcrypt"
23
23
  require "coffee-script"
24
+ require "country_select"
24
25
  require "delayed_job"
25
26
  require "dis"
26
27
  require "dynamic_image"
28
+ require "healthcheck"
29
+ require "localizable_model"
30
+ require "lograge"
31
+ require "nokogiri"
27
32
  require "json"
33
+ require "progress_bar"
28
34
  require "rails_i18n"
29
- require "recaptcha/rails"
30
35
  require "RedCloth"
31
- require "sass"
32
- require "thinking-sphinx"
36
+ require "sass-rails"
37
+ require "typhoeus"
38
+ require "will_paginate"
33
39
 
34
- # Javascript
40
+ # Must be loaded so that PagesCore::LinkRender can resolve the constant.
41
+ require "will_paginate/view_helpers/action_view"
42
+
43
+ # Assets
44
+ require "font-awesome-rails"
45
+ require "jquery-ui-rails"
35
46
  require "jquery/rails/engine"
36
- require "jquery/ui/rails"
37
- require "jquery-cookie-rails"
38
- require "underscore-rails"
39
- require "jcrop/rails/v2"
47
+ require "react-rails"
48
+
49
+ # Pages
50
+ require "pages_core/plugin"
51
+ require "pages_core/admin_menu_item"
52
+ require "pages_core/archive_finder"
53
+ require "pages_core/attachment_embedder"
54
+ require "pages_core/cache_sweeper"
55
+ require "pages_core/digest_verifier"
56
+ require "pages_core/configuration"
57
+ require "pages_core/engine"
58
+ require "pages_core/extensions"
59
+ require "pages_core/page_path_constraint"
60
+ require "pages_core/pages_plugin"
61
+ require "pages_core/pub_sub"
62
+ require "pages_core/templates"
63
+ require "pages_core/version"
40
64
 
41
65
  module PagesCore
42
66
  class NotAuthorized < StandardError; end
43
67
 
44
68
  class << self
45
- def load_dependencies!
46
- load "pages_core/plugin.rb"
47
-
48
- load "pages_core/admin_menu_item.rb"
49
- load "pages_core/archive_finder.rb"
50
- load "pages_core/cache_sweeper.rb"
51
- load "pages_core/configuration.rb"
52
- load "pages_core/engine.rb"
53
- load "pages_core/extensions.rb"
54
- load "pages_core/localizable.rb"
55
- load "pages_core/pages_plugin.rb"
56
- load "pages_core/paginates.rb"
57
- load "pages_core/templates.rb"
58
- load "pages_core/version.rb"
59
- end
60
-
61
- def init!
62
- load_dependencies!
63
- end
64
-
65
69
  def version
66
70
  VERSION
67
71
  end
@@ -82,8 +86,6 @@ module PagesCore
82
86
  @configuration
83
87
  end
84
88
  end
85
- alias_method :config, :configuration
89
+ alias config configuration
86
90
  end
87
91
  end
88
-
89
- PagesCore.init!
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
4
  class AdminMenuItem
@@ -6,17 +6,31 @@ module PagesCore
6
6
 
7
7
  class << self
8
8
  def items
9
- @items ||= []
9
+ return [] unless @menu_items
10
+
11
+ @menu_items.map { |_, v| v }
10
12
  end
11
13
 
12
14
  def register(label, path, group = :custom, options = {})
13
15
  entry = new(label, path, group, options)
14
- items << entry unless items.include?(entry)
16
+ @menu_items ||= {}
17
+ @menu_items[[group, label]] = entry
15
18
  end
16
19
  end
17
20
 
18
21
  def initialize(label, path, group = :custom, options = {})
19
- @label, @path, @group, @options = label, path, group, options
22
+ @label = label
23
+ @path = path
24
+ @group = group
25
+ @options = options
26
+ end
27
+
28
+ def ==(other)
29
+ other &&
30
+ other.label == label &&
31
+ other.path == path &&
32
+ other.group == group &&
33
+ other.options == options
20
34
  end
21
35
  end
22
36
  end
@@ -1,40 +1,46 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
4
  class ArchiveFinder
5
5
  def initialize(relation, options = {})
6
- @relation, @options = relation, options
6
+ @relation = relation
7
+ @options = options
7
8
  end
8
9
 
9
10
  def by_year(year)
10
11
  filter_by_time(range_for_year(year))
11
12
  end
12
13
 
14
+ def by_year_and_maybe_month(year, month = nil)
15
+ return by_year(year) unless month
16
+
17
+ by_year_and_month(year, month)
18
+ end
19
+
13
20
  def by_year_and_month(year, month)
14
21
  filter_by_time(range_for_year_and_month(year, month))
15
22
  end
16
23
 
24
+ def latest_year
25
+ latest_year_and_month&.first
26
+ end
27
+
17
28
  def latest_year_and_month
18
29
  ordered_relation.first.try do |record|
19
- [
20
- record[timestamp_attribute].year,
21
- record[timestamp_attribute].month
22
- ]
30
+ [record[timestamp_attribute].year,
31
+ record[timestamp_attribute].month]
23
32
  end
24
33
  end
25
34
 
26
35
  def months_in_year(year)
27
- by_year(year)
28
- .reorder("#{timestamp_attribute} ASC")
29
- .group("MONTH(#{timestamp_attribute})")
30
- .map { |record| record[timestamp_attribute].month }
36
+ select_months(by_year(year)).map(&:to_i).sort
31
37
  end
32
38
 
33
39
  def months_in_year_with_count(year)
34
- by_year(year)
35
- .group("MONTH(#{timestamp_attribute})")
40
+ group_by_month(by_year(year))
36
41
  .count
37
42
  .to_a
43
+ .sort_by(&:first)
38
44
  end
39
45
 
40
46
  def timestamp_attribute
@@ -42,14 +48,19 @@ module PagesCore
42
48
  end
43
49
 
44
50
  def years
45
- @relation
46
- .reorder("#{timestamp_attribute} ASC")
47
- .group("YEAR(#{timestamp_attribute})")
48
- .map { |record| record[timestamp_attribute].year }
51
+ select_years(@relation).map(&:to_i).sort
52
+ end
53
+
54
+ def years_with_count
55
+ years.map { |year| [year, by_year(year).count] }
49
56
  end
50
57
 
51
58
  private
52
59
 
60
+ def group_by_month(relation)
61
+ relation.reorder("").group(Arel.sql(month_part))
62
+ end
63
+
53
64
  def filter_by_time(range)
54
65
  @relation.where(
55
66
  "#{timestamp_attribute} >= ? AND #{timestamp_attribute} <= ?",
@@ -58,18 +69,36 @@ module PagesCore
58
69
  )
59
70
  end
60
71
 
72
+ def month_part
73
+ "date_part('month', #{timestamp_attribute})::integer"
74
+ end
75
+
61
76
  def range_for_year(year)
62
- date_time = DateTime.new(year.to_i, 1, 1)
63
- date_time..date_time.end_of_year
77
+ start_time = Time.zone.local(year.to_i, 1, 1)
78
+ end_time = start_time.end_of_year
79
+ (start_time.in_time_zone)..(end_time.in_time_zone)
64
80
  end
65
81
 
66
82
  def range_for_year_and_month(year, month)
67
- date_time = DateTime.new(year.to_i, month.to_i, 1)
68
- date_time..date_time.end_of_month
83
+ start_time = Time.zone.local(year.to_i, month, 1)
84
+ end_time = start_time.end_of_month
85
+ (start_time.in_time_zone)..(end_time.in_time_zone)
86
+ end
87
+
88
+ def select_months(relation)
89
+ relation.reorder("").pluck(Arel.sql("DISTINCT #{month_part}"))
90
+ end
91
+
92
+ def select_years(relation)
93
+ relation.reorder("").pluck(Arel.sql("DISTINCT #{year_part}"))
69
94
  end
70
95
 
71
96
  def ordered_relation
72
97
  @relation.reorder("#{timestamp_attribute} DESC")
73
98
  end
99
+
100
+ def year_part
101
+ "date_part('year', #{timestamp_attribute})"
102
+ end
74
103
  end
75
104
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ class AttachmentEmbedder
5
+ include ActionView::Helpers::AssetTagHelper
6
+
7
+ attr_reader :attachments
8
+
9
+ def initialize(attachments)
10
+ @attachments = Array(attachments)
11
+ end
12
+
13
+ def to_html
14
+ embed_attachments(attachments.map { |f| embed_attachment(f) })
15
+ end
16
+
17
+ def embed_attachments(embedded_attachments)
18
+ embedded_attachments.join(", ")
19
+ end
20
+
21
+ def embed_attachment(attachment)
22
+ tag.a(attachment.name, class: "file",
23
+ href: attachment_path(attachment))
24
+ end
25
+
26
+ private
27
+
28
+ def attachment_path(attachment)
29
+ Rails.application.routes.url_helpers.attachment_path(
30
+ attachment.digest,
31
+ attachment,
32
+ format: attachment.filename_extension
33
+ )
34
+ end
35
+ end
36
+ end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
4
  class CacheSweeper
@@ -8,102 +8,22 @@ module PagesCore
8
8
  def disable(&_block)
9
9
  old_value = enabled
10
10
  self.enabled = false
11
- yield
11
+ yield if block_given?
12
12
  self.enabled = old_value
13
13
  end
14
14
 
15
15
  def once(&block)
16
16
  disable(&block)
17
- PagesCore::SweepCacheJob.perform_later
17
+ PagesCore::StaticCache.handler.sweep!
18
18
  end
19
19
 
20
- # Returns the default configuration.
21
- def default_config
22
- OpenStruct.new(
23
- cache_path: ActionController::Base.page_cache_directory,
24
- observe: [Page, PageComment, Image],
25
- patterns: [
26
- /^\/index\.[\w]+$/,
27
- /^\/sitemap\.[\w]+$/,
28
- %r{^/pages/[\w]{2,3}[/\.](.*)$},
29
- %r{^/[\w]{2,3}/(.*)$}
30
- ]
31
- )
32
- end
33
-
34
- # Returns the configuration. Accepts a block, ie:
35
- #
36
- # PagesCore::CacheSweeper.config do |c|
37
- # c.observe += [:store, :store_test]
38
- # c.patterns += [/^\/arkiv(.*)$/, /^\/tests(.*)$/]
39
- # end
40
20
  def config
41
- @configuration ||= default_config
42
- if block_given?
43
- yield @configuration
44
- extend_observed_models!
45
- end
46
- @configuration
47
- end
48
-
49
- def extend_observed_models!
50
- config.observe.each do |klass|
51
- if klass.is_a?(Symbol) || klass.is_a?(String)
52
- klass = klass.to_s.camelize.constantize
53
- end
54
- unless klass.include?(PagesCore::Sweepable)
55
- klass.send(:include, PagesCore::Sweepable)
56
- end
57
- end
58
- end
59
-
60
- # Purge the entire pages cache
61
- def purge!
62
- cache_dir = config.cache_path
63
- `rm -rf "#{cache_dir}/*"` if File.exist?(cache_dir)
64
- end
65
-
66
- # Sweep all cached pages
67
- def sweep!
68
- return [] unless enabled
69
- cache_dirs.flat_map { |d| sweep_dir(d) }
70
- end
71
-
72
- private
73
-
74
- def cache_dirs
75
- if PagesCore.config(:domain_based_cache)
76
- Dir.entries(config.cache_path)
77
- .select { |d| visible_dir?(d) }
78
- .map { |d| File.join(config.cache_path, d) }
79
- .map(&:to_s)
80
- else
81
- [config.cache_path.to_s]
82
- end
83
- end
84
-
85
- def visible_dir?(dir)
86
- !(dir =~ /^\./) && File.directory?(File.join(config.cache_path, dir))
87
- end
88
-
89
- def sweep_dir(cache_dir)
90
- return [] unless File.exist?(cache_dir)
91
- swept_files = []
92
- Find.find(cache_dir + "/") do |path|
93
- Find.prune if skip_path?(cache_dir, path)
94
- file = path.gsub(Regexp.new("^#{cache_dir}"), "")
95
- config.patterns.each do |p|
96
- if file =~ p && File.exist?(path)
97
- swept_files << path
98
- FileUtils.rm_rf(path)
99
- end
100
- end
101
- end
102
- swept_files
103
- end
104
-
105
- def skip_path?(cache_dir, path)
106
- path =~ Regexp.new("^#{cache_dir}/dynamic_image[s]?")
21
+ ActiveSupport::Deprecation.warn(
22
+ "PagesCore::CacheSweeper.config is no longer used."
23
+ )
24
+ configuration = OpenStruct.new(patterns: [])
25
+ yield configuration if block_given?
26
+ configuration
107
27
  end
108
28
  end
109
29
 
@@ -1,7 +1,7 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- load "pages_core/configuration/base.rb"
4
- load "pages_core/configuration/pages.rb"
3
+ require "pages_core/configuration/base"
4
+ require "pages_core/configuration/pages"
5
5
 
6
6
  module PagesCore
7
7
  module Configuration
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
4
  module Configuration
@@ -13,11 +13,7 @@ module PagesCore
13
13
  settings[key] = OpenStruct.new(type: type, default: default)
14
14
 
15
15
  define_method key do |*args|
16
- if args.length > 0
17
- set(key, *args)
18
- else
19
- get(key)
20
- end
16
+ args.any? ? set(key, *args) : get(key)
21
17
  end
22
18
 
23
19
  define_method "#{key}=" do |value|
@@ -30,7 +26,8 @@ module PagesCore
30
26
  end
31
27
 
32
28
  def get(key)
33
- fail InvalidConfigurationKey unless setting?(key)
29
+ raise InvalidConfigurationKey unless setting?(key)
30
+
34
31
  if configuration.key?(key)
35
32
  configuration[key]
36
33
  else
@@ -39,10 +36,11 @@ module PagesCore
39
36
  end
40
37
 
41
38
  def set(key, value)
42
- fail InvalidConfigurationKey unless setting?(key)
39
+ raise InvalidConfigurationKey unless setting?(key)
40
+
43
41
  value = parse_value(key, value)
44
42
  unless valid_type?(key, value)
45
- fail(
43
+ raise(
46
44
  ArgumentError,
47
45
  "expected #{self.class.settings[key].type}, got #{value.class}"
48
46
  )
@@ -66,6 +64,7 @@ module PagesCore
66
64
 
67
65
  def valid_type?(key, value)
68
66
  return true if value.nil?
67
+
69
68
  if type_for(key) == :boolean
70
69
  value.is_a?(TrueClass) || value.is_a?(FalseClass)
71
70
  else