better_ui 0.4.0 → 0.5.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.
Potentially problematic release.
This version of better_ui might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +141 -189
- data/app/assets/stylesheets/better_ui/_base.scss +9 -0
- data/app/assets/stylesheets/better_ui/_components.scss +2 -0
- data/app/assets/stylesheets/better_ui/_utilities.scss +14 -0
- data/app/assets/stylesheets/better_ui/application.css +3 -1
- data/app/assets/stylesheets/better_ui/components/_avatar.scss +200 -0
- data/app/assets/stylesheets/better_ui/components/_badge.scss +154 -0
- data/app/assets/stylesheets/better_ui/components/_breadcrumb.scss +106 -0
- data/app/assets/stylesheets/better_ui/components/_button.scss +105 -0
- data/app/assets/stylesheets/better_ui/components/_card.scss +60 -0
- data/app/assets/stylesheets/better_ui/components/_heading.scss +81 -0
- data/app/assets/stylesheets/better_ui/components/_icon.scss +134 -0
- data/app/assets/stylesheets/better_ui/components/_index.scss +17 -0
- data/app/assets/stylesheets/better_ui/components/_link.scss +100 -0
- data/app/assets/stylesheets/better_ui/components/_panel.scss +104 -0
- data/app/assets/stylesheets/better_ui/components/_spinner.scss +129 -0
- data/app/assets/stylesheets/better_ui/components/_table.scss +156 -0
- data/app/assets/stylesheets/better_ui/components/_variables.scss +1 -0
- data/app/assets/stylesheets/better_ui.scss +4 -0
- data/app/components/better_ui/application/alert_component.html.erb +1 -1
- data/app/components/better_ui/application/alert_component.rb +95 -89
- data/app/components/better_ui/application/card_component.html.erb +24 -0
- data/app/components/better_ui/application/card_component.rb +53 -0
- data/app/components/better_ui/application/card_container_component.html.erb +8 -0
- data/app/components/better_ui/application/card_container_component.rb +14 -0
- data/app/components/better_ui/application/toast_component.rb +92 -57
- data/app/components/better_ui/general/avatar_component.html.erb +19 -0
- data/app/components/better_ui/general/avatar_component.rb +171 -0
- data/app/components/better_ui/general/badge_component.html.erb +19 -0
- data/app/components/better_ui/general/badge_component.rb +135 -0
- data/app/components/better_ui/general/breadcrumb_component.html.erb +7 -31
- data/app/components/better_ui/general/breadcrumb_component.rb +64 -66
- data/app/components/better_ui/general/button_component.html.erb +6 -6
- data/app/components/better_ui/general/button_component.rb +62 -95
- data/app/components/better_ui/general/heading_component.html.erb +1 -25
- data/app/components/better_ui/general/heading_component.rb +20 -113
- data/app/components/better_ui/general/icon_component.rb +37 -61
- data/app/components/better_ui/general/link_component.html.erb +17 -0
- data/app/components/better_ui/general/link_component.rb +132 -0
- data/app/components/better_ui/general/panel_component.rb +51 -56
- data/app/components/better_ui/general/spinner_component.html.erb +15 -0
- data/app/components/better_ui/general/spinner_component.rb +79 -0
- data/app/components/better_ui/general/table_component.html.erb +56 -20
- data/app/components/better_ui/general/table_component.rb +89 -87
- data/app/helpers/better_ui/general/components/avatar_helper.rb +17 -0
- data/app/helpers/better_ui/general/components/badge_helper.rb +17 -0
- data/app/helpers/better_ui/general/components/breadcrumb_helper.rb +17 -0
- data/app/helpers/better_ui/general/components/button_helper.rb +17 -0
- data/app/helpers/better_ui/general/components/heading_helper.rb +17 -0
- data/app/helpers/better_ui/general/components/icon_helper.rb +17 -0
- data/app/helpers/better_ui/general/components/link_helper.rb +17 -0
- data/app/helpers/better_ui/general/components/panel_helper.rb +16 -0
- data/app/helpers/better_ui/general/components/spinner_helper.rb +17 -0
- data/app/helpers/better_ui/general/components/table_helper.rb +17 -0
- data/app/helpers/better_ui/general_helper.rb +15 -0
- data/app/helpers/better_ui_helper.rb +12 -0
- data/app/views/components/better_ui/general/table/_custom_body_row.html.erb +17 -0
- data/app/views/components/better_ui/general/table/_custom_footer_rows.html.erb +17 -0
- data/app/views/components/better_ui/general/table/_custom_header_rows.html.erb +12 -0
- data/config/routes.rb +2 -13
- data/lib/better_ui/engine.rb +66 -16
- data/lib/better_ui/version.rb +1 -1
- data/lib/better_ui.rb +12 -0
- data/lib/generators/better_ui/install_generator.rb +103 -0
- data/lib/generators/better_ui/stylesheet_generator.rb +159 -0
- data/lib/generators/better_ui/templates/README +125 -0
- data/lib/generators/better_ui/templates/components/_avatar.scss +200 -0
- data/lib/generators/better_ui/templates/components/_badge.scss +154 -0
- data/lib/generators/better_ui/templates/components/_breadcrumb.scss +106 -0
- data/lib/generators/better_ui/templates/components/_button.scss +109 -0
- data/lib/generators/better_ui/templates/components/_card.scss +60 -0
- data/lib/generators/better_ui/templates/components/_heading.scss +81 -0
- data/lib/generators/better_ui/templates/components/_icon.scss +134 -0
- data/lib/generators/better_ui/templates/components/_index.scss +17 -0
- data/lib/generators/better_ui/templates/components/_link.scss +100 -0
- data/lib/generators/better_ui/templates/components/_panel.scss +104 -0
- data/lib/generators/better_ui/templates/components/_spinner.scss +129 -0
- data/lib/generators/better_ui/templates/components/_table.scss +156 -0
- data/lib/generators/better_ui/templates/components/_variables.scss +0 -0
- data/lib/generators/better_ui/templates/components_stylesheet.scss +35 -0
- data/lib/generators/better_ui/templates/index.scss +18 -0
- data/lib/generators/better_ui/templates/initializer.rb +41 -0
- metadata +120 -49
- data/app/assets/javascripts/better_ui/controllers/navbar_controller.js +0 -138
- data/app/assets/javascripts/better_ui/controllers/sidebar_controller.js +0 -211
- data/app/assets/javascripts/better_ui/controllers/toast_controller.js +0 -161
- data/app/assets/javascripts/better_ui/index.js +0 -159
- data/app/assets/javascripts/better_ui/toast_manager.js +0 -77
- data/app/components/better_ui/theme_helper.rb +0 -169
- data/app/controllers/better_ui/docs_controller.rb +0 -34
- data/app/helpers/better_ui_application_helper.rb +0 -99
@@ -0,0 +1,17 @@
|
|
1
|
+
module BetterUi
|
2
|
+
module General
|
3
|
+
module Components
|
4
|
+
module AvatarHelper
|
5
|
+
def bui_avatar(image = nil, **options)
|
6
|
+
render BetterUi::General::AvatarComponent.new(
|
7
|
+
image: image,
|
8
|
+
**options
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Supporto per la sintassi originale per compatibilità
|
13
|
+
alias_method :better_ui_general_avatar, :bui_avatar
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module BetterUi
|
2
|
+
module General
|
3
|
+
module Components
|
4
|
+
module BadgeHelper
|
5
|
+
def bui_badge(label = nil, **options)
|
6
|
+
render BetterUi::General::BadgeComponent.new(
|
7
|
+
label: label,
|
8
|
+
**options
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Supporto per la sintassi originale per compatibilità
|
13
|
+
alias_method :better_ui_general_badge, :bui_badge
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module BetterUi
|
2
|
+
module General
|
3
|
+
module Components
|
4
|
+
module BreadcrumbHelper
|
5
|
+
def bui_breadcrumb(items = nil, **options)
|
6
|
+
render BetterUi::General::BreadcrumbComponent.new(
|
7
|
+
items: items,
|
8
|
+
**options
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Supporto per la sintassi originale per compatibilità
|
13
|
+
alias_method :better_ui_general_breadcrumb, :bui_breadcrumb
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module BetterUi
|
2
|
+
module General
|
3
|
+
module Components
|
4
|
+
module ButtonHelper
|
5
|
+
def bui_button(label = nil, **options)
|
6
|
+
render BetterUi::General::ButtonComponent.new(
|
7
|
+
label: label,
|
8
|
+
**options
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Supporto per la sintassi originale per compatibilità
|
13
|
+
alias_method :better_ui_general_button, :bui_button
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module BetterUi
|
2
|
+
module General
|
3
|
+
module Components
|
4
|
+
module HeadingHelper
|
5
|
+
def bui_heading(title = nil, **options)
|
6
|
+
render BetterUi::General::HeadingComponent.new(
|
7
|
+
title: title,
|
8
|
+
**options
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Supporto per la sintassi originale per compatibilità
|
13
|
+
alias_method :better_ui_general_heading, :bui_heading
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module BetterUi
|
2
|
+
module General
|
3
|
+
module Components
|
4
|
+
module IconHelper
|
5
|
+
def bui_icon(name = nil, **options)
|
6
|
+
render BetterUi::General::IconComponent.new(
|
7
|
+
name: name,
|
8
|
+
**options
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Supporto per la sintassi originale per compatibilità
|
13
|
+
alias_method :better_ui_general_icon, :bui_icon
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module BetterUi
|
2
|
+
module General
|
3
|
+
module Components
|
4
|
+
module LinkHelper
|
5
|
+
def bui_link(label = nil, **options)
|
6
|
+
render BetterUi::General::LinkComponent.new(
|
7
|
+
label: label,
|
8
|
+
**options
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Supporto per la sintassi originale per compatibilità
|
13
|
+
alias_method :better_ui_general_link, :bui_link
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module BetterUi
|
2
|
+
module General
|
3
|
+
module Components
|
4
|
+
module PanelHelper
|
5
|
+
def bui_panel(**options, &block)
|
6
|
+
render BetterUi::General::PanelComponent.new(
|
7
|
+
**options
|
8
|
+
), &block
|
9
|
+
end
|
10
|
+
|
11
|
+
# Supporto per la sintassi originale per compatibilità
|
12
|
+
alias_method :better_ui_general_panel, :bui_panel
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module BetterUi
|
2
|
+
module General
|
3
|
+
module Components
|
4
|
+
module SpinnerHelper
|
5
|
+
def bui_spinner(label = nil, **options)
|
6
|
+
render BetterUi::General::SpinnerComponent.new(
|
7
|
+
label: label,
|
8
|
+
**options
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Supporto per la sintassi originale per compatibilità
|
13
|
+
alias_method :better_ui_general_spinner, :bui_spinner
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module BetterUi
|
2
|
+
module General
|
3
|
+
module Components
|
4
|
+
module TableHelper
|
5
|
+
def bui_table(data = nil, **options, &block)
|
6
|
+
render BetterUi::General::TableComponent.new(
|
7
|
+
data: data,
|
8
|
+
**options
|
9
|
+
), &block
|
10
|
+
end
|
11
|
+
|
12
|
+
# Supporto per la sintassi originale per compatibilità
|
13
|
+
alias_method :better_ui_general_table, :bui_table
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module BetterUi
|
2
|
+
module GeneralHelper
|
3
|
+
# Inclusione di tutti i componenti general
|
4
|
+
include BetterUi::General::Components::ButtonHelper
|
5
|
+
include BetterUi::General::Components::IconHelper
|
6
|
+
include BetterUi::General::Components::LinkHelper
|
7
|
+
include BetterUi::General::Components::BadgeHelper
|
8
|
+
include BetterUi::General::Components::AvatarHelper
|
9
|
+
include BetterUi::General::Components::TableHelper
|
10
|
+
include BetterUi::General::Components::SpinnerHelper
|
11
|
+
include BetterUi::General::Components::HeadingHelper
|
12
|
+
include BetterUi::General::Components::PanelHelper
|
13
|
+
include BetterUi::General::Components::BreadcrumbHelper
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module BetterUi
|
2
|
+
# Includi esplicitamente il GeneralHelper
|
3
|
+
require_relative 'better_ui/general_helper'
|
4
|
+
|
5
|
+
module Helper
|
6
|
+
# Estendi il modulo con ActiveSupport::Concern per funzionalità helper
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
|
9
|
+
# Includi gli helper disponibili
|
10
|
+
include BetterUi::GeneralHelper
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<tr class="<%= component.tr_classes(index) %>">
|
2
|
+
<% headers.each_with_index do |header, cell_index| %>
|
3
|
+
<td class="<%= component.td_classes %>">
|
4
|
+
<% cell_value = component.get_cell_value(row, header) %>
|
5
|
+
<% if cell_index == 0 %>
|
6
|
+
<div class="flex items-center">
|
7
|
+
<div class="w-8 h-8 rounded-full bg-blue-100 mr-2 flex items-center justify-center text-blue-700">
|
8
|
+
<%= cell_value.to_s.first&.upcase || 'N/A' %>
|
9
|
+
</div>
|
10
|
+
<%= cell_value %>
|
11
|
+
</div>
|
12
|
+
<% else %>
|
13
|
+
<%= cell_value %>
|
14
|
+
<% end %>
|
15
|
+
</td>
|
16
|
+
<% end %>
|
17
|
+
</tr>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<tr>
|
2
|
+
<% footer.each_with_index do |value, index| %>
|
3
|
+
<td class="<%= component.tf_classes %>">
|
4
|
+
<% if index == 0 %>
|
5
|
+
<div class="flex items-center">
|
6
|
+
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
7
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2
|
8
|
+
0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path>
|
9
|
+
</svg>
|
10
|
+
<strong><%= value %></strong>
|
11
|
+
</div>
|
12
|
+
<% else %>
|
13
|
+
<%= value %>
|
14
|
+
<% end %>
|
15
|
+
</td>
|
16
|
+
<% end %>
|
17
|
+
</tr>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<tr>
|
2
|
+
<% headers.each do |header| %>
|
3
|
+
<th class="<%= component.th_classes %>">
|
4
|
+
<div class="flex items-center justify-between">
|
5
|
+
<%= header.to_s.humanize %>
|
6
|
+
<svg class="w-4 h-4 ml-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
7
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
8
|
+
</svg>
|
9
|
+
</div>
|
10
|
+
</th>
|
11
|
+
<% end %>
|
12
|
+
</tr>
|
data/config/routes.rb
CHANGED
@@ -1,15 +1,4 @@
|
|
1
1
|
BetterUi::Engine.routes.draw do
|
2
|
-
#
|
3
|
-
|
4
|
-
|
5
|
-
# Route per le pagine di documentazione generiche
|
6
|
-
get 'docs/:page', to: 'docs#show', as: :docs_page
|
7
|
-
|
8
|
-
# Route specifica per i componenti
|
9
|
-
get 'docs/components/:component', to: 'docs#component', as: :docs_component
|
10
|
-
|
11
|
-
# Montaggio di Lookbook per lo sviluppo e il test
|
12
|
-
if Rails.env.development? || Rails.env.test?
|
13
|
-
mount Lookbook::Engine, at: "/lookbook"
|
14
|
-
end
|
2
|
+
# Montaggio di Lookbook come root
|
3
|
+
mount Lookbook::Engine, at: "/"
|
15
4
|
end
|
data/lib/better_ui/engine.rb
CHANGED
@@ -3,49 +3,99 @@ require 'redcarpet'
|
|
3
3
|
require 'tailwindcss-rails'
|
4
4
|
require 'coderay'
|
5
5
|
require 'font-awesome-sass'
|
6
|
+
begin
|
7
|
+
require 'lookbook'
|
8
|
+
rescue LoadError
|
9
|
+
# Lookbook non è richiesto, è una dipendenza opzionale
|
10
|
+
end
|
11
|
+
begin
|
12
|
+
require 'listen'
|
13
|
+
rescue LoadError
|
14
|
+
# Listen non è richiesto, è una dipendenza opzionale
|
15
|
+
end
|
16
|
+
begin
|
17
|
+
require 'action_cable'
|
18
|
+
rescue LoadError
|
19
|
+
# ActionCable non è richiesto, è una dipendenza opzionale
|
20
|
+
end
|
6
21
|
|
7
22
|
module BetterUi
|
23
|
+
# Engine Rails per Better UI
|
24
|
+
# Gestisce l'isolamento del namespace, le dipendenze, gli asset e le configurazioni
|
8
25
|
class Engine < ::Rails::Engine
|
9
26
|
isolate_namespace BetterUi
|
10
27
|
|
11
28
|
# Configurazione per rendere disponibili gli assets all'applicazione host
|
12
29
|
initializer 'better_ui.assets' do |app|
|
30
|
+
# Aggiungi i percorsi asset
|
13
31
|
app.config.assets.paths << root.join('app', 'assets', 'stylesheets')
|
14
32
|
app.config.assets.paths << root.join('app', 'assets', 'images')
|
33
|
+
app.config.assets.paths << root.join('app', 'assets', 'fonts')
|
34
|
+
|
35
|
+
# Aggiungi i file SCSS e CSS alla precompilazione
|
36
|
+
if app.config.respond_to?(:assets)
|
37
|
+
app.config.assets.precompile += %w(
|
38
|
+
better_ui/application.css
|
39
|
+
better_ui/components/*.css
|
40
|
+
better_ui/components/**/*.css
|
41
|
+
better_ui/components/index.css
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
# Configurazione per Propshaft se disponibile
|
46
|
+
if defined?(Propshaft) && app.config.respond_to?(:asset_host)
|
47
|
+
app.config.asset_host = app.config.asset_host
|
48
|
+
end
|
15
49
|
end
|
16
50
|
|
17
51
|
# Assicuriamo che gli helper siano correttamente caricati
|
18
52
|
config.autoload_paths << root.join('app', 'helpers')
|
53
|
+
config.eager_load_paths << root.join('app', 'helpers')
|
19
54
|
|
20
|
-
#
|
21
|
-
initializer 'better_ui.
|
22
|
-
|
55
|
+
# Caricamento dei componenti helper
|
56
|
+
initializer 'better_ui.load_helpers', before: :load_config_initializers do
|
57
|
+
# Carica prima i componenti singoli
|
58
|
+
Dir.glob(root.join('app/helpers/better_ui/general/components/*.rb')).sort.each do |component|
|
59
|
+
require component
|
60
|
+
end
|
23
61
|
|
62
|
+
# Poi carica il general_helper che li unisce tutti
|
63
|
+
require_relative '../../app/helpers/better_ui/general_helper' if File.exist?(root.join('app/helpers/better_ui/general_helper.rb'))
|
64
|
+
|
65
|
+
# Infine carica il modulo principale
|
66
|
+
require_relative '../../app/helpers/better_ui_helper' if File.exist?(root.join('app/helpers/better_ui_helper.rb'))
|
67
|
+
end
|
68
|
+
|
69
|
+
# Configurazione per rendere disponibili i componenti all'applicazione host
|
70
|
+
initializer 'better_ui.view_helpers' do
|
24
71
|
ActiveSupport.on_load :action_controller do
|
25
|
-
helper BetterUi::
|
72
|
+
helper BetterUi::Helper if defined?(BetterUi::Helper)
|
26
73
|
end
|
27
74
|
|
28
75
|
ActiveSupport.on_load :action_view do
|
29
|
-
include BetterUi::
|
76
|
+
include BetterUi::Helper if defined?(BetterUi::Helper)
|
30
77
|
end
|
31
78
|
end
|
32
79
|
|
33
80
|
# Configurazione per ViewComponent
|
81
|
+
config.view_component.preview_paths ||= []
|
34
82
|
config.view_component.preview_paths << root.join('test', 'components', 'previews')
|
35
83
|
|
36
84
|
# Configurazione per Lookbook in sviluppo e test
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
85
|
+
if defined?(Lookbook)
|
86
|
+
initializer 'better_ui.lookbook' do
|
87
|
+
if Rails.env.development? || Rails.env.test?
|
88
|
+
config.lookbook = Lookbook
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Configurazione per l'uso personalizzato dei componenti
|
94
|
+
initializer 'better_ui.custom_configuration', before: :load_config_initializers do |app|
|
95
|
+
app.config.to_prepare do
|
96
|
+
BetterUi.configure do |config|
|
97
|
+
# Configurazione di default, può essere sovrascritta dall'applicazione host
|
46
98
|
end
|
47
|
-
|
48
|
-
config.lookbook = Lookbook
|
49
99
|
end
|
50
100
|
end
|
51
101
|
end
|
data/lib/better_ui/version.rb
CHANGED
data/lib/better_ui.rb
CHANGED
@@ -21,5 +21,17 @@ module BetterUi
|
|
21
21
|
def configure
|
22
22
|
yield(configuration) if block_given?
|
23
23
|
end
|
24
|
+
|
25
|
+
# Metodo utile per accedere al percorso degli stilesheets
|
26
|
+
def stylesheets_path
|
27
|
+
File.join(File.dirname(__FILE__), '..', 'app', 'assets', 'stylesheets')
|
28
|
+
end
|
24
29
|
end
|
25
30
|
end
|
31
|
+
|
32
|
+
# Caricamento dei generator
|
33
|
+
require 'rails/generators'
|
34
|
+
if defined?(Rails::Generators)
|
35
|
+
require 'generators/better_ui/stylesheet_generator'
|
36
|
+
require 'generators/better_ui/install_generator'
|
37
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BetterUi
|
4
|
+
module Generators
|
5
|
+
# Generatore per l'installazione di Better UI in un'applicazione Rails
|
6
|
+
#
|
7
|
+
# Questo generatore:
|
8
|
+
# 1. Aggiunge le dipendenze necessarie
|
9
|
+
# 2. Monta l'engine nelle routes
|
10
|
+
# 3. Aggiunge gli asset all'applicazione
|
11
|
+
# 4. Crea un file di configurazione initializer
|
12
|
+
# 5. Genera i file di stile personalizzabili (opzionalmente)
|
13
|
+
class InstallGenerator < Rails::Generators::Base
|
14
|
+
source_root File.expand_path('templates', __dir__)
|
15
|
+
|
16
|
+
desc "Installa Better UI nell'applicazione Rails"
|
17
|
+
|
18
|
+
class_option :skip_routes, type: :boolean, default: false,
|
19
|
+
desc: "Salta l'aggiunta del mount engine nelle routes"
|
20
|
+
class_option :skip_stylesheets, type: :boolean, default: false,
|
21
|
+
desc: "Salta la generazione dei file di stile personalizzabili"
|
22
|
+
class_option :skip_config, type: :boolean, default: false,
|
23
|
+
desc: "Salta la creazione del file di configurazione"
|
24
|
+
|
25
|
+
def mount_engine
|
26
|
+
return if options[:skip_routes]
|
27
|
+
|
28
|
+
route_file = "config/routes.rb"
|
29
|
+
|
30
|
+
if File.exist?(route_file)
|
31
|
+
mount_code = " mount BetterUi::Engine => '/better_ui'"
|
32
|
+
|
33
|
+
append_to_file route_file, injectible_routes(mount_code)
|
34
|
+
|
35
|
+
say "Engine di Better UI montato in #{route_file}", :green
|
36
|
+
else
|
37
|
+
say "File routes.rb non trovato. Salta il montaggio dell'engine.", :yellow
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def copy_initializer
|
42
|
+
return if options[:skip_config]
|
43
|
+
|
44
|
+
template "initializer.rb", "config/initializers/better_ui.rb"
|
45
|
+
say "File di configurazione creato in config/initializers/better_ui.rb", :green
|
46
|
+
end
|
47
|
+
|
48
|
+
def add_assets
|
49
|
+
application_css = "app/assets/stylesheets/application.css"
|
50
|
+
application_scss = "app/assets/stylesheets/application.scss"
|
51
|
+
|
52
|
+
file_to_update = if File.exist?(application_scss)
|
53
|
+
application_scss
|
54
|
+
elsif File.exist?(application_css)
|
55
|
+
application_css
|
56
|
+
else
|
57
|
+
nil
|
58
|
+
end
|
59
|
+
|
60
|
+
if file_to_update
|
61
|
+
if file_to_update.end_with?('.css')
|
62
|
+
inject_into_file file_to_update, " *= require better_ui/application\n", before: " */\n"
|
63
|
+
else
|
64
|
+
append_to_file file_to_update, "\n@import 'better_ui/application';\n"
|
65
|
+
end
|
66
|
+
|
67
|
+
say "Better UI assets aggiunti a #{file_to_update}", :green
|
68
|
+
else
|
69
|
+
say "File CSS dell'applicazione non trovato. Salta l'aggiunta degli assets.", :yellow
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def create_stylesheets
|
74
|
+
return if options[:skip_stylesheets]
|
75
|
+
|
76
|
+
generate "better_ui:stylesheet"
|
77
|
+
say "Fogli di stile personalizzabili generati", :green
|
78
|
+
end
|
79
|
+
|
80
|
+
def show_instructions
|
81
|
+
say "\n========================================================", :green
|
82
|
+
say "Better UI installato con successo!", :green
|
83
|
+
say "========================================================", :green
|
84
|
+
say "\nPer utilizzare i componenti nella tua applicazione:", :blue
|
85
|
+
say "- Accedi a http://localhost:3000/better_ui per vedere la documentazione", :blue
|
86
|
+
say "- Utilizza i componenti nel tuo codice, ad esempio:", :blue
|
87
|
+
say " <%= render BetterUi::General::ButtonComponent.new(label: 'Clicca qui') %>", :blue
|
88
|
+
say "\nPer personalizzare i componenti, modifica i file in:", :blue
|
89
|
+
say " app/assets/stylesheets/components/", :blue
|
90
|
+
say "- I file *_overrides.scss contengono le classi vuote per le personalizzazioni", :blue
|
91
|
+
say "\nPer configurare i valori predefiniti, modifica:", :blue
|
92
|
+
say " config/initializers/better_ui.rb", :blue
|
93
|
+
say "\n========================================================\n", :green
|
94
|
+
end
|
95
|
+
|
96
|
+
private
|
97
|
+
|
98
|
+
def injectible_routes(mount_code)
|
99
|
+
"\n#{mount_code}\n"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|