turbo-rails 2.0.0.pre.beta.1 → 2.0.0.pre.beta.3
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/README.md +3 -6
- data/app/assets/javascripts/turbo.js +848 -531
- data/app/assets/javascripts/turbo.min.js +7 -7
- data/app/assets/javascripts/turbo.min.js.map +1 -1
- data/app/helpers/turbo/drive_helper.rb +58 -7
- data/app/javascript/turbo/index.js +2 -0
- data/app/jobs/turbo/streams/broadcast_job.rb +1 -1
- data/app/models/concerns/turbo/broadcastable.rb +6 -4
- data/app/models/turbo/streams/tag_builder.rb +20 -0
- data/lib/install/turbo_with_importmap.rb +1 -1
- data/lib/turbo/version.rb +1 -1
- data/lib/turbo-rails.rb +1 -0
- metadata +2 -2
@@ -1,5 +1,9 @@
|
|
1
1
|
module Turbo::DriveHelper
|
2
|
-
#
|
2
|
+
# Helpers to configure Turbo Drive via meta directives. They come in two
|
3
|
+
# variants:
|
4
|
+
#
|
5
|
+
# The recommended option is to include +yield :head+ in the +<head>+ section
|
6
|
+
# of the layout. Then you can use the helpers in any view.
|
3
7
|
#
|
4
8
|
# ==== Example
|
5
9
|
#
|
@@ -9,29 +13,76 @@ module Turbo::DriveHelper
|
|
9
13
|
# # app/views/trays/index.html.erb
|
10
14
|
# <% turbo_exempts_page_from_cache %>
|
11
15
|
# <p>Page that shouldn't be cached by Turbo</p>
|
16
|
+
#
|
17
|
+
# Alternatively, you can use the +_tag+ variant of the helpers to only get the
|
18
|
+
# HTML for the meta directive.
|
12
19
|
|
13
20
|
# Pages that are more likely than not to be a cache miss can skip turbo cache to avoid visual jitter.
|
14
21
|
# Cannot be used along with +turbo_exempts_page_from_preview+.
|
15
22
|
def turbo_exempts_page_from_cache
|
16
|
-
provide :head,
|
23
|
+
provide :head, turbo_exempts_page_from_cache_tag
|
24
|
+
end
|
25
|
+
|
26
|
+
# See +turbo_exempts_page_from_cache+.
|
27
|
+
def turbo_exempts_page_from_cache_tag
|
28
|
+
tag.meta(name: "turbo-cache-control", content: "no-cache")
|
17
29
|
end
|
18
30
|
|
19
31
|
# Specify that a cached version of the page should not be shown as a preview during an application visit.
|
20
32
|
# Cannot be used along with +turbo_exempts_page_from_cache+.
|
21
33
|
def turbo_exempts_page_from_preview
|
22
|
-
provide :head,
|
34
|
+
provide :head, turbo_exempts_page_from_preview_tag
|
35
|
+
end
|
36
|
+
|
37
|
+
# See +turbo_exempts_page_from_preview+.
|
38
|
+
def turbo_exempts_page_from_preview_tag
|
39
|
+
tag.meta(name: "turbo-cache-control", content: "no-preview")
|
23
40
|
end
|
24
41
|
|
25
42
|
# Force the page, when loaded by Turbo, to be cause a full page reload.
|
26
43
|
def turbo_page_requires_reload
|
27
|
-
provide :head,
|
44
|
+
provide :head, turbo_page_requires_reload_tag
|
45
|
+
end
|
46
|
+
|
47
|
+
# See +turbo_page_requires_reload+.
|
48
|
+
def turbo_page_requires_reload_tag
|
49
|
+
tag.meta(name: "turbo-visit-control", content: "reload")
|
28
50
|
end
|
29
51
|
|
52
|
+
# Configure how to handle page refreshes. A page refresh happens when
|
53
|
+
# Turbo loads the current page again with a *replace* visit:
|
54
|
+
#
|
55
|
+
# === Parameters:
|
56
|
+
#
|
57
|
+
# * <tt>method</tt> - Method to update the +<body>+ of the page
|
58
|
+
# during a page refresh. It can be one of:
|
59
|
+
# * +replace:+: Replaces the existing +<body>+ with the new one. This is the
|
60
|
+
# default behavior.
|
61
|
+
# * +morph:+: Morphs the existing +<body>+ into the new one.
|
62
|
+
#
|
63
|
+
# * <tt>scroll</tt> - Controls the scroll behavior when a page refresh happens. It
|
64
|
+
# can be one of:
|
65
|
+
# * +reset:+: Resets scroll to the top, left corner. This is the default.
|
66
|
+
# * +preserve:+: Keeps the scroll.
|
67
|
+
#
|
68
|
+
# === Example Usage:
|
69
|
+
#
|
70
|
+
# turbo_refreshes_with(method: :morph, scroll: :preserve)
|
30
71
|
def turbo_refreshes_with(method: :replace, scroll: :reset)
|
72
|
+
provide :head, turbo_refresh_method_tag(method)
|
73
|
+
provide :head, turbo_refresh_scroll_tag(scroll)
|
74
|
+
end
|
75
|
+
|
76
|
+
# Configure method to perform page refreshes. See +turbo_refreshes_with+.
|
77
|
+
def turbo_refresh_method_tag(method = :replace)
|
31
78
|
raise ArgumentError, "Invalid refresh option '#{method}'" unless method.in?(%i[ replace morph ])
|
32
|
-
|
79
|
+
tag.meta(name: "turbo-refresh-method", content: method)
|
80
|
+
end
|
33
81
|
|
34
|
-
|
35
|
-
|
82
|
+
# Configure scroll strategy for page refreshes. See +turbo_refreshes_with+.
|
83
|
+
def turbo_refresh_scroll_tag(scroll = :reset)
|
84
|
+
raise ArgumentError, "Invalid scroll option '#{scroll}'" unless scroll.in?(%i[ reset preserve ])
|
85
|
+
tag.meta(name: "turbo-refresh-scroll", content: scroll)
|
36
86
|
end
|
37
87
|
end
|
88
|
+
|
@@ -142,9 +142,11 @@ module Turbo::Broadcastable
|
|
142
142
|
end
|
143
143
|
|
144
144
|
# Same as <tt>#broadcasts_refreshes_to</tt>, but the designated stream for page refreshes is automatically set to
|
145
|
-
# the current model
|
146
|
-
def broadcasts_refreshes
|
147
|
-
|
145
|
+
# the current model, for creates - to the model plural name, which can be overriden by passing <tt>stream</tt>.
|
146
|
+
def broadcasts_refreshes(stream = model_name.plural)
|
147
|
+
after_create_commit -> { broadcast_refresh_later_to(stream) }
|
148
|
+
after_update_commit -> { broadcast_refresh_later }
|
149
|
+
after_destroy_commit -> { broadcast_refresh }
|
148
150
|
end
|
149
151
|
|
150
152
|
# All default targets will use the return of this method. Overwrite if you want something else than <tt>model_name.plural</tt>.
|
@@ -292,7 +294,7 @@ module Turbo::Broadcastable
|
|
292
294
|
end
|
293
295
|
|
294
296
|
def broadcast_refresh_to(*streamables)
|
295
|
-
Turbo::StreamsChannel.broadcast_refresh_to
|
297
|
+
Turbo::StreamsChannel.broadcast_refresh_to(*streamables) unless suppressed_turbo_broadcasts?
|
296
298
|
end
|
297
299
|
|
298
300
|
def broadcast_refresh
|
@@ -22,6 +22,24 @@
|
|
22
22
|
# <%= turbo_stream.append dom_id(topic_merge) do %>
|
23
23
|
# <%= link_to topic_merge.topic.name, topic_path(topic_merge.topic) %>
|
24
24
|
# <% end %>
|
25
|
+
#
|
26
|
+
# To integrate with custom actions, extend this class in response to the :turbo_streams_tag_builder load hook:
|
27
|
+
#
|
28
|
+
# ActiveSupport.on_load :turbo_streams_tag_builder do
|
29
|
+
# def highlight(target)
|
30
|
+
# action :highlight, target
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# def highlight_all(targets)
|
34
|
+
# action_all :highlight, targets
|
35
|
+
# end
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# turbo_stream.highlight "my-element"
|
39
|
+
# # => <turbo-stream action="highlight" target="my-element"><template></template></turbo-stream>
|
40
|
+
#
|
41
|
+
# turbo_stream.highlight_all ".my-selector"
|
42
|
+
# # => <turbo-stream action="highlight" targets=".my-selector"><template></template></turbo-stream>
|
25
43
|
class Turbo::Streams::TagBuilder
|
26
44
|
include Turbo::Streams::ActionHelper
|
27
45
|
|
@@ -246,4 +264,6 @@ class Turbo::Streams::TagBuilder
|
|
246
264
|
@view_context.render(partial: record, formats: :html)
|
247
265
|
end
|
248
266
|
end
|
267
|
+
|
268
|
+
ActiveSupport.run_load_hooks :turbo_streams_tag_builder, self
|
249
269
|
end
|
@@ -2,4 +2,4 @@ say "Import Turbo"
|
|
2
2
|
append_to_file "app/javascript/application.js", %(import "@hotwired/turbo-rails"\n)
|
3
3
|
|
4
4
|
say "Pin Turbo"
|
5
|
-
append_to_file "config/importmap.rb", %(pin "@hotwired/turbo-rails", to: "turbo.min.js"
|
5
|
+
append_to_file "config/importmap.rb", %(pin "@hotwired/turbo-rails", to: "turbo.min.js"\n)
|
data/lib/turbo/version.rb
CHANGED
data/lib/turbo-rails.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: turbo-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.pre.beta.
|
4
|
+
version: 2.0.0.pre.beta.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Stephenson
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2024-01-22 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activejob
|