Class: Middleman::LiveReloadExtension

Inherits:
Extension
  • Object
show all
Defined in:
lib/middleman-livereload/extension_3_1.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, options_hash = {}, &block) ⇒ LiveReloadExtension

Returns a new instance of LiveReloadExtension.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/middleman-livereload/extension_3_1.rb', line 12

def initialize(app, options_hash={}, &block)
  super

  if app.respond_to?(:server?)
    return unless app.server?
  else
    return unless app.environment == :development
  end

  @reactor = nil

  port = options.port.to_i
  host = options.host
  no_swf = options.no_swf
  options_hash = options.to_h

  app.ready do
    if @reactor
      @reactor.app = self
    else
      @reactor = ::Middleman::LiveReload::Reactor.new(options_hash, self)
    end

    files.changed do |file|
      next if files.respond_to?(:ignored?) && files.send(:ignored?, file)

      logger.debug "LiveReload: File changed - #{file}"

      reload_path = "#{Dir.pwd}/#{file}"

      file_url = sitemap.file_to_path(file)
      if file_url
        file_resource = sitemap.find_resource_by_path(file_url)
        if file_resource
          reload_path = file_resource.url
        end
      end

      @reactor.reload_browser(reload_path)
    end

    files.deleted do |file|
      next if files.respond_to?(:ignored?) && files.send(:ignored?, file)

      logger.debug "LiveReload: File deleted - #{file}"

      @reactor.reload_browser("#{Dir.pwd}/#{file}")
    end

    # Use the vendored livereload.js source rather than trying to get it from Middleman
    # https://github.com/johnbintz/rack-livereload#which-livereload-script-does-it-use
    use ::Rack::LiveReload, :port => port, :host => host, :no_swf => no_swf, :source => :vendored
  end
end