Changeset 1198
- Timestamp:
- 2008-10-01 20:58:40 (3 months ago)
- Files:
-
- trunk/lib/parser/lib/rules/zena.rb (modified) (5 diffs)
- trunk/test/fixtures/files/Node-test.zafu (modified) (1 diff)
- trunk/test/helpers/zena_parser/ajax.yml (modified) (1 diff)
- trunk/test/helpers/zena_parser/basic.yml (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/lib/parser/lib/rules/zena.rb
r1197 r1198 1738 1738 link_to_update(target) 1739 1739 else 1740 link_to_node1741 end 1742 end 1743 1744 def link_to_node(opts = {})1745 url_params = opt s[:url_params] || {}1746 default_text = opt s[: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] 1747 1747 params = @params.dup 1748 1748 1749 1749 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 1750 1756 1751 1757 if href = params.delete(:href) … … 1805 1811 end 1806 1812 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 1814 1851 attribute, static = parse_attributes_in_value(v.gsub('"',''), :erb => false) 1815 1852 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 1832 1865 end 1833 1866 … … 1840 1873 @context[:vars] ||= [] 1841 1874 @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]"}) 1843 1876 out "<% end -%>" 1844 1877 when 'next' … … 1846 1879 @context[:vars] ||= [] 1847 1880 @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]"}) 1849 1882 out "<% end -%>" 1850 1883 when 'list' 1851 "pagination list helper..." 1884 # FIXME: implement page numbers (#211). 1885 parser_error("page numbers not implemented yet") 1852 1886 else 1853 1887 parser_error("unkown 'page' option #{@params[:page].inspect} should be ('previous', 'next' or 'list')") … … 2915 2949 2916 2950 html_params = opts[:html_params] || {} 2951 node_id = opts[:node_id] || self.node_id 2917 2952 2918 2953 url = opts[:url] || "/#{base_class.to_s.pluralize.underscore}/\#{#{node_id}}#{method == :get ? '/zafu' : ''}" trunk/test/fixtures/files/Node-test.zafu
r1197 r1198 39 39 </ul> 40 40 </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> 41 54 42 55 <hr/> trunk/test/helpers/zena_parser/ajax.yml
r1197 r1198 211 211 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>" 212 212 tem: "/grp_list1.each.*<div id='list1_<%= var1.zip %>/" 213 214 link_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 1122 1122 1123 1123 link_page_next_with_block: 1124 context:1125 pak: 21126 1124 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>"
