alchemy_cms 7.0.0.pre.b → 7.0.0.pre.c

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/lint.yml +21 -1
  3. data/.github/workflows/{ci.yml → test.yml} +1 -1
  4. data/.gitignore +0 -5
  5. data/CHANGELOG.md +4 -0
  6. data/Gemfile +0 -1
  7. data/README.md +3 -3
  8. data/Rakefile +0 -19
  9. data/alchemy_cms.gemspec +2 -1
  10. data/app/assets/config/alchemy_manifest.js +1 -0
  11. data/app/assets/javascripts/alchemy/admin.js +0 -1
  12. data/app/assets/javascripts/alchemy/alchemy.dirty.js.coffee +1 -1
  13. data/app/assets/javascripts/alchemy/alchemy.initializer.js.coffee +5 -12
  14. data/app/assets/stylesheets/alchemy/base.scss +2 -2
  15. data/app/controllers/alchemy/base_controller.rb +0 -7
  16. data/{package/src → app/javascript/alchemy_admin}/node_tree.js +2 -2
  17. data/{package/src → app/javascript/alchemy_admin}/page_publication_fields.js +1 -1
  18. data/{package/src → app/javascript/alchemy_admin}/page_sorter.js +1 -1
  19. data/{package/src → app/javascript/alchemy_admin}/picture_editors.js +2 -2
  20. data/{package/src → app/javascript/alchemy_admin}/sitemap.js +4 -4
  21. data/app/javascript/alchemy_admin.js +34 -0
  22. data/app/views/alchemy/_menubar.html.erb +1 -1
  23. data/app/views/alchemy/admin/attachments/_replace_button.html.erb +1 -1
  24. data/app/views/alchemy/admin/attachments/destroy.js.erb +1 -1
  25. data/app/views/alchemy/admin/nodes/index.html.erb +4 -2
  26. data/app/views/alchemy/admin/pages/_page_layout_filter.html.erb +1 -1
  27. data/app/views/alchemy/admin/pages/edit.html.erb +3 -4
  28. data/app/views/alchemy/admin/pages/index.html.erb +1 -1
  29. data/app/views/alchemy/admin/pages/update.js.erb +2 -2
  30. data/app/views/alchemy/admin/resources/_filter_bar.html.erb +1 -1
  31. data/app/views/alchemy/admin/styleguide/index.html.erb +1 -1
  32. data/app/views/alchemy/admin/uploader/_button.html.erb +1 -1
  33. data/app/views/alchemy/base/permission_denied.js.erb +1 -1
  34. data/app/views/alchemy/base/redirect.js.erb +1 -1
  35. data/app/views/layouts/alchemy/admin.html.erb +4 -8
  36. data/bin/importmap +4 -0
  37. data/bin/setup +0 -9
  38. data/bin/start +1 -1
  39. data/config/brakeman.ignore +0 -46
  40. data/config/importmap.rb +8 -0
  41. data/lib/alchemy/engine.rb +14 -0
  42. data/lib/alchemy/upgrader/seven_point_zero.rb +13 -23
  43. data/lib/alchemy/upgrader.rb +0 -11
  44. data/lib/alchemy/version.rb +1 -1
  45. data/lib/alchemy.rb +5 -0
  46. data/lib/alchemy_cms.rb +2 -1
  47. data/lib/generators/alchemy/install/files/application.html.erb +2 -2
  48. data/lib/generators/alchemy/install/install_generator.rb +0 -24
  49. data/lib/tasks/alchemy/upgrade.rake +6 -12
  50. data/package.json +6 -26
  51. metadata +44 -27
  52. data/package/admin.js +0 -34
  53. data/package/dist/admin.js +0 -16
  54. data/package/dist/admin.js.map +0 -7
  55. data/package/src/__tests__/i18n.spec.js +0 -93
  56. data/package/src/utils/__tests__/ajax.spec.js +0 -168
  57. data/package/src/utils/__tests__/events.spec.js +0 -38
  58. /data/{package/src → app/javascript/alchemy_admin}/datepicker.js +0 -0
  59. /data/{package/src → app/javascript/alchemy_admin}/file_editors.js +0 -0
  60. /data/{package/src → app/javascript/alchemy_admin}/i18n.js +0 -0
  61. /data/{package/src → app/javascript/alchemy_admin}/image_cropper.js +0 -0
  62. /data/{package/src → app/javascript/alchemy_admin}/image_loader.js +0 -0
  63. /data/{package/src → app/javascript/alchemy_admin}/ingredient_anchor_link.js +0 -0
  64. /data/{package/src → app/javascript/alchemy_admin}/tinymce.js +0 -0
  65. /data/{package/src → app/javascript/alchemy_admin}/translations.js +0 -0
  66. /data/{package/src → app/javascript/alchemy_admin}/utils/ajax.js +0 -0
  67. /data/{package/src → app/javascript/alchemy_admin}/utils/events.js +0 -0
@@ -20,6 +20,20 @@ module Alchemy
20
20
  NonStupidDigestAssets.whitelist += [/^tinymce\//]
21
21
  end
22
22
 
23
+ initializer "alchemy.importmap" do |app|
24
+ Alchemy.importmap.draw(Engine.root.join("config", "importmap.rb"))
25
+
26
+ package_path = Engine.root.join("app/javascript")
27
+ app.config.assets.paths << package_path
28
+
29
+ if app.config.importmap.sweep_cache
30
+ Alchemy.importmap.cache_sweeper(watches: package_path)
31
+ ActiveSupport.on_load(:action_controller_base) do
32
+ before_action { Alchemy.importmap.cache_sweeper.execute_if_updated }
33
+ end
34
+ end
35
+ end
36
+
23
37
  # Gutentag downcases all tags before save
24
38
  # and Gutentag validations are not case sensitive.
25
39
  # But we support having tags with uppercase characters.
@@ -8,30 +8,20 @@ module Alchemy
8
8
  include Thor::Actions
9
9
 
10
10
  class << self
11
- def update_admin_entrypoint
12
- if File.exist? "app/javascript/packs/alchemy/admin.js"
13
- FileUtils.mv "app/javascript/packs/alchemy/admin.js", "app/javascript/alchemy_admin.js"
14
- else
15
- log "Skipping. No alchemy/admin entrypoint found. Maybe already migrated from Webpacker?", :info
16
- end
17
- if Dir.exist?("app/javascript/packs/alchemy") && Dir.empty?("app/javascript/packs/alchemy")
18
- FileUtils.rm_r "app/javascript/packs/alchemy"
19
- end
20
- if File.exist? "config/importmap.rb"
21
- # We want the bundled package if using importmaps
22
- task.gsub_file "app/javascript/alchemy_admin.js", 'import "@alchemy_cms/admin"', 'import "@alchemy_cms/dist/admin"'
23
- end
24
- if task.ask("Do you want to remove webpacker now? (y/N)", default: "N") == "y"
11
+ def remove_admin_entrypoint
12
+ FileUtils.rm_rf "app/javascript/packs/alchemy/admin.js"
13
+ FileUtils.rm_rf "app/javascript/packs/alchemy_admin.js"
14
+ FileUtils.rm_rf "app/javascript/packs/alchemy"
15
+ FileUtils.rm_rf "app/javascript/packs/alchemy"
16
+ task.run "yarn remove @alchemy_cms/admin"
17
+ if task.ask("Do you want to remove webpacker as well? (y/N)", default: "N") == "y"
18
+ task.run "bundle remove webpacker"
25
19
  task.run "yarn remove @rails/webpacker webpack webpack-cli webpack-dev-server"
26
- FileUtils.rm_r "app/javascript/packs"
27
- FileUtils.rm_r "config/webpack"
28
- FileUtils.rm "config/webpacker.yml"
29
- FileUtils.rm "bin/webpack"
30
- FileUtils.rm "bin/webpack-dev-server"
31
- end
32
- if task.ask("Do you want to add jsbundling-rails now? (Y/n)", default: "Y") == "Y"
33
- task.run "bundle add jsbundling-rails"
34
- task.run "bin/rails javascript:install:esbuild"
20
+ FileUtils.rm_rf "app/javascript/packs"
21
+ FileUtils.rm_rf "config/webpack"
22
+ FileUtils.rm_f "config/webpacker.yml"
23
+ FileUtils.rm_f "bin/webpack"
24
+ FileUtils.rm_f "bin/webpack-dev-server"
35
25
  end
36
26
  end
37
27
 
@@ -25,17 +25,6 @@ module Alchemy
25
25
  todo "Check the default configuration file (./config/alchemy/config.yml.defaults) for new configuration options and insert them into your config file.", "Configuration has changed"
26
26
  end
27
27
  end
28
-
29
- def update_npm_package
30
- desc "Update npm package."
31
- if File.exist? Rails.root.join("config/importmap.rb")
32
- `bin/importmap pin @alchemy_cms/admin@~#{Alchemy.version}`
33
- elsif File.exist? Rails.root.join("package.json")
34
- `yarn add @alchemy_cms/admin@~#{Alchemy.version}`
35
- else
36
- log("Could not update alchemy admin package! Make sure you have a JS bundler installed", :warning)
37
- end
38
- end
39
28
  end
40
29
  end
41
30
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alchemy
4
- VERSION = "7.0.0-b"
4
+ VERSION = "7.0.0-c"
5
5
 
6
6
  def self.version
7
7
  VERSION
data/lib/alchemy.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "alchemy/admin/preview_url"
4
+ require "importmap-rails"
4
5
 
5
6
  module Alchemy
6
7
  YAML_PERMITTED_CLASSES = %w[Symbol Date Regexp]
@@ -78,4 +79,8 @@ module Alchemy
78
79
  # Alchemy.enable_searchable = true
79
80
  #
80
81
  mattr_accessor :enable_searchable, default: false
82
+
83
+ # JS Importmap instance
84
+ singleton_class.attr_accessor :importmap
85
+ self.importmap = Importmap::Map.new
81
86
  end
data/lib/alchemy_cms.rb CHANGED
@@ -12,6 +12,7 @@ require "cancan"
12
12
  require "dragonfly"
13
13
  require "gutentag"
14
14
  require "handlebars_assets"
15
+ require "importmap-rails"
15
16
  require "jquery-rails"
16
17
  require "jquery-ui-rails"
17
18
  require "kaminari"
@@ -21,7 +22,7 @@ require "request_store"
21
22
  require "responders"
22
23
  require "sassc-rails"
23
24
  require "simple_form"
24
- require "turbolinks"
25
+ require "turbo-rails"
25
26
  require "userstamp"
26
27
  require "view_component"
27
28
 
@@ -5,8 +5,8 @@
5
5
  <%= csrf_meta_tags %>
6
6
  <%= csp_meta_tag %>
7
7
 
8
- <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
9
- <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
8
+ <%= stylesheet_link_tag 'application', media: 'all', 'data-turbo-track': 'reload' %>
9
+ <%= javascript_include_tag 'application', 'data-turbo-track': 'reload' %>
10
10
  </head>
11
11
 
12
12
  <body>
@@ -99,30 +99,6 @@ module Alchemy
99
99
  rake "gutentag:install:migrations"
100
100
  end
101
101
 
102
- def add_npm_package
103
- if File.exist? app_root.join("package.json")
104
- run "yarn add @alchemy_cms/admin@~#{Alchemy.version}"
105
- elsif File.exist? app_root.join("config/importmap.rb")
106
- run "bin/importmap pin @alchemy_cms/admin@~#{Alchemy.version}"
107
- else
108
- log("Could not add alchemy admin package! Make sure you have a JS bundler installed", :warning)
109
- end
110
- end
111
-
112
- def copy_alchemy_entry_point
113
- if Dir.exist? app_root.join("app/javascript")
114
- if File.exist? app_root.join("config/importmap.rb")
115
- # We want the bundled package if using importmaps
116
- create_file app_root.join("app/javascript/alchemy_admin.js"), 'import "@alchemy_cms/dist/admin"'
117
- else
118
- # We want the normal package if using a bundler locally
119
- create_file app_root.join("app/javascript/alchemy_admin.js"), 'import "@alchemy_cms/admin"'
120
- end
121
- else
122
- log("Could not add alchemy admin entry point! Make sure you have a JS bundler installed", :warning)
123
- end
124
- end
125
-
126
102
  def set_primary_language
127
103
  header
128
104
  install_tasks.set_primary_language(
@@ -16,8 +16,7 @@ namespace :alchemy do
16
16
  desc "Alchemy Upgrader: Prepares the database and updates Alchemys configuration file."
17
17
  task prepare: [
18
18
  "alchemy:upgrade:database",
19
- "alchemy:upgrade:config",
20
- "alchemy:upgrade:package"
19
+ "alchemy:upgrade:config"
21
20
  ]
22
21
 
23
22
  desc "Alchemy Upgrader: Prepares the database."
@@ -31,11 +30,6 @@ namespace :alchemy do
31
30
  Alchemy::Upgrader.copy_new_config_file
32
31
  end
33
32
 
34
- desc "Alchemy Upgrader: Install new Node package."
35
- task package: [:environment] do
36
- Alchemy::Upgrader.update_npm_package
37
- end
38
-
39
33
  desc "Upgrade Alchemy to v7.0"
40
34
  task "7.0" => [
41
35
  "alchemy:upgrade:prepare",
@@ -46,13 +40,13 @@ namespace :alchemy do
46
40
 
47
41
  namespace "7.0" do
48
42
  task "run" => [
49
- "alchemy:upgrade:7.0:update_admin_entrypoint"
43
+ "alchemy:upgrade:7.0:remove_admin_entrypoint"
50
44
  ]
51
45
 
52
- desc "Update alchemy admin entrypoint"
53
- task update_admin_entrypoint: [:environment] do
54
- puts "adding npm_package..."
55
- Alchemy::Upgrader::SevenPointZero.update_admin_entrypoint
46
+ desc "Remove alchemy admin entrypoint"
47
+ task remove_admin_entrypoint: [:environment] do
48
+ puts "removing npm_package..."
49
+ Alchemy::Upgrader::SevenPointZero.remove_admin_entrypoint
56
50
  end
57
51
  end
58
52
  end
data/package.json CHANGED
@@ -1,41 +1,21 @@
1
1
  {
2
- "name": "@alchemy_cms/admin",
3
- "version": "7.0.0-b",
4
- "description": "AlchemyCMS",
5
- "browser": "package/dist/admin.js",
6
- "files": [
7
- "package/**/*"
8
- ],
9
- "directories": {
10
- "lib": "package"
11
- },
2
+ "name": "alchemy_admin",
12
3
  "scripts": {
13
4
  "test": "jest",
14
- "build": "esbuild package/admin.js --bundle --sourcemap --minify --outdir=package/dist --public-path=assets"
15
- },
16
- "repository": {
17
- "type": "git",
18
- "url": "git+https://github.com/AlchemyCMS/alchemy_cms.git"
5
+ "lint": "prettier --check 'app/javascript/**/*.js'"
19
6
  },
20
7
  "keywords": [],
21
8
  "author": "Thomas von Deyen",
22
9
  "license": "BSD-3-Clause",
23
- "bugs": {
24
- "url": "https://github.com/AlchemyCMS/alchemy_cms/issues"
25
- },
26
- "homepage": "https://github.com/AlchemyCMS/alchemy_cms#readme",
27
- "dependencies": {
28
- "flatpickr": "^4.6.9",
29
- "lodash-es": "^4.17.21",
30
- "sortablejs": "^1.10.2"
31
- },
32
10
  "devDependencies": {
33
11
  "@babel/core": "^7.9.6",
34
12
  "@babel/preset-env": "^7.9.6",
35
13
  "babel-jest": "^29.0.1",
36
- "esbuild": "^0.18.4",
14
+ "flatpickr": "^4.6.9",
37
15
  "jest": "^25.2.7",
16
+ "lodash-es": "^4.17.21",
38
17
  "prettier": "^2.0.2",
18
+ "sortablejs": "^1.10.2",
39
19
  "xhr-mock": "^2.5.1"
40
20
  },
41
21
  "jest": {
@@ -43,7 +23,7 @@
43
23
  "Alchemy": {}
44
24
  },
45
25
  "roots": [
46
- "package"
26
+ "spec/javascript/alchemy_admin"
47
27
  ]
48
28
  }
49
29
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alchemy_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.0.0.pre.b
4
+ version: 7.0.0.pre.c
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas von Deyen
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2023-06-22 00:00:00.000000000 Z
16
+ date: 2023-06-30 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: actionmailer
@@ -325,6 +325,26 @@ dependencies:
325
325
  - - "~>"
326
326
  - !ruby/object:Gem::Version
327
327
  version: '0.23'
328
+ - !ruby/object:Gem::Dependency
329
+ name: importmap-rails
330
+ requirement: !ruby/object:Gem::Requirement
331
+ requirements:
332
+ - - "~>"
333
+ - !ruby/object:Gem::Version
334
+ version: '1.2'
335
+ - - ">="
336
+ - !ruby/object:Gem::Version
337
+ version: 1.2.1
338
+ type: :runtime
339
+ prerelease: false
340
+ version_requirements: !ruby/object:Gem::Requirement
341
+ requirements:
342
+ - - "~>"
343
+ - !ruby/object:Gem::Version
344
+ version: '1.2'
345
+ - - ">="
346
+ - !ruby/object:Gem::Version
347
+ version: 1.2.1
328
348
  - !ruby/object:Gem::Dependency
329
349
  name: jquery-rails
330
350
  requirement: !ruby/object:Gem::Requirement
@@ -496,19 +516,19 @@ dependencies:
496
516
  - !ruby/object:Gem::Version
497
517
  version: '5'
498
518
  - !ruby/object:Gem::Dependency
499
- name: turbolinks
519
+ name: turbo-rails
500
520
  requirement: !ruby/object:Gem::Requirement
501
521
  requirements:
502
522
  - - ">="
503
523
  - !ruby/object:Gem::Version
504
- version: '2.5'
524
+ version: '1.4'
505
525
  type: :runtime
506
526
  prerelease: false
507
527
  version_requirements: !ruby/object:Gem::Requirement
508
528
  requirements:
509
529
  - - ">="
510
530
  - !ruby/object:Gem::Version
511
- version: '2.5'
531
+ version: '1.4'
512
532
  - !ruby/object:Gem::Dependency
513
533
  name: view_component
514
534
  requirement: !ruby/object:Gem::Requirement
@@ -705,9 +725,9 @@ files:
705
725
  - ".github/ISSUE_TEMPLATE/Feature_request.md"
706
726
  - ".github/PULL_REQUEST_TEMPLATE.md"
707
727
  - ".github/workflows/brakeman-analysis.yml"
708
- - ".github/workflows/ci.yml"
709
728
  - ".github/workflows/lint.yml"
710
729
  - ".github/workflows/stale.yml"
730
+ - ".github/workflows/test.yml"
711
731
  - ".gitignore"
712
732
  - ".hound.yml"
713
733
  - ".localeapp/config.rb"
@@ -895,6 +915,22 @@ files:
895
915
  - app/helpers/alchemy/elements_helper.rb
896
916
  - app/helpers/alchemy/pages_helper.rb
897
917
  - app/helpers/alchemy/url_helper.rb
918
+ - app/javascript/alchemy_admin.js
919
+ - app/javascript/alchemy_admin/datepicker.js
920
+ - app/javascript/alchemy_admin/file_editors.js
921
+ - app/javascript/alchemy_admin/i18n.js
922
+ - app/javascript/alchemy_admin/image_cropper.js
923
+ - app/javascript/alchemy_admin/image_loader.js
924
+ - app/javascript/alchemy_admin/ingredient_anchor_link.js
925
+ - app/javascript/alchemy_admin/node_tree.js
926
+ - app/javascript/alchemy_admin/page_publication_fields.js
927
+ - app/javascript/alchemy_admin/page_sorter.js
928
+ - app/javascript/alchemy_admin/picture_editors.js
929
+ - app/javascript/alchemy_admin/sitemap.js
930
+ - app/javascript/alchemy_admin/tinymce.js
931
+ - app/javascript/alchemy_admin/translations.js
932
+ - app/javascript/alchemy_admin/utils/ajax.js
933
+ - app/javascript/alchemy_admin/utils/events.js
898
934
  - app/jobs/alchemy/base_job.rb
899
935
  - app/jobs/alchemy/publish_page_job.rb
900
936
  - app/mailers/alchemy/base_mailer.rb
@@ -1191,6 +1227,7 @@ files:
1191
1227
  - app/views/layouts/alchemy/admin.html.erb
1192
1228
  - app/views/layouts/alchemy/sitemap.xml.erb
1193
1229
  - babel.config.js
1230
+ - bin/importmap
1194
1231
  - bin/rails
1195
1232
  - bin/rspec
1196
1233
  - bin/setup
@@ -1198,6 +1235,7 @@ files:
1198
1235
  - config/alchemy/config.yml
1199
1236
  - config/alchemy/modules.yml
1200
1237
  - config/brakeman.ignore
1238
+ - config/importmap.rb
1201
1239
  - config/initializers/assets.rb
1202
1240
  - config/initializers/dragonfly.rb
1203
1241
  - config/initializers/mime_types.rb
@@ -1328,27 +1366,6 @@ files:
1328
1366
  - lib/tasks/alchemy/tidy.rake
1329
1367
  - lib/tasks/alchemy/upgrade.rake
1330
1368
  - package.json
1331
- - package/admin.js
1332
- - package/dist/admin.js
1333
- - package/dist/admin.js.map
1334
- - package/src/__tests__/i18n.spec.js
1335
- - package/src/datepicker.js
1336
- - package/src/file_editors.js
1337
- - package/src/i18n.js
1338
- - package/src/image_cropper.js
1339
- - package/src/image_loader.js
1340
- - package/src/ingredient_anchor_link.js
1341
- - package/src/node_tree.js
1342
- - package/src/page_publication_fields.js
1343
- - package/src/page_sorter.js
1344
- - package/src/picture_editors.js
1345
- - package/src/sitemap.js
1346
- - package/src/tinymce.js
1347
- - package/src/translations.js
1348
- - package/src/utils/__tests__/ajax.spec.js
1349
- - package/src/utils/__tests__/events.spec.js
1350
- - package/src/utils/ajax.js
1351
- - package/src/utils/events.js
1352
1369
  - vendor/assets/fonts/fa-regular-400.eot
1353
1370
  - vendor/assets/fonts/fa-regular-400.svg
1354
1371
  - vendor/assets/fonts/fa-regular-400.ttf
data/package/admin.js DELETED
@@ -1,34 +0,0 @@
1
- import translate from "./src/i18n"
2
- import translationData from "./src/translations"
3
- import NodeTree from "./src/node_tree"
4
- import fileEditors from "./src/file_editors"
5
- import IngredientAnchorLink from "./src/ingredient_anchor_link"
6
- import pictureEditors from "./src/picture_editors"
7
- import ImageLoader from "./src/image_loader"
8
- import ImageCropper from "./src/image_cropper"
9
- import Datepicker from "./src/datepicker"
10
- import Sitemap from "./src/sitemap"
11
- import Tinymce from "./src/tinymce"
12
- import PagePublicationFields from "./src/page_publication_fields.js"
13
-
14
- // Global Alchemy object
15
- if (typeof window.Alchemy === "undefined") {
16
- window.Alchemy = {}
17
- }
18
-
19
- // Enhance the global Alchemy object with imported features
20
- Object.assign(Alchemy, {
21
- // Global utility method for translating a given string
22
- t: translate,
23
- translations: Object.assign(Alchemy.translations || {}, translationData),
24
- NodeTree,
25
- fileEditors,
26
- pictureEditors,
27
- ImageLoader: ImageLoader.init,
28
- ImageCropper,
29
- IngredientAnchorLink,
30
- Datepicker,
31
- Sitemap,
32
- Tinymce,
33
- PagePublicationFields
34
- })