sorting_table_for 0.1.2 → 0.2.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.
- data/CHANGELOG.mdown +8 -0
- data/MIT-LICENSE +1 -1
- data/README.mdown +102 -75
- data/assets/config/initializers/sorting_table_for.rb +45 -0
- data/assets/public/images/sorting_table_for/bullet_arrow_down.png +0 -0
- data/assets/public/images/sorting_table_for/bullet_arrow_up.png +0 -0
- data/assets/public/images/sorting_table_for/bullet_black.png +0 -0
- data/assets/public/images/sorting_table_for/readme.txt +22 -0
- data/assets/public/stylesheets/sorting_table_for.css +13 -0
- data/lib/sorting_table_for.rb +7 -4
- data/lib/sorting_table_for/i18n.rb +9 -4
- data/lib/sorting_table_for/table_builder.rb +242 -15
- data/spec/helpers/builder_spec.rb +44 -0
- data/spec/helpers/caption_spec.rb +162 -0
- data/spec/helpers/column_spec.rb +41 -1
- data/spec/helpers/footer_spec.rb +267 -0
- data/spec/helpers/header_spec.rb +52 -2
- data/spec/locales/test.yml +4 -1
- data/spec/locales/test_rails3.yml +4 -0
- metadata +12 -5
- data/TODO +0 -4
data/CHANGELOG.mdown
CHANGED
data/MIT-LICENSE
CHANGED
data/README.mdown
CHANGED
@@ -6,9 +6,8 @@ SortingTableFor is a Rails TableBuilder made to easily create table or sort a ta
|
|
6
6
|
|
7
7
|
## Infos
|
8
8
|
|
9
|
-
- It's Rails 2
|
9
|
+
- It's Rails 2 and 3 compatible
|
10
10
|
- I18n compatible
|
11
|
-
- Almost fully configurable
|
12
11
|
|
13
12
|
## Installation
|
14
13
|
|
@@ -24,154 +23,183 @@ Alternatively, you can install it as a plugin.
|
|
24
23
|
|
25
24
|
rails plugin install git://github.com/arkownz/sorting_table_for.git
|
26
25
|
|
27
|
-
|
28
26
|
## Usage
|
29
27
|
|
30
|
-
To create a
|
28
|
+
To create a quick table
|
31
29
|
|
32
|
-
|
30
|
+
<% sorting_table_for @users do |table| %>
|
33
31
|
<%= table.headers %>
|
34
32
|
<%= table.columns %>
|
35
|
-
|
33
|
+
<% end %>
|
36
34
|
|
37
35
|
will render
|
38
36
|
|
39
37
|
<table>
|
40
38
|
<thead>
|
41
39
|
<tr>
|
42
|
-
<th><a href='/
|
43
|
-
<th><a href='/
|
40
|
+
<th class='cur-sort-not'><a href='/my_link?table_sort[username]=asc'>...</a></th>
|
41
|
+
<th class='cur-sort-not'><a href='/my_link?table_sort[firstname]=asc'>...</a></th>
|
44
42
|
<th>Edit</th>
|
45
43
|
<th>Delete</th>
|
46
44
|
</tr>
|
47
45
|
</thead>
|
48
46
|
<tbody>
|
49
47
|
<tr>
|
50
|
-
<td colspan='4'>Total
|
48
|
+
<td colspan='4' class='total-entries'>Total Entries: 2</td>
|
51
49
|
</tr>
|
52
50
|
<tr>
|
53
51
|
<td>Test</td>
|
54
52
|
<td>Myname</td>
|
55
|
-
<td><a href='/
|
56
|
-
<td><a href='/
|
53
|
+
<td><a href='/users/1/edit'>Edit</a></td>
|
54
|
+
<td><a href='/users/1'>Delete</a></td>
|
57
55
|
<tr>
|
58
56
|
</tbody>
|
59
57
|
</table>
|
60
58
|
|
61
|
-
|
59
|
+
column and header can be called with a list
|
62
60
|
|
63
|
-
|
61
|
+
<% sorting_table_for @users do |table| %>
|
64
62
|
<%= table.headers :username, :firstname, :lastname %>
|
65
63
|
<%= table.columns :username, :firstname, :lastname %>
|
66
|
-
|
64
|
+
<% end %>
|
67
65
|
|
68
|
-
On columns you can get the object of your collection.
|
69
|
-
|
66
|
+
On columns you can get the current object of your collection.
|
67
|
+
You can give to column or header whatever you want: symbol, string, image, ...
|
70
68
|
|
71
|
-
|
69
|
+
<% sorting_table_for @users do |table| %>
|
72
70
|
<%= table.headers do %>
|
73
71
|
<%= table.header :username %>
|
74
72
|
<%= table.header :firstname %>
|
75
73
|
<%= table.header image_tag('rails.png') %>
|
76
|
-
|
74
|
+
<% end %>
|
77
75
|
<%= table.columns do |user| %>
|
78
76
|
<%= table.column :username %>
|
79
77
|
<%= table.column user.firstname %>
|
80
78
|
<%= table.column 'exemple' %>
|
81
|
-
|
82
|
-
|
79
|
+
<% end %>
|
80
|
+
<% end %>
|
83
81
|
|
84
|
-
|
82
|
+
column and header can be called with a block
|
85
83
|
|
86
|
-
|
84
|
+
<% sorting_table_for @users do |table| %>
|
87
85
|
<%= table.headers do %>
|
88
86
|
<%= table.header do %>
|
89
87
|
<%= image_tag('rails.png') %>
|
90
|
-
|
91
|
-
|
92
|
-
<%= table.columns do |
|
88
|
+
<% end %>
|
89
|
+
<% end %>
|
90
|
+
<%= table.columns do |user| %>
|
93
91
|
<%= table.column do %>
|
94
|
-
<%=
|
95
|
-
|
96
|
-
|
97
|
-
|
92
|
+
<%= user.username.downcase %>
|
93
|
+
<% end %>
|
94
|
+
<% end %>
|
95
|
+
<% end %>
|
96
|
+
|
97
|
+
### Footer
|
98
|
+
|
99
|
+
You can set a footer to the table, it can be called with a list or a block
|
100
|
+
|
101
|
+
<% sorting_table_for @users do |table| %>
|
102
|
+
<%= table.footers :footer %>
|
103
|
+
<% end %>
|
98
104
|
|
99
|
-
|
105
|
+
-- equivalent --
|
100
106
|
|
101
|
-
|
107
|
+
<% sorting_table_for @users do |table| %>
|
108
|
+
<%= table.footers do %>
|
109
|
+
<%= table.footer :footer %>
|
110
|
+
<% end %>
|
111
|
+
<% end %>
|
102
112
|
|
103
|
-
|
104
|
-
- On symbol it will add the translation (I18n.t)
|
105
|
-
- On sorting it will add a class with an image to show the sort order
|
113
|
+
### Caption
|
106
114
|
|
107
|
-
|
115
|
+
Create a tag caption to set a title to the table, it can be called
|
116
|
+
with or without a block
|
108
117
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
- On Boolean it will add the translation (I18n.t) true or false
|
118
|
+
<% sorting_table_for @users do |table| %>
|
119
|
+
<%= table.caption 'my title' %>
|
120
|
+
<% end %>
|
113
121
|
|
114
|
-
|
122
|
+
### Options
|
115
123
|
|
116
|
-
|
124
|
+
- :html => Hash options: class, id, ...
|
125
|
+
- :as => Force to render a type (:date, :time, :currency)
|
126
|
+
- :format => Set the I18n localization format for :date or :time (:default, :short, ...)
|
127
|
+
- :action => Set an action
|
128
|
+
- :caption => Set caption on td
|
129
|
+
- :actions => Set actions to render
|
130
|
+
- :only => Columns to render (on list)
|
131
|
+
- :except => Columns to not render (on list)
|
132
|
+
- :sort => Add or not sorting (true of false)
|
133
|
+
|
134
|
+
Options for sorting table for
|
135
|
+
|
136
|
+
- :builder => Set a table builder
|
137
|
+
- :html => Set html options (id, class, ...)
|
138
|
+
- :remote_link => To set actions link with ajax (true or false)
|
139
|
+
- :remote_sort => To set link for sorting with ajax (true of false)
|
140
|
+
- :i18n => To use or not i18n on values (true or false)
|
141
|
+
|
142
|
+
Exemple
|
143
|
+
|
144
|
+
<% sorting_table_for @users do |table| %>
|
117
145
|
<%= table.headers do %>
|
118
146
|
<%= table.header :username %>
|
119
147
|
<%= table.header :price, :sort => false %>
|
120
148
|
<%= table.header :created_at %>
|
121
149
|
<%= table.header 'today' %>
|
122
|
-
|
150
|
+
<% end %>
|
123
151
|
<%= table.columns do |user| %>
|
124
152
|
<%= table.column user.username %>
|
125
153
|
<%= table.column user.price, :as => :currency %>
|
126
154
|
<%= table.column user.created, :as => :date %>
|
127
155
|
<%= table.column DateTime.now, :as => :datetime, :format => :short %>
|
128
|
-
|
129
|
-
|
156
|
+
<% end %>
|
157
|
+
<% end %>
|
130
158
|
|
131
|
-
|
159
|
+
Exemple with action
|
132
160
|
|
133
|
-
|
161
|
+
<% sorting_table_for @users do |table| %>
|
134
162
|
<%= table.headers do %>
|
135
163
|
<%= table.header :username %>
|
136
164
|
<%= table.header :action => :edit %>
|
137
|
-
|
165
|
+
<% end %>
|
138
166
|
<%= table.columns do |user| %>
|
139
167
|
<%= table.column user.username, :action => :show %>
|
140
168
|
<%= table.column :action => :edit %>
|
141
|
-
|
142
|
-
|
169
|
+
<% end %>
|
170
|
+
<% end %>
|
143
171
|
|
144
|
-
|
172
|
+
Exemple with html
|
145
173
|
|
146
|
-
|
174
|
+
<% sorting_table_for @users, :html => { :class => 'my_table' } do |table| %>
|
147
175
|
<%= table.headers :html => { :class => 'my_headers', :title => 'column !' } do %>
|
148
176
|
<%= table.header :username :html => { :class => 'header_username' } %>
|
149
177
|
<%= table.header :firstname :html => { :title => 'hello price' } %>
|
150
|
-
|
178
|
+
<% end %>
|
151
179
|
<%= table.columns :html => { :class => 'my_columns' } do |user| %>
|
152
180
|
<%= table.column :username :html => { :class => 'column_username' }%>
|
153
|
-
<%= table.column :firstname :html => { :title => "it's #{
|
154
|
-
|
155
|
-
|
181
|
+
<%= table.column :firstname :html => { :title => "it's #{user.firstname}" } %>
|
182
|
+
<% end %>
|
183
|
+
<% end %>
|
156
184
|
|
157
185
|
## Namespace
|
158
186
|
|
159
187
|
SortingTableFor can use your namespace
|
160
188
|
|
161
|
-
|
189
|
+
<% sorting_table_for [:admin, @users] do |table| %>
|
162
190
|
<%= table.headers %>
|
163
191
|
<%= table.columns %>
|
164
|
-
|
192
|
+
<% end %>
|
165
193
|
|
166
194
|
## Sorting
|
167
195
|
|
168
|
-
To add
|
196
|
+
To add sort in your query, you just have to add sorting_table in your query
|
169
197
|
|
170
198
|
def index
|
171
199
|
@users = User.sorting_table(params).all
|
172
200
|
end
|
173
201
|
|
174
|
-
to add a default sorting
|
202
|
+
to add a default sorting
|
175
203
|
|
176
204
|
def index
|
177
205
|
@users = User.sorting_table(params, :username).all
|
@@ -187,34 +215,33 @@ to add a default sorting
|
|
187
215
|
|
188
216
|
You can add ajax on sorting
|
189
217
|
|
190
|
-
|
218
|
+
<% sorting_table_for @users, :sort_remote => true do |table| %>
|
191
219
|
<%= table.headers %>
|
192
220
|
<%= table.columns %>
|
193
|
-
|
221
|
+
<% end %>
|
194
222
|
|
195
223
|
You can add ajax on links
|
196
224
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
## Stylesheet
|
225
|
+
<% sorting_table_for @users, :link_remote => true do |table| %>
|
226
|
+
<%= table.headers %>
|
227
|
+
<%= table.columns %>
|
228
|
+
<% end %>
|
203
229
|
|
204
|
-
|
230
|
+
## Configurations
|
205
231
|
|
206
|
-
|
207
|
-
- A class 'cur-sort-not', 'cur-sort-asc' or 'cur-sort-desc' on headers that you want to sort
|
232
|
+
There are some options that you can modify in your initiatilizer
|
208
233
|
|
209
|
-
[
|
234
|
+
[_see the initializer file exemple for more explanation_][]
|
210
235
|
|
211
|
-
##
|
236
|
+
## Stylesheet
|
212
237
|
|
213
|
-
|
238
|
+
- Class 'odd' or 'even' on rows
|
239
|
+
- Class 'cur-sort-not', 'cur-sort-asc' or 'cur-sort-desc' on sorting headers
|
240
|
+
- Class 'total-entries' on total entries
|
214
241
|
|
215
|
-
[
|
242
|
+
[_Here an exemple of css file_][]
|
216
243
|
|
217
|
-
Copyright (c) 2010 arkownz (
|
244
|
+
Copyright (c) 2010 arkownz (Thomas Floch), released under the MIT license
|
218
245
|
|
219
246
|
[_see the initializer file exemple for more explanation_]: http://github.com/arkownz/sorting_table_for/blob/master/assets/config/initializers/sorting_table_for.rb
|
220
247
|
[_Here an exemple of css file_]: http://github.com/arkownz/sorting_table_for/blob/master/assets/public/stylesheets/sorting_table_for.css
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
## All the values here are the defauls
|
4
|
+
|
5
|
+
## This is the column you don't want to show by default
|
6
|
+
## Array with columns name
|
7
|
+
## SortingTableFor::TableBuilder.reserved_columns = [:id, :password, :salt]
|
8
|
+
|
9
|
+
## Set the currency default columns
|
10
|
+
## Array with columns name
|
11
|
+
## SortingTableFor::TableBuilder.currency_columns = [:price, :total_price, :currency, :money]
|
12
|
+
|
13
|
+
## Set default for the boolean values
|
14
|
+
## Array with two states
|
15
|
+
## SortingTableFor::TableBuilder.default_boolean = [I18n.t(:bool_true, :scope => [:sorting_table_for, :columns]), I18n.t(:bool_false, :scope => [:sorting_table_for, :columns])]
|
16
|
+
|
17
|
+
## Show the total entries in table
|
18
|
+
## true or false
|
19
|
+
## SortingTableFor::TableBuilder.show_total_entries = true
|
20
|
+
|
21
|
+
## The name of the url params for sorting
|
22
|
+
## SortingTableFor::TableBuilder.params_sort_table = :table_sort
|
23
|
+
|
24
|
+
## The html classes for sorting
|
25
|
+
## Array with the tree states
|
26
|
+
## SortingTableFor::TableBuilder.html_sorting_class = ['cur-sort-not', 'cur_sort_asc', 'cur-sort-desc']
|
27
|
+
|
28
|
+
## Set default for actions
|
29
|
+
## Array with actions
|
30
|
+
## SortingTableFor::TableBuilder.default_actions = [:edit, :delete]
|
31
|
+
|
32
|
+
## The default format for I18n localization
|
33
|
+
## I18n.l
|
34
|
+
## SortingTableFor::TableBuilder.i18n_default_format_date = :default
|
35
|
+
|
36
|
+
## The default scope for localisation
|
37
|
+
## I18n.t
|
38
|
+
## Keywords are: namespace, controller, action, model
|
39
|
+
## SortingTableFor::TableBuilder.i18n_default_scope = [:namespace, :controller, :action]
|
40
|
+
|
41
|
+
## This value is add a value by default header's scope
|
42
|
+
## SortingTableFor::TableBuilder.i18n_add_header_action_scope = :header
|
43
|
+
|
44
|
+
## This value is add a value by default footer's scope
|
45
|
+
## SortingTableFor::TableBuilder.i18n_add_footer_action_scope = :footer
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,22 @@
|
|
1
|
+
Silk icon set 1.3
|
2
|
+
|
3
|
+
_________________________________________
|
4
|
+
Mark James
|
5
|
+
http://www.famfamfam.com/lab/icons/silk/
|
6
|
+
_________________________________________
|
7
|
+
|
8
|
+
This work is licensed under a
|
9
|
+
Creative Commons Attribution 2.5 License.
|
10
|
+
[ http://creativecommons.org/licenses/by/2.5/ ]
|
11
|
+
|
12
|
+
This means you may use it for any purpose,
|
13
|
+
and make any changes you like.
|
14
|
+
All I ask is that you include a link back
|
15
|
+
to this page in your credits.
|
16
|
+
|
17
|
+
Are you using this icon set? Send me an email
|
18
|
+
(including a link or picture if available) to
|
19
|
+
mjames@gmail.com
|
20
|
+
|
21
|
+
Any other questions about this icon set please
|
22
|
+
contact mjames@gmail.com
|
@@ -0,0 +1,13 @@
|
|
1
|
+
table.sorting_table_for { background-color: #BCBAB6; width: 100%; font-size: 12px; }
|
2
|
+
table.sorting_table_for thead tr th { background-color: #F0CFAD; text-align: left; color: black; padding: 4px; }
|
3
|
+
table.sorting_table_for thead tr th a { color: black; cursor: pointer; display: block; width: 100%; height: 100%; }
|
4
|
+
table.sorting_table_for thead tr th a:hover { text-decoration: underline; }
|
5
|
+
table.sorting_table_for thead tr th.cur-sort-not { background: #F0CFAD url('/images/sorting_table_for/bullet_black.png') no-repeat right; }
|
6
|
+
table.sorting_table_for thead tr th.cur-sort-asc { background: #F0CFAD url('/images/sorting_table_for/bullet_arrow_down.png') no-repeat right; }
|
7
|
+
table.sorting_table_for thead tr th.cur-sort-desc { background: #F0CFAD url('/images/sorting_table_for/bullet_arrow_up.png') no-repeat right; }
|
8
|
+
table.sorting_table_for tbody tr.odd { background-color: #8FF1F4; }
|
9
|
+
table.sorting_table_for tbody tr.even { background-color: white; }
|
10
|
+
table.sorting_table_for tbody tr.total-entries { background-color: white; }
|
11
|
+
table.sorting_table_for tbody tr td { padding: 4px; text-align: center; }
|
12
|
+
table.sorting_table_for tbody tr td a { color: black; cursor: pointer; display: block; width: 100%; height: 100%; }
|
13
|
+
table.sorting_table_for tfoot tr { background-color: white; text-align: center; }
|
data/lib/sorting_table_for.rb
CHANGED
@@ -13,16 +13,19 @@ module SortingTableFor
|
|
13
13
|
# <% end %>
|
14
14
|
#
|
15
15
|
# <% sorting_table_for @users do |table| %>
|
16
|
+
# <%= table.caption %>
|
16
17
|
# <%= table.headers %>
|
17
18
|
# <%= table.columns %>
|
19
|
+
# <%= table.footers %>
|
18
20
|
# <% end %>
|
19
21
|
#
|
20
22
|
# === Options
|
21
23
|
#
|
22
|
-
# * :builder - Set a table builder
|
23
|
-
# * :html - Set html options (id, class, ...)
|
24
|
-
# * :remote_link - To set actions link with ajax (true or false)
|
25
|
-
# * :remote_sort - To set link for sorting with ajax (true of false)
|
24
|
+
# * :builder - Set a table builder, default: SortingTableFor::TableBuilder
|
25
|
+
# * :html - Set html options (id, class, ...), default: empty
|
26
|
+
# * :remote_link - To set actions link with ajax (true or false), default: false
|
27
|
+
# * :remote_sort - To set link for sorting with ajax (true of false), default: false
|
28
|
+
# * :i18n - To use or not i18n on values (true or false), default: true
|
26
29
|
#
|
27
30
|
def sorting_table_for(object_or_array, *args)
|
28
31
|
raise ArgumentError, 'Missing block' unless block_given?
|
@@ -5,16 +5,21 @@ module SortingTableFor
|
|
5
5
|
class << self
|
6
6
|
|
7
7
|
# Set options to create a default scope
|
8
|
-
def set_options(params, model_name, namespace)
|
9
|
-
@params, @model_name, @namespace = params, model_name, namespace
|
8
|
+
def set_options(params, model_name, namespace, i18n_active = true)
|
9
|
+
@params, @model_name, @namespace, @i18n_active = params, model_name, namespace, i18n_active
|
10
10
|
end
|
11
11
|
|
12
12
|
# Translate
|
13
13
|
# Add a default scope if option scope isn't defined
|
14
|
-
def translate(attribute, options = {},
|
14
|
+
def translate(attribute, options = {}, type = nil)
|
15
|
+
if !@i18n_active
|
16
|
+
return options[:value] if options.has_key? :value
|
17
|
+
return attribute
|
18
|
+
end
|
15
19
|
if !options.has_key? :scope
|
16
20
|
options[:scope] = create_scope
|
17
|
-
options[:scope] << TableBuilder.i18n_add_header_action_scope if
|
21
|
+
options[:scope] << TableBuilder.i18n_add_header_action_scope if type and type == :header
|
22
|
+
options[:scope] << TableBuilder.i18n_add_footer_action_scope if type and type == :footer
|
18
23
|
end
|
19
24
|
::I18n.t(attribute, options)
|
20
25
|
end
|