##// END OF EJS Templates
Refactoring ApplicationHelper#link_to_issue....
Refactoring ApplicationHelper#link_to_issue. Now displays issue subject by default. git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3040 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r2926:cbeeaa4d4d47
r2926:cbeeaa4d4d47
Show More
application_helper.rb
700 lines | 27.2 KiB | text/x-ruby | RubyLexer
/ app / helpers / application_helper.rb
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # redMine - project management software
# Copyright (C) 2006-2007 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
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Jean-Philippe Lang
File viewer for attached text files....
r1506 require 'coderay'
require 'coderay/helpers/file_type'
Jean-Philippe Lang
Makes wiki text formatter pluggable....
r1953 require 'forwardable'
Jean-Philippe Lang
Escape back_url field value (#2320)....
r2123 require 'cgi'
Jean-Philippe Lang
File viewer for attached text files....
r1506
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 module ApplicationHelper
Jean-Philippe Lang
Added wiki macros support. 2 builtin macros are defined: hello_world (sample macro that displays the arguments) and macro_list (display the list of installed macros)....
r884 include Redmine::WikiFormatting::Macros::Definitions
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 include Redmine::I18n
Jean-Philippe Lang
Changes ApplicationHelper#gravatar_for_mail to #avatar that takes a User or a String (less code in views)....
r1998 include GravatarHelper::PublicMethods
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
Jean-Philippe Lang
Makes wiki text formatter pluggable....
r1953 extend Forwardable
def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # Return true if user is authorized for controller/action, otherwise false
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 def authorize_for(controller, action)
User.current.allowed_to?({:controller => controller, :action => action}, @project)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
# Display a link if user is authorized
def link_to_if_authorized(name, options = {}, html_options = nil, *parameters_for_method_reference)
Jean-Philippe Lang
Merged 0.6 branch into trunk....
r663 link_to(name, options, html_options, *parameters_for_method_reference) if authorize_for(options[:controller] || params[:controller], options[:action])
Jean-Philippe Lang
Adds posts quoting functionality (#1825)....
r1771 end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Adds posts quoting functionality (#1825)....
r1771 # Display a link to remote if user is authorized
def link_to_remote_if_authorized(name, options = {}, html_options = nil)
url = options[:url] || {}
link_to_remote(name, options, html_options) if authorize_for(url[:controller] || params[:controller], url[:action])
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Fixes ApplicationHelper#link_to_user...
r2910 # Displays a link to user's account page if active
Jean-Philippe Lang
Makes logged-in username in topbar linking to (#2291)....
r2107 def link_to_user(user, options={})
Jean-Philippe Lang
User groups branch merged....
r2755 if user.is_a?(User)
Jean-Philippe Lang
Fixes ApplicationHelper#link_to_user...
r2910 name = h(user.name(options[:format]))
if user.active?
link_to name, :controller => 'users', :action => 'show', :id => user
else
name
end
Jean-Philippe Lang
User groups branch merged....
r2755 else
Jean-Philippe Lang
Fixes ApplicationHelper#link_to_user...
r2910 h(user.to_s)
Jean-Philippe Lang
User groups branch merged....
r2755 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Refactoring ApplicationHelper#link_to_issue....
r2926 # Displays a link to +issue+ with its subject.
# Examples:
#
# link_to_issue(issue) # => Defect #6: This is the subject
# link_to_issue(issue, :truncate => 6) # => Defect #6: This i...
# link_to_issue(issue, :subject => false) # => Defect #6
#
Jean-Philippe Lang
Add a time tracking block for 'My page' (#615)....
r1245 def link_to_issue(issue, options={})
Jean-Philippe Lang
Refactoring ApplicationHelper#link_to_issue....
r2926 title = nil
subject = nil
if options[:subject] == false
title = truncate(issue.subject, :length => 60)
else
subject = issue.subject
if options[:truncate]
subject = truncate(subject, :length => options[:truncate])
end
end
s = link_to "#{issue.tracker} ##{issue.id}", {:controller => "issues", :action => "show", :id => issue},
:class => issue.css_classes,
:title => title
s << ": #{h subject}" if subject
s
Jean-Philippe Lang
Added link_to_issue helper....
r428 end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Appends the filename to the attachment url so that clients that ignore content-disposition http header get the real filename (#1649)....
r1669 # Generates a link to an attachment.
# Options:
# * :text - Link text (default to attachment filename)
# * :download - Force download (default: false)
def link_to_attachment(attachment, options={})
text = options.delete(:text) || attachment.filename
action = options.delete(:download) ? 'download' : 'show'
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Appends the filename to the attachment url so that clients that ignore content-disposition http header get the real filename (#1649)....
r1669 link_to(h(text), {:controller => 'attachments', :action => action, :id => attachment, :filename => attachment.filename }, options)
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Added toggle_link helper....
r429 def toggle_link(name, id, options={})
onclick = "Element.toggle('#{id}'); "
onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ")
onclick << "return false;"
link_to(name, "#", :onclick => onclick)
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def image_to_function(name, function, html_options = {})
html_options.symbolize_keys!
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986 tag(:input, html_options.merge({
:type => "image", :src => image_path(name),
:onclick => (html_options[:onclick] ? "#{html_options[:onclick]}; " : "") + "#{function};"
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 }))
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Added a link to add a new category when creating or editing an issue....
r642 def prompt_to_remote(name, text, param, url, html_options = {})
html_options[:onclick] = "promptToRemote('#{text}', '#{param}', '#{url_for(url)}'); return false;"
link_to name, {}, html_options
end
Jean-Philippe Lang
Display latest user's activity on account/show view....
r2064
def format_activity_title(text)
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 h(truncate_single_line(text, :length => 100))
Jean-Philippe Lang
Display latest user's activity on account/show view....
r2064 end
def format_activity_day(date)
date == Date.today ? l(:label_today).titleize : format_date(date)
end
def format_activity_description(text)
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 h(truncate(text.to_s, :length => 120).gsub(%r{[\r\n]*<(pre|code)>.*$}m, '...')).gsub(/[\r\n]+/, "<br />")
Jean-Philippe Lang
Fixed: Roadmap crashes when a version has a due date > 2037....
r1885 end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Fixed: Roadmap crashes when a version has a due date > 2037....
r1885 def due_date_distance_in_words(date)
if date
l((date < Date.today ? :label_roadmap_overdue : :label_roadmap_due_in), distance_of_date_in_words(Date.today, date))
end
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Extends child_pages macro to display child pages based on page parameter (#1975)....
r2051 def render_page_hierarchy(pages, node=nil)
content = ''
if pages[node]
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},
: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"
end
content << "</ul>\n"
end
content
end
Jean-Philippe Lang
Moves flash messages rendering to a helper method....
r2221
# Renders flash messages
def render_flash_messages
s = ''
flash.each do |k,v|
s << content_tag('div', v, :class => "flash #{k}")
end
s
end
Jean-Philippe Lang
Merged nested projects branch. Removes limit on subproject nesting (#594)....
r2302
Jean-Philippe Lang
Refactoring of tabs rendering....
r2757 # Renders tabs and their content
def render_tabs(tabs)
if tabs.any?
render :partial => 'common/tabs', :locals => {:tabs => tabs}
else
content_tag 'p', l(:label_no_data), :class => "nodata"
end
end
Jean-Philippe Lang
Merged nested projects branch. Removes limit on subproject nesting (#594)....
r2302 # Renders the project quick-jump box
def render_project_jump_box
# Retrieve them now to avoid a COUNT query
projects = User.current.projects.all
if projects.any?
s = '<select onchange="if (this.value != \'\') { window.location = this.value; }">' +
Jean-Philippe Lang
Sets the current project as the default value of project jump box (#4053)....
r2845 "<option value=''>#{ l(:label_jump_to_a_project) }</option>" +
Jean-Philippe Lang
Fixes project shortcut combo....
r2802 '<option value="" disabled="disabled">---</option>'
Jean-Philippe Lang
Sets the current project as the default value of project jump box (#4053)....
r2845 s << project_tree_options_for_select(projects, :selected => @project) do |p|
Jean-Philippe Lang
Fixed that the project jump box does not preserve current tab after r2304....
r2310 { :value => url_for(:controller => 'projects', :action => 'show', :id => p, :jump => current_menu_item) }
Jean-Philippe Lang
Merged nested projects branch. Removes limit on subproject nesting (#594)....
r2302 end
s << '</select>'
s
end
end
def project_tree_options_for_select(projects, options = {})
s = ''
project_tree(projects) do |project, level|
name_prefix = (level > 0 ? ('&nbsp;' * 2 * level + '&#187; ') : '')
tag_options = {:value => project.id, :selected => ((project == options[:selected]) ? 'selected' : nil)}
tag_options.merge!(yield(project)) if block_given?
s << content_tag('option', name_prefix + h(project), tag_options)
end
s
end
# Yields the given block for each project with its level in the 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
end
Jean-Philippe Lang
Adds projects association on tracker form (#2578)....
r2333
def project_nested_ul(projects, &block)
s = ''
if projects.any?
ancestors = []
projects.sort_by(&:lft).each do |project|
if (ancestors.empty? || project.is_descendant_of?(ancestors.last))
s << "<ul>\n"
else
ancestors.pop
s << "</li>"
while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
ancestors.pop
s << "</ul></li>\n"
end
end
s << "<li>"
s << yield(project).to_s
ancestors << project
end
s << ("</li></ul>\n" * ancestors.size)
end
s
end
Jean-Philippe Lang
User groups branch merged....
r2755
def principals_check_box_tags(name, principals)
s = ''
Jean-Philippe Lang
Sort the list of users to add to a group or project (#4150)....
r2890 principals.sort.each do |principal|
Jean-Philippe Lang
User groups branch merged....
r2755 s << "<label>#{ check_box_tag name, principal.id, false } #{h principal}</label>\n"
end
s
end
Jean-Philippe Lang
Extends child_pages macro to display child pages based on page parameter (#1975)....
r2051
Jean-Philippe Lang
Fixed: changesets titles should not be multiline in atom feeds (#1356)....
r1477 # Truncates and returns the string as a single line
def truncate_single_line(string, *args)
Jean-Philippe Lang
Fixed error on repository when there are no comments in a changeset (#4126)....
r2869 truncate(string.to_s, *args).gsub(%r{[\r\n]+}m, ' ')
Jean-Philippe Lang
Fixed: changesets titles should not be multiline in atom feeds (#1356)....
r1477 end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Adds date range filter and pagination on time entries detail view (closes #434)....
r1159 def html_hours(text)
text.gsub(%r{(\d+)\.(\d+)}, '<span class="hours hours-int">\1</span><span class="hours hours-dec">.\2</span>')
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Changes issue history headings....
r2092 def authoring(created, author, options={})
Jean-Philippe Lang
AccountController#show (/account/show/:id) moved to UsersController#show (/users/:id)....
r2874 l(options[:label] || :label_added_time_by, :author => link_to_user(author), :age => time_tag(created))
Jean-Philippe Lang
Adds issue last update timestamp (#3565)....
r2703 end
def time_tag(time)
text = distance_of_time_in_words(Time.now, time)
if @project
link_to(text, {:controller => 'projects', :action => 'activity', :id => @project, :from => time.to_date}, :title => format_time(time))
else
content_tag('acronym', text, :title => format_time(time))
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
File viewer for attached text files....
r1506 def syntax_highlight(name, content)
type = CodeRay::FileType[name]
type ? CodeRay.scan(content, type).html : h(content)
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Fixes "source:" links URLs (r1617)....
r1626 def to_path_param(path)
path.to_s.split(%r{[/\\]}).select {|p| !p.blank?}
end
Jean-Philippe Lang
New setting added to specify how many objects should be displayed on most paginated lists....
r1013 def pagination_links_full(paginator, count=nil, options={})
Jean-Philippe Lang
Added pagination on wiki page history....
r568 page_param = options.delete(:page_param) || :page
Jean-Philippe Lang
New setting added to specify how many objects should be displayed on most paginated lists....
r1013 url_param = params.dup
Jean-Philippe Lang
Issues pagination loses project param after applying or clearing filter (#2726)....
r2398 # don't reuse query params if filters are present
url_param.merge!(:fields => nil, :values => nil, :operators => nil) if url_param.delete(:set_filter)
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
html = ''
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 if paginator.current.previous
html << link_to_remote_content_update('&#171; ' + l(:label_previous), url_param.merge(page_param => paginator.current.previous)) + ' '
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 html << (pagination_links_each(paginator, options) do |n|
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 link_to_remote_content_update(n.to_s, url_param.merge(page_param => n))
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end || '')
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315
if paginator.current.next
html << ' ' + link_to_remote_content_update((l(:label_next) + ' &#187;'), url_param.merge(page_param => paginator.current.next))
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
New setting added to specify how many objects should be displayed on most paginated lists....
r1013 unless count.nil?
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 html << [
" (#{paginator.current.first_item}-#{paginator.current.last_item}/#{count})",
per_page_links(paginator.items_per_page)
].compact.join(' | ')
Jean-Philippe Lang
New setting added to specify how many objects should be displayed on most paginated lists....
r1013 end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
html
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315
Jean-Philippe Lang
New setting added to specify how many objects should be displayed on most paginated lists....
r1013 def per_page_links(selected=nil)
Jean-Philippe Lang
Fixed: issue filters may be lost when paginating after r1026....
r1051 url_param = params.dup
url_param.clear if url_param.has_key?(:set_filter)
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
New setting added to specify how many objects should be displayed on most paginated lists....
r1013 links = Setting.per_page_options_array.collect do |n|
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315 n == selected ? n : link_to_remote(n, {:update => "content",
:url => params.dup.merge(:per_page => n),
:method => :get},
Jean-Philippe Lang
Fixed: issue filters may be lost when paginating after r1026....
r1051 {:href => url_for(url_param.merge(:per_page => n))})
Jean-Philippe Lang
New setting added to specify how many objects should be displayed on most paginated lists....
r1013 end
links.size > 1 ? l(:label_display_per_page, links.join(', ')) : nil
end
Jean-Philippe Lang
Trackers controller refactoring....
r2462
def reorder_links(name, url)
link_to(image_tag('2uparrow.png', :alt => l(:label_sort_highest)), url.merge({"#{name}[move_to]" => 'highest'}), :method => :post, :title => l(:label_sort_highest)) +
link_to(image_tag('1uparrow.png', :alt => l(:label_sort_higher)), url.merge({"#{name}[move_to]" => 'higher'}), :method => :post, :title => l(:label_sort_higher)) +
link_to(image_tag('1downarrow.png', :alt => l(:label_sort_lower)), url.merge({"#{name}[move_to]" => 'lower'}), :method => :post, :title => l(:label_sort_lower)) +
link_to(image_tag('2downarrow.png', :alt => l(:label_sort_lowest)), url.merge({"#{name}[move_to]" => 'lowest'}), :method => :post, :title => l(:label_sort_lowest))
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Add breadcrumb nav for the forums (#892)....
r1284 def breadcrumb(*args)
Jean-Philippe Lang
Wiki page hierarchy (#528). Parent page can be assigned on Rename screen....
r1689 elements = args.flatten
elements.any? ? content_tag('p', args.join(' &#187; ') + ' &#187; ', :class => 'breadcrumb') : nil
Jean-Philippe Lang
Add breadcrumb nav for the forums (#892)....
r1284 end
Jean-Philippe Lang
Adds an helper to render other formats download links....
r2331
def other_formats_links(&block)
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 concat('<p class="other-formats">' + l(:label_export_to))
Jean-Philippe Lang
Adds an helper to render other formats download links....
r2331 yield Redmine::Views::OtherFormatsBuilder.new(self)
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 concat('</p>')
Jean-Philippe Lang
Adds an helper to render other formats download links....
r2331 end
Jean-Philippe Lang
Adds (a maximum of 3) links to project ancestors in the page title (#2788)....
r2423
def page_header_title
if @project.nil? || @project.new_record?
h(Setting.app_title)
else
b = []
ancestors = (@project.root? ? [] : @project.ancestors.visible)
if ancestors.any?
root = ancestors.shift
b << link_to(h(root), {:controller => 'projects', :action => 'show', :id => root, :jump => current_menu_item}, :class => 'root')
if ancestors.size > 2
b << '&#8230;'
ancestors = ancestors[-2, 2]
end
b += ancestors.collect {|p| link_to(h(p), {:controller => 'projects', :action => 'show', :id => p, :jump => current_menu_item}, :class => 'ancestor') }
end
b << h(@project)
b.join(' &#187; ')
end
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Slight improvements to the browser views....
r1019 def html_title(*args)
if args.empty?
title = []
title << @project.name if @project
title += @html_title if @html_title
title << Setting.app_title
Jean-Philippe Lang
Small fix to HTML title....
r2850 title.select {|t| !t.blank? }.join(' - ')
Jean-Philippe Lang
Slight improvements to the browser views....
r1019 else
@html_title ||= []
@html_title += args
end
Jean-Philippe Lang
Removed @html_title assignments in controllers....
r704 end
Jean-Philippe Lang
Added some accesskeys:...
r793
def accesskey(s)
Jean-Philippe Lang
Added a 'New issue' link in the main menu (accesskey 7)....
r1067 Redmine::AccessKeys.key_for s
Jean-Philippe Lang
Added some accesskeys:...
r793 end
Jean-Philippe Lang
Added wiki macros support. 2 builtin macros are defined: hello_world (sample macro that displays the arguments) and macro_list (display the list of installed macros)....
r884 # Formats text according to system settings.
# 2 ways to call this method:
# * with a String: textilizable(text, options)
# * with an object and one of its attribute: textilizable(issue, :description, options)
def textilizable(*args)
options = args.last.is_a?(Hash) ? args.pop : {}
case args.size
when 1
Jean-Philippe Lang
Adds child_pages macro for wiki pages (#528)....
r1690 obj = options[:object]
Jean-Philippe Lang
Fixes:...
r1147 text = args.shift
Jean-Philippe Lang
Added wiki macros support. 2 builtin macros are defined: hello_world (sample macro that displays the arguments) and macro_list (display the list of installed macros)....
r884 when 2
obj = args.shift
Jean-Philippe Lang
Fixes:...
r1147 text = obj.send(args.shift).to_s
Jean-Philippe Lang
Added wiki macros support. 2 builtin macros are defined: hello_world (sample macro that displays the arguments) and macro_list (display the list of installed macros)....
r884 else
raise ArgumentError, 'invalid arguments to textilizable'
end
Jean-Philippe Lang
Fixes:...
r1147 return '' if text.blank?
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Fixes:...
r1147 only_path = options.delete(:only_path) == false ? false : true
Jean-Philippe Lang
Added Redmine::WikiFormatting module and tests for wiki links....
r688
# when using an image link, try to use an attachment, if possible
Jean-Philippe Lang
Fixes:...
r1147 attachments = options[:attachments] || (obj && obj.respond_to?(:attachments) ? obj.attachments : nil)
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Added Redmine::WikiFormatting module and tests for wiki links....
r688 if attachments
Jean-Philippe Lang
Show the most recent file when displaying an inline image....
r1937 attachments = attachments.sort_by(&:created_on).reverse
Jean-Philippe Lang
Fixed: Inline images don't work if file name has upper case letters or if image is in BMP format (#2102)....
r1956 text = text.gsub(/!((\<|\=|\>)?(\([^\)]+\))?(\[[^\]]+\])?(\{[^\}]+\})?)(\S+\.(bmp|gif|jpg|jpeg|png))!/i) do |m|
Jean-Philippe Lang
Fixed: Textile image with style attribute cause internal server error....
r1004 style = $1
Jean-Philippe Lang
Fixed: inline attached image should not match partial filename (#2683)....
r2359 filename = $6.downcase
Jean-Philippe Lang
Added Redmine::WikiFormatting module and tests for wiki links....
r688 # search for the picture in attachments
Jean-Philippe Lang
Fixed: inline attached image should not match partial filename (#2683)....
r2359 if found = attachments.detect { |att| att.filename.downcase == filename }
Jean-Philippe Lang
Inline images alt attribute set to the attachment description....
r1313 image_url = url_for :only_path => only_path, :controller => 'attachments', :action => 'download', :id => found
desc = found.description.to_s.gsub(/^([^\(\)]*).*$/, "\\1")
alt = desc.blank? ? nil : "(#{desc})"
"!#{style}#{image_url}#{alt}!"
Jean-Philippe Lang
Added Redmine::WikiFormatting module and tests for wiki links....
r688 else
Jean-Philippe Lang
Fixed: inline attached image should not match partial filename (#2683)....
r2359 m
Jean-Philippe Lang
Added Redmine::WikiFormatting module and tests for wiki links....
r688 end
end
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Makes wiki text formatter pluggable....
r1953 text = Redmine::WikiFormatting.to_html(Setting.text_formatting, text) { |macro, args| exec_macro(macro, obj, args) }
Jean-Philippe Lang
Added Redmine::WikiFormatting module and tests for wiki links....
r688
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # different methods for formatting wiki links
case options[:wiki_links]
when :local
# used for local links to html files
Jean-Philippe Lang
Adds support for wiki links with anchor (#1647)....
r1697 format_wiki_link = Proc.new {|project, title, anchor| "#{title}.html" }
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 when :anchor
# used for single-file wiki export
Jean-Philippe Lang
Adds support for wiki links with anchor (#1647)....
r1697 format_wiki_link = Proc.new {|project, title, anchor| "##{title}" }
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 else
Jean-Philippe Lang
Adds support for wiki links with anchor (#1647)....
r1697 format_wiki_link = Proc.new {|project, title, anchor| url_for(:only_path => only_path, :controller => 'wiki', :action => 'index', :id => project, :page => title, :anchor => anchor) }
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Fixes:...
r1147 project = options[:project] || @project || (obj && obj.respond_to?(:project) ? obj.project : nil)
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 # Wiki links
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986 #
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 # Examples:
Jean-Philippe Lang
Wiki links can now refer other project wikis, using this syntax:...
r637 # [[mypage]]
# [[mypage|mytext]]
# wiki links can refer other project wikis, using project name or identifier:
# [[project:]] -> wiki starting page
Jean-Philippe Lang
Small change to ApplicationHelper#textilizable to allow links to other wikis main page with custom text (eg. project:|mytext)....
r647 # [[project:|mytext]]
Jean-Philippe Lang
Wiki links can now refer other project wikis, using this syntax:...
r637 # [[project:mypage]]
# [[project:mypage|mytext]]
Jean-Philippe Lang
Wiki links:...
r1265 text = text.gsub(/(!)?(\[\[([^\]\n\|]+)(\|([^\]\n\|]+))?\]\])/) do |m|
Jean-Philippe Lang
Textilized project descriptions on project list and home page....
r645 link_project = project
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 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)
page = $2
title ||= $1 if page.blank?
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 if link_project && link_project.wiki
Jean-Philippe Lang
Adds support for wiki links with anchor (#1647)....
r1697 # extract anchor
anchor = nil
if page =~ /^(.+?)\#(.+)$/
page, anchor = $1, $2
end
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 # check if page exists
wiki_page = link_project.wiki.find_page(page)
Jean-Philippe Lang
Adds support for wiki links with anchor (#1647)....
r1697 link_to((title || page), format_wiki_link.call(link_project, Wiki.titleize(page), anchor),
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 :class => ('wiki-page' + (wiki_page ? '' : ' new')))
else
# project or wiki doesn't exist
Jean-Philippe Lang
Leave wiki links untouched if target project doesn't exist or have no wiki....
r2375 all
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 end
Jean-Philippe Lang
Improved Redmine links:...
r703 else
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 all
Jean-Philippe Lang
Improved Redmine links:...
r703 end
Jean-Philippe Lang
Wiki links can now refer other project wikis, using this syntax:...
r637 end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 # Redmine links
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986 #
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 # Examples:
# Issues:
# #52 -> Link to issue #52
# Changesets:
# r52 -> Link to revision 52
Jean-Philippe Lang
Merged Git support branch (r1200 to r1226)....
r1222 # commit:a85130f -> Link to scmid starting with a85130f
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 # Documents:
# document#17 -> Link to document with id 17
# document:Greetings -> Link to the document with title "Greetings"
# document:"Some document" -> Link to the document with title "Some document"
# Versions:
# version#3 -> Link to version with id 3
# version:1.0.0 -> Link to version named "1.0.0"
# version:"1.0 beta 2" -> Link to version named "1.0 beta 2"
# Attachments:
# attachment:file.zip -> Link to the attachment of the current object named file.zip
Jean-Philippe Lang
Add Redmine links for repository files using source: and export: keyworkds (#867)....
r1252 # Source files:
# source:some/file -> Link to the file located at /some/file in the project's repository
# source:some/file@52 -> Link to the file's revision 52
# source:some/file#L120 -> Link to line 120 of the file
# source:some/file@52#L120 -> Link to line 120 of the file's revision 52
# export:some/file -> Force the download of the file
Jean-Philippe Lang
Adds links to forum messages using message#id syntax (#1756)....
r1728 # Forum messages:
# message#1218 -> Link to message with id 1218
Jean-Philippe Lang
Do not require a non-word character after a comma in Redmine links (#3561)....
r2704 text = text.gsub(%r{([\s\(,\-\>]|^)(!)?(attachment|document|version|commit|source|export|message)?((#|r)(\d+)|(:)([^"\s<>][^\s<>]*?|"[^"]+?"))(?=(?=[[:punct:]]\W)|,|\s|<|$)}) do |m|
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 leading, esc, prefix, sep, oid = $1, $2, $3, $5 || $7, $6 || $8
Jean-Philippe Lang
Added Redmine::WikiFormatting module and tests for wiki links....
r688 link = nil
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 if esc.nil?
if prefix.nil? && sep == 'r'
if project && (changeset = project.changesets.find_by_revision(oid))
Jean-Philippe Lang
Add Redmine links for repository files using source: and export: keyworkds (#867)....
r1252 link = link_to("r#{oid}", {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => oid},
Jean-Philippe Lang
Fixes:...
r1147 :class => 'changeset',
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 :title => truncate_single_line(changeset.comments, :length => 100))
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 end
elsif sep == '#'
oid = oid.to_i
case prefix
when nil
Jean-Philippe Lang
Add view_issues permission (#3187)....
r2925 if issue = Issue.visible.find_by_id(oid, :include => :status)
Jean-Philippe Lang
Fixes:...
r1147 link = link_to("##{oid}", {:only_path => only_path, :controller => 'issues', :action => 'show', :id => oid},
Jean-Philippe Lang
Replaces del tags by a css style (a.issue.closed) for closed issue links....
r1209 :class => (issue.closed? ? 'issue closed' : 'issue'),
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 :title => "#{truncate(issue.subject, :length => 100)} (#{issue.status.name})")
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 link = content_tag('del', link) if issue.closed?
end
when 'document'
if document = Document.find_by_id(oid, :include => [:project], :conditions => Project.visible_by(User.current))
Jean-Philippe Lang
Fixes:...
r1147 link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
:class => 'document'
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 end
when 'version'
if version = Version.find_by_id(oid, :include => [:project], :conditions => Project.visible_by(User.current))
Jean-Philippe Lang
Fixes:...
r1147 link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
:class => 'version'
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 end
Jean-Philippe Lang
Adds links to forum messages using message#id syntax (#1756)....
r1728 when 'message'
if message = Message.find_by_id(oid, :include => [:parent, {:board => :project}], :conditions => Project.visible_by(User.current))
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 link = link_to h(truncate(message.subject, :length => 60)), {:only_path => only_path,
Jean-Philippe Lang
Adds links to forum messages using message#id syntax (#1756)....
r1728 :controller => 'messages',
:action => 'show',
:board_id => message.board,
:id => message.root,
:anchor => (message.parent ? "message-#{message.id}" : nil)},
:class => 'message'
end
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 end
elsif sep == ':'
# removes the double quotes if any
name = oid.gsub(%r{^"(.*)"$}, "\\1")
case prefix
when 'document'
if project && document = project.documents.find_by_title(name)
Jean-Philippe Lang
Fixes:...
r1147 link = link_to h(document.title), {:only_path => only_path, :controller => 'documents', :action => 'show', :id => document},
:class => 'document'
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 end
when 'version'
if project && version = project.versions.find_by_name(name)
Jean-Philippe Lang
Fixes:...
r1147 link = link_to h(version.name), {:only_path => only_path, :controller => 'versions', :action => 'show', :id => version},
:class => 'version'
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 end
Jean-Philippe Lang
Merged Git support branch (r1200 to r1226)....
r1222 when 'commit'
if project && (changeset = project.changesets.find(:first, :conditions => ["scmid LIKE ?", "#{name}%"]))
Jean-Philippe Lang
Fixed: changesets titles should not be multiline in atom feeds (#1356)....
r1477 link = link_to h("#{name}"), {:only_path => only_path, :controller => 'repositories', :action => 'revision', :id => project, :rev => changeset.revision},
:class => 'changeset',
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 :title => truncate_single_line(changeset.comments, :length => 100)
Jean-Philippe Lang
Add Redmine links for repository files using source: and export: keyworkds (#867)....
r1252 end
when 'source', 'export'
if project && project.repository
name =~ %r{^[/\\]*(.*?)(@([0-9a-f]+))?(#(L\d+))?$}
path, rev, anchor = $1, $3, $5
Jean-Philippe Lang
Fixes "source:" links URLs (r1617)....
r1626 link = link_to h("#{prefix}:#{name}"), {:controller => 'repositories', :action => 'entry', :id => project,
:path => to_path_param(path),
Jean-Philippe Lang
Add Redmine links for repository files using source: and export: keyworkds (#867)....
r1252 :rev => rev,
:anchor => anchor,
:format => (prefix == 'export' ? 'raw' : nil)},
:class => (prefix == 'export' ? 'source download' : 'source')
Jean-Philippe Lang
Merged Git support branch (r1200 to r1226)....
r1222 end
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 when 'attachment'
if attachments && attachment = attachments.detect {|a| a.filename == name }
Jean-Philippe Lang
Fixes:...
r1147 link = link_to h(attachment.filename), {:only_path => only_path, :controller => 'attachments', :action => 'download', :id => attachment},
:class => 'attachment'
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 end
end
Jean-Philippe Lang
Improved Redmine links:...
r703 end
Jean-Philippe Lang
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments....
r538 end
Jean-Philippe Lang
Redmine links can be used to link to documents, versions and attachments....
r1050 leading + (link || "#{prefix}#{sep}#{oid}")
Jean-Philippe Lang
Attachments can now be added to wiki pages (original patch by Pavol Murin). Only authorized users can add/delete attachments....
r538 end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Added Redmine::WikiFormatting module and tests for wiki links....
r688 text
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Added wiki diff....
r580 # Same as Rails' simple_format helper without using paragraphs
def simple_format_without_paragraph(text)
text.to_s.
gsub(/\r\n?/, "\n"). # \r\n and \r -> \n
gsub(/\n\n+/, "<br /><br />"). # 2+ newline -> 2 br
gsub(/([^\n]\n)(?=[^\n])/, '\1<br />') # 1 newline -> br
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def lang_options_for_select(blank=true)
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986 (blank ? [["(auto)", ""]] : []) +
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 valid_languages.collect{|lang| [ ll(lang.to_s, :general_lang_name), lang.to_s]}.sort{|x,y| x.last <=> y.last }
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def label_tag_for(name, option_tags = nil, options = {})
label_text = l(("field_"+field.to_s.gsub(/\_id$/, "")).to_sym) + (options.delete(:required) ? @template.content_tag("span", " *", :class => "required"): "")
content_tag("label", label_text)
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def labelled_tabular_form_for(name, object, options, &proc)
options[:html] ||= {}
Jean-Philippe Lang
Adds an optional description to attachments....
r1166 options[:html][:class] = 'tabular' unless options[:html].has_key?(:class)
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 form_for(name, object, options.merge({ :builder => TabularFormBuilder, :lang => current_language}), &proc)
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Redirected user to where he is coming from after logging hours (#1062)....
r1339 def back_url_hidden_field_tag
Jean-Philippe Lang
Redirect user to the previous page after logging in (#1679)....
r1686 back_url = params[:back_url] || request.env['HTTP_REFERER']
Jean-Philippe Lang
Do not escape back_url twice when login fails....
r2212 back_url = CGI.unescape(back_url.to_s)
Jean-Philippe Lang
Escape back_url field value (#2320)....
r2123 hidden_field_tag('back_url', CGI.escape(back_url)) unless back_url.blank?
Jean-Philippe Lang
Redirected user to where he is coming from after logging hours (#1062)....
r1339 end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def check_all_links(form_name)
link_to_function(l(:button_check_all), "checkAll('#{form_name}', true)") +
" | " +
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986 link_to_function(l(:button_uncheck_all), "checkAll('#{form_name}', false)")
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Roadmap progress bars now differentiate the progress due to closed issues from the open issues progress (2 different colors)....
r941 def progress_bar(pcts, options={})
pcts = [pcts, pcts] unless pcts.is_a?(Array)
pcts[1] = pcts[1] - pcts[0]
pcts << (100 - pcts[1] - pcts[0])
Jean-Philippe Lang
Roadmap: more accurate completion percentage calculation (done ratio of open issues is now taken into account)....
r895 width = options[:width] || '100px;'
legend = options[:legend] || ''
content_tag('table',
content_tag('tr',
Jean-Philippe Lang
Use style attribute for setting width of table cells in progress bars (#2267)....
r2082 (pcts[0] > 0 ? content_tag('td', '', :style => "width: #{pcts[0].floor}%;", :class => 'closed') : '') +
(pcts[1] > 0 ? content_tag('td', '', :style => "width: #{pcts[1].floor}%;", :class => 'done') : '') +
(pcts[2] > 0 ? content_tag('td', '', :style => "width: #{pcts[2].floor}%;", :class => 'todo') : '')
Jean-Philippe Lang
Roadmap: more accurate completion percentage calculation (done ratio of open issues is now taken into account)....
r895 ), :class => 'progress', :style => "width: #{width};") +
content_tag('p', legend, :class => 'pourcent')
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Added AJAX based context menu on the project issue list that provide shortcuts for editing, re-assigning, changing the status or the priority, moving or deleting an issue....
r859 def context_menu_link(name, url, options={})
options[:class] ||= ''
if options.delete(:selected)
options[:class] << ' icon-checked disabled'
options[:disabled] = true
end
if options.delete(:disabled)
options.delete(:method)
options.delete(:confirm)
options.delete(:onclick)
options[:class] << ' disabled'
url = '#'
end
link_to name, url, options
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 def calendar_for(field_id)
Jean-Philippe Lang
Move repetitive calendar include code from views into helper (patch #966 by Peter Suschlik)....
r1300 include_calendar_headers_tags
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 image_tag("calendar.png", {:id => "#{field_id}_trigger",:class => "calendar-trigger"}) +
javascript_tag("Calendar.setup({inputField : '#{field_id}', ifFormat : '%Y-%m-%d', button : '#{field_id}_trigger' });")
end
Jean-Philippe Lang
Move repetitive calendar include code from views into helper (patch #966 by Peter Suschlik)....
r1300
def include_calendar_headers_tags
unless @calendar_headers_tags_included
@calendar_headers_tags_included = true
content_for :header_tags do
javascript_include_tag('calendar/calendar') +
Jean-Philippe Lang
Fixed: Calendar popup broken by i18n refactoring (#3168)....
r2591 javascript_include_tag("calendar/lang/calendar-#{current_language.to_s.downcase}.js") +
Jean-Philippe Lang
Move repetitive calendar include code from views into helper (patch #966 by Peter Suschlik)....
r1300 javascript_include_tag('calendar/calendar-setup') +
stylesheet_link_tag('calendar')
end
end
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Application layout refactored....
r736 def content_for(name, content = nil, &block)
@has_content ||= {}
@has_content[name] = true
super(name, content, &block)
end
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Application layout refactored....
r736 def has_content?(name)
(@has_content && @has_content[name]) || false
end
Jean-Philippe Lang
Makes wiki text formatter pluggable....
r1953
Jean-Philippe Lang
Changes ApplicationHelper#gravatar_for_mail to #avatar that takes a User or a String (less code in views)....
r1998 # Returns the avatar image tag for the given +user+ if avatars are enabled
# +user+ can be a User or a string that will be scanned for an email address (eg. 'joe <joe@foo.bar>')
def avatar(user, options = { })
Eric Davis
Added an option to turn user Gravatars on or off...
r1970 if Setting.gravatar_enabled?
Eric Davis
Enable SSL gravatars when Redmine is using https. (#2718)...
r2728 options.merge!({:ssl => Setting.protocol == 'https'})
Jean-Philippe Lang
Changes ApplicationHelper#gravatar_for_mail to #avatar that takes a User or a String (less code in views)....
r1998 email = nil
if user.respond_to?(:mail)
email = user.mail
elsif user.to_s =~ %r{<(.+?)>}
email = $1
end
return gravatar(email.to_s.downcase, options) unless email.blank? rescue nil
Eric Davis
Added an option to turn user Gravatars on or off...
r1970 end
end
Jean-Philippe Lang
Makes wiki text formatter pluggable....
r1953 private
Jean-Philippe Lang
Email address should be lowercased for gravatar (#2145)....
r1986
Jean-Philippe Lang
Makes wiki text formatter pluggable....
r1953 def wiki_helper
helper = Redmine::WikiFormatting.helper_for(Setting.text_formatting)
extend helper
return self
end
Eric Davis
Converted routing and urls to follow the Rails REST convention....
r2315
def link_to_remote_content_update(text, url_params)
link_to_remote(text,
{:url => url_params, :method => :get, :update => 'content', :complete => 'window.scrollTo(0,0)'},
{:href => url_for(:params => url_params)}
)
end
Jean-Philippe Lang
Initial commit...
r2 end