pages_core 3.14.0 → 3.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -1
  3. data/app/assets/builds/pages_core/admin-dist.js +19 -8
  4. data/app/assets/builds/pages_core/admin-dist.js.map +4 -4
  5. data/app/assets/builds/pages_core/admin.css +672 -379
  6. data/app/assets/fonts/Inter-Black.woff2 +0 -0
  7. data/app/assets/fonts/Inter-BlackItalic.woff2 +0 -0
  8. data/app/assets/fonts/Inter-Bold.woff2 +0 -0
  9. data/app/assets/fonts/Inter-BoldItalic.woff2 +0 -0
  10. data/app/assets/fonts/Inter-ExtraBold.woff2 +0 -0
  11. data/app/assets/fonts/Inter-ExtraBoldItalic.woff2 +0 -0
  12. data/app/assets/fonts/Inter-ExtraLight.woff2 +0 -0
  13. data/app/assets/fonts/Inter-ExtraLightItalic.woff2 +0 -0
  14. data/app/assets/fonts/Inter-Italic.woff2 +0 -0
  15. data/app/assets/fonts/Inter-Light.woff2 +0 -0
  16. data/app/assets/fonts/Inter-LightItalic.woff2 +0 -0
  17. data/app/assets/fonts/Inter-Medium.woff2 +0 -0
  18. data/app/assets/fonts/Inter-MediumItalic.woff2 +0 -0
  19. data/app/assets/fonts/Inter-Regular.woff2 +0 -0
  20. data/app/assets/fonts/Inter-SemiBold.woff2 +0 -0
  21. data/app/assets/fonts/Inter-SemiBoldItalic.woff2 +0 -0
  22. data/app/assets/fonts/Inter-Thin.woff2 +0 -0
  23. data/app/assets/fonts/Inter-ThinItalic.woff2 +0 -0
  24. data/app/assets/fonts/InterDisplay-Black.woff2 +0 -0
  25. data/app/assets/fonts/InterDisplay-BlackItalic.woff2 +0 -0
  26. data/app/assets/fonts/InterDisplay-Bold.woff2 +0 -0
  27. data/app/assets/fonts/InterDisplay-BoldItalic.woff2 +0 -0
  28. data/app/assets/fonts/InterDisplay-ExtraBold.woff2 +0 -0
  29. data/app/assets/fonts/InterDisplay-ExtraBoldItalic.woff2 +0 -0
  30. data/app/assets/fonts/InterDisplay-ExtraLight.woff2 +0 -0
  31. data/app/assets/fonts/InterDisplay-ExtraLightItalic.woff2 +0 -0
  32. data/app/assets/fonts/InterDisplay-Italic.woff2 +0 -0
  33. data/app/assets/fonts/InterDisplay-Light.woff2 +0 -0
  34. data/app/assets/fonts/InterDisplay-LightItalic.woff2 +0 -0
  35. data/app/assets/fonts/InterDisplay-Medium.woff2 +0 -0
  36. data/app/assets/fonts/InterDisplay-MediumItalic.woff2 +0 -0
  37. data/app/assets/fonts/InterDisplay-Regular.woff2 +0 -0
  38. data/app/assets/fonts/InterDisplay-SemiBold.woff2 +0 -0
  39. data/app/assets/fonts/InterDisplay-SemiBoldItalic.woff2 +0 -0
  40. data/app/assets/fonts/InterDisplay-Thin.woff2 +0 -0
  41. data/app/assets/fonts/InterDisplay-ThinItalic.woff2 +0 -0
  42. data/app/assets/fonts/InterVariable-Italic.woff2 +0 -0
  43. data/app/assets/fonts/InterVariable.woff2 +0 -0
  44. data/app/assets/stylesheets/pages_core/admin/components/archive.css +1 -1
  45. data/app/assets/stylesheets/pages_core/admin/components/attachments.css +22 -34
  46. data/app/assets/stylesheets/pages_core/admin/components/base.css +1 -68
  47. data/app/assets/stylesheets/pages_core/admin/components/forms.css +107 -48
  48. data/app/assets/stylesheets/pages_core/admin/components/header.css +56 -58
  49. data/app/assets/stylesheets/pages_core/admin/components/image_editor.css +35 -24
  50. data/app/assets/stylesheets/pages_core/admin/components/image_grid.css +28 -27
  51. data/app/assets/stylesheets/pages_core/admin/components/image_uploader.css +5 -5
  52. data/app/assets/stylesheets/pages_core/admin/components/layout.css +7 -1
  53. data/app/assets/stylesheets/pages_core/admin/components/list_table.css +24 -15
  54. data/app/assets/stylesheets/pages_core/admin/components/page_tree.css +63 -104
  55. data/app/assets/stylesheets/pages_core/admin/components/pagination.css +12 -13
  56. data/app/assets/stylesheets/pages_core/admin/components/search.css +1 -16
  57. data/app/assets/stylesheets/pages_core/admin/components/sidebar.css +5 -11
  58. data/app/assets/stylesheets/pages_core/admin/components/tag_editor.css +22 -36
  59. data/app/assets/stylesheets/pages_core/admin/components/toast.css +1 -2
  60. data/app/assets/stylesheets/pages_core/admin/components/toolbar.css +10 -10
  61. data/app/assets/stylesheets/pages_core/admin/components/totp.css +1 -1
  62. data/app/assets/stylesheets/pages_core/admin/controllers/pages.css +37 -51
  63. data/app/assets/stylesheets/pages_core/admin/global/fonts.css +271 -0
  64. data/app/assets/stylesheets/pages_core/admin/global/typography.css +109 -0
  65. data/app/assets/stylesheets/pages_core/admin/vars.css +1 -3
  66. data/app/assets/stylesheets/pages_core/admin.postcss.css +1 -0
  67. data/app/controllers/admin/account_recoveries_controller.rb +2 -2
  68. data/app/controllers/admin/pages_controller.rb +22 -42
  69. data/app/controllers/concerns/pages_core/error_reporting.rb +1 -1
  70. data/app/controllers/concerns/pages_core/page_parameters.rb +29 -0
  71. data/app/controllers/concerns/pages_core/policies_helper.rb +1 -1
  72. data/app/controllers/concerns/pages_core/preview_pages_controller.rb +20 -20
  73. data/app/controllers/pages_core/admin_controller.rb +0 -2
  74. data/app/controllers/pages_core/frontend/pages_controller.rb +2 -6
  75. data/app/formatters/pages_core/html_formatter.rb +2 -4
  76. data/app/helpers/admin/menu_helper.rb +5 -4
  77. data/app/helpers/admin/pages_helper.rb +1 -21
  78. data/app/helpers/pages_core/admin/admin_helper.rb +2 -3
  79. data/app/helpers/pages_core/admin/content_tabs_helper.rb +1 -2
  80. data/app/helpers/pages_core/admin/labelled_field_helper.rb +1 -1
  81. data/app/helpers/pages_core/frontend_helper.rb +1 -1
  82. data/app/helpers/pages_core/images_helper.rb +10 -8
  83. data/app/helpers/pages_core/labelled_form_builder.rb +2 -7
  84. data/app/helpers/pages_core/page_path_helper.rb +1 -1
  85. data/app/javascript/components/Attachments/Attachment.tsx +20 -18
  86. data/app/javascript/components/Attachments/AttachmentEditor.tsx +11 -9
  87. data/app/javascript/components/{Attachments.jsx → Attachments/List.tsx} +58 -63
  88. data/app/javascript/components/Attachments/useAttachments.ts +15 -0
  89. data/app/javascript/components/Attachments.tsx +14 -0
  90. data/app/javascript/components/DateRangeSelect.tsx +105 -0
  91. data/app/javascript/components/DateTimeSelect.tsx +136 -0
  92. data/app/javascript/components/EditableImage.tsx +11 -9
  93. data/app/javascript/components/FileUploadButton.tsx +7 -7
  94. data/app/javascript/components/ImageCropper/FocalPoint.tsx +9 -12
  95. data/app/javascript/components/ImageCropper/Image.tsx +10 -8
  96. data/app/javascript/components/ImageCropper/Toolbar.tsx +11 -12
  97. data/app/javascript/components/ImageCropper/useCrop.ts +24 -53
  98. data/app/javascript/components/ImageCropper.tsx +10 -15
  99. data/app/javascript/components/ImageEditor/Form.tsx +12 -8
  100. data/app/javascript/components/ImageEditor.tsx +12 -7
  101. data/app/javascript/components/ImageGrid/DragElement.tsx +9 -12
  102. data/app/javascript/components/{ImageGrid.jsx → ImageGrid/Grid.tsx} +62 -71
  103. data/app/javascript/components/ImageGrid/GridImage.tsx +22 -23
  104. data/app/javascript/components/ImageGrid/Placeholder.tsx +2 -2
  105. data/app/javascript/components/ImageGrid/useImageGrid.ts +26 -0
  106. data/app/javascript/components/ImageGrid.tsx +15 -0
  107. data/app/javascript/components/ImageUploader.tsx +35 -22
  108. data/app/javascript/components/LabelledField.tsx +34 -0
  109. data/app/javascript/components/Modal.tsx +2 -2
  110. data/app/javascript/components/PageForm/Block.tsx +81 -0
  111. data/app/javascript/components/PageForm/Content.tsx +54 -0
  112. data/app/javascript/components/PageForm/Dates.tsx +66 -0
  113. data/app/javascript/components/PageForm/Files.tsx +28 -0
  114. data/app/javascript/components/PageForm/Form.tsx +41 -0
  115. data/app/javascript/components/PageForm/Images.tsx +28 -0
  116. data/app/javascript/components/PageForm/LocaleLinks.tsx +36 -0
  117. data/app/javascript/components/PageForm/Metadata.tsx +67 -0
  118. data/app/javascript/components/PageForm/Options.tsx +180 -0
  119. data/app/javascript/components/PageForm/PageDescription.tsx +48 -0
  120. data/app/javascript/components/PageForm/PathSegment.tsx +65 -0
  121. data/app/javascript/components/PageForm/TabPanel.tsx +21 -0
  122. data/app/javascript/components/PageForm/Tabs.tsx +33 -0
  123. data/app/javascript/components/PageForm/UnconfiguredContent.tsx +42 -0
  124. data/app/javascript/components/PageForm/pageParams.ts +95 -0
  125. data/app/javascript/components/PageForm/preview.ts +23 -0
  126. data/app/javascript/components/PageForm/usePage.ts +169 -0
  127. data/app/javascript/components/PageForm/useTabs.ts +46 -0
  128. data/app/javascript/components/PageForm.tsx +163 -0
  129. data/app/javascript/components/PageImages.tsx +7 -9
  130. data/app/javascript/components/PageTree/Draggable.tsx +40 -39
  131. data/app/javascript/components/PageTree/Node.tsx +62 -56
  132. data/app/javascript/components/PageTree/PageName.tsx +28 -0
  133. data/app/javascript/components/PageTree.tsx +65 -53
  134. data/app/javascript/components/{RichTextArea.jsx → RichTextArea.tsx} +98 -79
  135. data/app/javascript/components/RichTextToolbarButton.tsx +4 -6
  136. data/app/javascript/components/TagEditor/AddTagForm.tsx +19 -12
  137. data/app/javascript/components/TagEditor/Editor.tsx +32 -0
  138. data/app/javascript/components/TagEditor/Tag.tsx +6 -4
  139. data/app/javascript/components/TagEditor/useTags.ts +58 -0
  140. data/app/javascript/components/TagEditor.tsx +8 -58
  141. data/app/javascript/components/Toast.tsx +3 -3
  142. data/app/javascript/components/drag/draggedOrder.ts +22 -14
  143. data/app/javascript/components/drag/useDragCollection.ts +35 -30
  144. data/app/javascript/components/drag/useDragUploader.ts +32 -21
  145. data/app/javascript/components/drag/useDraggable.ts +7 -6
  146. data/app/javascript/components/drag.ts +0 -1
  147. data/app/javascript/components.ts +1 -3
  148. data/app/javascript/features/RichText.tsx +2 -3
  149. data/app/javascript/features/contentTabs.ts +79 -0
  150. data/app/javascript/index.ts +5 -12
  151. data/app/javascript/lib/Tree.ts +31 -45
  152. data/app/javascript/lib/request.ts +11 -11
  153. data/app/javascript/stores/useToastStore.ts +1 -1
  154. data/app/javascript/types/Attachments.ts +29 -0
  155. data/app/javascript/types/Crop.ts +36 -0
  156. data/app/javascript/types/Drag.ts +34 -0
  157. data/app/javascript/types/Images.ts +47 -0
  158. data/app/javascript/types/PageEditor.ts +26 -0
  159. data/app/javascript/types/Pages.ts +75 -0
  160. data/app/javascript/types/Tags.ts +9 -0
  161. data/app/javascript/types/Template.ts +24 -0
  162. data/app/javascript/types/Trees.ts +19 -0
  163. data/app/javascript/types.ts +2 -25
  164. data/app/models/attachment.rb +1 -1
  165. data/app/models/concerns/pages_core/authenticable_user.rb +63 -0
  166. data/app/models/concerns/pages_core/emailable.rb +16 -0
  167. data/app/models/concerns/pages_core/page_model/templateable.rb +2 -16
  168. data/app/models/invite.rb +2 -6
  169. data/app/models/otp_secret.rb +4 -4
  170. data/app/models/page.rb +0 -3
  171. data/app/models/user.rb +2 -46
  172. data/app/policies/page_policy.rb +6 -2
  173. data/app/resources/admin/page_resource.rb +95 -0
  174. data/app/resources/admin/page_tree_resource.rb +27 -0
  175. data/app/resources/admin/template_configuration_resource.rb +50 -0
  176. data/app/views/admin/news/_sidebar.html.erb +2 -4
  177. data/app/views/admin/news/index.html.erb +0 -1
  178. data/app/views/admin/pages/_form.html.erb +10 -30
  179. data/app/views/admin/pages/_search_bar.html.erb +1 -1
  180. data/app/views/admin/pages/edit.html.erb +1 -57
  181. data/app/views/admin/pages/index.html.erb +1 -1
  182. data/app/views/admin/pages/new.html.erb +1 -44
  183. data/app/views/admin/sessions/new.html.erb +9 -11
  184. data/app/views/admin/users/_access_control.html.erb +5 -1
  185. data/app/views/admin/users/_list.html.erb +12 -7
  186. data/app/views/layouts/admin/_header.html.erb +2 -4
  187. data/app/views/layouts/admin/_page_header.html.erb +1 -2
  188. data/app/views/layouts/admin.html.erb +1 -1
  189. data/config/locales/en.yml +0 -4
  190. data/config/routes.rb +3 -7
  191. data/db/migrate/20240126160700_add_2fa_fields.rb +5 -1
  192. data/db/migrate/20240131140700_change_email_to_citext.rb +18 -0
  193. data/db/migrate/20240201160700_remove_persistent_data.rb +7 -0
  194. data/db/migrate/20240508145300_remove_categories.rb +21 -0
  195. data/lib/pages_core/configuration/base.rb +2 -2
  196. data/lib/pages_core/templates/configuration.rb +1 -1
  197. data/lib/pages_core/templates/configuration_proxy.rb +2 -2
  198. data/lib/pages_core/templates/template_configuration.rb +11 -1
  199. data/lib/pages_core/templates.rb +6 -4
  200. data/lib/pages_core/version.rb +1 -1
  201. data/lib/rails/generators/pages_core/frontend/templates/javascript/lib/gridOverlay.ts +6 -7
  202. data/lib/rails/generators/pages_core/frontend/templates/javascript/lib/responsiveEmbeds.ts +17 -12
  203. data/lib/rails/generators/pages_core/rspec/rspec_generator.rb +0 -2
  204. data/lib/rails/generators/pages_core/rspec/templates/rails_helper.rb +3 -4
  205. metadata +95 -29
  206. data/app/assets/stylesheets/pages_core/admin/components/login.css +0 -27
  207. data/app/controllers/admin/categories_controller.rb +0 -56
  208. data/app/controllers/concerns/pages_core/admin/persistent_params.rb +0 -75
  209. data/app/helpers/pages_core/admin/page_blocks_helper.rb +0 -66
  210. data/app/helpers/pages_core/admin/page_json_helper.rb +0 -23
  211. data/app/javascript/components/DateRangeSelect.jsx +0 -225
  212. data/app/javascript/components/PageDates.jsx +0 -73
  213. data/app/javascript/components/PageFiles.jsx +0 -25
  214. data/app/javascript/components/PageTree/types.ts +0 -15
  215. data/app/javascript/components/drag/types.ts +0 -28
  216. data/app/javascript/controllers/EditPageController.ts +0 -22
  217. data/app/javascript/controllers/MainController.ts +0 -74
  218. data/app/javascript/controllers/PageOptionsController.js +0 -67
  219. data/app/models/category.rb +0 -22
  220. data/app/models/concerns/pages_core/has_otp.rb +0 -27
  221. data/app/models/page_category.rb +0 -6
  222. data/app/views/admin/pages/_edit_content.html.erb +0 -19
  223. data/app/views/admin/pages/_edit_files.html.erb +0 -4
  224. data/app/views/admin/pages/_edit_images.html.erb +0 -4
  225. data/app/views/admin/pages/_edit_metadata.html.erb +0 -35
  226. data/app/views/admin/pages/_edit_options.html.erb +0 -91
  227. data/lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb +0 -11
@@ -1,10 +1,8 @@
1
1
  <header>
2
- <div class="logo">
3
- <%= link_to image_tag("pages/admin/icon.svg"), '/admin' %>
4
- </div>
5
2
  <div class="site-name">
6
3
  <h1>
7
- <%= link_to "Pages", "/admin" %> <%= PagesCore.config :site_name %>
4
+ <%= link_to("Pages", "/admin", class: "logo") %>
5
+ <%= PagesCore.config :site_name %>
8
6
  </h1>
9
7
  </div>
10
8
  <% if logged_in? %>
@@ -13,8 +13,7 @@
13
13
  role="tablist">
14
14
  <% content_tabs.map do |t| %>
15
15
  <li id="content-tab-link-<%= t[:key] %>"
16
- data-tab="<%= t[:key] %>"
17
- data-main-target="link">
16
+ data-tab="<%= t[:key] %>">
18
17
  <% if t[:options][:disabled] == true %>
19
18
  <%= t[:name] %>
20
19
  <% else %>
@@ -44,7 +44,7 @@
44
44
  <%= yield :main_wrapper %>
45
45
  <% else %>
46
46
  <div class="main-wrapper">
47
- <main data-controller="main">
47
+ <main>
48
48
  <%= render(partial: "layouts/admin/page_header") %>
49
49
  <%= yield %>
50
50
  </main>
@@ -19,10 +19,6 @@ en:
19
19
  image: Profile picture
20
20
  pages_core:
21
21
  account_holder_exists: Account holder already exists
22
- categories_controller:
23
- created: New category created
24
- deleted: Category was deleted
25
- updated: Category was updated
26
22
  changes_saved: Your changes were saved
27
23
  invalid_login: >
28
24
  The provided email address and password combination was not valid
data/config/routes.rb CHANGED
@@ -17,9 +17,7 @@ Rails.application.routes.draw do
17
17
  collection do
18
18
  get "search"
19
19
  post "search"
20
- end
21
- member do
22
- put "preview"
20
+ post "preview"
23
21
  end
24
22
  resources :files, controller: "page_files"
25
23
  end
@@ -37,6 +35,8 @@ Rails.application.routes.draw do
37
35
  resource :sitemap, only: [:show]
38
36
 
39
37
  namespace :admin do
38
+ get "users/login" => redirect("/admin/login")
39
+
40
40
  # Invites
41
41
  resources :invites do
42
42
  member do
@@ -63,16 +63,12 @@ Rails.application.routes.draw do
63
63
  resources :users do
64
64
  collection do
65
65
  get "deactivated"
66
- get "login"
67
66
  end
68
67
  member do
69
68
  delete "delete_image"
70
69
  end
71
70
  end
72
71
 
73
- # Categories
74
- resources :categories
75
-
76
72
  # Authentication
77
73
  resource :session, only: %i[create destroy] do
78
74
  member { post :verify_otp }
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Add2faFields < ActiveRecord::Migration[7.0]
4
+ class User < ApplicationRecord; end
5
+
4
6
  def change
5
7
  change_table :users do |t|
6
8
  t.boolean :otp_enabled, null: false, default: false
@@ -14,7 +16,9 @@ class Add2faFields < ActiveRecord::Migration[7.0]
14
16
 
15
17
  reversible do |dir|
16
18
  dir.up do
17
- User.find_each { |u| u.update(session_token: SecureRandom.hex(32)) }
19
+ User.find_each do |u|
20
+ u.update_columns(session_token: SecureRandom.hex(32))
21
+ end
18
22
  change_column_null :users, :session_token, false
19
23
  end
20
24
  end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ChangeEmailToCitext < ActiveRecord::Migration[7.0]
4
+ def up
5
+ enable_extension "citext"
6
+ %i[users invites].each do |t|
7
+ change_column t, :email, :citext
8
+ add_index t, :email, unique: true, name: "index_#{t}_on_email"
9
+ end
10
+ end
11
+
12
+ def down
13
+ %i[users invites].each do |t|
14
+ change_column t, :email, :string
15
+ remove_index t, name: "index_#{t}_on_email"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RemovePersistentData < ActiveRecord::Migration[7.0]
4
+ def change
5
+ remove_column :users, :persistent_data, :text
6
+ end
7
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RemoveCategories < ActiveRecord::Migration[7.0]
4
+ def change
5
+ drop_table :page_categories do |t|
6
+ t.integer :page_id
7
+ t.integer :category_id
8
+ t.index :category_id
9
+ t.index :page_id
10
+ end
11
+
12
+ drop_table :categories do |t|
13
+ t.string :name
14
+ t.string :slug
15
+ t.integer :position
16
+ t.datetime :created_at, null: false
17
+ t.datetime :updated_at, null: false
18
+ t.index :slug
19
+ end
20
+ end
21
+ end
@@ -18,11 +18,11 @@ module PagesCore
18
18
  args.any? ? set(key, *args) : get(key)
19
19
  end
20
20
 
21
- define_method "#{key}=" do |value|
21
+ define_method :"#{key}=" do |value|
22
22
  set(key, value)
23
23
  end
24
24
 
25
- define_method "#{key}?" do
25
+ define_method :"#{key}?" do
26
26
  get(key) ? true : false
27
27
  end
28
28
  end
@@ -95,7 +95,7 @@ module PagesCore
95
95
 
96
96
  def valid_template_options
97
97
  %i[template image images files text_filter blocks
98
- enabled_blocks sub_template tags dates]
98
+ enabled_blocks sub_template tags dates name]
99
99
  end
100
100
 
101
101
  def configure_block(tpl_name, block_name, title = nil, options = {})
@@ -9,11 +9,11 @@ module PagesCore
9
9
  end
10
10
 
11
11
  def method_missing(method_name, *args, &block)
12
- if @parent && block_given?
12
+ if @parent && block
13
13
  @callback.call(@parent, method_name, block)
14
14
  elsif @parent
15
15
  @callback.call(@parent, method_name, *args)
16
- elsif block_given?
16
+ elsif block
17
17
  @callback.call(method_name, block)
18
18
  else
19
19
  @callback.call(method_name, *args)
@@ -29,7 +29,7 @@ module PagesCore
29
29
 
30
30
  (config.get(:default, :blocks).to_a + template_blocks)
31
31
  .compact
32
- .select { |_, opts| opts[:localized] }.map(&:first)
32
+ .select { |_, opts| opts[:localized] }.map(&:first).uniq
33
33
  end
34
34
 
35
35
  private
@@ -53,6 +53,10 @@ module PagesCore
53
53
  self.class.config
54
54
  end
55
55
 
56
+ def name
57
+ value(:name) || default_name
58
+ end
59
+
56
60
  def value(*path)
57
61
  path = [path, :value].flatten
58
62
  value = config.get(*[:default, path].flatten)
@@ -103,6 +107,12 @@ module PagesCore
103
107
  size: :small
104
108
  }
105
109
  end
110
+
111
+ def default_name
112
+ return "[Default]" if template_name == :index
113
+
114
+ template_name.to_s.humanize
115
+ end
106
116
  end
107
117
 
108
118
  class << self
@@ -10,6 +10,10 @@ require "pages_core/templates/template_configuration"
10
10
  module PagesCore
11
11
  module Templates
12
12
  class << self
13
+ def all
14
+ names.map { |n| PagesCore::Templates::TemplateConfiguration.new(n) }
15
+ end
16
+
13
17
  def names
14
18
  @names ||= find_all_templates
15
19
  end
@@ -17,10 +21,8 @@ module PagesCore
17
21
  private
18
22
 
19
23
  def template_paths
20
- [
21
- PagesCore.plugin_root.join("app/views/pages/templates"),
22
- Rails.root.join("app/views/pages/templates")
23
- ]
24
+ [PagesCore.plugin_root.join("app/views/pages/templates"),
25
+ Rails.root.join("app/views/pages/templates")]
24
26
  end
25
27
 
26
28
  def template_files
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PagesCore
4
- unless PagesCore.const_defined?("VERSION")
4
+ unless PagesCore.const_defined?(:VERSION)
5
5
  VERSION = File.read(File.expand_path("../../VERSION", __dir__)).strip
6
6
  end
7
7
  end
@@ -1,13 +1,12 @@
1
1
  function ready(callback: () => void) {
2
- if (document.readyState === "complete" ||
3
- (document.readyState !== "loading" && !document.documentElement.doScroll)) {
4
- callback();
5
- } else {
6
- document.addEventListener("DOMContentLoaded", callback);
7
- }
2
+ if (document.readyState !== "loading") {
3
+ callback();
4
+ } else {
5
+ document.addEventListener("DOMContentLoaded", callback);
6
+ }
8
7
  }
9
8
 
10
- function applyGrid () {
9
+ function applyGrid() {
11
10
  let showGrid = false;
12
11
  const gridOverlay = document.querySelector(".grid-overlay");
13
12
 
@@ -1,14 +1,17 @@
1
1
  const selectors = [
2
- "iframe[src*=\"bandcamp.com\"]",
3
- "iframe[src*=\"player.vimeo.com\"]",
4
- "iframe[src*=\"youtube.com\"]",
5
- "iframe[src*=\"youtube-nocookie.com\"]",
6
- "iframe[src*=\"spotify.com\"]",
7
- "iframe[src*=\"kickstarter.com\"][src*=\"video.html\"]"
2
+ 'iframe[src*="bandcamp.com"]',
3
+ 'iframe[src*="player.vimeo.com"]',
4
+ 'iframe[src*="youtube.com"]',
5
+ 'iframe[src*="youtube-nocookie.com"]',
6
+ 'iframe[src*="spotify.com"]',
7
+ 'iframe[src*="kickstarter.com"][src*="video.html"]'
8
8
  ];
9
9
 
10
10
  function readyHandler(fn: () => void) {
11
- if (document.readyState === "complete" || document.readyState === "interactive") {
11
+ if (
12
+ document.readyState === "complete" ||
13
+ document.readyState === "interactive"
14
+ ) {
12
15
  setTimeout(fn, 1);
13
16
  } else {
14
17
  document.addEventListener("DOMContentLoaded", fn);
@@ -19,12 +22,14 @@ function wrapEmbed(embed: HTMLElement): HTMLElement {
19
22
  const parent = embed.parentNode as HTMLElement;
20
23
 
21
24
  // Recycle the existing container if the embed is already responsive.
22
- if (parent &&
25
+ if (
26
+ parent &&
23
27
  parent.tagName === "DIV" &&
24
28
  parent.childNodes.length === 1 &&
25
- parent.style.position === "relative") {
26
- return parent;
27
- }
29
+ parent.style.position === "relative"
30
+ ) {
31
+ return parent;
32
+ }
28
33
 
29
34
  const wrapper = document.createElement("div");
30
35
  if (parent.tagName === "P") {
@@ -51,7 +56,7 @@ function applyEmbed(embed: HTMLElement) {
51
56
  wrapper.classList.add("responsive-embed");
52
57
  wrapper.style.position = "relative";
53
58
  wrapper.style.width = "100%";
54
- wrapper.style.paddingTop = 0;
59
+ wrapper.style.paddingTop = "0";
55
60
  wrapper.style.paddingBottom = `${ratio * 100}%`;
56
61
 
57
62
  embed.style.position = "absolute";
@@ -23,14 +23,12 @@ module PagesCore
23
23
  def setup_rspec
24
24
  create_file File.join(".rspec"), "--format Fuubar\n--colour\n" \
25
25
  "--require spec_helper"
26
- create_file File.join("spec/controllers/.keep")
27
26
  create_file File.join("spec/mailers/preview/.keep")
28
27
  create_file File.join("spec/models/.keep")
29
28
  create_file File.join("spec/system/.keep")
30
29
  template "spec_helper.rb", File.join("spec/spec_helper.rb")
31
30
  template "rails_helper.rb", File.join("spec/rails_helper.rb")
32
31
  template "factories.rb", File.join("spec/factories.rb")
33
- template "mailer_macros.rb", File.join("spec/support/mailer_macros.rb")
34
32
  template("page_templates_spec.rb",
35
33
  File.join("spec/system/page_templates_spec.rb"))
36
34
  end
@@ -6,16 +6,16 @@ ENV["RAILS_ENV"] ||= "test"
6
6
  require "simplecov"
7
7
  SimpleCov.start "rails" if ARGV.grep(/spec\.rb/).empty?
8
8
 
9
+ require "spec_helper"
9
10
  require File.expand_path("../config/environment", __dir__)
10
11
 
11
12
  # Prevent database truncation if the environment is production
12
13
  if Rails.env.production?
13
14
  abort("The Rails environment is running in production mode!")
14
15
  end
15
- require "spec_helper"
16
16
  require "rspec/rails"
17
- # Add additional requires below this line. Rails is not loaded until this point!
18
17
 
18
+ # Add additional requires below this line. Rails is not loaded until this point!
19
19
  require "shoulda-matchers"
20
20
 
21
21
  # Requires supporting ruby files with custom matchers and macros, etc, in
@@ -41,7 +41,7 @@ ActiveRecord::Migration.maintain_test_schema!
41
41
 
42
42
  RSpec.configure do |config|
43
43
  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
44
- config.fixture_path = Rails.root.join("spec/fixtures")
44
+ # config.fixture_paths = [Rails.root.join("spec/fixtures")]
45
45
 
46
46
  # If you're not using ActiveRecord, or you'd prefer not to run each of your
47
47
  # examples within a transaction, remove the following line or assign false
@@ -69,7 +69,6 @@ RSpec.configure do |config|
69
69
  # config.filter_gems_from_backtrace("gem name")
70
70
 
71
71
  config.include ActiveJob::TestHelper
72
- config.include MailerMacros
73
72
 
74
73
  # Use FactoryBot shorthand
75
74
  config.include FactoryBot::Syntax::Methods
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pages_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.14.0
4
+ version: 3.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Inge Jørgensen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-30 00:00:00.000000000 Z
11
+ date: 2024-05-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 9.0.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 9.0.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: dis
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -377,6 +377,44 @@ files:
377
377
  - app/assets/builds/pages_core/admin-dist.js
378
378
  - app/assets/builds/pages_core/admin-dist.js.map
379
379
  - app/assets/builds/pages_core/admin.css
380
+ - app/assets/fonts/Inter-Black.woff2
381
+ - app/assets/fonts/Inter-BlackItalic.woff2
382
+ - app/assets/fonts/Inter-Bold.woff2
383
+ - app/assets/fonts/Inter-BoldItalic.woff2
384
+ - app/assets/fonts/Inter-ExtraBold.woff2
385
+ - app/assets/fonts/Inter-ExtraBoldItalic.woff2
386
+ - app/assets/fonts/Inter-ExtraLight.woff2
387
+ - app/assets/fonts/Inter-ExtraLightItalic.woff2
388
+ - app/assets/fonts/Inter-Italic.woff2
389
+ - app/assets/fonts/Inter-Light.woff2
390
+ - app/assets/fonts/Inter-LightItalic.woff2
391
+ - app/assets/fonts/Inter-Medium.woff2
392
+ - app/assets/fonts/Inter-MediumItalic.woff2
393
+ - app/assets/fonts/Inter-Regular.woff2
394
+ - app/assets/fonts/Inter-SemiBold.woff2
395
+ - app/assets/fonts/Inter-SemiBoldItalic.woff2
396
+ - app/assets/fonts/Inter-Thin.woff2
397
+ - app/assets/fonts/Inter-ThinItalic.woff2
398
+ - app/assets/fonts/InterDisplay-Black.woff2
399
+ - app/assets/fonts/InterDisplay-BlackItalic.woff2
400
+ - app/assets/fonts/InterDisplay-Bold.woff2
401
+ - app/assets/fonts/InterDisplay-BoldItalic.woff2
402
+ - app/assets/fonts/InterDisplay-ExtraBold.woff2
403
+ - app/assets/fonts/InterDisplay-ExtraBoldItalic.woff2
404
+ - app/assets/fonts/InterDisplay-ExtraLight.woff2
405
+ - app/assets/fonts/InterDisplay-ExtraLightItalic.woff2
406
+ - app/assets/fonts/InterDisplay-Italic.woff2
407
+ - app/assets/fonts/InterDisplay-Light.woff2
408
+ - app/assets/fonts/InterDisplay-LightItalic.woff2
409
+ - app/assets/fonts/InterDisplay-Medium.woff2
410
+ - app/assets/fonts/InterDisplay-MediumItalic.woff2
411
+ - app/assets/fonts/InterDisplay-Regular.woff2
412
+ - app/assets/fonts/InterDisplay-SemiBold.woff2
413
+ - app/assets/fonts/InterDisplay-SemiBoldItalic.woff2
414
+ - app/assets/fonts/InterDisplay-Thin.woff2
415
+ - app/assets/fonts/InterDisplay-ThinItalic.woff2
416
+ - app/assets/fonts/InterVariable-Italic.woff2
417
+ - app/assets/fonts/InterVariable.woff2
380
418
  - app/assets/images/pages/admin/angle-down-solid.svg
381
419
  - app/assets/images/pages/admin/drag-icon.png
382
420
  - app/assets/images/pages/admin/icon.svg
@@ -394,7 +432,6 @@ files:
394
432
  - app/assets/stylesheets/pages_core/admin/components/layout.css
395
433
  - app/assets/stylesheets/pages_core/admin/components/links.css
396
434
  - app/assets/stylesheets/pages_core/admin/components/list_table.css
397
- - app/assets/stylesheets/pages_core/admin/components/login.css
398
435
  - app/assets/stylesheets/pages_core/admin/components/modal.css
399
436
  - app/assets/stylesheets/pages_core/admin/components/page_tree.css
400
437
  - app/assets/stylesheets/pages_core/admin/components/pagination.css
@@ -408,6 +445,8 @@ files:
408
445
  - app/assets/stylesheets/pages_core/admin/components/totp.css
409
446
  - app/assets/stylesheets/pages_core/admin/controllers/pages.css
410
447
  - app/assets/stylesheets/pages_core/admin/controllers/users.css
448
+ - app/assets/stylesheets/pages_core/admin/global/fonts.css
449
+ - app/assets/stylesheets/pages_core/admin/global/typography.css
411
450
  - app/assets/stylesheets/pages_core/admin/vars.css
412
451
  - app/controller_dummies/admin/admin_controller.rb
413
452
  - app/controller_dummies/application_controller.rb
@@ -420,7 +459,6 @@ files:
420
459
  - app/controllers/admin/account_recoveries_controller.rb
421
460
  - app/controllers/admin/attachments_controller.rb
422
461
  - app/controllers/admin/calendars_controller.rb
423
- - app/controllers/admin/categories_controller.rb
424
462
  - app/controllers/admin/images_controller.rb
425
463
  - app/controllers/admin/invites_controller.rb
426
464
  - app/controllers/admin/news_controller.rb
@@ -429,10 +467,10 @@ files:
429
467
  - app/controllers/admin/recovery_codes_controller.rb
430
468
  - app/controllers/admin/sessions_controller.rb
431
469
  - app/controllers/admin/users_controller.rb
432
- - app/controllers/concerns/pages_core/admin/persistent_params.rb
433
470
  - app/controllers/concerns/pages_core/authentication.rb
434
471
  - app/controllers/concerns/pages_core/error_renderer.rb
435
472
  - app/controllers/concerns/pages_core/error_reporting.rb
473
+ - app/controllers/concerns/pages_core/page_parameters.rb
436
474
  - app/controllers/concerns/pages_core/policies_helper.rb
437
475
  - app/controllers/concerns/pages_core/preview_pages_controller.rb
438
476
  - app/controllers/concerns/pages_core/process_titler.rb
@@ -466,8 +504,6 @@ files:
466
504
  - app/helpers/pages_core/admin/labelled_field_helper.rb
467
505
  - app/helpers/pages_core/admin/locales_helper.rb
468
506
  - app/helpers/pages_core/admin/localized_form_builder.rb
469
- - app/helpers/pages_core/admin/page_blocks_helper.rb
470
- - app/helpers/pages_core/admin/page_json_helper.rb
471
507
  - app/helpers/pages_core/admin/tag_editor_helper.rb
472
508
  - app/helpers/pages_core/application_helper.rb
473
509
  - app/helpers/pages_core/attachments_helper.rb
@@ -482,11 +518,14 @@ files:
482
518
  - app/helpers/pages_core/page_path_helper.rb
483
519
  - app/javascript/admin-dist.ts
484
520
  - app/javascript/components.ts
485
- - app/javascript/components/Attachments.jsx
521
+ - app/javascript/components/Attachments.tsx
486
522
  - app/javascript/components/Attachments/Attachment.tsx
487
523
  - app/javascript/components/Attachments/AttachmentEditor.tsx
524
+ - app/javascript/components/Attachments/List.tsx
488
525
  - app/javascript/components/Attachments/Placeholder.tsx
489
- - app/javascript/components/DateRangeSelect.jsx
526
+ - app/javascript/components/Attachments/useAttachments.ts
527
+ - app/javascript/components/DateRangeSelect.tsx
528
+ - app/javascript/components/DateTimeSelect.tsx
490
529
  - app/javascript/components/EditableImage.tsx
491
530
  - app/javascript/components/FileUploadButton.tsx
492
531
  - app/javascript/components/ImageCropper.tsx
@@ -496,36 +535,55 @@ files:
496
535
  - app/javascript/components/ImageCropper/useCrop.ts
497
536
  - app/javascript/components/ImageEditor.tsx
498
537
  - app/javascript/components/ImageEditor/Form.tsx
499
- - app/javascript/components/ImageGrid.jsx
538
+ - app/javascript/components/ImageGrid.tsx
500
539
  - app/javascript/components/ImageGrid/DragElement.tsx
501
540
  - app/javascript/components/ImageGrid/FilePlaceholder.tsx
541
+ - app/javascript/components/ImageGrid/Grid.tsx
502
542
  - app/javascript/components/ImageGrid/GridImage.tsx
503
543
  - app/javascript/components/ImageGrid/Placeholder.tsx
544
+ - app/javascript/components/ImageGrid/useImageGrid.ts
504
545
  - app/javascript/components/ImageUploader.tsx
546
+ - app/javascript/components/LabelledField.tsx
505
547
  - app/javascript/components/Modal.tsx
506
- - app/javascript/components/PageDates.jsx
507
- - app/javascript/components/PageFiles.jsx
548
+ - app/javascript/components/PageForm.tsx
549
+ - app/javascript/components/PageForm/Block.tsx
550
+ - app/javascript/components/PageForm/Content.tsx
551
+ - app/javascript/components/PageForm/Dates.tsx
552
+ - app/javascript/components/PageForm/Files.tsx
553
+ - app/javascript/components/PageForm/Form.tsx
554
+ - app/javascript/components/PageForm/Images.tsx
555
+ - app/javascript/components/PageForm/LocaleLinks.tsx
556
+ - app/javascript/components/PageForm/Metadata.tsx
557
+ - app/javascript/components/PageForm/Options.tsx
558
+ - app/javascript/components/PageForm/PageDescription.tsx
559
+ - app/javascript/components/PageForm/PathSegment.tsx
560
+ - app/javascript/components/PageForm/TabPanel.tsx
561
+ - app/javascript/components/PageForm/Tabs.tsx
562
+ - app/javascript/components/PageForm/UnconfiguredContent.tsx
563
+ - app/javascript/components/PageForm/pageParams.ts
564
+ - app/javascript/components/PageForm/preview.ts
565
+ - app/javascript/components/PageForm/usePage.ts
566
+ - app/javascript/components/PageForm/useTabs.ts
508
567
  - app/javascript/components/PageImages.tsx
509
568
  - app/javascript/components/PageTree.tsx
510
569
  - app/javascript/components/PageTree/Draggable.tsx
511
570
  - app/javascript/components/PageTree/Node.tsx
512
- - app/javascript/components/PageTree/types.ts
513
- - app/javascript/components/RichTextArea.jsx
571
+ - app/javascript/components/PageTree/PageName.tsx
572
+ - app/javascript/components/RichTextArea.tsx
514
573
  - app/javascript/components/RichTextToolbarButton.tsx
515
574
  - app/javascript/components/TagEditor.tsx
516
575
  - app/javascript/components/TagEditor/AddTagForm.tsx
576
+ - app/javascript/components/TagEditor/Editor.tsx
517
577
  - app/javascript/components/TagEditor/Tag.tsx
578
+ - app/javascript/components/TagEditor/useTags.ts
518
579
  - app/javascript/components/Toast.tsx
519
580
  - app/javascript/components/drag.ts
520
581
  - app/javascript/components/drag/draggedOrder.ts
521
- - app/javascript/components/drag/types.ts
522
582
  - app/javascript/components/drag/useDragCollection.ts
523
583
  - app/javascript/components/drag/useDragUploader.ts
524
584
  - app/javascript/components/drag/useDraggable.ts
525
- - app/javascript/controllers/EditPageController.ts
526
- - app/javascript/controllers/MainController.ts
527
- - app/javascript/controllers/PageOptionsController.js
528
585
  - app/javascript/features/RichText.tsx
586
+ - app/javascript/features/contentTabs.ts
529
587
  - app/javascript/hooks.ts
530
588
  - app/javascript/index.ts
531
589
  - app/javascript/lib/Tree.ts
@@ -536,13 +594,22 @@ files:
536
594
  - app/javascript/stores/useModalStore.ts
537
595
  - app/javascript/stores/useToastStore.ts
538
596
  - app/javascript/types.ts
597
+ - app/javascript/types/Attachments.ts
598
+ - app/javascript/types/Crop.ts
599
+ - app/javascript/types/Drag.ts
600
+ - app/javascript/types/Images.ts
601
+ - app/javascript/types/PageEditor.ts
602
+ - app/javascript/types/Pages.ts
603
+ - app/javascript/types/Tags.ts
604
+ - app/javascript/types/Template.ts
605
+ - app/javascript/types/Trees.ts
539
606
  - app/jobs/pages_core/autopublish_job.rb
540
607
  - app/jobs/pages_core/sweep_cache_job.rb
541
608
  - app/mailers/admin_mailer.rb
542
609
  - app/models/attachment.rb
543
610
  - app/models/autopublisher.rb
544
- - app/models/category.rb
545
- - app/models/concerns/pages_core/has_otp.rb
611
+ - app/models/concerns/pages_core/authenticable_user.rb
612
+ - app/models/concerns/pages_core/emailable.rb
546
613
  - app/models/concerns/pages_core/has_roles.rb
547
614
  - app/models/concerns/pages_core/humanizable_param.rb
548
615
  - app/models/concerns/pages_core/page_model/attachments.rb
@@ -566,7 +633,6 @@ files:
566
633
  - app/models/otp_secret.rb
567
634
  - app/models/page.rb
568
635
  - app/models/page_builder.rb
569
- - app/models/page_category.rb
570
636
  - app/models/page_exporter.rb
571
637
  - app/models/page_file.rb
572
638
  - app/models/page_image.rb
@@ -586,6 +652,9 @@ files:
586
652
  - app/resources/admin/image_resource.rb
587
653
  - app/resources/admin/page_file_resource.rb
588
654
  - app/resources/admin/page_image_resource.rb
655
+ - app/resources/admin/page_resource.rb
656
+ - app/resources/admin/page_tree_resource.rb
657
+ - app/resources/admin/template_configuration_resource.rb
589
658
  - app/resources/export/attachment_resource.rb
590
659
  - app/resources/export/page_image_resource.rb
591
660
  - app/resources/export/page_resource.rb
@@ -605,11 +674,6 @@ files:
605
674
  - app/views/admin/news/index.html.erb
606
675
  - app/views/admin/otp_secrets/create.html.erb
607
676
  - app/views/admin/otp_secrets/new.html.erb
608
- - app/views/admin/pages/_edit_content.html.erb
609
- - app/views/admin/pages/_edit_files.html.erb
610
- - app/views/admin/pages/_edit_images.html.erb
611
- - app/views/admin/pages/_edit_metadata.html.erb
612
- - app/views/admin/pages/_edit_options.html.erb
613
677
  - app/views/admin/pages/_form.html.erb
614
678
  - app/views/admin/pages/_list_item.html.erb
615
679
  - app/views/admin/pages/_search_bar.html.erb
@@ -657,6 +721,9 @@ files:
657
721
  - db/migrate/20220615160300_remove_username.rb
658
722
  - db/migrate/20240126160700_add_2fa_fields.rb
659
723
  - db/migrate/20240129201300_remove_password_reset_tokens.rb
724
+ - db/migrate/20240131140700_change_email_to_citext.rb
725
+ - db/migrate/20240201160700_remove_persistent_data.rb
726
+ - db/migrate/20240508145300_remove_categories.rb
660
727
  - lib/pages_core.rb
661
728
  - lib/pages_core/admin_menu_item.rb
662
729
  - lib/pages_core/archive_finder.rb
@@ -711,7 +778,6 @@ files:
711
778
  - lib/rails/generators/pages_core/install/templates/pages_initializer.rb
712
779
  - lib/rails/generators/pages_core/rspec/rspec_generator.rb
713
780
  - lib/rails/generators/pages_core/rspec/templates/factories.rb
714
- - lib/rails/generators/pages_core/rspec/templates/mailer_macros.rb
715
781
  - lib/rails/generators/pages_core/rspec/templates/page_templates_spec.rb
716
782
  - lib/rails/generators/pages_core/rspec/templates/rails_helper.rb
717
783
  - lib/rails/generators/pages_core/rspec/templates/spec_helper.rb