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.
Files changed (198) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +331 -0
  3. data/Rakefile +8 -0
  4. data/app/assets/builds/dbdoc_engine/application.css +5 -0
  5. data/app/assets/images/dbdoc_engine/arrowdown.svg +3 -0
  6. data/app/assets/images/dbdoc_engine/arrowhorizontal.svg +3 -0
  7. data/app/assets/images/dbdoc_engine/arrowleft.svg +3 -0
  8. data/app/assets/images/dbdoc_engine/changelog.svg +3 -0
  9. data/app/assets/images/dbdoc_engine/column_stats_dbdocs.svg +23 -0
  10. data/app/assets/images/dbdoc_engine/diagram.svg +3 -0
  11. data/app/assets/images/dbdoc_engine/double_arrow.svg +4 -0
  12. data/app/assets/images/dbdoc_engine/group_bu.svg +3 -0
  13. data/app/assets/images/dbdoc_engine/japan_circle.png +0 -0
  14. data/app/assets/images/dbdoc_engine/log_in_image.png +0 -0
  15. data/app/assets/images/dbdoc_engine/logo.svg +12 -0
  16. data/app/assets/images/dbdoc_engine/orange_changelog.svg +3 -0
  17. data/app/assets/images/dbdoc_engine/orange_fields.svg +23 -0
  18. data/app/assets/images/dbdoc_engine/orange_logo.svg +12 -0
  19. data/app/assets/images/dbdoc_engine/orange_table.svg +21 -0
  20. data/app/assets/images/dbdoc_engine/orange_updates.svg +43 -0
  21. data/app/assets/images/dbdoc_engine/orange_wiki.svg +3 -0
  22. data/app/assets/images/dbdoc_engine/search.svg +3 -0
  23. data/app/assets/images/dbdoc_engine/setting.svg +3 -0
  24. data/app/assets/images/dbdoc_engine/table_dbdocs.svg +21 -0
  25. data/app/assets/images/dbdoc_engine/uk_circle_transparent.png +0 -0
  26. data/app/assets/images/dbdoc_engine/update_stats_dbdocs.svg +43 -0
  27. data/app/assets/images/dbdoc_engine/wiki.svg +3 -0
  28. data/app/assets/stylesheets/dbdoc_engine/admin.css +176 -0
  29. data/app/assets/stylesheets/dbdoc_engine/admin_header.css +179 -0
  30. data/app/assets/stylesheets/dbdoc_engine/application.scss +1 -0
  31. data/app/assets/stylesheets/dbdoc_engine/changelog.css +173 -0
  32. data/app/assets/stylesheets/dbdoc_engine/dashboard.css +513 -0
  33. data/app/assets/stylesheets/dbdoc_engine/dbdoc_application.css +117 -0
  34. data/app/assets/stylesheets/dbdoc_engine/ecommerce.css +253 -0
  35. data/app/assets/stylesheets/dbdoc_engine/group_details.css +178 -0
  36. data/app/assets/stylesheets/dbdoc_engine/header.css +212 -0
  37. data/app/assets/stylesheets/dbdoc_engine/loading_spinner.css +127 -0
  38. data/app/assets/stylesheets/dbdoc_engine/login.css +213 -0
  39. data/app/assets/stylesheets/dbdoc_engine/schema_diagram.css +149 -0
  40. data/app/assets/stylesheets/dbdoc_engine/sidebar.css +296 -0
  41. data/app/assets/stylesheets/dbdoc_engine/table_details.css +417 -0
  42. data/app/controllers/dbdoc_engine/admin/base_controller.rb +23 -0
  43. data/app/controllers/dbdoc_engine/admin/dashboard_controller.rb +16 -0
  44. data/app/controllers/dbdoc_engine/admin/data_transfer_controller.rb +63 -0
  45. data/app/controllers/dbdoc_engine/admin/db_design_dynamic_tables_controller.rb +198 -0
  46. data/app/controllers/dbdoc_engine/admin/db_design_table_groups_controller.rb +107 -0
  47. data/app/controllers/dbdoc_engine/application_controller.rb +65 -0
  48. data/app/controllers/dbdoc_engine/concerns/internationalization.rb +57 -0
  49. data/app/controllers/dbdoc_engine/db_doc_sessions_controller.rb +33 -0
  50. data/app/controllers/dbdoc_engine/home_controller.rb +79 -0
  51. data/app/controllers/dbdoc_engine/schema_diagram_controller.rb +293 -0
  52. data/app/helper/dbdoc_engine/application_helper.rb +35 -0
  53. data/app/helpers/dbdoc_engine/application_helper.rb +4 -0
  54. data/app/helpers/dbdoc_engine/changelogs_helper.rb +27 -0
  55. data/app/helpers/dbdoc_engine/column_helper.rb +30 -0
  56. data/app/helpers/dbdoc_engine/db_design_dynamic_tables_helper.rb +15 -0
  57. data/app/helpers/dbdoc_engine/home_helper.rb +75 -0
  58. data/app/javascript/dbdoc_engine/application.js +12 -0
  59. data/app/javascript/dbdoc_engine/controllers/application.js +29 -0
  60. data/app/javascript/dbdoc_engine/controllers/auto_submit_controller.js +17 -0
  61. data/app/javascript/dbdoc_engine/controllers/chart_controller.js +58 -0
  62. data/app/javascript/dbdoc_engine/controllers/column-type_controller.js +149 -0
  63. data/app/javascript/dbdoc_engine/controllers/column_controller.js +362 -0
  64. data/app/javascript/dbdoc_engine/controllers/column_search_controller.js +42 -0
  65. data/app/javascript/dbdoc_engine/controllers/dbdoc_accordion_controller.js +42 -0
  66. data/app/javascript/dbdoc_engine/controllers/ecommerce_controller.js +73 -0
  67. data/app/javascript/dbdoc_engine/controllers/group_details_controller.js +88 -0
  68. data/app/javascript/dbdoc_engine/controllers/import_export_controller.js +200 -0
  69. data/app/javascript/dbdoc_engine/controllers/index.js +9 -0
  70. data/app/javascript/dbdoc_engine/controllers/language_controller.js +100 -0
  71. data/app/javascript/dbdoc_engine/controllers/loading_spinner_controller.js +48 -0
  72. data/app/javascript/dbdoc_engine/controllers/login_controller.js +75 -0
  73. data/app/javascript/dbdoc_engine/controllers/notification_controller.js +15 -0
  74. data/app/javascript/dbdoc_engine/controllers/schema_diagram_controller.js +1129 -0
  75. data/app/javascript/dbdoc_engine/controllers/select2_controller.js +67 -0
  76. data/app/javascript/dbdoc_engine/controllers/sidebar_controller.js +943 -0
  77. data/app/javascript/dbdoc_engine/controllers/table_details_controller.js +245 -0
  78. data/app/javascript/dbdoc_engine/controllers/table_group_validation_controller.js +148 -0
  79. data/app/javascript/dbdoc_engine/controllers/table_validation_controller.js +423 -0
  80. data/app/jobs/dbdoc_engine/application_job.rb +4 -0
  81. data/app/mailers/dbdoc_engine/application_mailer.rb +6 -0
  82. data/app/models/dbdoc_engine/application_record.rb +6 -0
  83. data/app/models/dbdoc_engine/concerns/soft_deletable.rb +30 -0
  84. data/app/models/dbdoc_engine/db_design_changelog.rb +44 -0
  85. data/app/models/dbdoc_engine/db_design_dynamic_column.rb +211 -0
  86. data/app/models/dbdoc_engine/db_design_dynamic_table.rb +124 -0
  87. data/app/models/dbdoc_engine/db_design_table_group.rb +88 -0
  88. data/app/models/dbdoc_engine/user.rb +21 -0
  89. data/app/queries/dbdoc_engine/admin_dashboard_queries.rb +71 -0
  90. data/app/queries/dbdoc_engine/db_design_changelog_queries.rb +68 -0
  91. data/app/queries/dbdoc_engine/db_design_dynamic_column_queries.rb +37 -0
  92. data/app/queries/dbdoc_engine/db_design_dynamic_table_commands.rb +106 -0
  93. data/app/queries/dbdoc_engine/db_design_dynamic_table_queries.rb +194 -0
  94. data/app/queries/dbdoc_engine/db_design_table_group_queries.rb +154 -0
  95. data/app/services/dbdoc_engine/db_design_dynamic_table_export_service.rb +38 -0
  96. data/app/services/dbdoc_engine/db_design_dynamic_table_handler_service.rb +49 -0
  97. data/app/services/dbdoc_engine/db_design_dynamic_tables_service.rb +21 -0
  98. data/app/services/dbdoc_engine/error_handler_service.rb +43 -0
  99. data/app/services/dbdoc_engine/schema_rb_import_service.rb +194 -0
  100. data/app/services/dbdoc_engine/schema_rb_parser_service.rb +339 -0
  101. data/app/services/dbdoc_engine/table_filter_service.rb +35 -0
  102. data/app/services/dbdoc_engine/table_groups_service.rb +199 -0
  103. data/app/services/dbdoc_engine/table_management_service.rb +192 -0
  104. data/app/views/dbdoc_engine/admin/dashboard/_action_badge.html.erb +11 -0
  105. data/app/views/dbdoc_engine/admin/dashboard/_changelog_rows.html.erb +22 -0
  106. data/app/views/dbdoc_engine/admin/dashboard/_changelog_table_headers.html.erb +8 -0
  107. data/app/views/dbdoc_engine/admin/dashboard/_filter_fields.html.erb +43 -0
  108. data/app/views/dbdoc_engine/admin/dashboard/index.html.erb +159 -0
  109. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_column_fields.html.erb +225 -0
  110. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_deleted_table_index.html.erb +110 -0
  111. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_foreign_key_fields.html.erb +51 -0
  112. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_form.html.erb +75 -0
  113. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_recent_activity.html.erb +39 -0
  114. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_table_columns.html.erb +127 -0
  115. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_table_index.html.erb +109 -0
  116. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_table_information.html.erb +99 -0
  117. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/deleted_tables.html.erb +95 -0
  118. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/edit.html.erb +23 -0
  119. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/export_all_to_excel.xlsx.axlsx +240 -0
  120. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/export_to_excel.xlsx.axlsx +135 -0
  121. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/index.html.erb +109 -0
  122. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/new.html.erb +25 -0
  123. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/show_table_info.html.erb +125 -0
  124. data/app/views/dbdoc_engine/admin/db_design_table_groups/_deleted_table_groups_list.html.erb +75 -0
  125. data/app/views/dbdoc_engine/admin/db_design_table_groups/_form.html.erb +88 -0
  126. data/app/views/dbdoc_engine/admin/db_design_table_groups/_table_groups_list.html.erb +82 -0
  127. data/app/views/dbdoc_engine/admin/db_design_table_groups/deleted_groups.html.erb +60 -0
  128. data/app/views/dbdoc_engine/admin/db_design_table_groups/edit.html.erb +25 -0
  129. data/app/views/dbdoc_engine/admin/db_design_table_groups/index.html.erb +85 -0
  130. data/app/views/dbdoc_engine/admin/db_design_table_groups/new.html.erb +26 -0
  131. data/app/views/dbdoc_engine/db_doc_sessions/new.html.erb +59 -0
  132. data/app/views/dbdoc_engine/home/changelog_details.html.erb +80 -0
  133. data/app/views/dbdoc_engine/home/changelogs.html.erb +20 -0
  134. data/app/views/dbdoc_engine/home/group_details.html.erb +94 -0
  135. data/app/views/dbdoc_engine/home/index.html.erb +11 -0
  136. data/app/views/dbdoc_engine/home/partials/_action_badge.html.erb +11 -0
  137. data/app/views/dbdoc_engine/home/partials/_breadcrumb_navigation.html.erb +30 -0
  138. data/app/views/dbdoc_engine/home/partials/_changelog_rows.html.erb +35 -0
  139. data/app/views/dbdoc_engine/home/partials/_changelog_table_headers.html.erb +16 -0
  140. data/app/views/dbdoc_engine/home/partials/_column_headers.html.erb +23 -0
  141. data/app/views/dbdoc_engine/home/partials/_column_row.html.erb +157 -0
  142. data/app/views/dbdoc_engine/home/partials/_filter_form.html.erb +47 -0
  143. data/app/views/dbdoc_engine/home/partials/_group_section.html.erb +84 -0
  144. data/app/views/dbdoc_engine/home/partials/_pagination.html.erb +5 -0
  145. data/app/views/dbdoc_engine/home/partials/_stats_container.html.erb +46 -0
  146. data/app/views/dbdoc_engine/home/partials/_table_groups.html.erb +7 -0
  147. data/app/views/dbdoc_engine/home/partials/_table_information_section.html.erb +50 -0
  148. data/app/views/dbdoc_engine/home/partials/_table_section.html.erb +48 -0
  149. data/app/views/dbdoc_engine/home/table_details.html.erb +9 -0
  150. data/app/views/dbdoc_engine/schema_diagram/index.html.erb +102 -0
  151. data/app/views/dbdoc_engine/shared/_admin_header.html.erb +78 -0
  152. data/app/views/dbdoc_engine/shared/_header.html.erb +94 -0
  153. data/app/views/dbdoc_engine/shared/_js_translations.html.erb +3 -0
  154. data/app/views/dbdoc_engine/shared/_language_button.html.erb +14 -0
  155. data/app/views/dbdoc_engine/shared/_sidebar.html.erb +128 -0
  156. data/app/views/kaminari/dbdoc_engine/_first_page.html.erb +3 -0
  157. data/app/views/kaminari/dbdoc_engine/_gap.html.erb +3 -0
  158. data/app/views/kaminari/dbdoc_engine/_last_page.html.erb +3 -0
  159. data/app/views/kaminari/dbdoc_engine/_next_page.html.erb +3 -0
  160. data/app/views/kaminari/dbdoc_engine/_page.html.erb +9 -0
  161. data/app/views/kaminari/dbdoc_engine/_paginator.html.erb +17 -0
  162. data/app/views/kaminari/dbdoc_engine/_prev_page.html.erb +3 -0
  163. data/app/views/layouts/dbdoc_engine/application.html.erb +107 -0
  164. data/app/views/layouts/dbdoc_engine/header.html.erb +108 -0
  165. data/config/importmap.rb +11 -0
  166. data/config/locales/en.yml +307 -0
  167. data/config/locales/ja.yml +306 -0
  168. data/config/routes.rb +73 -0
  169. data/db/migrate/rails7/20250227060610_create_db_design_table_groups.rb +15 -0
  170. data/db/migrate/rails7/20250227094626_create_db_design_dynamic_tables.rb +19 -0
  171. data/db/migrate/rails7/20250228022732_create_db_design_dynamic_columns.rb +34 -0
  172. data/db/migrate/rails7/20250401051453_create_db_design_changelogs.rb +26 -0
  173. data/db/migrate/rails7/20250411040822_create_users.rb +14 -0
  174. data/db/migrate/rails7/20250421080851_add_missing_indexes_to_dbdoc_tables.rb +23 -0
  175. data/db/migrate/rails8/20250227060610_create_db_design_table_groups.rb +15 -0
  176. data/db/migrate/rails8/20250227094626_create_db_design_dynamic_tables.rb +19 -0
  177. data/db/migrate/rails8/20250228022732_create_db_design_dynamic_columns.rb +34 -0
  178. data/db/migrate/rails8/20250401051453_create_db_design_changelogs.rb +26 -0
  179. data/db/migrate/rails8/20250411040822_create_users.rb +14 -0
  180. data/db/migrate/rails8/20250421080851_add_missing_indexes_to_dbdoc_tables.rb +23 -0
  181. data/db/seeds.rb +28 -0
  182. data/lib/dbdoc_engine/engine.rb +57 -0
  183. data/lib/dbdoc_engine/version.rb +3 -0
  184. data/lib/dbdoc_engine.rb +9 -0
  185. data/lib/generators/dbdoc_engine/install/install_generator.rb +245 -0
  186. data/lib/generators/dbdoc_engine/uninstall/uninstall_generator.rb +196 -0
  187. data/lib/tasks/dbdoc_engine_tasks.rake +44 -0
  188. data/public/dbdoc_engine_assets/images/camel_chess_head.png +0 -0
  189. data/public/dbdoc_engine_assets/images/dblogo.svg +4 -0
  190. data/public/dbdoc_engine_assets/images/japan_circle.png +0 -0
  191. data/public/dbdoc_engine_assets/images/king_chess_head.png +0 -0
  192. data/public/dbdoc_engine_assets/images/login-bg.svg +44 -0
  193. data/public/dbdoc_engine_assets/images/logo.png +0 -0
  194. data/public/dbdoc_engine_assets/images/logo.svg +12 -0
  195. data/public/dbdoc_engine_assets/images/queen_chess_head.png +0 -0
  196. data/public/dbdoc_engine_assets/images/soldier_chess_headd.png +0 -0
  197. data/public/dbdoc_engine_assets/images/uk_circle_transparent.png +0 -0
  198. metadata +415 -0
@@ -0,0 +1,94 @@
1
+ <div class='w-100 header pe-4'>
2
+ <!-- Top Strip -->
3
+ <div class='d-flex justify-content-between align-items-center py-1 px-3 ms-3 mt-2 top-strip'>
4
+ <div class='d-flex align-items-center left-section'>
5
+ <div class='d-flex flex-column'>
6
+ <!-- Project Title and Subtitle -->
7
+ <h3 class='fs-4 fw-bold retail-database m-0'><%= t('dbdoc.dbdocs') %></h3>
8
+ <span class='fw-bold database-documentation'><small><%= t('dbdoc.databaseproject') %><small></span>
9
+ </div>
10
+ </div>
11
+ <div class='d-flex align-items-center right-section'>
12
+ <!-- Home Button (circular, left of language button) -->
13
+ <a href="/"
14
+ class="back-main-btn d-flex align-items-center justify-content-center fw-bold border-0 me-2"
15
+ title="<%= t('dbdoc.back_to_main_project') %>"
16
+ style="margin-right:10px;">
17
+ <%= t('dbdoc.back_to_main_project') %>
18
+ </a>
19
+
20
+ <!-- Language Toggle Button -->
21
+ <%= render 'dbdoc_engine/shared/language_button' %>
22
+
23
+ <% if current_user.admin_or_higher? %>
24
+ <!-- Admin Button: Always circular with gear-person icon -->
25
+ <%= link_to(user_signed_in? ? dbdoc_engine.admin_dashboard_path : dbdoc_engine.login_path,
26
+ class: 'admin-circle-btn d-flex align-items-center justify-content-center rounded-circle border-0 p-0 me-2',
27
+ title: t('dbdoc.admin')) do %>
28
+ <i class='bi bi-person-fill-gear'></i>
29
+ <% end %>
30
+ <% end %>
31
+
32
+ <!-- User Role Icon with Dropdown for Logout (only if logged in) -->
33
+ <% if user_signed_in? %>
34
+ <div class='dropdown role-dropdown'>
35
+ <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'>
36
+ <!-- Blue background circle remains, but icon is now an image -->
37
+ <span class='right-avatar-img-bg d-flex align-items-center justify-content-center'>
38
+ <% if current_user.role == 'superadmin' %>
39
+ <img src='/dbdoc_engine_assets/images/king_chess_head.png' alt='Superadmin' class='rounded-circle mt-2 right-avatar' />
40
+ <% elsif current_user.role == 'admin' %>
41
+ <img src='/dbdoc_engine_assets/images/queen_chess_head.png' alt='Admin' class='rounded-circle mt-2 right-avatar' />
42
+ <% else %>
43
+ <img src='/dbdoc_engine_assets/images/camel_chess_head.png' alt='User' class='rounded-circle mt-2 right-avatar' />
44
+ <% end %>
45
+ </span>
46
+ </button>
47
+ <ul class='dropdown-menu dropdown-menu-end' aria-labelledby='userDropdown'>
48
+ <li>
49
+ <%= 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 %>
50
+ <i class='bi bi-box-arrow-right me-1'></i>
51
+ <%= t('dbdoc.logout') %>
52
+ <% end %>
53
+ </li>
54
+ </ul>
55
+ </div>
56
+ <% end %>
57
+ </div>
58
+ </div>
59
+
60
+ <!-- Bottom Strip with Navigation Buttons -->
61
+ <div data-controller='active-button'>
62
+ <div class='container-fluid buttonsinheader'>
63
+ <div class='row align-items-center'>
64
+ <div class='withback col d-flex justify-content-between align-items-center mb-2 ms-3 mt-2 pe-3'>
65
+ <!-- Left side buttons -->
66
+ <div class='d-flex gap-1 middle-buttons'>
67
+ <!-- Wiki Button -->
68
+ <%= link_to dbdoc_engine.root_path, class: 'd-flex align-items-center fw-bold btn px-3 py-2 rounded-3 nav-button wiki-button' do %>
69
+ <%= image_tag 'dbdoc_engine/wiki.svg', alt: 'Wiki', class: 'me-2 button-icon' %>
70
+ <%= t('dbdoc.wiki') %>
71
+ <% end %>
72
+ <%= link_to dbdoc_engine.schema_diagram_path, class: 'd-flex align-items-center fw-bold btn px-3 py-2 rounded-3 nav-button diagram-button' do %>
73
+ <%= image_tag 'dbdoc_engine/diagram.svg', alt: 'Diagram', class: 'me-2 button-icon' %>
74
+ <%= t('dbdoc.diagram') %>
75
+ <% end %>
76
+ <!-- Changelog Button -->
77
+ <%= link_to dbdoc_engine.changelogs_path, class: 'd-flex align-items-center fw-bold btn px-3 py-2 rounded-3 nav-button changelog-button text-decoration-none' do %>
78
+ <%= image_tag 'dbdoc_engine/changelog.svg', alt: 'Changelog', class: 'me-2 button-icon' %>
79
+ <%= t('dbdoc.changelog') %>
80
+ <% end %>
81
+ </div>
82
+ <!-- Back Button (right-aligned) -->
83
+ <%
84
+ =begin%>
85
+ <%= link_to :back, class: 'btn admin-style-button back-button' do %>
86
+ <i class='bi bi-arrow-left'></i> <%= t('dbdoc.back_header') %>
87
+ <% end %>
88
+ <%
89
+ =end%>
90
+ </div>
91
+ </div>
92
+ </div>
93
+ </div>
94
+ </div>
@@ -0,0 +1,3 @@
1
+ <script>
2
+ window.Translations = <%= raw js_translations %>;
3
+ </script>
@@ -0,0 +1,14 @@
1
+
2
+ <div data-controller="language" class="language-toggle-container me-2">
3
+ <button
4
+ class="btn language-toggle"
5
+ type="button"
6
+ data-action="click->language#toggleLanguage"
7
+ data-language-target="button">
8
+ <% if I18n.locale == :ja %>
9
+ <img src="/dbdoc_engine_assets/images/japan_circle.png" alt="日本語" class="language-japan-flag">
10
+ <% else %>
11
+ <img src="/dbdoc_engine_assets/images/uk_circle_transparent.png" alt="English" class="language-flag">
12
+ <% end %>
13
+ </button>
14
+ </div>
@@ -0,0 +1,128 @@
1
+ <div id='sidebar' class='sidebar position-relative vh-100 overflow-hidden transition-all'
2
+ data-controller='sidebar'
3
+ data-sidebar-target='sidebar'
4
+ data-arrow-down-path='<%= asset_path('dbdoc_engine/arrowdown.svg') %>'
5
+ data-arrow-horizontal-path='<%= asset_path('dbdoc_engine/arrowhorizontal.svg') %>'
6
+ data-current-path='<%= request.path %>'>
7
+ <!-- Sidebar content container with vertical scrolling -->
8
+ <div class='sidebar-content bg-transparent p-3 w-100 vh-100 overflow-auto'>
9
+ <!-- Sidebar Header with logo and title -->
10
+
11
+ <div class='sidebar-header mb-4 d-flex align-items-center'>
12
+ <img src='/dbdoc_engine_assets/images/dblogo.svg' alt='Database Logo' class='logodb'>
13
+ <div class='ms-2 text-container'>
14
+ <a href="/dbdoc" class="text-decoration-none"><div class='title text-white fs-6 fw-bold'><%= t('dbdoc.dbdocs') %></div></a>
15
+ </div>
16
+ </div>
17
+
18
+ <!-- Search Bar with icon and input field -->
19
+ <div class='search-container rounded-2 mb-2 d-flex align-items-center'>
20
+ <%= image_tag 'dbdoc_engine/search.svg', alt: 'Search Icon' %>
21
+ <input type='text' id='searchInput' placeholder='<%= t('dbdoc.search') %>'
22
+ data-action='input->sidebar#search'
23
+ data-sidebar-target='searchInput'>
24
+ </div>
25
+
26
+ <!-- Group By Control with toggle functionality -->
27
+ <div class='group-by-container border-0 rounded-2 mb-3 p-2 px-3 d-flex align-items-center justify-content-between'>
28
+ <%= image_tag 'dbdoc_engine/group_bu.svg', alt: 'Group By Icon' %>
29
+ <span class='text-white flex-grow-1 groupby-text'><%= t('dbdoc.groupby') %></span>
30
+ <button class='border-0 p-0 bg-transparent border-0 p-0 d-flex align-items-center' id='toggle-groups' data-action='click->sidebar#toggleGroupList'>
31
+ <%= image_tag 'dbdoc_engine/double_arrow.svg', alt: 'Expand/Collapse Icon' %>
32
+ </button>
33
+ </div>
34
+
35
+ <!-- Database Categories Title -->
36
+ <div class='fw-semibold fs-6 mt-3 mb-3 database-categories-title'>
37
+ <%= t('dbdoc.databasecategories') %>
38
+ </div>
39
+
40
+ <!-- Group List Container - Main navigation hierarchy -->
41
+ <div id='groupList' data-sidebar-target='groupList'>
42
+ <% groups.each do |group| %>
43
+ <div class='group' data-group-id='<%= group.id %>'>
44
+ <div class='group-row'>
45
+ <!-- Group Toggle Button with color-coded arrow -->
46
+ <button class='border-0 bg-transparent d-inline-flex align-items-center p-1 group-toggle' data-action='click->sidebar#toggleGroup'>
47
+ <svg fill='<%= group.group_color %>' viewBox='0 0 64 64' height='10' width='10'
48
+ xmlns='http://www.w3.org/2000/svg' alt='Expand' class='arrow-image'>
49
+ <path d='M52.666 28.5385C55.3327 30.0718 55.3327 33.9302 52.666 35.4718L17.9993 55.4635C15.341 56.9968 11.9993 55.0802 11.9993 51.9968V12.0052C11.9993 8.93018 15.3327 7.00518 17.9993 8.53852L52.666 28.5385Z'
50
+ fill='<%= group.group_color %>'></path>
51
+ </svg>
52
+ </button>
53
+
54
+ <!-- Group Heading Text - Clickable for navigation -->
55
+ <span class='group-text group-heading' data-action='click->sidebar#navigateToGroup'>
56
+ <%= group.group_name %>
57
+ </span>
58
+ </div>
59
+
60
+ <!-- Table List Container - Initially Hidden -->
61
+ <div class='table-list hidden'>
62
+ <% group.db_design_dynamic_tables.each do |table| %>
63
+ <div class='ps-3 my-1 db-table' data-table-id='<%= table.id %>'>
64
+ <div class='table-row'>
65
+
66
+ <!-- Table Toggle Button with matching group color -->
67
+ <button class='border-0 bg-transparent d-inline-flex align-items-center p-1 group-toggle table-toggle' data-action='click->sidebar#toggleTable'>
68
+ <svg fill='<%= group.group_color %>' viewBox='0 0 64 64' height='10' width='10'
69
+ xmlns='http://www.w3.org/2000/svg' alt='Expand' class='arrow-image'>
70
+ <path d='M52.666 28.5385C55.3327 30.0718 55.3327 33.9302 52.666 35.4718L17.9993 55.4635C15.341 56.9968 11.9993 55.0802 11.9993 51.9968V12.0052C11.9993 8.93018 15.3327 7.00518 17.9993 8.53852L52.666 28.5385Z'
71
+ fill='<%= group.group_color %>'></path>
72
+ </svg>
73
+ </button>
74
+
75
+ <!-- Table Name - Clickable for navigation -->
76
+ <span class='table-name group-text'
77
+ data-original-table-name='<%= table.table_name %>'
78
+ data-physical-table-name='<%= table.physical_table_name %>'
79
+ data-action='click->sidebar#navigateToTable'>
80
+ <%= table.table_name %>
81
+ </span>
82
+ </div>
83
+
84
+ <!-- Column List Container - Initially Hidden -->
85
+ <div class='column-list hidden'>
86
+ <% table.db_design_dynamic_columns.each do |column| %>
87
+ <div class='column'>
88
+ <div class='column-row'>
89
+
90
+ <!-- Column Icon with matching group color -->
91
+ <svg viewBox='0 0 12 10' height='10' width='12'
92
+ xmlns='http://www.w3.org/2000/svg' class='dbdocs-icon'>
93
+ <path fill-rule='evenodd' clip-rule='evenodd'
94
+ d='M9.43182 0.909091H1.81818C1.3161 0.909091 0.909091 1.3161 0.909091 1.81818V8.18182C0.909091 8.6839 1.3161 9.09091 1.81818 9.09091H9.43182C9.9339 9.09091 10.3409 8.6839 10.3409 8.18182V1.81818C10.3409 1.3161 9.9339 0.909091 9.43182 0.909091ZM1.81818 0C0.814028 0 0 0.814028 0 1.81818V8.18182C0 9.18597 0.814028 10 1.81818 10H9.43182C10.436 10 11.25 9.18597 11.25 8.18182V1.81818C11.25 0.814028 10.436 0 9.43182 0H1.81818Z'
95
+ fill='<%= group.group_color %>' />
96
+ <path d='M0 1.81818C0 0.814028 0.814028 0 1.81818 0H9.43182C10.436 0 11.25 0.814028 11.25 1.81818V2.5H0V1.81818Z'
97
+ fill='<%= group.group_color %>' />
98
+ <rect x='2.99994' y='2.5' width='2.22222' height='6.58889'
99
+ fill='<%= group.group_color %>' />
100
+ </svg>
101
+
102
+ <!-- Column Name with metadata -->
103
+ <span class='column-name group-text'
104
+ data-original-column-name='<%= column.column_name %>'
105
+ data-physical-column-name='<%= column.physical_column_name %>'
106
+ data-data-type='<%= column.data_type %>'>
107
+ <%= column.column_name %>
108
+ </span>
109
+ </div>
110
+ </div>
111
+ <% end %>
112
+ </div>
113
+ </div>
114
+ <% end %>
115
+ </div>
116
+ </div>
117
+ <% end %>
118
+ </div>
119
+ </div>
120
+
121
+ <!-- Sidebar Resizer with Toggle Button -->
122
+ <div class='position-absolute top-0 end-0 sidebar-resizer' data-sidebar-target='resizer'>
123
+ <button id='toggleSidebar' class='position-absolute top-50 end-0 d-flex align-items-center justify-content-center border-0 p-0 sidebar-toggle-button' data-sidebar-target='toggleButton'
124
+ data-action='click->sidebar#toggleSidebar'>
125
+ <%= image_tag 'dbdoc_engine/arrowleft.svg', alt: 'Toggle Sidebar' %>
126
+ </button>
127
+ </div>
128
+ </div>
@@ -0,0 +1,3 @@
1
+ <li class="page-item">
2
+ <%= link_to_unless current_page.first?, raw(t 'views.pagination.first'), url, remote: remote, class: 'page-link' %>
3
+ </li>
@@ -0,0 +1,3 @@
1
+ <li class='page-item disabled'>
2
+ <%= link_to raw(t 'views.pagination.truncate'), '#', class: 'page-link' %>
3
+ </li>
@@ -0,0 +1,3 @@
1
+ <li class="page-item">
2
+ <%= link_to_unless current_page.last?, raw(t 'views.pagination.last'), url, remote: remote, class: 'page-link' %>
3
+ </li>
@@ -0,0 +1,3 @@
1
+ <li class="page-item">
2
+ <%= link_to_unless current_page.last?, raw(t 'views.pagination.next'), url, rel: 'next', remote: remote, class: 'page-link' %>
3
+ </li>
@@ -0,0 +1,9 @@
1
+ <% if page.current? %>
2
+ <li class="page-item active">
3
+ <%= content_tag :a, page, data: { remote: remote }, rel: page.rel, class: 'page-link' %>
4
+ </li>
5
+ <% else %>
6
+ <li class="page-item">
7
+ <%= link_to page, url, remote: remote, rel: page.rel, class: 'page-link' %>
8
+ </li>
9
+ <% end %>
@@ -0,0 +1,17 @@
1
+ <%= paginator.render do %>
2
+ <nav>
3
+ <ul class="pagination">
4
+ <%= first_page_tag unless current_page.first? %>
5
+ <%= prev_page_tag unless current_page.first? %>
6
+ <% each_page do |page| %>
7
+ <% if page.left_outer? || page.right_outer? || page.inside_window? %>
8
+ <%= page_tag page %>
9
+ <% elsif !page.was_truncated? -%>
10
+ <%= gap_tag %>
11
+ <% end %>
12
+ <% end %>
13
+ <%= next_page_tag unless current_page.last? %>
14
+ <%= last_page_tag unless current_page.last? %>
15
+ </ul>
16
+ </nav>
17
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <li class="page-item">
2
+ <%= link_to_unless current_page.first?, raw(t 'views.pagination.previous'), url, rel: 'prev', remote: remote, class: 'page-link' %>
3
+ </li>
@@ -0,0 +1,107 @@
1
+ <!DOCTYPE html>
2
+ <html lang='<%= @html_lang %>'>
3
+ <head>
4
+ <%# Basic meta tags and page title %>
5
+ <title><%= content_for(:title) || 'dbdoc' %></title>
6
+ <meta name='viewport' content='width=device-width,initial-scale=1'>
7
+ <meta name='apple-mobile-web-app-capable' content='yes'>
8
+ <meta name='mobile-web-app-capable' content='yes'>
9
+ <meta name='turbo-prefetch' content='false'>
10
+ <%# Security and Rails-specific tags %>
11
+ <%= csrf_meta_tags %>
12
+ <%= csp_meta_tag %>
13
+ <%# Additional head content if provided %>
14
+ <%= yield :head %>
15
+ <%# PWA manifest support (commented out) %>
16
+ <%#= tag.link rel: 'manifest', href: pwa_manifest_path(format: :json) %>
17
+ <%# Favicon and icon resources %>
18
+ <link rel='icon' href='/dbdoc_engine_assets/images/logo.png' type='image/png'>
19
+ <link rel='icon' href='/dbdoc_engine_assets/images/logo.svg' type='image/svg+xml'>
20
+ <link rel='apple-touch-icon' href='/icon.png'>
21
+ <%# Google Fonts - Noto Sans JP %>
22
+ <link rel="preconnect" href="https://fonts.googleapis.com">
23
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
24
+ <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@300;400;500;600;700&display=swap" rel="stylesheet">
25
+ <%# Stylesheet includes %>
26
+ <%#= stylesheet_link_tag :app, 'data-turbo-track': 'reload' %>
27
+ <link href='<%= asset_path('dbdoc_engine/admin.css') %>' rel='stylesheet'>
28
+ <link href='<%= asset_path('dbdoc_engine/loading_spinner.css') %>' rel='stylesheet'>
29
+
30
+ <!-- Bootstrap CSS -->
31
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
32
+
33
+ <!-- Bootstrap Bundle JS (includes Popper) -->
34
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
35
+
36
+ <link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.10.5/font/bootstrap-icons.min.css'>
37
+ <link href='<%= asset_path('dbdoc_engine/dbdoc_application.css') %>' rel='stylesheet'>
38
+ <link href='<%= asset_path('dbdoc_engine/admin_header.css') %>' rel='stylesheet'>
39
+ <link href='<%= asset_path('dbdoc_engine/dashboard.css') %>' rel='stylesheet'>
40
+ <link href='<%= asset_path('dbdoc_engine/login.css') %>' rel='stylesheet'>
41
+ <link href='<%= asset_path('dbdoc_engine/header.css') %>' rel='stylesheet'>
42
+ <link href='<%= asset_path('dbdoc_engine/table_details.css') %>' rel='stylesheet'>
43
+ <%# JavaScript includes %>
44
+ <script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
45
+ <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
46
+ <%= javascript_importmap_tags %>
47
+ </head>
48
+ <body data-locale="<%= I18n.locale %>" data-controller="notification">
49
+ <!-- Loading spinner overlay - initially hidden -->
50
+ <div class='loading-spinner' data-controller='loading-spinner' data-loading-spinner-visible='false'>
51
+ <div class='spinner-content'>
52
+ <!-- Custom SVG Loader -->
53
+ <svg class='pl' width='80' height='80' viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg'>
54
+ <circle class='pl__ring1' cx='64' cy='64' r='60' fill='none' stroke='#364380' stroke-width='8' transform='rotate(-90,64,64)' stroke-linecap='round' stroke-dasharray='377 377' stroke-dashoffset='-376.4'></circle>
55
+ <circle class='pl__ring3' cx='64' cy='64' r='46' fill='none' stroke='#5366A0' stroke-width='6' transform='rotate(-90,64,64)' stroke-linecap='round' stroke-dasharray='289 289' stroke-dashoffset='-288.6'></circle>
56
+ <circle class='pl__ring5' cx='64' cy='64' r='36' fill='none' stroke='#758FC6' stroke-width='4' transform='rotate(-90,64,64)' stroke-linecap='round' stroke-dasharray='226.2 226.2' stroke-dashoffset='-225.8'></circle>
57
+ </svg>
58
+ <p>Loading, please wait...</p>
59
+ </div>
60
+ </div>
61
+ <%# Admin header partial %>
62
+ <% unless controller_name == 'db_doc_sessions' && action_name == 'new' %>
63
+ <%= render 'dbdoc_engine/shared/admin_header' %>
64
+ <% end %>
65
+ <%# Main content %>
66
+ <%= yield %>
67
+ <%# Flash messages with auto-hide functionality %>
68
+ <% if flash[:notice] || flash[:alert] %>
69
+ <div id='flash-message' class='alert <%= flash[:notice] ? 'alert-success' : 'alert-danger' %> position-fixed top-0 end-0 m-3 p-3 shadow'>
70
+ <%= flash[:notice] || flash[:alert] %>
71
+ </div>
72
+ <script>
73
+ // Auto-hide flash messages after 3 seconds with fade-out effect
74
+ setTimeout(function() {
75
+ let flashMessage = document.getElementById('flash-message');
76
+ if (flashMessage) {
77
+ flashMessage.style.transition = 'opacity 0.5s';
78
+ flashMessage.style.opacity = '0';
79
+ setTimeout(() => flashMessage.remove(), 500);
80
+ }
81
+ }, 3000);
82
+ </script>
83
+ <% end %>
84
+ <%# JavaScript translations for localization %>
85
+ <%= render 'dbdoc_engine/shared/js_translations' %>
86
+ <meta id='js-translations' data-translations='<%= js_translations %>'>
87
+ <script>
88
+ // Set up event listener for Turbo navigation
89
+ document.addEventListener('turbo:load', function() {
90
+ // Find all language controllers and update their display
91
+ const langControllers = document.querySelectorAll('[data-controller="language"]');
92
+ langControllers.forEach(element => {
93
+ const controller = window.Stimulus.getControllerForElementAndIdentifier(element, 'language');
94
+ if (controller) {
95
+ controller.updateButtonDisplay();
96
+ }
97
+ });
98
+ });
99
+ </script>
100
+ <footer class="dbdoc-footer">
101
+ <div class="footer-content">
102
+ <span class="footer-version">v1.0.0</span>
103
+ <!-- You can add more footer content here in the future -->
104
+ </div>
105
+ </footer>
106
+ </body>
107
+ </html>
@@ -0,0 +1,108 @@
1
+ <!DOCTYPE html>
2
+ <html lang='<%= @html_lang %>'>
3
+ <head>
4
+ <%# Basic meta tags and page title %>
5
+ <title><%= content_for(:title) || 'dbdoc' %></title>
6
+ <meta name='viewport' content='width=device-width,initial-scale=1'>
7
+ <meta name='apple-mobile-web-app-capable' content='yes'>
8
+ <meta name='mobile-web-app-capable' content='yes'>
9
+ <meta name='turbo-prefetch' content='false'>
10
+ <%# Security and Rails-specific tags %>
11
+ <%= csrf_meta_tags %>
12
+ <%= csp_meta_tag %>
13
+ <%# Additional head content if provided %>
14
+ <%= yield :head %>
15
+ <%# PWA manifest support (commented out) %>
16
+ <%#= tag.link rel: 'manifest', href: pwa_manifest_path(format: :json) %>
17
+ <%# Favicon and icon resources %>
18
+ <link rel='icon' href='/dbdoc_engine_assets/images/logo.png' type='image/png'>
19
+ <link rel='icon' href='/dbdoc_engine_assets/images/logo.svg' type='image/svg+xml'>
20
+ <link rel='apple-touch-icon' href='/icon.png'>
21
+ <%# Google Fonts - Noto Sans JP %>
22
+ <link rel="preconnect" href="https://fonts.googleapis.com">
23
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
24
+ <link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@300;400;500;600;700&display=swap" rel="stylesheet">
25
+ <%# Stylesheet includes %>
26
+ <%#= stylesheet_link_tag :app, 'data-turbo-track': 'reload' %>
27
+ <%#= stylesheet_link_tag 'application', media: 'all', 'data-turbo-track': 'reload' %>
28
+ <%# External CSS libraries %>
29
+ <!-- Popper.js (required by Bootstrap) -->
30
+ <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"></script>
31
+
32
+ <!-- Bootstrap (after Popper) -->
33
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.min.js"></script>
34
+ <link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.10.5/font/bootstrap-icons.min.css'>
35
+ <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
36
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
37
+ <link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/bootstrap-icons/1.10.5/font/bootstrap-icons.min.css'>
38
+ <%# Application-specific stylesheets %>
39
+ <link href='<%= asset_path('dbdoc_engine/dbdoc_application.css') %>' rel='stylesheet'>
40
+ <link href='<%= asset_path('dbdoc_engine/header.css') %>' rel='stylesheet'>
41
+ <link href='<%= asset_path('dbdoc_engine/sidebar.css') %>' rel='stylesheet'>
42
+ <link href='<%= asset_path('dbdoc_engine/ecommerce.css') %>' rel='stylesheet'>
43
+ <link href='<%= asset_path('dbdoc_engine/group_details.css') %>' rel='stylesheet'>
44
+ <link href='<%= asset_path('dbdoc_engine/table_details.css') %>' rel='stylesheet'>
45
+ <link href='<%= asset_path('dbdoc_engine/changelog.css') %>' rel='stylesheet'>
46
+ <link href='<%= asset_path('dbdoc_engine/loading_spinner.css') %>' rel='stylesheet'>
47
+ <link href='<%= asset_path('dbdoc_engine/dashboard.css') %>' rel='stylesheet'>
48
+ <link href='<%= asset_path('dbdoc_engine/schema_diagram.css') %>' rel='stylesheet'>
49
+ <%# JavaScript includes %>
50
+ <script src="https://cdn.jsdelivr.net/npm/viz.js@2.1.2/viz.js"></script>
51
+ <script src="https://cdn.jsdelivr.net/npm/viz.js@2.1.2/full.render.js"></script>
52
+ <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
53
+ <%= javascript_importmap_tags %>
54
+ <%# Bootstrap commented out for reference %>
55
+ <%#= stylesheet_link_tag 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css', integrity: 'sha384-...', crossorigin: 'anonymous' %>
56
+ <%#= javascript_include_tag 'https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/js/bootstrap.bundle.min.js', integrity: 'sha384-...', crossorigin: 'anonymous', defer: true %>
57
+ </head>
58
+ <body data-locale="<%= I18n.locale %>" data-controller="notification">
59
+ <!-- Loading spinner overlay - initially hidden -->
60
+ <div class='loading-spinner' data-controller='loading-spinner' data-loading-spinner-visible='false'>
61
+ <div class='spinner-content'>
62
+ <!-- Custom SVG Loader -->
63
+ <svg class='pl' width='80' height='80' viewBox='0 0 128 128' xmlns='http://www.w3.org/2000/svg'>
64
+ <circle class='pl__ring1' cx='64' cy='64' r='60' fill='none' stroke='#364380' stroke-width='8' transform='rotate(-90,64,64)' stroke-linecap='round' stroke-dasharray='377 377' stroke-dashoffset='-376.4'></circle>
65
+ <circle class='pl__ring3' cx='64' cy='64' r='46' fill='none' stroke='#5366A0' stroke-width='6' transform='rotate(-90,64,64)' stroke-linecap='round' stroke-dasharray='289 289' stroke-dashoffset='-288.6'></circle>
66
+ <circle class='pl__ring5' cx='64' cy='64' r='36' fill='none' stroke='#758FC6' stroke-width='4' transform='rotate(-90,64,64)' stroke-linecap='round' stroke-dasharray='226.2 226.2' stroke-dashoffset='-225.8'></circle>
67
+ </svg>
68
+ <p>Loading, please wait...</p>
69
+ </div>
70
+ </div>
71
+ <%# Main layout with sidebar and content area %>
72
+ <div class='d-flex'>
73
+ <%# Sidebar component %>
74
+ <%= render 'dbdoc_engine/shared/sidebar', groups: @groups %>
75
+ <%# Main content area with scrollable container %>
76
+ <div class='right-content-wrapper d-flex flex-column flex-grow-1' style='overflow-y: scroll; height: 100vh;'>
77
+ <%# Header component %>
78
+ <%= render 'dbdoc_engine/shared/header' %>
79
+ <%# Flash messages with auto-hide functionality %>
80
+ <% if flash[:notice] || flash[:alert] %>
81
+ <div id='flash-message' class='alert <%= flash[:notice] ? 'alert-success' : 'alert-danger' %> position-fixed top-0 end-0 m-3 p-3 shadow'>
82
+ <%= flash[:notice] || flash[:alert] %>
83
+ </div>
84
+ <script>
85
+ // Auto-hide flash messages after 3 seconds with fade-out effect
86
+ setTimeout(function() {
87
+ let flashMessage = document.getElementById('flash-message');
88
+ if (flashMessage) {
89
+ flashMessage.style.transition = 'opacity 0.5s';
90
+ flashMessage.style.opacity = '0';
91
+ setTimeout(() => flashMessage.remove(), 500);
92
+ }
93
+ }, 3000);
94
+ </script>
95
+ <% end %>
96
+ <%# Main content yield %>
97
+ <div class='main-content'>
98
+ <%= yield %>
99
+ </div>
100
+ </div>
101
+ </div>
102
+ <footer class="dbdoc-footer">
103
+ <div class="footer-content">
104
+ <span class="footer-version">v1.0.0</span>
105
+ </div>
106
+ </footer>
107
+ </body>
108
+ </html>
@@ -0,0 +1,11 @@
1
+ # dbdoc_engine/config/importmap.rb
2
+
3
+ pin_all_from DbdocEngine::Engine.root.join("app/javascript/dbdoc_engine"), under: "dbdoc_engine", to: "dbdoc_engine"
4
+
5
+ pin "bootstrap", to: "bootstrap.min.js", preload: true
6
+ pin "@popperjs/core", to: "popper.js", preload: true
7
+ pin "@hotwired/turbo-rails", to: "turbo.min.js"
8
+ pin "@hotwired/stimulus", to: "stimulus.min.js"
9
+ pin "@hotwired/stimulus-loading", to: "stimulus-loading.js"
10
+
11
+ pin_all_from DbdocEngine::Engine.root.join("app/javascript/dbdoc_engine/controllers"), under: "dbdoc_engine/controllers"