hotwire-livereload 0.2.0 → 0.3.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/README.md +29 -4
- data/app/assets/javascripts/hotwire-livereload.js +9 -3
- data/app/javascript/hotwire-livereload.js +10 -3
- data/lib/hotwire/livereload/engine.rb +28 -10
- data/lib/hotwire/livereload/version.rb +1 -1
- data/lib/install/install.rb +13 -5
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4397b862ba6f621e8442f674fbf5ffa478422e8d01b293f299afbd8213154ac
|
4
|
+
data.tar.gz: e9e4a35a16d3f09c9f88467e2e0267ee98220d6be0ddda7bd28fc9b3cb8bff95
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71e11b2197803862c7afb86717f6ccc753ddd60923e7f330b715af28f2263fe49e8baa839bf6d7110ff5bf6dfddeba49c84c7182ea5edc54400c9597e7cbd0ec
|
7
|
+
data.tar.gz: a847e23ec3f9eb51ba0f7a7cc3d9ee112980b5eae0ae250e5d82505c19cebd97f6849c01a058d227946d9c075c043cca5909120aa09cc3f95fafa4e121233fe9
|
data/README.md
CHANGED
@@ -8,20 +8,45 @@ https://user-images.githubusercontent.com/839922/131983979-afd0bcc7-86e8-4c53-97
|
|
8
8
|
|
9
9
|
The JavaScript for Hotwire::Livereload is installed via asset pipeline, which is included with this gem.
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
Add `hotwire-livereload` to your Gemfile:
|
12
|
+
```
|
13
|
+
bundle add hotwire-livereload --group development
|
14
|
+
```
|
15
|
+
|
16
|
+
Run installer:
|
17
|
+
```
|
18
|
+
rails livereload:install
|
19
|
+
```
|
14
20
|
|
15
21
|
## Configuration
|
16
22
|
|
17
23
|
You can watch for changes in additional folders by adding them to `listen_paths`. For example, you can watch for CSS changes:
|
24
|
+
```ruby
|
25
|
+
# config/environments/development.rb
|
26
|
+
|
27
|
+
Rails.application.configure do
|
28
|
+
# ...
|
29
|
+
config.hotwire_livereload.listen_paths << Rails.root.join("app/custom_folder")
|
30
|
+
end
|
31
|
+
```
|
18
32
|
|
33
|
+
Folders listened by default:
|
34
|
+
- `app/views`
|
35
|
+
- `app/helpers`
|
36
|
+
- `app/javascript`
|
37
|
+
- `app/assets/stylesheets`
|
38
|
+
- `app/assets/javascripts`
|
39
|
+
- `app/assets/images`
|
40
|
+
- `app/components`
|
41
|
+
- `config/locales`
|
42
|
+
|
43
|
+
You can setup force reloading (full page reload) for changes in some folders using `force_reload_paths` option. For example, you can trigger force reload on JS changes:
|
19
44
|
```ruby
|
20
45
|
# config/environments/development.rb
|
21
46
|
|
22
47
|
Rails.application.configure do
|
23
48
|
# ...
|
24
|
-
config.hotwire_livereload.
|
49
|
+
config.hotwire_livereload.force_reload_paths << Rails.root.join("app/javascript")
|
25
50
|
end
|
26
51
|
```
|
27
52
|
|
@@ -601,9 +601,15 @@
|
|
601
601
|
var import_actioncable = __toModule(require_action_cable());
|
602
602
|
var import_debounce = __toModule(require_debounce());
|
603
603
|
var consumer = (0, import_actioncable.createConsumer)();
|
604
|
-
var received = (0, import_debounce.default)(() => {
|
605
|
-
|
606
|
-
|
604
|
+
var received = (0, import_debounce.default)(({ force_reload }) => {
|
605
|
+
const onErrorPage = document.title === "Action Controller: Exception caught";
|
606
|
+
if (onErrorPage || force_reload) {
|
607
|
+
console.log("[Hotwire::Livereload] Files changed. Force reloading..");
|
608
|
+
document.location.reload();
|
609
|
+
} else {
|
610
|
+
console.log("[Hotwire::Livereload] Files changed. Reloading..");
|
611
|
+
Turbo.visit(window.location.href);
|
612
|
+
}
|
607
613
|
}, 300);
|
608
614
|
consumer.subscriptions.create("Hotwire::Livereload::ReloadChannel", {
|
609
615
|
received,
|
@@ -2,9 +2,16 @@ import { createConsumer } from "@rails/actioncable"
|
|
2
2
|
import debounce from "debounce"
|
3
3
|
|
4
4
|
const consumer = createConsumer()
|
5
|
-
const received = debounce(() => {
|
6
|
-
|
7
|
-
|
5
|
+
const received = debounce(({force_reload}) => {
|
6
|
+
const onErrorPage = document.title === "Action Controller: Exception caught"
|
7
|
+
|
8
|
+
if (onErrorPage || force_reload) {
|
9
|
+
console.log("[Hotwire::Livereload] Files changed. Force reloading..")
|
10
|
+
document.location.reload()
|
11
|
+
} else {
|
12
|
+
console.log("[Hotwire::Livereload] Files changed. Reloading..")
|
13
|
+
Turbo.visit(window.location.href)
|
14
|
+
}
|
8
15
|
}, 300)
|
9
16
|
|
10
17
|
consumer.subscriptions.create("Hotwire::Livereload::ReloadChannel", {
|
@@ -8,6 +8,7 @@ module Hotwire
|
|
8
8
|
isolate_namespace Hotwire::Livereload
|
9
9
|
config.hotwire_livereload = ActiveSupport::OrderedOptions.new
|
10
10
|
config.hotwire_livereload.listen_paths ||= []
|
11
|
+
config.hotwire_livereload.force_reload_paths ||= []
|
11
12
|
config.autoload_once_paths = %W(
|
12
13
|
#{root}/app/channels
|
13
14
|
#{root}/app/helpers
|
@@ -26,23 +27,40 @@ module Hotwire
|
|
26
27
|
end
|
27
28
|
|
28
29
|
initializer "hotwire_livereload.set_configs" do |app|
|
30
|
+
default_listen_paths = %w[
|
31
|
+
app/views
|
32
|
+
app/helpers
|
33
|
+
app/javascript
|
34
|
+
app/assets/stylesheets
|
35
|
+
app/assets/javascripts
|
36
|
+
app/assets/images
|
37
|
+
app/components
|
38
|
+
config/locales
|
39
|
+
].map { |p| Rails.root.join(p) }
|
40
|
+
|
29
41
|
options = app.config.hotwire_livereload
|
30
|
-
options.listen_paths
|
31
|
-
options.listen_paths << Rails.root.join("app/views")
|
32
|
-
options.listen_paths << Rails.root.join("app/helpers")
|
33
|
-
if Dir.exist?(Rails.root.join("app/javascript"))
|
34
|
-
options.listen_paths << Rails.root.join("app/javascript")
|
35
|
-
end
|
42
|
+
options.listen_paths += default_listen_paths.select { |p| Dir.exist?(p) }
|
36
43
|
end
|
37
44
|
|
38
45
|
config.after_initialize do |app|
|
39
46
|
if Rails.env.development? && defined?(Rails::Server)
|
40
|
-
|
47
|
+
options = app.config.hotwire_livereload
|
48
|
+
listen_paths = options.listen_paths.map(&:to_s).uniq
|
49
|
+
force_reload_paths = options.force_reload_paths.map(&:to_s).uniq.join("|")
|
50
|
+
|
51
|
+
@listener = Listen.to(*listen_paths) do |modified, added, removed|
|
41
52
|
unless File.exists?(DISABLE_FILE)
|
42
|
-
|
43
|
-
|
44
|
-
|
53
|
+
changed = [modified, removed, added].flatten.uniq
|
54
|
+
return unless changed.any?
|
55
|
+
|
56
|
+
force_reload = force_reload_paths.present? && changed.any? do |path|
|
57
|
+
path.match(%r{#{force_reload_paths}})
|
45
58
|
end
|
59
|
+
|
60
|
+
ActionCable.server.broadcast("hotwire-reload", {
|
61
|
+
changed: changed,
|
62
|
+
force_reload: force_reload
|
63
|
+
})
|
46
64
|
end
|
47
65
|
end
|
48
66
|
@listener.start
|
data/lib/install/install.rb
CHANGED
@@ -3,18 +3,26 @@ CABLE_CONFIG_PATH = Rails.root.join("config/cable.yml")
|
|
3
3
|
|
4
4
|
if APP_LAYOUT_PATH.exist?
|
5
5
|
say "Add Hotwire Livereload tag in application layout"
|
6
|
-
|
7
|
-
\n
|
6
|
+
content = <<-HTML
|
7
|
+
\n <% if Rails.env.development? %>
|
8
|
+
<%= javascript_include_tag "hotwire-livereload", defer: true %>
|
9
|
+
<% end %>
|
8
10
|
HTML
|
9
|
-
|
11
|
+
insert_into_file APP_LAYOUT_PATH, content.chop, before: /\s*<\/head>/
|
10
12
|
else
|
11
13
|
say "Default application.html.erb is missing!", :red
|
12
14
|
say %( Add <%= hotwire_livereload_tags %> within the <head> tag in your custom layout.)
|
13
15
|
end
|
14
16
|
|
15
17
|
if CABLE_CONFIG_PATH.exist?
|
16
|
-
|
17
|
-
|
18
|
+
gemfile = File.read(Rails.root.join("Gemfile"))
|
19
|
+
if gemfile.include?("redis")
|
20
|
+
say "Uncomment redis in Gemfile"
|
21
|
+
uncomment_lines "Gemfile", %(gem "redis")
|
22
|
+
else
|
23
|
+
say "Add redis to Gemfile"
|
24
|
+
gem "redis"
|
25
|
+
end
|
18
26
|
|
19
27
|
say "Switch development cable to use redis"
|
20
28
|
gsub_file CABLE_CONFIG_PATH.to_s, /development:\n\s+adapter: async/, "development:\n adapter: redis\n url: redis://localhost:6379/1"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hotwire-livereload
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kirill Platonov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-12-
|
11
|
+
date: 2021-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -75,8 +75,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
75
|
- !ruby/object:Gem::Version
|
76
76
|
version: '0'
|
77
77
|
requirements: []
|
78
|
-
rubygems_version: 3.2.
|
78
|
+
rubygems_version: 3.2.32
|
79
79
|
signing_key:
|
80
80
|
specification_version: 4
|
81
|
-
summary: Automatically reload Hotwire Turbo when
|
81
|
+
summary: Automatically reload Hotwire Turbo when app files are modified.
|
82
82
|
test_files: []
|