dsfr-view-components 4.0 → 4.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/components/dsfr_component/side_menu_component/item_component.html.erb +20 -0
- data/app/components/dsfr_component/side_menu_component/item_component.rb +33 -0
- data/app/components/dsfr_component/side_menu_component.html.erb +15 -0
- data/app/components/dsfr_component/side_menu_component.rb +20 -0
- data/app/helpers/dsfr_components_helper.rb +2 -0
- data/lib/dsfr/components/version.rb +1 -1
- data/lib/generators/dsfr_component/templates/component.rb.erb +4 -4
- metadata +14 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1d311caf744ed3223836fc43f8e70b51666992df4c2b2f10f43ac8e302baf115
|
|
4
|
+
data.tar.gz: 7cdd00c96f50f984230622d24a138f2a46375ba5819daefa8e400ef65fb7c93e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0ebe93f69a0cb26daf0bb4900c0c525a2e817cec21c748d8f9ddfa4bf7aa30bfe518b0a4163ae709f7af2a8888b90ea2d7961a71c4f33374f34595538878737d
|
|
7
|
+
data.tar.gz: f8ca4ff1f611861c3f60962a02d24eab0d1461b934fbf6576eaaee1b2b9f90f8a11332836dfadfba7c6fcfbc8d8f858787fb99bcfe3c18a5e4834298471d82d1
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<%= tag.li(class: "fr-sidemenu__item", **html_attributes) do %>
|
|
2
|
+
<% if sub_items.empty? %>
|
|
3
|
+
<% if @current_page %>
|
|
4
|
+
<a href="<%= path %>" class="fr-sidemenu__link" aria-current="page"><%= title %></a>
|
|
5
|
+
<% else %>
|
|
6
|
+
<a href="<%= path %>" class="fr-sidemenu__link"><%= title %></a>
|
|
7
|
+
<% end %>
|
|
8
|
+
<% else %>
|
|
9
|
+
<button type="button" class="fr-sidemenu__btn" aria-expanded="<%= expanded? ? "true" : "false" %>" aria-controls="sidemenu-<%= object_id %>">
|
|
10
|
+
<%= title %>
|
|
11
|
+
</button>
|
|
12
|
+
<div class="fr-collapse<%= " fr-collapse--expanded" if expanded? %>" id="sidemenu-<%= object_id %>">
|
|
13
|
+
<ul class="fr-sidemenu__list">
|
|
14
|
+
<% sub_items.each do |sub_item| %>
|
|
15
|
+
<%= sub_item %>
|
|
16
|
+
<% end %>
|
|
17
|
+
</ul>
|
|
18
|
+
</div>
|
|
19
|
+
<% end %>
|
|
20
|
+
<% end %>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
class DsfrComponent::SideMenuComponent::ItemComponent < DsfrComponent::Base
|
|
2
|
+
MAX_LEVEL = 3
|
|
3
|
+
|
|
4
|
+
renders_many :sub_items, ->(title:, path:, current_page: false, expanded: false, html_attributes: {}) {
|
|
5
|
+
DsfrComponent::SideMenuComponent::ItemComponent.new(title:, path:, current_page:, expanded:, level: @level + 1, html_attributes:)
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
# @param title [String] title of the side menu item
|
|
9
|
+
# @param path [String] path of the side menu item
|
|
10
|
+
# @param current_page [Boolean] active current page style
|
|
11
|
+
# @param expanded [Boolean] toggles sub menu folding
|
|
12
|
+
# @param level [Integer] nesting level (1-3), automatically set for sub_items
|
|
13
|
+
def initialize(title:, path:, current_page: false, expanded: false, level: 1, html_attributes: {})
|
|
14
|
+
raise ArgumentError, "Le menu latéral ne supporte pas plus de #{MAX_LEVEL} niveaux" if level > MAX_LEVEL
|
|
15
|
+
|
|
16
|
+
@title = title
|
|
17
|
+
@path = path
|
|
18
|
+
@current_page = current_page
|
|
19
|
+
@expanded = expanded
|
|
20
|
+
@level = level
|
|
21
|
+
|
|
22
|
+
super(html_attributes: html_attributes)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
|
|
27
|
+
attr_reader :title, :path, :expanded
|
|
28
|
+
alias_method :expanded?, :expanded
|
|
29
|
+
|
|
30
|
+
def default_attributes
|
|
31
|
+
{ class: 'fr-sidemenu__item' }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<%= tag.nav(**html_attributes) do %>
|
|
2
|
+
<div class="fr-sidemenu__inner">
|
|
3
|
+
<button type="button" class="fr-sidemenu__btn" aria-expanded="false" aria-controls="sidemenu-collapse-<%= object_id %>"><%= title %></button>
|
|
4
|
+
<div class="fr-collapse" id="sidemenu-collapse-<%= object_id %>">
|
|
5
|
+
<% if title %>
|
|
6
|
+
<p class="fr-sidemenu__title" id="sidemenu-title-<%= object_id %>"><%= title %></p>
|
|
7
|
+
<% end %>
|
|
8
|
+
<ul class="fr-sidemenu__list">
|
|
9
|
+
<% items.each do |item| %>
|
|
10
|
+
<%= item %>
|
|
11
|
+
<% end %>
|
|
12
|
+
</ul>
|
|
13
|
+
</div>
|
|
14
|
+
</div>
|
|
15
|
+
<% end %>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module DsfrComponent
|
|
2
|
+
class SideMenuComponent < DsfrComponent::Base
|
|
3
|
+
renders_many :items, "DsfrComponent::SideMenuComponent::ItemComponent"
|
|
4
|
+
|
|
5
|
+
# @param title [String] title of the side menu
|
|
6
|
+
def initialize(title:, html_attributes: {})
|
|
7
|
+
@title = title
|
|
8
|
+
|
|
9
|
+
super(html_attributes:)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
private
|
|
13
|
+
|
|
14
|
+
attr_reader :title
|
|
15
|
+
|
|
16
|
+
def default_attributes
|
|
17
|
+
{ class: 'fr-sidemenu', role: 'navigation', "aria-labelledby": "sidemenu-title-#{object_id}" }
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -22,6 +22,8 @@ module DsfrComponentsHelper
|
|
|
22
22
|
dsfr_notice: 'DsfrComponent::NoticeComponent',
|
|
23
23
|
dsfr_search: 'DsfrComponent::SearchComponent',
|
|
24
24
|
dsfr_proconnect_button: 'DsfrComponent::ProconnectButtonComponent',
|
|
25
|
+
dsfr_side_menu: 'DsfrComponent::SideMenuComponent',
|
|
26
|
+
dsfr_side_menu_item: 'DsfrComponent::SideMenuComponent::ItemComponent',
|
|
25
27
|
# DO NOT REMOVE: new component mapping here
|
|
26
28
|
}.freeze
|
|
27
29
|
HELPER_NAME_TO_CLASS_NAME.each do |name, klass|
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
class DsfrComponent::<%= @name %>Component < DsfrComponent::Base
|
|
2
2
|
<% if options[:params].empty? %>
|
|
3
|
-
def initialize(
|
|
4
|
-
super(
|
|
3
|
+
def initialize(html_attributes: {})
|
|
4
|
+
super(html_attributes: html_attributes)
|
|
5
5
|
end
|
|
6
6
|
<% else %>
|
|
7
7
|
<%- options[:params].each do |param, type| -%>
|
|
8
8
|
# @param <%= param %> [<%= type %>] FIXME: document
|
|
9
9
|
<%- end -%>
|
|
10
|
-
def initialize(<%= options[:params].keys.map { |p| "#{p}:" }.join(", ") %>,
|
|
10
|
+
def initialize(<%= options[:params].keys.map { |p| "#{p}:" }.join(", ") %>, html_attributes: {})
|
|
11
11
|
<%- options[:params].keys.each do |param| -%>
|
|
12
12
|
<%= "@#{param} = #{param}" %>
|
|
13
13
|
<%- end -%>
|
|
14
14
|
|
|
15
|
-
super(
|
|
15
|
+
super(html_attributes: html_attributes)
|
|
16
16
|
end
|
|
17
17
|
<% end %>
|
|
18
18
|
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dsfr-view-components
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '4.
|
|
4
|
+
version: '4.1'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- BetaGouv developers
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-01-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: html-attributes-utils
|
|
@@ -42,16 +42,22 @@ dependencies:
|
|
|
42
42
|
name: dsfr-assets
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - "
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: 1.13.2
|
|
48
|
+
- - "<"
|
|
49
|
+
- !ruby/object:Gem::Version
|
|
50
|
+
version: '1.15'
|
|
48
51
|
type: :runtime
|
|
49
52
|
prerelease: false
|
|
50
53
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
54
|
requirements:
|
|
52
|
-
- - "
|
|
55
|
+
- - ">="
|
|
53
56
|
- !ruby/object:Gem::Version
|
|
54
57
|
version: 1.13.2
|
|
58
|
+
- - "<"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '1.15'
|
|
55
61
|
- !ruby/object:Gem::Dependency
|
|
56
62
|
name: deep_merge
|
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -357,6 +363,10 @@ files:
|
|
|
357
363
|
- app/components/dsfr_component/proconnect_button_component.rb
|
|
358
364
|
- app/components/dsfr_component/search_component.html.erb
|
|
359
365
|
- app/components/dsfr_component/search_component.rb
|
|
366
|
+
- app/components/dsfr_component/side_menu_component.html.erb
|
|
367
|
+
- app/components/dsfr_component/side_menu_component.rb
|
|
368
|
+
- app/components/dsfr_component/side_menu_component/item_component.html.erb
|
|
369
|
+
- app/components/dsfr_component/side_menu_component/item_component.rb
|
|
360
370
|
- app/components/dsfr_component/skiplink_component.html.erb
|
|
361
371
|
- app/components/dsfr_component/skiplink_component.rb
|
|
362
372
|
- app/components/dsfr_component/stepper_component.html.erb
|