sorting_table_for 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|