lolita 4.0.2 → 4.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/stylesheets/lolita/default.css.erb +1 -0
- data/app/helpers/components/lolita/configuration_component.rb +4 -5
- data/app/views/components/lolita/configuration/column/_first.html.haml +1 -1
- data/app/views/components/lolita/configuration/column/header/_sort.html.haml +6 -6
- data/app/views/components/lolita/configuration/nested_form/_display.html.haml +1 -1
- data/lib/lolita/configuration/column.rb +49 -38
- data/lib/lolita/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9fc5f5493358ac19cab98481772713454a697efa
|
4
|
+
data.tar.gz: 4ce3c24b5ee5141170446006d1e8eea17c940733
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39029642a07f3ef333f82e940046f184a6fe28d6bff0233cea828a08d7d4da9a9d1d2f5a838e841313a656176a8f790aed0393a734aa66b9b2428a5c2798965f
|
7
|
+
data.tar.gz: a2aeecba8f7e0fe7d2d183ffcefdd9dd061016e9b3b2b5f6437d8b3b536bb4a0eab18fa8277a070b003f1dc8fc2c637433bd70f9ef22ccbb65ac140171f3b98e
|
@@ -2,20 +2,19 @@ module Components
|
|
2
2
|
module Lolita
|
3
3
|
module ConfigurationComponent
|
4
4
|
def link_to_remove_fields(name, f)
|
5
|
-
f.hidden_field(:_destroy) + link_to(name,
|
5
|
+
f.hidden_field(:_destroy) + link_to(name, '#', onclick: 'remove_fields(this); return false;')
|
6
6
|
end
|
7
7
|
|
8
8
|
def link_to_add_fields(name, f, nested_form)
|
9
9
|
new_object = nested_form.klass.new
|
10
|
-
fields_content =
|
10
|
+
fields_content = ''
|
11
11
|
f.fields_for(nested_form.name, new_object, child_index: "new_#{nested_form.name}") do |builder|
|
12
|
-
|
12
|
+
current_form(builder) do
|
13
13
|
fields_content = render_component(nested_form, :"fields")
|
14
14
|
end
|
15
15
|
end
|
16
|
-
link_to(name,
|
16
|
+
link_to(name, '', class: 'pointer', onclick: "add_fields(this, \"#{nested_form.name}\", \"#{escape_javascript(fields_content)}\"); return false;")
|
17
17
|
end
|
18
|
-
|
19
18
|
end
|
20
19
|
end
|
21
20
|
end
|
@@ -1,2 +1,2 @@
|
|
1
|
-
%td{:class => "first-column cell"}
|
1
|
+
%td{:class => "first-column cell"}
|
2
2
|
= check_box_tag "#{resource_name}[id]", record.id
|
@@ -1,6 +1,6 @@
|
|
1
|
-
- sort_mapping = {"desc" => '⇓', "asc" => '⇑'}
|
2
|
-
- new_params = params.reject{|k,v| ["controller","action"].include?(k.to_s)}
|
3
|
-
- direction_indicator = raw(sort_mapping[column.current_sort_state(new_params)[1]])
|
4
|
-
- new_params[:s] = column.sort_params(new_params)
|
5
|
-
|
6
|
-
= link_to raw("#{column.title.to_s.capitalize} #{direction_indicator}"), lolita_resources_path(new_params)
|
1
|
+
- sort_mapping = {"desc" => '⇓', "asc" => '⇑'}
|
2
|
+
- new_params = params.reject{|k,v| ["controller","action"].include?(k.to_s)}
|
3
|
+
- direction_indicator = raw(sort_mapping[column.current_sort_state(new_params)[1]])
|
4
|
+
- new_params[:s] = column.sort_params(new_params)
|
5
|
+
|
6
|
+
= link_to raw("#{column.title.to_s.capitalize} #{direction_indicator}"), lolita_resources_path(new_params)
|
@@ -9,4 +9,4 @@
|
|
9
9
|
- self.current_form = old_form
|
10
10
|
- if nested_form.expandable? && !nested_form.update_only?
|
11
11
|
%p
|
12
|
-
=link_to_add_fields ::I18n.t("lolita.nested_form.add", :resource_name => nested_form.klass.lolita_model_name.human.
|
12
|
+
=link_to_add_fields ::I18n.t("lolita.nested_form.add", :resource_name => nested_form.klass.lolita_model_name.human.underscore), current_form, nested_form
|
@@ -25,12 +25,11 @@ module Lolita
|
|
25
25
|
# end
|
26
26
|
# end
|
27
27
|
class Column < Lolita::Configuration::Base
|
28
|
-
|
29
|
-
MAX_TEXT_SIZE=20
|
28
|
+
MAX_TEXT_SIZE = 20
|
30
29
|
attr_reader :list_association_name
|
31
|
-
lolita_accessor :name
|
32
|
-
|
33
|
-
def initialize(dbi
|
30
|
+
lolita_accessor :name, :title, :type, :options, :sortable, :association
|
31
|
+
|
32
|
+
def initialize(dbi, *args, &block)
|
34
33
|
set_and_validate_dbi(dbi)
|
35
34
|
set_attributes(*args)
|
36
35
|
instance_eval(&block) if block_given?
|
@@ -39,14 +38,14 @@ module Lolita
|
|
39
38
|
detect_association
|
40
39
|
end
|
41
40
|
|
42
|
-
def list
|
41
|
+
def list(*args, &block)
|
43
42
|
if args && args.any? || block_given?
|
44
43
|
detect_association
|
45
|
-
list_association = args[0] && @dbi.associations[args[0].to_s.to_sym] ||
|
44
|
+
list_association = args[0] && @dbi.associations[args[0].to_s.to_sym] || association
|
46
45
|
list_dbi = list_association && Lolita::DBI::Base.create(list_association.klass)
|
47
46
|
fail Lolita::UnknownDBPError.new("DBI is not specified for list in column #{self}") unless list_dbi
|
48
47
|
@list_association_name = list_association.name
|
49
|
-
Lolita::LazyLoader.lazy_load(self
|
48
|
+
Lolita::LazyLoader.lazy_load(self, :@list, Lolita::Configuration::NestedList, list_dbi, self, association_name: list_association.name, &block)
|
50
49
|
else
|
51
50
|
@list
|
52
51
|
end
|
@@ -55,8 +54,8 @@ module Lolita
|
|
55
54
|
# Return value of column from given record. When record matches foreign key patter, then foreign key is used.
|
56
55
|
# In other cases it just ask for attribute with same name as column.
|
57
56
|
def value(record)
|
58
|
-
if
|
59
|
-
if
|
57
|
+
if association
|
58
|
+
if association.macro == :one && dbi.klass.respond_to?(:human_attribute_name)
|
60
59
|
dbi.klass.human_attribute_name(association.name)
|
61
60
|
# dbi.record(record.send(association.name)).title
|
62
61
|
elsif dbi.klass.respond_to?(:human_attribute_name)
|
@@ -65,20 +64,20 @@ module Lolita
|
|
65
64
|
"#{association.name} (#{record.send(association.name).count})"
|
66
65
|
end
|
67
66
|
else
|
68
|
-
record.send(
|
67
|
+
record.send(name)
|
69
68
|
end
|
70
69
|
end
|
71
70
|
|
72
|
-
def formatted_value(record,view)
|
73
|
-
|
71
|
+
def formatted_value(record, view)
|
72
|
+
formatter.with(value(record), record, view)
|
74
73
|
end
|
75
74
|
|
76
75
|
# Set/Get title. Getter return title what was set or ask for human_attribute_name to model.
|
77
|
-
def title(new_title=nil)
|
76
|
+
def title(new_title = nil)
|
78
77
|
if new_title
|
79
78
|
@title = new_title
|
80
79
|
end
|
81
|
-
Lolita::Utils.dynamic_string(@title, :
|
80
|
+
Lolita::Utils.dynamic_string(@title, default: @name && @dbi.klass.human_attribute_name(@name))
|
82
81
|
end
|
83
82
|
|
84
83
|
def sortable?
|
@@ -87,40 +86,52 @@ module Lolita
|
|
87
86
|
|
88
87
|
# Find if any of received sort options matches this column.
|
89
88
|
def current_sort_state(params)
|
90
|
-
@sortable && sort_pairs(params).
|
89
|
+
@sortable && sort_pairs(params).find { |pair| pair[0] == sort_by_name } || []
|
91
90
|
end
|
92
91
|
|
93
92
|
# Return string with sort options for column if column is sortable.
|
94
|
-
def sort_params
|
93
|
+
def sort_params(params)
|
95
94
|
if @sortable
|
96
95
|
pairs = sort_pairs(params)
|
97
96
|
found_pair = false
|
98
|
-
pairs.each_with_index
|
99
|
-
if pair[0] ==
|
100
|
-
pairs[index][1] = pair[1] ==
|
97
|
+
pairs.each_with_index do|pair, index|
|
98
|
+
if pair[0] == sort_by_name
|
99
|
+
pairs[index][1] = pair[1] == 'asc' ? 'desc' : 'asc'
|
101
100
|
found_pair = true
|
102
101
|
end
|
103
|
-
|
102
|
+
end
|
104
103
|
unless found_pair
|
105
|
-
pairs << [
|
104
|
+
pairs << [sort_by_name, 'asc']
|
106
105
|
end
|
107
|
-
(pairs.map{ |pair| pair.join(
|
106
|
+
(pairs.map { |pair| pair.join(',') }).join('|')
|
108
107
|
else
|
109
|
-
|
108
|
+
''
|
110
109
|
end
|
111
110
|
end
|
112
111
|
|
112
|
+
# returns value to sort by
|
113
|
+
# in default it will be column name, but you can specify it
|
114
|
+
# in field configuration
|
115
|
+
#
|
116
|
+
# === Examples
|
117
|
+
# list do
|
118
|
+
# field :name, sortable: 'some_table.first_name'
|
119
|
+
# end
|
120
|
+
def sort_by_name
|
121
|
+
@sortable.is_a?(TrueClass) ? name.to_s : @sortable.to_s
|
122
|
+
end
|
123
|
+
|
113
124
|
# Create array of sort information from params.
|
114
|
-
def sort_pairs
|
115
|
-
(params[:s] ||
|
125
|
+
def sort_pairs(params)
|
126
|
+
(params[:s] || '').split('|').map { |pair| pair.split(',') }
|
116
127
|
end
|
117
128
|
|
118
129
|
# Define format, for details see Lolita::Support::Formatter and Lolita::Support::Formater::Rails
|
119
|
-
def formatter(value = nil
|
130
|
+
def formatter(value = nil, &block)
|
120
131
|
if block_given?
|
121
|
-
@formatter = Lolita::Support::Formatter.new(value
|
132
|
+
@formatter = Lolita::Support::Formatter.new(value, &block)
|
122
133
|
elsif value || !@formatter
|
123
|
-
if value.
|
134
|
+
if value.is_a?(Lolita::Support::Formatter)
|
124
135
|
@formatter = value
|
125
136
|
else
|
126
137
|
@formatter = Lolita::Support::Formatter::Rails.new(value)
|
@@ -130,7 +141,7 @@ module Lolita
|
|
130
141
|
end
|
131
142
|
|
132
143
|
def formatter=(value)
|
133
|
-
if value.
|
144
|
+
if value.is_a?(Lolita::Support::Formatter)
|
134
145
|
@formatter = value
|
135
146
|
else
|
136
147
|
@formatter = Lolita::Support::Formatter::Rails.new(value)
|
@@ -140,21 +151,21 @@ module Lolita
|
|
140
151
|
def set_attributes(*args)
|
141
152
|
options = args ? args.extract_options! : {}
|
142
153
|
if args[0].respond_to?(:field)
|
143
|
-
[:name
|
144
|
-
send(:"#{attr}=",args[0].send(attr))
|
154
|
+
[:name, :type].each do |attr|
|
155
|
+
send(:"#{attr}=", args[0].send(attr))
|
145
156
|
end
|
146
157
|
elsif args[0]
|
147
158
|
self.name = args[0]
|
148
159
|
end
|
149
|
-
options.each do |attr_name,value|
|
150
|
-
send(:"#{attr_name}=",value)
|
160
|
+
options.each do |attr_name, value|
|
161
|
+
send(:"#{attr_name}=", value)
|
151
162
|
end
|
152
163
|
end
|
153
|
-
|
164
|
+
|
154
165
|
private
|
155
166
|
|
156
167
|
def detect_association
|
157
|
-
@association ||= dbi.associations[
|
168
|
+
@association ||= dbi.associations[name]
|
158
169
|
end
|
159
170
|
|
160
171
|
def normalize_attributes
|
@@ -162,8 +173,8 @@ module Lolita
|
|
162
173
|
end
|
163
174
|
|
164
175
|
def validate
|
165
|
-
fail Lolita::UnknownDBIError.new("DBI is not specified for column #{self}") unless
|
166
|
-
fail ArgumentError.new(
|
176
|
+
fail Lolita::UnknownDBIError.new("DBI is not specified for column #{self}") unless dbi
|
177
|
+
fail ArgumentError.new('Column must have name.') unless name
|
167
178
|
end
|
168
179
|
end
|
169
180
|
end
|
data/lib/lolita/version.rb
CHANGED