inline_forms 8.1.20 → 8.1.40

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 (404) hide show
  1. checksums.yaml +4 -4
  2. data/.forgejo/workflows/ci.yml +63 -0
  3. data/.forgejo/workflows/full-gate.yml +75 -0
  4. data/.gitignore +4 -3
  5. data/.rubocop.yml +30 -0
  6. data/.rubocop_todo.yml +151 -0
  7. data/CHANGELOG.md +267 -0
  8. data/Gemfile +14 -2
  9. data/README.rdoc +23 -6
  10. data/Rakefile +2 -2
  11. data/app/assets/fonts/opensans-v44-latin-italic.woff2 +0 -0
  12. data/app/assets/fonts/opensans-v44-latin-regular.woff2 +0 -0
  13. data/app/assets/javascripts/inline_forms/inline_forms.js +30 -43
  14. data/app/assets/stylesheets/inline_forms/_foundation_icons.scss +6 -12
  15. data/app/assets/stylesheets/inline_forms/_theme.scss +134 -0
  16. data/app/assets/stylesheets/inline_forms/devise.scss +14 -13
  17. data/app/assets/stylesheets/inline_forms/foundation_and_overrides.scss +4 -0
  18. data/app/assets/stylesheets/inline_forms/inline_forms.scss +59 -68
  19. data/app/assets/stylesheets/inline_forms_fonts.css.erb +39 -0
  20. data/app/controllers/inline_forms_application_controller.rb +8 -4
  21. data/app/controllers/inline_forms_controller.rb +73 -14
  22. data/app/helpers/inline_forms_helper.rb +58 -15
  23. data/app/models/concerns/inline_forms/soft_deletable.rb +11 -12
  24. data/app/validators/curacao_id_number_validator.rb +5 -6
  25. data/app/validators/is_curacao_phone_validator.rb +2 -3
  26. data/app/validators/is_email_address_validator.rb +3 -3
  27. data/app/validators/must_be_a_value_validator.rb +6 -6
  28. data/app/views/inline_forms/_show.html.erb +1 -1
  29. data/app/views/layouts/application.html.erb +6 -3
  30. data/app/views/layouts/devise.html.erb +1 -0
  31. data/app/views/layouts/inline_forms.html.erb +7 -4
  32. data/archived/README.md +3 -0
  33. data/archived/form_elements/ckeditor/README.md +26 -0
  34. data/archived/form_elements/dns_records/README.md +25 -0
  35. data/archived/form_elements/question_list/README.md +25 -0
  36. data/inline_forms.gemspec +8 -7
  37. data/lib/generators/inline_forms_attribute_overrides.rb +3 -2
  38. data/lib/generators/templates/application_record.rb +1 -1
  39. data/lib/inline_forms/archived_form_elements.rb +31 -8
  40. data/lib/inline_forms/form_element_from_callee.rb +1 -0
  41. data/lib/inline_forms/form_element_registry.rb +32 -34
  42. data/lib/inline_forms/form_elements/color_field_helper.rb +44 -0
  43. data/lib/inline_forms/form_elements/date_helper.rb +4 -1
  44. data/lib/inline_forms/form_elements/dropdown_with_other_helper.rb +25 -113
  45. data/lib/inline_forms/form_elements/month_year_picker_helper.rb +13 -2
  46. data/lib/inline_forms/form_elements/multi_image_field_helper.rb +18 -6
  47. data/lib/inline_forms/form_elements/slider_with_values_helper.rb +31 -64
  48. data/lib/inline_forms/form_elements/time_helper.rb +3 -1
  49. data/lib/inline_forms/gem_files.rb +1 -0
  50. data/lib/inline_forms/tabs.rb +175 -0
  51. data/lib/inline_forms/turbo_tabs_builder.rb +20 -13
  52. data/lib/inline_forms/version.rb +2 -1
  53. data/lib/inline_forms.rb +59 -46
  54. data/test/archived_form_elements_test.rb +62 -2
  55. data/test/dummy/app/controllers/application_controller.rb +24 -0
  56. data/test/dummy/app/controllers/machines_controller.rb +4 -0
  57. data/test/dummy/app/controllers/parts_controller.rb +4 -0
  58. data/test/dummy/app/controllers/widgets_controller.rb +4 -0
  59. data/test/dummy/app/helpers/application_helper.rb +13 -0
  60. data/test/dummy/app/models/application_record.rb +26 -0
  61. data/test/dummy/app/models/kind.rb +8 -0
  62. data/test/dummy/app/models/machine.rb +23 -0
  63. data/test/dummy/app/models/part.rb +16 -0
  64. data/test/dummy/app/models/widget.rb +39 -0
  65. data/test/dummy/app/views/_inline_forms_tabs.html.erb +40 -0
  66. data/test/dummy/config/application.rb +34 -0
  67. data/test/dummy/config/database.yml +3 -0
  68. data/test/dummy/config/environment.rb +5 -0
  69. data/test/dummy/config/initializers/inline_forms.rb +6 -0
  70. data/test/dummy/config/initializers/paper_trail_yaml_safe_load.rb +28 -0
  71. data/test/dummy/config/routes.rb +22 -0
  72. data/test/form_element_from_callee_test.rb +2 -2
  73. data/test/integration/inline_forms_crud_test.rb +141 -0
  74. data/test/integration/legacy_elements_test.rb +42 -0
  75. data/test/integration/native_inputs_test.rb +138 -0
  76. data/test/integration/open_after_create_test.rb +85 -0
  77. data/test/integration_test_helper.rb +80 -0
  78. data/test/plain_text_configuration_test.rb +3 -3
  79. data/test/tabs_test.rb +98 -0
  80. data/test/user_model_config_test.rb +1 -0
  81. data/vendor/assets/javascripts/trix.min.js +7 -0
  82. data/vendor/assets/stylesheets/trix.css +470 -0
  83. metadata +66 -322
  84. data/app/assets/images/jquery-ui/animated-overlay.gif +0 -0
  85. data/app/assets/images/jquery-ui/ui-bg_diagonal-maze_20_6e4f1c_10x10.png +0 -0
  86. data/app/assets/images/jquery-ui/ui-bg_diagonal-maze_40_000000_10x10.png +0 -0
  87. data/app/assets/images/jquery-ui/ui-bg_diagonals-medium_20_d34d17_40x40.png +0 -0
  88. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_0_aaaaaa_40x40.png +0 -0
  89. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_25_c5ddfc_40x40.png +0 -0
  90. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_40_db4865_40x40.png +0 -0
  91. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_50_262626_40x40.png +0 -0
  92. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_50_93c3cd_40x40.png +0 -0
  93. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_50_ff3853_40x40.png +0 -0
  94. data/app/assets/images/jquery-ui/ui-bg_diagonals-small_75_ccd232_40x40.png +0 -0
  95. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_15_0b3e6f_40x40.png +0 -0
  96. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_15_444444_40x40.png +0 -0
  97. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  98. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  99. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_20_e69700_40x40.png +0 -0
  100. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_22_1484e6_40x40.png +0 -0
  101. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_26_2293f7_40x40.png +0 -0
  102. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_75_f3d8d8_40x40.png +0 -0
  103. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_8_333333_40x40.png +0 -0
  104. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_90_eeeeee_40x40.png +0 -0
  105. data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_95_ffdc2e_40x40.png +0 -0
  106. data/app/assets/images/jquery-ui/ui-bg_diamond_10_4f4221_10x8.png +0 -0
  107. data/app/assets/images/jquery-ui/ui-bg_diamond_20_372806_10x8.png +0 -0
  108. data/app/assets/images/jquery-ui/ui-bg_diamond_25_675423_10x8.png +0 -0
  109. data/app/assets/images/jquery-ui/ui-bg_diamond_25_d5ac5d_10x8.png +0 -0
  110. data/app/assets/images/jquery-ui/ui-bg_diamond_8_261803_10x8.png +0 -0
  111. data/app/assets/images/jquery-ui/ui-bg_diamond_8_443113_10x8.png +0 -0
  112. data/app/assets/images/jquery-ui/ui-bg_dots-medium_30_0b58a2_4x4.png +0 -0
  113. data/app/assets/images/jquery-ui/ui-bg_dots-medium_80_ffff38_4x4.png +0 -0
  114. data/app/assets/images/jquery-ui/ui-bg_dots-small_20_333333_2x2.png +0 -0
  115. data/app/assets/images/jquery-ui/ui-bg_dots-small_30_a32d00_2x2.png +0 -0
  116. data/app/assets/images/jquery-ui/ui-bg_dots-small_35_35414f_2x2.png +0 -0
  117. data/app/assets/images/jquery-ui/ui-bg_dots-small_40_00498f_2x2.png +0 -0
  118. data/app/assets/images/jquery-ui/ui-bg_dots-small_65_a6a6a6_2x2.png +0 -0
  119. data/app/assets/images/jquery-ui/ui-bg_fine-grain_10_eceadf_60x60.png +0 -0
  120. data/app/assets/images/jquery-ui/ui-bg_fine-grain_10_f8f7f6_60x60.png +0 -0
  121. data/app/assets/images/jquery-ui/ui-bg_fine-grain_15_eceadf_60x60.png +0 -0
  122. data/app/assets/images/jquery-ui/ui-bg_fine-grain_15_f7f3de_60x60.png +0 -0
  123. data/app/assets/images/jquery-ui/ui-bg_fine-grain_15_ffffff_60x60.png +0 -0
  124. data/app/assets/images/jquery-ui/ui-bg_fine-grain_65_654b24_60x60.png +0 -0
  125. data/app/assets/images/jquery-ui/ui-bg_fine-grain_68_b83400_60x60.png +0 -0
  126. data/app/assets/images/jquery-ui/ui-bg_flat_0_303030_40x100.png +0 -0
  127. data/app/assets/images/jquery-ui/ui-bg_flat_0_333333_40x100.png +0 -0
  128. data/app/assets/images/jquery-ui/ui-bg_flat_0_4c4c4c_40x100.png +0 -0
  129. data/app/assets/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  130. data/app/assets/images/jquery-ui/ui-bg_flat_0_e69700_40x100.png +0 -0
  131. data/app/assets/images/jquery-ui/ui-bg_flat_0_e6b900_40x100.png +0 -0
  132. data/app/assets/images/jquery-ui/ui-bg_flat_0_eeeeee_40x100.png +0 -0
  133. data/app/assets/images/jquery-ui/ui-bg_flat_10_000000_40x100.png +0 -0
  134. data/app/assets/images/jquery-ui/ui-bg_flat_15_cd0a0a_40x100.png +0 -0
  135. data/app/assets/images/jquery-ui/ui-bg_flat_30_cccccc_40x100.png +0 -0
  136. data/app/assets/images/jquery-ui/ui-bg_flat_40_292929_40x100.png +0 -0
  137. data/app/assets/images/jquery-ui/ui-bg_flat_50_5c5c5c_40x100.png +0 -0
  138. data/app/assets/images/jquery-ui/ui-bg_flat_55_994d53_40x100.png +0 -0
  139. data/app/assets/images/jquery-ui/ui-bg_flat_55_999999_40x100.png +0 -0
  140. data/app/assets/images/jquery-ui/ui-bg_flat_55_c0402a_40x100.png +0 -0
  141. data/app/assets/images/jquery-ui/ui-bg_flat_55_eeeeee_40x100.png +0 -0
  142. data/app/assets/images/jquery-ui/ui-bg_flat_55_fafafa_40x100.png +0 -0
  143. data/app/assets/images/jquery-ui/ui-bg_flat_55_fbec88_40x100.png +0 -0
  144. data/app/assets/images/jquery-ui/ui-bg_flat_55_ffffff_40x100.png +0 -0
  145. data/app/assets/images/jquery-ui/ui-bg_flat_65_ffffff_40x100.png +0 -0
  146. data/app/assets/images/jquery-ui/ui-bg_flat_75_aaaaaa_40x100.png +0 -0
  147. data/app/assets/images/jquery-ui/ui-bg_flat_75_ba9217_40x100.png +0 -0
  148. data/app/assets/images/jquery-ui/ui-bg_flat_75_ddd4b0_40x100.png +0 -0
  149. data/app/assets/images/jquery-ui/ui-bg_flat_75_ffffff_40x100.png +0 -0
  150. data/app/assets/images/jquery-ui/ui-bg_glass_100_e4f1fb_1x400.png +0 -0
  151. data/app/assets/images/jquery-ui/ui-bg_glass_100_f5f0e5_1x400.png +0 -0
  152. data/app/assets/images/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  153. data/app/assets/images/jquery-ui/ui-bg_glass_100_f8f8f8_1x400.png +0 -0
  154. data/app/assets/images/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  155. data/app/assets/images/jquery-ui/ui-bg_glass_15_5f391b_1x400.png +0 -0
  156. data/app/assets/images/jquery-ui/ui-bg_glass_20_555555_1x400.png +0 -0
  157. data/app/assets/images/jquery-ui/ui-bg_glass_25_cb842e_1x400.png +0 -0
  158. data/app/assets/images/jquery-ui/ui-bg_glass_35_dddddd_1x400.png +0 -0
  159. data/app/assets/images/jquery-ui/ui-bg_glass_40_0078a3_1x400.png +0 -0
  160. data/app/assets/images/jquery-ui/ui-bg_glass_40_0a0a0a_1x400.png +0 -0
  161. data/app/assets/images/jquery-ui/ui-bg_glass_40_111111_1x400.png +0 -0
  162. data/app/assets/images/jquery-ui/ui-bg_glass_40_ffc73d_1x400.png +0 -0
  163. data/app/assets/images/jquery-ui/ui-bg_glass_45_0078ae_1x400.png +0 -0
  164. data/app/assets/images/jquery-ui/ui-bg_glass_50_3baae3_1x400.png +0 -0
  165. data/app/assets/images/jquery-ui/ui-bg_glass_55_1c1c1c_1x400.png +0 -0
  166. data/app/assets/images/jquery-ui/ui-bg_glass_55_f1fbe5_1x400.png +0 -0
  167. data/app/assets/images/jquery-ui/ui-bg_glass_55_f8da4e_1x400.png +0 -0
  168. data/app/assets/images/jquery-ui/ui-bg_glass_55_fbf5d0_1x400.png +0 -0
  169. data/app/assets/images/jquery-ui/ui-bg_glass_55_fbf8ee_1x400.png +0 -0
  170. data/app/assets/images/jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  171. data/app/assets/images/jquery-ui/ui-bg_glass_55_fcf0ba_1x400.png +0 -0
  172. data/app/assets/images/jquery-ui/ui-bg_glass_60_000000_1x400.png +0 -0
  173. data/app/assets/images/jquery-ui/ui-bg_glass_60_eeeeee_1x400.png +0 -0
  174. data/app/assets/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
  175. data/app/assets/images/jquery-ui/ui-bg_glass_70_ede4d4_1x400.png +0 -0
  176. data/app/assets/images/jquery-ui/ui-bg_glass_75_79c9ec_1x400.png +0 -0
  177. data/app/assets/images/jquery-ui/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  178. data/app/assets/images/jquery-ui/ui-bg_glass_75_dadada_1x400.png +0 -0
  179. data/app/assets/images/jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  180. data/app/assets/images/jquery-ui/ui-bg_glass_80_d7ebf9_1x400.png +0 -0
  181. data/app/assets/images/jquery-ui/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  182. data/app/assets/images/jquery-ui/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  183. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_100_ece8da_500x100.png +0 -0
  184. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_16_121212_500x100.png +0 -0
  185. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_20_111111_500x100.png +0 -0
  186. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_20_1c160d_500x100.png +0 -0
  187. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_25_333333_500x100.png +0 -0
  188. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_25_453326_500x100.png +0 -0
  189. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_30_3d3644_500x100.png +0 -0
  190. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_30_44372c_500x100.png +0 -0
  191. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  192. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_45_817865_500x100.png +0 -0
  193. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_45_e14f1c_500x100.png +0 -0
  194. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_50_6eac2c_500x100.png +0 -0
  195. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_55_000000_500x100.png +0 -0
  196. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  197. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_60_fece2f_500x100.png +0 -0
  198. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_70_ffdd57_500x100.png +0 -0
  199. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_75_2191c0_500x100.png +0 -0
  200. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_85_9fda58_500x100.png +0 -0
  201. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_90_fff9e5_500x100.png +0 -0
  202. data/app/assets/images/jquery-ui/ui-bg_gloss-wave_95_f6ecd5_500x100.png +0 -0
  203. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_eeeeee_1x100.png +0 -0
  204. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f2f5f7_1x100.png +0 -0
  205. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f4f0ec_1x100.png +0 -0
  206. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f5f3e5_1x100.png +0 -0
  207. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f6f6f6_1x100.png +0 -0
  208. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f9f9f9_1x100.png +0 -0
  209. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_fafaf4_1x100.png +0 -0
  210. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_15_459e00_1x100.png +0 -0
  211. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_15_888888_1x100.png +0 -0
  212. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_20_0972a5_1x100.png +0 -0
  213. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_30_285c00_1x100.png +0 -0
  214. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_40_aaaaaa_1x100.png +0 -0
  215. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_55_555555_1x100.png +0 -0
  216. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_65_fee4bd_1x100.png +0 -0
  217. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_70_000000_1x100.png +0 -0
  218. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_75_f5f5b5_1x100.png +0 -0
  219. data/app/assets/images/jquery-ui/ui-bg_highlight-hard_95_cccccc_1x100.png +0 -0
  220. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_dcd9de_1x100.png +0 -0
  221. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_deedf7_1x100.png +0 -0
  222. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_eae6ea_1x100.png +0 -0
  223. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  224. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
  225. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_f9f9f9_1x100.png +0 -0
  226. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_feeebd_1x100.png +0 -0
  227. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_15_cc0000_1x100.png +0 -0
  228. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_20_201913_1x100.png +0 -0
  229. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_20_619226_1x100.png +0 -0
  230. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
  231. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_25_30273a_1x100.png +0 -0
  232. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_25_67b021_1x100.png +0 -0
  233. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_25_ffef8f_1x100.png +0 -0
  234. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_33_003147_1x100.png +0 -0
  235. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_33_3a8104_1x100.png +0 -0
  236. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_35_222222_1x100.png +0 -0
  237. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_35_adadad_1x100.png +0 -0
  238. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_44_444444_1x100.png +0 -0
  239. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_45_5f5964_1x100.png +0 -0
  240. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_50_4eb305_1x100.png +0 -0
  241. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_50_aaaaaa_1x100.png +0 -0
  242. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
  243. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_60_4ca20b_1x100.png +0 -0
  244. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_60_dddddd_1x100.png +0 -0
  245. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  246. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  247. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_80_eeeeee_1x100.png +0 -0
  248. data/app/assets/images/jquery-ui/ui-bg_highlight-soft_95_ffedad_1x100.png +0 -0
  249. data/app/assets/images/jquery-ui/ui-bg_inset-hard_100_eeeeee_1x100.png +0 -0
  250. data/app/assets/images/jquery-ui/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  251. data/app/assets/images/jquery-ui/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  252. data/app/assets/images/jquery-ui/ui-bg_inset-hard_45_cd0a0a_1x100.png +0 -0
  253. data/app/assets/images/jquery-ui/ui-bg_inset-hard_55_ffeb80_1x100.png +0 -0
  254. data/app/assets/images/jquery-ui/ui-bg_inset-hard_75_999999_1x100.png +0 -0
  255. data/app/assets/images/jquery-ui/ui-bg_inset-soft_100_f4f0ec_1x100.png +0 -0
  256. data/app/assets/images/jquery-ui/ui-bg_inset-soft_10_201913_1x100.png +0 -0
  257. data/app/assets/images/jquery-ui/ui-bg_inset-soft_10_285c00_1x100.png +0 -0
  258. data/app/assets/images/jquery-ui/ui-bg_inset-soft_15_121212_1x100.png +0 -0
  259. data/app/assets/images/jquery-ui/ui-bg_inset-soft_15_2b2922_1x100.png +0 -0
  260. data/app/assets/images/jquery-ui/ui-bg_inset-soft_25_000000_1x100.png +0 -0
  261. data/app/assets/images/jquery-ui/ui-bg_inset-soft_30_f58400_1x100.png +0 -0
  262. data/app/assets/images/jquery-ui/ui-bg_inset-soft_30_ffffff_1x100.png +0 -0
  263. data/app/assets/images/jquery-ui/ui-bg_inset-soft_50_c9c9c9_1x100.png +0 -0
  264. data/app/assets/images/jquery-ui/ui-bg_loop_25_000000_21x21.png +0 -0
  265. data/app/assets/images/jquery-ui/ui-bg_white-lines_85_f7f7ba_40x100.png +0 -0
  266. data/app/assets/images/jquery-ui/ui-icons_000000_256x240.png +0 -0
  267. data/app/assets/images/jquery-ui/ui-icons_004276_256x240.png +0 -0
  268. data/app/assets/images/jquery-ui/ui-icons_00498f_256x240.png +0 -0
  269. data/app/assets/images/jquery-ui/ui-icons_0073ea_256x240.png +0 -0
  270. data/app/assets/images/jquery-ui/ui-icons_0078ae_256x240.png +0 -0
  271. data/app/assets/images/jquery-ui/ui-icons_056b93_256x240.png +0 -0
  272. data/app/assets/images/jquery-ui/ui-icons_070603_256x240.png +0 -0
  273. data/app/assets/images/jquery-ui/ui-icons_0a82eb_256x240.png +0 -0
  274. data/app/assets/images/jquery-ui/ui-icons_0b54d5_256x240.png +0 -0
  275. data/app/assets/images/jquery-ui/ui-icons_1f1f1f_256x240.png +0 -0
  276. data/app/assets/images/jquery-ui/ui-icons_217bc0_256x240.png +0 -0
  277. data/app/assets/images/jquery-ui/ui-icons_222222_256x240.png +0 -0
  278. data/app/assets/images/jquery-ui/ui-icons_228ef1_256x240.png +0 -0
  279. data/app/assets/images/jquery-ui/ui-icons_2694e8_256x240.png +0 -0
  280. data/app/assets/images/jquery-ui/ui-icons_2e83ff_256x240.png +0 -0
  281. data/app/assets/images/jquery-ui/ui-icons_3383bb_256x240.png +0 -0
  282. data/app/assets/images/jquery-ui/ui-icons_3572ac_256x240.png +0 -0
  283. data/app/assets/images/jquery-ui/ui-icons_3d3d3d_256x240.png +0 -0
  284. data/app/assets/images/jquery-ui/ui-icons_3d80b3_256x240.png +0 -0
  285. data/app/assets/images/jquery-ui/ui-icons_454545_256x240.png +0 -0
  286. data/app/assets/images/jquery-ui/ui-icons_469bdd_256x240.png +0 -0
  287. data/app/assets/images/jquery-ui/ui-icons_4b8e0b_256x240.png +0 -0
  288. data/app/assets/images/jquery-ui/ui-icons_4ca300_256x240.png +0 -0
  289. data/app/assets/images/jquery-ui/ui-icons_4eb305_256x240.png +0 -0
  290. data/app/assets/images/jquery-ui/ui-icons_5fa5e3_256x240.png +0 -0
  291. data/app/assets/images/jquery-ui/ui-icons_666666_256x240.png +0 -0
  292. data/app/assets/images/jquery-ui/ui-icons_6da8d5_256x240.png +0 -0
  293. data/app/assets/images/jquery-ui/ui-icons_70b2e1_256x240.png +0 -0
  294. data/app/assets/images/jquery-ui/ui-icons_72a7cf_256x240.png +0 -0
  295. data/app/assets/images/jquery-ui/ui-icons_72b42d_256x240.png +0 -0
  296. data/app/assets/images/jquery-ui/ui-icons_734d99_256x240.png +0 -0
  297. data/app/assets/images/jquery-ui/ui-icons_808080_256x240.png +0 -0
  298. data/app/assets/images/jquery-ui/ui-icons_847e71_256x240.png +0 -0
  299. data/app/assets/images/jquery-ui/ui-icons_888888_256x240.png +0 -0
  300. data/app/assets/images/jquery-ui/ui-icons_88a206_256x240.png +0 -0
  301. data/app/assets/images/jquery-ui/ui-icons_8DC262_256x240.png +0 -0
  302. data/app/assets/images/jquery-ui/ui-icons_8c291d_256x240.png +0 -0
  303. data/app/assets/images/jquery-ui/ui-icons_8d78a5_256x240.png +0 -0
  304. data/app/assets/images/jquery-ui/ui-icons_98d2fb_256x240.png +0 -0
  305. data/app/assets/images/jquery-ui/ui-icons_999999_256x240.png +0 -0
  306. data/app/assets/images/jquery-ui/ui-icons_9bcc60_256x240.png +0 -0
  307. data/app/assets/images/jquery-ui/ui-icons_9ccdfc_256x240.png +0 -0
  308. data/app/assets/images/jquery-ui/ui-icons_9fda58_256x240.png +0 -0
  309. data/app/assets/images/jquery-ui/ui-icons_a83300_256x240.png +0 -0
  310. data/app/assets/images/jquery-ui/ui-icons_a8a3ae_256x240.png +0 -0
  311. data/app/assets/images/jquery-ui/ui-icons_aaaaaa_256x240.png +0 -0
  312. data/app/assets/images/jquery-ui/ui-icons_add978_256x240.png +0 -0
  313. data/app/assets/images/jquery-ui/ui-icons_b83400_256x240.png +0 -0
  314. data/app/assets/images/jquery-ui/ui-icons_b8ec79_256x240.png +0 -0
  315. data/app/assets/images/jquery-ui/ui-icons_bbbbbb_256x240.png +0 -0
  316. data/app/assets/images/jquery-ui/ui-icons_bd7b00_256x240.png +0 -0
  317. data/app/assets/images/jquery-ui/ui-icons_c02669_256x240.png +0 -0
  318. data/app/assets/images/jquery-ui/ui-icons_c47a23_256x240.png +0 -0
  319. data/app/assets/images/jquery-ui/ui-icons_c98000_256x240.png +0 -0
  320. data/app/assets/images/jquery-ui/ui-icons_cb672b_256x240.png +0 -0
  321. data/app/assets/images/jquery-ui/ui-icons_cc0000_256x240.png +0 -0
  322. data/app/assets/images/jquery-ui/ui-icons_cccccc_256x240.png +0 -0
  323. data/app/assets/images/jquery-ui/ui-icons_cd0a0a_256x240.png +0 -0
  324. data/app/assets/images/jquery-ui/ui-icons_d19405_256x240.png +0 -0
  325. data/app/assets/images/jquery-ui/ui-icons_d8e7f3_256x240.png +0 -0
  326. data/app/assets/images/jquery-ui/ui-icons_e0fdff_256x240.png +0 -0
  327. data/app/assets/images/jquery-ui/ui-icons_e1e463_256x240.png +0 -0
  328. data/app/assets/images/jquery-ui/ui-icons_e3ddc9_256x240.png +0 -0
  329. data/app/assets/images/jquery-ui/ui-icons_e8e2b5_256x240.png +0 -0
  330. data/app/assets/images/jquery-ui/ui-icons_e9cd86_256x240.png +0 -0
  331. data/app/assets/images/jquery-ui/ui-icons_eb990f_256x240.png +0 -0
  332. data/app/assets/images/jquery-ui/ui-icons_ebccce_256x240.png +0 -0
  333. data/app/assets/images/jquery-ui/ui-icons_ed9f26_256x240.png +0 -0
  334. data/app/assets/images/jquery-ui/ui-icons_ededed_256x240.png +0 -0
  335. data/app/assets/images/jquery-ui/ui-icons_eeeeee_256x240.png +0 -0
  336. data/app/assets/images/jquery-ui/ui-icons_ef8c08_256x240.png +0 -0
  337. data/app/assets/images/jquery-ui/ui-icons_efec9f_256x240.png +0 -0
  338. data/app/assets/images/jquery-ui/ui-icons_f08000_256x240.png +0 -0
  339. data/app/assets/images/jquery-ui/ui-icons_f1fd86_256x240.png +0 -0
  340. data/app/assets/images/jquery-ui/ui-icons_f29a00_256x240.png +0 -0
  341. data/app/assets/images/jquery-ui/ui-icons_f2ec64_256x240.png +0 -0
  342. data/app/assets/images/jquery-ui/ui-icons_f35f07_256x240.png +0 -0
  343. data/app/assets/images/jquery-ui/ui-icons_f5e175_256x240.png +0 -0
  344. data/app/assets/images/jquery-ui/ui-icons_f7a50d_256x240.png +0 -0
  345. data/app/assets/images/jquery-ui/ui-icons_f9bd01_256x240.png +0 -0
  346. data/app/assets/images/jquery-ui/ui-icons_f9f2bd_256x240.png +0 -0
  347. data/app/assets/images/jquery-ui/ui-icons_fadc7a_256x240.png +0 -0
  348. data/app/assets/images/jquery-ui/ui-icons_fbc856_256x240.png +0 -0
  349. data/app/assets/images/jquery-ui/ui-icons_fbdb93_256x240.png +0 -0
  350. data/app/assets/images/jquery-ui/ui-icons_fcd113_256x240.png +0 -0
  351. data/app/assets/images/jquery-ui/ui-icons_fcdd4a_256x240.png +0 -0
  352. data/app/assets/images/jquery-ui/ui-icons_ff0084_256x240.png +0 -0
  353. data/app/assets/images/jquery-ui/ui-icons_ff7519_256x240.png +0 -0
  354. data/app/assets/images/jquery-ui/ui-icons_ffcf29_256x240.png +0 -0
  355. data/app/assets/images/jquery-ui/ui-icons_ffd27a_256x240.png +0 -0
  356. data/app/assets/images/jquery-ui/ui-icons_ffe180_256x240.png +0 -0
  357. data/app/assets/images/jquery-ui/ui-icons_ffeb33_256x240.png +0 -0
  358. data/app/assets/images/jquery-ui/ui-icons_ffffff_256x240.png +0 -0
  359. data/app/assets/stylesheets/jquery_ui/jquery.ui.accordion.css.scss +0 -39
  360. data/app/assets/stylesheets/jquery_ui/jquery.ui.all.css.scss +0 -14
  361. data/app/assets/stylesheets/jquery_ui/jquery.ui.autocomplete.css.scss +0 -17
  362. data/app/assets/stylesheets/jquery_ui/jquery.ui.base.css.scss +0 -27
  363. data/app/assets/stylesheets/jquery_ui/jquery.ui.button.css.scss +0 -115
  364. data/app/assets/stylesheets/jquery_ui/jquery.ui.core.css.scss +0 -92
  365. data/app/assets/stylesheets/jquery_ui/jquery.ui.datepicker.css.scss +0 -179
  366. data/app/assets/stylesheets/jquery_ui/jquery.ui.dialog.css.scss +0 -70
  367. data/app/assets/stylesheets/jquery_ui/jquery.ui.menu.css.scss +0 -80
  368. data/app/assets/stylesheets/jquery_ui/jquery.ui.progressbar.css.scss +0 -29
  369. data/app/assets/stylesheets/jquery_ui/jquery.ui.resizable.css.scss +0 -79
  370. data/app/assets/stylesheets/jquery_ui/jquery.ui.selectable.css.scss +0 -16
  371. data/app/assets/stylesheets/jquery_ui/jquery.ui.slider.css.scss +0 -74
  372. data/app/assets/stylesheets/jquery_ui/jquery.ui.spinner.css.scss +0 -66
  373. data/app/assets/stylesheets/jquery_ui/jquery.ui.tabs.css.scss +0 -53
  374. data/app/assets/stylesheets/jquery_ui/jquery.ui.theme.css.scss +0 -408
  375. data/app/assets/stylesheets/jquery_ui/jquery.ui.tooltip.css.scss +0 -20
  376. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.base.css.scss +0 -78
  377. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.black-tie.css.scss +0 -80
  378. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.blitzer.css.scss +0 -80
  379. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.cupertino.css.scss +0 -80
  380. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.dark-hive.css.scss +0 -80
  381. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.dot-luv.css.scss +0 -80
  382. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.eggplant.css.scss +0 -80
  383. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.excite-bike.css.scss +0 -80
  384. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.flick.css.scss +0 -80
  385. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.hot-sneaks.css.scss +0 -80
  386. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.humanity.css.scss +0 -80
  387. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.le-frog.css.scss +0 -80
  388. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.mint-choc.css.scss +0 -80
  389. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.overcast.css.scss +0 -80
  390. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.pepper-grinder.css.scss +0 -80
  391. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.redmond.css.scss +0 -80
  392. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.smoothness.css.scss +0 -80
  393. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.south-street.css.scss +0 -80
  394. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.start.css.scss +0 -80
  395. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.sunny.css.scss +0 -80
  396. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.swanky-purse.css.scss +0 -80
  397. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.trontastic.css.scss +0 -80
  398. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.ui-darkness.css.scss +0 -80
  399. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.ui-lightness.css.scss +0 -80
  400. data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.vader.css.scss +0 -80
  401. /data/{lib → archived/form_elements/ckeditor/lib}/inline_forms/form_elements/ckeditor_helper.rb +0 -0
  402. /data/{lib → archived/form_elements/ckeditor/lib}/inline_forms/form_elements/text_area_without_ckeditor_helper.rb +0 -0
  403. /data/{lib → archived/form_elements/dns_records/lib}/inline_forms/form_elements/dns_records_helper.rb +0 -0
  404. /data/{lib → archived/form_elements/question_list/lib}/inline_forms/form_elements/question_list_helper.rb +0 -0
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  module InlineFormsHelper
3
4
  include InlineForms::FormElements::HelperIncludes
4
5
 
@@ -6,6 +7,46 @@ module InlineFormsHelper
6
7
  InlineForms::VERSION
7
8
  end
8
9
 
10
+ # Pattern 1 preset theming (8.1.29; stuff/user-preferences-and-theming.md).
11
+ # Emits the <body> theme class. The host's user model opts in by responding
12
+ # to #inline_forms_theme with one of the preset names shipped in _theme.scss
13
+ # (default | dark | sepia | high-contrast); installer-generated user models
14
+ # store an integer `theme` column and map it. Anonymous users, or hosts
15
+ # without the method, get the default palette.
16
+ def inline_forms_body_theme_class
17
+ user = respond_to?(:current_user) ? current_user : nil
18
+ theme = user.inline_forms_theme.to_s if user.respond_to?(:inline_forms_theme)
19
+ theme = "default" if theme.blank? || !theme.match?(/\A[a-z][a-z-]*\z/)
20
+ "theme-#{theme}"
21
+ end
22
+
23
+ # Pattern 2 theming (8.1.32): per-user color overrides as an inline <style>
24
+ # in <head>. The host's user model opts in by responding to
25
+ # #inline_forms_color_overrides with a hash of `--if-color-` suffix => hex,
26
+ # e.g. { 'primary' => '#2563eb', 'accent' => '#7c3aed' }. Every key and
27
+ # value is re-validated here before interpolation (never trust a column
28
+ # edited outside the app), and the rules are scoped to the current theme
29
+ # class so they win the cascade over the preset palette (same specificity,
30
+ # later in the document).
31
+ def inline_forms_user_color_overrides_style
32
+ user = respond_to?(:current_user) ? current_user : nil
33
+ return unless user.respond_to?(:inline_forms_color_overrides)
34
+
35
+ overrides = user.inline_forms_color_overrides
36
+ return if overrides.blank?
37
+
38
+ rules = overrides.filter_map do |key, value|
39
+ next unless key.to_s.match?(/\A[a-z][a-z-]*\z/)
40
+ next unless value.to_s.match?(/\A#\h{6}\z/i)
41
+
42
+ "--if-color-#{key}: #{value};"
43
+ end
44
+ return if rules.empty?
45
+
46
+ css = "body.#{inline_forms_body_theme_class} { #{rules.join(' ')} }"
47
+ content_tag(:style, css.html_safe, id: "inline_forms_user_color_overrides")
48
+ end
49
+
9
50
  # Returns versions for `object`, merged with versions of any associated
10
51
  # `ActionText::RichText` records (Rails `has_rich_text :foo` declarations).
11
52
  #
@@ -181,7 +222,7 @@ module InlineFormsHelper
181
222
 
182
223
  # link to versions list
183
224
  def link_to_versions_list(path_to_versions_list, object, update_span, html_class = "button new_button", turbo_row: true)
184
- if can? :list_versions, object
225
+ if cancan_disabled? || can?(:list_versions, object)
185
226
  if defined?(PaperTrail) && object.respond_to?(:versions)
186
227
  path = send(path_to_versions_list, object, update: update_span)
187
228
  opts = { class: html_class, title: t("inline_forms.view.list_versions") }
@@ -250,14 +291,14 @@ module InlineFormsHelper
250
291
  # Pass +from_callee:+ +__callee__+ from the enclosing +*_show+ method so the edit route receives the correct form element name.
251
292
  # When +turbo_frame:+ is true the link targets +_self+; otherwise it targets the
252
293
  # field frame id (+css_class_id+) so edit works without a surrounding +_show+ wrap.
253
- def link_to_inline_edit(object, attribute, attribute_value='', from_callee:, turbo_frame: false)
294
+ def link_to_inline_edit(object, attribute, attribute_value = "", from_callee:, turbo_frame: false)
254
295
  form_element = InlineForms.form_element_string_from_callee(from_callee)
255
296
  attribute_value = attribute_value.to_s
256
297
  spaces = attribute_value.length > 40 ? 0 : 40 - attribute_value.length
257
298
  value = h(attribute_value) + ("&nbsp;" * spaces).html_safe
258
299
  css_class_id = "#{object.class.to_s.underscore}_#{object.id}_#{attribute}"
259
300
  use_turbo_frame = turbo_frame || (@inline_forms_turbo_field == true)
260
- if (cancan_disabled? rescue true) || ( can? :update, object, attribute )
301
+ if (cancan_disabled? rescue true) || (can? :update, object, attribute)
261
302
  # some problem with concerns makes this function not available when called direct. FIXME
262
303
  link_opts = if use_turbo_frame
263
304
  { data: { turbo: true, turbo_frame: "_self" } }
@@ -267,9 +308,9 @@ module InlineFormsHelper
267
308
  link_to value,
268
309
  edit_polymorphic_path(
269
310
  object,
270
- :attribute => attribute.to_s,
271
- :form_element => form_element,
272
- :update => css_class_id ),
311
+ attribute: attribute.to_s,
312
+ form_element: form_element,
313
+ update: css_class_id),
273
314
  link_opts
274
315
  else
275
316
  h(attribute_value)
@@ -280,16 +321,16 @@ module InlineFormsHelper
280
321
  def locale_url(request, locale)
281
322
  subdomains = request.subdomains
282
323
  # if there are no subdomains, prepend the locale to the domain
283
- return request.protocol + [ locale, request.domain ].join('.') + request.port_string if subdomains.empty?
324
+ return request.protocol + [ locale, request.domain ].join(".") + request.port_string if subdomains.empty?
284
325
  # if there is a subdomain, find out if it's an available locale and strip it
285
326
  subdomains.shift if I18n.available_locales.include?(subdomains.first.to_sym)
286
327
  # if there are no subdomains, prepend the locale to the domain
287
- return request.protocol + [ locale, request.domain ].join('.') + request.port_string if subdomains.empty?
328
+ return request.protocol + [ locale, request.domain ].join(".") + request.port_string if subdomains.empty?
288
329
  # else return the rest
289
- request.protocol + [ locale, subdomains.join('.'), request.domain ].join('.') + request.port_string
330
+ request.protocol + [ locale, subdomains.join("."), request.domain ].join(".") + request.port_string
290
331
  end
291
332
 
292
- def translated_attribute(object,attribute)
333
+ def translated_attribute(object, attribute)
293
334
  t("activerecord.attributes.#{object.class.name.underscore}.#{attribute}")
294
335
  # "activerecord.attributes.#{attribute}",
295
336
  # "attributes.#{attribute}" ] )
@@ -333,19 +374,22 @@ module InlineFormsHelper
333
374
 
334
375
  attributes = @inline_forms_attribute_list || object.inline_forms_attribute_list # if we do this as a form_element, @inline.. is nil!!!
335
376
  values = attributes.assoc(attribute.to_sym)[2]
336
- raise t("fatal.no_values_defined_in", @Klass, attribute) if values.nil?
377
+ # (was `raise t("fatal.no_values_defined_in", @Klass, attribute)` Rails'
378
+ # translate takes a key plus keyword interpolations, so the raise itself
379
+ # crashed with ArgumentError instead of reporting the real problem.)
380
+ raise "inline_forms: no values defined in #{object.class} for #{attribute} (add a values hash to the inline_forms_attribute_list row)" if values.nil?
337
381
  if values.is_a?(Hash)
338
382
  temp = Array.new
339
- values.to_a.each do |k,v|
383
+ values.to_a.each do |k, v|
340
384
  temp << [ k, t(v) ]
341
385
  end
342
- values = temp.sort {|a,b| a[0]<=>b[0]}
386
+ values = temp.sort { |a, b| a[0]<=>b[0] }
343
387
  else
344
388
  temp = Array.new
345
389
  values.to_a.each_index do |i|
346
390
  temp << [ i, t(values.to_a[i]) ]
347
391
  end
348
- values = temp.sort {|a,b| a[1]<=>b[1]}
392
+ values = temp.sort { |a, b| a[1]<=>b[1] }
349
393
  end
350
394
  values
351
395
  end
@@ -359,5 +403,4 @@ module InlineFormsHelper
359
403
  user = user_class.find_by(id: id)
360
404
  user.nil? ? "Unknown" : user.name
361
405
  end
362
-
363
406
  end
@@ -1,18 +1,18 @@
1
1
  module InlineForms::SoftDeletable
2
2
  extend ActiveSupport::Concern
3
3
 
4
- # you need to put this in the model:
5
- # include InlineForms::SoftDeletable
6
- # enum deleted: { active: 1, deleted: 2 }
4
+ # you need to put this in the model:
5
+ # include InlineForms::SoftDeletable
6
+ # enum deleted: { active: 1, deleted: 2 }
7
7
 
8
- # you need a migration like this:
9
- # class AddDeletedAtColumnToUser < ActiveRecord::Migration[6.0]
10
- # def change
11
- # add_column :users, :deleted_at, :datetime, default: nil
12
- # add_column :users, :deleted, :integer, default: 1
13
- # add_column :users, :deleted_by, :integer, default: nil
14
- # end
15
- # end
8
+ # you need a migration like this:
9
+ # class AddDeletedAtColumnToUser < ActiveRecord::Migration[6.0]
10
+ # def change
11
+ # add_column :users, :deleted_at, :datetime, default: nil
12
+ # add_column :users, :deleted, :integer, default: 1
13
+ # add_column :users, :deleted_by, :integer, default: nil
14
+ # end
15
+ # end
16
16
 
17
17
  def soft_deletable?
18
18
  true
@@ -31,5 +31,4 @@ module InlineForms::SoftDeletable
31
31
  self.deleted_at = nil
32
32
  save
33
33
  end
34
-
35
34
  end
@@ -1,6 +1,6 @@
1
1
  # -*- encoding : utf-8 -*-
2
- class CuracaoIdNumberValidator < ActiveModel::EachValidator
3
2
 
3
+ class CuracaoIdNumberValidator < ActiveModel::EachValidator
4
4
  def validate_each(record, attribute, value)
5
5
  if value =~ /^[0-9]{10}$/
6
6
  year = value[0..3].to_i
@@ -10,14 +10,13 @@ class CuracaoIdNumberValidator < ActiveModel::EachValidator
10
10
  begin
11
11
  DateTime.civil(year, month, day)
12
12
  rescue ArgumentError
13
- record.errors.add(attribute.to_sym, options[:message] || "not a valid date" )
13
+ record.errors.add(attribute.to_sym, options[:message] || "not a valid date")
14
14
  end
15
15
  else
16
- record.errors.add(attribute.to_sym, options[:message] || "is not a number" )
16
+ record.errors.add(attribute.to_sym, options[:message] || "is not a number")
17
17
  end
18
18
  end
19
-
20
19
  end
21
20
 
22
- #"moet bestaan uit tien cijfers (bijvoorbeeld 1983040812)."
23
- #"moet een datum zijn."
21
+ # "moet bestaan uit tien cijfers (bijvoorbeeld 1983040812)."
22
+ # "moet een datum zijn."
@@ -1,11 +1,11 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  # == usage:
3
4
  # in your model, add:
4
5
  # validates :email, :presence => true, :is_email_address => true;
5
6
  # taken from http://lindsaar.net/2010/1/31/validates_rails_3_awesome_is_true
6
7
  # (It's probably a fake regex but hey, it looks legit.)
7
8
  class IsCuracaoPhoneValidator < ActiveModel::EachValidator
8
-
9
9
  def error_message
10
10
  "is geen geldig Curaçao telefoon nummer."
11
11
  end
@@ -16,8 +16,7 @@ class IsCuracaoPhoneValidator < ActiveModel::EachValidator
16
16
 
17
17
  def validate_each(record, attribute, value)
18
18
  unless value =~ /[4-8][0-9]{6}/
19
- record.errors[attribute] << (options[:message] || error_message )
19
+ record.errors[attribute] << (options[:message] || error_message)
20
20
  end
21
21
  end
22
-
23
22
  end
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : binary -*-
2
+
2
3
  # == usage:
3
4
  # in your model, add:
4
5
  # validates :email, :presence => true, :is_email_address => true;
@@ -25,11 +26,10 @@ class IsEmailAddressValidator < ActiveModel::EachValidator
25
26
  def error_message
26
27
  "is not a valid email address."
27
28
  end
28
-
29
+
29
30
  def validate_each(record, attribute, value)
30
31
  unless value =~ EmailAddress
31
- record.errors[attribute] << (options[:message] || error_message )
32
+ record.errors[attribute] << (options[:message] || error_message)
32
33
  end
33
34
  end
34
-
35
35
  end
@@ -1,11 +1,11 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  # == usage:
3
4
  # in your model, add:
4
5
  # validates :sex, :must_be_a_value => true;
5
- #
6
+ #
6
7
  # this checks against the objects attribute_values
7
8
  class MustBeAValueValidator < ActiveModel::EachValidator
8
-
9
9
  def error_message
10
10
  "is geen geldige keuze."
11
11
  end
@@ -16,7 +16,7 @@ class MustBeAValueValidator < ActiveModel::EachValidator
16
16
  def validate_each(record, attribute, value)
17
17
  values = attribute_values(record, attribute)
18
18
  if values.assoc(value).nil?
19
- record.errors[attribute] << (options[:message] || error_message )
19
+ record.errors[attribute] << (options[:message] || error_message)
20
20
  end
21
21
  end
22
22
 
@@ -48,16 +48,16 @@ class MustBeAValueValidator < ActiveModel::EachValidator
48
48
  raise "No Values defined in #{@Klass}, #{attribute}" if values.nil?
49
49
  if values.is_a?(Hash)
50
50
  temp = Array.new
51
- values.to_a.each do |k,v|
51
+ values.to_a.each do |k, v|
52
52
  temp << [ k, v ]
53
53
  end
54
- values = temp.sort {|a,b| a[0]<=>b[0]}
54
+ values = temp.sort { |a, b| a[0]<=>b[0] }
55
55
  else
56
56
  temp = Array.new
57
57
  values.to_a.each_index do |i|
58
58
  temp << [ i, values.to_a[i] ]
59
59
  end
60
- values = temp.sort {|a,b| a[1]<=>b[1]}
60
+ values = temp.sort { |a, b| a[1]<=>b[1] }
61
61
  end
62
62
  values
63
63
  end
@@ -86,7 +86,7 @@
86
86
  <% end %>
87
87
  <% end %>
88
88
  <% end %>
89
- <% if can? :list_versions, @object %>
89
+ <% if cancan_disabled? || can?(:list_versions, @object) %>
90
90
  <% css_class_id = inline_forms_versions_turbo_frame_id(@object) -%>
91
91
  <turbo-frame id="<%= css_class_id -%>">
92
92
  <%= render "versions" %>
@@ -7,11 +7,13 @@
7
7
  <%= t('inline_forms.general.application_title') %> v<%= InlineForms::VERSION %>
8
8
  </title>
9
9
  <%= stylesheet_link_tag "application" %>
10
- <%= stylesheet_link_tag "https://unpkg.com/trix@1.3.1/dist/trix.css" %>
10
+ <%= stylesheet_link_tag "inline_forms_fonts" %>
11
+ <%= stylesheet_link_tag "trix" %>
12
+ <%= inline_forms_user_color_overrides_style %>
11
13
  <%= csrf_meta_tags %>
12
14
  </head>
13
15
 
14
- <body>
16
+ <body class="<%= inline_forms_body_theme_class %>">
15
17
  <%= yield %>
16
18
  <%= javascript_include_tag "application" %>
17
19
  <%# Turbo (Hotwire) is loaded as an ES module so it does not collide with %>
@@ -21,6 +23,7 @@
21
23
  import { Turbo } from "<%= asset_path('turbo.min.js') %>"
22
24
  window.Turbo = Turbo
23
25
  </script>
24
- <%= javascript_include_tag "https://unpkg.com/trix@1.3.1/dist/trix.js" %>
26
+ <%# Trix 2 (vendored; no CDN). Self-registers its custom elements on load. %>
27
+ <%= javascript_include_tag "trix.min" %>
25
28
  </body>
26
29
  </html>
@@ -6,6 +6,7 @@
6
6
  <title>
7
7
  <%= t('inline_forms.general.application_title') %> v<%= InlineForms::VERSION %>
8
8
  </title>
9
+ <%= stylesheet_link_tag "inline_forms_fonts" %>
9
10
  <%= stylesheet_link_tag "inline_forms/devise" %>
10
11
  <%= stylesheet_link_tag "inline_forms_devise" %>
11
12
  <%= csrf_meta_tags %>
@@ -1,16 +1,18 @@
1
1
  <!DOCTYPE html>
2
- <html lang="en">
2
+ <html lang="<%= I18n.locale %>">
3
3
  <head>
4
4
  <meta charset="utf-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title><%= t('application_name') + " v" + InlineForms::VERSION -%></title>
7
7
  <%= stylesheet_link_tag "application" %>
8
+ <%= stylesheet_link_tag "inline_forms_fonts" %>
8
9
  <%= stylesheet_link_tag "inline_forms/inline_forms" %>
9
- <%= stylesheet_link_tag "https://unpkg.com/trix@1.3.1/dist/trix.css" %>
10
+ <%= stylesheet_link_tag "trix" %>
11
+ <%= inline_forms_user_color_overrides_style %>
10
12
  <%= csrf_meta_tags %>
11
13
  </head>
12
14
 
13
- <body>
15
+ <body class="<%= inline_forms_body_theme_class %>">
14
16
  <%= render "inline_forms/header" %>
15
17
  <%# Read string keys (FlashHash stores strings); avoid `notice`/`alert` helpers %>
16
18
  <%# so we do not depend on add_flash_types wiring in every layout context. %>
@@ -38,6 +40,7 @@
38
40
  import { Turbo } from "<%= asset_path('turbo.min.js') %>"
39
41
  window.Turbo = Turbo
40
42
  </script>
41
- <%= javascript_include_tag "https://unpkg.com/trix@1.3.1/dist/trix.js" %>
43
+ <%# Trix 2 (vendored; no CDN). Self-registers its custom elements on load. %>
44
+ <%= javascript_include_tag "trix.min" %>
42
45
  </body>
43
46
  </html>
data/archived/README.md CHANGED
@@ -11,6 +11,9 @@ This directory is the **versioned archive** for inline_forms capabilities that a
11
11
  | `:kansen_slider` | **Archived** | **7.6.0** | [`form_elements/kansen_slider/`](form_elements/kansen_slider/) |
12
12
  | `:tree`, `:move` | **Archived** | **7.7.0** | [`form_elements/tree/`](form_elements/tree/) — host `#children`, `#hash_tree_to_collection`, `#add_child` |
13
13
  | `:absence_list` | **Removed** (source not in repo) | **6.3.0** | See [CHANGELOG](../CHANGELOG.md#630---2026-05-03); vendor from git history or app copy |
14
+ | `:ckeditor`, `:text_area_without_ckeditor` | **Archived** | **8.1.21** | [`form_elements/ckeditor/`](form_elements/ckeditor/) — use `:rich_text` or `:plain_text` / `:plain_text_area` |
15
+ | `:question_list` | **Archived** | **8.1.30** | [`form_elements/question_list/`](form_elements/question_list/) — hardcoded host `Question` model |
16
+ | `:dnsrecords` | **Archived** | **8.1.30** | [`form_elements/dns_records/`](form_elements/dns_records/) — host `a_records`/`djbdns_line` APIs |
14
17
 
15
18
  Programmatic registry: `InlineForms::ARCHIVED_FORM_ELEMENTS` in `lib/inline_forms.rb` (boot-time check if a model still declares an archived symbol).
16
19
 
@@ -0,0 +1,26 @@
1
+ # CKEditor-era form elements (archived)
2
+
3
+ **Archived in gem version:** 8.1.21
4
+ **Reason:** CKEditor was removed in 7.3.0; these symbols were thin legacy aliases kept for backward compatibility.
5
+
6
+ | Symbol | Was | Use instead |
7
+ |--------|-----|-------------|
8
+ | `:ckeditor` | Delegated to `:rich_text` | `:rich_text` (ActionText / Trix) |
9
+ | `:text_area_without_ckeditor` | Delegated to `:plain_text` | `:plain_text` or `:plain_text_area` |
10
+
11
+ ## Restore
12
+
13
+ Copy helpers back into the gem:
14
+
15
+ ```bash
16
+ cp archived/form_elements/ckeditor/lib/inline_forms/form_elements/ckeditor_helper.rb \
17
+ lib/inline_forms/form_elements/
18
+ cp archived/form_elements/ckeditor/lib/inline_forms/form_elements/text_area_without_ckeditor_helper.rb \
19
+ lib/inline_forms/form_elements/
20
+ ```
21
+
22
+ Re-add registry entries in `lib/inline_forms/form_element_registry.rb` and remove the symbols from `InlineForms::ARCHIVED_FORM_ELEMENTS`.
23
+
24
+ ## Turbo
25
+
26
+ No special Turbo concerns; these were delegators to `:rich_text` and `:plain_text`.
@@ -0,0 +1,25 @@
1
+ # dns_records (archived)
2
+
3
+ **Archived in gem version:** 8.1.30
4
+ **Reason:** App-specific leftover from a DNS-admin application. The show helper calls `object.a_records`, `object.template_a_records` and `record.djbdns_line(name)` — host APIs no other app has. Edit and update were empty methods. Never registered in `FormElementRegistry::ENTRIES` (the helper methods are named `dnsrecords_*`, so the attribute-list symbol was `:dnsrecords`).
5
+
6
+ ## What it was
7
+
8
+ | Method | Behavior |
9
+ |--------|----------|
10
+ | `dnsrecords_show` | One `djbdns_line` per A record, `<br/>`-joined, raw |
11
+ | `dnsrecords_edit` | empty |
12
+ | `dnsrecords_update` | empty |
13
+
14
+ ## Restore
15
+
16
+ ```bash
17
+ cp archived/form_elements/dns_records/lib/inline_forms/form_elements/dns_records_helper.rb \
18
+ lib/inline_forms/form_elements/
19
+ ```
20
+
21
+ Remove `:dnsrecords` from `InlineForms::ARCHIVED_FORM_ELEMENTS`. Your app must provide `a_records` / `template_a_records` returning objects with `djbdns_line(name)`.
22
+
23
+ ## Turbo
24
+
25
+ Display-only; no Turbo concerns.
@@ -0,0 +1,25 @@
1
+ # question_list (archived)
2
+
3
+ **Archived in gem version:** 8.1.30
4
+ **Reason:** App-specific leftover. The edit helper hardcodes a host `Question` model with a `subquestions` association (survey-style app), the show helper iterates a HABTM-ish collection of `_presentation`s, and the update writes `<attribute singular>_ids`. No example app ever exercised it, and it cannot render without that exact host schema.
5
+
6
+ ## What it was
7
+
8
+ | Method | Behavior |
9
+ |--------|----------|
10
+ | `question_list_show` | `<ul>` of the association's `_presentation`s, each linking to inline edit |
11
+ | `question_list_edit` | Static nested `<ul>` of ALL `Question.all` + `question.subquestions` (read-only markup, despite being the edit state) |
12
+ | `question_list_update` | `object.<attr singular>_ids = params[attr].keys` |
13
+
14
+ ## Restore
15
+
16
+ ```bash
17
+ cp archived/form_elements/question_list/lib/inline_forms/form_elements/question_list_helper.rb \
18
+ lib/inline_forms/form_elements/
19
+ ```
20
+
21
+ Re-add `:question_list => :no_migration` to `FormElementRegistry::ENTRIES` and remove `:question_list` from `InlineForms::ARCHIVED_FORM_ELEMENTS`. Your app must define `Question` (with `subquestions`) and the HABTM association named by the attribute.
22
+
23
+ ## Turbo
24
+
25
+ Pre-Turbo markup; the edit state renders no form inputs, so it never round-tripped through the 7.x UJS → Turbo migration. Expect to rework it if restored.
data/inline_forms.gemspec CHANGED
@@ -1,4 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
+
2
3
  $:.push File.expand_path("../lib", __FILE__)
3
4
  require "inline_forms/version"
4
5
  require "inline_forms/gem_files"
@@ -7,17 +8,17 @@ Gem::Specification.new do |s|
7
8
  s.name = "inline_forms"
8
9
  s.version = InlineForms::VERSION
9
10
  s.platform = Gem::Platform::RUBY
10
- s.authors = ["Ace Suares", "Lemuel Boyce", "Manuel Ortega"]
11
- s.email = ["ace@suares.com"]
12
- s.homepage = %q{http://github.com/acesuares/inline_forms}
13
- s.summary = %q{Inline editing of forms for Rails 8.}
14
- s.description = %q{Inline Forms eases setup of admin-style forms with inline editing. Field lists are declared on the model. Requires Rails 8.1.x, Ruby >= 4.0, and validation_hints ~> 8.}
15
- s.licenses = ["MIT"]
11
+ s.authors = [ "Ace Suares", "Lemuel Boyce", "Manuel Ortega" ]
12
+ s.email = [ "ace@suares.com" ]
13
+ s.homepage = %q(http://github.com/acesuares/inline_forms)
14
+ s.summary = %q(Inline editing of forms for Rails 8.)
15
+ s.description = %q(Inline Forms eases setup of admin-style forms with inline editing. Field lists are declared on the model. Requires Rails 8.1.x, Ruby >= 4.0, and validation_hints ~> 8.)
16
+ s.licenses = [ "MIT" ]
16
17
  s.required_ruby_version = ">= 4.0.0"
17
18
 
18
19
  s.files = InlineFormsGemFiles.gem_files(include_installer: false)
19
20
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
20
- s.require_paths = ["lib"]
21
+ s.require_paths = [ "lib" ]
21
22
 
22
23
  s.add_dependency("validation_hints", ">= 8.1.4", "< 9.0")
23
24
  s.add_dependency("rails", ">= 8.1", "< 8.2")
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  require "rails/generators"
3
4
  require "rails/generators/generated_attribute"
4
5
  require "inline_forms"
@@ -106,11 +107,11 @@ Rails::Generators::GeneratedAttribute.class_eval do
106
107
 
107
108
  def migration?
108
109
  not ( column_type == :no_migration ||
109
- SPECIAL_GENERATOR_NAMES.include?(name) )
110
+ SPECIAL_GENERATOR_NAMES.include?(name))
110
111
  end
111
112
 
112
113
  def attribute?
113
114
  not ( SPECIAL_GENERATOR_NAMES.include?(name) ||
114
- relation? )
115
+ relation?)
115
116
  end
116
117
  end
@@ -8,7 +8,7 @@ class ApplicationRecord < ActiveRecord::Base
8
8
  # in the inline_forms versions panel as a meaningless "empty" row whose
9
9
  # Restore link reifies the same state (no-op). Excluding `:touch` here
10
10
  # suppresses that noise without affecting real attribute updates.
11
- has_paper_trail on: [:create, :update, :destroy]
11
+ has_paper_trail on: [ :create, :update, :destroy ]
12
12
 
13
13
  attr_writer :inline_forms_attribute_list
14
14
 
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  module InlineForms
3
4
  class ArchivedFormElementError < StandardError; end
4
5
 
@@ -8,43 +9,65 @@ module InlineForms
8
9
  geo_code_curacao: {
9
10
  archived_in_version: "7.6.0",
10
11
  archive_path: "archived/form_elements/geo_code_curacao",
11
- summary: "Curaçao street geocode (MySQL Zones/Buurten/Straatcode, jQuery autocomplete, UJS list_streets).",
12
+ summary: "Curaçao street geocode (MySQL Zones/Buurten/Straatcode, jQuery autocomplete, UJS list_streets)."
12
13
  },
13
14
  chicas_photo_list: {
14
15
  archived_in_version: "7.6.0",
15
16
  archive_path: "archived/form_elements/chicas",
16
- summary: "Chicas app read-only member photo gallery (show-only).",
17
+ summary: "Chicas app read-only member photo gallery (show-only)."
17
18
  },
18
19
  chicas_family_photo_list: {
19
20
  archived_in_version: "7.6.0",
20
21
  archive_path: "archived/form_elements/chicas",
21
- summary: "Chicas app read-only family member photo gallery (show-only).",
22
+ summary: "Chicas app read-only family member photo gallery (show-only)."
22
23
  },
23
24
  chicas_dropdown_with_family_members: {
24
25
  archived_in_version: "7.6.0",
25
26
  archive_path: "archived/form_elements/chicas",
26
- summary: "Chicas client picker via family.clients; moves CarrierWave upload dir on update.",
27
+ summary: "Chicas client picker via family.clients; moves CarrierWave upload dir on update."
27
28
  },
28
29
  kansen_slider: {
29
30
  archived_in_version: "7.6.0",
30
31
  archive_path: "archived/form_elements/kansen_slider",
31
- summary: "jQuery UI slider for integer-coded chance scale; uses model attribute_values.",
32
+ summary: "jQuery UI slider for integer-coded chance scale; uses model attribute_values."
32
33
  },
33
34
  tree: {
34
35
  archived_in_version: "7.7.0",
35
36
  archive_path: "archived/form_elements/tree",
36
- summary: "Self-referential children list via parent.children; requires host tree APIs (see README).",
37
+ summary: "Self-referential children list via parent.children; requires host tree APIs (see README)."
37
38
  },
38
39
  move: {
39
40
  archived_in_version: "7.7.0",
40
41
  archive_path: "archived/form_elements/tree",
41
- summary: "Reparent via hash_tree_to_collection + add_child (host must implement; pairs with :tree).",
42
+ summary: "Reparent via hash_tree_to_collection + add_child (host must implement; pairs with :tree)."
42
43
  },
43
44
  absence_list: {
44
45
  removed_in_version: "6.3.0",
45
46
  archive_path: nil,
46
- summary: "Project-specific absence list UI; removed without a copy in this repo (see CHANGELOG 6.3.0).",
47
+ summary: "Project-specific absence list UI; removed without a copy in this repo (see CHANGELOG 6.3.0)."
48
+ },
49
+ ckeditor: {
50
+ archived_in_version: "8.1.21",
51
+ archive_path: "archived/form_elements/ckeditor",
52
+ summary: "Legacy CKEditor form element; use :rich_text (ActionText) instead."
53
+ },
54
+ text_area_without_ckeditor: {
55
+ archived_in_version: "8.1.21",
56
+ archive_path: "archived/form_elements/ckeditor",
57
+ summary: "Legacy plain-text alias; use :plain_text or :plain_text_area instead."
58
+ },
59
+ question_list: {
60
+ archived_in_version: "8.1.30",
61
+ archive_path: "archived/form_elements/question_list",
62
+ summary: "Survey-app checklist hardcoding a host Question model with subquestions."
47
63
  },
64
+ # The helper methods were named dnsrecords_* (no underscore), so the
65
+ # attribute-list symbol in host apps was :dnsrecords.
66
+ dnsrecords: {
67
+ archived_in_version: "8.1.30",
68
+ archive_path: "archived/form_elements/dns_records",
69
+ summary: "DNS-admin display of djbdns A-record lines via host a_records/djbdns_line APIs."
70
+ }
48
71
  }.freeze
49
72
 
50
73
  def self.validate_no_archived_form_elements_for!(klass)
@@ -1,4 +1,5 @@
1
1
  # -*- encoding : utf-8 -*-
2
+
2
3
  module InlineForms
3
4
  # Maps +__callee__+ from a +*_show+ helper to the +params[:form_element]+ string
4
5
  # (e.g. +:text_field_show+ → +"text_field"+).