forked from alno/irwi
-
Notifications
You must be signed in to change notification settings - Fork 0
/
wiki_pages_helper.rb
137 lines (110 loc) · 4.08 KB
/
wiki_pages_helper.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
module Irwi::Helpers::WikiPagesHelper
include Irwi::Support::TemplateFinder
include Irwi::Helpers::WikiPageAttachmentsHelper
# Edit form for wiki page model
def wiki_page_form( config = {}, &block )
form_for( @page, { :as => :page, :url => url_for( :action => :update ), :html=> { :class => 'wiki_form', :method => :post } }.merge!( config ), &block )
end
def wiki_page_new_path( page = CGI::escape(params[:path]) )
wiki_page_path( page, :new )
end
def wiki_page_edit_path( page = nil )
wiki_page_path( page, :edit )
end
def wiki_page_history_path( page = nil )
wiki_page_path( page, :history )
end
def wiki_page_compare_path( page = nil )
wiki_page_path( page, :compare )
end
def wiki_page_path( page = nil, action = :show )
if page
page = page.path if page.respond_to? :path
url_for( :action => action, :path => page )
else
url_for( :action => action )
end
end
def wiki_content( text )
sanitize( auto_link( Irwi.config.formatter.format( wiki_linkify( wiki_show_attachments(text) ) ) ) )
end
def wiki_diff( old_text, new_text )
Irwi.config.comparator.render_changes(h(old_text), h(new_text)).html_safe
end
def wiki_user( user )
return '<Unknown>'.html_safe unless user
"User##{user.id}"
end
def wiki_linkify( str )
str.gsub /\[\[
(?:([^\[\]\|]+)\|)?
([^\[\]]+)
\]\]
(\w+)?/xu do |m|
text = "#$2#$3"
link, anchor = if $1 then $1.split('#', 2) else $2 end
"<a href=\"#{wiki_link link}#{ '#' + anchor if anchor}\">#{text}</a>"
end.html_safe
end
def wiki_paginate( collection, &block )
Irwi.config.paginator.paginated_section( self, collection, &block )
end
def wiki_link( title )
if page = Irwi.config.page_class.find_by_title( title )
url_for( :controller => Irwi.config.controller_name, :action => :show, :path => page.path )
else
url_for( :controller => Irwi.config.controller_name, :action => :show, :path => CGI::escape(title) )
end
end
##
# Instead of having to translate strings and defining a default value:
#
# t("Hello World!", :default => 'Hello World!')
#
# We define this method to define the value only once:
#
# wt("Hello World!")
#
# Note that interpolation still works ...
#
# wt("Hello {{world}}!", :world => @world)
#
def wt(msg, *args)
config = args.extract_options!
config[:default] = msg
config[:scope] = 'wiki'
I18n.t(msg, config)
end
def wiki_page_style
render :partial => "#{template_dir '_wiki_page_style'}/wiki_page_style"
end
def wiki_page_info(page = nil)
page ||= @page # By default take page from instance variable
render :partial => "#{template_dir '_wiki_page_info'}/wiki_page_info", :locals => { :page => page }
end
def wiki_page_actions(page = nil)
page ||= @page # By default take page from instance variable
render :partial => "#{template_dir '_wiki_page_actions'}/wiki_page_actions", :locals => { :page => page }
end
def wiki_page_history(page = nil,versions = nil)
page ||= @page # By default take page from instance variable
versions ||= @versions || page.versions
render :partial => "#{template_dir '_wiki_page_history'}/wiki_page_history", :locals => { :page => page, :versions => versions, :with_form => (versions.size > 1) }
end
def wiki_page_attachments(page)
return unless Irwi::config.page_attachment_class_name
page.attachments.each do |attachment|
concat image_tag(attachment.wiki_page_attachment.url(:thumb))
concat "Attachment_#{attachment.id}"
concat link_to(wt('Remove'), wiki_remove_page_attachment_path(attachment.id), :method => :delete)
end
form_for(:wiki_page_attachment,
Irwi.config.page_attachment_class.new,
:url => wiki_add_page_attachment_path(@page),
:html => { :multipart => true }) do |form|
concat form.file_field :wiki_page_attachment
concat form.hidden_field :page_id, :value => @page.id
concat form.submit 'Add Attachment'
end
end
end