pages_core 3.12.4 → 3.12.5

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 (108) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/app/assets/builds/pages_core/admin-dist.js +8 -43
  4. data/app/assets/builds/pages_core/admin-dist.js.map +4 -4
  5. data/app/assets/builds/pages_core/admin.css +264 -133
  6. data/app/assets/stylesheets/pages_core/admin/components/attachments.css +3 -4
  7. data/app/assets/stylesheets/pages_core/admin/components/forms.css +17 -16
  8. data/app/assets/stylesheets/pages_core/admin/components/image_editor.css +8 -4
  9. data/app/assets/stylesheets/pages_core/admin/components/image_grid.css +1 -1
  10. data/app/assets/stylesheets/pages_core/admin/components/list_table.css +11 -3
  11. data/app/assets/stylesheets/pages_core/admin/components/modal.css +9 -5
  12. data/app/assets/stylesheets/pages_core/admin/components/page_tree.css +5 -1
  13. data/app/assets/stylesheets/pages_core/admin/components/toast.css +2 -2
  14. data/app/assets/stylesheets/pages_core/admin/controllers/pages.css +4 -2
  15. data/app/assets/stylesheets/pages_core/admin/vars.css +2 -1
  16. data/app/controllers/admin/calendars_controller.rb +2 -2
  17. data/app/controllers/admin/categories_controller.rb +3 -3
  18. data/app/controllers/admin/news_controller.rb +6 -6
  19. data/app/controllers/admin/pages_controller.rb +12 -11
  20. data/app/controllers/admin/users_controller.rb +1 -1
  21. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +15 -17
  22. data/app/controllers/pages_core/admin_controller.rb +2 -2
  23. data/app/controllers/pages_core/base_controller.rb +1 -8
  24. data/app/controllers/pages_core/frontend/pages_controller.rb +13 -5
  25. data/app/controllers/pages_core/frontend_controller.rb +12 -7
  26. data/app/helpers/admin/menu_helper.rb +2 -0
  27. data/app/helpers/admin/pages_helper.rb +1 -4
  28. data/app/helpers/pages_core/admin/admin_helper.rb +0 -1
  29. data/app/helpers/pages_core/admin/content_tabs_helper.rb +9 -2
  30. data/app/helpers/pages_core/application_helper.rb +2 -3
  31. data/app/helpers/pages_core/frontend_helper.rb +1 -1
  32. data/app/helpers/pages_core/head_tags_helper.rb +15 -46
  33. data/app/helpers/pages_core/images_helper.rb +76 -21
  34. data/app/helpers/pages_core/locales_helper.rb +9 -0
  35. data/app/helpers/pages_core/open_graph_tags_helper.rb +3 -5
  36. data/app/helpers/pages_core/page_path_helper.rb +1 -1
  37. data/app/javascript/components/Attachments/Attachment.tsx +55 -52
  38. data/app/javascript/components/Attachments/AttachmentEditor.tsx +45 -50
  39. data/app/javascript/components/Attachments/Placeholder.tsx +1 -2
  40. data/app/javascript/components/Attachments.jsx +69 -57
  41. data/app/javascript/components/DateRangeSelect.jsx +94 -54
  42. data/app/javascript/components/EditableImage.tsx +20 -16
  43. data/app/javascript/components/FileUploadButton.tsx +12 -12
  44. data/app/javascript/components/ImageCropper/FocalPoint.tsx +22 -20
  45. data/app/javascript/components/ImageCropper/Image.tsx +20 -16
  46. data/app/javascript/components/ImageCropper/Toolbar.tsx +35 -27
  47. data/app/javascript/components/ImageCropper/useCrop.ts +105 -91
  48. data/app/javascript/components/ImageCropper.tsx +34 -25
  49. data/app/javascript/components/ImageEditor/Form.tsx +32 -43
  50. data/app/javascript/components/ImageEditor.tsx +29 -21
  51. data/app/javascript/components/ImageGrid/DragElement.tsx +6 -4
  52. data/app/javascript/components/ImageGrid/GridImage.tsx +56 -52
  53. data/app/javascript/components/ImageGrid/Placeholder.tsx +1 -1
  54. data/app/javascript/components/ImageGrid.jsx +132 -101
  55. data/app/javascript/components/ImageUploader.tsx +59 -55
  56. data/app/javascript/components/Modal.tsx +2 -4
  57. data/app/javascript/components/PageDates.jsx +25 -20
  58. data/app/javascript/components/PageFiles.jsx +7 -5
  59. data/app/javascript/components/PageImages.tsx +9 -7
  60. data/app/javascript/components/PageTree/Draggable.tsx +46 -40
  61. data/app/javascript/components/PageTree/Node.tsx +111 -95
  62. data/app/javascript/components/PageTree/types.ts +9 -9
  63. data/app/javascript/components/PageTree.tsx +44 -29
  64. data/app/javascript/components/RichTextArea.jsx +51 -37
  65. data/app/javascript/components/RichTextToolbarButton.tsx +8 -5
  66. data/app/javascript/components/TagEditor/AddTagForm.tsx +11 -10
  67. data/app/javascript/components/TagEditor/Tag.tsx +10 -8
  68. data/app/javascript/components/TagEditor.tsx +15 -10
  69. data/app/javascript/components/Toast.tsx +3 -7
  70. data/app/javascript/components/drag/draggedOrder.ts +16 -15
  71. data/app/javascript/components/drag/types.ts +12 -12
  72. data/app/javascript/components/drag/useDragCollection.ts +36 -42
  73. data/app/javascript/components/drag/useDragUploader.ts +3 -2
  74. data/app/javascript/components/drag.ts +5 -4
  75. data/app/javascript/controllers/LoginController.ts +0 -1
  76. data/app/javascript/controllers/MainController.ts +6 -2
  77. data/app/javascript/controllers/PageOptionsController.js +7 -2
  78. data/app/javascript/features/RichText.tsx +9 -7
  79. data/app/javascript/index.ts +5 -3
  80. data/app/javascript/lib/Tree.ts +27 -24
  81. data/app/javascript/lib/copyToClipboard.ts +5 -4
  82. data/app/javascript/lib/readyHandler.ts +4 -4
  83. data/app/javascript/lib/request.ts +7 -3
  84. data/app/javascript/stores/useModalStore.ts +3 -3
  85. data/app/javascript/stores/useToastStore.ts +14 -12
  86. data/app/javascript/types.ts +22 -22
  87. data/app/models/concerns/pages_core/page_model/templateable.rb +1 -1
  88. data/app/views/admin/calendars/show.html.erb +1 -1
  89. data/app/views/admin/news/index.html.erb +1 -1
  90. data/app/views/admin/pages/_edit_files.html.erb +1 -1
  91. data/app/views/admin/pages/_edit_images.html.erb +1 -1
  92. data/app/views/admin/pages/_list_item.html.erb +1 -1
  93. data/app/views/admin/pages/_search_bar.html.erb +1 -1
  94. data/app/views/admin/pages/deleted.html.erb +2 -2
  95. data/app/views/admin/pages/edit.html.erb +3 -3
  96. data/app/views/admin/pages/index.html.erb +4 -4
  97. data/app/views/admin/pages/new.html.erb +1 -1
  98. data/app/views/admin/pages/search.html.erb +3 -3
  99. data/app/views/feeds/pages.rss.builder +2 -2
  100. data/app/views/layouts/admin/_page_header.html.erb +4 -4
  101. data/app/views/layouts/admin.html.erb +1 -2
  102. data/config/locales/en.yml +1 -0
  103. data/lib/pages_core/pages_plugin.rb +5 -3
  104. data/lib/rails/generators/pages_core/frontend/templates/application.html.erb +15 -13
  105. data/lib/tasks/pages/reports.rake +26 -0
  106. metadata +32 -4
  107. data/app/helpers/pages_core/admin/deprecated_admin_helper.rb +0 -40
  108. data/app/views/pages_core/_google_analytics.html.erb +0 -8
@@ -7,9 +7,9 @@ form {
7
7
  margin: 16px 0;
8
8
  padding: 0;
9
9
 
10
- & input[type=text],
11
- & input[type=password],
12
- & input[type=email],
10
+ & input[type="text"],
11
+ & input[type="password"],
12
+ & input[type="email"],
13
13
  & textarea {
14
14
  transition: border-color 150ms ease-out;
15
15
  }
@@ -41,9 +41,9 @@ form {
41
41
  }
42
42
 
43
43
  & .field-with-warning {
44
- & input[type=text],
45
- & input[type=password],
46
- & input[type=email],
44
+ & input[type="text"],
45
+ & input[type="password"],
46
+ & input[type="email"],
47
47
  & textarea {
48
48
  border-color: var(--red-light);
49
49
  }
@@ -79,8 +79,8 @@ form {
79
79
  }
80
80
  }
81
81
 
82
- & input[type=text],
83
- & input[type=password] {
82
+ & input[type="text"],
83
+ & input[type="password"] {
84
84
  width: 100%;
85
85
  max-width: none;
86
86
  }
@@ -96,7 +96,7 @@ form {
96
96
  display: inline-block;
97
97
  }
98
98
 
99
- & input[type=text] {
99
+ & input[type="text"] {
100
100
  display: inline;
101
101
  width: auto;
102
102
  min-width: auto;
@@ -139,11 +139,12 @@ form {
139
139
  display: table;
140
140
  padding: 1px;
141
141
  padding-right: 22px;
142
- background: transparent url("pages/admin/warning-icon.gif") right 5px no-repeat;
142
+ background: transparent url("pages/admin/warning-icon.gif") right 5px
143
+ no-repeat;
143
144
  }
144
145
 
145
- input[type=text],
146
- input[type=password],
146
+ input[type="text"],
147
+ input[type="password"],
147
148
  textarea {
148
149
  width: 100%;
149
150
  max-width: 450px;
@@ -165,10 +166,10 @@ textarea {
165
166
  }
166
167
  }
167
168
 
168
- main .login-form input[type=text],
169
- main .login-form input[type=password],
170
- input[type=text].large,
171
- input[type=password].large {
169
+ main .login-form input[type="text"],
170
+ main .login-form input[type="password"],
171
+ input[type="text"].large,
172
+ input[type="password"].large {
172
173
  font-size: 1.4em;
173
174
  }
174
175
 
@@ -2,7 +2,7 @@
2
2
  cursor: pointer;
3
3
  display: block;
4
4
  transition: transform 200ms, box-shadow 200ms, border-color 200ms ease-out;
5
- box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.0);
5
+ box-shadow: 0px 2px 5px rgba(0, 0, 0, 0);
6
6
  border: 1px solid #fff;
7
7
  position: relative;
8
8
  -webkit-perspective: 1000;
@@ -13,7 +13,7 @@
13
13
  right: 6px;
14
14
  font-size: 14px;
15
15
  color: var(--background-warning-color);
16
- text-shadow: 0px 0px 5px rgba(0, 0, 0, 1.0);
16
+ text-shadow: 0px 0px 5px rgba(0, 0, 0, 1);
17
17
  z-index: 100;
18
18
  }
19
19
 
@@ -56,7 +56,10 @@
56
56
  width: 100%;
57
57
  height: 100%;
58
58
  background: #e5e5e5;
59
- background-image: linear-gradient(45deg, #fff 25%, transparent 25%), linear-gradient(135deg, #fff 25%, transparent 25%), linear-gradient(45deg, transparent 75%, #fff 75%), linear-gradient(135deg, transparent 75%, #fff 75%);
59
+ background-image: linear-gradient(45deg, #fff 25%, transparent 25%),
60
+ linear-gradient(135deg, #fff 25%, transparent 25%),
61
+ linear-gradient(45deg, transparent 75%, #fff 75%),
62
+ linear-gradient(135deg, transparent 75%, #fff 75%);
60
63
  background-size: 12px 12px;
61
64
  background-position: 0 0, 6px 0, 6px -6px, 0px 6px;
62
65
  display: flex;
@@ -187,7 +190,8 @@
187
190
  touch-action: none;
188
191
  user-select: none;
189
192
  cursor: pointer;
190
- transition: border-radius 200ms, margin 200ms, width 200ms, height 200ms, border-color 200ms ease-out;
193
+ transition: border-radius 200ms, margin 200ms, width 200ms, height 200ms,
194
+ border-color 200ms ease-out;
191
195
 
192
196
  &:hover {
193
197
  &:after {
@@ -7,7 +7,7 @@
7
7
  flex-direction: column;
8
8
  }
9
9
 
10
- & input[type=file] {
10
+ & input[type="file"] {
11
11
  display: none;
12
12
  }
13
13
 
@@ -11,7 +11,11 @@ table.list {
11
11
  }
12
12
 
13
13
  & th {
14
- background: linear-gradient(to bottom, var(--background-color) 0%, var(--background-disabled-color) 100%);
14
+ background: linear-gradient(
15
+ to bottom,
16
+ var(--background-color) 0%,
17
+ var(--background-disabled-color) 100%
18
+ );
15
19
  color: var(--text-light-color);
16
20
  font-weight: bold;
17
21
  border-bottom: 1px solid var(--border-color);
@@ -44,12 +48,16 @@ table.list {
44
48
  }
45
49
 
46
50
  & tr.disabled td:first-child {
47
- background: transparent radial-gradient(ellipse at center, #bdbdbd 50%, transparent 50%) no-repeat left 12px top 50%;
51
+ background: transparent
52
+ radial-gradient(ellipse at center, #bdbdbd 50%, transparent 50%) no-repeat
53
+ left 12px top 50%;
48
54
  background-size: 10px 10px;
49
55
  }
50
56
 
51
57
  & tr.active td:first-child {
52
- background: transparent radial-gradient(ellipse at center, #92b6c4 50%, transparent 50%) no-repeat left 12px top 50%;
58
+ background: transparent
59
+ radial-gradient(ellipse at center, #92b6c4 50%, transparent 50%) no-repeat
60
+ left 12px top 50%;
53
61
  background-size: 10px 10px;
54
62
  }
55
63
 
@@ -15,7 +15,11 @@ body.modal {
15
15
  justify-content: center;
16
16
 
17
17
  & .background {
18
- background: radial-gradient(rgba(255, 255, 255, 0.9), rgba(255, 255, 255, 0.9) 50%, rgba(80, 80, 80, 0.9));
18
+ background: radial-gradient(
19
+ rgba(255, 255, 255, 0.9),
20
+ rgba(255, 255, 255, 0.9) 50%,
21
+ rgba(80, 80, 80, 0.9)
22
+ );
19
23
  cursor: pointer;
20
24
  position: absolute;
21
25
  top: 0px;
@@ -68,17 +72,17 @@ body.modal {
68
72
  }
69
73
 
70
74
  100% {
71
- opacity: 1.0;
72
- transform: scale(1.0);
75
+ opacity: 1;
76
+ transform: scale(1);
73
77
  }
74
78
  }
75
79
 
76
80
  @keyframes modal-background-appear {
77
81
  0% {
78
- opacity: 0.0;
82
+ opacity: 0;
79
83
  }
80
84
 
81
85
  100% {
82
- opacity: 1.0;
86
+ opacity: 1;
83
87
  }
84
88
  }
@@ -49,7 +49,11 @@
49
49
 
50
50
  &:hover {
51
51
  border: 1px solid var(--border-color-light);
52
- background: linear-gradient(to bottom, var(--background-color) 0%, var(--background-disabled-color) 100%);
52
+ background: linear-gradient(
53
+ to bottom,
54
+ var(--background-color) 0%,
55
+ var(--background-disabled-color) 100%
56
+ );
53
57
  }
54
58
 
55
59
  & .date {
@@ -17,7 +17,7 @@
17
17
  text-align: left;
18
18
  animation-duration: 500ms;
19
19
  animation-name: toast-appear;
20
- animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
20
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
21
21
  animation-fill-mode: forwards;
22
22
 
23
23
  &.error {
@@ -27,7 +27,7 @@
27
27
  &.fadeout {
28
28
  animation-duration: 300ms;
29
29
  animation-name: toast-disappear;
30
- animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
30
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
31
31
  }
32
32
  }
33
33
  }
@@ -136,7 +136,9 @@ td.drag-handle {
136
136
  }
137
137
 
138
138
  & .pinned .name {
139
- background: transparent radial-gradient(ellipse at center, #92b6c4 50%, transparent 50%) no-repeat left 12px top 50%;
139
+ background: transparent
140
+ radial-gradient(ellipse at center, #92b6c4 50%, transparent 50%) no-repeat
141
+ left 12px top 50%;
140
142
  background-size: 10px 10px;
141
143
  }
142
144
  }
@@ -162,7 +164,7 @@ td.drag-handle {
162
164
  }
163
165
  }
164
166
 
165
- & main input[type=text],
167
+ & main input[type="text"],
166
168
  & main textarea {
167
169
  width: 100%;
168
170
  max-width: 100%;
@@ -2,7 +2,8 @@
2
2
  @custom-media --narrow screen and (max-width: 1150px);
3
3
 
4
4
  :root {
5
- --font-os-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, "Helvetica Neue", Oxygen, Cantarell, sans-serif;
5
+ --font-os-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
6
+ Roboto, Ubuntu, "Helvetica Neue", Oxygen, Cantarell, sans-serif;
6
7
 
7
8
  --red: #c00007;
8
9
  --red-transparent: #c0000740;
@@ -8,7 +8,7 @@ module Admin
8
8
 
9
9
  def show
10
10
  unless @year
11
- redirect_to(admin_calendar_path(@locale, Time.zone.now.year))
11
+ redirect_to(admin_calendar_path(content_locale, Time.zone.now.year))
12
12
  return
13
13
  end
14
14
  @pages = if @month
@@ -23,7 +23,7 @@ module Admin
23
23
  def calendar_items
24
24
  Page.with_dates
25
25
  .order("starts_at DESC")
26
- .in_locale(@locale)
26
+ .in_locale(content_locale)
27
27
  .visible
28
28
  .paginate(per_page: 50, page: params[:page])
29
29
  end
@@ -22,7 +22,7 @@ module Admin
22
22
  @category = Category.create(category_params)
23
23
  if @category.valid?
24
24
  flash[:notice] = t("pages_core.categories_controller.created")
25
- redirect_to admin_pages_url(@locale)
25
+ redirect_to admin_pages_url(content_locale)
26
26
  else
27
27
  render action: :new
28
28
  end
@@ -31,7 +31,7 @@ module Admin
31
31
  def update
32
32
  if @category.update(category_params)
33
33
  flash[:notice] = t("pages_core.categories_controller.updated")
34
- redirect_to admin_pages_url(@locale)
34
+ redirect_to admin_pages_url(content_locale)
35
35
  else
36
36
  render action: :edit
37
37
  end
@@ -40,7 +40,7 @@ module Admin
40
40
  def destroy
41
41
  @category.destroy
42
42
  flash[:notice] = t("pages_core.categories_controller.deleted")
43
- redirect_to admin_pages_url(@locale)
43
+ redirect_to admin_pages_url(content_locale)
44
44
  end
45
45
 
46
46
  protected
@@ -9,9 +9,9 @@ module Admin
9
9
  require_authorization object: Page
10
10
 
11
11
  def index
12
- @archive_finder = archive_finder(@news_pages, @locale)
12
+ @archive_finder = archive_finder(@news_pages, content_locale)
13
13
  unless @year
14
- redirect_to(admin_news_index_path(@locale,
14
+ redirect_to(admin_news_index_path(content_locale,
15
15
  (@archive_finder.latest_year ||
16
16
  Time.zone.now.year)))
17
17
  return
@@ -32,11 +32,11 @@ module Admin
32
32
 
33
33
  def find_news_pages
34
34
  @news_pages = Page.news_pages
35
- .in_locale(@locale)
36
- .reorder("parent_page_id ASC, position ASC")
35
+ .in_locale(content_locale)
36
+ .sort { |a, b| b.children.count <=> a.children.count }
37
37
  return if @news_pages.any?
38
38
 
39
- redirect_to(admin_pages_url(@locale))
39
+ redirect_to(admin_pages_url(content_locale))
40
40
  end
41
41
 
42
42
  def find_year_and_month
@@ -48,7 +48,7 @@ module Admin
48
48
  def require_news_pages
49
49
  return if Page.news_pages.any?
50
50
 
51
- redirect_to(admin_pages_url(@locale))
51
+ redirect_to(admin_pages_url(content_locale))
52
52
  end
53
53
 
54
54
  def latest_year
@@ -10,11 +10,11 @@ module Admin
10
10
  require_authorization
11
11
 
12
12
  def index
13
- @pages = Page.admin_list(@locale)
13
+ @pages = Page.admin_list(content_locale)
14
14
  end
15
15
 
16
16
  def deleted
17
- @pages = Page.deleted.by_updated_at.in_locale(@locale)
17
+ @pages = Page.deleted.by_updated_at.in_locale(content_locale)
18
18
  end
19
19
 
20
20
  def search
@@ -22,27 +22,28 @@ module Admin
22
22
 
23
23
  @search_documents =
24
24
  SearchDocument.where(searchable_type: "Page")
25
- .search(search_query, locale: @locale)
25
+ .search(search_query, locale: content_locale)
26
26
  .paginate(per_page: 50, page: params[:page])
27
27
  end
28
28
 
29
29
  def show
30
- redirect_to edit_admin_page_url(@locale, @page)
30
+ redirect_to edit_admin_page_url(content_locale, @page)
31
31
  end
32
32
 
33
33
  def new
34
34
  build_params = params[:page] ? page_params : nil
35
- @page = build_page(@locale, build_params)
35
+ @page = build_page(content_locale, build_params)
36
36
  @page.parent = Page.find_by(id: params[:parent])
37
37
  end
38
38
 
39
39
  def edit; end
40
40
 
41
41
  def create
42
- @page = build_page(@locale, page_params, param_categories).tap(&:save)
42
+ @page = build_page(content_locale, page_params,
43
+ param_categories).tap(&:save)
43
44
  if @page.valid?
44
45
  respond_with_page(@page) do
45
- redirect_to(edit_admin_page_url(@locale, @page))
46
+ redirect_to(edit_admin_page_url(content_locale, @page))
46
47
  end
47
48
  else
48
49
  render action: :new
@@ -54,7 +55,7 @@ module Admin
54
55
  @page.categories = param_categories
55
56
  respond_with_page(@page) do
56
57
  flash[:notice] = t("pages_core.changes_saved")
57
- redirect_to edit_admin_page_url(@locale, @page)
58
+ redirect_to edit_admin_page_url(content_locale, @page)
58
59
  end
59
60
  else
60
61
  render action: :edit
@@ -64,12 +65,12 @@ module Admin
64
65
  def move
65
66
  parent = params[:parent_id] ? Page.find(params[:parent_id]) : nil
66
67
  @page.update(parent: parent, position: params[:position])
67
- respond_with_page(@page) { redirect_to admin_pages_url(@locale) }
68
+ respond_with_page(@page) { redirect_to admin_pages_url(content_locale) }
68
69
  end
69
70
 
70
71
  def destroy
71
72
  Page.find(params[:id]).flag_as_deleted!
72
- redirect_to admin_pages_url(@locale)
73
+ redirect_to admin_pages_url(content_locale)
73
74
  end
74
75
 
75
76
  private
@@ -110,7 +111,7 @@ module Admin
110
111
  end
111
112
 
112
113
  def find_page
113
- @page = Page.find(params[:id]).localize(@locale)
114
+ @page = Page.find(params[:id]).localize(content_locale)
114
115
  end
115
116
 
116
117
  def find_categories
@@ -48,7 +48,7 @@ module Admin
48
48
  flash[:notice] = "Your changed to #{@user.name} were saved."
49
49
  redirect_to admin_users_url
50
50
  else
51
- flash.now[:error] = "There were problems saving your changes."
51
+ flash.now[:error] = t("pages_core.problems_saving")
52
52
  render action: :edit
53
53
  end
54
54
  end
@@ -4,23 +4,6 @@ module PagesCore
4
4
  module PreviewPagesController
5
5
  extend ActiveSupport::Concern
6
6
 
7
- included do
8
- before_action :disable_xss_protection, only: [:preview]
9
- end
10
-
11
- def preview
12
- redirect_to(page_url(@locale, @page)) && return unless logged_in?
13
-
14
- @preview = true
15
- @page.attributes = page_params.merge(
16
- status: 2,
17
- published_at: Time.zone.now,
18
- locale: @locale,
19
- redirect_to: nil
20
- )
21
- render_page
22
- end
23
-
24
7
  def preview?
25
8
  @preview || false
26
9
  end
@@ -45,5 +28,20 @@ module PagesCore
45
28
  Page.localized_attributes + permitted_page_attributes
46
29
  )
47
30
  end
31
+
32
+ def preview_page(page)
33
+ redirect_to(page_url(content_locale, page)) && return unless logged_in?
34
+
35
+ disable_xss_protection
36
+
37
+ @preview = true
38
+ page.attributes = page_params.merge(
39
+ status: 2,
40
+ published_at: Time.zone.now,
41
+ locale: content_locale,
42
+ redirect_to: nil
43
+ )
44
+ render_page
45
+ end
48
46
  end
49
47
  end
@@ -24,9 +24,9 @@ module PagesCore
24
24
 
25
25
  def redirect
26
26
  if Page.news_pages.any?
27
- redirect_to news_admin_pages_url(@locale)
27
+ redirect_to news_admin_pages_url(content_locale)
28
28
  else
29
- redirect_to admin_pages_url(@locale)
29
+ redirect_to admin_pages_url(content_locale)
30
30
  end
31
31
  end
32
32
 
@@ -5,11 +5,11 @@ module PagesCore
5
5
  include PagesCore::Authentication
6
6
  include PagesCore::ErrorRenderer
7
7
  include PagesCore::ErrorReporting
8
+ include PagesCore::LocalesHelper
8
9
  include PagesCore::ProcessTitler
9
10
  include PagesCore::PoliciesHelper
10
11
  include PagesCore::StaticCacheController
11
12
 
12
- before_action :set_locale
13
13
  after_action :set_content_language_header
14
14
 
15
15
  protected
@@ -20,13 +20,6 @@ module PagesCore
20
20
  payload.merge!(current_user_context)
21
21
  end
22
22
 
23
- # Sets @locale from params[:locale], with I18n.default_locale as fallback
24
- def set_locale
25
- legacy_locales = { "nor" => "nb", "eng" => "en" }
26
- @locale = params[:locale] || I18n.default_locale.to_s
27
- @locale = legacy_locales[@locale] if legacy_locales[@locale]
28
- end
29
-
30
23
  def set_content_language_header
31
24
  return unless locale
32
25
 
@@ -27,6 +27,10 @@ module PagesCore
27
27
  end
28
28
  end
29
29
 
30
+ def preview
31
+ preview_page(@page)
32
+ end
33
+
30
34
  def show
31
35
  respond_to do |format|
32
36
  format.html { render_published_page(@page) }
@@ -64,10 +68,6 @@ module PagesCore
64
68
  super
65
69
  end
66
70
 
67
- def page_param
68
- params[:page].is_a?(String) ? params[:page] : 1
69
- end
70
-
71
71
  def page_template(page)
72
72
  if PagesCore::Templates.names.include?(page.template)
73
73
  page.template
@@ -98,7 +98,7 @@ module PagesCore
98
98
 
99
99
  def find_page
100
100
  @page ||= Page.find_by(id: params[:id]) || unique_page(params[:id])
101
- @page.locale = @locale || I18n.default_locale.to_s if @page
101
+ @page.locale = content_locale if @page
102
102
  end
103
103
 
104
104
  def render_published_page(page)
@@ -110,6 +110,14 @@ module PagesCore
110
110
  end
111
111
  end
112
112
 
113
+ def redirect_to_parent_or_root(page)
114
+ if page.parent
115
+ redirect_to page_url(locale, page.parent)
116
+ else
117
+ redirect_to root_url
118
+ end
119
+ end
120
+
113
121
  def redirect_page(page)
114
122
  return false unless page.redirects?
115
123
 
@@ -6,6 +6,7 @@ module PagesCore
6
6
  include ApplicationHelper
7
7
 
8
8
  before_action :set_i18n_locale
9
+ helper_method :page_param
9
10
 
10
11
  # Loads @root_pages and @rss_feeds. To automatically load these in your
11
12
  # own controllers, add the following line to your controller definition:
@@ -13,21 +14,25 @@ module PagesCore
13
14
  # before_action :load_root_pages
14
15
  #
15
16
  def load_root_pages
16
- @root_pages = Page.roots.localized(@locale).published
17
- @rss_feeds = Page.where(feed_enabled: true).localized(@locale).published
17
+ @root_pages = Page.roots.localized(content_locale).published
18
+ @rss_feeds = Page.where(feed_enabled: true)
19
+ .localized(content_locale)
20
+ .published
18
21
  end
19
22
 
20
23
  private
21
24
 
22
25
  def legacy_locales
23
- {
24
- "nor" => "nb",
25
- "eng" => "en"
26
- }
26
+ { "nor" => "nb",
27
+ "eng" => "en" }
28
+ end
29
+
30
+ def page_param
31
+ params[:page].is_a?(String) ? params[:page] : 1
27
32
  end
28
33
 
29
34
  def set_i18n_locale
30
- locale_param = params[:locale] || I18n.default_locale
35
+ locale_param = content_locale
31
36
  if legacy_locales[locale_param]
32
37
  locale_param = legacy_locales[locale_param]
33
38
  end
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Admin
4
4
  module MenuHelper
5
+ include PagesCore::LocalesHelper
6
+
5
7
  def header_tabs(group)
6
8
  tag.ul(class: group.to_s) do
7
9
  safe_join(menu_items_for(group).map do |item|
@@ -53,10 +53,7 @@ module Admin
53
53
  else
54
54
  [page]
55
55
  end
56
- safe_join(
57
- page_names.map { |p| page_name_with_fallback(p) },
58
- raw(" &raquo; ")
59
- )
56
+ safe_join(page_names.map { |p| page_name_with_fallback(p) }, " » ")
60
57
  end
61
58
 
62
59
  def page_published_status(page)
@@ -4,7 +4,6 @@ module PagesCore
4
4
  module Admin
5
5
  module AdminHelper
6
6
  include PagesCore::Admin::ContentTabsHelper
7
- include PagesCore::Admin::DeprecatedAdminHelper
8
7
  include PagesCore::Admin::DateRangeHelper
9
8
  include PagesCore::Admin::ImageUploadsHelper
10
9
  include PagesCore::Admin::LocalesHelper
@@ -3,8 +3,15 @@
3
3
  module PagesCore
4
4
  module Admin
5
5
  module ContentTabsHelper
6
- def content_tab(name, options = {}, &block)
6
+ def content_tabs
7
7
  @content_tabs ||= []
8
+ end
9
+
10
+ def content_tabs?
11
+ content_tabs.any?
12
+ end
13
+
14
+ def content_tab(name, options = {}, &block)
8
15
  return unless block_given?
9
16
 
10
17
  tab = {
@@ -13,7 +20,7 @@ module PagesCore
13
20
  options: options,
14
21
  content: capture(&block)
15
22
  }
16
- @content_tabs << tab
23
+ content_tabs.push(tab)
17
24
  content_tab_tag(tab[:key], tab[:content])
18
25
  end
19
26
 
@@ -22,13 +22,12 @@ module PagesCore
22
22
  end
23
23
 
24
24
  def unique_page(page_name, &block)
25
- locale = @locale || I18n.default_locale.to_s
26
25
  page = Page.where(unique_name: page_name).first
27
26
  if page && block_given?
28
- output = capture(page.localize(locale), &block)
27
+ output = capture(page.localize(content_locale), &block)
29
28
  concat(output)
30
29
  end
31
- page&.localize(locale)
30
+ page&.localize(content_locale)
32
31
  end
33
32
 
34
33
  private