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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 15b7f570bc7be9be7cc8d4d85298013fc9d6ab7c
4
- data.tar.gz: f6f3d47b93dd58c8b4ea9abcbe78b6978ea6654d
3
+ metadata.gz: aaf2824511973057df6951eb28a5ffbadc0d9595
4
+ data.tar.gz: 92cf5504fa0dbb9d29bc4547ea0cd5f4e37573bb
5
5
  SHA512:
6
- metadata.gz: 30e98a470dbee1cfa245f89855f7301dce63f3d261e5d545aed13aab0430f2d5754bfc5270d8038e175e9ff994f85892992069bef8167ed686263eda83084b61
7
- data.tar.gz: 4bf502e22df399ae3e5da6c9f546b5b41f2a619e09f68939aa527ece984808f67799f85317889935921fd7de01f3754327313835093038342bfc37d6ed9864c0
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 " + page_attr + ": " + page if isNaN(page)
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
- $col2: rgb(red($color-2), green($color-2), blue($color-2));
6
- $percent: 100*alpha($color-2);
7
- @return mix($col2, $color-1, $percent);
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
- @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);
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
- 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
- }
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
- cases << record+"."+@name.to_s+" == " + expected.inspect + "\nlink_to(content_tag(:i) + h(#{url[:action].inspect}.t(scope: 'rest.actions'))"+
98
- ", {"+(url[:controller] ? 'controller: :'+url[:controller].to_s+', ' : '')+"action: '"+url[:action].to_s+"', id: "+record+".id"+format+"}"+
99
- ", {class: '#{@name}'"+link_options+"}"+
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
- code << "#{var_name(:page)} = (#{var_name(:params)}[:page] || 1).to_i\n"
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
- code << "#{self.records_variable_name} = #{query_code}"
43
- code << ".reorder(#{var_name(:order)})"
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}(:only => params[:only])-%>')\n"
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=\"'+#{var_name(:count)}.to_s+'\""
49
+ code << "#{var_name(:tbody)} = '<tbody data-total=\"' + #{var_name(:count)}.to_s + '\""
50
50
  if table.paginate?
51
- code << " data-per-page=\"'+#{var_name(:limit)}.to_s+'\""
52
- code << " data-pages-count=\"'+#{var_name(:last)}.to_s+'\""
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 << " for #{record} in #{generator.records_variable_name}\n"
57
- line_class = ""
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
- line_class = ", class: (" + recordify!(table.options[:line_class], record) + ").to_s"
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, id: 'r' + #{record}.id.to_s#{line_class}) do\n"
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(" + value_code + ".to_s)"
178
+ value_code = "h(#{value_code}.to_s)"
176
179
  end
177
180
 
178
- value_code = "if #{record}\n" + value_code.dig + "end" if column.is_a?(ActiveList::Definition::AssociationColumn)
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.size > 0
373
+ if conds.any?
371
374
  if without_interpolation
372
375
  html << "' + "
373
376
  html << conds.collect do |c|
@@ -1,5 +1,5 @@
1
1
  module ActiveList
2
2
 
3
- VERSION = "6.3.1"
3
+ VERSION = "6.4.0"
4
4
 
5
5
  end
@@ -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
- # get :list, :format => :xcsv
16
- # assert_response :success
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.3.1
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-02 00:00:00.000000000 Z
11
+ date: 2014-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails