formstrap 0.2.1 → 0.3.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 +1 -0
- data/app/assets/javascripts/formstrap/controllers/nested_preview_controller.js +167 -0
- data/app/assets/javascripts/formstrap/controllers/preview_controller.js +65 -0
- data/app/assets/javascripts/formstrap/controllers/repeater_controller.js +39 -7
- data/app/assets/javascripts/formstrap/index.js +4 -0
- data/app/assets/javascripts/formstrap.js +199 -7
- data/app/assets/stylesheets/formstrap/shared/nested_preview.scss +31 -0
- data/app/assets/stylesheets/formstrap/shared.scss +1 -0
- data/app/assets/stylesheets/formstrap.css +31 -0
- data/app/views/formstrap/_button.html.erb +0 -0
- data/app/views/formstrap/_repeater.html.erb +40 -22
- data/app/views/formstrap/repeater/_row.html.erb +20 -4
- data/app/views/formstrap/shared/_nested_preview.html.erb +35 -0
- data/config/locales/de.yml +5 -0
- data/config/locales/en.yml +1 -5
- data/config/locales/formstrap/de.yml +48 -0
- data/config/locales/formstrap/en.yml +48 -0
- data/config/locales/formstrap/fr.yml +48 -0
- data/config/locales/formstrap/nl.yml +48 -0
- data/config/locales/fr.yml +5 -0
- data/config/locales/nl.yml +1 -5
- data/lib/formstrap/form_builder.rb +15 -0
- data/lib/formstrap/version.rb +1 -1
- metadata +13 -8
- data/config/locales/formstrap/forms/en.yml +0 -25
- data/config/locales/formstrap/forms/nl.yml +0 -25
- data/config/locales/formstrap/media/en.yml +0 -16
- data/config/locales/formstrap/media/nl.yml +0 -16
- data/config/locales/formstrap/thumbnail/en.yml +0 -4
- data/config/locales/formstrap/thumbnail/nl.yml +0 -4
@@ -1,14 +1,17 @@
|
|
1
1
|
<%
|
2
2
|
# formstrap/repeater
|
3
3
|
#
|
4
|
-
# ====
|
4
|
+
# ==== Required parameters
|
5
5
|
# * +form+ - Form object
|
6
6
|
# * +attribute+ - Name of the attribute of the form model
|
7
|
+
#
|
8
|
+
# ==== Optional parameters
|
7
9
|
# * +header+ - Name of the template to use as header
|
8
10
|
# * +label+ - Text to show as label. Label will be hidden if value is false
|
9
11
|
# * +templates+ - List of all views that can be used as a template for a new block
|
10
12
|
# * +flush+ - Set to true if you want the list items to sit flush with its parent.
|
11
13
|
# * +row+ - Pass hash with options to pass to the row template.
|
14
|
+
# * +preview_url+ - Enables previews of each row. Provide and endpoint capable of rendering a preview for the rows values.
|
12
15
|
#
|
13
16
|
# ==== Examples
|
14
17
|
# # Basic version
|
@@ -28,7 +31,12 @@
|
|
28
31
|
#
|
29
32
|
# # Allow more than one type of fields to be inserted. You must specify the templates as an array of view paths
|
30
33
|
# <% templates = ["admin/questions/fields/type_1", "admin/questions/fields/type_2"] %#>
|
31
|
-
# <% render "formstrap/repeater", form: form, attribute: :questions, templates: templates do |question| %#>
|
34
|
+
# <% render "formstrap/repeater", form: form, attribute: :questions, templates: templates do |question, template_name| %#>
|
35
|
+
# <% render "admin/questions/#{template_name}, form: :question" %#>
|
36
|
+
# <% end %#>
|
37
|
+
#
|
38
|
+
# # Enable previews
|
39
|
+
# <% render "formstrap/repeater", form: form, attribute: :questions, preview_url: admin_preview_question_path do |question| %#>
|
32
40
|
# <% render "admin/questions/fields, form: :question" %#>
|
33
41
|
# <% end %#>
|
34
42
|
|
@@ -37,6 +45,7 @@
|
|
37
45
|
header = local_assigns.has_key?(:header) ? header : nil
|
38
46
|
templates = local_assigns.has_key?(:templates) ? templates : []
|
39
47
|
flush = local_assigns.has_key?(:flush) ? flush : true
|
48
|
+
preview_url = local_assigns.has_key?(:preview_url) ? preview_url : nil
|
40
49
|
row_options = local_assigns.has_key?(:row) ? row : {}
|
41
50
|
|
42
51
|
template_names = templates.map { |template| File.basename(template, ".html.erb") }
|
@@ -46,12 +55,21 @@
|
|
46
55
|
association_object = association_model.new
|
47
56
|
with_positions = association_object.attributes.keys.include?("position")
|
48
57
|
|
49
|
-
# We sort the collection with ruby to prevent a new query to be made that would dispose of nested object in memory
|
50
58
|
associations = form.object.send(attribute)
|
51
|
-
|
59
|
+
|
60
|
+
# We sort the collection with ruby to prevent a new query to be made that would dispose of nested object in memory
|
61
|
+
associations = (with_positions && associations.map(&:position).compact.any?) ? associations.sort_by { |resource| resource.position } : associations
|
62
|
+
|
52
63
|
repeater_id = form.object_id
|
53
64
|
pass_thru = template_names.count == 1 ? "[data-template-name=\"#{template_names.first}\"]" : nil
|
54
65
|
show_label = label != false
|
66
|
+
|
67
|
+
# Override default row options
|
68
|
+
row_options.merge!(
|
69
|
+
preview_url: preview_url,
|
70
|
+
pass_thru: pass_thru,
|
71
|
+
repeater_id: repeater_id,
|
72
|
+
)
|
55
73
|
%>
|
56
74
|
|
57
75
|
<!-- Label -->
|
@@ -70,7 +88,7 @@
|
|
70
88
|
|
71
89
|
<!-- Rows -->
|
72
90
|
<%= form.fields_for attribute, associations do |ff| %>
|
73
|
-
<%= render "formstrap/repeater/row", row_options.merge(
|
91
|
+
<%= render "formstrap/repeater/row", row_options.merge(form: ff, index: ff.index) do %>
|
74
92
|
<%= yield(ff) %>
|
75
93
|
<% end %>
|
76
94
|
<% end %>
|
@@ -85,12 +103,12 @@
|
|
85
103
|
|
86
104
|
<!-- Button -->
|
87
105
|
<div
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
106
|
+
class="btn btn-sm btn-outline-secondary"
|
107
|
+
data-repeater-target="addButton"
|
108
|
+
data-popup-target="button"
|
109
|
+
data-popup-id="<%= "repeater-buttons-#{repeater_id}" %>"
|
110
|
+
data-popup-pass-thru="<%= pass_thru %>"
|
111
|
+
data-action="click->repeater#resetButtonIndices click->popup#open"
|
94
112
|
>
|
95
113
|
<%= bootstrap_icon("plus") %>
|
96
114
|
<%= t(".add", name: association_model.model_name.human) %>
|
@@ -101,12 +119,12 @@
|
|
101
119
|
<div class="d-grid gap-2">
|
102
120
|
<% template_names.each do |name| %>
|
103
121
|
<div
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
122
|
+
class="btn btn-sm btn-outline-secondary"
|
123
|
+
data-popup-target="button"
|
124
|
+
data-popup-id="<%= "repeater-buttons-#{repeater_id}" %>"
|
125
|
+
data-action="click->repeater#addRow click->popup#close"
|
126
|
+
data-row-index=""
|
127
|
+
data-template-name="<%= name %>"
|
110
128
|
>
|
111
129
|
<%= t("blocks.#{name}", default: name).humanize %>
|
112
130
|
</div>
|
@@ -115,11 +133,11 @@
|
|
115
133
|
<% end %>
|
116
134
|
|
117
135
|
<!-- Templates -->
|
118
|
-
<% template_names.each do |
|
119
|
-
<template data-repeater-target="template" data-template-name="<%=
|
120
|
-
<%= form.fields_for attribute, association_object, child_index:
|
121
|
-
<%= render "formstrap/repeater/row", row_options.merge(form: ff, pass_thru: pass_thru, repeater_id: repeater_id) do %>
|
122
|
-
|
136
|
+
<% template_names.each do |template_name| %>
|
137
|
+
<template data-repeater-target="template" data-template-name="<%= template_name %>">
|
138
|
+
<%= form.fields_for attribute, association_object, child_index: "rrrrrrrrr" do |ff| %>
|
139
|
+
<%= render "formstrap/repeater/row", row_options.merge(form: ff, pass_thru: pass_thru, repeater_id: repeater_id, index: nil, template_name: template_name) do %>
|
140
|
+
<%= yield(ff, template_name) %>
|
123
141
|
<% end %>
|
124
142
|
<% end %>
|
125
143
|
</template>
|
@@ -3,16 +3,24 @@
|
|
3
3
|
# accepts block: yes
|
4
4
|
# parameters:
|
5
5
|
# form: Form object
|
6
|
+
# repeater_id: ID of the repeater
|
7
|
+
# index: Index of the row in the repeater
|
6
8
|
# pass_thru: (string) Pass thru for add button if needed
|
9
|
+
# preview_url: (string) URL for previews
|
7
10
|
|
11
|
+
repeater_id = local_assigns[:repeater_id]
|
12
|
+
pass_thru = local_assigns[:pass_thru]
|
8
13
|
draggable = form.object.respond_to?(:position)
|
9
14
|
destroyable = form.object.respond_to?(:destroy)
|
10
|
-
error_class = form.object
|
11
|
-
|
15
|
+
error_class = form.object&.errors&.present? ? "border border-danger" : ""
|
16
|
+
preview_url = local_assigns.has_key?(:preview_url) ? local_assigns[:preview_url] : nil
|
17
|
+
preview = preview_url.present?
|
18
|
+
preview_url = "#{preview_url}?id=#{form.object.id}&name=#{local_assigns[:template_name] || form.object.name}&pp=disabled"
|
19
|
+
class_names = local_assigns.has_key?(:class) ? local_assigns[:class] : "formstrap-repeater-row list-group-item #{'p-0' if preview}"
|
12
20
|
%>
|
13
21
|
<div class="<%= class_names %> <%= error_class %>"
|
14
22
|
data-repeater-target="row"
|
15
|
-
data-row-index="<%=
|
23
|
+
data-row-index="<%= index %>"
|
16
24
|
data-new-record="<%= form.object.new_record? %>"
|
17
25
|
>
|
18
26
|
|
@@ -49,5 +57,13 @@
|
|
49
57
|
<%= bootstrap_icon("dash-circle") %>
|
50
58
|
</div>
|
51
59
|
|
52
|
-
|
60
|
+
<% if preview %>
|
61
|
+
<!-- Wrap row in preview layout -->
|
62
|
+
<%= render layout: "formstrap/shared/nested_preview", locals: { form: form, url: preview_url } do %>
|
63
|
+
<%= yield %>
|
64
|
+
<% end %>
|
65
|
+
<% else %>
|
66
|
+
<!-- Just render row content -->
|
67
|
+
<%= yield %>
|
68
|
+
<% end %>
|
53
69
|
</div>
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<div data-controller="nested-preview" data-nested-preview-url-value="<%= url %>">
|
2
|
+
<!-- Preview placeholder -->
|
3
|
+
<div class="nested-preview-iframe-wrapper position-relative" role="button" data-nested-preview-target="iframeWrapper" data-bs-toggle="offcanvas" data-bs-target="#offcanvas-<%= form.options[:child_index] %>" aria-controls="offcanvasRight" data-turbo-cache="false">
|
4
|
+
<iframe src="<%= url %>" class="pe-none" data-nested-preview-target="iframe"></iframe>
|
5
|
+
<div data-nested-preview-target="loader" class="nested-preview-loader terti">
|
6
|
+
<div class="spinner-grow text-secondary" role="status">
|
7
|
+
<span class="visually-hidden">Loading...</span>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<!-- Preview fields wrapper -->
|
13
|
+
<div class="offcanvas offcanvas-end nested-preview-offcanvas" tabindex="-1" id="offcanvas-<%= form.options[:child_index] %>" aria-labelledby="offcanvasRightLabel" data-nested-preview-target="offcanvas">
|
14
|
+
<div class="offcanvas-header">
|
15
|
+
<h5 class="offcanvas-title" id="offcanvasRightLabel"><%= t('.title', model: form.object.model_name.human) %></h5>
|
16
|
+
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close"></button>
|
17
|
+
</div>
|
18
|
+
<div class="offcanvas-body">
|
19
|
+
|
20
|
+
<div class="alert alert-danger d-none" data-nested-preview-target="error">
|
21
|
+
<% t(".error") %>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<!-- Row content -->
|
25
|
+
<div data-nested-preview-target="fields">
|
26
|
+
<%= yield %>
|
27
|
+
</div>
|
28
|
+
|
29
|
+
<!-- Preview sync button -->
|
30
|
+
<div class="btn btn-primary" data-action="click->nested-preview#update">
|
31
|
+
<%= bootstrap_icon("arrow-repeat") %> <%= t('.button') %>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
</div>
|
35
|
+
</div>
|
data/config/locales/en.yml
CHANGED
@@ -0,0 +1,48 @@
|
|
1
|
+
de:
|
2
|
+
formstrap:
|
3
|
+
file:
|
4
|
+
not_found: Nicht verfügbar
|
5
|
+
placeholder:
|
6
|
+
one: Datei durchsuchen oder hierher ziehen und ablegen
|
7
|
+
other: Dateien durchsuchen oder hierher ziehen und ablegen
|
8
|
+
group:
|
9
|
+
save: Speichern
|
10
|
+
media:
|
11
|
+
modal:
|
12
|
+
close: Schließen
|
13
|
+
limits: "Minimum: %{min} und Maximum: %{max}"
|
14
|
+
maximum: " von %{count}"
|
15
|
+
placeholder: Laden Sie Ihre erste Datei in die Medienbibliothek hoch
|
16
|
+
search: Suche
|
17
|
+
search_no_results: Keine Suchergebnisse gefunden
|
18
|
+
select: Auswählen
|
19
|
+
title:
|
20
|
+
one: Wählen Sie mindestens 1 Datei aus
|
21
|
+
other: Wählen Sie mindestens %{count} Dateien aus
|
22
|
+
unlimited: unbegrenzt
|
23
|
+
upload: Neue Dateien hochladen
|
24
|
+
validation:
|
25
|
+
min:
|
26
|
+
one: Bitte wählen Sie mindestens 1 Element aus
|
27
|
+
other: "Bitte wählen Sie mindestens %{count} Elemente aus"
|
28
|
+
max:
|
29
|
+
one: Bitte beschränken Sie Ihre Auswahl auf maximal 1 Element
|
30
|
+
other: "Bitte beschränken Sie Ihre Auswahl auf maximal %{count} Elemente"
|
31
|
+
pagination:
|
32
|
+
infinite:
|
33
|
+
load_more: Mehr laden
|
34
|
+
repeater:
|
35
|
+
add: "%{name} hinzufügen"
|
36
|
+
empty: Beginnen Sie mit dem Hinzufügen Ihres ersten Blocks
|
37
|
+
row:
|
38
|
+
add: Zeile hinzufügen
|
39
|
+
remove: Zeile entfernen
|
40
|
+
select:
|
41
|
+
blank: Bitte wählen
|
42
|
+
shared:
|
43
|
+
nested_preview:
|
44
|
+
button: Vorschau aktualisieren
|
45
|
+
error: Vorschau konnte nicht geladen werden. Überprüfen Sie alle Felder und versuchen Sie es erneut.
|
46
|
+
title: "%{model} bearbeiten"
|
47
|
+
thumbnail:
|
48
|
+
title: Titel
|
@@ -0,0 +1,48 @@
|
|
1
|
+
en:
|
2
|
+
formstrap:
|
3
|
+
file:
|
4
|
+
not_found: Not available
|
5
|
+
placeholder:
|
6
|
+
one: Browse file or drag & drop it here
|
7
|
+
other: Browse files or drag & drop them here
|
8
|
+
group:
|
9
|
+
save: Save
|
10
|
+
media:
|
11
|
+
modal:
|
12
|
+
close: Close
|
13
|
+
limits: "minimum: %{min} en maximum: %{max}"
|
14
|
+
maximum: " of %{count}"
|
15
|
+
placeholder: Upload your first file to the media library
|
16
|
+
search: Search
|
17
|
+
search_no_results: No search results found
|
18
|
+
select: Select
|
19
|
+
title:
|
20
|
+
one: Select at least 1 file
|
21
|
+
other: Select at least %{count} files
|
22
|
+
unlimited: unlimited
|
23
|
+
upload: Upload new files
|
24
|
+
validation:
|
25
|
+
min:
|
26
|
+
one: Please select at least 1 item
|
27
|
+
other: "Please select at least %{count} items"
|
28
|
+
max:
|
29
|
+
one: Please limit your selection to maximum 1 item
|
30
|
+
other: "Please limit your selection to maximum %{count} items"
|
31
|
+
pagination:
|
32
|
+
infinite:
|
33
|
+
load_more: Load more
|
34
|
+
repeater:
|
35
|
+
add: "Add %{name}"
|
36
|
+
empty: Start by adding your first block
|
37
|
+
row:
|
38
|
+
add: Add row
|
39
|
+
remove: Remove row
|
40
|
+
select:
|
41
|
+
blank: Make a choice
|
42
|
+
shared:
|
43
|
+
nested_preview:
|
44
|
+
button: Update preview
|
45
|
+
error: Unable to load preview. Check all fields and try again.
|
46
|
+
title: "Edit %{model}"
|
47
|
+
thumbnail:
|
48
|
+
title: Title
|
@@ -0,0 +1,48 @@
|
|
1
|
+
fr:
|
2
|
+
formstrap:
|
3
|
+
file:
|
4
|
+
not_found: Indisponible
|
5
|
+
placeholder:
|
6
|
+
one: Parcourir le fichier ou faites glisser et déposez-le ici
|
7
|
+
other: Parcourir les fichiers ou faites les glisser et déposez-les ici
|
8
|
+
group:
|
9
|
+
save: Sauvegarder
|
10
|
+
media:
|
11
|
+
modal:
|
12
|
+
close: Fermer
|
13
|
+
limits: "minimum: %{min} et maximum: %{max}"
|
14
|
+
maximum: " de %{count}"
|
15
|
+
placeholder: Téléchargez votre premier fichier dans la bibliothèque multimédia
|
16
|
+
search: Rechercher
|
17
|
+
search_no_results: Aucun résultat trouvé
|
18
|
+
select: Sélectionner
|
19
|
+
title:
|
20
|
+
one: Sélectionnez au moins 1 fichier
|
21
|
+
other: Sélectionnez au moins %{count} fichiers
|
22
|
+
unlimited: illimité
|
23
|
+
upload: Télécharger de nouveaux fichiers
|
24
|
+
validation:
|
25
|
+
min:
|
26
|
+
one: Veuillez sélectionner au moins 1 élément
|
27
|
+
other: "Veuillez sélectionner au moins %{count} éléments"
|
28
|
+
max:
|
29
|
+
one: Veuillez limiter votre sélection à un maximum de 1 élément
|
30
|
+
other: "Veuillez limiter votre sélection à un maximum de %{count} éléments"
|
31
|
+
pagination:
|
32
|
+
infinite:
|
33
|
+
load_more: Charger plus
|
34
|
+
repeater:
|
35
|
+
add: "Ajouter %{name}"
|
36
|
+
empty: Commencez par ajouter votre premier bloc
|
37
|
+
row:
|
38
|
+
add: Ajouter une ligne
|
39
|
+
remove: Supprimer la ligne
|
40
|
+
select:
|
41
|
+
blank: Faites un choix
|
42
|
+
shared:
|
43
|
+
nested_preview:
|
44
|
+
button: Mettre à jour l'aperçu
|
45
|
+
error: Impossible de charger l'aperçu. Vérifiez tous les champs et réessayez.
|
46
|
+
title: "Modifier %{model}"
|
47
|
+
thumbnail:
|
48
|
+
title: Titre
|
@@ -0,0 +1,48 @@
|
|
1
|
+
nl:
|
2
|
+
formstrap:
|
3
|
+
file:
|
4
|
+
not_found: Niet beschikbaar
|
5
|
+
placeholder:
|
6
|
+
one: Kies bestand of sleep het hierheen
|
7
|
+
other: Kies bestanden of sleep ze hierheen
|
8
|
+
group:
|
9
|
+
save: Opslaan
|
10
|
+
media:
|
11
|
+
modal:
|
12
|
+
close: Sluiten
|
13
|
+
limits: "minimum: %{min} and maximum: %{max}"
|
14
|
+
maximum: " van %{count}"
|
15
|
+
placeholder: Upload je eerste bestand naar de mediabibliotheek
|
16
|
+
search: Zoeken
|
17
|
+
search_no_results: Geen resultaten gevonden
|
18
|
+
select: Selecteer
|
19
|
+
title:
|
20
|
+
one: Selecteer bestand
|
21
|
+
other: Selecteer bestanden
|
22
|
+
unlimited: onbeperkt
|
23
|
+
upload: Nieuwe bestanden uploaden
|
24
|
+
validation:
|
25
|
+
min:
|
26
|
+
one: Gelieve minstens 1 item te selecteren
|
27
|
+
other: "Gelieve minstens %{count} items te selecteren"
|
28
|
+
max:
|
29
|
+
one: Gelieve maximum 1 item te selecteren
|
30
|
+
other: "Gelieve maximum %{count} items te selecteren"
|
31
|
+
pagination:
|
32
|
+
infinite:
|
33
|
+
load_more: Laad meer
|
34
|
+
repeater:
|
35
|
+
add: "%{name} toevoegen"
|
36
|
+
empty: Voeg je eerste rij toe om te beginnen
|
37
|
+
row:
|
38
|
+
add: Rij toevoegen
|
39
|
+
remove: Rij verwijderen
|
40
|
+
select:
|
41
|
+
blank: Maak een keuze
|
42
|
+
shared:
|
43
|
+
nested_preview:
|
44
|
+
button: Voorvertoning bijwerken
|
45
|
+
error: Er kon geen voorvertoning worden geladen. Kijk alle velden na en probeer het opnieuw.
|
46
|
+
title: "%{model} bewerken"
|
47
|
+
thumbnail:
|
48
|
+
title: Titel
|
data/config/locales/nl.yml
CHANGED
@@ -11,6 +11,17 @@ module Formstrap
|
|
11
11
|
render_input(:association, attribute, options)
|
12
12
|
end
|
13
13
|
|
14
|
+
def preview_button(value = nil, options = {}, &block)
|
15
|
+
default_options = {
|
16
|
+
data: {
|
17
|
+
controller: "preview",
|
18
|
+
"preview-url-value": options[:url]
|
19
|
+
},
|
20
|
+
type: nil
|
21
|
+
}
|
22
|
+
button value, default_options.deep_merge(options.except(:url)), &block
|
23
|
+
end
|
24
|
+
|
14
25
|
def checkbox(attribute, formstrap: true, **options)
|
15
26
|
if formstrap
|
16
27
|
render_input :checkbox, attribute, options
|
@@ -103,6 +114,10 @@ module Formstrap
|
|
103
114
|
end
|
104
115
|
end
|
105
116
|
|
117
|
+
def repeater_for(attribute, options = {}, &block)
|
118
|
+
@template.render("formstrap/repeater", form: self, attribute: attribute, **options, &block)
|
119
|
+
end
|
120
|
+
|
106
121
|
def redactorx(attribute, options = {})
|
107
122
|
render_input(:redactorx, attribute, options)
|
108
123
|
end
|
data/lib/formstrap/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: formstrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jef Vlamings
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: An extensive Bootstrap form library to power your Ruby On Rails application.
|
14
14
|
email:
|
@@ -44,7 +44,9 @@ files:
|
|
44
44
|
- app/assets/javascripts/formstrap/controllers/infinite_scroller_controller.js
|
45
45
|
- app/assets/javascripts/formstrap/controllers/media_controller.js
|
46
46
|
- app/assets/javascripts/formstrap/controllers/media_modal_controller.js
|
47
|
+
- app/assets/javascripts/formstrap/controllers/nested_preview_controller.js
|
47
48
|
- app/assets/javascripts/formstrap/controllers/popup_controller.js
|
49
|
+
- app/assets/javascripts/formstrap/controllers/preview_controller.js
|
48
50
|
- app/assets/javascripts/formstrap/controllers/redactorx_controller.js
|
49
51
|
- app/assets/javascripts/formstrap/controllers/repeater_controller.js
|
50
52
|
- app/assets/javascripts/formstrap/controllers/select_controller.js
|
@@ -61,6 +63,7 @@ files:
|
|
61
63
|
- app/assets/stylesheets/formstrap/repeater.scss
|
62
64
|
- app/assets/stylesheets/formstrap/search.scss
|
63
65
|
- app/assets/stylesheets/formstrap/shared.scss
|
66
|
+
- app/assets/stylesheets/formstrap/shared/nested_preview.scss
|
64
67
|
- app/assets/stylesheets/formstrap/shared/popup.scss
|
65
68
|
- app/assets/stylesheets/formstrap/shared/thumbnail.scss
|
66
69
|
- app/assets/stylesheets/formstrap/utilities.scss
|
@@ -114,6 +117,7 @@ files:
|
|
114
117
|
- app/models/view_model.rb
|
115
118
|
- app/views/formstrap/_association.html.erb
|
116
119
|
- app/views/formstrap/_autocomplete.html.erb
|
120
|
+
- app/views/formstrap/_button.html.erb
|
117
121
|
- app/views/formstrap/_checkbox.html.erb
|
118
122
|
- app/views/formstrap/_color.html.erb
|
119
123
|
- app/views/formstrap/_datalist.html.erb
|
@@ -156,19 +160,20 @@ files:
|
|
156
160
|
- app/views/formstrap/media/thumbnail.html.erb
|
157
161
|
- app/views/formstrap/pagination/_infinite.html.erb
|
158
162
|
- app/views/formstrap/repeater/_row.html.erb
|
163
|
+
- app/views/formstrap/shared/_nested_preview.html.erb
|
159
164
|
- app/views/formstrap/shared/_notifications.html.erb
|
160
165
|
- app/views/formstrap/shared/_popup.html.erb
|
161
166
|
- app/views/formstrap/shared/_thumbnail.html.erb
|
162
167
|
- bin/console
|
163
168
|
- bin/setup
|
164
169
|
- config/importmap.rb
|
170
|
+
- config/locales/de.yml
|
165
171
|
- config/locales/en.yml
|
166
|
-
- config/locales/formstrap/
|
167
|
-
- config/locales/formstrap/
|
168
|
-
- config/locales/formstrap/
|
169
|
-
- config/locales/formstrap/
|
170
|
-
- config/locales/
|
171
|
-
- config/locales/formstrap/thumbnail/nl.yml
|
172
|
+
- config/locales/formstrap/de.yml
|
173
|
+
- config/locales/formstrap/en.yml
|
174
|
+
- config/locales/formstrap/fr.yml
|
175
|
+
- config/locales/formstrap/nl.yml
|
176
|
+
- config/locales/fr.yml
|
172
177
|
- config/locales/nl.yml
|
173
178
|
- config/routes.rb
|
174
179
|
- esbuild-css.js
|
@@ -1,25 +0,0 @@
|
|
1
|
-
en:
|
2
|
-
formstrap:
|
3
|
-
file:
|
4
|
-
not_found: Not available
|
5
|
-
placeholder:
|
6
|
-
one: Browse file or drag & drop it here
|
7
|
-
other: Browse files or drag & drop them here
|
8
|
-
group:
|
9
|
-
save: Save
|
10
|
-
media:
|
11
|
-
validation:
|
12
|
-
min:
|
13
|
-
one: Please select at least 1 item
|
14
|
-
other: "Please select at least %{count} items"
|
15
|
-
max:
|
16
|
-
one: Please limit your selection to maximum 1 item
|
17
|
-
other: "Please limit your selection to maximum %{count} items"
|
18
|
-
select:
|
19
|
-
blank: Make a choice
|
20
|
-
repeater:
|
21
|
-
add: "Add %{name}"
|
22
|
-
empty: Start by adding your first block
|
23
|
-
row:
|
24
|
-
add: Add row
|
25
|
-
remove: Remove row
|
@@ -1,25 +0,0 @@
|
|
1
|
-
nl:
|
2
|
-
formstrap:
|
3
|
-
file:
|
4
|
-
not_found: Niet beschikbaar
|
5
|
-
placeholder:
|
6
|
-
one: Kies bestand of sleep het hierheen
|
7
|
-
other: Kies bestanden of sleep ze hierheen
|
8
|
-
group:
|
9
|
-
save: Opslaan
|
10
|
-
media:
|
11
|
-
validation:
|
12
|
-
min:
|
13
|
-
one: Gelieve minstens 1 item te selecteren
|
14
|
-
other: "Gelieve minstens %{count} items te selecteren"
|
15
|
-
max:
|
16
|
-
one: Gelieve maximum 1 item te selecteren
|
17
|
-
other: "Gelieve maximum %{count} items te selecteren"
|
18
|
-
select:
|
19
|
-
blank: Maak een keuze
|
20
|
-
repeater:
|
21
|
-
add: "%{name} toevoegen"
|
22
|
-
empty: Voeg je eerste rij toe om te beginnen
|
23
|
-
row:
|
24
|
-
add: Rij toevoegen
|
25
|
-
remove: Rij verwijderen
|
@@ -1,16 +0,0 @@
|
|
1
|
-
en:
|
2
|
-
formstrap:
|
3
|
-
media:
|
4
|
-
modal:
|
5
|
-
close: Close
|
6
|
-
limits: "minimum: %{min} en maximum: %{max}"
|
7
|
-
maximum: " of %{count}"
|
8
|
-
placeholder: Upload your first file to the media library
|
9
|
-
search: Search
|
10
|
-
search_no_results: No search results found
|
11
|
-
select: Select
|
12
|
-
title:
|
13
|
-
one: Select at least 1 file
|
14
|
-
other: Select at least %{count} files
|
15
|
-
unlimited: unlimited
|
16
|
-
upload: Upload new files
|
@@ -1,16 +0,0 @@
|
|
1
|
-
nl:
|
2
|
-
formstrap:
|
3
|
-
media:
|
4
|
-
modal:
|
5
|
-
close: Sluiten
|
6
|
-
limits: "minimum: %{min} and maximum: %{max}"
|
7
|
-
maximum: " van %{count}"
|
8
|
-
placeholder: Upload je eerste bestand naar de mediabibliotheek
|
9
|
-
search: Zoeken
|
10
|
-
search_no_results: Geen resultaten gevonden
|
11
|
-
select: Selecteer
|
12
|
-
title:
|
13
|
-
one: Selecteer bestand
|
14
|
-
other: Selecteer bestanden
|
15
|
-
unlimited: onbeperkt
|
16
|
-
upload: Nieuwe bestanden uploaden
|