Sha256: 36a4e6b8ae6f5cfe7e8b70cb8bafcebfdcfe16015ed17857b87f3dd863a40f3c

Contents?: true

Size: 1.68 KB

Versions: 1

Compression:

Stored size: 1.68 KB

Contents

require 'crystal_ext/gems'

module Crystal
  JavascriptHelper.class_eval do
    
    def javascript_tag_with_defer value = nil, &block
      if @defer_js and !@deferred_js_called
        @deffered_js_initialized.must_be.true
        
        value = capture &block if block
        
        value = <<END
deferred_static_scripts.push(function(){
#{value}
});
END
        
        value = javascript_tag_without_defer value
        if block
          concat value
        else
          value
        end
      else
        javascript_tag_without_defer value, &block
      end
    end
    alias_method_chain :javascript_tag, :defer
    
    def initialize_deferred_js
      return "" unless @defer_js
      
      @deffered_js_initialized.must_be.false
      @deffered_js_initialized = true
      dont_defer_js do
        javascript_tag "var deferred_static_scripts = [];"
      end
    end
    
    def call_deferred_js
      return "" unless @defer_js
      
      @deffered_js_initialized.must_be.true
      @deferred_js_called.must_be.false
      @deferred_js_called = true
      content = <<END
var i;
for(i in deferred_static_scripts){deferred_static_scripts[i]()}
deferred_static_scripts = [];
END
      dont_defer_js do
        javascript_tag content
      end
    end
    
    def dont_defer_js &block
      before = @defer_js
      begin
        @defer_js = false
        block.call
      ensure
        @defer_js = before
      end
    end
    
    def defer_js!
      @defer_js.must_be.false      
      workspace.params.format.must == 'html'
      
      @defer_js = true
      @deferred_js_called = false      
      # @defer_static_scripts = workspace.params.format.js? ? false : true
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
crystal_ext-0.0.7 lib/crystal_ext/defer_js.rb