active_list 6.3.1 → 6.4.0

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 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