hotwire-livereload 0.1.3 → 1.0.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 +55 -3
- data/app/assets/javascripts/hotwire-livereload.js +9 -3
- data/app/javascript/hotwire-livereload.js +10 -3
- data/lib/hotwire/livereload/engine.rb +31 -7
- data/lib/hotwire/livereload/version.rb +1 -1
- data/lib/hotwire/livereload.rb +1 -0
- data/lib/install/install.rb +13 -5
- data/lib/tasks/livereload_tasks.rake +21 -0
- metadata +5 -5
- data/lib/tasks/hotwire/livereload/install.rake +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2634bec56254429d0d3f222fdc56d3e6acae483e8158da3c8314540c812da537
|
4
|
+
data.tar.gz: 0162d148937597fb06a5f6f23ba43dedabe550cde88e892dbc2369ce63e6fd4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 946841da42fc46ab057128a32881e72a2d35dc69759e6036cf562b58d70db8d793a0d338312623c665afcf5c3edf4e4a54e3b573528b139e6a20af2bb1bb24c2
|
7
|
+
data.tar.gz: ec6af99da8e71eadae77b68e579a65ccab81ad3acb9bd54f70466908cdc14f67ece5667e7bc31f7a4f44f52e0d449a22961a3729c2a098189ca30ec84c24c09e
|
data/README.md
CHANGED
@@ -8,9 +8,61 @@ 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
|
+
```
|
20
|
+
|
21
|
+
## Configuration
|
22
|
+
|
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
|
+
```
|
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:
|
44
|
+
```ruby
|
45
|
+
# config/environments/development.rb
|
46
|
+
|
47
|
+
Rails.application.configure do
|
48
|
+
# ...
|
49
|
+
config.hotwire_livereload.force_reload_paths << Rails.root.join("app/javascript")
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
## Disable livereload
|
54
|
+
|
55
|
+
To temporarily disable livereload use:
|
56
|
+
```bash
|
57
|
+
bin/rails livereload:disable
|
58
|
+
```
|
59
|
+
|
60
|
+
To re-enable:
|
61
|
+
```bash
|
62
|
+
bin/rails livereload:enable
|
63
|
+
```
|
64
|
+
|
65
|
+
No server restart is required. Disabling is managed by `tmp/livereload-disabled.txt` file.
|
14
66
|
|
15
67
|
## Development
|
16
68
|
|
@@ -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,17 +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")
|
42
|
+
options.listen_paths += default_listen_paths.select { |p| Dir.exist?(p) }
|
32
43
|
end
|
33
44
|
|
34
45
|
config.after_initialize do |app|
|
35
|
-
if Rails.env.development?
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
46
|
+
if Rails.env.development? && defined?(Rails::Server)
|
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|
|
52
|
+
unless File.exists?(DISABLE_FILE)
|
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}})
|
58
|
+
end
|
59
|
+
|
60
|
+
ActionCable.server.broadcast("hotwire-reload", {
|
61
|
+
changed: changed,
|
62
|
+
force_reload: force_reload
|
63
|
+
})
|
40
64
|
end
|
41
65
|
end
|
42
66
|
@listener.start
|
data/lib/hotwire/livereload.rb
CHANGED
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"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
namespace :livereload do
|
2
|
+
desc "Install Hotwire::Livereload into the app"
|
3
|
+
task :install do
|
4
|
+
system "#{RbConfig.ruby} ./bin/rails app:template LOCATION=#{File.expand_path("../install/install.rb", __dir__)}"
|
5
|
+
end
|
6
|
+
|
7
|
+
desc "Disable Hotwire::Livereload"
|
8
|
+
task :disable do
|
9
|
+
FileUtils.mkdir_p("tmp")
|
10
|
+
FileUtils.touch Hotwire::Livereload::DISABLE_FILE
|
11
|
+
puts "Livereload disabled."
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "Enable Hotwire::Livereload"
|
15
|
+
task :enable do
|
16
|
+
if File.exist?(Hotwire::Livereload::DISABLE_FILE)
|
17
|
+
File.delete Hotwire::Livereload::DISABLE_FILE
|
18
|
+
end
|
19
|
+
puts "Livereload enabled."
|
20
|
+
end
|
21
|
+
end
|
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: 1.0.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-
|
11
|
+
date: 2021-12-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -55,7 +55,7 @@ files:
|
|
55
55
|
- lib/hotwire/livereload/engine.rb
|
56
56
|
- lib/hotwire/livereload/version.rb
|
57
57
|
- lib/install/install.rb
|
58
|
-
- lib/tasks/
|
58
|
+
- lib/tasks/livereload_tasks.rake
|
59
59
|
homepage: https://github.com/kirillplatonov/hotwire-livereload
|
60
60
|
licenses:
|
61
61
|
- MIT
|
@@ -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: []
|