table_sortable 0.4.2 → 0.4.3

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: 3ecb8551e2152e42546781c82d866c4c7f4e553f
4
- data.tar.gz: f40ad9da19a795eac67d3440348e9e4dd4ed04df
3
+ metadata.gz: b5653290ccc181f9313a45feae9d71810fd5987a
4
+ data.tar.gz: bbb838cf7f287f6c9fb8a6d8ed6e9283a2dccab9
5
5
  SHA512:
6
- metadata.gz: 7e9e9efd48707ffb3462835505136556b70417aeb9fd252b86dff2be63b4034ee976105bffd163f1d929889e6f11650e0bde918280c4e735a61c6e60503d7a13
7
- data.tar.gz: 3e21bb44455b931a6945c188fd2556314c295ae856efdbf527a31d3d4bec39bc67a2a8d9639ead45c43f59355f5224c1cf37ab7e36fcc8d82eab54f2241e15e0
6
+ metadata.gz: 93af7674f241f73b8ca78bd9f41f7548f16930b994ce53cc339687b7e6b7e98ada4570f15d8e3ab98ca76493db11bd565e60e8e0a35126f8cb60a302078abee6
7
+ data.tar.gz: ce338d84b1087859d81ee6cd827926611e35a1a626eb8c550b7c3a2545336ad17ed120ea32fc4aa6273955993873ebafabb217c9d8b6c17e181d5729d54836b7
data/README.md CHANGED
@@ -182,7 +182,7 @@ end
182
182
  content: -> (user) {"#{user.last_name}, #{user.first_name}"}
183
183
  ```
184
184
  - `label: (string)`
185
- <sub>default: 'Titleized' version of the column name</sub>
185
+ <sub>default: 'Titleized' version of the column name. Supports I18n internationalization. see [translateion_key](#translation-key).</sub>
186
186
  Allows specifying a string to be used as the column label, displayed at the table header.
187
187
  - `placeholder: (string|false)`
188
188
  <sub>default: same as label</sub>
@@ -331,6 +331,7 @@ Notice that in this case you need to manually specify the different data attribu
331
331
  The view will be supplied with two locals:
332
332
  - `label`: the column's label
333
333
  - `column`: the TableSortable::Column object
334
+ - `index`: the column's index (useful for manually setting the `data-col` attribute)
334
335
 
335
336
  Here is an example of a full name header partial, which includes a font-awesome icon:
336
337
  ```erb
@@ -368,6 +369,7 @@ The view will be supplied with four locals:
368
369
  - `content`: the column's content to be displayed
369
370
  - `value`: the column's value
370
371
  - `column`: the TableSortable::Column object
372
+ - `index`: the column's index (useful for manually setting the `data-col` attribute)
371
373
 
372
374
  Here is an example of a full name column partial, in which the name links to the edit_user_path:
373
375
  ```erb
@@ -3,11 +3,12 @@ module TableSortable
3
3
  class Filter
4
4
  include TableSortable::Concerns::Proc
5
5
 
6
- attr_accessor :query, :default_value
6
+ attr_accessor :query, :default_value, :collection
7
7
 
8
8
  def initialize(*args)
9
9
  options = args.extract_options!
10
10
  @default_value = options[:filter_initial_value]
11
+ @collection = options[:filter_collection]
11
12
  super :filter, options
12
13
  end
13
14
 
@@ -1,7 +1,7 @@
1
1
  module TableSortable
2
2
  class Column
3
3
 
4
- attr_reader :name, :label, :filter, :sorter, :template, :placeholder, :content, :translation_key
4
+ attr_reader :name, :label, :filter, :sorter, :template, :placeholder, :content, :translation_key, :options, :template_path
5
5
 
6
6
  def initialize(col_name, *options)
7
7
 
@@ -9,10 +9,12 @@ module TableSortable
9
9
  value = options[:value] || col_name
10
10
  content = options[:content] || value
11
11
  translation_key = options[:translation_key]
12
+ template_path = options[:template_path]
12
13
  label = options[:label] || (options[:label] == false ? '' : I18n.translate("table_sortable.#{"#{translation_key}." if translation_key }#{col_name.to_s}", :default => col_name.to_s).titleize)
13
14
  placeholder = options[:placeholder] || (options[:placeholder] == false ? nil : label)
14
15
  # priority = options[:priority]
15
16
  template = options[:template] || col_name
17
+ column_options = options[:options] || {}
16
18
 
17
19
  # filter_defaultAttrib (data-value)
18
20
  # data-sorter (=false?)
@@ -24,6 +26,8 @@ module TableSortable
24
26
  @placeholder = placeholder
25
27
  # @sort_priority = sort_priority
26
28
  @template = template
29
+ @template_path = template_path
30
+ @options = column_options
27
31
  @filter = TableSortable::Column::Filter.new(options.merge(:column => self) )
28
32
  @sorter = TableSortable::Column::Sorter.new(options.merge(:column => self) )
29
33
 
@@ -11,16 +11,9 @@ module TableSortable
11
11
 
12
12
  module ClassMethods
13
13
  def define_columns(*args)
14
- options = args.extract_options!
15
- column_offset = options[:offset] || 0
16
- translation_key = options[:translation_key]
17
- columns = args
14
+
18
15
  before_action(options) do
19
- define_translation_key translation_key
20
- define_column_offset column_offset
21
- columns.each do |column|
22
- define_column column, translation_key: translation_key
23
- end
16
+ define_columns(args)
24
17
  end
25
18
  end
26
19
 
@@ -47,6 +40,26 @@ module TableSortable
47
40
  define_translation_key key
48
41
  end
49
42
  end
43
+
44
+ def define_template_path(path)
45
+ before_action do
46
+ define_template_path path
47
+ end
48
+ end
49
+ end
50
+
51
+ def define_columns(*args)
52
+ options = args.extract_options!
53
+ column_offset = options[:offset] || 0
54
+ translation_key = options[:translation_key]
55
+ template_path = options[:template_path]
56
+ columns = args
57
+ define_translation_key translation_key
58
+ define_template_path template_path
59
+ define_column_offset column_offset
60
+ columns.each do |column|
61
+ define_column column, translation_key: translation_key
62
+ end
50
63
  end
51
64
 
52
65
  def define_column(col_name, *options)
@@ -66,6 +79,10 @@ module TableSortable
66
79
  @translation_key = key
67
80
  end
68
81
 
82
+ def define_template_path(path)
83
+ @template_path = path.blank? ? nil : File.join(path, "")
84
+ end
85
+
69
86
  def columns
70
87
  @columns.sort_by(column_order)
71
88
  end
@@ -73,7 +90,7 @@ module TableSortable
73
90
  private
74
91
 
75
92
  def default_column_options
76
- {translation_key: @translation_key}
93
+ {translation_key: @translation_key, template_path: @template_path}
77
94
  end
78
95
 
79
96
  def filter_and_sort(scope, params = nil)
@@ -108,7 +125,7 @@ module TableSortable
108
125
 
109
126
  public
110
127
 
111
- attr_reader :column_order, :column_offset, :translation_key
128
+ attr_reader :column_order, :column_offset, :translation_key, :template_path
112
129
 
113
130
  end
114
131
  end
@@ -1,3 +1,3 @@
1
1
  module TableSortable
2
- VERSION = "0.4.2"
2
+ VERSION = "0.4.3"
3
3
  end
@@ -23,19 +23,24 @@ module TableSortable
23
23
  end
24
24
 
25
25
  def table_sortable_headers(html_options = {})
26
- controller.columns.map do |col|
26
+ controller.columns.map.with_index do |col, index|
27
27
  th_options = {}
28
28
  th_options['data-placeholder'] = col.placeholder if col.placeholder
29
29
  # th_options['data-priority'] = col.sort_priority if col.sort_priority
30
30
  th_options['data-filter'] = 'false' if col.filter.disabled?
31
31
  th_options['data-sorter'] = 'false' if col.sorter.disabled?
32
+ unless col.filter.collection.blank?
33
+ th_options['filter-select'] = true
34
+ th_options['data-filter-options'] = col.filter.collection
35
+ end
32
36
  th_options['data-value'] = col.filter.default_value if col.filter.default_value
33
37
  th_options.merge!(html_options)
34
38
 
35
39
  begin
36
- render partial: "#{controller_path}/table_sortable/#{col.template}_header.html",
40
+ render partial: "#{col.template_path || controller_path}/table_sortable/#{col.template}_header.html",
37
41
  locals: {label: col.label,
38
- column: col}
42
+ column: col,
43
+ index: index}
39
44
  rescue ActionView::MissingTemplate
40
45
  content_tag :th, th_options do
41
46
  col.label
@@ -45,17 +50,18 @@ module TableSortable
45
50
  end
46
51
 
47
52
  def table_sortable_columns(record, html_options = {})
48
- controller.columns.map do |col|
53
+ controller.columns.map.with_index do |col, index|
49
54
  td_options = {}
50
55
  td_options['data-text'] = col.value(record) if col.value(record) != col.content(record)
51
56
  td_options.merge!(html_options)
52
57
 
53
58
  begin
54
- render partial: "#{controller_path}/table_sortable/#{col.template}_column.html",
59
+ render partial: "#{col.template_path || controller_path}/table_sortable/#{col.template}_column.html",
55
60
  locals: {content: col.content(record),
56
61
  value: col.value(record),
57
62
  source: record,
58
- column: col}
63
+ column: col,
64
+ index: index}
59
65
  rescue ActionView::MissingTemplate
60
66
  content_tag :td, td_options do
61
67
  col.value(record)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: table_sortable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oded Davidov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-25 00:00:00.000000000 Z
11
+ date: 2017-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler