Flickrの出力をページ化する

Flickrはリクエストの1ページだけを送ってくる。Flickrへのリクエストのoptionsを作ったときには,ページあたり30個のイメージを意味する:per_page=>30というエントリがあった。searchボタンをクリックしたときにcreate(document.keyword.value, 1)を呼び出すとき,2番目の引数はFlickrにクエストの1ページ目を要求している。だから任意のページを得るためには,createメソッドにその値を与えれば,該当のページを渡してくる。再利用するって言ったでしょ! generate_pagesを実装するには,そのページへのリンクをレンダリングすればよく,hook_page_eventsを実装するには,各ページリンクに指定のページでcreateを呼び出すようにフックする必要がある。簡単だね。

def generate_pages 
  render = "" 
  if @flickr['photos']['total'].to_i > 0 
    num_pages = @flickr['photos']['pages'].to_i > 10 ? 10 : @flickr['photos']['pages'].to_i 
    num_pages.times { |i| render += page(i + 1) } if num_pages > 1 
  end 
  render 
end 

def page(i) 
  tag(:a, :href => 'javascript:void(0)', :id => "#{i}") { "#{i}" } 
end 

def hook_page_events(div) 
  $app.document.get_element_by_id(div.to_s.to_clr_string).children.each do |child| 
    if child.id.to_s.to_i == @current_page 
      child.css_class = "active"  
    else 
      child.onclick { |s, args| $app.create(@tags, child.id.to_s.to_i) } 
    end 
  end 
end

あとは保存して,リロードして,検索して,歌って,踊って… きれいなページングアクションが見られるはずだ。