From 5422dcc79cf973667e775392f8c05375a9a403b2 Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sat, 19 Oct 2013 00:18:05 +0600 Subject: [PATCH 01/17] Prepare code to insert a fork - crumbs on right --- lib/crummy/standard_renderer.rb | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/lib/crummy/standard_renderer.rb b/lib/crummy/standard_renderer.rb index 99fe68b..85857e5 100644 --- a/lib/crummy/standard_renderer.rb +++ b/lib/crummy/standard_renderer.rb @@ -41,11 +41,12 @@ def render_crumbs(crumbs, options = {}) case options[:format] when :html - crumb_string = ''.html_safe - crumbs.each_with_index do |crumb, index| - crumb_string << options[:separator] unless(index == 0) - crumb_string << crumb_to_html(crumb, options[:links], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate]) - end +# crumb_string = ''.html_safe +# crumbs.each_with_index do |crumb, index| +# crumb_string << options[:separator] unless(index == 0) +# crumb_string << crumb_to_html(crumb, options[:links], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate]) +# end + crumb_string = crumbs.map{|crumb|crumb_to_html(crumb, options[:links], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate])}.join(options[:separator]).html_safe crumb_string when :html_list # Let's set values for special options of html_list format @@ -54,10 +55,11 @@ def render_crumbs(crumbs, options = {}) options[:ul_id] ||= Crummy.configuration.ul_id options[:ul_id] = nil if options[:ul_id].blank? - crumb_string = ''.html_safe - crumbs.each do |crumb| - crumb_string << crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator]) - end +# crumb_string = ''.html_safe +# crumbs.each do |crumb| +# crumb_string << crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator]) +# end + crumb_string = crumbs.map{|crumb|crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator])}.join.html_safe crumb_string = content_tag(:ul, crumb_string, :class => options[:ul_class], :id => options[:ul_id]) crumb_string when :xml From 2682ae27fb810c32d9d380d94a652597b3c89990 Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sat, 19 Oct 2013 00:25:05 +0600 Subject: [PATCH 02/17] Prepare to insert a fork - right sided crumbs --- lib/crummy.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/crummy.rb b/lib/crummy.rb index cae37e8..c8dee7a 100644 --- a/lib/crummy.rb +++ b/lib/crummy.rb @@ -23,6 +23,7 @@ class Configuration attr_accessor :microdata attr_accessor :last_crumb_linked attr_accessor :truncate + attr_accessor :right_side def initialize @format = :html @@ -39,6 +40,7 @@ def initialize @microdata = false @last_crumb_linked = true @truncate = nil + @right_side = false end def active_li_class=(class_name) From 1165e7a1f20aaa4bd8686acbef9756e54de60535 Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sat, 19 Oct 2013 00:33:56 +0600 Subject: [PATCH 03/17] Next step of update code to fork Insert an right_side parameter, which define position of right-sided crumbs --- lib/crummy/standard_renderer.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/crummy/standard_renderer.rb b/lib/crummy/standard_renderer.rb index 85857e5..c9dd636 100644 --- a/lib/crummy/standard_renderer.rb +++ b/lib/crummy/standard_renderer.rb @@ -38,6 +38,7 @@ def render_crumbs(crumbs, options = {}) options[:microdata] ||= Crummy.configuration.microdata if options[:microdata].nil? options[:truncate] ||= Crummy.configuration.truncate if options[:truncate] options[:last_crumb_linked] = Crummy.configuration.last_crumb_linked if options[:last_crumb_linked].nil? + options[:right_side] ||= Crummy.configuration.right_side case options[:format] when :html @@ -46,7 +47,7 @@ def render_crumbs(crumbs, options = {}) # crumb_string << options[:separator] unless(index == 0) # crumb_string << crumb_to_html(crumb, options[:links], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate]) # end - crumb_string = crumbs.map{|crumb|crumb_to_html(crumb, options[:links], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate])}.join(options[:separator]).html_safe + crumb_string = crumbs.map{|crumb|options[:right_side] ? nil : crumb_to_html(crumb, options[:links], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate])}.compact.join(options[:separator]).html_safe crumb_string when :html_list # Let's set values for special options of html_list format @@ -59,7 +60,7 @@ def render_crumbs(crumbs, options = {}) # crumbs.each do |crumb| # crumb_string << crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator]) # end - crumb_string = crumbs.map{|crumb|crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator])}.join.html_safe + crumb_string = crumbs.map{|crumb|options[:right_side] ? nil : crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator])}.compact.join.html_safe crumb_string = content_tag(:ul, crumb_string, :class => options[:ul_class], :id => options[:ul_id]) crumb_string when :xml From e2545256c4572faa79dfd9c4eb657fef40b2c2b4 Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sat, 19 Oct 2013 02:39:20 +0600 Subject: [PATCH 04/17] Next step - add a local_global lambda This let define all variables for crumbs separately. --- lib/crummy/standard_renderer.rb | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/crummy/standard_renderer.rb b/lib/crummy/standard_renderer.rb index c9dd636..bc01e12 100644 --- a/lib/crummy/standard_renderer.rb +++ b/lib/crummy/standard_renderer.rb @@ -10,24 +10,25 @@ class StandardRenderer # # Takes 3 options: # The output format. Can either be xml or html. Default :html - # :format => (:html|:xml) + # :format => (:html|:xml) # The separator text. It does not assume you want spaces on either side so you must specify. Default +»+ for :html and +crumb+ for xml - # :separator => string + # :separator => string # Render links in the output. Default +true+ - # :link => boolean - # + # :link => boolean + # # Examples: # render_crumbs #=> Home » Businesses # render_crumbs :separator => ' | ' #=> Home | Businesses # render_crumbs :format => :xml #=> HomeBusinesses # render_crumbs :format => :html_list #=> - # + # # With :format => :html_list you can specify additional params: li_class, ul_class, ul_id # The only argument is for the separator text. It does not assume you want spaces on either side so you must specify. Defaults to +»+ # # render_crumbs(" . ") #=> Home . Businesses # def render_crumbs(crumbs, options = {}) + options[:skip_if_blank] ||= Crummy.configuration.skip_if_blank return '' if options[:skip_if_blank] && crumbs.count < 1 options[:format] ||= Crummy.configuration.format @@ -40,6 +41,8 @@ def render_crumbs(crumbs, options = {}) options[:last_crumb_linked] = Crummy.configuration.last_crumb_linked if options[:last_crumb_linked].nil? options[:right_side] ||= Crummy.configuration.right_side + local_global = lambda {|crumb, global_options, param_name| crumb[2][param_name].present? ? crumb[2][param_name] : global_options[:param_name]} + case options[:format] when :html # crumb_string = ''.html_safe @@ -60,7 +63,10 @@ def render_crumbs(crumbs, options = {}) # crumbs.each do |crumb| # crumb_string << crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator]) # end - crumb_string = crumbs.map{|crumb|options[:right_side] ? nil : crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator])}.compact.join.html_safe +# Rails.logger.debug "-#= "*88 +# Rails.logger.debug crumbs.inspect + + crumb_string = crumbs.map{|crumb|local_global.call(crumb, options, :right_side) ? nil : crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator])}.compact.join.html_safe crumb_string = content_tag(:ul, crumb_string, :class => options[:ul_class], :id => options[:ul_id]) crumb_string when :xml @@ -93,7 +99,7 @@ def crumb_to_html(crumb, links, first_class, last_class, is_first, is_last, with can_link ? link_to((truncate.present? ? name.truncate(truncate) : name), url, link_html_options) : (truncate.present? ? name.truncate(truncate) : name) end end - + def crumb_to_html_list(crumb, links, li_class, first_class, last_class, is_first, is_last, with_microdata, last_crumb_linked, truncate, separator='') name, url, options = crumb options = {} unless options.is_a?(Hash) @@ -116,7 +122,7 @@ def crumb_to_html_list(crumb, links, li_class, first_class, last_class, is_first html_content += separator unless separator.blank? || is_last content_tag(:li, html_content, html_options) end - + def crumb_to_xml(crumb, links, separator, is_first, is_last) name, url = crumb content_tag(separator, name, :href => (url && links ? url : nil)) @@ -127,3 +133,4 @@ def data_definition_url(type) end end end + From 73835381964541be2aad46feefab3b3a8d275212 Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sat, 19 Oct 2013 02:45:46 +0600 Subject: [PATCH 05/17] next step. let render right crumbs in reverse order! --- lib/crummy/standard_renderer.rb | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/lib/crummy/standard_renderer.rb b/lib/crummy/standard_renderer.rb index bc01e12..5d7ef54 100644 --- a/lib/crummy/standard_renderer.rb +++ b/lib/crummy/standard_renderer.rb @@ -45,11 +45,6 @@ def render_crumbs(crumbs, options = {}) case options[:format] when :html -# crumb_string = ''.html_safe -# crumbs.each_with_index do |crumb, index| -# crumb_string << options[:separator] unless(index == 0) -# crumb_string << crumb_to_html(crumb, options[:links], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate]) -# end crumb_string = crumbs.map{|crumb|options[:right_side] ? nil : crumb_to_html(crumb, options[:links], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate])}.compact.join(options[:separator]).html_safe crumb_string when :html_list @@ -59,15 +54,9 @@ def render_crumbs(crumbs, options = {}) options[:ul_id] ||= Crummy.configuration.ul_id options[:ul_id] = nil if options[:ul_id].blank? -# crumb_string = ''.html_safe -# crumbs.each do |crumb| -# crumb_string << crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator]) -# end -# Rails.logger.debug "-#= "*88 -# Rails.logger.debug crumbs.inspect - crumb_string = crumbs.map{|crumb|local_global.call(crumb, options, :right_side) ? nil : crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator])}.compact.join.html_safe - crumb_string = content_tag(:ul, crumb_string, :class => options[:ul_class], :id => options[:ul_id]) + crumb_right_string = crumbs.reverse.map{|crumb|!local_global.call(crumb, options, :right_side) ? nil : crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator])}.compact.join.html_safe + crumb_string = content_tag(:ul, crumb_string+crumb_right_string, :class => options[:ul_class], :id => options[:ul_id]) crumb_string when :xml crumbs.collect do |crumb| From 59935abf43980dc1a210fe032c1cd5ecf2f9ad92 Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sat, 19 Oct 2013 12:05:45 +0600 Subject: [PATCH 06/17] Next step - prepare to set all options for each crumb Ibdividually may be set next options for each crumb: --- lib/crummy/standard_renderer.rb | 46 +++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/lib/crummy/standard_renderer.rb b/lib/crummy/standard_renderer.rb index 5d7ef54..b636a15 100644 --- a/lib/crummy/standard_renderer.rb +++ b/lib/crummy/standard_renderer.rb @@ -45,7 +45,15 @@ def render_crumbs(crumbs, options = {}) case options[:format] when :html - crumb_string = crumbs.map{|crumb|options[:right_side] ? nil : crumb_to_html(crumb, options[:links], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate])}.compact.join(options[:separator]).html_safe + crumb_string = crumbs.map{|crumb|local_global.call(crumb, options, :right_side) ? nil : crumb_to_html(crumb, + local_global.call(crumb, options, :links), + local_global.call(crumb, options, :first_class), + local_global.call(crumb, options, :last_class), + (crumb == crumbs.first), + (crumb == crumbs.last), + local_global.call(crumb, options, :microdata), + local_global.call(crumb, options, :last_crumb_linked), + local_global.call(crumb, options, :truncate))}.compact.join(options[:separator]).html_safe crumb_string when :html_list # Let's set values for special options of html_list format @@ -54,13 +62,41 @@ def render_crumbs(crumbs, options = {}) options[:ul_id] ||= Crummy.configuration.ul_id options[:ul_id] = nil if options[:ul_id].blank? - crumb_string = crumbs.map{|crumb|local_global.call(crumb, options, :right_side) ? nil : crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator])}.compact.join.html_safe - crumb_right_string = crumbs.reverse.map{|crumb|!local_global.call(crumb, options, :right_side) ? nil : crumb_to_html_list(crumb, options[:links], options[:li_class], options[:first_class], options[:last_class], (crumb == crumbs.first), (crumb == crumbs.last), options[:microdata], options[:last_crumb_linked], options[:truncate], options[:separator])}.compact.join.html_safe - crumb_string = content_tag(:ul, crumb_string+crumb_right_string, :class => options[:ul_class], :id => options[:ul_id]) + crumb_string = crumbs.map{|crumb|local_global.call(crumb, options, :right_side) ? nil : + crumb_to_html_list(crumb, + local_global.call(crumb, options, :links), + local_global.call(crumb, options, :li_class), + local_global.call(crumb, options, :first_class), + local_global.call(crumb, options, :last_class), + (crumb == crumbs.first), + (crumb == crumbs.last), + local_global.call(crumb, options, :microdata), + local_global.call(crumb, options, :last_crumb_linked), + local_global.call(crumb, options, :truncate), + local_global.call(crumb, options, :separator))}.compact.join.html_safe + crumb_right_string = crumbs.reverse.map{|crumb|!local_global.call(crumb, options, :right_side) ? nil : crumb_to_html_list(crumb, + local_global.call(crumb, options, :links), + local_global.call(crumb, options, :li_class), + local_global.call(crumb, options, :first_class), + local_global.call(crumb, options, :last_class), + (crumb == crumbs.first), + (crumb == crumbs.last), + local_global.call(crumb, options, :microdata), + local_global.call(crumb, options, :last_crumb_linked), + local_global.call(crumb, options, :truncate), + local_global.call(crumb, options, :separator))}.compact.join.html_safe + crumb_string = content_tag(:ul, + crumb_string+crumb_right_string, + :class => local_global.call(crumb, options, :ul_class), + :id => local_global.call(crumb, options, :ul_id)) crumb_string when :xml crumbs.collect do |crumb| - crumb_to_xml(crumb, options[:links], options[:separator], (crumb == crumbs.first), (crumb == crumbs.last)) + crumb_to_xml(crumb, + local_global.call(crumb, options, :links), + local_global.call(crumb, options, :separator), + (crumb == crumbs.first), + (crumb == crumbs.last)) end * '' else raise ArgumentError, "Unknown breadcrumb output format" From fdfcbaff350a6422c1e5df37759f888bc97c840b Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sun, 20 Oct 2013 17:41:04 +0600 Subject: [PATCH 07/17] bugs intercepted --- lib/crummy/standard_renderer.rb | 51 +++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/lib/crummy/standard_renderer.rb b/lib/crummy/standard_renderer.rb index b636a15..8d750f8 100644 --- a/lib/crummy/standard_renderer.rb +++ b/lib/crummy/standard_renderer.rb @@ -33,6 +33,7 @@ def render_crumbs(crumbs, options = {}) return '' if options[:skip_if_blank] && crumbs.count < 1 options[:format] ||= Crummy.configuration.format options[:separator] ||= Crummy.configuration.send(:"#{options[:format]}_separator") + options[:right_separator] ||= Crummy.configuration.send(:"#{options[:format]}_right_separator") options[:links] ||= Crummy.configuration.links options[:first_class] ||= Crummy.configuration.first_class options[:last_class] ||= Crummy.configuration.last_class @@ -41,7 +42,11 @@ def render_crumbs(crumbs, options = {}) options[:last_crumb_linked] = Crummy.configuration.last_crumb_linked if options[:last_crumb_linked].nil? options[:right_side] ||= Crummy.configuration.right_side - local_global = lambda {|crumb, global_options, param_name| crumb[2][param_name].present? ? crumb[2][param_name] : global_options[:param_name]} + last_hash = lambda {|o|k=o.map{|c| + c.is_a?(Hash) ? (c.empty? ? nil: c) : nil}.compact + k.empty? ? {} : k.last + } + local_global = lambda {|crumb, global_options, param_name| last_hash.call(crumb).has_key?(param_name.to_sym) ? last_hash.call(crumb)[param_name.to_sym] : global_options[param_name.to_sym]} case options[:format] when :html @@ -69,26 +74,28 @@ def render_crumbs(crumbs, options = {}) local_global.call(crumb, options, :first_class), local_global.call(crumb, options, :last_class), (crumb == crumbs.first), - (crumb == crumbs.last), + (crumb == crumbs.find_all{|crumb|!last_hash.call(crumb).fetch(:right_side,false)}.compact.last), local_global.call(crumb, options, :microdata), local_global.call(crumb, options, :last_crumb_linked), local_global.call(crumb, options, :truncate), local_global.call(crumb, options, :separator))}.compact.join.html_safe - crumb_right_string = crumbs.reverse.map{|crumb|!local_global.call(crumb, options, :right_side) ? nil : crumb_to_html_list(crumb, - local_global.call(crumb, options, :links), - local_global.call(crumb, options, :li_class), - local_global.call(crumb, options, :first_class), - local_global.call(crumb, options, :last_class), - (crumb == crumbs.first), - (crumb == crumbs.last), - local_global.call(crumb, options, :microdata), - local_global.call(crumb, options, :last_crumb_linked), - local_global.call(crumb, options, :truncate), - local_global.call(crumb, options, :separator))}.compact.join.html_safe + crumb_right_string = crumbs.reverse.map{|crumb|!local_global.call(crumb, options, :right_side) ? nil : + + crumb_to_html_list(crumb, + local_global.call(crumb, options, :links), + local_global.call(crumb, options, :li_right_class), + local_global.call(crumb, options, :first_class), + local_global.call(crumb, options, :last_class), + (crumb == crumbs.first), + (crumb == crumbs.find_all{|crumb|!local_global.call(crumb, options, :right_side)}.compact.last), + local_global.call(crumb, options, :microdata), + local_global.call(crumb, options, :last_crumb_linked), + local_global.call(crumb, options, :truncate), + local_global.call(crumb, options, :right_separator))}.compact.join.html_safe crumb_string = content_tag(:ul, crumb_string+crumb_right_string, - :class => local_global.call(crumb, options, :ul_class), - :id => local_global.call(crumb, options, :ul_id)) + :class => options[:ul_class], + :id => options[:ul_id]) crumb_string when :xml crumbs.collect do |crumb| @@ -128,12 +135,13 @@ def crumb_to_html(crumb, links, first_class, last_class, is_first, is_last, with def crumb_to_html_list(crumb, links, li_class, first_class, last_class, is_first, is_last, with_microdata, last_crumb_linked, truncate, separator='') name, url, options = crumb options = {} unless options.is_a?(Hash) - can_link = url && links && (!is_last || last_crumb_linked) + can_link = url && links && (!is_last || last_crumb_linked) && !(/<\/a/ =~ name) html_classes = [] - html_classes << first_class if is_first - html_classes << last_class if is_last - html_classes << li_class - html_options = {:class => html_classes.join(' ').strip} + html_classes << first_class if is_first && !first_class.empty? + html_classes << last_class if is_last && !last_class.empty? + html_classes << li_class unless li_class.empty? + html_options = html_classes.size > 0 ? {:class => html_classes.join(' ').strip} : {} + if with_microdata html_options[:itemscope] = true html_options[:itemtype] = data_definition_url("Breadcrumb") @@ -144,8 +152,7 @@ def crumb_to_html_list(crumb, links, li_class, first_class, last_class, is_first else html_content = can_link ? link_to((truncate.present? ? name.truncate(truncate) : name), url, options[:link_html_options]) : content_tag(:span, (truncate.present? ? name.truncate(truncate) : name)) end - html_content += separator unless separator.blank? || is_last - content_tag(:li, html_content, html_options) + content_tag(:li, html_content, html_options)+(/<\/li/ =~ separator ? separator : content_tag(:li, separator) unless separator.blank? || is_last) end def crumb_to_xml(crumb, links, separator, is_first, is_last) From 254b408d9bbf4fbda9c9721eabe3de11c8dd9116 Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sun, 20 Oct 2013 17:42:14 +0600 Subject: [PATCH 08/17] Updated --- lib/crummy.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/crummy.rb b/lib/crummy.rb index c8dee7a..05f98f6 100644 --- a/lib/crummy.rb +++ b/lib/crummy.rb @@ -15,6 +15,7 @@ class Configuration attr_accessor :html_separator attr_accessor :xml_separator attr_accessor :html_list_separator + attr_accessor :html_list_right_separator attr_accessor :first_class attr_accessor :last_class attr_accessor :ul_id @@ -30,6 +31,7 @@ def initialize @html_separator = " » ".html_safe @xml_separator = "crumb" @html_list_separator = '' + @html_list_right_separator = '' @skip_if_blank = true @links = true @first_class = '' From 06ff016371c1f6574400a5830e3217e93af1ba1a Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sun, 20 Oct 2013 18:08:12 +0600 Subject: [PATCH 09/17] Updated new features --- README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/README.md b/README.md index e60b68e..ae780b0 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,13 @@ These are added to the *a* tag. add_crumb "Home", '/', link_html_options: {title: "my link title"} ``` +##You can set html instead text in first parameter. +If tag a present in this html, tag a not be a wrapper. + +```ruby +add_crumb "Support".html_safe, "", {} +``` + ## Options for render\_crumbs render\_crumbs renders the list of crumbs as either html or xml @@ -103,6 +110,7 @@ microdata: true With this option, output will be blank if there are no breadcrumbs. + ### Examples ```ruby @@ -113,6 +121,13 @@ render_crumbs format: :html_list #=> +add_crumb support_link, {:right_side => true, :links => "/support", :li_right_class => "pull-right hidden-phone"} + #=>
  • + #=> + #=> Support + #=> + #=>
  • + #=>
  • ``` A crumb with a nil argument for the link will output an unlinked crumb. @@ -147,18 +162,28 @@ Possible parameters for configuration are: :html_separator :xml_separator :html_list_separator +:html_list_right_separator :first_class :last_class :ul_id :ul_class :li_class +:li_right_class :microdata :last_crumb_linked :truncate +:right_side ``` See `lib/crummy.rb` for a list of these parameters and their defaults. +###Individually for each crumb configuration: +```ruby +add_crumb support_link, {:right_side => true, :links => "/support", : li_class => "my_class", :li_right_class => "pull-right hidden-phone"} +``` +Simple add that parameter to options hash. + + ## Live example application An example application is available right inside this gem. That application is documented, see `example/README` for details about usage. From d1fb14d7f12e560d2d5c757bae4edf19740b22d1 Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sun, 20 Oct 2013 18:10:17 +0600 Subject: [PATCH 10/17] Update standard_renderer.rb --- lib/crummy/standard_renderer.rb | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/lib/crummy/standard_renderer.rb b/lib/crummy/standard_renderer.rb index 8d750f8..fe9ebdb 100644 --- a/lib/crummy/standard_renderer.rb +++ b/lib/crummy/standard_renderer.rb @@ -50,15 +50,16 @@ def render_crumbs(crumbs, options = {}) case options[:format] when :html - crumb_string = crumbs.map{|crumb|local_global.call(crumb, options, :right_side) ? nil : crumb_to_html(crumb, - local_global.call(crumb, options, :links), - local_global.call(crumb, options, :first_class), - local_global.call(crumb, options, :last_class), - (crumb == crumbs.first), - (crumb == crumbs.last), - local_global.call(crumb, options, :microdata), - local_global.call(crumb, options, :last_crumb_linked), - local_global.call(crumb, options, :truncate))}.compact.join(options[:separator]).html_safe + crumb_string = crumbs.map{|crumb|local_global.call(crumb, options, :right_side) ? nil : + crumb_to_html(crumb, + local_global.call(crumb, options, :links), + local_global.call(crumb, options, :first_class), + local_global.call(crumb, options, :last_class), + (crumb == crumbs.first), + (crumb == crumbs.last), + local_global.call(crumb, options, :microdata), + local_global.call(crumb, options, :last_crumb_linked), + local_global.call(crumb, options, :truncate))}.compact.join(options[:separator]).html_safe crumb_string when :html_list # Let's set values for special options of html_list format From c56be3b691e5579afaf15f693c4fb48e0eba676c Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sun, 20 Oct 2013 18:15:21 +0600 Subject: [PATCH 11/17] Update standard_renderer.rb --- lib/crummy/standard_renderer.rb | 66 +++++++++++++++++---------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/lib/crummy/standard_renderer.rb b/lib/crummy/standard_renderer.rb index fe9ebdb..0030483 100644 --- a/lib/crummy/standard_renderer.rb +++ b/lib/crummy/standard_renderer.rb @@ -51,15 +51,15 @@ def render_crumbs(crumbs, options = {}) case options[:format] when :html crumb_string = crumbs.map{|crumb|local_global.call(crumb, options, :right_side) ? nil : - crumb_to_html(crumb, - local_global.call(crumb, options, :links), - local_global.call(crumb, options, :first_class), - local_global.call(crumb, options, :last_class), - (crumb == crumbs.first), - (crumb == crumbs.last), - local_global.call(crumb, options, :microdata), - local_global.call(crumb, options, :last_crumb_linked), - local_global.call(crumb, options, :truncate))}.compact.join(options[:separator]).html_safe + crumb_to_html(crumb, + local_global.call(crumb, options, :links), + local_global.call(crumb, options, :first_class), + local_global.call(crumb, options, :last_class), + (crumb == crumbs.first), + (crumb == crumbs.last), + local_global.call(crumb, options, :microdata), + local_global.call(crumb, options, :last_crumb_linked), + local_global.call(crumb, options, :truncate))}.compact.join(options[:separator]).html_safe crumb_string when :html_list # Let's set values for special options of html_list format @@ -69,30 +69,31 @@ def render_crumbs(crumbs, options = {}) options[:ul_id] = nil if options[:ul_id].blank? crumb_string = crumbs.map{|crumb|local_global.call(crumb, options, :right_side) ? nil : - crumb_to_html_list(crumb, - local_global.call(crumb, options, :links), - local_global.call(crumb, options, :li_class), - local_global.call(crumb, options, :first_class), - local_global.call(crumb, options, :last_class), - (crumb == crumbs.first), - (crumb == crumbs.find_all{|crumb|!last_hash.call(crumb).fetch(:right_side,false)}.compact.last), - local_global.call(crumb, options, :microdata), - local_global.call(crumb, options, :last_crumb_linked), - local_global.call(crumb, options, :truncate), - local_global.call(crumb, options, :separator))}.compact.join.html_safe + crumb_to_html_list(crumb, + local_global.call(crumb, options, :links), + local_global.call(crumb, options, :li_class), + local_global.call(crumb, options, :first_class), + local_global.call(crumb, options, :last_class), + (crumb == crumbs.first), + (crumb == crumbs.find_all{|crumb| + !last_hash.call(crumb).fetch(:right_side,false)}.compact.last), + local_global.call(crumb, options, :microdata), + local_global.call(crumb, options, :last_crumb_linked), + local_global.call(crumb, options, :truncate), + local_global.call(crumb, options, :separator))}.compact.join.html_safe crumb_right_string = crumbs.reverse.map{|crumb|!local_global.call(crumb, options, :right_side) ? nil : - crumb_to_html_list(crumb, - local_global.call(crumb, options, :links), - local_global.call(crumb, options, :li_right_class), - local_global.call(crumb, options, :first_class), - local_global.call(crumb, options, :last_class), - (crumb == crumbs.first), - (crumb == crumbs.find_all{|crumb|!local_global.call(crumb, options, :right_side)}.compact.last), - local_global.call(crumb, options, :microdata), - local_global.call(crumb, options, :last_crumb_linked), - local_global.call(crumb, options, :truncate), - local_global.call(crumb, options, :right_separator))}.compact.join.html_safe + crumb_to_html_list(crumb, + local_global.call(crumb, options, :links), + local_global.call(crumb, options, :li_right_class), + local_global.call(crumb, options, :first_class), + local_global.call(crumb, options, :last_class), + (crumb == crumbs.first), + (crumb == crumbs.find_all{|crumb|!local_global.call(crumb, options, :right_side)}.compact.last), + local_global.call(crumb, options, :microdata), + local_global.call(crumb, options, :last_crumb_linked), + local_global.call(crumb, options, :truncate), + local_global.call(crumb, options, :right_separator))}.compact.join.html_safe crumb_string = content_tag(:ul, crumb_string+crumb_right_string, :class => options[:ul_class], @@ -153,7 +154,8 @@ def crumb_to_html_list(crumb, links, li_class, first_class, last_class, is_first else html_content = can_link ? link_to((truncate.present? ? name.truncate(truncate) : name), url, options[:link_html_options]) : content_tag(:span, (truncate.present? ? name.truncate(truncate) : name)) end - content_tag(:li, html_content, html_options)+(/<\/li/ =~ separator ? separator : content_tag(:li, separator) unless separator.blank? || is_last) + content_tag(:li, html_content, html_options)+(/<\/li/ =~ separator ? + separator : content_tag(:li, separator) unless separator.blank? || is_last) end def crumb_to_xml(crumb, links, separator, is_first, is_last) From 9baf9ab67f909d7252ac25771f0813a8bb17241f Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sun, 20 Oct 2013 18:38:11 +0600 Subject: [PATCH 12/17] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index ae780b0..3473b01 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,10 @@ Simply add the dependency to your Gemfile: ```ruby gem "crummy", "~> 1.7.2" ``` +or: +```ruby +gem 'crummy', :git => 'https://github.com/r72cccp/crummy.git', :branch => 'master' +``` # Example From d23706753b0363468dea022de854b038365993d8 Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sun, 20 Oct 2013 18:50:56 +0600 Subject: [PATCH 13/17] Update README.md --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 3473b01..ae780b0 100644 --- a/README.md +++ b/README.md @@ -13,10 +13,6 @@ Simply add the dependency to your Gemfile: ```ruby gem "crummy", "~> 1.7.2" ``` -or: -```ruby -gem 'crummy', :git => 'https://github.com/r72cccp/crummy.git', :branch => 'master' -``` # Example From 78dd0030d6ca582ad5587b0899be568976796428 Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sun, 20 Oct 2013 20:33:38 +0600 Subject: [PATCH 14/17] Travis.ci errors checked --- lib/crummy.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/crummy.rb b/lib/crummy.rb index 05f98f6..fd24126 100644 --- a/lib/crummy.rb +++ b/lib/crummy.rb @@ -13,6 +13,7 @@ class Configuration attr_accessor :links attr_accessor :skip_if_blank attr_accessor :html_separator + attr_accessor :html_right_separator attr_accessor :xml_separator attr_accessor :html_list_separator attr_accessor :html_list_right_separator @@ -29,6 +30,7 @@ class Configuration def initialize @format = :html @html_separator = " » ".html_safe + @html_right_separator = " » ".html_safe @xml_separator = "crumb" @html_list_separator = '' @html_list_right_separator = '' From a5f3bc4f761a2b6c2c1b4b2a2d3248414d5d2a98 Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sun, 20 Oct 2013 20:38:27 +0600 Subject: [PATCH 15/17] Update crummy.rb --- lib/crummy.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/crummy.rb b/lib/crummy.rb index fd24126..18b5edb 100644 --- a/lib/crummy.rb +++ b/lib/crummy.rb @@ -13,8 +13,9 @@ class Configuration attr_accessor :links attr_accessor :skip_if_blank attr_accessor :html_separator - attr_accessor :html_right_separator + attr_accessor :html_right_separator attr_accessor :xml_separator + attr_accessor :xml_right_separator attr_accessor :html_list_separator attr_accessor :html_list_right_separator attr_accessor :first_class @@ -30,8 +31,9 @@ class Configuration def initialize @format = :html @html_separator = " » ".html_safe - @html_right_separator = " » ".html_safe + @html_right_separator = " » ".html_safe @xml_separator = "crumb" + @xml_right_separator = "crumb" @html_list_separator = '' @html_list_right_separator = '' @skip_if_blank = true From fc645bebaa85445fdbc665fdaf82c0b0f8e27183 Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sun, 20 Oct 2013 21:28:19 +0600 Subject: [PATCH 16/17] Tests updated lines ##29, 55 --- test/standard_renderer_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/standard_renderer_test.rb b/test/standard_renderer_test.rb index d2bf004..6746812 100644 --- a/test/standard_renderer_test.rb +++ b/test/standard_renderer_test.rb @@ -26,7 +26,7 @@ def test_classes renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :html)) assert_equal('', renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list)) - assert_equal('', + assert_equal('', renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list, :separator => " / ")) assert_equal('name1name2', renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :xml)) @@ -52,7 +52,7 @@ def test_classes_last_crumb_not_linked renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :html, :last_crumb_linked => false)) assert_equal('', renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list, :last_crumb_linked => false)) - assert_equal('', + assert_equal('', renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list, :separator => " / ", :last_crumb_linked => false)) assert_equal('name1name2', renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :xml, :last_crumb_linked => false)) From 1933a5ddd65690c697925534b8c4443fa2ec8e16 Mon Sep 17 00:00:00 2001 From: Belevskij Sergeij Date: Sun, 20 Oct 2013 21:33:13 +0600 Subject: [PATCH 17/17] Update standard_renderer_test.rb --- test/standard_renderer_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/standard_renderer_test.rb b/test/standard_renderer_test.rb index 6746812..6c59289 100644 --- a/test/standard_renderer_test.rb +++ b/test/standard_renderer_test.rb @@ -26,7 +26,7 @@ def test_classes renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :html)) assert_equal('', renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list)) - assert_equal('', + assert_equal('', renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list, :separator => " / ")) assert_equal('name1name2', renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :xml)) @@ -52,7 +52,7 @@ def test_classes_last_crumb_not_linked renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :html, :last_crumb_linked => false)) assert_equal('', renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list, :last_crumb_linked => false)) - assert_equal('', + assert_equal('', renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2'], ['name3', 'url3']], :li_class => "li_class", :first_class => 'first', :last_class => 'last', :format => :html_list, :separator => " / ", :last_crumb_linked => false)) assert_equal('name1name2', renderer.render_crumbs([['name1', 'url1'], ['name2', 'url2']], :first_class => 'first', :last_class => 'last', :format => :xml, :last_crumb_linked => false))