# File lib/ferret/browser.rb, line 126
126:     def paginate(idx, max, url, &b)
127:       return '' if max == 0
128:       url = url.gsub(%r{^/?(.*?)/?$}, '\1')
129:       b ||= lambda{}
130:       link = lambda {|*args|
131:         i, title, text = args
132:         "<a href=\"/#{url}/#{i}#{'?' + @query_string if @query_string}\" " +
133:          "#{'onclick="return false;"' if (i == idx)} " +
134:          "class=\"#{'disabled ' if (i == idx)}#{b.call(i)}\" " +
135:          "title=\"#{title||"Go to page #{i}"}\">#{text||i}</a>"
136:       }
137:       res = '<div class="nav">'
138:       if (idx > 0)
139:         res << link.call(idx - 1, "Go to previous page", "&#171; Previous")
140:       else
141:         res << "<a href=\"/#{url}/0\" onclick=\"return false;\" " +
142:                 "class=\"disabled\" title=\"Disabled\">&#171; Previous</a>"
143:       end
144:       if idx < 10
145:         idx.times {|i| res << link.call(i)}
146:       else
147:         (0..2).each {|i| res << link.call(i)}
148:         res << '&nbsp;&#8230;&nbsp;'
149:         ((idx-4)...idx).each {|i| res << link.call(i)}
150:       end
151:       res << link.call(idx, 'Current Page')
152:       if idx > (max - 10)
153:         ((idx+1)...max).each {|i| res << link.call(i)}
154:       else
155:         ((idx+1)..(idx+4)).each {|i| res << link.call(i)}
156:         res << '&nbsp;&#8230;&nbsp;'
157:         ((max-3)...max).each {|i| res << link.call(i)}
158:       end
159:       if (idx < (max - 1))
160:         res << link.call(idx + 1, "Go to next page", "Next &#187;")
161:       else
162:         res << "<a href=\"/#{url}/#{max-1}\" onclick=\"return false;\" " +
163:                 "class=\"disabled\" title=\"Disabled\"}\">Next &#187;</a>"
164:       end
165:       res << '</div>'
166:     end