file_presenter.rb
2.44 KB
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
class FilePresenter < Presenter
def self.base_class
Article
end
def self.available?(instance)
instance.kind_of?(UploadedFile) && !instance.kind_of?(Image)
end
def download? view = nil
view.blank?
end
def short_description
file_type = if content_type.present?
content_type.sub(/^application\//, '').sub(/^x-/, '').sub(/^image\//, '')
else
_('Unknown')
end
_("File (%s)") % file_type
end
# Define the css classes to style the page fragment with the file related
# content. If you want other classes to identify this area to your
# customized presenter, so do this:
# def css_class_list
# [super, 'myclass'].flatten
# end
def css_class_list
[ encapsulated_instance.css_class_list,
'file-' + self.class.to_s.split(/:+/).map(&:underscore)[1..-1].join('-'),
'content-type_' + self.content_type.split('/')[0],
'content-type_' + self.content_type.gsub(/[^a-z0-9]/i,'-')
].flatten
end
# Enable file presenter to customize the css classes on view_page.rhtml
# You may not overwrite this method on your customized presenter.
def css_class_name
[css_class_list].flatten.compact.join(' ')
end
# The generic icon class-name or the specific file path.
# You may replace this method on your custom FilePresenter.
# See the current used icons class-names in public/designs/icons/tango/style.css
def icon_name
if mime_type
[ mime_type.split('/')[0], mime_type.gsub(/[^a-z0-9]/i, '-') ]
else
'upload-file'
end
end
# Automatic render `file_presenter/<custom>.html.erb` to display your
# custom presenter html content.
# You may not overwrite this method on your customized presenter.
# A variable with the same presenter name will be created to refer
# to the file object.
# Example:
# The `FilePresenter::Image` render `file_presenter/image.html.erb`
# inside the `file_presenter/image.html.erb` you can access the
# required `FilePresenter::Image` instance in the `image` variable.
def to_html(options = {})
file = self
proc do
render :partial => file.class.to_s.underscore,
:locals => { :options => options },
:object => file
end
end
end
Dir.glob(File.join('app', 'presenters', 'file', '*.rb')) do |file|
load file
end
# Preload FilePresenters from plugins to allow `FilePresenter.for()` to work
Dir.glob(File.join('plugins', '*', 'lib', 'presenters', '*.rb')) do |file|
load file
end