]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Fix live reload when both CSS and HTML changes
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 15 Jun 2024 14:38:34 +0000 (16:38 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 15 Jun 2024 18:13:42 +0000 (20:13 +0200)
This seems to be a browser bug (tested in both Chrome and Safari on MacOS), but it seems that doing a `window.location.reload()` (or `window.location.reload(true)`) doesn't refresh the CSS changes, even if HTTP caching is disabled.

This commit works around this by doing additional refreshes of the CSSes.

Closes #12600

commands/hugobuilder.go

index d77f1f178d88d1ec36aa662af26584e93ab2b280..84608ca374c744d96e6a8e1b9b73e50ad25bc5ab 100644 (file)
@@ -903,6 +903,29 @@ func (c *hugoBuilder) handleEvents(watcher *watcher.Batcher,
                                        livereload.RefreshPath(pathToRefresh)
                                } else {
                                        livereload.ForceRefresh()
+                                       // See https://github.com/gohugoio/hugo/issues/12600.
+                                       // If this change set also contains one or more CSS files, we need to
+                                       // refresh these as well.
+                                       var cssChanges []string
+                                       var otherChanges []string
+
+                                       for _, ev := range changed {
+                                               if strings.HasSuffix(ev, ".css") {
+                                                       cssChanges = append(cssChanges, ev)
+                                               } else {
+                                                       otherChanges = append(otherChanges, ev)
+                                               }
+                                       }
+
+                                       if len(otherChanges) > 0 {
+                                               livereload.ForceRefresh()
+                                               // Allow some time for the live reload script to get reconnected.
+                                               time.Sleep(100 * time.Millisecond)
+                                       }
+
+                                       for _, ev := range cssChanges {
+                                               livereload.RefreshPath(h.PathSpec.RelURL(paths.ToSlashTrimLeading(ev), false))
+                                       }
                                }
                        }