From c4b1a5f5ea338d9be6b24f29a562b567b3c2598b Mon Sep 17 00:00:00 2001 From: Marin Jankovski Date: Mon, 28 Apr 2014 16:22:31 +0200 Subject: [PATCH] Allow nested files in wiki. --- app/models/project_wiki.rb | 9 ++++++++- app/models/wiki_page.rb | 11 ++++++++++- app/views/projects/wikis/_new.html.haml | 2 +- config/routes.rb | 2 +- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/app/models/project_wiki.rb b/app/models/project_wiki.rb index 163302a18f7..08a52782475 100644 --- a/app/models/project_wiki.rb +++ b/app/models/project_wiki.rb @@ -64,7 +64,8 @@ class ProjectWiki # # Returns an initialized WikiPage instance or nil def find_page(title, version = nil) - if page = wiki.page(title, version) + page_title, page_dir = page_title_and_dir(title) + if page = wiki.page(page_title, version, page_dir) WikiPage.new(self, page, true) else nil @@ -90,6 +91,12 @@ class ProjectWiki wiki.delete_page(page, commit_details(:deleted, message, page.title)) end + def page_title_and_dir(title) + title_array = title.split("/") + title = title_array.pop + [title.gsub(/\.[^.]*$/, ""), title_array.join("/")] + end + private def create_repo! diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb index 76f311ed0b4..c95b82734ab 100644 --- a/app/models/wiki_page.rb +++ b/app/models/wiki_page.rb @@ -175,8 +175,17 @@ class WikiPage end def save(method, *args) + if valid? && wiki.send(method, *args) - @page = wiki.wiki.paged(title) + + page_details = if method == :update_page + @page.path + else + title + end + + page_title, page_dir = wiki.page_title_and_dir(page_details) + @page = wiki.wiki.paged(page_title, page_dir) set_attributes diff --git a/app/views/projects/wikis/_new.html.haml b/app/views/projects/wikis/_new.html.haml index 8cb7fa8aa0b..1ce292a02df 100644 --- a/app/views/projects/wikis/_new.html.haml +++ b/app/views/projects/wikis/_new.html.haml @@ -9,6 +9,6 @@ %span Page slug = text_field_tag :new_wiki_path, nil, placeholder: 'how-to-setup', class: 'form-control', required: true, :'data-wikis-path' => project_wikis_path(@project) %p.hint - Please don't use spaces and slashes + Please don't use spaces. .modal-footer = link_to 'Build', '#', class: 'build-new-wiki btn btn-create' diff --git a/config/routes.rb b/config/routes.rb index f23542cc893..3e32068d8f7 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -204,7 +204,7 @@ Gitlab::Application.routes.draw do end end - resources :wikis, only: [:show, :edit, :destroy, :create], constraints: {id: /[a-zA-Z.0-9_\-]+/} do + resources :wikis, only: [:show, :edit, :destroy, :create], constraints: {id: /[a-zA-Z.0-9_\-\/]+/} do collection do get :pages put ':id' => 'wikis#update'