alchemy_cms 5.3.3 → 5.3.6

Sign up to get free protection for your applications and to get access to all the features.
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