pages_core 3.12.0 → 3.12.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (199) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/app/assets/builds/fonts/661557ef.ttf +0 -0
  4. data/app/assets/builds/fonts/a18fc2d2.woff2 +0 -0
  5. data/app/assets/builds/fonts/b2c7b78f.woff2 +0 -0
  6. data/app/assets/builds/fonts/ceddc204.ttf +0 -0
  7. data/app/assets/builds/pages_core/admin-dist.js +60 -14
  8. data/app/assets/builds/pages_core/admin-dist.js.map +7 -0
  9. data/app/assets/builds/pages_core/admin.css +9272 -0
  10. data/app/assets/images/pages/admin/angle-down-solid.svg +1 -0
  11. data/app/assets/images/pages/admin/icon.svg +1 -0
  12. data/app/assets/stylesheets/pages_core/admin/components/archive.css +6 -0
  13. data/app/assets/stylesheets/{pages/admin/components/attachments.scss → pages_core/admin/components/attachments.css} +35 -28
  14. data/app/assets/stylesheets/{pages/admin.scss → pages_core/admin/components/base.css} +125 -123
  15. data/app/assets/stylesheets/pages_core/admin/components/forms.css +223 -0
  16. data/app/assets/stylesheets/{pages/admin/components/header.scss → pages_core/admin/components/header.css} +76 -46
  17. data/app/assets/stylesheets/{pages/admin/components/image_editor.scss → pages_core/admin/components/image_editor.css} +42 -31
  18. data/app/assets/stylesheets/{pages/admin/components/image_grid.scss → pages_core/admin/components/image_grid.css} +76 -64
  19. data/app/assets/stylesheets/{pages/admin/components/image_uploader.scss → pages_core/admin/components/image_uploader.css} +12 -12
  20. data/app/assets/stylesheets/{pages/admin/components/layout.scss → pages_core/admin/components/layout.css} +13 -9
  21. data/app/assets/stylesheets/pages_core/admin/components/links.css +40 -0
  22. data/app/assets/stylesheets/pages_core/admin/components/list_table.css +66 -0
  23. data/app/assets/stylesheets/{pages/admin/components/login.scss → pages_core/admin/components/login.css} +6 -5
  24. data/app/assets/stylesheets/{pages/admin/components/modal.scss → pages_core/admin/components/modal.css} +10 -12
  25. data/app/assets/stylesheets/{pages/admin/components/page_tree.scss → pages_core/admin/components/page_tree.css} +54 -55
  26. data/app/assets/stylesheets/{pages/admin/components/pagination.scss → pages_core/admin/components/pagination.css} +17 -17
  27. data/app/assets/stylesheets/pages_core/admin/components/search.css +27 -0
  28. data/app/assets/stylesheets/{pages/admin/components/sidebar.scss → pages_core/admin/components/sidebar.css} +8 -7
  29. data/app/assets/stylesheets/{pages/admin/components/tag_editor.scss → pages_core/admin/components/tag_editor.css} +10 -15
  30. data/app/assets/stylesheets/{pages/admin/components/textarea.scss → pages_core/admin/components/textarea.css} +1 -1
  31. data/app/assets/stylesheets/{pages/admin/components/toast.scss → pages_core/admin/components/toast.css} +5 -3
  32. data/app/assets/stylesheets/{pages/admin/components/toolbar.scss → pages_core/admin/components/toolbar.css} +56 -29
  33. data/app/assets/stylesheets/{pages/admin/controllers/pages.scss → pages_core/admin/controllers/pages.css} +69 -52
  34. data/app/assets/stylesheets/pages_core/admin/controllers/users.css +3 -0
  35. data/app/assets/stylesheets/pages_core/admin/vars.css +34 -0
  36. data/app/assets/stylesheets/pages_core/admin.postcss.css +9 -0
  37. data/app/controllers/admin/pages_controller.rb +12 -11
  38. data/app/controllers/concerns/pages_core/rss_controller.rb +17 -1
  39. data/app/controllers/pages_core/admin_controller.rb +6 -0
  40. data/app/controllers/pages_core/frontend/pages_controller.rb +9 -5
  41. data/app/controllers/pages_core/sitemaps_controller.rb +3 -5
  42. data/app/formatters/pages_core/image_embedder.rb +5 -27
  43. data/app/helpers/admin/calendars_helper.rb +8 -0
  44. data/app/helpers/admin/news_helper.rb +13 -0
  45. data/app/helpers/admin/pages_helper.rb +32 -0
  46. data/app/helpers/pages_core/admin/admin_helper.rb +11 -54
  47. data/app/helpers/pages_core/admin/deprecated_admin_helper.rb +40 -0
  48. data/app/helpers/pages_core/images_helper.rb +37 -0
  49. data/app/javascript/admin-dist.ts +2 -0
  50. data/app/javascript/components/Attachments/{Attachment.jsx → Attachment.tsx} +44 -35
  51. data/app/javascript/components/Attachments/{AttachmentEditor.jsx → AttachmentEditor.tsx} +23 -23
  52. data/app/javascript/components/{EditableImage.jsx → EditableImage.tsx} +28 -25
  53. data/app/javascript/components/{FileUploadButton.jsx → FileUploadButton.tsx} +15 -16
  54. data/app/javascript/components/ImageCropper/FocalPoint.tsx +94 -0
  55. data/app/javascript/components/ImageCropper/{Image.jsx → Image.tsx} +13 -14
  56. data/app/javascript/components/ImageCropper/{Toolbar.jsx → Toolbar.tsx} +19 -15
  57. data/app/javascript/components/ImageCropper/{useCrop.js → useCrop.ts} +80 -37
  58. data/app/javascript/components/{ImageCropper.jsx → ImageCropper.tsx} +17 -15
  59. data/app/javascript/components/ImageEditor/{Form.jsx → Form.tsx} +24 -23
  60. data/app/javascript/components/{ImageEditor.jsx → ImageEditor.tsx} +17 -15
  61. data/app/javascript/components/ImageGrid/{DragElement.jsx → DragElement.tsx} +12 -10
  62. data/app/javascript/components/ImageGrid/{GridImage.jsx → GridImage.tsx} +40 -30
  63. data/app/javascript/components/ImageGrid/{Placeholder.jsx → Placeholder.tsx} +5 -6
  64. data/app/javascript/components/ImageGrid.jsx +3 -4
  65. data/app/javascript/components/{ImageUploader.jsx → ImageUploader.tsx} +46 -41
  66. data/app/javascript/components/Modal.tsx +48 -0
  67. data/app/javascript/components/PageImages.tsx +28 -0
  68. data/app/javascript/components/{PageTreeDraggable.jsx → PageTree/Draggable.tsx} +79 -57
  69. data/app/javascript/components/{PageTreeNode.jsx → PageTree/Node.tsx} +86 -77
  70. data/app/javascript/components/PageTree/types.ts +15 -0
  71. data/app/javascript/components/PageTree.tsx +206 -0
  72. data/app/javascript/components/RichTextToolbarButton.tsx +17 -0
  73. data/app/javascript/components/TagEditor/{AddTagForm.jsx → AddTagForm.tsx} +9 -10
  74. data/app/javascript/components/TagEditor/{Tag.jsx → Tag.tsx} +8 -9
  75. data/app/javascript/components/{TagEditor.jsx → TagEditor.tsx} +12 -13
  76. data/app/javascript/components/Toast.tsx +61 -0
  77. data/app/javascript/components/drag/{draggedOrder.js → draggedOrder.ts} +22 -12
  78. data/app/javascript/components/drag/types.ts +28 -0
  79. data/app/javascript/components/drag/{useDragCollection.js → useDragCollection.ts} +40 -22
  80. data/app/javascript/components/drag/{useDragUploader.js → useDragUploader.ts} +34 -25
  81. data/app/javascript/components/drag/useDraggable.ts +21 -0
  82. data/app/javascript/components/{drag.js → drag.ts} +1 -0
  83. data/app/javascript/controllers/{EditPageController.js → EditPageController.ts} +3 -1
  84. data/app/javascript/controllers/{LoginController.js → LoginController.ts} +7 -3
  85. data/app/javascript/controllers/{MainController.js → MainController.ts} +19 -14
  86. data/app/javascript/{index.js → index.ts} +8 -7
  87. data/app/javascript/lib/{Tree.js → Tree.ts} +106 -85
  88. data/app/javascript/lib/{copyToClipboard.js → copyToClipboard.ts} +1 -1
  89. data/app/javascript/lib/{readyHandler.js → readyHandler.ts} +4 -2
  90. data/app/javascript/lib/{request.js → request.ts} +11 -5
  91. data/app/javascript/stores/useModalStore.ts +15 -0
  92. data/app/javascript/stores/useToastStore.ts +26 -0
  93. data/app/javascript/stores.ts +2 -0
  94. data/app/javascript/types.ts +30 -0
  95. data/app/mailers/admin_mailer.rb +1 -0
  96. data/app/models/invite.rb +8 -0
  97. data/app/policies/page_policy.rb +4 -0
  98. data/app/views/admin/calendars/_sidebar.html.erb +50 -0
  99. data/app/views/admin/calendars/show.html.erb +15 -53
  100. data/app/views/admin/invites/new.html.erb +2 -8
  101. data/app/views/admin/invites/show.html.erb +2 -4
  102. data/app/views/admin/news/_sidebar.html.erb +51 -0
  103. data/app/views/admin/news/index.html.erb +21 -56
  104. data/app/views/admin/pages/_list_item.html.erb +4 -22
  105. data/app/views/admin/pages/_search_bar.html.erb +12 -0
  106. data/app/views/admin/pages/deleted.html.erb +10 -8
  107. data/app/views/admin/pages/edit.html.erb +20 -11
  108. data/app/views/admin/pages/index.html.erb +10 -8
  109. data/app/views/admin/pages/new.html.erb +10 -14
  110. data/app/views/admin/pages/search.html.erb +54 -0
  111. data/app/views/admin/password_resets/show.html.erb +3 -5
  112. data/app/views/admin/users/deactivated.html.erb +6 -7
  113. data/app/views/admin/users/edit.html.erb +7 -9
  114. data/app/views/admin/users/index.html.erb +3 -6
  115. data/app/views/admin/users/login.html.erb +4 -5
  116. data/app/views/admin/users/new.html.erb +2 -4
  117. data/app/views/admin/users/new_password.html.erb +4 -5
  118. data/app/views/admin/users/show.html.erb +11 -9
  119. data/app/views/errors/401.html.erb +2 -1
  120. data/app/views/errors/403.html.erb +2 -1
  121. data/app/views/errors/404.html.erb +1 -3
  122. data/app/views/errors/405.html.erb +2 -1
  123. data/app/views/errors/422.html.erb +2 -1
  124. data/app/views/errors/500.html.erb +2 -3
  125. data/app/views/feeds/pages.rss.builder +3 -9
  126. data/app/views/layouts/admin/_header.html.erb +1 -2
  127. data/app/views/layouts/admin/_page_header.html.erb +4 -4
  128. data/app/views/layouts/admin.html.erb +3 -3
  129. data/app/views/layouts/errors.html.erb +127 -4
  130. data/config/routes.rb +1 -0
  131. data/lib/pages_core/configuration/pages.rb +0 -1
  132. data/lib/pages_core/engine.rb +4 -3
  133. data/lib/pages_core.rb +0 -1
  134. data/lib/rails/generators/pages_core/frontend/frontend_generator.rb +33 -17
  135. data/lib/rails/generators/pages_core/frontend/templates/application.html.erb +0 -1
  136. data/lib/rails/generators/pages_core/frontend/templates/javascript/lib/gridOverlay.ts +40 -0
  137. data/lib/rails/generators/pages_core/frontend/templates/javascript/lib/responsiveEmbeds.ts +68 -0
  138. data/lib/rails/generators/pages_core/frontend/templates/postcss.config.js +17 -0
  139. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/application.postcss.css +4 -0
  140. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/components/base.css +24 -0
  141. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/components/layout.css +21 -0
  142. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/config.css +5 -0
  143. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/global/animation.css +5 -0
  144. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/global/colors.css +18 -0
  145. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/global/fonts.css +6 -0
  146. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/global/grid.css +65 -0
  147. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/global/typography.css +131 -0
  148. data/lib/rails/generators/pages_core/install/templates/pages_initializer.rb +0 -3
  149. metadata +104 -255
  150. data/app/assets/images/pages/admin/icon.png +0 -0
  151. data/app/assets/images/pages/admin/image-editor-bg.png +0 -0
  152. data/app/assets/images/pages/admin/list-table-pin-blue.gif +0 -0
  153. data/app/assets/images/pages/admin/list-table-pin-disabled.gif +0 -0
  154. data/app/assets/images/pages/admin/list-table-pin-green.gif +0 -0
  155. data/app/assets/images/pages/admin/list-table-pin-red.gif +0 -0
  156. data/app/assets/images/pages/admin/list-table-pin-yellow.gif +0 -0
  157. data/app/assets/images/pages/admin/loading-modal.gif +0 -0
  158. data/app/assets/images/pages/feed-icon-14x14.png +0 -0
  159. data/app/assets/stylesheets/pages/admin/components/archive.scss +0 -6
  160. data/app/assets/stylesheets/pages/admin/components/buttons.scss +0 -23
  161. data/app/assets/stylesheets/pages/admin/components/forms.scss +0 -169
  162. data/app/assets/stylesheets/pages/admin/components/links.scss +0 -43
  163. data/app/assets/stylesheets/pages/admin/components/list_table.scss +0 -61
  164. data/app/assets/stylesheets/pages/admin/controllers/users.scss +0 -3
  165. data/app/assets/stylesheets/pages/admin/mixins/breakpoints.scss +0 -21
  166. data/app/assets/stylesheets/pages/admin/mixins/clearfix.scss +0 -7
  167. data/app/assets/stylesheets/pages/admin/mixins/gradients.scss +0 -7
  168. data/app/assets/stylesheets/pages/admin/vars.scss +0 -30
  169. data/app/assets/stylesheets/pages/errors.css +0 -128
  170. data/app/javascript/admin-dist.js +0 -2
  171. data/app/javascript/components/ImageCropper/FocalPoint.jsx +0 -93
  172. data/app/javascript/components/Modal.jsx +0 -59
  173. data/app/javascript/components/PageImages.jsx +0 -25
  174. data/app/javascript/components/PageTree.jsx +0 -196
  175. data/app/javascript/components/RichTextToolbarButton.jsx +0 -20
  176. data/app/javascript/components/Toast.jsx +0 -72
  177. data/app/javascript/components/drag/useDraggable.js +0 -17
  178. data/app/javascript/stores/ModalStore.jsx +0 -12
  179. data/app/javascript/stores/ToastStore.jsx +0 -14
  180. data/app/javascript/stores.js +0 -2
  181. data/lib/rails/generators/pages_core/frontend/templates/javascript/lib/GridOverlay.js +0 -66
  182. data/lib/rails/generators/pages_core/frontend/templates/javascript/lib/ResponsiveEmbeds.js +0 -72
  183. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/application.sass.scss +0 -15
  184. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/components/base.scss +0 -12
  185. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/config.scss +0 -26
  186. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/framework/breakpoints.scss +0 -42
  187. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/framework/clearfix.scss +0 -7
  188. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/framework/fonts.scss +0 -32
  189. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/framework/grid.scss +0 -168
  190. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/framework/grid_overlay.scss +0 -44
  191. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/global/colors.scss +0 -8
  192. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/global/typography.scss +0 -90
  193. data/lib/rails/generators/pages_core/frontend/templates/stylesheets/vendor/normalize.css +0 -349
  194. data/vendor/assets/stylesheets/ReactCrop.css +0 -167
  195. /data/app/assets/stylesheets/{pages/admin/components/tabs.scss → pages_core/admin/components/tabs.css} +0 -0
  196. /data/app/javascript/components/Attachments/{Placeholder.jsx → Placeholder.tsx} +0 -0
  197. /data/app/javascript/components/ImageGrid/{FilePlaceholder.jsx → FilePlaceholder.tsx} +0 -0
  198. /data/app/javascript/{components.js → components.ts} +0 -0
  199. /data/app/javascript/{hooks.js → hooks.ts} +0 -0
@@ -0,0 +1,15 @@
1
+ import { create } from "zustand";
2
+
3
+ interface ModalState {
4
+ component: JSX.Element | null,
5
+ open: (elem: JSX.Element) => void,
6
+ close: () => void
7
+ }
8
+
9
+ const useModalStore = create<ModalState>((set) => ({
10
+ component: null,
11
+ open: (c: JSX.Element) => set({ component: c }),
12
+ close: () => set({ component: null })
13
+ }));
14
+
15
+ export default useModalStore;
@@ -0,0 +1,26 @@
1
+ import { create } from "zustand";
2
+
3
+ export interface Toast {
4
+ type: string,
5
+ message: string
6
+ }
7
+
8
+ interface ToastState {
9
+ toasts: Toast[],
10
+ error: (msg: string) => void,
11
+ notice: (msg: string) => void,
12
+ next: () => void
13
+ }
14
+
15
+ const useToastStore = create<ToastState>((set) => ({
16
+ toasts: [],
17
+ error: (msg: string) => set((state) => (
18
+ { toasts: [...state.toasts, { message: msg, type: "error" }] }
19
+ )),
20
+ notice: (msg: string) => set((state) => (
21
+ { toasts: [...state.toasts, { message: msg, type: "notice" }] }
22
+ )),
23
+ next: () => set((state) => ({ toasts: state.toasts.slice(1) }))
24
+ }));
25
+
26
+ export default useToastStore;
@@ -0,0 +1,2 @@
1
+ export { default as useModalStore } from "./stores/useModalStore";
2
+ export { default as useToastStore } from "./stores/useToastStore";
@@ -0,0 +1,30 @@
1
+ export interface Locale {
2
+ name: string,
3
+ dir: "ltr" | "rtl"
4
+ }
5
+
6
+ export interface AttachmentResource {
7
+ id: number | null,
8
+ name: Record<string, string>,
9
+ description: Record<string, string>,
10
+ url: string
11
+ }
12
+
13
+ export interface ImageResource {
14
+ id: number | null,
15
+ alternative: Record<string, string>,
16
+ caption: Record<string, string>,
17
+ content_type: string,
18
+ filename: string,
19
+ crop_start_x: number | null,
20
+ crop_start_y: number | null,
21
+ crop_width: number | null,
22
+ crop_height: number | null,
23
+ crop_gravity_x: number,
24
+ crop_gravity_y: number,
25
+ real_width: number,
26
+ real_height: number,
27
+ original_url: string,
28
+ thumbnail_url: string
29
+ uncropped_url: string
30
+ }
@@ -2,6 +2,7 @@
2
2
 
3
3
  class AdminMailer < ApplicationMailer
4
4
  default from: proc { "\"Pages\" <no-reply@anyone.no>" }
5
+ layout false
5
6
 
6
7
  def password_reset(user, url)
7
8
  @user = user
data/app/models/invite.rb CHANGED
@@ -15,9 +15,17 @@ class Invite < ApplicationRecord
15
15
 
16
16
  validates :token, presence: true
17
17
 
18
+ validate :user_already_exists
19
+
18
20
  private
19
21
 
20
22
  def ensure_token
21
23
  self.token ||= SecureRandom.hex(32)
22
24
  end
25
+
26
+ def user_already_exists
27
+ return unless User.find_by_email(email)
28
+
29
+ errors.add(:email, :taken)
30
+ end
23
31
  end
@@ -13,6 +13,10 @@ class PagePolicy < Policy
13
13
  index?
14
14
  end
15
15
 
16
+ def search?
17
+ index?
18
+ end
19
+
16
20
  def new?
17
21
  user.role?(:pages)
18
22
  end
@@ -0,0 +1,50 @@
1
+ <%= render(partial: "admin/pages/search_bar",
2
+ locals: { query: search_query }) %>
3
+
4
+ <% if policy(Page).new? %>
5
+ <h2>
6
+ New entry
7
+ </h2>
8
+ <p>
9
+ <%= form_tag new_admin_page_path, method: :get do %>
10
+ In
11
+ <%= select_tag("parent", calendar_page_options(locale)) %>
12
+ <button type="submit">
13
+ Go
14
+ </button>
15
+ <% end %>
16
+ </p>
17
+ <% end %>
18
+
19
+ <div class="archive-index">
20
+ <% calendar_years_with_count.each do |year, year_count| %>
21
+ <h2>
22
+ <%= link_to_unless_current(
23
+ year,
24
+ admin_calendar_path(locale, year: year)
25
+ ) %>
26
+ <span class="count">
27
+ (<%= year_count %>)
28
+ </span>
29
+ </h2>
30
+ <ul>
31
+ <% calendar_months_count(year).each do |month, month_count| %>
32
+ <li>
33
+ <% if year == @year && month == @month %>
34
+ <strong>
35
+ <%= month_name(month) %>
36
+ </strong>
37
+ <% else %>
38
+ <%= link_to_unless_current(
39
+ month_name(month),
40
+ admin_calendar_path(locale, month: month, year: year)
41
+ ) %>
42
+ <% end %>
43
+ <span class="count">
44
+ (<%= month_count %>)
45
+ </span>
46
+ </li>
47
+ <% end %>
48
+ </ul>
49
+ <% end %>
50
+ </div>
@@ -1,57 +1,20 @@
1
- <%
2
- month_names = %w{January February March April May June July August September October November December}
3
- page_title "Calendar"
4
- page_description "Calendar"
1
+ <% content_for :page_title, "Calendar" %>
2
+ <% content_for(:page_description) do %>
3
+ Calendar:
4
+ <em>
5
+ <% if @month %>
6
+ <%= month_name(@month) %>
7
+ <% end %>
8
+ <%= @year %>
9
+ </em>
10
+ <% end %>
5
11
 
6
- if PagesCore.config.localizations?
7
- self.page_description_links = 'In ' + PagesCore.config.locales.map{ |l, n| link_to_unless_current n, calendar_admin_pages_path(l) }.join(link_separator)
8
- end
9
- %>
12
+ <% content_for :page_description_links do %>
13
+ <%= locale_links { |l| admin_calendar_path(l, @year) } %>
14
+ <% end %>
10
15
 
11
16
  <% content_for :sidebar do %>
12
- <h2>New entry</h2>
13
- <p>
14
- <%= form_tag new_admin_page_path, method: :get do %>
15
- In <%= select_tag('parent',
16
- options_for_select(calendar_pages(@locale).map{|p| [page_name(p, include_parents: true).gsub("&raquo;", "»"), p.id] })) %>
17
- <%= submit_tag "Go", name: nil %>
18
- <% end %>
19
- </p>
20
-
21
- <div class="archive-index">
22
- <% calendar_years_with_count.each do |year, year_count| %>
23
- <h2>
24
- <%= link_to_unless_current(year,
25
- admin_calendar_path(
26
- @locale,
27
- year: year)
28
- ) %>
29
- <span class="count">
30
- (<%= year_count %>)
31
- </span>
32
- </h2>
33
- <ul>
34
- <% calendar_months_count(year).each do |month, month_count| %>
35
- <li>
36
- <% if year == @year && month == @month %>
37
- <strong>
38
- <%= month_names[month-1] %>
39
- </strong>
40
- <% else %>
41
- <%= link_to_unless_current(
42
- month_names[month-1],
43
- admin_calendar_path(@locale,
44
- month: month,
45
- year: year)) %>
46
- <% end %>
47
- <span class="count">
48
- (<%= month_count %>)
49
- </span>
50
- </li>
51
- <% end %>
52
- </ul>
53
- <% end %>
54
- </div>
17
+ <%= render(partial: "sidebar", locals: { locale: @locale }) %>
55
18
  <% end %>
56
19
 
57
20
  <% if @pages.any? %>
@@ -72,8 +35,7 @@
72
35
  }) %>
73
36
  <% end %>
74
37
  </table>
75
-
76
- <%= will_paginate @pages %>
38
+ <%= will_paginate @pages, renderer: PagesCore::LinkRenderer %>
77
39
  <% else %>
78
40
  <div class="content">
79
41
  <p>
@@ -1,11 +1,5 @@
1
- <%
2
- self.page_title = "New invite"
3
- self.page_description = "New invite"
4
- %>
5
-
6
- <% content_for(:sidebar) do %>
7
- &nbsp;
8
- <% end %>
1
+ <% content_for :page_title, "New invite" %>
2
+ <% content_for :page_description, "New invite" %>
9
3
 
10
4
  <%= form_for [:admin, @invite], builder: PagesCore::FormBuilder do |f| %>
11
5
  <%= f.labelled_text_field :email %>
@@ -1,7 +1,5 @@
1
- <%
2
- self.page_title = "Welcome"
3
- self.page_description = "Welcome to Pages"
4
- %>
1
+ <% content_for :page_title, "Welcome" %>
2
+ <% content_for :page_description, "Welcome to Pages" %>
5
3
 
6
4
  <div class="content">
7
5
  <p>
@@ -0,0 +1,51 @@
1
+ <%= render(partial: "admin/pages/search_bar",
2
+ locals: { query: search_query }) %>
3
+
4
+ <% if policy(Page).new? %>
5
+ <h2>New article</h2>
6
+ <p>
7
+ <%= form_tag new_admin_page_path, method: :get do %>
8
+ In
9
+ <%= select_tag("parent", news_page_options(news_pages)) %>
10
+ <button type="submit">
11
+ Go
12
+ </button>
13
+ <% end %>
14
+ </p>
15
+ <% end %>
16
+
17
+ <div class="archive-index">
18
+ <% archive_finder.years_with_count.reverse.each do |year, year_count| %>
19
+ <h2>
20
+ <%= link_to_unless_current(
21
+ year,
22
+ admin_news_index_path(locale, year: year, category: category&.slug)
23
+ ) %>
24
+ <%= ": #{@category.name}" if @category %>
25
+ <span class="count">
26
+ (<%= year_count %>)
27
+ </span>
28
+ </h2>
29
+ <ul>
30
+ <% archive_finder.months_in_year_with_count(year).reverse.each do |month, page_count| %>
31
+ <li>
32
+ <% if year == @year && month == @month %>
33
+ <strong>
34
+ <%= month_name(month) %>
35
+ </strong>
36
+ (<%= page_count %>)
37
+ <% else %>
38
+ <%= link_to(
39
+ month_name(month),
40
+ admin_news_index_path(locale, year: year, month: month,
41
+ category: category&.slug)
42
+ ) %>
43
+ <span class="count">
44
+ (<%= page_count %>)
45
+ </span>
46
+ <% end %>
47
+ </li>
48
+ <% end %>
49
+ </ul>
50
+ <% end %>
51
+ </div>
@@ -1,62 +1,27 @@
1
- <%
2
- month_names = %w{January February March April May June July August September October November December}
3
- page_title "News"
4
- page_description "<em>News: #{month_names[@month - 1] if @month} #{@year}</em>"
1
+ <% content_for(:page_title, "News") %>
5
2
 
6
- if PagesCore.config.localizations?
7
- self.page_description_links = 'In ' + PagesCore.config.locales.map{ |l, n| link_to_unless_current n, admin_news_path(l) }.join(link_separator)
8
- end
9
- %>
3
+ <% content_for(:page_description) do %>
4
+ News:
5
+ <em>
6
+ <% if @month %>
7
+ <%= month_name(@month) %>
8
+ <% end %>
9
+ <%= @year %>
10
+ </em>
11
+ <% end %>
12
+
13
+ <% content_for :page_description_links do %>
14
+ <%= locale_links { |l| admin_news_index_path(l, @year) } %>
15
+ <% end %>
10
16
 
11
17
  <% content_for :sidebar do %>
12
- <% if policy(Page).new? %>
13
- <h2>New article</h2>
14
- <p>
15
- <%= form_tag new_admin_page_path, method: :get do %>
16
- In
17
- <%= select_tag('parent',
18
- options_for_select(@news_pages.map{|p| [news_section_name(p, @news_pages).gsub("&raquo;", "»"), p.id] })) %>
19
- <%= submit_tag "Go", name: nil %>
20
- <% end %>
21
- </p>
22
- <% end %>
23
- <div class="archive-index">
24
- <% @archive_finder.years_with_count.reverse.each do |year, year_count| %>
25
- <h2>
26
- <%= link_to_unless_current(year,
27
- admin_news_index_path(
28
- @locale,
29
- year: year,
30
- category: @category&.slug)
31
- ) %>
32
- <%= ": #{@category.name}" if @category %>
33
- <span class="count">
34
- (<%= year_count %>)
35
- </span>
36
- </h2>
37
- <ul>
38
- <% @archive_finder.months_in_year_with_count(year).reverse.each do |month, page_count| %>
39
- <li>
40
- <% if year == @year && month == @month %>
41
- <strong>
42
- <%= month_names[month-1] %>
43
- </strong>
44
- (<%= page_count %>)
45
- <% else %>
46
- <%= link_to(month_names[month-1],
47
- admin_news_index_path(@locale,
48
- month: month,
49
- year: year,
50
- category: @category&.slug)) %>
51
- <span class="count">
52
- (<%= page_count %>)
53
- </span>
54
- <% end %>
55
- </li>
56
- <% end %>
57
- </ul>
58
- <% end %>
59
- </div>
18
+ <%= render(partial: "sidebar",
19
+ locals: {
20
+ locale: @locale,
21
+ category: @category,
22
+ news_pages: @news_pages,
23
+ archive_finder: @archive_finder
24
+ }) %>
60
25
  <% end %>
61
26
 
62
27
  <% if @pages.length > 0 %>
@@ -4,19 +4,13 @@
4
4
  section ||= false
5
5
  sections ||= []
6
6
  %>
7
- <tr class="<%= [page.status_label.downcase,((page.autopublish?) ? 'autopublish' : nil), ((page.pinned?) ? 'pinned' : nil)].join(' ') %>">
7
+ <%= page_list_row(page) do %>
8
8
  <td class="name">
9
9
  <%= link_to_if(policy(page).edit?,
10
10
  page_name(page),
11
11
  edit_admin_page_url(@locale, page),
12
12
  class: 'name_link') %>
13
- <% if page.autopublish? %>
14
- <br />
15
- <small>
16
- This page will be published
17
- <strong><%= publish_time(page.published_at) %></strong>
18
- </small>
19
- <% end %>
13
+ <%= autopublish_notice(page) %>
20
14
  </td>
21
15
  <% if date %>
22
16
  <td class="date">
@@ -24,19 +18,7 @@
24
18
  </td>
25
19
  <% end %>
26
20
  <td>
27
- <% if page.published? %>
28
- <% if page.published_at.year == Time.zone.now.year %>
29
- <%= l(page.published_at, format: :pages_date) %>
30
- <% else %>
31
- <%= l(page.published_at, format: :pages_full) %>
32
- <% end %>
33
- <% else %>
34
- <% if page.status_label == 'Published' %>
35
- <em>Not published</em>
36
- <% else %>
37
- <em><%= page.status_label %></em>
38
- <% end %>
39
- <% end %>
21
+ <%= page_published_status(page) %>
40
22
  </td>
41
23
  <% if author %>
42
24
  <td>
@@ -48,4 +30,4 @@
48
30
  <%= news_section_name(page.parent, sections) %>
49
31
  </td>
50
32
  <% end %>
51
- </tr>
33
+ <% end %>
@@ -0,0 +1,12 @@
1
+ <% query ||= "" %>
2
+ <%= form_tag(search_admin_pages_path(@locale),
3
+ method: "get",
4
+ class: "search-bar") do %>
5
+ <%= text_field_tag(:q, query,
6
+ placeholder: "Search all pages",
7
+ aria: { label: "Search all pages" }) %>
8
+ <button type="submit">
9
+ <i class="fa-solid fa-magnifying-glass"></i>
10
+ Search
11
+ </button>
12
+ <% end %>
@@ -1,11 +1,13 @@
1
- <%
2
- self.page_title = "Pages"
3
- self.page_description = link_to("All pages", admin_pages_path(@locale)) +
4
- " / Deleted pages"
5
- if PagesCore.config.localizations?
6
- self.page_description_links = 'In ' + PagesCore.config.locales.map{ |l, n| link_to_unless_current n, deleted_admin_pages_path(l) }.join(link_separator)
7
- end
8
- %>
1
+ <% content_for :page_title, "Deleted pages" %>
2
+
3
+ <% content_for :page_description do %>
4
+ <%= link_to("All pages", admin_pages_path(@locale)) %> /
5
+ Deleted pages
6
+ <% end %>
7
+
8
+ <% content_for :page_description_links do %>
9
+ <%= locale_links { |l| deleted_admin_pages_path(l) } %>
10
+ <% end %>
9
11
 
10
12
  <% if @pages.any? %>
11
13
  <table class="deleted-pages list">
@@ -1,15 +1,24 @@
1
- <%
2
- self.page_title = "Editing “" + @page.name.to_s + "”"
3
- self.page_description = "Editing " + [@page.ancestors.reverse,@page].flatten.map{|page| link_to((page.name rescue "(Untitled)"), edit_admin_page_path(@locale, page))}.join(" &raquo; ")
1
+ <% content_for :page_title do %>
2
+ <% if @page.name? %>
3
+ Edit “<%= @page.name %>”
4
+ <% else %>
5
+ Edit page
6
+ <% end %>
7
+ <% end %>
8
+ <% content_for :page_description do %>
9
+ Editing
10
+ <% @page.ancestors.reverse.each do |page| %>
11
+ <%= link_to(page.name? ? page.name : tag.i("Untitled"),
12
+ edit_admin_page_path(@locale, page)) %>
13
+ &raquo;
14
+ <% end %>
15
+ <%= link_to(@page.name? ? @page.name : tag.i("Untitled"),
16
+ edit_admin_page_path(@locale, @page)) %>
17
+ <% end %>
4
18
 
5
- if PagesCore.config.localizations?
6
- self.page_description_links = "In " + safe_join(
7
- PagesCore.config.locales.map do |l, name|
8
- link_to_unless((l == @locale.to_sym), name, edit_admin_page_path(l, @page.localize(l)))
9
- end,
10
- link_separator)
11
- end
12
- %>
19
+ <% content_for :page_description_links do %>
20
+ <%= locale_links { |l| edit_admin_page_path(l, @page.localize(l)) } %>
21
+ <% end %>
13
22
 
14
23
  <% content_for :main_wrapper do %>
15
24
  <%= form_for(@page,
@@ -1,15 +1,17 @@
1
- <%
2
- self.page_title = "Pages"
3
- self.page_description = "All pages / " + link_to("Deleted pages", deleted_admin_pages_path(@locale))
1
+ <% content_for :page_title, "Pages" %>
4
2
 
5
- if PagesCore.config.localizations?
6
- self.page_description_links = 'In ' + PagesCore.config.locales.map{ |l, n| link_to_unless_current n, admin_pages_path(l) }.join(link_separator)
7
- end
8
- %>
3
+ <% content_for :page_description do %>
4
+ All pages /
5
+ <%= link_to("Deleted pages", deleted_admin_pages_path(@locale)) %>
6
+ <% end %>
9
7
 
10
- <% content_for :sidebar do %>
8
+ <% content_for :page_description_links do %>
9
+ <%= locale_links { |l| admin_pages_path(l) } %>
11
10
  <% end %>
12
11
 
12
+ <%= render(partial: "admin/pages/search_bar",
13
+ locals: { query: search_query }) %>
14
+
13
15
  <div class="content">
14
16
  <% cache Page.visible.roots.to_a + [current_user, @locale] do %>
15
17
  <%= react_component(
@@ -1,15 +1,11 @@
1
- <%
2
- if @page.parent
3
- self.page_title = "New page"
4
- self.page_description = "<em>#{@page.parent.name}</em> &raquo; New Page"
5
- else
6
- self.page_title = "Create new page"
7
- self.page_description = "You are creating a new root page"
8
- end
9
-
10
- @url_options = { action: :new }
11
- @url_options[:parent] = @page.parent if @page.parent
12
- %>
1
+ <% content_for :page_title, "New page" %>
2
+ <% content_for :page_description do %>
3
+ <% if @page.parent %>
4
+ <em><%= @page.parent.name %></em> &raquo; New Page
5
+ <% else %>
6
+ You are creating a new root page
7
+ <% end %>
8
+ <% end %>
13
9
 
14
10
  <% content_for :main_wrapper do %>
15
11
  <%= form_for(@page,
@@ -25,7 +21,7 @@
25
21
 
26
22
  <% content_for :main do %>
27
23
  <div class="content">
28
- <%= f.hidden_field 'parent_page_id' if @page.parent %>
24
+ <%= f.hidden_field "parent_page_id" if @page.parent %>
29
25
 
30
26
  <%= render(partial: "form", locals: { f: f }) %>
31
27
 
@@ -43,7 +39,7 @@
43
39
  </main>
44
40
 
45
41
  <aside class="sidebar" id="page-form-sidebar">
46
- <%= render partial: 'edit_options', locals: { f: f } %>
42
+ <%= render partial: "edit_options", locals: { f: f } %>
47
43
  </aside>
48
44
  <% end %>
49
45
  <% end %>
@@ -0,0 +1,54 @@
1
+ <% content_for :page_title, "Search pages" %>
2
+
3
+ <% content_for :page_description do %>
4
+ Search pages
5
+ <% end %>
6
+
7
+ <% content_for :page_description_links do %>
8
+ <%= locale_links { |l| search_admin_pages_path(l, q: search_query) } %>
9
+ <% end %>
10
+
11
+ <%= render(partial: "admin/pages/search_bar",
12
+ locals: { query: search_query }) %>
13
+
14
+ <% if @search_documents.any? %>
15
+ <table class="list calendar-item-list">
16
+ <tr>
17
+ <th>Name</th>
18
+ <th>Published</th>
19
+ <th>Author</th>
20
+ <th>Location</th>
21
+ </tr>
22
+ <% @search_documents.results.each do |page| %>
23
+ <%= page_list_row(page) do %>
24
+ <td class="name">
25
+ <%= link_to_if(policy(page).edit?,
26
+ page_name(page),
27
+ edit_admin_page_url(@locale, page),
28
+ class: 'name_link') %>
29
+ <%= autopublish_notice(page) %>
30
+ </td>
31
+ <td>
32
+ <%= page_published_status(page) %>
33
+ </td>
34
+ <td>
35
+ <%= link_to(page.author.name, admin_user_path(page.author)) %>
36
+ </td>
37
+ <td>
38
+ <% if page.parent %>
39
+ <%= page_name(page.parent, include_parents: true) %>
40
+ <% else %>
41
+ Top level
42
+ <% end %>
43
+ </td>
44
+ <% end %>
45
+ <% end %>
46
+ </table>
47
+ <%= will_paginate(@search_documents, renderer: PagesCore::LinkRenderer) %>
48
+ <% else %>
49
+ <div class="content">
50
+ <p>
51
+ Found no results for your search query.
52
+ </p>
53
+ </div>
54
+ <% end %>
@@ -1,8 +1,6 @@
1
- <%
2
- self.page_title = "Reset password"
3
- self.page_description = "Please choose a new password to proceed"
4
- add_body_class "login"
5
- -%>
1
+ <% content_for :page_title, "Reset password" %>
2
+ <% content_for :page_description, "Please choose a new password to proceed" %>
3
+ <% content_for :body_class, "login" %>
6
4
 
7
5
  <div class="login-form">
8
6
  <%= form_for(@user,