alchemy_cms 5.3.3 → 5.3.6

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.

Potentially problematic release.


This version of alchemy_cms might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f18c2fd116b7cecb0091d78a0e3d7bdad8a996e03b04c53e56e04a651a5d47b
4
- data.tar.gz: 35f9e7ed5ef6c525348a5d885c50d448376ce03f2ce0955037ed3a05c4733ade
3
+ metadata.gz: ec248084ae4d408eeaaf43ec2aec3779451938672a48c086dcd358005cf31606
4
+ data.tar.gz: 388f282fecad595e37767e8af898967c9e5fb08d274f9b07e6aa6487436bdb56
5
5
  SHA512:
6
- metadata.gz: 23b529d54cdc27a766208ee9750e282349b184feec1cc21f398a01caccd970d2dc5a9bdd7f500f52fe165f306bf32052d8d48f2e892b83af92037d65fcec33c9
7
- data.tar.gz: f733eee0bb31d47a489657d66c741fb983f1a363e017756f3be0ced53a589e3978e51f5240c8bdd3fa6d405a89bf8c89d6a7ff3b17d6de4631d638f7206dcb90
6
+ metadata.gz: af624870c78c567a063610b1dd15bd81cc33e760856abe4d18b4459d43cad582d559d5b83bcdd29a5e55a19cf978fe93113307eb816bc3c746961b20aa1a22e1
7
+ data.tar.gz: ae840910731a7e361cbb95b8947e00f2e6fb9f45166a0010ef37421dfc8cc2d71fc031fbdfc3a2ef5dc5473d03bb6a735b1f985bdeb27ec3d03cad3e8d58ddea
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## 5.3.6 (2022-06-04)
2
+
3
+ - Use HashWithIndifferentAccess for Page definition. Key hint translation by page_layout [#2343](https://github.com/AlchemyCMS/alchemy_cms/pull/2343) ([dbwinger](https://github.com/dbwinger))
4
+
5
+ ## 5.3.5 (2022-04-26)
6
+
7
+ - Add thumbnail processor to support resizing on animated GIFs [#2316](https://github.com/AlchemyCMS/alchemy_cms/pull/2316) ([kulturbande](https://github.com/kulturbande))
8
+ - Backport #2277 to 5.3 [#2306](https://github.com/AlchemyCMS/alchemy_cms/pull/2306) ([dbwinger](https://github.com/dbwinger))
9
+ - add webp - support to 5.3 stable [#2294](https://github.com/AlchemyCMS/alchemy_cms/pull/2294) ([kulturbande](https://github.com/kulturbande))
10
+
11
+ ## 5.3.4 (2022-04-11)
12
+
13
+ - Don't delete locals in render_element so they can be used by all elem… [#2284](https://github.com/AlchemyCMS/alchemy_cms/pull/2284) ([dbwinger](https://github.com/dbwinger))
14
+ - Show site and language name on page select in Link dialog [#2280](https://github.com/AlchemyCMS/alchemy_cms/pull/2280) ([dbwinger](https://github.com/dbwinger))
15
+
1
16
  ## 5.3.3 (2022-03-24)
2
17
 
3
18
  - fix admin sitemap feature specs ([tvdeyen](https://github.com/tvdeyen))
@@ -80,6 +80,8 @@ class window.Alchemy.LinkDialog extends Alchemy.Dialog
80
80
  name: page.name
81
81
  url_path: page.url_path
82
82
  page_id: page.id
83
+ language: page.language
84
+ site: page.site
83
85
  more: meta.page * meta.per_page < meta.total_count
84
86
  initSelection: ($element, callback) =>
85
87
  urlname = $element.val()
@@ -8,6 +8,7 @@ module Alchemy
8
8
  def index
9
9
  @nodes = Node.all
10
10
  @nodes = @nodes.includes(:parent)
11
+ @nodes = @nodes.where(language_id: params[:language_id]) if params[:language_id]
11
12
  @nodes = @nodes.ransack(params[:filter]).result
12
13
 
13
14
  if params[:page]
@@ -142,8 +142,8 @@ module Alchemy
142
142
  render element, {
143
143
  element: element,
144
144
  counter: counter,
145
- options: options,
146
- }.merge(options.delete(:locals) || {})
145
+ options: options.except(:locals),
146
+ }.merge(options[:locals] || {})
147
147
  rescue ActionView::MissingTemplate => e
148
148
  warning(%(
149
149
  Element view partial not found for #{element.name}.\n
@@ -523,6 +523,12 @@ module Alchemy
523
523
  locker.try(:name) || Alchemy.t("unknown")
524
524
  end
525
525
 
526
+ # Key hint translations by page layout, rather than the default name.
527
+ #
528
+ def hint_translation_attribute
529
+ page_layout
530
+ end
531
+
526
532
  # Menus (aka. root nodes) this page is attached to
527
533
  #
528
534
  def menus
@@ -67,7 +67,7 @@ module Alchemy
67
67
  # Returns the rendered resized image using imagemagick directly.
68
68
  #
69
69
  def resize(size, upsample = false)
70
- image_file.thumb(upsample ? size : "#{size}>")
70
+ image_file.thumbnail(upsample ? size : "#{size}>")
71
71
  end
72
72
 
73
73
  # Returns true if picture's width is greater than it's height
@@ -191,7 +191,7 @@ module Alchemy
191
191
  if is_smaller_than?(dimensions) && upsample == false
192
192
  dimensions = reduce_to_image(dimensions)
193
193
  end
194
- image_file.thumb("#{dimensions_to_string(dimensions)}#")
194
+ image_file.thumbnail("#{dimensions_to_string(dimensions)}#")
195
195
  end
196
196
 
197
197
  # Use imagemagick to custom crop an image. Uses -thumbnail for better performance when resizing.
@@ -28,7 +28,7 @@ module Alchemy
28
28
  large: "240x180",
29
29
  }.with_indifferent_access.freeze
30
30
 
31
- CONVERTIBLE_FILE_FORMATS = %w(gif jpg jpeg png).freeze
31
+ CONVERTIBLE_FILE_FORMATS = %w[gif jpg jpeg png webp].freeze
32
32
 
33
33
  TRANSFORMATION_OPTIONS = [
34
34
  :crop,
@@ -13,6 +13,8 @@ module Alchemy
13
13
  include Alchemy::Logger
14
14
  include Alchemy::Picture::Transformations
15
15
 
16
+ ANIMATED_IMAGE_FORMATS = %w[gif webp]
17
+
16
18
  attr_reader :picture, :render_format
17
19
 
18
20
  def_delegators :@picture,
@@ -86,7 +88,7 @@ module Alchemy
86
88
  end
87
89
 
88
90
  options = {
89
- flatten: render_format != "gif" && picture.image_file_format == "gif",
91
+ flatten: !render_format.in?(ANIMATED_IMAGE_FORMATS) && picture.image_file_format == "gif",
90
92
  }.with_indifferent_access.merge(options)
91
93
 
92
94
  encoding_options = []
@@ -17,7 +17,7 @@
17
17
  }) %>
18
18
  $('#<%= essence_node_editor.form_field_id %>').alchemyNodeSelect({
19
19
  placeholder: "<%= Alchemy.t(:search_node) %>",
20
- url: "<%= alchemy.api_nodes_path %>",
20
+ url: "<%= alchemy.api_nodes_path(language_id: essence_node_editor.page&.language_id) %>",
21
21
  query_params: <%== query_params.to_json %>,
22
22
  <% if essence_node_editor.essence.node %>
23
23
  <% serialized_node = ActiveModelSerializers::SerializableResource.new(essence_node_editor.essence.node, include: :ancestors) %>
@@ -173,6 +173,7 @@ uploader:
173
173
  - gif
174
174
  - png
175
175
  - svg
176
+ - webp
176
177
 
177
178
  # === Link Target Options
178
179
  #
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
  require "dragonfly_svg"
3
3
  require "alchemy/dragonfly/processors/crop_resize"
4
+ require "alchemy/dragonfly/processors/thumbnail"
4
5
 
5
6
  # Logger
6
7
  Dragonfly.logger = Rails.logger
@@ -16,4 +17,5 @@ Dragonfly::ImageMagick::Processors::Encode::WHITELISTED_ARGS << "flatten"
16
17
 
17
18
  Rails.application.config.after_initialize do
18
19
  Dragonfly.app(:alchemy_pictures).add_processor(:crop_resize, Alchemy::Dragonfly::Processors::CropResize.new)
20
+ Dragonfly.app(:alchemy_pictures).add_processor(:thumbnail, Alchemy::Dragonfly::Processors::Thumbnail.new)
19
21
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dragonfly/image_magick/processors/thumb"
4
+
5
+ module Alchemy
6
+ module Dragonfly
7
+ module Processors
8
+ class Thumbnail < ::Dragonfly::ImageMagick::Processors::Thumb
9
+ def call(content, geometry, opts = {})
10
+ # store content into an instance variable to use it in args_for_geometry - method
11
+ @content = content
12
+ super
13
+ end
14
+
15
+ ##
16
+ # due to a missing ImageMagick parameter animated GIFs were broken with the default
17
+ # Dragonfly Thumb processor
18
+ def args_for_geometry(geometry)
19
+ # resize all frames in a GIF
20
+ # @link https://imagemagick.org/script/command-line-options.php#coalesce
21
+ # @link https://imagemagick.org/script/command-line-options.php#deconstruct
22
+ @content&.mime_type == "image/gif" ? "-coalesce #{super} -deconstruct" : super
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -45,6 +45,17 @@ module Alchemy
45
45
  end
46
46
  end
47
47
 
48
+ initializer "alchemy.webp-mime_type" do
49
+ # Rails does not know anything about webp even in 2022
50
+ unless Mime::Type.lookup_by_extension(:webp)
51
+ Mime::Type.register("image/webp", :webp)
52
+ end
53
+ # Dragonfly uses Rack to read the mime type and guess what
54
+ unless Rack::Mime::MIME_TYPES[".webp"]
55
+ Rack::Mime::MIME_TYPES[".webp"] = "image/webp"
56
+ end
57
+ end
58
+
48
59
  initializer "alchemy.error_tracking" do
49
60
  if defined?(Airbrake)
50
61
  require_relative "error_tracking/airbrake_handler"
data/lib/alchemy/hints.rb CHANGED
@@ -37,19 +37,23 @@ module Alchemy
37
37
  def hint
38
38
  hint = definition["hint"]
39
39
  if hint == true
40
- Alchemy.t(name, scope: hint_translation_scope)
40
+ Alchemy.t(hint_translation_attribute, scope: hint_translation_scope)
41
41
  else
42
42
  hint
43
43
  end
44
44
  end
45
45
 
46
- # Returns true if the element has a hint
46
+ # Returns true if the element has a hint defined
47
47
  def has_hint?
48
- hint.present?
48
+ !!definition[:hint]
49
49
  end
50
50
 
51
51
  private
52
52
 
53
+ def hint_translation_attribute
54
+ name
55
+ end
56
+
53
57
  def hint_translation_scope
54
58
  "#{self.class.model_name.to_s.demodulize.downcase}_hints"
55
59
  end
@@ -8,7 +8,7 @@ module Alchemy
8
8
  # They are defined in +config/alchemy/page_layout.yml+ file.
9
9
  #
10
10
  def all
11
- @definitions ||= read_definitions_file
11
+ @definitions ||= read_definitions_file.map(&:with_indifferent_access)
12
12
  end
13
13
 
14
14
  # Add additional page definitions to collection.
@@ -164,7 +164,11 @@ module Alchemy
164
164
  #
165
165
  def read_definitions_file
166
166
  if File.exist?(layouts_file_path)
167
- YAML.safe_load(ERB.new(File.read(layouts_file_path)).result, YAML_WHITELIST_CLASSES, [], true) || []
167
+ Array.wrap(
168
+ YAML.safe_load(
169
+ ERB.new(File.read(layouts_file_path)).result, YAML_WHITELIST_CLASSES, [], true
170
+ ) || []
171
+ )
168
172
  else
169
173
  raise LoadError, "Could not find page_layouts.yml file! Please run `rails generate alchemy:install`"
170
174
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alchemy
4
- VERSION = "5.3.3"
4
+ VERSION = "5.3.6"
5
5
 
6
6
  def self.version
7
7
  VERSION
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alchemy_cms/admin",
3
- "version": "5.3.3",
3
+ "version": "5.3.6",
4
4
  "description": "AlchemyCMS",
5
5
  "browser": "package/admin.js",
6
6
  "files": [
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: 5.3.3
4
+ version: 5.3.6
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: 2022-03-24 00:00:00.000000000 Z
16
+ date: 2022-06-04 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: active_model_serializers
@@ -1079,6 +1079,7 @@ files:
1079
1079
  - lib/alchemy/controller_actions.rb
1080
1080
  - lib/alchemy/deprecation.rb
1081
1081
  - lib/alchemy/dragonfly/processors/crop_resize.rb
1082
+ - lib/alchemy/dragonfly/processors/thumbnail.rb
1082
1083
  - lib/alchemy/element_definition.rb
1083
1084
  - lib/alchemy/elements_finder.rb
1084
1085
  - lib/alchemy/engine.rb