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