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,21 @@
1
+ @mixin breakpoint-min($width) {
2
+ @media screen and (min-width: ($width + 1px)) {
3
+ @content;
4
+ }
5
+ }
6
+
7
+ @mixin breakpoint-max($width) {
8
+ @media screen and (max-width: $width) {
9
+ @content;
10
+ }
11
+ }
12
+
13
+ @mixin breakpoint-min-max($min-width, $max-width) {
14
+ @media screen and (min-width: ($min-width + 1px)) and (max-width: ($max-width)) {
15
+ @content;
16
+ }
17
+ }
18
+
19
+ @mixin breakpoint-mobile($offset: 0px) {
20
+ @include breakpoint-max(($breakpoint-mobile + $offset)) { @content; }
21
+ }
@@ -0,0 +1,7 @@
1
+ %clearfix {
2
+ &:after {
3
+ content: "";
4
+ display: table;
5
+ clear: both;
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ @mixin vertical-gradient($start, $stop) {
2
+ background: $start;
3
+ background: -moz-linear-gradient(top, $start 0%, $stop 100%);
4
+ background: -webkit-linear-gradient(top, $start 0%,$stop 100%);
5
+ background: linear-gradient(to bottom, $start 0%,$stop 100%);
6
+ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='$start', endColorstr='$stop',GradientType=0 );
7
+ }
@@ -0,0 +1,30 @@
1
+ $breakpoint-mobile: 900px;
2
+
3
+ $c-red: #c00007;
4
+ $c-red-invert: #fff0f3;
5
+ $c-green: #19ac1e;
6
+ $c-blue: #1d7195;
7
+ $c-blue-dark: darken($c-blue, 15%);
8
+
9
+ $c-warn-light: #ffdfa0;
10
+
11
+ $c-background: #fff;
12
+ $c-background-invert: #000;
13
+ $c-background-disabled: #f8f8f8;
14
+
15
+ $c-text: #111;
16
+ $c-text-light: #666;
17
+ $c-text-lighter: #999;
18
+ $c-text-invert: #fff;
19
+
20
+ $c-border: #ddd;
21
+ $c-border-light: #eee;
22
+
23
+ $c-link: $c-blue;
24
+ $c-link-hover: darken($c-link, 10%);
25
+ $c-create: $c-green;
26
+ $c-create-hover: darken($c-create, 10%);
27
+ $c-delete: $c-red;
28
+ $c-delete-hover: darken($c-delete, 10%);
29
+
30
+ $c-button: #f6f6f6;
@@ -1,5 +1,7 @@
1
1
  body {
2
2
  background: #fff;
3
+ background: linear-gradient(180deg, rgba(236,236,236,1) 0%, rgba(255,255,255,1) 50%);
4
+ background-repeat: no-repeat;
3
5
  margin: 0;
4
6
  padding: 0;
5
7
  border: 0;
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Admin
4
4
  class AdminController < PagesCore::AdminController #:nodoc:
@@ -1,6 +1,6 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
- class ApplicationController < PagesCore::ApplicationController #:nodoc:
3
+ class ApplicationController < PagesCore::BaseController #:nodoc:
4
4
  helper :all
5
- protect_from_forgery
5
+ protect_from_forgery with: :exception
6
6
  end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AttachmentsController < PagesCore::AttachmentsController #:nodoc:
4
+ end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  class FrontendController < PagesCore::FrontendController #:nodoc:
4
4
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  class ImagesController < PagesCore::ImagesController #:nodoc:
4
4
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  class PageFilesController < PagesCore::Frontend::PageFilesController #:nodoc:
4
4
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  class PagesController < PagesCore::Frontend::PagesController #:nodoc:
4
4
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  class SitemapsController < PagesCore::SitemapsController #:nodoc:
4
4
  end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Admin
4
+ class AttachmentsController < Admin::AdminController
5
+ before_action :find_attachment, only: %i[update]
6
+
7
+ def create
8
+ @attachment = Attachment.create(
9
+ attachment_params.merge(user: current_user)
10
+ )
11
+ return unless @attachment.valid?
12
+
13
+ respond_to do |format|
14
+ format.json do
15
+ render_attachment(@attachment)
16
+ end
17
+ end
18
+ end
19
+
20
+ def update
21
+ @attachment.update(attachment_params)
22
+ respond_to do |format|
23
+ format.json { render_attachment(@attachment) }
24
+ end
25
+ end
26
+
27
+ protected
28
+
29
+ def attachment_params
30
+ params.require(:attachment).permit(
31
+ :file,
32
+ localized_attributes.index_with do |_a|
33
+ I18n.available_locales
34
+ end
35
+ )
36
+ end
37
+
38
+ def localized_attributes
39
+ %i[name description]
40
+ end
41
+
42
+ def find_attachment
43
+ @attachment = Attachment.find(params[:id])
44
+ end
45
+
46
+ def render_attachment(attachment)
47
+ render json: attachment, serializer: Admin::AttachmentSerializer
48
+ end
49
+ end
50
+ end
@@ -1,8 +1,8 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Admin
4
4
  class CategoriesController < Admin::AdminController
5
- before_action :find_category, only: [:show, :edit, :update, :destroy]
5
+ before_action :find_category, only: %i[show edit update destroy]
6
6
 
7
7
  def index
8
8
  @categories = Category.all
@@ -26,8 +26,7 @@ module Admin
26
26
  end
27
27
  end
28
28
 
29
- def edit
30
- end
29
+ def edit; end
31
30
 
32
31
  def update
33
32
  if @category.update(category_params)
@@ -1,43 +1,54 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Admin
4
4
  class ImagesController < Admin::AdminController
5
- before_action :find_image, only: [:show, :edit, :update, :destroy]
5
+ before_action :find_image, only: %i[show edit update destroy]
6
6
 
7
- def index
8
- end
7
+ def index; end
9
8
 
10
- def show
11
- respond_to do |format|
12
- format.js { render text: @image.to_json, layout: false }
13
- end
14
- end
9
+ def show; end
15
10
 
16
- def new
17
- end
11
+ def new; end
18
12
 
19
- def edit
20
- end
13
+ def edit; end
21
14
 
22
15
  def create
16
+ @image = Image.create(image_params)
17
+
18
+ respond_to do |format|
19
+ format.json do
20
+ if @image.valid?
21
+ render json: @image, serializer: Admin::ImageSerializer
22
+ else
23
+ render json: { status: "error", error: @image.errors.first }
24
+ end
25
+ end
26
+ end
23
27
  end
24
28
 
25
29
  def update
26
30
  @image.update(image_params)
27
31
  respond_to do |format|
28
- format.json { render text: @image.to_json, layout: false }
32
+ format.json { render action: :show }
29
33
  end
30
34
  end
31
35
 
32
- def destroy
33
- end
36
+ def destroy; end
34
37
 
35
38
  protected
36
39
 
40
+ def localized_attributes
41
+ %i[caption alternative]
42
+ end
43
+
37
44
  def image_params
38
45
  params.require(:image).permit(
39
- :name, :alternative, :caption, :description, :file,
40
- :crop_start_x, :crop_start_y, :crop_height, :crop_width, :locale
46
+ :name, :description, :file,
47
+ :crop_start_x, :crop_start_y, :crop_height, :crop_width, :locale,
48
+ :crop_gravity_x, :crop_gravity_y,
49
+ localized_attributes.index_with do |_a|
50
+ I18n.available_locales
51
+ end
41
52
  )
42
53
  end
43
54
 
@@ -1,22 +1,19 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Admin
2
4
  class InvitesController < Admin::AdminController
3
- before_action :require_authentication, except: [:accept, :show]
4
- before_action :find_invite, only: [:show, :edit, :update, :destroy, :accept]
5
- before_action :require_valid_token, only: [:show, :accept]
5
+ before_action :require_authentication, except: %i[accept show]
6
+ before_action :find_invite, only: %i[destroy]
7
+ before_action :find_and_validate_invite, only: %i[show accept]
6
8
 
7
- require_authorization(
8
- Invite,
9
- proc { @invite },
10
- member: [:show, :edit, :update, :destroy],
11
- collection: [:index, :new, :create]
12
- )
9
+ require_authorization
13
10
 
14
11
  def index
15
12
  redirect_to admin_users_url
16
13
  end
17
14
 
18
15
  def accept
19
- @user = @invite.create_user(user_params)
16
+ @user = PagesCore::CreateUserService.call(user_params, invite: @invite)
20
17
  if @user.valid?
21
18
  authenticate!(@user)
22
19
  redirect_to admin_default_url
@@ -37,13 +34,11 @@ module Admin
37
34
  end
38
35
 
39
36
  def create
40
- @invite = current_user.invites.create(invite_params)
37
+ @invite = PagesCore::InviteService.call(invite_params,
38
+ user: current_user,
39
+ host: request.host,
40
+ protocol: request.protocol)
41
41
  if @invite.valid?
42
- AdminMailer.invite(
43
- @invite,
44
- admin_invite_with_token_url(@invite, @invite.token)
45
- ).deliver_now
46
- @invite.update(sent_at: Time.now)
47
42
  redirect_to admin_invites_url
48
43
  else
49
44
  render action: :new
@@ -52,7 +47,7 @@ module Admin
52
47
 
53
48
  def destroy
54
49
  flash[:notice] = "The invite to #{@invite.email} has been deleted"
55
- @invite.destroy
50
+ PagesCore::DestroyInviteService.call(invite: @invite)
56
51
  redirect_to admin_invites_url
57
52
  end
58
53
 
@@ -62,6 +57,14 @@ module Admin
62
57
  @invite = Invite.find(params[:id])
63
58
  end
64
59
 
60
+ def find_and_validate_invite
61
+ @invite = Invite.find_by(id: params[:id])
62
+ return if @invite && secure_compare(@invite.token, params[:token])
63
+
64
+ flash[:notice] = "This invite is no longer valid."
65
+ redirect_to(login_admin_users_url) && return
66
+ end
67
+
65
68
  def user_params
66
69
  params.require(:user).permit(:name, :email, :password, :confirm_password)
67
70
  end
@@ -69,11 +72,5 @@ module Admin
69
72
  def invite_params
70
73
  params.require(:invite).permit(:email, role_names: [])
71
74
  end
72
-
73
- def require_valid_token
74
- return if @invite && secure_compare(@invite.token, params[:token])
75
- flash[:notice] = "Invalid invite token"
76
- redirect_to(login_admin_users_url) && return
77
- end
78
75
  end
79
76
  end
@@ -1,151 +1,112 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Admin
4
4
  class PagesController < Admin::AdminController
5
- before_action :require_news_pages, only: [:news]
6
- before_action :find_page, only: [
7
- :show, :edit, :preview, :update, :destroy, :reorder,
8
- :delete_meta_image
9
- ]
10
- before_action :find_categories
11
- before_action :find_news_pages, only: [:news, :new_news]
12
-
13
- require_authorization(
14
- Page,
15
- proc { @page },
16
- collection: [:index, :news, :new, :new_news, :create, :reorder_pages]
17
- )
5
+ include PagesCore::Admin::PageJsonHelper
6
+ include PagesCore::Admin::NewsPageController
18
7
 
19
- def index
20
- @root_pages = Page.roots.in_locale(@locale).visible
21
- end
8
+ before_action :find_categories
9
+ before_action :find_page, only: %i[show edit update destroy move]
22
10
 
23
- def news
24
- @archive_finder = Page.where(parent_page_id: @news_pages)
25
- .visible
26
- .order("published_at DESC")
27
- .in_locale(@locale)
28
- .archive_finder
11
+ require_authorization
29
12
 
30
- @year, @month = year_and_month(@archive_finder)
31
- @year ||= Time.now.year
32
- @month ||= Time.now.month
13
+ helper_method :page_json
33
14
 
34
- @pages = @archive_finder.by_year_and_month(@year, @month)
15
+ def index
16
+ @pages = Page.admin_list(@locale)
35
17
  end
36
18
 
37
- def reorder_pages
38
- pages = params[:ids].map { |id| Page.find(id) }
39
- PagesCore::CacheSweeper.once do
40
- pages.each_with_index do |page, index|
41
- page.update(position: (index + 1))
42
- end
43
- end
44
- render text: "ok" if request.xhr?
19
+ def deleted
20
+ @pages = Page.deleted.by_updated_at.in_locale(@locale)
45
21
  end
46
22
 
47
23
  def show
48
- edit
49
- render action: :edit
24
+ redirect_to edit_admin_page_url(@locale, @page)
50
25
  end
51
26
 
52
27
  def new
53
- @authors = User.activated
54
- @page = build_page(@locale)
55
- if params[:parent]
56
- @page.parent = Page.find(params[:parent])
57
- elsif @news_pages
58
- @page.parent = @news_pages.first
59
- end
60
- end
61
-
62
- # TODO: Should be refactored
63
- def new_news
64
- new
65
- render action: :new
28
+ build_params = params[:page] ? page_params : nil
29
+ @page = build_page(@locale, build_params)
30
+ @page.parent = if params[:parent]
31
+ Page.find(params[:parent])
32
+ elsif @news_pages
33
+ @news_pages.first
34
+ end
66
35
  end
67
36
 
68
37
  def create
69
- @page = build_page(@locale)
70
- if @page.update(page_params)
71
- @page.update(
72
- comments_allowed: @page.template_config.value(:comments_allowed)
73
- )
74
- @page.categories = param_categories
75
- redirect_to edit_admin_page_url(@locale, @page)
38
+ @page = build_page(@locale, page_params, param_categories)
39
+ if @page.valid?
40
+ @page.save
41
+ respond_with_page(@page) do
42
+ redirect_to(edit_admin_page_url(@locale, @page))
43
+ end
76
44
  else
77
45
  render action: :new
78
46
  end
79
47
  end
80
48
 
81
- def edit
82
- @authors = User.activated
83
- # Make sure the page author is included in the dropdown
84
- # even if the account isn't active.
85
- if @authors.any? && @page.author
86
- @authors = [@page.author] + @authors.reject { |a| a == @page.author }
87
- end
88
- @new_image ||= Image.new
89
- end
49
+ def edit; end
90
50
 
91
51
  def update
92
52
  if @page.update(page_params)
93
53
  @page.categories = param_categories
94
- flash[:notice] = "Your changes were saved"
95
- flash[:save_performed] = true
96
- redirect_to edit_admin_page_url(@locale, @page)
54
+ respond_with_page(@page) do
55
+ flash[:notice] = "Your changes were saved"
56
+ redirect_to edit_admin_page_url(@locale, @page)
57
+ end
97
58
  else
98
- edit
99
59
  render action: :edit
100
60
  end
101
61
  end
102
62
 
103
- def destroy
104
- @page = Page.find(params[:id])
105
- @page.flag_as_deleted!
106
- redirect_to admin_pages_url(@locale)
63
+ def move
64
+ parent = params[:parent_id] ? Page.find(params[:parent_id]) : nil
65
+ @page.update(parent: parent, position: params[:position])
66
+ respond_with_page(@page) { redirect_to admin_pages_url(@locale) }
107
67
  end
108
68
 
109
- def delete_meta_image
110
- @page.meta_image.destroy
111
- flash[:notice] = "The image was deleted"
112
- redirect_to edit_admin_page_url(@locale, @page, anchor: "metadata")
69
+ def destroy
70
+ Page.find(params[:id]).flag_as_deleted!
71
+ redirect_to admin_pages_url(@locale)
113
72
  end
114
73
 
115
74
  private
116
75
 
117
- def build_page(locale)
76
+ def build_page(locale, attributes = nil, categories = nil)
118
77
  Page.new.localize(locale).tap do |page|
119
78
  page.author = default_author || current_user
79
+ page.attributes = attributes if attributes
80
+ page.categories = categories if categories
120
81
  end
121
82
  end
122
83
 
123
84
  def default_author
124
- return unless PagesCore.config.default_author
125
- User.where(email: PagesCore.config.default_author).first
85
+ User.find_by_email(PagesCore.config.default_author)
126
86
  end
127
87
 
128
- def permitted_page_attributes
129
- [
130
- :template, :user_id, :status, :content_order,
131
- :feed_enabled, :published_at, :redirect_to, :comments_allowed,
132
- :image_link, :news_page, :unique_name, :pinned,
133
- :parent_page_id, :serialized_tags, :meta_image
134
- ]
88
+ def page_attributes
89
+ %i[template user_id status feed_enabled published_at redirect_to
90
+ image_link news_page unique_name pinned parent_page_id serialized_tags
91
+ meta_image_id starts_at ends_at all_day image_id path_segment
92
+ meta_title meta_description open_graph_title open_graph_description]
135
93
  end
136
94
 
137
95
  def page_params
138
96
  params.require(:page).permit(
139
- Page.localized_attributes + permitted_page_attributes
97
+ PagesCore::Templates::TemplateConfiguration.all_blocks +
98
+ page_attributes,
99
+ page_images_attributes: %i[id position image_id primary _destroy],
100
+ page_files_attributes: %i[id position attachment_id _destroy]
140
101
  )
141
102
  end
142
103
 
143
104
  def param_categories
144
- if params[:category] && params[:category].length > 0
145
- params[:category].map { |k, _| Category.find(k.to_i) }
146
- else
147
- []
148
- end
105
+ return [] unless params[:category]
106
+
107
+ params.permit(category: {})[:category]
108
+ .to_hash
109
+ .map { |id, _| Category.find(id) }
149
110
  end
150
111
 
151
112
  def find_page
@@ -156,23 +117,10 @@ module Admin
156
117
  @categories = Category.order("name")
157
118
  end
158
119
 
159
- def find_news_pages
160
- @news_pages = Page.news_pages.in_locale(@locale)
161
- return if @news_pages.any?
162
- redirect_to(admin_pages_url(@locale))
163
- end
164
-
165
- # Redirect away if no news pages has been configured
166
- def require_news_pages
167
- return if Page.news_pages.any?
168
- redirect_to(admin_pages_url(@locale))
169
- end
170
-
171
- def year_and_month(archive_finder)
172
- if params[:year] && params[:month]
173
- [params[:year], params[:month]].map(&:to_i)
174
- else
175
- archive_finder.latest_year_and_month
120
+ def respond_with_page(page, &block)
121
+ respond_to do |format|
122
+ format.html { block.call }
123
+ format.json { render json: page_json(page) }
176
124
  end
177
125
  end
178
126
  end