king_views 1.1.6 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/Gemfile +19 -0
- data/Rakefile +5 -28
- data/king_form/lib/king_form/builder/base.rb +23 -9
- data/king_form/lib/king_form/builder/definition_list.rb +8 -4
- data/king_form/lib/king_form/builder/form_fields.rb +3 -2
- data/king_form/lib/king_form/builder/form_fields_overrides.rb +5 -5
- data/king_form/lib/king_form/builder/labeled.rb +3 -3
- data/king_form/lib/king_form/helper.rb +21 -4
- data/king_form/lib/king_form/nested_form_helper.rb +9 -9
- data/king_form/lib/king_form/overrides.rb +13 -13
- data/king_format/lib/helpers/formatting_helper.rb +21 -16
- data/king_format/lib/helpers/money_helper.rb +6 -6
- data/king_format/lib/king_format.rb +2 -0
- data/king_format/lib/model_mixins/has_date_fields.rb +6 -2
- data/king_format/lib/model_mixins/has_money_fields.rb +6 -2
- data/king_format/lib/model_mixins/has_percent_fields.rb +5 -1
- data/king_list/Rakefile +2 -13
- data/king_list/lib/king_list/builder/show.rb +9 -6
- data/king_list/lib/king_list/builder/table.rb +29 -72
- data/king_list/lib/king_list/list_helper.rb +60 -63
- data/king_views.gemspec +24 -71
- data/spec/king_list_spec.rb +19 -0
- data/spec/rails_app/Rakefile +7 -0
- data/spec/rails_app/app/controllers/application_controller.rb +4 -0
- data/spec/rails_app/app/controllers/posts_controller.rb +6 -0
- data/spec/rails_app/app/helpers/application_helper.rb +2 -0
- data/spec/rails_app/app/models/comment.rb +3 -0
- data/spec/rails_app/app/models/person.rb +3 -0
- data/spec/rails_app/app/models/post.rb +4 -0
- data/spec/rails_app/app/views/layouts/application.html.erb +14 -0
- data/spec/rails_app/app/views/posts/index.haml +23 -0
- data/spec/rails_app/config.ru +4 -0
- data/spec/rails_app/config/application.rb +44 -0
- data/spec/rails_app/config/boot.rb +10 -0
- data/spec/rails_app/config/database.yml +22 -0
- data/spec/rails_app/config/environment.rb +5 -0
- data/spec/rails_app/config/environments/development.rb +26 -0
- data/spec/rails_app/config/environments/production.rb +49 -0
- data/spec/rails_app/config/environments/test.rb +35 -0
- data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails_app/config/initializers/inflections.rb +10 -0
- data/spec/rails_app/config/initializers/mime_types.rb +5 -0
- data/spec/rails_app/config/initializers/secret_token.rb +7 -0
- data/spec/rails_app/config/initializers/session_store.rb +8 -0
- data/spec/rails_app/config/locales/en.yml +5 -0
- data/spec/rails_app/config/routes.rb +60 -0
- data/spec/rails_app/db/migrate/20110306212208_create_posts.rb +14 -0
- data/spec/rails_app/db/migrate/20110306212250_create_comments.rb +15 -0
- data/spec/rails_app/db/migrate/20110420222224_create_people.rb +15 -0
- data/spec/rails_app/db/schema.rb +30 -0
- data/spec/rails_app/public/404.html +26 -0
- data/spec/rails_app/public/422.html +26 -0
- data/spec/rails_app/public/500.html +26 -0
- data/spec/rails_app/public/favicon.ico +0 -0
- data/spec/rails_app/script/rails +6 -0
- data/spec/spec_helper.rb +65 -0
- metadata +238 -47
- data/king_list/test/king_list_test.rb +0 -9
- data/king_list/test/test_helper.rb +0 -3
@@ -7,7 +7,7 @@ module KingFormat
|
|
7
7
|
# -
|
8
8
|
module MoneyHelper
|
9
9
|
|
10
|
-
# returns the keys from money symbols als Hash{array} for select options
|
10
|
+
# returns the keys from money symbols als Hash{array} for select options
|
11
11
|
def money_selects
|
12
12
|
money_symbols.keys.sort
|
13
13
|
end
|
@@ -18,8 +18,8 @@ module KingFormat
|
|
18
18
|
# 'USD' => {:unit=>'$'}
|
19
19
|
def money_symbols
|
20
20
|
@money_symbols ||= begin
|
21
|
-
eur = {:format => '%n %u', :precision=> '2',:delimiter=>'.', :separator=>','}
|
22
|
-
dol = {:format => '%n
|
21
|
+
eur = {:format => '%n %u', :precision => '2',:delimiter => '.', :separator => ','}
|
22
|
+
dol = {:format => '%u%n', :precision => '2',:delimiter => ',', :separator => '.'}
|
23
23
|
{
|
24
24
|
'EUR' => eur.merge(:unit=>'€'),
|
25
25
|
'GBP' => dol.merge(:unit=>'£'),
|
@@ -37,7 +37,7 @@ module KingFormat
|
|
37
37
|
'HUF' => nil,
|
38
38
|
'LTL' => nil,
|
39
39
|
'LVL' => nil,
|
40
|
-
'PLN' =>
|
40
|
+
'PLN' => eur.merge(:unit=>'zł', :delimiter => ' '),
|
41
41
|
'RON' => nil,
|
42
42
|
'SEK' => nil,
|
43
43
|
'SKK' => nil,
|
@@ -60,6 +60,6 @@ module KingFormat
|
|
60
60
|
}
|
61
61
|
end
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
end
|
65
|
-
end
|
65
|
+
end
|
@@ -2,7 +2,11 @@ module KingFormat
|
|
2
2
|
module DateFields
|
3
3
|
|
4
4
|
def self.included(base)
|
5
|
-
|
5
|
+
if ActiveSupport::VERSION::MAJOR == 3 && ActiveSupport::VERSION::MINOR > 0
|
6
|
+
base.class_attribute :date_fields
|
7
|
+
else
|
8
|
+
base.send :class_inheritable_accessor, :date_fields
|
9
|
+
end
|
6
10
|
base.date_fields = []
|
7
11
|
base.extend(ClassMethods)
|
8
12
|
end
|
@@ -37,6 +41,6 @@ module KingFormat
|
|
37
41
|
self.class.date_fields.include?(fieldname.to_sym)
|
38
42
|
end
|
39
43
|
end
|
40
|
-
|
44
|
+
|
41
45
|
end #Fields
|
42
46
|
end#KingFormat
|
@@ -2,7 +2,11 @@ module KingFormat
|
|
2
2
|
module MoneyFields
|
3
3
|
|
4
4
|
def self.included(base)
|
5
|
-
|
5
|
+
if ActiveSupport::VERSION::MAJOR == 3 && ActiveSupport::VERSION::MINOR > 0
|
6
|
+
base.class_attribute :money_fields
|
7
|
+
else
|
8
|
+
base.send :class_inheritable_accessor, :money_fields
|
9
|
+
end
|
6
10
|
base.money_fields = []
|
7
11
|
base.extend(ClassMethods)
|
8
12
|
end
|
@@ -37,6 +41,6 @@ module KingFormat
|
|
37
41
|
self.class.is_money_field?(fieldname)
|
38
42
|
end
|
39
43
|
end
|
40
|
-
|
44
|
+
|
41
45
|
end #Fields
|
42
46
|
end#KingFormat
|
@@ -5,7 +5,11 @@ module KingFormat
|
|
5
5
|
module PercentFields
|
6
6
|
|
7
7
|
def self.included(base)
|
8
|
-
|
8
|
+
if ActiveSupport::VERSION::MAJOR == 3 && ActiveSupport::VERSION::MINOR > 0
|
9
|
+
base.class_attribute :percent_fields
|
10
|
+
else
|
11
|
+
base.send :class_inheritable_accessor, :percent_fields
|
12
|
+
end
|
9
13
|
base.percent_fields = []
|
10
14
|
base.extend(ClassMethods)
|
11
15
|
end
|
data/king_list/Rakefile
CHANGED
@@ -1,19 +1,8 @@
|
|
1
1
|
require 'rake'
|
2
|
-
require '
|
3
|
-
require 'rake/rdoctask'
|
2
|
+
require 'rdoc/task'
|
4
3
|
|
5
|
-
desc 'Default: run unit tests.'
|
6
|
-
task :default => :test
|
7
4
|
|
8
|
-
desc '
|
9
|
-
Rake::TestTask.new(:test) do |t|
|
10
|
-
t.libs << 'lib'
|
11
|
-
t.libs << 'test'
|
12
|
-
t.pattern = 'test/**/*_test.rb'
|
13
|
-
t.verbose = true
|
14
|
-
end
|
15
|
-
|
16
|
-
desc 'Generate documentation for the king_list plugin.'
|
5
|
+
desc 'Generate documentation for the king_list.'
|
17
6
|
Rake::RDocTask.new(:rdoc) do |rdoc|
|
18
7
|
rdoc.rdoc_dir = 'rdoc'
|
19
8
|
rdoc.title = 'KingList'
|
@@ -45,6 +45,9 @@ module KingList
|
|
45
45
|
object = @object
|
46
46
|
end
|
47
47
|
|
48
|
+
dt_options = options.delete(:dt_options) if options.has_key?(:dt_options)
|
49
|
+
dd_options = options.delete(:dd_options) if options.has_key?(:dd_options)
|
50
|
+
|
48
51
|
# Use given caption or translate column title
|
49
52
|
caption = options.delete(:caption) || object.class.human_attribute_name(field_name.to_s)
|
50
53
|
|
@@ -57,15 +60,15 @@ module KingList
|
|
57
60
|
end
|
58
61
|
|
59
62
|
# Against HTML validity warnings
|
60
|
-
caption = ' ' if caption.blank?
|
61
|
-
value = ' ' if value.blank?
|
63
|
+
caption = ' '.html_safe if caption.blank?
|
64
|
+
value = ' '.html_safe if value.blank?
|
62
65
|
|
63
66
|
@template.capture_haml do
|
64
|
-
@template.haml_tag :dt, caption, options
|
65
|
-
@template.haml_tag :dd, value, options
|
67
|
+
@template.haml_tag :dt, caption, dt_options || options
|
68
|
+
@template.haml_tag :dd, value, dd_options || options
|
66
69
|
end
|
67
70
|
end
|
68
|
-
|
71
|
+
|
69
72
|
end #class
|
70
73
|
end # module
|
71
|
-
end # module
|
74
|
+
end # module
|
@@ -2,18 +2,13 @@ module KingList
|
|
2
2
|
module Builder
|
3
3
|
class Table
|
4
4
|
|
5
|
-
attr_accessor :mode, :current_record, :
|
5
|
+
attr_accessor :mode, :current_record, :sorting
|
6
6
|
|
7
7
|
def initialize(template, collection, &block)
|
8
8
|
@template = template
|
9
9
|
@collection = collection
|
10
10
|
end
|
11
11
|
|
12
|
-
def start_row(data)
|
13
|
-
self.current_column_number = 0
|
14
|
-
self.current_record = data
|
15
|
-
end
|
16
|
-
|
17
12
|
# Build a column for a table
|
18
13
|
#
|
19
14
|
# ==== Parameter
|
@@ -33,37 +28,29 @@ module KingList
|
|
33
28
|
# :td_options{Symbol=>String}:: options for the <td>
|
34
29
|
# :class:: the class to set on the th
|
35
30
|
# :class => class as Symbol or String used on TH and TD used f.ex. for alignment.
|
36
|
-
def column(field_name,
|
37
|
-
|
38
|
-
th_options =
|
39
|
-
td_options =
|
31
|
+
def column(field_name, opts = {})
|
32
|
+
opts = opts.deep_clone # for not changing outer variable
|
33
|
+
th_options = opts[:th_options] || {}
|
34
|
+
td_options = opts[:td_options] || {}
|
40
35
|
|
41
36
|
# Use given object from options (or current_record as default)
|
42
|
-
object =
|
37
|
+
object = opts.has_key?(:object) ? opts.delete(:object) : current_record
|
43
38
|
|
44
39
|
# :class given so add to TH and TD f.ex cell alignment :class=>'rgt'
|
45
|
-
if css_class =
|
40
|
+
if css_class = opts.delete(:class)
|
46
41
|
(th_options[:class] ||= '') << " #{css_class}"
|
47
42
|
(td_options[:class] ||= '') << " #{css_class}"
|
48
43
|
end
|
49
44
|
|
50
|
-
self.current_column_number += 1
|
51
|
-
|
52
45
|
case mode
|
53
|
-
when :counter
|
54
|
-
self.number_of_columns ||= 0
|
55
|
-
self.number_of_columns += 1
|
56
|
-
nil
|
57
|
-
|
58
46
|
when :header
|
59
47
|
# Take option or translate column title
|
60
|
-
title_text =
|
61
|
-
|
48
|
+
title_text = opts[:title] || object.class.human_attribute_name(field_name.to_s)
|
62
49
|
# whole table has sorting enabled and current column has NOT :sorting=>false
|
63
50
|
# => put sorting link into header
|
64
|
-
if sorting && (
|
51
|
+
if sorting && (opts.delete(:sorting) != false)
|
65
52
|
# Use given sort_fields or try to detect them automatic
|
66
|
-
sort_fields =
|
53
|
+
sort_fields = opts.delete(:sort_fields) || object.class.table_name + '.' + field_name.to_s
|
67
54
|
# Convert to comma separated string if it is an array
|
68
55
|
sort_fields = sort_fields.join(',') if sort_fields.is_a?(Array)
|
69
56
|
# Swap ASC/DESC on every click of the same column title
|
@@ -78,43 +65,22 @@ module KingList
|
|
78
65
|
# otherwise just plain text (no sorting link)
|
79
66
|
title = title_text
|
80
67
|
end
|
81
|
-
#
|
82
|
-
if self.current_column_number == 1
|
83
|
-
(th_options[:class] ||= '') << ' first'
|
84
|
-
elsif self.current_column_number == self.number_of_columns
|
85
|
-
(th_options[:class] ||= '') << ' last'
|
86
|
-
end
|
87
|
-
@template.capture_haml do
|
88
|
-
@template.haml_tag(:th, title.to_s, th_options)
|
89
|
-
end
|
68
|
+
"<th #{ to_attr(th_options) }>#{title.to_s}</th>".html_safe
|
90
69
|
|
91
70
|
when :content
|
92
71
|
# Use given value (or formatted value as default)
|
93
|
-
value =
|
94
|
-
|
72
|
+
value = opts.delete(:value) || @template.strfval(object, field_name, value)
|
95
73
|
# If link option is set, then link to this
|
96
|
-
# === Example
|
74
|
+
# === Example
|
97
75
|
# :link => true : uses current object show link
|
98
76
|
# :link => nil or blank no linking
|
99
|
-
if link =
|
100
|
-
# link to
|
77
|
+
if link = opts.delete(:link)
|
78
|
+
# link to current_object if true given
|
101
79
|
link = object if link == true
|
102
80
|
# link and linked text is present else leave col text empty
|
103
81
|
value = (!value.blank? && !link.blank?) ? @template.link_to(value, link) : ''
|
104
82
|
end
|
105
|
-
|
106
|
-
# If row_link option is set, then link to the current object
|
107
|
-
if row_link = options.delete(:row_link)
|
108
|
-
row_link = object if row_link == true
|
109
|
-
value = @template.link_to(value, row_link) unless value.blank?
|
110
|
-
|
111
|
-
# Set a css class for the <td>, so it can be found via JavaScript
|
112
|
-
# and an onclick-event can be installed (TODO)
|
113
|
-
td_options.merge!(:class => 'row_link')
|
114
|
-
end
|
115
|
-
@template.capture_haml do
|
116
|
-
@template.haml_tag(:td, value.to_s, td_options)
|
117
|
-
end
|
83
|
+
"<td #{ to_attr(td_options) }>#{value.to_s}</td>".html_safe
|
118
84
|
end # case mode
|
119
85
|
end
|
120
86
|
|
@@ -126,36 +92,27 @@ module KingList
|
|
126
92
|
# = action_icon :edit, edit_path(person)
|
127
93
|
# = action_icon :delete, destroy_path(person)
|
128
94
|
def action_column(options={}, &block)
|
129
|
-
self.current_column_number += 1
|
130
|
-
|
131
95
|
case mode
|
132
|
-
when :counter
|
133
|
-
self.number_of_columns ||= 0
|
134
|
-
self.number_of_columns += 1
|
135
|
-
nil
|
136
96
|
when :header
|
137
|
-
|
138
|
-
if self.current_column_number == 1
|
139
|
-
options[:class] = 'first'
|
140
|
-
elsif self.current_column_number == self.number_of_columns
|
141
|
-
options[:class] = 'last'
|
142
|
-
end
|
143
|
-
|
144
|
-
@template.haml_tag :th, options do
|
145
|
-
@template.haml_concat I18n.t(:'link.actions')
|
146
|
-
end
|
97
|
+
"<th>#{I18n.t(:'link.actions')}</th>".html_safe
|
147
98
|
when :content
|
148
99
|
td_options = options[:td_options] || {}
|
149
|
-
td_options[:class] = td_options[:class].
|
100
|
+
td_options[:class] = [td_options[:class]].flatten || []
|
150
101
|
td_options[:class] << 'actions'
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
102
|
+
td_options[:class] = td_options[:class].compact.join(' ')
|
103
|
+
res = "<td #{ to_attr(td_options) }><ul class='actions'>"
|
104
|
+
res << @template.capture(&block)
|
105
|
+
res << "</ul></td>"
|
106
|
+
res.html_safe
|
156
107
|
end
|
157
108
|
end
|
158
109
|
|
110
|
+
# == Param
|
111
|
+
# opts<Hash{Symbol=>String}}>:. options used for html attributes
|
112
|
+
def to_attr(opts)
|
113
|
+
opts.collect{|k,v| "#{k}='#{v}'" }.join(' ')
|
114
|
+
end
|
115
|
+
|
159
116
|
end #TableBuilder
|
160
117
|
end # module
|
161
118
|
end # module
|
@@ -30,7 +30,11 @@ module KingList
|
|
30
30
|
object = args.first
|
31
31
|
else
|
32
32
|
object = record_or_name
|
33
|
-
object_name = ActionController::RecordIdentifier.singular_class_name
|
33
|
+
object_name = if ActionController::RecordIdentifier.respond_to?(:singular_class_name)
|
34
|
+
ActionController::RecordIdentifier.singular_class_name(object) # rails 2
|
35
|
+
else #Rails 3
|
36
|
+
ActiveModel::Naming.singular(object)
|
37
|
+
end
|
34
38
|
end
|
35
39
|
|
36
40
|
haml_tag :dl, options do
|
@@ -81,69 +85,56 @@ module KingList
|
|
81
85
|
# === Usage example:
|
82
86
|
#
|
83
87
|
# Header linking for all, default
|
84
|
-
#
|
85
|
-
#
|
86
|
-
#
|
88
|
+
# = table_for(@users) do |t, user|
|
89
|
+
# = t.column :name # with sorting
|
90
|
+
# = t.column :email
|
87
91
|
#
|
88
92
|
# Header linking for all, but exclude individual columns from sorting:
|
89
|
-
#
|
90
|
-
#
|
91
|
-
#
|
93
|
+
# = table_for(@users)do |t, user|
|
94
|
+
# = t.column :name, :sorting => false # without sorting
|
95
|
+
# = t.column :last_name
|
92
96
|
#
|
93
97
|
# NO header linking for all columns:
|
94
|
-
#
|
95
|
-
#
|
96
|
-
#
|
98
|
+
# = table_for(@users, :sorting => false) do |t, user|
|
99
|
+
# = t.column :name
|
100
|
+
# = t.column :email
|
97
101
|
#
|
98
102
|
# No header linking for all, but allow sorting for individual columns:
|
99
|
-
#
|
100
|
-
#
|
101
|
-
#
|
103
|
+
# = table_for(@users, :sorting => false) do |t, user|
|
104
|
+
# = t.column :name, :sorting => true # with sorting
|
105
|
+
# = t.column :last_name
|
102
106
|
#
|
103
107
|
def table_for(collection, options={}, html_options={}, &block)
|
104
108
|
return if collection.nil? || collection.empty?
|
105
|
-
|
106
109
|
builder = KingList::Builder::Table.new(render_context, collection)
|
107
110
|
# extract options
|
108
111
|
builder.sorting = options.delete(:sorting) != false # default => true
|
109
|
-
|
110
|
-
|
111
|
-
builder.mode = :counter
|
112
|
-
builder.start_row(collection.first)
|
113
|
-
yield(builder, builder.current_record)
|
114
|
-
|
115
|
-
haml_tag :table, { :summary => '' }.merge(html_options) do
|
112
|
+
capture do
|
113
|
+
concat("<table #{ to_attr(html_options) }><thead><tr>".html_safe)
|
116
114
|
# Build header row
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
haml_tag :tbody do
|
130
|
-
builder.mode = :content
|
131
|
-
# Build content row for each collection item
|
132
|
-
collection.each do |c|
|
133
|
-
tr_options = {}
|
134
|
-
# zebra styling
|
135
|
-
tr_options[:class] = render_context.cycle('odd','even')
|
136
|
-
|
137
|
-
haml_tag :tr, tr_options do
|
138
|
-
builder.start_row(c)
|
139
|
-
yield(builder, builder.current_record)
|
140
|
-
end
|
141
|
-
end
|
115
|
+
builder.mode = :header
|
116
|
+
builder.current_record = collection.first
|
117
|
+
yield(builder, builder.current_record)
|
118
|
+
concat("</tr></thead><tbody>".html_safe)
|
119
|
+
builder.mode = :content
|
120
|
+
# Build content row for each collection item
|
121
|
+
collection.each do |c|
|
122
|
+
builder.current_record = c
|
123
|
+
concat("<tr>".html_safe)
|
124
|
+
yield(builder, builder.current_record)
|
125
|
+
concat("</tr>".html_safe)
|
142
126
|
end
|
143
|
-
|
127
|
+
concat( "</tbody></table>".html_safe)
|
144
128
|
end
|
145
129
|
end
|
146
130
|
|
131
|
+
# TODO same in table class
|
132
|
+
#== Param
|
133
|
+
# opts<Hash{Symbol=>String}}>:. options used for html attributes
|
134
|
+
def to_attr(opts)
|
135
|
+
opts.collect{|k,v| "#{k}='#{v}'" }.join(' ')
|
136
|
+
end
|
137
|
+
|
147
138
|
# Show a list of options as ul / li list.
|
148
139
|
# Each actions li gets a special class so image replacement can be done via css
|
149
140
|
# ==== Example
|
@@ -200,8 +191,8 @@ module KingList
|
|
200
191
|
# You can set html options for both the li and the a tag
|
201
192
|
#
|
202
193
|
#===Example haml
|
203
|
-
# action_text
|
204
|
-
# action_text
|
194
|
+
# action_text t('link.user.edit'), edit_object_path
|
195
|
+
# action_text t('link.user.edit'), edit_object_path, {li html options}, {a html options :class=>'supercssclass'}
|
205
196
|
#
|
206
197
|
# => <li>
|
207
198
|
# <a href="/users/edit/12">
|
@@ -253,7 +244,10 @@ module KingList
|
|
253
244
|
#
|
254
245
|
def action_button(fieldname, options)
|
255
246
|
render_context.capture_haml do
|
256
|
-
|
247
|
+
li_options = options.delete(:li_options) || {}
|
248
|
+
li_options[:class] ||= []
|
249
|
+
li_options[:class] << " form_btn"
|
250
|
+
haml_tag :li, li_options do
|
257
251
|
haml_concat mini_action_form(fieldname, options)
|
258
252
|
end
|
259
253
|
end
|
@@ -282,8 +276,8 @@ module KingList
|
|
282
276
|
method_tag +
|
283
277
|
request_token_tag +
|
284
278
|
hidden_tag +
|
285
|
-
"<button type='submit' name='submit' title='#{options[:title]}' class='#{options[:class]}'><span>#{options[:title]}</span></button>" +
|
286
|
-
"</div></form>"
|
279
|
+
"<button type='submit' name='submit'#{" id='#{options[:id]}'" if options[:id].present?} title='#{options[:title]}' class='#{options[:class]}'><span>#{options[:title]}</span></button>" +
|
280
|
+
"</div></form>".html_safe
|
287
281
|
end
|
288
282
|
|
289
283
|
# Renders a <ol> for a given collection and yields the block for every item
|
@@ -314,21 +308,24 @@ module KingList
|
|
314
308
|
# Internal method used by action_text, action_button and action_icon
|
315
309
|
# Directly returns a haml string into the template
|
316
310
|
def action(kind, name_or_title, link_options, li_options={}, html_options={})
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
311
|
+
|
312
|
+
render_context.capture do
|
313
|
+
concat %{ <li #{ to_attr(li_options) }>
|
314
|
+
#{ case kind
|
315
|
+
when :icon
|
316
|
+
link_to('', link_options, html_options)
|
317
|
+
when :text
|
318
|
+
link_to(name_or_title, link_options, html_options)
|
319
|
+
when :button
|
320
|
+
button_to(name_or_title, link_options)
|
321
|
+
end } </li>}.html_safe
|
325
322
|
end
|
326
323
|
end
|
327
324
|
|
328
325
|
def render_context
|
329
|
-
|
330
|
-
|
326
|
+
# rails 2 || rails 3.2
|
327
|
+
@template || self
|
331
328
|
end
|
332
329
|
|
333
330
|
end #ListHelper
|
334
|
-
end#module
|
331
|
+
end#module
|