inline_forms 7.9.6 → 7.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +68 -0
- data/Rakefile +18 -1
- data/app/assets/javascripts/inline_forms/inline_forms.js +53 -34
- data/app/helpers/form_elements/date.rb +0 -1
- data/app/helpers/form_elements/month_year_picker.rb +1 -15
- data/app/helpers/form_elements/time.rb +0 -1
- data/docs/jquery-widgets.md +25 -0
- data/docs/prompt/test-the-example-app.md +3 -3
- data/docs/turbo-stream-audit.md +16 -0
- data/docs/ujs-to-turbo.md +15 -0
- data/inline_forms.gemspec +6 -21
- data/lib/inline_forms/gem_files.rb +39 -0
- data/lib/inline_forms/version.rb +1 -1
- metadata +18 -81
- data/bin/inline_forms +0 -141
- data/bin/inline_forms_app_template.rb +0 -22
- data/bin/inline_forms_installer_core.rb +0 -874
- data/lib/generators/templates/capistrano/Capfile +0 -39
- data/lib/generators/templates/capistrano/deploy.rb +0 -59
- data/lib/generators/templates/capistrano/production.rb +0 -7
- data/lib/generators/templates/unicorn/production.rb +0 -39
- data/lib/installer_templates/dartsass/devise_main.scss +0 -2
- data/lib/installer_templates/dartsass/inline_forms_dartsass_builds.rb +0 -14
- data/lib/installer_templates/dartsass/inline_forms_main.scss +0 -2
- data/lib/installer_templates/example_app_tests/test/example_app/example_integration_test_case.rb +0 -36
- data/lib/installer_templates/example_app_tests/test/integration/example_app_apartment_field_turbo_test.rb +0 -73
- data/lib/installer_templates/example_app_tests/test/integration/example_app_apartment_name_list_test.rb +0 -73
- data/lib/installer_templates/example_app_tests/test/integration/example_app_apartment_name_required_test.rb +0 -21
- data/lib/installer_templates/example_app_tests/test/integration/example_app_apartment_photos_pagination_test.rb +0 -440
- data/lib/installer_templates/example_app_tests/test/integration/example_app_apartment_row_turbo_test.rb +0 -103
- data/lib/installer_templates/example_app_tests/test/integration/example_app_apartment_top_level_new_test.rb +0 -70
- data/lib/installer_templates/example_app_tests/test/integration/example_app_apartment_top_level_pagination_test.rb +0 -40
- data/lib/installer_templates/example_app_tests/test/integration/example_app_apartment_versions_turbo_test.rb +0 -120
- data/lib/installer_templates/example_app_tests/test/integration/example_app_guest_access_test.rb +0 -21
- data/lib/installer_templates/example_app_tests/test/integration/example_app_photo_revert_test.rb +0 -94
- data/lib/installer_templates/example_app_tests/test/integration/example_app_photos_test.rb +0 -22
- data/lib/installer_templates/example_app_tests/test/integration/example_app_routing_test.rb +0 -15
- data/lib/installer_templates/example_app_tests/test/integration/example_app_turbo_layout_test.rb +0 -25
- data/lib/installer_templates/example_app_tests/test/integration/example_app_validation_hints_test.rb +0 -40
- data/lib/installer_templates/example_app_tests/test/models/example_app_apartment_name_validation_test.rb +0 -16
- data/lib/installer_templates/example_app_tests/test/models/example_app_apartment_photo_test.rb +0 -26
- data/lib/installer_templates/example_app_tests/test/models/example_app_paper_trail_changeset_test.rb +0 -78
- data/lib/installer_templates/example_app_tests/test/models/example_app_plain_text_rich_text_edge_cases_test.rb +0 -46
- data/lib/installer_templates/example_app_views/apartments/name_list.html.erb +0 -26
- data/lib/installer_templates/example_app_views/inline_forms/_header.html.erb +0 -45
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 62c8598afcb5052d9869391009bbf364b8711ed1a9c2f15c3c3ff8d8b6c25e17
|
|
4
|
+
data.tar.gz: 2eced24a18c335754a0199525a49a724af9bc000c0003f0230c7558af096139a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6436dd214a36bf76c78a38d69aed44d993f50f4c66610baed8372d2e43b9f0ec7700e6203c26a4530bc9c898fb9e4f0879eb5584a9f3c58ca24f9c654155553d
|
|
7
|
+
data.tar.gz: be9f7b3f9df5f3ff938a2ed6d65cab6f23668d067d01e30c10afd780b2dd8b3f9a1e1b1ed87695f431b2138fb82993989c9746d7f11d9a8c26e36364606c50b8
|
data/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,74 @@ All notable changes to this project are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [7.11.0] - 2026-05-19
|
|
8
|
+
|
|
9
|
+
### Changed
|
|
10
|
+
|
|
11
|
+
- **Split installer into `inline_forms_installer` gem.** The Rails engine (`inline_forms`) no longer ships the `inline_forms create` CLI, Thor/RVM dependencies, or `lib/installer_templates/`. Install both gems (or `gem install inline_forms_installer`, which registers the `inline_forms` executable). Capistrano/Unicorn deploy templates moved from `lib/generators/templates/` to `lib/installer_templates/`.
|
|
12
|
+
- **Generated app Gemfile:** `gem 'inline_forms', '~> <version>'` instead of `path:` (set `INLINE_FORMS_GEMFILE_PATH` for maintainer local-path overrides).
|
|
13
|
+
|
|
14
|
+
### Verified
|
|
15
|
+
|
|
16
|
+
- **`gem build inline_forms.gemspec && gem build inline_forms_installer.gemspec`** → install both → **`inline_forms create MyApp -d sqlite --example`** → **`bundle exec rails test`** — **77 runs, 427 assertions, 0 failures**.
|
|
17
|
+
|
|
18
|
+
## [7.10.2] - 2026-05-18
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- **Example app:** `Apartment.opening_date` (`date` / jQuery UI datepicker) — demonstrates centralized `initInlineFormsWidgets` on show, inline edit, and new form.
|
|
23
|
+
- **Regression test:** `example_app_apartment_opening_date_test.rb`.
|
|
24
|
+
|
|
25
|
+
### Verified
|
|
26
|
+
|
|
27
|
+
- **`inline_forms create MyApp -d sqlite --example`** → **`bundle exec rails test`** — **77 runs, 427 assertions, 0 failures**.
|
|
28
|
+
- **Browser:** new Apartment form → `Opening date` input has `class="datepicker hasDatepicker"` (jQuery UI initialized); submit persists `15-03-2019`; show panel renders it; inline edit re-binds datepicker on the same field.
|
|
29
|
+
|
|
30
|
+
## [7.10.1] - 2026-05-18
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
|
|
34
|
+
- **`inline_forms create`:** installer installs `validation_hints` from `~/code/validation_hints/*.gem` when `~> 6.3` is not on RubyGems yet (before first `bundle install`).
|
|
35
|
+
|
|
36
|
+
## [7.10.0] - 2026-05-18
|
|
37
|
+
|
|
38
|
+
### Changed
|
|
39
|
+
|
|
40
|
+
- **Rails 7.1:** gemspec and `--example` installer Gemfile pin `rails ~> 7.1.5`, `config.load_defaults 7.1`, migrations `ActiveRecord::Migration[7.1]`.
|
|
41
|
+
- **`validation_hints`:** requires 6.3.0+ (Rails 7.1 activerecord).
|
|
42
|
+
|
|
43
|
+
### Verified
|
|
44
|
+
|
|
45
|
+
- **`bundle exec rails test`** in `--example` MyApp on Rails 7.1 — **74 runs, 412 assertions, 0 failures**.
|
|
46
|
+
- **curl:** `GET /apartments/new?update=apartments_list` with session + Turbo-Frame — validation hint source present.
|
|
47
|
+
- **Browser (headless Chromium):** login → new Apartment → hover Name — Tippy tooltip visible with **"can't be blank"**.
|
|
48
|
+
|
|
49
|
+
## [7.9.8] - 2026-05-18
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
|
|
53
|
+
- **jQuery widget init (Phase 4):** `initInlineFormsWidgets` centralizes datepicker, month/year picker, timepicker, Trix, and validation-hint Tippy re-bind on DOM ready, `turbo:load`, and `turbo:frame-load`.
|
|
54
|
+
- **`date` / `time` / `month_year_picker` form elements:** removed inline `<script>` tags; fields use class hooks (`datepicker`, `datepicker-month-year`, `timepicker`).
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
|
|
58
|
+
- **`docs/jquery-widgets.md`** — migration status and remaining jQuery dependencies.
|
|
59
|
+
|
|
60
|
+
### Verified
|
|
61
|
+
|
|
62
|
+
- **`bundle exec rails test`** in `--example` MyApp — **74 runs, 408 assertions, 0 failures**.
|
|
63
|
+
- **curl + browser:** validation hint tooltips on new Apartment form (7.9.8).
|
|
64
|
+
|
|
65
|
+
## [7.9.7] - 2026-05-18
|
|
66
|
+
|
|
67
|
+
### Added
|
|
68
|
+
|
|
69
|
+
- **`docs/turbo-stream-audit.md`** — documents current `format.turbo_stream` usage and optional future candidates (Phase 3 hygiene).
|
|
70
|
+
|
|
71
|
+
### Changed
|
|
72
|
+
|
|
73
|
+
- **Repo hygiene:** built `*.gem` artifacts remain gitignored; remove local copies after `gem build`.
|
|
74
|
+
|
|
7
75
|
## [7.9.6] - 2026-05-17
|
|
8
76
|
|
|
9
77
|
### Fixed
|
data/Rakefile
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
require "bundler"
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
Bundler::GemHelper.install_tasks name: "inline_forms"
|
|
4
|
+
|
|
5
|
+
namespace :installer do
|
|
6
|
+
Bundler::GemHelper.install_tasks name: "inline_forms_installer"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
desc "Build both inline_forms and inline_forms_installer into pkg/"
|
|
10
|
+
task "build:all" => ["build", "installer:build"]
|
|
11
|
+
|
|
12
|
+
desc "Release both gems: tag once, push inline_forms and inline_forms_installer to RubyGems"
|
|
13
|
+
task "release:all" => [
|
|
14
|
+
"build:all",
|
|
15
|
+
"release:guard_clean",
|
|
16
|
+
"release:source_control_push",
|
|
17
|
+
"release:rubygem_push",
|
|
18
|
+
"installer:release:rubygem_push"
|
|
19
|
+
]
|
|
3
20
|
|
|
4
21
|
require "rake/testtask"
|
|
5
22
|
|
|
@@ -14,14 +14,61 @@
|
|
|
14
14
|
// `<turbo-frame>` + HTML responses; jquery-ujs / remotipart were removed in 7.8.0.
|
|
15
15
|
|
|
16
16
|
$(function(){
|
|
17
|
+
$.datepicker.setDefaults({
|
|
18
|
+
changeMonth : true,
|
|
19
|
+
changeYear : true,
|
|
20
|
+
yearRange: '-100:+100',
|
|
21
|
+
dateFormat: 'dd-mm-yy'
|
|
22
|
+
});
|
|
17
23
|
$(document).foundation();
|
|
18
|
-
|
|
24
|
+
initInlineFormsWidgets(document);
|
|
19
25
|
});
|
|
20
26
|
|
|
21
27
|
document.addEventListener("turbo:load", function() {
|
|
22
|
-
|
|
28
|
+
initInlineFormsWidgets(document);
|
|
23
29
|
});
|
|
24
30
|
|
|
31
|
+
// jQuery UI date/time pickers: one init path for first paint and turbo:frame-load
|
|
32
|
+
// (form element helpers emit class hooks only — no inline <script> tags).
|
|
33
|
+
function initInlineFormsWidgets(root) {
|
|
34
|
+
var $root = root instanceof jQuery ? root : $(root);
|
|
35
|
+
|
|
36
|
+
initValidationHintTooltips(root);
|
|
37
|
+
|
|
38
|
+
$root.find("input.datepicker-month-year").each(function() {
|
|
39
|
+
var $el = $(this);
|
|
40
|
+
if ($el.hasClass("hasDatepicker")) { return; }
|
|
41
|
+
$el.datepicker({
|
|
42
|
+
changeMonth: true,
|
|
43
|
+
changeYear: true,
|
|
44
|
+
showButtonPanel: true,
|
|
45
|
+
dateFormat: "MM yy",
|
|
46
|
+
onClose: function() {
|
|
47
|
+
var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val();
|
|
48
|
+
var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val();
|
|
49
|
+
$(this).datepicker("setDate", new Date(year, month, 1));
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
$root.find("input.datepicker").not(".datepicker-month-year").each(function() {
|
|
55
|
+
var $el = $(this);
|
|
56
|
+
if (!$el.hasClass("hasDatepicker")) { $el.datepicker(); }
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
$root.find("input.timepicker").each(function() {
|
|
60
|
+
var $el = $(this);
|
|
61
|
+
if (!$el.data("timepicker")) { $el.timepicker(); }
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
$root.find("trix-editor").each(function() {
|
|
65
|
+
if (window.Trix && this.editor) { return; }
|
|
66
|
+
if (window.Trix && typeof Trix.Editor === "function") {
|
|
67
|
+
new Trix.Editor(this);
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
25
72
|
// Validation hint tooltips: HTML lists from hidden source divs, rendered via Tippy.js
|
|
26
73
|
// (Foundation Tooltip positioning breaks inside #outer_container position:absolute).
|
|
27
74
|
function initValidationHintTooltips(root) {
|
|
@@ -55,44 +102,16 @@ function initValidationHintTooltips(root) {
|
|
|
55
102
|
});
|
|
56
103
|
}
|
|
57
104
|
|
|
58
|
-
//
|
|
105
|
+
// get rid of translation_missing tooltips
|
|
59
106
|
$(document).ready(function() {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
changeYear : true,
|
|
63
|
-
yearRange: '-100:+100',
|
|
64
|
-
dateFormat: 'dd-mm-yy'
|
|
107
|
+
$(this).on('mouseover', '.translation_missing', function() {
|
|
108
|
+
$(this).attr('title', '');
|
|
65
109
|
});
|
|
66
110
|
});
|
|
67
111
|
|
|
68
|
-
// get rid of translation_missing tooltips
|
|
69
|
-
$(document).ready(function() {
|
|
70
|
-
$(this).on('mouseover', '.translation_missing', function() {
|
|
71
|
-
$(this).attr('title', '');
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
|
|
75
112
|
// Re-bind jQuery UI widgets and Trix after Turbo Frame swaps (Step 3).
|
|
76
113
|
document.addEventListener("turbo:frame-load", function(event) {
|
|
77
114
|
var root = event.target;
|
|
78
115
|
if (!root || !root.querySelectorAll) { return; }
|
|
79
|
-
|
|
80
|
-
initValidationHintTooltips(root);
|
|
81
|
-
|
|
82
|
-
$(root).find("input.datepicker").each(function() {
|
|
83
|
-
var $el = $(this);
|
|
84
|
-
if (!$el.hasClass("hasDatepicker")) { $el.datepicker(); }
|
|
85
|
-
});
|
|
86
|
-
|
|
87
|
-
$(root).find("input.timepicker").each(function() {
|
|
88
|
-
var $el = $(this);
|
|
89
|
-
if (!$el.data("timepicker")) { $el.timepicker(); }
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
$(root).find("trix-editor").each(function() {
|
|
93
|
-
if (window.Trix && this.editor) { return; }
|
|
94
|
-
if (window.Trix && typeof Trix.Editor === "function") {
|
|
95
|
-
new Trix.Editor(this);
|
|
96
|
-
}
|
|
97
|
-
});
|
|
116
|
+
initInlineFormsWidgets(root);
|
|
98
117
|
});
|
|
@@ -9,7 +9,6 @@ end
|
|
|
9
9
|
def date_select_edit(object, attribute)
|
|
10
10
|
css_id = 'datepicker_' + object.class.to_s.underscore + '_' + object.id.to_s + '_' + attribute.to_s
|
|
11
11
|
out = text_field_tag attribute, ( object.send(attribute).nil? ? "" : object.send(attribute).to_date.strftime("%d-%m-%Y") ), :id => css_id, :class =>'datepicker'
|
|
12
|
-
out << "<script>$('##{css_id}').datepicker();</script>".html_safe
|
|
13
12
|
end
|
|
14
13
|
|
|
15
14
|
def date_select_update(object, attribute)
|
|
@@ -8,21 +8,7 @@ end
|
|
|
8
8
|
|
|
9
9
|
def month_year_picker_edit(object, attribute)
|
|
10
10
|
css_id = 'datepicker_' + object.class.to_s.underscore + '_' + object.id.to_s + '_' + attribute.to_s
|
|
11
|
-
out = text_field_tag attribute, ( object.send(attribute).nil? ? "" : object.send(attribute).strftime("%B %Y") ), :id => css_id, :class =>'datepicker'
|
|
12
|
-
#out << (hidden_field_tag "hidden_" + attribute.to_s, ( object.send(attribute).nil? ? "" : object.send(attribute).strftime("%d-%m-%Y") ), :id => "hiddden_" + css_id)
|
|
13
|
-
# http://jsfiddle.net/bopperben/DBpJe/
|
|
14
|
-
out << "<script>$('##{css_id}').datepicker( {
|
|
15
|
-
changeMonth: true,
|
|
16
|
-
changeYear: true,
|
|
17
|
-
showButtonPanel: true,
|
|
18
|
-
dateFormat: 'MM yy',
|
|
19
|
-
regional: '',
|
|
20
|
-
onClose: function(dateText, inst) {
|
|
21
|
-
var month = $('#ui-datepicker-div .ui-datepicker-month :selected').val();
|
|
22
|
-
var year = $('#ui-datepicker-div .ui-datepicker-year :selected').val();
|
|
23
|
-
$(this).datepicker('setDate', new Date(year, month, 1));
|
|
24
|
-
}
|
|
25
|
-
});</script>".html_safe
|
|
11
|
+
out = text_field_tag attribute, ( object.send(attribute).nil? ? "" : object.send(attribute).strftime("%B %Y") ), :id => css_id, :class =>'datepicker datepicker-month-year'
|
|
26
12
|
end
|
|
27
13
|
|
|
28
14
|
def month_year_picker_update(object, attribute)
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
def time_select_edit(object, attribute)
|
|
10
10
|
css_id = 'timepicker_' + object.class.to_s.underscore + '_' + object.id.to_s + '_' + attribute.to_s
|
|
11
11
|
out = text_field_tag attribute, ( object.send(attribute).nil? ? "" : object.send(attribute).to_datetime.strftime("%l:%M%P") ), :id => css_id, :class =>'timepicker'
|
|
12
|
-
out << "<script>$('##{css_id}').timepicker();</script>".html_safe
|
|
13
12
|
end
|
|
14
13
|
|
|
15
14
|
def time_select_update(object, attribute)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# jQuery widget migration (Phase 4)
|
|
2
|
+
|
|
3
|
+
UJS removal (7.8.0) is complete. These jQuery-based widgets remain in the Sprockets bundle:
|
|
4
|
+
|
|
5
|
+
| Widget | Asset | Status |
|
|
6
|
+
|--------|-------|--------|
|
|
7
|
+
| Datepicker | `jquery.ui.all` | **Centralized** — `initInlineFormsWidgets` in `inline_forms.js`; helpers use `class="datepicker"` only |
|
|
8
|
+
| Month/year picker | jQuery UI datepicker | **Centralized** — `class="datepicker datepicker-month-year"` |
|
|
9
|
+
| Timepicker | `jquery.timepicker.js` | **Centralized** — `class="timepicker"` |
|
|
10
|
+
| Autocomplete | `autocomplete-rails` + inline scripts in `dropdown_with_other` | Still inline / jQuery UI |
|
|
11
|
+
| Foundation | `foundation` jQuery plugin | Required for layout chrome |
|
|
12
|
+
|
|
13
|
+
## Central init (7.9.8+)
|
|
14
|
+
|
|
15
|
+
`initInlineFormsWidgets(root)` runs on:
|
|
16
|
+
|
|
17
|
+
- DOM ready (after `$.datepicker.setDefaults`)
|
|
18
|
+
- `turbo:load`
|
|
19
|
+
- `turbo:frame-load`
|
|
20
|
+
|
|
21
|
+
Form element `_edit` helpers must **not** emit per-field `<script>` tags; class hooks only.
|
|
22
|
+
|
|
23
|
+
## Future removal (not started)
|
|
24
|
+
|
|
25
|
+
Replace with Stimulus or vanilla + `turbo:frame-load` one widget at a time; keep example-app tests green after each.
|
|
@@ -9,13 +9,13 @@ Steps:
|
|
|
9
9
|
1) In /home/code/inline_forms:
|
|
10
10
|
- Ensure latest code is used.
|
|
11
11
|
- Run: rvm use .
|
|
12
|
-
- Build
|
|
13
|
-
- Confirm the built file
|
|
12
|
+
- Build gems: gem build inline_forms.gemspec && gem build inline_forms_installer.gemspec
|
|
13
|
+
- Confirm the built file names/versions (inline_forms-<version>.gem, inline_forms_installer-<version>.gem).
|
|
14
14
|
|
|
15
15
|
2) In /home/code/testInline:
|
|
16
16
|
- Remove old app if present: /home/code/testInline/MyApp
|
|
17
17
|
- Run: rvm use .
|
|
18
|
-
- Install the freshly built
|
|
18
|
+
- Install the freshly built gems from /home/code/inline_forms/inline_forms-<version>.gem and inline_forms_installer-<version>.gem
|
|
19
19
|
|
|
20
20
|
3) Still in /home/code/testInline:
|
|
21
21
|
- Generate fresh example app:
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Turbo Stream audit (optional)
|
|
2
|
+
|
|
3
|
+
Stock inline_forms flows use **`format.html`** inside matching `<turbo-frame>` ids. **`format.turbo_stream`** is used where a single response must update **multiple** frames (e.g. revert from the versions panel).
|
|
4
|
+
|
|
5
|
+
## Current turbo_stream usage
|
|
6
|
+
|
|
7
|
+
| Action | Response | Notes |
|
|
8
|
+
|--------|----------|-------|
|
|
9
|
+
| `revert` | `turbo_stream.replace` row + versions frames | Required when POST originates inside `*_versions` frame |
|
|
10
|
+
|
|
11
|
+
## Candidates for future streams (not migrated)
|
|
12
|
+
|
|
13
|
+
- Row destroy fade-out animation (today: HTML `row_destroyed` replaces frame)
|
|
14
|
+
- Multi-field batch updates (no stock flow today)
|
|
15
|
+
|
|
16
|
+
No change required for the example app; integration tests assert HTML frame contracts.
|
data/docs/ujs-to-turbo.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# UJS → Turbo migration checklist
|
|
2
2
|
|
|
3
|
+
> **Decommissioned.** This checklist is frozen as of 2026-05-17.
|
|
4
|
+
> **Use the combined roadmap instead:** [`stuff/roadmap.md`](../stuff/roadmap.md)
|
|
5
|
+
> Canonical copy also at: `validation_hints/stuff/roadmap.md`
|
|
6
|
+
|
|
7
|
+
**Steps 1–5 are complete** (inline_forms **7.9.6**). Remaining work (jQuery widget migration, optional `turbo_stream` audit, validation hint copy, Rails security bump) is tracked in **`roadmap.md`**.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Historical reference (archived)
|
|
12
|
+
|
|
13
|
+
<details>
|
|
14
|
+
<summary>Original UJS → Turbo checklist (click to expand)</summary>
|
|
15
|
+
|
|
3
16
|
Track progress toward full Turbo integration and removal of jQuery UJS from inline_forms generated apps.
|
|
4
17
|
|
|
5
18
|
**Current gem version:** see `lib/inline_forms/version.rb` (**Step 5** — Turbo Drive on, jquery-ujs / remotipart removed in **7.8.0**)
|
|
@@ -190,3 +203,5 @@ None on `InlineFormsController` / `VersionsConcern` stock actions (**7.8.0**). H
|
|
|
190
203
|
Stock `_show` / `_list` are not required for inline edit. Any page can call form-element helpers (e.g. `text_field_show(apartment, :name)`) inside a container with id `apartment_<id>_name`. Edit/update still hit `ApartmentsController#edit` / `#update` via polymorphic paths.
|
|
191
204
|
|
|
192
205
|
Example app **`--example` name list** (`GET /apartments/name_list`): custom page using the **same** turbo-field contract as stock `_show` (not a separate code path). Linked from the **More** menu; regression-tested after stock field Turbo lands.
|
|
206
|
+
|
|
207
|
+
</details>
|
data/inline_forms.gemspec
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
require "inline_forms/version"
|
|
4
|
+
require "inline_forms/gem_files"
|
|
4
5
|
|
|
5
6
|
Gem::Specification.new do |s|
|
|
6
7
|
s.name = "inline_forms"
|
|
@@ -14,29 +15,13 @@ Gem::Specification.new do |s|
|
|
|
14
15
|
s.licenses = ["MIT"]
|
|
15
16
|
s.required_ruby_version = ">= 3.2.0"
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
20
|
-
else
|
|
21
|
-
s.files = Dir.chdir(__dir__) do
|
|
22
|
-
Dir.glob("**/*", File::FNM_DOTMATCH).reject do |f|
|
|
23
|
-
f.start_with?(".git/", ".bundle/", "pkg/") ||
|
|
24
|
-
f == ".git" || f == ".bundle"
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
s.test_files = Dir.chdir(__dir__) do
|
|
28
|
-
Dir.glob("{test,spec,features}/**/*")
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
s.executables = ["inline_forms"]
|
|
18
|
+
s.files = InlineFormsGemFiles.gem_files(include_installer: false)
|
|
19
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
|
32
20
|
s.require_paths = ["lib"]
|
|
33
21
|
|
|
34
|
-
s.add_dependency(
|
|
35
|
-
s.add_dependency(
|
|
36
|
-
s.add_dependency(
|
|
37
|
-
s.add_dependency('rails', '>= 7.0.0', '< 7.1')
|
|
38
|
-
s.add_dependency('rails-i18n', '>= 7.0', '< 8.0')
|
|
22
|
+
s.add_dependency("validation_hints", ">= 6.3", "< 7.0")
|
|
23
|
+
s.add_dependency("rails", ">= 7.1.5", "< 7.2")
|
|
24
|
+
s.add_dependency("rails-i18n", ">= 7.0", "< 8.0")
|
|
39
25
|
|
|
40
26
|
s.add_development_dependency("minitest", "~> 5.0")
|
|
41
|
-
|
|
42
27
|
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
module InlineFormsGemFiles
|
|
3
|
+
INSTALLER_FILE_PREFIXES = %w[
|
|
4
|
+
bin/inline_forms
|
|
5
|
+
lib/inline_forms_installer.rb
|
|
6
|
+
lib/inline_forms_installer/
|
|
7
|
+
lib/installer_templates/
|
|
8
|
+
inline_forms_installer.gemspec
|
|
9
|
+
].freeze
|
|
10
|
+
|
|
11
|
+
module_function
|
|
12
|
+
|
|
13
|
+
REPO_ROOT = File.expand_path("../..", __dir__)
|
|
14
|
+
|
|
15
|
+
def gem_files(include_installer:)
|
|
16
|
+
files =
|
|
17
|
+
if File.directory?(File.join(REPO_ROOT, ".git"))
|
|
18
|
+
Dir.chdir(REPO_ROOT) do
|
|
19
|
+
tracked = `git ls-files`.split("\n")
|
|
20
|
+
untracked = `git ls-files --others --exclude-standard`.split("\n")
|
|
21
|
+
(tracked + untracked).uniq
|
|
22
|
+
end
|
|
23
|
+
else
|
|
24
|
+
Dir.chdir(REPO_ROOT) do
|
|
25
|
+
Dir.glob("**/*", File::FNM_DOTMATCH).reject do |f|
|
|
26
|
+
f.start_with?(".git/", ".bundle/", "pkg/") ||
|
|
27
|
+
f == ".git" || f == ".bundle"
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
files.select! { |f| File.file?(File.join(REPO_ROOT, f)) }
|
|
33
|
+
|
|
34
|
+
files.reject do |f|
|
|
35
|
+
installer_file = INSTALLER_FILE_PREFIXES.any? { |prefix| f == prefix || f.start_with?(prefix) }
|
|
36
|
+
include_installer ? !installer_file : installer_file
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
data/lib/inline_forms/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: inline_forms
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.
|
|
4
|
+
version: 7.11.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ace Suares
|
|
@@ -11,53 +11,13 @@ bindir: bin
|
|
|
11
11
|
cert_chain: []
|
|
12
12
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
|
-
- !ruby/object:Gem::Dependency
|
|
15
|
-
name: rvm
|
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
requirements:
|
|
18
|
-
- - ">="
|
|
19
|
-
- !ruby/object:Gem::Version
|
|
20
|
-
version: '1.11'
|
|
21
|
-
- - "<"
|
|
22
|
-
- !ruby/object:Gem::Version
|
|
23
|
-
version: '2.0'
|
|
24
|
-
type: :runtime
|
|
25
|
-
prerelease: false
|
|
26
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
27
|
-
requirements:
|
|
28
|
-
- - ">="
|
|
29
|
-
- !ruby/object:Gem::Version
|
|
30
|
-
version: '1.11'
|
|
31
|
-
- - "<"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '2.0'
|
|
34
|
-
- !ruby/object:Gem::Dependency
|
|
35
|
-
name: thor
|
|
36
|
-
requirement: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ">="
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '1.0'
|
|
41
|
-
- - "<"
|
|
42
|
-
- !ruby/object:Gem::Version
|
|
43
|
-
version: '2.0'
|
|
44
|
-
type: :runtime
|
|
45
|
-
prerelease: false
|
|
46
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
47
|
-
requirements:
|
|
48
|
-
- - ">="
|
|
49
|
-
- !ruby/object:Gem::Version
|
|
50
|
-
version: '1.0'
|
|
51
|
-
- - "<"
|
|
52
|
-
- !ruby/object:Gem::Version
|
|
53
|
-
version: '2.0'
|
|
54
14
|
- !ruby/object:Gem::Dependency
|
|
55
15
|
name: validation_hints
|
|
56
16
|
requirement: !ruby/object:Gem::Requirement
|
|
57
17
|
requirements:
|
|
58
18
|
- - ">="
|
|
59
19
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: '6.
|
|
20
|
+
version: '6.3'
|
|
61
21
|
- - "<"
|
|
62
22
|
- !ruby/object:Gem::Version
|
|
63
23
|
version: '7.0'
|
|
@@ -67,7 +27,7 @@ dependencies:
|
|
|
67
27
|
requirements:
|
|
68
28
|
- - ">="
|
|
69
29
|
- !ruby/object:Gem::Version
|
|
70
|
-
version: '6.
|
|
30
|
+
version: '6.3'
|
|
71
31
|
- - "<"
|
|
72
32
|
- !ruby/object:Gem::Version
|
|
73
33
|
version: '7.0'
|
|
@@ -77,20 +37,20 @@ dependencies:
|
|
|
77
37
|
requirements:
|
|
78
38
|
- - ">="
|
|
79
39
|
- !ruby/object:Gem::Version
|
|
80
|
-
version: 7.
|
|
40
|
+
version: 7.1.5
|
|
81
41
|
- - "<"
|
|
82
42
|
- !ruby/object:Gem::Version
|
|
83
|
-
version: '7.
|
|
43
|
+
version: '7.2'
|
|
84
44
|
type: :runtime
|
|
85
45
|
prerelease: false
|
|
86
46
|
version_requirements: !ruby/object:Gem::Requirement
|
|
87
47
|
requirements:
|
|
88
48
|
- - ">="
|
|
89
49
|
- !ruby/object:Gem::Version
|
|
90
|
-
version: 7.
|
|
50
|
+
version: 7.1.5
|
|
91
51
|
- - "<"
|
|
92
52
|
- !ruby/object:Gem::Version
|
|
93
|
-
version: '7.
|
|
53
|
+
version: '7.2'
|
|
94
54
|
- !ruby/object:Gem::Dependency
|
|
95
55
|
name: rails-i18n
|
|
96
56
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -130,8 +90,7 @@ description: Inline Forms aims to ease the setup of forms that provide inline ed
|
|
|
130
90
|
broken, and we will post a notice when the gem is good again.
|
|
131
91
|
email:
|
|
132
92
|
- ace@suares.com
|
|
133
|
-
executables:
|
|
134
|
-
- inline_forms
|
|
93
|
+
executables: []
|
|
135
94
|
extensions: []
|
|
136
95
|
extra_rdoc_files: []
|
|
137
96
|
files:
|
|
@@ -571,11 +530,10 @@ files:
|
|
|
571
530
|
- archived/form_elements/tree/app/helpers/form_elements/move.rb
|
|
572
531
|
- archived/form_elements/tree/app/views/inline_forms/_show_tree.html.erb
|
|
573
532
|
- archived/form_elements/tree/app/views/inline_forms/_tree.html.erb
|
|
574
|
-
-
|
|
575
|
-
- bin/inline_forms_app_template.rb
|
|
576
|
-
- bin/inline_forms_installer_core.rb
|
|
533
|
+
- docs/jquery-widgets.md
|
|
577
534
|
- docs/prompt/.gitignore
|
|
578
535
|
- docs/prompt/test-the-example-app.md
|
|
536
|
+
- docs/turbo-stream-audit.md
|
|
579
537
|
- docs/ujs-to-turbo.md
|
|
580
538
|
- inline_forms.gemspec
|
|
581
539
|
- lib/generators/USAGE
|
|
@@ -584,42 +542,15 @@ files:
|
|
|
584
542
|
- lib/generators/inline_forms_generator.rb
|
|
585
543
|
- lib/generators/templates/_inline_forms_tabs.html.erb
|
|
586
544
|
- lib/generators/templates/application_record.rb
|
|
587
|
-
- lib/generators/templates/capistrano/Capfile
|
|
588
|
-
- lib/generators/templates/capistrano/deploy.rb
|
|
589
|
-
- lib/generators/templates/capistrano/production.rb
|
|
590
545
|
- lib/generators/templates/controller.erb
|
|
591
546
|
- lib/generators/templates/migration.erb
|
|
592
547
|
- lib/generators/templates/model.erb
|
|
593
548
|
- lib/generators/templates/test.erb
|
|
594
|
-
- lib/generators/templates/unicorn/production.rb
|
|
595
549
|
- lib/inline_forms.rb
|
|
596
550
|
- lib/inline_forms/archived_form_elements.rb
|
|
597
551
|
- lib/inline_forms/form_element_from_callee.rb
|
|
552
|
+
- lib/inline_forms/gem_files.rb
|
|
598
553
|
- lib/inline_forms/version.rb
|
|
599
|
-
- lib/installer_templates/dartsass/devise_main.scss
|
|
600
|
-
- lib/installer_templates/dartsass/inline_forms_dartsass_builds.rb
|
|
601
|
-
- lib/installer_templates/dartsass/inline_forms_main.scss
|
|
602
|
-
- lib/installer_templates/example_app_tests/test/example_app/example_integration_test_case.rb
|
|
603
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_apartment_field_turbo_test.rb
|
|
604
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_apartment_name_list_test.rb
|
|
605
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_apartment_name_required_test.rb
|
|
606
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_apartment_photos_pagination_test.rb
|
|
607
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_apartment_row_turbo_test.rb
|
|
608
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_apartment_top_level_new_test.rb
|
|
609
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_apartment_top_level_pagination_test.rb
|
|
610
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_apartment_versions_turbo_test.rb
|
|
611
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_guest_access_test.rb
|
|
612
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_photo_revert_test.rb
|
|
613
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_photos_test.rb
|
|
614
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_routing_test.rb
|
|
615
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_turbo_layout_test.rb
|
|
616
|
-
- lib/installer_templates/example_app_tests/test/integration/example_app_validation_hints_test.rb
|
|
617
|
-
- lib/installer_templates/example_app_tests/test/models/example_app_apartment_name_validation_test.rb
|
|
618
|
-
- lib/installer_templates/example_app_tests/test/models/example_app_apartment_photo_test.rb
|
|
619
|
-
- lib/installer_templates/example_app_tests/test/models/example_app_paper_trail_changeset_test.rb
|
|
620
|
-
- lib/installer_templates/example_app_tests/test/models/example_app_plain_text_rich_text_edge_cases_test.rb
|
|
621
|
-
- lib/installer_templates/example_app_views/apartments/name_list.html.erb
|
|
622
|
-
- lib/installer_templates/example_app_views/inline_forms/_header.html.erb
|
|
623
554
|
- lib/locales/inline_forms.en.yml
|
|
624
555
|
- lib/locales/inline_forms.nl.yml
|
|
625
556
|
- lib/otherstuff/20120310065554_inline_forms_create_view_for_translations.rb
|
|
@@ -658,4 +589,10 @@ requirements: []
|
|
|
658
589
|
rubygems_version: 3.7.2
|
|
659
590
|
specification_version: 4
|
|
660
591
|
summary: Inline editing of forms. Versions after 6.2.14 are currently broken.
|
|
661
|
-
test_files:
|
|
592
|
+
test_files:
|
|
593
|
+
- test/archived_form_elements_test.rb
|
|
594
|
+
- test/form_element_from_callee_test.rb
|
|
595
|
+
- test/inline_edit_polymorphic_path_test.rb
|
|
596
|
+
- test/inline_forms_generator_test.rb
|
|
597
|
+
- test/plain_text_configuration_test.rb
|
|
598
|
+
- test/test_helper.rb
|