dsfr-form_builder 0.0.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 +7 -0
- data/lib/dsfr-form_builder.rb +104 -0
- metadata +106 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f78a8ca84967d63fc6f95b3e23ace1f50d1b7c766b384e5581c80b582efad0ce
|
4
|
+
data.tar.gz: ed4c78246f7de17792c50af66a13251d70c888c028aa2a1f7cab74c8e6336268
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 907d5214d6ee90397b97b7be0ee73b3538fecc6043c22a3d1722b3216dc64edcd1f3c91ae6f94dbcb1cd11a8a1b9a13e1f0d56f336d61840b9f1bd4d7b99ecc7
|
7
|
+
data.tar.gz: 8512492bed98876820620cab73bf5a2ec76eb7e49e5d50945bdd7dda8d6c1430e687b2b7ca97f555a922d44a7ab5c7757fef72f5bd22ecb2d939805d74277dd6
|
@@ -0,0 +1,104 @@
|
|
1
|
+
module Dsfr
|
2
|
+
include ActiveSupport::Configurable
|
3
|
+
|
4
|
+
|
5
|
+
class FormBuilder < ActionView::Helpers::FormBuilder
|
6
|
+
include ActionView::Helpers::OutputSafetyHelper
|
7
|
+
|
8
|
+
attr_accessor :display_required_tags
|
9
|
+
|
10
|
+
def initialize(object_name, object, template, options)
|
11
|
+
super
|
12
|
+
self.display_required_tags = options.fetch(:display_required_tags, true)
|
13
|
+
end
|
14
|
+
|
15
|
+
def dsfr_text_field(attribute, opts = {})
|
16
|
+
dsfr_input_field(attribute, :text_field, opts)
|
17
|
+
end
|
18
|
+
|
19
|
+
def dsfr_email_field(attribute, opts = {})
|
20
|
+
dsfr_input_field(attribute, :email_field, opts)
|
21
|
+
end
|
22
|
+
|
23
|
+
def dsfr_url_field(attribute, opts = {})
|
24
|
+
dsfr_input_field(attribute, :url_field, opts)
|
25
|
+
end
|
26
|
+
|
27
|
+
def dsfr_phone_field(attribute, opts = {})
|
28
|
+
dsfr_input_field(attribute, :phone_field, opts)
|
29
|
+
end
|
30
|
+
|
31
|
+
def dsfr_input_group(attribute, opts, &block)
|
32
|
+
@template.content_tag(:div, class: input_group_classes(attribute, opts), data: opts[:data]) do
|
33
|
+
yield(block)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def dsfr_input_field(attribute, input_kind, opts = {})
|
38
|
+
dsfr_input_group(attribute, opts) do
|
39
|
+
@template.safe_join(
|
40
|
+
[
|
41
|
+
dsfr_label_with_hint(attribute, opts),
|
42
|
+
public_send(input_kind, attribute, class: "fr-input", **opts.except(:class)),
|
43
|
+
dsfr_error_message(attribute),
|
44
|
+
]
|
45
|
+
)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def dsfr_label_with_hint(attribute, opts = {})
|
50
|
+
label_class = "fr-label #{opts[:class]}"
|
51
|
+
label(attribute, class: label_class) do
|
52
|
+
label_and_tags = [label_value(attribute, opts)]
|
53
|
+
label_and_tags.push(required_tag) if opts[:required] && display_required_tags
|
54
|
+
label_and_tags.push(hint_tag(opts[:hint])) if opts[:hint]
|
55
|
+
|
56
|
+
@template.safe_join(label_and_tags)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def required_tag
|
61
|
+
@template.content_tag(:span, "*", class: "fr-text-error")
|
62
|
+
end
|
63
|
+
|
64
|
+
def dsfr_error_message(attr)
|
65
|
+
return if @object.errors[attr].none?
|
66
|
+
|
67
|
+
@template.content_tag(:p, class: "fr-messages-group") do
|
68
|
+
safe_join(@object.errors.full_messages_for(attr).map do |msg|
|
69
|
+
@template.content_tag(:span, msg, class: "fr-message fr-message--error")
|
70
|
+
end)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def hint_tag(text)
|
75
|
+
return "" unless text
|
76
|
+
|
77
|
+
@template.content_tag(:span, class: "fr-hint-text") do
|
78
|
+
text
|
79
|
+
end
|
80
|
+
|
81
|
+
@template.content_tag(:span, text, class: "fr-hint-text")
|
82
|
+
end
|
83
|
+
|
84
|
+
def join_classes(arr)
|
85
|
+
arr.compact.join(" ")
|
86
|
+
end
|
87
|
+
|
88
|
+
def input_group_classes(attribute, opts)
|
89
|
+
join_classes(
|
90
|
+
[
|
91
|
+
"fr-input-group",
|
92
|
+
@object.errors[attribute].any? ? "fr-input-group--error" : nil,
|
93
|
+
opts[:class],
|
94
|
+
]
|
95
|
+
)
|
96
|
+
end
|
97
|
+
|
98
|
+
def label_value(attribute, opts)
|
99
|
+
return opts[:label] if opts[:label]
|
100
|
+
|
101
|
+
(@object.try(:object) || @object).class.human_attribute_name(attribute)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dsfr-form_builder
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- BetaGouv developers
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-01-21 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: actionview
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '6.1'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '9.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '6.1'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '9.0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: activemodel
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '6.1'
|
40
|
+
- - "<"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '9.0'
|
43
|
+
type: :runtime
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '6.1'
|
50
|
+
- - "<"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '9.0'
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: activesupport
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '6.1'
|
60
|
+
- - "<"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '9.0'
|
63
|
+
type: :runtime
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '6.1'
|
70
|
+
- - "<"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '9.0'
|
73
|
+
description: Cette librairie de composants vise à simplifier la création de formulaire
|
74
|
+
au DSFR (Système de Design de l'État) dans les applications web utilisant Ruby On
|
75
|
+
Rails
|
76
|
+
email:
|
77
|
+
- antoine.girard@beta.gouv.fr
|
78
|
+
executables: []
|
79
|
+
extensions: []
|
80
|
+
extra_rdoc_files: []
|
81
|
+
files:
|
82
|
+
- lib/dsfr-form_builder.rb
|
83
|
+
homepage: https://github.com/betagouv/dsfr-form-builder
|
84
|
+
licenses:
|
85
|
+
- MIT
|
86
|
+
metadata: {}
|
87
|
+
post_install_message:
|
88
|
+
rdoc_options: []
|
89
|
+
require_paths:
|
90
|
+
- lib
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '3.2'
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
requirements: []
|
102
|
+
rubygems_version: 3.5.13
|
103
|
+
signing_key:
|
104
|
+
specification_version: 4
|
105
|
+
summary: Ruby on Rails form builder pour le Système de Design de l'État (DSFR)
|
106
|
+
test_files: []
|