Project

General

Profile

Feature #2028 » patch_for_feature_2028_v2.diff

Leandro Nunes dos Santos Nunes, 2008-10-15 00:18

View differences:

test/unit/wiki_page_test.rb (cópia de trabalho)
53 53
    assert_nil page.parent_title
54 54
    
55 55
    page = WikiPage.find_by_title('Page_with_an_inline_image')
56
    assert_equal 'CookBook documentation', page.parent_title
56
    assert_equal 'CookBook_documentation', page.parent_title
57 57
  end
58

  
59
  def test_parent_pretty_title
60
    page = WikiPage.find_by_title('Another_page')
61
    assert_nil page.parent_title
62
    
63
    page = WikiPage.find_by_title('Page_with_an_inline_image')
64
    assert_equal 'CookBook documentation', page.parent_pretty_title
65
  end  
58 66
  
59 67
  def test_assign_parent
60 68
    page = WikiPage.find_by_title('Another_page')
app/helpers/application_helper.rb (cópia de trabalho)
197 197
  
198 198
  def breadcrumb(*args)
199 199
    elements = args.flatten
200
    elements.any? ? content_tag('p', args.join(' » ') + ' » ', :class => 'breadcrumb') : nil
200
    last_element = elements.pop
201
    last_element.nil? ? nil : content_tag('p', elements.join(' » ') + ' » ' + last_element, :class => 'breadcrumb')
201 202
  end
202 203
  
203 204
  def html_title(*args)
......
260 261
    text = (Setting.text_formatting == 'textile') ?
261 262
      Redmine::WikiFormatting.to_html(text) { |macro, args| exec_macro(macro, obj, args) } :
262 263
      simple_format(auto_link(h(text)))
263

  
264 264
    # different methods for formatting wiki links
265 265
    case options[:wiki_links]
266 266
    when :local
......
270 270
      # used for single-file wiki export
271 271
      format_wiki_link = Proc.new {|project, title, anchor| "##{title}" }
272 272
    else
273
      format_wiki_link = Proc.new {|project, title, anchor| url_for(:only_path => only_path, :controller => 'wiki', :action => 'index', :id => project, :page => title, :anchor => anchor) }
273
      format_wiki_link = Proc.new {|project, title, anchor, parent| url_for(:only_path => only_path, :controller => 'wiki', :action => 'index', :id => project, :page => title, :anchor => anchor, :parent => parent && parent.title) }
274 274
    end
275 275
    
276 276
    project = options[:project] || @project || (obj && obj.respond_to?(:project) ? obj.project : nil)
......
303 303
          end
304 304
          # check if page exists
305 305
          wiki_page = link_project.wiki.find_page(page)
306
          link_to((title || page), format_wiki_link.call(link_project, Wiki.titleize(page), anchor),
306
          link_to((title || page), format_wiki_link.call(link_project, Wiki.titleize(page), anchor, obj && obj.page),
307 307
                                   :class => ('wiki-page' + (wiki_page ? '' : ' new')))
308 308
        else
309 309
          # project or wiki doesn't exist
app/models/wiki_page.rb (cópia de trabalho)
113 113
  end
114 114
  
115 115
  def parent_title
116
    @parent_title || (self.parent && self.parent.pretty_title)
116
    @parent_title || (self.parent && self.parent.title)
117 117
  end
118 118
  
119 119
  def parent_title=(t)
120
    return self.parent if (self.parent && (self.parent.title == t))
120 121
    @parent_title = t
121 122
    parent_page = t.blank? ? nil : self.wiki.find_page(t)
122 123
    self.parent = parent_page
123 124
  end
125

  
126
  def parent_pretty_title
127
    @parent_pretty_title || (self.parent && self.parent.pretty_title)
128
  end
124 129
  
125 130
  protected
126 131
  
app/controllers/wiki_controller.rb (cópia de trabalho)
52 52
      send_data(@content.text, :type => 'text/plain', :filename => "#{@page.title}.txt")
53 53
      return
54 54
    end
55
	@editable = editable?
55
    @editable = editable?
56 56
    render :action => 'show'
57 57
  end
58 58
  
59 59
  # edit an existing page or a new one
60 60
  def edit
61
    @page = @wiki.find_or_new_page(params[:page])    
61
    @page = @wiki.find_or_new_page(params[:page])
62
    @page.parent_title = params[:parent] if params[:parent]
62 63
    return render_403 unless editable?
64

  
63 65
    @page.content = WikiContent.new(:page => @page) if @page.new_record?
64 66
    
65 67
    @content = @page.content_for_version(params[:version])
......
70 72
      # To prevent StaleObjectError exception when reverting to a previous version
71 73
      @content.version = @page.content.version
72 74
    else
73
      if !@page.new_record? && @content.text == params[:content][:text]
74
        # don't save if text wasn't changed
75
        redirect_to :action => 'index', :id => @project, :page => @page.title
76
        return
77
      end
78
      #@content.text = params[:content][:text]
79
      #@content.comments = params[:content][:comments]
80 75
      @content.attributes = params[:content]
81 76
      @content.author = User.current
82
      # if page is new @page.save will also save content, but not if page isn't a new record
83
      if (@page.new_record? ? @page.save : @content.save)
84
        redirect_to :action => 'index', :id => @project, :page => @page.title
85
      end
77
      @page.save if @page.changed?
78
      @content.save if @content.changed?
79
      redirect_to :action => 'index', :id => @project, :page => @page.title
86 80
    end
87 81
  rescue ActiveRecord::StaleObjectError
88 82
    # Optimistic locking exception
app/views/wiki/show.rhtml (cópia de trabalho)
10 10
<%= link_to_if_authorized(l(:label_history), {:action => 'history', :page => @page.title}, :class => 'icon icon-history') %>
11 11
</div>
12 12

  
13
<%= breadcrumb(@page.ancestors.reverse.collect {|parent| link_to h(parent.pretty_title), {:page => parent.title}}) %>
13
<%= breadcrumb(@page.ancestors.reverse.push(@page).collect {|parent| link_to h(parent.pretty_title), {:page => parent.title}}) %>
14 14

  
15 15
<% if @content.version != @page.content.version %>
16 16
    <p>    
app/views/wiki/edit.rhtml (cópia de trabalho)
1
<%= breadcrumb(@page.ancestors.reverse.push(@page).collect {|parent| link_to h(parent.pretty_title), {:page => parent.title}}) %>
2

  
1 3
<h2><%= @page.pretty_title %></h2>
2 4

  
3 5
<% form_for :content, @content, :url => {:action => 'edit', :page => @page.title}, :html => {:id => 'wiki_form'} do |f| %>
......
6 8

  
7 9
<p><%= f.text_area :text, :cols => 100, :rows => 25, :class => 'wiki-edit', :accesskey => accesskey(:edit) %></p>
8 10
<p><label><%= l(:field_comments) %></label><br /><%= f.text_field :comments, :size => 120 %></p>
11
<p><label><%= l(:field_parent_title) %></label><br /><%= select_tag 'parent', options_for_select(@wiki.pages.collect{|page| [page.pretty_title,page.title]}, @page.parent_title) %></p>
9 12
<p><%= submit_tag l(:button_save) %>
10 13
   <%= link_to_remote l(:label_preview), 
11 14
                       { :url => { :controller => 'wiki', :action => 'preview', :id => @project, :page => @page.title },
app/views/wiki/rename.rhtml (cópia de trabalho)
6 6
<div class="box">
7 7
<p><%= f.text_field :title, :required => true, :size => 100  %></p>
8 8
<p><%= f.check_box :redirect_existing_links %></p>
9
<p><%= f.text_field :parent_title, :size => 100  %></p>
9
<p><%= f.select :parent_title, @wiki.pages.collect{|page| [page.pretty_title,page.title]} %></p>
10 10
</div>
11 11
<%= submit_tag l(:button_rename) %>
12 12
<% end %>
(2-2/2)