Commit c4b1a5f5ea338d9be6b24f29a562b567b3c2598b

Authored by Marin Jankovski
1 parent 0050c07f

Allow nested files in wiki.

app/models/project_wiki.rb
... ... @@ -64,7 +64,8 @@ class ProjectWiki
64 64 #
65 65 # Returns an initialized WikiPage instance or nil
66 66 def find_page(title, version = nil)
67   - if page = wiki.page(title, version)
  67 + page_title, page_dir = page_title_and_dir(title)
  68 + if page = wiki.page(page_title, version, page_dir)
68 69 WikiPage.new(self, page, true)
69 70 else
70 71 nil
... ... @@ -90,6 +91,12 @@ class ProjectWiki
90 91 wiki.delete_page(page, commit_details(:deleted, message, page.title))
91 92 end
92 93  
  94 + def page_title_and_dir(title)
  95 + title_array = title.split("/")
  96 + title = title_array.pop
  97 + [title.gsub(/\.[^.]*$/, ""), title_array.join("/")]
  98 + end
  99 +
93 100 private
94 101  
95 102 def create_repo!
... ...
app/models/wiki_page.rb
... ... @@ -175,8 +175,17 @@ class WikiPage
175 175 end
176 176  
177 177 def save(method, *args)
  178 +
178 179 if valid? && wiki.send(method, *args)
179   - @page = wiki.wiki.paged(title)
  180 +
  181 + page_details = if method == :update_page
  182 + @page.path
  183 + else
  184 + title
  185 + end
  186 +
  187 + page_title, page_dir = wiki.page_title_and_dir(page_details)
  188 + @page = wiki.wiki.paged(page_title, page_dir)
180 189  
181 190 set_attributes
182 191  
... ...
app/views/projects/wikis/_new.html.haml
... ... @@ -9,6 +9,6 @@
9 9 %span Page slug
10 10 = text_field_tag :new_wiki_path, nil, placeholder: 'how-to-setup', class: 'form-control', required: true, :'data-wikis-path' => project_wikis_path(@project)
11 11 %p.hint
12   - Please don't use spaces and slashes
  12 + Please don't use spaces.
13 13 .modal-footer
14 14 = link_to 'Build', '#', class: 'build-new-wiki btn btn-create'
... ...
config/routes.rb
... ... @@ -204,7 +204,7 @@ Gitlab::Application.routes.draw do
204 204 end
205 205 end
206 206  
207   - resources :wikis, only: [:show, :edit, :destroy, :create], constraints: {id: /[a-zA-Z.0-9_\-]+/} do
  207 + resources :wikis, only: [:show, :edit, :destroy, :create], constraints: {id: /[a-zA-Z.0-9_\-\/]+/} do
208 208 collection do
209 209 get :pages
210 210 put ':id' => 'wikis#update'
... ...