active_list 6.3.1 → 6.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/active_list.jquery.js.coffee +4 -3
- data/app/assets/stylesheets/active_list/background.scss +26 -26
- data/lib/active_list/definition/action_column.rb +9 -4
- data/lib/active_list/generator.rb +2 -0
- data/lib/active_list/generator/finder.rb +20 -9
- data/lib/active_list/renderers/simple_renderer.rb +15 -12
- data/lib/active_list/version.rb +1 -1
- data/test/dummy/db/seeds.rb +4 -0
- data/test/people_controller_test.rb +16 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aaf2824511973057df6951eb28a5ffbadc0d9595
|
4
|
+
data.tar.gz: 92cf5504fa0dbb9d29bc4547ea0cd5f4e37573bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 389b53b6ef12361b47aa78fd1392aec05ab63f4e308ed31084d20c77697d352de6cef78acfd99424b9f2cead16284dcc68adf428223dbed7cadf6fb7ade1c481
|
7
|
+
data.tar.gz: 9783dcfdd20bea2edab5478de41fdd37cf097d405ab018e55c12eb28f3795da39a7e4345aea9c8c9a5c5496a5b1d0f952efcf5a3b6b788a0534457ef22295ef7
|
@@ -13,6 +13,7 @@ ActiveList = {}
|
|
13
13
|
page: table.data("list-current-page")
|
14
14
|
per_page: table.data("list-page-size")
|
15
15
|
only: "content"
|
16
|
+
redirect: list.data("list-redirect")
|
16
17
|
|
17
18
|
$.extend parameters, options
|
18
19
|
url = list.data("list-source")
|
@@ -28,6 +29,8 @@ ActiveList = {}
|
|
28
29
|
.attr('checked', 'checked')
|
29
30
|
.closest('tr').addClass('selected')
|
30
31
|
AL.checkGlobalButtons list
|
32
|
+
list.trigger('page:change')
|
33
|
+
$(document).trigger('list:page:change')
|
31
34
|
true
|
32
35
|
|
33
36
|
false
|
@@ -82,12 +85,11 @@ ActiveList = {}
|
|
82
85
|
if isNaN(page)
|
83
86
|
page_attr = page
|
84
87
|
page = element.attr(page_attr)
|
85
|
-
alert "Cannot define which page to load with attribute
|
88
|
+
alert "Cannot define which page to load with attribute #{page_attr}: #{page}" if isNaN(page)
|
86
89
|
AL.refresh element,
|
87
90
|
page: page
|
88
91
|
false
|
89
92
|
|
90
|
-
|
91
93
|
# Sort by one column
|
92
94
|
$(document).on "click", "div[data-list-source] th[data-list-column][data-list-column-sort]", (event) ->
|
93
95
|
sorter = $(this)
|
@@ -182,6 +184,5 @@ ActiveList = {}
|
|
182
184
|
element.attr "title", element.html() unless title?
|
183
185
|
return
|
184
186
|
|
185
|
-
|
186
187
|
return
|
187
188
|
) jQuery, ActiveList
|
@@ -2,43 +2,43 @@
|
|
2
2
|
//
|
3
3
|
|
4
4
|
@function merge-color($color-1, $color-2) {
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
$col2: rgb(red($color-2), green($color-2), blue($color-2));
|
6
|
+
$percent: 100*alpha($color-2);
|
7
|
+
@return mix($col2, $color-1, $percent);
|
8
8
|
}
|
9
9
|
|
10
10
|
@function merge-colors($color, $color-1: rgba(0, 0, 0, 0), $color-2: rgba(0, 0, 0, 0), $color-3: rgba(0, 0, 0, 0), $color-4: rgba(0, 0, 0, 0), $color-5: rgba(0, 0, 0, 0), $color-6: rgba(0, 0, 0, 0), $color-7: rgba(0, 0, 0, 0), $color-8: rgba(0, 0, 0, 0), $color-9: rgba(0, 0, 0, 0), $color-10: rgba(0, 0, 0, 0)) {
|
11
|
-
|
11
|
+
@return merge-color(merge-color(merge-color(merge-color(merge-color(merge-color(merge-color(merge-color(merge-color(merge-color($color, $color-1), $color-2), $color-3), $color-4), $color-5), $color-6), $color-7), $color-8), $color-9), $color-10);
|
12
12
|
}
|
13
13
|
|
14
|
-
$list-line-backgrounds: ("&" rgba(#FFF, 0)) ("&.error, &.undone" rgba(red, 0.12)) ("&.warning, &.in_progress" rgba(orange, 0.12));
|
14
|
+
$list-line-backgrounds: ("&" rgba(#FFF, 0)) ("&.error, &.undone" rgba(red, 0.12)) ("&.warning, &.in_progress" rgba(orange, 0.12)) ("&.focus" rgba(yellow, 0.8));
|
15
15
|
$list-column-backgrounds: ("&" rgba(#FFF, 0)) ("&.act" rgba(#F90, 0.01)) ("&.sor" rgba(#05A, 0.05));
|
16
16
|
$list-selection-backgrounds: ("&" rgba(#FFF, 0)) ("&.selected" rgba(yellow, 0.3));
|
17
17
|
$list-hover-backgrounds: ("&" rgba(#FFF, 0)) ("&:hover" rgba(blue, 0.05));
|
18
18
|
|
19
19
|
@mixin list-colors($bgcolor: #000000, $selector: '&') {
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
}
|
38
|
-
}
|
20
|
+
tr {
|
21
|
+
#{$selector} {
|
22
|
+
@each $line-background in $list-line-backgrounds {
|
23
|
+
#{nth($line-background, 1)} {
|
24
|
+
@each $selection-background in $list-selection-backgrounds {
|
25
|
+
#{nth($selection-background, 1)} {
|
26
|
+
@each $hover-background in $list-hover-backgrounds {
|
27
|
+
#{nth($hover-background, 1)} {
|
28
|
+
@each $col-background in $list-column-backgrounds {
|
29
|
+
td {
|
30
|
+
#{nth($col-background, 1)} {
|
31
|
+
background-color: merge-colors($bgcolor, nth($line-background, 2), nth($col-background, 2), nth($selection-background, 2), nth($hover-background, 2));
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
35
|
+
}
|
36
|
+
}
|
39
37
|
}
|
40
|
-
|
38
|
+
}
|
39
|
+
}
|
41
40
|
}
|
42
|
-
|
41
|
+
}
|
42
|
+
}
|
43
43
|
}
|
44
44
|
|
@@ -94,19 +94,24 @@ module ActiveList
|
|
94
94
|
end
|
95
95
|
cases = []
|
96
96
|
for expected, url in @options[:actions]
|
97
|
-
|
98
|
-
|
99
|
-
|
97
|
+
url[:id] ||= "RECORD.id".c
|
98
|
+
url[:id] = "RECORD.id".c if url[:id] == ID_PLACEHOLDER
|
99
|
+
url[:redirect] ||= "params[:redirect]".c
|
100
|
+
url.delete_if{|k, v| v.nil?}
|
101
|
+
cases << "#{record}.#{@name} == #{expected.inspect}\nlink_to(content_tag(:i) + h(#{url[:action].inspect}.t(scope: 'rest.actions'))"+
|
102
|
+
", {" + url.collect{|k, v| "#{k}: " + urlify(v, record)}.join(", ") + format + "}" +
|
103
|
+
", {class: '#{@name}'" + link_options + "}"+
|
100
104
|
")\n"
|
101
105
|
end
|
102
106
|
|
103
|
-
code = "if "+cases.join("elsif ")+"end"
|
107
|
+
code = "if " + cases.join("elsif ") + "end"
|
104
108
|
else
|
105
109
|
url = @options[:url] ||= {}
|
106
110
|
url[:controller] ||= (@options[:controller] || "RECORD.class.name.tableize".c)
|
107
111
|
url[:action] ||= @name.to_s
|
108
112
|
url[:id] ||= "RECORD.id".c
|
109
113
|
url[:id] = "RECORD.id".c if url[:id] == ID_PLACEHOLDER
|
114
|
+
url[:redirect] ||= "params[:redirect]".c
|
110
115
|
url.delete_if{|k, v| v.nil?}
|
111
116
|
url = "{" + url.collect{|k, v| "#{k}: " + urlify(v, record)}.join(", ") + format + "}"
|
112
117
|
code = "{class: '#{@name}'" + link_options + "}"
|
@@ -105,6 +105,8 @@ module ActiveList
|
|
105
105
|
expr = "(#{expr} || #{@table.options[parameter]})" unless @table.options[parameter].blank?
|
106
106
|
code << "#{var_name(:params)}[:#{parameter}] = #{expr}.#{convertor}\n"
|
107
107
|
end
|
108
|
+
code << "params[:redirect] ||= request.fullpath unless request.xhr?\n"
|
109
|
+
|
108
110
|
# Order
|
109
111
|
code << "#{var_name(:order)} = #{@table.options[:order] ? @table.options[:order].inspect : 'nil'}\n"
|
110
112
|
code << "if #{var_name(:col)} = {" + @table.sortable_columns.collect{|c| "'#{c.sort_id}' => '#{c.sort_expression}'"}.join(', ') + "}[#{var_name(:params)}[:sort]]\n"
|
@@ -27,25 +27,36 @@ module ActiveList
|
|
27
27
|
query_code << ".references(#{expr})"
|
28
28
|
end
|
29
29
|
|
30
|
-
code
|
30
|
+
code = ""
|
31
31
|
code << "#{var_name(:count)} = #{query_code}.count\n"
|
32
|
+
|
33
|
+
query_code << ".reorder(#{var_name(:order)})"
|
34
|
+
|
32
35
|
if paginate
|
33
36
|
code << "#{var_name(:limit)} = (#{var_name(:params)}[:per_page] || 25).to_i\n"
|
34
|
-
|
37
|
+
|
38
|
+
code << "if params[:page]\n"
|
39
|
+
code << " #{var_name(:page)} = (#{var_name(:params)}[:page] || 1).to_i\n"
|
40
|
+
code << "elsif params['#{table.name}-id'] and #{var_name(:index)} = #{query_code}.pluck(:id).index(params['#{table.name}-id'].to_i)\n"
|
41
|
+
# Find page of request element
|
42
|
+
code << " #{var_name(:page)} = (#{var_name(:index)}.to_f / #{var_name(:limit)}).floor + 1\n"
|
43
|
+
code << "else\n"
|
44
|
+
code << " #{var_name(:page)} = 1\n"
|
45
|
+
code << "end\n"
|
35
46
|
code << "#{var_name(:page)} = 1 if #{var_name(:page)} < 1\n"
|
47
|
+
|
36
48
|
code << "#{var_name(:offset)} = (#{var_name(:page)} - 1) * #{var_name(:limit)}\n"
|
37
49
|
code << "#{var_name(:last)} = (#{var_name(:count)}.to_f / #{var_name(:limit)}).ceil.to_i\n"
|
38
50
|
code << "#{var_name(:last)} = 1 if #{var_name(:last)} < 1\n"
|
51
|
+
|
52
|
+
|
39
53
|
code << "return #{self.view_method_name}(options.merge(page: 1)) if 1 > #{var_name(:page)}\n"
|
40
54
|
code << "return #{self.view_method_name}(options.merge(page: #{var_name(:last)})) if #{var_name(:page)} > #{var_name(:last)}\n"
|
55
|
+
query_code << ".offset(#{var_name(:offset)})"
|
56
|
+
query_code << ".limit(#{var_name(:limit)})"
|
41
57
|
end
|
42
|
-
|
43
|
-
code << ".
|
44
|
-
if paginate
|
45
|
-
code << ".offset(#{var_name(:offset)})"
|
46
|
-
code << ".limit(#{var_name(:limit)})"
|
47
|
-
end
|
48
|
-
code << " || {}\n"
|
58
|
+
|
59
|
+
code << "#{self.records_variable_name} = #{query_code} || {}\n"
|
49
60
|
return code
|
50
61
|
end
|
51
62
|
|
@@ -30,7 +30,7 @@ module ActiveList
|
|
30
30
|
code << " #{var_name(:params)}[:hidden_columns] << column if params[:visibility] == 'hidden'\n"
|
31
31
|
code << " head :ok\n"
|
32
32
|
code << "elsif params[:only]\n"
|
33
|
-
code << " render(inline: '<%=#{generator.view_method_name}(:
|
33
|
+
code << " render(inline: '<%=#{generator.view_method_name}(only: params[:only])-%>')\n"
|
34
34
|
code << "else\n"
|
35
35
|
code << " render(inline: '<%=#{generator.view_method_name}-%>')\n"
|
36
36
|
code << "end\n"
|
@@ -46,19 +46,22 @@ module ActiveList
|
|
46
46
|
extras = extras_code
|
47
47
|
|
48
48
|
code = generator.select_data_code
|
49
|
-
code << "#{var_name(:tbody)} = '<tbody data-total=\"'
|
49
|
+
code << "#{var_name(:tbody)} = '<tbody data-total=\"' + #{var_name(:count)}.to_s + '\""
|
50
50
|
if table.paginate?
|
51
|
-
code << " data-per-page=\"'
|
52
|
-
code << " data-pages-count=\"'
|
51
|
+
code << " data-per-page=\"' + #{var_name(:limit)}.to_s + '\""
|
52
|
+
code << " data-pages-count=\"' + #{var_name(:last)}.to_s + '\""
|
53
53
|
end
|
54
54
|
code << ">'\n"
|
55
55
|
code << "if #{var_name(:count)} > 0\n"
|
56
|
-
code << "
|
57
|
-
|
56
|
+
code << " #{generator.records_variable_name}.each do |#{record}|\n"
|
57
|
+
code << " #{var_name(:attrs)} = {id: 'r' + #{record}.id.to_s}\n"
|
58
58
|
if table.options[:line_class]
|
59
|
-
|
59
|
+
code << " #{var_name(:attrs)}[:class] = (#{recordify!(table.options[:line_class], record)}).to_s\n"
|
60
|
+
code << " #{var_name(:attrs)}[:class] << ' focus' if params['#{table.name}-id'].to_i == #{record}.id\n"
|
61
|
+
else
|
62
|
+
code << " #{var_name(:attrs)}[:class] = 'focus' if params['#{table.name}-id'].to_i == #{record}.id\n"
|
60
63
|
end
|
61
|
-
code << " #{var_name(:tbody)} << content_tag(:tr,
|
64
|
+
code << " #{var_name(:tbody)} << content_tag(:tr, #{var_name(:attrs)}) do\n"
|
62
65
|
code << columns_to_cells(:body, record: record).dig(3)
|
63
66
|
code << " end\n"
|
64
67
|
# if table.options[:children].is_a? Symbol
|
@@ -95,7 +98,7 @@ module ActiveList
|
|
95
98
|
code << "return #{var_name(:content)}.html_safe if options[:only] == 'content'\n"
|
96
99
|
|
97
100
|
# Build whole
|
98
|
-
code << "return ('<div id=\"#{table.name}\" data-list-source=\"'+h(url_for(options.merge(:action => '#{generator.controller_method_name}')))+'\" class=\"active-list\">' + #{var_name(:content)} + '</div>').html_safe\n"
|
101
|
+
code << "return ('<div id=\"#{table.name}\" data-list-source=\"'+h(url_for(options.merge(:action => '#{generator.controller_method_name}')))+'\" data-list-redirect=\"' + params[:redirect].to_s + '\" class=\"active-list\">' + #{var_name(:content)} + '</div>').html_safe\n"
|
99
102
|
return code
|
100
103
|
end
|
101
104
|
|
@@ -172,10 +175,10 @@ module ActiveList
|
|
172
175
|
elsif column.label_method.to_s.match(/(^|\_)country$/) and column.datatype == :string
|
173
176
|
value_code = "(Nomen::Countries[#{value_code}] ? (image_tag('countries/' + #{value_code}.to_s + '.png') + ' ' + Nomen::Countries[#{value_code}].human_name).html_safe : #{value_code})"
|
174
177
|
else # if column.datatype == :string
|
175
|
-
value_code = "h(
|
178
|
+
value_code = "h(#{value_code}.to_s)"
|
176
179
|
end
|
177
180
|
|
178
|
-
value_code = "if #{record}\n
|
181
|
+
value_code = "if #{record}\n#{value_code.dig}end" if column.is_a?(ActiveList::Definition::AssociationColumn)
|
179
182
|
end
|
180
183
|
elsif column.is_a?(ActiveList::Definition::CheckBoxColumn)
|
181
184
|
if nature == :body
|
@@ -367,7 +370,7 @@ module ActiveList
|
|
367
370
|
classes << :unk
|
368
371
|
end
|
369
372
|
html = classes.join(' ').strip
|
370
|
-
if conds.
|
373
|
+
if conds.any?
|
371
374
|
if without_interpolation
|
372
375
|
html << "' + "
|
373
376
|
html << conds.collect do |c|
|
data/lib/active_list/version.rb
CHANGED
data/test/dummy/db/seeds.rb
CHANGED
@@ -3,4 +3,8 @@ Person.create! name: "Leonardo di ser Piero da Vinci", born_on: "1452-04-15"
|
|
3
3
|
Person.create! name: "宮崎 駿", born_on: "1941-01-05"
|
4
4
|
Person.create! name: "عَبْدَالله مُحَمَّد بِن مُوسَى اَلْخْوَارِزْمِي", born_on: Date.new(780, 8, 7)
|
5
5
|
Person.create! name: "Περικλῆς", born_on: Date.new(-495, 9, 4)
|
6
|
+
200.times do |index|
|
7
|
+
Person.create! name: "Human ##{index}", born_on: Date.new(1 + 11*index, 1 + index % 11, 1 + (7*index) % 27)
|
8
|
+
end
|
9
|
+
|
6
10
|
puts "#{Person.count} people"
|
@@ -12,9 +12,23 @@ class PeopleControllerTest < ActionController::TestCase
|
|
12
12
|
get :list, :format => :ods
|
13
13
|
assert_response :success
|
14
14
|
|
15
|
-
|
16
|
-
|
15
|
+
end
|
16
|
+
|
17
|
+
test "parameters" do
|
18
|
+
get :list, "people-id" => 10
|
19
|
+
assert_response :success
|
20
|
+
|
21
|
+
get :list, page: 0
|
22
|
+
assert_response :success
|
17
23
|
|
24
|
+
get :list, page: 5, per_page: 25
|
25
|
+
assert_response :success
|
26
|
+
|
27
|
+
get :list, page: 50, per_page: 25
|
28
|
+
assert_response :success
|
29
|
+
|
30
|
+
get :list, page: 500, per_page: 25
|
31
|
+
assert_response :success
|
18
32
|
end
|
19
33
|
|
20
34
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_list
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.
|
4
|
+
version: 6.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brice Texier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-11-
|
11
|
+
date: 2014-11-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|