OSDN Git Service

ccd856c51609d89a8c7a4476a295b87332e6abf4
[pettanr/pettanr.git] / lib / view / filer / filer.rb
1   class FilerView
2     attr :filer_manifest, :item_name, :manifest, :filer_conf, 
3       :symbol, :caption, :summary, :icon, :date, :edit
4     def initialize filer_manifest, items, operators, paginate
5       @filer_manifest = filer_manifest
6       @items = items
7       @file_items = @items.map {|item| 
8         FileItem.new self, @filer_manifest
9       }
10     end
11     
12     def render view
13     end
14     
15       def model_name
16         @item_name
17       end
18       
19       def model
20         model_name.classify.constantize
21       end
22       
23   end
24   
25   class FileItemView
26     attr :item, :operators
27     def initialize item, operators, filer_manifest
28       @item = item
29       @operators = operators
30       @filer_manifest = filer_manifest
31       @symbol = SymbolView self, @filer_manifest.symbol.symbol_manifest
32     end
33     
34     def caption view
35       @caption.render view, @item, @operators
36     end
37     
38     def summary view
39       @summary.render view, @item, @operators
40     end
41     
42     def icon view
43       @icon.render view, @item, @operators
44     end
45     
46     def date view
47       @date.render view, @item, @operators
48     end
49     
50     def edit view
51       @edit.render view, @item, @operators
52     end
53     
54     def render view
55     end
56     
57   end
58   
59   class SymbolView
60     def initialize file_item, symbol_manifest
61       @symbol_manifest = symbol_manifest
62     end
63     
64     def render view
65      if @tag_method_name == :tag_template
66        view.render item.path_name + '/' + @symbol_conf['name'], :item => item
67      else
68        link = self.__send__(@link_method_name, view, item, operators)
69        tag = self.__send__(@tag_method_name, view, item, operators)
70        unless tag.blank?
71          view.link_to_unless link.blank?, tag, link
72        end
73      end
74     end
75
76   end
77   
78 module Manifest
79   module SymbolModule
80     class Symbol 
81       def initialize symbol_conf
82         @symbol_conf = symbol_conf || {}
83         @link_conf = @symbol_conf['link'] || {'type' => 'action', 'name' => 'show'}
84         @type_conf = @symbol_conf['type'] || 'image'
85         @link_method_name = self.link_method_name
86         @tag_method_name = self.tag_method_name
87       end
88       
89       def link_method_name
90         case @link_conf['type']
91         when 'action'
92           case @link_conf['name']
93           when 'show'
94             :link_action_show
95           else
96             :link_action_else
97           end
98         when 'none'
99           :link_none
100         when 'url_column'
101           :link_url_column
102         else
103           :link_else
104         end
105       end
106       
107       def link_action_show view, item, operators
108         view.polymorphic_path(item)
109       end
110       
111       def link_action_else view, item, operators
112         view.polymorphic_path(item, :action => @link_conf['name'])
113       end
114       
115       def link_none view, item, operators
116         ''
117       end
118       
119       def link_url_column view, item, operators
120         item.__send__(@link_conf['name']).to_s
121       end
122       
123       def link_else view, item, operators
124         ''
125       end
126       
127       def tag_image view, item, operators
128         view.tag(:img, :src => @symbol_conf['name'], :width => 64, :height => 64)
129       end
130       
131       def tag_picture view, item, operators
132         view.tag(:img, item.__send__(@symbol_conf['name']))
133       end
134       
135       def tag_template view, item, operators
136         view.render item.path_name + '/' + @symbol_conf['name'], :item => item
137         nil
138       end
139       
140       def tag_else view, item, operators
141         'no.png'
142       end
143       
144       def visible?
145         self.link_method_name != :link_none
146       end
147       
148       def render view, item, operators
149         if @tag_method_name == :tag_template
150           view.render item.path_name + '/' + @symbol_conf['name'], :item => item
151         else
152           link = self.__send__(@link_method_name, view, item, operators)
153           tag = self.__send__(@tag_method_name, view, item, operators)
154           unless tag.blank?
155             view.link_to_unless link.blank?, tag, link
156           end
157         end
158       end
159       
160     end
161     
162   end
163 end