shingara-will_paginate 2.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. data/CHANGELOG.rdoc +94 -0
  2. data/LICENSE +18 -0
  3. data/README.rdoc +106 -0
  4. data/Rakefile +62 -0
  5. data/examples/apple-circle.gif +0 -0
  6. data/examples/index.haml +69 -0
  7. data/examples/index.html +92 -0
  8. data/examples/pagination.css +90 -0
  9. data/examples/pagination.sass +91 -0
  10. data/init.rb +1 -0
  11. data/lib/will_paginate/array.rb +16 -0
  12. data/lib/will_paginate/collection.rb +146 -0
  13. data/lib/will_paginate/core_ext.rb +32 -0
  14. data/lib/will_paginate/finder.rb +247 -0
  15. data/lib/will_paginate/named_scope.rb +132 -0
  16. data/lib/will_paginate/named_scope_patch.rb +39 -0
  17. data/lib/will_paginate/version.rb +9 -0
  18. data/lib/will_paginate/view_helpers.rb +383 -0
  19. data/lib/will_paginate.rb +82 -0
  20. data/test/boot.rb +21 -0
  21. data/test/collection_test.rb +140 -0
  22. data/test/console +8 -0
  23. data/test/database.yml +22 -0
  24. data/test/finder_test.rb +443 -0
  25. data/test/fixtures/admin.rb +3 -0
  26. data/test/fixtures/developer.rb +13 -0
  27. data/test/fixtures/developers_projects.yml +13 -0
  28. data/test/fixtures/project.rb +15 -0
  29. data/test/fixtures/projects.yml +6 -0
  30. data/test/fixtures/replies.yml +29 -0
  31. data/test/fixtures/reply.rb +7 -0
  32. data/test/fixtures/schema.rb +38 -0
  33. data/test/fixtures/topic.rb +6 -0
  34. data/test/fixtures/topics.yml +30 -0
  35. data/test/fixtures/user.rb +2 -0
  36. data/test/fixtures/users.yml +35 -0
  37. data/test/helper.rb +37 -0
  38. data/test/lib/activerecord_test_case.rb +36 -0
  39. data/test/lib/activerecord_test_connector.rb +69 -0
  40. data/test/lib/load_fixtures.rb +11 -0
  41. data/test/lib/view_test_process.rb +165 -0
  42. data/test/tasks.rake +59 -0
  43. data/test/view_test.rb +363 -0
  44. metadata +140 -0
data/CHANGELOG.rdoc ADDED
@@ -0,0 +1,94 @@
1
+ == 2.3.3, released 2008-08-29
2
+
3
+ * Ensure that paginate_by_sql doesn't change the original SQL query.
4
+ * RDoc love (now live at http://mislav.caboo.se/static/will_paginate/doc/)
5
+ * Rename :prev_label to :previous_label for consistency. old name still functions but is deprecated
6
+ * ActiveRecord 2.1: Remove :include option from count_all query when it's possible.
7
+
8
+ == 2.3.2, released 2008-05-16
9
+
10
+ * Fixed LinkRenderer#stringified_merge by removing "return" from iterator block
11
+ * Ensure that 'href' values in pagination links are escaped URLs
12
+
13
+ == 2.3.1, released 2008-05-04
14
+
15
+ * Fixed page numbers not showing with custom routes and implicit first page
16
+ * Try to use Hanna for documentation (falls back to default RDoc template if not)
17
+
18
+ == 2.3.0, released 2008-04-29
19
+
20
+ * Changed LinkRenderer to receive collection, options and reference to view template NOT in
21
+ constructor, but with the #prepare method. This is a step towards supporting passing of
22
+ LinkRenderer (or subclass) instances that may be preconfigured in some way
23
+ * LinkRenderer now has #page_link and #page_span methods for easier customization of output in
24
+ subclasses
25
+ * Changed page_entries_info() method to adjust its output according to humanized class name of
26
+ collection items. Override this with :entry_name parameter (singular).
27
+
28
+ page_entries_info(@posts)
29
+ #-> "Displaying all 12 posts"
30
+ page_entries_info(@posts, :entry_name => 'item')
31
+ #-> "Displaying all 12 items"
32
+
33
+ == 2.2.3, released 2008-04-26
34
+
35
+ * will_paginate gem is no longer published on RubyForge, but on
36
+ gems.github.com:
37
+
38
+ gem sources -a http://gems.github.com/ (you only need to do this once)
39
+ gem install mislav-will_paginate
40
+
41
+ * extract reusable pagination testing stuff into WillPaginate::View
42
+ * rethink the page URL construction mechanizm to be more bulletproof when
43
+ combined with custom routing for page parameter
44
+ * test that anchor parameter can be used in pagination links
45
+
46
+ == 2.2.2, released 2008-04-21
47
+
48
+ * Add support for page parameter in custom routes like "/foo/page/2"
49
+ * Change output of "page_entries_info" on single-page collection and erraneous
50
+ output with empty collection as reported by Tim Chater
51
+
52
+ == 2.2.1, released 2008-04-08
53
+
54
+ * take less risky path when monkeypatching named_scope; fix that it no longer
55
+ requires ActiveRecord::VERSION
56
+ * use strings in "respond_to?" calls to work around a bug in acts_as_ferret
57
+ stable (ugh)
58
+ * add rake release task
59
+
60
+
61
+ == 2.2.0, released 2008-04-07
62
+
63
+ === API changes
64
+ * Rename WillPaginate::Collection#page_count to "total_pages" for consistency.
65
+ If you implemented this interface, change your implementation accordingly.
66
+ * Remove old, deprecated style of calling Array#paginate as "paginate(page,
67
+ per_page)". If you want to specify :page, :per_page or :total_entries, use a
68
+ parameter hash.
69
+ * Rename LinkRenderer#url_options to "url_for" and drastically optimize it
70
+
71
+ === View changes
72
+ * Added "prev_page" and "next_page" CSS classes on previous/next page buttons
73
+ * Add examples of pagination links styling in "examples/index.html"
74
+ * Change gap in pagination links from "..." to
75
+ "<span class="gap">&hellip;</span>".
76
+ * Add "paginated_section", a block helper that renders pagination both above and
77
+ below content in the block
78
+ * Add rel="prev|next|start" to page links
79
+
80
+ === Other
81
+
82
+ * Add ability to opt-in for Rails 2.1 feature "named_scope" by calling
83
+ WillPaginate.enable_named_scope (tested in Rails 1.2.6 and 2.0.2)
84
+ * Support complex page parameters like "developers[page]"
85
+ * Move Array#paginate definition to will_paginate/array.rb. You can now easily
86
+ use pagination on arrays outside of Rails:
87
+
88
+ gem 'will_paginate'
89
+ require 'will_paginate/array'
90
+
91
+ * Add "paginated_each" method for iterating through every record by loading only
92
+ one page of records at the time
93
+ * Rails 2: Rescue from WillPaginate::InvalidPage error with 404 Not Found by
94
+ default
data/LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2007 PJ Hyett and Mislav Marohnić
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7
+ the Software, and to permit persons to whom the Software is furnished to do so,
8
+ subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
15
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,106 @@
1
+ = WillPaginate
2
+
3
+ Pagination is just limiting the number of records displayed. Why should you let
4
+ it get in your way while developing, then? This plugin makes magic happen. Did
5
+ you ever want to be able to do just this on a model:
6
+
7
+ Post.paginate :page => 1, :order => 'created_at DESC'
8
+
9
+ ... and then render the page links with a single view helper? Well, now you
10
+ can.
11
+
12
+ Some resources to get you started:
13
+
14
+ * {Installation instructions}[http://github.com/mislav/will_paginate/wikis/installation]
15
+ on {the wiki}[http://github.com/mislav/will_paginate/wikis]
16
+ * Your mind reels with questions? Join our
17
+ {Google group}[http://groups.google.com/group/will_paginate].
18
+ * {How to report bugs}[http://github.com/mislav/will_paginate/wikis/report-bugs]
19
+
20
+
21
+ == Example usage
22
+
23
+ Use a paginate finder in the controller:
24
+
25
+ @posts = Post.paginate_by_board_id @board.id, :page => params[:page], :order => 'updated_at DESC'
26
+
27
+ Yeah, +paginate+ works just like +find+ -- it just doesn't fetch all the
28
+ records. Don't forget to tell it which page you want, or it will complain!
29
+ Read more on WillPaginate::Finder::ClassMethods.
30
+
31
+ Render the posts in your view like you would normally do. When you need to render
32
+ pagination, just stick this in:
33
+
34
+ <%= will_paginate @posts %>
35
+
36
+ You're done. (You can find the option list at WillPaginate::ViewHelpers.)
37
+
38
+ How does it know how much items to fetch per page? It asks your model by calling
39
+ its <tt>per_page</tt> class method. You can define it like this:
40
+
41
+ class Post < ActiveRecord::Base
42
+ cattr_reader :per_page
43
+ @@per_page = 50
44
+ end
45
+
46
+ ... or like this:
47
+
48
+ class Post < ActiveRecord::Base
49
+ def self.per_page
50
+ 50
51
+ end
52
+ end
53
+
54
+ ... or don't worry about it at all. WillPaginate defines it to be <b>30</b> by default.
55
+ But you can always specify the count explicitly when calling +paginate+:
56
+
57
+ @posts = Post.paginate :page => params[:page], :per_page => 50
58
+
59
+ The +paginate+ finder wraps the original finder and returns your resultset that now has
60
+ some new properties. You can use the collection as you would with any ActiveRecord
61
+ resultset. WillPaginate view helpers also need that object to be able to render pagination:
62
+
63
+ <ol>
64
+ <% for post in @posts -%>
65
+ <li>Render `post` in some nice way.</li>
66
+ <% end -%>
67
+ </ol>
68
+
69
+ <p>Now let's render us some pagination!</p>
70
+ <%= will_paginate @posts %>
71
+
72
+ More detailed documentation:
73
+
74
+ * WillPaginate::Finder::ClassMethods for pagination on your models;
75
+ * WillPaginate::ViewHelpers for your views.
76
+
77
+
78
+ == Authors and credits
79
+
80
+ Authors:: Mislav Marohnić, PJ Hyett
81
+ Original announcement:: http://errtheblog.com/post/929
82
+ Original PHP source:: http://www.strangerstudios.com/sandbox/pagination/diggstyle.php
83
+
84
+ All these people helped making will_paginate what it is now with their code
85
+ contributions or just simply awesome ideas:
86
+
87
+ Chris Wanstrath, Dr. Nic Williams, K. Adam Christensen, Mike Garey, Bence
88
+ Golda, Matt Aimonetti, Charles Brian Quinn, Desi McAdam, James Coglan, Matijs
89
+ van Zuijlen, Maria, Brendan Ribera, Todd Willey, Bryan Helmkamp, Jan Berkel,
90
+ Lourens Naudé, Rick Olson, Russell Norris, Piotr Usewicz, Chris Eppstein.
91
+
92
+
93
+ == Usable pagination in the UI
94
+
95
+ There are some CSS styles to get you started in the "examples/" directory. They
96
+ are {showcased online here}[http://mislav.caboo.se/static/will_paginate/].
97
+
98
+ More reading about pagination as design pattern:
99
+
100
+ * {Pagination 101}[http://kurafire.net/log/archive/2007/06/22/pagination-101]
101
+ * {Pagination gallery}[http://www.smashingmagazine.com/2007/11/16/pagination-gallery-examples-and-good-practices/]
102
+ * {Pagination on Yahoo Design Pattern Library}[http://developer.yahoo.com/ypatterns/parent.php?pattern=pagination]
103
+
104
+ Want to discuss, request features, ask questions? Join the
105
+ {Google group}[http://groups.google.com/group/will_paginate].
106
+
data/Rakefile ADDED
@@ -0,0 +1,62 @@
1
+ require 'rubygems'
2
+ begin
3
+ hanna_dir = '/Users/mislav/Projects/Hanna/lib'
4
+ $:.unshift hanna_dir if File.exists? hanna_dir
5
+ require 'hanna/rdoctask'
6
+ rescue LoadError
7
+ require 'rake'
8
+ require 'rake/rdoctask'
9
+ end
10
+ load 'test/tasks.rake'
11
+
12
+ desc 'Default: run unit tests.'
13
+ task :default => :test
14
+
15
+ desc 'Generate RDoc documentation for the will_paginate plugin.'
16
+ Rake::RDocTask.new(:rdoc) do |rdoc|
17
+ rdoc.rdoc_files.include('README.rdoc', 'LICENSE', 'CHANGELOG.rdoc').
18
+ include('lib/**/*.rb').
19
+ exclude('lib/will_paginate/named_scope*').
20
+ exclude('lib/will_paginate/array.rb').
21
+ exclude('lib/will_paginate/version.rb')
22
+
23
+ rdoc.main = "README.rdoc" # page to start on
24
+ rdoc.title = "will_paginate documentation"
25
+
26
+ rdoc.rdoc_dir = 'doc' # rdoc output folder
27
+ rdoc.options << '--inline-source' << '--charset=UTF-8'
28
+ rdoc.options << '--webcvs=http://github.com/mislav/will_paginate/tree/master/'
29
+ end
30
+
31
+ desc %{Update ".manifest" with the latest list of project filenames. Respect\
32
+ .gitignore by excluding everything that git ignores. Update `files` and\
33
+ `test_files` arrays in "*.gemspec" file if it's present.}
34
+ task :manifest do
35
+ list = Dir['**/*'].sort
36
+ spec_file = Dir['*.gemspec'].first
37
+ list -= [spec_file] if spec_file
38
+
39
+ File.read('.gitignore').each_line do |glob|
40
+ glob = glob.chomp.sub(/^\//, '')
41
+ list -= Dir[glob]
42
+ list -= Dir["#{glob}/**/*"] if File.directory?(glob) and !File.symlink?(glob)
43
+ puts "excluding #{glob}"
44
+ end
45
+
46
+ if spec_file
47
+ spec = File.read spec_file
48
+ spec.gsub! /^(\s* s.(test_)?files \s* = \s* )( \[ [^\]]* \] | %w\( [^)]* \) )/mx do
49
+ assignment = $1
50
+ bunch = $2 ? list.grep(/^test\//) : list
51
+ '%s%%w(%s)' % [assignment, bunch.join(' ')]
52
+ end
53
+
54
+ File.open(spec_file, 'w') {|f| f << spec }
55
+ end
56
+ File.open('.manifest', 'w') {|f| f << list.join("\n") }
57
+ end
58
+
59
+ task :examples do
60
+ %x(haml examples/index.haml examples/index.html)
61
+ %x(sass examples/pagination.sass examples/pagination.css)
62
+ end
Binary file
@@ -0,0 +1,69 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %title Samples of pagination styling for will_paginate
5
+ %link{ :rel => 'stylesheet', :type => 'text/css', :href => 'pagination.css' }
6
+ %style{ :type => 'text/css' }
7
+ :sass
8
+ html
9
+ :margin 0
10
+ :padding 0
11
+ :background #999
12
+ :font normal 76% "Lucida Grande", Verdana, Helvetica, sans-serif
13
+ body
14
+ :margin 2em
15
+ :padding 2em
16
+ :border 2px solid gray
17
+ :background white
18
+ :color #222
19
+ h1
20
+ :font-size 2em
21
+ :font-weight normal
22
+ :margin 0 0 1em 0
23
+ h2
24
+ :font-size 1.4em
25
+ :margin 1em 0 .5em 0
26
+ pre
27
+ :font-size 13px
28
+ :font-family Monaco, "DejaVu Sans Mono", "Bitstream Vera Mono", "Courier New", monospace
29
+
30
+ - pagination = '<span class="disabled prev_page">&laquo; Previous</span> <span class="current">1</span> <a href="./?page=2" rel="next">2</a> <a href="./?page=3">3</a> <a href="./?page=4">4</a> <a href="./?page=5">5</a> <a href="./?page=6">6</a> <a href="./?page=7">7</a> <a href="./?page=8">8</a> <a href="./?page=9">9</a> <span class="gap">&hellip;</span> <a href="./?page=29">29</a> <a href="./?page=30">30</a> <a href="./?page=2" rel="next" class="next_page">Next &raquo;</a>'
31
+ - pagination_no_page_links = '<span class="disabled prev_page">&laquo; Previous</span> <a href="./?page=2" rel="next" class="next_page">Next &raquo;</a>'
32
+
33
+ %body
34
+ %h1 Samples of pagination styling for will_paginate
35
+ %p
36
+ Find these styles in <b>"examples/pagination.css"</b> of <i>will_paginate</i> library.
37
+ There is a Sass version of it for all you sassy people.
38
+ %p
39
+ Read about good rules for pagination:
40
+ %a{ :href => 'http://kurafire.net/log/archive/2007/06/22/pagination-101' } Pagination 101
41
+ %p
42
+ %em Warning:
43
+ page links below don't lead anywhere (so don't click on them).
44
+
45
+ %h2 Unstyled pagination <span style="font-weight:normal">(<i>ewww!</i>)</span>
46
+ %div= pagination
47
+
48
+ %h2 Digg.com
49
+ .digg_pagination= pagination
50
+
51
+ %h2 Digg-style, no page links
52
+ .digg_pagination= pagination_no_page_links
53
+ %p Code that renders this:
54
+ %pre= '<code>%s</code>' % %[<%= will_paginate @posts, :page_links => false %>].gsub('<', '&lt;').gsub('>', '&gt;')
55
+
56
+ %h2 Digg-style, extra content
57
+ .digg_pagination
58
+ .page_info Displaying entries <b>1&nbsp;-&nbsp;6</b> of <b>180</b> in total
59
+ = pagination
60
+ %p Code that renders this:
61
+ %pre= '<code>%s</code>' % %[<div class="digg_pagination">\n <div clas="page_info">\n <%= page_entries_info @posts %>\n </div>\n <%= will_paginate @posts, :container => false %>\n</div>].gsub('<', '&lt;').gsub('>', '&gt;')
62
+
63
+ %h2 Apple.com store
64
+ .apple_pagination= pagination
65
+
66
+ %h2 Flickr.com
67
+ .flickr_pagination
68
+ = pagination
69
+ .page_info (118 photos)
@@ -0,0 +1,92 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html>
3
+ </html>
4
+ <head>
5
+ <title>Samples of pagination styling for will_paginate</title>
6
+ <link href='pagination.css' rel='stylesheet' type='text/css' />
7
+ <style type='text/css'>
8
+ html {
9
+ margin: 0;
10
+ padding: 0;
11
+ background: #999;
12
+ font: normal 76% "Lucida Grande", Verdana, Helvetica, sans-serif; }
13
+
14
+ body {
15
+ margin: 2em;
16
+ padding: 2em;
17
+ border: 2px solid gray;
18
+ background: white;
19
+ color: #222; }
20
+
21
+ h1 {
22
+ font-size: 2em;
23
+ font-weight: normal;
24
+ margin: 0 0 1em 0; }
25
+
26
+ h2 {
27
+ font-size: 1.4em;
28
+ margin: 1em 0 .5em 0; }
29
+
30
+ pre {
31
+ font-size: 13px;
32
+ font-family: Monaco, "DejaVu Sans Mono", "Bitstream Vera Mono", "Courier New", monospace; }
33
+ </style>
34
+ </head>
35
+ <body>
36
+ <h1>Samples of pagination styling for will_paginate</h1>
37
+ <p>
38
+ Find these styles in <b>"examples/pagination.css"</b> of <i>will_paginate</i> library.
39
+ There is a Sass version of it for all you sassy people.
40
+ </p>
41
+ <p>
42
+ Read about good rules for pagination:
43
+ <a href='http://kurafire.net/log/archive/2007/06/22/pagination-101'>Pagination 101</a>
44
+ </p>
45
+ <p>
46
+ <em>Warning:</em>
47
+ page links below don't lead anywhere (so don't click on them).
48
+ </p>
49
+ <h2>
50
+ Unstyled pagination <span style="font-weight:normal">(<i>ewww!</i>)</span>
51
+ </h2>
52
+ <div>
53
+ <span class="disabled prev_page">&laquo; Previous</span> <span class="current">1</span> <a href="./?page=2" rel="next">2</a> <a href="./?page=3">3</a> <a href="./?page=4">4</a> <a href="./?page=5">5</a> <a href="./?page=6">6</a> <a href="./?page=7">7</a> <a href="./?page=8">8</a> <a href="./?page=9">9</a> <span class="gap">&hellip;</span> <a href="./?page=29">29</a> <a href="./?page=30">30</a> <a href="./?page=2" rel="next" class="next_page">Next &raquo;</a>
54
+ </div>
55
+ <h2>Digg.com</h2>
56
+ <div class='digg_pagination'>
57
+ <span class="disabled prev_page">&laquo; Previous</span> <span class="current">1</span> <a href="./?page=2" rel="next">2</a> <a href="./?page=3">3</a> <a href="./?page=4">4</a> <a href="./?page=5">5</a> <a href="./?page=6">6</a> <a href="./?page=7">7</a> <a href="./?page=8">8</a> <a href="./?page=9">9</a> <span class="gap">&hellip;</span> <a href="./?page=29">29</a> <a href="./?page=30">30</a> <a href="./?page=2" rel="next" class="next_page">Next &raquo;</a>
58
+ </div>
59
+ <h2>Digg-style, no page links</h2>
60
+ <div class='digg_pagination'>
61
+ <span class="disabled prev_page">&laquo; Previous</span> <a href="./?page=2" rel="next" class="next_page">Next &raquo;</a>
62
+ </div>
63
+ <p>Code that renders this:</p>
64
+ <pre>
65
+ <code>&lt;%= will_paginate @posts, :page_links =&gt; false %&gt;</code>
66
+ </pre>
67
+ <h2>Digg-style, extra content</h2>
68
+ <div class='digg_pagination'>
69
+ <div class='page_info'>
70
+ Displaying entries <b>1&nbsp;-&nbsp;6</b> of <b>180</b> in total
71
+ </div>
72
+ <span class="disabled prev_page">&laquo; Previous</span> <span class="current">1</span> <a href="./?page=2" rel="next">2</a> <a href="./?page=3">3</a> <a href="./?page=4">4</a> <a href="./?page=5">5</a> <a href="./?page=6">6</a> <a href="./?page=7">7</a> <a href="./?page=8">8</a> <a href="./?page=9">9</a> <span class="gap">&hellip;</span> <a href="./?page=29">29</a> <a href="./?page=30">30</a> <a href="./?page=2" rel="next" class="next_page">Next &raquo;</a>
73
+ </div>
74
+ <p>Code that renders this:</p>
75
+ <pre>
76
+ <code>&lt;div class="digg_pagination"&gt;
77
+ &lt;div clas="page_info"&gt;
78
+ &lt;%= page_entries_info @posts %&gt;
79
+ &lt;/div&gt;
80
+ &lt;%= will_paginate @posts, :container =&gt; false %&gt;
81
+ &lt;/div&gt;</code>
82
+ </pre>
83
+ <h2>Apple.com store</h2>
84
+ <div class='apple_pagination'>
85
+ <span class="disabled prev_page">&laquo; Previous</span> <span class="current">1</span> <a href="./?page=2" rel="next">2</a> <a href="./?page=3">3</a> <a href="./?page=4">4</a> <a href="./?page=5">5</a> <a href="./?page=6">6</a> <a href="./?page=7">7</a> <a href="./?page=8">8</a> <a href="./?page=9">9</a> <span class="gap">&hellip;</span> <a href="./?page=29">29</a> <a href="./?page=30">30</a> <a href="./?page=2" rel="next" class="next_page">Next &raquo;</a>
86
+ </div>
87
+ <h2>Flickr.com</h2>
88
+ <div class='flickr_pagination'>
89
+ <span class="disabled prev_page">&laquo; Previous</span> <span class="current">1</span> <a href="./?page=2" rel="next">2</a> <a href="./?page=3">3</a> <a href="./?page=4">4</a> <a href="./?page=5">5</a> <a href="./?page=6">6</a> <a href="./?page=7">7</a> <a href="./?page=8">8</a> <a href="./?page=9">9</a> <span class="gap">&hellip;</span> <a href="./?page=29">29</a> <a href="./?page=30">30</a> <a href="./?page=2" rel="next" class="next_page">Next &raquo;</a>
90
+ <div class='page_info'>(118 photos)</div>
91
+ </div>
92
+ </body>
@@ -0,0 +1,90 @@
1
+ .digg_pagination {
2
+ background: white;
3
+ /* self-clearing method: */ }
4
+ .digg_pagination a, .digg_pagination span {
5
+ padding: .2em .5em;
6
+ display: block;
7
+ float: left;
8
+ margin-right: 1px; }
9
+ .digg_pagination span.disabled {
10
+ color: #999;
11
+ border: 1px solid #DDD; }
12
+ .digg_pagination span.current {
13
+ font-weight: bold;
14
+ background: #2E6AB1;
15
+ color: white;
16
+ border: 1px solid #2E6AB1; }
17
+ .digg_pagination a {
18
+ text-decoration: none;
19
+ color: #105CB6;
20
+ border: 1px solid #9AAFE5; }
21
+ .digg_pagination a:hover, .digg_pagination a:focus {
22
+ color: #003;
23
+ border-color: #003; }
24
+ .digg_pagination .page_info {
25
+ background: #2E6AB1;
26
+ color: white;
27
+ padding: .4em .6em;
28
+ width: 22em;
29
+ margin-bottom: .3em;
30
+ text-align: center; }
31
+ .digg_pagination .page_info b {
32
+ color: #003;
33
+ background: #6aa6ed;
34
+ padding: .1em .25em; }
35
+ .digg_pagination:after {
36
+ content: ".";
37
+ display: block;
38
+ height: 0;
39
+ clear: both;
40
+ visibility: hidden; }
41
+ * html .digg_pagination {
42
+ height: 1%; }
43
+ *:first-child+html .digg_pagination {
44
+ overflow: hidden; }
45
+
46
+ .apple_pagination {
47
+ background: #F1F1F1;
48
+ border: 1px solid #E5E5E5;
49
+ text-align: center;
50
+ padding: 1em; }
51
+ .apple_pagination a, .apple_pagination span {
52
+ padding: .2em .3em; }
53
+ .apple_pagination span.disabled {
54
+ color: #AAA; }
55
+ .apple_pagination span.current {
56
+ font-weight: bold;
57
+ background: transparent url(apple-circle.gif) no-repeat 50% 50%; }
58
+ .apple_pagination a {
59
+ text-decoration: none;
60
+ color: black; }
61
+ .apple_pagination a:hover, .apple_pagination a:focus {
62
+ text-decoration: underline; }
63
+
64
+ .flickr_pagination {
65
+ text-align: center;
66
+ padding: .3em; }
67
+ .flickr_pagination a, .flickr_pagination span {
68
+ padding: .2em .5em; }
69
+ .flickr_pagination span.disabled {
70
+ color: #AAA; }
71
+ .flickr_pagination span.current {
72
+ font-weight: bold;
73
+ color: #FF0084; }
74
+ .flickr_pagination a {
75
+ border: 1px solid #DDDDDD;
76
+ color: #0063DC;
77
+ text-decoration: none; }
78
+ .flickr_pagination a:hover, .flickr_pagination a:focus {
79
+ border-color: #003366;
80
+ background: #0063DC;
81
+ color: white; }
82
+ .flickr_pagination .page_info {
83
+ color: #aaa;
84
+ padding-top: .8em; }
85
+ .flickr_pagination .prev_page, .flickr_pagination .next_page {
86
+ border-width: 2px; }
87
+ .flickr_pagination .prev_page {
88
+ margin-right: 1em; }
89
+ .flickr_pagination .next_page {
90
+ margin-left: 1em; }
@@ -0,0 +1,91 @@
1
+ .digg_pagination
2
+ :background white
3
+ a, span
4
+ :padding .2em .5em
5
+ :display block
6
+ :float left
7
+ :margin-right 1px
8
+ span.disabled
9
+ :color #999
10
+ :border 1px solid #DDD
11
+ span.current
12
+ :font-weight bold
13
+ :background #2E6AB1
14
+ :color white
15
+ :border 1px solid #2E6AB1
16
+ a
17
+ :text-decoration none
18
+ :color #105CB6
19
+ :border 1px solid #9AAFE5
20
+ &:hover, &:focus
21
+ :color #003
22
+ :border-color #003
23
+ .page_info
24
+ :background #2E6AB1
25
+ :color white
26
+ :padding .4em .6em
27
+ :width 22em
28
+ :margin-bottom .3em
29
+ :text-align center
30
+ b
31
+ :color #003
32
+ :background = #2E6AB1 + 60
33
+ :padding .1em .25em
34
+
35
+ /* self-clearing method:
36
+ &:after
37
+ :content "."
38
+ :display block
39
+ :height 0
40
+ :clear both
41
+ :visibility hidden
42
+ * html &
43
+ :height 1%
44
+ *:first-child+html &
45
+ :overflow hidden
46
+
47
+ .apple_pagination
48
+ :background #F1F1F1
49
+ :border 1px solid #E5E5E5
50
+ :text-align center
51
+ :padding 1em
52
+ a, span
53
+ :padding .2em .3em
54
+ span.disabled
55
+ :color #AAA
56
+ span.current
57
+ :font-weight bold
58
+ :background transparent url(apple-circle.gif) no-repeat 50% 50%
59
+ a
60
+ :text-decoration none
61
+ :color black
62
+ &:hover, &:focus
63
+ :text-decoration underline
64
+
65
+ .flickr_pagination
66
+ :text-align center
67
+ :padding .3em
68
+ a, span
69
+ :padding .2em .5em
70
+ span.disabled
71
+ :color #AAA
72
+ span.current
73
+ :font-weight bold
74
+ :color #FF0084
75
+ a
76
+ :border 1px solid #DDDDDD
77
+ :color #0063DC
78
+ :text-decoration none
79
+ &:hover, &:focus
80
+ :border-color #003366
81
+ :background #0063DC
82
+ :color white
83
+ .page_info
84
+ :color #aaa
85
+ :padding-top .8em
86
+ .prev_page, .next_page
87
+ :border-width 2px
88
+ .prev_page
89
+ :margin-right 1em
90
+ .next_page
91
+ :margin-left 1em
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'will_paginate'
@@ -0,0 +1,16 @@
1
+ require 'will_paginate/collection'
2
+
3
+ # http://www.desimcadam.com/archives/8
4
+ Array.class_eval do
5
+ def paginate(options = {})
6
+ raise ArgumentError, "parameter hash expected (got #{options.inspect})" unless Hash === options
7
+
8
+ WillPaginate::Collection.create(
9
+ options[:page] || 1,
10
+ options[:per_page] || 30,
11
+ options[:total_entries] || self.length
12
+ ) { |pager|
13
+ pager.replace self[pager.offset, pager.per_page].to_a
14
+ }
15
+ end
16
+ end