Mercurial > hg > soundsoftware-site
diff app/helpers/.svn/text-base/application_helper.rb.svn-base @ 37:94944d00e43c
* Update to SVN trunk rev 4411
author | Chris Cannam <chris.cannam@soundsoftware.ac.uk> |
---|---|
date | Fri, 19 Nov 2010 13:24:41 +0000 |
parents | 40f7cfd4df19 |
children | af80e5618e9b 8661b858af72 |
line wrap: on
line diff
--- a/app/helpers/.svn/text-base/application_helper.rb.svn-base Fri Sep 24 14:06:04 2010 +0100 +++ b/app/helpers/.svn/text-base/application_helper.rb.svn-base Fri Nov 19 13:24:41 2010 +0000 @@ -1,5 +1,5 @@ -# redMine - project management software -# Copyright (C) 2006-2007 Jean-Philippe Lang +# Redmine - project management software +# Copyright (C) 2006-2010 Jean-Philippe Lang # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -34,25 +34,11 @@ # Display a link if user is authorized # # @param [String] name Anchor text (passed to link_to) - # @param [Hash, String] options Hash params or url for the link target (passed to link_to). - # This will checked by authorize_for to see if the user is authorized + # @param [Hash] options Hash params. This will checked by authorize_for to see if the user is authorized # @param [optional, Hash] html_options Options passed to link_to # @param [optional, Hash] parameters_for_method_reference Extra parameters for link_to def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference) - if options.is_a?(String) - begin - route = ActionController::Routing::Routes.recognize_path(options.gsub(/\?.*/,''), :method => options[:method] || :get) - link_controller = route[:controller] - link_action = route[:action] - rescue ActionController::RoutingError # Parse failed, not a route - link_controller, link_action = nil, nil - end - else - link_controller = options[:controller] || params[:controller] - link_action = options[:action] - end - - link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(link_controller, link_action) + link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action]) end # Display a link to remote if user is authorized @@ -121,11 +107,6 @@ link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision)) end - - def link_to_project(project, options={}) - options[:class] ||= 'project' - link_to(h(project), {:controller => 'projects', :action => 'show', :id => project}, :class => options[:class]) - end # Generates a link to a project if active # Examples: @@ -196,7 +177,7 @@ content << "<ul class=\"pages-hierarchy\">\n" pages[node].each do |page| content << "<li>" - content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'index', :id => page.project, :page => page.title}, + content << link_to(h(page.pretty_title), {:controller => 'wiki', :action => 'show', :project_id => page.project, :id => page.title}, :title => (page.respond_to?(:updated_on) ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil)) content << "\n" + render_page_hierarchy(pages, page.id) if pages[page.id] content << "</li>\n" @@ -257,15 +238,10 @@ end # Yields the given block for each project with its level in the tree + # + # Wrapper for Project#project_tree def project_tree(projects, &block) - ancestors = [] - projects.sort_by(&:lft).each do |project| - while (ancestors.any? && !project.is_descendant_of?(ancestors.last)) - ancestors.pop - end - yield project, ancestors.size - ancestors << project - end + Project.project_tree(projects, &block) end def project_nested_ul(projects, &block) @@ -475,7 +451,7 @@ text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text, :object => obj, :attribute => attr) { |macro, args| exec_macro(macro, obj, args) } parse_non_pre_blocks(text) do |text| - [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links].each do |method_name| + [:parse_inline_attachments, :parse_wiki_links, :parse_redmine_links, :parse_headings].each do |method_name| send method_name, text, project, obj, attr, only_path, options end end @@ -548,7 +524,7 @@ esc, all, page, title = $1, $2, $3, $5 if esc.nil? if page =~ /^([^\:]+)\:(.*)$/ - link_project = Project.find_by_name($1) || Project.find_by_identifier($1) + link_project = Project.find_by_identifier($1) || Project.find_by_name($1) page = $2 title ||= $1 if page.blank? end @@ -565,7 +541,8 @@ when :local; "#{title}.html" when :anchor; "##{title}" # used for single-file wiki export else - url_for(:only_path => only_path, :controller => 'wiki', :action => 'index', :id => link_project, :page => Wiki.titleize(page), :anchor => anchor) + wiki_page_id = page.present? ? Wiki.titleize(page) : nil + url_for(:only_path => only_path, :controller => 'wiki', :action => 'show', :project_id => link_project, :id => wiki_page_id, :anchor => anchor) end link_to((title || page), url, :class => ('wiki-page' + (wiki_page ? '' : ' new'))) else @@ -696,6 +673,50 @@ leading + (link || "#{prefix}#{sep}#{identifier}") end end + + TOC_RE = /<p>\{\{([<>]?)toc\}\}<\/p>/i unless const_defined?(:TOC_RE) + HEADING_RE = /<h(1|2|3|4)( [^>]+)?>(.+?)<\/h(1|2|3|4)>/i unless const_defined?(:HEADING_RE) + + # Headings and TOC + # Adds ids and links to headings and renders the TOC if needed unless options[:headings] is set to false + def parse_headings(text, project, obj, attr, only_path, options) + headings = [] + text.gsub!(HEADING_RE) do + level, attrs, content = $1.to_i, $2, $3 + item = strip_tags(content).strip + anchor = item.gsub(%r{[^\w\s\-]}, '').gsub(%r{\s+(\-+\s*)?}, '-') + headings << [level, anchor, item] + "<h#{level} #{attrs} id=\"#{anchor}\">#{content}<a href=\"##{anchor}\" class=\"wiki-anchor\">¶</a></h#{level}>" + end unless options[:headings] == false + + text.gsub!(TOC_RE) do + if headings.empty? + '' + else + div_class = 'toc' + div_class << ' right' if $1 == '>' + div_class << ' left' if $1 == '<' + out = "<ul class=\"#{div_class}\"><li>" + root = headings.map(&:first).min + current = root + started = false + headings.each do |level, anchor, item| + if level > current + out << '<ul><li>' * (level - current) + elsif level < current + out << "</li></ul>\n" * (current - level) + "</li><li>" + elsif started + out << '</li><li>' + end + out << "<a href=\"##{anchor}\">#{item}</a>" + current = level + started = true + end + out << '</li></ul>' * (current - root) + out << '</li></ul>' + end + end + end # Same as Rails' simple_format helper without using paragraphs def simple_format_without_paragraph(text)