pages_core 3.4.3 → 3.5.1

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 (215) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +81 -15
  3. data/Rakefile +1 -1
  4. data/app/assets/javascripts/pages/admin.es6.jsx +19 -0
  5. data/app/assets/javascripts/pages/admin/components.es6.jsx +1 -0
  6. data/app/assets/javascripts/pages/admin/components/page_tree.es6.jsx +330 -0
  7. data/app/assets/javascripts/pages/admin/components/page_tree_actions.es6.jsx +8 -0
  8. data/app/assets/javascripts/pages/admin/components/page_tree_node.es6.jsx +374 -0
  9. data/app/assets/javascripts/pages/admin/components/page_tree_store.es6.jsx +161 -0
  10. data/app/assets/javascripts/pages/admin/features/content_tabs.es6.jsx +63 -0
  11. data/app/assets/javascripts/pages/admin/features/edit_page.es6.jsx +141 -0
  12. data/app/assets/javascripts/pages/admin/features/editable_image.es6.jsx +145 -0
  13. data/app/assets/javascripts/pages/admin/features/modal.es6.jsx +90 -0
  14. data/app/assets/javascripts/pages/admin/features/page_images.es6.jsx +338 -0
  15. data/app/assets/javascripts/pages/admin/features/rich_text.es6.jsx +124 -0
  16. data/app/assets/javascripts/pages/admin/features/tag_editor.es6.jsx +160 -0
  17. data/app/assets/javascripts/pages/admin/lib/ajax_extensions.es6.jsx +21 -0
  18. data/app/assets/javascripts/pages/admin/lib/center_on_screen.es6.jsx +22 -0
  19. data/app/assets/javascripts/pages/admin/lib/tree.es6.jsx +294 -0
  20. data/app/assets/javascripts/pages/login_form.es6.jsx +21 -0
  21. data/app/assets/stylesheets/pages/admin.scss +148 -0
  22. data/app/assets/stylesheets/pages/admin/components/buttons.scss +5 -0
  23. data/app/assets/stylesheets/pages/admin/{editable_image.css.erb → components/editable_image.scss} +7 -8
  24. data/app/assets/stylesheets/pages/admin/components/forms.scss +71 -0
  25. data/app/assets/stylesheets/pages/admin/components/header.scss +169 -0
  26. data/app/assets/stylesheets/pages/admin/{images.css.scss.erb → components/images.scss} +6 -11
  27. data/app/assets/stylesheets/pages/admin/components/layout.scss +44 -0
  28. data/app/assets/stylesheets/pages/admin/components/links.scss +43 -0
  29. data/app/assets/stylesheets/pages/admin/components/list_table.scss +58 -0
  30. data/app/assets/stylesheets/pages/admin/{login.css.scss.erb → components/login.scss} +1 -1
  31. data/app/assets/stylesheets/pages/admin/{modal.css.erb → components/modal.scss} +3 -2
  32. data/app/assets/stylesheets/pages/admin/components/page_tree.scss +173 -0
  33. data/app/assets/stylesheets/pages/admin/{pagination.css.scss → components/pagination.scss} +13 -4
  34. data/app/assets/stylesheets/pages/admin/components/sidebar.scss +25 -0
  35. data/app/assets/stylesheets/pages/admin/{tag_editor.css.scss.erb → components/tag_editor.scss} +6 -0
  36. data/app/assets/stylesheets/pages/admin/components/textarea.scss +76 -0
  37. data/app/assets/stylesheets/pages/admin/controllers/pages.scss +196 -0
  38. data/app/assets/stylesheets/pages/admin/controllers/{users.css.erb → users.scss} +0 -0
  39. data/app/assets/stylesheets/pages/admin/mixins/breakpoints.scss +21 -0
  40. data/app/assets/stylesheets/pages/admin/mixins/clearfix.scss +7 -0
  41. data/app/assets/stylesheets/pages/admin/mixins/gradients.scss +7 -0
  42. data/app/assets/stylesheets/pages/admin/{print.css.erb → print.scss} +0 -0
  43. data/app/assets/stylesheets/pages/admin/vars.scss +8 -0
  44. data/app/controllers/admin/invites_controller.rb +10 -6
  45. data/app/controllers/admin/page_files_controller.rb +6 -8
  46. data/app/controllers/admin/page_images_controller.rb +14 -19
  47. data/app/controllers/admin/pages_controller.rb +44 -97
  48. data/app/controllers/admin/password_resets_controller.rb +7 -2
  49. data/app/controllers/concerns/pages_core/add_comments_controller.rb +67 -0
  50. data/app/controllers/concerns/pages_core/admin/news_page_controller.rb +58 -0
  51. data/app/controllers/concerns/pages_core/authentication.rb +1 -1
  52. data/app/controllers/concerns/pages_core/exception_handler.rb +44 -21
  53. data/app/controllers/concerns/pages_core/policies_helper.rb +10 -6
  54. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +43 -0
  55. data/app/controllers/concerns/pages_core/process_titler.rb +2 -2
  56. data/app/controllers/concerns/pages_core/rss_controller.rb +25 -0
  57. data/app/controllers/concerns/pages_core/search_pages_controller.rb +40 -0
  58. data/app/controllers/errors_controller.rb +14 -2
  59. data/app/controllers/pages_core/admin_controller.rb +7 -5
  60. data/app/controllers/pages_core/frontend/page_files_controller.rb +5 -7
  61. data/app/controllers/pages_core/frontend/pages_controller.rb +41 -219
  62. data/app/controllers/pages_core/frontend_controller.rb +8 -2
  63. data/app/controllers/pages_core/sitemaps_controller.rb +5 -4
  64. data/app/formatters/pages_core/html_formatter.rb +33 -23
  65. data/app/helpers/admin/menu_helper.rb +12 -9
  66. data/app/helpers/admin/pages_helper.rb +40 -28
  67. data/app/helpers/pages_core/admin/admin_helper.rb +58 -56
  68. data/app/helpers/pages_core/admin/labelled_field_helper.rb +6 -7
  69. data/app/helpers/pages_core/admin/tag_editor_helper.rb +11 -9
  70. data/app/helpers/pages_core/application_helper.rb +13 -26
  71. data/app/helpers/pages_core/form_builder.rb +71 -134
  72. data/app/helpers/pages_core/head_tags_helper.rb +26 -168
  73. data/app/helpers/pages_core/images_helper.rb +3 -3
  74. data/app/helpers/pages_core/meta_tags_helper.rb +96 -0
  75. data/app/helpers/pages_core/open_graph_tags_helper.rb +51 -0
  76. data/app/helpers/pages_core/page_path_helper.rb +40 -0
  77. data/app/mailers/admin_mailer.rb +14 -14
  78. data/app/models/autopublisher.rb +2 -2
  79. data/app/models/category.rb +8 -8
  80. data/app/models/concerns/pages_core/has_roles.rb +2 -2
  81. data/app/models/concerns/pages_core/humanizable_param.rb +5 -5
  82. data/app/models/concerns/pages_core/page_model/autopublishable.rb +25 -0
  83. data/app/models/concerns/pages_core/page_model/commentable.rb +29 -0
  84. data/app/models/concerns/pages_core/page_model/images.rb +50 -0
  85. data/app/models/concerns/pages_core/page_model/localizable.rb +29 -0
  86. data/app/models/concerns/pages_core/page_model/pathable.rb +115 -0
  87. data/app/models/concerns/pages_core/page_model/redirectable.rb +36 -0
  88. data/app/models/concerns/pages_core/page_model/searchable.rb +41 -0
  89. data/app/models/concerns/pages_core/page_model/sortable.rb +54 -0
  90. data/app/models/concerns/pages_core/page_model/status.rb +50 -0
  91. data/app/models/concerns/pages_core/page_model/templateable.rb +82 -0
  92. data/app/models/concerns/pages_core/page_model/tree.rb +108 -0
  93. data/app/models/page.rb +30 -212
  94. data/app/models/page_builder.rb +4 -6
  95. data/app/models/page_category.rb +7 -0
  96. data/app/models/page_comment.rb +1 -1
  97. data/app/models/page_file.rb +4 -6
  98. data/app/models/page_image.rb +6 -7
  99. data/app/models/page_path.rb +46 -0
  100. data/app/models/password_reset_token.rb +5 -5
  101. data/app/models/role.rb +1 -1
  102. data/app/models/tag.rb +14 -16
  103. data/app/models/tagging.rb +2 -1
  104. data/app/models/user.rb +6 -7
  105. data/app/policies/page_policy.rb +8 -4
  106. data/app/policies/user_policy.rb +1 -1
  107. data/app/serializers/page_tree_serializer.rb +15 -0
  108. data/app/views/admin/invites/new.html.erb +2 -1
  109. data/app/views/admin/invites/show.html.erb +3 -4
  110. data/app/views/admin/pages/_edit_comments.html.erb +22 -6
  111. data/app/views/admin/pages/_edit_content.html.erb +4 -2
  112. data/app/views/admin/pages/_edit_images.html.erb +86 -75
  113. data/app/views/admin/pages/_edit_metadata.html.erb +22 -0
  114. data/app/views/admin/pages/_edit_options.html.erb +23 -15
  115. data/app/views/admin/pages/_pagelisting.html.erb +6 -6
  116. data/app/views/admin/pages/edit.html.erb +11 -6
  117. data/app/views/admin/pages/index.html.erb +12 -53
  118. data/app/views/admin/pages/new.html.erb +3 -3
  119. data/app/views/admin/pages/news.html.erb +1 -1
  120. data/app/views/admin_mailer/invite.text.erb +1 -1
  121. data/app/views/admin_mailer/password_reset.text.erb +1 -1
  122. data/app/views/errors/422.html.erb +7 -0
  123. data/app/views/errors/500_critical.html.erb +1 -1
  124. data/app/views/layouts/admin.html.erb +36 -32
  125. data/app/views/layouts/admin/_header.html.erb +2 -2
  126. data/config/locales/en.yml +38 -1
  127. data/config/routes.rb +40 -23
  128. data/db/migrate/20111219033112_create_pages_tables.rb +25 -29
  129. data/db/migrate/20121010055412_drop_removed_tables.rb +3 -3
  130. data/db/migrate/20130823133208_update_page_redirect_to.rb +0 -13
  131. data/db/migrate/20140203183900_create_roles.rb +5 -2
  132. data/db/migrate/20140920231700_convert_images_to_dis.rb +4 -2
  133. data/db/migrate/20150401131300_localize_images.rb +7 -8
  134. data/db/migrate/20151002174800_create_page_paths.rb +10 -0
  135. data/db/migrate/20151021103400_drop_binaries_table.rb +7 -0
  136. data/db/migrate/20151204151000_remove_page_content_order.rb +5 -0
  137. data/db/migrate/20160330220900_rename_pages_categories.rb +6 -0
  138. data/db/migrate/20160405202700_change_localization_limit.rb +9 -0
  139. data/lib/pages_core.rb +22 -27
  140. data/lib/pages_core/admin_menu_item.rb +16 -3
  141. data/lib/pages_core/archive_finder.rb +40 -13
  142. data/lib/pages_core/cache_sweeper.rb +72 -45
  143. data/lib/pages_core/configuration.rb +2 -2
  144. data/lib/pages_core/configuration/base.rb +4 -8
  145. data/lib/pages_core/configuration/pages.rb +6 -3
  146. data/lib/pages_core/engine.rb +23 -1
  147. data/lib/pages_core/extensions.rb +2 -2
  148. data/lib/pages_core/file_embedder.rb +40 -0
  149. data/lib/pages_core/page_path_constraint.rb +23 -0
  150. data/lib/pages_core/pages_plugin.rb +11 -0
  151. data/lib/pages_core/paginates.rb +3 -3
  152. data/lib/pages_core/plugin.rb +14 -8
  153. data/lib/pages_core/templates.rb +6 -6
  154. data/lib/pages_core/templates/block_configuration.rb +1 -1
  155. data/lib/pages_core/templates/configuration.rb +23 -24
  156. data/lib/pages_core/templates/configuration_handler.rb +1 -1
  157. data/lib/pages_core/templates/configuration_proxy.rb +7 -11
  158. data/lib/pages_core/templates/template_configuration.rb +55 -61
  159. data/lib/pages_core/version.rb +1 -1
  160. data/lib/rails/generators/pages_core/install/install_generator.rb +22 -48
  161. data/lib/rails/generators/pages_core/install/templates/page_templates_initializer.rb +1 -1
  162. data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +6 -3
  163. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +4 -1
  164. data/lib/rails/generators/pages_core/rspec/templates/factories.rb +1 -1
  165. data/lib/tasks/pages.rake +4 -4
  166. data/lib/tasks/pages/page_paths.rake +12 -0
  167. data/template.rb +2 -2
  168. data/vendor/assets/javascripts/reflux.min.js +1 -0
  169. metadata +173 -85
  170. data/app/assets/images/pages/admin/description-bg.gif +0 -0
  171. data/app/assets/images/pages/admin/drag-handle.gif +0 -0
  172. data/app/assets/images/pages/admin/flash-error-bg.gif +0 -0
  173. data/app/assets/images/pages/admin/formelement-bg.gif +0 -0
  174. data/app/assets/images/pages/admin/header-tab-current-bg.gif +0 -0
  175. data/app/assets/images/pages/admin/list-table-td-bg.gif +0 -0
  176. data/app/assets/images/pages/admin/sidebar-bg.gif +0 -0
  177. data/app/assets/images/pages/admin/textarea_controls.gif +0 -0
  178. data/app/assets/javascripts/pages/admin.js.coffee +0 -54
  179. data/app/assets/javascripts/pages/admin/controllers/base.js.coffee +0 -4
  180. data/app/assets/javascripts/pages/admin/controllers/pages_controller.js.coffee +0 -139
  181. data/app/assets/javascripts/pages/admin/controllers/users_controller.js.coffee +0 -9
  182. data/app/assets/javascripts/pages/admin/features/content_tabs.js.coffee +0 -47
  183. data/app/assets/javascripts/pages/admin/features/editable_image.js.coffee.erb +0 -122
  184. data/app/assets/javascripts/pages/admin/features/modal.js.coffee +0 -66
  185. data/app/assets/javascripts/pages/admin/features/page_images.js +0 -329
  186. data/app/assets/javascripts/pages/admin/features/rich_text.js.coffee +0 -40
  187. data/app/assets/javascripts/pages/admin/features/tag_editor.js +0 -159
  188. data/app/assets/javascripts/pages/admin/lib/ajax_extensions.js.coffee +0 -17
  189. data/app/assets/javascripts/pages/admin/lib/center_on_screen.js.coffee +0 -21
  190. data/app/assets/javascripts/pages/admin/lib/jrichtextarea.js +0 -57
  191. data/app/assets/javascripts/pages/login_form.js.coffee +0 -17
  192. data/app/assets/stylesheets/pages/admin.css.erb +0 -404
  193. data/app/assets/stylesheets/pages/admin/buttons.css.erb +0 -5
  194. data/app/assets/stylesheets/pages/admin/controllers/artists.css.erb +0 -94
  195. data/app/assets/stylesheets/pages/admin/controllers/files.css.erb +0 -58
  196. data/app/assets/stylesheets/pages/admin/controllers/pages.css.scss.erb +0 -178
  197. data/app/assets/stylesheets/pages/admin/forms.css.scss.erb +0 -73
  198. data/app/assets/stylesheets/pages/admin/header.css.erb +0 -129
  199. data/app/assets/stylesheets/pages/admin/links.css.erb +0 -34
  200. data/app/assets/stylesheets/pages/admin/list_table.css.erb +0 -56
  201. data/app/assets/stylesheets/pages/admin/sidebar.css.erb +0 -39
  202. data/app/assets/stylesheets/pages/admin/sortable_images.css.erb +0 -18
  203. data/app/assets/stylesheets/pages/admin/textarea.css.erb +0 -55
  204. data/app/models/concerns/pages_core/page_tree.rb +0 -85
  205. data/app/models/concerns/pages_core/searchable_page.rb +0 -33
  206. data/app/models/concerns/pages_core/templateable.rb +0 -85
  207. data/app/models/localization.rb +0 -27
  208. data/db/migrate/20140515130100_remove_sphinx_deltas.rb +0 -15
  209. data/lib/pages_core/localizable.rb +0 -49
  210. data/lib/pages_core/localizable/active_record_extension.rb +0 -41
  211. data/lib/pages_core/localizable/class_methods.rb +0 -51
  212. data/lib/pages_core/localizable/configuration.rb +0 -50
  213. data/lib/pages_core/localizable/instance_methods.rb +0 -130
  214. data/lib/pages_core/localizable/localizer.rb +0 -72
  215. data/lib/pages_core/localizable/scope_extension.rb +0 -22
@@ -1,34 +0,0 @@
1
- a, a:visited {
2
- color: #1d7195;
3
- text-decoration: underline;
4
- }
5
- a:hover {
6
- color: #193443;
7
- }
8
-
9
- a.create, a.create:visited {
10
- color: #008800;
11
- }
12
- a.create:hover {
13
- color: #004400;
14
- }
15
-
16
-
17
- a.cancel, a.cancel:visited {
18
- color: #dd0000;
19
- }
20
- a.cancel:hover {
21
- color: #880000;
22
- }
23
- a.delete, a.delete:visited {
24
- color: #dd0000;
25
- }
26
- a.delete:hover {
27
- color: #880000;
28
- }
29
-
30
- button a {
31
- padding:5px 0;
32
- color:#000 !important;
33
- text-decoration:none;
34
- }
@@ -1,56 +0,0 @@
1
- table.list {
2
- border-collapse: collapse;
3
- margin: 16px 0;
4
- width: 100%;
5
- }
6
-
7
- table.list td, table.list th {
8
- padding: 8px 16px;
9
- text-align: left;
10
- vertical-align: top;
11
- }
12
-
13
- table.list tr td:first-child, table.list tr th:first-child {
14
- padding-left: 32px;
15
- }
16
- table.list tr td:last-child, table.list tr th:last-child {
17
- padding-right: 32px;
18
- }
19
-
20
-
21
- table.list th {
22
- background: #fff url('<%= asset_path "pages/admin/list-table-td-bg.gif" %>') right bottom repeat-x;
23
- color: #777;
24
- font-weight: bold;
25
- border-bottom: 1px solid #bdbdbd;
26
- }
27
-
28
- table.list td {
29
- border-bottom: 1px solid #ddd;
30
- }
31
-
32
- table.list td.note {
33
- color: #888;
34
- }
35
-
36
- table.list tr.disabled td {
37
- opacity: 0.5;
38
- }
39
-
40
- table.list tr.disabled td:first-child {
41
- background: transparent url('<%= asset_path "pages/admin/list-table-pin-disabled.gif" %>') 14px center no-repeat;
42
- }
43
-
44
- table.list tr.active td:first-child {
45
- background: transparent url('<%= asset_path "pages/admin/list-table-pin-blue.gif" %>') 14px center no-repeat;
46
- }
47
-
48
- table.list .actions {
49
- float: right;
50
- margin-bottom: 2px;
51
- margin-left: 16px;
52
- }
53
-
54
- table.list p {
55
- margin: 0; padding: 0;
56
- }
@@ -1,39 +0,0 @@
1
- body.with_sidebar {
2
- background: #fff url(<%= asset_path 'pages/admin/sidebar-bg.gif' %>) top right repeat-y;
3
- }
4
-
5
- body.with_sidebar #main {
6
- margin-right: 282px;
7
- }
8
-
9
- /* 16px padding accounted for */
10
- #sidebar {
11
- /*
12
- position: absolute;
13
- top: 83px;
14
- right: 16px;
15
- */
16
- float: right;
17
- margin-right: 16px;
18
- width: 250px;
19
- line-height: 1.3;
20
- color: #454545;
21
- }
22
-
23
- #sidebar h2 {
24
- margin: 16px 0 -8px 0;
25
- padding: 0 0 8px 0;
26
- color: #424140;
27
- font-size: 18px;
28
- border-bottom: 1px solid #e0e0e0;
29
- }
30
-
31
- #sidebar ul {
32
- list-style-type: disc;
33
- margin: 1em 0 1em 14px;
34
- padding: 0;
35
- }
36
- #sidebar ul li {
37
- margin: 0;
38
- padding: 0;
39
- }
@@ -1,18 +0,0 @@
1
- .sortable_images {
2
-
3
- }
4
- .sortable_images .image {
5
- border: 1px solid #ddd;
6
- float: left;
7
- margin: 0 8px 8px 0;
8
- padding: 8px;
9
- text-align: center;
10
- }
11
- .sortable_images .image img {
12
- border: 1px solid #ddd;
13
- margin-bottom: 2px;
14
- }
15
- .sortable_images .image:first-child {
16
- border: 1px solid #aa8;
17
- background: #ffe;
18
- }
@@ -1,55 +0,0 @@
1
- textarea.rich {
2
- margin-top: 0px;
3
- width: 100%;
4
- }
5
- .richTextToolbar {
6
- position:relative;
7
- list-style:none;
8
- border:1px solid #d7d7d7;
9
- border-bottom: none;
10
- background-color:#F6F6F6;
11
- margin:0;
12
- padding:0;
13
- padding-right: 20px;
14
- width: 100%;
15
- height:18px;
16
- margin-bottom: 0px;
17
- }
18
-
19
- .richTextToolbar li {
20
- list-style:none;
21
- margin:0;
22
- padding:0;
23
- float:left;
24
- }
25
-
26
- .richTextToolbar li a {
27
- cursor: pointer;
28
- width:24px;
29
- height:16px;
30
- float:left;
31
- display:block;
32
- background-image:url('<%= asset_path "pages/admin/textarea_controls.gif" %>');
33
- border:1px solid #fff;
34
- border-right-color:#d7d7d7;
35
- }
36
-
37
- .richTextToolbar li a:hover {
38
- border-color:#900;
39
- }
40
-
41
- .richTextToolbar .ItalicsButton { background-position: 0 -119px; }
42
- .richTextToolbar .BoldButton { background-position: 0 -102px; }
43
- .richTextToolbar .LinkButton { background-position: 0 0; }
44
- .richTextToolbar .ImageButton { background-position: 0 -170px; }
45
- .richTextToolbar .UnorderedListButton { background-position: 0 -34px; }
46
- .richTextToolbar .OrderedListButton { background-position: 0 -51px; }
47
- .richTextToolbar .QuoteButton { background-position: 0 -68px; }
48
- .richTextToolbar .CodeButton { background-position: 0 -136px; }
49
- .richTextToolbar .HelpButton { background-position: 0 -153px; }
50
- .richTextToolbar .HeadingButton { background-position: 0 -85px; }
51
- .richTextToolbar .EscapeButton { background-position: 0 -306px; }
52
- .richTextToolbar .Heading2Button { background-position: 0 -238px; }
53
- .richTextToolbar .Heading3Button { background-position: 0 -255px; }
54
- .richTextToolbar .Heading4Button { background-position: 0 -272px; }
55
- .richTextToolbar .EmailButton { background-position: 0 -323px; }
@@ -1,85 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module PagesCore
4
- module PageTree
5
- extend ActiveSupport::Concern
6
-
7
- included do
8
- belongs_to :parent,
9
- class_name: "Page",
10
- foreign_key: :parent_page_id,
11
- inverse_of: :children
12
-
13
- has_many :children,
14
- class_name: "Page",
15
- foreign_key: :parent_page_id,
16
- inverse_of: :parent,
17
- dependent: :destroy
18
-
19
- # This must be included after the belongs_to call in order
20
- # to override the .parent method.
21
- include PagesCore::PageTree::InstanceMethods
22
- end
23
-
24
- module ClassMethods
25
- # Returns all root pages
26
- def roots
27
- where(parent_page_id: nil).order("position ASC")
28
- end
29
-
30
- # Returns the first root page
31
- def root
32
- roots.first
33
- end
34
- end
35
-
36
- module InstanceMethods
37
- # Returns list of ancestors, starting from parent until root.
38
- #
39
- # subchild1.ancestors # => [child1, root]
40
- def ancestors
41
- node, nodes = self, []
42
- nodes << node = node.parent while node.parent
43
- nodes
44
- end
45
-
46
- # Finds the page's next sibling. Returns nil if there isn't one.
47
- def next_sibling
48
- return unless siblings.any?
49
- siblings[(siblings.index(self) + 1)...siblings.length].try(&:first)
50
- end
51
-
52
- # Returns the pages parent
53
- def parent
54
- super.try { |node| node.localize(locale) }
55
- end
56
-
57
- # Finds the page's next sibling. Returns nil if there isn't one.
58
- def previous_sibling
59
- return unless siblings.any?
60
- siblings[0...siblings.index(self)].try(&:last)
61
- end
62
-
63
- # Returns the root node of the tree.
64
- def root
65
- self_and_ancestors.last
66
- end
67
-
68
- # Returns ancestors and current node itself.
69
- #
70
- # subchild1.self_and_ancestors # => [subchild1, child1, root]
71
- def self_and_ancestors
72
- [self] + ancestors
73
- end
74
-
75
- # Returns all siblings, including self.
76
- def siblings
77
- if parent
78
- parent.pages
79
- else
80
- self.class.roots.map { |node| node.localize(locale) }
81
- end
82
- end
83
- end
84
- end
85
- end
@@ -1,33 +0,0 @@
1
- module PagesCore
2
- module SearchablePage
3
- extend ActiveSupport::Concern
4
-
5
- def localization_values
6
- localizations.map(&:value)
7
- end
8
-
9
- def category_names
10
- categories.map(&:name)
11
- end
12
-
13
- def comment_names
14
- comments.map(&:name)
15
- end
16
-
17
- def comment_bodies
18
- comments.map(&:body)
19
- end
20
-
21
- def file_names
22
- files.map(&:name)
23
- end
24
-
25
- def file_filenames
26
- files.map(&:filename)
27
- end
28
-
29
- def published
30
- published?
31
- end
32
- end
33
- end
@@ -1,85 +0,0 @@
1
- # encoding: utf-8
2
-
3
- module PagesCore
4
- module Templateable
5
- extend ActiveSupport::Concern
6
-
7
- included do
8
- before_validation :ensure_template
9
- end
10
-
11
- def template_config
12
- PagesCore::Templates::TemplateConfiguration.new(template)
13
- end
14
-
15
- def template
16
- !self[:template].blank? ? self[:template] : inherited_or_default_template
17
- end
18
-
19
- def default_subtemplate
20
- template_config.value(:sub_template) ||
21
- default_template ||
22
- subtemplate_with_postfix ||
23
- singularized_subtemplate ||
24
- template
25
- end
26
-
27
- private
28
-
29
- def singularized_subtemplate
30
- singularized = ActiveSupport::Inflector.singularize(base_template)
31
- return if base_template == singularized
32
- find_template_by_expression(
33
- Regexp.new("^" + Regexp.quote(singularized))
34
- )
35
- end
36
-
37
- def subtemplate_with_postfix
38
- find_template_by_expression(
39
- Regexp.new(
40
- "^" + Regexp.quote(base_template) + "_?(post|page|subpage|item)"
41
- )
42
- )
43
- end
44
-
45
- def base_template
46
- template
47
- .split(/_/)
48
- .reject { |w| %w(index list archive liste arkiv).include?(w) }
49
- .join(" ")
50
- end
51
-
52
- def default_template
53
- configured = PagesCore::Templates.configuration.get(
54
- :default, :template, :value
55
- )
56
- configured if configured != :autodetect
57
- end
58
-
59
- def find_template_by_expression(expr)
60
- PagesCore::Templates
61
- .names
62
- .select { |t| t.match(expr) }
63
- .try(&:first)
64
- end
65
-
66
- def inherited_or_default_template
67
- default_options = PagesCore::Templates.configuration.get(
68
- :default, :template, :options
69
- )
70
- if parent
71
- t = parent.default_subtemplate
72
- elsif default_options && default_options[:root]
73
- t = default_options[:root]
74
- elsif default_template
75
- t = default_template
76
- end
77
- t ||= :index
78
- t.to_s
79
- end
80
-
81
- def ensure_template
82
- self[:template] ||= inherited_or_default_template
83
- end
84
- end
85
- end
@@ -1,27 +0,0 @@
1
- # encoding: utf-8
2
-
3
- class Localization < ActiveRecord::Base
4
- belongs_to :localizable, polymorphic: true
5
-
6
- class << self
7
- def locales
8
- select("DISTINCT locale").map(&:locale)
9
- end
10
-
11
- def names
12
- select("DISTINCT name").map(&:name)
13
- end
14
- end
15
-
16
- def to_s
17
- value || ""
18
- end
19
-
20
- def empty?
21
- to_s.empty?
22
- end
23
-
24
- def translate(locale)
25
- localizable.localizations.where(name: name, locale: locale).first
26
- end
27
- end
@@ -1,15 +0,0 @@
1
- class RemoveSphinxDeltas < ActiveRecord::Migration
2
- def self.up
3
- remove_index :users, name: :delta_index
4
- remove_index :pages, name: :delta_index
5
- remove_column :pages, :delta
6
- remove_column :users, :delta
7
- end
8
-
9
- def self.down
10
- add_index "users", ["delta"], name: "delta_index"
11
- add_index "pages", ["delta"], name: "delta_index"
12
- add_column :users, :delta, :boolean, null: false, default: false
13
- add_column :pages, :delta, :boolean, null: false, default: false
14
- end
15
- end