alchemy_cms 7.0.0.pre.b → 7.0.0.pre.rc1

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 (76) 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 +7 -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 -2
  12. data/app/assets/javascripts/alchemy/alchemy.base.js.coffee +0 -21
  13. data/app/assets/javascripts/alchemy/alchemy.dirty.js.coffee +1 -1
  14. data/app/assets/javascripts/alchemy/alchemy.initializer.js.coffee +5 -12
  15. data/app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee +1 -6
  16. data/app/assets/stylesheets/alchemy/base.scss +2 -2
  17. data/app/controllers/alchemy/api/pages_controller.rb +0 -2
  18. data/app/controllers/alchemy/base_controller.rb +0 -7
  19. data/{package/src → app/javascript/alchemy_admin}/node_tree.js +2 -2
  20. data/{package/src → app/javascript/alchemy_admin}/page_publication_fields.js +1 -1
  21. data/{package/src → app/javascript/alchemy_admin}/page_sorter.js +1 -1
  22. data/{package/src → app/javascript/alchemy_admin}/picture_editors.js +2 -2
  23. data/{package/src → app/javascript/alchemy_admin}/sitemap.js +4 -4
  24. data/app/javascript/alchemy_admin.js +34 -0
  25. data/app/models/alchemy/element.rb +5 -4
  26. data/app/views/alchemy/_menubar.html.erb +1 -1
  27. data/app/views/alchemy/admin/attachments/_replace_button.html.erb +1 -1
  28. data/app/views/alchemy/admin/attachments/destroy.js.erb +1 -1
  29. data/app/views/alchemy/admin/nodes/index.html.erb +4 -2
  30. data/app/views/alchemy/admin/pages/_page_layout_filter.html.erb +1 -1
  31. data/app/views/alchemy/admin/pages/edit.html.erb +3 -4
  32. data/app/views/alchemy/admin/pages/index.html.erb +1 -1
  33. data/app/views/alchemy/admin/pages/update.js.erb +2 -2
  34. data/app/views/alchemy/admin/resources/_filter_bar.html.erb +1 -1
  35. data/app/views/alchemy/admin/styleguide/index.html.erb +1 -1
  36. data/app/views/alchemy/admin/uploader/_button.html.erb +1 -1
  37. data/app/views/alchemy/base/permission_denied.js.erb +1 -1
  38. data/app/views/alchemy/base/redirect.js.erb +1 -1
  39. data/app/views/alchemy/ingredients/shared/_link_tools.html.erb +0 -1
  40. data/app/views/alchemy/ingredients/shared/_picture_tools.html.erb +0 -1
  41. data/app/views/layouts/alchemy/admin.html.erb +4 -8
  42. data/bin/importmap +4 -0
  43. data/bin/setup +0 -9
  44. data/bin/start +1 -1
  45. data/config/brakeman.ignore +0 -46
  46. data/config/importmap.rb +8 -0
  47. data/lib/alchemy/engine.rb +14 -0
  48. data/lib/alchemy/permissions.rb +4 -4
  49. data/lib/alchemy/upgrader/seven_point_zero.rb +13 -23
  50. data/lib/alchemy/upgrader.rb +0 -11
  51. data/lib/alchemy/version.rb +1 -1
  52. data/lib/alchemy.rb +5 -0
  53. data/lib/alchemy_cms.rb +2 -1
  54. data/lib/generators/alchemy/install/files/application.html.erb +2 -2
  55. data/lib/generators/alchemy/install/install_generator.rb +0 -24
  56. data/lib/tasks/alchemy/upgrade.rake +6 -12
  57. data/package.json +6 -26
  58. metadata +44 -29
  59. data/app/assets/javascripts/alchemy/alchemy.browser.js.coffee +0 -22
  60. data/app/assets/javascripts/alchemy/alchemy.html5.js +0 -22
  61. data/package/admin.js +0 -34
  62. data/package/dist/admin.js +0 -16
  63. data/package/dist/admin.js.map +0 -7
  64. data/package/src/__tests__/i18n.spec.js +0 -93
  65. data/package/src/utils/__tests__/ajax.spec.js +0 -168
  66. data/package/src/utils/__tests__/events.spec.js +0 -38
  67. /data/{package/src → app/javascript/alchemy_admin}/datepicker.js +0 -0
  68. /data/{package/src → app/javascript/alchemy_admin}/file_editors.js +0 -0
  69. /data/{package/src → app/javascript/alchemy_admin}/i18n.js +0 -0
  70. /data/{package/src → app/javascript/alchemy_admin}/image_cropper.js +0 -0
  71. /data/{package/src → app/javascript/alchemy_admin}/image_loader.js +0 -0
  72. /data/{package/src → app/javascript/alchemy_admin}/ingredient_anchor_link.js +0 -0
  73. /data/{package/src → app/javascript/alchemy_admin}/tinymce.js +0 -0
  74. /data/{package/src → app/javascript/alchemy_admin}/translations.js +0 -0
  75. /data/{package/src → app/javascript/alchemy_admin}/utils/ajax.js +0 -0
  76. /data/{package/src → app/javascript/alchemy_admin}/utils/events.js +0 -0
data/bin/setup CHANGED
@@ -12,23 +12,14 @@ def system!(*args)
12
12
  end
13
13
 
14
14
  FileUtils.chdir GEM_ROOT do
15
- puts "\n== Linking Admin JS package =="
16
- system! "yarn link"
17
- puts "== Installing dependencies =="
18
- system! "yarn install"
19
15
  system! "gem install bundler --conservative"
20
16
  system("bundle check") || system!("bundle install")
21
17
  end
22
18
 
23
19
  FileUtils.chdir APP_ROOT do
24
20
  puts "\n== Installing Alchemy into dummy app =="
25
- system!("bin/rails javascript:install:esbuild")
26
21
  system!("bin/rails g alchemy:install --skip --skip-demo-files --auto-accept")
27
22
 
28
- puts "\n== Link Alchemy admin package =="
29
- system! "yarn link @alchemy_cms/admin"
30
- system! "yarn install"
31
-
32
23
  puts "\n== Removing old logs and tempfiles =="
33
24
  system! "bin/rails log:clear tmp:clear"
34
25
  end
data/bin/start CHANGED
@@ -13,5 +13,5 @@ end
13
13
 
14
14
  FileUtils.chdir APP_ROOT do
15
15
  puts "\n== Starting dummy app =="
16
- system! "bin/dev"
16
+ system! "bin/rails server"
17
17
  end
@@ -80,29 +80,6 @@
80
80
  ],
81
81
  "note": ""
82
82
  },
83
- {
84
- "warning_type": "Command Injection",
85
- "warning_code": 14,
86
- "fingerprint": "6addfcb9d23d2d6f699f2f3542169744ff749dc4d0a97f8ac783ab92593e1d84",
87
- "check_name": "Execute",
88
- "message": "Possible command injection",
89
- "file": "lib/alchemy/upgrader.rb",
90
- "line": 33,
91
- "link": "https://brakemanscanner.org/docs/warning_types/command_injection/",
92
- "code": "`yarn add @alchemy_cms/admin@~#{Alchemy.version}`",
93
- "render_path": null,
94
- "location": {
95
- "type": "method",
96
- "class": "Alchemy::Upgrader",
97
- "method": "update_npm_package"
98
- },
99
- "user_input": "Alchemy.version",
100
- "confidence": "Medium",
101
- "cwe_id": [
102
- 77
103
- ],
104
- "note": "The alchemy version is safe"
105
- },
106
83
  {
107
84
  "warning_type": "Cross-Site Scripting",
108
85
  "warning_code": 4,
@@ -227,29 +204,6 @@
227
204
  ],
228
205
  "note": ""
229
206
  },
230
- {
231
- "warning_type": "Command Injection",
232
- "warning_code": 14,
233
- "fingerprint": "98ca8e77026312eaa7eec15ce26bfe45aa8dd0fcd38e4cff104cb9dffbde1733",
234
- "check_name": "Execute",
235
- "message": "Possible command injection",
236
- "file": "lib/alchemy/upgrader.rb",
237
- "line": 31,
238
- "link": "https://brakemanscanner.org/docs/warning_types/command_injection/",
239
- "code": "`bin/importmap pin @alchemy_cms/admin@~#{Alchemy.version}`",
240
- "render_path": null,
241
- "location": {
242
- "type": "method",
243
- "class": "Alchemy::Upgrader",
244
- "method": "update_npm_package"
245
- },
246
- "user_input": "Alchemy.version",
247
- "confidence": "Medium",
248
- "cwe_id": [
249
- 77
250
- ],
251
- "note": ""
252
- },
253
207
  {
254
208
  "warning_type": "File Access",
255
209
  "warning_code": 16,
@@ -0,0 +1,8 @@
1
+ pin "flatpickr", to: "https://ga.jspm.io/npm:flatpickr@4.6.13/dist/esm/index.js", preload: true
2
+ pin "lodash-es/debounce", to: "https://ga.jspm.io/npm:lodash-es@4.17.21/debounce.js", preload: true
3
+ pin "lodash-es/max", to: "https://ga.jspm.io/npm:lodash-es@4.17.21/max.js", preload: true
4
+ pin "sortablejs", to: "https://ga.jspm.io/npm:sortablejs@1.15.0/modular/sortable.esm.js", preload: true
5
+ pin "@hotwired/turbo-rails", to: "turbo.min.js", preload: true
6
+
7
+ pin "alchemy_admin", to: "alchemy_admin.js", preload: true
8
+ pin_all_from File.expand_path("../app/javascript/alchemy_admin", __dir__), under: "alchemy_admin"
@@ -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.
@@ -41,8 +41,8 @@ module Alchemy
41
41
  e.public? && !e.restricted?
42
42
  end
43
43
 
44
- can :read, Alchemy::Page, Alchemy::Page.published.not_restricted do |p|
45
- p.public? && !p.restricted?
44
+ can :read, Alchemy::Page, Alchemy::Page.published.not_restricted.from_current_site do |p|
45
+ p.public? && !p.restricted? && p.site == Alchemy::Site.current
46
46
  end
47
47
  end
48
48
  end
@@ -64,8 +64,8 @@ module Alchemy
64
64
  e.public?
65
65
  end
66
66
 
67
- can :read, Alchemy::Page, Alchemy::Page.published do |p|
68
- p.public?
67
+ can :read, Alchemy::Page, Alchemy::Page.published.from_current_site do |p|
68
+ p.public? && p.site == Alchemy::Site.current
69
69
  end
70
70
  end
71
71
  end
@@ -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-rc1"
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.rc1
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"
@@ -736,7 +756,6 @@ files:
736
756
  - app/assets/javascripts/alchemy/admin.js
737
757
  - app/assets/javascripts/alchemy/alchemy.autocomplete.js.coffee
738
758
  - app/assets/javascripts/alchemy/alchemy.base.js.coffee
739
- - app/assets/javascripts/alchemy/alchemy.browser.js.coffee
740
759
  - app/assets/javascripts/alchemy/alchemy.buttons.js.coffee
741
760
  - app/assets/javascripts/alchemy/alchemy.char_counter.js.coffee
742
761
  - app/assets/javascripts/alchemy/alchemy.confirm_dialog.js.coffee
@@ -750,7 +769,6 @@ files:
750
769
  - app/assets/javascripts/alchemy/alchemy.growler.js.coffee
751
770
  - app/assets/javascripts/alchemy/alchemy.gui.js.coffee
752
771
  - app/assets/javascripts/alchemy/alchemy.hotkeys.js.coffee
753
- - app/assets/javascripts/alchemy/alchemy.html5.js
754
772
  - app/assets/javascripts/alchemy/alchemy.image_overlay.coffee
755
773
  - app/assets/javascripts/alchemy/alchemy.initializer.js.coffee
756
774
  - app/assets/javascripts/alchemy/alchemy.link_dialog.js.coffee
@@ -895,6 +913,22 @@ files:
895
913
  - app/helpers/alchemy/elements_helper.rb
896
914
  - app/helpers/alchemy/pages_helper.rb
897
915
  - app/helpers/alchemy/url_helper.rb
916
+ - app/javascript/alchemy_admin.js
917
+ - app/javascript/alchemy_admin/datepicker.js
918
+ - app/javascript/alchemy_admin/file_editors.js
919
+ - app/javascript/alchemy_admin/i18n.js
920
+ - app/javascript/alchemy_admin/image_cropper.js
921
+ - app/javascript/alchemy_admin/image_loader.js
922
+ - app/javascript/alchemy_admin/ingredient_anchor_link.js
923
+ - app/javascript/alchemy_admin/node_tree.js
924
+ - app/javascript/alchemy_admin/page_publication_fields.js
925
+ - app/javascript/alchemy_admin/page_sorter.js
926
+ - app/javascript/alchemy_admin/picture_editors.js
927
+ - app/javascript/alchemy_admin/sitemap.js
928
+ - app/javascript/alchemy_admin/tinymce.js
929
+ - app/javascript/alchemy_admin/translations.js
930
+ - app/javascript/alchemy_admin/utils/ajax.js
931
+ - app/javascript/alchemy_admin/utils/events.js
898
932
  - app/jobs/alchemy/base_job.rb
899
933
  - app/jobs/alchemy/publish_page_job.rb
900
934
  - app/mailers/alchemy/base_mailer.rb
@@ -1191,6 +1225,7 @@ files:
1191
1225
  - app/views/layouts/alchemy/admin.html.erb
1192
1226
  - app/views/layouts/alchemy/sitemap.xml.erb
1193
1227
  - babel.config.js
1228
+ - bin/importmap
1194
1229
  - bin/rails
1195
1230
  - bin/rspec
1196
1231
  - bin/setup
@@ -1198,6 +1233,7 @@ files:
1198
1233
  - config/alchemy/config.yml
1199
1234
  - config/alchemy/modules.yml
1200
1235
  - config/brakeman.ignore
1236
+ - config/importmap.rb
1201
1237
  - config/initializers/assets.rb
1202
1238
  - config/initializers/dragonfly.rb
1203
1239
  - config/initializers/mime_types.rb
@@ -1328,27 +1364,6 @@ files:
1328
1364
  - lib/tasks/alchemy/tidy.rake
1329
1365
  - lib/tasks/alchemy/upgrade.rake
1330
1366
  - 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
1367
  - vendor/assets/fonts/fa-regular-400.eot
1353
1368
  - vendor/assets/fonts/fa-regular-400.svg
1354
1369
  - vendor/assets/fonts/fa-regular-400.ttf
@@ -1,22 +0,0 @@
1
- window.Alchemy = {} if typeof(Alchemy) is "undefined"
2
-
3
- Alchemy.Browser =
4
- isiPhone: navigator.userAgent.match(/iPhone/i) isnt null
5
- isiPad: navigator.userAgent.match(/iPad/i) isnt null
6
- isiPod: navigator.userAgent.match(/iPod/i) isnt null
7
- isiOS: navigator.userAgent.match(/iPad|iPhone|iPod/i) isnt null
8
- isFirefox: navigator.userAgent.match(/Firefox/i) isnt null
9
- isChrome: navigator.userAgent.match(/Chrome/i) isnt null
10
- isSafari: navigator.userAgent.match(/AppleWebKit/) and not navigator.userAgent.match(/Chrome/)
11
- isIE: navigator.userAgent.match(/MSIE/i) isnt null
12
- getVersion: (browser) ->
13
- if Alchemy.Browser["is" + browser]
14
- parseInt(navigator.userAgent.match(new RegExp(browser + ".[0-9]+", "i"))[0].replace(new RegExp(browser + "."), ""), 10)
15
- else
16
- null
17
-
18
- Alchemy.Browser.ChromeVersion = Alchemy.Browser.getVersion("Chrome")
19
- Alchemy.Browser.FirefoxVersion = Alchemy.Browser.getVersion("Firefox")
20
- Alchemy.Browser.SafariVersion = Alchemy.Browser.getVersion("Safari")
21
- Alchemy.Browser.IEVersion = Alchemy.Browser.getVersion("MSIE")
22
- Alchemy.Browser.isWebKit = Alchemy.Browser.isChrome || Alchemy.Browser.isSafari
@@ -1,22 +0,0 @@
1
- // Testing for HTML5 features
2
- if (typeof(Alchemy) === 'undefined') {
3
- var Alchemy = {};
4
- }
5
-
6
- Alchemy.HTML5 = {};
7
-
8
- Alchemy.HTML5.hasUploadSupport = function() {
9
- return typeof(window.FileReader) !== 'undefined' && supportFileAPI() && supportAjaxUploadProgressEvents();
10
-
11
- function supportFileAPI() {
12
- var fi = document.createElement('INPUT');
13
- fi.type = 'file';
14
- return 'files' in fi;
15
- }
16
-
17
- function supportAjaxUploadProgressEvents() {
18
- var xhr = new XMLHttpRequest();
19
- return !!(xhr && ('upload' in xhr) && ('onprogress' in xhr.upload));
20
- }
21
-
22
- };
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
- })