Skip to content

eagleas/infinite_page

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Yet another unobtrusive javascript paging plugin for Ruby on Rails. Based on will_paginate.

live demo : [ror.zarlboro.com/]

sources : [github.com/Ouziel/infinite_page_demo]

  • Please install the will_paginate plugin before proceeding.

  • then:

    script/plugin install git://github.com/Ouziel/infinite_page.git

Infinite Page is used exactly like wil_paginate plugin but make sure of the following:

  • Obviously infinite_page helper method should be used instead of will_paginate

  • Infinite page parts (each part is one page in classic pagination) should be placed in a partial

  • infinite_page call should be included in this partial

  • in your controller,

    • XHR request: render only this partial

    • other requests: render whole page

infinite_page take two parameters :

collection = nil

a WillPaginate:Collection return by paginate function

options = {}

see Options paragraph

Most will_paginate and remote_function options are available along with infinite_page’s 2 additional options. will_paginate options are used for classic pagination rendered inside <noscript> tag. remote_function options are used for next page XHR loading. The most important option is :update. It indicates the DOM element ID that contains the partial. :url and :render options are automatically set by infinite_page. Please refer to will_paginate and remote_function references.

infinite_page’s 2 additional options :

:first

Javascript expression is called once the first page is loaded

:last

Javascript expression is called after the last page is loaded

Use a paginate finder in the controller and render only the partial when request is XHR:

def index
  @posts = Post.paginate :page => params[:page], :order => 'created_at DESC'
  render :partial => "posts", :object => @posts if request.xhr?
end

In your layout insert the infinite page javascript tag and the div, or other HTML element that contains the page:

<head>
  ...
  <%= javascript_include_tag :defaults, "infinite_page" %>
  ...
</head>

If you won’t load infinate_page.js in all pages, you can use content_for method.

In your view:

...
<div id="infinite_page_spinner">&nbsp;</div>
<div id="content"><%= render :partial => "posts", :object => @posts %></div>
...

In your _posts.html.erb partial, display posts list and call infinite_page method :

<%= render :partial => "post", :collection => @posts  %>
<%= infinite_page @posts, 
                      :update => "content",
                      :position => :bottom,
                      :complete => "$('infinite_page_spinner').hide();",
                      :before => "$('infinite_page_spinner').show();",
                      :first => "alert('first page loaded');",
                      :last => "alert('last page loaded');" %>

Et voila! enjoy!

  • Make it compatible with Jquery.

  • Make it work with a div scroll.

Copyright © 2009 Ouziel Slama, released under the MIT license

About

Yet another unobtrusive javascript bottomless pagination plugin for Ruby on Rails. Based on will_paginate plugin.

Resources

License

Stars

2 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Ruby 65.3%
  • JavaScript 34.7%