tybo 0.1.2 → 0.2.2
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/input/datetime_component.html.erb +6 -0
- data/app/components/input/datetime_component.rb +16 -0
- data/app/components/input/file_component.rb +1 -1
- data/app/views/shared/_pagination.html.erb +44 -33
- data/lib/generators/bo/templates/_form.html.erb +7 -3
- data/lib/generators/bo/templates/item.html.erb +15 -13
- data/lib/generators/bo/utils/files/fr.json +4 -1
- data/lib/generators/bo/utils/translations.rb +0 -29
- data/lib/generators/tybo_install/templates/tailwind.config.js +1 -1
- data/lib/generators/tybo_install/utils/files/en.json +4 -1
- data/lib/generators/tybo_install/utils/files/fr.json +4 -1
- data/lib/generators/tybo_install/utils/translations.rb +7 -0
- data/lib/tybo/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 99b6c52df41ad55c9a50c8f5e76dbcdf18972f4a417360ac5902f3cb203842ad
|
4
|
+
data.tar.gz: f4f9ef0ee8f3029e925b5158714b44776ac4d7ff6234fcf9328652640c137e04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 42012ad58801a47d31b21905d1036b55dee575ca37f4540cb34dfb8080b004499b5da05d096ab72e5b685c3db847f3dc068991a26a23dd06bd098a045badbdcc
|
7
|
+
data.tar.gz: c163a4ddb426ffcc1f886289222a78990f08adb3b2db512b35385a2c58c9b8cb73faf3a69fc478e8e14b730a5b469182c143073f06a4083622626ae81e2b9fe4
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<div class="my-5">
|
2
|
+
<label class="block text-sm font-medium text-gray-700 string required text-sm font-medium text-gray-600">
|
3
|
+
<%= @label %>
|
4
|
+
</label>
|
5
|
+
<%= @form.datetime_field @field, class: "mt-1 block border border-gray-300 rounded-md shadow-sm py-2 px-3 focus:outline-none focus:ring-tybo-500 focus:border-tybo-500 sm:text-sm string required" %>
|
6
|
+
</div>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Input
|
4
|
+
class DatetimeComponent < ViewComponent::Base
|
5
|
+
def initialize(item:, field:, form:)
|
6
|
+
@item = item
|
7
|
+
@field = field
|
8
|
+
@form = form
|
9
|
+
@label = label
|
10
|
+
end
|
11
|
+
|
12
|
+
def label
|
13
|
+
I18n.t("bo.#{@item.class.name.underscore}.attributes.#{@field}")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,34 +1,45 @@
|
|
1
|
-
<%
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
<% if pagy.next || pagy.prev %>
|
2
|
+
<% link = pagy_link_proc(pagy) %>
|
3
|
+
<div class="flex items-center justify-between bg-white py-3">
|
4
|
+
<div class="hidden sm:flex sm:flex-1 sm:items-center sm:justify-between">
|
5
|
+
<div>
|
6
|
+
<p class="text-sm text-gray-700">
|
7
|
+
<%= I18n.t('bo.pagy.showing').capitalize %>
|
8
|
+
<span class="font-bold text-tybo"><%= pagy.from %></span>
|
9
|
+
<%= I18n.t('bo.pagy.to') %>
|
10
|
+
<span class="font-bold text-tybo"><%= pagy.to %></span>
|
11
|
+
<%= I18n.t('bo.pagy.of') %>
|
12
|
+
<span class="font-bold text-tybo"><%= pagy.count %></span>
|
13
|
+
<%= I18n.t('bo.pagy.results') %>
|
14
|
+
</p>
|
15
|
+
</div>
|
16
|
+
<div>
|
17
|
+
<nav class="isolate inline-flex -space-x-px rounded-md shadow-sm" aria-label="Pagination">
|
18
|
+
<% if pagy.prev %>
|
19
|
+
<a href="<%= pagy_url_for(pagy, pagy.prev) %>" aria-label="precedent" class="relative inline-flex items-center rounded-l-md px-2 py-2 text-gray-400 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-20 focus:outline-offset-0">
|
20
|
+
<svg class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
21
|
+
<path fill-rule="evenodd" d="M12.79 5.23a.75.75 0 01-.02 1.06L8.832 10l3.938 3.71a.75.75 0 11-1.04 1.08l-4.5-4.25a.75.75 0 010-1.08l4.5-4.25a.75.75 0 011.06.02z" clip-rule="evenodd" />
|
22
|
+
</svg>
|
23
|
+
</a>
|
24
|
+
<% end %>
|
25
|
+
<% pagy.series.each do |item| %>
|
26
|
+
<% if item.is_a?(Integer) %>
|
27
|
+
<%== link.call(item, item.to_s, 'class="relative inline-flex items-center px-4 py-2 text-sm font-semibold text-gray-900 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-20 focus:outline-offset-0"') %>
|
28
|
+
<% elsif item.is_a?(String) %>
|
29
|
+
<span class="relative z-10 inline-flex items-center bg-tybo-600 px-4 py-2 text-sm font-semibold text-white focus:z-20 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-tybo-600"><%= item %></span>
|
30
|
+
<% elsif item == :gap %>
|
31
|
+
<span class="relative inline-flex items-center px-4 py-2 text-sm font-semibold text-gray-700 ring-1 ring-inset ring-gray-300 focus:outline-offset-0">...</span>
|
32
|
+
<% end %>
|
33
|
+
<% end %>
|
34
|
+
<% if pagy.next %>
|
35
|
+
<a href="<%= pagy_url_for(pagy, pagy.next) %>" aria-label="suivant" class="relative inline-flex items-center rounded-r-md px-2 py-2 text-gray-400 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-20 focus:outline-offset-0">
|
36
|
+
<svg class="h-5 w-5" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
|
37
|
+
<path fill-rule="evenodd" d="M7.21 14.77a.75.75 0 01.02-1.06L11.168 10 7.23 6.29a.75.75 0 111.04-1.08l4.5 4.25a.75.75 0 010 1.08l-4.5 4.25a.75.75 0 01-1.06-.02z" clip-rule="evenodd" />
|
38
|
+
</svg>
|
39
|
+
</a>
|
40
|
+
<% end %>
|
41
|
+
</nav>
|
42
|
+
</div>
|
7
43
|
</div>
|
8
|
-
|
9
|
-
|
10
|
-
<%== link.call(pagy.prev, I18n.t('bo.nav.prev'), 'aria-label="previous" class="hidden"') %>
|
11
|
-
</div>
|
12
|
-
<% end -%>
|
13
|
-
<% if pagy.next -%>
|
14
|
-
<% pagy.series.each do |item|
|
15
|
-
# series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36] -%>
|
16
|
-
<% if item.is_a?(Integer) -%>
|
17
|
-
<%== link.call(item, item, 'class="inline-flex h-10 items-center rounded-md border border-gray-300 bg-white px-4 hover:bg-gray-100 focus:border-tybo-600 focus:outline-none focus:ring-2 focus:ring-tybo-600 focus:ring-opacity-25 focus:ring-offset-1 focus:ring-offset-tybo-600"') %>
|
18
|
-
<% elsif item.is_a?(String) -%>
|
19
|
-
<%== link.call(item, item, 'class="inline-flex h-10 items-center rounded-md border border-tybo-600 bg-white px-4 ring-1 ring-tybo-600 hover:bg-gray-100 focus:border-tybo-600 focus:outline-none focus:ring-2 focus:ring-tybo-600 focus:ring-opacity-25 focus:ring-offset-1 focus:ring-offset-tybo-600"') %>
|
20
|
-
<% elsif item == :gap -%>
|
21
|
-
<span class="inline-flex h-10 items-center px-1.5 text-gray-500">
|
22
|
-
<%== I18n.t('bo.nav.gap') %>
|
23
|
-
</span>
|
24
|
-
<% end -%>
|
25
|
-
<% end -%>
|
26
|
-
<div class="flex min-w-0 flex-1 justify-end">
|
27
|
-
<%== link.call(pagy.next, I18n.t('bo.nav.next'), 'aria-label="next" class="inline-flex h-10 items-center rounded-md border border-gray-300 bg-white px-4 hover:bg-gray-100 focus:border-tybo-600 focus:outline-none focus:ring-2 focus:ring-tybo-600 focus:ring-opacity-25 focus:ring-offset-1 focus:ring-offset-tybo-600"') %>
|
28
|
-
</div>
|
29
|
-
<% else -%>
|
30
|
-
<div class="flex min-w-0 flex-1 justify-end">
|
31
|
-
<%== link.call(pagy.next, I18n.t('bo.nav.next'), 'aria-label="next" class="hidden"') %>
|
32
|
-
</div>
|
33
|
-
<% end -%>
|
34
|
-
</nav>
|
44
|
+
</div>
|
45
|
+
<% end %>
|
@@ -1,8 +1,12 @@
|
|
1
1
|
<%%= simple_form_for [:<%= options[:namespace] %>, <%= class_name.underscore %>], html: { class: "<%= class_name.underscore %> form" } do |f| %>
|
2
2
|
<!-- Model columns -->
|
3
|
-
<%- bo_model.
|
4
|
-
<%- next if excluded_columns.include?(column.to_sym) || bo_model.reflect_on_all_associations.map(&:foreign_key).include?(column) -%>
|
5
|
-
|
3
|
+
<%- bo_model.columns.each do |column| -%>
|
4
|
+
<%- next if excluded_columns.include?(column.name.to_sym) || bo_model.reflect_on_all_associations.map(&:foreign_key).include?(column.name) -%>
|
5
|
+
<%- if column.type == :datetime -%>
|
6
|
+
<%%= render(Input::DatetimeComponent.new(item: <%= class_name.underscore %>, field: '<%= column.name %>', form: f)) %>
|
7
|
+
<%- else -%>
|
8
|
+
<%%= f.input :<%= column.name %>,label: I18n.t('bo.<%= class_name.underscore %>.attributes.<%= column.name %>') %>
|
9
|
+
<%- end -%>
|
6
10
|
<%- end -%>
|
7
11
|
<!-- belongs_to Associations -->
|
8
12
|
<%- belongs_to_assoc.each do |association| -%>
|
@@ -1,14 +1,16 @@
|
|
1
|
-
<%%=
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
1
|
+
<%%= turbo_frame_tag "<%= class_name.pluralize.underscore %>", target: '_top' do %>
|
2
|
+
<%%= render(FormComponent.new(item: <%= class_name.underscore %>)) do |form| %>
|
3
|
+
<%% current_page = if <%= class_name.underscore %>.persisted?
|
4
|
+
{ label: I18n.t('bo.show'), path: <%= "#{options[:namespace]}_#{class_name.underscore}_path(#{class_name.underscore})"%> }
|
5
|
+
else
|
6
|
+
{ label: I18n.t('bo.<%= class_name.underscore %>.new').capitalize, path: <%= "new_#{options[:namespace]}_#{class_name.underscore}_path" %> }
|
7
|
+
end
|
8
|
+
form.with_title(<%= class_name.underscore %>.persisted? ? <%= class_name.underscore %>.<%=bo_model_title(bo_model)%> : I18n.t('bo.<%= class_name.underscore %>.new').capitalize)
|
9
|
+
form.with_breadcrumb([
|
10
|
+
{ label: I18n.t('bo.<%= class_name.underscore %>.others').capitalize, path: <%= "#{options[:namespace]}_#{class_name.pluralize.underscore}_path"%> },
|
11
|
+
current_page
|
12
|
+
]) %>
|
13
|
+
<br>
|
14
|
+
<%%= render "form", <%= class_name.underscore %>: @<%= class_name.underscore %> %>
|
15
|
+
<%% end %>
|
14
16
|
<%% end %>
|
@@ -3,35 +3,6 @@
|
|
3
3
|
def create_translations
|
4
4
|
%w[en fr].each do |locale|
|
5
5
|
locale_file = "config/locales/bo.#{locale}.yml"
|
6
|
-
unless File.exist?(locale_file)
|
7
|
-
File.write(locale_file, {
|
8
|
-
locale => {
|
9
|
-
'bo' => {
|
10
|
-
'filters' => find_existing_translation('filters', locale),
|
11
|
-
'details' => find_existing_translation('details', locale),
|
12
|
-
'to' => find_existing_translation('to', locale),
|
13
|
-
'confirm_delete' => find_existing_translation('confirm_delete', locale),
|
14
|
-
'record' => {
|
15
|
-
'created' => find_existing_translation('created', locale),
|
16
|
-
'updated' => find_existing_translation('updated', locale),
|
17
|
-
'destroyed' => find_existing_translation('destroyed', locale),
|
18
|
-
'show' => find_existing_translation('show', locale),
|
19
|
-
},
|
20
|
-
'nav' => {
|
21
|
-
'prev' => find_existing_translation('prev', locale),
|
22
|
-
'next' => find_existing_translation('next', locale),
|
23
|
-
'gap' => find_existing_translation('gap', locale)
|
24
|
-
},
|
25
|
-
'devise' => {
|
26
|
-
'password' => find_existing_translation('password', locale),
|
27
|
-
'new' => find_existing_translation('new', locale),
|
28
|
-
'forgot_password' => find_existing_translation('forgot_password', locale),
|
29
|
-
}
|
30
|
-
}
|
31
|
-
}
|
32
|
-
}.to_yaml)
|
33
|
-
end
|
34
|
-
|
35
6
|
yaml_string = File.open locale_file
|
36
7
|
data = YAML.load yaml_string
|
37
8
|
data[locale]['bo'][file_name.underscore] = {
|
@@ -8,7 +8,7 @@ module.exports = {
|
|
8
8
|
'./app/helpers/**/*.rb',
|
9
9
|
'./app/javascript/**/*.js',
|
10
10
|
'./app/views/**/*.{erb,haml,html,slim}',
|
11
|
-
'./app/components/**/*.html
|
11
|
+
'./app/components/**/*.{erb,haml,html,rb}',
|
12
12
|
output.trim() + '/app/**/*.{erb,haml,html,rb}'
|
13
13
|
],
|
14
14
|
theme: {
|
@@ -27,5 +27,8 @@
|
|
27
27
|
"remember_me": "Se souvenir de moi ?",
|
28
28
|
"sign_in": "Connexion",
|
29
29
|
"send_me_reset_password_instructions": "Réinitialiser mon mot de passe",
|
30
|
-
"save": "Sauvegarder"
|
30
|
+
"save": "Sauvegarder",
|
31
|
+
"showing": "Affichage de",
|
32
|
+
"of": "de",
|
33
|
+
"results": "resultats"
|
31
34
|
}
|
@@ -20,6 +20,13 @@
|
|
20
20
|
'next' => find_existing_translation('next', locale),
|
21
21
|
'gap' => find_existing_translation('gap', locale)
|
22
22
|
},
|
23
|
+
'pagy' => {
|
24
|
+
'showing' => find_existing_translation('showing', locale),
|
25
|
+
'to' => find_existing_translation('to', locale),
|
26
|
+
'of' => find_existing_translation('of', locale),
|
27
|
+
'show' => find_existing_translation('show', locale),
|
28
|
+
'results' => find_existing_translation('results', locale)
|
29
|
+
},
|
23
30
|
'devise' => {
|
24
31
|
'password' => find_existing_translation('password', locale),
|
25
32
|
'forgot_password' => find_existing_translation('forgot_password', locale),
|
data/lib/tybo/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tybo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michel Delpierre
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-06-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -189,6 +189,8 @@ files:
|
|
189
189
|
- app/components/index_header_component.rb
|
190
190
|
- app/components/index_header_export_component.html.erb
|
191
191
|
- app/components/index_header_export_component.rb
|
192
|
+
- app/components/input/datetime_component.html.erb
|
193
|
+
- app/components/input/datetime_component.rb
|
192
194
|
- app/components/input/file_component.html.erb
|
193
195
|
- app/components/input/file_component.rb
|
194
196
|
- app/components/sidebar_component.html.erb
|