alchemy_cms 7.2.0.rc2 → 7.2.0

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: 1ab8abb53948898989f3d8a8b597737a63da7e541ef5cd0de08a23d505fb7729
4
- data.tar.gz: ce85ac778f47134d757d46c9c4d56879d98cb456b32ebe3a1d8133f757643b8b
3
+ metadata.gz: fc42b823b465bcd27da5afbf252cfe85cca0067e909a41bdd62e11f26b19ddc9
4
+ data.tar.gz: d46785e2a9f7c6e6af086ad315d5e354c3db098530103ee6a94e5ef63802fff4
5
5
  SHA512:
6
- metadata.gz: e6e1a233177adbdac5ae8a61fae4653f392fe458938e1b87752dc3c1317ad881fd0e6270e8a612bb8f7b45e31430584f8bd27e018ec7d0fb702a6518483daf34
7
- data.tar.gz: 1effffc22e22464f9cf4cf0d1e22107746d93cbac01a2610f7e29707de7f25b186e3c87bc2527dfe820fbb611e4cf65c1dfb1c6d3ba062e0ae3cb7bc0224a0de
6
+ metadata.gz: 7e931bc107d3ed406e7d718c6a56c1a09a3ed78548b2d30415d0ffb31ce5838a4abfd08f641961889b66813989d25254f0235de5ceeb3fe9e7656d812086cd11
7
+ data.tar.gz: c6bcdbbacadbfdc5ca9ac22b66fdf0d5d99403a2c99add0877e537053afacd53343d0e9534184ede0bdb07976c4eadaa6aa82be51eb520d96c5a59d6bc42c067
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 7.2.0 (2024-05-28)
4
+
5
+ - Remove responders gem [#2901](https://github.com/AlchemyCMS/alchemy_cms/pull/2901) ([tvdeyen](https://github.com/tvdeyen))
6
+ - Add Language and Site serializers [#2900](https://github.com/AlchemyCMS/alchemy_cms/pull/2900) ([tvdeyen](https://github.com/tvdeyen))
7
+ - PageSelect: Move URL to bottom [#2899](https://github.com/AlchemyCMS/alchemy_cms/pull/2899) ([tvdeyen](https://github.com/tvdeyen))
8
+ - Highlight search terms in RemoteSelect [#2898](https://github.com/AlchemyCMS/alchemy_cms/pull/2898) ([tvdeyen](https://github.com/tvdeyen))
9
+ - fix(InternalTab): Fix for urls with trailing slash and no locale [#2897](https://github.com/AlchemyCMS/alchemy_cms/pull/2897) ([tvdeyen](https://github.com/tvdeyen))
10
+
3
11
  ## 7.2.0.rc2 (2024-05-27)
4
12
 
5
13
  - Harden specs [#2896](https://github.com/AlchemyCMS/alchemy_cms/pull/2896) ([tvdeyen](https://github.com/tvdeyen))
data/alchemy_cms.gemspec CHANGED
@@ -46,7 +46,6 @@ Gem::Specification.new do |gem|
46
46
  gem.add_runtime_dependency "kaminari", ["~> 1.1"]
47
47
  gem.add_runtime_dependency "originator", ["~> 3.1"]
48
48
  gem.add_runtime_dependency "ransack", [">= 1.8", "< 5.0"]
49
- gem.add_runtime_dependency "responders", [">= 2.0", "< 4.0"]
50
49
  gem.add_runtime_dependency "sassc-rails", ["~> 2.1"]
51
50
  gem.add_runtime_dependency "simple_form", [">= 4.0", "< 6"]
52
51
  gem.add_runtime_dependency "sprockets", [">= 3.0", "< 5"]
@@ -10,9 +10,12 @@
10
10
  display: flex;
11
11
  flex-direction: column;
12
12
 
13
- .icon {
14
- margin: 0 $default-margin;
15
- fill: currentColor;
13
+ alchemy-icon {
14
+ margin-right: $default-margin;
15
+
16
+ .icon {
17
+ fill: currentColor;
18
+ }
16
19
  }
17
20
  }
18
21
 
@@ -25,11 +28,12 @@
25
28
 
26
29
  .page-select--bottom {
27
30
  font-size: $small-font-size;
28
- padding-left: $default-padding;
31
+ padding-left: $default-padding / 2;
29
32
  }
30
33
 
31
- .page-select--site-name {
34
+ .page-select--page-urlname {
32
35
  color: $muted-text-color;
36
+ padding-right: $default-padding;
33
37
 
34
38
  .select2-highlighted & {
35
39
  color: $medium-gray;
@@ -42,6 +46,7 @@
42
46
  margin-left: auto;
43
47
  border-radius: $default-border-radius;
44
48
  padding: $default-padding / 2 $default-padding;
49
+ text-transform: uppercase;
45
50
 
46
51
  .select2-highlighted & {
47
52
  color: $select-hover-bg-color;
@@ -49,9 +54,9 @@
49
54
  }
50
55
  }
51
56
 
52
- .page-select--page-urlname {
57
+ .page-select--site-name {
53
58
  margin-left: auto;
54
- padding: $default-padding 2 * $default-padding;
59
+ padding: $default-padding 0 $default-padding 2 * $default-padding;
55
60
  color: $dark-gray;
56
61
  font-size: $small-font-size;
57
62
 
@@ -4,7 +4,7 @@ module Alchemy
4
4
  module Admin
5
5
  module LinkDialog
6
6
  class InternalTab < BaseTab
7
- PAGE_URL_PATTERN = /\A\/(?<locale>[a-z]{2})?(?<slash>\/)?(?<urlname>.*?)(?<trailing-slash>\/)?\z/
7
+ PAGE_URL_PATTERN = /^\/(?:(?<locale>[a-z]{2})(?:\/|$))?(?<urlname>.*?)(?:\/|$)?(?:#(?<fragment>.*))?$/
8
8
 
9
9
  def title
10
10
  Alchemy.t("link_overlay_tab_label.internal")
@@ -49,7 +49,7 @@ module Alchemy
49
49
  end
50
50
 
51
51
  def page_attributes
52
- locale, _, urlname, _ = uri.path.match(PAGE_URL_PATTERN)&.captures
52
+ locale, urlname, _fragment = uri.path.match(PAGE_URL_PATTERN)&.captures
53
53
 
54
54
  if locale && urlname.present?
55
55
  {language_code: locale, urlname: urlname}
@@ -3,7 +3,6 @@
3
3
  module Alchemy
4
4
  class Api::BaseController < Alchemy::BaseController
5
5
  layout false
6
- respond_to :json
7
6
 
8
7
  rescue_from CanCan::AccessDenied, with: :render_not_authorized
9
8
  rescue_from ActiveRecord::RecordNotFound, with: :render_not_found
@@ -37,7 +37,7 @@ module Alchemy
37
37
  def show
38
38
  @element = Element.where(id: params[:id]).includes(*element_includes).first
39
39
  authorize! :show, @element
40
- respond_with @element
40
+ render json: @element, serializer: ElementSerializer
41
41
  end
42
42
 
43
43
  private
@@ -43,7 +43,7 @@ module Alchemy
43
43
  #
44
44
  def show
45
45
  authorize! :show, @page
46
- respond_with @page
46
+ render json: @page, serializer: PageSerializer
47
47
  end
48
48
 
49
49
  def move
@@ -8,14 +8,15 @@ class AttachmentSelect extends RemoteSelect {
8
8
  /**
9
9
  * html template for each list entry
10
10
  * @param {object} page
11
+ * @param {string} term
11
12
  * @returns {string}
12
13
  * @private
13
14
  */
14
- _renderListEntry(attachment) {
15
+ _renderListEntry(attachment, term) {
15
16
  return `
16
17
  <div class="attachment-select--attachment">
17
18
  <alchemy-icon name="${attachment.icon_css_class}"></alchemy-icon>
18
- <span class="attachment-select--attachment-name">${attachment.name}</span>
19
+ <span class="attachment-select--attachment-name">${this._hightlightTerm(attachment.name, term)}</span>
19
20
  </div>
20
21
  `
21
22
  }
@@ -18,10 +18,11 @@ class NodeSelect extends RemoteSelect {
18
18
  /**
19
19
  * html template for each list entry
20
20
  * @param {object} node
21
+ * @param {string} term
21
22
  * @returns {string}
22
23
  * @private
23
24
  */
24
- _renderListEntry(node) {
25
+ _renderListEntry(node, term) {
25
26
  const ancestors = node.ancestors.map((a) => a.name)
26
27
  const seperator = `<alchemy-icon name="arrow-right-s"></alchemy-icon>`
27
28
 
@@ -33,7 +34,7 @@ class NodeSelect extends RemoteSelect {
33
34
  ${ancestors.length > 0 ? ancestors.join(seperator) + seperator : ""}
34
35
  </span>
35
36
  <span class="node-select--node-name">
36
- ${node.name}
37
+ ${this._hightlightTerm(node.name, term)}
37
38
  </span>
38
39
  </div>
39
40
  <div class="node-select--node-url">
@@ -36,20 +36,21 @@ class PageSelect extends RemoteSelect {
36
36
  /**
37
37
  * html template for each list entry
38
38
  * @param {object} page
39
+ * @param {string} term
39
40
  * @returns {string}
40
41
  * @private
41
42
  */
42
- _renderListEntry(page) {
43
+ _renderListEntry(page, term) {
43
44
  return `
44
45
  <div class="page-select--page">
45
46
  <div class="page-select--top">
46
47
  <alchemy-icon name="file-3"></alchemy-icon>
47
- <span class="page-select--page-name">${page.name}</span>
48
- <span class="page-select--page-urlname">${page.url_path}</span>
48
+ <span class="page-select--page-name">${this._hightlightTerm(page.name, term)}</span>
49
+ <span class="page-select--site-name">${page.site.name}</span>
49
50
  </div>
50
51
  <div class="page-select--bottom">
51
- <span class="page-select--site-name">${page.site.name}</span>
52
- <span class="page-select--language-code">${page.language.name}</span>
52
+ <span class="page-select--page-urlname">${page.url_path}</span>
53
+ <span class="page-select--language-code">${page.language_code}</span>
53
54
  </div>
54
55
  </div>
55
56
  `
@@ -62,7 +62,8 @@ export class RemoteSelect extends AlchemyHTMLElement {
62
62
  },
63
63
  ajax: this.ajaxConfig,
64
64
  formatSelection: (item) => this._renderResult(item),
65
- formatResult: (item) => this._renderListEntry(item)
65
+ formatResult: (item, _el, query) =>
66
+ this._renderListEntry(item, query.term)
66
67
  }
67
68
  }
68
69
 
@@ -126,6 +127,7 @@ export class RemoteSelect extends AlchemyHTMLElement {
126
127
  /**
127
128
  * html template for each list entry
128
129
  * @param {object} item
130
+ * @param {string} term
129
131
  * @returns {string}
130
132
  * @private
131
133
  */
@@ -134,4 +136,15 @@ export class RemoteSelect extends AlchemyHTMLElement {
134
136
  "You need to define a _renderListEntry function on your sub class!"
135
137
  )
136
138
  }
139
+
140
+ /**
141
+ * hightlighted search term
142
+ * @param {string} name
143
+ * @param {string} term
144
+ * @returns {string}
145
+ * @private
146
+ */
147
+ _hightlightTerm(name, term) {
148
+ return name.replace(new RegExp(term, "gi"), (match) => `<em>${match}</em>`)
149
+ }
137
150
  }
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Alchemy
4
+ class LanguageSerializer < ActiveModel::Serializer
5
+ attributes :id,
6
+ :name
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Alchemy
4
+ class SiteSerializer < ActiveModel::Serializer
5
+ attributes :id,
6
+ :name
7
+ end
8
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alchemy
4
- VERSION = "7.2.0.rc2"
4
+ VERSION = "7.2.0"
5
5
 
6
6
  def self.version
7
7
  VERSION
data/lib/alchemy_cms.rb CHANGED
@@ -17,7 +17,6 @@ require "jquery-rails"
17
17
  require "kaminari"
18
18
  require "non_stupid_digest_assets"
19
19
  require "ransack"
20
- require "responders"
21
20
  require "sassc-rails"
22
21
  require "simple_form"
23
22
  require "turbo-rails"
@@ -396,6 +396,7 @@ html[dir="rtl"] .select2-results {
396
396
  .select2-results li em {
397
397
  background: #feffde;
398
398
  font-style: normal;
399
+ text-decoration: underline;
399
400
  }
400
401
 
401
402
  .select2-results .select2-highlighted em {
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.2.0.rc2
4
+ version: 7.2.0
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: 2024-05-27 00:00:00.000000000 Z
16
+ date: 2024-05-28 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: actionmailer
@@ -413,26 +413,6 @@ dependencies:
413
413
  - - "<"
414
414
  - !ruby/object:Gem::Version
415
415
  version: '5.0'
416
- - !ruby/object:Gem::Dependency
417
- name: responders
418
- requirement: !ruby/object:Gem::Requirement
419
- requirements:
420
- - - ">="
421
- - !ruby/object:Gem::Version
422
- version: '2.0'
423
- - - "<"
424
- - !ruby/object:Gem::Version
425
- version: '4.0'
426
- type: :runtime
427
- prerelease: false
428
- version_requirements: !ruby/object:Gem::Requirement
429
- requirements:
430
- - - ">="
431
- - !ruby/object:Gem::Version
432
- version: '2.0'
433
- - - "<"
434
- - !ruby/object:Gem::Version
435
- version: '4.0'
436
416
  - !ruby/object:Gem::Dependency
437
417
  name: sassc-rails
438
418
  requirement: !ruby/object:Gem::Requirement
@@ -1015,11 +995,13 @@ files:
1015
995
  - app/serializers/alchemy/base_serializer.rb
1016
996
  - app/serializers/alchemy/element_serializer.rb
1017
997
  - app/serializers/alchemy/ingredient_serializer.rb
998
+ - app/serializers/alchemy/language_serializer.rb
1018
999
  - app/serializers/alchemy/node_serializer.rb
1019
1000
  - app/serializers/alchemy/page_node_serializer.rb
1020
1001
  - app/serializers/alchemy/page_serializer.rb
1021
1002
  - app/serializers/alchemy/page_tree_serializer.rb
1022
1003
  - app/serializers/alchemy/picture_serializer.rb
1004
+ - app/serializers/alchemy/site_serializer.rb
1023
1005
  - app/services/alchemy/copy_page.rb
1024
1006
  - app/services/alchemy/delete_elements.rb
1025
1007
  - app/services/alchemy/duplicate_element.rb