katalyst-navigation 1.3.4 → 1.4.0
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.
- checksums.yaml +4 -4
- data/app/controllers/katalyst/navigation/menus_controller.rb +10 -3
- data/app/helpers/katalyst/navigation/editor_helper.rb +1 -1
- data/app/helpers/katalyst/navigation/frontend/builder.rb +16 -16
- data/app/helpers/katalyst/navigation/frontend_helper.rb +2 -2
- data/app/models/concerns/katalyst/navigation/has_link.rb +44 -0
- data/app/models/katalyst/navigation/button.rb +2 -20
- data/app/models/katalyst/navigation/item.rb +0 -22
- data/app/models/katalyst/navigation/link.rb +3 -1
- data/app/views/katalyst/navigation/menus/_menu.html+row.erb +4 -0
- data/app/views/katalyst/navigation/menus/index.html.erb +1 -6
- data/db/migrate/20230727025052_update_target_syntax.rb +11 -0
- data/lib/katalyst/navigation/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f0c8d0aa7dd3f14b5d2e423e9e6475a495b2ea39060c38c468834d8c415f548
|
4
|
+
data.tar.gz: f816fa5eb041622143a475d5442d0ff9cb397da26597d2ff2d691c5f28da495c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
8
|
-
|
9
|
-
|
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)
|
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: {}, **
|
13
|
-
self.template
|
14
|
-
@
|
15
|
-
@
|
16
|
-
@
|
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(**
|
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(**
|
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(**
|
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.
|
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.
|
53
|
+
link_to(link.title, link.url, **link.link_attributes)
|
54
54
|
end
|
55
55
|
|
56
56
|
private
|
57
57
|
|
58
|
-
def
|
59
|
-
@
|
58
|
+
def menu_attributes(_tree)
|
59
|
+
@menu_attributes
|
60
60
|
end
|
61
61
|
|
62
|
-
def
|
63
|
-
@
|
62
|
+
def list_attributes(_item)
|
63
|
+
@list_attributes
|
64
64
|
end
|
65
65
|
|
66
|
-
def
|
67
|
-
@
|
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)
|
16
|
+
menu = navigation_menu_for(menu) if menu.is_a?(Symbol)
|
17
17
|
|
18
|
-
return
|
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
|
-
|
7
|
+
include HasLink
|
8
8
|
|
9
|
-
|
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
|
@@ -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
|
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.
|
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-
|
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.
|
110
|
+
rubygems_version: 3.4.12
|
108
111
|
signing_key:
|
109
112
|
specification_version: 4
|
110
113
|
summary: Navigation generator and editor
|