dsfr-view-components 4.1.3 → 5.0.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/README.md +3 -17
- data/app/components/dsfr_component/base.rb +1 -1
- data/app/components/dsfr_component/card_component.html.erb +43 -0
- data/app/components/dsfr_component/card_component.rb +79 -0
- data/app/components/dsfr_component/tile_component.html.erb +7 -0
- data/app/components/dsfr_component/tile_component.rb +6 -0
- data/app/helpers/dsfr_components_helper.rb +1 -0
- data/lib/dsfr/components/version.rb +1 -1
- metadata +28 -29
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 02b516513b253dd53b123c414a4b08ae91c4a5c51ea8633843bec5f9605cfdc4
|
|
4
|
+
data.tar.gz: 9f45ba667ec0f130097de1d2c2fc14f4bbdda018e3ebef3eb3fb8f786cff2cfa
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 60c971316b5d90cd567a7e7ae7c296d644227d9b85601847a59b13c25dee4a3c0e12af5239a6c8384d7fbf58df993134c9af6648bb9533adaa648a45010b5c0b
|
|
7
|
+
data.tar.gz: c617ade15d0eb93211488799cd38963e7cecd349d2779bade57565644c59d94fc6ee9cd9d58acdc32d34be6d39ee3fa678c0ea6bfcab9cc6d512916e6918b8b9
|
data/README.md
CHANGED
|
@@ -4,15 +4,14 @@
|
|
|
4
4
|
[](https://badge.fury.io/rb/dsfr-view-components)
|
|
5
5
|
[](https://rubygems.org/gems/dsfr-view-components)
|
|
6
6
|
[](https://github.com/betagouv/dsfr-view-components/blob/main/LICENSE)
|
|
7
|
-
[](https://weblog.rubyonrails.org/releases/)
|
|
8
|
-
[](https://www.ruby-lang.org/en/downloads/)
|
|
9
|
-
|
|
10
7
|
[](https://www.systeme-de-design.gouv.fr/)
|
|
11
8
|
|
|
12
9
|
Cette gem fournit des composants pour le Design Système de l'État (DSFR) en s'appuyant sur le [framework ViewComponent](https://github.com/ViewComponent/view_component).
|
|
13
10
|
|
|
14
11
|
C'est un fork de [govuk-components](https://github.com/DFE-Digital/govuk-components) qui propose l'équivalent pour le GOV.UK Design System.
|
|
15
12
|
|
|
13
|
+
Elle fonctionne avec Ruby 3.4+ et Rails 8+.
|
|
14
|
+
|
|
16
15
|
## Documentation
|
|
17
16
|
|
|
18
17
|
Un [guide complet est disponible](https://betagouv.github.io/dsfr-view-components/). Il contient des instructions pour l'installation et l'usage de cette gem. Les exemples présents éxecutent le code et seront donc toujours à jour.
|
|
@@ -33,25 +32,12 @@ Cette gem a pour but de supporter tous les composants proposés par le Design Sy
|
|
|
33
32
|
|
|
34
33
|
La [liste des composants implémentés ou restants est consultable grâce au label `composant`](https://github.com/betagouv/dsfr-view-components/issues?page=2&q=is%3Aissue+label%3Acomposant) sur ce même dépôt.
|
|
35
34
|
|
|
36
|
-
<!--
|
|
37
|
-
This library also provides helpers for creating [links](https://govuk-components.netlify.app/helpers/link),
|
|
38
|
-
[buttons](https://govuk-components.netlify.app/helpers/button), [skip links](https://govuk-components.netlify.app/helpers/skip-link)
|
|
39
|
-
and [back to top links](https://govuk-components.netlify.app/helpers/back-to-top-link).
|
|
40
|
-
-->
|
|
41
|
-
|
|
42
35
|
## Services utilisant cette gem
|
|
43
36
|
|
|
44
|
-
|
|
37
|
+
https://github.com/betagouv/dsfr-view-components/network/dependents
|
|
45
38
|
|
|
46
39
|
## Contribuer
|
|
47
40
|
|
|
48
|
-
Nous conseillons d'utiliser [rbenv](https://github.com/rbenv/rbenv) pour gérer vos versions de ruby :
|
|
49
|
-
|
|
50
|
-
```sh
|
|
51
|
-
rbenv local 3.3.6
|
|
52
|
-
rbenv install
|
|
53
|
-
```
|
|
54
|
-
|
|
55
41
|
Lancer les tests :
|
|
56
42
|
|
|
57
43
|
```sh
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<%= tag.div(**html_attributes) do %>
|
|
2
|
+
<div class="fr-card__body">
|
|
3
|
+
<div class="fr-card__content">
|
|
4
|
+
<%= title_tag(class: "fr-card__title") do %>
|
|
5
|
+
<a class="fr-card__link" href="<%= url %>"><%= title %></a>
|
|
6
|
+
<% end %>
|
|
7
|
+
<% if description.present? %>
|
|
8
|
+
<p class="fr-card__desc"><%= description %></p>
|
|
9
|
+
<% end %>
|
|
10
|
+
<% if start_detail.present? %>
|
|
11
|
+
<div class="fr-card__start">
|
|
12
|
+
<p class="<%= start_detail_classes %>"><%= start_detail %></p>
|
|
13
|
+
</div>
|
|
14
|
+
<% end %>
|
|
15
|
+
<% if end_detail.present? %>
|
|
16
|
+
<div class="fr-card__end">
|
|
17
|
+
<p class="<%= end_detail_classes %>"><%= end_detail %></p>
|
|
18
|
+
</div>
|
|
19
|
+
<% end %>
|
|
20
|
+
</div>
|
|
21
|
+
<% if footer? %>
|
|
22
|
+
<div class="fr-card__footer">
|
|
23
|
+
<%= footer %>
|
|
24
|
+
</div>
|
|
25
|
+
<% end %>
|
|
26
|
+
</div>
|
|
27
|
+
<% if image_src.present? || badges.any? %>
|
|
28
|
+
<div class="fr-card__header">
|
|
29
|
+
<% if image_src.present? %>
|
|
30
|
+
<div class="fr-card__img">
|
|
31
|
+
<img class="fr-responsive-img" src="<%= image_src %>" alt="<%= image_alt %>">
|
|
32
|
+
</div>
|
|
33
|
+
<% end %>
|
|
34
|
+
<% if badges.any? %>
|
|
35
|
+
<ul class="fr-badges-group">
|
|
36
|
+
<% badges.each do |badge| %>
|
|
37
|
+
<li><%= badge %></li>
|
|
38
|
+
<% end %>
|
|
39
|
+
</ul>
|
|
40
|
+
<% end %>
|
|
41
|
+
</div>
|
|
42
|
+
<% end %>
|
|
43
|
+
<% end %>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
module DsfrComponent
|
|
2
|
+
class CardComponent < DsfrComponent::Base
|
|
3
|
+
SIZES = %i[sm lg].freeze
|
|
4
|
+
HORIZONTAL_RATIOS = [true, :half, :tier].freeze
|
|
5
|
+
|
|
6
|
+
renders_many :badges, "DsfrComponent::BadgeComponent"
|
|
7
|
+
renders_one :footer
|
|
8
|
+
|
|
9
|
+
def initialize(
|
|
10
|
+
title:,
|
|
11
|
+
url:,
|
|
12
|
+
description: nil,
|
|
13
|
+
image_src: nil,
|
|
14
|
+
image_alt: "",
|
|
15
|
+
heading_level: 3,
|
|
16
|
+
size: nil,
|
|
17
|
+
horizontal: false,
|
|
18
|
+
start_detail: nil,
|
|
19
|
+
start_detail_icon: nil,
|
|
20
|
+
end_detail: nil,
|
|
21
|
+
end_detail_icon: nil,
|
|
22
|
+
enlarge_link: true,
|
|
23
|
+
html_attributes: {}
|
|
24
|
+
)
|
|
25
|
+
raise ArgumentError, "`size` should be one of #{SIZES}" if size && SIZES.exclude?(size)
|
|
26
|
+
raise ArgumentError, "`heading_level` should be one of #{HEADING_LEVELS}" if HEADING_LEVELS.exclude?(heading_level)
|
|
27
|
+
raise ArgumentError, "`horizontal` should be one of #{[false] + HORIZONTAL_RATIOS}" if horizontal != false && HORIZONTAL_RATIOS.exclude?(horizontal)
|
|
28
|
+
|
|
29
|
+
@title = title
|
|
30
|
+
@url = url
|
|
31
|
+
@description = description
|
|
32
|
+
@image_src = image_src
|
|
33
|
+
@image_alt = image_alt
|
|
34
|
+
@heading_level = heading_level
|
|
35
|
+
@size = size
|
|
36
|
+
@horizontal = horizontal
|
|
37
|
+
@start_detail = start_detail
|
|
38
|
+
@start_detail_icon = start_detail_icon
|
|
39
|
+
@end_detail = end_detail
|
|
40
|
+
@end_detail_icon = end_detail_icon
|
|
41
|
+
@enlarge_link = enlarge_link
|
|
42
|
+
|
|
43
|
+
super(html_attributes: html_attributes)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# this guard is set at render-time because we cannot make the
|
|
47
|
+
# footer-slot distinction in the constructor
|
|
48
|
+
def before_render
|
|
49
|
+
raise ArgumentError, "You cannot setup a footer on a card with `enlarge_link: true`" if footer? && enlarge_link
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
private
|
|
53
|
+
|
|
54
|
+
attr_reader :title, :url, :description, :image_src, :image_alt,
|
|
55
|
+
:heading_level, :size, :horizontal, :start_detail, :start_detail_icon,
|
|
56
|
+
:end_detail, :end_detail_icon, :enlarge_link
|
|
57
|
+
|
|
58
|
+
def default_attributes
|
|
59
|
+
classes = ["fr-card"]
|
|
60
|
+
classes << "fr-enlarge-link" if enlarge_link
|
|
61
|
+
classes << "fr-card--horizontal" if horizontal
|
|
62
|
+
classes << "fr-card--horizontal-#{horizontal}" if horizontal.is_a?(Symbol)
|
|
63
|
+
classes << "fr-card--#{size}" if size
|
|
64
|
+
{ class: classes }
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def title_tag(*args, **kwargs, &block)
|
|
68
|
+
content_tag("h#{heading_level}", *args, **kwargs, &block)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def start_detail_classes
|
|
72
|
+
["fr-card__detail", start_detail_icon && "fr-icon-#{start_detail_icon}"].compact.join(" ")
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def end_detail_classes
|
|
76
|
+
["fr-card__detail", end_detail_icon && "fr-icon-#{end_detail_icon}"].compact.join(" ")
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
<%= tag.div(**html_attributes) do %>
|
|
2
2
|
<div class="fr-tile__body">
|
|
3
3
|
<div class="fr-tile__content">
|
|
4
|
+
<% if badges.any? %>
|
|
5
|
+
<div class="fr-tile__start">
|
|
6
|
+
<% badges.each do |badge| %>
|
|
7
|
+
<%= badge %>
|
|
8
|
+
<% end %>
|
|
9
|
+
</div>
|
|
10
|
+
<% end %>
|
|
4
11
|
<%= title_tag(class: "fr-tile__title") do %>
|
|
5
12
|
<a class="fr-tile__link" href="<%= url %>">
|
|
6
13
|
<%= title %>
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
module DsfrComponent
|
|
2
2
|
class TileComponent < DsfrComponent::Base
|
|
3
|
+
renders_many :badges, "DsfrComponent::BadgeComponent"
|
|
4
|
+
|
|
3
5
|
# @param title [String] title (required)
|
|
4
6
|
# @param url [String] url (required)
|
|
5
7
|
# @param image_src [String] chemin vers l'image (optional)
|
|
@@ -21,6 +23,10 @@ module DsfrComponent
|
|
|
21
23
|
super(html_attributes: html_attributes)
|
|
22
24
|
end
|
|
23
25
|
|
|
26
|
+
def before_render
|
|
27
|
+
raise ArgumentError, "TileComponent accepte au maximum 4 badges (#{badges.size} fournis)" if badges.size > 4
|
|
28
|
+
end
|
|
29
|
+
|
|
24
30
|
private
|
|
25
31
|
|
|
26
32
|
attr_reader :title, :url, :image_src, :image_alt, :description, :orientation, :heading_level
|
|
@@ -24,6 +24,7 @@ module DsfrComponentsHelper
|
|
|
24
24
|
dsfr_proconnect_button: 'DsfrComponent::ProconnectButtonComponent',
|
|
25
25
|
dsfr_side_menu: 'DsfrComponent::SideMenuComponent',
|
|
26
26
|
dsfr_side_menu_item: 'DsfrComponent::SideMenuComponent::ItemComponent',
|
|
27
|
+
dsfr_card: 'DsfrComponent::CardComponent',
|
|
27
28
|
# DO NOT REMOVE: new component mapping here
|
|
28
29
|
}.freeze
|
|
29
30
|
HELPER_NAME_TO_CLASS_NAME.each do |name, klass|
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dsfr-view-components
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 5.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- BetaGouv developers
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: html-attributes-utils
|
|
@@ -30,14 +29,14 @@ dependencies:
|
|
|
30
29
|
requirements:
|
|
31
30
|
- - "~>"
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
32
|
+
version: '4'
|
|
34
33
|
type: :runtime
|
|
35
34
|
prerelease: false
|
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
36
|
requirements:
|
|
38
37
|
- - "~>"
|
|
39
38
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
39
|
+
version: '4'
|
|
41
40
|
- !ruby/object:Gem::Dependency
|
|
42
41
|
name: dsfr-assets
|
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -216,16 +215,16 @@ dependencies:
|
|
|
216
215
|
name: haml
|
|
217
216
|
requirement: !ruby/object:Gem::Requirement
|
|
218
217
|
requirements:
|
|
219
|
-
- - "
|
|
218
|
+
- - ">="
|
|
220
219
|
- !ruby/object:Gem::Version
|
|
221
|
-
version:
|
|
220
|
+
version: '0'
|
|
222
221
|
type: :development
|
|
223
222
|
prerelease: false
|
|
224
223
|
version_requirements: !ruby/object:Gem::Requirement
|
|
225
224
|
requirements:
|
|
226
|
-
- - "
|
|
225
|
+
- - ">="
|
|
227
226
|
- !ruby/object:Gem::Version
|
|
228
|
-
version:
|
|
227
|
+
version: '0'
|
|
229
228
|
- !ruby/object:Gem::Dependency
|
|
230
229
|
name: haml_lint
|
|
231
230
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -258,44 +257,44 @@ dependencies:
|
|
|
258
257
|
name: kramdown
|
|
259
258
|
requirement: !ruby/object:Gem::Requirement
|
|
260
259
|
requirements:
|
|
261
|
-
- - "
|
|
260
|
+
- - ">="
|
|
262
261
|
- !ruby/object:Gem::Version
|
|
263
|
-
version:
|
|
262
|
+
version: '0'
|
|
264
263
|
type: :development
|
|
265
264
|
prerelease: false
|
|
266
265
|
version_requirements: !ruby/object:Gem::Requirement
|
|
267
266
|
requirements:
|
|
268
|
-
- - "
|
|
267
|
+
- - ">="
|
|
269
268
|
- !ruby/object:Gem::Version
|
|
270
|
-
version:
|
|
269
|
+
version: '0'
|
|
271
270
|
- !ruby/object:Gem::Dependency
|
|
272
271
|
name: nanoc
|
|
273
272
|
requirement: !ruby/object:Gem::Requirement
|
|
274
273
|
requirements:
|
|
275
|
-
- - "
|
|
274
|
+
- - ">="
|
|
276
275
|
- !ruby/object:Gem::Version
|
|
277
|
-
version: '
|
|
276
|
+
version: '0'
|
|
278
277
|
type: :development
|
|
279
278
|
prerelease: false
|
|
280
279
|
version_requirements: !ruby/object:Gem::Requirement
|
|
281
280
|
requirements:
|
|
282
|
-
- - "
|
|
281
|
+
- - ">="
|
|
283
282
|
- !ruby/object:Gem::Version
|
|
284
|
-
version: '
|
|
283
|
+
version: '0'
|
|
285
284
|
- !ruby/object:Gem::Dependency
|
|
286
285
|
name: rouge
|
|
287
286
|
requirement: !ruby/object:Gem::Requirement
|
|
288
287
|
requirements:
|
|
289
|
-
- - "
|
|
288
|
+
- - ">="
|
|
290
289
|
- !ruby/object:Gem::Version
|
|
291
|
-
version:
|
|
290
|
+
version: '0'
|
|
292
291
|
type: :development
|
|
293
292
|
prerelease: false
|
|
294
293
|
version_requirements: !ruby/object:Gem::Requirement
|
|
295
294
|
requirements:
|
|
296
|
-
- - "
|
|
295
|
+
- - ">="
|
|
297
296
|
- !ruby/object:Gem::Version
|
|
298
|
-
version:
|
|
297
|
+
version: '0'
|
|
299
298
|
- !ruby/object:Gem::Dependency
|
|
300
299
|
name: rubypants
|
|
301
300
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -314,16 +313,16 @@ dependencies:
|
|
|
314
313
|
name: webrick
|
|
315
314
|
requirement: !ruby/object:Gem::Requirement
|
|
316
315
|
requirements:
|
|
317
|
-
- - "
|
|
316
|
+
- - ">="
|
|
318
317
|
- !ruby/object:Gem::Version
|
|
319
|
-
version:
|
|
318
|
+
version: '0'
|
|
320
319
|
type: :development
|
|
321
320
|
prerelease: false
|
|
322
321
|
version_requirements: !ruby/object:Gem::Requirement
|
|
323
322
|
requirements:
|
|
324
|
-
- - "
|
|
323
|
+
- - ">="
|
|
325
324
|
- !ruby/object:Gem::Version
|
|
326
|
-
version:
|
|
325
|
+
version: '0'
|
|
327
326
|
description: Cette librairie de composants vise à simplifier l’usage du DSFR (Système
|
|
328
327
|
de Design de l'État) dans les applications web utilisant Ruby On Rails
|
|
329
328
|
email:
|
|
@@ -348,6 +347,8 @@ files:
|
|
|
348
347
|
- app/components/dsfr_component/breadcrumbs_component.rb
|
|
349
348
|
- app/components/dsfr_component/button_component.rb
|
|
350
349
|
- app/components/dsfr_component/callout_component.rb
|
|
350
|
+
- app/components/dsfr_component/card_component.html.erb
|
|
351
|
+
- app/components/dsfr_component/card_component.rb
|
|
351
352
|
- app/components/dsfr_component/header_component.html.erb
|
|
352
353
|
- app/components/dsfr_component/header_component.rb
|
|
353
354
|
- app/components/dsfr_component/header_component/direct_link_component.rb
|
|
@@ -405,7 +406,6 @@ metadata:
|
|
|
405
406
|
homepage_uri: https://github.com/betagouv/dsfr-view-components
|
|
406
407
|
source_code_uri: https://github.com/betagouv/dsfr-view-components
|
|
407
408
|
rubygems_mfa_required: 'true'
|
|
408
|
-
post_install_message:
|
|
409
409
|
rdoc_options: []
|
|
410
410
|
require_paths:
|
|
411
411
|
- lib
|
|
@@ -413,15 +413,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
413
413
|
requirements:
|
|
414
414
|
- - ">="
|
|
415
415
|
- !ruby/object:Gem::Version
|
|
416
|
-
version: '3.
|
|
416
|
+
version: '3.4'
|
|
417
417
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
418
418
|
requirements:
|
|
419
419
|
- - ">="
|
|
420
420
|
- !ruby/object:Gem::Version
|
|
421
421
|
version: '0'
|
|
422
422
|
requirements: []
|
|
423
|
-
rubygems_version: 3.
|
|
424
|
-
signing_key:
|
|
423
|
+
rubygems_version: 3.6.9
|
|
425
424
|
specification_version: 4
|
|
426
425
|
summary: Composants ViewComponent pour le Système de Design de l'État (DSFR)
|
|
427
426
|
test_files: []
|