Sha256: 500aded9232331958a41ef4c48d10915796f606e0d257842ba0c73aa35e13858

Contents?: true

Size: 1.65 KB

Versions: 2

Compression:

Stored size: 1.65 KB

Contents

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

2 entries across 2 versions & 1 rubygems

Version Path
crystal_ext-0.0.5 lib/crystal_ext/defer_js.rb
crystal_ext-0.0.4 lib/crystal_ext/defer_js.rb