tabulatr2 0.9.7 → 0.9.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +30 -0
- data/app/assets/stylesheets/tabulatr/application.css.scss +1 -1
- data/app/views/tabulatr/_tabulatr_actual_table.html.slim +3 -3
- data/app/views/tabulatr/_tabulatr_batch_actions_menu.html.slim +2 -2
- data/app/views/tabulatr/_tabulatr_buttons.html.slim +19 -0
- data/app/views/tabulatr/_tabulatr_filter_dialog.html.slim +1 -1
- data/app/views/tabulatr/_tabulatr_filter_menu.html.slim +2 -2
- data/app/views/tabulatr/_tabulatr_fuzzy_search_field.html.slim +1 -1
- data/app/views/tabulatr/_tabulatr_info_string.html.slim +1 -1
- data/app/views/tabulatr/_tabulatr_paginator.html.slim +1 -1
- data/app/views/tabulatr/_tabulatr_static_table.html.slim +3 -3
- data/app/views/tabulatr/_tabulatr_table.html.slim +1 -1
- data/lib/tabulatr.rb +1 -1
- data/lib/tabulatr/data/button_builder.rb +71 -0
- data/lib/tabulatr/data/data.rb +4 -3
- data/lib/tabulatr/data/dsl.rb +77 -8
- data/lib/tabulatr/data/filtering.rb +1 -1
- data/lib/tabulatr/data/formatting.rb +4 -8
- data/lib/tabulatr/data/invoker.rb +1 -1
- data/lib/tabulatr/data/pagination.rb +1 -1
- data/lib/tabulatr/data/proxy.rb +4 -3
- data/lib/tabulatr/data/sorting.rb +1 -1
- data/lib/tabulatr/engine.rb +1 -1
- data/lib/tabulatr/generators/railtie.rb +1 -1
- data/lib/tabulatr/generators/resource_override.rb +1 -1
- data/lib/tabulatr/generators/tabulatr/install_generator.rb +1 -1
- data/lib/tabulatr/generators/tabulatr/table_generator.rb +1 -1
- data/lib/tabulatr/json_builder.rb +1 -1
- data/lib/tabulatr/rails/action_controller.rb +4 -2
- data/lib/tabulatr/rails/action_view.rb +1 -1
- data/lib/tabulatr/rails/active_record.rb +1 -1
- data/lib/tabulatr/renderer/action.rb +1 -1
- data/lib/tabulatr/renderer/association.rb +3 -2
- data/lib/tabulatr/renderer/buttons.rb +32 -0
- data/lib/tabulatr/renderer/checkbox.rb +1 -1
- data/lib/tabulatr/renderer/column.rb +13 -11
- data/lib/tabulatr/renderer/columns_from_block.rb +9 -1
- data/lib/tabulatr/renderer/renderer.rb +4 -3
- data/lib/tabulatr/utility/request_data_not_included_error.rb +2 -3
- data/lib/tabulatr/utility/utility.rb +1 -1
- data/lib/tabulatr/version.rb +2 -2
- data/spec/dummy/app/tabulatr_data/product_tabulatr_data.rb +11 -1
- data/spec/dummy/app/views/products/simple_index.html.erb +1 -1
- data/spec/dummy/app/views/products/stupid_array.html.erb +3 -0
- data/spec/dummy/config/routes.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 457d8adce27f3f902cc4df5215a32cc4672ebe6f
|
4
|
+
data.tar.gz: b8f3703af996ac13ba561401e113e34bf1b165fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c81f75442ed064dfb4918af18cc310e3185e06c8f500ce327117427e2e7cb42a6b64ed43c88be3317418f5d8a783def68e8a1c47ab44f18eedae4d211dd09f69
|
7
|
+
data.tar.gz: f6817a83f7bfe03822dde8e343148cea2337721ce6a2efa2f382e8d3bf4f7fa0188c91f156392ed7750d8c317131a30c9f1ac473497680e31b194e1728962290
|
data/LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License
|
2
2
|
|
3
|
-
Copyright (c) 2010-
|
3
|
+
Copyright (c) 2010-2014 by tickettoaster GmbH, Peter Horn & Florian Thomas
|
4
4
|
http://www.provideal.net, peter.horn@provideal.net
|
5
5
|
|
6
6
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
data/README.md
CHANGED
@@ -134,6 +134,36 @@ class UserTabulatrData < Tabulatr::Data
|
|
134
134
|
end
|
135
135
|
```
|
136
136
|
|
137
|
+
### Actions
|
138
|
+
|
139
|
+
To provide a column that's not sortable and filterable but renders something nice:
|
140
|
+
|
141
|
+
```ruby
|
142
|
+
class UserTabulatrData < Tabulatr::Data
|
143
|
+
action do |r|
|
144
|
+
link_to "edit", edit_product_path(r)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
```
|
148
|
+
|
149
|
+
### Buttons
|
150
|
+
|
151
|
+
To render a fancy button group:
|
152
|
+
|
153
|
+
```ruby
|
154
|
+
class UserTabulatrData < Tabulatr::Data
|
155
|
+
buttons do |b,r|
|
156
|
+
b.button :eye, product_path(r), class: 'btn-success'
|
157
|
+
b.button :pencil, edit_product_path(r), class: 'btn-warning'
|
158
|
+
b.submenu do |s|
|
159
|
+
s.button :star, star_product_path(r), label: 'Dolle Sache'
|
160
|
+
s.divider
|
161
|
+
s.button :'trash-o', product_path(r), label: 'Löschen', confirmation: 'echt?', class: 'btn-danger', method: :delete
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
```
|
166
|
+
|
137
167
|
### Search
|
138
168
|
|
139
169
|
The DSL provides you with a `search` method to define a custom fuzzy search method which is not bound
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
1
|
+
// Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
2
2
|
//
|
3
3
|
// Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
// a copy of this software and associated documentation files (the
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
1
|
+
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
2
2
|
/
|
3
3
|
/ Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
/ a copy of this software and associated documentation files (the
|
@@ -26,7 +26,7 @@
|
|
26
26
|
tr
|
27
27
|
- columns.each do |column|
|
28
28
|
- classes = column.sortable ? ['tabulatr-sortable'] : []
|
29
|
-
- classes = [classes, column.classes].flatten.compact.join(' ')
|
29
|
+
- classes = [classes, "tabulatr-column-#{column.coltype}", column.classes].flatten.compact.join(' ')
|
30
30
|
th data-tabulatr-column-name=column.full_name style=column.html_header_style class=classes
|
31
31
|
= column.human_name
|
32
32
|
tbody
|
@@ -34,7 +34,7 @@
|
|
34
34
|
tr.empty_row
|
35
35
|
- columns.each do |column|
|
36
36
|
- classes = column.sortable ? ['tabulatr-sortable'] : []
|
37
|
-
- classes = [classes, column.classes].flatten.compact.join(' ')
|
37
|
+
- classes = [classes, "tabulatr-column-#{column.coltype}", column.classes].flatten.compact.join(' ')
|
38
38
|
td data-tabulatr-column-name=column.full_name data-tabulatr-type=column.coltype style=column.html_cell_style class=classes
|
39
39
|
.tabulatr-spinner-box data-table=table_id
|
40
40
|
= image_tag "#{Tabulatr.spinner}-loader.gif"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
1
|
+
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
2
2
|
/
|
3
3
|
/ Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
/ a copy of this software and associated documentation files (the
|
@@ -24,7 +24,7 @@
|
|
24
24
|
.dropdown
|
25
25
|
a.btn.btn-default data-toggle="dropdown" href="#"
|
26
26
|
i.icon-cog.glyphicon.glyphicon-cog.fa.fa-cog'
|
27
|
-
i.icon-caret-down.glyphicon.glyphicon-
|
27
|
+
i.icon-caret-down.glyphicon.glyphicon-chevron-down.fa.fa-caret-down
|
28
28
|
ul.dropdown-menu role="menu" aria-labelledby="dLabel"
|
29
29
|
- table_options[:batch_actions].each do |key, label|
|
30
30
|
li
|
@@ -0,0 +1,19 @@
|
|
1
|
+
//{:buttons=>[{:icon=>:"eye-open", :path=>"/products/1", :options=>{:class=>"btn-success"}}, {:icon=>:pencil, :path=>"/products/1/edit", :options=>{:class=>"btn-warning"}}], :submenu=>[{:icon=>:star, :path=>"/products/1", :label=>"Dolle Sache"}, :divider, {:icon=>:"trash-o", :path=>"/products/1", :label=>"Löschen", :options=>{:confirm=>"echt?", :class=>"btn-danger", :method=>:delete}}]}
|
2
|
+
.btn-group
|
3
|
+
- buttons[:buttons].each do |button|
|
4
|
+
- o = (button[:options] || {}).merge(class: "btn btn-sm btn-default #{button[:options].try(:[], :class)}")
|
5
|
+
= link_to fa_icon(button[:icon]), button[:path], o
|
6
|
+
- if buttons[:submenu].present?
|
7
|
+
button.btn.btn-default.btn-sm.dropdown-toggle data-toggle='dropdown'
|
8
|
+
span.caret
|
9
|
+
ul.dropdown-menu role='menu'
|
10
|
+
- buttons[:submenu].each do |button|
|
11
|
+
- if button == :divider
|
12
|
+
li.divider role="presentation"
|
13
|
+
- else
|
14
|
+
li= link_to button[:path], button[:options] do
|
15
|
+
- if button[:icon].present?
|
16
|
+
=> fa_icon(button[:icon])
|
17
|
+
- if button[:label].present?
|
18
|
+
= button[:label]
|
19
|
+
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
1
|
+
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
2
2
|
/
|
3
3
|
/ Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
/ a copy of this software and associated documentation files (the
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
1
|
+
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
2
2
|
/
|
3
3
|
/ Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
/ a copy of this software and associated documentation files (the
|
@@ -23,7 +23,7 @@
|
|
23
23
|
.dropdown
|
24
24
|
a.btn.btn-default data-toggle="dropdown" href="#"
|
25
25
|
i.icon-filter.glyphicon.glyphicon-filter.fa.fa-filter'
|
26
|
-
i.icon-caret-down.glyphicon.glyphicon-
|
26
|
+
i.icon-caret-down.glyphicon.glyphicon-chevron-down.fa.fa-caret-down
|
27
27
|
ul.dropdown-menu role="menu" aria-labelledby="dLabel"
|
28
28
|
- columns.select(&:filter).each do |column|
|
29
29
|
li
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
1
|
+
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
2
2
|
/
|
3
3
|
/ Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
/ a copy of this software and associated documentation files (the
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
1
|
+
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
2
2
|
/
|
3
3
|
/ Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
/ a copy of this software and associated documentation files (the
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
1
|
+
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
2
2
|
/
|
3
3
|
/ Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
/ a copy of this software and associated documentation files (the
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
1
|
+
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
2
2
|
/
|
3
3
|
/ Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
/ a copy of this software and associated documentation files (the
|
@@ -23,11 +23,11 @@ table class="#{table_options[:html_class]} tabulatr_static_table"
|
|
23
23
|
thead
|
24
24
|
tr
|
25
25
|
- columns.each do |column|
|
26
|
-
th data-tabulatr-column-name=column.full_name style=column.html_header_style
|
26
|
+
th data-tabulatr-column-name=column.full_name style=column.html_header_style class=["tabulatr-column-#{column.coltype}", column.classes].flatten.compact.join(' ')
|
27
27
|
= column.human_name
|
28
28
|
tbody
|
29
29
|
- records.each do |record|
|
30
30
|
tr data-id=record.try(:id)
|
31
31
|
- columns.each do |column|
|
32
|
-
td data-tabulatr-column-name=column.full_name data-tabulatr-type=column.coltype style=column.html_cell_style
|
32
|
+
td data-tabulatr-column-name=column.full_name data-tabulatr-type=column.coltype style=column.html_cell_style class=["tabulatr-column-#{column.coltype}", column.classes].flatten.compact.join(' ')
|
33
33
|
= column.value_for(record, self)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
1
|
+
/ Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
2
2
|
/
|
3
3
|
/ Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
/ a copy of this software and associated documentation files (the
|
data/lib/tabulatr.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -0,0 +1,71 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
|
24
|
+
# buttons do |b,r|
|
25
|
+
# b.button :'eye-open', foo_path(r), class: 'btn-success'
|
26
|
+
# b.button :'pencil', edit_foo_path(r), class: 'btn-warning'
|
27
|
+
# b.submenu do |s|
|
28
|
+
# s.button :star, star_foor_path(r), label: 'Dolle Sache'
|
29
|
+
# s.divider
|
30
|
+
# s.button :'trash-o', foo_path(r), label: 'Löschen', confirm: 'echt?', class: 'btn-danger', method: :delete
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
|
34
|
+
|
35
|
+
class Tabulatr::Data::ButtonBuilder
|
36
|
+
|
37
|
+
def initialize
|
38
|
+
@mode = :buttons
|
39
|
+
@buttons = []
|
40
|
+
@submenu = []
|
41
|
+
val
|
42
|
+
end
|
43
|
+
|
44
|
+
def val
|
45
|
+
{buttons: @buttons, submenu: @submenu}
|
46
|
+
end
|
47
|
+
|
48
|
+
def button(icon, path, options={})
|
49
|
+
label = options.dup.delete(:label)
|
50
|
+
if @mode == :buttons
|
51
|
+
@buttons << {icon: icon, path: path, options: options}
|
52
|
+
else
|
53
|
+
@submenu << {icon: icon, label: label, path: path, options: options}
|
54
|
+
end
|
55
|
+
val
|
56
|
+
end
|
57
|
+
|
58
|
+
def submenu(&block)
|
59
|
+
raise "No submenus in submenus, sorry" if @mode == :submenu
|
60
|
+
@mode = :submenu
|
61
|
+
yield(self)
|
62
|
+
@mode = :buttons
|
63
|
+
val
|
64
|
+
end
|
65
|
+
|
66
|
+
def divider
|
67
|
+
raise "use dividers only in submenu" unless @mode == :submenu
|
68
|
+
@submenu << :divider
|
69
|
+
val
|
70
|
+
end
|
71
|
+
end
|
data/lib/tabulatr/data/data.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -38,7 +38,7 @@ class Tabulatr::Data
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
def data_for_table(params, locals: {}, &block)
|
41
|
+
def data_for_table(params, locals: {}, controller: nil, &block)
|
42
42
|
|
43
43
|
@batch_actions = block if block_given?
|
44
44
|
|
@@ -59,7 +59,7 @@ class Tabulatr::Data
|
|
59
59
|
# TODO: batch actions and checked ids
|
60
60
|
|
61
61
|
# get the records
|
62
|
-
found = apply_formats(locals: locals)
|
62
|
+
found = apply_formats(locals: locals, controller: controller)
|
63
63
|
|
64
64
|
append = params[:append].present? ? Tabulatr::Utility.string_to_boolean(params[:append]) : false
|
65
65
|
|
@@ -139,3 +139,4 @@ require_relative './pagination'
|
|
139
139
|
require_relative './formatting'
|
140
140
|
require_relative './row'
|
141
141
|
require_relative './proxy'
|
142
|
+
require_relative './button_builder'
|
data/lib/tabulatr/data/dsl.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -44,8 +44,16 @@ module Tabulatr::Data::DSL
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
def column(name, sort_sql: nil, filter_sql: nil, sql: nil, table_column_options: {},
|
47
|
+
def column(name, sort_sql: nil, filter_sql: nil, sql: nil, table_column_options: {},
|
48
|
+
classes: nil, width: false, align: false, valign: false, wrap: nil, th_html: false,
|
49
|
+
filter_html: false, filter: true, sortable: true, format: nil, map: true, cell_style: {},
|
50
|
+
header_style: {},
|
51
|
+
&block)
|
48
52
|
@table_columns ||= []
|
53
|
+
table_column_options = {classes: classes, width: width, align: align, valign: valign, wrap: wrap,
|
54
|
+
th_html: th_html, filter_html: filter_html, filter: filter, sortable: sortable,
|
55
|
+
format: format, map: map, cell_style: cell_style, header_style: header_style
|
56
|
+
}.merge(table_column_options)
|
49
57
|
table_name = main_class.table_name
|
50
58
|
table_column = Tabulatr::Renderer::Column.from(
|
51
59
|
table_column_options.merge(name: name,
|
@@ -56,8 +64,16 @@ module Tabulatr::Data::DSL
|
|
56
64
|
@table_columns << table_column
|
57
65
|
end
|
58
66
|
|
59
|
-
def association(assoc, name, sort_sql: nil, filter_sql: nil, sql: nil, table_column_options: {},
|
67
|
+
def association(assoc, name, sort_sql: nil, filter_sql: nil, sql: nil, table_column_options: {},
|
68
|
+
classes: nil, width: false, align: false, valign: false, wrap: nil, th_html: false,
|
69
|
+
filter_html: false, filter: true, sortable: true, format: nil, map: true, cell_style: {},
|
70
|
+
header_style: {},
|
71
|
+
&block)
|
60
72
|
@table_columns ||= []
|
73
|
+
table_column_options = {classes: classes, width: width, align: align, valign: valign, wrap: wrap,
|
74
|
+
th_html: th_html, filter_html: filter_html, filter: filter, sortable: sortable,
|
75
|
+
format: format, map: map, cell_style: cell_style, header_style: header_style
|
76
|
+
}.merge(table_column_options)
|
61
77
|
assoc_klass = main_class.reflect_on_association(assoc.to_sym)
|
62
78
|
t_name = assoc_klass.try(:table_name)
|
63
79
|
table_column = Tabulatr::Renderer::Association.from(
|
@@ -69,17 +85,70 @@ module Tabulatr::Data::DSL
|
|
69
85
|
@table_columns << table_column
|
70
86
|
end
|
71
87
|
|
72
|
-
def
|
73
|
-
|
74
|
-
|
88
|
+
def actions(header: nil, name: nil, table_column_options: {},
|
89
|
+
classes: nil, width: false, align: false, valign: false, wrap: nil, th_html: false,
|
90
|
+
filter_html: false, filter: true, sortable: true, format: nil, map: true, cell_style: {},
|
91
|
+
header_style: {},
|
92
|
+
&block)
|
93
|
+
raise 'give a block to action column' unless block_given?
|
94
|
+
@table_columns ||= []
|
95
|
+
table_column_options = {classes: classes, width: width, align: align, valign: valign, wrap: wrap,
|
96
|
+
th_html: th_html, filter_html: filter_html, filter: filter, sortable: sortable,
|
97
|
+
format: format, map: map, cell_style: cell_style, header_style: header_style
|
98
|
+
}.merge(table_column_options)
|
99
|
+
table_column = Tabulatr::Renderer::Action.from(
|
100
|
+
table_column_options.merge(
|
101
|
+
name: (name || '_actions'), table_name: main_class.table_name.to_sym,
|
102
|
+
klass: @base, header: header || '',
|
103
|
+
filter: false, sortable: false,
|
104
|
+
output: block))
|
105
|
+
@table_columns << table_column
|
106
|
+
end
|
107
|
+
|
108
|
+
def buttons(header: nil, name: nil, table_column_options: {},
|
109
|
+
classes: nil, width: false, align: false, valign: false, wrap: nil, th_html: false,
|
110
|
+
filter_html: false, filter: true, sortable: true, format: nil, map: true, cell_style: {},
|
111
|
+
header_style: {},
|
112
|
+
&block)
|
113
|
+
raise 'give a block to action column' unless block_given?
|
114
|
+
@table_columns ||= []
|
115
|
+
table_column_options = {classes: classes, width: width, align: align, valign: valign, wrap: wrap,
|
116
|
+
th_html: th_html, filter_html: filter_html, filter: filter, sortable: sortable,
|
117
|
+
format: format, map: map, cell_style: cell_style, header_style: header_style
|
118
|
+
}.merge(table_column_options)
|
119
|
+
output = ->(r) {
|
120
|
+
tdbb = Tabulatr::Data::ButtonBuilder.new
|
121
|
+
self.instance_exec tdbb, r, &block
|
122
|
+
bb = tdbb.val
|
123
|
+
self.controller.render_to_string partial: '/tabulatr/tabulatr_buttons', locals: {buttons: bb}, formats: [:html]
|
124
|
+
}
|
125
|
+
table_column = Tabulatr::Renderer::Buttons.from(
|
126
|
+
table_column_options = table_column_options.merge(
|
127
|
+
name: (name || '_buttons'), table_name: main_class.table_name.to_sym,
|
128
|
+
klass: @base, header: header || '',
|
129
|
+
filter: false, sortable: false,
|
130
|
+
output: output))
|
131
|
+
@table_columns << table_column
|
75
132
|
end
|
76
133
|
|
77
|
-
def checkbox(table_column_options: {}
|
134
|
+
def checkbox(table_column_options: {},
|
135
|
+
classes: nil, width: false, align: false, valign: false, wrap: nil, th_html: false,
|
136
|
+
filter_html: false, filter: true, sortable: true, format: nil, map: true, cell_style: {},
|
137
|
+
header_style: {})
|
78
138
|
@table_columns ||= []
|
79
|
-
|
139
|
+
table_column_options = {classes: classes, width: width, align: align, valign: valign, wrap: wrap,
|
140
|
+
th_html: th_html, filter_html: filter_html, filter: filter, sortable: sortable,
|
141
|
+
format: format, map: map, cell_style: cell_style, header_style: header_style
|
142
|
+
}.merge(table_column_options)
|
143
|
+
box = Tabulatr::Renderer::Checkbox.from(table_column_options = table_column_options.merge(klass: @base, filter: false, sortable: false))
|
80
144
|
@table_columns << box
|
81
145
|
end
|
82
146
|
|
147
|
+
def search(*args, &block)
|
148
|
+
raise "either column or block" if args.present? && block_given?
|
149
|
+
@search = args.presence || block
|
150
|
+
end
|
151
|
+
|
83
152
|
def row &block
|
84
153
|
raise 'Please pass a block to row if you want to use it.' unless block_given?
|
85
154
|
@row = block
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -23,14 +23,14 @@
|
|
23
23
|
|
24
24
|
module Tabulatr::Data::Formatting
|
25
25
|
|
26
|
-
def apply_formats(locals: {})
|
27
|
-
view = Data::Proxy.new(locals: locals)
|
26
|
+
def apply_formats(locals: {}, controller: nil)
|
27
|
+
view = Data::Proxy.new(locals: locals, controller: controller)
|
28
28
|
return @relation.map do |record|
|
29
29
|
view.record = record
|
30
30
|
h = HashWithIndifferentAccess.new
|
31
31
|
table_columns.each do |tc|
|
32
32
|
h[tc.table_name] ||= HashWithIndifferentAccess.new
|
33
|
-
h[tc.table_name][tc.name] =
|
33
|
+
h[tc.table_name][tc.name] = tc.value_for(record, view)
|
34
34
|
end
|
35
35
|
h[:_row_config] = format_row(view, @row)
|
36
36
|
h[:id] = record.id
|
@@ -38,10 +38,6 @@ module Tabulatr::Data::Formatting
|
|
38
38
|
end # @relation map
|
39
39
|
end # apply_formats
|
40
40
|
|
41
|
-
def format_column(record, output, view)
|
42
|
-
view.instance_exec(record, &output) if output.present?
|
43
|
-
end
|
44
|
-
|
45
41
|
def format_row(view, row)
|
46
42
|
row_config = Row.new
|
47
43
|
view.instance_exec(view.record, row_config.attributes, &row) if row.is_a?(Proc)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
data/lib/tabulatr/data/proxy.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -23,12 +23,13 @@
|
|
23
23
|
|
24
24
|
class Data::Proxy < ActionView::Base
|
25
25
|
|
26
|
-
attr_accessor :record
|
26
|
+
attr_accessor :record, :controller
|
27
27
|
|
28
|
-
def initialize(record=nil, locals: {})
|
28
|
+
def initialize(record=nil, locals: {}, controller: nil)
|
29
29
|
self.class._init
|
30
30
|
Rails.application.routes.mounted_helpers.instance_methods.each{|f| self.send(f).instance_variable_set('@scope', self)}
|
31
31
|
@record = record
|
32
|
+
@controller = controller
|
32
33
|
locals.each do |nam, val|
|
33
34
|
raise "cowardly refusing to override `#{nam}'" if respond_to? nam
|
34
35
|
define_singleton_method nam do val end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
data/lib/tabulatr/engine.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -30,11 +30,13 @@ class ActionController::Base
|
|
30
30
|
klass = relation.respond_to?(:klass) ? relation.klass : relation
|
31
31
|
respond_to do |format|
|
32
32
|
format.json {
|
33
|
-
records = klass.tabulatr(relation, tabulatr_data_class).data_for_table(params, locals: locals, &block)
|
33
|
+
records = klass.tabulatr(relation, tabulatr_data_class).data_for_table(params, locals: locals, controller: self, &block)
|
34
34
|
render json: records.to_tabulatr_json(serializer)
|
35
|
+
records
|
35
36
|
}
|
36
37
|
format.html {
|
37
38
|
render action: render_action || action_name
|
39
|
+
nil
|
38
40
|
}
|
39
41
|
end
|
40
42
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -30,7 +30,8 @@ class Tabulatr::Renderer::Association < Tabulatr::Renderer::Column
|
|
30
30
|
def column?() false end
|
31
31
|
def association?() true end
|
32
32
|
|
33
|
-
def principal_value(record)
|
33
|
+
def principal_value(record, view)
|
34
|
+
return super if output
|
34
35
|
v = record.send(table_name)
|
35
36
|
if v && v.respond_to?(:to_a) && map && name != :count
|
36
37
|
v.map(&:"#{name}")
|
@@ -0,0 +1,32 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
|
24
|
+
class Tabulatr::Renderer::Buttons < Tabulatr::Renderer::Action
|
25
|
+
def human_name
|
26
|
+
header
|
27
|
+
end
|
28
|
+
|
29
|
+
def coltype() 'buttons' end
|
30
|
+
def column?() false end
|
31
|
+
def action?() true end
|
32
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -51,7 +51,6 @@ class Tabulatr::Renderer::Column
|
|
51
51
|
filter_sql: nil,
|
52
52
|
output: nil,
|
53
53
|
&block)
|
54
|
-
b = block_given? ? block : nil
|
55
54
|
self.new(
|
56
55
|
name: name,
|
57
56
|
table_name: table_name,
|
@@ -68,7 +67,7 @@ class Tabulatr::Renderer::Column
|
|
68
67
|
format: format,
|
69
68
|
map: map,
|
70
69
|
klass: klass,
|
71
|
-
block:
|
70
|
+
block: block,
|
72
71
|
cell_style: cell_style,
|
73
72
|
header_style: header_style,
|
74
73
|
sort_sql: sort_sql,
|
@@ -143,12 +142,7 @@ class Tabulatr::Renderer::Column
|
|
143
142
|
end
|
144
143
|
|
145
144
|
def value_for(record, view)
|
146
|
-
|
147
|
-
r = view.instance_exec(record, &block)
|
148
|
-
r = r.join(' ').html_safe if r.is_a?(Array)
|
149
|
-
return r
|
150
|
-
end
|
151
|
-
val = principal_value(record) or return ''
|
145
|
+
val = principal_value(record, view)
|
152
146
|
if format.present? && val.respond_to?(:to_ary)
|
153
147
|
val.map do |v|
|
154
148
|
case format
|
@@ -170,8 +164,16 @@ class Tabulatr::Renderer::Column
|
|
170
164
|
end
|
171
165
|
end
|
172
166
|
|
173
|
-
def principal_value(record)
|
174
|
-
|
167
|
+
def principal_value(record, view)
|
168
|
+
if output
|
169
|
+
view.instance_exec(record, &output)
|
170
|
+
elsif block
|
171
|
+
view.instance_exec(record, &block)
|
172
|
+
elsif name
|
173
|
+
record.send name
|
174
|
+
else
|
175
|
+
nil
|
176
|
+
end
|
175
177
|
end
|
176
178
|
|
177
179
|
def determine_appropriate_filter!
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -57,6 +57,14 @@ class Tabulatr::Renderer
|
|
57
57
|
@columns << Action.from(opts.merge(klass: klass, filter: false, sortable: false), &block)
|
58
58
|
end
|
59
59
|
|
60
|
+
def buttons(opts={}, &block)
|
61
|
+
output = ->(r) {
|
62
|
+
bb = self.instance_exec Tabulatr::Data::ButtonBuilder.new, r, &block
|
63
|
+
self.controller.render_to_string partial: '/tabulatr/tabulatr_buttons', locals: {buttons: bb}, formats: [:html]
|
64
|
+
}
|
65
|
+
@columns << Buttons.from(opts.merge(klass: klass, filter: false, sortable: false, output: output), &block)
|
66
|
+
end
|
67
|
+
|
60
68
|
def self.process(klass, table_data_object = nil, &block)
|
61
69
|
i = self.new(klass, table_data_object)
|
62
70
|
yield(i)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -114,8 +114,8 @@ class Tabulatr::Renderer
|
|
114
114
|
r = "#{r.keys.first}:#{r.values.first}"
|
115
115
|
end
|
116
116
|
result = available_columns.find{|column| column.full_name.to_sym == r.to_sym }
|
117
|
-
result
|
118
|
-
result
|
117
|
+
result ||= available_columns.find{|column| column.name.to_sym == r.to_sym && column.table_name == main_table_name}
|
118
|
+
result or raise "Can't find column '#{r}'"
|
119
119
|
end.flatten
|
120
120
|
end
|
121
121
|
|
@@ -124,5 +124,6 @@ end
|
|
124
124
|
require_relative './column'
|
125
125
|
require_relative './association'
|
126
126
|
require_relative './action'
|
127
|
+
require_relative './buttons'
|
127
128
|
require_relative './checkbox'
|
128
129
|
require_relative './columns_from_block'
|
@@ -2,8 +2,7 @@ module Tabulatr
|
|
2
2
|
class RequestDataNotIncludedError < StandardError
|
3
3
|
|
4
4
|
def self.raise_error(method, object)
|
5
|
-
raise self, "You requested '#{method}' on '#{object}' but
|
6
|
-
there was no such method included in your TabulatrData"
|
5
|
+
raise self, "You requested '#{method}' on '#{object}' but there was no such method included in your TabulatrData"
|
7
6
|
end
|
8
7
|
end
|
9
|
-
end
|
8
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
data/lib/tabulatr/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas,
|
2
|
+
# Copyright (c) 2010-2014 Peter Horn & Florian Thomas, tickettoaster GmbH
|
3
3
|
#
|
4
4
|
# Permission is hereby granted, free of charge, to any person obtaining
|
5
5
|
# a copy of this software and associated documentation files (the
|
@@ -22,5 +22,5 @@
|
|
22
22
|
#++
|
23
23
|
|
24
24
|
module Tabulatr
|
25
|
-
VERSION = "0.9.
|
25
|
+
VERSION = "0.9.10"
|
26
26
|
end
|
@@ -22,7 +22,7 @@ class ProductTabulatrData < Tabulatr::Data
|
|
22
22
|
table_column_options: {header: 'Product by vendor'} do
|
23
23
|
"#{record.title} from #{record.vendor.try(:name)}"
|
24
24
|
end
|
25
|
-
column :active,
|
25
|
+
column :active, sortable: false
|
26
26
|
column :updated_at, table_column_options: { filter: :date } do "#{record.updated_at.strftime('%H:%M %d.%m.%Y')}" end
|
27
27
|
association :vendor, :name, table_column_options: { filter: :exact }
|
28
28
|
association :tags, :title do |r|
|
@@ -30,4 +30,14 @@ class ProductTabulatrData < Tabulatr::Data
|
|
30
30
|
end
|
31
31
|
association :tags, :count
|
32
32
|
|
33
|
+
buttons width: '200px' do |b,r|
|
34
|
+
b.button :eye, product_path(r), class: 'btn-success'
|
35
|
+
b.button :pencil, edit_product_path(r), class: 'btn-warning'
|
36
|
+
b.submenu do |s|
|
37
|
+
s.button :star, product_path(r), label: 'Dolle Sache'
|
38
|
+
s.divider
|
39
|
+
s.button :'trash-o', product_path(r), label: 'Löschen', confirm: 'echt?', class: 'btn-danger', method: :delete
|
40
|
+
end
|
41
|
+
"haha!"
|
42
|
+
end
|
33
43
|
end
|
@@ -1,4 +1,4 @@
|
|
1
1
|
<%= table_for Product, paginate: true, persistent: false,
|
2
2
|
batch_actions: {a: "Hallo", b: "Du da!"},
|
3
|
-
columns: [:title, :price, :active, :vendor_product_name, :updated_at,
|
3
|
+
columns: [:'_buttons', :title, :price, :active, :vendor_product_name, :updated_at,
|
4
4
|
{vendor: :name}, 'tags:title'] %>
|
data/spec/dummy/config/routes.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tabulatr2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Horn
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-07-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
@@ -102,6 +102,7 @@ files:
|
|
102
102
|
- app/assets/stylesheets/tabulatr/bootstrap2_fixes.css.scss
|
103
103
|
- app/views/tabulatr/_tabulatr_actual_table.html.slim
|
104
104
|
- app/views/tabulatr/_tabulatr_batch_actions_menu.html.slim
|
105
|
+
- app/views/tabulatr/_tabulatr_buttons.html.slim
|
105
106
|
- app/views/tabulatr/_tabulatr_filter_dialog.html.slim
|
106
107
|
- app/views/tabulatr/_tabulatr_filter_menu.html.slim
|
107
108
|
- app/views/tabulatr/_tabulatr_fuzzy_search_field.html.slim
|
@@ -111,6 +112,7 @@ files:
|
|
111
112
|
- app/views/tabulatr/_tabulatr_table.html.slim
|
112
113
|
- init.rb
|
113
114
|
- lib/tabulatr.rb
|
115
|
+
- lib/tabulatr/data/button_builder.rb
|
114
116
|
- lib/tabulatr/data/data.rb
|
115
117
|
- lib/tabulatr/data/dsl.rb
|
116
118
|
- lib/tabulatr/data/filtering.rb
|
@@ -133,6 +135,7 @@ files:
|
|
133
135
|
- lib/tabulatr/rails/active_record.rb
|
134
136
|
- lib/tabulatr/renderer/action.rb
|
135
137
|
- lib/tabulatr/renderer/association.rb
|
138
|
+
- lib/tabulatr/renderer/buttons.rb
|
136
139
|
- lib/tabulatr/renderer/checkbox.rb
|
137
140
|
- lib/tabulatr/renderer/column.rb
|
138
141
|
- lib/tabulatr/renderer/columns_from_block.rb
|