infold 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 (356) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +33 -0
  4. data/Rakefile +8 -0
  5. data/app/assets/builds/infold.css +17147 -0
  6. data/app/assets/builds/infold.css.map +7 -0
  7. data/app/assets/builds/infold.js +17202 -0
  8. data/app/assets/builds/infold.js.map +7 -0
  9. data/app/assets/config/infold_manifest.js +0 -0
  10. data/app/assets/stylesheets/infold.custom.css +76 -0
  11. data/app/assets/stylesheets/infold.custom.css.map +1 -0
  12. data/app/components/infold/input_fieldset_component.html.haml +14 -0
  13. data/app/components/infold/input_fieldset_component.rb +22 -0
  14. data/app/components/infold/radio_fieldset_component.html.haml +11 -0
  15. data/app/components/infold/radio_fieldset_component.rb +14 -0
  16. data/app/components/infold/select_fieldset_component.html.haml +7 -0
  17. data/app/components/infold/select_fieldset_component.rb +15 -0
  18. data/app/controllers/infold/app_view_forms_controller.rb +64 -0
  19. data/app/controllers/infold/app_view_shows_controller.rb +60 -0
  20. data/app/controllers/infold/application_controller.rb +17 -0
  21. data/app/controllers/infold/apps_controller.rb +68 -0
  22. data/app/controllers/infold/attachment_fields_controller.rb +59 -0
  23. data/app/controllers/infold/builds_controller.rb +21 -0
  24. data/app/controllers/infold/columns_controller.rb +89 -0
  25. data/app/controllers/infold/csv_columns_controller.rb +43 -0
  26. data/app/controllers/infold/form_associations_controller.rb +57 -0
  27. data/app/controllers/infold/menu_directories_controller.rb +19 -0
  28. data/app/controllers/infold/menus_controller.rb +35 -0
  29. data/app/controllers/infold/models_controller.rb +28 -0
  30. data/app/controllers/infold/pages_controller.rb +8 -0
  31. data/app/controllers/infold/search_conditions_controller.rb +63 -0
  32. data/app/controllers/infold/search_result_fields_controller.rb +62 -0
  33. data/app/controllers/infold/show_associations_controller.rb +54 -0
  34. data/app/controllers/infold/sync_dbs_controller.rb +13 -0
  35. data/app/decorators/infold/app_view_form_decorator.rb +56 -0
  36. data/app/decorators/infold/app_view_index_decorator.rb +53 -0
  37. data/app/decorators/infold/app_view_modal_decorator.rb +13 -0
  38. data/app/decorators/infold/app_view_show_decorator.rb +26 -0
  39. data/app/decorators/infold/attachment_field_decorator.rb +40 -0
  40. data/app/decorators/infold/build_decorator.rb +15 -0
  41. data/app/decorators/infold/column_display_decorator.rb +59 -0
  42. data/app/decorators/infold/csv_column_decorator.rb +5 -0
  43. data/app/decorators/infold/form_association_column_decorator.rb +5 -0
  44. data/app/decorators/infold/form_column_decorator.rb +57 -0
  45. data/app/decorators/infold/model_association_decorator.rb +39 -0
  46. data/app/decorators/infold/model_column_decorator.rb +201 -0
  47. data/app/decorators/infold/model_decorator.rb +27 -0
  48. data/app/decorators/infold/search_condition_decorator.rb +101 -0
  49. data/app/decorators/infold/search_result_column_decorator.rb +5 -0
  50. data/app/decorators/infold/show_association_column_decorator.rb +5 -0
  51. data/app/decorators/infold/show_association_decorator.rb +13 -0
  52. data/app/decorators/infold/show_field_decorator.rb +5 -0
  53. data/app/helpers/infold/application_helper.rb +29 -0
  54. data/app/javascript/admin.scss +5 -0
  55. data/app/javascript/controllers/application.js +9 -0
  56. data/app/javascript/controllers/attachment_field_controller.js +19 -0
  57. data/app/javascript/controllers/column_controller.js +20 -0
  58. data/app/javascript/controllers/flash_controller.js +10 -0
  59. data/app/javascript/controllers/index.js +32 -0
  60. data/app/javascript/controllers/menu_controller.js +26 -0
  61. data/app/javascript/controllers/menu_directory_controller.js +16 -0
  62. data/app/javascript/controllers/modal_controller.js +15 -0
  63. data/app/javascript/controllers/nested_form_controller.js +32 -0
  64. data/app/javascript/controllers/search_condition_controller.js +41 -0
  65. data/app/javascript/controllers/sortable_controller.js +19 -0
  66. data/app/javascript/infold.js +22 -0
  67. data/app/javascript/infold.scss +68 -0
  68. data/app/javascript/stylesheets/admin/common.scss +112 -0
  69. data/app/javascript/stylesheets/admin/form.scss +52 -0
  70. data/app/javascript/stylesheets/admin/index.scss +93 -0
  71. data/app/javascript/stylesheets/admin/modal.scss +37 -0
  72. data/app/javascript/stylesheets/admin/show.scss +16 -0
  73. data/app/jobs/infold/application_job.rb +4 -0
  74. data/app/mailers/infold/application_mailer.rb +6 -0
  75. data/app/models/concerns/infold/app_view_search_concern.rb +72 -0
  76. data/app/models/concerns/infold/form_column_concern.rb +63 -0
  77. data/app/models/infold/app.rb +41 -0
  78. data/app/models/infold/app_view.rb +27 -0
  79. data/app/models/infold/app_view_form.rb +43 -0
  80. data/app/models/infold/app_view_index.rb +36 -0
  81. data/app/models/infold/app_view_modal.rb +21 -0
  82. data/app/models/infold/app_view_show.rb +47 -0
  83. data/app/models/infold/application_record.rb +7 -0
  84. data/app/models/infold/attachment_field.rb +35 -0
  85. data/app/models/infold/build.rb +35 -0
  86. data/app/models/infold/csv_column.rb +9 -0
  87. data/app/models/infold/enum.rb +12 -0
  88. data/app/models/infold/form_association.rb +41 -0
  89. data/app/models/infold/form_association_attachment_field.rb +5 -0
  90. data/app/models/infold/form_association_column.rb +5 -0
  91. data/app/models/infold/form_association_field.rb +7 -0
  92. data/app/models/infold/form_attachment_field.rb +5 -0
  93. data/app/models/infold/form_column.rb +5 -0
  94. data/app/models/infold/form_field.rb +7 -0
  95. data/app/models/infold/menu_item.rb +45 -0
  96. data/app/models/infold/model.rb +40 -0
  97. data/app/models/infold/model_association.rb +51 -0
  98. data/app/models/infold/model_column.rb +127 -0
  99. data/app/models/infold/project.rb +29 -0
  100. data/app/models/infold/schema_rb.rb +177 -0
  101. data/app/models/infold/search_condition.rb +62 -0
  102. data/app/models/infold/search_result_attachment_field.rb +5 -0
  103. data/app/models/infold/search_result_column.rb +6 -0
  104. data/app/models/infold/search_result_field.rb +12 -0
  105. data/app/models/infold/show_association.rb +42 -0
  106. data/app/models/infold/show_association_attachment_field.rb +5 -0
  107. data/app/models/infold/show_association_column.rb +5 -0
  108. data/app/models/infold/show_association_field.rb +8 -0
  109. data/app/models/infold/show_attachment_field.rb +7 -0
  110. data/app/models/infold/show_column.rb +7 -0
  111. data/app/models/infold/show_field.rb +11 -0
  112. data/app/validators/infold/ruby_code_validator.rb +9 -0
  113. data/app/views/infold/app_view_forms/_bulk_form.html.haml +16 -0
  114. data/app/views/infold/app_view_forms/_tab.html.haml +12 -0
  115. data/app/views/infold/app_view_forms/show.html.haml +7 -0
  116. data/app/views/infold/app_view_shows/_bulk_form.html.haml +15 -0
  117. data/app/views/infold/app_view_shows/_tab.html.haml +12 -0
  118. data/app/views/infold/app_view_shows/show.html.haml +7 -0
  119. data/app/views/infold/app_view_shows/update.turbo_stream.haml +1 -0
  120. data/app/views/infold/application/_flash.html.haml +6 -0
  121. data/app/views/infold/apps/_form.html.haml +30 -0
  122. data/app/views/infold/apps/_page_header.html.haml +5 -0
  123. data/app/views/infold/apps/_tab.html.haml +13 -0
  124. data/app/views/infold/apps/create.turbo_stream.haml +3 -0
  125. data/app/views/infold/apps/edit.html.haml +6 -0
  126. data/app/views/infold/apps/new.html.haml +8 -0
  127. data/app/views/infold/apps/update.turbo_stream.haml +3 -0
  128. data/app/views/infold/associations/_form.html.haml +18 -0
  129. data/app/views/infold/associations/edit.html.haml +5 -0
  130. data/app/views/infold/attachment_fields/_form.html.haml +51 -0
  131. data/app/views/infold/attachment_fields/edit.html.haml +7 -0
  132. data/app/views/infold/attachment_fields/form.turbo_stream.haml +4 -0
  133. data/app/views/infold/attachment_fields/index.html.haml +28 -0
  134. data/app/views/infold/attachment_fields/new.html.haml +7 -0
  135. data/app/views/infold/builds/create.turbo_stream.haml +8 -0
  136. data/app/views/infold/builds/new.html.haml +23 -0
  137. data/app/views/infold/columns/_bulk_form.html.haml +18 -0
  138. data/app/views/infold/columns/_row.html.haml +26 -0
  139. data/app/views/infold/columns/_setting.html.haml +42 -0
  140. data/app/views/infold/columns/bulk.turbo_stream.haml +3 -0
  141. data/app/views/infold/columns/edit.html.haml +5 -0
  142. data/app/views/infold/columns/index.html.haml +9 -0
  143. data/app/views/infold/columns/update.turbo_stream.haml +8 -0
  144. data/app/views/infold/csv_columns/_bulk_form.html.haml +14 -0
  145. data/app/views/infold/csv_columns/_row.html.haml +10 -0
  146. data/app/views/infold/csv_columns/bulk.turbo_stream.haml +3 -0
  147. data/app/views/infold/csv_columns/index.html.haml +7 -0
  148. data/app/views/infold/enums/_form.html.haml +13 -0
  149. data/app/views/infold/enums/_index.html.haml +27 -0
  150. data/app/views/infold/enums/index.html.haml +5 -0
  151. data/app/views/infold/form_association_attachment_fields/_form.html.haml +13 -0
  152. data/app/views/infold/form_association_columns/_form.html.haml +20 -0
  153. data/app/views/infold/form_associations/_bulk_form.html.haml +16 -0
  154. data/app/views/infold/form_associations/_form.html.haml +19 -0
  155. data/app/views/infold/form_associations/show.html.haml +7 -0
  156. data/app/views/infold/form_associations/update.turbo_stream.haml +1 -0
  157. data/app/views/infold/form_attachment_fields/_form.html.haml +14 -0
  158. data/app/views/infold/form_columns/_form.html.haml +21 -0
  159. data/app/views/infold/menu_directories/_item.html.haml +20 -0
  160. data/app/views/infold/menu_directories/create.turbo_stream.haml +2 -0
  161. data/app/views/infold/menu_directories/destroy.turbo_stream.haml +5 -0
  162. data/app/views/infold/menus/_app.html.haml +10 -0
  163. data/app/views/infold/menus/_items.html.haml +7 -0
  164. data/app/views/infold/menus/edit.html.haml +23 -0
  165. data/app/views/infold/menus/update.turbo_stream.haml +3 -0
  166. data/app/views/infold/models/_form.html.haml +12 -0
  167. data/app/views/infold/models/_tab.html.haml +7 -0
  168. data/app/views/infold/models/edit.html.haml +9 -0
  169. data/app/views/infold/models/update.turbo_stream.haml +3 -0
  170. data/app/views/infold/search_conditions/_bulk_form.html.haml +24 -0
  171. data/app/views/infold/search_conditions/_column_options.html.haml +3 -0
  172. data/app/views/infold/search_conditions/_form_kind_options.html.haml +3 -0
  173. data/app/views/infold/search_conditions/_row.html.haml +31 -0
  174. data/app/views/infold/search_conditions/_sign_options.html.haml +3 -0
  175. data/app/views/infold/search_conditions/_tab.html.haml +12 -0
  176. data/app/views/infold/search_conditions/bulk.turbo_stream.haml +3 -0
  177. data/app/views/infold/search_conditions/index.html.haml +7 -0
  178. data/app/views/infold/search_conditions/refresh_columns.turbo_stream.haml +6 -0
  179. data/app/views/infold/search_conditions/refresh_form_kinds.turbo_stream.haml +4 -0
  180. data/app/views/infold/search_conditions/refresh_signs.turbo_stream.haml +2 -0
  181. data/app/views/infold/search_result_attachment_fields/_form.html.haml +12 -0
  182. data/app/views/infold/search_result_columns/_form.html.haml +12 -0
  183. data/app/views/infold/search_result_fields/_bulk_form.html.haml +23 -0
  184. data/app/views/infold/search_result_fields/_row.html.haml +12 -0
  185. data/app/views/infold/search_result_fields/bulk.turbo_stream.haml +3 -0
  186. data/app/views/infold/search_result_fields/index.html.haml +7 -0
  187. data/app/views/infold/show_association_attachment_fields/_form.html.haml +12 -0
  188. data/app/views/infold/show_association_columns/_form.html.haml +12 -0
  189. data/app/views/infold/show_associations/_bulk_form.html.haml +15 -0
  190. data/app/views/infold/show_associations/_form.html.haml +14 -0
  191. data/app/views/infold/show_associations/show.html.haml +7 -0
  192. data/app/views/infold/show_associations/update.turbo_stream.haml +1 -0
  193. data/app/views/infold/show_attachment_fields/_form.html.haml +12 -0
  194. data/app/views/infold/show_columns/_form.html.haml +12 -0
  195. data/app/views/infold/sync_dbs/create.turbo_stream.haml +1 -0
  196. data/app/views/infold/sync_dbs/show.html.haml +11 -0
  197. data/app/views/layouts/infold/application.html.haml +112 -0
  198. data/config/database.yml +11 -0
  199. data/config/initializers/infold_assets.rb +12 -0
  200. data/config/initializers/infold_locale.rb +1 -0
  201. data/config/locales/infold/ar/app/en.yml +6 -0
  202. data/config/locales/infold/ar/app/ja.yml +6 -0
  203. data/config/locales/infold/ar/app_view/en.yml +4 -0
  204. data/config/locales/infold/ar/app_view/ja.yml +4 -0
  205. data/config/locales/infold/ar/app_view_form/en.yml +10 -0
  206. data/config/locales/infold/ar/app_view_form/ja.yml +10 -0
  207. data/config/locales/infold/ar/app_view_index/en.yml +12 -0
  208. data/config/locales/infold/ar/app_view_index/ja.yml +12 -0
  209. data/config/locales/infold/ar/app_view_modal/en.yml +6 -0
  210. data/config/locales/infold/ar/app_view_modal/ja.yml +6 -0
  211. data/config/locales/infold/ar/app_view_show/en.yml +9 -0
  212. data/config/locales/infold/ar/app_view_show/ja.yml +9 -0
  213. data/config/locales/infold/ar/csv_column/en.yml +8 -0
  214. data/config/locales/infold/ar/csv_column/ja.yml +8 -0
  215. data/config/locales/infold/ar/form_association_column/ja.yml +15 -0
  216. data/config/locales/infold/ar/form_column/ja.yml +15 -0
  217. data/config/locales/infold/ar/menu_item/ja.yml +6 -0
  218. data/config/locales/infold/ar/model/ja.yml +11 -0
  219. data/config/locales/infold/ar/model_association/en.yml +6 -0
  220. data/config/locales/infold/ar/model_association/ja.yml +10 -0
  221. data/config/locales/infold/ar/model_column/en.yml +34 -0
  222. data/config/locales/infold/ar/model_column/ja.yml +34 -0
  223. data/config/locales/infold/ar/search_condition/en.yml +30 -0
  224. data/config/locales/infold/ar/search_condition/ja.yml +30 -0
  225. data/config/locales/infold/ar/search_result_field/en.yml +9 -0
  226. data/config/locales/infold/ar/search_result_field/ja.yml +9 -0
  227. data/config/locales/infold/en.yml +40 -0
  228. data/config/locales/infold/ja.yml +41 -0
  229. data/config/routes.rb +40 -0
  230. data/db/infold_test.sqlite3 +0 -0
  231. data/db/migrate/20220419050641_create_infold_projects.rb +9 -0
  232. data/db/migrate/20220419051049_create_infold_models.rb +15 -0
  233. data/db/migrate/20220419051601_create_infold_columns.rb +23 -0
  234. data/db/migrate/20220419051718_create_infold_attachment_fields.rb +15 -0
  235. data/db/migrate/20220419052017_create_infold_model_associations.rb +16 -0
  236. data/db/migrate/20220419052154_create_infold_apps.rb +10 -0
  237. data/db/migrate/20220419052320_create_infold_app_views.rb +14 -0
  238. data/db/migrate/20220419052450_create_infold_search_conditions.rb +14 -0
  239. data/db/migrate/20220419052707_create_infold_search_result_fields.rb +18 -0
  240. data/db/migrate/20220419053338_create_infold_show_fields.rb +18 -0
  241. data/db/migrate/20220419053425_create_infold_show_association_fields.rb +15 -0
  242. data/db/migrate/20220419060937_create_infold_form_fields.rb +19 -0
  243. data/db/migrate/20220419061148_create_infold_form_association_fields.rb +16 -0
  244. data/db/migrate/20220419061725_create_infold_enums.rb +16 -0
  245. data/db/migrate/20220419062020_create_infold_menu_items.rb +16 -0
  246. data/db/migrate/20220419062119_create_infold_csv_columns.rb +12 -0
  247. data/db/schema.rb +260 -0
  248. data/lib/generators/infold/app/app_generator.rb +134 -0
  249. data/lib/generators/infold/app/templates/controller.rb.tt +100 -0
  250. data/lib/generators/infold/app/templates/search_form.rb.tt +31 -0
  251. data/lib/generators/infold/app/templates/views/_association_fields.haml.tt +16 -0
  252. data/lib/generators/infold/app/templates/views/_detail.haml.tt +100 -0
  253. data/lib/generators/infold/app/templates/views/_detail_modal_wrapper.haml.tt +9 -0
  254. data/lib/generators/infold/app/templates/views/_form.haml.tt +66 -0
  255. data/lib/generators/infold/app/templates/views/_index_row.haml.tt +17 -0
  256. data/lib/generators/infold/app/templates/views/_show_operation.haml.tt +5 -0
  257. data/lib/generators/infold/app/templates/views/edit+turbo_frame.haml.tt +13 -0
  258. data/lib/generators/infold/app/templates/views/edit.haml.tt +10 -0
  259. data/lib/generators/infold/app/templates/views/form.turbo_stream.haml.tt +17 -0
  260. data/lib/generators/infold/app/templates/views/index+turbo_frame.haml.tt +43 -0
  261. data/lib/generators/infold/app/templates/views/index.csv.ruby.tt +18 -0
  262. data/lib/generators/infold/app/templates/views/index.haml.tt +49 -0
  263. data/lib/generators/infold/app/templates/views/new+turbo_frame.haml.tt +14 -0
  264. data/lib/generators/infold/app/templates/views/new.haml.tt +12 -0
  265. data/lib/generators/infold/app/templates/views/show+turbo_frame.haml.tt +4 -0
  266. data/lib/generators/infold/app/templates/views/show.haml.tt +9 -0
  267. data/lib/generators/infold/install/install_generator.rb +151 -0
  268. data/lib/generators/infold/install/templates/app/components/admin/enum_badge_component.html.haml +4 -0
  269. data/lib/generators/infold/install/templates/app/components/admin/enum_badge_component.rb +11 -0
  270. data/lib/generators/infold/install/templates/app/components/admin/form/checkbox_fieldset_component.html.haml +11 -0
  271. data/lib/generators/infold/install/templates/app/components/admin/form/checkbox_fieldset_component.rb +15 -0
  272. data/lib/generators/infold/install/templates/app/components/admin/form/datetime_fieldset_component.html.haml +20 -0
  273. data/lib/generators/infold/install/templates/app/components/admin/form/datetime_fieldset_component.rb +13 -0
  274. data/lib/generators/infold/install/templates/app/components/admin/form/file_upload_component.html.haml +12 -0
  275. data/lib/generators/infold/install/templates/app/components/admin/form/file_upload_component.rb +12 -0
  276. data/lib/generators/infold/install/templates/app/components/admin/form/input_fieldset_component.html.haml +14 -0
  277. data/lib/generators/infold/install/templates/app/components/admin/form/input_fieldset_component.rb +24 -0
  278. data/lib/generators/infold/install/templates/app/components/admin/form/radio_fieldset_component.html.haml +11 -0
  279. data/lib/generators/infold/install/templates/app/components/admin/form/radio_fieldset_component.rb +15 -0
  280. data/lib/generators/infold/install/templates/app/components/admin/form/relation_fieldset_component.html.haml +17 -0
  281. data/lib/generators/infold/install/templates/app/components/admin/form/relation_fieldset_component.rb +21 -0
  282. data/lib/generators/infold/install/templates/app/components/admin/form/select_fieldset_component.html.haml +7 -0
  283. data/lib/generators/infold/install/templates/app/components/admin/form/select_fieldset_component.rb +16 -0
  284. data/lib/generators/infold/install/templates/app/components/admin/form/switch_element_component.html.haml +4 -0
  285. data/lib/generators/infold/install/templates/app/components/admin/form/switch_element_component.rb +12 -0
  286. data/lib/generators/infold/install/templates/app/components/admin/remote_modal_component.html.haml +8 -0
  287. data/lib/generators/infold/install/templates/app/components/admin/remote_modal_component.rb +21 -0
  288. data/lib/generators/infold/install/templates/app/components/admin/sortable_th_component.html.haml +4 -0
  289. data/lib/generators/infold/install/templates/app/components/admin/sortable_th_component.rb +27 -0
  290. data/lib/generators/infold/install/templates/app/controllers/admin/admin_users/registrations_controller.rb +71 -0
  291. data/lib/generators/infold/install/templates/app/controllers/admin/admin_users/sessions_controller.rb +39 -0
  292. data/lib/generators/infold/install/templates/app/controllers/admin/admin_users_controller.rb +62 -0
  293. data/lib/generators/infold/install/templates/app/controllers/admin/base_controller.rb +17 -0
  294. data/lib/generators/infold/install/templates/app/controllers/admin/errors_controller.rb +8 -0
  295. data/lib/generators/infold/install/templates/app/controllers/admin/turbo_devise_controller.rb +21 -0
  296. data/lib/generators/infold/install/templates/app/controllers/concerns/admin/error_handlers.rb +40 -0
  297. data/lib/generators/infold/install/templates/app/forms/admin/search_form_base.rb +48 -0
  298. data/lib/generators/infold/install/templates/app/helpers/admin_helper.rb +37 -0
  299. data/lib/generators/infold/install/templates/app/models/concerns/admin/datetime_field_concern.rb +57 -0
  300. data/lib/generators/infold/install/templates/app/views/admin/admin_users/_detail.html.haml +14 -0
  301. data/lib/generators/infold/install/templates/app/views/admin/admin_users/_form.html.haml +6 -0
  302. data/lib/generators/infold/install/templates/app/views/admin/admin_users/_index_row.html.haml +9 -0
  303. data/lib/generators/infold/install/templates/app/views/admin/admin_users/_show_operation.html.haml +4 -0
  304. data/lib/generators/infold/install/templates/app/views/admin/admin_users/edit.html+turbo_frame.haml +11 -0
  305. data/lib/generators/infold/install/templates/app/views/admin/admin_users/edit.html.haml +10 -0
  306. data/lib/generators/infold/install/templates/app/views/admin/admin_users/form.turbo_stream.haml +4 -0
  307. data/lib/generators/infold/install/templates/app/views/admin/admin_users/index.html.haml +21 -0
  308. data/lib/generators/infold/install/templates/app/views/admin/admin_users/new.html+turbo_frame.haml +11 -0
  309. data/lib/generators/infold/install/templates/app/views/admin/admin_users/new.html.haml +10 -0
  310. data/lib/generators/infold/install/templates/app/views/admin/admin_users/registrations/edit.html.haml +15 -0
  311. data/lib/generators/infold/install/templates/app/views/admin/admin_users/sessions/new.html.haml +19 -0
  312. data/lib/generators/infold/install/templates/app/views/admin/admin_users/show.html+turbo_frame.haml +11 -0
  313. data/lib/generators/infold/install/templates/app/views/admin/admin_users/show.html.haml +8 -0
  314. data/lib/generators/infold/install/templates/app/views/admin/common/_flash.html.haml +6 -0
  315. data/lib/generators/infold/install/templates/app/views/admin/common/_header_menu.html.haml +0 -0
  316. data/lib/generators/infold/install/templates/app/views/admin/errors/bad_request.html.haml +11 -0
  317. data/lib/generators/infold/install/templates/app/views/admin/errors/forbidden.html.haml +11 -0
  318. data/lib/generators/infold/install/templates/app/views/admin/errors/internal_server_error.html.haml +11 -0
  319. data/lib/generators/infold/install/templates/app/views/admin/errors/not_found.html.haml +11 -0
  320. data/lib/generators/infold/install/templates/app/views/admin/kaminari/_first_page.html.haml +2 -0
  321. data/lib/generators/infold/install/templates/app/views/admin/kaminari/_gap.html.haml +2 -0
  322. data/lib/generators/infold/install/templates/app/views/admin/kaminari/_last_page.html.haml +2 -0
  323. data/lib/generators/infold/install/templates/app/views/admin/kaminari/_next_page.html.haml +2 -0
  324. data/lib/generators/infold/install/templates/app/views/admin/kaminari/_page.html.haml +6 -0
  325. data/lib/generators/infold/install/templates/app/views/admin/kaminari/_paginator.html.haml +12 -0
  326. data/lib/generators/infold/install/templates/app/views/admin/kaminari/_prev_page.html.haml +2 -0
  327. data/lib/generators/infold/install/templates/app/views/layouts/admin.haml.tt +49 -0
  328. data/lib/generators/infold/install/templates/config/locales/infold.en.yml +28 -0
  329. data/lib/generators/infold/install/templates/config/locales/infold.ja.yml +28 -0
  330. data/lib/generators/infold/install/templates/config/routes/admin.rb +13 -0
  331. data/lib/generators/infold/install/templates/javascript/admin/controllers/application.js +9 -0
  332. data/lib/generators/infold/install/templates/javascript/admin/controllers/datepicker_controller.js +8 -0
  333. data/lib/generators/infold/install/templates/javascript/admin/controllers/flash_controller.js +10 -0
  334. data/lib/generators/infold/install/templates/javascript/admin/controllers/index.js +26 -0
  335. data/lib/generators/infold/install/templates/javascript/admin/controllers/index_page_controller.js +33 -0
  336. data/lib/generators/infold/install/templates/javascript/admin/controllers/nested_form_controller.js +33 -0
  337. data/lib/generators/infold/install/templates/javascript/admin/controllers/relation_search_controller.js +21 -0
  338. data/lib/generators/infold/install/templates/javascript/admin/controllers/remote_modal_controller.js +37 -0
  339. data/lib/generators/infold/install/templates/javascript/admin/controllers/timepicker_controller.js +8 -0
  340. data/lib/generators/infold/install/templates/javascript/admin/stylesheets/custom.css +290 -0
  341. data/lib/generators/infold/install/templates/javascript/admin/stylesheets/custom.css.map +1 -0
  342. data/lib/generators/infold/install/templates/javascript/esbuild/admin.js +10 -0
  343. data/lib/generators/infold/install/templates/javascript/webpacker/admin.js +9 -0
  344. data/lib/generators/infold/model/model_generator.rb +50 -0
  345. data/lib/generators/infold/model/templates/decorator.rb.tt +10 -0
  346. data/lib/generators/infold/model/templates/model.rb.tt +59 -0
  347. data/lib/generators/infold/project/project_generator.rb +66 -0
  348. data/lib/generators/infold/project/templates/_header_menu.haml.tt +17 -0
  349. data/lib/generators/infold/project/templates/locales/form.yml.tt +11 -0
  350. data/lib/generators/infold/project/templates/locales/model.yml.tt +43 -0
  351. data/lib/generators/infold/project/templates/relation_fieldset_component.rb.tt +30 -0
  352. data/lib/infold/engine.rb +15 -0
  353. data/lib/infold/version.rb +3 -0
  354. data/lib/infold.rb +6 -0
  355. data/lib/tasks/infold_tasks.rake +125 -0
  356. metadata +556 -0
@@ -0,0 +1,201 @@
1
+ module Infold
2
+ module ModelColumnDecorator
3
+
4
+ def default_value
5
+ if default.blank? && !not_null?
6
+ 'nil'
7
+ elsif %w(boolean number enum date datetime).include?(kind)
8
+ default.presence || 'nil'
9
+ else
10
+ "'#{default}'"
11
+ end
12
+ end
13
+
14
+ def locale_and_comment
15
+ [locale.presence, comment.presence].compact.join('.')
16
+ end
17
+
18
+ def code_enum
19
+ return if !kind_enum? || enums.blank?
20
+ enum_codes = enums.map do |enum|
21
+ "#{enum.key}: #{kind_string? ? "'#{enum.value}'" : enum.value}"
22
+ end
23
+ code = "enum #{name}: { "
24
+ code << enum_codes.join(', ')
25
+ code << " }, _prefix: true\n"
26
+ end
27
+
28
+ def code_validates
29
+ return nil if is_primary_key? || is_timestamp_field?
30
+ if is_foreign_key? && required_validate?
31
+ return "validates :#{model_association.belongs_name}, presence: true"
32
+ end
33
+
34
+ code = ''
35
+ # 必須
36
+ if required_validate?
37
+ code += ", presence: true"
38
+ end
39
+
40
+ # unique
41
+ if unique?
42
+ code += ', allow_blank: true' if code.blank?
43
+ code += ", uniqueness: true"
44
+ end
45
+
46
+ # 数値
47
+ if kind_number? && !is_foreign_key?
48
+ code += ', allow_blank: true' if code.blank?
49
+ _code = ", numericality: { "
50
+ _code << 'only_integer: true, ' if %w(integer bigint).include?(number_kind)
51
+ _code << "greater_than_or_equal_to: #{minimum_value}, " if minimum_value.present?
52
+ _code << "less_than_or_equal_to: #{maximum_value}, " if maximum_value.present?
53
+ _code.gsub!(/ { $/, 'true')
54
+ _code.gsub!(/, $/, ' }')
55
+ code += _code
56
+ end
57
+
58
+ # 文字列
59
+ if kind_string? && (minimum_length.present? || maximum_length.present?)
60
+ code += ', allow_blank: true' if code.blank?
61
+ _code = "length: { "
62
+ _code << "minimum: #{minimum_length}, " if minimum_length.present?
63
+ _code << "maximum: #{maximum_length} }" if maximum_length.present?
64
+ _code.gsub!(/, $/, ' }')
65
+ code += _code
66
+ end
67
+
68
+ "validates :#{name}#{code}" if code.present?
69
+ end
70
+
71
+ def code_for_datetime_validates
72
+ return if !kind_datetime? || is_timestamp_field?
73
+ code = "validates :#{name}_date, presence: true, if: ->{ #{name}_time.present? }\n"
74
+ code += " validates :#{name}_time, presence: true, if: ->{ #{name}_date.present? }"
75
+ "#{code}"
76
+ end
77
+
78
+ def method_for_decorator
79
+ case kind.to_sym
80
+ when :boolean
81
+ method_for_boolean
82
+ when :date
83
+ method_for_date
84
+ when :datetime
85
+ method_for_datetime
86
+ when :number
87
+ delimited? || unit.present? ? method_for_number : nil
88
+ when :enum
89
+ method_for_enum
90
+ else
91
+ unit.present? ? method_for_string : nil
92
+ end
93
+ end
94
+
95
+ def method_for_boolean
96
+ <<"METHOD"
97
+ def #{name}_display
98
+ '<i class="bi bi-check-square-fill text-info"></i>'.html_safe if #{name}?
99
+ end
100
+
101
+ METHOD
102
+ end
103
+
104
+ def method_for_datetime
105
+ <<"METHOD"
106
+ def #{name}_display
107
+ #{name} ? I18n.l(#{name}) : ''
108
+ end
109
+
110
+ METHOD
111
+ end
112
+
113
+ def method_for_date(format = '%Y/%m/%d')
114
+ <<"METHOD"
115
+ def #{name}_display
116
+ #{name} ? I18n.l(#{name}) : ''
117
+ end
118
+
119
+ METHOD
120
+ end
121
+
122
+ def method_for_number
123
+ code = delimited? ? "#{name}.to_formatted_s(:delimited)" : "#{name}.to_s"
124
+ code = set_unit(code)
125
+ <<"METHOD"
126
+ def #{name}_display
127
+ #{code} if #{name}.present?
128
+ end
129
+
130
+ METHOD
131
+ end
132
+
133
+ def method_for_enum
134
+ code = enums.map do |enum|
135
+ enum.color.present? ? "when '#{enum.key}' then '#{enum.color}'" : nil
136
+ end.compact
137
+ return nil if code.blank?
138
+ code = code.join("\n ")
139
+ <<"METHOD"
140
+ def #{name}_color
141
+ case #{name}.to_s
142
+ #{code}
143
+ else ''
144
+ end
145
+ end
146
+
147
+ METHOD
148
+ end
149
+
150
+ def method_for_string
151
+ <<"METHOD"
152
+ def #{name}_display
153
+ #{set_unit(name)} if #{name}.present?
154
+ end
155
+
156
+ METHOD
157
+ end
158
+
159
+ def set_unit(code)
160
+ if unit.present?
161
+ return "\"#{unit}\#{#{code}}\"" if unit_position_prefix?
162
+ return "\"\#{#{code}}#{unit}\"" if unit_position_suffix?
163
+ end
164
+ code
165
+ end
166
+
167
+ def code_for_default
168
+ case kind.to_s
169
+ when 'string'
170
+ "'#{default}'"
171
+ when 'boolean'
172
+ if default.to_s == '0'
173
+ 'false'
174
+ elsif default.to_s == '1'
175
+ 'true'
176
+ else
177
+ 'nil'
178
+ end
179
+ when 'number'
180
+ default
181
+ else
182
+ 'nil'
183
+ end
184
+ end
185
+
186
+ private
187
+
188
+ def migration_column_kind
189
+ case kind
190
+ when 'enum'
191
+ 'integer'
192
+ when 'number'
193
+ number_kind.presence || 'integer'
194
+ when 'image', 'file'
195
+ 'string'
196
+ else
197
+ kind
198
+ end
199
+ end
200
+ end
201
+ end
@@ -0,0 +1,27 @@
1
+ module Infold
2
+ module ModelDecorator
3
+ def name_with_locale(separator = nil)
4
+ locale.present? ? "#{table_name}#{separator}#{locale}" : table_name
5
+ end
6
+
7
+ def notify_destination_columns(kind)
8
+ ModelColumn.joins(:model, :model_association)
9
+ .where(models: { id: child_model_associations&.map(&:model_id).to_a << id })
10
+ .where(model_associations: { parent_model: Model.find_by(name: kind) })
11
+ end
12
+
13
+ def label_column_name
14
+ (label_column || pk_column).name
15
+ end
16
+
17
+ def datetime_field_columns
18
+ columns.select{ |c| c.kind_datetime? && !c.is_timestamp_field? }
19
+ end
20
+
21
+ private
22
+
23
+ def target_columns(target_model)
24
+ ModelColumn.where(id: associations.where(parent_model: Model.find_by(name: target_model)).map{ |a| a.model_column_id })
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,101 @@
1
+ module Infold
2
+ module SearchConditionDecorator
3
+ def scope_name
4
+ "#{model_column.name}_#{sign}"
5
+ end
6
+
7
+ def method_condition_label_name
8
+ label_column = model_association&.parent_model&.label_column_name
9
+ return nil if !model_column.is_foreign_key? || label_column.blank?
10
+ method = <<"METHOD"
11
+ def #{modal_search_label_name}
12
+ #{model_association.parent_model_name}.find_by(id: #{scope_name})&.#{label_column} if #{scope_name}.present?
13
+ end
14
+ METHOD
15
+
16
+ method
17
+ end
18
+
19
+ def modal_search_label_name
20
+ association_model_name = model_association.belongs_name
21
+ "#{association_model_name}_#{model_association.parent_model.label_column_name}"
22
+ end
23
+
24
+ def method_scope
25
+ code = if model != app_view.model
26
+ association = model.associations.find{ |a| a.parent_model == app_view.model }
27
+ "joins(:#{association.has_name}).where(#{association.has_name}: { #{model_column.name}: v }) if v.present? "
28
+ elsif model_column.kind_datetime? && (sign_like? || sign_eq? || sign_lteq?)
29
+ if sign_like? || sign_eq?
30
+ <<"WHERE"
31
+ return if v.blank?
32
+ begin
33
+ where(#{model_column.name}: v.to_date.all_day)
34
+ rescue
35
+ where(arel_table[:#{model_column.name}].#{sign}(v))
36
+ end
37
+ WHERE
38
+ else
39
+ <<"WHERE"
40
+ return if v.blank?
41
+ begin
42
+ v = v.to_date.next_day
43
+ rescue
44
+ end
45
+ where(arel_table[:#{model_column.name}].#{sign}(v))
46
+ WHERE
47
+ end
48
+ elsif sign_eq?
49
+ "where(#{model_column.name}: v) if v.present?"
50
+ elsif sign_any?
51
+ "where(#{model_column.name}: v) if v.present?"
52
+ elsif sign_like?
53
+ "where(arel_table[:#{model_column.name}].matches(" +'"%#{v}%"' + ")) if v.present?"
54
+ else
55
+ "where(arel_table[:#{model_column.name}].#{sign}(v)) if v.present?"
56
+ end
57
+ method = <<"METHOD"
58
+ scope :#{scope_name}, ->(v) do
59
+ #{code}
60
+ end
61
+ METHOD
62
+ method
63
+ end
64
+
65
+ def code_form_component(ns_camel)
66
+ if form_kind == 'reference'
67
+ reference_model = model_column.model_association.parent_model
68
+ view_modal = AppViewModal.joins(:app).find_by(apps: { model: reference_model } )
69
+ ActiveDecorator::Decorator.instance.decorate(view_modal)
70
+ return "= render #{ns_camel}::Form::RelationFieldsetComponent.new(:#{reference_model.name_pluralize}, " +
71
+ "form, :#{model_column.model_association.belongs_name}, :#{scope_name}, :#{modal_search_label_name})" if view_modal
72
+ end
73
+ if form_kind == 'select' || form_kind == 'reference'
74
+ _options = if model_column.kind_enum?
75
+ "#{ns_camel}::#{model.name}.#{model_column.name.pluralize}_i18n.invert"
76
+ elsif model_column.is_foreign_key?
77
+ "#{ns_camel}::#{model_association.parent_model_name}.all.pluck(:#{model_association.parent_model.label_column_name}, :id)"
78
+ else
79
+ raise "SearchCondition Select 想定外のカラムです model_column_id: #{self.model_column.id}"
80
+ end
81
+ "= render #{ns_camel}::Form::SelectFieldsetComponent.new(form, :#{scope_name}, #{_options}, selected_value: form.object.#{scope_name})"
82
+ elsif form_kind == 'check'
83
+ if model_column.kind_enum?
84
+ "= render #{ns_camel}::Form::CheckboxFieldsetComponent.new(form, :#{scope_name}, #{ns_camel}::#{model.name}.#{model_column.name.pluralize}_i18n, checked_values: form.object.#{scope_name})"
85
+ else
86
+ "= render #{ns_camel}::Form::SwitchElementComponent.new(form, :#{scope_name}, include_hidden: false)"
87
+ end
88
+ else
89
+ _datepicker = model_column.kind_date? || model_column.kind_datetime? ? ", datepicker: true" : ''
90
+ _unit = if model_column.unit.present? && model_column.unit_position_prefix?
91
+ ", prepend: '#{model_column.unit}', append: '#{sign_i18n}'"
92
+ elsif model_column.unit.present? && model_column.unit_position_suffix?
93
+ ", append: '#{model_column.unit} '#{sign_i18n}'"
94
+ else
95
+ ", append: '#{sign_i18n}'"
96
+ end
97
+ "= render #{ns_camel}::Form::InputFieldsetComponent.new(form, :#{scope_name}#{_datepicker}#{_unit})"
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,5 @@
1
+ module Infold
2
+ module SearchResultColumnDecorator
3
+ include ColumnDisplayDecorator
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ module Infold
2
+ module ShowAssociationColumnDecorator
3
+ include ColumnDisplayDecorator
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ module Infold
2
+ module ShowAssociationDecorator
3
+ def show_path(ns_snake, object)
4
+ "#{ns_snake}_#{model_association.has_name.singularize}_path(#{object})"
5
+ end
6
+
7
+ def code_table_titles
8
+ show_association_columns.select(&:display?).sort_by(&:seq).map do |f|
9
+ f.model_column.locale_or_name_with_foreign_key
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ module Infold
2
+ module ShowFieldDecorator
3
+ include ColumnDisplayDecorator
4
+ end
5
+ end
@@ -0,0 +1,29 @@
1
+ module Infold
2
+ module ApplicationHelper
3
+ def infold_input_field_tag(form,field,form_kind: :text_field, datepicker: false, timepicker: false, placeholder: nil, data: nil, rows: nil, autocomplete: 'off', size_sm: true)
4
+ form.send(form_kind, field,
5
+ class: "form-control#{' form-control-sm' if size_sm}#{' datepicker' if datepicker}#{' timepicker' if timepicker}#{infold_field_invalid?(form,field)}",
6
+ placeholder: placeholder,
7
+ data: data,
8
+ rows: rows,
9
+ autocomplete: autocomplete)
10
+ end
11
+
12
+ def infold_required_badge(required=true)
13
+ "<div class=\"ms-1\"><span class=\"badge badge-sm bg-red-lt\">#{t('infold.badge.required')}</span></div>".html_safe if required
14
+ end
15
+
16
+ def infold_field_invalid?(form,field)
17
+ errors = form.object&.errors
18
+ errors && errors[field].present? ? ' is-invalid' : nil
19
+ end
20
+
21
+ def infold_render_invalid_message(form, field)
22
+ "<div class=\"invalid_message\">#{form.object.errors.full_messages_for(field).join(',')}</div>".html_safe
23
+ end
24
+
25
+ def turbo_stream_flash
26
+ turbo_stream.append "flashes", partial: "flash"
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,5 @@
1
+ @use "stylesheets/admin/common.scss";
2
+ @use "stylesheets/admin/index.scss";
3
+ @use "stylesheets/admin/show.scss";
4
+ @use "stylesheets/admin/form.scss";
5
+ @use "stylesheets/admin/modal.scss";
@@ -0,0 +1,9 @@
1
+ import { Application } from "@hotwired/stimulus"
2
+
3
+ const application = Application.start()
4
+
5
+ // Configure Stimulus development experience
6
+ application.debug = false
7
+ window.Stimulus = application
8
+
9
+ export { application }
@@ -0,0 +1,19 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ // Connects to data-controller="attachment-field"
4
+ export default class extends Controller {
5
+ static targets = [ "thumbArea", "kindImage", "kindFile", "thumbSizeArea", "thumbKindNone" ]
6
+
7
+ connect() {
8
+ this.setThumbAreaDisplay()
9
+ this.setThumbSizeDisplay()
10
+ }
11
+
12
+ setThumbAreaDisplay() {
13
+ this.thumbAreaTarget.hidden = this.kindFileTarget.checked
14
+ }
15
+
16
+ setThumbSizeDisplay() {
17
+ this.thumbSizeAreaTarget.hidden = this.thumbKindNoneTarget.checked
18
+ }
19
+ }
@@ -0,0 +1,20 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ // Connects to data-controller="column"
4
+ export default class extends Controller {
5
+ static targets = [ "kindSelect", "editLink" ]
6
+
7
+ changeKind() {
8
+ let kind = this.kindSelectTarget.value
9
+ let link = this.editLinkTarget
10
+ if (['date','datetime','boolean'].includes(kind)) {
11
+ // 詳細設定なし
12
+ link.style.display = 'none'
13
+ } else {
14
+ let href = link.getAttribute('href')
15
+ link.style.display = 'inline'
16
+ this.editLinkTarget.setAttribute('href',
17
+ href.replace(/kind=.*/, `kind=${this.kindSelectTarget.value}`))
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,10 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ // Connects to data-controller="flash"
4
+ export default class extends Controller {
5
+ connect() {
6
+ setTimeout( () => {
7
+ this.element.style.display = "none";
8
+ }, 4000);
9
+ }
10
+ }
@@ -0,0 +1,32 @@
1
+ // This file is auto-generated by ./bin/rails stimulus:manifest:update
2
+ // Run that command whenever you add a new controller or create them with
3
+ // ./bin/rails generate stimulus controllerName
4
+
5
+ import { application } from "./application"
6
+
7
+ import ColumnController from "./column_controller.js"
8
+ application.register("column", ColumnController)
9
+
10
+ import AttachmentFieldController from "./attachment_field_controller.js"
11
+ application.register("attachment-field", AttachmentFieldController)
12
+
13
+ import FlashController from "./flash_controller.js"
14
+ application.register("flash", FlashController)
15
+
16
+ import MenuController from "./menu_controller.js"
17
+ application.register("menu", MenuController)
18
+
19
+ import MenuDirectoryController from "./menu_directory_controller.js"
20
+ application.register("menu-directory", MenuDirectoryController)
21
+
22
+ import ModalController from "./modal_controller.js"
23
+ application.register("modal", ModalController)
24
+
25
+ import NestedFormController from "./nested_form_controller.js"
26
+ application.register("nested-form", NestedFormController)
27
+
28
+ import SearchConditionController from "./search_condition_controller.js"
29
+ application.register("search-condition", SearchConditionController)
30
+
31
+ import SortableController from "./sortable_controller.js"
32
+ application.register("sortable", SortableController)
@@ -0,0 +1,26 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+ import Sortable from "sortablejs";
3
+
4
+ // Connects to data-controller="menu"
5
+ export default class extends Controller {
6
+
7
+ connect() {
8
+ // ディレクトリ外のappのソート
9
+ Sortable.create(this.element, {
10
+ group: { name: "menu_apps" },
11
+ handle: ".drag_handle",
12
+ animation: 300,
13
+ filter: ".menu_directory",
14
+ preventOnFilter: false,
15
+ onEnd: (event) => document.menuItemDraggedEnd(event)
16
+ });
17
+ // ディレクトリのソート
18
+ Sortable.create(this.element, {
19
+ group: { name: "layer1" },
20
+ handle: ".drag_handle",
21
+ animation: 300,
22
+ onEnd: (event) => document.menuItemDraggedEnd(event)
23
+ });
24
+ // ディレクトリ内のAppのソートはmenu_directory_controllerにて実施
25
+ }
26
+ }
@@ -0,0 +1,16 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+ import Sortable from "sortablejs";
3
+
4
+ // Connects to data-controller="menu-directory"
5
+ export default class extends Controller {
6
+ connect() {
7
+ Sortable.create(this.element, {
8
+ group: { name: "menu_apps" },
9
+ handle: ".drag_handle",
10
+ animation: 300,
11
+ filter: ".menu_directory",
12
+ preventOnFilter: false,
13
+ onEnd: (event) => document.menuItemDraggedEnd(event)
14
+ });
15
+ }
16
+ }
@@ -0,0 +1,15 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ // Connects to data-controller="modal"
4
+ export default class extends Controller {
5
+ connect() {
6
+ this.modalWindow = new bootstrap.Modal(this.element)
7
+ this.modalWindow.show()
8
+ }
9
+
10
+ submitEnd(e) {
11
+ if (e.detail.success) {
12
+ this.modalWindow.hide()
13
+ }
14
+ }
15
+ }
@@ -0,0 +1,32 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ // Connects to data-controller="nested-form"
4
+ export default class extends Controller {
5
+ static targets = [ "links", "template" ]
6
+
7
+ connect() {
8
+ this.wrapperClass = this.data.get("wrapperClass") || "nested-fields"
9
+ }
10
+
11
+ addAssociation(event) {
12
+ event.preventDefault()
13
+ let content = this.templateTarget.innerHTML.replace(/NEW_RECORD/g, new Date().getTime())
14
+ this.linksTarget.insertAdjacentHTML('beforeend', content)
15
+ }
16
+
17
+ removeAssociation(event) {
18
+ event.preventDefault()
19
+
20
+ let wrapper = event.target.closest("." + this.wrapperClass)
21
+
22
+ // New records are simply removed from the page
23
+ if (wrapper.dataset.newRecord === "true") {
24
+ wrapper.remove()
25
+
26
+ // Existing records are hidden and flagged for deletion
27
+ } else {
28
+ wrapper.querySelector("input[name*='_destroy']").value = 1
29
+ wrapper.style.display = 'none'
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,41 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+ import { Turbo } from "@hotwired/turbo-rails"
3
+
4
+ // Connects to data-controller="search-condition"
5
+ export default class extends Controller {
6
+ static targets = [ "row", "columns" ]
7
+
8
+ refreshColumns(event) {
9
+ let model_id = event.target.value
10
+ let row_id = this.rowTarget.id
11
+ if (model_id.length > 0) {
12
+ fetch(`/infold/search_conditions/refresh_columns?model_id=${model_id}&row_id=${row_id}`,
13
+ { headers: { 'Accept': 'text/vnd.turbo-stream.html' } })
14
+ .then(response => response.text())
15
+ .then(message => Turbo.renderStreamMessage(message))
16
+ }
17
+ }
18
+
19
+ refreshFormKinds(event) {
20
+ let column_id = event.target.value
21
+ let row_id = this.rowTarget.id
22
+ if (column_id.length > 0) {
23
+ fetch(`/infold/search_conditions/refresh_form_kinds?column_id=${column_id}&row_id=${row_id}`,
24
+ { headers: { 'Accept': 'text/vnd.turbo-stream.html' } })
25
+ .then(response => response.text())
26
+ .then(message => Turbo.renderStreamMessage(message))
27
+ }
28
+ }
29
+
30
+ refreshSigns(event) {
31
+ let form_kind = event.target.value
32
+ let column_id = this.columnsTarget.value
33
+ let row_id = this.rowTarget.id
34
+ if (form_kind.length > 0) {
35
+ fetch(`/infold/search_conditions/refresh_signs?form_kind=${form_kind}&column_id=${column_id}&row_id=${row_id}`,
36
+ { headers: { 'Accept': 'text/vnd.turbo-stream.html' } })
37
+ .then(response => response.text())
38
+ .then(message => Turbo.renderStreamMessage(message))
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,19 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+ import Sortable from "sortablejs";
3
+
4
+ // Connects to data-controller="sortable"
5
+ export default class extends Controller {
6
+ static targets = [ "tbody" ]
7
+
8
+ connect() {
9
+ Sortable.create(this.tbodyTarget, {
10
+ animation: 300,
11
+ handle: ".drag_handle",
12
+ onEnd: function (/**Event*/evt) {
13
+ Array.from(evt.to.getElementsByClassName('hidden_seq')).forEach(function (elm, index) {
14
+ elm.setAttribute('value', index + 1)
15
+ });
16
+ }
17
+ });
18
+ }
19
+ }
@@ -0,0 +1,22 @@
1
+ // Entry point for the build script in your package.json
2
+ import "@hotwired/turbo-rails"
3
+ import "@tabler/core/dist/js/tabler.js"
4
+ import "@tabler/core/dist/css/tabler.css";
5
+ import "./controllers"
6
+
7
+ document.menuItemDraggedEnd = function(event) {
8
+ let dragged_item = event.item
9
+ if (dragged_item.dataset.kind === 'app') {
10
+ let parent_directory = dragged_item.parentNode;
11
+ let directory_id = dragged_item.getElementsByClassName('directory_id')[0]
12
+ if (parent_directory.dataset.kind === 'directory') {
13
+ directory_id.value = parent_directory.dataset.id
14
+ } else {
15
+ directory_id.value = ''
16
+ }
17
+ }
18
+ //SEQ 採番しなおし
19
+ Array.from(event.to.getElementsByClassName('hidden_seq')).forEach(function (e, index) {
20
+ e.value = index
21
+ });
22
+ }