2018-08-18 11:19:57 +00:00
# frozen_string_literal: true
2016-12-27 03:44:03 +00:00
module WikiHelper
2018-09-04 10:39:08 +00:00
include API :: Helpers :: RelatedResourcesHelpers
2016-12-27 03:44:03 +00:00
# Produces a pure text breadcrumb for a given page.
#
# page_slug - The slug of a WikiPage object.
#
# Returns a String composed of the capitalized name of each directory and the
# capitalized name of the page itself.
def breadcrumb ( page_slug )
2017-06-21 13:48:12 +00:00
page_slug . split ( '/' )
. map { | dir_or_page | WikiPage . unhyphenize ( dir_or_page ) . capitalize }
. join ( ' / ' )
2016-12-27 03:44:03 +00:00
end
2017-08-16 12:13:34 +00:00
def wiki_breadcrumb_dropdown_links ( page_slug )
page_slug_split = page_slug . split ( '/' )
page_slug_split . pop ( 1 )
current_slug = " "
page_slug_split
. map do | dir_or_page |
2017-09-06 10:55:23 +00:00
current_slug = " #{ current_slug } #{ dir_or_page } / "
2017-08-16 12:13:34 +00:00
add_to_breadcrumb_dropdown link_to ( WikiPage . unhyphenize ( dir_or_page ) . capitalize , project_wiki_path ( @project , current_slug ) ) , location : :after
end
end
2018-02-05 17:17:21 +00:00
def wiki_page_errors ( error )
return unless error
content_tag ( :div , class : 'alert alert-danger' ) do
case error
when WikiPage :: PageChangedError
page_link = link_to s_ ( " WikiPageConflictMessage|the page " ) , project_wiki_path ( @project , @page ) , target : " _blank "
concat (
( s_ ( " WikiPageConflictMessage|Someone edited the page the same time you did. Please check out %{page_link} and make sure your changes will not unintentionally remove theirs. " ) % { page_link : page_link } ) . html_safe
)
when WikiPage :: PageRenameError
s_ ( " WikiEdit|There is already a page with the same title in that path. " )
else
error . message
end
end
end
2018-09-04 10:39:08 +00:00
def wiki_attachment_upload_url
expose_url ( api_v4_projects_wikis_attachments_path ( id : @project . id ) )
end
2019-04-04 16:28:56 +00:00
2019-10-23 03:06:01 +00:00
WIKI_SORT_CSS_CLASSES = 'btn btn-default has-tooltip reverse-sort-btn qa-reverse-sort rspec-reverse-sort'
def wiki_sort_controls ( sort_params = { } , & block )
current_sort = sort_params [ :sort ] || ProjectWiki :: TITLE_ORDER
current_direction = ( sort_params [ :direction ] || 'asc' ) . inquiry
reversed_direction = current_direction . desc? ? 'asc' : 'desc'
icon_class = current_direction . desc? ? 'highest' : 'lowest'
sorting = sort_params . merge ( sort : current_sort , direction : reversed_direction )
opts = {
type : 'button' ,
class : WIKI_SORT_CSS_CLASSES ,
title : _ ( 'Sort direction' )
}
link_to ( yield ( sorting ) , opts ) do
2019-04-04 16:28:56 +00:00
sprite_icon ( " sort- #{ icon_class } " , size : 16 )
end
end
def wiki_sort_title ( key )
if key == ProjectWiki :: CREATED_AT_ORDER
s_ ( " Wiki|Created date " )
else
s_ ( " Wiki|Title " )
end
end
2019-10-23 03:06:01 +00:00
# Render the sprite icon given the current show_children state
def wiki_show_children_icon ( nesting )
icon_name , icon_text =
case nesting
when ProjectWiki :: NESTING_TREE
[ 'folder-open' , s_ ( " Wiki|Show folder contents " ) ]
when ProjectWiki :: NESTING_CLOSED
[ 'folder-o' , s_ ( " Wiki|Hide folder contents " ) ]
else
[ 'list-bulleted' , s_ ( " Wiki|Show files separately " ) ]
end
sprite_icon_with_text ( icon_name , icon_text , size : 16 )
end
def wiki_page_link ( wiki_page , nesting , project )
link = link_to ( wiki_page . title ,
project_wiki_path ( project , wiki_page ) ,
class : 'wiki-page-title' )
case nesting
when ProjectWiki :: NESTING_FLAT
tags = [ ]
if wiki_page . directory . present?
wiki_dir = WikiDirectory . new ( wiki_page . directory )
tags << link_to ( wiki_dir . slug , project_wiki_dir_path ( project , wiki_dir ) , class : 'wiki-page-dir-name' )
tags << content_tag ( :span , '/' , class : 'wiki-page-name-separator' )
end
tags << link
tags . join . html_safe
else
link
end
end
def sort_params_config
{
keys : [ :sort , :direction ] ,
defaults : {
sort : ProjectWiki :: TITLE_ORDER , direction : ProjectWiki :: DIRECTION_ASC
} ,
allowed : {
sort : ProjectWiki :: SORT_ORDERS , direction : ProjectWiki :: SORT_DIRECTIONS
}
}
end
def nesting_params_config ( sort_key )
default_val = case sort_key
when ProjectWiki :: CREATED_AT_ORDER
ProjectWiki :: NESTING_FLAT
else
ProjectWiki :: NESTING_CLOSED
end
{
keys : [ :show_children ] ,
defaults : { show_children : default_val } ,
allowed : { show_children : ProjectWiki :: NESTINGS }
}
end
def process_params ( config )
unprocessed = params . permit ( * config [ :keys ] )
processed = unprocessed
. with_defaults ( config [ :defaults ] )
. tap { | h | Gitlab :: Utils . allow_hash_values ( h , config [ :allowed ] ) }
. to_hash
. transform_keys ( & :to_sym )
if processed . keys == config [ :keys ]
processed . size == 1 ? processed . values . first : processed
else
raise ActionController :: BadRequest , " illegal parameters: #{ unprocessed } "
end
end
def home_page?
params [ :id ] == 'home'
end
2016-12-27 03:44:03 +00:00
end