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,296 @@
1
+ /* Sidebar structure with gradient background */
2
+ .sidebar {
3
+ background: linear-gradient(to bottom, #829ED4, #364380);
4
+ width: 250px;
5
+ border-right: none;
6
+ transition: width 0.3s ease;
7
+ overflow-y: scroll;
8
+ scrollbar-width: none; /* Firefox */
9
+ -ms-overflow-style: none; /* IE & Edge */
10
+ }
11
+ .sidebar::-webkit-scrollbar {
12
+ display: none; /* Chrome, Safari */
13
+ }
14
+
15
+ /* Sidebar content container */
16
+ .sidebar-content {
17
+ overflow-y: scroll;
18
+ scrollbar-width: none; /* Firefox */
19
+ -ms-overflow-style: none; /* IE & Edge */
20
+ }
21
+ .sidebar-content::-webkit-scrollbar {
22
+ display: none; /* Chrome, Safari */
23
+ }
24
+
25
+ #toggleSidebar img {
26
+ cursor: pointer;
27
+ }
28
+
29
+ /* Database categories heading */
30
+ .database-categories-title {
31
+ color: #DBDADA;
32
+ letter-spacing: 0.5px;
33
+ }
34
+
35
+ /* Search container styling */
36
+ .search-container {
37
+ border: none;
38
+ background-color: rgba(255, 255, 255, 0.32);
39
+ padding: 8px 12px !important;
40
+ }
41
+ .search-container img {
42
+ height: 15px;
43
+ filter: brightness(0) invert(1);
44
+ margin-right: 8px;
45
+ }
46
+
47
+ #searchInput {
48
+ border: none;
49
+ background: transparent;
50
+ color: white;
51
+ font-size: 12px;
52
+ width: 100%;
53
+ outline: none;
54
+ }
55
+
56
+ #searchInput::placeholder {
57
+ color: rgba(255, 255, 255, 0.7);
58
+ }
59
+
60
+ /* Group by container styling */
61
+ .group-by-container {
62
+ background-color: rgba(255, 255, 255, 0.32);
63
+ }
64
+
65
+ .group-by-container img {
66
+ height: 15px;
67
+ filter: brightness(0) invert(1);
68
+ margin-right: 8px;
69
+ background-color: transparent;
70
+ }
71
+
72
+ .groupby-text {
73
+ font-size: 12px;
74
+ }
75
+ #toggle-groups img {
76
+ height: 12px;
77
+ filter: brightness(0) invert(1);
78
+ }
79
+ .group-text {
80
+ font-size: 14px;
81
+ color: white;
82
+ cursor: pointer;
83
+ }
84
+
85
+ /* Group, table and column styling */
86
+ .group {
87
+ padding: 4px 0;
88
+ }
89
+ .column {
90
+ padding-left: 40px;
91
+ margin: 4px 0;
92
+ }
93
+
94
+ /* Arrow image styling */
95
+ .arrow-image {
96
+ height: 10px;
97
+ /* filter: brightness(0) invert(1); */
98
+ transition: transform 0.2s ease;
99
+ }
100
+
101
+ /* Rotation for expanded state */
102
+ .table-list.visible + .group-toggle .arrow-image,
103
+ .column-list.visible + .group-toggle .arrow-image {
104
+ transform: rotate(90deg);
105
+ }
106
+
107
+ /* List visibility */
108
+ .table-list, .column-list {
109
+ display: none;
110
+ margin-top: 5px;
111
+ }
112
+
113
+ .table-list.visible, .column-list.visible {
114
+ display: block;
115
+ }
116
+
117
+ /* Highlight for search */
118
+ .highlight {
119
+ background-color: rgba(255, 255, 0, 0.4);
120
+ color: white;
121
+ font-weight: bold;
122
+ border-radius: 2px;
123
+ padding: 0 2px;
124
+ }
125
+
126
+ /* Resizer styling */
127
+ .sidebar-resizer {
128
+ width: 5px;
129
+ height: 100%;
130
+ cursor: ew-resize;
131
+ background-color: rgba(0, 0, 0, 0);
132
+ z-index: 1000;
133
+ }
134
+
135
+ .sidebar-resizer:hover {
136
+ background-color: rgba(255, 255, 255, 0.2);
137
+ }
138
+
139
+ /* Toggle button styling */
140
+ .sidebar-toggle-button {
141
+ transform: translateY(-50%);
142
+ width: 20px;
143
+ height: 40px;
144
+ background: white;
145
+ border-radius: 4px;
146
+ z-index: 1001;
147
+ box-shadow: 1px 0 3px rgba(0, 0, 0, 0.1);
148
+ background-color: rgba(255, 255, 255, 0.32);
149
+ }
150
+
151
+ .sidebar-toggle-button img {
152
+ width: 10px;
153
+ height: 10px;
154
+ transition: transform 0.3s;
155
+ }
156
+
157
+ /* Collapsed sidebar styling */
158
+ .sidebar.closed {
159
+ width: 20px !important;
160
+ }
161
+
162
+ .sidebar.closed .sidebar-content {
163
+ opacity: 0;
164
+ visibility: hidden;
165
+ }
166
+
167
+ .sidebar.closed .sidebar-toggle-button img {
168
+ transform: rotate(180deg);
169
+ }
170
+
171
+ /* Ensure toggle button remains visible */
172
+ .sidebar.closed .sidebar-toggle-button {
173
+ right: 0;
174
+ visibility: visible !important;
175
+ opacity: 1;
176
+ }
177
+
178
+ /* Removal of the language button */
179
+ .language-button {
180
+ display: none;
181
+ }
182
+ #no-matches-message {
183
+ color: white;
184
+ font-style: italic;
185
+ padding: 15px;
186
+ text-align: center;
187
+ margin-top: 20px;
188
+ background-color: rgba(255, 255, 255, 0.1);
189
+ border-radius: 5px;
190
+ }
191
+ /* Hover effect for sidebar items */
192
+ .group-row:hover, .table-row:hover, .column-row:hover {
193
+ background-color: rgba(255, 255, 255, 0.32);
194
+ border-radius: 4px;
195
+ cursor: pointer;
196
+ }
197
+
198
+ /* Active/selected item styling */
199
+ .sidebar-item-active {
200
+ background-color: rgba(255, 255, 255, 0.32);
201
+ border-radius: 4px;
202
+ }
203
+
204
+ /* Apply padding to the text elements to make the hover/active area more visible */
205
+ .group-text, .table-name, .column-name {
206
+ padding: 3px 5px;
207
+ display: inline-block;
208
+ transition: background-color 0.2s ease;
209
+ }
210
+ /* Existing tooltip styles */
211
+ .sidebar-tooltip {
212
+ position: fixed;
213
+ background-color: white;
214
+ color: #5366A0;
215
+ font-weight: 400;
216
+ padding: 10px;
217
+ border-radius: 6px;
218
+ font-size: 12px;
219
+ opacity: 0;
220
+ transition: opacity 0.2s ease;
221
+ max-width: 250px;
222
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
223
+ z-index: 1100;
224
+ visibility: hidden;
225
+ display: none;
226
+ border: 1px solid #5366A0;
227
+ margin-left: -15px;
228
+ }
229
+ .sidebar-tooltip:before {
230
+ content: '';
231
+ position: absolute;
232
+ top: 50%;
233
+ left: -10px;
234
+ transform: translateY(-50%);
235
+ border-width: 10px 10px 10px 0;
236
+ border-style: solid;
237
+ border-color: transparent #5366A0 transparent transparent;
238
+ }
239
+
240
+ .sidebar-tooltip:after {
241
+ content: '';
242
+ position: absolute;
243
+ top: 50%;
244
+ left: -9px;
245
+ transform: translateY(-50%);
246
+ border-width: 9px 9px 9px 0;
247
+ border-style: solid;
248
+ border-color: transparent white transparent transparent;
249
+ }
250
+
251
+
252
+ .sidebar-tooltip.visible {
253
+ opacity: 1;
254
+ visibility: visible; /* Add this line */
255
+ display: block;
256
+ }
257
+
258
+ .tooltip-content {
259
+ display: flex;
260
+ flex-direction: column;
261
+ }
262
+
263
+ .tooltip-line {
264
+ margin-bottom: 5px;
265
+ }
266
+
267
+ .tooltip-label {
268
+ color: #5366A0;
269
+ margin-right: 5px;
270
+ }
271
+
272
+ .tooltip-value {
273
+ font-weight: bold;
274
+ color: #2C3E82;
275
+ }
276
+ .logodb{
277
+ height: 27px;
278
+ }
279
+ /* Update active item styling to target rows instead of text */
280
+ .group-row.sidebar-item-active,
281
+ .table-row.sidebar-item-active,
282
+ .column-row.sidebar-item-active {
283
+ background-color: rgba(255, 255, 255, 0.32);
284
+ border-radius: 4px;
285
+ }
286
+
287
+ @media (min-width: 768px) and (max-width: 1368px) {
288
+ /* Keep sidebar content readable */
289
+ .group-text, .table-name, .column-name {
290
+ font-size: 13px;
291
+ }
292
+
293
+ .database-categories-title {
294
+ font-size: 14px;
295
+ }
296
+ }
@@ -0,0 +1,417 @@
1
+ /* Add these styles to your existing CSS */
2
+ .group-header-left {
3
+ gap: 10px;
4
+ }
5
+
6
+ .group-name {
7
+ font-weight: 600;
8
+ font-size: 14px;
9
+ color: #666C79;
10
+ }
11
+
12
+ .view-button {
13
+ background-color: #E7E8EA;
14
+ color: #666C79;
15
+ transition: all 0.3s ease;
16
+ }
17
+
18
+ .view-button.active {
19
+ background-color: #5366A0;
20
+ color: white;
21
+ }
22
+
23
+ .group-content {
24
+ display: none;
25
+ padding: 0;
26
+ background-color: #FFFFFF;
27
+ }
28
+
29
+ .table-content-inner {
30
+ display: block;
31
+ }
32
+
33
+ .group-table-row {
34
+ font-size: 14px;
35
+ padding: 12px 16px;
36
+ border-bottom: 1px solid #f0f0f0;
37
+ }
38
+
39
+ .group-table-row:last-child {
40
+ border-bottom: none;
41
+ }
42
+
43
+ .group-table-name {
44
+ display: flex;
45
+ align-items: center;
46
+ gap: 8px;
47
+ font-size: 14px;
48
+ color: #666C79;
49
+ }
50
+
51
+ .group-table-notes {
52
+ color: #666C79;
53
+ font-size: 14px;
54
+ }
55
+
56
+ .group-count-badge {
57
+ width: 20px;
58
+ height: 20px;
59
+ font-size: 12px;
60
+ font-weight: 800;
61
+ }
62
+
63
+ .group-content-header {
64
+ padding: 10px 16px;
65
+ font-size: 14px;
66
+ color: #666C79 !important;
67
+ font-weight: 600;
68
+ background-color: #f8f9fa !important;
69
+ height: 30px !important;
70
+ }
71
+
72
+ .no-tables-message {
73
+ padding: 20px;
74
+ color: #666C79;
75
+ font-size: 14px;
76
+ }
77
+
78
+ .main-content-body{
79
+ padding: 23px;
80
+ margin-left: 19px;
81
+ }
82
+
83
+ .dbdoc-breadcrumb {
84
+ font-size: 12px;
85
+ font-weight: bold;
86
+ color: #999EA7;
87
+ }
88
+
89
+ .dbdocs-breadcrumb {
90
+ padding-left: 0px;
91
+ border: none;
92
+ background-color: transparent;
93
+ font-size: 12px;
94
+ color: #364380;
95
+ font-weight: bold;
96
+ margin: 0 5px;
97
+ }
98
+ .bg-orange{
99
+ background-color: rgb(221, 147, 101);
100
+ }
101
+ .bg-darkblue{
102
+ background-color: rgb(109, 101, 221);
103
+ }
104
+ .bg-green{
105
+ background-color: rgb(141, 221, 101);
106
+ }
107
+ .bg-yellow{
108
+ background-color: #ffc107;
109
+ }
110
+ .group-content-name{
111
+ margin-left: 0px;
112
+ }
113
+ .group-header {
114
+ cursor: pointer;
115
+ }
116
+ .truncate-text {
117
+ white-space: nowrap;
118
+ overflow: hidden;
119
+ text-overflow: ellipsis;
120
+ max-width: 100%;
121
+ }
122
+ .remarks-text {
123
+ max-width: 300px;
124
+ }
125
+
126
+ .group-table-name{
127
+ border: none !important;
128
+ padding: 0px;
129
+ color: #666C79 !important;
130
+ }
131
+ .group-table-notes{
132
+ border: none !important;
133
+ padding: 0px;
134
+ color: #666C79 !important;
135
+ }
136
+ /* Remove hover effect for table rows */
137
+ .group-table-row:hover {
138
+ box-shadow: none !important;
139
+ }
140
+
141
+ /* Ensure text color doesn't change on hover */
142
+ .group-table-row:hover td,
143
+ .group-table-row:hover .truncate-text,
144
+ .group-table-row:hover span {
145
+ color: inherit !important; /* Keep the original text color */
146
+ }
147
+ .group-table-row:hover td,
148
+ .group-table-row:hover div,
149
+ .group-table-row:hover span {
150
+ color: inherit !important; /* Keep text color consistent */
151
+ box-shadow: none !important; /* Remove shadow effects */
152
+ }
153
+ .table>:not(caption)>*>* {
154
+ background-color: transparent !important;
155
+ }
156
+ .typedescription{
157
+ color: #5366A0 !important;
158
+ }
159
+ .relation-link{
160
+ color: #5366A0 !important;
161
+ text-decoration: none !important;
162
+ }
163
+ .column-details-header{
164
+ background-color: transparent !important;
165
+ color: #666C79 !important;
166
+ border: none !important;
167
+ padding-left: 33px !important;
168
+ }
169
+ .group-content-name{
170
+ background-color: transparent !important;
171
+ color: #666C79 !important;
172
+ border: none !important;
173
+ }
174
+ /* Info icon styling */
175
+ .info-icon {
176
+ color: #5366A0;
177
+ cursor: pointer;
178
+ font-size: 14px;
179
+ margin-left: 8px;
180
+ }
181
+
182
+ /* Custom tooltip styling */
183
+ .custom-tooltip {
184
+ opacity: 1 !important;
185
+ }
186
+
187
+ .custom-tooltip .tooltip-inner {
188
+ background-color: white !important;
189
+ color: #666C79 !important;
190
+ border: 1px solid #5366A0 !important;
191
+ padding: 10px !important;
192
+ max-width: 300px !important;
193
+ text-align: left !important;
194
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1) !important;
195
+ }
196
+
197
+ /* Custom tooltip arrow */
198
+ .custom-tooltip .tooltip-arrow::before {
199
+ border-right-color: #5366A0 !important;
200
+ }
201
+
202
+ /* Ensure proper alignment */
203
+ .typedescription .d-flex {
204
+ height: 100%;
205
+ align-items: center;
206
+ }
207
+
208
+ /* Make sure tooltips appear above other elements */
209
+ .tooltip {
210
+ z-index: 9999 !important;
211
+ }
212
+ /* Tooltip heading */
213
+ .type-tooltip-heading {
214
+ font-size: 12px;
215
+ color: #5366A0;
216
+ font-weight: bold;
217
+ margin-bottom: 4px;
218
+ }
219
+
220
+ /* Tooltip description/content */
221
+ .type-tooltip-desc {
222
+ color: #666C79;
223
+ margin-bottom: 2px;
224
+ font-size: 12px;
225
+ font-weight: normal;
226
+ }
227
+
228
+ /* Remove extra margin from last item */
229
+ .type-tooltip-desc:last-child {
230
+ margin-bottom: 0;
231
+ }
232
+
233
+ /* Tooltip arrow (right side) */
234
+ .bs-tooltip-end .tooltip-arrow::before,
235
+ .bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before {
236
+ border-right-color: #5366A0 !important; /* border color */
237
+ background: #fff !important; /* arrow fill color */
238
+ }
239
+
240
+ /* For other directions, if needed: */
241
+ .bs-tooltip-top .tooltip-arrow::before,
242
+ .bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before {
243
+ border-top-color: #5366A0 !important;
244
+ background: #fff !important;
245
+ }
246
+ .bs-tooltip-bottom .tooltip-arrow::before,
247
+ .bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before {
248
+ border-bottom-color: #5366A0 !important;
249
+ background: #fff !important;
250
+ }
251
+ .bs-tooltip-start .tooltip-arrow::before,
252
+ .bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before {
253
+ border-left-color: #5366A0 !important;
254
+ background: #fff !important;
255
+ }
256
+ .third-header{
257
+ border: none !important;
258
+ box-shadow: none !important;
259
+ border-bottom-width: 0px !important;
260
+ border-top-width: 0px !important;
261
+ }
262
+ .third-header-1{
263
+ padding-left: 27px !important;
264
+ }
265
+ .third-row{
266
+ padding-left: 20px;
267
+ }
268
+ .third-color{
269
+ color: #666C79 !important;
270
+ }
271
+ .table-details-row{
272
+ height: 43px;
273
+ }
274
+ .constraint-badge {
275
+ position: relative;
276
+ cursor: pointer;
277
+ }
278
+
279
+ /* Tooltip box, shown to the right */
280
+ .constraint-badge::after {
281
+ content: attr(data-tooltip);
282
+ position: absolute;
283
+ top: 50%;
284
+ left: 110%; /* Show to the right of the badge */
285
+ transform: translateY(-50%);
286
+ min-width: 140px;
287
+ max-width: 220px;
288
+ background: #fff;
289
+ border: 1.5px solid #5366A0;
290
+ color: #666C79;
291
+ padding: 8px 14px;
292
+ border-radius: 6px;
293
+ font-size: 12px;
294
+ font-weight: 500;
295
+ box-shadow: 0 2px 8px rgba(54, 67, 128, 0.07);
296
+ opacity: 0;
297
+ pointer-events: none;
298
+ transition: opacity 0.15s;
299
+ z-index: 100;
300
+ white-space: pre-line;
301
+ text-align: left;
302
+ }
303
+
304
+ /* Tooltip arrow pointing left, placed on the left edge of the tooltip box */
305
+ .constraint-badge::before {
306
+ content: "";
307
+ position: absolute;
308
+ top: 50%;
309
+ left: 102%; /* Align with tooltip box */
310
+ transform: translateY(-50%);
311
+ border-width: 7px 7px 7px 0;
312
+ border-style: solid;
313
+ border-color: transparent #5366A0 transparent transparent;
314
+ opacity: 0;
315
+ transition: opacity 0.15s;
316
+ z-index: 101;
317
+ }
318
+
319
+ .constraint-badge:hover::after,
320
+ .constraint-badge:hover::before {
321
+ opacity: 1;
322
+ pointer-events: auto;
323
+ }
324
+ .table-information-below{
325
+ border-left: 4px solid #5366A0;
326
+ }
327
+
328
+ .table-info-col {
329
+ margin-bottom: 10px;
330
+ }
331
+
332
+ .table-info-label {
333
+ font-size: 14px;
334
+ font-weight: bold;
335
+ color: #5366A0;
336
+ margin-bottom: 2px;
337
+ }
338
+
339
+ .table-info-value {
340
+ color: #666C79;
341
+ margin-bottom: 8px;
342
+ font-size: 14px;
343
+ word-break: break-word;
344
+ }
345
+
346
+ @media (max-width: 767.98px) {
347
+ .table-info-row > .table-info-col {
348
+ margin-bottom: 16px;
349
+ }
350
+ }
351
+
352
+
353
+ @media (min-width: 768px) and (max-width: 1368px) {
354
+ .table-hover{
355
+ overflow: hidden;
356
+ }
357
+ /* Table container with hidden scroll */
358
+ .table-hover {
359
+ overflow-x: auto;
360
+ -ms-overflow-style: none; /* IE and Edge */
361
+ scrollbar-width: none; /* Firefox */
362
+ }
363
+
364
+ .table-hover::-webkit-scrollbar {
365
+ display: none; /* Chrome/Safari/Edge */
366
+ }
367
+
368
+ .table-hover .table-wrapper {
369
+ min-width: 1300px; /* or whatever width you want for scrolling */
370
+ width: max-content;
371
+ display: block;
372
+ }
373
+
374
+ .second-page-header {
375
+ background: #f8f9fa;
376
+ z-index: 2;
377
+ position: sticky;
378
+ left: 0;
379
+ min-width: 1300px;
380
+ }
381
+ .table-hover {
382
+ display: block;
383
+ min-width: 200px;
384
+ }
385
+ .group-name {
386
+ font-size: 13px;
387
+ }
388
+ .group-table-names .truncate-text {
389
+ max-width: 133px;
390
+ }
391
+ .group-table-names:nth-child(2) .truncate-text {
392
+ max-width: 145px;
393
+ }
394
+ .group-content-names1 {
395
+ width: 259px;
396
+ }
397
+ .second-page-header{
398
+ gap: 71px;
399
+ }
400
+ .group-section{
401
+ overflow: hidden;
402
+ }
403
+ .group-table-name{
404
+ width: 132px;
405
+ }
406
+ .typedescription {
407
+ width: 132px;
408
+ }
409
+ }
410
+ .table-details-content {
411
+ container-type: inline-size;
412
+ }
413
+ @container (max-width: 470px) {
414
+ .table-detains-width {
415
+ width: 468px !important;
416
+ }
417
+ }
@@ -0,0 +1,23 @@
1
+ # This is the base controller for all admin-related controllers.
2
+ # It ensures authentication and defines shared helper methods for permission checks.
3
+ module DbdocEngine
4
+ class Admin::BaseController < ApplicationController
5
+ # Ensure that only authenticated users can access admin controllers
6
+ before_action :require_authentication
7
+
8
+ # Checks if the current user has permission to edit resources.
9
+ # Typically allows access for users with the 'admin' role or higher.
10
+ def can_edit?
11
+ current_user.admin_or_higher?
12
+ end
13
+
14
+ # Checks if the current user has permission to delete resources.
15
+ # Only users with the 'superadmin' role are allowed.
16
+ def can_delete?
17
+ current_user.superadmin?
18
+ end
19
+
20
+ # Expose permission check methods to views
21
+ helper_method :can_edit?, :can_delete?
22
+ end
23
+ end