2019-05-03 06:17:27 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2013-07-10 10:16:56 +08:00
|
|
|
module Autospec; end
|
2013-11-02 06:57:50 +08:00
|
|
|
|
2013-07-10 10:16:56 +08:00
|
|
|
class Autospec::ReloadCss
|
|
|
|
|
2013-11-02 06:57:50 +08:00
|
|
|
WATCHERS = {}
|
2013-07-10 10:16:56 +08:00
|
|
|
def self.watch(pattern, &blk)
|
2013-11-02 06:57:50 +08:00
|
|
|
WATCHERS[pattern] = blk
|
2013-07-10 10:16:56 +08:00
|
|
|
end
|
|
|
|
|
2013-11-02 06:57:50 +08:00
|
|
|
# css, scss, sass or handlebars
|
2013-07-10 10:16:56 +08:00
|
|
|
watch(/\.css$/)
|
2013-11-02 06:57:50 +08:00
|
|
|
watch(/\.ca?ss\.erb$/)
|
|
|
|
watch(/\.s[ac]ss$/)
|
2014-09-27 03:23:15 +08:00
|
|
|
watch(/\.hbs$/)
|
2020-02-12 03:38:12 +08:00
|
|
|
watch(/\.hbr$/)
|
2013-07-10 10:16:56 +08:00
|
|
|
|
|
|
|
def self.message_bus
|
|
|
|
MessageBus::Instance.new.tap do |bus|
|
|
|
|
bus.site_id_lookup do
|
2013-11-02 06:57:50 +08:00
|
|
|
# this is going to be dev the majority of the time
|
|
|
|
# if you have multisite configured in dev stuff may be different
|
2013-07-10 10:16:56 +08:00
|
|
|
"default"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.run_on_change(paths)
|
2014-05-03 05:46:03 +08:00
|
|
|
if paths.any? { |p| p =~ /\.(css|s[ac]ss)/ }
|
2015-02-27 14:19:30 +08:00
|
|
|
# todo connect to dev instead?
|
|
|
|
ActiveRecord::Base.establish_connection
|
2015-06-22 12:35:11 +08:00
|
|
|
[:desktop, :mobile].each do |style|
|
|
|
|
s = DiscourseStylesheets.new(style)
|
|
|
|
s.compile
|
|
|
|
paths << "public" + s.stylesheet_relpath_no_digest
|
|
|
|
end
|
2015-02-27 14:19:30 +08:00
|
|
|
ActiveRecord::Base.clear_active_connections!
|
2014-05-03 05:46:03 +08:00
|
|
|
end
|
2013-07-10 10:16:56 +08:00
|
|
|
paths.map! do |p|
|
|
|
|
hash = nil
|
2013-11-02 06:57:50 +08:00
|
|
|
fullpath = "#{Rails.root}/#{p}"
|
2022-01-06 01:45:08 +08:00
|
|
|
hash = Digest::MD5.hexdigest(File.read(fullpath)) if File.exist?(fullpath)
|
2015-02-27 14:19:30 +08:00
|
|
|
p = p.sub(/\.sass\.erb/, "")
|
|
|
|
p = p.sub(/\.sass/, "")
|
|
|
|
p = p.sub(/\.scss/, "")
|
|
|
|
p = p.sub(/^app\/assets\/stylesheets/, "assets")
|
2015-06-22 12:35:11 +08:00
|
|
|
{ name: p, hash: hash || SecureRandom.hex }
|
2013-07-10 10:16:56 +08:00
|
|
|
end
|
|
|
|
message_bus.publish "/file-change", paths
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|