class Middleman::LiveReloadExtension
Public Class Methods
new(app, options_hash={}, &block)
click to toggle source
Calls superclass method
# File lib/middleman-livereload/extension_3_1.rb, line 19 def initialize(app, options_hash={}, &block) super if app.respond_to?(:server?) return unless app.server? else return unless app.environment == :development end port = options.port.to_i host = options.host js_port = options.js_port || port js_host = options.js_host || host no_swf = options.no_swf ignore = options.ignore options_hash = options.to_h livereload_css_target = options.livereload_css_target livereload_css_pattern = options.livereload_css_pattern extension = self app.ready do reactor = ::Middleman::LiveReload::Reactor.create(options_hash, self) ignored = lambda do |file| return true if app.files.respond_to?(:ignored?) && app.files.send(:ignored?, file) ignore.any? { |i| file.to_s.match(i) } end app.files.changed do |file| next if ignored.call(file) logger.debug "LiveReload: File changed - #{file}" reload_path = "#{Dir.pwd}/#{file}" file_url = app.sitemap.file_to_path(file) if file_url file_resource = app.sitemap.find_resource_by_path(file_url) if file_resource reload_path = file_resource.url end end # handle imported partials # load target file instead of triggering full page refresh if livereload_css_pattern.match(file.to_s) and not livereload_css_target.nil? logger.info("LiveReload: CSS import changed, reloading target") reload_path = livereload_css_target end reactor.reload_browser(reload_path) end app.files.deleted do |file| next if ignored.call(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 app.use ::Rack::LiveReload, port: js_port, host: js_host, no_swf: no_swf, source: :vendored, ignore: ignore end end