Module: Opal::Sprockets
- Defined in:
- opal/lib/opal/sprockets.rb,
 opal/lib/opal/sprockets/path_reader.rb,
 opal/lib/opal/sprockets/source_map_header_patch.rb
Defined Under Namespace
Modules: SourceMapHeaderPatch Classes: PathReader
Class Method Summary collapse
- 
  
    
      .javascript_include_tag(name, options = {})  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Public: Generate a <script>tag for Opal assets.
- 
  
    
      .load_asset(name, sprockets)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Public: Bootstraps modules loaded by sprockets on Opal.modulesmarking any non-Opal asset as already loaded.
Class Method Details
.javascript_include_tag(name, options = {}) ⇒ Object
Public: Generate a <script> tag for Opal assets.
name - The name of the asset to be loaded options - (default: {}): :sprockets - A Sprockets::Environment instance :prefix - The prefix String at which is mounted Sprockets :debug - Wether to enable debug mode along with sourcemaps support
Returns a string of HTML code containing <script> tags.
| 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | # File 'opal/lib/opal/sprockets.rb', line 66 def self.javascript_include_tag(name, = {}) sprockets = .fetch(:sprockets) prefix = .fetch(:prefix) debug = .fetch(:debug) asset = sprockets[name] raise "Cannot find asset: #{name}" if asset.nil? scripts = [] if debug asset.to_a.map do |dependency| scripts << %{<script src="#{prefix}/#{dependency.logical_path}?body=1"></script>} end else scripts << %{<script src="#{prefix}/#{name}.js"></script>} end scripts << %{<script>#{::Opal::Sprockets.load_asset(name, sprockets)}</script>} scripts.join "\n" end | 
.load_asset(name, sprockets) ⇒ Object
Public: Bootstraps modules loaded by sprockets on Opal.modules marking any
  non-Opal asset as already loaded.
name - The name of the main asset to be loaded (with or without ext) sprockets - A Sprockets::Environment instance
Example
Opal::Sprockets.load_asset(Rails.application.assets, 'application')
Will output the following JavaScript:
if (typeof(Opal) !== 'undefined') { Opal.mark_as_loaded("opal"); Opal.mark_as_loaded("jquery.self"); Opal.load("application"); }
Returns a String containing JavaScript code.
| 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 | # File 'opal/lib/opal/sprockets.rb', line 26 def self.load_asset(name, sprockets) asset = sprockets[name.sub(/(\.(js|rb|opal))*#{REGEXP_END}/, '.js')] return '' if asset.nil? opal_extnames = sprockets.engines.map do |ext, engine| ext if engine <= ::Opal::Processor end.compact module_name = -> asset { asset.logical_path.sub(/\.js#{REGEXP_END}/, '') } path_extnames = -> path { File.basename(path).scan(/\.[^.]+/) } mark_loaded = -> paths { "Opal.loaded([#{paths.map(&:inspect).join(',')}]);" } processed_by_opal = -> asset { (path_extnames[asset.pathname] & opal_extnames).any? } stubbed_files = ::Opal::Processor.stubbed_files non_opal_assets = ([asset]+asset.dependencies) .select { |asset| not(processed_by_opal[asset]) } .map { |asset| module_name[asset] } loaded = ['opal'] + non_opal_assets + stubbed_files.to_a if processed_by_opal[asset] load_asset_code = "Opal.load(#{module_name[asset].inspect});" end "if (typeof(Opal) !== 'undefined') { "\ "#{mark_loaded[loaded]} "\ "#{load_asset_code} "\ "}" end |