rails_admin_toggleable 0.3.1 → 0.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 +4 -4
- data/README.md +37 -0
- data/config/locales/en.rails_admin_toggleable.yml +12 -0
- data/config/locales/ru.rails_admin_toggleable.yml +12 -0
- data/lib/rails_admin_toggleable/action.rb +41 -13
- data/lib/rails_admin_toggleable/bulk_action.rb +55 -0
- data/lib/rails_admin_toggleable/field.rb +6 -5
- data/lib/rails_admin_toggleable/version.rb +1 -1
- data/lib/rails_admin_toggleable.rb +16 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb92a958891b7937df4c21e3f51e688b4c561643
|
4
|
+
data.tar.gz: 750aa25771f3bf92df6dbc194d32ec9e7b62210c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 438a6f3b22d623f475114ba67b9aa77cac5b1a845945e6a3b09a53030845f2957f003dcc6855112e2c972aa1c7e4e732bf102af578f8a72020d1e16cf331154e
|
7
|
+
data.tar.gz: d0956078c95bf42897eb94c00e95652fb3ae1b7a5017911ec8ca58e44bb890028402ad5a191ce350d196f132ffc26ee3e869c6666bcf12cc01c6f4670a030284
|
data/README.md
CHANGED
@@ -37,6 +37,43 @@ Make the field you need toggleable:
|
|
37
37
|
...
|
38
38
|
end
|
39
39
|
|
40
|
+
## Bulk action usage
|
41
|
+
|
42
|
+
# Add the bulk action:
|
43
|
+
# define_bulk_toggle_method(type of action, model field)
|
44
|
+
define_bulk_toggle_method(:enable, :enabled)
|
45
|
+
define_bulk_toggle_method(:disable, :enabled)
|
46
|
+
define_bulk_toggle_method(:toggle, :enabled)
|
47
|
+
define_bulk_toggle_method(:enable, :deleted)
|
48
|
+
define_bulk_toggle_method(:disable, :deleted)
|
49
|
+
define_bulk_toggle_method(:toggle, :deleted)
|
50
|
+
|
51
|
+
# enable it for all or some models
|
52
|
+
RailsAdmin.config do |config|
|
53
|
+
config.actions do
|
54
|
+
......
|
55
|
+
bulk_enable_enabled do
|
56
|
+
visible do
|
57
|
+
['Adder::Contest'].include? bindings[:abstract_model].model_name
|
58
|
+
end
|
59
|
+
end
|
60
|
+
bulk_disable_enabled do
|
61
|
+
visible do
|
62
|
+
['Adder::Contest'].include? bindings[:abstract_model].model_name
|
63
|
+
end
|
64
|
+
end
|
65
|
+
bulk_toggle_enabled do
|
66
|
+
visible do
|
67
|
+
['Adder::Contest'].include? bindings[:abstract_model].model_name
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
bulk_enable_deleted
|
72
|
+
bulk_disable_deleted
|
73
|
+
bulk_toggle_deleted
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
40
77
|
## Contributing
|
41
78
|
|
42
79
|
1. Fork it
|
@@ -3,6 +3,18 @@ en:
|
|
3
3
|
actions:
|
4
4
|
toggle:
|
5
5
|
title: "Toggle"
|
6
|
+
bulk_enable_enabled:
|
7
|
+
bulk_link: 'Enable selected "enabled"'
|
8
|
+
bulk_disable_enabled:
|
9
|
+
bulk_link: 'Disable selected "enabled"'
|
10
|
+
bulk_toggle_enabled:
|
11
|
+
bulk_link: 'Toggle selected "enabled"'
|
12
|
+
bulk_enable_deleted:
|
13
|
+
bulk_link: 'Enable selected "deleted"'
|
14
|
+
bulk_disable_deleted:
|
15
|
+
bulk_link: 'Disable selected "deleted"'
|
16
|
+
bulk_toggle_deleted:
|
17
|
+
bulk_link: 'Toggle selected "deleted"'
|
6
18
|
toggle:
|
7
19
|
enabled: '"%{attr}" enabled'
|
8
20
|
disabled: '"%{attr}" disabled'
|
@@ -3,6 +3,18 @@ ru:
|
|
3
3
|
actions:
|
4
4
|
toggle:
|
5
5
|
title: "Переключить"
|
6
|
+
bulk_enable_enabled:
|
7
|
+
bulk_link: 'Включить выбренные "enabled"'
|
8
|
+
bulk_disable_enabled:
|
9
|
+
bulk_link: 'Выключить выбренные "enabled"'
|
10
|
+
bulk_toggle_enabled:
|
11
|
+
bulk_link: 'Переключить выбренные "enabled"'
|
12
|
+
bulk_enable_deleted:
|
13
|
+
bulk_link: 'Включить выбренные "deleted"'
|
14
|
+
bulk_disable_deleted:
|
15
|
+
bulk_link: 'Выключить выбренные "deleted"'
|
16
|
+
bulk_toggle_deleted:
|
17
|
+
bulk_link: 'Переключить выбренные "deleted"'
|
6
18
|
toggle:
|
7
19
|
enabled: '"%{attr}" включен'
|
8
20
|
disabled: '"%{attr}" выключен'
|
@@ -19,29 +19,57 @@ module RailsAdmin
|
|
19
19
|
end
|
20
20
|
|
21
21
|
register_instance_option :controller do
|
22
|
-
|
22
|
+
proc do
|
23
|
+
ajax_link = Proc.new do |fv, on, badge|
|
24
|
+
render json: {
|
25
|
+
text: fv.html_safe,
|
26
|
+
href: toggle_path(model_name: @abstract_model, id: @object.id, method: @meth, on: on.to_s),
|
27
|
+
class: 'badge ' + badge,
|
28
|
+
}
|
29
|
+
end
|
23
30
|
if params['id'].present?
|
24
31
|
begin
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
if
|
29
|
-
if params[
|
30
|
-
|
32
|
+
@object = @abstract_model.model.find(params['id'])
|
33
|
+
@meth = params[:method]
|
34
|
+
@object.send(@meth + '=', params[:on] == '1' ? true : false)
|
35
|
+
if @object.save
|
36
|
+
if params['ajax'].present?
|
37
|
+
if params[:on] == '1'
|
38
|
+
ajax_link.call('✓', 0, 'badge-success')
|
39
|
+
else
|
40
|
+
ajax_link.call('✘', 1, 'badge-important')
|
41
|
+
end
|
31
42
|
else
|
32
|
-
|
43
|
+
if params[:on] == '1'
|
44
|
+
flash[:success] = I18n.t('admin.toggle.enabled', attr: @meth)
|
45
|
+
else
|
46
|
+
flash[:success] = I18n.t('admin.toggle.disabled', attr: @meth)
|
47
|
+
end
|
33
48
|
end
|
34
|
-
|
35
49
|
else
|
36
|
-
|
50
|
+
if params['ajax'].present?
|
51
|
+
render text: @object.errors.full_messages.join(', '), layout: false, status: 422
|
52
|
+
else
|
53
|
+
flash[:error] = @object.errors.full_messages.join(', ')
|
54
|
+
end
|
37
55
|
end
|
38
56
|
rescue Exception => e
|
39
|
-
|
57
|
+
if params['ajax'].present?
|
58
|
+
render text: I18n.t('admin.toggle.error', err: e.to_s), status: 422
|
59
|
+
else
|
60
|
+
flash[:error] = I18n.t('admin.toggle.error', err: e.to_s)
|
61
|
+
end
|
40
62
|
end
|
41
63
|
else
|
42
|
-
|
64
|
+
if params['ajax'].present?
|
65
|
+
render text: I18n.t('admin.toggle.no_id'), status: 422
|
66
|
+
else
|
67
|
+
flash[:error] = I18n.t('admin.toggle.no_id')
|
68
|
+
end
|
69
|
+
|
43
70
|
end
|
44
|
-
|
71
|
+
|
72
|
+
redirect_to :back unless params['ajax'].present?
|
45
73
|
end
|
46
74
|
end
|
47
75
|
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module RailsAdmin
|
2
|
+
module Config
|
3
|
+
module Actions
|
4
|
+
class BulkToggleBase < RailsAdmin::Config::Actions::Base
|
5
|
+
# Is the action acting on the root level (Example: /admin/contact)
|
6
|
+
register_instance_option :collection? do
|
7
|
+
true
|
8
|
+
end
|
9
|
+
|
10
|
+
register_instance_option :bulkable? do
|
11
|
+
true
|
12
|
+
end
|
13
|
+
|
14
|
+
register_instance_option :link_icon do
|
15
|
+
'icon-move'
|
16
|
+
end
|
17
|
+
|
18
|
+
register_instance_option :http_methods do
|
19
|
+
[:post]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class BulkToggle < RailsAdmin::Config::Actions::BulkToggleBase
|
24
|
+
register_instance_option :controller do
|
25
|
+
Proc.new do |klass|
|
26
|
+
@objects = list_entries(@model_config, :toggle)
|
27
|
+
@objects.each do |obj|
|
28
|
+
obj.send("#{@action.class.meth}=", !obj.send(@action.class.meth))
|
29
|
+
obj.save!
|
30
|
+
end
|
31
|
+
redirect_to :back
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
class BulkEnable < RailsAdmin::Config::Actions::BulkToggleBase
|
36
|
+
register_instance_option :controller do
|
37
|
+
Proc.new do |klass|
|
38
|
+
@objects = list_entries(@model_config, :toggle)
|
39
|
+
@objects.update_all(@action.class.meth => true)
|
40
|
+
redirect_to :back
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
class BulkDisable < RailsAdmin::Config::Actions::BulkToggleBase
|
45
|
+
register_instance_option :controller do
|
46
|
+
Proc.new do |klass|
|
47
|
+
@objects = list_entries(@model_config, :toggle)
|
48
|
+
@objects.update_all(@action.class.meth => false)
|
49
|
+
redirect_to :back
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -18,18 +18,19 @@ module RailsAdmin
|
|
18
18
|
bindings[:view].link_to(
|
19
19
|
fv.html_safe,
|
20
20
|
toggle_path(model_name: @abstract_model, id: bindings[:object].id, method: name, on: on.to_s),
|
21
|
-
method: :post,
|
22
|
-
class: 'badge ' + badge
|
21
|
+
# method: :post,
|
22
|
+
class: 'badge ' + badge,
|
23
|
+
onclick: 'var $t = $(this); $t.html("<i class=\"fa fa-spinner fa-spin\"></i>"); $.ajax({type: "POST", url: $t.attr("href"), data: {ajax:true}, success: function(r) { $t.attr("href", r.href); $t.attr("class", r.class); $t.text(r.text); $t.parent().attr("title", r.text); }, error: function(e) { alert(e.responseText); }}); return false;'
|
23
24
|
)
|
24
25
|
end
|
25
26
|
|
26
27
|
case value
|
27
28
|
when nil
|
28
|
-
g_link('
|
29
|
+
g_link('✘', 0, 'badge-important') + g_link('✓', 1, 'badge-success')
|
29
30
|
when false
|
30
|
-
g_link('
|
31
|
+
g_link('✘', 1, 'badge-important')
|
31
32
|
when true
|
32
|
-
g_link('
|
33
|
+
g_link('✓', 0, 'badge-success')
|
33
34
|
else
|
34
35
|
%{<span class="badge">-</span>}
|
35
36
|
end.html_safe
|
@@ -4,5 +4,21 @@ require 'rails_admin/config/actions'
|
|
4
4
|
require 'rails_admin/config/model'
|
5
5
|
|
6
6
|
require 'rails_admin_toggleable/action'
|
7
|
+
require 'rails_admin_toggleable/bulk_action'
|
7
8
|
require 'rails_admin_toggleable/field'
|
8
9
|
require 'rails_admin_toggleable/engine'
|
10
|
+
|
11
|
+
def define_bulk_toggle_method(type, meth)
|
12
|
+
u = "bulk_#{type}_#{meth}"
|
13
|
+
c = u.camelize
|
14
|
+
s = c.to_sym
|
15
|
+
Object.const_set(s, Class.new("RailsAdmin::Config::Actions::Bulk#{type.to_s.camelize}".constantize) {})
|
16
|
+
|
17
|
+
c.constantize.class_eval <<-RUBY, __FILE__, __LINE__+1
|
18
|
+
def self.meth
|
19
|
+
#{meth.to_sym.inspect}
|
20
|
+
end
|
21
|
+
RUBY
|
22
|
+
|
23
|
+
RailsAdmin::Config::Actions.register(u.to_sym, c.constantize)
|
24
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_admin_toggleable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gleb Tv
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-04-17 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Toggleable field for rails admin
|
14
14
|
email:
|
@@ -26,6 +26,7 @@ files:
|
|
26
26
|
- config/locales/ru.rails_admin_toggleable.yml
|
27
27
|
- lib/rails_admin_toggleable.rb
|
28
28
|
- lib/rails_admin_toggleable/action.rb
|
29
|
+
- lib/rails_admin_toggleable/bulk_action.rb
|
29
30
|
- lib/rails_admin_toggleable/engine.rb
|
30
31
|
- lib/rails_admin_toggleable/field.rb
|
31
32
|
- lib/rails_admin_toggleable/version.rb
|
@@ -49,7 +50,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
49
50
|
version: '0'
|
50
51
|
requirements: []
|
51
52
|
rubyforge_project:
|
52
|
-
rubygems_version: 2.
|
53
|
+
rubygems_version: 2.2.1
|
53
54
|
signing_key:
|
54
55
|
specification_version: 4
|
55
56
|
summary: Make any boolean field easily toggleable on\off from index view in rails
|