module ProgressiveRender::Rails::View

Provides methods for application view

Public Instance Methods

progressive_render(deprecated_fragment_name = nil, placeholder: 'progressive_render/placeholder') { || ... } click to toggle source

Mark a section of content to be loaded after initial view of the page.

Usage

<%= progressive_render do %>
  <h2>Content!</h2>
<% end %>

Specify a custom placeholder

The progressive_render method puts a simple spinner on the page by default but that can be customized per section by passing a path to a partial via `placeholder`

<%= progressive_render placeholder: 'shared/custom_placehodler' do %>
  <h2>More Content!</h2>
<% end %>
# File lib/progressive_render/rails/view.rb, line 23
def progressive_render(deprecated_fragment_name = nil,
                       placeholder: 'progressive_render/placeholder')
  if deprecated_fragment_name
    logger.warn %(DEPRECATED (progressive_render): Literal fragment names are deprecated and will be removed
      in v1.0. The fragment name (#{deprecated_fragment_name}) will be ignored.")
  end

  progressive_render_impl(placeholder: placeholder) do
    yield
  end
end

Private Instance Methods

fragment_name_iterator() click to toggle source
# File lib/progressive_render/rails/view.rb, line 59
def fragment_name_iterator
  @fni ||= FragmentNameIterator.new
end
progressive_render_content(fragment_name, placeholder = true) { || ... } click to toggle source
# File lib/progressive_render/rails/view.rb, line 49
def progressive_render_content(fragment_name, placeholder = true)
  data = { progressive_render_placeholder: placeholder,
           progressive_render_path: progressive_request.load_path(fragment_name) }.reject { |_k, v| v.nil? }

  content_tag(:div, id: "#{fragment_name}_progressive_render",
                    data: data) do
    yield
  end
end
progressive_render_impl(placeholder: 'progressive_render/placeholder') { || ... } click to toggle source
# File lib/progressive_render/rails/view.rb, line 37
def progressive_render_impl(placeholder: 'progressive_render/placeholder')
  fragment_name = fragment_name_iterator.next!

  progressive_render_content(fragment_name, progressive_request.main_load?) do
    if progressive_request.main_load?
      progressive_renderer.render_partial placeholder
    elsif progressive_request.should_render_fragment?(fragment_name)
      yield
    end
  end
end