require 'opal'
require 'opal/sprockets/processor'
require 'opal/sprockets/erb'
require 'opal/sprockets/server'
module Opal
module Sprockets
# Bootstraps modules loaded by sprockets on `Opal.modules` marking any
# non-Opal asset as already loaded.
#
# @example
#
# Opal::Sprockets.load_asset('application')
#
# @example Will output the following JavaScript:
#
# if (typeof(Opal) !== 'undefined') {
# Opal.loaded("opal");
# Opal.loaded("jquery.self");
# Opal.load("application");
# }
#
# @param name [String] The logical name of the main asset to be loaded (without extension)
#
# @return [String] JavaScript code
def self.load_asset(name, _sprockets = :deprecated)
if _sprockets != :deprecated && !@load_asset_warning_displayed
@load_asset_warning_displayed = true
warn "Passing a sprockets environment to Opal::Sprockets.load_asset no more needed.\n #{caller(1, 3).join("\n ")}"
end
name = name.sub(/(\.(js|rb|opal))*\z/, '')
stubbed_files = ::Opal::Config.stubbed_files
loaded = ['opal', 'corelib/runtime'] + stubbed_files.to_a
"if (typeof(Opal) !== 'undefined') { "\
"Opal.loaded(#{loaded.to_json}); "\
"if (typeof(OpalLoaded) !== 'undefined') Opal.loaded(OpalLoaded); "\
"if (Opal.modules[#{name.to_json}]) Opal.load(#{name.to_json}); "\
"}"
end
# Generate a `}
end
else
scripts << %{}
end
scripts << %{}
scripts.join "\n"
end
end
end