katalyst-navigation 1.3.0 → 1.3.1
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/assets/stylesheets/katalyst/navigation/editor/_item-actions.scss +11 -12
- data/app/assets/stylesheets/katalyst/navigation/editor/_new-items.scss +4 -0
- data/app/controllers/katalyst/navigation/items_controller.rb +4 -4
- data/app/controllers/katalyst/navigation/menus_controller.rb +14 -13
- data/app/helpers/katalyst/navigation/editor/errors.rb +24 -0
- data/app/helpers/katalyst/navigation/editor/menu.rb +5 -0
- data/app/helpers/katalyst/navigation/editor_helper.rb +7 -1
- data/app/models/katalyst/navigation/menu.rb +17 -4
- data/app/views/katalyst/navigation/menus/_item.html.erb +1 -1
- data/config/locales/en.yml +4 -0
- data/lib/katalyst/navigation/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: faf8cc382bdaae60ca2a35d93dcdfe970e36d317912ed13038607e74cf68da45
|
4
|
+
data.tar.gz: '05539e1025ee15510fb6952a3bfec19534daa834af0dd80f303081badb3a68cf'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd9484b91afa4c6e80347513fe063989b00f838b9b6ca7bd3ff448879f444a89a7789e9e3fe7216987f67ea23fa4ae036797841b6e8631be37b157b6000b807f
|
7
|
+
data.tar.gz: 650999ce4d2ead2f82c80ec97458edbc326c0c43c57c62a5bb72f86f1c79c7c8c0adee7dba0653b4ea09b05d135677ad4de582209b13d7d9a66592ca8b49a058
|
@@ -22,8 +22,7 @@
|
|
22
22
|
}
|
23
23
|
}
|
24
24
|
|
25
|
-
[role="img"][
|
26
|
-
[role="img"][value="title"] {
|
25
|
+
[role="img"][title="Type"] {
|
27
26
|
width: 1.5rem;
|
28
27
|
height: 1.5rem;
|
29
28
|
display: grid;
|
@@ -44,18 +43,18 @@
|
|
44
43
|
line-height: 1.125rem;
|
45
44
|
text-align: center;
|
46
45
|
}
|
46
|
+
}
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
}
|
52
|
-
}
|
48
|
+
[role="img"][value="heading"]::before {
|
49
|
+
content: "H";
|
50
|
+
}
|
53
51
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
52
|
+
[role="img"][value="link"]::before {
|
53
|
+
content: "#";
|
54
|
+
}
|
55
|
+
|
56
|
+
[role="img"][value="button"]::before {
|
57
|
+
content: "#";
|
59
58
|
}
|
60
59
|
|
61
60
|
[role="img"][value="invisible"] {
|
@@ -28,6 +28,10 @@
|
|
28
28
|
position: unset;
|
29
29
|
}
|
30
30
|
|
31
|
+
&[data-item-type="heading"]:before {
|
32
|
+
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 64 64' xmlns='http://www.w3.org/2000/svg'%3E%3Cstyle%3Etext %7B font: 72px serif %7D%3C/style%3E%3Ctext x='7' y='56' textLength='48'%3EH%3C/text%3E%3C/svg%3E%0A");
|
33
|
+
}
|
34
|
+
|
31
35
|
&[data-item-type="link"]:before {
|
32
36
|
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 48 48' xmlns='http://www.w3.org/2000/svg'%3E%3Cg clip-path='url(%23clip0_67_1273)'%3E%3Cpath d='M16 22H32V26H16V22ZM40.2 24H44C44 18.48 39.52 14 34 14H26V17.8H34C37.42 17.8 40.2 20.58 40.2 24ZM7.8 24C7.8 20.58 10.58 17.8 14 17.8H22V14H14C8.48 14 4 18.48 4 24C4 29.52 8.48 34 14 34H22V30.2H14C10.58 30.2 7.8 27.42 7.8 24ZM38 24H34V30H28V34H34V40H38V34H44V30H38V24Z' /%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_67_1273'%3E%3Crect width='48' height='48' /%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E");
|
33
37
|
}
|
@@ -10,6 +10,10 @@ module Katalyst
|
|
10
10
|
render locals: { item: @menu.items.build(type: new_item_params) }
|
11
11
|
end
|
12
12
|
|
13
|
+
def edit
|
14
|
+
render locals: { item: @item }
|
15
|
+
end
|
16
|
+
|
13
17
|
def create
|
14
18
|
item = @menu.items.build(item_params)
|
15
19
|
if item.save
|
@@ -19,10 +23,6 @@ module Katalyst
|
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
22
|
-
def edit
|
23
|
-
render locals: { item: @item }
|
24
|
-
end
|
25
|
-
|
26
26
|
def update
|
27
27
|
@item.attributes = item_params
|
28
28
|
|
@@ -9,10 +9,22 @@ module Katalyst
|
|
9
9
|
render locals: { menus: menus, sort: sort }
|
10
10
|
end
|
11
11
|
|
12
|
+
def show
|
13
|
+
menu = Menu.find(params[:id])
|
14
|
+
|
15
|
+
render locals: { menu: menu }
|
16
|
+
end
|
17
|
+
|
12
18
|
def new
|
13
19
|
render locals: { menu: Menu.new }
|
14
20
|
end
|
15
21
|
|
22
|
+
def edit
|
23
|
+
menu = Menu.find(params[:id])
|
24
|
+
|
25
|
+
render locals: { menu: menu }
|
26
|
+
end
|
27
|
+
|
16
28
|
def create
|
17
29
|
@menu = Menu.new(menu_params)
|
18
30
|
|
@@ -23,18 +35,6 @@ module Katalyst
|
|
23
35
|
end
|
24
36
|
end
|
25
37
|
|
26
|
-
def show
|
27
|
-
menu = Menu.find(params[:id])
|
28
|
-
|
29
|
-
render locals: { menu: menu }
|
30
|
-
end
|
31
|
-
|
32
|
-
def edit
|
33
|
-
menu = Menu.find(params[:id])
|
34
|
-
|
35
|
-
render locals: { menu: menu }
|
36
|
-
end
|
37
|
-
|
38
38
|
# PATCH /admins/navigation_menus/:slug
|
39
39
|
def update
|
40
40
|
menu = Menu.find(params[:id])
|
@@ -42,7 +42,8 @@ module Katalyst
|
|
42
42
|
menu.attributes = menu_params
|
43
43
|
|
44
44
|
unless menu.valid?
|
45
|
-
return render :
|
45
|
+
return render turbo_stream: helpers.navigation_editor_errors(menu: menu),
|
46
|
+
status: :unprocessable_entity
|
46
47
|
end
|
47
48
|
|
48
49
|
case params[:commit]
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Katalyst
|
4
|
+
module Navigation
|
5
|
+
module Editor
|
6
|
+
class Errors < Base
|
7
|
+
def build(**options)
|
8
|
+
turbo_frame_tag dom_id(menu, :errors) do
|
9
|
+
next unless menu.errors.any?
|
10
|
+
|
11
|
+
tag.div(class: "navigation-errors", **options) do
|
12
|
+
tag.h2("Errors in navigation") +
|
13
|
+
tag.ul(class: "errors") do
|
14
|
+
menu.errors.each do |error|
|
15
|
+
concat(tag.li(error.message))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -14,6 +14,7 @@ module Katalyst
|
|
14
14
|
def build(options)
|
15
15
|
form_with(model: menu, **default_options(id: menu_form_id, **options)) do |form|
|
16
16
|
concat hidden_input
|
17
|
+
concat errors
|
17
18
|
concat(capture { yield form })
|
18
19
|
end
|
19
20
|
end
|
@@ -26,6 +27,10 @@ module Katalyst
|
|
26
27
|
tag.input(type: "hidden", name: "#{Item::ATTRIBUTES_SCOPE}[id]")
|
27
28
|
end
|
28
29
|
|
30
|
+
def errors
|
31
|
+
Editor::Errors.new(self, menu).build
|
32
|
+
end
|
33
|
+
|
29
34
|
def default_options(options)
|
30
35
|
add_option(options, :data, :controller, MENU_CONTROLLER)
|
31
36
|
add_option(options, :data, :action, ACTIONS)
|
@@ -25,7 +25,13 @@ module Katalyst
|
|
25
25
|
Editor::List.new(self, menu).items(item)
|
26
26
|
end
|
27
27
|
|
28
|
-
#
|
28
|
+
# Generate a turbo stream fragment that will show structural errors to the user.
|
29
|
+
def navigation_editor_errors(menu:, **options)
|
30
|
+
turbo_stream.replace(dom_id(menu, :errors),
|
31
|
+
Editor::Errors.new(self, menu).build(**options))
|
32
|
+
end
|
33
|
+
|
34
|
+
# Generate a new item template.
|
29
35
|
def navigation_editor_new_item(item:, menu: item.menu, **options, &block)
|
30
36
|
Editor::NewItem.new(self, menu).build(item, **options, &block)
|
31
37
|
end
|
@@ -69,6 +69,11 @@ module Katalyst
|
|
69
69
|
self
|
70
70
|
end
|
71
71
|
|
72
|
+
# Required for testing items validation
|
73
|
+
def items_attributes
|
74
|
+
draft_version&.nodes&.as_json
|
75
|
+
end
|
76
|
+
|
72
77
|
# Updates the current draft version with new structure. Attributes should be structural information about the
|
73
78
|
# items, e.g. `{index => {id:, depth:}` or `[{id:, depth:}]`.
|
74
79
|
#
|
@@ -105,6 +110,8 @@ module Katalyst
|
|
105
110
|
|
106
111
|
attribute :nodes, Types::NodesType.new, default: -> { [] }
|
107
112
|
|
113
|
+
validate :ensure_items_exists
|
114
|
+
|
108
115
|
def items
|
109
116
|
# support building menus in memory
|
110
117
|
# requires that items are added in order and index and depth are set
|
@@ -112,12 +119,18 @@ module Katalyst
|
|
112
119
|
|
113
120
|
items = parent.items.where(id: nodes.map(&:id)).index_by(&:id)
|
114
121
|
nodes.map do |node|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
122
|
+
items[node.id]&.tap do |item|
|
123
|
+
item.index = node.index
|
124
|
+
item.depth = node.depth
|
125
|
+
end
|
119
126
|
end
|
120
127
|
end
|
128
|
+
|
129
|
+
private
|
130
|
+
|
131
|
+
def ensure_items_exists
|
132
|
+
parent.errors.add(:items, :missing_item) unless items.all?(&:present?)
|
133
|
+
end
|
121
134
|
end
|
122
135
|
end
|
123
136
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<div class="tree" data-invisible="<%= !item.visible? %>">
|
3
3
|
<%= builder.accordion_actions %>
|
4
4
|
|
5
|
-
<span role="img" value="<%= item.
|
5
|
+
<span role="img" value="<%= item.model_name.param_key %>" title="Type"></span>
|
6
6
|
<h4 class="title" title="<%= item.title %>"><%= item.title %></h4>
|
7
7
|
<span role="img" value="invisible" title="Hidden"></span>
|
8
8
|
</div>
|
data/config/locales/en.yml
CHANGED
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
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katalyst Interactive
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|
@@ -39,6 +39,7 @@ files:
|
|
39
39
|
- app/controllers/katalyst/navigation/items_controller.rb
|
40
40
|
- app/controllers/katalyst/navigation/menus_controller.rb
|
41
41
|
- app/helpers/katalyst/navigation/editor/base.rb
|
42
|
+
- app/helpers/katalyst/navigation/editor/errors.rb
|
42
43
|
- app/helpers/katalyst/navigation/editor/item.rb
|
43
44
|
- app/helpers/katalyst/navigation/editor/list.rb
|
44
45
|
- app/helpers/katalyst/navigation/editor/menu.rb
|