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
|
# File 'lib/qui-index-table-main-helper.rb', line 4
def index_table(data, options = {}, &b)
@index_table_count ||= 0
raise RuntimeError, "@index_table_count must be integer" unless @index_table_count.is_a? Fixnum
options[:headers] ||= []
options[:id] ||= "index_table_#{@index_table_count}"
concat (data) if data.is_a? WillPaginate::Collection if defined?(WillPaginate) and defined?()
concat "<table class=\"index\" id=\"#{options[:id]}\"><thead><tr>"
options[:headers].each do |h|
h = { nil => { :width => :oneicon } } if h == :oneicon or h == :check
if h.is_a? Symbol
if not data.nil? and data.respond_to?(:first) and h.to_s[0] == 46
if options[:class_name] and options[:class_name].respond_to? :ancestors and options[:class_name].ancestors.include? ActiveRecord::Base
klass = options[:class_name]
elsif data.first.nil?
klass = controller.class.to_s.demodulize.gsub("Controller", "").singularize.constantize
elsif data.first.class.respond_to? :human_attribute_name
klass = data.first.class
end
if klass
attribute = h.to_s[1..-1]
sort_sql = nil
if klass.respond_to? :generic_fields
generic_field = klass.generic_fields[:index].detect{ |f| f[:name] == attribute.to_sym }
sort_sql = true if generic_field and generic_field[:options][:sort_sql]
end
if klass.columns_hash.has_key? attribute or sort_sql
concat index_table_th(klass.human_attribute_name(attribute).mb_chars.upcase, :sort_by => attribute, :sort_order => (params[:sort_by] == attribute and params[:sort_order] == "A" ? "D" : "A"))
else
concat index_table_th(klass.human_attribute_name(attribute).mb_chars.upcase)
end
else
concat index_table_th t(h)
end
else
concat index_table_th t(h)
end
elsif h.is_a? Hash
name = h.keys.first
if name
name = t(name)
else
name = " "
end
if h.values.first[:width] == :oneicon
concat content_tag(:th, name, :class => "oneicon")
elsif h.values.first[:width] == :expand
concat content_tag(:th, name)
else
concat content_tag(:th, name)
end
elsif h.is_a? String
concat content_tag(:th, h)
end
end
concat "</tr></thead><tbody>"
options[:h1][:last_value] == nil if options[:h1]
data.each do |row|
if options[:h1]
if options[:h1][:last_value] != row.send(options[:h1][:check])
concat "<tr class=\"h1\">"
concat options[:h1][:onchange].call(row)
concat "</tr>"
options[:h1][:last_value] = row.send(options[:h1][:check])
reset_cycle(options[:id])
end
end
concat "<tr class=\"#{cycle("even", "odd", :name => options[:id])}\">"
concat b.call(row)
concat "</tr>"
end
concat "</tbody></table>"
if defined?(WillPaginate) and data.is_a?(WillPaginate::Collection)
concat (data) if defined?()
concat (data) if defined?()
end
@index_table_count += 1
""
end
|