pages_core 3.15.4 → 3.15.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 (213) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/app/assets/builds/pages_core/admin-dist.js +1 -1
  4. data/app/assets/builds/pages_core/admin-dist.js.map +4 -4
  5. data/app/assets/builds/pages_core/admin.css +378 -253
  6. data/app/assets/builds/pages_core/mailer.css +41 -6
  7. data/app/assets/builds/pages_core_fonts/121b837e.woff2 +0 -0
  8. data/app/assets/builds/pages_core_fonts/216e5c23.woff2 +0 -0
  9. data/app/assets/builds/pages_core_fonts/3017b52f.woff2 +0 -0
  10. data/app/assets/builds/pages_core_fonts/489746b9.woff2 +0 -0
  11. data/app/assets/builds/pages_core_fonts/49775483.woff2 +0 -0
  12. data/app/assets/builds/pages_core_fonts/49c9e472.woff2 +0 -0
  13. data/app/assets/builds/pages_core_fonts/4a119645.woff2 +0 -0
  14. data/app/assets/builds/pages_core_fonts/5d56d7a8.woff2 +0 -0
  15. data/app/assets/builds/pages_core_fonts/61ea75a6.woff2 +0 -0
  16. data/app/assets/builds/pages_core_fonts/62cbb778.woff2 +0 -0
  17. data/app/assets/builds/pages_core_fonts/647d26c.woff2 +0 -0
  18. data/app/assets/builds/pages_core_fonts/67764053.woff2 +0 -0
  19. data/app/assets/builds/pages_core_fonts/6bb0fd00.woff2 +0 -0
  20. data/app/assets/builds/pages_core_fonts/6c0194a2.woff2 +0 -0
  21. data/app/assets/builds/pages_core_fonts/71423409.woff2 +0 -0
  22. data/app/assets/builds/pages_core_fonts/7584e61d.woff2 +0 -0
  23. data/app/assets/builds/pages_core_fonts/77bcfa1c.woff2 +0 -0
  24. data/app/assets/builds/pages_core_fonts/7aca0cc5.woff2 +0 -0
  25. data/app/assets/builds/pages_core_fonts/9a09533f.woff2 +0 -0
  26. data/app/assets/builds/pages_core_fonts/a51f5bc8.woff2 +0 -0
  27. data/app/assets/builds/pages_core_fonts/a80b2975.woff2 +0 -0
  28. data/app/assets/builds/pages_core_fonts/a891f617.woff2 +0 -0
  29. data/app/assets/builds/pages_core_fonts/ad6083f3.woff2 +0 -0
  30. data/app/assets/builds/pages_core_fonts/b29a61ff.woff2 +0 -0
  31. data/app/assets/builds/{fonts/6569749d.ttf → pages_core_fonts/b30b0656.ttf} +0 -0
  32. data/app/assets/builds/pages_core_fonts/b3a5f48c.woff2 +0 -0
  33. data/app/assets/builds/pages_core_fonts/bc73ee06.woff2 +0 -0
  34. data/app/assets/builds/pages_core_fonts/c38c6d45.woff2 +0 -0
  35. data/app/assets/builds/pages_core_fonts/c5ce0b1f.woff2 +0 -0
  36. data/app/assets/builds/pages_core_fonts/c8d53904.woff2 +0 -0
  37. data/app/assets/builds/pages_core_fonts/ce13c169.woff2 +0 -0
  38. data/app/assets/builds/pages_core_fonts/d43bd0d5.woff2 +0 -0
  39. data/app/assets/builds/pages_core_fonts/e1c7d368.woff2 +0 -0
  40. data/app/assets/builds/pages_core_fonts/e1e8175d.woff2 +0 -0
  41. data/app/assets/builds/pages_core_fonts/e318f796.woff2 +0 -0
  42. data/app/assets/builds/{fonts/ee32bc60.ttf → pages_core_fonts/e7acb7d9.ttf} +0 -0
  43. data/app/assets/builds/pages_core_fonts/ee5514c6.woff2 +0 -0
  44. data/app/assets/builds/pages_core_fonts/f4e495e2.woff2 +0 -0
  45. data/app/assets/builds/pages_core_fonts/f736ec65.woff2 +0 -0
  46. data/app/assets/builds/pages_core_fonts/f741c7ba.woff2 +0 -0
  47. data/app/assets/builds/pages_core_fonts/f7767345.woff2 +0 -0
  48. data/app/assets/builds/pages_core_fonts/fe9eb751.woff2 +0 -0
  49. data/app/assets/stylesheets/pages_core/admin/components/forms.css +2 -2
  50. data/app/assets/stylesheets/pages_core/admin/components/header.css +1 -1
  51. data/app/assets/stylesheets/pages_core/admin/controllers/pages.css +1 -1
  52. data/app/assets/stylesheets/pages_core/admin/global/fonts.css +38 -38
  53. data/app/controllers/{pages_core → admin}/admin_controller.rb +1 -3
  54. data/app/controllers/attachments_controller.rb +40 -0
  55. data/app/controllers/concerns/pages_core/document_title_controller.rb +16 -0
  56. data/app/controllers/concerns/pages_core/page_parameters.rb +1 -1
  57. data/app/controllers/concerns/pages_core/pages/preview_controller.rb +49 -0
  58. data/app/controllers/concerns/pages_core/pages/rss_controller.rb +43 -0
  59. data/app/controllers/errors_controller.rb +2 -0
  60. data/app/controllers/images_controller.rb +13 -0
  61. data/app/controllers/pages_core/frontend/pages_controller.rb +3 -4
  62. data/app/controllers/pages_core/frontend_controller.rb +6 -1
  63. data/app/controllers/pages_core/sitemaps_controller.rb +21 -52
  64. data/app/helpers/pages_core/admin/image_uploads_helper.rb +1 -1
  65. data/app/helpers/pages_core/application_helper.rb +0 -3
  66. data/app/helpers/pages_core/attachments_helper.rb +0 -10
  67. data/app/helpers/pages_core/feed_tags_helper.rb +31 -0
  68. data/app/helpers/pages_core/frontend_helper.rb +3 -0
  69. data/app/helpers/pages_core/head_tags_helper.rb +80 -70
  70. data/app/helpers/pages_core/page_path_helper.rb +1 -12
  71. data/app/javascript/components/Attachments/Attachment.tsx +3 -3
  72. data/app/javascript/components/Attachments/AttachmentEditor.tsx +5 -5
  73. data/app/javascript/components/Attachments/Deleted.tsx +28 -0
  74. data/app/javascript/components/Attachments/List.tsx +11 -24
  75. data/app/javascript/components/Attachments/Placeholder.tsx +0 -2
  76. data/app/javascript/components/Attachments.tsx +2 -3
  77. data/app/javascript/components/DateRangeSelect.tsx +13 -10
  78. data/app/javascript/components/DateTimeSelect.tsx +11 -11
  79. data/app/javascript/components/EditableImage.tsx +3 -3
  80. data/app/javascript/components/FileUploadButton.tsx +3 -3
  81. data/app/javascript/components/ImageCropper/FocalPoint.tsx +10 -14
  82. data/app/javascript/components/ImageCropper/Image.tsx +19 -25
  83. data/app/javascript/components/ImageCropper/Toolbar.tsx +27 -26
  84. data/app/javascript/components/ImageCropper/useContainerSize.ts +25 -0
  85. data/app/javascript/components/ImageCropper/useCrop.ts +28 -13
  86. data/app/javascript/components/ImageCropper/useImageCropperContext.ts +13 -0
  87. data/app/javascript/components/ImageCropper.tsx +23 -82
  88. data/app/javascript/components/ImageEditor/Form.tsx +25 -28
  89. data/app/javascript/components/ImageEditor/useImageEditor.ts +63 -0
  90. data/app/javascript/components/ImageEditor/useImageEditorContext.ts +14 -0
  91. data/app/javascript/components/ImageEditor.tsx +28 -42
  92. data/app/javascript/components/ImageGrid/Deleted.tsx +28 -0
  93. data/app/javascript/components/ImageGrid/DragElement.tsx +5 -5
  94. data/app/javascript/components/ImageGrid/FilePlaceholder.tsx +0 -2
  95. data/app/javascript/components/ImageGrid/Grid.tsx +15 -24
  96. data/app/javascript/components/ImageGrid/GridImage.tsx +4 -4
  97. data/app/javascript/components/ImageGrid/Placeholder.tsx +2 -4
  98. data/app/javascript/components/ImageGrid.tsx +2 -4
  99. data/app/javascript/components/ImageUploader.tsx +5 -5
  100. data/app/javascript/components/LabelledField.tsx +6 -6
  101. data/app/javascript/components/Modal.tsx +16 -13
  102. data/app/javascript/components/PageForm/Block.tsx +3 -3
  103. data/app/javascript/components/PageForm/Content.tsx +11 -15
  104. data/app/javascript/components/PageForm/Dates.tsx +3 -11
  105. data/app/javascript/components/PageForm/Files.tsx +2 -4
  106. data/app/javascript/components/PageForm/Form.tsx +3 -9
  107. data/app/javascript/components/PageForm/Images.tsx +2 -4
  108. data/app/javascript/components/PageForm/LocaleLinks.tsx +4 -11
  109. data/app/javascript/components/PageForm/Metadata.tsx +8 -13
  110. data/app/javascript/components/PageForm/Options.tsx +28 -11
  111. data/app/javascript/components/PageForm/PageDescription.tsx +7 -14
  112. data/app/javascript/components/PageForm/PathSegment.tsx +5 -10
  113. data/app/javascript/components/PageForm/TabPanel.tsx +3 -6
  114. data/app/javascript/components/PageForm/Tabs.tsx +2 -4
  115. data/app/javascript/components/PageForm/UnconfiguredContent.tsx +7 -12
  116. data/app/javascript/components/PageForm/pageParams.ts +3 -2
  117. data/app/javascript/components/PageForm/usePage.ts +1 -46
  118. data/app/javascript/components/PageForm/usePageFormContext.ts +8 -0
  119. data/app/javascript/components/PageForm/useTabs.ts +1 -1
  120. data/app/javascript/components/PageForm/utils.ts +49 -0
  121. data/app/javascript/components/PageForm.tsx +45 -48
  122. data/app/javascript/components/PageImages.tsx +1 -3
  123. data/app/javascript/components/PageTree/Button.tsx +25 -0
  124. data/app/javascript/components/PageTree/CollapseArrow.tsx +34 -0
  125. data/app/javascript/components/PageTree/CollapsedLabel.tsx +21 -0
  126. data/app/javascript/components/PageTree/EditPageName.tsx +68 -0
  127. data/app/javascript/components/PageTree/Node.tsx +143 -413
  128. data/app/javascript/components/PageTree/PageName.tsx +6 -4
  129. data/app/javascript/components/PageTree/StatusLabel.tsx +10 -0
  130. data/app/javascript/components/PageTree/tree.ts +268 -0
  131. data/app/javascript/components/PageTree/usePageTree.ts +268 -0
  132. data/app/javascript/components/PageTree/usePageTreeContext.ts +13 -0
  133. data/app/javascript/components/PageTree.tsx +194 -214
  134. data/app/javascript/components/{RichTextToolbarButton.tsx → RichTextArea/ToolbarButton.tsx} +3 -5
  135. data/app/javascript/components/RichTextArea/actions.ts +106 -0
  136. data/app/javascript/components/RichTextArea/useMaybeControlledValue.ts +14 -0
  137. data/app/javascript/components/RichTextArea.tsx +91 -209
  138. data/app/javascript/components/TagEditor/AddTagForm.tsx +2 -2
  139. data/app/javascript/components/TagEditor/Editor.tsx +3 -5
  140. data/app/javascript/components/TagEditor/Tag.tsx +3 -5
  141. data/app/javascript/components/TagEditor/useTags.ts +3 -2
  142. data/app/javascript/components/TagEditor.tsx +2 -4
  143. data/app/javascript/components/Toast.tsx +5 -5
  144. data/app/javascript/components/drag/draggedOrder.ts +6 -6
  145. data/app/javascript/components/drag/useDragCollection.ts +21 -25
  146. data/app/javascript/components/drag/useDragUploader.ts +20 -18
  147. data/app/javascript/components/drag/useDraggable.ts +3 -3
  148. data/app/javascript/features/RichText.tsx +0 -1
  149. data/app/javascript/features/contentTabs.ts +2 -2
  150. data/app/javascript/stores/useModalStore.ts +1 -1
  151. data/app/javascript/stores/useToastStore.ts +2 -2
  152. data/app/javascript/types/Attachments.ts +11 -11
  153. data/app/javascript/types/Crop.ts +16 -12
  154. data/app/javascript/types/Drag.ts +21 -23
  155. data/app/javascript/types/Images.ts +8 -8
  156. data/app/javascript/types/PageEditor.ts +11 -4
  157. data/app/javascript/types/Pages.ts +22 -27
  158. data/app/javascript/types/Tags.ts +2 -2
  159. data/app/javascript/types/Template.ts +4 -4
  160. data/app/javascript/types.ts +2 -2
  161. data/app/models/attachment.rb +5 -9
  162. data/app/models/autopublisher.rb +1 -1
  163. data/app/models/concerns/pages_core/page_model/redirectable.rb +1 -2
  164. data/app/models/concerns/pages_core/page_model/searchable.rb +1 -1
  165. data/app/models/concerns/pages_core/page_model/status.rb +2 -4
  166. data/app/models/concerns/pages_core/searchable_document.rb +2 -4
  167. data/app/models/image.rb +0 -15
  168. data/app/models/page_builder.rb +4 -6
  169. data/app/resources/admin/page_resource.rb +2 -2
  170. data/app/resources/export/page_resource.rb +1 -1
  171. data/app/services/pages_core/invite_service.rb +1 -2
  172. data/app/views/layouts/admin.html.erb +1 -0
  173. data/app/views/pages_core/sitemaps/index.xml.builder +10 -0
  174. data/config/routes.rb +4 -3
  175. data/db/migrate/20240917142300_add_skip_index_to_pages.rb +7 -0
  176. data/lib/pages_core/engine.rb +15 -17
  177. data/lib/pages_core/sitemap.rb +58 -0
  178. data/lib/pages_core/templates/configuration_proxy.rb +3 -3
  179. data/lib/pages_core.rb +7 -4
  180. data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +2 -2
  181. data/lib/rails/generators/pages_core/frontend/templates/application.html.erb +13 -5
  182. data/lib/rails/generators/pages_core/frontend/templates/postcss.config.js +2 -6
  183. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/components/base.css +3 -1
  184. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/config.css +2 -3
  185. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/global/animation.css +1 -1
  186. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/global/colors.css +6 -5
  187. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/global/fonts.css +1 -1
  188. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/global/grid.css +9 -6
  189. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/global/typography.css +42 -26
  190. data/lib/rails/generators/pages_core/install/templates/application_controller.rb +0 -6
  191. data/lib/rails/generators/pages_core/rspec/templates/rails_helper.rb +1 -1
  192. metadata +81 -49
  193. data/app/assets/builds/fonts/7b7db107.woff2 +0 -0
  194. data/app/assets/builds/fonts/921961e9.woff2 +0 -0
  195. data/app/controller_dummies/admin/admin_controller.rb +0 -6
  196. data/app/controller_dummies/application_controller.rb +0 -6
  197. data/app/controller_dummies/attachments_controller.rb +0 -4
  198. data/app/controller_dummies/frontend_controller.rb +0 -4
  199. data/app/controller_dummies/images_controller.rb +0 -4
  200. data/app/controller_dummies/page_files_controller.rb +0 -4
  201. data/app/controller_dummies/pages_controller.rb +0 -4
  202. data/app/controller_dummies/sitemaps_controller.rb +0 -4
  203. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +0 -47
  204. data/app/controllers/concerns/pages_core/rss_controller.rb +0 -41
  205. data/app/controllers/pages_core/attachments_controller.rb +0 -42
  206. data/app/controllers/pages_core/frontend/page_files_controller.rb +0 -25
  207. data/app/controllers/pages_core/images_controller.rb +0 -15
  208. data/app/helpers/pages_core/meta_tags_helper.rb +0 -96
  209. data/app/helpers/pages_core/open_graph_tags_helper.rb +0 -49
  210. data/app/javascript/components/PageTree/Draggable.tsx +0 -338
  211. data/app/javascript/lib/Tree.ts +0 -305
  212. data/app/javascript/types/Trees.ts +0 -19
  213. data/app/views/sitemaps/show.xml.builder +0 -11
@@ -26,7 +26,39 @@ p {
26
26
  margin: 0 0 1rem 0;
27
27
  }
28
28
 
29
- h1:last-child, h2:last-child, h3:last-child, h4:last-child, h5:last-child, h6:last-child, ul:last-child, ol:last-child, p:last-child {
29
+ h1:last-child {
30
+ margin-bottom: 0rem;
31
+ }
32
+
33
+ h2:last-child {
34
+ margin-bottom: 0rem;
35
+ }
36
+
37
+ h3:last-child {
38
+ margin-bottom: 0rem;
39
+ }
40
+
41
+ h4:last-child {
42
+ margin-bottom: 0rem;
43
+ }
44
+
45
+ h5:last-child {
46
+ margin-bottom: 0rem;
47
+ }
48
+
49
+ h6:last-child {
50
+ margin-bottom: 0rem;
51
+ }
52
+
53
+ ul:last-child {
54
+ margin-bottom: 0rem;
55
+ }
56
+
57
+ ol:last-child {
58
+ margin-bottom: 0rem;
59
+ }
60
+
61
+ p:last-child {
30
62
  margin-bottom: 0rem;
31
63
  }
32
64
 
@@ -66,14 +98,14 @@ a.button {
66
98
  text-decoration: none;
67
99
  }
68
100
 
69
- button.primary, a.button.primary {
101
+ button.primary:not(.does-not-exist),a.primary.button {
70
102
  background: #111;
71
103
  border-color: #111;
72
104
  color: #fff;
73
105
  box-shadow: inset 0px 0.75em 0.75em rgba(255, 255, 255, 0.2);
74
106
  }
75
107
 
76
- button.primary:hover, a.button.primary:hover {
108
+ button.primary:not(.does-not-exist):hover,a.primary.button:hover {
77
109
  box-shadow: inset 0px 0.75em 0.75em rgba(255, 255, 255, 0.1);
78
110
  }
79
111
 
@@ -82,7 +114,11 @@ table {
82
114
  margin: 1.5rem 0;
83
115
  }
84
116
 
85
- .buttons:last-child, table:last-child {
117
+ .buttons:last-child {
118
+ margin-bottom: 0px;
119
+ }
120
+
121
+ table:not(.does-not-exist):last-child {
86
122
  margin-bottom: 0px;
87
123
  }
88
124
 
@@ -91,8 +127,7 @@ table {
91
127
  border-top: 1px solid #ddd;
92
128
  }
93
129
 
94
- table th,
95
- table td {
130
+ table th,table td {
96
131
  text-align: left;
97
132
  padding: 0.5rem 1rem 0.5rem 0;
98
133
  border-bottom: 1px solid #ddd;
@@ -146,7 +146,7 @@ form {
146
146
  display: table;
147
147
  padding: 1px;
148
148
  padding-right: 22px;
149
- background: transparent url("pages/admin/warning-icon.gif") right 5px
149
+ background: transparent url("/pages/admin/warning-icon.gif") right 5px
150
150
  no-repeat;
151
151
  }
152
152
 
@@ -242,7 +242,7 @@ select {
242
242
 
243
243
  select {
244
244
  padding-right: 2em;
245
- background-image: url("pages/admin/angle-down-solid.svg");
245
+ background-image: url("/pages/admin/angle-down-solid.svg");
246
246
  background-position: top 50% right 0.5em;
247
247
  background-repeat: no-repeat;
248
248
  background-size: 1em 1em;
@@ -16,7 +16,7 @@ header {
16
16
  }
17
17
 
18
18
  .logo {
19
- background: url("pages/admin/icon.svg");
19
+ background: url("/pages/admin/icon.svg");
20
20
  background-repeat: no-repeat;
21
21
  min-height: 27px;
22
22
  padding-left: 38px;
@@ -6,7 +6,7 @@
6
6
  margin-left: 6px;
7
7
  width: 13px;
8
8
  height: 16px;
9
- background-image: url("pages/admin/drag-icon.png");
9
+ background-image: url("/pages/admin/drag-icon.png");
10
10
  }
11
11
 
12
12
  td.drag-handle {
@@ -5,7 +5,7 @@
5
5
  font-style: normal;
6
6
  font-weight: 100 900;
7
7
  font-display: swap;
8
- src: url("InterVariable.woff2") format("woff2");
8
+ src: url("/InterVariable.woff2") format("woff2");
9
9
  }
10
10
 
11
11
  @font-face {
@@ -13,133 +13,133 @@
13
13
  font-style: italic;
14
14
  font-weight: 100 900;
15
15
  font-display: swap;
16
- src: url("InterVariable-Italic.woff2") format("woff2");
16
+ src: url("/InterVariable-Italic.woff2") format("woff2");
17
17
  }
18
18
 
19
19
  @font-face {
20
20
  font-family: "Inter";
21
21
  font-style: normal;
22
22
  font-weight: 100;
23
- src: url("Inter-Thin.woff2") format("woff2");
23
+ src: url("/Inter-Thin.woff2") format("woff2");
24
24
  }
25
25
 
26
26
  @font-face {
27
27
  font-family: "Inter";
28
28
  font-style: italic;
29
29
  font-weight: 100;
30
- src: url("Inter-ThinItalic.woff2") format("woff2");
30
+ src: url("/Inter-ThinItalic.woff2") format("woff2");
31
31
  }
32
32
 
33
33
  @font-face {
34
34
  font-family: "Inter";
35
35
  font-style: normal;
36
36
  font-weight: 200;
37
- src: url("Inter-ExtraLight.woff2") format("woff2");
37
+ src: url("/Inter-ExtraLight.woff2") format("woff2");
38
38
  }
39
39
 
40
40
  @font-face {
41
41
  font-family: "Inter";
42
42
  font-style: italic;
43
43
  font-weight: 200;
44
- src: url("Inter-ExtraLightItalic.woff2") format("woff2");
44
+ src: url("/Inter-ExtraLightItalic.woff2") format("woff2");
45
45
  }
46
46
 
47
47
  @font-face {
48
48
  font-family: "Inter";
49
49
  font-style: normal;
50
50
  font-weight: 300;
51
- src: url("Inter-Light.woff2") format("woff2");
51
+ src: url("/Inter-Light.woff2") format("woff2");
52
52
  }
53
53
 
54
54
  @font-face {
55
55
  font-family: "Inter";
56
56
  font-style: italic;
57
57
  font-weight: 300;
58
- src: url("Inter-LightItalic.woff2") format("woff2");
58
+ src: url("/Inter-LightItalic.woff2") format("woff2");
59
59
  }
60
60
 
61
61
  @font-face {
62
62
  font-family: "Inter";
63
63
  font-style: normal;
64
64
  font-weight: 400;
65
- src: url("Inter-Regular.woff2") format("woff2");
65
+ src: url("/Inter-Regular.woff2") format("woff2");
66
66
  }
67
67
 
68
68
  @font-face {
69
69
  font-family: "Inter";
70
70
  font-style: italic;
71
71
  font-weight: 400;
72
- src: url("Inter-Italic.woff2") format("woff2");
72
+ src: url("/Inter-Italic.woff2") format("woff2");
73
73
  }
74
74
 
75
75
  @font-face {
76
76
  font-family: "Inter";
77
77
  font-style: normal;
78
78
  font-weight: 500;
79
- src: url("Inter-Medium.woff2") format("woff2");
79
+ src: url("/Inter-Medium.woff2") format("woff2");
80
80
  }
81
81
 
82
82
  @font-face {
83
83
  font-family: "Inter";
84
84
  font-style: italic;
85
85
  font-weight: 500;
86
- src: url("Inter-MediumItalic.woff2") format("woff2");
86
+ src: url("/Inter-MediumItalic.woff2") format("woff2");
87
87
  }
88
88
 
89
89
  @font-face {
90
90
  font-family: "Inter";
91
91
  font-style: normal;
92
92
  font-weight: 600;
93
- src: url("Inter-SemiBold.woff2") format("woff2");
93
+ src: url("/Inter-SemiBold.woff2") format("woff2");
94
94
  }
95
95
 
96
96
  @font-face {
97
97
  font-family: "Inter";
98
98
  font-style: italic;
99
99
  font-weight: 600;
100
- src: url("Inter-SemiBoldItalic.woff2") format("woff2");
100
+ src: url("/Inter-SemiBoldItalic.woff2") format("woff2");
101
101
  }
102
102
 
103
103
  @font-face {
104
104
  font-family: "Inter";
105
105
  font-style: normal;
106
106
  font-weight: 700;
107
- src: url("Inter-Bold.woff2") format("woff2");
107
+ src: url("/Inter-Bold.woff2") format("woff2");
108
108
  }
109
109
 
110
110
  @font-face {
111
111
  font-family: "Inter";
112
112
  font-style: italic;
113
113
  font-weight: 700;
114
- src: url("Inter-BoldItalic.woff2") format("woff2");
114
+ src: url("/Inter-BoldItalic.woff2") format("woff2");
115
115
  }
116
116
 
117
117
  @font-face {
118
118
  font-family: "Inter";
119
119
  font-style: normal;
120
120
  font-weight: 800;
121
- src: url("Inter-ExtraBold.woff2") format("woff2");
121
+ src: url("/Inter-ExtraBold.woff2") format("woff2");
122
122
  }
123
123
 
124
124
  @font-face {
125
125
  font-family: "Inter";
126
126
  font-style: italic;
127
127
  font-weight: 800;
128
- src: url("Inter-ExtraBoldItalic.woff2") format("woff2");
128
+ src: url("/Inter-ExtraBoldItalic.woff2") format("woff2");
129
129
  }
130
130
 
131
131
  @font-face {
132
132
  font-family: "Inter";
133
133
  font-style: normal;
134
134
  font-weight: 900;
135
- src: url("Inter-Black.woff2") format("woff2");
135
+ src: url("/Inter-Black.woff2") format("woff2");
136
136
  }
137
137
 
138
138
  @font-face {
139
139
  font-family: "Inter";
140
140
  font-style: italic;
141
141
  font-weight: 900;
142
- src: url("Inter-BlackItalic.woff2") format("woff2");
142
+ src: url("/Inter-BlackItalic.woff2") format("woff2");
143
143
  }
144
144
 
145
145
  /* InterDisplay */
@@ -148,124 +148,124 @@
148
148
  font-family: "InterDisplay";
149
149
  font-style: normal;
150
150
  font-weight: 100;
151
- src: url("InterDisplay-Thin.woff2") format("woff2");
151
+ src: url("/InterDisplay-Thin.woff2") format("woff2");
152
152
  }
153
153
 
154
154
  @font-face {
155
155
  font-family: "InterDisplay";
156
156
  font-style: italic;
157
157
  font-weight: 100;
158
- src: url("InterDisplay-ThinItalic.woff2") format("woff2");
158
+ src: url("/InterDisplay-ThinItalic.woff2") format("woff2");
159
159
  }
160
160
 
161
161
  @font-face {
162
162
  font-family: "InterDisplay";
163
163
  font-style: normal;
164
164
  font-weight: 200;
165
- src: url("InterDisplay-ExtraLight.woff2") format("woff2");
165
+ src: url("/InterDisplay-ExtraLight.woff2") format("woff2");
166
166
  }
167
167
 
168
168
  @font-face {
169
169
  font-family: "InterDisplay";
170
170
  font-style: italic;
171
171
  font-weight: 200;
172
- src: url("InterDisplay-ExtraLightItalic.woff2") format("woff2");
172
+ src: url("/InterDisplay-ExtraLightItalic.woff2") format("woff2");
173
173
  }
174
174
 
175
175
  @font-face {
176
176
  font-family: "InterDisplay";
177
177
  font-style: normal;
178
178
  font-weight: 300;
179
- src: url("InterDisplay-Light.woff2") format("woff2");
179
+ src: url("/InterDisplay-Light.woff2") format("woff2");
180
180
  }
181
181
 
182
182
  @font-face {
183
183
  font-family: "InterDisplay";
184
184
  font-style: italic;
185
185
  font-weight: 300;
186
- src: url("InterDisplay-LightItalic.woff2") format("woff2");
186
+ src: url("/InterDisplay-LightItalic.woff2") format("woff2");
187
187
  }
188
188
 
189
189
  @font-face {
190
190
  font-family: "InterDisplay";
191
191
  font-style: normal;
192
192
  font-weight: 400;
193
- src: url("InterDisplay-Regular.woff2") format("woff2");
193
+ src: url("/InterDisplay-Regular.woff2") format("woff2");
194
194
  }
195
195
 
196
196
  @font-face {
197
197
  font-family: "InterDisplay";
198
198
  font-style: italic;
199
199
  font-weight: 400;
200
- src: url("InterDisplay-Italic.woff2") format("woff2");
200
+ src: url("/InterDisplay-Italic.woff2") format("woff2");
201
201
  }
202
202
 
203
203
  @font-face {
204
204
  font-family: "InterDisplay";
205
205
  font-style: normal;
206
206
  font-weight: 500;
207
- src: url("InterDisplay-Medium.woff2") format("woff2");
207
+ src: url("/InterDisplay-Medium.woff2") format("woff2");
208
208
  }
209
209
 
210
210
  @font-face {
211
211
  font-family: "InterDisplay";
212
212
  font-style: italic;
213
213
  font-weight: 500;
214
- src: url("InterDisplay-MediumItalic.woff2") format("woff2");
214
+ src: url("/InterDisplay-MediumItalic.woff2") format("woff2");
215
215
  }
216
216
 
217
217
  @font-face {
218
218
  font-family: "InterDisplay";
219
219
  font-style: normal;
220
220
  font-weight: 600;
221
- src: url("InterDisplay-SemiBold.woff2") format("woff2");
221
+ src: url("/InterDisplay-SemiBold.woff2") format("woff2");
222
222
  }
223
223
 
224
224
  @font-face {
225
225
  font-family: "InterDisplay";
226
226
  font-style: italic;
227
227
  font-weight: 600;
228
- src: url("InterDisplay-SemiBoldItalic.woff2") format("woff2");
228
+ src: url("/InterDisplay-SemiBoldItalic.woff2") format("woff2");
229
229
  }
230
230
 
231
231
  @font-face {
232
232
  font-family: "InterDisplay";
233
233
  font-style: normal;
234
234
  font-weight: 700;
235
- src: url("InterDisplay-Bold.woff2") format("woff2");
235
+ src: url("/InterDisplay-Bold.woff2") format("woff2");
236
236
  }
237
237
 
238
238
  @font-face {
239
239
  font-family: "InterDisplay";
240
240
  font-style: italic;
241
241
  font-weight: 700;
242
- src: url("InterDisplay-BoldItalic.woff2") format("woff2");
242
+ src: url("/InterDisplay-BoldItalic.woff2") format("woff2");
243
243
  }
244
244
 
245
245
  @font-face {
246
246
  font-family: "InterDisplay";
247
247
  font-style: normal;
248
248
  font-weight: 800;
249
- src: url("InterDisplay-ExtraBold.woff2") format("woff2");
249
+ src: url("/InterDisplay-ExtraBold.woff2") format("woff2");
250
250
  }
251
251
 
252
252
  @font-face {
253
253
  font-family: "InterDisplay";
254
254
  font-style: italic;
255
255
  font-weight: 800;
256
- src: url("InterDisplay-ExtraBoldItalic.woff2") format("woff2");
256
+ src: url("/InterDisplay-ExtraBoldItalic.woff2") format("woff2");
257
257
  }
258
258
 
259
259
  @font-face {
260
260
  font-family: "InterDisplay";
261
261
  font-style: normal;
262
262
  font-weight: 900;
263
- src: url("InterDisplay-Black.woff2") format("woff2");
263
+ src: url("/InterDisplay-Black.woff2") format("woff2");
264
264
  }
265
265
 
266
266
  @font-face {
267
267
  font-family: "InterDisplay";
268
268
  font-style: italic;
269
269
  font-weight: 900;
270
- src: url("InterDisplay-BlackItalic.woff2") format("woff2");
270
+ src: url("/InterDisplay-BlackItalic.woff2") format("woff2");
271
271
  }
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # All admin controllers inherit Admin::AdminController, which provides layout,
4
- # authorization and other common code for the Admin set of controllers.
5
- module PagesCore
3
+ module Admin
6
4
  class AdminController < ::ApplicationController
7
5
  protect_from_forgery with: :exception
8
6
 
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AttachmentsController < ApplicationController
4
+ include PagesCore::RangedResponse
5
+
6
+ before_action :verify_signed_params
7
+ before_action :find_attachment, only: %i[show download]
8
+
9
+ static_cache :show, permanent: true
10
+
11
+ def show
12
+ send_attachment
13
+ end
14
+
15
+ def download
16
+ send_attachment disposition: "attachment"
17
+ end
18
+
19
+ private
20
+
21
+ def find_attachment
22
+ @attachment = Attachment.find(params[:id])
23
+ end
24
+
25
+ def send_attachment(disposition: "inline")
26
+ unless stale?(etag: @attachment, last_modified: @attachment.updated_at)
27
+ return
28
+ end
29
+
30
+ send_ranged_data(@attachment.data,
31
+ filename: @attachment.filename,
32
+ type: @attachment.content_type,
33
+ disposition:)
34
+ end
35
+
36
+ def verify_signed_params
37
+ key = params[:id].to_i.to_s
38
+ Attachment.verifier.verify(key, params[:digest])
39
+ end
40
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module DocumentTitleController
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ helper_method :document_title
9
+ end
10
+
11
+ def document_title(*args)
12
+ @document_title = args.first if args.any?
13
+ @document_title
14
+ end
15
+ end
16
+ end
@@ -23,7 +23,7 @@ module PagesCore
23
23
  def page_static_attributes
24
24
  %i[template user_id status feed_enabled published_at redirect_to
25
25
  news_page unique_name pinned parent_page_id serialized_tags
26
- meta_image_id starts_at ends_at all_day]
26
+ meta_image_id starts_at ends_at all_day skip_index]
27
27
  end
28
28
  end
29
29
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PagesCore
4
+ module Pages
5
+ module PreviewController
6
+ extend ActiveSupport::Concern
7
+ include PagesCore::PageParameters
8
+
9
+ included do
10
+ before_action :disable_xss_protection, only: %i[preview]
11
+ end
12
+
13
+ def preview?
14
+ @preview || false
15
+ end
16
+
17
+ def preview
18
+ render_error 403 unless logged_in?
19
+
20
+ @preview = true
21
+ @page = Page.find_by(id: params[:page_id]) || Page.new
22
+ @page.readonly!
23
+ @page.assign_attributes(preview_page_params)
24
+
25
+ render_page
26
+ end
27
+
28
+ private
29
+
30
+ def disable_xss_protection
31
+ # Disabling this is probably not a good idea,
32
+ # but the header causes Chrome to choke when being
33
+ # redirected back after a submit and the page contains an iframe.
34
+ response.headers["X-XSS-Protection"] = "0"
35
+ end
36
+
37
+ def preview_page_params
38
+ ActionController::Parameters.new(
39
+ JSON.parse(params.require(:preview_page))
40
+ ).permit(:id, page_content_attributes).merge(
41
+ status: 2,
42
+ published_at: Time.zone.now,
43
+ locale: content_locale,
44
+ redirect_to: nil
45
+ )
46
+ end
47
+ end
48
+ end
49
+ end