katalyst-navigation 1.3.4 → 1.4.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: c8641b8fd17205d9daa4beaf83301081e559193179c236ada502f251c577555b
4
- data.tar.gz: 3fa8331ed9c531013405915b57dd998440b385ceaf662fe72cbe74a88d29bb4f
3
+ metadata.gz: 8f0c8d0aa7dd3f14b5d2e423e9e6475a495b2ea39060c38c468834d8c415f548
4
+ data.tar.gz: f816fa5eb041622143a475d5442d0ff9cb397da26597d2ff2d691c5f28da495c
5
5
  SHA512:
6
- metadata.gz: 673b6803479f9d2b772e9bfbf0fbd05734794e334a4f9f14ace81dd83e8aca6c79554704595aa0bcbe8fdf92d5b309bffe4a5eba3c153dc6c83a5615bf6a3699
7
- data.tar.gz: 325eea3d0caab65ea72dd948adcfc6a94f847d2d2ba158d281b75281edaf6b7204608fb01e001861709592acfbd545a2b0fabf122ed50cf43e06ca98d2d71797
6
+ metadata.gz: 3bdb779e520ce91cd70fa66d33e355bb19b61bc5b011d551db70d0d1fade623ab48359a00aeb782bc26e06c0ca8a41d45c4760b4645ef0a7160ecf6b75418e75
7
+ data.tar.gz: fe696c32dd1dbb6a3e14525a3ed26b2efd99e87095dfc41585b845f7ef30704bb59725d603ec14b60b4fdf19920d7dee1ffa0bb31a5d0c9137c156075cf551f6
@@ -4,9 +4,16 @@ module Katalyst
4
4
  module Navigation
5
5
  class MenusController < BaseController
6
6
  def index
7
- sort, menus = table_sort(Menu.all)
8
-
9
- render locals: { menus: menus, sort: sort }
7
+ collection = Katalyst::Tables::Collection::Base.new(sorting: :title).with_params(params).apply(Menu.all)
8
+ table = Katalyst::Turbo::TableComponent.new(collection: collection,
9
+ id: "index-table",
10
+ class: "index-table",
11
+ caption: true)
12
+
13
+ respond_to do |format|
14
+ format.turbo_stream { render(table) } if self_referred?
15
+ format.html { render :index, locals: { table: table } }
16
+ end
10
17
  end
11
18
 
12
19
  def show
@@ -5,7 +5,7 @@ module Katalyst
5
5
  module EditorHelper
6
6
  def navigation_editor_new_items(menu)
7
7
  Katalyst::Navigation.config.items.map do |item_class|
8
- item_class = item_class.is_a?(String) ? item_class.safe_constantize : item_class
8
+ item_class = item_class.safe_constantize if item_class.is_a?(String)
9
9
  item_class.new(menu: menu)
10
10
  end
11
11
  end
@@ -9,15 +9,15 @@ module Katalyst
9
9
 
10
10
  delegate_missing_to :@template
11
11
 
12
- def initialize(template, list: {}, item: {}, **menu_options)
13
- self.template = template
14
- @menu_options = menu_options.freeze
15
- @list_options = list.freeze
16
- @item_options = item.freeze
12
+ def initialize(template, list: {}, item: {}, **menu_attributes)
13
+ self.template = template
14
+ @menu_attributes = menu_attributes.freeze
15
+ @list_attributes = list.freeze
16
+ @item_attributes = item.freeze
17
17
  end
18
18
 
19
19
  def render(tree)
20
- tag.ul(**menu_options(tree)) do
20
+ tag.ul(**menu_attributes(tree)) do
21
21
  tree.each do |item|
22
22
  concat render_item(item)
23
23
  end
@@ -27,14 +27,14 @@ module Katalyst
27
27
  def render_item(item)
28
28
  return unless item.visible?
29
29
 
30
- tag.li(**item_options(item)) do
30
+ tag.li(**item_attributes(item)) do
31
31
  concat public_send("render_#{item.model_name.param_key}", item)
32
32
  concat render_children(item) if item.children.any?
33
33
  end
34
34
  end
35
35
 
36
36
  def render_children(item)
37
- tag.ul(**list_options(item)) do
37
+ tag.ul(**list_attributes(item)) do
38
38
  item.children.each do |child|
39
39
  concat render_item(child)
40
40
  end
@@ -46,25 +46,25 @@ module Katalyst
46
46
  end
47
47
 
48
48
  def render_link(link)
49
- link_to(link.title, link.url, link.item_options)
49
+ link_to(link.title, link.url, **link.link_attributes)
50
50
  end
51
51
 
52
52
  def render_button(link)
53
- link_to(link.title, link.url, link.item_options)
53
+ link_to(link.title, link.url, **link.link_attributes)
54
54
  end
55
55
 
56
56
  private
57
57
 
58
- def menu_options(_tree)
59
- @menu_options
58
+ def menu_attributes(_tree)
59
+ @menu_attributes
60
60
  end
61
61
 
62
- def list_options(_item)
63
- @list_options
62
+ def list_attributes(_item)
63
+ @list_attributes
64
64
  end
65
65
 
66
- def item_options(_item)
67
- @item_options
66
+ def item_attributes(_item)
67
+ @item_attributes
68
68
  end
69
69
  end
70
70
  end
@@ -13,9 +13,9 @@ module Katalyst
13
13
  # @return Structured HTML containing top level + nested navigation links
14
14
  def navigation_menu_with(menu:, **options)
15
15
  builder = navigation_builder(**options)
16
- menu = menu.is_a?(Symbol) ? navigation_menu_for(menu) : menu
16
+ menu = navigation_menu_for(menu) if menu.is_a?(Symbol)
17
17
 
18
- return unless menu&.published_version&.present?
18
+ return if menu&.published_version.blank?
19
19
 
20
20
  cache menu.published_version do
21
21
  concat builder.render(menu.published_tree)
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Katalyst
4
+ module Navigation
5
+ module HasLink
6
+ extend ActiveSupport::Concern
7
+
8
+ HTTP_METHODS = %w[get post patch put delete].index_by(&:itself).freeze
9
+ TARGETS = %w[self top blank kpop].index_by(&:itself).freeze
10
+
11
+ class_methods do
12
+ def permitted_params
13
+ super + %i[url http_method target]
14
+ end
15
+ end
16
+
17
+ included do
18
+ validates :url, :http_method, :target, presence: true
19
+
20
+ attribute :http_method, :string, default: "get"
21
+
22
+ enum http_method: HTTP_METHODS, _prefix: :http
23
+
24
+ attribute :target, :string, default: "self"
25
+
26
+ enum target: TARGETS, _prefix: :target
27
+ end
28
+
29
+ def link_attributes
30
+ options = if target_self?
31
+ {} # default
32
+ elsif target_blank? || target_top?
33
+ { target: "_#{target}" } # browser will handle this target
34
+ else
35
+ { data: { turbo_frame: target } } # turbo target
36
+ end
37
+
38
+ options.deep_merge!({ data: { turbo_method: http_method } }) unless http_get? || target_blank?
39
+
40
+ options
41
+ end
42
+ end
43
+ end
44
+ end
@@ -4,27 +4,9 @@ module Katalyst
4
4
  module Navigation
5
5
  # Renders an HTML button using `button_to`.
6
6
  class Button < Item
7
- HTTP_METHODS = %i[get post patch put delete].index_by(&:itself).freeze
7
+ include HasLink
8
8
 
9
- enum method: HTTP_METHODS, _prefix: :http
10
-
11
- validates :title, :url, :http_method, presence: true
12
- validates :http_method, inclusion: { in: HTTP_METHODS.values.map(&:to_s) }
13
-
14
- def self.permitted_params
15
- super + %i[http_method]
16
- end
17
-
18
- def options_for_target
19
- options = super
20
-
21
- if target == "_blank" || target == "_top" || target == "self"
22
- options.deep_merge!({ data: { method: http_method } })
23
- else
24
- options.deep_merge!({ data: { turbo_method: http_method } })
25
- end
26
- options
27
- end
9
+ validates :title, presence: true
28
10
  end
29
11
  end
30
12
  end
@@ -10,16 +10,10 @@ module Katalyst
10
10
 
11
11
  attr_accessor :parent, :children, :index, :depth
12
12
 
13
- TARGETS = %i[self _top _blank kpop].index_by(&:itself).freeze
14
-
15
- enum method: TARGETS, _prefix: :target
16
-
17
13
  def self.permitted_params
18
14
  %i[
19
15
  title
20
- url
21
16
  visible
22
- target
23
17
  type
24
18
  ]
25
19
  end
@@ -28,22 +22,6 @@ module Katalyst
28
22
  is_a? Layout
29
23
  end
30
24
 
31
- # Entrypoint for combining additional options based on attribute rules
32
- def item_options
33
- options_for_target
34
- end
35
-
36
- def options_for_target
37
- return {} if target == "self"
38
-
39
- options = { target: target }
40
-
41
- unless target == "_blank" || target == "_top"
42
- options = { data: { turbo: true, turbo_frame: target } }
43
- end
44
- options
45
- end
46
-
47
25
  private
48
26
 
49
27
  def initialize_tree
@@ -4,7 +4,9 @@ module Katalyst
4
4
  module Navigation
5
5
  # Renders an HTML link using `link_to`.
6
6
  class Link < Item
7
- validates :title, :url, presence: true
7
+ include HasLink
8
+
9
+ validates :title, presence: true
8
10
  end
9
11
  end
10
12
  end
@@ -0,0 +1,4 @@
1
+ <%= row.cell :title do |cell| %>
2
+ <%= link_to cell.value, menu %>
3
+ <% end %>
4
+ <%= row.cell :slug %>
@@ -6,9 +6,4 @@
6
6
  </div>
7
7
  </nav>
8
8
 
9
- <%= table_with collection: menus, sort: sort, class: "index-table" do |row, menu| %>
10
- <%= row.cell :title do |cell| %>
11
- <%= link_to cell.value, menu %>
12
- <% end %>
13
- <%= row.cell :slug %>
14
- <% end %>
9
+ <%= render(table) %>
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Ensures that all navigation items have a valid target and http_method.
4
+ class UpdateTargetSyntax < ActiveRecord::Migration[7.0]
5
+ def change
6
+ Katalyst::Navigation::Item.where(http_method: nil).update_all(target: "get")
7
+ Katalyst::Navigation::Item.where(target: nil).update_all(target: "self")
8
+ Katalyst::Navigation::Item.where(target: "_blank").update_all(target: "blank")
9
+ Katalyst::Navigation::Item.where(target: "_top").update_all(target: "top")
10
+ end
11
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Katalyst
4
4
  module Navigation
5
- VERSION = "1.3.4"
5
+ VERSION = "1.4.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: katalyst-navigation
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katalyst Interactive
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-15 00:00:00.000000000 Z
11
+ date: 2023-07-27 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -49,6 +49,7 @@ files:
49
49
  - app/helpers/katalyst/navigation/frontend/builder.rb
50
50
  - app/helpers/katalyst/navigation/frontend_helper.rb
51
51
  - app/models/concerns/katalyst/navigation/garbage_collection.rb
52
+ - app/models/concerns/katalyst/navigation/has_link.rb
52
53
  - app/models/concerns/katalyst/navigation/has_tree.rb
53
54
  - app/models/katalyst/navigation/button.rb
54
55
  - app/models/katalyst/navigation/heading.rb
@@ -66,6 +67,7 @@ files:
66
67
  - app/views/katalyst/navigation/items/update.turbo_stream.erb
67
68
  - app/views/katalyst/navigation/menus/_item.html.erb
68
69
  - app/views/katalyst/navigation/menus/_list_item.html.erb
70
+ - app/views/katalyst/navigation/menus/_menu.html+row.erb
69
71
  - app/views/katalyst/navigation/menus/_new_item.html.erb
70
72
  - app/views/katalyst/navigation/menus/_new_items.html.erb
71
73
  - app/views/katalyst/navigation/menus/edit.html.erb
@@ -78,6 +80,7 @@ files:
78
80
  - db/migrate/20220826034057_create_katalyst_navigation_menus.rb
79
81
  - db/migrate/20220826034507_create_katalyst_navigation_items.rb
80
82
  - db/migrate/20220908044500_add_depth_limit_to_menus.rb
83
+ - db/migrate/20230727025052_update_target_syntax.rb
81
84
  - lib/katalyst/navigation.rb
82
85
  - lib/katalyst/navigation/config.rb
83
86
  - lib/katalyst/navigation/engine.rb
@@ -104,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
107
  - !ruby/object:Gem::Version
105
108
  version: '0'
106
109
  requirements: []
107
- rubygems_version: 3.3.7
110
+ rubygems_version: 3.4.12
108
111
  signing_key:
109
112
  specification_version: 4
110
113
  summary: Navigation generator and editor