panda-cms 0.7.4 → 0.7.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 (152) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +37 -2
  3. data/Rakefile +2 -0
  4. data/app/builders/panda/cms/form_builder.rb +13 -5
  5. data/app/components/panda/cms/admin/heading_component.rb +5 -4
  6. data/app/components/panda/cms/admin/panel_component.rb +2 -2
  7. data/app/components/panda/cms/admin/statistics_component.rb +1 -2
  8. data/app/components/panda/cms/admin/user_activity_component.html.erb +3 -1
  9. data/app/components/panda/cms/admin/user_activity_component.rb +1 -3
  10. data/app/components/panda/cms/code_component.rb +8 -4
  11. data/app/components/panda/cms/menu_component.rb +7 -6
  12. data/app/components/panda/cms/page_menu_component.rb +15 -17
  13. data/app/components/panda/cms/rich_text_component.rb +5 -6
  14. data/app/components/panda/cms/text_component.rb +6 -7
  15. data/app/constraints/panda/cms/admin_constraint.rb +4 -1
  16. data/app/controllers/panda/cms/admin/dashboard_controller.rb +13 -9
  17. data/app/controllers/panda/cms/admin/forms_controller.rb +0 -2
  18. data/app/controllers/panda/cms/admin/my_profile_controller.rb +2 -1
  19. data/app/controllers/panda/cms/admin/pages_controller.rb +2 -1
  20. data/app/controllers/panda/cms/admin/posts_controller.rb +1 -2
  21. data/app/controllers/panda/cms/admin/sessions_controller.rb +3 -5
  22. data/app/controllers/panda/cms/admin/settings/bulk_editor_controller.rb +32 -25
  23. data/app/controllers/panda/cms/admin/settings_controller.rb +14 -10
  24. data/app/controllers/panda/cms/application_controller.rb +7 -2
  25. data/app/controllers/panda/cms/errors_controller.rb +5 -2
  26. data/app/controllers/panda/cms/form_submissions_controller.rb +2 -0
  27. data/app/controllers/panda/cms/pages_controller.rb +32 -29
  28. data/app/controllers/panda/cms/posts_controller.rb +2 -0
  29. data/app/helpers/panda/cms/admin/files_helper.rb +5 -1
  30. data/app/helpers/panda/cms/admin/pages_helper.rb +5 -1
  31. data/app/helpers/panda/cms/asset_helper.rb +182 -0
  32. data/app/helpers/panda/cms/pages_helper.rb +2 -0
  33. data/app/helpers/panda/cms/posts_helper.rb +2 -0
  34. data/app/helpers/panda/cms/theme_helper.rb +2 -0
  35. data/app/javascript/panda/cms/controllers/editor_form_controller.js +59 -6
  36. data/app/javascript/panda/cms/controllers/index.js +3 -9
  37. data/app/javascript/panda/cms/controllers/theme_form_controller.js +16 -0
  38. data/app/javascript/panda/cms/stimulus-loading.js +39 -0
  39. data/app/javascript/panda_cms/stimulus-loading.js +39 -0
  40. data/app/jobs/panda/cms/application_job.rb +2 -0
  41. data/app/jobs/panda/cms/record_visit_job.rb +2 -0
  42. data/app/mailers/panda/cms/application_mailer.rb +2 -0
  43. data/app/mailers/panda/cms/form_mailer.rb +3 -1
  44. data/app/models/panda/cms/application_record.rb +2 -0
  45. data/app/models/panda/cms/block.rb +4 -1
  46. data/app/models/panda/cms/block_content.rb +2 -0
  47. data/app/models/panda/cms/breadcrumb.rb +2 -0
  48. data/app/models/panda/cms/current.rb +2 -0
  49. data/app/models/panda/cms/form.rb +2 -0
  50. data/app/models/panda/cms/form_submission.rb +2 -0
  51. data/app/models/panda/cms/menu.rb +12 -9
  52. data/app/models/panda/cms/menu_item.rb +10 -6
  53. data/app/models/panda/cms/page.rb +14 -12
  54. data/app/models/panda/cms/post.rb +9 -5
  55. data/app/models/panda/cms/redirect.rb +6 -3
  56. data/app/models/panda/cms/template.rb +12 -7
  57. data/app/models/panda/cms/user.rb +2 -0
  58. data/app/models/panda/cms/visit.rb +2 -0
  59. data/app/models/panda/social/instagram_post.rb +2 -0
  60. data/app/services/panda/cms/html_to_editor_js_converter.rb +4 -2
  61. data/app/services/panda/social/instagram_feed_service.rb +3 -1
  62. data/app/views/layouts/different_page.html.erb +6 -0
  63. data/app/views/layouts/homepage.html.erb +37 -0
  64. data/app/views/layouts/page.html.erb +18 -0
  65. data/app/views/layouts/panda/cms/application.html.erb +1 -0
  66. data/app/views/panda/cms/admin/pages/new.html.erb +14 -8
  67. data/app/views/panda/cms/admin/settings/index.html.erb +1 -1
  68. data/app/views/panda/cms/shared/_header.html.erb +10 -2
  69. data/app/views/panda/cms/shared/_importmap.html.erb +1 -1
  70. data/app/views/shared/_footer.html.erb +3 -0
  71. data/app/views/shared/_header.html.erb +11 -0
  72. data/config/importmap.rb +2 -0
  73. data/config/initializers/inflections.rb +2 -0
  74. data/config/initializers/panda/cms/form_errors.rb +20 -21
  75. data/config/initializers/panda/cms/healthcheck_log_silencer.rb +2 -0
  76. data/config/initializers/panda/cms.rb +2 -0
  77. data/config/initializers/zeitwork.rb +2 -0
  78. data/config/puma/test.rb +3 -1
  79. data/config/routes.rb +8 -8
  80. data/db/migrate/20240205223709_create_panda_cms_pages.rb +2 -0
  81. data/db/migrate/20240219213327_create_panda_cms_page_versions.rb +2 -0
  82. data/db/migrate/20240303002805_create_panda_cms_templates.rb +4 -1
  83. data/db/migrate/20240303003434_create_panda_cms_template_versions.rb +2 -0
  84. data/db/migrate/20240303022441_create_panda_cms_blocks.rb +4 -1
  85. data/db/migrate/20240303024256_create_panda_cms_block_contents.rb +2 -0
  86. data/db/migrate/20240303024746_create_panda_cms_block_content_versions.rb +2 -0
  87. data/db/migrate/20240303233238_add_panda_cms_menu_table.rb +2 -0
  88. data/db/migrate/20240303234724_add_panda_cms_menu_item_table.rb +2 -0
  89. data/db/migrate/20240304134343_add_parent_id_to_panda_cms_pages.rb +2 -0
  90. data/db/migrate/20240315125411_add_status_to_panda_cms_pages.rb +7 -5
  91. data/db/migrate/20240315125421_add_nested_sets_to_panda_cms_pages.rb +2 -0
  92. data/db/migrate/20240316212822_add_kind_to_panda_cms_menus.rb +3 -1
  93. data/db/migrate/20240316221425_add_start_page_to_panda_cms_menus.rb +2 -0
  94. data/db/migrate/20240316230706_add_nested_to_panda_cms_menu_items.rb +2 -0
  95. data/db/migrate/20240317010532_create_panda_cms_users.rb +2 -0
  96. data/db/migrate/20240317161534_add_max_uses_to_panda_cms_template.rb +2 -0
  97. data/db/migrate/20240317163053_reset_counter_cache_on_panda_cms_template.rb +2 -0
  98. data/db/migrate/20240317214827_create_panda_cms_redirects.rb +2 -0
  99. data/db/migrate/20240317230622_create_panda_cms_visits.rb +2 -0
  100. data/db/migrate/20240324205703_create_active_storage_tables.active_storage.rb +5 -2
  101. data/db/migrate/20240408084718_default_panda_cms_users_admin_to_false.rb +2 -0
  102. data/db/migrate/20240701225422_add_service_name_to_active_storage_blobs.active_storage.rb +8 -6
  103. data/db/migrate/20240701225423_create_active_storage_variant_records.active_storage.rb +2 -0
  104. data/db/migrate/20240701225424_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb +2 -0
  105. data/db/migrate/20240804235210_create_panda_cms_forms.rb +2 -0
  106. data/db/migrate/20240805013612_create_panda_cms_form_submissions.rb +2 -0
  107. data/db/migrate/20240805121123_create_panda_cms_posts.rb +3 -1
  108. data/db/migrate/20240805123104_create_panda_cms_post_versions.rb +2 -0
  109. data/db/migrate/20240806112735_fix_panda_cms_visits_column_names.rb +2 -0
  110. data/db/migrate/20240806204412_add_completion_path_to_panda_cms_forms.rb +2 -0
  111. data/db/migrate/20240820081917_change_form_submissions_to_submission_count.rb +2 -0
  112. data/db/migrate/20240923234535_add_depth_to_panda_cms_menus.rb +6 -4
  113. data/db/migrate/20241031205109_add_cached_content_to_panda_cms_block_contents.rb +2 -0
  114. data/db/migrate/20241119214548_convert_post_content_to_editor_js.rb +2 -0
  115. data/db/migrate/20241120000419_remove_post_tag_references.rb +2 -0
  116. data/db/migrate/20241120110943_add_editor_js_to_posts.rb +2 -0
  117. data/db/migrate/20241120113859_add_cached_content_to_panda_cms_posts.rb +2 -0
  118. data/db/migrate/20241123234140_remove_post_tag_id_from_posts.rb +2 -0
  119. data/db/migrate/20250106223303_add_author_id_to_panda_cms_posts.rb +2 -0
  120. data/db/migrate/20250120235542_remove_paper_trail.rb +5 -4
  121. data/db/migrate/20250126234001_create_panda_social_instagram_posts.rb +2 -0
  122. data/db/migrate/20250504221812_add_current_theme_to_panda_cms_users.rb +2 -0
  123. data/db/seeds.rb +2 -0
  124. data/lib/generators/panda/cms/install_generator.rb +2 -0
  125. data/lib/panda/cms/asset_loader.rb +390 -0
  126. data/lib/panda/cms/bulk_editor.rb +7 -3
  127. data/lib/panda/cms/demo_site_generator.rb +2 -0
  128. data/lib/panda/cms/editor_js/blocks/alert.rb +2 -0
  129. data/lib/panda/cms/editor_js/blocks/base.rb +2 -0
  130. data/lib/panda/cms/editor_js/blocks/header.rb +2 -0
  131. data/lib/panda/cms/editor_js/blocks/image.rb +3 -0
  132. data/lib/panda/cms/editor_js/blocks/list.rb +2 -0
  133. data/lib/panda/cms/editor_js/blocks/paragraph.rb +3 -0
  134. data/lib/panda/cms/editor_js/blocks/quote.rb +3 -0
  135. data/lib/panda/cms/editor_js/blocks/table.rb +3 -1
  136. data/lib/panda/cms/editor_js/renderer.rb +3 -0
  137. data/lib/panda/cms/editor_js.rb +2 -0
  138. data/lib/panda/cms/editor_js_content.rb +47 -41
  139. data/lib/panda/cms/engine.rb +29 -32
  140. data/lib/panda/cms/exceptions_app.rb +2 -0
  141. data/lib/panda/cms/railtie.rb +2 -0
  142. data/lib/panda/cms/slug.rb +3 -1
  143. data/lib/panda-cms/version.rb +3 -1
  144. data/lib/panda-cms.rb +4 -2
  145. data/lib/tasks/assets.rake +547 -0
  146. data/lib/tasks/panda/cms/install.rake +2 -0
  147. data/lib/tasks/panda/social/instagram.rake +2 -0
  148. data/lib/tasks/panda_cms.rake +3 -30
  149. data/public/panda-cms-assets/manifest.json +20 -0
  150. data/public/panda-cms-assets/panda-cms-0.7.4.css +26 -0
  151. data/public/panda-cms-assets/panda-cms-0.7.4.js +150 -0
  152. metadata +168 -14
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "rubygems"
2
4
  require "panda/core"
3
5
  require "panda/core/engine"
@@ -17,9 +19,7 @@ module Panda
17
19
 
18
20
  # Basic session setup only
19
21
  initializer "panda_cms.session", before: :load_config_initializers do |app|
20
- if app.config.middleware.frozen?
21
- app.config.middleware = app.config.middleware.dup
22
- end
22
+ app.config.middleware = app.config.middleware.dup if app.config.middleware.frozen?
23
23
 
24
24
  app.config.session_store :cookie_store, key: "_panda_cms_session"
25
25
  app.config.middleware.use ActionDispatch::Cookies
@@ -28,15 +28,16 @@ module Panda
28
28
 
29
29
  config.to_prepare do
30
30
  ApplicationController.helper(::ApplicationHelper)
31
+ ApplicationController.helper(Panda::CMS::AssetHelper)
31
32
  end
32
33
 
33
34
  # Set our generators
34
35
  config.generators do |g|
35
36
  g.orm :active_record, primary_key_type: :uuid
36
37
  g.test_framework :rspec, fixture: true
37
- g.fixture_replacement :factory_bot, dir: "spec/factories"
38
+ g.fixture_replacement nil
38
39
  g.view_specs false
39
- g.templates.unshift File.expand_path("../../templates", __FILE__)
40
+ g.templates.unshift File.expand_path("../templates", __dir__)
40
41
  end
41
42
 
42
43
  # Make files in public available to the main app (e.g. /panda_cms-assets/favicon.ico)
@@ -70,9 +71,7 @@ module Panda
70
71
  initializer "panda_cms.importmap", before: "importmap" do |app|
71
72
  if app.config.respond_to?(:importmap)
72
73
  # Create a new array if frozen
73
- if app.config.importmap.paths.frozen?
74
- app.config.importmap.paths = app.config.importmap.paths.dup
75
- end
74
+ app.config.importmap.paths = app.config.importmap.paths.dup if app.config.importmap.paths.frozen?
76
75
 
77
76
  # Add our paths
78
77
  app.config.importmap.paths << root.join("config/importmap.rb")
@@ -96,13 +95,13 @@ module Panda
96
95
  end
97
96
  end
98
97
 
99
- initializer "#{engine_name}.backtrace_cleaner" do |app|
98
+ initializer "#{engine_name}.backtrace_cleaner" do |_app|
100
99
  engine_root_regex = Regexp.escape(root.to_s + File::SEPARATOR)
101
100
 
102
101
  # Clean those ERB lines, we don't need the internal autogenerated
103
102
  # ERB method, what we do need (line number in ERB file) is already there
104
103
  Rails.backtrace_cleaner.add_filter do |line|
105
- line.sub(/(\.erb:\d+):in `__.*$/, "\\1")
104
+ line.sub(/(\.erb:\d+):in `__.*$/, '\\1')
106
105
  end
107
106
 
108
107
  # Remove our own engine's path prefix, even if it's
@@ -124,15 +123,13 @@ module Panda
124
123
  end
125
124
  end
126
125
 
127
- # Set up ViewComponent and Lookbook
128
- # config.view_component.component_parent_class = "Panda::CMS::BaseComponent"
129
- # config.view_component.view_component_path = Panda::CMS::Engine.root.join("lib/components").to_s
130
- # config.eager_load_paths << Panda::CMS::Engine.root.join("lib/components").to_s
131
- # config.view_component.generate.sidecar = true
132
- # config.view_component.generate.preview = truexw
133
- # config.view_component.preview_paths ||= []
134
- # config.view_component.preview_paths << Panda::CMS::Engine.root.join("lib/component_previews").to_s
135
- # config.view_component.generate.preview_path = "lib/component_previews"
126
+ # Set up ViewComponent
127
+ initializer "panda_cms.view_component" do |app|
128
+ app.config.view_component.preview_paths ||= []
129
+ app.config.view_component.preview_paths << root.join("spec/components/previews")
130
+ app.config.view_component.generate.sidecar = true
131
+ app.config.view_component.generate.preview = true
132
+ end
136
133
 
137
134
  # Set up authentication
138
135
  initializer "panda_cms.omniauth", before: "omniauth" do |app|
@@ -216,26 +213,26 @@ module Panda
216
213
  }
217
214
 
218
215
  available_providers.each do |provider, options|
219
- if Panda::CMS.config.authentication.dig(provider, :enabled)
220
- auth_path = auth_path.starts_with?("/") ? auth_path : "/#{auth_path}"
221
- options[:defaults][:path_prefix] = auth_path
216
+ next unless Panda::CMS.config.authentication.dig(provider, :enabled)
217
+
218
+ auth_path = auth_path.starts_with?("/") ? auth_path : "/#{auth_path}"
219
+ options[:defaults][:path_prefix] = auth_path
222
220
 
223
- options[:defaults][:redirect_uri] = if Rails.env.test?
224
- "#{Capybara.app_host}#{auth_path}/#{provider}#{callback_path}"
225
- else
226
- "#{Panda::CMS.config.url}#{auth_path}/#{provider}#{callback_path}"
227
- end
221
+ options[:defaults][:redirect_uri] = if Rails.env.test?
222
+ "#{Capybara.app_host}#{auth_path}/#{provider}#{callback_path}"
223
+ else
224
+ "#{Panda::CMS.config.url}#{auth_path}/#{provider}#{callback_path}"
225
+ end
228
226
 
229
- provider_config = options[:defaults].merge(Panda::CMS.config.authentication[provider])
227
+ provider_config = options[:defaults].merge(Panda::CMS.config.authentication[provider])
230
228
 
231
- app.config.middleware.use OmniAuth::Builder do
232
- provider options[:strategy], provider_config
233
- end
229
+ app.config.middleware.use OmniAuth::Builder do
230
+ provider options[:strategy], provider_config
234
231
  end
235
232
  end
236
233
  end
237
234
 
238
- config.before_initialize do |app|
235
+ config.before_initialize do |_app|
239
236
  # Default configuration
240
237
  Panda::CMS.configure do |config|
241
238
  # Array of additional EditorJS tools to load
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # https://guides.rubyonrails.org/configuring.html#config-exceptions-app
2
4
  module Panda
3
5
  module CMS
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Panda
2
4
  module CMS
3
5
  class Railtie < Rails::Railtie
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Panda
2
4
  module CMS
3
5
  class Slug
@@ -13,7 +15,7 @@ module Panda
13
15
  # Replace & with "and"
14
16
  string = string.gsub("&", "and")
15
17
  # Remove special characters
16
- string = string.gsub(/[\!\@\£\$\%\^\&\*\(\)\+\=\{\}\[\]\:\;\"\'\|\\\`\<\>\?\,\.\/]+/, "")
18
+ string = string.gsub(%r{[!@£\\\^\[\]/]+}, "")
17
19
  # Replace any whitespace character with -
18
20
  string = string.gsub(/[^\w\s-]/, "-")
19
21
  # Replace multiple occurences of _ and - with -
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Panda
2
4
  module CMS
3
- VERSION = "0.7.4"
5
+ VERSION = "0.7.5"
4
6
  end
5
7
  end
data/lib/panda-cms.rb CHANGED
@@ -1,8 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "rubygems"
2
4
  require "panda/core"
3
5
  require "panda/cms/railtie"
4
-
5
- require "capybara/rspec"
6
+ require "view_component"
6
7
 
7
8
  module Panda
8
9
  module CMS
@@ -73,6 +74,7 @@ require_relative "panda-cms/version"
73
74
  require_relative "panda/cms/exceptions_app"
74
75
  require_relative "panda/cms/engine"
75
76
  require_relative "panda/cms/demo_site_generator"
77
+ require_relative "panda/cms/asset_loader"
76
78
  require_relative "panda/cms/editor_js"
77
79
  require_relative "panda/cms/editor_js_content"
78
80
  require_relative "panda/cms/editor_js/renderer"