dbdoc_engine 0.1.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 +7 -0
- data/README.md +331 -0
- data/Rakefile +8 -0
- data/app/assets/builds/dbdoc_engine/application.css +5 -0
- data/app/assets/images/dbdoc_engine/arrowdown.svg +3 -0
- data/app/assets/images/dbdoc_engine/arrowhorizontal.svg +3 -0
- data/app/assets/images/dbdoc_engine/arrowleft.svg +3 -0
- data/app/assets/images/dbdoc_engine/changelog.svg +3 -0
- data/app/assets/images/dbdoc_engine/column_stats_dbdocs.svg +23 -0
- data/app/assets/images/dbdoc_engine/diagram.svg +3 -0
- data/app/assets/images/dbdoc_engine/double_arrow.svg +4 -0
- data/app/assets/images/dbdoc_engine/group_bu.svg +3 -0
- data/app/assets/images/dbdoc_engine/japan_circle.png +0 -0
- data/app/assets/images/dbdoc_engine/log_in_image.png +0 -0
- data/app/assets/images/dbdoc_engine/logo.svg +12 -0
- data/app/assets/images/dbdoc_engine/orange_changelog.svg +3 -0
- data/app/assets/images/dbdoc_engine/orange_fields.svg +23 -0
- data/app/assets/images/dbdoc_engine/orange_logo.svg +12 -0
- data/app/assets/images/dbdoc_engine/orange_table.svg +21 -0
- data/app/assets/images/dbdoc_engine/orange_updates.svg +43 -0
- data/app/assets/images/dbdoc_engine/orange_wiki.svg +3 -0
- data/app/assets/images/dbdoc_engine/search.svg +3 -0
- data/app/assets/images/dbdoc_engine/setting.svg +3 -0
- data/app/assets/images/dbdoc_engine/table_dbdocs.svg +21 -0
- data/app/assets/images/dbdoc_engine/uk_circle_transparent.png +0 -0
- data/app/assets/images/dbdoc_engine/update_stats_dbdocs.svg +43 -0
- data/app/assets/images/dbdoc_engine/wiki.svg +3 -0
- data/app/assets/stylesheets/dbdoc_engine/admin.css +176 -0
- data/app/assets/stylesheets/dbdoc_engine/admin_header.css +179 -0
- data/app/assets/stylesheets/dbdoc_engine/application.scss +1 -0
- data/app/assets/stylesheets/dbdoc_engine/changelog.css +173 -0
- data/app/assets/stylesheets/dbdoc_engine/dashboard.css +513 -0
- data/app/assets/stylesheets/dbdoc_engine/dbdoc_application.css +117 -0
- data/app/assets/stylesheets/dbdoc_engine/ecommerce.css +253 -0
- data/app/assets/stylesheets/dbdoc_engine/group_details.css +178 -0
- data/app/assets/stylesheets/dbdoc_engine/header.css +212 -0
- data/app/assets/stylesheets/dbdoc_engine/loading_spinner.css +127 -0
- data/app/assets/stylesheets/dbdoc_engine/login.css +213 -0
- data/app/assets/stylesheets/dbdoc_engine/schema_diagram.css +149 -0
- data/app/assets/stylesheets/dbdoc_engine/sidebar.css +296 -0
- data/app/assets/stylesheets/dbdoc_engine/table_details.css +417 -0
- data/app/controllers/dbdoc_engine/admin/base_controller.rb +23 -0
- data/app/controllers/dbdoc_engine/admin/dashboard_controller.rb +16 -0
- data/app/controllers/dbdoc_engine/admin/data_transfer_controller.rb +63 -0
- data/app/controllers/dbdoc_engine/admin/db_design_dynamic_tables_controller.rb +198 -0
- data/app/controllers/dbdoc_engine/admin/db_design_table_groups_controller.rb +107 -0
- data/app/controllers/dbdoc_engine/application_controller.rb +65 -0
- data/app/controllers/dbdoc_engine/concerns/internationalization.rb +57 -0
- data/app/controllers/dbdoc_engine/db_doc_sessions_controller.rb +33 -0
- data/app/controllers/dbdoc_engine/home_controller.rb +79 -0
- data/app/controllers/dbdoc_engine/schema_diagram_controller.rb +293 -0
- data/app/helper/dbdoc_engine/application_helper.rb +35 -0
- data/app/helpers/dbdoc_engine/application_helper.rb +4 -0
- data/app/helpers/dbdoc_engine/changelogs_helper.rb +27 -0
- data/app/helpers/dbdoc_engine/column_helper.rb +30 -0
- data/app/helpers/dbdoc_engine/db_design_dynamic_tables_helper.rb +15 -0
- data/app/helpers/dbdoc_engine/home_helper.rb +75 -0
- data/app/javascript/dbdoc_engine/application.js +12 -0
- data/app/javascript/dbdoc_engine/controllers/application.js +29 -0
- data/app/javascript/dbdoc_engine/controllers/auto_submit_controller.js +17 -0
- data/app/javascript/dbdoc_engine/controllers/chart_controller.js +58 -0
- data/app/javascript/dbdoc_engine/controllers/column-type_controller.js +149 -0
- data/app/javascript/dbdoc_engine/controllers/column_controller.js +362 -0
- data/app/javascript/dbdoc_engine/controllers/column_search_controller.js +42 -0
- data/app/javascript/dbdoc_engine/controllers/dbdoc_accordion_controller.js +42 -0
- data/app/javascript/dbdoc_engine/controllers/ecommerce_controller.js +73 -0
- data/app/javascript/dbdoc_engine/controllers/group_details_controller.js +88 -0
- data/app/javascript/dbdoc_engine/controllers/import_export_controller.js +200 -0
- data/app/javascript/dbdoc_engine/controllers/index.js +9 -0
- data/app/javascript/dbdoc_engine/controllers/language_controller.js +100 -0
- data/app/javascript/dbdoc_engine/controllers/loading_spinner_controller.js +48 -0
- data/app/javascript/dbdoc_engine/controllers/login_controller.js +75 -0
- data/app/javascript/dbdoc_engine/controllers/notification_controller.js +15 -0
- data/app/javascript/dbdoc_engine/controllers/schema_diagram_controller.js +1129 -0
- data/app/javascript/dbdoc_engine/controllers/select2_controller.js +67 -0
- data/app/javascript/dbdoc_engine/controllers/sidebar_controller.js +943 -0
- data/app/javascript/dbdoc_engine/controllers/table_details_controller.js +245 -0
- data/app/javascript/dbdoc_engine/controllers/table_group_validation_controller.js +148 -0
- data/app/javascript/dbdoc_engine/controllers/table_validation_controller.js +423 -0
- data/app/jobs/dbdoc_engine/application_job.rb +4 -0
- data/app/mailers/dbdoc_engine/application_mailer.rb +6 -0
- data/app/models/dbdoc_engine/application_record.rb +6 -0
- data/app/models/dbdoc_engine/concerns/soft_deletable.rb +30 -0
- data/app/models/dbdoc_engine/db_design_changelog.rb +44 -0
- data/app/models/dbdoc_engine/db_design_dynamic_column.rb +211 -0
- data/app/models/dbdoc_engine/db_design_dynamic_table.rb +124 -0
- data/app/models/dbdoc_engine/db_design_table_group.rb +88 -0
- data/app/models/dbdoc_engine/user.rb +21 -0
- data/app/queries/dbdoc_engine/admin_dashboard_queries.rb +71 -0
- data/app/queries/dbdoc_engine/db_design_changelog_queries.rb +68 -0
- data/app/queries/dbdoc_engine/db_design_dynamic_column_queries.rb +37 -0
- data/app/queries/dbdoc_engine/db_design_dynamic_table_commands.rb +106 -0
- data/app/queries/dbdoc_engine/db_design_dynamic_table_queries.rb +194 -0
- data/app/queries/dbdoc_engine/db_design_table_group_queries.rb +154 -0
- data/app/services/dbdoc_engine/db_design_dynamic_table_export_service.rb +38 -0
- data/app/services/dbdoc_engine/db_design_dynamic_table_handler_service.rb +49 -0
- data/app/services/dbdoc_engine/db_design_dynamic_tables_service.rb +21 -0
- data/app/services/dbdoc_engine/error_handler_service.rb +43 -0
- data/app/services/dbdoc_engine/schema_rb_import_service.rb +194 -0
- data/app/services/dbdoc_engine/schema_rb_parser_service.rb +339 -0
- data/app/services/dbdoc_engine/table_filter_service.rb +35 -0
- data/app/services/dbdoc_engine/table_groups_service.rb +199 -0
- data/app/services/dbdoc_engine/table_management_service.rb +192 -0
- data/app/views/dbdoc_engine/admin/dashboard/_action_badge.html.erb +11 -0
- data/app/views/dbdoc_engine/admin/dashboard/_changelog_rows.html.erb +22 -0
- data/app/views/dbdoc_engine/admin/dashboard/_changelog_table_headers.html.erb +8 -0
- data/app/views/dbdoc_engine/admin/dashboard/_filter_fields.html.erb +43 -0
- data/app/views/dbdoc_engine/admin/dashboard/index.html.erb +159 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_column_fields.html.erb +225 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_deleted_table_index.html.erb +110 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_foreign_key_fields.html.erb +51 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_form.html.erb +75 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_recent_activity.html.erb +39 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_table_columns.html.erb +127 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_table_index.html.erb +109 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_table_information.html.erb +99 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/deleted_tables.html.erb +95 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/edit.html.erb +23 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/export_all_to_excel.xlsx.axlsx +240 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/export_to_excel.xlsx.axlsx +135 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/index.html.erb +109 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/new.html.erb +25 -0
- data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/show_table_info.html.erb +125 -0
- data/app/views/dbdoc_engine/admin/db_design_table_groups/_deleted_table_groups_list.html.erb +75 -0
- data/app/views/dbdoc_engine/admin/db_design_table_groups/_form.html.erb +88 -0
- data/app/views/dbdoc_engine/admin/db_design_table_groups/_table_groups_list.html.erb +82 -0
- data/app/views/dbdoc_engine/admin/db_design_table_groups/deleted_groups.html.erb +60 -0
- data/app/views/dbdoc_engine/admin/db_design_table_groups/edit.html.erb +25 -0
- data/app/views/dbdoc_engine/admin/db_design_table_groups/index.html.erb +85 -0
- data/app/views/dbdoc_engine/admin/db_design_table_groups/new.html.erb +26 -0
- data/app/views/dbdoc_engine/db_doc_sessions/new.html.erb +59 -0
- data/app/views/dbdoc_engine/home/changelog_details.html.erb +80 -0
- data/app/views/dbdoc_engine/home/changelogs.html.erb +20 -0
- data/app/views/dbdoc_engine/home/group_details.html.erb +94 -0
- data/app/views/dbdoc_engine/home/index.html.erb +11 -0
- data/app/views/dbdoc_engine/home/partials/_action_badge.html.erb +11 -0
- data/app/views/dbdoc_engine/home/partials/_breadcrumb_navigation.html.erb +30 -0
- data/app/views/dbdoc_engine/home/partials/_changelog_rows.html.erb +35 -0
- data/app/views/dbdoc_engine/home/partials/_changelog_table_headers.html.erb +16 -0
- data/app/views/dbdoc_engine/home/partials/_column_headers.html.erb +23 -0
- data/app/views/dbdoc_engine/home/partials/_column_row.html.erb +157 -0
- data/app/views/dbdoc_engine/home/partials/_filter_form.html.erb +47 -0
- data/app/views/dbdoc_engine/home/partials/_group_section.html.erb +84 -0
- data/app/views/dbdoc_engine/home/partials/_pagination.html.erb +5 -0
- data/app/views/dbdoc_engine/home/partials/_stats_container.html.erb +46 -0
- data/app/views/dbdoc_engine/home/partials/_table_groups.html.erb +7 -0
- data/app/views/dbdoc_engine/home/partials/_table_information_section.html.erb +50 -0
- data/app/views/dbdoc_engine/home/partials/_table_section.html.erb +48 -0
- data/app/views/dbdoc_engine/home/table_details.html.erb +9 -0
- data/app/views/dbdoc_engine/schema_diagram/index.html.erb +102 -0
- data/app/views/dbdoc_engine/shared/_admin_header.html.erb +78 -0
- data/app/views/dbdoc_engine/shared/_header.html.erb +94 -0
- data/app/views/dbdoc_engine/shared/_js_translations.html.erb +3 -0
- data/app/views/dbdoc_engine/shared/_language_button.html.erb +14 -0
- data/app/views/dbdoc_engine/shared/_sidebar.html.erb +128 -0
- data/app/views/kaminari/dbdoc_engine/_first_page.html.erb +3 -0
- data/app/views/kaminari/dbdoc_engine/_gap.html.erb +3 -0
- data/app/views/kaminari/dbdoc_engine/_last_page.html.erb +3 -0
- data/app/views/kaminari/dbdoc_engine/_next_page.html.erb +3 -0
- data/app/views/kaminari/dbdoc_engine/_page.html.erb +9 -0
- data/app/views/kaminari/dbdoc_engine/_paginator.html.erb +17 -0
- data/app/views/kaminari/dbdoc_engine/_prev_page.html.erb +3 -0
- data/app/views/layouts/dbdoc_engine/application.html.erb +107 -0
- data/app/views/layouts/dbdoc_engine/header.html.erb +108 -0
- data/config/importmap.rb +11 -0
- data/config/locales/en.yml +307 -0
- data/config/locales/ja.yml +306 -0
- data/config/routes.rb +73 -0
- data/db/migrate/rails7/20250227060610_create_db_design_table_groups.rb +15 -0
- data/db/migrate/rails7/20250227094626_create_db_design_dynamic_tables.rb +19 -0
- data/db/migrate/rails7/20250228022732_create_db_design_dynamic_columns.rb +34 -0
- data/db/migrate/rails7/20250401051453_create_db_design_changelogs.rb +26 -0
- data/db/migrate/rails7/20250411040822_create_users.rb +14 -0
- data/db/migrate/rails7/20250421080851_add_missing_indexes_to_dbdoc_tables.rb +23 -0
- data/db/migrate/rails8/20250227060610_create_db_design_table_groups.rb +15 -0
- data/db/migrate/rails8/20250227094626_create_db_design_dynamic_tables.rb +19 -0
- data/db/migrate/rails8/20250228022732_create_db_design_dynamic_columns.rb +34 -0
- data/db/migrate/rails8/20250401051453_create_db_design_changelogs.rb +26 -0
- data/db/migrate/rails8/20250411040822_create_users.rb +14 -0
- data/db/migrate/rails8/20250421080851_add_missing_indexes_to_dbdoc_tables.rb +23 -0
- data/db/seeds.rb +28 -0
- data/lib/dbdoc_engine/engine.rb +57 -0
- data/lib/dbdoc_engine/version.rb +3 -0
- data/lib/dbdoc_engine.rb +9 -0
- data/lib/generators/dbdoc_engine/install/install_generator.rb +245 -0
- data/lib/generators/dbdoc_engine/uninstall/uninstall_generator.rb +196 -0
- data/lib/tasks/dbdoc_engine_tasks.rake +44 -0
- data/public/dbdoc_engine_assets/images/camel_chess_head.png +0 -0
- data/public/dbdoc_engine_assets/images/dblogo.svg +4 -0
- data/public/dbdoc_engine_assets/images/japan_circle.png +0 -0
- data/public/dbdoc_engine_assets/images/king_chess_head.png +0 -0
- data/public/dbdoc_engine_assets/images/login-bg.svg +44 -0
- data/public/dbdoc_engine_assets/images/logo.png +0 -0
- data/public/dbdoc_engine_assets/images/logo.svg +12 -0
- data/public/dbdoc_engine_assets/images/queen_chess_head.png +0 -0
- data/public/dbdoc_engine_assets/images/soldier_chess_headd.png +0 -0
- data/public/dbdoc_engine_assets/images/uk_circle_transparent.png +0 -0
- metadata +415 -0
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
<!-- Table row for a single column in the group/table details -->
|
|
2
|
+
<tr class='group-table-row table-details-row'>
|
|
3
|
+
<!-- Logical (display) name of the column, with group color dot -->
|
|
4
|
+
<td>
|
|
5
|
+
<div class='d-flex align-items-center truncate-text third-row third-color'>
|
|
6
|
+
<!-- Colored square representing the group color -->
|
|
7
|
+
<svg width='11' height='11' viewBox='0 0 11 11' xmlns='http://www.w3.org/2000/svg' class='me-2'>
|
|
8
|
+
<rect width='11' height='11' fill='<%= group.group_color %>' />
|
|
9
|
+
</svg>
|
|
10
|
+
<span><%= column.column_name %></span>
|
|
11
|
+
</div>
|
|
12
|
+
</td>
|
|
13
|
+
|
|
14
|
+
<!-- Physical column name in the database -->
|
|
15
|
+
<td>
|
|
16
|
+
<div class='third-color'><%= column.physical_column_name %></div>
|
|
17
|
+
</td>
|
|
18
|
+
|
|
19
|
+
<!-- Data type with info icon for tooltip -->
|
|
20
|
+
<td>
|
|
21
|
+
<div class='d-flex align-items-center third-color'>
|
|
22
|
+
<div class='truncate-text me-2'><%= column.data_type %></div>
|
|
23
|
+
<!-- Info icon triggers tooltip with data type details -->
|
|
24
|
+
<i class='bi bi-info-circle-fill info-icon'
|
|
25
|
+
data-action='click->table-details#toggleTooltip'
|
|
26
|
+
data-table-details-target='infoIcon'
|
|
27
|
+
data-type='<%= column.data_type %>'></i>
|
|
28
|
+
</div>
|
|
29
|
+
</td>
|
|
30
|
+
|
|
31
|
+
<!-- Length or size of the column -->
|
|
32
|
+
<td>
|
|
33
|
+
<span class='third-color'>
|
|
34
|
+
<%= column.length %>
|
|
35
|
+
</span>
|
|
36
|
+
</td>
|
|
37
|
+
|
|
38
|
+
<!-- Column settings: PK, NOT NULL, FK, Candidate, Indexed -->
|
|
39
|
+
<td>
|
|
40
|
+
<% if column.is_primary_key %>
|
|
41
|
+
<span class="badge bg-info me-1 mb-1 constraint-badge"
|
|
42
|
+
data-bs-toggle="tooltip"
|
|
43
|
+
data-bs-placement="right"
|
|
44
|
+
data-bs-custom-class="custom-tooltip"
|
|
45
|
+
data-bs-html="true"
|
|
46
|
+
title="<div class='type-tooltip-content'>
|
|
47
|
+
<div class='type-tooltip-heading'>PK</div>
|
|
48
|
+
<div class='type-tooltip-desc'>Uniquely identifies each row (primary key).<br>各行を一意に識別する主キー。</div>
|
|
49
|
+
</div>">🔑 PK</span>
|
|
50
|
+
<% end %>
|
|
51
|
+
<% if column.not_null %>
|
|
52
|
+
<span class="badge bg-secondary me-1 mb-1 constraint-badge"
|
|
53
|
+
data-bs-toggle="tooltip"
|
|
54
|
+
data-bs-placement="right"
|
|
55
|
+
data-bs-custom-class="custom-tooltip"
|
|
56
|
+
data-bs-html="true"
|
|
57
|
+
title="<div class='type-tooltip-content'>
|
|
58
|
+
<div class='type-tooltip-heading'>NOT NULL</div>
|
|
59
|
+
<div class='type-tooltip-desc'>This column cannot be empty.<br>このカラムは必ず値が必要です。</div>
|
|
60
|
+
</div>">NOT NULL</span>
|
|
61
|
+
<% end %>
|
|
62
|
+
<% if column.is_foreign_key %>
|
|
63
|
+
<span class="badge bg-darkblue me-1 mb-1 constraint-badge"
|
|
64
|
+
data-bs-toggle="tooltip"
|
|
65
|
+
data-bs-placement="right"
|
|
66
|
+
data-bs-custom-class="custom-tooltip"
|
|
67
|
+
data-bs-html="true"
|
|
68
|
+
title="<div class='type-tooltip-content'>
|
|
69
|
+
<div class='type-tooltip-heading'>FK</div>
|
|
70
|
+
<div class='type-tooltip-desc'>Links to another table (foreign key).<br>他のテーブルへの参照(外部キー)。</div>
|
|
71
|
+
</div>">🔑 FK</span>
|
|
72
|
+
<% end %>
|
|
73
|
+
<% if column.is_candidate_key %>
|
|
74
|
+
<span class="badge bg-orange me-1 mb-1 constraint-badge"
|
|
75
|
+
data-bs-toggle="tooltip"
|
|
76
|
+
data-bs-placement="right"
|
|
77
|
+
data-bs-custom-class="custom-tooltip"
|
|
78
|
+
data-bs-html="true"
|
|
79
|
+
title="<div class='type-tooltip-content'>
|
|
80
|
+
<div class='type-tooltip-heading'>CANDIDATE</div>
|
|
81
|
+
<div class='type-tooltip-desc'>Can uniquely identify rows (candidate key).<br>行を一意に識別できる候補キー。</div>
|
|
82
|
+
</div>">CANDIDATE</span>
|
|
83
|
+
<% end %>
|
|
84
|
+
<% if column.is_indexed %>
|
|
85
|
+
<span class="badge bg-green me-1 mb-1 constraint-badge"
|
|
86
|
+
data-bs-toggle="tooltip"
|
|
87
|
+
data-bs-placement="right"
|
|
88
|
+
data-bs-custom-class="custom-tooltip"
|
|
89
|
+
data-bs-html="true"
|
|
90
|
+
title="<div class='type-tooltip-content'>
|
|
91
|
+
<div class='type-tooltip-heading'>INDEXED</div>
|
|
92
|
+
<div class='type-tooltip-desc'>Speeds up searches (indexed column).<br>検索を高速化するインデックス付きカラム。</div>
|
|
93
|
+
</div>">INDEXED</span>
|
|
94
|
+
<% end %>
|
|
95
|
+
<% if column.is_unique_key %>
|
|
96
|
+
<span class="badge bg-yellow me-1 mb-1 constraint-badge"
|
|
97
|
+
data-bs-toggle="tooltip"
|
|
98
|
+
data-bs-placement="right"
|
|
99
|
+
data-bs-custom-class="custom-tooltip"
|
|
100
|
+
data-bs-html="true"
|
|
101
|
+
title="<div class='type-tooltip-content'>
|
|
102
|
+
<div class='type-tooltip-heading'>UNIQUE</div>
|
|
103
|
+
<div class='type-tooltip-desc'>Ensures all values are unique in this column.<br>このカラムの値がすべて一意であることを保証します。</div>
|
|
104
|
+
</div>">UNIQUE</span>
|
|
105
|
+
<% end %>
|
|
106
|
+
</td>
|
|
107
|
+
|
|
108
|
+
<!-- Foreign key reference: link to referenced table/column if available -->
|
|
109
|
+
<td>
|
|
110
|
+
<div>
|
|
111
|
+
<% if column.is_foreign_key && column.foreign_table_name.present? %>
|
|
112
|
+
<% foreign_table = DbdocEngine::DbDesignDynamicTableQueries.find_by_table_name(column.foreign_table_name) %>
|
|
113
|
+
<% if foreign_table %>
|
|
114
|
+
<!-- Link to referenced table details page -->
|
|
115
|
+
<a href='<%= dbdoc_engine.table_details_path(foreign_table.id) %>' class='table-link'>
|
|
116
|
+
<%= column.foreign_table_name %>.<%= column.foreign_column_name %>
|
|
117
|
+
</a>
|
|
118
|
+
<% else %>
|
|
119
|
+
<!-- Show reference as plain text if table not found -->
|
|
120
|
+
<%= column.foreign_table_name %>.<%= column.foreign_column_name %>
|
|
121
|
+
<% end %>
|
|
122
|
+
<% end %>
|
|
123
|
+
</div>
|
|
124
|
+
</td>
|
|
125
|
+
|
|
126
|
+
<!-- Default value for the column, or 'N/A' if not set -->
|
|
127
|
+
<td>
|
|
128
|
+
<div class='text-secondary'>
|
|
129
|
+
<%= column.default_value || 'N/A' %>
|
|
130
|
+
</div>
|
|
131
|
+
</td>
|
|
132
|
+
|
|
133
|
+
<!-- Sample value for the column, or 'N/A' if not set -->
|
|
134
|
+
<td>
|
|
135
|
+
<div class='text-secondary'>
|
|
136
|
+
<%= column.sample_value || 'N/A' %>
|
|
137
|
+
</div>
|
|
138
|
+
</td>
|
|
139
|
+
|
|
140
|
+
<!-- Decimal Precision for the column, or 'N/A' if not set -->
|
|
141
|
+
<td>
|
|
142
|
+
<div class='text-secondary'>
|
|
143
|
+
<%= column.decimal_precision || 'N/A' %>
|
|
144
|
+
</div>
|
|
145
|
+
</td>
|
|
146
|
+
|
|
147
|
+
<!-- Remarks or description for the column -->
|
|
148
|
+
<td>
|
|
149
|
+
<div class='column-description text-truncate third-color' title='<%= column.description %>'>
|
|
150
|
+
<% if column.description.present? %>
|
|
151
|
+
<%= column.description.split.first(10).join(' ') %><%= column.description.split.count > 10 ? '...' : '' %>
|
|
152
|
+
<% else %>
|
|
153
|
+
<small>-</small>
|
|
154
|
+
<% end %>
|
|
155
|
+
</div>
|
|
156
|
+
</td>
|
|
157
|
+
</tr>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!-- Card container for the changelog filter form -->
|
|
2
|
+
<div class='card mb-4'>
|
|
3
|
+
<div class='card-body changelog-above'>
|
|
4
|
+
<!-- Form for filtering changelogs, using the GET method to maintain parameters in the URL -->
|
|
5
|
+
<%= form_tag dbdoc_engine.changelogs_path, method: :get, class: 'row g-3' do %>
|
|
6
|
+
|
|
7
|
+
<!-- Dropdown to select the entity type (e.g., Table, Column, User) -->
|
|
8
|
+
<div class='col-md-4'>
|
|
9
|
+
<label class='form-label lable'><%= t('dbdoc.entity_type') %></label>
|
|
10
|
+
<%= select_tag :entity_type, options_for_select(entity_type_options, selected: params[:entity_type]), class: 'form-select salect' %>
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
<!-- Dropdown to select the action type (e.g., Create, Update, Delete) -->
|
|
14
|
+
<div class='col-md-4'>
|
|
15
|
+
<label class='form-label lable'><%= t('dbdoc.action_type') %></label>
|
|
16
|
+
<%= select_tag :action_type, options_for_select(action_type_options, selected: params[:action_type]), class: 'form-select salect' %>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
<!-- Input field to filter by entity name -->
|
|
20
|
+
<div class='col-md-4'>
|
|
21
|
+
<label class='form-label lable'><%= t('dbdoc.entity_name') %></label>
|
|
22
|
+
<%= text_field_tag :entity_name, params[:entity_name], placeholder: 'Filter by name', class: 'form-control cantrol' %>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<!-- Date picker to select the start date for filtering -->
|
|
26
|
+
<div class='col-md-4'>
|
|
27
|
+
<label class='form-label lable'><%= t('dbdoc.date_from') %></label>
|
|
28
|
+
<%= date_field_tag :date_from, params[:date_from], class: 'form-control cantrol' %>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<!-- Date picker to select the end date for filtering -->
|
|
32
|
+
<div class='col-md-4'>
|
|
33
|
+
<label class='form-label lable'><%= t('dbdoc.date_to') %></label>
|
|
34
|
+
<%= date_field_tag :date_to, params[:date_to], class: 'form-control cantrol' %>
|
|
35
|
+
</div>
|
|
36
|
+
|
|
37
|
+
<!-- Buttons to apply or clear filters -->
|
|
38
|
+
<div class='col-md-4 d-flex align-items-end justify-content-end'>
|
|
39
|
+
<%= submit_tag t('dbdoc.apply_filters'), class: 'btn applybutton me-2' %>
|
|
40
|
+
<!-- Link to reset filters and reload the changelogs page -->
|
|
41
|
+
<%= link_to t('dbdoc.clear'), dbdoc_engine.changelogs_path, class: 'btn clear-button' %>
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
<% end %>
|
|
45
|
+
<!-- End of form -->
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<!-- Group section with a colored left border based on the group's color -->
|
|
2
|
+
<div class='bg-white rounded-1 shadow-sm mb-4 group-section' style='border-left: 4px solid <%= group.group_color %>;'>
|
|
3
|
+
|
|
4
|
+
<!-- Group Header Section -->
|
|
5
|
+
<div class='d-flex align-items-center justify-content-between py-2 px-3 shadow-sm group-header' data-action='click->ecommerce#toggleGroupContentHeader'>
|
|
6
|
+
<div class='main-left'>
|
|
7
|
+
<div class='d-flex align-items-center me-3 group-header-left'>
|
|
8
|
+
<%# Group table count badge with semi-transparent background %>
|
|
9
|
+
<div class='badge d-inline-flex align-items-center justify-content-center rounded-circle ms-2 fw-bold group-count-badge' style='<%= group_badge_style(group) %>'>
|
|
10
|
+
<%= group.db_design_dynamic_tables.size %>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
<span class='group-name'><%= group.group_name %></span>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<%# Toggle button to show/hide group content %>
|
|
17
|
+
<button class='border-0 rounded-pill fw-medium fs-7 py-1 px-4 view-button'
|
|
18
|
+
data-ecommerce-target='viewButton'
|
|
19
|
+
data-action='click->ecommerce#toggleGroupContent'>
|
|
20
|
+
<%= t('dbdoc.view') %>
|
|
21
|
+
</button>
|
|
22
|
+
</div>
|
|
23
|
+
|
|
24
|
+
<!-- Collapsible group content (initially hidden) -->
|
|
25
|
+
<div class='group-content' data-ecommerce-target='groupContent'>
|
|
26
|
+
<%# Table listing with headers included in the table %>
|
|
27
|
+
<div class='group-content-inner table-responsive'>
|
|
28
|
+
<table class='content-table'>
|
|
29
|
+
<thead>
|
|
30
|
+
<tr class='group-content-header'>
|
|
31
|
+
<th class='group-content-names ecommercename' width='25%'><%= t('dbdoc.name') %></th>
|
|
32
|
+
<th class='group-content-names' width='25%'><%= t('dbdoc.physicalname') %></th>
|
|
33
|
+
<th class='group-content-names' width='15%'><%= t('dbdoc.columns') %></th>
|
|
34
|
+
<th class='group-content-notes' width='30%'><%= t('dbdoc.remarks') %></th>
|
|
35
|
+
</tr>
|
|
36
|
+
</thead>
|
|
37
|
+
<tbody>
|
|
38
|
+
<% if group.db_design_dynamic_tables.any? %>
|
|
39
|
+
<% group.db_design_dynamic_tables.each do |table| %>
|
|
40
|
+
<tr class='group-table-row ecommercerow' data-table-link='<%= dbdoc_engine.table_details_path(table.id) %>'>
|
|
41
|
+
<%# Table name with colored square icon %>
|
|
42
|
+
<td class='group-table-names name-column'>
|
|
43
|
+
<svg width='11' height='11' viewBox='0 0 11 11' xmlns='http://www.w3.org/2000/svg'>
|
|
44
|
+
<rect width='11' height='11' fill='<%= group.group_color %>'/>
|
|
45
|
+
</svg>
|
|
46
|
+
<a href='<%= dbdoc_engine.table_details_path(table.id) %>' class='table-link'>
|
|
47
|
+
<span><%= table.table_name %></span>
|
|
48
|
+
</a>
|
|
49
|
+
</td>
|
|
50
|
+
|
|
51
|
+
<%# Japanese/physical table name %>
|
|
52
|
+
<td class='group-table-names japanese-name-column'>
|
|
53
|
+
<span><%= table.physical_table_name || 'N/A' %></span>
|
|
54
|
+
</td>
|
|
55
|
+
|
|
56
|
+
<%# Column count %>
|
|
57
|
+
<td class='ms-3 group-table-names count-column'>
|
|
58
|
+
<%= table_column_count(table) %>
|
|
59
|
+
</td>
|
|
60
|
+
|
|
61
|
+
<%# Table description %>
|
|
62
|
+
<td class='group-table-notes notes-column'>
|
|
63
|
+
<div class='column-description text-truncate third-color' title='<%= table.description %>'>
|
|
64
|
+
<% if table.description.present? %>
|
|
65
|
+
<%= table.description.split.first(6).join(' ') %><%= table.description.split.count > 6 ? '...' : '' %>
|
|
66
|
+
<% else %>
|
|
67
|
+
<small>-</small>
|
|
68
|
+
<% end %>
|
|
69
|
+
</div>
|
|
70
|
+
</td>
|
|
71
|
+
</tr>
|
|
72
|
+
<% end %>
|
|
73
|
+
<% else %>
|
|
74
|
+
<tr>
|
|
75
|
+
<td colspan='4' class='notablesmessage'>
|
|
76
|
+
<%= t('dbdoc.no_tables_created_in_this_group_yet') %>
|
|
77
|
+
</td>
|
|
78
|
+
</tr>
|
|
79
|
+
<% end %>
|
|
80
|
+
</tbody>
|
|
81
|
+
</table>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<div class='d-flex align-items-center flex-wrap justify-content-start gap-3 mb-4 p-0 stats-container'>
|
|
2
|
+
<%# Tables Statistics %>
|
|
3
|
+
<div class='d-flex align-items-center justify-content-start rounded-1 stats-item'>
|
|
4
|
+
<div class='stats-item-icon tables'>
|
|
5
|
+
<%# Displays an icon representing database tables %>
|
|
6
|
+
<%= image_tag 'dbdoc_engine/table_dbdocs.svg', alt: 'Tables', width: 40, height: 40 %>
|
|
7
|
+
</div>
|
|
8
|
+
<div class='stats-item-content'>
|
|
9
|
+
<span class='stats-item-count' data-ecommerce-target='tablesCount'>
|
|
10
|
+
<%= dynamic_table_count %>
|
|
11
|
+
</span>
|
|
12
|
+
<%# Label for the tables count %>
|
|
13
|
+
<small class='stats-item-label'><%= t('dbdoc.tables') %></small>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
<%# Fields Statistics %>
|
|
17
|
+
<div class='d-flex align-items-center justify-content-start rounded-1 stats-item'>
|
|
18
|
+
<div class='stats-item-icon fields'>
|
|
19
|
+
<%# Displays an icon representing database fields/columns %>
|
|
20
|
+
<%= image_tag 'dbdoc_engine/column_stats_dbdocs.svg', alt: 'Fields', width: 40, height: 40 %>
|
|
21
|
+
</div>
|
|
22
|
+
<div class='stats-item-content'>
|
|
23
|
+
<%# Displays the total count of dynamically created tables %>
|
|
24
|
+
<span class='stats-item-count' data-ecommerce-target='fieldsCount'>
|
|
25
|
+
<%= dynamic_column_count %>
|
|
26
|
+
</span>
|
|
27
|
+
<%# Label for the fields count %>
|
|
28
|
+
<small class='stats-item-label'><%= t('dbdoc.fields') %></small>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<%# Updates Statistics %>
|
|
32
|
+
<div class='d-flex align-items-center justify-content-start rounded-1 stats-item'>
|
|
33
|
+
<div class='stats-item-icon updates'>
|
|
34
|
+
<%# Displays an icon representing database updates/changelog %>
|
|
35
|
+
<%= image_tag 'dbdoc_engine/update_stats_dbdocs.svg', alt: 'Updates', width: 40, height: 40 %>
|
|
36
|
+
</div>
|
|
37
|
+
<div class='stats-item-content'>
|
|
38
|
+
<%# Displays the total count of changelog entries (updates) %>
|
|
39
|
+
<span class='stats-item-count'>
|
|
40
|
+
<%= changelog_count %>
|
|
41
|
+
</span>
|
|
42
|
+
<%# Label for the updates count %>
|
|
43
|
+
<small class='stats-item-label'><%= t('dbdoc.updates') %></small>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<div class='table-groups' data-ecommerce-target='tableGroups'>
|
|
2
|
+
<%# Iterate through each table group, including associated dynamic tables to optimize queries %>
|
|
3
|
+
<% fetch_table_groups.each do |group| %>
|
|
4
|
+
<%# Render the partial for each group, passing the group object %>
|
|
5
|
+
<%= render 'dbdoc_engine/home/partials/group_section', group: group %>
|
|
6
|
+
<% end %>
|
|
7
|
+
</div>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<div class='shadow rounded-3 main-content-body mb-3' data-controller='table-details'>
|
|
2
|
+
<%= render 'dbdoc_engine/home/partials/breadcrumb_navigation', locals: { group: group, table: table } %>
|
|
3
|
+
<div class='table-information-below rounded-1'>
|
|
4
|
+
<div class='d-flex align-items-center justify-content-between py-2 px-3 shadow-sm group-header'
|
|
5
|
+
data-action='click->table-details#toggleFieldsHeader'>
|
|
6
|
+
<div class='main-left'>
|
|
7
|
+
<div class='d-flex align-items-center me-3 group-header-left'>
|
|
8
|
+
<div class='badge d-inline-flex align-items-center justify-content-center rounded-circle ms-2 fw-bold group-count-badge'
|
|
9
|
+
style='background-color: rgba(83, 102, 160, 0.3); color: #5366A0; width: 23px; height: 22px;'>
|
|
10
|
+
<i class="bi bi-info-circle-fill" style="color: #5366A0; font-size: 14px;"></i>
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
<span class='group-name'><%= t('dbdoc.table_information') %></span>
|
|
14
|
+
</div>
|
|
15
|
+
<button class='border-0 rounded-pill fw-medium fs-7 py-1 px-4 view-button active'>
|
|
16
|
+
<%= t('dbdoc.view') %>
|
|
17
|
+
</button>
|
|
18
|
+
</div>
|
|
19
|
+
<div class='group-content active' data-table-details-target='fieldsContent'>
|
|
20
|
+
<div class="container-fluid ps-4">
|
|
21
|
+
<div class="row table-info-row">
|
|
22
|
+
<div class="col-md-4 col-12 table-info-col">
|
|
23
|
+
<div class="table-info-label"><%= t('dbdoc.table_name') %></div>
|
|
24
|
+
<div class="table-info-value"><%= table.table_name %></div>
|
|
25
|
+
<div class="table-info-label"><%= t('dbdoc.physical_table_name') %></div>
|
|
26
|
+
<div class="table-info-value"><%= table.physical_table_name %></div>
|
|
27
|
+
</div>
|
|
28
|
+
<div class="col-md-4 col-12 table-info-col">
|
|
29
|
+
<div class="table-info-label"><%= t('dbdoc.created_by') %></div>
|
|
30
|
+
<div class="table-info-value"><%= table.created_by %></div>
|
|
31
|
+
<div class="table-info-label"><%= t('dbdoc.created_at') %></div>
|
|
32
|
+
<div class="table-info-value"><%= table.created_at&.strftime('%Y-%m-%d %H:%M:%S') %></div>
|
|
33
|
+
</div>
|
|
34
|
+
<div class="col-md-4 col-12 table-info-col">
|
|
35
|
+
<div class="table-info-label"><%= t('dbdoc.updated_by') %></div>
|
|
36
|
+
<div class="table-info-value"><%= table.updated_by %></div>
|
|
37
|
+
<div class="table-info-label"><%= t('dbdoc.updated_at') %></div>
|
|
38
|
+
<div class="table-info-value"><%= table.updated_at&.strftime('%Y-%m-%d %H:%M:%S') %></div>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
<div class="row">
|
|
42
|
+
<div class="col-12">
|
|
43
|
+
<div class="table-info-label mb-1"><%= t('dbdoc.remarks') %></div>
|
|
44
|
+
<div class="table-info-value"><%= table.description %></div>
|
|
45
|
+
</div>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!-- Group section: displays a table and its columns, styled with the group's color -->
|
|
2
|
+
<div class='bg-white rounded-1 shadow-sm mb-4 group-section' style='border-left: 4px solid <%= group.group_color %>;'>
|
|
3
|
+
<!-- Group header row, clickable to toggle fields visibility -->
|
|
4
|
+
<div class='d-flex align-items-center justify-content-between py-2 px-3 shadow-sm group-header' data-action='click->table-details#toggleFieldsHeader'>
|
|
5
|
+
<div class='main-left'>
|
|
6
|
+
<div class='d-flex align-items-center me-3 group-header-left'>
|
|
7
|
+
<!-- Badge showing the number of columns, with semi-transparent background in group color -->
|
|
8
|
+
<div class='badge d-inline-flex align-items-center justify-content-center rounded-circle ms-2 fw-bold group-count-badge'
|
|
9
|
+
style='background-color: rgba(<%= group.group_color.delete('#').scan(/../).map{|h| h.to_i(16)}.join(', ') %>, 0.3);
|
|
10
|
+
color: <%= group.group_color %>;'>
|
|
11
|
+
<%= columns_count %>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
<!-- Table name (logical name) -->
|
|
15
|
+
<span class='group-name'><%= table.table_name %></span>
|
|
16
|
+
</div>
|
|
17
|
+
<!-- Button to toggle the visibility of the columns/fields -->
|
|
18
|
+
<button class='border-0 rounded-pill fw-medium fs-7 py-1 px-4 view-button active'>
|
|
19
|
+
<%= t('dbdoc.view') %>
|
|
20
|
+
</button>
|
|
21
|
+
</div>
|
|
22
|
+
<!-- Group content: the list of columns for this table, initially visible -->
|
|
23
|
+
<div class='group-content active' data-table-details-target='fieldsContent'>
|
|
24
|
+
<div class='table-responsive'>
|
|
25
|
+
<table class='table mb-0 fs-6'>
|
|
26
|
+
<thead class='table-secondary bg-light'>
|
|
27
|
+
<!-- Render the table header row for columns -->
|
|
28
|
+
<%= render 'dbdoc_engine/home/partials/column_headers' %>
|
|
29
|
+
</thead>
|
|
30
|
+
<tbody>
|
|
31
|
+
<% if columns_count == 0 %>
|
|
32
|
+
<!-- Show message if there are no columns in this table -->
|
|
33
|
+
<tr>
|
|
34
|
+
<td colspan="8" class='no-tables-message ps-4 text-secondary'>
|
|
35
|
+
<%= t('dbdoc.no_tables_created_in_this_group_yet') %>
|
|
36
|
+
</td>
|
|
37
|
+
</tr>
|
|
38
|
+
<% else %>
|
|
39
|
+
<!-- Render each column row for this table -->
|
|
40
|
+
<% table.db_design_dynamic_columns.each do |column| %>
|
|
41
|
+
<%= render 'dbdoc_engine/home/partials/column_row', column: column, group: group %>
|
|
42
|
+
<% end %>
|
|
43
|
+
<% end %>
|
|
44
|
+
</tbody>
|
|
45
|
+
</table>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<div class='table-details-content' data-controller='table-details'>
|
|
2
|
+
<div class='table-detains-width py-4 pe-4'>
|
|
3
|
+
<%= render 'dbdoc_engine/home/partials/table_information_section', group: @group, table: @table %>
|
|
4
|
+
<div style="margin-bottom: 20px;"></div>
|
|
5
|
+
<div class='shadow rounded-3 main-content-body'>
|
|
6
|
+
<%= render 'dbdoc_engine/home/partials/table_section', group: @group, table: @table, columns_count: @columns_count %>
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
<div class="container-fluid py-2 px-3" data-controller="schema-diagram">
|
|
2
|
+
<div class="card mb-2">
|
|
3
|
+
<div class="card-header head-schema ps-1">
|
|
4
|
+
<h4 class="mb-0"><%= t('dbdoc.database_schema_diagram') %></h4>
|
|
5
|
+
</div>
|
|
6
|
+
<div class="card-body">
|
|
7
|
+
<div class="row align-items-center">
|
|
8
|
+
<div class="col-md-5 mb-2 mb-md-0 ps-0">
|
|
9
|
+
<label for="group-select" class="lable-schema form-label mb-0"><%= t('dbdoc.filter_by_group') %> </label>
|
|
10
|
+
<select id="group-select"
|
|
11
|
+
data-schema-diagram-target="groupSelect"
|
|
12
|
+
class="dropdown-schema form-select mt-1">
|
|
13
|
+
<option value="all"><%= t('dbdoc.all_groups_highlight') %></option>
|
|
14
|
+
<% @groups.each do |group| %>
|
|
15
|
+
<% if group.db_design_dynamic_tables.any? { |table| table.db_design_dynamic_columns.any? } %>
|
|
16
|
+
<option value="<%= group.id %>"><%= t('dbdoc.highlight') %><%= group.group_name %></option>
|
|
17
|
+
<% end %>
|
|
18
|
+
<% end %>
|
|
19
|
+
</select>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="col-md-7 text-md-end">
|
|
22
|
+
<div class="btn-group" role="group">
|
|
23
|
+
<button type="button" data-schema-diagram-target="zoomIn" class="btn rounded-circle p-2 mx-1 diagram-btn">
|
|
24
|
+
<i class="bi bi-plus fs-5"></i>
|
|
25
|
+
</button>
|
|
26
|
+
<button type="button" data-schema-diagram-target="zoomOut" class="btn rounded-circle p-2 mx-1 diagram-btn">
|
|
27
|
+
<i class="bi bi-dash fs-5"></i>
|
|
28
|
+
</button>
|
|
29
|
+
<button type="button" data-schema-diagram-target="resetView" class="btn rounded-circle p-2 mx-1 diagram-btn">
|
|
30
|
+
<i class="bi bi-arrow-repeat fs-5"></i>
|
|
31
|
+
</button>
|
|
32
|
+
</div>
|
|
33
|
+
<!-- Add download buttons below the zoom controls -->
|
|
34
|
+
<div class="btn-group" role="group">
|
|
35
|
+
<button data-action="click->schema-diagram#downloadPNG" class="btn rounded-circle p-2 mx-1 diagram-btn" title="Download PNG">
|
|
36
|
+
<i class="bi bi-filetype-png fs-5"></i>
|
|
37
|
+
</button>
|
|
38
|
+
<button data-action="click->schema-diagram#downloadPDF" class="btn rounded-circle p-2 mx-1 diagram-btn" title="Download PDF">
|
|
39
|
+
<i class="bi bi-filetype-pdf fs-5"></i>
|
|
40
|
+
</button>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
|
|
47
|
+
<div id="schema-diagram"
|
|
48
|
+
data-schema-diagram-target="diagram"
|
|
49
|
+
class="bg-white border rounded shadow p-3 mb-4"
|
|
50
|
+
style="min-height: 500px; overflow: auto; cursor: grab; position: relative;">
|
|
51
|
+
<div class="d-flex justify-content-center align-items-center h-100">
|
|
52
|
+
<span class="text-muted fst-italic"><%= t('dbdoc.Loading_schema_diagram') %></span>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<!-- Updated Legend Section -->
|
|
57
|
+
<div class="shadow rounded-3 main-content-body mb-3 ms-0">
|
|
58
|
+
<div class="table-information-below shadow rounded-3">
|
|
59
|
+
<div class="d-flex align-items-center justify-content-between py-2 px-3 shadow-sm group-header">
|
|
60
|
+
<div class="main-left">
|
|
61
|
+
<div class="d-flex align-items-center me-3 group-header-left">
|
|
62
|
+
<div class="badge d-inline-flex align-items-center justify-content-center rounded-circle ms-2 fw-bold group-count-badge"
|
|
63
|
+
style="background-color: rgba(83, 102, 160, 0.3); color: #5366A0; width: 23px; height: 22px;">
|
|
64
|
+
<i class="bi bi-info-circle-fill" style="color: #5366A0; font-size: 14px;"></i>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
<span class="group-name"><%= t('dbdoc.Legend') %></span>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
<div class="group-content active">
|
|
71
|
+
<div class="container-fluid ps-4">
|
|
72
|
+
<div class="row">
|
|
73
|
+
<div class="col-md-8 col-12">
|
|
74
|
+
<div class="table-info-label mb-2"><%= t('dbdoc.tablegroups') %></div>
|
|
75
|
+
<div class="d-flex flex-wrap gap-3">
|
|
76
|
+
<% @groups.each do |group| %>
|
|
77
|
+
<span class="badge rounded-pill px-3 py-2 me-2 mb-2 text-white" style="background-color: <%= group.group_color %>;">
|
|
78
|
+
<%= group.group_name %>
|
|
79
|
+
</span>
|
|
80
|
+
<% end %>
|
|
81
|
+
</div>
|
|
82
|
+
<div class="table-info-value mt-2">
|
|
83
|
+
<small class="text-muted">
|
|
84
|
+
<i class="fa fa-info-circle"></i>
|
|
85
|
+
<%= t('dbdoc.legend_info') %>
|
|
86
|
+
</small>
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
<div class="col-md-4 col-12">
|
|
90
|
+
<div class="table-info-label mb-2"><%= t('dbdoc.column_attributes') %></div>
|
|
91
|
+
<div class="d-flex flex-column gap-2">
|
|
92
|
+
<div class="table-info-value"><span>🔑</span><%= t('dbdoc.PK') %></div>
|
|
93
|
+
<div class="table-info-value"><span>🔗</span><%= t('dbdoc.FK') %></div>
|
|
94
|
+
<div class="table-info-value"><span><small>NN</small></span><%= t('dbdoc.NN') %></div>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
</div>
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
<nav class='navbar navbar-expand-lg navbar-dark shadow-sm admin-navbar'>
|
|
2
|
+
<div class='container-fluid'>
|
|
3
|
+
<!-- Admin Panel Brand -->
|
|
4
|
+
<a class='navbar-brand fw-bold text-white d-flex align-items-center p-2 <%= 'active' if controller_path == 'dbdoc_engine/admin/dashboard' %>' href='<%= admin_dashboard_path %>'>
|
|
5
|
+
<i class='bi bi-person-fill-gear me-2'></i><%= t('dbdoc.admin_panel') %>
|
|
6
|
+
</a>
|
|
7
|
+
|
|
8
|
+
<!-- Navbar Toggler Button for Mobile View -->
|
|
9
|
+
<button class='navbar-toggler' type='button' data-bs-toggle='collapse' data-bs-target='#adminNavbar'>
|
|
10
|
+
<span class='navbar-toggler-icon'></span>
|
|
11
|
+
</button>
|
|
12
|
+
|
|
13
|
+
<div class='collapse navbar-collapse' id='adminNavbar'>
|
|
14
|
+
<!-- Left-aligned Navigation Links -->
|
|
15
|
+
<ul class='navbar-nav'>
|
|
16
|
+
<% if current_user && current_user.admin_or_higher? %>
|
|
17
|
+
<li class='nav-item ms-1'>
|
|
18
|
+
<%= link_to t('dbdoc.table_groups_header'), dbdoc_engine.admin_db_design_table_groups_path, class: "nav-link #{admin_nav_active?('db_design_table_groups') ? 'active' : ''}" %>
|
|
19
|
+
</li>
|
|
20
|
+
<% end %>
|
|
21
|
+
<li class='nav-item ms-1'>
|
|
22
|
+
<%= link_to t('dbdoc.dynamic_tables_header'), dbdoc_engine.admin_db_design_dynamic_tables_path, class: "nav-link #{admin_nav_active?('db_design_dynamic_tables') ? 'active' : ''}" %>
|
|
23
|
+
</li>
|
|
24
|
+
</ul>
|
|
25
|
+
|
|
26
|
+
<!-- Right-aligned Controls -->
|
|
27
|
+
<div class='nav-controls ms-auto d-flex align-items-center'>
|
|
28
|
+
<!-- Back to Main Project Button (pill-shaped, left of home button) -->
|
|
29
|
+
<a href="/"
|
|
30
|
+
class="back-main-btn d-flex align-items-center justify-content-center fw-bold border-0 me-2"
|
|
31
|
+
title="<%= t('dbdoc.back_to_main_project') %>"
|
|
32
|
+
style="margin-right:10px;">
|
|
33
|
+
<%= t('dbdoc.back_to_main_project') %>
|
|
34
|
+
</a>
|
|
35
|
+
|
|
36
|
+
<!-- Home Button with Circle Background -->
|
|
37
|
+
<%= link_to dbdoc_engine.root_path, class: 'home-circle-btn d-flex align-items-center justify-content-center me-2', title: t('dbdoc.home') do %>
|
|
38
|
+
<i class='bi bi-house-door homebread'></i>
|
|
39
|
+
<% end %>
|
|
40
|
+
|
|
41
|
+
<!-- Language Toggle Button -->
|
|
42
|
+
<%= render 'dbdoc_engine/shared/language_button' %>
|
|
43
|
+
|
|
44
|
+
<!-- User Role Icon with Circle Background -->
|
|
45
|
+
<% if current_user %>
|
|
46
|
+
<div class='dropdown role-dropdown'>
|
|
47
|
+
<button class='d-flex align-items-center justify-content-center rounded-circle border-0 p-0 position-relative overflow-hidden role-circle-btn dropdown-toggle' type='button' id='userDropdown' data-bs-toggle='dropdown' aria-expanded='false'>
|
|
48
|
+
<!-- Blue background circle with chess image inside -->
|
|
49
|
+
<span class='right-avatar-img-bg d-flex align-items-center justify-content-center'>
|
|
50
|
+
<% if current_user.role == 'superadmin' %>
|
|
51
|
+
<img src='/dbdoc_engine_assets/images/king_chess_head.png' alt='Superadmin' class='rounded-circle mt-2 right-avatar' />
|
|
52
|
+
<% elsif current_user.role == 'admin' %>
|
|
53
|
+
<img src='/dbdoc_engine_assets/images/queen_chess_head.png' alt='Admin' class='rounded-circle mt-2 right-avatar' />
|
|
54
|
+
<% else %>
|
|
55
|
+
<img src='/dbdoc_engine_assets/images/camel_chess_head.png' alt='User' class='rounded-circle mt-2 right-avatar' />
|
|
56
|
+
<% end %>
|
|
57
|
+
</span>
|
|
58
|
+
</button>
|
|
59
|
+
<ul class='dropdown-menu dropdown-menu-end' aria-labelledby='userDropdown'>
|
|
60
|
+
<li>
|
|
61
|
+
<%= button_to dbdoc_engine.logout_path, method: :delete, form: { data: { turbo: false } }, class: 'dropdown-item text-danger px-2 py-1 log-out-text' do %>
|
|
62
|
+
<i class='bi bi-box-arrow-right me-1'></i>
|
|
63
|
+
<%= t('dbdoc.logout') %>
|
|
64
|
+
<% end %>
|
|
65
|
+
</li>
|
|
66
|
+
</ul>
|
|
67
|
+
</div>
|
|
68
|
+
<% else %>
|
|
69
|
+
<div class='nav-item'>
|
|
70
|
+
<%= link_to dbdoc_engine.login_path, class: 'nav-link' do %>
|
|
71
|
+
<i class='bi bi-box-arrow-in-right me-1'></i><%= t('dbdoc.login') %>
|
|
72
|
+
<% end %>
|
|
73
|
+
</div>
|
|
74
|
+
<% end %>
|
|
75
|
+
</div>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</nav>
|