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
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module PreviewPagesController
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ before_action :disable_xss_protection, only: [:preview]
9
+ end
10
+
11
+ def preview
12
+ redirect_to(page_url(@locale, @page)) && return unless logged_in?
13
+
14
+ @page.attributes = page_params.merge(
15
+ status: 2,
16
+ published_at: Time.zone.now,
17
+ locale: @locale,
18
+ redirect_to: nil
19
+ )
20
+ render_page
21
+ end
22
+
23
+ private
24
+
25
+ def disable_xss_protection
26
+ # Disabling this is probably not a good idea,
27
+ # but the header causes Chrome to choke when being
28
+ # redirected back after a submit and the page contains an iframe.
29
+ response.headers["X-XSS-Protection"] = "0"
30
+ end
31
+
32
+ def permitted_page_attributes
33
+ %i[template user_id status feed_enabled published_at
34
+ redirect_to image_link news_page
35
+ unique_name pinned parent_page_id]
36
+ end
37
+
38
+ def page_params
39
+ params.require(:page).permit(
40
+ Page.localized_attributes + permitted_page_attributes
41
+ )
42
+ end
43
+ end
44
+ end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
4
  module ProcessTitler
@@ -10,7 +10,7 @@ module PagesCore
10
10
  end
11
11
 
12
12
  class << self
13
- attr_accessor :number_of_requests
13
+ attr_writer :number_of_requests
14
14
 
15
15
  def original_title
16
16
  @original_title ||= $PROGRAM_NAME
@@ -32,13 +32,13 @@ module PagesCore
32
32
  def set_process_title
33
33
  PagesCore::ProcessTitler.inc_number_of_requests do |i|
34
34
  $0 = PagesCore::ProcessTitler.original_title +
35
- ": Handling #{request.path} (#{i} reqs)"
35
+ ": Handling #{request.path} (#{i} reqs)"
36
36
  end
37
37
  end
38
38
 
39
39
  def unset_process_title
40
40
  $0 = PagesCore::ProcessTitler.original_title +
41
- ": Idle (#{PagesCore::ProcessTitler.number_of_requests} reqs)"
41
+ ": Idle (#{PagesCore::ProcessTitler.number_of_requests} reqs)"
42
42
  end
43
43
  end
44
44
  end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module RssController
5
+ extend ActiveSupport::Concern
6
+
7
+ private
8
+
9
+ def all_feed_items
10
+ feeds = Page.enabled_feeds(locale, include_hidden: true)
11
+ Page.where(parent_page_id: feeds)
12
+ .order("published_at DESC")
13
+ .published
14
+ .limit(20)
15
+ .localized(locale)
16
+ end
17
+
18
+ def render_rss(items, title: nil)
19
+ @title = PagesCore.config.site_name
20
+ @title += ": #{title}" if title
21
+ @items = items
22
+ render template: "feeds/pages", layout: false
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module StaticCacheController
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+ def static_cache(*actions, permanent: false)
9
+ return unless perform_caching
10
+
11
+ if permanent
12
+ after_action :cache_static_page_permanently, only: actions
13
+ else
14
+ after_action :cache_static_page, only: actions
15
+ end
16
+ end
17
+
18
+ alias caches_page static_cache
19
+ end
20
+
21
+ def disable_static_cache!
22
+ @static_cache_disabled = true
23
+ end
24
+
25
+ private
26
+
27
+ def cache_static_page
28
+ return unless static_cache_allowed?
29
+
30
+ PagesCore::StaticCache.handler.cache_page(
31
+ self, request, response
32
+ )
33
+ end
34
+
35
+ def cache_static_page_permanently
36
+ return unless static_cache_allowed?
37
+
38
+ PagesCore::StaticCache.handler.cache_page_permanently(
39
+ self, request, response
40
+ )
41
+ end
42
+
43
+ def static_cache_allowed?
44
+ (request.get? || request.head?) && response.status == 200 &&
45
+ perform_caching && !@static_cache_disabled
46
+ end
47
+ end
48
+ end
@@ -1,45 +1,35 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  class ErrorsController < ::ApplicationController
4
4
  layout "errors"
5
5
 
6
- skip_before_action :verify_authenticity_token
7
-
8
- def report
9
- return unless session[:error_report]
10
- deliver_error_report(
11
- find_error_report,
12
- params[:email],
13
- params[:description]
14
- )
15
- @error_id = session[:error_report]
16
- end
17
-
18
6
  def show
19
7
  render_error params[:id].to_i
20
8
  end
21
9
 
22
- private
10
+ def forbidden
11
+ render_error 403
12
+ end
13
+
14
+ def not_found
15
+ render_error 404
16
+ end
23
17
 
24
- def deliver_error_report(report, from, description)
25
- AdminMailer.error_report(report, from, description).deliver_now
18
+ def unacceptable
19
+ render_error 422
26
20
  end
27
21
 
28
- def find_error_report
29
- report = YAML.load_file(error_report_path)
30
- if report[:user_id]
31
- report[:user] = begin
32
- User.find(report[:user_id])
33
- rescue
34
- nil
35
- end
36
- end
37
- report
22
+ def unauthorized
23
+ render_error 401
38
24
  end
39
25
 
40
- def error_report_path
41
- Rails.root
42
- .join("log", "error_reports")
43
- .join("#{session[:error_report]}.yml")
26
+ def internal_error
27
+ exception = request.env["action_dispatch.exception"]
28
+ if exception
29
+ wrapper = ActionDispatch::ExceptionWrapper.new(nil, exception)
30
+ render_error wrapper.status_code
31
+ else
32
+ render_error 500
33
+ end
44
34
  end
45
35
  end
@@ -1,16 +1,25 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  # All admin controllers inherit Admin::AdminController, which provides layout,
4
4
  # authorization and other common code for the Admin set of controllers.
5
5
  module PagesCore
6
6
  class AdminController < ::ApplicationController
7
+ include PagesCore::Admin::PersistentParams
8
+
9
+ protect_from_forgery with: :exception
10
+
7
11
  before_action :set_i18n_locale
8
12
  before_action :require_authentication
9
- before_action :restore_persistent_params
10
- after_action :save_persistent_params
11
13
 
12
14
  layout "admin"
13
15
 
16
+ class << self
17
+ # Get name of class with in lowercase, with underscores.
18
+ def underscore
19
+ ActiveSupport::Inflector.underscore(to_s).split("/").last
20
+ end
21
+ end
22
+
14
23
  def redirect
15
24
  if Page.news_pages.any?
16
25
  redirect_to news_admin_pages_url(@locale)
@@ -29,81 +38,23 @@ module PagesCore
29
38
  # If not, renders the login screen.
30
39
  def require_authentication
31
40
  return if logged_in?
41
+
32
42
  if User.count < 1
33
- redirect_to(new_admin_user_url) && return
43
+ redirect_to(new_admin_user_url)
34
44
  else
35
- redirect_to(login_admin_users_url) && return
45
+ redirect_to(login_admin_users_url)
36
46
  end
37
47
  end
38
48
 
39
- # Loads persistent params from user model and merges with session.
40
- def restore_persistent_params
41
- return unless current_user && current_user.persistent_data?
42
- session[:persistent_params] ||= {}
43
- session[:persistent_params] = current_user.persistent_data.merge(
44
- session[:persistent_params]
45
- )
46
- end
47
-
48
- # Saves persistent params from session to User model if applicable.
49
- def save_persistent_params
50
- return unless current_user && session[:persistent_params]
51
- current_user.persistent_data = session[:persistent_params]
52
- current_user.save
53
- end
54
-
55
- def secure_compare(a, b)
56
- return false unless a && b
57
- return false unless a.bytesize == b.bytesize
49
+ def secure_compare(compare, other)
50
+ return false unless compare && other
51
+ return false unless compare.bytesize == other.bytesize
58
52
 
59
- l = a.unpack "C#{a.bytesize}"
53
+ l = compare.unpack "C#{compare.bytesize}"
60
54
 
61
55
  res = 0
62
- b.each_byte { |byte| res |= byte ^ l.shift }
63
- res == 0
64
- end
65
-
66
- # --- HELPERS ---
67
-
68
- # Get name of class with in lowercase, with underscores.
69
- def self.underscore
70
- ActiveSupport::Inflector.underscore(to_s).split(/\//).last
71
- end
72
-
73
- # Add a stylesheet
74
- def add_stylesheet(css_file)
75
- @admin_stylesheets ||= []
76
- @admin_stylesheets << "admin/#{css_file}"
77
- end
78
-
79
- def persistent_params(namespace)
80
- session[:persistent_params] ||= {}
81
- session[:persistent_params][namespace] ||= {}
82
- session[:persistent_params][namespace]
83
- end
84
-
85
- def coerce_persistent_param(v)
86
- case v
87
- when "true"
88
- true
89
- when "false"
90
- false
91
- else
92
- v
93
- end
94
- end
95
-
96
- # Get a persistent param
97
- def persistent_param(key, default = nil, options = {})
98
- namespace = options[:namespace] || self.class.to_s
99
-
100
- value = coerce_persistent_param(params.key?(key) ? params[key] : default)
101
-
102
- if !value.nil? || options[:preserve_nil]
103
- persistent_params(namespace)[key] = value
104
- end
105
-
106
- value
56
+ other.each_byte { |byte| res |= byte ^ l.shift }
57
+ res.zero?
107
58
  end
108
59
  end
109
60
  end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ class AttachmentsController < ::ApplicationController
5
+ before_action :verify_signed_params
6
+ before_action :find_attachment, only: %i[show download]
7
+
8
+ static_cache :show, permanent: true
9
+
10
+ def show
11
+ send_attachment
12
+ end
13
+
14
+ def download
15
+ send_attachment disposition: "attachment"
16
+ end
17
+
18
+ private
19
+
20
+ def find_attachment
21
+ @attachment = Attachment.find(params[:id])
22
+ end
23
+
24
+ def send_attachment(disposition: "inline")
25
+ unless stale?(etag: @attachment, last_modified: @attachment.updated_at)
26
+ return
27
+ end
28
+
29
+ send_data(@attachment.data,
30
+ filename: @attachment.filename,
31
+ type: @attachment.content_type,
32
+ disposition: disposition)
33
+ end
34
+
35
+ def verify_signed_params
36
+ key = params[:id].to_i.to_s
37
+ Attachment.verifier.verify(key, params[:digest])
38
+ end
39
+ end
40
+ end
@@ -1,30 +1,35 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
- class ApplicationController < ActionController::Base
4
+ class BaseController < ActionController::Base
5
5
  include PagesCore::Authentication
6
- include PagesCore::DomainBasedCache
7
- include PagesCore::ExceptionHandler
6
+ include PagesCore::ErrorRenderer
7
+ include PagesCore::ErrorReporting
8
8
  include PagesCore::ProcessTitler
9
9
  include PagesCore::PoliciesHelper
10
+ include PagesCore::StaticCacheController
10
11
 
11
12
  before_action :set_locale
12
13
  after_action :set_content_language_header
13
14
 
14
15
  protected
15
16
 
17
+ def append_info_to_payload(payload)
18
+ super
19
+ payload[:remote_ip] = request.remote_ip
20
+ payload.merge!(current_user_context)
21
+ end
22
+
16
23
  # Sets @locale from params[:locale], with I18n.default_locale as fallback
17
24
  def set_locale
18
- legacy_locales = {
19
- "nor" => "nb",
20
- "eng" => "en"
21
- }
25
+ legacy_locales = { "nor" => "nb", "eng" => "en" }
22
26
  @locale = params[:locale] || I18n.default_locale.to_s
23
27
  @locale = legacy_locales[@locale] if legacy_locales[@locale]
24
28
  end
25
29
 
26
30
  def set_content_language_header
27
31
  return unless locale
32
+
28
33
  headers["Content-Language"] = locale.to_s
29
34
  end
30
35
  end
@@ -1,39 +1,22 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
4
  module Frontend
5
5
  class PageFilesController < ::FrontendController
6
- before_action :find_page_file, only: [:show, :edit, :update, :destroy]
6
+ include PagesCore::AttachmentsHelper
7
7
 
8
- def show
9
- if !modified?(@page_file)
10
- render(text: "304 Not Modified", status: 304) && return
11
- end
8
+ before_action :find_page_file, only: %i[show]
12
9
 
13
- if @page_file.updated_at?
14
- response.headers["Last-Modified"] = @page_file.updated_at.httpdate
10
+ def show
11
+ unless stale?(etag: @page_file, last_modified: @page_file.updated_at)
12
+ return
15
13
  end
16
14
 
17
- send_data(
18
- @page_file.data,
19
- filename: @page_file.filename,
20
- type: @page_file.content_type,
21
- disposition: "attachment"
22
- )
15
+ redirect_to attachment_path(@page_file.attachment)
23
16
  end
24
17
 
25
18
  private
26
19
 
27
- def modified?(page_file)
28
- return true unless if_modified_since && page_file.updated_at?
29
- page_file.updated_at > if_modified_since
30
- end
31
-
32
- def if_modified_since
33
- return nil if request.env["HTTP_IF_MODIFIED_SINCE"].blank?
34
- Time.rfc2822(request.env["HTTP_IF_MODIFIED_SINCE"])
35
- end
36
-
37
20
  def find_page_file
38
21
  @page_file = PageFile.find(params[:id])
39
22
  end