Changeset 1198

Show
Ignore:
Timestamp:
2008-10-01 20:58:40 (3 months ago)
Author:
gaspard
Message:

commit 865f2478819e96c692dd3d52438d6bac606809fa
Author: Gaspard Bucher <gaspard@teti.ch>

Implemented remote update for pagination ([link] tag). Refs #211.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/parser/lib/rules/zena.rb

    r1197 r1198  
    17381738        link_to_update(target) 
    17391739      else 
    1740         link_to_node 
    1741       end 
    1742     end 
    1743      
    1744     def link_to_node(opts = {}) 
    1745       url_params   = opts[:url_params] || {} 
    1746       default_text = opts[:default_text] 
     1740        make_link 
     1741      end 
     1742    end 
     1743     
     1744    def make_link(options = {}) 
     1745      url_params   = options[:url_params] || {} 
     1746      default_text = options[:default_text] 
    17471747      params = @params.dup 
    17481748       
    17491749      opts = {} 
     1750      if upd = params.delete(:update) 
     1751        return unless remote_target = find_target(upd) 
     1752      else 
     1753        # use closest block parent 
     1754        remote_target = ancestor('block') 
     1755      end 
    17501756       
    17511757      if href = params.delete(:href) 
     
    18051811      end 
    18061812       
    1807       url_params.each do |k,v| 
    1808         if k == :date 
    1809           if v == 'current_date' 
    1810             url_params[k] = current_date 
    1811           elsif v =~ /\A\d/ 
    1812             url_params[k] = v.inspect 
    1813           elsif v =~ /\[/ 
     1813      # TODO: merge these two url_params cleanup things into something cleaner. 
     1814      if remote_target 
     1815        # ajax 
     1816        url_params_list = [] 
     1817        url_params.each do |k,v| 
     1818          if k == :date 
     1819            if v == 'current_date' 
     1820              str = "\#{#{current_date}}" 
     1821            elsif v =~ /\A\d/ 
     1822              str = CGI.escape(v.gsub('"','')) 
     1823            elsif v =~ /\[/ 
     1824              attribute, static = parse_attributes_in_value(v.gsub('"',''), :erb => false) 
     1825              str = static ? CGI.escape(attribute) : "\#{CGI.escape(\"#{attribute}\")}" 
     1826            else 
     1827              str = "\#{CGI.escape(#{node_attribute(v)})}" 
     1828            end 
     1829          else   
     1830            attribute, static = parse_attributes_in_value(v.gsub('"',''), :erb => false) 
     1831            str = static ? CGI.escape(attribute) : "\#{CGI.escape(\"#{attribute}\")}" 
     1832          end 
     1833          url_params_list << "#{k.gsub('"','')}=#{str}" 
     1834        end 
     1835        pre_space + link_to_update(remote_target, :node_id => "#{lnode}.zip", :url_params => url_params_list, :default_text => default_text, :html_params => html_params) 
     1836      else 
     1837        # direct link 
     1838        url_params.each do |k,v| 
     1839          if k == :date 
     1840            if v == 'current_date' 
     1841              url_params[k] = current_date 
     1842            elsif v =~ /\A\d/ 
     1843              url_params[k] = v.inspect 
     1844            elsif v =~ /\[/ 
     1845              attribute, static = parse_attributes_in_value(v.gsub('"',''), :erb => false) 
     1846              url_params[k] = "\"#{attribute}\"" 
     1847            else 
     1848              url_params[k] = node_attribute(v) 
     1849            end 
     1850          else   
    18141851            attribute, static = parse_attributes_in_value(v.gsub('"',''), :erb => false) 
    18151852            url_params[k] = "\"#{attribute}\"" 
    1816           else 
    1817             url_params[k] = node_attribute(v) 
    1818           end 
    1819         else   
    1820           attribute, static = parse_attributes_in_value(v.gsub('"',''), :erb => false) 
    1821           url_params[k] = "\"#{attribute}\"" 
    1822         end 
    1823       end 
    1824        
    1825       opts_str = '' 
    1826       opts.merge!(url_params) 
    1827       opts.keys.sort {|a,b| a.to_s <=> b.to_s }.each do |k| 
    1828         opts_str << ",:#{k.to_s.gsub(/[^a-z_A-Z_]/,'')}=>#{opts[k]}" 
    1829       end 
    1830          
    1831       pre_space + "<a#{params_to_html(html_params)} href='<%= zen_path(#{lnode}#{opts_str}) %>'>#{text_for_link(default_text)}</a>" 
     1853          end 
     1854        end 
     1855         
     1856        url_params.merge!(opts) 
     1857         
     1858        opts_str = '' 
     1859        url_params.keys.sort {|a,b| a.to_s <=> b.to_s }.each do |k| 
     1860          opts_str << ",:#{k.to_s.gsub(/[^a-z_A-Z_]/,'')}=>#{url_params[k]}" 
     1861        end 
     1862         
     1863        pre_space + "<a#{params_to_html(html_params)} href='<%= zen_path(#{lnode}#{opts_str}) %>'>#{text_for_link(default_text)}</a>" 
     1864      end 
    18321865    end 
    18331866     
     
    18401873        @context[:vars] ||= [] 
    18411874        @context[:vars] << "#{pagination_key}_previous" 
    1842         out link_to_node(:default_text => "<%= set_#{pagination_key}_previous %>", :url_params => {pagination_key => "[#{pagination_key}_previous]"}) 
     1875        out make_link(:default_text => "<%= set_#{pagination_key}_previous %>", :url_params => {pagination_key => "[#{pagination_key}_previous]"}) 
    18431876        out "<% end -%>" 
    18441877      when 'next' 
     
    18461879        @context[:vars] ||= [] 
    18471880        @context[:vars] << "#{pagination_key}_next" 
    1848         out link_to_node(:default_text => "<%= set_#{pagination_key}_next %>", :url_params => {pagination_key => "[#{pagination_key}_next]"}) 
     1881        out make_link(:default_text => "<%= set_#{pagination_key}_next %>", :url_params => {pagination_key => "[#{pagination_key}_next]"}) 
    18491882        out "<% end -%>" 
    18501883      when 'list' 
    1851         "pagination list helper..." 
     1884        # FIXME: implement page numbers (#211). 
     1885        parser_error("page numbers not implemented yet") 
    18521886      else 
    18531887        parser_error("unkown 'page' option #{@params[:page].inspect} should be ('previous', 'next' or 'list')") 
     
    29152949       
    29162950      html_params = opts[:html_params] || {} 
     2951      node_id = opts[:node_id] || self.node_id 
    29172952       
    29182953      url    = opts[:url]    || "/#{base_class.to_s.pluralize.underscore}/\#{#{node_id}}#{method == :get ? '/zafu' : ''}" 
  • trunk/test/fixtures/files/Node-test.zafu

    r1197 r1198  
    3939</ul> 
    4040</r:nodes> 
     41 
     42(ajax) 
     43<div id='pagir' do='block' do='nodes' in='site' order='zip' limit='8' paginate='p'> 
     44  <p><b do='[p_nodes]'/> nodes</p> 
     45  <p> 
     46    <r:link mode='test' page='previous' do='t'>previous</r:link> 
     47    <r:show var='p'/>/<r:show var='p_count'/> 
     48    <r:link mode='test' page='next' do='t'>next</r:link> 
     49  </p> 
     50<ul> 
     51 <li do='each'><r:show attr='zip'/> <r:link/></li> 
     52</ul> 
     53</div> 
    4154 
    4255<hr/> 
  • trunk/test/helpers/zena_parser/ajax.yml

    r1197 r1198  
    211211  src: "<ul do='comments from nodes in site' do='group' by='discussion_id'><li do='each_group'><r:node do='block' do='swap' states='1,2' attr='custom_a' do='[custom_a]'/></li></ul>" 
    212212  tem: "/grp_list1.each.*<div id='list1_<%= var1.zip %>/" 
     213 
     214link_page_next: 
     215  context: 
     216    pak: 2 
     217  src: "<div id='foo' do='block' do='nodes in site' limit='3' order='zip' paginate='pak'><r:link page='previous'/> | <r:show var='pak'/> | <r:link update='foo' page='next'/> || <r:each join=',' do='[id]'/></div>" 
     218  res: "/22/zafu\?pak=1.*.*dom_id=foo.*>1</a> \| 2 \| .*22/zafu\?pak=3.*dom_id=foo.*>3</a>/" 
  • trunk/test/helpers/zena_parser/basic.yml

    r1197 r1198  
    11221122 
    11231123link_page_next_with_block: 
    1124   context: 
    1125     pak: 2 
    11261124  src: "<r:nodes in='site' limit='3' order='zip' paginate='pak'><r:link page='next' do='t'>next</r:link></r:nodes>" 
    1127   res: "<a href='/oo/projects/cleanWater/page22.html?pak=3'>next</a>" 
     1125  res: "<a href='/oo/projects/cleanWater/page22.html?pak=2'>next</a>"