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
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
4
  module Frontend
@@ -7,113 +7,33 @@ module PagesCore
7
7
  include PagesCore::Templates::ControllerActions
8
8
  include PagesCore::HeadTagsHelper
9
9
 
10
- caches_page :index if PagesCore.config(:page_cache)
10
+ include PagesCore::PreviewPagesController
11
+ include PagesCore::RssController
11
12
 
12
- before_action :disable_xss_protection, only: [:preview]
13
13
  before_action :load_root_pages
14
- before_action :find_page, only: [:show, :preview, :add_comment]
14
+ before_action :find_page_by_path, only: [:show]
15
+ before_action :find_page, only: %i[show preview]
16
+ before_action :require_page, only: %i[show preview]
15
17
  before_action :canonicalize_url, only: [:show]
16
- after_action :cache_page_request, only: [:show]
18
+ static_cache :index, :show
17
19
 
18
20
  def index
19
21
  respond_to do |format|
20
- format.html do
21
- if self.respond_to?(:no_page_given)
22
- no_page_given
23
- elsif root_pages.any?
24
- @page = root_pages.first
25
- render_page
26
- else
27
- render_error 404
28
- end
29
- end
30
- format.rss do
31
- render_rss(all_feed_items)
32
- end
22
+ format.html { render_published_page(root_pages.try(&:first)) }
23
+ format.rss { render_rss(all_feed_items) }
33
24
  end
34
25
  end
35
26
 
36
27
  def show
37
28
  respond_to do |format|
38
- format.html do
39
- if @page && @page.published?
40
- render_page
41
- else
42
- render_error 404
43
- end
44
- end
45
- format.rss do
46
- render_rss(
47
- @page.pages.limit(20),
48
- title: "#{PagesCore.config(:side_name)}: #{@page.name}"
49
- )
50
- end
51
- format.json do
52
- render json: @page
53
- end
29
+ format.html { render_published_page(@page) }
30
+ format.rss { render_rss(@page.pages.limit(20), title: @page.name) }
31
+ format.json { render json: @page }
54
32
  end
55
33
  end
56
34
 
57
- # Add a comment to a page. Recaptcha is performed if
58
- # PagesCore.config(:recaptcha) is set.
59
- def add_comment
60
- @comment = new_comment(@page)
61
-
62
- unless captcha_verified?
63
- @comment.invalid_captcha = true
64
- render_page
65
- return
66
- end
67
-
68
- if @page.comments_allowed? && !honeypot_triggered?
69
- @comment.save
70
- if PagesCore.config(:comment_notifications)
71
- deliver_comment_notifications(@page, @comment)
72
- end
73
- end
74
-
75
- redirect_to(page_url(@locale, @page))
76
- end
77
-
78
- # Search pages
79
- def search
80
- @search_query = params[:q] || params[:query] || ""
81
- @search_category_id = params[:category_id]
82
-
83
- @pages = Page.search(
84
- normalize_search_query(@search_query),
85
- search_options(category_id: @search_category_id)
86
- )
87
- @pages.each { |p| p.localize!(locale) }
88
- @pages
89
- end
90
-
91
- def preview
92
- redirect_to(page_url(@locale, @page)) && return unless logged_in?
93
-
94
- @page.attributes = page_params.merge(
95
- status: 2,
96
- published_at: Time.now,
97
- locale: @locale,
98
- redirect_to: nil
99
- )
100
-
101
- render_page
102
- end
103
-
104
35
  private
105
36
 
106
- def all_feed_items
107
- Page
108
- .where(
109
- parent_page_id: Page.enabled_feeds(locale, include_hidden: true)
110
- )
111
- .order("published_at DESC")
112
- .published
113
- .limit(20)
114
- .localized(locale)
115
- end
116
-
117
37
  def canonical_path(page)
118
38
  if page.redirects?
119
39
  page.redirect_path(locale: page.locale)
@@ -123,22 +43,12 @@ module PagesCore
123
43
  end
124
44
 
125
45
  def canonicalize_url
126
- unless @page.redirects?
127
- if request.path != canonical_path(@page)
128
- redirect_to canonical_path(@page)
129
- end
130
- end
131
- end
132
-
133
- def disable_xss_protection
134
- # Disabling this is probably not a good idea,
135
- # but the header causes Chrome to choke when being
136
- # redirected back after a submit and the page contains an iframe.
137
- response.headers['X-XSS-Protection'] = "0"
138
- end
46
+ return if @page.redirects?
47
+ return if request.path == canonical_path(@page)
48
+ # Don't canonicalize if any unknown params are present
49
+ return if (params.keys - %w[controller action path locale id]).any?
139
50
 
140
- def preview?
141
- @page.new_record?
51
+ redirect_to(canonical_path(@page), status: :moved_permanently)
142
52
  end
143
53
 
144
54
  def render(*args)
@@ -151,10 +61,6 @@ module PagesCore
151
61
  super
152
62
  end
153
63
 
154
- def rendered?
155
- @already_rendered ? true : false
156
- end
157
-
158
64
  def page_template(page)
159
65
  if PagesCore::Templates.names.include?(page.template)
160
66
  page.template
@@ -164,144 +70,49 @@ module PagesCore
164
70
  end
165
71
 
166
72
  def render_page
167
- if @page.redirects?
168
- redirect_to(@page.redirect_path(locale: @locale))
169
- return
170
- end
73
+ return if redirect_page(@page)
171
74
 
172
75
  unless document_title?
173
- if @page.meta_title?
174
- document_title(@page.meta_title)
175
- else
176
- document_title(@page.name)
177
- end
76
+ document_title(@page.meta_title? ? @page.meta_title : @page.name)
178
77
  end
179
78
 
180
- # Call template method
181
79
  template = page_template(@page)
182
-
183
80
  run_template_actions_for(template, @page)
81
+ return if @already_rendered
184
82
 
185
- @page_template_layout = false if @disable_layout
186
-
187
- return if rendered?
188
-
189
- if instance_variables.include?("@page_template_layout")
190
- render(
191
- template: "pages/templates/#{template}",
192
- layout: @page_template_layout
193
- )
194
- else
195
- render template: "pages/templates/#{template}"
196
- end
197
- end
198
-
199
- # Cache pages by hand. This is dirty, but it works.
200
- def cache_page_request
201
- status_code = response.status.try(&:to_i)
202
- unless status_code == 200 &&
203
- PagesCore.config(:page_cache) &&
204
- @page && @locale
205
- return
206
- end
207
-
208
- self.class.cache_page response.body, request.path
209
- end
210
-
211
- def permitted_page_attributes
212
- [
213
- :template, :user_id, :status, :content_order,
214
- :feed_enabled, :published_at, :redirect_to, :comments_allowed,
215
- :image_link, :news_page, :unique_name, :pinned,
216
- :parent_page_id
217
- ]
218
- end
219
-
220
- def page_params
221
- params.require(:page).permit(
222
- Page.localized_attributes + permitted_page_attributes
223
- )
224
- end
225
-
226
- def captcha_verified?
227
- !PagesCore.config(:recaptcha) || verify_recaptcha
228
- end
229
-
230
- def honeypot_triggered?
231
- PagesCore.config(:comment_honeypot) && !params[:email].to_s.empty?
232
- end
233
-
234
- def remote_ip
235
- request.env["REMOTE_ADDR"]
83
+ render template: "pages/templates/#{template}"
236
84
  end
237
85
 
238
- def new_comment(page)
239
- PageComment.new(
240
- page_comment_params.merge(remote_ip: remote_ip, page_id: page.id)
241
- )
242
- end
86
+ def find_page_by_path
87
+ return unless params[:path]
243
88
 
244
- def comment_recipients(page)
245
- PagesCore.config(:comment_notifications)
246
- .map { |r| r == :author ? page.author.name_and_email : r }
247
- .uniq
248
- end
249
-
250
- def deliver_comment_notifications(page, comment)
251
- comment_recipients(page).each do |r|
252
- AdminMailer.comment_notification(
253
- r,
254
- page,
255
- comment,
256
- page_url(locale, page)
257
- ).deliver_now
258
- end
89
+ @page = PagePath.get(locale, params[:path]).try(&:page)
259
90
  end
260
91
 
261
92
  def find_page
262
- @page ||= find_page_by_id(params[:id]) || unique_page(params[:id])
263
- @page.locale = @locale || I18n.default_locale.to_s
93
+ @page ||= Page.find_by(id: params[:id]) || unique_page(params[:id])
94
+ @page.locale = @locale || I18n.default_locale.to_s if @page
264
95
  end
265
96
 
266
- def find_page_by_id(id)
267
- Page.find(id)
268
- rescue
269
- nil
97
+ def render_published_page(page)
98
+ if page&.published?
99
+ @page = page
100
+ render_page
101
+ else
102
+ render_error 404
103
+ end
270
104
  end
271
105
 
272
- def page_comment_params
273
- params.require(:page_comment).permit(:name, :email, :url, :body)
274
- end
106
+ def redirect_page(page)
107
+ return false unless page.redirects?
275
108
 
276
- def normalize_search_query(str)
277
- str
278
- .split(/\s+/)
279
- .map { |p| "#{p}*" }
280
- .join(" ")
109
+ redirect_to(page.redirect_path(locale: locale))
281
110
  end
282
111
 
283
- def render_rss(items, title: nil)
284
- @items, @title = items, title
285
- response.headers["Content-Type"] = "application/rss+xml;charset=utf-8"
286
- render template: "feeds/pages", layout: false
287
- end
112
+ def require_page
113
+ return if @page
288
114
 
289
- def search_options(category_id: nil)
290
- options = {
291
- page: (params[:page] || 1).to_i,
292
- per_page: 20,
293
- include: [:localizations, :categories, :image, :author],
294
- order: :published_at,
295
- sort_mode: :desc,
296
- with: {
297
- status: 2,
298
- autopublish: 0
299
- }
300
- }
301
- unless category_id.blank?
302
- options[:with][:category_ids] = category_id
303
- end
304
- options
115
+ render_error 404
305
116
  end
306
117
  end
307
118
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  # Abstract controller for all frontend controllers.
4
4
  module PagesCore
@@ -19,16 +19,23 @@ module PagesCore
19
19
 
20
20
  private
21
21
 
22
- def set_i18n_locale
23
- legacy_locales = {
22
+ def legacy_locales
23
+ {
24
24
  "nor" => "nb",
25
25
  "eng" => "en"
26
26
  }
27
+ end
28
+
29
+ def set_i18n_locale
27
30
  locale_param = params[:locale] || I18n.default_locale
28
31
  if legacy_locales[locale_param]
29
32
  locale_param = legacy_locales[locale_param]
30
33
  end
31
34
  I18n.locale = locale_param
35
+ rescue I18n::InvalidLocale
36
+ raise if Rails.application.config.consider_all_requests_local
37
+
38
+ render_error 404
32
39
  end
33
40
  end
34
41
  end
@@ -1,10 +1,10 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
4
  class ImagesController < ::ApplicationController
5
5
  include DynamicImage::Controller
6
6
 
7
- caches_page :show, :uncropped, :original
7
+ static_cache :show, :uncropped, :original, permanent: true
8
8
 
9
9
  private
10
10
 
@@ -1,8 +1,9 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
- class SitemapsController < ApplicationController
5
- caches_page :show
4
+ class SitemapsController < ::ApplicationController
5
+ include PagesCore::PagePathHelper
6
+ static_cache :show
6
7
 
7
8
  def show
8
9
  @entries = formatted_entries
@@ -11,7 +12,7 @@ module PagesCore
11
12
  private
12
13
 
13
14
  def format_time(timestamp)
14
- if timestamp.kind_of?(Date)
15
+ if timestamp.is_a?(Date)
15
16
  timestamp.strftime("%Y-%m-%d")
16
17
  else
17
18
  timestamp.strftime("%Y-%m-%dT%H:%M:%S#{timestamp.formatted_offset}")
@@ -38,18 +39,18 @@ module PagesCore
38
39
  end
39
40
 
40
41
  def localized?(record)
41
- record.is_a?(PagesCore::Localizable::InstanceMethods)
42
+ record.is_a?(LocalizableModel::InstanceMethods)
42
43
  end
43
44
 
44
45
  def pages
45
- ([Page.root.localize(I18n.default_locale)] +
46
- locales.flat_map do |locale|
47
- Page.published.localized(locale)
48
- end).uniq
46
+ ([Page.root.try(:localize, I18n.default_locale)] +
47
+ locales.flat_map do |locale|
48
+ Page.published.localized(locale).includes(:parent)
49
+ end).compact.uniq
49
50
  end
50
51
 
51
52
  def page_record_url(record)
52
- if record == Page.root && record.locale == I18n.default_locale
53
+ if record == root_page && record.locale == I18n.default_locale
53
54
  root_url
54
55
  else
55
56
  page_url(record.locale, record)
@@ -69,5 +70,9 @@ module PagesCore
69
70
  def records
70
71
  pages
71
72
  end
73
+
74
+ def root_page
75
+ @root_page ||= Page.root
76
+ end
72
77
  end
73
78
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  class SessionsController < ::ApplicationController
4
4
  def create
@@ -6,18 +6,18 @@ class SessionsController < ::ApplicationController
6
6
  authenticate!(user) if user
7
7
 
8
8
  if logged_in?
9
- redirect_to success_url
9
+ redirect_to admin_default_url
10
10
  else
11
11
  flash[:notice] = "The provided email address and password combination " \
12
12
  "was not valid"
13
- redirect_to login_url
13
+ redirect_to login_admin_users_url
14
14
  end
15
15
  end
16
16
 
17
17
  def destroy
18
18
  flash[:notice] = "You have been logged out"
19
19
  deauthenticate!
20
- redirect_to login_url
20
+ redirect_to login_admin_users_url
21
21
  end
22
22
 
23
23
  protected
@@ -25,14 +25,4 @@ class SessionsController < ::ApplicationController
25
25
  def find_user(username, password)
26
26
  User.authenticate(username, password: password) if username && password
27
27
  end
28
-
29
- def success_url
30
- # TODO: Validate URL
31
- params[:success_url] || admin_default_url
32
- end
33
-
34
- def login_url
35
- # TODO: Validate URL
36
- params[:login_url] || login_admin_users_url
37
- end
38
28
  end