inline_forms 8.1.21 → 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.
- checksums.yaml +4 -4
- data/.forgejo/workflows/ci.yml +63 -0
- data/.forgejo/workflows/full-gate.yml +75 -0
- data/.gitignore +4 -3
- data/.rubocop.yml +30 -0
- data/.rubocop_todo.yml +151 -0
- data/CHANGELOG.md +261 -0
- data/Gemfile +14 -2
- data/README.rdoc +23 -6
- data/Rakefile +2 -2
- data/app/assets/fonts/opensans-v44-latin-italic.woff2 +0 -0
- data/app/assets/fonts/opensans-v44-latin-regular.woff2 +0 -0
- data/app/assets/javascripts/inline_forms/inline_forms.js +30 -43
- data/app/assets/stylesheets/inline_forms/_foundation_icons.scss +6 -12
- data/app/assets/stylesheets/inline_forms/_theme.scss +134 -0
- data/app/assets/stylesheets/inline_forms/devise.scss +14 -13
- data/app/assets/stylesheets/inline_forms/foundation_and_overrides.scss +4 -0
- data/app/assets/stylesheets/inline_forms/inline_forms.scss +59 -68
- data/app/assets/stylesheets/inline_forms_fonts.css.erb +39 -0
- data/app/controllers/inline_forms_application_controller.rb +8 -4
- data/app/controllers/inline_forms_controller.rb +73 -14
- data/app/helpers/inline_forms_helper.rb +58 -15
- data/app/models/concerns/inline_forms/soft_deletable.rb +11 -12
- data/app/validators/curacao_id_number_validator.rb +5 -6
- data/app/validators/is_curacao_phone_validator.rb +2 -3
- data/app/validators/is_email_address_validator.rb +3 -3
- data/app/validators/must_be_a_value_validator.rb +6 -6
- data/app/views/inline_forms/_show.html.erb +1 -1
- data/app/views/layouts/application.html.erb +6 -3
- data/app/views/layouts/devise.html.erb +1 -0
- data/app/views/layouts/inline_forms.html.erb +7 -4
- data/archived/README.md +2 -0
- data/archived/form_elements/dns_records/README.md +25 -0
- data/archived/form_elements/question_list/README.md +25 -0
- data/inline_forms.gemspec +8 -7
- data/lib/generators/inline_forms_attribute_overrides.rb +3 -2
- data/lib/generators/templates/application_record.rb +1 -1
- data/lib/inline_forms/archived_form_elements.rb +23 -10
- data/lib/inline_forms/form_element_from_callee.rb +1 -0
- data/lib/inline_forms/form_element_registry.rb +32 -32
- data/lib/inline_forms/form_elements/color_field_helper.rb +44 -0
- data/lib/inline_forms/form_elements/date_helper.rb +4 -1
- data/lib/inline_forms/form_elements/dropdown_with_other_helper.rb +25 -113
- data/lib/inline_forms/form_elements/month_year_picker_helper.rb +13 -2
- data/lib/inline_forms/form_elements/multi_image_field_helper.rb +18 -6
- data/lib/inline_forms/form_elements/slider_with_values_helper.rb +31 -64
- data/lib/inline_forms/form_elements/time_helper.rb +3 -1
- data/lib/inline_forms/gem_files.rb +1 -0
- data/lib/inline_forms/tabs.rb +175 -0
- data/lib/inline_forms/turbo_tabs_builder.rb +20 -13
- data/lib/inline_forms/version.rb +2 -1
- data/lib/inline_forms.rb +59 -45
- data/test/archived_form_elements_test.rb +34 -4
- data/test/dummy/app/controllers/application_controller.rb +24 -0
- data/test/dummy/app/controllers/machines_controller.rb +4 -0
- data/test/dummy/app/controllers/parts_controller.rb +4 -0
- data/test/dummy/app/controllers/widgets_controller.rb +4 -0
- data/test/dummy/app/helpers/application_helper.rb +13 -0
- data/test/dummy/app/models/application_record.rb +26 -0
- data/test/dummy/app/models/kind.rb +8 -0
- data/test/dummy/app/models/machine.rb +23 -0
- data/test/dummy/app/models/part.rb +16 -0
- data/test/dummy/app/models/widget.rb +39 -0
- data/test/dummy/app/views/_inline_forms_tabs.html.erb +40 -0
- data/test/dummy/config/application.rb +34 -0
- data/test/dummy/config/database.yml +3 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/initializers/inline_forms.rb +6 -0
- data/test/dummy/config/initializers/paper_trail_yaml_safe_load.rb +28 -0
- data/test/dummy/config/routes.rb +22 -0
- data/test/integration/inline_forms_crud_test.rb +141 -0
- data/test/integration/legacy_elements_test.rb +42 -0
- data/test/integration/native_inputs_test.rb +138 -0
- data/test/integration/open_after_create_test.rb +85 -0
- data/test/integration_test_helper.rb +80 -0
- data/test/plain_text_configuration_test.rb +3 -3
- data/test/tabs_test.rb +98 -0
- data/test/user_model_config_test.rb +1 -0
- data/vendor/assets/javascripts/trix.min.js +7 -0
- data/vendor/assets/stylesheets/trix.css +470 -0
- metadata +63 -320
- data/app/assets/images/jquery-ui/animated-overlay.gif +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonal-maze_20_6e4f1c_10x10.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonal-maze_40_000000_10x10.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-medium_20_d34d17_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-small_0_aaaaaa_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-small_25_c5ddfc_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-small_40_db4865_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-small_50_262626_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-small_50_93c3cd_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-small_50_ff3853_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-small_75_ccd232_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_15_0b3e6f_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_15_444444_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_20_e69700_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_22_1484e6_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_26_2293f7_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_75_f3d8d8_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_8_333333_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_90_eeeeee_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diagonals-thick_95_ffdc2e_40x40.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diamond_10_4f4221_10x8.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diamond_20_372806_10x8.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diamond_25_675423_10x8.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diamond_25_d5ac5d_10x8.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diamond_8_261803_10x8.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_diamond_8_443113_10x8.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_dots-medium_30_0b58a2_4x4.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_dots-medium_80_ffff38_4x4.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_dots-small_20_333333_2x2.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_dots-small_30_a32d00_2x2.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_dots-small_35_35414f_2x2.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_dots-small_40_00498f_2x2.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_dots-small_65_a6a6a6_2x2.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_fine-grain_10_eceadf_60x60.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_fine-grain_10_f8f7f6_60x60.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_fine-grain_15_eceadf_60x60.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_fine-grain_15_f7f3de_60x60.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_fine-grain_15_ffffff_60x60.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_fine-grain_65_654b24_60x60.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_fine-grain_68_b83400_60x60.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_0_303030_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_0_333333_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_0_4c4c4c_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_0_e69700_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_0_e6b900_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_0_eeeeee_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_10_000000_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_15_cd0a0a_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_30_cccccc_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_40_292929_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_50_5c5c5c_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_55_994d53_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_55_999999_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_55_c0402a_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_55_eeeeee_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_55_fafafa_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_55_fbec88_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_55_ffffff_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_65_ffffff_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_75_aaaaaa_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_75_ba9217_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_75_ddd4b0_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_100_e4f1fb_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_100_f5f0e5_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_100_f8f8f8_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_15_5f391b_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_20_555555_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_25_cb842e_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_35_dddddd_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_40_0078a3_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_40_0a0a0a_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_40_111111_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_40_ffc73d_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_45_0078ae_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_50_3baae3_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_55_1c1c1c_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_55_f1fbe5_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_55_f8da4e_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_55_fbf5d0_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_55_fbf8ee_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_55_fcf0ba_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_60_000000_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_60_eeeeee_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_70_ede4d4_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_75_79c9ec_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_80_d7ebf9_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_85_dfeffc_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_100_ece8da_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_16_121212_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_20_111111_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_20_1c160d_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_25_333333_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_25_453326_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_30_3d3644_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_30_44372c_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_45_817865_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_45_e14f1c_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_50_6eac2c_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_55_000000_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_60_fece2f_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_70_ffdd57_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_75_2191c0_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_85_9fda58_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_90_fff9e5_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_gloss-wave_95_f6ecd5_500x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_eeeeee_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f2f5f7_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f4f0ec_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f5f3e5_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f6f6f6_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_f9f9f9_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_100_fafaf4_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_15_459e00_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_15_888888_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_20_0972a5_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_30_285c00_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_40_aaaaaa_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_55_555555_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_65_fee4bd_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_70_000000_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_75_f5f5b5_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-hard_95_cccccc_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_dcd9de_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_deedf7_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_eae6ea_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_f6f6f6_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_f9f9f9_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_100_feeebd_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_15_cc0000_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_20_201913_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_20_619226_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_25_0073ea_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_25_30273a_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_25_67b021_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_25_ffef8f_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_33_003147_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_33_3a8104_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_35_222222_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_35_adadad_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_44_444444_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_45_5f5964_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_50_4eb305_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_50_aaaaaa_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_50_dddddd_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_60_4ca20b_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_60_dddddd_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_80_eeeeee_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_highlight-soft_95_ffedad_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-hard_100_eeeeee_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-hard_45_cd0a0a_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-hard_55_ffeb80_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-hard_75_999999_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-soft_100_f4f0ec_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-soft_10_201913_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-soft_10_285c00_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-soft_15_121212_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-soft_15_2b2922_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-soft_25_000000_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-soft_30_f58400_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-soft_30_ffffff_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_inset-soft_50_c9c9c9_1x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_loop_25_000000_21x21.png +0 -0
- data/app/assets/images/jquery-ui/ui-bg_white-lines_85_f7f7ba_40x100.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_000000_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_004276_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_00498f_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_0073ea_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_0078ae_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_056b93_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_070603_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_0a82eb_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_0b54d5_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_1f1f1f_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_217bc0_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_222222_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_228ef1_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_2694e8_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_2e83ff_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_3383bb_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_3572ac_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_3d3d3d_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_3d80b3_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_454545_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_469bdd_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_4b8e0b_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_4ca300_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_4eb305_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_5fa5e3_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_666666_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_6da8d5_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_70b2e1_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_72a7cf_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_72b42d_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_734d99_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_808080_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_847e71_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_888888_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_88a206_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_8DC262_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_8c291d_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_8d78a5_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_98d2fb_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_999999_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_9bcc60_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_9ccdfc_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_9fda58_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_a83300_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_a8a3ae_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_aaaaaa_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_add978_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_b83400_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_b8ec79_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_bbbbbb_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_bd7b00_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_c02669_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_c47a23_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_c98000_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_cb672b_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_cc0000_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_cccccc_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_cd0a0a_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_d19405_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_d8e7f3_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_e0fdff_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_e1e463_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_e3ddc9_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_e8e2b5_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_e9cd86_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_eb990f_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_ebccce_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_ed9f26_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_ededed_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_eeeeee_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_ef8c08_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_efec9f_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_f08000_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_f1fd86_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_f29a00_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_f2ec64_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_f35f07_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_f5e175_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_f7a50d_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_f9bd01_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_f9f2bd_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_fadc7a_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_fbc856_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_fbdb93_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_fcd113_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_fcdd4a_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_ff0084_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_ff7519_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_ffcf29_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_ffd27a_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_ffe180_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_ffeb33_256x240.png +0 -0
- data/app/assets/images/jquery-ui/ui-icons_ffffff_256x240.png +0 -0
- data/app/assets/stylesheets/jquery_ui/jquery.ui.accordion.css.scss +0 -39
- data/app/assets/stylesheets/jquery_ui/jquery.ui.all.css.scss +0 -14
- data/app/assets/stylesheets/jquery_ui/jquery.ui.autocomplete.css.scss +0 -17
- data/app/assets/stylesheets/jquery_ui/jquery.ui.base.css.scss +0 -27
- data/app/assets/stylesheets/jquery_ui/jquery.ui.button.css.scss +0 -115
- data/app/assets/stylesheets/jquery_ui/jquery.ui.core.css.scss +0 -92
- data/app/assets/stylesheets/jquery_ui/jquery.ui.datepicker.css.scss +0 -179
- data/app/assets/stylesheets/jquery_ui/jquery.ui.dialog.css.scss +0 -70
- data/app/assets/stylesheets/jquery_ui/jquery.ui.menu.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/jquery.ui.progressbar.css.scss +0 -29
- data/app/assets/stylesheets/jquery_ui/jquery.ui.resizable.css.scss +0 -79
- data/app/assets/stylesheets/jquery_ui/jquery.ui.selectable.css.scss +0 -16
- data/app/assets/stylesheets/jquery_ui/jquery.ui.slider.css.scss +0 -74
- data/app/assets/stylesheets/jquery_ui/jquery.ui.spinner.css.scss +0 -66
- data/app/assets/stylesheets/jquery_ui/jquery.ui.tabs.css.scss +0 -53
- data/app/assets/stylesheets/jquery_ui/jquery.ui.theme.css.scss +0 -408
- data/app/assets/stylesheets/jquery_ui/jquery.ui.tooltip.css.scss +0 -20
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.base.css.scss +0 -78
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.black-tie.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.blitzer.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.cupertino.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.dark-hive.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.dot-luv.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.eggplant.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.excite-bike.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.flick.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.hot-sneaks.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.humanity.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.le-frog.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.mint-choc.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.overcast.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.pepper-grinder.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.redmond.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.smoothness.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.south-street.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.start.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.sunny.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.swanky-purse.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.trontastic.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.ui-darkness.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.ui-lightness.css.scss +0 -80
- data/app/assets/stylesheets/jquery_ui/themes/_jquery.ui.vader.css.scss +0 -80
- /data/{lib → archived/form_elements/dns_records/lib}/inline_forms/form_elements/dns_records_helper.rb +0 -0
- /data/{lib → archived/form_elements/question_list/lib}/inline_forms/form_elements/question_list_helper.rb +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6e2f71a943f446268125b1012392c5156bcc5cbfc1df84385b4fc10225545135
|
|
4
|
+
data.tar.gz: ee90225c78498b2a1b0759805363e7871b772c79cdc2f41620a4470e2ed01e2b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4aded88b4f1ffeb2c4509505c16ef2e362e9bc89b86dc526fde9f83680750f850dad489a45d2067db754e558e05cd8d3871eb3dc48ec71e09e0d6e02f24c6717
|
|
7
|
+
data.tar.gz: 318a3f451539ae8a3a0775053b1a6f3f422759114cb4587f7ba89fd2d225a1186904e600a4e6f86c9f1424c9c2784975d3aaf595062722fb83ecc8b74126d3ea
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# CI for Forgejo Actions (runner on dev02, jobs run in Docker containers).
|
|
2
|
+
# Mirrors the Papiamentu setup: runner label `docker`, shared CI image
|
|
3
|
+
# `papiamentu-ci:ruby-4.0.4-node20` (same Ruby as these gems; node for the
|
|
4
|
+
# checkout/cache actions). See stuff/2026-07-06-forgejo-ci-rubocop-brakeman.md.
|
|
5
|
+
#
|
|
6
|
+
# GitHub deliberately has NO workflows (.github/workflows was removed in
|
|
7
|
+
# 8.1.34): pushing to GitHub triggers nothing; CI runs only on Forgejo.
|
|
8
|
+
name: CI
|
|
9
|
+
|
|
10
|
+
# Push triggers on EVERY branch (stuff/prompt/workflow.md: "every commit runs
|
|
11
|
+
# through CI") — feature branches were silently skipping CI when this was
|
|
12
|
+
# `branches: [master]`.
|
|
13
|
+
on:
|
|
14
|
+
push:
|
|
15
|
+
pull_request:
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
test:
|
|
19
|
+
runs-on: docker
|
|
20
|
+
container:
|
|
21
|
+
image: papiamentu-ci:ruby-4.0.4-node20
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@v4
|
|
24
|
+
with:
|
|
25
|
+
path: inline_forms
|
|
26
|
+
|
|
27
|
+
# The dev Gemfile points at the validation_hints sibling
|
|
28
|
+
# (gem "validation_hints", path: "../validation_hints"). The job's
|
|
29
|
+
# automatic token is scoped to this repo only and validation_hints is
|
|
30
|
+
# private, so the repo secret VALIDATION_HINTS (a token with read
|
|
31
|
+
# access to ace/validation_hints) authorizes the checkout.
|
|
32
|
+
- uses: actions/checkout@v4
|
|
33
|
+
with:
|
|
34
|
+
repository: ace/validation_hints
|
|
35
|
+
token: ${{ secrets.VALIDATION_HINTS }}
|
|
36
|
+
path: validation_hints
|
|
37
|
+
|
|
38
|
+
- name: Cache gems
|
|
39
|
+
uses: actions/cache@v4
|
|
40
|
+
with:
|
|
41
|
+
path: inline_forms/vendor/bundle
|
|
42
|
+
key: gems-inline_forms-${{ hashFiles('inline_forms/Gemfile', 'inline_forms/inline_forms.gemspec') }}
|
|
43
|
+
restore-keys: gems-inline_forms-
|
|
44
|
+
|
|
45
|
+
- name: Install gems
|
|
46
|
+
working-directory: inline_forms
|
|
47
|
+
run: |
|
|
48
|
+
bundle config set --local path vendor/bundle
|
|
49
|
+
bundle install --jobs 4
|
|
50
|
+
|
|
51
|
+
- name: Tests (unit + dummy-app integration harness)
|
|
52
|
+
working-directory: inline_forms
|
|
53
|
+
run: bundle exec rake test
|
|
54
|
+
|
|
55
|
+
- name: RuboCop
|
|
56
|
+
working-directory: inline_forms
|
|
57
|
+
run: bundle exec rubocop
|
|
58
|
+
|
|
59
|
+
- name: bundler-audit
|
|
60
|
+
working-directory: inline_forms
|
|
61
|
+
run: |
|
|
62
|
+
gem install bundler-audit --no-document
|
|
63
|
+
bundle-audit check --update
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# The full release gate as a CI job: build all three gems, install them,
|
|
2
|
+
# generate the example app (which runs its own 150+ test suite as part of
|
|
3
|
+
# `inline_forms create`), then run Brakeman against the generated app.
|
|
4
|
+
#
|
|
5
|
+
# Brakeman is aimed at Rails *applications*; scanning the generated MyApp
|
|
6
|
+
# covers the engine's controllers/views in their real app context plus
|
|
7
|
+
# everything the installer writes — scanning the bare engine repo would
|
|
8
|
+
# skip most checks. bundler-audit for the engine runs in ci.yml.
|
|
9
|
+
#
|
|
10
|
+
# Heavy (~3-4 min: rails new + bundle + migrations + tests), so it runs on
|
|
11
|
+
# demand and weekly, not per push. Requires network access to rubygems.org
|
|
12
|
+
# from the runner (same as Papiamentu's bundle install).
|
|
13
|
+
name: Full gate
|
|
14
|
+
|
|
15
|
+
on:
|
|
16
|
+
workflow_dispatch:
|
|
17
|
+
schedule:
|
|
18
|
+
- cron: "17 4 * * 1" # Mondays 04:17
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
full-gate:
|
|
22
|
+
runs-on: docker
|
|
23
|
+
container:
|
|
24
|
+
image: papiamentu-ci:ruby-4.0.4-node20
|
|
25
|
+
steps:
|
|
26
|
+
- uses: actions/checkout@v4
|
|
27
|
+
with:
|
|
28
|
+
path: inline_forms
|
|
29
|
+
|
|
30
|
+
- uses: actions/checkout@v4
|
|
31
|
+
with:
|
|
32
|
+
repository: ace/validation_hints
|
|
33
|
+
token: ${{ secrets.VALIDATION_HINTS }}
|
|
34
|
+
path: validation_hints
|
|
35
|
+
|
|
36
|
+
- name: Build the three gems
|
|
37
|
+
run: |
|
|
38
|
+
cd validation_hints && gem build validation_hints.gemspec && cd ..
|
|
39
|
+
cd inline_forms && gem build inline_forms.gemspec && gem build inline_forms_installer.gemspec
|
|
40
|
+
|
|
41
|
+
- name: Install built gems
|
|
42
|
+
run: |
|
|
43
|
+
gem install --no-document \
|
|
44
|
+
validation_hints/validation_hints-*.gem \
|
|
45
|
+
inline_forms/inline_forms-*.gem \
|
|
46
|
+
inline_forms/inline_forms_installer-*.gem
|
|
47
|
+
|
|
48
|
+
# The installer git-inits the generated app and makes an initial commit
|
|
49
|
+
# (installer_core.rb: `git add .` + `git commit`); a bare container has
|
|
50
|
+
# no git identity and the commit — and with it the whole create — fails
|
|
51
|
+
# ("unable to auto-detect email address", seen in run 3).
|
|
52
|
+
- name: Git identity for the installer's initial commit
|
|
53
|
+
run: |
|
|
54
|
+
git config --global user.email "forgejo-ci@dev02.invalid"
|
|
55
|
+
git config --global user.name "Forgejo CI"
|
|
56
|
+
|
|
57
|
+
# The installer's example gate runs `bundle exec rails test` itself and
|
|
58
|
+
# aborts (non-zero) on any failure — this step IS the release gate.
|
|
59
|
+
# HOME keeps Rails/Bundler caches inside the workspace container.
|
|
60
|
+
- name: Generate example app (runs its own test suite)
|
|
61
|
+
run: |
|
|
62
|
+
mkdir -p apps
|
|
63
|
+
cd apps
|
|
64
|
+
inline_forms create MyApp -d sqlite --example --no-rvm
|
|
65
|
+
|
|
66
|
+
- name: Brakeman against the generated app
|
|
67
|
+
run: |
|
|
68
|
+
gem install brakeman --no-document
|
|
69
|
+
cd apps/MyApp
|
|
70
|
+
# Default check set is ENFORCING (baseline triaged 2026-07-06:
|
|
71
|
+
# 0 warnings; the one ForceSSL finding was fixed in 8.1.36).
|
|
72
|
+
brakeman --no-pager
|
|
73
|
+
# Pedantic full set stays informational: it includes checks that
|
|
74
|
+
# can fire on perfectly reasonable future code.
|
|
75
|
+
brakeman --run-all-checks --no-pager || true
|
data/.gitignore
CHANGED
|
@@ -26,6 +26,7 @@ Gemfile.lock
|
|
|
26
26
|
# Local notes / analysis (not tracked)
|
|
27
27
|
stuff/
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
#
|
|
31
|
-
|
|
29
|
+
|
|
30
|
+
# test/dummy runtime artifacts (in-memory DB; only logs/tmp may appear)
|
|
31
|
+
test/dummy/log/
|
|
32
|
+
test/dummy/tmp/
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# RuboCop with the Rails "omakase" preset (same recipe as Papiamentu).
|
|
2
|
+
# All heredoc-free files are clean. The remaining violations (grandfathered in
|
|
3
|
+
# .rubocop_todo.yml) live in files with heredocs that emit generated-app code
|
|
4
|
+
# (installer core, generators, form-element helpers); those files are left
|
|
5
|
+
# untouched on purpose — autocorrect near heredocs risks changing emitted code.
|
|
6
|
+
# Run with: bundle exec rubocop
|
|
7
|
+
inherit_gem:
|
|
8
|
+
rubocop-rails-omakase: rubocop.yml
|
|
9
|
+
|
|
10
|
+
inherit_from: .rubocop_todo.yml
|
|
11
|
+
|
|
12
|
+
AllCops:
|
|
13
|
+
# The engine targets Ruby >= 4.0 (gemspec).
|
|
14
|
+
TargetRubyVersion: 3.3
|
|
15
|
+
Exclude:
|
|
16
|
+
- "pkg/**/*"
|
|
17
|
+
- "vendor/**/*"
|
|
18
|
+
- "archived/**/*" # frozen historical code; linting defeats the purpose
|
|
19
|
+
- "lib/installer_templates/**/*" # templates for *generated apps*, not engine style
|
|
20
|
+
- "lib/vagrant/**/*"
|
|
21
|
+
- "lib/otherstuff/**/*"
|
|
22
|
+
- "stuff/**/*"
|
|
23
|
+
- "test/dummy/log/**/*"
|
|
24
|
+
- "test/dummy/tmp/**/*"
|
|
25
|
+
- "script/**/*" # one-off maintainer migration script
|
|
26
|
+
|
|
27
|
+
# Heredoc bodies are generated-file content (installer/form-element templates);
|
|
28
|
+
# whitespace there is part of the emitted output and is never auto-fixed.
|
|
29
|
+
Layout/TrailingWhitespace:
|
|
30
|
+
AllowInHeredoc: true
|
data/.rubocop_todo.yml
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# This configuration was generated by
|
|
2
|
+
# `rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 60 --no-auto-gen-timestamp`
|
|
3
|
+
# using RuboCop version 1.88.1.
|
|
4
|
+
# The point is for the user to remove these configuration records
|
|
5
|
+
# one by one as the offenses are removed from the code base.
|
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
|
8
|
+
|
|
9
|
+
# Offense count: 1
|
|
10
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
11
|
+
# Configuration parameters: EnforcedStyle, IndentOneStep, IndentationWidth.
|
|
12
|
+
# SupportedStyles: case, end
|
|
13
|
+
Layout/CaseIndentation:
|
|
14
|
+
Exclude:
|
|
15
|
+
- 'lib/generators/inline_forms_generator.rb'
|
|
16
|
+
|
|
17
|
+
# Offense count: 3
|
|
18
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
19
|
+
Layout/ElseAlignment:
|
|
20
|
+
Exclude:
|
|
21
|
+
- 'lib/inline_forms_installer/installer_core.rb'
|
|
22
|
+
|
|
23
|
+
# Offense count: 37
|
|
24
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
25
|
+
Layout/EmptyLineAfterMagicComment:
|
|
26
|
+
Exclude:
|
|
27
|
+
- 'lib/generators/inline_forms_addto_generator.rb'
|
|
28
|
+
- 'lib/generators/inline_forms_generator.rb'
|
|
29
|
+
- 'lib/inline_forms/form_elements/audio_field_helper.rb'
|
|
30
|
+
- 'lib/inline_forms/form_elements/check_box_helper.rb'
|
|
31
|
+
- 'lib/inline_forms/form_elements/check_list_helper.rb'
|
|
32
|
+
- 'lib/inline_forms/form_elements/color_field_helper.rb'
|
|
33
|
+
- 'lib/inline_forms/form_elements/date_helper.rb'
|
|
34
|
+
- 'lib/inline_forms/form_elements/decimal_field_helper.rb'
|
|
35
|
+
- 'lib/inline_forms/form_elements/devise_password_field_helper.rb'
|
|
36
|
+
- 'lib/inline_forms/form_elements/dropdown_helper.rb'
|
|
37
|
+
- 'lib/inline_forms/form_elements/dropdown_with_integers_helper.rb'
|
|
38
|
+
- 'lib/inline_forms/form_elements/dropdown_with_other_helper.rb'
|
|
39
|
+
- 'lib/inline_forms/form_elements/dropdown_with_values_helper.rb'
|
|
40
|
+
- 'lib/inline_forms/form_elements/dropdown_with_values_with_stars_helper.rb'
|
|
41
|
+
- 'lib/inline_forms/form_elements/file_field_helper.rb'
|
|
42
|
+
- 'lib/inline_forms/form_elements/header_helper.rb'
|
|
43
|
+
- 'lib/inline_forms/form_elements/image_field_helper.rb'
|
|
44
|
+
- 'lib/inline_forms/form_elements/info_helper.rb'
|
|
45
|
+
- 'lib/inline_forms/form_elements/info_list_helper.rb'
|
|
46
|
+
- 'lib/inline_forms/form_elements/integer_field_helper.rb'
|
|
47
|
+
- 'lib/inline_forms/form_elements/money_field_helper.rb'
|
|
48
|
+
- 'lib/inline_forms/form_elements/month_select_helper.rb'
|
|
49
|
+
- 'lib/inline_forms/form_elements/month_year_picker_helper.rb'
|
|
50
|
+
- 'lib/inline_forms/form_elements/multi_image_field_helper.rb'
|
|
51
|
+
- 'lib/inline_forms/form_elements/pdf_link_helper.rb'
|
|
52
|
+
- 'lib/inline_forms/form_elements/plain_text_area_helper.rb'
|
|
53
|
+
- 'lib/inline_forms/form_elements/plain_text_helper.rb'
|
|
54
|
+
- 'lib/inline_forms/form_elements/radio_button_helper.rb'
|
|
55
|
+
- 'lib/inline_forms/form_elements/rich_text_helper.rb'
|
|
56
|
+
- 'lib/inline_forms/form_elements/scale_with_integers_helper.rb'
|
|
57
|
+
- 'lib/inline_forms/form_elements/scale_with_values_helper.rb'
|
|
58
|
+
- 'lib/inline_forms/form_elements/simple_file_field_helper.rb'
|
|
59
|
+
- 'lib/inline_forms/form_elements/slider_with_values_helper.rb'
|
|
60
|
+
- 'lib/inline_forms/form_elements/text_area_helper.rb'
|
|
61
|
+
- 'lib/inline_forms/form_elements/text_field_helper.rb'
|
|
62
|
+
- 'lib/inline_forms/form_elements/time_helper.rb'
|
|
63
|
+
- 'lib/inline_forms_installer/create_log.rb'
|
|
64
|
+
|
|
65
|
+
# Offense count: 1
|
|
66
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
67
|
+
# Configuration parameters: EnforcedStyle.
|
|
68
|
+
# SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines, beginning_only, ending_only
|
|
69
|
+
Layout/EmptyLinesAroundClassBody:
|
|
70
|
+
Exclude:
|
|
71
|
+
- 'lib/generators/inline_forms_generator.rb'
|
|
72
|
+
|
|
73
|
+
# Offense count: 2
|
|
74
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
75
|
+
# Configuration parameters: EnforcedStyleAlignWith.
|
|
76
|
+
# SupportedStylesAlignWith: keyword, variable, start_of_line
|
|
77
|
+
Layout/EndAlignment:
|
|
78
|
+
Exclude:
|
|
79
|
+
- 'lib/inline_forms_installer/installer_core.rb'
|
|
80
|
+
|
|
81
|
+
# Offense count: 1
|
|
82
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
83
|
+
# Configuration parameters: AllowDoxygenCommentStyle, AllowGemfileRubyComment, AllowRBSInlineAnnotation, AllowSteepAnnotation.
|
|
84
|
+
Layout/LeadingCommentSpace:
|
|
85
|
+
Exclude:
|
|
86
|
+
- 'lib/inline_forms_installer/installer_core.rb'
|
|
87
|
+
|
|
88
|
+
# Offense count: 4
|
|
89
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
90
|
+
Layout/SpaceAfterComma:
|
|
91
|
+
Exclude:
|
|
92
|
+
- 'lib/inline_forms_installer/installer_core.rb'
|
|
93
|
+
|
|
94
|
+
# Offense count: 2
|
|
95
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
96
|
+
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBrackets.
|
|
97
|
+
# SupportedStyles: space, no_space, compact
|
|
98
|
+
# SupportedStylesForEmptyBrackets: space, no_space
|
|
99
|
+
Layout/SpaceInsideArrayLiteralBrackets:
|
|
100
|
+
Exclude:
|
|
101
|
+
- 'lib/inline_forms_installer/create_log.rb'
|
|
102
|
+
|
|
103
|
+
# Offense count: 1
|
|
104
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
105
|
+
Lint/RedundantStringCoercion:
|
|
106
|
+
Exclude:
|
|
107
|
+
- 'lib/generators/inline_forms_generator.rb'
|
|
108
|
+
|
|
109
|
+
# Offense count: 8
|
|
110
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
111
|
+
# Configuration parameters: EnforcedStyle, EnforcedShorthandSyntax, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
|
|
112
|
+
# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
|
|
113
|
+
# SupportedShorthandSyntax: always, never, either, consistent, either_consistent
|
|
114
|
+
Style/HashSyntax:
|
|
115
|
+
Exclude:
|
|
116
|
+
- 'lib/generators/inline_forms_generator.rb'
|
|
117
|
+
- 'lib/inline_forms_installer/installer_core.rb'
|
|
118
|
+
|
|
119
|
+
# Offense count: 2
|
|
120
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
121
|
+
# Configuration parameters: PreferredDelimiters.
|
|
122
|
+
Style/PercentLiteralDelimiters:
|
|
123
|
+
Exclude:
|
|
124
|
+
- 'lib/inline_forms_installer/installer_core.rb'
|
|
125
|
+
|
|
126
|
+
# Offense count: 131
|
|
127
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
128
|
+
# Configuration parameters: EnforcedStyle, ConsistentQuotesInMultiline.
|
|
129
|
+
# SupportedStyles: single_quotes, double_quotes
|
|
130
|
+
Style/StringLiterals:
|
|
131
|
+
Exclude:
|
|
132
|
+
- 'lib/generators/inline_forms_generator.rb'
|
|
133
|
+
- 'lib/inline_forms_installer/installer_core.rb'
|
|
134
|
+
- 'test/inline_forms_addto_generator_test.rb'
|
|
135
|
+
- 'test/inline_forms_generator_test.rb'
|
|
136
|
+
|
|
137
|
+
# Offense count: 1
|
|
138
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
139
|
+
# Configuration parameters: EnforcedStyleForMultiline.
|
|
140
|
+
# SupportedStylesForMultiline: comma, consistent_comma, diff_comma, no_comma
|
|
141
|
+
Style/TrailingCommaInArrayLiteral:
|
|
142
|
+
Exclude:
|
|
143
|
+
- 'lib/inline_forms_installer/installer_core.rb'
|
|
144
|
+
|
|
145
|
+
# Offense count: 2
|
|
146
|
+
# This cop supports safe autocorrection (--autocorrect).
|
|
147
|
+
# Configuration parameters: EnforcedStyleForMultiline.
|
|
148
|
+
# SupportedStylesForMultiline: comma, consistent_comma, diff_comma, no_comma
|
|
149
|
+
Style/TrailingCommaInHashLiteral:
|
|
150
|
+
Exclude:
|
|
151
|
+
- 'lib/inline_forms_installer/installer_core.rb'
|
data/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,267 @@ All notable changes to this project are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [8.1.40] - 2026-07-10
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **Example app demonstrates nesting-in-nesting** (Apartment → Photo → Comment): the installer now generates a `Comment` model (`body:text_area photo:belongs_to`, not accessible through top-level HTML, like Photo) and gives Photo `comments:has_many comments:associated`, so opening a photo row inside an apartment's photos panel exposes a second-level comments panel with its own nested new/create/open/close flows. The seed migration puts two comments on each seeded apartment's first photo so the panel is visibly populated out of the box (and removes them in `down`).
|
|
12
|
+
- Example-app test `example_app_photo_comments_test.rb`: comments blocked as a standalone HTML resource, comments panel + new link inside the opened nested photo row, panel lists existing comments, nested new/create with the photo FK, comment row open/close. Also documents that open-after-create does not fire for nested creates (Comment has no `:associated` panel; the nested flow keeps the plain frame response).
|
|
13
|
+
|
|
14
|
+
### Lockstep
|
|
15
|
+
|
|
16
|
+
- validation_hints 8.1.40, inline_forms_installer 8.1.40 (no changes of their own).
|
|
17
|
+
|
|
18
|
+
## [8.1.39] - 2026-07-10
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- **"Open after create"** (Option A of `stuff/2026-07-10-nested-creation-options.md`): a successful *top-level* create of a model whose attribute list contains an `:associated` (has_many) panel now responds with Turbo Streams that refresh the list **and** open the freshly created record's row. The user lands directly where the nested panel — which only exists on a persisted record — is usable (e.g. create an Apartment, immediately add Photos), instead of hunting for the new row in the closed list. Nested creates, models without `:associated` panels, failed saves, and clients without a turbo-stream Accept header keep the existing list-frame HTML responses. If the new record sorts onto a different page of the list, the row-open stream finds no target and degrades silently to the old list-refresh behavior. (`InlineFormsController#open_created_row?` / `#render_created_row_open_streams`.)
|
|
23
|
+
- Engine test coverage: new dummy models `Machine`/`Part` (mirroring Apartment/Photo) plus `test/integration/open_after_create_test.rb` (stream response, html fallback, no-associated fallback, nested create unchanged, failed create unchanged). The dummy host app gained the minimal chrome the full `inline_forms` layout needs (current_user stub with `role?`, `application_name` helper, `_inline_forms_tabs` partial, empty `MODEL_TABS`, devise logout route stand-in), so create/new HTML flows are now testable in the fast engine suite at all.
|
|
24
|
+
- Example-app test: `example_app_apartment_top_level_new_test.rb` verifies the turbo-stream create response opens the new Apartment's row with the photos panel and its "new photo" link.
|
|
25
|
+
|
|
26
|
+
### Lockstep
|
|
27
|
+
|
|
28
|
+
- validation_hints 8.1.39, inline_forms_installer 8.1.39 (no changes of their own).
|
|
29
|
+
|
|
30
|
+
## [8.1.38] - 2026-07-07
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- **RuboCop todo shrunk from 590 to 196 offenses (54 → 40 files, all heredoc-bearing).** Every heredoc-free file was safe-autocorrected in reviewed batches (engine tests green after each): validators, gemspecs, Rakefile, dummy-app models, engine core (`lib/inline_forms.rb`, form-element registry, turbo tabs builder), controller/helpers, installer `creator.rb`/`user_model_config.rb`, and the archived-elements list — bracket spacing, hash syntax (`:a => 1` → `a: 1`), string quotes, comment spacing, `%q{}` → `%q()`. One manual fix: the `if/else` alignment in `turbo_tabs_builder.rb` that autocorrect mangled cosmetically (rewritten as an indented assignment).
|
|
35
|
+
- **Heredoc policy, made explicit:** files whose heredocs emit generated-app code (installer core, generators, form-element helpers, generator tests) are deliberately untouched — autocorrect near heredocs risks changing emitted code. `Layout/TrailingWhitespace` now runs with `AllowInHeredoc: true` (heredoc bodies are generated-file content); outside heredocs the tree is whitespace-clean. The remaining todo entries are per-file excludes on exactly those 40 heredoc files.
|
|
36
|
+
- Full example-app gate passed: MyApp generated from the 8.1.38 gems, 157 runs / 960 assertions / 0 failures.
|
|
37
|
+
|
|
38
|
+
### Lockstep
|
|
39
|
+
|
|
40
|
+
- validation_hints 8.1.38, inline_forms_installer 8.1.38 (no changes of their own).
|
|
41
|
+
|
|
42
|
+
## [8.1.37] - 2026-07-06
|
|
43
|
+
|
|
44
|
+
### Lockstep
|
|
45
|
+
|
|
46
|
+
- **validation_hints 8.1.37**: RuboCop todo eliminated — all 22 grandfathered offenses autocorrected (style-only: bracket spacing, magic-comment blank line, one trailing comma), `.rubocop_todo.yml` deleted. inline_forms and inline_forms_installer have no changes of their own. (inline_forms' own 590-offense todo remains; it shrinks incrementally as files get cleaned.)
|
|
47
|
+
|
|
48
|
+
## [8.1.36] - 2026-07-06
|
|
49
|
+
|
|
50
|
+
### Changed
|
|
51
|
+
|
|
52
|
+
- **Generated apps force SSL in production** (`config.assume_ssl = true` + `config.force_ssl = true`). `rails new` only enables these when Kamal is skipped; generated apps deploy through the shipped Capistrano/Unicorn setup behind an SSL-terminating proxy, and the injected Devise mailer config already assumed https. This was the **only finding of the first Brakeman baseline** (full-gate CI run 6 against the generated app: default check set 0 warnings, `--run-all-checks` exactly this one High/ForceSSL). Internal plain-HTTP apps can re-comment the two lines in their own `production.rb`.
|
|
53
|
+
- **full-gate CI: Brakeman's default check set is now enforcing** (baseline is clean); the pedantic `--run-all-checks` pass stays informational.
|
|
54
|
+
|
|
55
|
+
### Added
|
|
56
|
+
|
|
57
|
+
- Regression test `example_app_production_ssl_test.rb`: the generated `production.rb` must enable `assume_ssl`/`force_ssl` (guards the installer's gsub against Rails template drift).
|
|
58
|
+
|
|
59
|
+
### Lockstep
|
|
60
|
+
|
|
61
|
+
- validation_hints 8.1.36, inline_forms_installer 8.1.36 (no changes of their own).
|
|
62
|
+
|
|
63
|
+
## [8.1.35] - 2026-07-06
|
|
64
|
+
|
|
65
|
+
### Fixed
|
|
66
|
+
|
|
67
|
+
- **Example-app photo seeding no longer depends on a maintainer-only local folder.** The installer looked for gallery images in a *gitignored* `pics/` folder (falling back to the hardcoded `/home/code/inline_forms/pics`), which exists only on the maintainer's machine — any gem install elsewhere (first exposed by the Forgejo `full-gate` CI run) silently seeded **zero** photos and failed 12 gallery/pagination/revert tests. Nine CC0 placeholder PNGs (~4 KB each, solid pastel with an "Apt N / Room" label, generated with ImageMagick) now ship inside the installer under `lib/installer_templates/example_app_assets/seed_images/`, so every install gets the same gallery. `INLINE_FORMS_SEED_PICS` still overrides with a custom folder; the old `pics/` convention is retired.
|
|
68
|
+
- **`full-gate` CI workflow: git identity.** The installer's initial `git commit` in the generated app failed in the bare job container (`unable to auto-detect email address`); the workflow now sets a CI git identity first.
|
|
69
|
+
|
|
70
|
+
### Lockstep
|
|
71
|
+
|
|
72
|
+
- validation_hints 8.1.35, inline_forms_installer 8.1.35 (no changes of their own).
|
|
73
|
+
|
|
74
|
+
## [8.1.34] - 2026-07-06
|
|
75
|
+
|
|
76
|
+
### Added
|
|
77
|
+
|
|
78
|
+
- **CI moved to Forgejo Actions** (`.forgejo/workflows/`, plan: `stuff/2026-07-06-forgejo-ci-rubocop-brakeman.md`). `ci.yml` runs the engine suite, RuboCop, and bundler-audit per push on the dev02 runner (shared `papiamentu-ci:ruby-4.0.4-node20` image); `full-gate.yml` (manual + weekly) rebuilds all three gems, generates the example app — whose embedded 150+-test run is the release gate — and runs **Brakeman against the generated app** (report-only until the baseline is triaged). `.github/workflows/` was **deleted**: pushing to GitHub deliberately triggers nothing.
|
|
79
|
+
- **RuboCop** (Rails omakase preset, same recipe as Papiamentu) in the dev bundle, with all 590 pre-existing offenses grandfathered in `.rubocop_todo.yml` (delete entries as files get cleaned; new code is linted). Generated-app territory is excluded (`lib/installer_templates/`, `archived/`, …). `bundle exec rubocop`: 91 files, no offenses.
|
|
80
|
+
|
|
81
|
+
### Lockstep
|
|
82
|
+
|
|
83
|
+
- validation_hints 8.1.34 (same CI + RuboCop treatment: 12 files, 22 offenses grandfathered), inline_forms_installer 8.1.34.
|
|
84
|
+
|
|
85
|
+
## [8.1.33] - 2026-07-06
|
|
86
|
+
|
|
87
|
+
### Changed
|
|
88
|
+
|
|
89
|
+
- **README refresh** (docs only; the README ships inside the gem). Tabs sections now describe the vendored `InlineForms::Tabs` instead of the removed `tabs_on_rails` gem; the example-app model list includes `FormElementShowcase`; new sections document the native inputs (post-jQuery UI) and the per-user theme / custom colors / locale features with the host-app opt-in contract (`#inline_forms_theme`, `#inline_forms_color_overrides`).
|
|
90
|
+
|
|
91
|
+
### Lockstep
|
|
92
|
+
|
|
93
|
+
- validation_hints 8.1.33, inline_forms_installer 8.1.33 (no code changes in any gem).
|
|
94
|
+
|
|
95
|
+
## [8.1.32] - 2026-07-06
|
|
96
|
+
|
|
97
|
+
### Added
|
|
98
|
+
|
|
99
|
+
- **Theming Pattern 2: per-user color overrides** (completes the `stuff/user-preferences-and-theming.md` baseline of Pattern 1 + 2).
|
|
100
|
+
- New engine helper `inline_forms_user_color_overrides_style`, rendered in the layouts' `<head>`: when `current_user` responds to `#inline_forms_color_overrides` (a hash of `--if-color-` suffix => `"#rrggbb"`), it emits one scoped inline `<style>` (`body.theme-<name> { --if-color-primary: …; }`) so user colors win over the preset palette while the main CSS stays fully cached. Keys and values are strictly re-validated before interpolation; no style tag is emitted when there are no overrides.
|
|
101
|
+
- **New Tier 1 form element `:color_field`** — native `<input type="color">` editing a `"#rrggbb"` string column; show renders a color swatch + hex, update normalizes to lowercase and rejects anything that is not a 6-digit hex (stored as `nil`). Registered as `:string` in the generator registry.
|
|
102
|
+
- Installer: generated user models get `primary_color` / `accent_color` columns with format validations, `#inline_forms_color_overrides`, and two `color_field` rows on the user panel.
|
|
103
|
+
- Tests: dummy-harness color_field render/round-trip/junk-rejection; example-app tests for the scoped override style, the no-overrides case, and the user-panel rows.
|
|
104
|
+
|
|
105
|
+
### Lockstep
|
|
106
|
+
|
|
107
|
+
- validation_hints 8.1.32, inline_forms_installer 8.1.32.
|
|
108
|
+
|
|
109
|
+
## [8.1.31] - 2026-07-06
|
|
110
|
+
|
|
111
|
+
### Added
|
|
112
|
+
|
|
113
|
+
- **Per-user locale.** The user model has always carried a `locale` association (`[:locale, :dropdown]` on the user panel), but nothing read it. Generated apps' `ApplicationController` now wraps every request in `I18n.with_locale(current_user.locale.name)` (`around_action :switch_locale`): unknown/blank names fall back to `I18n.default_locale`, and `with_locale` restores afterwards so nothing leaks across requests. The old commented subdomain-based `set_locale` sample was replaced with an `I18n.with_locale`-based variant.
|
|
114
|
+
- Example-app regression tests (`example_app_user_locale_test.rb`): default `<html lang="en">`, `nl` switching, unknown-name fallback.
|
|
115
|
+
|
|
116
|
+
### Changed
|
|
117
|
+
|
|
118
|
+
- **Engine layout `<html lang>` follows `I18n.locale`** (was hardcoded `"en"` in `layouts/inline_forms.html.erb`).
|
|
119
|
+
|
|
120
|
+
### Fixed
|
|
121
|
+
|
|
122
|
+
- **`InlineFormsApplicationController` no longer clobbers `I18n.available_locales`.** It hard-assigned `[:en, :nl, :pp]` at class-load time — which in development happens *after* app initializers, silently stomping any `config.i18n.available_locales` the host configured. Hosts that relied on the implicit `[:en, :nl, :pp]` restriction should set it explicitly in `config/application.rb`.
|
|
123
|
+
|
|
124
|
+
### Lockstep
|
|
125
|
+
|
|
126
|
+
- validation_hints 8.1.31, inline_forms_installer 8.1.31.
|
|
127
|
+
|
|
128
|
+
## [8.1.30] - 2026-07-06
|
|
129
|
+
|
|
130
|
+
### Removed
|
|
131
|
+
|
|
132
|
+
- **App-specific form elements `:question_list` and `:dnsrecords` archived.** `question_list` hardcoded a host `Question` model with `subquestions` (survey app); `dnsrecords` called host `a_records` / `djbdns_line` APIs (DNS-admin app) and was never even in the generator registry (its helper methods were named `dnsrecords_*`). Neither had any example-app or test coverage, and neither can render outside its original host schema. Models still declaring the symbols raise `InlineForms::ArchivedFormElementError` at boot with restore instructions; source lives under `archived/form_elements/{question_list,dns_records}/` with per-element READMEs.
|
|
133
|
+
|
|
134
|
+
### Lockstep
|
|
135
|
+
|
|
136
|
+
- validation_hints 8.1.30, inline_forms_installer 8.1.30.
|
|
137
|
+
|
|
138
|
+
## [8.1.29] - 2026-07-06
|
|
139
|
+
|
|
140
|
+
### Added
|
|
141
|
+
|
|
142
|
+
- **Per-user preset themes (Pattern 1 of `stuff/user-preferences-and-theming.md`), built on the 8.1.24 CSS-variable bridge.**
|
|
143
|
+
- Engine `_theme.scss` ships three preset palettes — `theme-dark`, `theme-sepia`, `theme-high-contrast` — as `body.<class>` blocks overriding the `--if-color-*` custom properties (`theme-default` is the `:root` palette). Dark also patches input/textarea/trix backgrounds (Foundation compiles those from the light Sass palette); high-contrast underlines links.
|
|
144
|
+
- Engine layouts emit `<body class="theme-<name>">` via the new `inline_forms_body_theme_class` helper. The host opts in by having `current_user` respond to `#inline_forms_theme` (one of `default|dark|sepia|high-contrast`); anonymous users and non-opted hosts get `theme-default`, and the class name is validated against a safe pattern before interpolation.
|
|
145
|
+
- Installer: generated user models get an integer `theme` column (default 0), an `INLINE_FORMS_THEMES` map, `#inline_forms_theme`, and a `[:theme, :dropdown_with_values, …]` row on the user panel — so picking a theme is ordinary inline editing, stored on the user record (no localStorage; per the design doc's "Rejected" list).
|
|
146
|
+
- Example-app regression tests (`example_app_user_theme_test.rb`): default body class, dark/high-contrast switching, and the theme dropdown frame on the user panel.
|
|
147
|
+
|
|
148
|
+
### Lockstep
|
|
149
|
+
|
|
150
|
+
- validation_hints 8.1.29, inline_forms_installer 8.1.29.
|
|
151
|
+
|
|
152
|
+
## [8.1.28] - 2026-07-06
|
|
153
|
+
|
|
154
|
+
### Added
|
|
155
|
+
|
|
156
|
+
- **`multi_image_field` joins the FormElementShowcase** as `gallery` (deferred item from the original showcase plan): `mount_uploaders :gallery, ImageUploader` with the filename array JSON-serialized into a `text` column, a seeded one-image gallery on "Full demo", a `Gallery (multiple images)` label, and a new `example_app_showcase_gallery_test.rb` (array show render, `gallery[]` multiple file input, empty-state plus link).
|
|
157
|
+
- Dummy-harness render coverage for `simple_file_field` and `pdf_link` (`test/integration/legacy_elements_test.rb`) — first tests these two legacy elements have ever had.
|
|
158
|
+
|
|
159
|
+
### Fixed
|
|
160
|
+
|
|
161
|
+
- **`multi_image_field_show` crashed the moment the column actually held images.** A `mount_uploaders` (plural) reader returns an *array* of uploaders; the old code called `.url` on that array (`NoMethodError`). It now renders every image in the array (using the `palm` thumb version when defined) and still accepts a bare single uploader.
|
|
162
|
+
- **`multi_image_field_edit` lost all but the last chosen file.** The input was named `gallery` (no `[]`), so Rack kept only the final part of a multiple-file submission; it now submits `gallery[]` and the update assigns the full array (ignoring blank submissions instead of clearing).
|
|
163
|
+
- **`attribute_values`' error path raised the wrong error.** `raise t("fatal.no_values_defined_in", @Klass, attribute)` passed positional args to Rails' `translate` (key + kwargs API) and died with `ArgumentError (given 3, expected 1)` instead of the intended message. Now raises a plain descriptive RuntimeError naming the model and attribute.
|
|
164
|
+
|
|
165
|
+
### Lockstep
|
|
166
|
+
|
|
167
|
+
- validation_hints 8.1.28, inline_forms_installer 8.1.28.
|
|
168
|
+
|
|
169
|
+
## [8.1.27] - 2026-07-06
|
|
170
|
+
|
|
171
|
+
### Added
|
|
172
|
+
|
|
173
|
+
- **In-repo integration test harness (`test/dummy` + `test/integration/`).** A minimal host app (in-memory SQLite, will_paginate + paper_trail + turbo-rails from the dev bundle, no Devise/CanCanCan/Sprockets/ActionText) boots the engine so `InlineFormsController`, the Turbo-frame views, and the form-element helpers can be exercised in ~1.5 s via `bundle exec rake test` — previously every such regression needed the full release gate (build gems → `inline_forms create MyApp --example` → app test suite, minutes). 19 new tests cover list/search/show/edit/update, the 8.1.19 failed-save behavior, destroy + undo, 8.1.13 destroy-version targeting, 8.1.17 revert idempotency, the versions panel, and every 8.1.25/8.1.26 native input. The example-app gate remains the release check.
|
|
174
|
+
- **GitHub Actions workflow** (`.github/workflows/ci.yml`): engine tests + `bundler-audit` (checks out the `validation_hints` sibling for the path dependency).
|
|
175
|
+
|
|
176
|
+
### Fixed
|
|
177
|
+
|
|
178
|
+
Latent engine bugs on hosts without the full Devise+CanCanCan stack, found by the new harness (generated apps always bundle that stack, so they never hit these):
|
|
179
|
+
|
|
180
|
+
- `_show.html.erb` called `can?(:list_versions, …)` and `link_to_versions_list` called `can?` without the `cancan_disabled?` guard every other call site uses — `NoMethodError` when CanCanCan is absent.
|
|
181
|
+
- `destroy` and `revert` called `current_user.role?(:superadmin)` unguarded — `NoMethodError` on `nil.role?` for hosts without Devise/roles (or a signed-out replay). Both now use `destroy_permitted?`: superadmin-only when the host's user responds to `role?` (generated-app behavior unchanged), no extra gate otherwise (CanCan's `load_and_authorize_resource` still applies where enabled).
|
|
182
|
+
- `slider_with_values` show/edit crashed with `NoMethodError` on `nil[1]` when the stored value has no entry in the values hash (e.g. `1..5` scale with the column still `nil`/`0` — exactly the state a fresh row is in); it now falls back to the bare number.
|
|
183
|
+
- The engine's asset-precompile initializer assumed a Sprockets-style `config.assets`; it now skips hosts without one.
|
|
184
|
+
|
|
185
|
+
### Lockstep
|
|
186
|
+
|
|
187
|
+
- validation_hints 8.1.27, inline_forms_installer 8.1.27.
|
|
188
|
+
|
|
189
|
+
## [8.1.26] - 2026-07-06
|
|
190
|
+
|
|
191
|
+
### Changed
|
|
192
|
+
|
|
193
|
+
- **jQuery UI is fully removed** (follow-up to 8.1.25's native pickers; jQuery itself remains only because Foundation 6's JS requires it):
|
|
194
|
+
- **`dropdown_with_other`** now renders a native combobox — a text input backed by a `<datalist>` of the existing records — instead of a hidden `<select>` plus the jQuery UI autocomplete "custom.combobox" widget and its ~100-line inline `<script>` (the last inline script emitted by any form element). Typing a listed name picks that record; any other text becomes the free-form `<attribute>_other` value. The submitted field is unchanged (`_<model>[<attribute>_other]`) and `dropdown_with_other_update` is behaviorally identical (it never read the posted foreign key; it re-derives it by name lookup). Two stray `puts` debug lines removed from the update path.
|
|
195
|
+
- **`slider_with_values`** now renders a native `<input type="range">` on edit (labels ride in `data-slider-values`; an `<output>` shows the current label, kept in sync by `initSliderValueLabels` in `inline_forms.js`) and a non-interactive `<progress>` bar on show (a disabled range input would swallow the click-to-edit). No more jQuery UI slider or per-field scripts; the old hardcoded `max: 5` on edit now derives from the values hash.
|
|
196
|
+
- **Removed from the engine:** `//= require jquery.ui.all`, `//= require autocomplete-rails`, the vendored jQuery UI SCSS (`app/assets/stylesheets/jquery_ui/`, sunny theme) and theme images (`app/assets/images/jquery-ui/`, ~70 files), the `inline_forms.jquery_ui_stylesheet_path` initializer, and the dead `.custom-combobox` CSS.
|
|
197
|
+
- **Removed from generated Gemfiles:** `jquery-ui-rails`, `rails-jquery-autocomplete`.
|
|
198
|
+
|
|
199
|
+
### Lockstep
|
|
200
|
+
|
|
201
|
+
- validation_hints 8.1.26, inline_forms_installer 8.1.26.
|
|
202
|
+
|
|
203
|
+
## [8.1.25] - 2026-07-06
|
|
204
|
+
|
|
205
|
+
### Changed
|
|
206
|
+
|
|
207
|
+
- **Date/time/month pickers are native HTML inputs; jQuery UI datepicker and the jquery.timepicker plugin are gone.**
|
|
208
|
+
- `date_select` edit renders `<input type="date">` (was `text_field_tag class="datepicker"` + jQuery UI datepicker). The browser shows a locale-formatted picker with month/year dropdowns built in; the wire format is ISO 8601 (`YYYY-MM-DD`), which Active Record casts directly — sturdier than the old `dd-mm-yy` text parsing.
|
|
209
|
+
- `time_select` edit renders `<input type="time">` (was `class="timepicker"` + jquery.timepicker); submits 24h `HH:MM`. Value now pre-fills as `09:15` instead of `" 9:15am"`; the show format (`%l:%M%P`) is unchanged.
|
|
210
|
+
- `month_year_picker` edit renders `<input type="month">` (was the jQuery UI `MM yy` datepicker hack with the onClose month/year scrape); submits `YYYY-MM`. `month_year_picker_update` parses `YYYY-MM` via `Date.strptime` (Ruby's `Date.parse` raises on it) and still accepts the legacy `"September 2026"` display format as a fallback.
|
|
211
|
+
- Edit-input CSS classes renamed to match the form element names (`date_select`, `time_select`, `month_year_picker`); the old `datepicker`/`timepicker`/`datepicker-month-year` hooks are gone so host-app JS that still binds jQuery pickers to them will not double-bind against the native inputs.
|
|
212
|
+
- `initInlineFormsWidgets` now wires only validation-hint tooltips; `$.datepicker.setDefaults` and all picker init removed from `inline_forms.js`. `jquery.ui.all` stays in the bundle solely for the autocomplete widget (`dropdown_with_other`) and `slider_with_values`.
|
|
213
|
+
- Installer: **`jquery-timepicker-rails` removed** from generated Gemfiles.
|
|
214
|
+
|
|
215
|
+
### Added
|
|
216
|
+
|
|
217
|
+
- Example-app regression tests: native `type="date"`/`type="time"`/`type="month"` edits with ISO value prefill, plus round-trips for a native `HH:MM` time submission, a native `YYYY-MM` month submission, the legacy `"November 2027"` month fallback, and an ISO date submission.
|
|
218
|
+
|
|
219
|
+
### Lockstep
|
|
220
|
+
|
|
221
|
+
- validation_hints 8.1.25, inline_forms_installer 8.1.25.
|
|
222
|
+
|
|
223
|
+
## [8.1.24] - 2026-07-06
|
|
224
|
+
|
|
225
|
+
### Added
|
|
226
|
+
|
|
227
|
+
- **Theme bridge: the admin-chrome palette is now exposed as CSS custom properties** (new `_theme.scss`, emitted into both `inline_forms.css` and `devise.css`). Every hardcoded chrome color in `inline_forms.scss` / `devise.scss` (dark-red `#A3381E`, brick `#B94C32`, gold `#E1C150`, header band `rgb(239,202,75)`, zebra rows `#FBE38E`/`#FBEEC1`, input backgrounds, flash/error/success colors) moved to `var(--if-color-*)` with identical build-time values — the rendered UI is unchanged until a host app overrides a variable (e.g. `:root { --if-color-primary: #2563eb; }` or a `body.theme-dark` block). This is the prerequisite bridging layer for per-user theming (`stuff/user-preferences-and-theming.md`); Foundation's own components still compile from Sass settings.
|
|
228
|
+
- Body background/text and anchor color are bridged too (`--if-color-body-bg`, `--if-color-body-text`, `--if-color-anchor`), sourced from Foundation's `$body-background` / `$body-font-color` / `$anchor-color` at build time.
|
|
229
|
+
|
|
230
|
+
### Changed
|
|
231
|
+
|
|
232
|
+
- **Sass module-system status made explicit.** `foundation_icons` now loads via `@use`; `lighten()` calls replaced with `color.adjust` (kills the Dart Sass color-functions deprecation). The remaining `@import`s cannot convert while the stack sits on foundation-rails 6.9, whose Sass is `@import`-only and feeds globals (`$body-background`, `rem-calc`, …) into our overrides — documented in `inline_forms.scss` and `stuff/improvement-plan.md` §1. Remaining deprecation warnings (import/global-builtin/if-function) originate inside foundation-rails itself.
|
|
233
|
+
|
|
234
|
+
### Lockstep
|
|
235
|
+
|
|
236
|
+
- validation_hints 8.1.24, inline_forms_installer 8.1.24 (no changes of their own).
|
|
237
|
+
|
|
238
|
+
## [8.1.23] - 2026-07-06
|
|
239
|
+
|
|
240
|
+
### Changed
|
|
241
|
+
|
|
242
|
+
- **`tabs_on_rails` is no longer a dependency; tabs support is vendored.** The gem (last released 2017, unmaintained) provided four things inline_forms used: the controller `set_tab` DSL, the `current_tab` / `current_tab?` helpers, the `tabs_tag` view helper, and the `TabsBuilder` base class that `InlineForms::TurboTabsBuilder` subclasses. All four are now ported into the engine as `InlineForms::Tabs` (`lib/inline_forms/tabs.rb`, API-compatible; MIT attribution retained) and included into `ActionController::Base` by an engine initializer. It was also an *undeclared* dependency: the engine `require`d `tabs_on_rails` at load time but never listed it in the gemspec — only the installer-written app Gemfile made that work. The installer no longer writes `gem 'tabs_on_rails'`; apps generated before 8.1.23 keep working because the initializer skips the vendored controller include when the gem's own `TabsOnRails::ActionController` is present.
|
|
243
|
+
|
|
244
|
+
### Added
|
|
245
|
+
|
|
246
|
+
- **Unit tests** (`test/tabs_test.rb`) for the vendored default builder (active `current` class, `<span>` for the active tab), custom `active_class`, the `TurboTabsBuilder` contract (threads `link_options:`/`data-turbo-frame` onto the anchor, `aria-current`/`aria-selected` state, href-less active tab), and the `set_tab`/`current_tab?` namespace semantics.
|
|
247
|
+
|
|
248
|
+
### Lockstep
|
|
249
|
+
|
|
250
|
+
- validation_hints 8.1.23, inline_forms_installer 8.1.23.
|
|
251
|
+
|
|
252
|
+
## [8.1.22] - 2026-07-06
|
|
253
|
+
|
|
254
|
+
### Changed
|
|
255
|
+
|
|
256
|
+
- **Trix is vendored; unpkg CDN tags removed.** All layouts loaded Trix from `https://unpkg.com/trix@1.3.1/dist/trix.{css,js}` — a 2020-era version and a hard runtime dependency on a third-party CDN. Trix **2.1.19** now ships in the engine (`vendor/assets/javascripts/trix.min.js`, `vendor/assets/stylesheets/trix.css`) and is served through Sprockets (`javascript_include_tag "trix.min"` / `stylesheet_link_tag "trix"`). The Trix 1-era manual re-init in `initInlineFormsWidgets` (`new Trix.Editor(el)`) was dropped: Trix 2's `<trix-editor>` is a custom element the browser upgrades automatically after Turbo frame swaps.
|
|
257
|
+
- **Open Sans is self-hosted; no more `http://fonts.googleapis.com`.** `inline_forms.scss` and `devise.scss` imported Open Sans over plain HTTP at runtime. The latin 400/400-italic woff2 files (v44) now live in `app/assets/fonts/`, declared in a new Sprockets-served `inline_forms_fonts.css.erb` (ERB so `asset_path` emits digested URLs) linked from all three layouts.
|
|
258
|
+
- **Installer Gemfile: last floating gems pinned** — `cancancan '~> 3.6'`, `will_paginate '~> 4.0'` (the versions generated apps already resolve).
|
|
259
|
+
|
|
260
|
+
### Fixed
|
|
261
|
+
|
|
262
|
+
- **Foundation Icons `@font-face` 404.** The `@font-face` lived in the Dart Sass-built `inline_forms.css`, which is served from `/assets/inline_forms/…`; its relative `url("foundation-icons.woff")` therefore resolved to `/assets/inline_forms/foundation-icons.woff` — a 404 (the fonts' logical paths are flat: `/assets/foundation-icons.woff`). Icon glyphs (`fi-*`) silently fell back to the text font. The declaration moved into `inline_forms_fonts.css.erb` with proper `asset_path` URLs; the fonts (and Open Sans) are added to the precompile list.
|
|
263
|
+
|
|
264
|
+
### Lockstep
|
|
265
|
+
|
|
266
|
+
- validation_hints 8.1.22, inline_forms_installer 8.1.22 (no changes of their own).
|
|
267
|
+
|
|
7
268
|
## [8.1.21] - 2026-06-03
|
|
8
269
|
|
|
9
270
|
### Removed
|
data/Gemfile
CHANGED
|
@@ -5,5 +5,17 @@ gemspec name: "inline_forms"
|
|
|
5
5
|
# Local sibling until validation_hints 8.0.0 is on RubyGems (maintainer dev only).
|
|
6
6
|
gem "validation_hints", path: "../validation_hints"
|
|
7
7
|
|
|
8
|
-
#
|
|
9
|
-
|
|
8
|
+
# test/dummy host-app stand-ins: the engine expects the host to supply these
|
|
9
|
+
# (generated apps get them from the installer Gemfile). Used only by the
|
|
10
|
+
# integration tests under test/integration/.
|
|
11
|
+
group :test do
|
|
12
|
+
gem "sqlite3", ">= 2.1"
|
|
13
|
+
gem "will_paginate", "~> 4.0"
|
|
14
|
+
gem "paper_trail", "~> 17.0"
|
|
15
|
+
gem "turbo-rails"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
group :development, :test do
|
|
19
|
+
# Rails omakase style; offenses grandfathered in .rubocop_todo.yml.
|
|
20
|
+
gem "rubocop-rails-omakase", require: false
|
|
21
|
+
end
|