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,11 +1,7 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
4
  class HtmlFormatter
5
- include ActionView::Helpers::AssetTagHelper
6
- include PagesCore::ImagesHelper
7
- include Rails.application.routes.url_helpers
8
-
9
5
  class << self
10
6
  def to_html(string, options = {})
11
7
  new(string, options).to_html
@@ -18,69 +14,77 @@ module PagesCore
18
14
  end
19
15
 
20
16
  def to_html
21
- string = parse_images(@string)
22
- if @options[:shorten] && string.length > @options[:shorten]
23
- string = string[0..@options[:shorten]] + "..."
24
- end
17
+ string = shorten(parse_images(parse_files(parse_attachments(@string))))
25
18
  string += " #{@options[:append]}" if @options[:append]
26
- RedCloth.new(string).to_html.html_safe
19
+ fix_markup(RedCloth.new(string).to_html).html_safe
27
20
  end
28
21
 
29
22
  private
30
23
 
31
- def image_expression
32
- /\[image:(\d+)([\s="\-\w]*)?\]/
24
+ def attachment_expression
25
+ /\[attachment:([\d,]+)\]/
33
26
  end
34
27
 
35
- def embed_image(id, size:, class_name:)
36
- image = Image.find(id).localize(I18n.locale)
37
- class_name = ["image", image_class_name(image), class_name].compact
38
- content_tag(
39
- :figure,
40
- dynamic_image_tag(
41
- image,
42
- size: size,
43
- crop: false,
44
- upscale: false
45
- ) + image_caption(image),
46
- class: class_name
47
- )
28
+ def file_expression
29
+ /\[file:([\d,]+)\]/
30
+ end
31
+
32
+ def find_attachment(id)
33
+ Attachment.find(id).localize(I18n.locale)
48
34
  rescue ActiveRecord::RecordNotFound
49
35
  nil
50
36
  end
51
37
 
52
- def parse_images(string)
53
- string.gsub(image_expression).each do |str|
54
- id = str.match(image_expression)[1]
55
- options = str.match(image_expression)[2]
38
+ def find_attachments(str)
39
+ str.match(attachment_expression)[1]
40
+ .split(",")
41
+ .map { |id| find_attachment(id) }
42
+ .compact
43
+ end
56
44
 
57
- size = if options.match(/size="(\d*x\d*)"/)
58
- Regexp.last_match(1)
59
- else
60
- "2000x2000"
61
- end
45
+ def find_file(id)
46
+ PageFile.find(id).localize(I18n.locale)
47
+ rescue ActiveRecord::RecordNotFound
48
+ nil
49
+ end
62
50
 
63
- class_name = if options.match(/class="([\s\-\w]+)"/)
64
- Regexp.last_match(1)
65
- end
51
+ def find_files(str)
52
+ str.match(file_expression)[1]
53
+ .split(",")
54
+ .map { |id| find_file(id) }
55
+ .compact
56
+ end
57
+
58
+ def fix_markup(str)
59
+ Nokogiri::HTML.fragment(str).to_html
60
+ end
61
+
62
+ def parse_attachments(string)
63
+ string.gsub(attachment_expression).each do |str|
64
+ PagesCore.config.attachment_embedder.new(
65
+ find_attachments(str)
66
+ ).to_html
67
+ end
68
+ end
66
69
 
67
- embed_image(id, size: size, class_name: class_name)
70
+ def parse_files(string)
71
+ string.gsub(file_expression).each do |str|
72
+ PagesCore.config.attachment_embedder.new(
73
+ find_files(str).map(&:attachment)
74
+ ).to_html
68
75
  end
69
76
  end
70
77
 
71
- def image_caption(image)
72
- return unless image.caption?
73
- content_tag(:figcaption, image.caption)
78
+ def parse_images(string)
79
+ PagesCore::ImageEmbedder.new(string).embed
74
80
  end
75
81
 
76
- def image_class_name(image)
77
- if image.size.x == image.size.y
78
- "square"
79
- elsif image.size.x > image.size.y
80
- "landscape"
81
- else
82
- "portrait"
82
+ def shorten(string)
83
+ unless @options[:shorten] && string.length > @options[:shorten]
84
+ return string
83
85
  end
86
+
87
+ "#{string[0..@options[:shorten]]}..."
84
88
  end
85
89
  end
86
90
  end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ class ImageEmbedder
5
+ include ActionView::Helpers::AssetTagHelper
6
+ include PagesCore::ImagesHelper
7
+ include Rails.application.routes.url_helpers
8
+
9
+ def initialize(string)
10
+ @string = string
11
+ end
12
+
13
+ def embed
14
+ parse_images(@string)
15
+ end
16
+
17
+ private
18
+
19
+ def image_expression
20
+ /\[image:(\d+)([^\]]*)?\]/
21
+ end
22
+
23
+ def embed_image(id, size:, class_name:, link:)
24
+ image = Image.find(id).localize(I18n.locale)
25
+ class_name = ["image", image_class_name(image), class_name].compact
26
+ image_tag = dynamic_image_tag(image,
27
+ size: size, crop: false, upscale: false)
28
+ tag.figure((link ? link_to(image_tag, link) : image_tag) +
29
+ image_caption(image), class: class_name)
30
+ rescue ActiveRecord::RecordNotFound
31
+ nil
32
+ end
33
+
34
+ def embed_image_size(str)
35
+ if str =~ /size="(\d*x\d*)"/
36
+ Regexp.last_match(1)
37
+ else
38
+ "2000x2000"
39
+ end
40
+ end
41
+
42
+ def image_caption(image)
43
+ return unless image.caption?
44
+
45
+ tag.figcaption(image.caption)
46
+ end
47
+
48
+ def image_class_name(image)
49
+ if image.size.x == image.size.y
50
+ "square"
51
+ elsif image.size.x > image.size.y
52
+ "landscape"
53
+ else
54
+ "portrait"
55
+ end
56
+ end
57
+
58
+ def link_to(content, href)
59
+ tag.a(content, href: href)
60
+ end
61
+
62
+ def parse_image(str)
63
+ id = str.match(image_expression)[1]
64
+ options = str.match(image_expression)[2]
65
+ class_name = (Regexp.last_match(1) if options =~ /class="([\s\-\w]+)"/)
66
+ link = (Regexp.last_match(1) if options =~ /link="([^"]+)"/)
67
+ embed_image(id,
68
+ size: embed_image_size(options),
69
+ class_name: class_name,
70
+ link: link)
71
+ end
72
+
73
+ def parse_images(string)
74
+ string.gsub(image_expression).each do |str|
75
+ parse_image(str)
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ class LinkRenderer < WillPaginate::ActionView::LinkRenderer
5
+ def previous_page
6
+ num = @collection.current_page > 1 &&
7
+ @collection.current_page - 1
8
+ previous_or_next_page(num, "Previous", "previous")
9
+ end
10
+
11
+ def next_page
12
+ num = @collection.current_page < total_pages &&
13
+ @collection.current_page + 1
14
+ previous_or_next_page(num, "Next", "next")
15
+ end
16
+ end
17
+ end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Admin
4
4
  module AdminHelper
@@ -1,34 +1,30 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Admin
4
4
  module MenuHelper
5
5
  def header_tabs(group)
6
- content_tag :ul, class: group.to_s do
7
- menu_items_for(group).map do |item|
8
- content_tag :li do
6
+ tag.ul(class: group.to_s) do
7
+ safe_join(menu_items_for(group).map do |item|
8
+ tag.li do
9
9
  path = instance_eval(&item.path)
10
- link_to(
11
- item.label,
12
- path,
13
- class: (current_menu_item?(item) ? "current" : "")
14
- )
10
+ link_to(item.label,
11
+ path,
12
+ class: (current_menu_item?(item) ? "current" : ""))
15
13
  end
16
- end.join.html_safe
14
+ end)
17
15
  end
18
16
  end
19
17
 
20
18
  protected
21
19
 
22
20
  def menu_item_candidates
23
- routes = Rails.application.routes
24
- menu_items
25
- .map { |item| [item, routes.recognize_path(instance_eval(&item.path))] }
26
- .select { |_item, routing| routing[:controller] == params[:controller] }
21
+ routed_menu_items
22
+ .select { |_, routing| routing[:controller] == params[:controller] }
27
23
  end
28
24
 
29
- def find_menu_candidate
25
+ def find_menu_candidate(&block)
30
26
  menu_item_candidates
31
- .select { |item, routing| yield(item, routing) }
27
+ .select { |item, routing| block.call(item, routing) }
32
28
  .try(&:first)
33
29
  .try(&:first)
34
30
  end
@@ -61,5 +57,12 @@ module Admin
61
57
  item.options[:if] && !instance_eval(&item.options[:if])
62
58
  end
63
59
  end
60
+
61
+ def routed_menu_items
62
+ routes = Rails.application.routes
63
+ menu_items
64
+ .select { |item| item.path.is_a?(Proc) }
65
+ .map { |item| [item, routes.recognize_path(instance_eval(&item.path))] }
66
+ end
64
67
  end
65
68
  end
@@ -1,31 +1,8 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module Admin
4
4
  module PagesHelper
5
- def page_block_field(form, block_name, block_options)
6
- if block_options[:size] == :field
7
- labelled_field(
8
- form.text_field(
9
- block_name,
10
- class: ['text', block_options[:class]].join(" "),
11
- placeholder: block_options[:placeholder]
12
- ),
13
- block_options[:title],
14
- errors: form.object.errors[block_name],
15
- description: block_options[:description]
16
- )
17
- else
18
- labelled_field form.text_area(
19
- block_name,
20
- rows: (block_options[:size] == :large ? 15 : 5),
21
- class: ['rich', block_options[:class]].join(" "),
22
- placeholder: block_options[:placeholder]
23
- ),
24
- block_options[:title],
25
- errors: form.object.errors[block_name],
26
- description: block_options[:description]
27
- end
28
- end
5
+ include PagesCore::Admin::PageBlocksHelper
29
6
 
30
7
  def available_templates_for_select
31
8
  PagesCore::Templates.names.collect do |template|
@@ -37,23 +14,39 @@ module Admin
37
14
  end
38
15
  end
39
16
 
17
+ def file_embed_code(file)
18
+ "[file:#{file.id}]"
19
+ end
20
+
21
+ def news_section_name(page, news_pages)
22
+ if news_pages.select { |p| p.name == page.name }.length > 1
23
+ page_name(page, include_parents: true)
24
+ else
25
+ page_name(page)
26
+ end
27
+ end
28
+
29
+ def page_authors(page)
30
+ ([page.author] + User.activated).uniq
31
+ end
32
+
40
33
  def page_name(page, options = {})
41
34
  page_names = if options[:include_parents]
42
- [page.ancestors, page].flatten
35
+ page.self_and_ancestors.reverse
43
36
  else
44
37
  [page]
45
38
  end
46
39
  safe_join(
47
40
  page_names.map { |p| page_name_with_fallback(p) },
48
- " &raquo; ".html_safe
41
+ raw(" &raquo; ")
49
42
  )
50
43
  end
51
44
 
52
45
  def publish_time(time)
53
- if time.year != Time.now.year
46
+ if time.year != Time.zone.now.year
54
47
  time.strftime("on %b %d %Y at %H:%M")
55
- elsif time.to_date != Time.now.to_date
56
- time.strftime("on %b %Y at %H:%M")
48
+ elsif time.to_date != Time.zone.now.to_date
49
+ time.strftime("on %b %d at %H:%M")
57
50
  else
58
51
  time.strftime("at %H:%M")
59
52
  end
@@ -61,6 +54,10 @@ module Admin
61
54
 
62
55
  private
63
56
 
57
+ def nested_array?(array)
58
+ array.present? && array.first.is_a?(Array)
59
+ end
60
+
64
61
  def page_name_with_fallback(page)
65
62
  if page.name?
66
63
  page.name.to_s
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module ApplicationHelper #:nodoc:
4
4
  include PagesCore::ApplicationHelper
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module FrontendHelper #:nodoc:
4
4
  include PagesCore::FrontendHelper
@@ -1,64 +1,57 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
4
  module Admin
5
5
  module AdminHelper
6
+ include PagesCore::Admin::ContentTabsHelper
7
+ include PagesCore::Admin::DateRangeHelper
8
+ include PagesCore::Admin::ImageUploadsHelper
9
+ include PagesCore::Admin::PageJsonHelper
6
10
  include PagesCore::Admin::LabelledFieldHelper
7
11
  include PagesCore::Admin::TagEditorHelper
8
12
 
9
- # Generates tags for an editable dynamic image.
10
- def editable_dynamic_image_tag(image, options = {})
11
- preview_url = uncropped_dynamic_image_url(image, size: "800x")
12
- link_to(
13
- dynamic_image_tag(image, options), admin_image_path(image),
14
- class: "editableImage",
15
- data: { "preview-url" => preview_url }
16
- )
13
+ attr_writer :page_title, :page_description, :page_description_class,
14
+ :page_description_links
15
+
16
+ def add_body_class(class_name)
17
+ @body_classes ||= []
18
+ @body_classes << class_name
17
19
  end
18
20
 
19
21
  def body_classes
20
22
  classes = @body_classes || []
21
- classes << controller.class.underscore
22
- classes << "#{controller.action_name}_action"
23
- classes << "with_sidebar" if content_for?(:sidebar)
24
23
  classes << "with_notice" if flash[:notice]
25
- classes.reverse.join(" ")
24
+ classes
26
25
  end
27
26
 
28
- def add_body_class(class_name)
29
- @body_classes ||= []
30
- @body_classes << class_name
27
+ def rich_text_area_tag(name, content = nil, options = {})
28
+ react_component("RichTextArea",
29
+ options.merge(id: sanitize_to_id(name),
30
+ name: name,
31
+ value: content))
31
32
  end
32
33
 
33
- attr_accessor :page_title
34
- attr_accessor :page_description
35
- attr_accessor :page_description_class
36
- attr_accessor :page_description_links
34
+ def link_separator
35
+ safe_join [" ", tag.span("|", class: "separator"), " "]
36
+ end
37
37
 
38
- def page_title(title = nil)
39
- if title
40
- ActiveSupport::Deprecation.warn(
41
- "Setting page title with page_title is deprecated, use page_title="
42
- )
43
- @page_title = title
44
- else
45
- @page_title
38
+ def deprecate_page_description_args(string = nil, class_name = nil)
39
+ if class_name
40
+ ActiveSupport::Deprecation.warn("Setting class through " \
41
+ "page_description is deprecated, " \
42
+ "use page_description_class=")
46
43
  end
44
+ return unless string
45
+
46
+ ActiveSupport::Deprecation.warn("Setting description with " \
47
+ "page_description is deprecated, " \
48
+ "use page_description=")
47
49
  end
48
50
 
49
51
  def page_description(string = nil, class_name = nil)
50
- if class_name
51
- ActiveSupport::Deprecation.warn(
52
- "Setting page description class through page_description " \
53
- "is deprecated, use page_description_class="
54
- )
55
- @page_description_class = class_name
56
- end
52
+ deprecate_page_description_args(string, class_name)
53
+ @page_description_class = class_name if class_name
57
54
  if string
58
- ActiveSupport::Deprecation.warn(
59
- "Setting description with page_description is deprecated, " \
60
- "use page_description="
61
- )
62
55
  @page_description = string
63
56
  else
64
57
  @page_description
@@ -66,42 +59,22 @@ module PagesCore
66
59
  end
67
60
 
68
61
  def page_description_links(links = nil)
69
- if links
70
- ActiveSupport::Deprecation.warn(
71
- "Setting page description_links with page_description_links " \
72
- "is deprecated, use page_description_links="
73
- )
74
- @page_description_links = links
75
- else
76
- @page_description_links
77
- end
78
- end
62
+ return @page_description_links unless links
79
63
 
80
- def sidebar(string = "", &block)
81
- @sidebar = string
82
- return unless block_given?
83
- @sidebar += capture(&block)
64
+ ActiveSupport::Deprecation.warn(
65
+ "Setting page description_links with page_description_links " \
66
+ "is deprecated, use page_description_links="
67
+ )
68
+ @page_description_links = links
84
69
  end
85
70
 
86
- def content_tab(name, options = {}, &block)
87
- @content_tabs ||= []
88
- return unless block_given?
89
- tab = {
90
- name: name.to_s.humanize,
91
- key: name.to_s.underscore.gsub(/[\s]+/, "_"),
92
- options: options,
93
- content: capture(&block)
94
- }
95
- @content_tabs << tab
96
- tab_output = "<div class=\"content_tab\" " \
97
- "id=\"content-tab-#{tab[:key]}\">"
98
- tab_output += tab[:content]
99
- tab_output += "</div>"
100
- tab_output.html_safe
101
- end
71
+ def page_title(title = nil)
72
+ return @page_title unless title
102
73
 
103
- def link_separator
104
- ' <span class="separator">|</span> '.html_safe
74
+ ActiveSupport::Deprecation.warn(
75
+ "Setting page title with page_title is deprecated, use page_title="
76
+ )
77
+ @page_title = title
105
78
  end
106
79
  end
107
80
  end